mirror of
https://github.com/morluto/rea
synced 2026-10-27 06:33:32 -04:00
735c10059c
Move each error family out of domain/errors.ts into its own module (base, core, provider selection/adapter, browser observation, artifact, evidence, unknown registry, hopper, configuration) and relocate AnalysisErrorProjection to analysisErrorProjection. Migrate all 162 importers to the owning modules and delete errors.ts. No re-export shims; behavior is unchanged.
62 lines
1.8 KiB
TypeScript
62 lines
1.8 KiB
TypeScript
import {
|
|
parseEvidenceBundle,
|
|
serializeEvidenceBundle,
|
|
type EvidenceBundle,
|
|
} from "../domain/evidenceBundle.js";
|
|
import {
|
|
EvidenceFileError,
|
|
EvidenceIntegrityError,
|
|
} from "../domain/evidenceErrors.js";
|
|
import { err, ok, type Result } from "../domain/result.js";
|
|
import { parseProcessCapture } from "../domain/processCapture.js";
|
|
import { readJsonFile, writeTextFile } from "./JsonFiles.js";
|
|
|
|
type EvidenceReadFailure = EvidenceFileError | EvidenceIntegrityError;
|
|
type EvidenceWriteFailure = EvidenceFileError | EvidenceIntegrityError;
|
|
|
|
/** Read and validate an evidence bundle at the caller-supplied path. */
|
|
export const readEvidenceBundle = async (
|
|
path: string,
|
|
): Promise<Result<EvidenceBundle, EvidenceReadFailure>> => {
|
|
const loaded = await readJsonFile(path);
|
|
if (!loaded.ok) return loaded;
|
|
try {
|
|
const bundle = parseEvidenceBundle(loaded.value);
|
|
for (const record of bundle.records) {
|
|
if (record.predicate_type === "rea.process-capture")
|
|
parseProcessCapture(record.normalized_result);
|
|
}
|
|
return ok(bundle);
|
|
} catch (cause: unknown) {
|
|
return err(
|
|
new EvidenceIntegrityError("Evidence bundle validation failed", {
|
|
cause,
|
|
}),
|
|
);
|
|
}
|
|
};
|
|
|
|
/** Atomically write deterministic evidence JSON at the caller-supplied path. */
|
|
export const writeEvidenceBundle = async (
|
|
bundle: EvidenceBundle,
|
|
path: string,
|
|
overwrite: boolean,
|
|
): Promise<
|
|
Result<
|
|
{ readonly path: string; readonly bytes: number },
|
|
EvidenceWriteFailure
|
|
>
|
|
> => {
|
|
let encoded: string;
|
|
try {
|
|
encoded = serializeEvidenceBundle(bundle);
|
|
} catch (cause: unknown) {
|
|
return err(
|
|
new EvidenceIntegrityError("Evidence bundle validation failed", {
|
|
cause,
|
|
}),
|
|
);
|
|
}
|
|
return writeTextFile(encoded, path, overwrite);
|
|
};
|