@antithrow/standard-schema
v1.0.1
Published
Bridge Standard Schema validators to antithrow Result/ResultAsync
Maintainers
Readme
Why
Schema validation libraries like Zod, Valibot, and
ArkType all implement the
Standard Schema spec.
@antithrow/standard-schema wraps any Standard Schema–conforming validator so validation
results come back as Result / ResultAsync instead of raw success/failure objects.
import { validate } from "@antithrow/standard-schema";
import { z } from "zod";
const result = await validate(z.string().email(), input);
result.match({
ok: (email) => console.log("valid:", email),
err: ({ issues }) => console.error("invalid:", issues),
});Installation
bun add @antithrow/standard-schemaUsage
Async validation (recommended)
validate always returns a ResultAsync because Standard Schema validators may be
synchronous or asynchronous — the caller doesn't need to know which.
import { validate } from "@antithrow/standard-schema";
const result = await validate(schema, input);
const value = result.unwrapOr(fallback);Synchronous validation
validateSync returns a plain Result. It throws TypeError if the schema's
validate method returns a Promise.
import { validateSync } from "@antithrow/standard-schema";
const result = validateSync(schema, input);
const value = result.unwrapOr(fallback);Error handling
Both functions catch exceptions thrown by the validator and wrap them in a
synthetic FailureResult with a single issue containing the error message.
This keeps the error type uniform — you always get FailureResult.
const result = await validate(throwingSchema, input);
// Err({ issues: [{ message: "..." }] })API Reference
| Export | Signature | Returns |
| -------------- | ------------------------------------------------------------------------ | ------------- |
| validate | (schema, value, options?) → ResultAsync<InferOutput<S>, FailureResult> | ResultAsync |
| validateSync | (schema, value, options?) → Result<InferOutput<S>, FailureResult> | Result |
