@mastra/schema-compat 0.11.8 → 0.11.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @mastra/schema-compat
2
2
 
3
+ ## 0.11.9
4
+
5
+ ### Patch Changes
6
+
7
+ - Fix discriminatedUnion schema information lost when json schema is converted to zod ([#10764](https://github.com/mastra-ai/mastra/pull/10764))
8
+
9
+ ## 0.11.9-alpha.0
10
+
11
+ ### Patch Changes
12
+
13
+ - Fix discriminatedUnion schema information lost when json schema is converted to zod ([#10764](https://github.com/mastra-ai/mastra/pull/10764))
14
+
3
15
  ## 0.11.8
4
16
 
5
17
  ### Patch Changes
@@ -0,0 +1,268 @@
1
+ 'use strict';
2
+
3
+ var jsonSchemaToZodOriginal = require('json-schema-to-zod');
4
+
5
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
+
7
+ var jsonSchemaToZodOriginal__default = /*#__PURE__*/_interopDefault(jsonSchemaToZodOriginal);
8
+
9
+ // src/json-to-zod.ts
10
+ function parseObject(objectSchema, refs) {
11
+ let properties = void 0;
12
+ if (objectSchema.properties) {
13
+ if (!Object.keys(objectSchema.properties).length) {
14
+ properties = "z.object({})";
15
+ } else {
16
+ properties = "z.object({ ";
17
+ properties += Object.keys(objectSchema.properties).map((key) => {
18
+ const propSchema = objectSchema.properties[key];
19
+ let result = `${JSON.stringify(key)}: ${jsonSchemaToZodOriginal.parseSchema(propSchema, {
20
+ ...refs,
21
+ path: [...refs.path, "properties", key]
22
+ })}`;
23
+ if (refs.withJsdocs && typeof propSchema === "object") {
24
+ result = jsonSchemaToZodOriginal.addJsdocs(propSchema, result);
25
+ }
26
+ const hasDefault = typeof propSchema === "object" && propSchema.default !== void 0;
27
+ const required = Array.isArray(objectSchema.required) ? objectSchema.required.includes(key) : typeof propSchema === "object" && propSchema.required === true;
28
+ const optional = !hasDefault && !required;
29
+ return optional ? `${result}.optional()` : result;
30
+ }).join(", ");
31
+ properties += " })";
32
+ }
33
+ }
34
+ const additionalProperties = objectSchema.additionalProperties !== void 0 && objectSchema.additionalProperties !== false ? jsonSchemaToZodOriginal.parseSchema(objectSchema.additionalProperties, {
35
+ ...refs,
36
+ path: [...refs.path, "additionalProperties"]
37
+ }) : void 0;
38
+ let patternProperties = void 0;
39
+ if (objectSchema.patternProperties) {
40
+ const parsedPatternProperties = Object.fromEntries(
41
+ Object.entries(objectSchema.patternProperties).map(([key, value]) => {
42
+ return [
43
+ key,
44
+ jsonSchemaToZodOriginal.parseSchema(value, {
45
+ ...refs,
46
+ path: [...refs.path, "patternProperties", key]
47
+ })
48
+ ];
49
+ }, {})
50
+ );
51
+ patternProperties = "";
52
+ if (properties) {
53
+ if (additionalProperties) {
54
+ patternProperties += `.catchall(z.union([${[
55
+ ...Object.values(parsedPatternProperties),
56
+ additionalProperties
57
+ ].join(", ")}]))`;
58
+ } else if (Object.keys(parsedPatternProperties).length > 1) {
59
+ patternProperties += `.catchall(z.union([${Object.values(parsedPatternProperties).join(", ")}]))`;
60
+ } else {
61
+ patternProperties += `.catchall(${Object.values(parsedPatternProperties)})`;
62
+ }
63
+ } else {
64
+ if (additionalProperties) {
65
+ patternProperties += `z.record(z.union([${[
66
+ ...Object.values(parsedPatternProperties),
67
+ additionalProperties
68
+ ].join(", ")}]))`;
69
+ } else if (Object.keys(parsedPatternProperties).length > 1) {
70
+ patternProperties += `z.record(z.union([${Object.values(parsedPatternProperties).join(", ")}]))`;
71
+ } else {
72
+ patternProperties += `z.record(${Object.values(parsedPatternProperties)})`;
73
+ }
74
+ }
75
+ patternProperties += ".superRefine((value, ctx) => {\n";
76
+ patternProperties += "for (const key in value) {\n";
77
+ if (additionalProperties) {
78
+ if (objectSchema.properties) {
79
+ patternProperties += `let evaluated = [${Object.keys(objectSchema.properties).map((key) => JSON.stringify(key)).join(", ")}].includes(key)
80
+ `;
81
+ } else {
82
+ patternProperties += `let evaluated = false
83
+ `;
84
+ }
85
+ }
86
+ for (const key in objectSchema.patternProperties) {
87
+ patternProperties += "if (key.match(new RegExp(" + JSON.stringify(key) + "))) {\n";
88
+ if (additionalProperties) {
89
+ patternProperties += "evaluated = true\n";
90
+ }
91
+ patternProperties += "const result = " + parsedPatternProperties[key] + ".safeParse(value[key])\n";
92
+ patternProperties += "if (!result.success) {\n";
93
+ patternProperties += `ctx.addIssue({
94
+ path: [...ctx.path, key],
95
+ code: 'custom',
96
+ message: \`Invalid input: Key matching regex /\${key}/ must match schema\`,
97
+ params: {
98
+ issues: result.error.issues
99
+ }
100
+ })
101
+ `;
102
+ patternProperties += "}\n";
103
+ patternProperties += "}\n";
104
+ }
105
+ if (additionalProperties) {
106
+ patternProperties += "if (!evaluated) {\n";
107
+ patternProperties += "const result = " + additionalProperties + ".safeParse(value[key])\n";
108
+ patternProperties += "if (!result.success) {\n";
109
+ patternProperties += `ctx.addIssue({
110
+ path: [...ctx.path, key],
111
+ code: 'custom',
112
+ message: \`Invalid input: must match catchall schema\`,
113
+ params: {
114
+ issues: result.error.issues
115
+ }
116
+ })
117
+ `;
118
+ patternProperties += "}\n";
119
+ patternProperties += "}\n";
120
+ }
121
+ patternProperties += "}\n";
122
+ patternProperties += "})";
123
+ }
124
+ 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())";
125
+ if (jsonSchemaToZodOriginal.its.an.anyOf(objectSchema)) {
126
+ output += `.and(${jsonSchemaToZodOriginal.parseAnyOf(
127
+ {
128
+ ...objectSchema,
129
+ anyOf: objectSchema.anyOf.map(
130
+ (x) => typeof x === "object" && !x.type && (x.properties || x.additionalProperties || x.patternProperties) ? { ...x, type: "object" } : x
131
+ )
132
+ },
133
+ refs
134
+ )})`;
135
+ }
136
+ if (jsonSchemaToZodOriginal.its.a.oneOf(objectSchema)) {
137
+ output += `.and(${jsonSchemaToZodOriginal.parseOneOf(
138
+ {
139
+ ...objectSchema,
140
+ oneOf: objectSchema.oneOf.map(
141
+ (x) => typeof x === "object" && !x.type && (x.properties || x.additionalProperties || x.patternProperties) ? { ...x, type: "object" } : x
142
+ )
143
+ },
144
+ refs
145
+ )})`;
146
+ }
147
+ if (jsonSchemaToZodOriginal.its.an.allOf(objectSchema)) {
148
+ output += `.and(${jsonSchemaToZodOriginal.parseAllOf(
149
+ {
150
+ ...objectSchema,
151
+ allOf: objectSchema.allOf.map(
152
+ (x) => typeof x === "object" && !x.type && (x.properties || x.additionalProperties || x.patternProperties) ? { ...x, type: "object" } : x
153
+ )
154
+ },
155
+ refs
156
+ )})`;
157
+ }
158
+ return output;
159
+ }
160
+ var parserOverride = (schema, refs) => {
161
+ let parsed = "";
162
+ let seen = refs.seen.get(schema);
163
+ if (jsonSchemaToZodOriginal.its.an.anyOf(schema)) {
164
+ const allObjects = schema.anyOf.every(
165
+ (item) => typeof item === "object" && jsonSchemaToZodOriginal.its.an.object(item) && item.properties !== void 0
166
+ );
167
+ if (schema.anyOf.length > 1 && allObjects) {
168
+ const propertiesWithConst = schema.anyOf.reduce((acc, item) => {
169
+ if (typeof item === "object" && jsonSchemaToZodOriginal.its.an.object(item)) {
170
+ const propertyWithConst = Object.entries(item.properties ?? {}).filter(
171
+ ([_, value]) => typeof value === "object" && value?.const !== void 0
172
+ );
173
+ if (propertyWithConst?.length) {
174
+ const ppties = propertyWithConst.map(([key, _]) => key);
175
+ acc.push(ppties);
176
+ }
177
+ }
178
+ return acc;
179
+ }, []);
180
+ if (propertiesWithConst.length === schema.anyOf.length) {
181
+ if (seen) {
182
+ if (seen.r !== void 0) {
183
+ return seen.r;
184
+ }
185
+ if (refs.depth === void 0 || seen.n >= refs.depth) {
186
+ return "z.any()";
187
+ }
188
+ seen.n += 1;
189
+ } else {
190
+ seen = { r: void 0, n: 0 };
191
+ refs.seen.set(schema, seen);
192
+ }
193
+ const discriminators = propertiesWithConst.length > 0 && propertiesWithConst[0] ? propertiesWithConst.reduce((common, properties) => {
194
+ return common.filter((prop) => properties.includes(prop));
195
+ }, propertiesWithConst[0]) : [];
196
+ if (discriminators.length > 0) {
197
+ const discriminator = discriminators[0];
198
+ if (discriminator) {
199
+ parsed = `z.discriminatedUnion("${discriminator}", [${schema.anyOf.map(
200
+ (schema2, i) => jsonSchemaToZodOriginal.parseSchema(schema2, {
201
+ ...refs,
202
+ path: [...refs.path, "anyOf", i]
203
+ })
204
+ ).join(", ")}])`;
205
+ }
206
+ }
207
+ }
208
+ }
209
+ } else if (jsonSchemaToZodOriginal.its.an.object(schema)) {
210
+ if (seen) {
211
+ if (seen.r !== void 0) {
212
+ return seen.r;
213
+ }
214
+ if (refs.depth === void 0 || seen.n >= refs.depth) {
215
+ return "z.any()";
216
+ }
217
+ seen.n += 1;
218
+ } else {
219
+ seen = { r: void 0, n: 0 };
220
+ refs.seen.set(schema, seen);
221
+ }
222
+ parsed = parseObject(schema, refs);
223
+ }
224
+ if (parsed) {
225
+ if (!refs.withoutDescribes) {
226
+ parsed = addDescribes(schema, parsed);
227
+ }
228
+ if (!refs.withoutDefaults) {
229
+ parsed = addDefaults(schema, parsed);
230
+ }
231
+ parsed = addAnnotations(schema, parsed);
232
+ if (seen) {
233
+ seen.r = parsed;
234
+ }
235
+ return parsed;
236
+ }
237
+ };
238
+ var addDescribes = (schema, parsed) => {
239
+ if (schema.description) {
240
+ parsed += `.describe(${JSON.stringify(schema.description)})`;
241
+ }
242
+ return parsed;
243
+ };
244
+ var addDefaults = (schema, parsed) => {
245
+ if (schema.default !== void 0) {
246
+ parsed += `.default(${JSON.stringify(schema.default)})`;
247
+ }
248
+ return parsed;
249
+ };
250
+ var addAnnotations = (schema, parsed) => {
251
+ if (schema.readOnly) {
252
+ parsed += ".readonly()";
253
+ }
254
+ return parsed;
255
+ };
256
+ function jsonSchemaToZod(schema, options = {}) {
257
+ return jsonSchemaToZodOriginal__default.default(schema, { ...options, parserOverride });
258
+ }
259
+
260
+ exports.jsonSchemaToZod = jsonSchemaToZod;
261
+ Object.keys(jsonSchemaToZodOriginal).forEach(function (k) {
262
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
263
+ enumerable: true,
264
+ get: function () { return jsonSchemaToZodOriginal[k]; }
265
+ });
266
+ });
267
+ //# sourceMappingURL=json-to-zod.cjs.map
268
+ //# sourceMappingURL=json-to-zod.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/json-to-zod.ts"],"names":["parseSchema","addJsdocs","its","parseAnyOf","parseOneOf","parseAllOf","schema","jsonSchemaToZodOriginal"],"mappings":"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","file":"json-to-zod.cjs","sourcesContent":["import type { JsonSchema, JsonSchemaObject, Options, Refs } from 'json-schema-to-zod';\nimport jsonSchemaToZodOriginal, {\n addJsdocs,\n its,\n parseAllOf,\n parseAnyOf,\n parseOneOf,\n parseSchema,\n} from 'json-schema-to-zod';\n\nfunction parseObject(objectSchema: JsonSchemaObject & { type: 'object' }, refs: Refs): string {\n let properties: string | undefined = undefined;\n\n if (objectSchema.properties) {\n if (!Object.keys(objectSchema.properties).length) {\n properties = 'z.object({})';\n } else {\n properties = 'z.object({ ';\n\n properties += Object.keys(objectSchema.properties)\n .map(key => {\n const propSchema = objectSchema.properties![key];\n\n let result = `${JSON.stringify(key)}: ${parseSchema(propSchema!, {\n ...refs,\n path: [...refs.path, 'properties', key],\n })}`;\n\n if (refs.withJsdocs && typeof propSchema === 'object') {\n result = addJsdocs(propSchema, result);\n }\n\n const hasDefault = typeof propSchema === 'object' && propSchema.default !== undefined;\n\n const required = Array.isArray(objectSchema.required)\n ? objectSchema.required.includes(key)\n : typeof propSchema === 'object' && propSchema.required === true;\n\n const optional = !hasDefault && !required;\n\n return optional ? `${result}.optional()` : result;\n })\n .join(', ');\n\n properties += ' })';\n }\n }\n\n const additionalProperties =\n objectSchema.additionalProperties !== undefined && objectSchema.additionalProperties !== false\n ? parseSchema(objectSchema.additionalProperties, {\n ...refs,\n path: [...refs.path, 'additionalProperties'],\n })\n : undefined;\n\n let patternProperties: string | undefined = undefined;\n\n if (objectSchema.patternProperties) {\n const parsedPatternProperties = Object.fromEntries(\n Object.entries(objectSchema.patternProperties).map(([key, value]) => {\n return [\n key,\n parseSchema(value, {\n ...refs,\n path: [...refs.path, 'patternProperties', key],\n }),\n ];\n }, {}),\n );\n\n patternProperties = '';\n\n if (properties) {\n if (additionalProperties) {\n patternProperties += `.catchall(z.union([${[\n ...Object.values(parsedPatternProperties),\n additionalProperties,\n ].join(', ')}]))`;\n } else if (Object.keys(parsedPatternProperties).length > 1) {\n patternProperties += `.catchall(z.union([${Object.values(parsedPatternProperties).join(', ')}]))`;\n } else {\n patternProperties += `.catchall(${Object.values(parsedPatternProperties)})`;\n }\n } else {\n if (additionalProperties) {\n patternProperties += `z.record(z.union([${[\n ...Object.values(parsedPatternProperties),\n additionalProperties,\n ].join(', ')}]))`;\n } else if (Object.keys(parsedPatternProperties).length > 1) {\n patternProperties += `z.record(z.union([${Object.values(parsedPatternProperties).join(', ')}]))`;\n } else {\n patternProperties += `z.record(${Object.values(parsedPatternProperties)})`;\n }\n }\n\n patternProperties += '.superRefine((value, ctx) => {\\n';\n\n patternProperties += 'for (const key in value) {\\n';\n\n if (additionalProperties) {\n if (objectSchema.properties) {\n patternProperties += `let evaluated = [${Object.keys(objectSchema.properties)\n .map(key => JSON.stringify(key))\n .join(', ')}].includes(key)\\n`;\n } else {\n patternProperties += `let evaluated = false\\n`;\n }\n }\n\n for (const key in objectSchema.patternProperties) {\n patternProperties += 'if (key.match(new RegExp(' + JSON.stringify(key) + '))) {\\n';\n if (additionalProperties) {\n patternProperties += 'evaluated = true\\n';\n }\n patternProperties += 'const result = ' + parsedPatternProperties[key] + '.safeParse(value[key])\\n';\n patternProperties += 'if (!result.success) {\\n';\n\n patternProperties += `ctx.addIssue({\n path: [...ctx.path, key],\n code: 'custom',\n message: \\`Invalid input: Key matching regex /\\${key}/ must match schema\\`,\n params: {\n issues: result.error.issues\n }\n })\\n`;\n\n patternProperties += '}\\n';\n patternProperties += '}\\n';\n }\n\n if (additionalProperties) {\n patternProperties += 'if (!evaluated) {\\n';\n patternProperties += 'const result = ' + additionalProperties + '.safeParse(value[key])\\n';\n patternProperties += 'if (!result.success) {\\n';\n\n patternProperties += `ctx.addIssue({\n path: [...ctx.path, key],\n code: 'custom',\n message: \\`Invalid input: must match catchall schema\\`,\n params: {\n issues: result.error.issues\n }\n })\\n`;\n\n patternProperties += '}\\n';\n patternProperties += '}\\n';\n }\n patternProperties += '}\\n';\n patternProperties += '})';\n }\n\n let output = properties\n ? patternProperties\n ? properties + patternProperties\n : additionalProperties\n ? additionalProperties === 'z.never()'\n ? properties + '.strict()'\n : properties + `.catchall(${additionalProperties})`\n : properties\n : patternProperties\n ? patternProperties\n : additionalProperties\n ? `z.record(${additionalProperties})`\n : 'z.record(z.any())';\n\n if (its.an.anyOf(objectSchema)) {\n output += `.and(${parseAnyOf(\n {\n ...objectSchema,\n anyOf: objectSchema.anyOf.map(x =>\n typeof x === 'object' && !x.type && (x.properties || x.additionalProperties || x.patternProperties)\n ? { ...x, type: 'object' }\n : x,\n ) as any,\n },\n refs,\n )})`;\n }\n\n if (its.a.oneOf(objectSchema)) {\n output += `.and(${parseOneOf(\n {\n ...objectSchema,\n oneOf: objectSchema.oneOf.map(x =>\n typeof x === 'object' && !x.type && (x.properties || x.additionalProperties || x.patternProperties)\n ? { ...x, type: 'object' }\n : x,\n ) as any,\n },\n refs,\n )})`;\n }\n\n if (its.an.allOf(objectSchema)) {\n output += `.and(${parseAllOf(\n {\n ...objectSchema,\n allOf: objectSchema.allOf.map(x =>\n typeof x === 'object' && !x.type && (x.properties || x.additionalProperties || x.patternProperties)\n ? { ...x, type: 'object' }\n : x,\n ) as any,\n },\n refs,\n )})`;\n }\n\n return output;\n}\n\nconst parserOverride = (schema: JsonSchemaObject, refs: Refs) => {\n let parsed = '';\n let seen = refs.seen.get(schema);\n if (its.an.anyOf(schema)) {\n const allObjects = schema.anyOf.every(\n item => typeof item === 'object' && its.an.object(item) && item.properties !== undefined,\n );\n if (schema.anyOf.length > 1 && allObjects) {\n const propertiesWithConst: string[][] = schema.anyOf.reduce((acc, item) => {\n if (typeof item === 'object' && its.an.object(item)) {\n const propertyWithConst = Object.entries(item.properties ?? {}).filter(\n ([_, value]) => typeof value === 'object' && (value as any)?.const !== undefined,\n );\n if (propertyWithConst?.length) {\n const ppties = propertyWithConst.map(([key, _]) => key);\n acc.push(ppties);\n }\n }\n return acc;\n }, [] as string[][]);\n\n if (propertiesWithConst.length === schema.anyOf.length) {\n if (seen) {\n if (seen.r !== undefined) {\n return seen.r;\n }\n\n if (refs.depth === undefined || seen.n >= refs.depth) {\n return 'z.any()';\n }\n\n seen.n += 1;\n } else {\n seen = { r: undefined, n: 0 };\n refs.seen.set(schema, seen);\n }\n\n const discriminators =\n propertiesWithConst.length > 0 && propertiesWithConst[0]\n ? propertiesWithConst.reduce((common, properties) => {\n return common.filter(prop => properties.includes(prop));\n }, propertiesWithConst[0])\n : [];\n\n if (discriminators.length > 0) {\n const discriminator = discriminators[0];\n if (discriminator) {\n parsed = `z.discriminatedUnion(\"${discriminator}\", [${schema.anyOf\n .map((schema, i) =>\n parseSchema(schema, {\n ...refs,\n path: [...refs.path, 'anyOf', i],\n }),\n )\n .join(', ')}])`;\n }\n }\n }\n }\n } else if (its.an.object(schema)) {\n if (seen) {\n if (seen.r !== undefined) {\n return seen.r;\n }\n\n if (refs.depth === undefined || seen.n >= refs.depth) {\n return 'z.any()';\n }\n\n seen.n += 1;\n } else {\n seen = { r: undefined, n: 0 };\n refs.seen.set(schema, seen);\n }\n\n parsed = parseObject(schema, refs);\n }\n if (parsed) {\n if (!refs.withoutDescribes) {\n parsed = addDescribes(schema, parsed);\n }\n\n if (!refs.withoutDefaults) {\n parsed = addDefaults(schema, parsed);\n }\n\n parsed = addAnnotations(schema, parsed);\n\n if (seen) {\n seen.r = parsed;\n }\n\n return parsed;\n }\n};\n\nconst addDescribes = (schema: JsonSchemaObject, parsed: string): string => {\n if (schema.description) {\n parsed += `.describe(${JSON.stringify(schema.description)})`;\n }\n\n return parsed;\n};\n\nconst addDefaults = (schema: JsonSchemaObject, parsed: string): string => {\n if (schema.default !== undefined) {\n parsed += `.default(${JSON.stringify(schema.default)})`;\n }\n\n return parsed;\n};\n\nconst addAnnotations = (schema: JsonSchemaObject, parsed: string): string => {\n if (schema.readOnly) {\n parsed += '.readonly()';\n }\n\n return parsed;\n};\n\nexport function jsonSchemaToZod(schema: JsonSchema, options: Options = {}): string {\n return jsonSchemaToZodOriginal(schema, { ...options, parserOverride });\n}\n\n// Re-export all named exports from json-schema-to-zod (excluding the default export)\nexport * from 'json-schema-to-zod';\n"]}
@@ -0,0 +1,4 @@
1
+ import type { JsonSchema, Options } from 'json-schema-to-zod';
2
+ export declare function jsonSchemaToZod(schema: JsonSchema, options?: Options): string;
3
+ export * from 'json-schema-to-zod';
4
+ //# sourceMappingURL=json-to-zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-to-zod.d.ts","sourceRoot":"","sources":["../src/json-to-zod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAoB,OAAO,EAAQ,MAAM,oBAAoB,CAAC;AA4UtF,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,GAAE,OAAY,GAAG,MAAM,CAEjF;AAGD,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,257 @@
1
+ import jsonSchemaToZodOriginal__default, { its, parseSchema, addJsdocs, parseAnyOf, parseOneOf, parseAllOf } from 'json-schema-to-zod';
2
+ export * from 'json-schema-to-zod';
3
+
4
+ // src/json-to-zod.ts
5
+ function parseObject(objectSchema, refs) {
6
+ let properties = void 0;
7
+ if (objectSchema.properties) {
8
+ if (!Object.keys(objectSchema.properties).length) {
9
+ properties = "z.object({})";
10
+ } else {
11
+ properties = "z.object({ ";
12
+ properties += Object.keys(objectSchema.properties).map((key) => {
13
+ const propSchema = objectSchema.properties[key];
14
+ let result = `${JSON.stringify(key)}: ${parseSchema(propSchema, {
15
+ ...refs,
16
+ path: [...refs.path, "properties", key]
17
+ })}`;
18
+ if (refs.withJsdocs && typeof propSchema === "object") {
19
+ result = addJsdocs(propSchema, result);
20
+ }
21
+ const hasDefault = typeof propSchema === "object" && propSchema.default !== void 0;
22
+ const required = Array.isArray(objectSchema.required) ? objectSchema.required.includes(key) : typeof propSchema === "object" && propSchema.required === true;
23
+ const optional = !hasDefault && !required;
24
+ return optional ? `${result}.optional()` : result;
25
+ }).join(", ");
26
+ properties += " })";
27
+ }
28
+ }
29
+ const additionalProperties = objectSchema.additionalProperties !== void 0 && objectSchema.additionalProperties !== false ? parseSchema(objectSchema.additionalProperties, {
30
+ ...refs,
31
+ path: [...refs.path, "additionalProperties"]
32
+ }) : void 0;
33
+ let patternProperties = void 0;
34
+ if (objectSchema.patternProperties) {
35
+ const parsedPatternProperties = Object.fromEntries(
36
+ Object.entries(objectSchema.patternProperties).map(([key, value]) => {
37
+ return [
38
+ key,
39
+ parseSchema(value, {
40
+ ...refs,
41
+ path: [...refs.path, "patternProperties", key]
42
+ })
43
+ ];
44
+ }, {})
45
+ );
46
+ patternProperties = "";
47
+ if (properties) {
48
+ if (additionalProperties) {
49
+ patternProperties += `.catchall(z.union([${[
50
+ ...Object.values(parsedPatternProperties),
51
+ additionalProperties
52
+ ].join(", ")}]))`;
53
+ } else if (Object.keys(parsedPatternProperties).length > 1) {
54
+ patternProperties += `.catchall(z.union([${Object.values(parsedPatternProperties).join(", ")}]))`;
55
+ } else {
56
+ patternProperties += `.catchall(${Object.values(parsedPatternProperties)})`;
57
+ }
58
+ } else {
59
+ if (additionalProperties) {
60
+ patternProperties += `z.record(z.union([${[
61
+ ...Object.values(parsedPatternProperties),
62
+ additionalProperties
63
+ ].join(", ")}]))`;
64
+ } else if (Object.keys(parsedPatternProperties).length > 1) {
65
+ patternProperties += `z.record(z.union([${Object.values(parsedPatternProperties).join(", ")}]))`;
66
+ } else {
67
+ patternProperties += `z.record(${Object.values(parsedPatternProperties)})`;
68
+ }
69
+ }
70
+ patternProperties += ".superRefine((value, ctx) => {\n";
71
+ patternProperties += "for (const key in value) {\n";
72
+ if (additionalProperties) {
73
+ if (objectSchema.properties) {
74
+ patternProperties += `let evaluated = [${Object.keys(objectSchema.properties).map((key) => JSON.stringify(key)).join(", ")}].includes(key)
75
+ `;
76
+ } else {
77
+ patternProperties += `let evaluated = false
78
+ `;
79
+ }
80
+ }
81
+ for (const key in objectSchema.patternProperties) {
82
+ patternProperties += "if (key.match(new RegExp(" + JSON.stringify(key) + "))) {\n";
83
+ if (additionalProperties) {
84
+ patternProperties += "evaluated = true\n";
85
+ }
86
+ patternProperties += "const result = " + parsedPatternProperties[key] + ".safeParse(value[key])\n";
87
+ patternProperties += "if (!result.success) {\n";
88
+ patternProperties += `ctx.addIssue({
89
+ path: [...ctx.path, key],
90
+ code: 'custom',
91
+ message: \`Invalid input: Key matching regex /\${key}/ must match schema\`,
92
+ params: {
93
+ issues: result.error.issues
94
+ }
95
+ })
96
+ `;
97
+ patternProperties += "}\n";
98
+ patternProperties += "}\n";
99
+ }
100
+ if (additionalProperties) {
101
+ patternProperties += "if (!evaluated) {\n";
102
+ patternProperties += "const result = " + additionalProperties + ".safeParse(value[key])\n";
103
+ patternProperties += "if (!result.success) {\n";
104
+ patternProperties += `ctx.addIssue({
105
+ path: [...ctx.path, key],
106
+ code: 'custom',
107
+ message: \`Invalid input: must match catchall schema\`,
108
+ params: {
109
+ issues: result.error.issues
110
+ }
111
+ })
112
+ `;
113
+ patternProperties += "}\n";
114
+ patternProperties += "}\n";
115
+ }
116
+ patternProperties += "}\n";
117
+ patternProperties += "})";
118
+ }
119
+ 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())";
120
+ if (its.an.anyOf(objectSchema)) {
121
+ output += `.and(${parseAnyOf(
122
+ {
123
+ ...objectSchema,
124
+ anyOf: objectSchema.anyOf.map(
125
+ (x) => typeof x === "object" && !x.type && (x.properties || x.additionalProperties || x.patternProperties) ? { ...x, type: "object" } : x
126
+ )
127
+ },
128
+ refs
129
+ )})`;
130
+ }
131
+ if (its.a.oneOf(objectSchema)) {
132
+ output += `.and(${parseOneOf(
133
+ {
134
+ ...objectSchema,
135
+ oneOf: objectSchema.oneOf.map(
136
+ (x) => typeof x === "object" && !x.type && (x.properties || x.additionalProperties || x.patternProperties) ? { ...x, type: "object" } : x
137
+ )
138
+ },
139
+ refs
140
+ )})`;
141
+ }
142
+ if (its.an.allOf(objectSchema)) {
143
+ output += `.and(${parseAllOf(
144
+ {
145
+ ...objectSchema,
146
+ allOf: objectSchema.allOf.map(
147
+ (x) => typeof x === "object" && !x.type && (x.properties || x.additionalProperties || x.patternProperties) ? { ...x, type: "object" } : x
148
+ )
149
+ },
150
+ refs
151
+ )})`;
152
+ }
153
+ return output;
154
+ }
155
+ var parserOverride = (schema, refs) => {
156
+ let parsed = "";
157
+ let seen = refs.seen.get(schema);
158
+ if (its.an.anyOf(schema)) {
159
+ const allObjects = schema.anyOf.every(
160
+ (item) => typeof item === "object" && its.an.object(item) && item.properties !== void 0
161
+ );
162
+ if (schema.anyOf.length > 1 && allObjects) {
163
+ const propertiesWithConst = schema.anyOf.reduce((acc, item) => {
164
+ if (typeof item === "object" && its.an.object(item)) {
165
+ const propertyWithConst = Object.entries(item.properties ?? {}).filter(
166
+ ([_, value]) => typeof value === "object" && value?.const !== void 0
167
+ );
168
+ if (propertyWithConst?.length) {
169
+ const ppties = propertyWithConst.map(([key, _]) => key);
170
+ acc.push(ppties);
171
+ }
172
+ }
173
+ return acc;
174
+ }, []);
175
+ if (propertiesWithConst.length === schema.anyOf.length) {
176
+ if (seen) {
177
+ if (seen.r !== void 0) {
178
+ return seen.r;
179
+ }
180
+ if (refs.depth === void 0 || seen.n >= refs.depth) {
181
+ return "z.any()";
182
+ }
183
+ seen.n += 1;
184
+ } else {
185
+ seen = { r: void 0, n: 0 };
186
+ refs.seen.set(schema, seen);
187
+ }
188
+ const discriminators = propertiesWithConst.length > 0 && propertiesWithConst[0] ? propertiesWithConst.reduce((common, properties) => {
189
+ return common.filter((prop) => properties.includes(prop));
190
+ }, propertiesWithConst[0]) : [];
191
+ if (discriminators.length > 0) {
192
+ const discriminator = discriminators[0];
193
+ if (discriminator) {
194
+ parsed = `z.discriminatedUnion("${discriminator}", [${schema.anyOf.map(
195
+ (schema2, i) => parseSchema(schema2, {
196
+ ...refs,
197
+ path: [...refs.path, "anyOf", i]
198
+ })
199
+ ).join(", ")}])`;
200
+ }
201
+ }
202
+ }
203
+ }
204
+ } else if (its.an.object(schema)) {
205
+ if (seen) {
206
+ if (seen.r !== void 0) {
207
+ return seen.r;
208
+ }
209
+ if (refs.depth === void 0 || seen.n >= refs.depth) {
210
+ return "z.any()";
211
+ }
212
+ seen.n += 1;
213
+ } else {
214
+ seen = { r: void 0, n: 0 };
215
+ refs.seen.set(schema, seen);
216
+ }
217
+ parsed = parseObject(schema, refs);
218
+ }
219
+ if (parsed) {
220
+ if (!refs.withoutDescribes) {
221
+ parsed = addDescribes(schema, parsed);
222
+ }
223
+ if (!refs.withoutDefaults) {
224
+ parsed = addDefaults(schema, parsed);
225
+ }
226
+ parsed = addAnnotations(schema, parsed);
227
+ if (seen) {
228
+ seen.r = parsed;
229
+ }
230
+ return parsed;
231
+ }
232
+ };
233
+ var addDescribes = (schema, parsed) => {
234
+ if (schema.description) {
235
+ parsed += `.describe(${JSON.stringify(schema.description)})`;
236
+ }
237
+ return parsed;
238
+ };
239
+ var addDefaults = (schema, parsed) => {
240
+ if (schema.default !== void 0) {
241
+ parsed += `.default(${JSON.stringify(schema.default)})`;
242
+ }
243
+ return parsed;
244
+ };
245
+ var addAnnotations = (schema, parsed) => {
246
+ if (schema.readOnly) {
247
+ parsed += ".readonly()";
248
+ }
249
+ return parsed;
250
+ };
251
+ function jsonSchemaToZod(schema, options = {}) {
252
+ return jsonSchemaToZodOriginal__default(schema, { ...options, parserOverride });
253
+ }
254
+
255
+ export { jsonSchemaToZod };
256
+ //# sourceMappingURL=json-to-zod.js.map
257
+ //# sourceMappingURL=json-to-zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/json-to-zod.ts"],"names":["schema","jsonSchemaToZodOriginal"],"mappings":"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","file":"json-to-zod.js","sourcesContent":["import type { JsonSchema, JsonSchemaObject, Options, Refs } from 'json-schema-to-zod';\nimport jsonSchemaToZodOriginal, {\n addJsdocs,\n its,\n parseAllOf,\n parseAnyOf,\n parseOneOf,\n parseSchema,\n} from 'json-schema-to-zod';\n\nfunction parseObject(objectSchema: JsonSchemaObject & { type: 'object' }, refs: Refs): string {\n let properties: string | undefined = undefined;\n\n if (objectSchema.properties) {\n if (!Object.keys(objectSchema.properties).length) {\n properties = 'z.object({})';\n } else {\n properties = 'z.object({ ';\n\n properties += Object.keys(objectSchema.properties)\n .map(key => {\n const propSchema = objectSchema.properties![key];\n\n let result = `${JSON.stringify(key)}: ${parseSchema(propSchema!, {\n ...refs,\n path: [...refs.path, 'properties', key],\n })}`;\n\n if (refs.withJsdocs && typeof propSchema === 'object') {\n result = addJsdocs(propSchema, result);\n }\n\n const hasDefault = typeof propSchema === 'object' && propSchema.default !== undefined;\n\n const required = Array.isArray(objectSchema.required)\n ? objectSchema.required.includes(key)\n : typeof propSchema === 'object' && propSchema.required === true;\n\n const optional = !hasDefault && !required;\n\n return optional ? `${result}.optional()` : result;\n })\n .join(', ');\n\n properties += ' })';\n }\n }\n\n const additionalProperties =\n objectSchema.additionalProperties !== undefined && objectSchema.additionalProperties !== false\n ? parseSchema(objectSchema.additionalProperties, {\n ...refs,\n path: [...refs.path, 'additionalProperties'],\n })\n : undefined;\n\n let patternProperties: string | undefined = undefined;\n\n if (objectSchema.patternProperties) {\n const parsedPatternProperties = Object.fromEntries(\n Object.entries(objectSchema.patternProperties).map(([key, value]) => {\n return [\n key,\n parseSchema(value, {\n ...refs,\n path: [...refs.path, 'patternProperties', key],\n }),\n ];\n }, {}),\n );\n\n patternProperties = '';\n\n if (properties) {\n if (additionalProperties) {\n patternProperties += `.catchall(z.union([${[\n ...Object.values(parsedPatternProperties),\n additionalProperties,\n ].join(', ')}]))`;\n } else if (Object.keys(parsedPatternProperties).length > 1) {\n patternProperties += `.catchall(z.union([${Object.values(parsedPatternProperties).join(', ')}]))`;\n } else {\n patternProperties += `.catchall(${Object.values(parsedPatternProperties)})`;\n }\n } else {\n if (additionalProperties) {\n patternProperties += `z.record(z.union([${[\n ...Object.values(parsedPatternProperties),\n additionalProperties,\n ].join(', ')}]))`;\n } else if (Object.keys(parsedPatternProperties).length > 1) {\n patternProperties += `z.record(z.union([${Object.values(parsedPatternProperties).join(', ')}]))`;\n } else {\n patternProperties += `z.record(${Object.values(parsedPatternProperties)})`;\n }\n }\n\n patternProperties += '.superRefine((value, ctx) => {\\n';\n\n patternProperties += 'for (const key in value) {\\n';\n\n if (additionalProperties) {\n if (objectSchema.properties) {\n patternProperties += `let evaluated = [${Object.keys(objectSchema.properties)\n .map(key => JSON.stringify(key))\n .join(', ')}].includes(key)\\n`;\n } else {\n patternProperties += `let evaluated = false\\n`;\n }\n }\n\n for (const key in objectSchema.patternProperties) {\n patternProperties += 'if (key.match(new RegExp(' + JSON.stringify(key) + '))) {\\n';\n if (additionalProperties) {\n patternProperties += 'evaluated = true\\n';\n }\n patternProperties += 'const result = ' + parsedPatternProperties[key] + '.safeParse(value[key])\\n';\n patternProperties += 'if (!result.success) {\\n';\n\n patternProperties += `ctx.addIssue({\n path: [...ctx.path, key],\n code: 'custom',\n message: \\`Invalid input: Key matching regex /\\${key}/ must match schema\\`,\n params: {\n issues: result.error.issues\n }\n })\\n`;\n\n patternProperties += '}\\n';\n patternProperties += '}\\n';\n }\n\n if (additionalProperties) {\n patternProperties += 'if (!evaluated) {\\n';\n patternProperties += 'const result = ' + additionalProperties + '.safeParse(value[key])\\n';\n patternProperties += 'if (!result.success) {\\n';\n\n patternProperties += `ctx.addIssue({\n path: [...ctx.path, key],\n code: 'custom',\n message: \\`Invalid input: must match catchall schema\\`,\n params: {\n issues: result.error.issues\n }\n })\\n`;\n\n patternProperties += '}\\n';\n patternProperties += '}\\n';\n }\n patternProperties += '}\\n';\n patternProperties += '})';\n }\n\n let output = properties\n ? patternProperties\n ? properties + patternProperties\n : additionalProperties\n ? additionalProperties === 'z.never()'\n ? properties + '.strict()'\n : properties + `.catchall(${additionalProperties})`\n : properties\n : patternProperties\n ? patternProperties\n : additionalProperties\n ? `z.record(${additionalProperties})`\n : 'z.record(z.any())';\n\n if (its.an.anyOf(objectSchema)) {\n output += `.and(${parseAnyOf(\n {\n ...objectSchema,\n anyOf: objectSchema.anyOf.map(x =>\n typeof x === 'object' && !x.type && (x.properties || x.additionalProperties || x.patternProperties)\n ? { ...x, type: 'object' }\n : x,\n ) as any,\n },\n refs,\n )})`;\n }\n\n if (its.a.oneOf(objectSchema)) {\n output += `.and(${parseOneOf(\n {\n ...objectSchema,\n oneOf: objectSchema.oneOf.map(x =>\n typeof x === 'object' && !x.type && (x.properties || x.additionalProperties || x.patternProperties)\n ? { ...x, type: 'object' }\n : x,\n ) as any,\n },\n refs,\n )})`;\n }\n\n if (its.an.allOf(objectSchema)) {\n output += `.and(${parseAllOf(\n {\n ...objectSchema,\n allOf: objectSchema.allOf.map(x =>\n typeof x === 'object' && !x.type && (x.properties || x.additionalProperties || x.patternProperties)\n ? { ...x, type: 'object' }\n : x,\n ) as any,\n },\n refs,\n )})`;\n }\n\n return output;\n}\n\nconst parserOverride = (schema: JsonSchemaObject, refs: Refs) => {\n let parsed = '';\n let seen = refs.seen.get(schema);\n if (its.an.anyOf(schema)) {\n const allObjects = schema.anyOf.every(\n item => typeof item === 'object' && its.an.object(item) && item.properties !== undefined,\n );\n if (schema.anyOf.length > 1 && allObjects) {\n const propertiesWithConst: string[][] = schema.anyOf.reduce((acc, item) => {\n if (typeof item === 'object' && its.an.object(item)) {\n const propertyWithConst = Object.entries(item.properties ?? {}).filter(\n ([_, value]) => typeof value === 'object' && (value as any)?.const !== undefined,\n );\n if (propertyWithConst?.length) {\n const ppties = propertyWithConst.map(([key, _]) => key);\n acc.push(ppties);\n }\n }\n return acc;\n }, [] as string[][]);\n\n if (propertiesWithConst.length === schema.anyOf.length) {\n if (seen) {\n if (seen.r !== undefined) {\n return seen.r;\n }\n\n if (refs.depth === undefined || seen.n >= refs.depth) {\n return 'z.any()';\n }\n\n seen.n += 1;\n } else {\n seen = { r: undefined, n: 0 };\n refs.seen.set(schema, seen);\n }\n\n const discriminators =\n propertiesWithConst.length > 0 && propertiesWithConst[0]\n ? propertiesWithConst.reduce((common, properties) => {\n return common.filter(prop => properties.includes(prop));\n }, propertiesWithConst[0])\n : [];\n\n if (discriminators.length > 0) {\n const discriminator = discriminators[0];\n if (discriminator) {\n parsed = `z.discriminatedUnion(\"${discriminator}\", [${schema.anyOf\n .map((schema, i) =>\n parseSchema(schema, {\n ...refs,\n path: [...refs.path, 'anyOf', i],\n }),\n )\n .join(', ')}])`;\n }\n }\n }\n }\n } else if (its.an.object(schema)) {\n if (seen) {\n if (seen.r !== undefined) {\n return seen.r;\n }\n\n if (refs.depth === undefined || seen.n >= refs.depth) {\n return 'z.any()';\n }\n\n seen.n += 1;\n } else {\n seen = { r: undefined, n: 0 };\n refs.seen.set(schema, seen);\n }\n\n parsed = parseObject(schema, refs);\n }\n if (parsed) {\n if (!refs.withoutDescribes) {\n parsed = addDescribes(schema, parsed);\n }\n\n if (!refs.withoutDefaults) {\n parsed = addDefaults(schema, parsed);\n }\n\n parsed = addAnnotations(schema, parsed);\n\n if (seen) {\n seen.r = parsed;\n }\n\n return parsed;\n }\n};\n\nconst addDescribes = (schema: JsonSchemaObject, parsed: string): string => {\n if (schema.description) {\n parsed += `.describe(${JSON.stringify(schema.description)})`;\n }\n\n return parsed;\n};\n\nconst addDefaults = (schema: JsonSchemaObject, parsed: string): string => {\n if (schema.default !== undefined) {\n parsed += `.default(${JSON.stringify(schema.default)})`;\n }\n\n return parsed;\n};\n\nconst addAnnotations = (schema: JsonSchemaObject, parsed: string): string => {\n if (schema.readOnly) {\n parsed += '.readonly()';\n }\n\n return parsed;\n};\n\nexport function jsonSchemaToZod(schema: JsonSchema, options: Options = {}): string {\n return jsonSchemaToZodOriginal(schema, { ...options, parserOverride });\n}\n\n// Re-export all named exports from json-schema-to-zod (excluding the default export)\nexport * from 'json-schema-to-zod';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/schema-compat",
3
- "version": "0.11.8",
3
+ "version": "0.11.9",
4
4
  "description": "Tool schema compatibility layer for Mastra.ai",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -30,6 +30,16 @@
