import fs from "node:fs"; import path from "node:path"; import { BACKUPS_DIR, ensureDirs } from "./paths.js"; import { timestampSlug, getAppVersion } from "./version.js"; const KEEP_BACKUPS = 5; export function makeBackupDir(label) { ensureDirs(); const ver = getAppVersion(); const slug = `${label}-${ver}-${timestampSlug()}`; const dir = path.join(BACKUPS_DIR, slug); fs.mkdirSync(dir, { recursive: true }); return dir; } export function backupFile(srcPath, destDir, destName = null) { if (!fs.existsSync(srcPath)) return null; const name = destName || path.basename(srcPath); const dest = path.join(destDir, name); fs.copyFileSync(srcPath, dest); return dest; } export function pruneOldBackups() { if (!fs.existsSync(BACKUPS_DIR)) return; const entries = fs.readdirSync(BACKUPS_DIR, { withFileTypes: true }) .filter((e) => e.isDirectory()) .map((e) => ({ name: e.name, full: path.join(BACKUPS_DIR, e.name), mtime: fs.statSync(path.join(BACKUPS_DIR, e.name)).mtimeMs })) .sort((a, b) => b.mtime - a.mtime); for (const old of entries.slice(KEEP_BACKUPS)) { try { fs.rmSync(old.full, { recursive: true, force: true }); } catch {} } }