@cratestack/validator-zod
v0.8.6
Published
An RpcLink for CrateStack's generated TypeScript RPC client that validates request input against per-op zod schemas.
Maintainers
Readme
@cratestack/validator-zod
An RpcLink
(issue #182) for CrateStack's generated
TypeScript RPC client (transport rpc schemas) that validates request.input against a per-op
zod schema before the call reaches the network — client-side validation with
the exact same schema shape your server-side procedure/model input already has, instead of hoping
the generated types alone catch a bad call at compile time.
Usage
import { createZodValidatorLink } from "@cratestack/validator-zod";
import { CratestackRpcRuntime } from "./generated/runtime"; // your project's generated client
import { z } from "zod";
const runtime = new CratestackRpcRuntime("https://api.example.com", {
links: [
createZodValidatorLink({
"model.Order.create": z.object({ total: z.number().positive() }),
}),
],
});Ops with no configured schema pass through unvalidated — this is opt-in per op, not a blanket
gate. On success, the schema's parsed output (defaults, z.coerce, transforms) becomes the
actual request input, not just a type-level assertion. On failure, the chain short-circuits —
the real network call never happens — and the call rejects the same way a server-side validation
failure would, with an RpcErrorBody carrying code: "invalid_argument".
