{"version":3,"file":"dump/screenshot-restoration.mjs","sources":["../../../src/dump/screenshot-restoration.ts"],"sourcesContent":["import {\n  type ScreenshotRef,\n  type StoredImageRef,\n  normalizeImageUrlRef,\n  normalizeScreenshotRef,\n  reportImageAssetPath,\n} from './image-reference';\n\nexport type StoredImageReferenceResolver = (ref: StoredImageRef) => string;\n\nexport interface RestoredScreenshotReference {\n  readonly base64: string;\n  readonly capturedAt?: number;\n  readonly sourceRef: ScreenshotRef;\n}\n\n/** Create a resolver that fails loudly when an inline report asset is absent. */\nexport function createInlineImageResolver(\n  images: Readonly<Record<string, string>>,\n): StoredImageReferenceResolver {\n  return (ref) => {\n    const image = images[ref.id];\n    if (!image) {\n      throw new Error(`Missing inline report image \"${ref.id}\"`);\n    }\n    return image;\n  };\n}\n\n/**\n * Recursively restore image references in parsed data.\n * Replaces screenshot refs with lazy\n * { get base64() {...}, capturedAt, sourceRef } objects, and reference-image\n * URL refs with their URL strings. Screenshot refs are resolved on first use.\n */\nexport function restoreImageReferences(\n  data: unknown,\n  resolveImage: StoredImageReferenceResolver,\n): unknown {\n  if (typeof data === 'string') {\n    return data;\n  }\n\n  if (Array.isArray(data)) {\n    return data.map((item) => restoreImageReferences(item, resolveImage));\n  }\n\n  if (typeof data === 'object' && data !== null) {\n    const imageUrlRef = normalizeImageUrlRef(data);\n    if (imageUrlRef) {\n      return resolveImage(imageUrlRef);\n    }\n\n    const refLike = normalizeScreenshotRef(data);\n    if (refLike) {\n      let resolved: string | null = null;\n      const lazy: RestoredScreenshotReference = Object.defineProperties(\n        {} as RestoredScreenshotReference,\n        {\n          base64: {\n            get() {\n              if (resolved === null) {\n                resolved = resolveImage(refLike);\n              }\n              return resolved;\n            },\n            enumerable: true,\n          },\n          capturedAt: { value: refLike.capturedAt, enumerable: true },\n          sourceRef: { value: { ...refLike }, enumerable: true },\n        },\n      );\n      return lazy;\n    }\n\n    const result: Record<string, unknown> = {};\n    for (const [key, value] of Object.entries(data)) {\n      result[key] = restoreImageReferences(value, resolveImage);\n    }\n    return result;\n  }\n\n  return data;\n}\n\n/**\n * Restore file-backed report image references to browser-resolvable URLs.\n * Serialized paths are authoritative; legacy inline refs use the standard\n * screenshots directory and the MIME-derived extension.\n */\nexport function restoreReportImageReferences(\n  data: unknown,\n  reportUrl: string,\n): unknown {\n  const resolveReportImage = (ref: StoredImageRef): string => {\n    return new URL(reportImageAssetPath(ref), reportUrl).toString();\n  };\n  return restoreImageReferences(data, resolveReportImage);\n}\n"],"names":["createInlineImageResolver","images","ref","image","Error","restoreImageReferences","data","resolveImage","Array","item","imageUrlRef","normalizeImageUrlRef","refLike","normalizeScreenshotRef","resolved","lazy","Object","result","key","value","restoreReportImageReferences","reportUrl","resolveReportImage","URL","reportImageAssetPath"],"mappings":";AAiBO,SAASA,0BACdC,MAAwC;IAExC,OAAO,CAACC;QACN,MAAMC,QAAQF,MAAM,CAACC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAACC,OACH,MAAM,IAAIC,MAAM,CAAC,6BAA6B,EAAEF,IAAI,EAAE,CAAC,CAAC,CAAC;QAE3D,OAAOC;IACT;AACF;AAQO,SAASE,uBACdC,IAAa,EACbC,YAA0C;IAE1C,IAAI,AAAgB,YAAhB,OAAOD,MACT,OAAOA;IAGT,IAAIE,MAAM,OAAO,CAACF,OAChB,OAAOA,KAAK,GAAG,CAAC,CAACG,OAASJ,uBAAuBI,MAAMF;IAGzD,IAAI,AAAgB,YAAhB,OAAOD,QAAqBA,AAAS,SAATA,MAAe;QAC7C,MAAMI,cAAcC,qBAAqBL;QACzC,IAAII,aACF,OAAOH,aAAaG;QAGtB,MAAME,UAAUC,uBAAuBP;QACvC,IAAIM,SAAS;YACX,IAAIE,WAA0B;YAC9B,MAAMC,OAAoCC,OAAO,gBAAgB,CAC/D,CAAC,GACD;gBACE,QAAQ;oBACN;wBACE,IAAIF,AAAa,SAAbA,UACFA,WAAWP,aAAaK;wBAE1B,OAAOE;oBACT;oBACA,YAAY;gBACd;gBACA,YAAY;oBAAE,OAAOF,QAAQ,UAAU;oBAAE,YAAY;gBAAK;gBAC1D,WAAW;oBAAE,OAAO;wBAAE,GAAGA,OAAO;oBAAC;oBAAG,YAAY;gBAAK;YACvD;YAEF,OAAOG;QACT;QAEA,MAAME,SAAkC,CAAC;QACzC,KAAK,MAAM,CAACC,KAAKC,MAAM,IAAIH,OAAO,OAAO,CAACV,MACxCW,MAAM,CAACC,IAAI,GAAGb,uBAAuBc,OAAOZ;QAE9C,OAAOU;IACT;IAEA,OAAOX;AACT;AAOO,SAASc,6BACdd,IAAa,EACbe,SAAiB;IAEjB,MAAMC,qBAAqB,CAACpB,MACnB,IAAIqB,IAAIC,qBAAqBtB,MAAMmB,WAAW,QAAQ;IAE/D,OAAOhB,uBAAuBC,MAAMgB;AACtC"}