import { startOfToday, getTime } from "date-fns"; import * as fse from "fs-extra"; import { HOME_DIR } from "./config"; export class Cache { private cacheFile: string; protected cacheInfo: Info; constructor(filename: string) { this.cacheFile = `./${HOME_DIR}/${filename}`; fse.ensureFileSync(this.cacheFile); } protected readFile = () => { return fse.readFileSync(this.cacheFile, "utf8"); }; protected writeToFile = () => { return fse.writeFile(this.cacheFile, JSON.stringify(this.cacheInfo), "utf8"); }; } export class LastBuiltEntryCache extends Cache { constructor() { super("last-build-entry-cache.json"); try { this.cacheInfo = JSON.parse(this.readFile()); } catch { this.cacheInfo = []; } } getEntry() { return this.cacheInfo; } refreshEntry(newEntry: string[]) { this.cacheInfo = newEntry; this.writeToFile(); } } export interface EntryCacheInfo { entryList: string[]; createTime: number; } export class DevEntryCache extends Cache { private currentTime: number; constructor() { super("dev-entry-cache.json"); this.currentTime = getTime(startOfToday()); try { this.cacheInfo = JSON.parse(this.readFile()); const { createTime } = this.cacheInfo; if (createTime && createTime < this.currentTime) { this.cacheInfo = { entryList: [], createTime: this.currentTime }; } } catch { this.cacheInfo = { entryList: [], createTime: this.currentTime }; } } getEntry() { return this.cacheInfo.entryList; } addEntry(entryName: string) { const entryList = this.cacheInfo.entryList; if (!entryList.includes(entryName)) { entryList.push(entryName); this.writeToFile(); } } } export const lastBuiltEntryCache = new LastBuiltEntryCache(); export const devEntryCache = new DevEntryCache();