import type { ContentFile } from "../content/mod.ts"; export class ContentList { /** path map */ private cl: Map; /** hash map */ private hl: Map; constructor() { this.cl = new Map(); this.hl = new Map(); } hasByHash(s: string) { return this.hl.has(s); } hasByPath(p: string) { return this.cl.has(p); } getByHash(s: string) { return this.hl.get(s); } getByPath(p: string) { return this.cl.get(p); } async set(c: ContentFile) { const path = c.path; const hash = await c.getHash(); this.cl.set(path, c); this.hl.set(hash, c); } /** delete content file */ async delete(c: ContentFile) { const hash = await c.getHash(); let r = true; r = this.cl.delete(c.path) && r; r = this.hl.delete(hash) && r; return r; } async deleteByPath(p: string) { const o = this.getByPath(p); if (o === undefined) return false; return await this.delete(o); } deleteByHash(s: string) { const o = this.getByHash(s); if (o === undefined) return false; let r = true; r = this.cl.delete(o.path) && r; r = this.hl.delete(s) && r; return r; } clear() { this.cl.clear(); this.hl.clear(); } getAll() { return [...this.cl.values()]; } }