30
30
  "default": "./dist/zod-to-json.cjs"
31
31
  }
32
32
  },
33
+ "./json-to-zod": {
34
+ "import": {
35
+ "types": "./dist/json-to-zod.d.ts",
36
+ "default": "./dist/json-to-zod.js"
37
+ },
38
+ "require": {
39
+ "types": "./dist/json-to-zod.d.ts",
40
+ "default": "./dist/json-to-zod.cjs"
41
+ }
42
+ },
33
43
  "./package.json": "./package.json"
34
44
  },
35
45
  "keywords": [
@@ -43,6 +53,7 @@
43
53
  "license": "Apache-2.0",
44
54
  "dependencies": {
45
55
  "json-schema": "^0.4.0",
56
+ "json-schema-to-zod": "^2.7.0",
46
57
  "zod-from-json-schema": "^0.5.0",
47
58
  "zod-from-json-schema-v3": "npm:zod-from-json-schema@^0.0.5",
48
59
  "zod-to-json-schema": "^3.24.6"
@@ -60,8 +71,8 @@
60
71
  "typescript": "^5.8.3",
61
72
  "vitest": "^3.2.4",
62
73
  "zod": "^3.25.76",
63
- "@internal/types-builder": "0.0.39",
64
- "@internal/lint": "0.0.64"
74
+ "@internal/types-builder": "0.0.40",
75
+ "@internal/lint": "0.0.65"
65
76
  },
66
77
  "homepage": "https://mastra.ai",
67
78
  "repository": {