UNPKG

json-schema-to-zod

Version:

Converts JSON schema objects or files into Zod schemas

47 lines (44 loc) 1.43 kB
import { parseSchema } from "./parsers/parseSchema.js"; import { expandJsdocs } from "./utils/jsdocs.js"; export const jsonSchemaToZod = (schema, { module, name, type, noImport, ...rest } = {}) => { if (type && (!name || module !== "esm")) { throw new Error("Option `type` requires `name` to be set and `module` to be `esm`"); } let result = parseSchema(schema, { module, name, path: [], seen: new Map(), ...rest, }); const jsdocs = rest.withJsdocs && typeof schema !== "boolean" && schema.description ? expandJsdocs(schema.description) : ""; if (module === "cjs") { result = `${jsdocs}module.exports = ${name ? `{ ${JSON.stringify(name)}: ${result} }` : result} `; if (!noImport) { result = `${jsdocs}const { z } = require("zod") ${result}`; } } else if (module === "esm") { result = `${jsdocs}export ${name ? `const ${name} =` : `default`} ${result} `; if (!noImport) { result = `import { z } from "zod" ${result}`; } } else if (name) { result = `${jsdocs}const ${name} = ${result}`; } if (type && name) { let typeName = typeof type === "string" ? type : `${name[0].toUpperCase()}${name.substring(1)}`; result += `export type ${typeName} = z.infer<typeof ${name}> `; } return result; };