bentocache
Version:
Multi-tier cache module for Node.js. Redis, Upstash, CloudfareKV, File, in-memory and others drivers
34 lines (33 loc) • 1.17 kB
JavaScript
// src/drivers/file/cleaner.js
import { join } from "path";
import { readdir, unlink, readFile } from "fs/promises";
async function deleteFileIfExpired({ filePath, onError }) {
try {
const content = await readFile(filePath, "utf-8");
const [, expiresAt] = JSON.parse(content);
const expiry = new Date(expiresAt).getTime();
if (+expiry === -1) return;
if (expiry < Date.now()) await unlink(filePath);
} catch (error) {
if (error instanceof SyntaxError) {
if (onError) onError({ filePath, error });
await unlink(filePath).catch(() => {
});
return;
}
if (onError) onError({ filePath, error });
}
}
async function pruneExpiredFiles({ directory, onError }) {
const dirEntries = await readdir(directory, { recursive: true, withFileTypes: true });
for (const dirEntry of dirEntries) {
if (dirEntry.isDirectory()) continue;
const basePath = typeof dirEntry.parentPath === "string" ? dirEntry.parentPath : dirEntry.path;
const filePath = join(basePath, dirEntry.name);
await deleteFileIfExpired({ filePath, onError });
}
}
export {
pruneExpiredFiles
};
//# sourceMappingURL=chunk-UWZXJRIZ.js.map