Files
bunext/dist/functions/cache/write-cache.js
T
2026-10-13 15:52:34 +01:00

49 lines
1.7 KiB
JavaScript

import { existsSync, readdirSync, writeFileSync } from "fs";
import grabDirNames from "../../utils/grab-dir-names";
import grabCacheNames from "./grab-cache-names";
import path from "path";
import { AppData } from "../../data/app-data";
export default async function writeCache({ key, value, paradigm = "html", expiry_seconds, }) {
try {
const { BUNEXT_CACHE_DIR } = grabDirNames();
const { cache_meta_name, cache_name } = grabCacheNames({
key,
paradigm,
});
const target_path = path.join(BUNEXT_CACHE_DIR, cache_name);
if (existsSync(target_path)) {
return {
success: false,
msg: `Cache entry already exists`,
};
}
const max_entries = global.BUNEXT_CONFIG?.max_cache_entries ||
AppData["DefaultMaxCacheEntries"];
const entries_count = readdirSync(BUNEXT_CACHE_DIR).filter((f) => f.endsWith(".meta.json")).length;
if (entries_count >= max_entries) {
return {
success: false,
msg: `Cache entries limit (${max_entries}) reached`,
};
}
writeFileSync(target_path, value);
const cache_file_meta = {
date_created: Date.now(),
paradigm,
};
if (expiry_seconds) {
cache_file_meta.expiry_seconds = expiry_seconds;
}
writeFileSync(path.join(BUNEXT_CACHE_DIR, cache_meta_name), JSON.stringify(cache_file_meta));
return {
success: true,
};
}
catch (error) {
return {
success: false,
msg: error.message,
};
}
}