import { ensureDir, exists, expandGlob, move } from "jsr:@std/fs@1"; await ensureDir("./data/plc/compacted"); export async function createCompactedIndex() { if (await exists("./data/plc/compacting")) throw new Error("compaction already running!"); const date = new Date(await Deno.readTextFile("./data/latest-date")); await move("./data/plc/live", "./data/plc/compacting"); await ensureDir("./data/plc/live"); const inputFiles = await Array.fromAsync( expandGlob("./data/plc/compacting/*") ); const process = new Deno.Command("zstd", { args: inputFiles.map((it) => `./data/plc/compacting/${it.name}`), cwd: Deno.cwd(), stdout: "piped", stdin: "null", stderr: "piped", }).spawn(); await process.status; // TODO: run zstd * const compactedDir = "./data/plc/compacted/" + date.toISOString().split("T")[0].replaceAll("-", ""); await move("./data/plc/compacting", compactedDir); await Promise.all( inputFiles.map((it) => Deno.remove(`${compactedDir}/${it.name}`)) ); } if (import.meta.main) { await createCompactedIndex(); }