@mastra/schema-compat 1.3.16-alpha.0 → 1.3.17-alpha.0

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.
Files changed (47) hide show
  1. package/dist/_types/@internal_ai-sdk-v5/dist/index.d.ts +274 -889
  2. package/dist/_types/@internal_ai-v6/dist/index.d.ts +1051 -1301
  3. package/dist/{esm-CWlHuVIx.js → esm-BG70JlG8.js} +60 -108
  4. package/dist/{esm-CWlHuVIx.js.map → esm-BG70JlG8.js.map} +1 -1
  5. package/dist/{esm-CkNCkZSB.cjs → esm-BQeGF7AD.cjs} +60 -108
  6. package/dist/{esm-CkNCkZSB.cjs.map → esm-BQeGF7AD.cjs.map} +1 -1
  7. package/dist/index.cjs +162 -185
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.js +162 -185
  10. package/dist/index.js.map +1 -1
  11. package/dist/{json-schema-VSnKq6-P.cjs → json-schema-7oyknwMS.cjs} +241 -247
  12. package/dist/json-schema-7oyknwMS.cjs.map +1 -0
  13. package/dist/{json-schema-R8yfooPa.js → json-schema-BdCwqjfN.js} +241 -247
  14. package/dist/json-schema-BdCwqjfN.js.map +1 -0
  15. package/dist/{json-schema-traverse-B35mHRM8.js → json-schema-traverse-D0CId4oM.js} +5 -7
  16. package/dist/{json-schema-traverse-B35mHRM8.js.map → json-schema-traverse-D0CId4oM.js.map} +1 -1
  17. package/dist/{json-schema-traverse-DbuWNYgg.cjs → json-schema-traverse-evfp8uQX.cjs} +5 -7
  18. package/dist/{json-schema-traverse-DbuWNYgg.cjs.map → json-schema-traverse-evfp8uQX.cjs.map} +1 -1
  19. package/dist/json-to-zod.cjs +153 -142
  20. package/dist/json-to-zod.cjs.map +1 -1
  21. package/dist/json-to-zod.d.ts.map +1 -1
  22. package/dist/json-to-zod.js +153 -142
  23. package/dist/json-to-zod.js.map +1 -1
  24. package/dist/{schema-e0VHpMt0.js → schema-Bf12g7KC.js} +4 -6
  25. package/dist/{schema-e0VHpMt0.js.map → schema-Bf12g7KC.js.map} +1 -1
  26. package/dist/{schema-IhrnbMI3.cjs → schema-D2ab1-Dc.cjs} +5 -7
  27. package/dist/schema-D2ab1-Dc.cjs.map +1 -0
  28. package/dist/schema.cjs +1 -1
  29. package/dist/schema.js +1 -2
  30. package/dist/standard-schema/adapters/ai-sdk.cjs +2 -7
  31. package/dist/standard-schema/adapters/ai-sdk.cjs.map +1 -1
  32. package/dist/standard-schema/adapters/ai-sdk.js +2 -7
  33. package/dist/standard-schema/adapters/ai-sdk.js.map +1 -1
  34. package/dist/standard-schema/adapters/json-schema.cjs +1 -1
  35. package/dist/standard-schema/adapters/json-schema.js +1 -2
  36. package/dist/standard-schema/adapters/zod-v3.cjs +3 -4
  37. package/dist/standard-schema/adapters/zod-v3.cjs.map +1 -1
  38. package/dist/standard-schema/adapters/zod-v3.js +3 -4
  39. package/dist/standard-schema/adapters/zod-v3.js.map +1 -1
  40. package/dist/zod-to-json.cjs +6 -5
  41. package/dist/zod-to-json.cjs.map +1 -1
  42. package/dist/zod-to-json.js +6 -5
  43. package/dist/zod-to-json.js.map +1 -1
  44. package/package.json +24 -25
  45. package/dist/json-schema-R8yfooPa.js.map +0 -1
  46. package/dist/json-schema-VSnKq6-P.cjs.map +0 -1
  47. package/dist/schema-IhrnbMI3.cjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- //#region src/standard-schema/adapters/ai-sdk.ts
2
+ // src/standard-schema/adapters/ai-sdk.ts
3
3
  /**
4
4
  * Vendor name for AI SDK wrapped schemas.
5
5
  */
@@ -94,11 +94,7 @@ var AiSdkSchemaWrapper = class {
94
94
  case "draft-07":
95
95
  clonedSchema.$schema = "http://json-schema.org/draft-07/schema#";
96
96
  break;
97
- case "draft-2020-12":
98
- clonedSchema.$schema = "https://json-schema.org/draft/2020-12/schema";
99
- break;
100
- case "openapi-3.0": break;
101
- default: break;
97
+ case "draft-2020-12": clonedSchema.$schema = "https://json-schema.org/draft/2020-12/schema";
102
98
  }
103
99
  return clonedSchema;
104
100
  }
@@ -151,7 +147,6 @@ var AiSdkSchemaWrapper = class {
151
147
  function toStandardSchema(schema) {
152
148
  return new AiSdkSchemaWrapper(schema);
153
149
  }
154
- //#endregion
155
150
  exports.AiSdkSchemaWrapper = AiSdkSchemaWrapper;
156
151
  exports.toStandardSchema = toStandardSchema;
157
152
 
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk.cjs","names":["#schema","#validate","#toJsonSchema","#convertValidationResult","failureResult"],"sources":["../../../src/standard-schema/adapters/ai-sdk.ts"],"sourcesContent":["import type { Schema } from '@internal/ai-v6';\nimport type { StandardSchemaV1, StandardJSONSchemaV1 } from '@standard-schema/spec';\nimport type { JSONSchema7 } from 'json-schema';\nimport type { StandardSchemaWithJSON, StandardSchemaWithJSONProps } from '../standard-schema.types';\n\n/**\n * Vendor name for AI SDK wrapped schemas.\n */\nconst VENDOR = 'ai-sdk';\n\n/**\n * A wrapper class that makes AI SDK Schema compatible with @standard-schema/spec.\n *\n * This class implements both `StandardSchemaV1` (validation) and `StandardJSONSchemaV1`\n * (JSON Schema conversion) interfaces. It wraps an AI SDK Schema and adapts its\n * validation method and jsonSchema property to the standard-schema interface.\n *\n * @typeParam T - The TypeScript type that the AI SDK Schema represents\n *\n * @example\n * ```typescript\n * import { jsonSchema } from '@internal/ai-v6';\n * import { toStandardSchema } from '@mastra/schema-compat/adapters/ai-sdk';\n *\n * // Create an AI SDK schema\n * const aiSdkSchema = jsonSchema<{ name: string; age: number }>({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' },\n * },\n * required: ['name', 'age'],\n * });\n *\n * // Convert to standard-schema\n * const standardSchema = toStandardSchema(aiSdkSchema);\n *\n * // Use validation (from StandardSchemaV1)\n * const result = standardSchema['~standard'].validate({ name: 'John', age: 30 });\n *\n * // Get JSON Schema (from StandardJSONSchemaV1)\n * const jsonSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' });\n * ```\n */\nexport class AiSdkSchemaWrapper<Input = unknown, Output = Input> implements StandardSchemaWithJSON<Input, Output> {\n readonly #schema: Schema<Output>;\n readonly '~standard': StandardSchemaWithJSONProps<Input, Output>;\n\n constructor(schema: Schema<Output>) {\n this.#schema = schema;\n\n // Create the ~standard property\n this['~standard'] = {\n version: 1,\n vendor: VENDOR,\n validate: this.#validate.bind(this),\n jsonSchema: {\n input: this.#toJsonSchema.bind(this),\n output: this.#toJsonSchema.bind(this),\n },\n };\n }\n\n /**\n * Validates a value against the AI SDK Schema.\n *\n * @param value - The value to validate\n * @returns A result object with either the validated value or validation issues\n */\n #validate(value: unknown): StandardSchemaV1.Result<Output> | Promise<StandardSchemaV1.Result<Output>> {\n // Check if the schema has a validate method (it's optional on AI SDK Schema)\n if (!this.#schema.validate) {\n // If no validate method, we can't validate - just pass through\n return { value: value as Output };\n }\n\n try {\n const result = this.#schema.validate(value);\n\n // Handle both sync and async validation results\n // The AI SDK Schema.validate returns ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>\n // We need to check if it's a thenable (promise-like)\n if (result && typeof result === 'object' && 'then' in result && typeof result.then === 'function') {\n // Wrap PromiseLike in a proper Promise to satisfy the StandardSchemaV1 interface\n return Promise.resolve(\n result as PromiseLike<{ success: true; value: Output } | { success: false; error: Error }>,\n )\n .then(res => this.#convertValidationResult(res))\n .catch((error: unknown) => {\n // Convert rejected promises to the expected { issues: [...] } shape\n const message = error instanceof Error ? error.message : 'Unknown validation error';\n return {\n issues: [{ message: `Schema validation error: ${message}` }],\n } as StandardSchemaV1.Result<Output>;\n });\n }\n\n // It's a sync result\n return this.#convertValidationResult(\n result as { success: true; value: Output } | { success: false; error: Error },\n );\n } catch (error) {\n // If validation fails unexpectedly, return a validation error\n const message = error instanceof Error ? error.message : 'Unknown validation error';\n return {\n issues: [{ message: `Schema validation error: ${message}` }],\n };\n }\n }\n\n /**\n * Converts an AI SDK ValidationResult to a StandardSchemaV1.Result.\n *\n * @param result - The AI SDK validation result\n * @returns A StandardSchemaV1.Result\n */\n #convertValidationResult(\n result: { success: true; value: Output } | { success: false; error: Error },\n ): StandardSchemaV1.Result<Output> {\n if (result.success) {\n return { value: result.value };\n }\n\n // Convert the AI SDK error to a Standard Schema issue\n // Cast to the failure type since TypeScript can't narrow discriminated unions with private field access\n const failureResult = result as { success: false; error: Error };\n return {\n issues: [{ message: failureResult.error.message }],\n };\n }\n\n /**\n * Returns the JSON Schema in the requested target format.\n *\n * @param options - Options including the target format\n * @returns The JSON Schema as a Record\n */\n #toJsonSchema(options: StandardJSONSchemaV1.Options): Record<string, unknown> {\n const { target } = options;\n\n // Clone the schema to avoid mutations\n const clonedSchema = JSON.parse(JSON.stringify(this.#schema.jsonSchema)) as Record<string, unknown>;\n\n // Add $schema if not present, based on target\n if (!clonedSchema.$schema) {\n switch (target) {\n case 'draft-07':\n clonedSchema.$schema = 'http://json-schema.org/draft-07/schema#';\n break;\n case 'draft-2020-12':\n clonedSchema.$schema = 'https://json-schema.org/draft/2020-12/schema';\n break;\n case 'openapi-3.0':\n // OpenAPI 3.0 doesn't use $schema\n break;\n default:\n // For unknown targets, don't add $schema\n break;\n }\n }\n\n return clonedSchema;\n }\n\n /**\n * Returns the original AI SDK Schema.\n */\n getSchema(): Schema<Output> {\n return this.#schema;\n }\n\n /**\n * Returns the original JSON Schema from the AI SDK Schema.\n */\n getJsonSchema(): JSONSchema7 {\n return this.#schema.jsonSchema as JSONSchema7;\n }\n}\n\n/**\n * Wraps an AI SDK Schema to implement the full @standard-schema/spec interface.\n *\n * This function creates a wrapper that implements both `StandardSchemaV1` (validation)\n * and `StandardJSONSchemaV1` (JSON Schema conversion) interfaces.\n *\n * @typeParam T - The TypeScript type that the AI SDK Schema represents\n * @param schema - The AI SDK Schema to wrap\n * @returns A wrapper implementing StandardSchemaWithJSON\n *\n * @example\n * ```typescript\n * import { jsonSchema } from '@internal/ai-v6';\n * import { toStandardSchema } from '@mastra/schema-compat/adapters/ai-sdk';\n *\n * const aiSdkSchema = jsonSchema<{ name: string; age: number }>({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' },\n * },\n * required: ['name', 'age'],\n * });\n *\n * const standardSchema = toStandardSchema(aiSdkSchema);\n *\n * // Validate data\n * const result = standardSchema['~standard'].validate({ name: 'John', age: 30 });\n *\n * // Get JSON Schema\n * const jsonSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' });\n * ```\n */\nexport function toStandardSchema<T = unknown>(schema: Schema<T>): AiSdkSchemaWrapper<T, T> {\n return new AiSdkSchemaWrapper<T, T>(schema);\n}\n"],"mappings":";;;;;AAQA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCf,IAAa,qBAAb,MAAkH;CAChH;CACA;CAEA,YAAY,QAAwB;EAClC,KAAKA,UAAU;EAGf,KAAK,eAAe;GAClB,SAAS;GACT,QAAQ;GACR,UAAU,KAAKC,UAAU,KAAK,IAAI;GAClC,YAAY;IACV,OAAO,KAAKC,cAAc,KAAK,IAAI;IACnC,QAAQ,KAAKA,cAAc,KAAK,IAAI;GACtC;EACF;CACF;;;;;;;CAQA,UAAU,OAA4F;EAEpG,IAAI,CAAC,KAAKF,QAAQ,UAEhB,OAAO,EAAS,MAAgB;EAGlC,IAAI;GACF,MAAM,SAAS,KAAKA,QAAQ,SAAS,KAAK;GAK1C,IAAI,UAAU,OAAO,WAAW,YAAY,UAAU,UAAU,OAAO,OAAO,SAAS,YAErF,OAAO,QAAQ,QACb,MACF,CAAC,CACE,MAAK,QAAO,KAAKG,yBAAyB,GAAG,CAAC,CAAC,CAC/C,OAAO,UAAmB;IAGzB,OAAO,EACL,QAAQ,CAAC,EAAE,SAAS,4BAFN,iBAAiB,QAAQ,MAAM,UAAU,6BAEG,CAAC,EAC7D;GACF,CAAC;GAIL,OAAO,KAAKA,yBACV,MACF;EACF,SAAS,OAAO;GAGd,OAAO,EACL,QAAQ,CAAC,EAAE,SAAS,4BAFN,iBAAiB,QAAQ,MAAM,UAAU,6BAEG,CAAC,EAC7D;EACF;CACF;;;;;;;CAQA,yBACE,QACiC;EACjC,IAAI,OAAO,SACT,OAAO,EAAE,OAAO,OAAO,MAAM;EAM/B,OAAO,EACL,QAAQ,CAAC,EAAE,SAASC,OAAc,MAAM,QAAQ,CAAC,EACnD;CACF;;;;;;;CAQA,cAAc,SAAgE;EAC5E,MAAM,EAAE,WAAW;EAGnB,MAAM,eAAe,KAAK,MAAM,KAAK,UAAU,KAAKJ,QAAQ,UAAU,CAAC;EAGvE,IAAI,CAAC,aAAa,SAChB,QAAQ,QAAR;GACE,KAAK;IACH,aAAa,UAAU;IACvB;GACF,KAAK;IACH,aAAa,UAAU;IACvB;GACF,KAAK,eAEH;GACF,SAEE;EACJ;EAGF,OAAO;CACT;;;;CAKA,YAA4B;EAC1B,OAAO,KAAKA;CACd;;;;CAKA,gBAA6B;EAC3B,OAAO,KAAKA,QAAQ;CACtB;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,SAAgB,iBAA8B,QAA6C;CACzF,OAAO,IAAI,mBAAyB,MAAM;AAC5C"}
1
+ {"version":3,"file":"ai-sdk.cjs","names":["failureResult"],"sources":["../../../src/standard-schema/adapters/ai-sdk.ts"],"sourcesContent":["import type { Schema } from '@internal/ai-v6';\nimport type { StandardSchemaV1, StandardJSONSchemaV1 } from '@standard-schema/spec';\nimport type { JSONSchema7 } from 'json-schema';\nimport type { StandardSchemaWithJSON, StandardSchemaWithJSONProps } from '../standard-schema.types';\n\n/**\n * Vendor name for AI SDK wrapped schemas.\n */\nconst VENDOR = 'ai-sdk';\n\n/**\n * A wrapper class that makes AI SDK Schema compatible with @standard-schema/spec.\n *\n * This class implements both `StandardSchemaV1` (validation) and `StandardJSONSchemaV1`\n * (JSON Schema conversion) interfaces. It wraps an AI SDK Schema and adapts its\n * validation method and jsonSchema property to the standard-schema interface.\n *\n * @typeParam T - The TypeScript type that the AI SDK Schema represents\n *\n * @example\n * ```typescript\n * import { jsonSchema } from '@internal/ai-v6';\n * import { toStandardSchema } from '@mastra/schema-compat/adapters/ai-sdk';\n *\n * // Create an AI SDK schema\n * const aiSdkSchema = jsonSchema<{ name: string; age: number }>({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' },\n * },\n * required: ['name', 'age'],\n * });\n *\n * // Convert to standard-schema\n * const standardSchema = toStandardSchema(aiSdkSchema);\n *\n * // Use validation (from StandardSchemaV1)\n * const result = standardSchema['~standard'].validate({ name: 'John', age: 30 });\n *\n * // Get JSON Schema (from StandardJSONSchemaV1)\n * const jsonSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' });\n * ```\n */\nexport class AiSdkSchemaWrapper<Input = unknown, Output = Input> implements StandardSchemaWithJSON<Input, Output> {\n readonly #schema: Schema<Output>;\n readonly '~standard': StandardSchemaWithJSONProps<Input, Output>;\n\n constructor(schema: Schema<Output>) {\n this.#schema = schema;\n\n // Create the ~standard property\n this['~standard'] = {\n version: 1,\n vendor: VENDOR,\n validate: this.#validate.bind(this),\n jsonSchema: {\n input: this.#toJsonSchema.bind(this),\n output: this.#toJsonSchema.bind(this),\n },\n };\n }\n\n /**\n * Validates a value against the AI SDK Schema.\n *\n * @param value - The value to validate\n * @returns A result object with either the validated value or validation issues\n */\n #validate(value: unknown): StandardSchemaV1.Result<Output> | Promise<StandardSchemaV1.Result<Output>> {\n // Check if the schema has a validate method (it's optional on AI SDK Schema)\n if (!this.#schema.validate) {\n // If no validate method, we can't validate - just pass through\n return { value: value as Output };\n }\n\n try {\n const result = this.#schema.validate(value);\n\n // Handle both sync and async validation results\n // The AI SDK Schema.validate returns ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>\n // We need to check if it's a thenable (promise-like)\n if (result && typeof result === 'object' && 'then' in result && typeof result.then === 'function') {\n // Wrap PromiseLike in a proper Promise to satisfy the StandardSchemaV1 interface\n return Promise.resolve(\n result as PromiseLike<{ success: true; value: Output } | { success: false; error: Error }>,\n )\n .then(res => this.#convertValidationResult(res))\n .catch((error: unknown) => {\n // Convert rejected promises to the expected { issues: [...] } shape\n const message = error instanceof Error ? error.message : 'Unknown validation error';\n return {\n issues: [{ message: `Schema validation error: ${message}` }],\n } as StandardSchemaV1.Result<Output>;\n });\n }\n\n // It's a sync result\n return this.#convertValidationResult(\n result as { success: true; value: Output } | { success: false; error: Error },\n );\n } catch (error) {\n // If validation fails unexpectedly, return a validation error\n const message = error instanceof Error ? error.message : 'Unknown validation error';\n return {\n issues: [{ message: `Schema validation error: ${message}` }],\n };\n }\n }\n\n /**\n * Converts an AI SDK ValidationResult to a StandardSchemaV1.Result.\n *\n * @param result - The AI SDK validation result\n * @returns A StandardSchemaV1.Result\n */\n #convertValidationResult(\n result: { success: true; value: Output } | { success: false; error: Error },\n ): StandardSchemaV1.Result<Output> {\n if (result.success) {\n return { value: result.value };\n }\n\n // Convert the AI SDK error to a Standard Schema issue\n // Cast to the failure type since TypeScript can't narrow discriminated unions with private field access\n const failureResult = result as { success: false; error: Error };\n return {\n issues: [{ message: failureResult.error.message }],\n };\n }\n\n /**\n * Returns the JSON Schema in the requested target format.\n *\n * @param options - Options including the target format\n * @returns The JSON Schema as a Record\n */\n #toJsonSchema(options: StandardJSONSchemaV1.Options): Record<string, unknown> {\n const { target } = options;\n\n // Clone the schema to avoid mutations\n const clonedSchema = JSON.parse(JSON.stringify(this.#schema.jsonSchema)) as Record<string, unknown>;\n\n // Add $schema if not present, based on target\n if (!clonedSchema.$schema) {\n switch (target) {\n case 'draft-07':\n clonedSchema.$schema = 'http://json-schema.org/draft-07/schema#';\n break;\n case 'draft-2020-12':\n clonedSchema.$schema = 'https://json-schema.org/draft/2020-12/schema';\n break;\n case 'openapi-3.0':\n // OpenAPI 3.0 doesn't use $schema\n break;\n default:\n // For unknown targets, don't add $schema\n break;\n }\n }\n\n return clonedSchema;\n }\n\n /**\n * Returns the original AI SDK Schema.\n */\n getSchema(): Schema<Output> {\n return this.#schema;\n }\n\n /**\n * Returns the original JSON Schema from the AI SDK Schema.\n */\n getJsonSchema(): JSONSchema7 {\n return this.#schema.jsonSchema as JSONSchema7;\n }\n}\n\n/**\n * Wraps an AI SDK Schema to implement the full @standard-schema/spec interface.\n *\n * This function creates a wrapper that implements both `StandardSchemaV1` (validation)\n * and `StandardJSONSchemaV1` (JSON Schema conversion) interfaces.\n *\n * @typeParam T - The TypeScript type that the AI SDK Schema represents\n * @param schema - The AI SDK Schema to wrap\n * @returns A wrapper implementing StandardSchemaWithJSON\n *\n * @example\n * ```typescript\n * import { jsonSchema } from '@internal/ai-v6';\n * import { toStandardSchema } from '@mastra/schema-compat/adapters/ai-sdk';\n *\n * const aiSdkSchema = jsonSchema<{ name: string; age: number }>({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' },\n * },\n * required: ['name', 'age'],\n * });\n *\n * const standardSchema = toStandardSchema(aiSdkSchema);\n *\n * // Validate data\n * const result = standardSchema['~standard'].validate({ name: 'John', age: 30 });\n *\n * // Get JSON Schema\n * const jsonSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' });\n * ```\n */\nexport function toStandardSchema<T = unknown>(schema: Schema<T>): AiSdkSchemaWrapper<T, T> {\n return new AiSdkSchemaWrapper<T, T>(schema);\n}\n"],"mappings":";;;;;AAQA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCf,IAAa,qBAAb,MAAkH;CAChH;CACA;CAEA,YAAY,QAAwB;EAClC,KAAK,UAAU;EAGf,KAAK,eAAe;GAClB,SAAS;GACT,QAAQ;GACR,UAAU,KAAK,UAAU,KAAK,IAAI;GAClC,YAAY;IACV,OAAO,KAAK,cAAc,KAAK,IAAI;IACnC,QAAQ,KAAK,cAAc,KAAK,IAAI;GACtC;EACF;CACF;;;;;;;CAQA,UAAU,OAA4F;EAEpG,IAAI,CAAC,KAAK,QAAQ,UAEhB,OAAO,EAAS,MAAgB;EAGlC,IAAI;GACF,MAAM,SAAS,KAAK,QAAQ,SAAS,KAAK;GAK1C,IAAI,UAAU,OAAO,WAAW,YAAY,UAAU,UAAU,OAAO,OAAO,SAAS,YAErF,OAAO,QAAQ,QACb,MACF,CAAC,CACE,MAAK,QAAO,KAAK,yBAAyB,GAAG,CAAC,CAAC,CAC/C,OAAO,UAAmB;IAGzB,OAAO,EACL,QAAQ,CAAC,EAAE,SAAS,4BAFN,iBAAiB,QAAQ,MAAM,UAAU,6BAEG,CAAC,EAC7D;GACF,CAAC;GAIL,OAAO,KAAK,yBACV,MACF;EACF,SAAS,OAAO;GAGd,OAAO,EACL,QAAQ,CAAC,EAAE,SAAS,4BAFN,iBAAiB,QAAQ,MAAM,UAAU,6BAEG,CAAC,EAC7D;EACF;CACF;;;;;;;CAQA,yBACE,QACiC;EACjC,IAAI,OAAO,SACT,OAAO,EAAE,OAAO,OAAO,MAAM;EAM/B,OAAO,EACL,QAAQ,CAAC,EAAE,SAASA,OAAc,MAAM,QAAQ,CAAC,EACnD;CACF;;;;;;;CAQA,cAAc,SAAgE;EAC5E,MAAM,EAAE,WAAW;EAGnB,MAAM,eAAe,KAAK,MAAM,KAAK,UAAU,KAAK,QAAQ,UAAU,CAAC;EAGvE,IAAI,CAAC,aAAa,SAChB,QAAQ,QAAR;GACE,KAAK;IACH,aAAa,UAAU;IACvB;GACF,KAAK,iBACH,aAAa,UAAU;EAQ3B;EAGF,OAAO;CACT;;;;CAKA,YAA4B;EAC1B,OAAO,KAAK;CACd;;;;CAKA,gBAA6B;EAC3B,OAAO,KAAK,QAAQ;CACtB;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,SAAgB,iBAA8B,QAA6C;CACzF,OAAO,IAAI,mBAAyB,MAAM;AAC5C"}
@@ -1,4 +1,4 @@
1
- //#region src/standard-schema/adapters/ai-sdk.ts
1
+ // src/standard-schema/adapters/ai-sdk.ts
2
2
  /**
3
3
  * Vendor name for AI SDK wrapped schemas.
4
4
  */
@@ -93,11 +93,7 @@ var AiSdkSchemaWrapper = class {
93
93
  case "draft-07":
94
94
  clonedSchema.$schema = "http://json-schema.org/draft-07/schema#";
95
95
  break;
96
- case "draft-2020-12":
97
- clonedSchema.$schema = "https://json-schema.org/draft/2020-12/schema";
98
- break;
99
- case "openapi-3.0": break;
100
- default: break;
96
+ case "draft-2020-12": clonedSchema.$schema = "https://json-schema.org/draft/2020-12/schema";
101
97
  }
102
98
  return clonedSchema;
103
99
  }
