Something went wrong. Try again.
A CLI for Semble link crawling and connection making
Something went wrong. Try again.
1.5 kB · 46 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import { mkdir, readFile, writeFile, access, chmod } from 'node:fs/promises';import type { AssemblinkerCache, LinkEntry, SourceRun } from './types.js';import { CACHE_PATH, CONFIG_DIR } from './paths.js';
const version = 1 as const;
export async function loadCache(): Promise<AssemblinkerCache> { try { await access(CACHE_PATH); const raw = await readFile(CACHE_PATH, 'utf8'); return JSON.parse(raw) as AssemblinkerCache; } catch { return createEmptyCache(); }}
export function createEmptyCache(): AssemblinkerCache { return { version, cards: {}, links: {}, runs: {} };}
export async function saveCache(cache: AssemblinkerCache): Promise<void> { await mkdir(CONFIG_DIR, { recursive: true, mode: 0o700 }); await writeFile(CACHE_PATH, JSON.stringify(cache, null, 2), { mode: 0o600 }); try { await chmod(CACHE_PATH, 0o600); } catch {}}
export function getLinkEntry(cache: AssemblinkerCache, url: string): LinkEntry | undefined { return cache.links[url];}
export function setLinkEntry(cache: AssemblinkerCache, url: string, entry: LinkEntry): void { cache.links[url] = entry;}
export function getSourceRun(cache: AssemblinkerCache, sourceUrl: string): SourceRun { if (!cache.runs[sourceUrl]) { cache.runs[sourceUrl] = { links: {}, updatedAt: new Date().toISOString() }; } return cache.runs[sourceUrl];}
export function isLinked(cache: AssemblinkerCache, sourceUrl: string, targetUrl: string): boolean { return !!cache.runs[sourceUrl]?.links[targetUrl]?.connected;}