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.
- package/CHANGELOG.md +130 -0
- package/README.md +75 -5
- package/dist/application/externalReferencePersistenceService.d.ts +75 -0
- package/dist/application/externalReferencePersistenceService.js +182 -0
- package/dist/application/externalReferencePersistenceService.js.map +1 -0
- package/dist/application/referenceFidelityEvaluationService.d.ts +28 -0
- package/dist/application/referenceFidelityEvaluationService.js +45 -0
- package/dist/application/referenceFidelityEvaluationService.js.map +1 -0
- package/dist/artifacts/externalReferenceArtifactReader.d.ts +18 -0
- package/dist/artifacts/externalReferenceArtifactReader.js +35 -0
- package/dist/artifacts/externalReferenceArtifactReader.js.map +1 -0
- package/dist/artifacts/externalReferenceArtifactWriter.d.ts +44 -0
- package/dist/artifacts/externalReferenceArtifactWriter.js +77 -0
- package/dist/artifacts/externalReferenceArtifactWriter.js.map +1 -0
- package/dist/cli.js +1141 -1
- package/dist/cli.js.map +1 -1
- package/dist/domain/boundedAgentContext.d.ts +52 -0
- package/dist/domain/boundedAgentContext.js +44 -1
- package/dist/domain/boundedAgentContext.js.map +1 -1
- package/dist/domain/boundedAgentContextIdentity.d.ts +16 -6
- package/dist/domain/boundedAgentContextIdentity.js +22 -6
- package/dist/domain/boundedAgentContextIdentity.js.map +1 -1
- package/dist/domain/boundedAgentContextProjection.d.ts +11 -0
- package/dist/domain/boundedAgentContextProjection.js +32 -4
- package/dist/domain/boundedAgentContextProjection.js.map +1 -1
- package/dist/domain/comparison.d.ts +23 -1
- package/dist/domain/comparison.js +27 -1
- package/dist/domain/comparison.js.map +1 -1
- package/dist/domain/comparisonEngine.d.ts +34 -6
- package/dist/domain/comparisonEngine.js +48 -8
- package/dist/domain/comparisonEngine.js.map +1 -1
- package/dist/domain/diagnostics.d.ts +1 -1
- package/dist/domain/diagnostics.js +20 -0
- package/dist/domain/diagnostics.js.map +1 -1
- package/dist/domain/explicitState.d.ts +40 -0
- package/dist/domain/explicitState.js +54 -0
- package/dist/domain/explicitState.js.map +1 -0
- package/dist/domain/externalReference.d.ts +158 -0
- package/dist/domain/externalReference.js +167 -0
- package/dist/domain/externalReference.js.map +1 -0
- package/dist/domain/externalReferenceApplicability.d.ts +43 -0
- package/dist/domain/externalReferenceApplicability.js +52 -0
- package/dist/domain/externalReferenceApplicability.js.map +1 -0
- package/dist/domain/externalReferenceCompatibility.d.ts +40 -0
- package/dist/domain/externalReferenceCompatibility.js +48 -0
- package/dist/domain/externalReferenceCompatibility.js.map +1 -0
- package/dist/domain/externalReferenceFidelity.d.ts +171 -0
- package/dist/domain/externalReferenceFidelity.js +419 -0
- package/dist/domain/externalReferenceFidelity.js.map +1 -0
- package/dist/domain/externalReferenceIdentity.d.ts +38 -0
- package/dist/domain/externalReferenceIdentity.js +70 -0
- package/dist/domain/externalReferenceIdentity.js.map +1 -0
- package/dist/domain/externalReferenceImage.d.ts +35 -0
- package/dist/domain/externalReferenceImage.js +160 -0
- package/dist/domain/externalReferenceImage.js.map +1 -0
- package/dist/domain/externalReferenceRegionRelationships.d.ts +63 -0
- package/dist/domain/externalReferenceRegionRelationships.js +98 -0
- package/dist/domain/externalReferenceRegionRelationships.js.map +1 -0
- package/dist/domain/externalReferenceRegions.d.ts +65 -0
- package/dist/domain/externalReferenceRegions.js +105 -0
- package/dist/domain/externalReferenceRegions.js.map +1 -0
- package/dist/domain/externalReferenceRequirementIdentity.d.ts +12 -0
- package/dist/domain/externalReferenceRequirementIdentity.js +35 -0
- package/dist/domain/externalReferenceRequirementIdentity.js.map +1 -0
- package/dist/domain/externalReferenceRequirements.d.ts +215 -0
- package/dist/domain/externalReferenceRequirements.js +401 -0
- package/dist/domain/externalReferenceRequirements.js.map +1 -0
- package/dist/domain/externalReferenceRuntimeBinding.d.ts +146 -0
- package/dist/domain/externalReferenceRuntimeBinding.js +183 -0
- package/dist/domain/externalReferenceRuntimeBinding.js.map +1 -0
- package/dist/domain/identity.d.ts +11 -8
- package/dist/domain/identity.js +12 -8
- package/dist/domain/identity.js.map +1 -1
- package/dist/domain/referenceCorrectionIdentity.d.ts +40 -0
- package/dist/domain/referenceCorrectionIdentity.js +77 -0
- package/dist/domain/referenceCorrectionIdentity.js.map +1 -0
- package/dist/domain/referenceCorrectionWorkflow.d.ts +160 -0
- package/dist/domain/referenceCorrectionWorkflow.js +165 -0
- package/dist/domain/referenceCorrectionWorkflow.js.map +1 -0
- package/dist/domain/referenceFidelityProjection.d.ts +65 -0
- package/dist/domain/referenceFidelityProjection.js +135 -0
- package/dist/domain/referenceFidelityProjection.js.map +1 -0
- package/dist/domain/relationships.d.ts +43 -1
- package/dist/domain/relationships.js +15 -6
- package/dist/domain/relationships.js.map +1 -1
- package/dist/domain/schema.js +6 -0
- package/dist/domain/schema.js.map +1 -1
- package/dist/index.d.ts +43 -4
- package/dist/index.js +24 -2
- package/dist/index.js.map +1 -1
- package/dist/request/request.d.ts +12 -0
- package/dist/request/request.js +12 -0
- package/dist/request/request.js.map +1 -1
- package/dist/viewer/assets/index-CN_yb9Uf.css +1 -0
- package/dist/viewer/assets/index-D0pn5vP_.js +9 -0
- package/dist/viewer/icons/icon-192.png +0 -0
- package/dist/viewer/icons/icon-512.png +0 -0
- package/dist/viewer/index.html +15 -0
- package/dist/viewer/manifest.webmanifest +1 -0
- package/dist/viewer/registerSW.js +1 -0
- package/dist/viewer/sw.js +1 -0
- package/dist/viewer/workbox-9c191d2f.js +1 -0
- package/dist/viewerServer/context.d.ts +48 -0
- package/dist/viewerServer/context.js +60 -0
- package/dist/viewerServer/context.js.map +1 -0
- package/dist/viewerServer/evidence/classify.d.ts +59 -0
- package/dist/viewerServer/evidence/classify.js +124 -0
- package/dist/viewerServer/evidence/classify.js.map +1 -0
- package/dist/viewerServer/evidence/comparisonView.d.ts +28 -0
- package/dist/viewerServer/evidence/comparisonView.js +43 -0
- package/dist/viewerServer/evidence/comparisonView.js.map +1 -0
- package/dist/viewerServer/evidence/contextSourceView.d.ts +25 -0
- package/dist/viewerServer/evidence/contextSourceView.js +20 -0
- package/dist/viewerServer/evidence/contextSourceView.js.map +1 -0
- package/dist/viewerServer/evidence/discovery.d.ts +31 -0
- package/dist/viewerServer/evidence/discovery.js +78 -0
- package/dist/viewerServer/evidence/discovery.js.map +1 -0
- package/dist/viewerServer/evidence/evaluationView.d.ts +32 -0
- package/dist/viewerServer/evidence/evaluationView.js +50 -0
- package/dist/viewerServer/evidence/evaluationView.js.map +1 -0
- package/dist/viewerServer/evidence/handles.d.ts +21 -0
- package/dist/viewerServer/evidence/handles.js +43 -0
- package/dist/viewerServer/evidence/handles.js.map +1 -0
- package/dist/viewerServer/evidence/index.d.ts +41 -0
- package/dist/viewerServer/evidence/index.js +80 -0
- package/dist/viewerServer/evidence/index.js.map +1 -0
- package/dist/viewerServer/evidence/limits.d.ts +27 -0
- package/dist/viewerServer/evidence/limits.js +28 -0
- package/dist/viewerServer/evidence/limits.js.map +1 -0
- package/dist/viewerServer/evidence/linkedEvidence.d.ts +43 -0
- package/dist/viewerServer/evidence/linkedEvidence.js +151 -0
- package/dist/viewerServer/evidence/linkedEvidence.js.map +1 -0
- package/dist/viewerServer/evidence/mediaResolver.d.ts +16 -0
- package/dist/viewerServer/evidence/mediaResolver.js +85 -0
- package/dist/viewerServer/evidence/mediaResolver.js.map +1 -0
- package/dist/viewerServer/evidence/observationView.d.ts +29 -0
- package/dist/viewerServer/evidence/observationView.js +46 -0
- package/dist/viewerServer/evidence/observationView.js.map +1 -0
- package/dist/viewerServer/evidence/pathSafety.d.ts +11 -0
- package/dist/viewerServer/evidence/pathSafety.js +31 -0
- package/dist/viewerServer/evidence/pathSafety.js.map +1 -0
- package/dist/viewerServer/evidence/projection.d.ts +54 -0
- package/dist/viewerServer/evidence/projection.js +152 -0
- package/dist/viewerServer/evidence/projection.js.map +1 -0
- package/dist/viewerServer/evidence/referenceView.d.ts +133 -0
- package/dist/viewerServer/evidence/referenceView.js +169 -0
- package/dist/viewerServer/evidence/referenceView.js.map +1 -0
- package/dist/viewerServer/httpServer.d.ts +25 -0
- package/dist/viewerServer/httpServer.js +381 -0
- package/dist/viewerServer/httpServer.js.map +1 -0
- package/dist/viewerServer/openBrowser.d.ts +7 -0
- package/dist/viewerServer/openBrowser.js +32 -0
- package/dist/viewerServer/openBrowser.js.map +1 -0
- package/dist/viewerServer/port.d.ts +16 -0
- package/dist/viewerServer/port.js +19 -0
- package/dist/viewerServer/port.js.map +1 -0
- package/dist/viewerServer/viewerService.d.ts +57 -0
- package/dist/viewerServer/viewerService.js +83 -0
- package/dist/viewerServer/viewerService.js.map +1 -0
- package/docs/ARCHITECTURE.md +899 -11
- package/docs/CI_CD.md +82 -0
- package/docs/COMMANDS.md +369 -2
- package/docs/CONTRACTS.md +1353 -12
- package/docs/CURRENT_STATE.md +593 -15
- package/docs/DEVELOPMENT.md +29 -8
- package/docs/DOCUMENTATION_PRESERVATION_POLICY.md +21 -4
- package/docs/PROJECT_DESCRIPTION.md +564 -113
- package/docs/PROJECT_MILESTONES.md +550 -97
- package/docs/PROJECT_OVERVIEW.md +71 -14
- package/docs/QUICKSTART.md +13 -0
- package/docs/RELEASE.md +28 -21
- package/docs/ROADMAP.md +262 -99
- package/docs/SECURITY.md +142 -5
- package/docs/WORKFLOWS.md +423 -23
- package/docs/plans/v0.8-implementation-plan.md +655 -0
- package/docs/reports/v0.7-bounded-fidelity-context-prompt7.md +243 -0
- package/docs/reports/v0.7-implementation-completeness-documentation-reconciliation.md +497 -0
- package/docs/reports/v0.7-pre-release-readiness.md +337 -0
- package/docs/reports/v0.7-reference-binding-prompt5.md +223 -0
- package/docs/reports/v0.7-reference-compatibility-prompt4.md +234 -0
- package/docs/reports/v0.7-reference-correction-workflow-prompt8.md +222 -0
- package/docs/reports/v0.7-reference-fidelity-prompt6.md +216 -0
- package/docs/reports/v0.7-reference-foundation-prompt1.md +151 -0
- package/docs/reports/v0.7-reference-regions-prompt2.md +195 -0
- package/docs/reports/v0.7-reference-requirements-prompt3.md +217 -0
- package/docs/reports/v0.7-release-prep.md +423 -0
- package/docs/reports/v0.8-binding-fidelity-interaction-batch6.md +279 -0
- package/docs/reports/v0.8-bounded-context-correlation-batch7.md +233 -0
- package/docs/reports/v0.8-comparison-contract-inspection-batch4.md +279 -0
- package/docs/reports/v0.8-evidence-index-readers-batch2.md +247 -0
- package/docs/reports/v0.8-implementation-completeness-documentation-reconciliation.md +741 -0
- package/docs/reports/v0.8-integrated-viewer-acceptance-batch8.md +128 -0
- package/docs/reports/v0.8-observation-svg-inspection-batch3.md +223 -0
- package/docs/reports/v0.8-prerelease-readiness-cross-platform-security-code-rot.md +687 -0
- package/docs/reports/v0.8-reference-candidate-inspection-batch5.md +232 -0
- package/docs/reports/v0.8-viewer-runtime-pwa-batch1.md +278 -0
- 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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"}
|