@@ -150,7 +146,6 @@ var AiSdkSchemaWrapper = class {
150
146
  function toStandardSchema(schema) {
151
147
  return new AiSdkSchemaWrapper(schema);
152
148
  }
153
- //#endregion
154
149
  export { AiSdkSchemaWrapper, toStandardSchema };
155
150
 
156
151
  //# sourceMappingURL=ai-sdk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-sdk.js","names":["#schema","#validate","#toJsonSchema","#convertValidationResult","failureResult"],"sources":["../../../src/standard-schema/adapters/ai-sdk.ts"],"sourcesContent":["import type { Schema } from '@internal/ai-v6';\nimport type { StandardSchemaV1, StandardJSONSchemaV1 } from '@standard-schema/spec';\nimport type { JSONSchema7 } from 'json-schema';\nimport type { StandardSchemaWithJSON, StandardSchemaWithJSONProps } from '../standard-schema.types';\n\n/**\n * Vendor name for AI SDK wrapped schemas.\n */\nconst VENDOR = 'ai-sdk';\n\n/**\n * A wrapper class that makes AI SDK Schema compatible with @standard-schema/spec.\n *\n * This class implements both `StandardSchemaV1` (validation) and `StandardJSONSchemaV1`\n * (JSON Schema conversion) interfaces. It wraps an AI SDK Schema and adapts its\n * validation method and jsonSchema property to the standard-schema interface.\n *\n * @typeParam T - The TypeScript type that the AI SDK Schema represents\n *\n * @example\n * ```typescript\n * import { jsonSchema } from '@internal/ai-v6';\n * import { toStandardSchema } from '@mastra/schema-compat/adapters/ai-sdk';\n *\n * // Create an AI SDK schema\n * const aiSdkSchema = jsonSchema<{ name: string; age: number }>({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' },\n * },\n * required: ['name', 'age'],\n * });\n *\n * // Convert to standard-schema\n * const standardSchema = toStandardSchema(aiSdkSchema);\n *\n * // Use validation (from StandardSchemaV1)\n * const result = standardSchema['~standard'].validate({ name: 'John', age: 30 });\n *\n * // Get JSON Schema (from StandardJSONSchemaV1)\n * const jsonSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' });\n * ```\n */\nexport class AiSdkSchemaWrapper<Input = unknown, Output = Input> implements StandardSchemaWithJSON<Input, Output> {\n readonly #schema: Schema<Output>;\n readonly '~standard': StandardSchemaWithJSONProps<Input, Output>;\n\n constructor(schema: Schema<Output>) {\n this.#schema = schema;\n\n // Create the ~standard property\n this['~standard'] = {\n version: 1,\n vendor: VENDOR,\n validate: this.#validate.bind(this),\n jsonSchema: {\n input: this.#toJsonSchema.bind(this),\n output: this.#toJsonSchema.bind(this),\n },\n };\n }\n\n /**\n * Validates a value against the AI SDK Schema.\n *\n * @param value - The value to validate\n * @returns A result object with either the validated value or validation issues\n */\n #validate(value: unknown): StandardSchemaV1.Result<Output> | Promise<StandardSchemaV1.Result<Output>> {\n // Check if the schema has a validate method (it's optional on AI SDK Schema)\n if (!this.#schema.validate) {\n // If no validate method, we can't validate - just pass through\n return { value: value as Output };\n }\n\n try {\n const result = this.#schema.validate(value);\n\n // Handle both sync and async validation results\n // The AI SDK Schema.validate returns ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>\n // We need to check if it's a thenable (promise-like)\n if (result && typeof result === 'object' && 'then' in result && typeof result.then === 'function') {\n // Wrap PromiseLike in a proper Promise to satisfy the StandardSchemaV1 interface\n return Promise.resolve(\n result as PromiseLike<{ success: true; value: Output } | { success: false; error: Error }>,\n )\n .then(res => this.#convertValidationResult(res))\n .catch((error: unknown) => {\n // Convert rejected promises to the expected { issues: [...] } shape\n const message = error instanceof Error ? error.message : 'Unknown validation error';\n return {\n issues: [{ message: `Schema validation error: ${message}` }],\n } as StandardSchemaV1.Result<Output>;\n });\n }\n\n // It's a sync result\n return this.#convertValidationResult(\n result as { success: true; value: Output } | { success: false; error: Error },\n );\n } catch (error) {\n // If validation fails unexpectedly, return a validation error\n const message = error instanceof Error ? error.message : 'Unknown validation error';\n return {\n issues: [{ message: `Schema validation error: ${message}` }],\n };\n }\n }\n\n /**\n * Converts an AI SDK ValidationResult to a StandardSchemaV1.Result.\n *\n * @param result - The AI SDK validation result\n * @returns A StandardSchemaV1.Result\n */\n #convertValidationResult(\n result: { success: true; value: Output } | { success: false; error: Error },\n ): StandardSchemaV1.Result<Output> {\n if (result.success) {\n return { value: result.value };\n }\n\n // Convert the AI SDK error to a Standard Schema issue\n // Cast to the failure type since TypeScript can't narrow discriminated unions with private field access\n const failureResult = result as { success: false; error: Error };\n return {\n issues: [{ message: failureResult.error.message }],\n };\n }\n\n /**\n * Returns the JSON Schema in the requested target format.\n *\n * @param options - Options including the target format\n * @returns The JSON Schema as a Record\n */\n #toJsonSchema(options: StandardJSONSchemaV1.Options): Record<string, unknown> {\n const { target } = options;\n\n // Clone the schema to avoid mutations\n const clonedSchema = JSON.parse(JSON.stringify(this.#schema.jsonSchema)) as Record<string, unknown>;\n\n // Add $schema if not present, based on target\n if (!clonedSchema.$schema) {\n switch (target) {\n case 'draft-07':\n clonedSchema.$schema = 'http://json-schema.org/draft-07/schema#';\n break;\n case 'draft-2020-12':\n clonedSchema.$schema = 'https://json-schema.org/draft/2020-12/schema';\n break;\n case 'openapi-3.0':\n // OpenAPI 3.0 doesn't use $schema\n break;\n default:\n // For unknown targets, don't add $schema\n break;\n }\n }\n\n return clonedSchema;\n }\n\n /**\n * Returns the original AI SDK Schema.\n */\n getSchema(): Schema<Output> {\n return this.#schema;\n }\n\n /**\n * Returns the original JSON Schema from the AI SDK Schema.\n */\n getJsonSchema(): JSONSchema7 {\n return this.#schema.jsonSchema as JSONSchema7;\n }\n}\n\n/**\n * Wraps an AI SDK Schema to implement the full @standard-schema/spec interface.\n *\n * This function creates a wrapper that implements both `StandardSchemaV1` (validation)\n * and `StandardJSONSchemaV1` (JSON Schema conversion) interfaces.\n *\n * @typeParam T - The TypeScript type that the AI SDK Schema represents\n * @param schema - The AI SDK Schema to wrap\n * @returns A wrapper implementing StandardSchemaWithJSON\n *\n * @example\n * ```typescript\n * import { jsonSchema } from '@internal/ai-v6';\n * import { toStandardSchema } from '@mastra/schema-compat/adapters/ai-sdk';\n *\n * const aiSdkSchema = jsonSchema<{ name: string; age: number }>({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' },\n * },\n * required: ['name', 'age'],\n * });\n *\n * const standardSchema = toStandardSchema(aiSdkSchema);\n *\n * // Validate data\n * const result = standardSchema['~standard'].validate({ name: 'John', age: 30 });\n *\n * // Get JSON Schema\n * const jsonSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' });\n * ```\n */\nexport function toStandardSchema<T = unknown>(schema: Schema<T>): AiSdkSchemaWrapper<T, T> {\n return new AiSdkSchemaWrapper<T, T>(schema);\n}\n"],"mappings":";;;;AAQA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCf,IAAa,qBAAb,MAAkH;CAChH;CACA;CAEA,YAAY,QAAwB;EAClC,KAAKA,UAAU;EAGf,KAAK,eAAe;GAClB,SAAS;GACT,QAAQ;GACR,UAAU,KAAKC,UAAU,KAAK,IAAI;GAClC,YAAY;IACV,OAAO,KAAKC,cAAc,KAAK,IAAI;IACnC,QAAQ,KAAKA,cAAc,KAAK,IAAI;GACtC;EACF;CACF;;;;;;;CAQA,UAAU,OAA4F;EAEpG,IAAI,CAAC,KAAKF,QAAQ,UAEhB,OAAO,EAAS,MAAgB;EAGlC,IAAI;GACF,MAAM,SAAS,KAAKA,QAAQ,SAAS,KAAK;GAK1C,IAAI,UAAU,OAAO,WAAW,YAAY,UAAU,UAAU,OAAO,OAAO,SAAS,YAErF,OAAO,QAAQ,QACb,MACF,CAAC,CACE,MAAK,QAAO,KAAKG,yBAAyB,GAAG,CAAC,CAAC,CAC/C,OAAO,UAAmB;IAGzB,OAAO,EACL,QAAQ,CAAC,EAAE,SAAS,4BAFN,iBAAiB,QAAQ,MAAM,UAAU,6BAEG,CAAC,EAC7D;GACF,CAAC;GAIL,OAAO,KAAKA,yBACV,MACF;EACF,SAAS,OAAO;GAGd,OAAO,EACL,QAAQ,CAAC,EAAE,SAAS,4BAFN,iBAAiB,QAAQ,MAAM,UAAU,6BAEG,CAAC,EAC7D;EACF;CACF;;;;;;;CAQA,yBACE,QACiC;EACjC,IAAI,OAAO,SACT,OAAO,EAAE,OAAO,OAAO,MAAM;EAM/B,OAAO,EACL,QAAQ,CAAC,EAAE,SAASC,OAAc,MAAM,QAAQ,CAAC,EACnD;CACF;;;;;;;CAQA,cAAc,SAAgE;EAC5E,MAAM,EAAE,WAAW;EAGnB,MAAM,eAAe,KAAK,MAAM,KAAK,UAAU,KAAKJ,QAAQ,UAAU,CAAC;EAGvE,IAAI,CAAC,aAAa,SAChB,QAAQ,QAAR;GACE,KAAK;IACH,aAAa,UAAU;IACvB;GACF,KAAK;IACH,aAAa,UAAU;IACvB;GACF,KAAK,eAEH;GACF,SAEE;EACJ;EAGF,OAAO;CACT;;;;CAKA,YAA4B;EAC1B,OAAO,KAAKA;CACd;;;;CAKA,gBAA6B;EAC3B,OAAO,KAAKA,QAAQ;CACtB;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,SAAgB,iBAA8B,QAA6C;CACzF,OAAO,IAAI,mBAAyB,MAAM;AAC5C"}
1
+ {"version":3,"file":"ai-sdk.js","names":["failureResult"],"sources":["../../../src/standard-schema/adapters/ai-sdk.ts"],"sourcesContent":["import type { Schema } from '@internal/ai-v6';\nimport type { StandardSchemaV1, StandardJSONSchemaV1 } from '@standard-schema/spec';\nimport type { JSONSchema7 } from 'json-schema';\nimport type { StandardSchemaWithJSON, StandardSchemaWithJSONProps } from '../standard-schema.types';\n\n/**\n * Vendor name for AI SDK wrapped schemas.\n */\nconst VENDOR = 'ai-sdk';\n\n/**\n * A wrapper class that makes AI SDK Schema compatible with @standard-schema/spec.\n *\n * This class implements both `StandardSchemaV1` (validation) and `StandardJSONSchemaV1`\n * (JSON Schema conversion) interfaces. It wraps an AI SDK Schema and adapts its\n * validation method and jsonSchema property to the standard-schema interface.\n *\n * @typeParam T - The TypeScript type that the AI SDK Schema represents\n *\n * @example\n * ```typescript\n * import { jsonSchema } from '@internal/ai-v6';\n * import { toStandardSchema } from '@mastra/schema-compat/adapters/ai-sdk';\n *\n * // Create an AI SDK schema\n * const aiSdkSchema = jsonSchema<{ name: string; age: number }>({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' },\n * },\n * required: ['name', 'age'],\n * });\n *\n * // Convert to standard-schema\n * const standardSchema = toStandardSchema(aiSdkSchema);\n *\n * // Use validation (from StandardSchemaV1)\n * const result = standardSchema['~standard'].validate({ name: 'John', age: 30 });\n *\n * // Get JSON Schema (from StandardJSONSchemaV1)\n * const jsonSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' });\n * ```\n */\nexport class AiSdkSchemaWrapper<Input = unknown, Output = Input> implements StandardSchemaWithJSON<Input, Output> {\n readonly #schema: Schema<Output>;\n readonly '~standard': StandardSchemaWithJSONProps<Input, Output>;\n\n constructor(schema: Schema<Output>) {\n this.#schema = schema;\n\n // Create the ~standard property\n this['~standard'] = {\n version: 1,\n vendor: VENDOR,\n validate: this.#validate.bind(this),\n jsonSchema: {\n input: this.#toJsonSchema.bind(this),\n output: this.#toJsonSchema.bind(this),\n },\n };\n }\n\n /**\n * Validates a value against the AI SDK Schema.\n *\n * @param value - The value to validate\n * @returns A result object with either the validated value or validation issues\n */\n #validate(value: unknown): StandardSchemaV1.Result<Output> | Promise<StandardSchemaV1.Result<Output>> {\n // Check if the schema has a validate method (it's optional on AI SDK Schema)\n if (!this.#schema.validate) {\n // If no validate method, we can't validate - just pass through\n return { value: value as Output };\n }\n\n try {\n const result = this.#schema.validate(value);\n\n // Handle both sync and async validation results\n // The AI SDK Schema.validate returns ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>\n // We need to check if it's a thenable (promise-like)\n if (result && typeof result === 'object' && 'then' in result && typeof result.then === 'function') {\n // Wrap PromiseLike in a proper Promise to satisfy the StandardSchemaV1 interface\n return Promise.resolve(\n result as PromiseLike<{ success: true; value: Output } | { success: false; error: Error }>,\n )\n .then(res => this.#convertValidationResult(res))\n .catch((error: unknown) => {\n // Convert rejected promises to the expected { issues: [...] } shape\n const message = error instanceof Error ? error.message : 'Unknown validation error';\n return {\n issues: [{ message: `Schema validation error: ${message}` }],\n } as StandardSchemaV1.Result<Output>;\n });\n }\n\n // It's a sync result\n return this.#convertValidationResult(\n result as { success: true; value: Output } | { success: false; error: Error },\n );\n } catch (error) {\n // If validation fails unexpectedly, return a validation error\n const message = error instanceof Error ? error.message : 'Unknown validation error';\n return {\n issues: [{ message: `Schema validation error: ${message}` }],\n };\n }\n }\n\n /**\n * Converts an AI SDK ValidationResult to a StandardSchemaV1.Result.\n *\n * @param result - The AI SDK validation result\n * @returns A StandardSchemaV1.Result\n */\n #convertValidationResult(\n result: { success: true; value: Output } | { success: false; error: Error },\n ): StandardSchemaV1.Result<Output> {\n if (result.success) {\n return { value: result.value };\n }\n\n // Convert the AI SDK error to a Standard Schema issue\n // Cast to the failure type since TypeScript can't narrow discriminated unions with private field access\n const failureResult = result as { success: false; error: Error };\n return {\n issues: [{ message: failureResult.error.message }],\n };\n }\n\n /**\n * Returns the JSON Schema in the requested target format.\n *\n * @param options - Options including the target format\n * @returns The JSON Schema as a Record\n */\n #toJsonSchema(options: StandardJSONSchemaV1.Options): Record<string, unknown> {\n const { target } = options;\n\n // Clone the schema to avoid mutations\n const clonedSchema = JSON.parse(JSON.stringify(this.#schema.jsonSchema)) as Record<string, unknown>;\n\n // Add $schema if not present, based on target\n if (!clonedSchema.$schema) {\n switch (target) {\n case 'draft-07':\n clonedSchema.$schema = 'http://json-schema.org/draft-07/schema#';\n break;\n case 'draft-2020-12':\n clonedSchema.$schema = 'https://json-schema.org/draft/2020-12/schema';\n break;\n case 'openapi-3.0':\n // OpenAPI 3.0 doesn't use $schema\n break;\n default:\n // For unknown targets, don't add $schema\n break;\n }\n }\n\n return clonedSchema;\n }\n\n /**\n * Returns the original AI SDK Schema.\n */\n getSchema(): Schema<Output> {\n return this.#schema;\n }\n\n /**\n * Returns the original JSON Schema from the AI SDK Schema.\n */\n getJsonSchema(): JSONSchema7 {\n return this.#schema.jsonSchema as JSONSchema7;\n }\n}\n\n/**\n * Wraps an AI SDK Schema to implement the full @standard-schema/spec interface.\n *\n * This function creates a wrapper that implements both `StandardSchemaV1` (validation)\n * and `StandardJSONSchemaV1` (JSON Schema conversion) interfaces.\n *\n * @typeParam T - The TypeScript type that the AI SDK Schema represents\n * @param schema - The AI SDK Schema to wrap\n * @returns A wrapper implementing StandardSchemaWithJSON\n *\n * @example\n * ```typescript\n * import { jsonSchema } from '@internal/ai-v6';\n * import { toStandardSchema } from '@mastra/schema-compat/adapters/ai-sdk';\n *\n * const aiSdkSchema = jsonSchema<{ name: string; age: number }>({\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * age: { type: 'number' },\n * },\n * required: ['name', 'age'],\n * });\n *\n * const standardSchema = toStandardSchema(aiSdkSchema);\n *\n * // Validate data\n * const result = standardSchema['~standard'].validate({ name: 'John', age: 30 });\n *\n * // Get JSON Schema\n * const jsonSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' });\n * ```\n */\nexport function toStandardSchema<T = unknown>(schema: Schema<T>): AiSdkSchemaWrapper<T, T> {\n return new AiSdkSchemaWrapper<T, T>(schema);\n}\n"],"mappings":";;;;AAQA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCf,IAAa,qBAAb,MAAkH;CAChH;CACA;CAEA,YAAY,QAAwB;EAClC,KAAK,UAAU;EAGf,KAAK,eAAe;GAClB,SAAS;GACT,QAAQ;GACR,UAAU,KAAK,UAAU,KAAK,IAAI;GAClC,YAAY;IACV,OAAO,KAAK,cAAc,KAAK,IAAI;IACnC,QAAQ,KAAK,cAAc,KAAK,IAAI;GACtC;EACF;CACF;;;;;;;CAQA,UAAU,OAA4F;EAEpG,IAAI,CAAC,KAAK,QAAQ,UAEhB,OAAO,EAAS,MAAgB;EAGlC,IAAI;GACF,MAAM,SAAS,KAAK,QAAQ,SAAS,KAAK;GAK1C,IAAI,UAAU,OAAO,WAAW,YAAY,UAAU,UAAU,OAAO,OAAO,SAAS,YAErF,OAAO,QAAQ,QACb,MACF,CAAC,CACE,MAAK,QAAO,KAAK,yBAAyB,GAAG,CAAC,CAAC,CAC/C,OAAO,UAAmB;IAGzB,OAAO,EACL,QAAQ,CAAC,EAAE,SAAS,4BAFN,iBAAiB,QAAQ,MAAM,UAAU,6BAEG,CAAC,EAC7D;GACF,CAAC;GAIL,OAAO,KAAK,yBACV,MACF;EACF,SAAS,OAAO;GAGd,OAAO,EACL,QAAQ,CAAC,EAAE,SAAS,4BAFN,iBAAiB,QAAQ,MAAM,UAAU,6BAEG,CAAC,EAC7D;EACF;CACF;;;;;;;CAQA,yBACE,QACiC;EACjC,IAAI,OAAO,SACT,OAAO,EAAE,OAAO,OAAO,MAAM;EAM/B,OAAO,EACL,QAAQ,CAAC,EAAE,SAASA,OAAc,MAAM,QAAQ,CAAC,EACnD;CACF;;;;;;;CAQA,cAAc,SAAgE;EAC5E,MAAM,EAAE,WAAW;EAGnB,MAAM,eAAe,KAAK,MAAM,KAAK,UAAU,KAAK,QAAQ,UAAU,CAAC;EAGvE,IAAI,CAAC,aAAa,SAChB,QAAQ,QAAR;GACE,KAAK;IACH,aAAa,UAAU;IACvB;GACF,KAAK,iBACH,aAAa,UAAU;EAQ3B;EAGF,OAAO;CACT;;;;CAKA,YAA4B;EAC1B,OAAO,KAAK;CACd;;;;CAKA,gBAA6B;EAC3B,OAAO,KAAK,QAAQ;CACtB;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,SAAgB,iBAA8B,QAA6C;CACzF,OAAO,IAAI,mBAAyB,MAAM;AAC5C"}
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_json_schema = require("../../json-schema-VSnKq6-P.cjs");
2
+ const require_json_schema = require("../../json-schema-7oyknwMS.cjs");
3
3
  exports.JsonSchemaWrapper = require_json_schema.JsonSchemaWrapper;
4
4
  exports.toStandardSchema = require_json_schema.toStandardSchema;
@@ -1,2 +1 @@
1
- import { n as toStandardSchema, t as JsonSchemaWrapper } from "../../json-schema-R8yfooPa.js";
2
- export { JsonSchemaWrapper, toStandardSchema };
1
+ export { t as JsonSchemaWrapper, n as toStandardSchema } from "../../json-schema-BdCwqjfN.js";
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_json_schema_traverse$1 = require("../../json-schema-traverse-DbuWNYgg.cjs");
3
- const require_esm = require("../../esm-CkNCkZSB.cjs");
4
- //#region src/standard-schema/adapters/zod-v3.ts
2
+ const require_json_schema_traverse$1 = require("../../json-schema-traverse-evfp8uQX.cjs");
3
+ const require_esm = require("../../esm-BQeGF7AD.cjs");
4
+ // src/standard-schema/adapters/zod-v3.ts
5
5
  var import_json_schema_traverse = /* @__PURE__ */ require_json_schema_traverse$1.__toESM(require_json_schema_traverse$1.require_json_schema_traverse(), 1);
6
6
  /**
7
7
  * Target mapping from Standard Schema targets to zod-to-json-schema targets.
@@ -95,7 +95,6 @@ function toStandardSchema(zodSchema) {
95
95
  });
96
96
  return wrapper;
97
97
  }
98
- //#endregion
99
98
  exports.toStandardSchema = toStandardSchema;
100
99
 
101
100
  //# sourceMappingURL=zod-v3.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"zod-v3.cjs","names":["zodToJsonSchemaOriginal","ignoreOverride"],"sources":["../../../src/standard-schema/adapters/zod-v3.ts"],"sourcesContent":["import type { StandardSchemaV1, StandardJSONSchemaV1 } from '@standard-schema/spec';\nimport traverse from 'json-schema-traverse';\n// Use zod/v3 types for v3 compatibility (v4's v3-compat layer)\nimport type { ZodType, ZodTypeDef } from 'zod/v3';\nimport zodToJsonSchemaOriginal, { ignoreOverride } from 'zod-to-json-schema';\nimport type {\n StandardSchemaWithJSON,\n StandardSchemaWithJSONProps,\n ZodToJsonSchemaTarget,\n} from '../standard-schema.types';\n/**\n * Target mapping from Standard Schema targets to zod-to-json-schema targets.\n */\nconst TARGET_MAP: Record<string, ZodToJsonSchemaTarget> = {\n 'draft-04': 'jsonSchema7',\n 'draft-07': 'jsonSchema7',\n 'draft-2020-12': 'jsonSchema2019-09',\n 'openapi-3.0': 'openApi3',\n};\n\n/**\n * Converts a Zod schema to JSON Schema using the specified target format.\n *\n * @param zodSchema - The Zod schema to convert\n * @param options - Standard Schema JSON options including the target format\n * @returns The JSON Schema representation\n * @throws Error if the target format is not supported\n *\n * @internal\n */\nfunction convertToJsonSchema<T extends ZodType<any, ZodTypeDef, any>>(\n zodSchema: T,\n options: StandardJSONSchemaV1.Options,\n): Record<string, unknown> {\n const target = TARGET_MAP[options.target];\n\n if (!target) {\n // For unknown targets, try to use jsonSchema7 as fallback or throw\n const supportedTargets = Object.keys(TARGET_MAP);\n throw new Error(\n `Unsupported JSON Schema target: \"${options.target}\". ` + `Supported targets are: ${supportedTargets.join(', ')}`,\n );\n }\n\n const jsonSchema = zodToJsonSchemaOriginal(zodSchema, {\n $refStrategy: 'none',\n target,\n override: (def: any) => {\n // Mark z.date() with x-date for downstream string→Date conversion.\n // Zod v3 has no z.coerce.date(), so all dates are strict.\n if (def.typeName === 'ZodDate') {\n return { type: 'string', format: 'date-time', 'x-date': true };\n }\n return ignoreOverride;\n },\n });\n\n traverse(jsonSchema, {\n cb: {\n pre: schema => {\n if (schema.type === 'string' && schema.format === 'email') {\n schema.pattern = `^(?!\\\\.)(?!.*\\\\.\\\\.)([A-Za-z0-9_'+\\\\-\\\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\\\-]*\\\\.)+[A-Za-z]{2,}$`;\n }\n },\n // post: (schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema) => {\n // this.postProcessJSONNode(schema, parentSchema);\n // },\n },\n });\n\n return jsonSchema as Record<string, unknown>;\n}\n\n/**\n * Wraps a Zod v3 schema to implement the full @standard-schema/spec interface.\n *\n * While Zod v3 natively implements `StandardSchemaV1` (validation), it does not\n * implement `StandardJSONSchemaV1` (JSON Schema conversion). This adapter adds\n * the `jsonSchema` property to provide JSON Schema conversion capabilities.\n *\n * @typeParam T - The Zod schema type\n *\n * @example\n * ```typescript\n * import { z } from 'zod';\n * import { toStandardSchema } from '@mastra/schema-compat/adapters/zod-v3';\n *\n * const userSchema = z.object({\n * name: z.string(),\n * age: z.number().min(0),\n * });\n *\n * const standardSchema = toStandardSchema(userSchema);\n *\n * // Use validation (from StandardSchemaV1)\n * const result = standardSchema['~standard'].validate({ name: 'John', age: 30 });\n *\n * // Get JSON Schema (from StandardJSONSchemaV1)\n * const jsonSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' });\n * ```\n */\nexport function toStandardSchema<T>(zodSchema: ZodType<T, ZodTypeDef, T>): T & StandardSchemaWithJSON<T, T> {\n // Create a wrapper object that includes the jsonSchema converter\n const wrapper = Object.create(zodSchema) as T & StandardSchemaWithJSON<T, T>;\n\n // Get the existing ~standard property from Zod\n const existingStandard = zodSchema['~standard'] as StandardSchemaV1.Props<T, T>;\n\n // Create the JSON Schema converter\n const jsonSchemaConverter: StandardJSONSchemaV1.Converter = {\n input: (options: StandardJSONSchemaV1.Options): Record<string, unknown> => {\n return convertToJsonSchema(zodSchema, options);\n },\n output: (options: StandardJSONSchemaV1.Options): Record<string, unknown> => {\n // For Zod schemas, input and output JSON Schema are typically the same\n // unless using transforms, which would need special handling\n return convertToJsonSchema(zodSchema, options);\n },\n };\n\n // Define the enhanced ~standard property\n Object.defineProperty(wrapper, '~standard', {\n value: {\n ...existingStandard,\n jsonSchema: jsonSchemaConverter,\n } satisfies StandardSchemaWithJSONProps<T, T>,\n writable: false,\n enumerable: true,\n configurable: false,\n });\n\n return wrapper;\n}\n"],"mappings":";;;;;;;;AAaA,MAAM,aAAoD;CACxD,YAAY;CACZ,YAAY;CACZ,iBAAiB;CACjB,eAAe;AACjB;;;;;;;;;;;AAYA,SAAS,oBACP,WACA,SACyB;CACzB,MAAM,SAAS,WAAW,QAAQ;CAElC,IAAI,CAAC,QAAQ;EAEX,MAAM,mBAAmB,OAAO,KAAK,UAAU;EAC/C,MAAM,IAAI,MACR,oCAAoC,QAAQ,OAAO,4BAAiC,iBAAiB,KAAK,IAAI,GAChH;CACF;CAEA,MAAM,aAAaA,YAAAA,YAAwB,WAAW;EACpD,cAAc;EACd;EACA,WAAW,QAAa;GAGtB,IAAI,IAAI,aAAa,WACnB,OAAO;IAAE,MAAM;IAAU,QAAQ;IAAa,UAAU;GAAK;GAE/D,OAAOC,YAAAA;EACT;CACF,CAAC;CAED,CAAA,GAAA,4BAAA,QAAA,CAAS,YAAY,EACnB,IAAI,EACF,MAAK,WAAU;EACb,IAAI,OAAO,SAAS,YAAY,OAAO,WAAW,SAChD,OAAO,UAAU;CAErB,EAIF,EACF,CAAC;CAED,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAgB,iBAAoB,WAAwE;CAE1G,MAAM,UAAU,OAAO,OAAO,SAAS;CAGvC,MAAM,mBAAmB,UAAU;CAGnC,MAAM,sBAAsD;EAC1D,QAAQ,YAAmE;GACzE,OAAO,oBAAoB,WAAW,OAAO;EAC/C;EACA,SAAS,YAAmE;GAG1E,OAAO,oBAAoB,WAAW,OAAO;EAC/C;CACF;CAGA,OAAO,eAAe,SAAS,aAAa;EAC1C,OAAO;GACL,GAAG;GACH,YAAY;EACd;EACA,UAAU;EACV,YAAY;EACZ,cAAc;CAChB,CAAC;CAED,OAAO;AACT"}
1
+ {"version":3,"file":"zod-v3.cjs","names":["zodToJsonSchemaOriginal","ignoreOverride"],"sources":["../../../src/standard-schema/adapters/zod-v3.ts"],"sourcesContent":["import type { StandardSchemaV1, StandardJSONSchemaV1 } from '@standard-schema/spec';\nimport traverse from 'json-schema-traverse';\n// Use zod/v3 types for v3 compatibility (v4's v3-compat layer)\nimport type { ZodType, ZodTypeDef } from 'zod/v3';\nimport zodToJsonSchemaOriginal, { ignoreOverride } from 'zod-to-json-schema';\nimport type {\n StandardSchemaWithJSON,\n StandardSchemaWithJSONProps,\n ZodToJsonSchemaTarget,\n} from '../standard-schema.types';\n/**\n * Target mapping from Standard Schema targets to zod-to-json-schema targets.\n */\nconst TARGET_MAP: Record<string, ZodToJsonSchemaTarget> = {\n 'draft-04': 'jsonSchema7',\n 'draft-07': 'jsonSchema7',\n 'draft-2020-12': 'jsonSchema2019-09',\n 'openapi-3.0': 'openApi3',\n};\n\n/**\n * Converts a Zod schema to JSON Schema using the specified target format.\n *\n * @param zodSchema - The Zod schema to convert\n * @param options - Standard Schema JSON options including the target format\n * @returns The JSON Schema representation\n * @throws Error if the target format is not supported\n *\n * @internal\n */\nfunction convertToJsonSchema<T extends ZodType<any, ZodTypeDef, any>>(\n zodSchema: T,\n options: StandardJSONSchemaV1.Options,\n): Record<string, unknown> {\n const target = TARGET_MAP[options.target];\n\n if (!target) {\n // For unknown targets, try to use jsonSchema7 as fallback or throw\n const supportedTargets = Object.keys(TARGET_MAP);\n throw new Error(\n `Unsupported JSON Schema target: \"${options.target}\". Supported targets are: ${supportedTargets.join(', ')}`,\n );\n }\n\n const jsonSchema = zodToJsonSchemaOriginal(zodSchema, {\n $refStrategy: 'none',\n target,\n override: (def: any) => {\n // Mark z.date() with x-date for downstream string→Date conversion.\n // Zod v3 has no z.coerce.date(), so all dates are strict.\n if (def.typeName === 'ZodDate') {\n return { type: 'string', format: 'date-time', 'x-date': true };\n }\n return ignoreOverride;\n },\n });\n\n traverse(jsonSchema, {\n cb: {\n pre: schema => {\n if (schema.type === 'string' && schema.format === 'email') {\n schema.pattern = `^(?!\\\\.)(?!.*\\\\.\\\\.)([A-Za-z0-9_'+\\\\-\\\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\\\-]*\\\\.)+[A-Za-z]{2,}$`;\n }\n },\n // post: (schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema) => {\n // this.postProcessJSONNode(schema, parentSchema);\n // },\n },\n });\n\n return jsonSchema as Record<string, unknown>;\n}\n\n/**\n * Wraps a Zod v3 schema to implement the full @standard-schema/spec interface.\n *\n * While Zod v3 natively implements `StandardSchemaV1` (validation), it does not\n * implement `StandardJSONSchemaV1` (JSON Schema conversion). This adapter adds\n * the `jsonSchema` property to provide JSON Schema conversion capabilities.\n *\n * @typeParam T - The Zod schema type\n *\n * @example\n * ```typescript\n * import { z } from 'zod';\n * import { toStandardSchema } from '@mastra/schema-compat/adapters/zod-v3';\n *\n * const userSchema = z.object({\n * name: z.string(),\n * age: z.number().min(0),\n * });\n *\n * const standardSchema = toStandardSchema(userSchema);\n *\n * // Use validation (from StandardSchemaV1)\n * const result = standardSchema['~standard'].validate({ name: 'John', age: 30 });\n *\n * // Get JSON Schema (from StandardJSONSchemaV1)\n * const jsonSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' });\n * ```\n */\nexport function toStandardSchema<T>(zodSchema: ZodType<T, ZodTypeDef, T>): T & StandardSchemaWithJSON<T, T> {\n // Create a wrapper object that includes the jsonSchema converter\n const wrapper = Object.create(zodSchema) as T & StandardSchemaWithJSON<T, T>;\n\n // Get the existing ~standard property from Zod\n const existingStandard = zodSchema['~standard'] as StandardSchemaV1.Props<T, T>;\n\n // Create the JSON Schema converter\n const jsonSchemaConverter: StandardJSONSchemaV1.Converter = {\n input: (options: StandardJSONSchemaV1.Options): Record<string, unknown> => {\n return convertToJsonSchema(zodSchema, options);\n },\n output: (options: StandardJSONSchemaV1.Options): Record<string, unknown> => {\n // For Zod schemas, input and output JSON Schema are typically the same\n // unless using transforms, which would need special handling\n return convertToJsonSchema(zodSchema, options);\n },\n };\n\n // Define the enhanced ~standard property\n Object.defineProperty(wrapper, '~standard', {\n value: {\n ...existingStandard,\n jsonSchema: jsonSchemaConverter,\n } satisfies StandardSchemaWithJSONProps<T, T>,\n writable: false,\n enumerable: true,\n configurable: false,\n });\n\n return wrapper;\n}\n"],"mappings":";;;;;;;;AAaA,MAAM,aAAoD;CACxD,YAAY;CACZ,YAAY;CACZ,iBAAiB;CACjB,eAAe;AACjB;;;;;;;;;;;AAYA,SAAS,oBACP,WACA,SACyB;CACzB,MAAM,SAAS,WAAW,QAAQ;CAElC,IAAI,CAAC,QAAQ;EAEX,MAAM,mBAAmB,OAAO,KAAK,UAAU;EAC/C,MAAM,IAAI,MACR,oCAAoC,QAAQ,OAAO,4BAA4B,iBAAiB,KAAK,IAAI,GAC3G;CACF;CAEA,MAAM,aAAaA,YAAAA,YAAwB,WAAW;EACpD,cAAc;EACd;EACA,WAAW,QAAa;GAGtB,IAAI,IAAI,aAAa,WACnB,OAAO;IAAE,MAAM;IAAU,QAAQ;IAAa,UAAU;GAAK;GAE/D,OAAOC,YAAAA;EACT;CACF,CAAC;CAED,CAAA,GAAA,4BAAA,QAAA,CAAS,YAAY,EACnB,IAAI,EACF,MAAK,WAAU;EACb,IAAI,OAAO,SAAS,YAAY,OAAO,WAAW,SAChD,OAAO,UAAU;CAErB,EAIF,EACF,CAAC;CAED,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAgB,iBAAoB,WAAwE;CAE1G,MAAM,UAAU,OAAO,OAAO,SAAS;CAGvC,MAAM,mBAAmB,UAAU;CAGnC,MAAM,sBAAsD;EAC1D,QAAQ,YAAmE;GACzE,OAAO,oBAAoB,WAAW,OAAO;EAC/C;EACA,SAAS,YAAmE;GAG1E,OAAO,oBAAoB,WAAW,OAAO;EAC/C;CACF;CAGA,OAAO,eAAe,SAAS,aAAa;EAC1C,OAAO;GACL,GAAG;GACH,YAAY;EACd;EACA,UAAU;EACV,YAAY;EACZ,cAAc;CAChB,CAAC;CAED,OAAO;AACT"}
@@ -1,6 +1,6 @@
1
- import { r as __toESM, t as require_json_schema_traverse } from "../../json-schema-traverse-B35mHRM8.js";
2
- import { n as ignoreOverride, t as esm_default } from "../../esm-CWlHuVIx.js";
3
- //#region src/standard-schema/adapters/zod-v3.ts
1
+ import { r as __toESM, t as require_json_schema_traverse } from "../../json-schema-traverse-D0CId4oM.js";
2
+ import { n as ignoreOverride, t as esm_default } from "../../esm-BG70JlG8.js";
3
+ // src/standard-schema/adapters/zod-v3.ts
4
4
  var import_json_schema_traverse = /* @__PURE__ */ __toESM(require_json_schema_traverse(), 1);
5
5
  /**
6
6
  * Target mapping from Standard Schema targets to zod-to-json-schema targets.
@@ -94,7 +94,6 @@ function toStandardSchema(zodSchema) {
94
94
  });
95
95
  return wrapper;
96
96
  }
97
- //#endregion
98
97
  export { toStandardSchema };
99
98
 
100
99
  //# sourceMappingURL=zod-v3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zod-v3.js","names":["zodToJsonSchemaOriginal"],"sources":["../../../src/standard-schema/adapters/zod-v3.ts"],"sourcesContent":["import type { StandardSchemaV1, StandardJSONSchemaV1 } from '@standard-schema/spec';\nimport traverse from 'json-schema-traverse';\n// Use zod/v3 types for v3 compatibility (v4's v3-compat layer)\nimport type { ZodType, ZodTypeDef } from 'zod/v3';\nimport zodToJsonSchemaOriginal, { ignoreOverride } from 'zod-to-json-schema';\nimport type {\n StandardSchemaWithJSON,\n StandardSchemaWithJSONProps,\n ZodToJsonSchemaTarget,\n} from '../standard-schema.types';\n/**\n * Target mapping from Standard Schema targets to zod-to-json-schema targets.\n */\nconst TARGET_MAP: Record<string, ZodToJsonSchemaTarget> = {\n 'draft-04': 'jsonSchema7',\n 'draft-07': 'jsonSchema7',\n 'draft-2020-12': 'jsonSchema2019-09',\n 'openapi-3.0': 'openApi3',\n};\n\n/**\n * Converts a Zod schema to JSON Schema using the specified target format.\n *\n * @param zodSchema - The Zod schema to convert\n * @param options - Standard Schema JSON options including the target format\n * @returns The JSON Schema representation\n * @throws Error if the target format is not supported\n *\n * @internal\n */\nfunction convertToJsonSchema<T extends ZodType<any, ZodTypeDef, any>>(\n zodSchema: T,\n options: StandardJSONSchemaV1.Options,\n): Record<string, unknown> {\n const target = TARGET_MAP[options.target];\n\n if (!target) {\n // For unknown targets, try to use jsonSchema7 as fallback or throw\n const supportedTargets = Object.keys(TARGET_MAP);\n throw new Error(\n `Unsupported JSON Schema target: \"${options.target}\". ` + `Supported targets are: ${supportedTargets.join(', ')}`,\n );\n }\n\n const jsonSchema = zodToJsonSchemaOriginal(zodSchema, {\n $refStrategy: 'none',\n target,\n override: (def: any) => {\n // Mark z.date() with x-date for downstream string→Date conversion.\n // Zod v3 has no z.coerce.date(), so all dates are strict.\n if (def.typeName === 'ZodDate') {\n return { type: 'string', format: 'date-time', 'x-date': true };\n }\n return ignoreOverride;\n },\n });\n\n traverse(jsonSchema, {\n cb: {\n pre: schema => {\n if (schema.type === 'string' && schema.format === 'email') {\n schema.pattern = `^(?!\\\\.)(?!.*\\\\.\\\\.)([A-Za-z0-9_'+\\\\-\\\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\\\-]*\\\\.)+[A-Za-z]{2,}$`;\n }\n },\n // post: (schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema) => {\n // this.postProcessJSONNode(schema, parentSchema);\n // },\n },\n });\n\n return jsonSchema as Record<string, unknown>;\n}\n\n/**\n * Wraps a Zod v3 schema to implement the full @standard-schema/spec interface.\n *\n * While Zod v3 natively implements `StandardSchemaV1` (validation), it does not\n * implement `StandardJSONSchemaV1` (JSON Schema conversion). This adapter adds\n * the `jsonSchema` property to provide JSON Schema conversion capabilities.\n *\n * @typeParam T - The Zod schema type\n *\n * @example\n * ```typescript\n * import { z } from 'zod';\n * import { toStandardSchema } from '@mastra/schema-compat/adapters/zod-v3';\n *\n * const userSchema = z.object({\n * name: z.string(),\n * age: z.number().min(0),\n * });\n *\n * const standardSchema = toStandardSchema(userSchema);\n *\n * // Use validation (from StandardSchemaV1)\n * const result = standardSchema['~standard'].validate({ name: 'John', age: 30 });\n *\n * // Get JSON Schema (from StandardJSONSchemaV1)\n * const jsonSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' });\n * ```\n */\nexport function toStandardSchema<T>(zodSchema: ZodType<T, ZodTypeDef, T>): T & StandardSchemaWithJSON<T, T> {\n // Create a wrapper object that includes the jsonSchema converter\n const wrapper = Object.create(zodSchema) as T & StandardSchemaWithJSON<T, T>;\n\n // Get the existing ~standard property from Zod\n const existingStandard = zodSchema['~standard'] as StandardSchemaV1.Props<T, T>;\n\n // Create the JSON Schema converter\n const jsonSchemaConverter: StandardJSONSchemaV1.Converter = {\n input: (options: StandardJSONSchemaV1.Options): Record<string, unknown> => {\n return convertToJsonSchema(zodSchema, options);\n },\n output: (options: StandardJSONSchemaV1.Options): Record<string, unknown> => {\n // For Zod schemas, input and output JSON Schema are typically the same\n // unless using transforms, which would need special handling\n return convertToJsonSchema(zodSchema, options);\n },\n };\n\n // Define the enhanced ~standard property\n Object.defineProperty(wrapper, '~standard', {\n value: {\n ...existingStandard,\n jsonSchema: jsonSchemaConverter,\n } satisfies StandardSchemaWithJSONProps<T, T>,\n writable: false,\n enumerable: true,\n configurable: false,\n });\n\n return wrapper;\n}\n"],"mappings":";;;;;;;AAaA,MAAM,aAAoD;CACxD,YAAY;CACZ,YAAY;CACZ,iBAAiB;CACjB,eAAe;AACjB;;;;;;;;;;;AAYA,SAAS,oBACP,WACA,SACyB;CACzB,MAAM,SAAS,WAAW,QAAQ;CAElC,IAAI,CAAC,QAAQ;EAEX,MAAM,mBAAmB,OAAO,KAAK,UAAU;EAC/C,MAAM,IAAI,MACR,oCAAoC,QAAQ,OAAO,4BAAiC,iBAAiB,KAAK,IAAI,GAChH;CACF;CAEA,MAAM,aAAaA,YAAwB,WAAW;EACpD,cAAc;EACd;EACA,WAAW,QAAa;GAGtB,IAAI,IAAI,aAAa,WACnB,OAAO;IAAE,MAAM;IAAU,QAAQ;IAAa,UAAU;GAAK;GAE/D,OAAO;EACT;CACF,CAAC;CAED,CAAA,GAAA,4BAAA,QAAA,CAAS,YAAY,EACnB,IAAI,EACF,MAAK,WAAU;EACb,IAAI,OAAO,SAAS,YAAY,OAAO,WAAW,SAChD,OAAO,UAAU;CAErB,EAIF,EACF,CAAC;CAED,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAgB,iBAAoB,WAAwE;CAE1G,MAAM,UAAU,OAAO,OAAO,SAAS;CAGvC,MAAM,mBAAmB,UAAU;CAGnC,MAAM,sBAAsD;EAC1D,QAAQ,YAAmE;GACzE,OAAO,oBAAoB,WAAW,OAAO;EAC/C;EACA,SAAS,YAAmE;GAG1E,OAAO,oBAAoB,WAAW,OAAO;EAC/C;CACF;CAGA,OAAO,eAAe,SAAS,aAAa;EAC1C,OAAO;GACL,GAAG;GACH,YAAY;EACd;EACA,UAAU;EACV,YAAY;EACZ,cAAc;CAChB,CAAC;CAED,OAAO;AACT"}
1
+ {"version":3,"file":"zod-v3.js","names":["zodToJsonSchemaOriginal"],"sources":["../../../src/standard-schema/adapters/zod-v3.ts"],"sourcesContent":["import type { StandardSchemaV1, StandardJSONSchemaV1 } from '@standard-schema/spec';\nimport traverse from 'json-schema-traverse';\n// Use zod/v3 types for v3 compatibility (v4's v3-compat layer)\nimport type { ZodType, ZodTypeDef } from 'zod/v3';\nimport zodToJsonSchemaOriginal, { ignoreOverride } from 'zod-to-json-schema';\nimport type {\n StandardSchemaWithJSON,\n StandardSchemaWithJSONProps,\n ZodToJsonSchemaTarget,\n} from '../standard-schema.types';\n/**\n * Target mapping from Standard Schema targets to zod-to-json-schema targets.\n */\nconst TARGET_MAP: Record<string, ZodToJsonSchemaTarget> = {\n 'draft-04': 'jsonSchema7',\n 'draft-07': 'jsonSchema7',\n 'draft-2020-12': 'jsonSchema2019-09',\n 'openapi-3.0': 'openApi3',\n};\n\n/**\n * Converts a Zod schema to JSON Schema using the specified target format.\n *\n * @param zodSchema - The Zod schema to convert\n * @param options - Standard Schema JSON options including the target format\n * @returns The JSON Schema representation\n * @throws Error if the target format is not supported\n *\n * @internal\n */\nfunction convertToJsonSchema<T extends ZodType<any, ZodTypeDef, any>>(\n zodSchema: T,\n options: StandardJSONSchemaV1.Options,\n): Record<string, unknown> {\n const target = TARGET_MAP[options.target];\n\n if (!target) {\n // For unknown targets, try to use jsonSchema7 as fallback or throw\n const supportedTargets = Object.keys(TARGET_MAP);\n throw new Error(\n `Unsupported JSON Schema target: \"${options.target}\". Supported targets are: ${supportedTargets.join(', ')}`,\n );\n }\n\n const jsonSchema = zodToJsonSchemaOriginal(zodSchema, {\n $refStrategy: 'none',\n target,\n override: (def: any) => {\n // Mark z.date() with x-date for downstream string→Date conversion.\n // Zod v3 has no z.coerce.date(), so all dates are strict.\n if (def.typeName === 'ZodDate') {\n return { type: 'string', format: 'date-time', 'x-date': true };\n }\n return ignoreOverride;\n },\n });\n\n traverse(jsonSchema, {\n cb: {\n pre: schema => {\n if (schema.type === 'string' && schema.format === 'email') {\n schema.pattern = `^(?!\\\\.)(?!.*\\\\.\\\\.)([A-Za-z0-9_'+\\\\-\\\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\\\-]*\\\\.)+[A-Za-z]{2,}$`;\n }\n },\n // post: (schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema) => {\n // this.postProcessJSONNode(schema, parentSchema);\n // },\n },\n });\n\n return jsonSchema as Record<string, unknown>;\n}\n\n/**\n * Wraps a Zod v3 schema to implement the full @standard-schema/spec interface.\n *\n * While Zod v3 natively implements `StandardSchemaV1` (validation), it does not\n * implement `StandardJSONSchemaV1` (JSON Schema conversion). This adapter adds\n * the `jsonSchema` property to provide JSON Schema conversion capabilities.\n *\n * @typeParam T - The Zod schema type\n *\n * @example\n * ```typescript\n * import { z } from 'zod';\n * import { toStandardSchema } from '@mastra/schema-compat/adapters/zod-v3';\n *\n * const userSchema = z.object({\n * name: z.string(),\n * age: z.number().min(0),\n * });\n *\n * const standardSchema = toStandardSchema(userSchema);\n *\n * // Use validation (from StandardSchemaV1)\n * const result = standardSchema['~standard'].validate({ name: 'John', age: 30 });\n *\n * // Get JSON Schema (from StandardJSONSchemaV1)\n * const jsonSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' });\n * ```\n */\nexport function toStandardSchema<T>(zodSchema: ZodType<T, ZodTypeDef, T>): T & StandardSchemaWithJSON<T, T> {\n // Create a wrapper object that includes the jsonSchema converter\n const wrapper = Object.create(zodSchema) as T & StandardSchemaWithJSON<T, T>;\n\n // Get the existing ~standard property from Zod\n const existingStandard = zodSchema['~standard'] as StandardSchemaV1.Props<T, T>;\n\n // Create the JSON Schema converter\n const jsonSchemaConverter: StandardJSONSchemaV1.Converter = {\n input: (options: StandardJSONSchemaV1.Options): Record<string, unknown> => {\n return convertToJsonSchema(zodSchema, options);\n },\n output: (options: StandardJSONSchemaV1.Options): Record<string, unknown> => {\n // For Zod schemas, input and output JSON Schema are typically the same\n // unless using transforms, which would need special handling\n return convertToJsonSchema(zodSchema, options);\n },\n };\n\n // Define the enhanced ~standard property\n Object.defineProperty(wrapper, '~standard', {\n value: {\n ...existingStandard,\n jsonSchema: jsonSchemaConverter,\n } satisfies StandardSchemaWithJSONProps<T, T>,\n writable: false,\n enumerable: true,\n configurable: false,\n });\n\n return wrapper;\n}\n"],"mappings":";;;;;;;AAaA,MAAM,aAAoD;CACxD,YAAY;CACZ,YAAY;CACZ,iBAAiB;CACjB,eAAe;AACjB;;;;;;;;;;;AAYA,SAAS,oBACP,WACA,SACyB;CACzB,MAAM,SAAS,WAAW,QAAQ;CAElC,IAAI,CAAC,QAAQ;EAEX,MAAM,mBAAmB,OAAO,KAAK,UAAU;EAC/C,MAAM,IAAI,MACR,oCAAoC,QAAQ,OAAO,4BAA4B,iBAAiB,KAAK,IAAI,GAC3G;CACF;CAEA,MAAM,aAAaA,YAAwB,WAAW;EACpD,cAAc;EACd;EACA,WAAW,QAAa;GAGtB,IAAI,IAAI,aAAa,WACnB,OAAO;IAAE,MAAM;IAAU,QAAQ;IAAa,UAAU;GAAK;GAE/D,OAAO;EACT;CACF,CAAC;CAED,CAAA,GAAA,4BAAA,QAAA,CAAS,YAAY,EACnB,IAAI,EACF,MAAK,WAAU;EACb,IAAI,OAAO,SAAS,YAAY,OAAO,WAAW,SAChD,OAAO,UAAU;CAErB,EAIF,EACF,CAAC;CAED,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAgB,iBAAoB,WAAwE;CAE1G,MAAM,UAAU,OAAO,OAAO,SAAS;CAGvC,MAAM,mBAAmB,UAAU;CAGnC,MAAM,sBAAsD;EAC1D,QAAQ,YAAmE;GACzE,OAAO,oBAAoB,WAAW,OAAO;EAC/C;EACA,SAAS,YAAmE;GAG1E,OAAO,oBAAoB,WAAW,OAAO;EAC/C;CACF;CAGA,OAAO,eAAe,SAAS,aAAa;EAC1C,OAAO;GACL,GAAG;GACH,YAAY;EACd;EACA,UAAU;EACV,YAAY;EACZ,cAAc;CAChB,CAAC;CAED,OAAO;AACT"}
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_esm = require("./esm-CkNCkZSB.cjs");
2
+ const require_esm = require("./esm-BQeGF7AD.cjs");
3
3
  let zod_v4 = require("zod/v4");
4
- //#region src/zod-to-json.ts
4
+ // src/zod-to-json.ts
5
5
  const PATCHED = Symbol("__mastra_patched__");
6
6
  /**
7
7
  * Recursively patch Zod v4 record schemas that are missing valueType.
@@ -87,8 +87,10 @@ function fixAnyOfNullable(schema) {
87
87
  ] }];
88
88
  return [key, fixAnyOfNullable(propSchema)];
89
89
  }));
90
- if (result.items) if (Array.isArray(result.items)) result.items = result.items.map((item) => fixAnyOfNullable(item));
91
- else result.items = fixAnyOfNullable(result.items);
90
+ if (result.items) {
91
+ if (Array.isArray(result.items)) result.items = result.items.map((item) => fixAnyOfNullable(item));
92
+ else result.items = fixAnyOfNullable(result.items);
93
+ }
92
94
  if (result.anyOf && Array.isArray(result.anyOf)) result.anyOf = result.anyOf.map((s) => fixAnyOfNullable(s));
93
95
  if (result.oneOf && Array.isArray(result.oneOf)) result.oneOf = result.oneOf.map((s) => fixAnyOfNullable(s));
94
96
  if (result.allOf && Array.isArray(result.allOf)) result.allOf = result.allOf.map((s) => fixAnyOfNullable(s));
@@ -331,7 +333,6 @@ function zodToJsonSchema(zodSchema, target = "jsonSchema7", strategy = "relative
331
333
  target
332
334
  });
333
335
  }
334
- //#endregion
335
336
  exports.ensureAllPropertiesRequired = ensureAllPropertiesRequired;
336
337
  exports.patchRecordSchemas = patchRecordSchemas;
337
338
  exports.prepareJsonSchemaForOpenAIStrictMode = prepareJsonSchemaForOpenAIStrictMode;
@@ -1 +1 @@
1
- {"version":3,"file":"zod-to-json.cjs","names":["zV4","zodToJsonSchemaOriginal"],"sources":["../src/zod-to-json.ts"],"sourcesContent":["import type { JSONSchema7 } from 'json-schema';\nimport type { ZodSchema as ZodSchemaV3 } from 'zod/v3';\nimport { z as zV4 } from 'zod/v4';\nimport type { Targets } from 'zod-to-json-schema';\nimport zodToJsonSchemaOriginal from 'zod-to-json-schema';\n\n// Symbol to mark schemas as already patched (for idempotency)\nconst PATCHED = Symbol('__mastra_patched__');\n\n/**\n * Recursively patch Zod v4 record schemas that are missing valueType.\n * This fixes a bug in Zod v4 where z.record(valueSchema) doesn't set def.valueType.\n * The single-arg form should set valueType but instead only sets keyType.\n *\n * Idempotent — marks patched schemas with a Symbol so repeat calls no-op.\n *\n * @internal Exported so the Zod v4 standard-schema adapter can apply the\n * same patch before its native `toJSONSchema` call (the legacy `zodToJsonSchema`\n * entry already calls it; the `applyCompatLayer` path otherwise wouldn't).\n * Not part of the public API.\n */\nexport function patchRecordSchemas(schema: any): any {\n if (!schema || typeof schema !== 'object') return schema;\n\n // Skip if already patched (idempotency check)\n if ((schema as any)[PATCHED]) return schema;\n (schema as any)[PATCHED] = true;\n\n // Check the _zod.def location (v4 structure)\n const def = schema._zod?.def;\n\n // Fix record schemas with missing valueType\n if (def?.type === 'record' && def.keyType && !def.valueType) {\n // The bug: z.record(valueSchema) puts the value in keyType instead of valueType\n // Fix: move it to valueType and set keyType to string (the default)\n def.valueType = def.keyType;\n def.keyType = zV4.string();\n }\n\n // Recursively patch nested schemas\n if (!def) return schema;\n\n if (def.type === 'object' && def.shape) {\n const shape = typeof def.shape === 'function' ? def.shape() : def.shape;\n for (const key of Object.keys(shape)) {\n patchRecordSchemas(shape[key]);\n }\n }\n\n if (def.type === 'array' && def.element) {\n patchRecordSchemas(def.element);\n }\n\n if (def.type === 'union' && def.options) {\n def.options.forEach(patchRecordSchemas);\n }\n\n if (def.type === 'record') {\n if (def.keyType) patchRecordSchemas(def.keyType);\n if (def.valueType) patchRecordSchemas(def.valueType);\n }\n\n // Handle intersection types\n if (def.type === 'intersection') {\n if (def.left) patchRecordSchemas(def.left);\n if (def.right) patchRecordSchemas(def.right);\n }\n\n // Handle lazy types - patch the schema returned by the getter\n if (def.type === 'lazy') {\n // For lazy schemas, we need to patch the schema when it's accessed\n // Store the original getter and wrap it\n if (def.getter && typeof def.getter === 'function') {\n const originalGetter = def.getter;\n def.getter = function () {\n const innerSchema = originalGetter();\n if (innerSchema) {\n patchRecordSchemas(innerSchema);\n }\n return innerSchema;\n };\n }\n }\n\n // Handle wrapper types that have innerType\n // This covers: optional, nullable, default, catch, nullish, and any other wrappers\n if (def.innerType) {\n patchRecordSchemas(def.innerType);\n }\n\n return schema;\n}\n\n/**\n * Recursively fixes anyOf patterns that some providers (like OpenAI) don't accept.\n * Converts anyOf: [{type: X}, {type: \"null\"}] to type: [X, \"null\"]\n * Also fixes empty {} property schemas by converting to a union of primitive types.\n */\nfunction fixAnyOfNullable(schema: JSONSchema7): JSONSchema7 {\n if (typeof schema !== 'object' || schema === null) {\n return schema;\n }\n\n const result = { ...schema };\n\n // Fix anyOf pattern: [{type: X}, {type: \"null\"}] or [{type: \"null\"}, {type: X}]\n if (result.anyOf && Array.isArray(result.anyOf) && result.anyOf.length === 2) {\n const nullSchema = result.anyOf.find((s: any) => typeof s === 'object' && s !== null && s.type === 'null');\n const otherSchema = result.anyOf.find((s: any) => typeof s === 'object' && s !== null && s.type !== 'null');\n\n if (nullSchema && otherSchema && typeof otherSchema === 'object' && otherSchema.type) {\n // Convert anyOf to type array format\n // Normalize sibling fields (like properties/items) before returning\n const { anyOf, ...rest } = result;\n const fixedRest = fixAnyOfNullable(rest as JSONSchema7);\n const { const: constValue, ...fixedOther } = fixAnyOfNullable(otherSchema);\n const merged: JSONSchema7 = {\n ...fixedRest,\n ...fixedOther,\n type: (Array.isArray(fixedOther.type)\n ? [...fixedOther.type, 'null']\n : [fixedOther.type, 'null']) as JSONSchema7['type'],\n };\n // `type`, `enum` and `const` must all hold, so null has to be an allowed value too.\n if (constValue !== undefined) {\n merged.enum = [constValue, null];\n } else if (Array.isArray(fixedOther.enum) && !fixedOther.enum.includes(null)) {\n merged.enum = [...fixedOther.enum, null];\n }\n return merged;\n }\n }\n\n // Fix empty property schemas {} - OpenAI requires a type key\n if (result.properties && typeof result.properties === 'object' && !Array.isArray(result.properties)) {\n result.properties = Object.fromEntries(\n Object.entries(result.properties).map(([key, value]) => {\n const propSchema = value as JSONSchema7;\n\n // If property is an empty object {}, convert to allow primitive types\n // Note: We exclude 'object' (requires additionalProperties) and 'array' (requires items) for OpenAI\n if (\n typeof propSchema === 'object' &&\n propSchema !== null &&\n !Array.isArray(propSchema) &&\n Object.keys(propSchema).length === 0\n ) {\n return [key, { type: ['string', 'number', 'boolean', 'null'] as JSONSchema7['type'] }];\n }\n\n // Recursively fix nested schemas\n return [key, fixAnyOfNullable(propSchema)];\n }),\n );\n }\n\n // Recursively fix items in arrays\n if (result.items) {\n if (Array.isArray(result.items)) {\n result.items = result.items.map(item => fixAnyOfNullable(item as JSONSchema7));\n } else {\n result.items = fixAnyOfNullable(result.items as JSONSchema7);\n }\n }\n\n // Recursively fix anyOf/oneOf/allOf schemas\n if (result.anyOf && Array.isArray(result.anyOf)) {\n result.anyOf = result.anyOf.map(s => fixAnyOfNullable(s as JSONSchema7));\n }\n if (result.oneOf && Array.isArray(result.oneOf)) {\n result.oneOf = result.oneOf.map(s => fixAnyOfNullable(s as JSONSchema7));\n }\n if (result.allOf && Array.isArray(result.allOf)) {\n result.allOf = result.allOf.map(s => fixAnyOfNullable(s as JSONSchema7));\n }\n\n return result;\n}\n\n/**\n * Apply a strict-mode pass to every schema hoisted into `$defs`/`definitions`.\n * zod-to-json-schema (v3 path, `$refStrategy: 'relative'`) lifts reused subschemas into\n * these definition maps and references them via `$ref`, so the referenced schemas must be\n * processed with the same pass as inline nodes or their unsupported keywords leak through.\n */\nfunction applyToDefinitions(result: JSONSchema7, fn: (schema: JSONSchema7) => JSONSchema7): void {\n for (const defKey of ['$defs', 'definitions'] as const) {\n const defs = (result as Record<string, unknown>)[defKey];\n if (defs && typeof defs === 'object' && !Array.isArray(defs)) {\n (result as Record<string, unknown>)[defKey] = Object.fromEntries(\n Object.entries(defs as Record<string, unknown>).map(([key, value]) => [\n key,\n typeof value === 'object' && value !== null ? fn(value as JSONSchema7) : value,\n ]),\n );\n }\n }\n}\n\n/**\n * Recursively ensures all properties in an object schema are included in the `required` array.\n * OpenAI's strict structured output mode requires every key in `properties` to also appear in `required`.\n *\n * @param schema - The JSON Schema to process\n * @returns A new schema with all properties marked as required\n */\nexport function ensureAllPropertiesRequired(schema: JSONSchema7): JSONSchema7 {\n if (typeof schema !== 'object' || schema === null) {\n return schema;\n }\n\n const result = { ...schema };\n\n if (result.type === 'object' && result.properties) {\n result.required = Object.keys(result.properties);\n result.properties = Object.fromEntries(\n Object.entries(result.properties).map(([key, value]) => [key, ensureAllPropertiesRequired(value as JSONSchema7)]),\n );\n }\n\n if (result.items) {\n if (Array.isArray(result.items)) {\n result.items = result.items.map(item => ensureAllPropertiesRequired(item as JSONSchema7));\n } else if (typeof result.items === 'object') {\n result.items = ensureAllPropertiesRequired(result.items);\n }\n }\n\n if (result.additionalProperties && typeof result.additionalProperties === 'object') {\n result.additionalProperties = ensureAllPropertiesRequired(result.additionalProperties);\n }\n\n if (result.anyOf && Array.isArray(result.anyOf)) {\n result.anyOf = result.anyOf.map(s => ensureAllPropertiesRequired(s as JSONSchema7));\n }\n if (result.oneOf && Array.isArray(result.oneOf)) {\n result.oneOf = result.oneOf.map(s => ensureAllPropertiesRequired(s as JSONSchema7));\n }\n if (result.allOf && Array.isArray(result.allOf)) {\n result.allOf = result.allOf.map(s => ensureAllPropertiesRequired(s as JSONSchema7));\n }\n\n applyToDefinitions(result, ensureAllPropertiesRequired);\n\n return result;\n}\n\n/**\n * Prepare a JSON Schema for OpenAI strict mode by ensuring all object properties\n * are required and all objects have additionalProperties: false.\n */\nexport function prepareJsonSchemaForOpenAIStrictMode(schema: JSONSchema7): JSONSchema7 {\n const withRequired = ensureAllPropertiesRequired(schema);\n const withoutAdditional = ensureAdditionalPropertiesFalse(withRequired);\n return stripUnsupportedStrictModeKeywords(withoutAdditional);\n}\n\n// Keywords OpenAI Structured Outputs strict mode rejects and that carry no natural-language\n// intent worth preserving. They are removed silently.\n// @see https://platform.openai.com/docs/guides/structured-outputs#supported-schemas\nconst STRICT_MODE_DROPPED_KEYWORDS = [\n 'contains',\n 'minContains',\n 'maxContains',\n 'minProperties',\n 'maxProperties',\n 'patternProperties',\n // z.record() emits this for its key type.\n 'propertyNames',\n 'unevaluatedItems',\n 'unevaluatedProperties',\n // Conditional/dependency keywords: unsupported by OpenAI strict mode with no\n // useful structural mapping, so they are dropped.\n 'not',\n 'if',\n 'then',\n 'else',\n 'dependentRequired',\n 'dependentSchemas',\n] as const;\n\nfunction isDeepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (Array.isArray(a) || Array.isArray(b)) {\n return Array.isArray(a) && Array.isArray(b) && a.length === b.length && a.every((v, i) => isDeepEqual(v, b[i]));\n }\n if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n return (\n keysA.length === keysB.length &&\n keysA.every(\n k => Object.hasOwn(b, k) && isDeepEqual((a as Record<string, unknown>)[k], (b as Record<string, unknown>)[k]),\n )\n );\n}\n\n/**\n * Merge `allOf` subschemas into the containing node. OpenAI strict mode rejects `allOf`\n * (only `anyOf` composition is supported), so the intersection is flattened into a single\n * node. Every keyword from every branch is hoisted so nothing (e.g. `enum`, `const`,\n * `items`, `anyOf`) is silently discarded:\n *\n * - `properties` are unioned; a property present in more than one branch must be identical.\n * - `required` is unioned. `additionalProperties: false` wins. Descriptions are concatenated.\n * - Any other keyword must either be absent from the target or deep-equal to the branch value.\n *\n * Intersections that cannot be represented this way (conflicting property schemas, types,\n * enums, nested `anyOf`, ...) are rejected with an error instead of producing a schema that\n * accepts values the original would have rejected. This mirrors the tool-path behaviour in\n * SchemaCompatLayer (\"Cannot flatten intersections with overlapping keys\").\n */\nfunction mergeAllOfSubschemas(target: JSONSchema7 & Record<string, unknown>, subschemas: JSONSchema7[]): void {\n const mergedProps = new Map<string, JSONSchema7>(\n Object.entries((target.properties as Record<string, JSONSchema7>) ?? {}),\n );\n const requiredSet = new Set<string>(Array.isArray(target.required) ? target.required : []);\n const descriptions: string[] =\n typeof target.description === 'string' && target.description ? [target.description] : [];\n\n for (const sub of subschemas) {\n if (!sub || typeof sub !== 'object') {\n continue;\n }\n for (const [key, value] of Object.entries(sub as Record<string, unknown>)) {\n switch (key) {\n case 'properties': {\n for (const [propName, propSchema] of Object.entries(value as Record<string, JSONSchema7>)) {\n if (mergedProps.has(propName) && !isDeepEqual(mergedProps.get(propName), propSchema)) {\n throw new Error(\n `Cannot flatten allOf for OpenAI strict mode: property \"${propName}\" is defined differently in multiple branches`,\n );\n }\n mergedProps.set(propName, propSchema);\n }\n break;\n }\n case 'required': {\n if (Array.isArray(value)) {\n for (const name of value) {\n requiredSet.add(name);\n }\n }\n break;\n }\n case 'additionalProperties': {\n if (value === false) {\n target.additionalProperties = false;\n }\n break;\n }\n case 'description': {\n if (typeof value === 'string' && value) {\n descriptions.push(value);\n }\n break;\n }\n default: {\n if (target[key] === undefined) {\n target[key] = value;\n } else if (!isDeepEqual(target[key], value)) {\n throw new Error(`Cannot flatten allOf for OpenAI strict mode: conflicting \"${key}\" values across branches`);\n }\n }\n }\n }\n }\n\n if (mergedProps.size) {\n target.properties = Object.fromEntries(mergedProps);\n }\n if (requiredSet.size) {\n target.required = [...requiredSet];\n }\n if (descriptions.length) {\n target.description = descriptions.join(' ');\n }\n}\n\n/**\n * Merge constraint phrases into a schema node's description.\n * Mirrors SchemaCompatLayer.mergeParameterDescription phrasing so the strict-mode\n * output path degrades identically to the tool path.\n */\nfunction appendConstraintsToDescription(description: string | undefined, constraints: string[]): string | undefined {\n if (constraints.length === 0) {\n return description;\n }\n const suffix = constraints.join(', ');\n return description ? `${description} (${suffix})` : suffix;\n}\n\n/**\n * Recursively remove JSON Schema validation keywords that OpenAI strict mode rejects.\n * Constraints with useful intent (length/number/pattern/format/uniqueness bounds) are folded\n * into the node's `description` — matching how the tool-path SchemaCompatLayer degrades them\n * in schema-compatibility.ts — while purely structural unsupported keywords are dropped.\n */\nfunction stripUnsupportedStrictModeKeywords(schema: JSONSchema7): JSONSchema7 {\n if (typeof schema !== 'object' || schema === null) {\n return schema;\n }\n\n const result = { ...schema } as JSONSchema7 & Record<string, unknown>;\n const constraints: string[] = [];\n\n // Array bounds\n const { minItems, maxItems } = result;\n if (minItems !== undefined && maxItems !== undefined && minItems === maxItems) {\n constraints.push(`exact length ${minItems}`);\n } else {\n if (minItems !== undefined) {\n constraints.push(`minimum length ${minItems}`);\n }\n if (maxItems !== undefined) {\n constraints.push(`maximum length ${maxItems}`);\n }\n }\n delete result.minItems;\n delete result.maxItems;\n\n if (result.uniqueItems === true) {\n constraints.push('all items must be unique');\n }\n delete result.uniqueItems;\n\n // String bounds\n if (result.minLength !== undefined) {\n constraints.push(`minimum length ${result.minLength}`);\n delete result.minLength;\n }\n if (result.maxLength !== undefined) {\n constraints.push(`maximum length ${result.maxLength}`);\n delete result.maxLength;\n }\n if (result.format !== undefined) {\n constraints.push(`a valid ${result.format}`);\n delete result.format;\n }\n if (result.pattern !== undefined) {\n constraints.push(`input must match this regex ${result.pattern}`);\n delete result.pattern;\n }\n\n // Number bounds\n if (result.minimum !== undefined) {\n if (result.minimum !== Number.MIN_SAFE_INTEGER) {\n constraints.push(`greater than or equal to ${result.minimum}`);\n }\n delete result.minimum;\n }\n if (result.maximum !== undefined) {\n if (result.maximum !== Number.MAX_SAFE_INTEGER) {\n constraints.push(`lower than or equal to ${result.maximum}`);\n }\n delete result.maximum;\n }\n if (result.exclusiveMinimum !== undefined) {\n constraints.push(`greater than ${result.exclusiveMinimum}`);\n delete result.exclusiveMinimum;\n }\n if (result.exclusiveMaximum !== undefined) {\n constraints.push(`lower than ${result.exclusiveMaximum}`);\n delete result.exclusiveMaximum;\n }\n if (result.multipleOf !== undefined) {\n constraints.push(`multiple of ${result.multipleOf}`);\n delete result.multipleOf;\n }\n\n // Structural unsupported keywords with no useful natural-language mapping\n for (const keyword of STRICT_MODE_DROPPED_KEYWORDS) {\n delete result[keyword];\n }\n\n if (constraints.length) {\n result.description = appendConstraintsToDescription(result.description, constraints);\n }\n\n if (result.properties) {\n result.properties = Object.fromEntries(\n Object.entries(result.properties).map(([key, value]) => [\n key,\n stripUnsupportedStrictModeKeywords(value as JSONSchema7),\n ]),\n );\n }\n\n if (result.items) {\n if (Array.isArray(result.items)) {\n result.items = result.items.map(item => stripUnsupportedStrictModeKeywords(item as JSONSchema7));\n } else if (typeof result.items === 'object') {\n result.items = stripUnsupportedStrictModeKeywords(result.items as JSONSchema7);\n }\n }\n\n if (result.additionalProperties && typeof result.additionalProperties === 'object') {\n result.additionalProperties = stripUnsupportedStrictModeKeywords(result.additionalProperties as JSONSchema7);\n }\n\n // anyOf is the only composition keyword OpenAI strict mode supports; keep it, strip its branches.\n if (result.anyOf && Array.isArray(result.anyOf)) {\n result.anyOf = result.anyOf.map(s => stripUnsupportedStrictModeKeywords(s as JSONSchema7));\n }\n\n // oneOf is unsupported; anyOf is the documented replacement, so convert it.\n // When both are present the schema is a conjunction (value must satisfy both lists);\n // concatenating the branches would turn that into a union, so reject instead.\n if (result.oneOf && Array.isArray(result.oneOf)) {\n if (Array.isArray(result.anyOf)) {\n throw new Error(\n 'Cannot convert schema for OpenAI strict mode: \"oneOf\" and \"anyOf\" on the same node cannot be merged without changing semantics',\n );\n }\n result.anyOf = result.oneOf.map(s => stripUnsupportedStrictModeKeywords(s as JSONSchema7));\n delete result.oneOf;\n }\n\n // allOf is unsupported; flatten the intersection into the containing node.\n if (result.allOf && Array.isArray(result.allOf)) {\n const merged = result.allOf.map(s => stripUnsupportedStrictModeKeywords(s as JSONSchema7));\n delete result.allOf;\n mergeAllOfSubschemas(result, merged);\n }\n\n applyToDefinitions(result, stripUnsupportedStrictModeKeywords);\n\n return result;\n}\n\nfunction ensureAdditionalPropertiesFalse(schema: JSONSchema7): JSONSchema7 {\n if (typeof schema !== 'object' || schema === null) {\n return schema;\n }\n\n const result = { ...schema };\n\n if (result.type === 'object' || result.properties) {\n result.additionalProperties = false;\n }\n\n if (result.properties) {\n result.properties = Object.fromEntries(\n Object.entries(result.properties).map(([key, value]) => [\n key,\n ensureAdditionalPropertiesFalse(value as JSONSchema7),\n ]),\n );\n }\n\n if (result.items) {\n if (Array.isArray(result.items)) {\n result.items = result.items.map(item => ensureAdditionalPropertiesFalse(item as JSONSchema7));\n } else if (typeof result.items === 'object') {\n result.items = ensureAdditionalPropertiesFalse(result.items);\n }\n }\n\n if (result.anyOf && Array.isArray(result.anyOf)) {\n result.anyOf = result.anyOf.map(s => ensureAdditionalPropertiesFalse(s as JSONSchema7));\n }\n if (result.oneOf && Array.isArray(result.oneOf)) {\n result.oneOf = result.oneOf.map(s => ensureAdditionalPropertiesFalse(s as JSONSchema7));\n }\n if (result.allOf && Array.isArray(result.allOf)) {\n result.allOf = result.allOf.map(s => ensureAdditionalPropertiesFalse(s as JSONSchema7));\n }\n\n applyToDefinitions(result, ensureAdditionalPropertiesFalse);\n\n return result;\n}\n\n// export function zotToJsonSchema(zodSchema: ZodSchemaV3 | ZodSchemaV4, target: Targets = 'jsonSchema7', strategy: 'none' | 'seen' | 'root' | 'relative' = 'relative'): JSONSchema7 {\n// const target = 'draft-07' as StandardJSONSchemaV1.Target;\n// const standardSchema = toStandardSchema(zodSchema);\n// const jsonSchema = standardSchemaToJSONSchema(standardSchema, {\n// target,\n// });\n\n// traverse(jsonSchema, {\n// cb: {\n// pre: (schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema) => {\n// this.preProcessJSONNode(schema, parentSchema);\n// },\n// post: (schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema) => {\n// this.postProcessJSONNode(schema, parentSchema);\n// },\n// },\n// });\n\n// }\n\nexport function zodToJsonSchema(\n zodSchema: any,\n target: Targets = 'jsonSchema7',\n strategy: 'none' | 'seen' | 'root' | 'relative' = 'relative',\n): JSONSchema7 {\n // Route based on whether the schema is v4 (has _zod) or v3 (only has _def).\n // We use zV4.toJSONSchema (imported from 'zod/v4') for v4 schemas, since the\n // default 'zod' import may resolve to v3 depending on the environment.\n // Without this check, v3 schemas passed to v4's toJSONSchema would throw\n // \"Cannot read properties of undefined (reading 'def')\".\n if (zodSchema?._zod) {\n // Zod v4 path - patch record schemas before converting\n patchRecordSchemas(zodSchema);\n\n const jsonSchema = zV4.toJSONSchema(zodSchema, {\n unrepresentable: 'any',\n io: 'input',\n override: (ctx: any) => {\n // Handle both Zod v4 structures: _def directly or nested in _zod\n const def = ctx.zodSchema?._def || ctx.zodSchema?._zod?.def;\n // Check for date type using both possible property names\n if (def && (def.typeName === 'ZodDate' || def.type === 'date')) {\n ctx.jsonSchema.type = 'string';\n ctx.jsonSchema.format = 'date-time';\n }\n // Add additionalProperties: false for object types to match Zod v3 behavior\n // This is required for OpenAI strict mode function calling\n if (def && (def.typeName === 'ZodObject' || def.type === 'object')) {\n ctx.jsonSchema.additionalProperties = false;\n }\n },\n }) as JSONSchema7;\n\n // Fix anyOf patterns for nullable fields - required for OpenAI compatibility\n return fixAnyOfNullable(jsonSchema);\n } else {\n // Zod v3 path - use the original converter\n return zodToJsonSchemaOriginal(zodSchema as ZodSchemaV3, {\n $refStrategy: strategy,\n target,\n }) as JSONSchema7;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"zod-to-json.cjs","names":["zV4","zodToJsonSchemaOriginal"],"sources":["../src/zod-to-json.ts"],"sourcesContent":["import type { JSONSchema7 } from 'json-schema';\nimport type { ZodSchema as ZodSchemaV3 } from 'zod/v3';\nimport { z as zV4 } from 'zod/v4';\nimport type { Targets } from 'zod-to-json-schema';\nimport zodToJsonSchemaOriginal from 'zod-to-json-schema';\n\n// Symbol to mark schemas as already patched (for idempotency)\nconst PATCHED = Symbol('__mastra_patched__');\n\n/**\n * Recursively patch Zod v4 record schemas that are missing valueType.\n * This fixes a bug in Zod v4 where z.record(valueSchema) doesn't set def.valueType.\n * The single-arg form should set valueType but instead only sets keyType.\n *\n * Idempotent — marks patched schemas with a Symbol so repeat calls no-op.\n *\n * @internal Exported so the Zod v4 standard-schema adapter can apply the\n * same patch before its native `toJSONSchema` call (the legacy `zodToJsonSchema`\n * entry already calls it; the `applyCompatLayer` path otherwise wouldn't).\n * Not part of the public API.\n */\nexport function patchRecordSchemas(schema: any): any {\n if (!schema || typeof schema !== 'object') return schema;\n\n // Skip if already patched (idempotency check)\n if ((schema as any)[PATCHED]) return schema;\n (schema as any)[PATCHED] = true;\n\n // Check the _zod.def location (v4 structure)\n const def = schema._zod?.def;\n\n // Fix record schemas with missing valueType\n if (def?.type === 'record' && def.keyType && !def.valueType) {\n // The bug: z.record(valueSchema) puts the value in keyType instead of valueType\n // Fix: move it to valueType and set keyType to string (the default)\n def.valueType = def.keyType;\n def.keyType = zV4.string();\n }\n\n // Recursively patch nested schemas\n if (!def) return schema;\n\n if (def.type === 'object' && def.shape) {\n const shape = typeof def.shape === 'function' ? def.shape() : def.shape;\n for (const key of Object.keys(shape)) {\n patchRecordSchemas(shape[key]);\n }\n }\n\n if (def.type === 'array' && def.element) {\n patchRecordSchemas(def.element);\n }\n\n if (def.type === 'union' && def.options) {\n def.options.forEach(patchRecordSchemas);\n }\n\n if (def.type === 'record') {\n if (def.keyType) patchRecordSchemas(def.keyType);\n if (def.valueType) patchRecordSchemas(def.valueType);\n }\n\n // Handle intersection types\n if (def.type === 'intersection') {\n if (def.left) patchRecordSchemas(def.left);\n if (def.right) patchRecordSchemas(def.right);\n }\n\n // Handle lazy types - patch the schema returned by the getter\n if (def.type === 'lazy') {\n // For lazy schemas, we need to patch the schema when it's accessed\n // Store the original getter and wrap it\n if (def.getter && typeof def.getter === 'function') {\n const originalGetter = def.getter;\n def.getter = function () {\n const innerSchema = originalGetter();\n if (innerSchema) {\n patchRecordSchemas(innerSchema);\n }\n return innerSchema;\n };\n }\n }\n\n // Handle wrapper types that have innerType\n // This covers: optional, nullable, default, catch, nullish, and any other wrappers\n if (def.innerType) {\n patchRecordSchemas(def.innerType);\n }\n\n return schema;\n}\n\n/**\n * Recursively fixes anyOf patterns that some providers (like OpenAI) don't accept.\n * Converts anyOf: [{type: X}, {type: \"null\"}] to type: [X, \"null\"]\n * Also fixes empty {} property schemas by converting to a union of primitive types.\n */\nfunction fixAnyOfNullable(schema: JSONSchema7): JSONSchema7 {\n if (typeof schema !== 'object' || schema === null) {\n return schema;\n }\n\n const result = { ...schema };\n\n // Fix anyOf pattern: [{type: X}, {type: \"null\"}] or [{type: \"null\"}, {type: X}]\n if (result.anyOf && Array.isArray(result.anyOf) && result.anyOf.length === 2) {\n const nullSchema = result.anyOf.find((s: any) => typeof s === 'object' && s !== null && s.type === 'null');\n const otherSchema = result.anyOf.find((s: any) => typeof s === 'object' && s !== null && s.type !== 'null');\n\n if (nullSchema && otherSchema && typeof otherSchema === 'object' && otherSchema.type) {\n // Convert anyOf to type array format\n // Normalize sibling fields (like properties/items) before returning\n const { anyOf, ...rest } = result;\n const fixedRest = fixAnyOfNullable(rest as JSONSchema7);\n const { const: constValue, ...fixedOther } = fixAnyOfNullable(otherSchema);\n const merged: JSONSchema7 = {\n ...fixedRest,\n ...fixedOther,\n type: (Array.isArray(fixedOther.type)\n ? [...fixedOther.type, 'null']\n : [fixedOther.type, 'null']) as JSONSchema7['type'],\n };\n // `type`, `enum` and `const` must all hold, so null has to be an allowed value too.\n if (constValue !== undefined) {\n merged.enum = [constValue, null];\n } else if (Array.isArray(fixedOther.enum) && !fixedOther.enum.includes(null)) {\n merged.enum = [...fixedOther.enum, null];\n }\n return merged;\n }\n }\n\n // Fix empty property schemas {} - OpenAI requires a type key\n if (result.properties && typeof result.properties === 'object' && !Array.isArray(result.properties)) {\n result.properties = Object.fromEntries(\n Object.entries(result.properties).map(([key, value]) => {\n const propSchema = value as JSONSchema7;\n\n // If property is an empty object {}, convert to allow primitive types\n // Note: We exclude 'object' (requires additionalProperties) and 'array' (requires items) for OpenAI\n if (\n typeof propSchema === 'object' &&\n propSchema !== null &&\n !Array.isArray(propSchema) &&\n Object.keys(propSchema).length === 0\n ) {\n return [key, { type: ['string', 'number', 'boolean', 'null'] as JSONSchema7['type'] }];\n }\n\n // Recursively fix nested schemas\n return [key, fixAnyOfNullable(propSchema)];\n }),\n );\n }\n\n // Recursively fix items in arrays\n if (result.items) {\n if (Array.isArray(result.items)) {\n result.items = result.items.map(item => fixAnyOfNullable(item as JSONSchema7));\n } else {\n result.items = fixAnyOfNullable(result.items as JSONSchema7);\n }\n }\n\n // Recursively fix anyOf/oneOf/allOf schemas\n if (result.anyOf && Array.isArray(result.anyOf)) {\n result.anyOf = result.anyOf.map(s => fixAnyOfNullable(s as JSONSchema7));\n }\n if (result.oneOf && Array.isArray(result.oneOf)) {\n result.oneOf = result.oneOf.map(s => fixAnyOfNullable(s as JSONSchema7));\n }\n if (result.allOf && Array.isArray(result.allOf)) {\n result.allOf = result.allOf.map(s => fixAnyOfNullable(s as JSONSchema7));\n }\n\n return result;\n}\n\n/**\n * Apply a strict-mode pass to every schema hoisted into `$defs`/`definitions`.\n * zod-to-json-schema (v3 path, `$refStrategy: 'relative'`) lifts reused subschemas into\n * these definition maps and references them via `$ref`, so the referenced schemas must be\n * processed with the same pass as inline nodes or their unsupported keywords leak through.\n */\nfunction applyToDefinitions(result: JSONSchema7, fn: (schema: JSONSchema7) => JSONSchema7): void {\n for (const defKey of ['$defs', 'definitions'] as const) {\n const defs = (result as Record<string, unknown>)[defKey];\n if (defs && typeof defs === 'object' && !Array.isArray(defs)) {\n (result as Record<string, unknown>)[defKey] = Object.fromEntries(\n Object.entries(defs as Record<string, unknown>).map(([key, value]) => [\n key,\n typeof value === 'object' && value !== null ? fn(value as JSONSchema7) : value,\n ]),\n );\n }\n }\n}\n\n/**\n * Recursively ensures all properties in an object schema are included in the `required` array.\n * OpenAI's strict structured output mode requires every key in `properties` to also appear in `required`.\n *\n * @param schema - The JSON Schema to process\n * @returns A new schema with all properties marked as required\n */\nexport function ensureAllPropertiesRequired(schema: JSONSchema7): JSONSchema7 {\n if (typeof schema !== 'object' || schema === null) {\n return schema;\n }\n\n const result = { ...schema };\n\n if (result.type === 'object' && result.properties) {\n result.required = Object.keys(result.properties);\n result.properties = Object.fromEntries(\n Object.entries(result.properties).map(([key, value]) => [key, ensureAllPropertiesRequired(value as JSONSchema7)]),\n );\n }\n\n if (result.items) {\n if (Array.isArray(result.items)) {\n result.items = result.items.map(item => ensureAllPropertiesRequired(item as JSONSchema7));\n } else if (typeof result.items === 'object') {\n result.items = ensureAllPropertiesRequired(result.items);\n }\n }\n\n if (result.additionalProperties && typeof result.additionalProperties === 'object') {\n result.additionalProperties = ensureAllPropertiesRequired(result.additionalProperties);\n }\n\n if (result.anyOf && Array.isArray(result.anyOf)) {\n result.anyOf = result.anyOf.map(s => ensureAllPropertiesRequired(s as JSONSchema7));\n }\n if (result.oneOf && Array.isArray(result.oneOf)) {\n result.oneOf = result.oneOf.map(s => ensureAllPropertiesRequired(s as JSONSchema7));\n }\n if (result.allOf && Array.isArray(result.allOf)) {\n result.allOf = result.allOf.map(s => ensureAllPropertiesRequired(s as JSONSchema7));\n }\n\n applyToDefinitions(result, ensureAllPropertiesRequired);\n\n return result;\n}\n\n/**\n * Prepare a JSON Schema for OpenAI strict mode by ensuring all object properties\n * are required and all objects have additionalProperties: false.\n */\nexport function prepareJsonSchemaForOpenAIStrictMode(schema: JSONSchema7): JSONSchema7 {\n const withRequired = ensureAllPropertiesRequired(schema);\n const withoutAdditional = ensureAdditionalPropertiesFalse(withRequired);\n return stripUnsupportedStrictModeKeywords(withoutAdditional);\n}\n\n// Keywords OpenAI Structured Outputs strict mode rejects and that carry no natural-language\n// intent worth preserving. They are removed silently.\n// @see https://platform.openai.com/docs/guides/structured-outputs#supported-schemas\nconst STRICT_MODE_DROPPED_KEYWORDS = [\n 'contains',\n 'minContains',\n 'maxContains',\n 'minProperties',\n 'maxProperties',\n 'patternProperties',\n // z.record() emits this for its key type.\n 'propertyNames',\n 'unevaluatedItems',\n 'unevaluatedProperties',\n // Conditional/dependency keywords: unsupported by OpenAI strict mode with no\n // useful structural mapping, so they are dropped.\n 'not',\n 'if',\n 'then',\n 'else',\n 'dependentRequired',\n 'dependentSchemas',\n] as const;\n\nfunction isDeepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (Array.isArray(a) || Array.isArray(b)) {\n return Array.isArray(a) && Array.isArray(b) && a.length === b.length && a.every((v, i) => isDeepEqual(v, b[i]));\n }\n if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n return (\n keysA.length === keysB.length &&\n keysA.every(\n k => Object.hasOwn(b, k) && isDeepEqual((a as Record<string, unknown>)[k], (b as Record<string, unknown>)[k]),\n )\n );\n}\n\n/**\n * Merge `allOf` subschemas into the containing node. OpenAI strict mode rejects `allOf`\n * (only `anyOf` composition is supported), so the intersection is flattened into a single\n * node. Every keyword from every branch is hoisted so nothing (e.g. `enum`, `const`,\n * `items`, `anyOf`) is silently discarded:\n *\n * - `properties` are unioned; a property present in more than one branch must be identical.\n * - `required` is unioned. `additionalProperties: false` wins. Descriptions are concatenated.\n * - Any other keyword must either be absent from the target or deep-equal to the branch value.\n *\n * Intersections that cannot be represented this way (conflicting property schemas, types,\n * enums, nested `anyOf`, ...) are rejected with an error instead of producing a schema that\n * accepts values the original would have rejected. This mirrors the tool-path behaviour in\n * SchemaCompatLayer (\"Cannot flatten intersections with overlapping keys\").\n */\nfunction mergeAllOfSubschemas(target: JSONSchema7 & Record<string, unknown>, subschemas: JSONSchema7[]): void {\n const mergedProps = new Map<string, JSONSchema7>(\n Object.entries((target.properties as Record<string, JSONSchema7>) ?? {}),\n );\n const requiredSet = new Set<string>(Array.isArray(target.required) ? target.required : []);\n const descriptions: string[] =\n typeof target.description === 'string' && target.description ? [target.description] : [];\n\n for (const sub of subschemas) {\n if (!sub || typeof sub !== 'object') {\n continue;\n }\n for (const [key, value] of Object.entries(sub as Record<string, unknown>)) {\n switch (key) {\n case 'properties': {\n for (const [propName, propSchema] of Object.entries(value as Record<string, JSONSchema7>)) {\n if (mergedProps.has(propName) && !isDeepEqual(mergedProps.get(propName), propSchema)) {\n throw new Error(\n `Cannot flatten allOf for OpenAI strict mode: property \"${propName}\" is defined differently in multiple branches`,\n );\n }\n mergedProps.set(propName, propSchema);\n }\n break;\n }\n case 'required': {\n if (Array.isArray(value)) {\n for (const name of value) {\n requiredSet.add(name);\n }\n }\n break;\n }\n case 'additionalProperties': {\n if (value === false) {\n target.additionalProperties = false;\n }\n break;\n }\n case 'description': {\n if (typeof value === 'string' && value) {\n descriptions.push(value);\n }\n break;\n }\n default: {\n if (target[key] === undefined) {\n target[key] = value;\n } else if (!isDeepEqual(target[key], value)) {\n throw new Error(`Cannot flatten allOf for OpenAI strict mode: conflicting \"${key}\" values across branches`);\n }\n }\n }\n }\n }\n\n if (mergedProps.size) {\n target.properties = Object.fromEntries(mergedProps);\n }\n if (requiredSet.size) {\n target.required = [...requiredSet];\n }\n if (descriptions.length) {\n target.description = descriptions.join(' ');\n }\n}\n\n/**\n * Merge constraint phrases into a schema node's description.\n * Mirrors SchemaCompatLayer.mergeParameterDescription phrasing so the strict-mode\n * output path degrades identically to the tool path.\n */\nfunction appendConstraintsToDescription(description: string | undefined, constraints: string[]): string | undefined {\n if (constraints.length === 0) {\n return description;\n }\n const suffix = constraints.join(', ');\n return description ? `${description} (${suffix})` : suffix;\n}\n\n/**\n * Recursively remove JSON Schema validation keywords that OpenAI strict mode rejects.\n * Constraints with useful intent (length/number/pattern/format/uniqueness bounds) are folded\n * into the node's `description` — matching how the tool-path SchemaCompatLayer degrades them\n * in schema-compatibility.ts — while purely structural unsupported keywords are dropped.\n */\nfunction stripUnsupportedStrictModeKeywords(schema: JSONSchema7): JSONSchema7 {\n if (typeof schema !== 'object' || schema === null) {\n return schema;\n }\n\n const result = { ...schema } as JSONSchema7 & Record<string, unknown>;\n const constraints: string[] = [];\n\n // Array bounds\n const { minItems, maxItems } = result;\n if (minItems !== undefined && maxItems !== undefined && minItems === maxItems) {\n constraints.push(`exact length ${minItems}`);\n } else {\n if (minItems !== undefined) {\n constraints.push(`minimum length ${minItems}`);\n }\n if (maxItems !== undefined) {\n constraints.push(`maximum length ${maxItems}`);\n }\n }\n delete result.minItems;\n delete result.maxItems;\n\n if (result.uniqueItems === true) {\n constraints.push('all items must be unique');\n }\n delete result.uniqueItems;\n\n // String bounds\n if (result.minLength !== undefined) {\n constraints.push(`minimum length ${result.minLength}`);\n delete result.minLength;\n }\n if (result.maxLength !== undefined) {\n constraints.push(`maximum length ${result.maxLength}`);\n delete result.maxLength;\n }\n if (result.format !== undefined) {\n constraints.push(`a valid ${result.format}`);\n delete result.format;\n }\n if (result.pattern !== undefined) {\n constraints.push(`input must match this regex ${result.pattern}`);\n delete result.pattern;\n }\n\n // Number bounds\n if (result.minimum !== undefined) {\n if (result.minimum !== Number.MIN_SAFE_INTEGER) {\n constraints.push(`greater than or equal to ${result.minimum}`);\n }\n delete result.minimum;\n }\n if (result.maximum !== undefined) {\n if (result.maximum !== Number.MAX_SAFE_INTEGER) {\n constraints.push(`lower than or equal to ${result.maximum}`);\n }\n delete result.maximum;\n }\n if (result.exclusiveMinimum !== undefined) {\n constraints.push(`greater than ${result.exclusiveMinimum}`);\n delete result.exclusiveMinimum;\n }\n if (result.exclusiveMaximum !== undefined) {\n constraints.push(`lower than ${result.exclusiveMaximum}`);\n delete result.exclusiveMaximum;\n }\n if (result.multipleOf !== undefined) {\n constraints.push(`multiple of ${result.multipleOf}`);\n delete result.multipleOf;\n }\n\n // Structural unsupported keywords with no useful natural-language mapping\n for (const keyword of STRICT_MODE_DROPPED_KEYWORDS) {\n delete result[keyword];\n }\n\n if (constraints.length) {\n result.description = appendConstraintsToDescription(result.description, constraints);\n }\n\n if (result.properties) {\n result.properties = Object.fromEntries(\n Object.entries(result.properties).map(([key, value]) => [\n key,\n stripUnsupportedStrictModeKeywords(value as JSONSchema7),\n ]),\n );\n }\n\n if (result.items) {\n if (Array.isArray(result.items)) {\n result.items = result.items.map(item => stripUnsupportedStrictModeKeywords(item as JSONSchema7));\n } else if (typeof result.items === 'object') {\n result.items = stripUnsupportedStrictModeKeywords(result.items as JSONSchema7);\n }\n }\n\n if (result.additionalProperties && typeof result.additionalProperties === 'object') {\n result.additionalProperties = stripUnsupportedStrictModeKeywords(result.additionalProperties as JSONSchema7);\n }\n\n // anyOf is the only composition keyword OpenAI strict mode supports; keep it, strip its branches.\n if (result.anyOf && Array.isArray(result.anyOf)) {\n result.anyOf = result.anyOf.map(s => stripUnsupportedStrictModeKeywords(s as JSONSchema7));\n }\n\n // oneOf is unsupported; anyOf is the documented replacement, so convert it.\n // When both are present the schema is a conjunction (value must satisfy both lists);\n // concatenating the branches would turn that into a union, so reject instead.\n if (result.oneOf && Array.isArray(result.oneOf)) {\n if (Array.isArray(result.anyOf)) {\n throw new Error(\n 'Cannot convert schema for OpenAI strict mode: \"oneOf\" and \"anyOf\" on the same node cannot be merged without changing semantics',\n );\n }\n result.anyOf = result.oneOf.map(s => stripUnsupportedStrictModeKeywords(s as JSONSchema7));\n delete result.oneOf;\n }\n\n // allOf is unsupported; flatten the intersection into the containing node.\n if (result.allOf && Array.isArray(result.allOf)) {\n const merged = result.allOf.map(s => stripUnsupportedStrictModeKeywords(s as JSONSchema7));\n delete result.allOf;\n mergeAllOfSubschemas(result, merged);\n }\n\n applyToDefinitions(result, stripUnsupportedStrictModeKeywords);\n\n return result;\n}\n\nfunction ensureAdditionalPropertiesFalse(schema: JSONSchema7): JSONSchema7 {\n if (typeof schema !== 'object' || schema === null) {\n return schema;\n }\n\n const result = { ...schema };\n\n if (result.type === 'object' || result.properties) {\n result.additionalProperties = false;\n }\n\n if (result.properties) {\n result.properties = Object.fromEntries(\n Object.entries(result.properties).map(([key, value]) => [\n key,\n ensureAdditionalPropertiesFalse(value as JSONSchema7),\n ]),\n );\n }\n\n if (result.items) {\n if (Array.isArray(result.items)) {\n result.items = result.items.map(item => ensureAdditionalPropertiesFalse(item as JSONSchema7));\n } else if (typeof result.items === 'object') {\n result.items = ensureAdditionalPropertiesFalse(result.items);\n }\n }\n\n if (result.anyOf && Array.isArray(result.anyOf)) {\n result.anyOf = result.anyOf.map(s => ensureAdditionalPropertiesFalse(s as JSONSchema7));\n }\n if (result.oneOf && Array.isArray(result.oneOf)) {\n result.oneOf = result.oneOf.map(s => ensureAdditionalPropertiesFalse(s as JSONSchema7));\n }\n if (result.allOf && Array.isArray(result.allOf)) {\n result.allOf = result.allOf.map(s => ensureAdditionalPropertiesFalse(s as JSONSchema7));\n }\n\n applyToDefinitions(result, ensureAdditionalPropertiesFalse);\n\n return result;\n}\n\n// export function zotToJsonSchema(zodSchema: ZodSchemaV3 | ZodSchemaV4, target: Targets = 'jsonSchema7', strategy: 'none' | 'seen' | 'root' | 'relative' = 'relative'): JSONSchema7 {\n// const target = 'draft-07' as StandardJSONSchemaV1.Target;\n// const standardSchema = toStandardSchema(zodSchema);\n// const jsonSchema = standardSchemaToJSONSchema(standardSchema, {\n// target,\n// });\n\n// traverse(jsonSchema, {\n// cb: {\n// pre: (schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema) => {\n// this.preProcessJSONNode(schema, parentSchema);\n// },\n// post: (schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema) => {\n// this.postProcessJSONNode(schema, parentSchema);\n// },\n// },\n// });\n\n// }\n\nexport function zodToJsonSchema(\n zodSchema: any,\n target: Targets = 'jsonSchema7',\n strategy: 'none' | 'seen' | 'root' | 'relative' = 'relative',\n): JSONSchema7 {\n // Route based on whether the schema is v4 (has _zod) or v3 (only has _def).\n // We use zV4.toJSONSchema (imported from 'zod/v4') for v4 schemas, since the\n // default 'zod' import may resolve to v3 depending on the environment.\n // Without this check, v3 schemas passed to v4's toJSONSchema would throw\n // \"Cannot read properties of undefined (reading 'def')\".\n if (zodSchema?._zod) {\n // Zod v4 path - patch record schemas before converting\n patchRecordSchemas(zodSchema);\n\n const jsonSchema = zV4.toJSONSchema(zodSchema, {\n unrepresentable: 'any',\n io: 'input',\n override: (ctx: any) => {\n // Handle both Zod v4 structures: _def directly or nested in _zod\n const def = ctx.zodSchema?._def || ctx.zodSchema?._zod?.def;\n // Check for date type using both possible property names\n if (def && (def.typeName === 'ZodDate' || def.type === 'date')) {\n ctx.jsonSchema.type = 'string';\n ctx.jsonSchema.format = 'date-time';\n }\n // Add additionalProperties: false for object types to match Zod v3 behavior\n // This is required for OpenAI strict mode function calling\n if (def && (def.typeName === 'ZodObject' || def.type === 'object')) {\n ctx.jsonSchema.additionalProperties = false;\n }\n },\n }) as JSONSchema7;\n\n // Fix anyOf patterns for nullable fields - required for OpenAI compatibility\n return fixAnyOfNullable(jsonSchema);\n } else {\n // Zod v3 path - use the original converter\n return zodToJsonSchemaOriginal(zodSchema as ZodSchemaV3, {\n $refStrategy: strategy,\n target,\n }) as JSONSchema7;\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { t as esm_default } from "./esm-CWlHuVIx.js";
1
+ import { t as esm_default } from "./esm-BG70JlG8.js";
2
2
  import { z } from "zod/v4";
3
- //#region src/zod-to-json.ts
3
+ // src/zod-to-json.ts
4
4
  const PATCHED = Symbol("__mastra_patched__");
5
5
  /**
6
6
  * Recursively patch Zod v4 record schemas that are missing valueType.
@@ -86,8 +86,10 @@ function fixAnyOfNullable(schema) {
86
86
  ] }];
87
87
  return [key, fixAnyOfNullable(propSchema)];
88
88
  }));
89
- if (result.items) if (Array.isArray(result.items)) result.items = result.items.map((item) => fixAnyOfNullable(item));
90
- else result.items = fixAnyOfNullable(result.items);
89
+ if (result.items) {
90
+ if (Array.isArray(result.items)) result.items = result.items.map((item) => fixAnyOfNullable(item));
91
+ else result.items = fixAnyOfNullable(result.items);
92
+ }
91
93
  if (result.anyOf && Array.isArray(result.anyOf)) result.anyOf = result.anyOf.map((s) => fixAnyOfNullable(s));
92
94
  if (result.oneOf && Array.isArray(result.oneOf)) result.oneOf = result.oneOf.map((s) => fixAnyOfNullable(s));
93
95
  if (result.allOf && Array.isArray(result.allOf)) result.allOf = result.allOf.map((s) => fixAnyOfNullable(s));
@@ -330,7 +332,6 @@ function zodToJsonSchema(zodSchema, target = "jsonSchema7", strategy = "relative
330
332
  target
331
333
  });
332
334
  }
333
- //#endregion
334
335
  export { ensureAllPropertiesRequired, patchRecordSchemas, prepareJsonSchemaForOpenAIStrictMode, zodToJsonSchema };
335
336
 
336
337
  //# sourceMappingURL=zod-to-json.js.map