@ai2070/l0
Version:
L0: The Missing Reliability Substrate for AI
85 lines (84 loc) • 2.31 kB
JavaScript
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 !== void 0 && typeof schema.pipe === "function";
}
function isEffectParseError(error) {
if (!error || typeof error !== "object") return false;
const err = error;
return err._tag === "ParseError" && "issue" in err;
}
function isEffectRight(result) {
return result._tag === "Right";
}
function isEffectLeft(result) {
return result._tag === "Left";
}
let effectAdapter = null;
function registerEffectSchemaAdapter(adapter) {
effectAdapter = adapter;
}
function unregisterEffectSchemaAdapter() {
effectAdapter = null;
}
function hasEffectSchemaAdapter() {
return effectAdapter !== null;
}
function getEffectSchemaAdapter() {
if (!effectAdapter) {
throw new Error(
"Effect Schema adapter not registered. Call registerEffectSchemaAdapter() first."
);
}
return effectAdapter;
}
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 };
}
}
function getEffectErrorMessage(error) {
if (effectAdapter) {
return effectAdapter.formatError(error);
}
return error.message || "Schema validation failed";
}
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))
};
}
}
};
}
export {
getEffectErrorMessage,
getEffectSchemaAdapter,
hasEffectSchemaAdapter,
isEffectLeft,
isEffectParseError,
isEffectRight,
isEffectSchema,
registerEffectSchemaAdapter,
safeDecodeEffectSchema,
unregisterEffectSchemaAdapter,
wrapEffectSchema
};
//# sourceMappingURL=effectSchemaCompat.js.map