my-frontend-observer 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/README.md +75 -5
  3. package/dist/application/externalReferencePersistenceService.d.ts +75 -0
  4. package/dist/application/externalReferencePersistenceService.js +182 -0
  5. package/dist/application/externalReferencePersistenceService.js.map +1 -0
  6. package/dist/application/referenceFidelityEvaluationService.d.ts +28 -0
  7. package/dist/application/referenceFidelityEvaluationService.js +45 -0
  8. package/dist/application/referenceFidelityEvaluationService.js.map +1 -0
  9. package/dist/artifacts/externalReferenceArtifactReader.d.ts +18 -0
  10. package/dist/artifacts/externalReferenceArtifactReader.js +35 -0
  11. package/dist/artifacts/externalReferenceArtifactReader.js.map +1 -0
  12. package/dist/artifacts/externalReferenceArtifactWriter.d.ts +44 -0
  13. package/dist/artifacts/externalReferenceArtifactWriter.js +77 -0
  14. package/dist/artifacts/externalReferenceArtifactWriter.js.map +1 -0
  15. package/dist/cli.js +1141 -1
  16. package/dist/cli.js.map +1 -1
  17. package/dist/domain/boundedAgentContext.d.ts +52 -0
  18. package/dist/domain/boundedAgentContext.js +44 -1
  19. package/dist/domain/boundedAgentContext.js.map +1 -1
  20. package/dist/domain/boundedAgentContextIdentity.d.ts +16 -6
  21. package/dist/domain/boundedAgentContextIdentity.js +22 -6
  22. package/dist/domain/boundedAgentContextIdentity.js.map +1 -1
  23. package/dist/domain/boundedAgentContextProjection.d.ts +11 -0
  24. package/dist/domain/boundedAgentContextProjection.js +32 -4
  25. package/dist/domain/boundedAgentContextProjection.js.map +1 -1
  26. package/dist/domain/comparison.d.ts +23 -1
  27. package/dist/domain/comparison.js +27 -1
  28. package/dist/domain/comparison.js.map +1 -1
  29. package/dist/domain/comparisonEngine.d.ts +34 -6
  30. package/dist/domain/comparisonEngine.js +48 -8
  31. package/dist/domain/comparisonEngine.js.map +1 -1
  32. package/dist/domain/diagnostics.d.ts +1 -1
  33. package/dist/domain/diagnostics.js +20 -0
  34. package/dist/domain/diagnostics.js.map +1 -1
  35. package/dist/domain/explicitState.d.ts +40 -0
  36. package/dist/domain/explicitState.js +54 -0
  37. package/dist/domain/explicitState.js.map +1 -0
  38. package/dist/domain/externalReference.d.ts +158 -0
  39. package/dist/domain/externalReference.js +167 -0
  40. package/dist/domain/externalReference.js.map +1 -0
  41. package/dist/domain/externalReferenceApplicability.d.ts +43 -0
  42. package/dist/domain/externalReferenceApplicability.js +52 -0
  43. package/dist/domain/externalReferenceApplicability.js.map +1 -0
  44. package/dist/domain/externalReferenceCompatibility.d.ts +40 -0
  45. package/dist/domain/externalReferenceCompatibility.js +48 -0
  46. package/dist/domain/externalReferenceCompatibility.js.map +1 -0
  47. package/dist/domain/externalReferenceFidelity.d.ts +171 -0
  48. package/dist/domain/externalReferenceFidelity.js +419 -0
  49. package/dist/domain/externalReferenceFidelity.js.map +1 -0
  50. package/dist/domain/externalReferenceIdentity.d.ts +38 -0
  51. package/dist/domain/externalReferenceIdentity.js +70 -0
  52. package/dist/domain/externalReferenceIdentity.js.map +1 -0
  53. package/dist/domain/externalReferenceImage.d.ts +35 -0
  54. package/dist/domain/externalReferenceImage.js +160 -0
  55. package/dist/domain/externalReferenceImage.js.map +1 -0
  56. package/dist/domain/externalReferenceRegionRelationships.d.ts +63 -0
  57. package/dist/domain/externalReferenceRegionRelationships.js +98 -0
  58. package/dist/domain/externalReferenceRegionRelationships.js.map +1 -0
  59. package/dist/domain/externalReferenceRegions.d.ts +65 -0
  60. package/dist/domain/externalReferenceRegions.js +105 -0
  61. package/dist/domain/externalReferenceRegions.js.map +1 -0
  62. package/dist/domain/externalReferenceRequirementIdentity.d.ts +12 -0
  63. package/dist/domain/externalReferenceRequirementIdentity.js +35 -0
  64. package/dist/domain/externalReferenceRequirementIdentity.js.map +1 -0
  65. package/dist/domain/externalReferenceRequirements.d.ts +215 -0
  66. package/dist/domain/externalReferenceRequirements.js +401 -0
  67. package/dist/domain/externalReferenceRequirements.js.map +1 -0
  68. package/dist/domain/externalReferenceRuntimeBinding.d.ts +146 -0
  69. package/dist/domain/externalReferenceRuntimeBinding.js +183 -0
  70. package/dist/domain/externalReferenceRuntimeBinding.js.map +1 -0
  71. package/dist/domain/identity.d.ts +11 -8
  72. package/dist/domain/identity.js +12 -8
  73. package/dist/domain/identity.js.map +1 -1
  74. package/dist/domain/referenceCorrectionIdentity.d.ts +40 -0
  75. package/dist/domain/referenceCorrectionIdentity.js +77 -0
  76. package/dist/domain/referenceCorrectionIdentity.js.map +1 -0
  77. package/dist/domain/referenceCorrectionWorkflow.d.ts +160 -0
  78. package/dist/domain/referenceCorrectionWorkflow.js +165 -0
  79. package/dist/domain/referenceCorrectionWorkflow.js.map +1 -0
  80. package/dist/domain/referenceFidelityProjection.d.ts +65 -0
  81. package/dist/domain/referenceFidelityProjection.js +135 -0
  82. package/dist/domain/referenceFidelityProjection.js.map +1 -0
  83. package/dist/domain/relationships.d.ts +43 -1
  84. package/dist/domain/relationships.js +15 -6
  85. package/dist/domain/relationships.js.map +1 -1
  86. package/dist/domain/schema.js +6 -0
  87. package/dist/domain/schema.js.map +1 -1
  88. package/dist/index.d.ts +43 -4
  89. package/dist/index.js +24 -2
  90. package/dist/index.js.map +1 -1
  91. package/dist/request/request.d.ts +12 -0
  92. package/dist/request/request.js +12 -0
  93. package/dist/request/request.js.map +1 -1
  94. package/dist/viewer/assets/index-CN_yb9Uf.css +1 -0
  95. package/dist/viewer/assets/index-D0pn5vP_.js +9 -0
  96. package/dist/viewer/icons/icon-192.png +0 -0
  97. package/dist/viewer/icons/icon-512.png +0 -0
  98. package/dist/viewer/index.html +15 -0
  99. package/dist/viewer/manifest.webmanifest +1 -0
  100. package/dist/viewer/registerSW.js +1 -0
  101. package/dist/viewer/sw.js +1 -0
  102. package/dist/viewer/workbox-9c191d2f.js +1 -0
  103. package/dist/viewerServer/context.d.ts +48 -0
  104. package/dist/viewerServer/context.js +60 -0
  105. package/dist/viewerServer/context.js.map +1 -0
  106. package/dist/viewerServer/evidence/classify.d.ts +59 -0
  107. package/dist/viewerServer/evidence/classify.js +124 -0
  108. package/dist/viewerServer/evidence/classify.js.map +1 -0
  109. package/dist/viewerServer/evidence/comparisonView.d.ts +28 -0
  110. package/dist/viewerServer/evidence/comparisonView.js +43 -0
  111. package/dist/viewerServer/evidence/comparisonView.js.map +1 -0
  112. package/dist/viewerServer/evidence/contextSourceView.d.ts +25 -0
  113. package/dist/viewerServer/evidence/contextSourceView.js +20 -0
  114. package/dist/viewerServer/evidence/contextSourceView.js.map +1 -0
  115. package/dist/viewerServer/evidence/discovery.d.ts +31 -0
  116. package/dist/viewerServer/evidence/discovery.js +78 -0
  117. package/dist/viewerServer/evidence/discovery.js.map +1 -0
  118. package/dist/viewerServer/evidence/evaluationView.d.ts +32 -0
  119. package/dist/viewerServer/evidence/evaluationView.js +50 -0
  120. package/dist/viewerServer/evidence/evaluationView.js.map +1 -0
  121. package/dist/viewerServer/evidence/handles.d.ts +21 -0
  122. package/dist/viewerServer/evidence/handles.js +43 -0
  123. package/dist/viewerServer/evidence/handles.js.map +1 -0
  124. package/dist/viewerServer/evidence/index.d.ts +41 -0
  125. package/dist/viewerServer/evidence/index.js +80 -0
  126. package/dist/viewerServer/evidence/index.js.map +1 -0
  127. package/dist/viewerServer/evidence/limits.d.ts +27 -0
  128. package/dist/viewerServer/evidence/limits.js +28 -0
  129. package/dist/viewerServer/evidence/limits.js.map +1 -0
  130. package/dist/viewerServer/evidence/linkedEvidence.d.ts +43 -0
  131. package/dist/viewerServer/evidence/linkedEvidence.js +151 -0
  132. package/dist/viewerServer/evidence/linkedEvidence.js.map +1 -0
  133. package/dist/viewerServer/evidence/mediaResolver.d.ts +16 -0
  134. package/dist/viewerServer/evidence/mediaResolver.js +85 -0
  135. package/dist/viewerServer/evidence/mediaResolver.js.map +1 -0
  136. package/dist/viewerServer/evidence/observationView.d.ts +29 -0
  137. package/dist/viewerServer/evidence/observationView.js +46 -0
  138. package/dist/viewerServer/evidence/observationView.js.map +1 -0
  139. package/dist/viewerServer/evidence/pathSafety.d.ts +11 -0
  140. package/dist/viewerServer/evidence/pathSafety.js +31 -0
  141. package/dist/viewerServer/evidence/pathSafety.js.map +1 -0
  142. package/dist/viewerServer/evidence/projection.d.ts +54 -0
  143. package/dist/viewerServer/evidence/projection.js +152 -0
  144. package/dist/viewerServer/evidence/projection.js.map +1 -0
  145. package/dist/viewerServer/evidence/referenceView.d.ts +133 -0
  146. package/dist/viewerServer/evidence/referenceView.js +169 -0
  147. package/dist/viewerServer/evidence/referenceView.js.map +1 -0
  148. package/dist/viewerServer/httpServer.d.ts +25 -0
  149. package/dist/viewerServer/httpServer.js +381 -0
  150. package/dist/viewerServer/httpServer.js.map +1 -0
  151. package/dist/viewerServer/openBrowser.d.ts +7 -0
  152. package/dist/viewerServer/openBrowser.js +32 -0
  153. package/dist/viewerServer/openBrowser.js.map +1 -0
  154. package/dist/viewerServer/port.d.ts +16 -0
  155. package/dist/viewerServer/port.js +19 -0
  156. package/dist/viewerServer/port.js.map +1 -0
  157. package/dist/viewerServer/viewerService.d.ts +57 -0
  158. package/dist/viewerServer/viewerService.js +83 -0
  159. package/dist/viewerServer/viewerService.js.map +1 -0
  160. package/docs/ARCHITECTURE.md +899 -11
  161. package/docs/CI_CD.md +82 -0
  162. package/docs/COMMANDS.md +369 -2
  163. package/docs/CONTRACTS.md +1353 -12
  164. package/docs/CURRENT_STATE.md +593 -15
  165. package/docs/DEVELOPMENT.md +29 -8
  166. package/docs/DOCUMENTATION_PRESERVATION_POLICY.md +21 -4
  167. package/docs/PROJECT_DESCRIPTION.md +564 -113
  168. package/docs/PROJECT_MILESTONES.md +550 -97
  169. package/docs/PROJECT_OVERVIEW.md +71 -14
  170. package/docs/QUICKSTART.md +13 -0
  171. package/docs/RELEASE.md +28 -21
  172. package/docs/ROADMAP.md +262 -99
  173. package/docs/SECURITY.md +142 -5
  174. package/docs/WORKFLOWS.md +423 -23
  175. package/docs/plans/v0.8-implementation-plan.md +655 -0
  176. package/docs/reports/v0.7-bounded-fidelity-context-prompt7.md +243 -0
  177. package/docs/reports/v0.7-implementation-completeness-documentation-reconciliation.md +497 -0
  178. package/docs/reports/v0.7-pre-release-readiness.md +337 -0
  179. package/docs/reports/v0.7-reference-binding-prompt5.md +223 -0
  180. package/docs/reports/v0.7-reference-compatibility-prompt4.md +234 -0
  181. package/docs/reports/v0.7-reference-correction-workflow-prompt8.md +222 -0
  182. package/docs/reports/v0.7-reference-fidelity-prompt6.md +216 -0
  183. package/docs/reports/v0.7-reference-foundation-prompt1.md +151 -0
  184. package/docs/reports/v0.7-reference-regions-prompt2.md +195 -0
  185. package/docs/reports/v0.7-reference-requirements-prompt3.md +217 -0
  186. package/docs/reports/v0.7-release-prep.md +423 -0
  187. package/docs/reports/v0.8-binding-fidelity-interaction-batch6.md +279 -0
  188. package/docs/reports/v0.8-bounded-context-correlation-batch7.md +233 -0
  189. package/docs/reports/v0.8-comparison-contract-inspection-batch4.md +279 -0
  190. package/docs/reports/v0.8-evidence-index-readers-batch2.md +247 -0
  191. package/docs/reports/v0.8-implementation-completeness-documentation-reconciliation.md +741 -0
  192. package/docs/reports/v0.8-integrated-viewer-acceptance-batch8.md +128 -0
  193. package/docs/reports/v0.8-observation-svg-inspection-batch3.md +223 -0
  194. package/docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md +687 -0
  195. package/docs/reports/v0.8-reference-candidate-inspection-batch5.md +232 -0
  196. package/docs/reports/v0.8-viewer-runtime-pwa-batch1.md +278 -0
  197. package/package.json +12 -5
