@zod-crawler/core
v1.2.0
Published
Infers a Zod v4 schema from a set of sampled JSON values.
Readme
@zod-crawler/core
Everyone has the right to resist occupation.
The schema-inference engine behind zod-crawler. Give it
a set of JSON samples and it infers a Zod v4 schema that fits all of them.
Pure functions, no I/O: fetching and caching samples is the CLI's job, not
this package's.
Usage
import { inferSchema } from "@zod-crawler/core";
const samples = {
a: { id: 1, status: "active", title: "Hello" },
b: { id: 2, status: "archived", title: "World", note: "optional field" },
};
const source = inferSchema(samples, "MySchema");import { z } from "zod";
const strOrUndefined = z
.union([
z.string().min(1),
z
.string()
.length(0)
.transform(() => undefined),
])
.optional();
export const MySchema = z.object({
id: z.int(),
status: z
.string()
.toLowerCase()
.pipe(z.enum(["active", "archived"])),
title: z.string(),
note: strOrUndefined,
});The keys of the samples object (a, b above) are arbitrary sample ids.
They're only used to scope per-field optionality and enum/date detection
across the sampled instances, and never show up in the generated schema.
See the docs site for the
useZodTransformers option, what field types inferSchema detects, finding
what to crawl next via findCrawlCandidates, and the rest of the package's
exports.
