Files
rea/experiments/atomic-codemode/fact-error.mjs

37 lines
1.1 KiB
JavaScript

import { projectAnalysisError } from "../../dist/domain/analysisErrorProjection.js";
import { z } from "zod";
// Shared expected-failure algebra; execution adapters do not depend on native protocols.
export class FactFailure extends Error {
constructor(code, message, details = {}) {
super(message);
this.code = code;
this.details = details;
}
}
export const projectFactFailure = (error, fallback = "analysis_failed") => ({
code:
error instanceof z.ZodError
? "invalid_input"
: typeof error?.code === "string" && error.code
? error.code
: fallback,
message: typeof error?.message === "string" ? error.message : String(error),
details: error?.details ?? {},
});
export const requireResult = (result, code = "provider_failure") => {
if (!result.ok) {
const failure = result.error?._tag
? projectAnalysisError(result.error)
: result.error;
throw new FactFailure(
failure?.code ?? code,
String(failure?.message ?? failure?.reason ?? failure),
{ failure },
);
}
return result.value;
};