{"version":3,"file":"snapshot.mjs","names":[],"sources":["../../src/cli/snapshot.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport interface SyncSnapshot {\n  parentRef: string;\n  timestamp: string;\n  files: Record<string, string>;\n}\n\nconst SNAPSHOT_DIR = \".bos\";\nconst SNAPSHOT_FILE = \"sync-snapshot.json\";\n\nfunction snapshotPath(projectDir: string): string {\n  return join(projectDir, SNAPSHOT_DIR, SNAPSHOT_FILE);\n}\n\nexport async function readSnapshot(projectDir: string): Promise<SyncSnapshot | null> {\n  const path = snapshotPath(projectDir);\n  if (!existsSync(path)) {\n    return null;\n  }\n  try {\n    const content = readFileSync(path, \"utf-8\");\n    return JSON.parse(content) as SyncSnapshot;\n  } catch {\n    return null;\n  }\n}\n\nexport async function writeSnapshot(\n  projectDir: string,\n  data: { parentRef: string; files: Record<string, string> },\n): Promise<void> {\n  const dir = join(projectDir, SNAPSHOT_DIR);\n  if (!existsSync(dir)) {\n    mkdirSync(dir, { recursive: true });\n  }\n\n  const snapshot: SyncSnapshot = {\n    parentRef: data.parentRef,\n    timestamp: new Date().toISOString(),\n    files: data.files,\n  };\n\n  writeFileSync(snapshotPath(projectDir), `${JSON.stringify(snapshot, null, 2)}\\n`);\n}\n"],"mappings":";;;;AASA,MAAM,eAAe;AACrB,MAAM,gBAAgB;AAEtB,SAAS,aAAa,YAA4B;AAChD,QAAO,KAAK,YAAY,cAAc,cAAc;;AAGtD,eAAsB,aAAa,YAAkD;CACnF,MAAM,OAAO,aAAa,WAAW;AACrC,KAAI,CAAC,WAAW,KAAK,CACnB,QAAO;AAET,KAAI;EACF,MAAM,UAAU,aAAa,MAAM,QAAQ;AAC3C,SAAO,KAAK,MAAM,QAAQ;SACpB;AACN,SAAO;;;AAIX,eAAsB,cACpB,YACA,MACe;CACf,MAAM,MAAM,KAAK,YAAY,aAAa;AAC1C,KAAI,CAAC,WAAW,IAAI,CAClB,WAAU,KAAK,EAAE,WAAW,MAAM,CAAC;CAGrC,MAAM,WAAyB;EAC7B,WAAW,KAAK;EAChB,4BAAW,IAAI,MAAM,EAAC,aAAa;EACnC,OAAO,KAAK;EACb;AAED,eAAc,aAAa,WAAW,EAAE,GAAG,KAAK,UAAU,UAAU,MAAM,EAAE,CAAC,IAAI"}