UNPKG

json-schema-to-zod

Version:

Converts JSON schema objects or files into Zod schemas

51 lines (48 loc) 1.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.jsonSchemaToZod = void 0; const parseSchema_js_1 = require("./parsers/parseSchema.js"); const jsdocs_js_1 = require("./utils/jsdocs.js"); 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 = (0, parseSchema_js_1.parseSchema)(schema, { module, name, path: [], seen: new Map(), ...rest, }); const jsdocs = rest.withJsdocs && typeof schema !== "boolean" && schema.description ? (0, jsdocs_js_1.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; }; exports.jsonSchemaToZod = jsonSchemaToZod;