@ai2070/l0
Version:
L0: The Missing Reliability Substrate for AI
76 lines • 2.33 kB
JavaScript
export function isEffectSchema(value) {
if (!value)
return false;
if (typeof value !== "object" && typeof value !== "function")
return false;
const schema = value;
return ("ast" in schema &&
schema.ast !== undefined &&
typeof schema.pipe === "function");
}
export function isEffectParseError(error) {
if (!error || typeof error !== "object")
return false;
const err = error;
return err._tag === "ParseError" && "issue" in err;
}
export function isEffectRight(result) {
return result._tag === "Right";
}
export function isEffectLeft(result) {
return result._tag === "Left";
}
let effectAdapter = null;
export function registerEffectSchemaAdapter(adapter) {
effectAdapter = adapter;
}
export function unregisterEffectSchemaAdapter() {
effectAdapter = null;
}
export function hasEffectSchemaAdapter() {
return effectAdapter !== null;
}
export function getEffectSchemaAdapter() {
if (!effectAdapter) {
throw new Error("Effect Schema adapter not registered. Call registerEffectSchemaAdapter() first.");
}
return effectAdapter;
}
export function safeDecodeEffectSchema(schema, data) {
const adapter = getEffectSchemaAdapter();
const result = adapter.decodeUnknownEither(schema, data);
if (isEffectRight(result)) {
return { success: true, data: result.right };
}
else {
return { success: false, error: result.left };
}
}
export function getEffectErrorMessage(error) {
if (effectAdapter) {
return effectAdapter.formatError(error);
}
return error.message || "Schema validation failed";
}
export function wrapEffectSchema(schema) {
return {
_tag: "effect",
parse(data) {
const adapter = getEffectSchemaAdapter();
return adapter.decodeUnknownSync(schema, data);
},
safeParse(data) {
const result = safeDecodeEffectSchema(schema, data);
if (result.success) {
return { success: true, data: result.data };
}
else {
return {
success: false,
error: new Error(getEffectErrorMessage(result.error)),
};
}
},
};
}
//# sourceMappingURL=effectSchemaCompat.js.map