@@ -0,0 +1,35 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { isValidExternalReferenceArtifact } from '../domain/externalReference.js';
3
+ /**
4
+ * Narrow canonical reader counterpart to
5
+ * `externalReferenceArtifactWriter.ts#writeExternalReferenceArtifact`: reads
6
+ * one `manifest.json`, parses it, and validates it through the same
7
+ * `isValidExternalReferenceArtifact` structural gate the writer itself uses -
8
+ * never a second validator. Read-only: never mutates the file, never resolves
9
+ * the sibling image file's bytes (an 'imported' manifest's `image.path` field
10
+ * is returned as-is for the caller to resolve if it needs the bytes).
11
+ */
12
+ export async function readExternalReferenceArtifact(manifestPath) {
13
+ let raw;
14
+ try {
15
+ raw = await readFile(manifestPath, 'utf8');
16
+ }
17
+ catch (err) {
18
+ const message = err instanceof Error ? err.message : String(err);
19
+ return { ok: false, reason: `failed to read external-reference artifact manifest at "${manifestPath}": ${message}` };
20
+ }
21
+ let parsed;
22
+ try {
23
+ parsed = JSON.parse(raw);
24
+ }
25
+ catch (err) {
26
+ const message = err instanceof Error ? err.message : String(err);
27
+ return { ok: false, reason: `external-reference artifact manifest at "${manifestPath}" is not valid JSON: ${message}` };
28
+ }
29
+ const validation = isValidExternalReferenceArtifact(parsed);
30
+ if (!validation.valid) {
31
+ return { ok: false, reason: `external-reference artifact manifest at "${manifestPath}" failed structural validation: ${validation.reason}` };
32
+ }
33
+ return { ok: true, artifact: parsed };
34
+ }
35
+ //# sourceMappingURL=externalReferenceArtifactReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"externalReferenceArtifactReader.js","sourceRoot":"","sources":["../../src/artifacts/externalReferenceArtifactReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAIlF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,YAAoB;IACtE,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,2DAA2D,YAAY,MAAM,OAAO,EAAE,EAAE,CAAC;IACvH,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,4CAA4C,YAAY,wBAAwB,OAAO,EAAE,EAAE,CAAC;IAC1H,CAAC;IAED,MAAM,UAAU,GAAG,gCAAgC,CAAC,MAAM,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,4CAA4C,YAAY,mCAAmC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;IAC/I,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAmC,EAAE,CAAC;AACrE,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { ExternalReferenceArtifact } from '../domain/externalReference.js';
2
+ import type { Diagnostic } from '../domain/diagnostics.js';
3
+ export declare const EXTERNAL_REFERENCE_MANIFEST_FILENAME = "manifest.json";
4
+ /**
5
+ * Observer-owned result of persisting one ExternalReferenceArtifact. Mirrors
6
+ * PersistedObservationResult/PersistedComparisonResult's shape but is its own
7
+ * type: an 'imported' artifact's directory has one owned image file; an
8
+ * 'approved' artifact's directory has only manifest.json.
9
+ */
10
+ export type PersistedExternalReferenceResult = {
11
+ ok: true;
12
+ artifactRoot: string;
13
+ manifestPath: string;
14
+ imagePath?: string;
15
+ } | {
16
+ ok: false;
17
+ diagnostics: Diagnostic[];
18
+ };
19
+ export interface WriteExternalReferenceArtifactOptions {
20
+ /** Base directory that `outputLocation` is resolved against. Defaults to `process.cwd()`. */
21
+ cwd?: string;
22
+ }
23
+ /**
24
+ * Persists one already-assembled, already-validated ExternalReferenceArtifact
25
+ * as one portable artifact directory: `<outputLocation>/<referenceId>/`.
26
+ * For an 'imported' artifact (which owns its reference image), `imageBytes`
27
+ * is required and is written before manifest.json, mirroring
28
+ * `artifacts/artifactWriter.ts#writeObservationArtifact`'s media-before-manifest
29
+ * discipline. For an 'approved' artifact (which only ever carries a
30
+ * `sourceReference` back to the imported artifact that owns the image - see
31
+ * `domain/externalReference.ts`), no image bytes are written at all, mirroring
32
+ * `artifacts/comparisonArtifactWriter.ts#writeComparisonArtifact`'s
33
+ * manifest-only, no-media-copy persistence.
34
+ *
35
+ * `referenceId` is guaranteed fresh per persisted instance (see
36
+ * `domain/externalReferenceIdentity.ts#buildExternalReferenceInstanceIdentity`'s
37
+ * "never collides" contract), so each write targets its own unique
38
+ * subdirectory; an existing directory at that path is treated as a genuine
39
+ * collision and rejected rather than overwritten - no persisted evidence,
40
+ * imported or approved, is ever destructively replaced. Writing happens in a
41
+ * sibling temporary directory first, and the whole temporary directory is
42
+ * only exposed under its real name via one atomic rename.
43
+ */
44
+ export declare function writeExternalReferenceArtifact(artifact: ExternalReferenceArtifact, imageBytes: Uint8Array | undefined, outputLocation: string, options?: WriteExternalReferenceArtifactOptions): Promise<PersistedExternalReferenceResult>;
@@ -0,0 +1,77 @@
1
+ import { mkdir, writeFile, rename, rm, access } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { isValidExternalReferenceArtifact, isImportedExternalReferenceArtifact } from '../domain/externalReference.js';
4
+ import { DIAGNOSTIC_SEVERITY } from '../domain/diagnostics.js';
5
+ export const EXTERNAL_REFERENCE_MANIFEST_FILENAME = 'manifest.json';
6
+ function writeFailure(message, details) {
7
+ const diagnostic = {
8
+ code: 'artifact-write-failure',
9
+ severity: DIAGNOSTIC_SEVERITY['artifact-write-failure'],
10
+ message,
11
+ ...(details === undefined ? {} : { details }),
12
+ };
13
+ return { ok: false, diagnostics: [diagnostic] };
14
+ }
15
+ async function pathExists(candidate) {
16
+ return access(candidate).then(() => true, () => false);
17
+ }
18
+ /**
19
+ * Persists one already-assembled, already-validated ExternalReferenceArtifact
20
+ * as one portable artifact directory: `<outputLocation>/<referenceId>/`.
21
+ * For an 'imported' artifact (which owns its reference image), `imageBytes`
22
+ * is required and is written before manifest.json, mirroring
23
+ * `artifacts/artifactWriter.ts#writeObservationArtifact`'s media-before-manifest
24
+ * discipline. For an 'approved' artifact (which only ever carries a
25
+ * `sourceReference` back to the imported artifact that owns the image - see
26
+ * `domain/externalReference.ts`), no image bytes are written at all, mirroring
27
+ * `artifacts/comparisonArtifactWriter.ts#writeComparisonArtifact`'s
28
+ * manifest-only, no-media-copy persistence.
29
+ *
30
+ * `referenceId` is guaranteed fresh per persisted instance (see
31
+ * `domain/externalReferenceIdentity.ts#buildExternalReferenceInstanceIdentity`'s
32
+ * "never collides" contract), so each write targets its own unique
33
+ * subdirectory; an existing directory at that path is treated as a genuine
34
+ * collision and rejected rather than overwritten - no persisted evidence,
35
+ * imported or approved, is ever destructively replaced. Writing happens in a
36
+ * sibling temporary directory first, and the whole temporary directory is
37
+ * only exposed under its real name via one atomic rename.
38
+ */
39
+ export async function writeExternalReferenceArtifact(artifact, imageBytes, outputLocation, options = {}) {
40
+ const validation = isValidExternalReferenceArtifact(artifact);
41
+ if (!validation.valid) {
42
+ return writeFailure(`refusing to persist an invalid ExternalReferenceArtifact: ${validation.reason}`);
43
+ }
44
+ if (artifact.lifecycle.state === 'imported' && imageBytes === undefined) {
45
+ return writeFailure('refusing to persist an "imported" ExternalReferenceArtifact without its image bytes');
46
+ }
47
+ const cwd = options.cwd ?? process.cwd();
48
+ const outputRoot = path.resolve(cwd, outputLocation);
49
+ const finalRoot = path.join(outputRoot, artifact.referenceId);
50
+ const tempRoot = path.join(outputRoot, `.tmp-${artifact.referenceId}`);
51
+ if (await pathExists(finalRoot)) {
52
+ return writeFailure(`an external-reference artifact already exists at "${artifact.referenceId}"; refusing to overwrite it`, {
53
+ artifactRoot: finalRoot,
54
+ });
55
+ }
56
+ try {
57
+ await rm(tempRoot, { recursive: true, force: true });
58
+ await mkdir(tempRoot, { recursive: true });
59
+ if (isImportedExternalReferenceArtifact(artifact)) {
60
+ await writeFile(path.join(tempRoot, artifact.image.path), imageBytes);
61
+ }
62
+ await writeFile(path.join(tempRoot, EXTERNAL_REFERENCE_MANIFEST_FILENAME), JSON.stringify(artifact, null, 2), 'utf8');
63
+ await rename(tempRoot, finalRoot);
64
+ return {
65
+ ok: true,
66
+ artifactRoot: finalRoot,
67
+ manifestPath: path.join(finalRoot, EXTERNAL_REFERENCE_MANIFEST_FILENAME),
68
+ ...(isImportedExternalReferenceArtifact(artifact) ? { imagePath: path.join(finalRoot, artifact.image.path) } : {}),
69
+ };
70
+ }
71
+ catch (err) {
72
+ await rm(tempRoot, { recursive: true, force: true }).catch(() => undefined);
73
+ const message = err instanceof Error ? err.message : String(err);
74
+ return writeFailure(`failed to persist external-reference artifact: ${message}`);
75
+ }
76
+ }
77
+ //# sourceMappingURL=externalReferenceArtifactWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"externalReferenceArtifactWriter.js","sourceRoot":"","sources":["../../src/artifacts/externalReferenceArtifactWriter.ts"],"names":[],"mappings":"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"}