UNPKG

@mastra/schema-compat

Version:

Tool schema compatibility layer for Mastra.ai

208 lines (207 loc) • 9.02 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const require_rolldown_runtime = require("./rolldown-runtime-emK7D4bc.cjs"); let json_schema_to_zod = require("json-schema-to-zod"); json_schema_to_zod = require_rolldown_runtime.__toESM(json_schema_to_zod, 1); //#region src/json-to-zod.ts function parseObject(objectSchema, refs) { let properties = void 0; if (objectSchema.properties) if (!Object.keys(objectSchema.properties).length) properties = "z.object({})"; else { properties = "z.object({ "; properties += Object.keys(objectSchema.properties).map((key) => { const propSchema = objectSchema.properties[key]; let result = `${JSON.stringify(key)}: ${(0, json_schema_to_zod.parseSchema)(propSchema, { ...refs, path: [ ...refs.path, "properties", key ] })}`; if (refs.withJsdocs && typeof propSchema === "object") result = (0, json_schema_to_zod.addJsdocs)(propSchema, result); const hasDefault = typeof propSchema === "object" && propSchema.default !== void 0; const required = Array.isArray(objectSchema.required) ? objectSchema.required.includes(key) : typeof propSchema === "object" && propSchema.required === true; return !hasDefault && !required ? `${result}.optional()` : result; }).join(", "); properties += " })"; } const additionalProperties = objectSchema.additionalProperties !== void 0 && objectSchema.additionalProperties !== false ? (0, json_schema_to_zod.parseSchema)(objectSchema.additionalProperties, { ...refs, path: [...refs.path, "additionalProperties"] }) : void 0; let patternProperties = void 0; if (objectSchema.patternProperties) { const parsedPatternProperties = Object.fromEntries(Object.entries(objectSchema.patternProperties).map(([key, value]) => { return [key, (0, json_schema_to_zod.parseSchema)(value, { ...refs, path: [ ...refs.path, "patternProperties", key ] })]; }, {})); patternProperties = ""; if (properties) if (additionalProperties) patternProperties += `.catchall(z.union([${[...Object.values(parsedPatternProperties), additionalProperties].join(", ")}]))`; else if (Object.keys(parsedPatternProperties).length > 1) patternProperties += `.catchall(z.union([${Object.values(parsedPatternProperties).join(", ")}]))`; else patternProperties += `.catchall(${Object.values(parsedPatternProperties)})`; else if (additionalProperties) patternProperties += `z.record(z.union([${[...Object.values(parsedPatternProperties), additionalProperties].join(", ")}]))`; else if (Object.keys(parsedPatternProperties).length > 1) patternProperties += `z.record(z.union([${Object.values(parsedPatternProperties).join(", ")}]))`; else patternProperties += `z.record(${Object.values(parsedPatternProperties)})`; patternProperties += ".superRefine((value, ctx) => {\n"; patternProperties += "for (const key in value) {\n"; if (additionalProperties) if (objectSchema.properties) patternProperties += `let evaluated = [${Object.keys(objectSchema.properties).map((key) => JSON.stringify(key)).join(", ")}].includes(key)\n`; else patternProperties += `let evaluated = false\n`; for (const key in objectSchema.patternProperties) { patternProperties += "if (key.match(new RegExp(" + JSON.stringify(key) + "))) {\n"; if (additionalProperties) patternProperties += "evaluated = true\n"; patternProperties += "const result = " + parsedPatternProperties[key] + ".safeParse(value[key])\n"; patternProperties += "if (!result.success) {\n"; patternProperties += `ctx.addIssue({ path: [...ctx.path, key], code: 'custom', message: \`Invalid input: Key matching regex /\${key}/ must match schema\`, params: { issues: result.error.issues } })\n`; patternProperties += "}\n"; patternProperties += "}\n"; } if (additionalProperties) { patternProperties += "if (!evaluated) {\n"; patternProperties += "const result = " + additionalProperties + ".safeParse(value[key])\n"; patternProperties += "if (!result.success) {\n"; patternProperties += `ctx.addIssue({ path: [...ctx.path, key], code: 'custom', message: \`Invalid input: must match catchall schema\`, params: { issues: result.error.issues } })\n`; patternProperties += "}\n"; patternProperties += "}\n"; } patternProperties += "}\n"; patternProperties += "})"; } let output = properties ? patternProperties ? properties + patternProperties : additionalProperties ? additionalProperties === "z.never()" ? properties + ".strict()" : properties + `.catchall(${additionalProperties})` : properties : patternProperties ? patternProperties : additionalProperties ? `z.record(${additionalProperties})` : "z.record(z.any())"; if (json_schema_to_zod.its.an.anyOf(objectSchema)) output += `.and(${(0, json_schema_to_zod.parseAnyOf)({ ...objectSchema, anyOf: objectSchema.anyOf.map((x) => typeof x === "object" && !x.type && (x.properties || x.additionalProperties || x.patternProperties) ? { ...x, type: "object" } : x) }, refs)})`; if (json_schema_to_zod.its.a.oneOf(objectSchema)) output += `.and(${(0, json_schema_to_zod.parseOneOf)({ ...objectSchema, oneOf: objectSchema.oneOf.map((x) => typeof x === "object" && !x.type && (x.properties || x.additionalProperties || x.patternProperties) ? { ...x, type: "object" } : x) }, refs)})`; if (json_schema_to_zod.its.an.allOf(objectSchema)) output += `.and(${(0, json_schema_to_zod.parseAllOf)({ ...objectSchema, allOf: objectSchema.allOf.map((x) => typeof x === "object" && !x.type && (x.properties || x.additionalProperties || x.patternProperties) ? { ...x, type: "object" } : x) }, refs)})`; return output; } const parserOverride = (schema, refs) => { let parsed = ""; let seen = refs.seen.get(schema); if (json_schema_to_zod.its.an.anyOf(schema)) { const allObjects = schema.anyOf.every((item) => typeof item === "object" && json_schema_to_zod.its.an.object(item) && item.properties !== void 0); if (schema.anyOf.length > 1 && allObjects) { const propertiesWithConst = schema.anyOf.reduce((acc, item) => { if (typeof item === "object" && json_schema_to_zod.its.an.object(item)) { const propertyWithConst = Object.entries(item.properties ?? {}).filter(([_, value]) => typeof value === "object" && value?.const !== void 0); if (propertyWithConst?.length) { const ppties = propertyWithConst.map(([key, _]) => key); acc.push(ppties); } } return acc; }, []); if (propertiesWithConst.length === schema.anyOf.length) { if (seen) { if (seen.r !== void 0) return seen.r; if (refs.depth === void 0 || seen.n >= refs.depth) return "z.any()"; seen.n += 1; } else { seen = { r: void 0, n: 0 }; refs.seen.set(schema, seen); } const discriminators = propertiesWithConst.length > 0 && propertiesWithConst[0] ? propertiesWithConst.reduce((common, properties) => { return common.filter((prop) => properties.includes(prop)); }, propertiesWithConst[0]) : []; if (discriminators.length > 0) { const discriminator = discriminators[0]; if (discriminator) parsed = `z.discriminatedUnion("${discriminator}", [${schema.anyOf.map((schema, i) => (0, json_schema_to_zod.parseSchema)(schema, { ...refs, path: [ ...refs.path, "anyOf", i ] })).join(", ")}])`; } } } } else if (json_schema_to_zod.its.an.object(schema)) { if (seen) { if (seen.r !== void 0) return seen.r; if (refs.depth === void 0 || seen.n >= refs.depth) return "z.any()"; seen.n += 1; } else { seen = { r: void 0, n: 0 }; refs.seen.set(schema, seen); } parsed = parseObject(schema, refs); } if (parsed) { if (!refs.withoutDescribes) parsed = addDescribes(schema, parsed); if (!refs.withoutDefaults) parsed = addDefaults(schema, parsed); parsed = addAnnotations(schema, parsed); if (seen) seen.r = parsed; return parsed; } }; const addDescribes = (schema, parsed) => { if (schema.description) parsed += `.describe(${JSON.stringify(schema.description)})`; return parsed; }; const addDefaults = (schema, parsed) => { if (schema.default !== void 0) parsed += `.default(${JSON.stringify(schema.default)})`; return parsed; }; const addAnnotations = (schema, parsed) => { if (schema.readOnly) parsed += ".readonly()"; return parsed; }; function jsonSchemaToZod(schema, options = {}) { return (0, json_schema_to_zod.default)(schema, { ...options, parserOverride }).replace(/\.reduce<[^>]+>/g, ".reduce"); } //#endregion exports.jsonSchemaToZod = jsonSchemaToZod; Object.keys(json_schema_to_zod).forEach(function(k) { if (k !== "default" && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, { enumerable: true, get: function() { return json_schema_to_zod[k]; } }); }); //# sourceMappingURL=json-to-zod.cjs.map