UNPKG

@langchain/core

Version:
1 lines 5.48 kB
{"version":3,"file":"zodToJsonSchema.cjs","names":["getRefs","parseDef","parseAnyDef"],"sources":["../../../src/utils/zod-to-json-schema/zodToJsonSchema.ts"],"sourcesContent":["import { ZodSchema } from \"zod/v3\";\nimport { Options, Targets } from \"./Options.js\";\nimport { parseDef } from \"./parseDef.js\";\nimport { JsonSchema7Type } from \"./parseTypes.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\n\nconst zodToJsonSchema = <Target extends Targets = \"jsonSchema7\">(\n schema: ZodSchema<any>,\n options?: Partial<Options<Target>> | string\n): (Target extends \"jsonSchema7\" ? JsonSchema7Type : object) & {\n $schema?: string;\n definitions?: {\n [key: string]: Target extends \"jsonSchema7\"\n ? JsonSchema7Type\n : Target extends \"jsonSchema2019-09\"\n ? JsonSchema7Type\n : object;\n };\n} => {\n const refs = getRefs(options);\n\n let definitions =\n typeof options === \"object\" && options.definitions\n ? Object.entries(options.definitions).reduce(\n (acc: { [key: string]: JsonSchema7Type }, [name, schema]) => ({\n ...acc,\n [name]:\n parseDef(\n schema._def,\n {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n },\n true\n ) ?? parseAnyDef(refs),\n }),\n {}\n )\n : undefined;\n\n const name =\n typeof options === \"string\"\n ? options\n : options?.nameStrategy === \"title\"\n ? undefined\n : options?.name;\n\n const main =\n parseDef(\n schema._def,\n name === undefined\n ? refs\n : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n },\n false\n ) ?? (parseAnyDef(refs) as JsonSchema7Type);\n\n const title =\n typeof options === \"object\" &&\n options.name !== undefined &&\n options.nameStrategy === \"title\"\n ? options.name\n : undefined;\n\n if (title !== undefined) {\n main.title = title;\n }\n\n if (refs.flags.hasReferencedOpenAiAnyType) {\n if (!definitions) {\n definitions = {};\n }\n\n if (!definitions[refs.openAiAnyTypeName]) {\n definitions[refs.openAiAnyTypeName] = {\n // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n items: {\n $ref:\n refs.$refStrategy === \"relative\"\n ? \"1\"\n : [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ].join(\"/\"),\n },\n } as JsonSchema7Type;\n }\n }\n\n const combined: ReturnType<typeof zodToJsonSchema<Target>> =\n name === undefined\n ? definitions\n ? {\n ...main,\n [refs.definitionPath]: definitions,\n }\n : main\n : {\n $ref: [\n ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n refs.definitionPath,\n name,\n ].join(\"/\"),\n [refs.definitionPath]: {\n ...definitions,\n [name]: main,\n },\n };\n\n if (refs.target === \"jsonSchema7\") {\n combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n } else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n }\n\n if (\n refs.target === \"openAi\" &&\n (\"anyOf\" in combined ||\n \"oneOf\" in combined ||\n \"allOf\" in combined ||\n (\"type\" in combined && Array.isArray(combined.type)))\n ) {\n console.warn(\n \"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\"\n );\n }\n\n return combined;\n};\n\nexport { zodToJsonSchema };\n"],"mappings":";;;;AAOA,MAAM,mBACJ,QACA,YAUG;CACH,MAAM,OAAOA,aAAAA,QAAQ,QAAQ;CAE7B,IAAI,cACF,OAAO,YAAY,YAAY,QAAQ,cACnC,OAAO,QAAQ,QAAQ,YAAY,CAAC,QACjC,KAAyC,CAAC,MAAM,aAAa;EAC5D,GAAG;GACF,OACCC,iBAAAA,SACE,OAAO,MACP;GACE,GAAG;GACH,aAAa;IAAC,GAAG,KAAK;IAAU,KAAK;IAAgB;IAAK;GAC3D,EACD,KACD,IAAIC,YAAAA,YAAY,KAAK;EACzB,GACD,EAAE,CACH,GACD,KAAA;CAEN,MAAM,OACJ,OAAO,YAAY,WACf,UACA,SAAS,iBAAiB,UAC1B,KAAA,IACA,SAAS;CAEf,MAAM,OACJD,iBAAAA,SACE,OAAO,MACP,SAAS,KAAA,IACL,OACA;EACE,GAAG;EACH,aAAa;GAAC,GAAG,KAAK;GAAU,KAAK;GAAgB;GAAK;EAC3D,EACL,MACD,IAAKC,YAAAA,YAAY,KAAK;CAEzB,MAAM,QACJ,OAAO,YAAY,YACnB,QAAQ,SAAS,KAAA,KACjB,QAAQ,iBAAiB,UACrB,QAAQ,OACR,KAAA;AAEN,KAAI,UAAU,KAAA,EACZ,MAAK,QAAQ;AAGf,KAAI,KAAK,MAAM,4BAA4B;AACzC,MAAI,CAAC,YACH,eAAc,EAAE;AAGlB,MAAI,CAAC,YAAY,KAAK,mBACpB,aAAY,KAAK,qBAAqB;GAEpC,MAAM;IAAC;IAAU;IAAU;IAAW;IAAW;IAAS;IAAO;GACjE,OAAO,EACL,MACE,KAAK,iBAAiB,aAClB,MACA;IACE,GAAG,KAAK;IACR,KAAK;IACL,KAAK;IACN,CAAC,KAAK,IAAI,EAClB;GACF;;CAIL,MAAM,WACJ,SAAS,KAAA,IACL,cACE;EACE,GAAG;GACF,KAAK,iBAAiB;EACxB,GACD,OACF;EACE,MAAM;GACJ,GAAI,KAAK,iBAAiB,aAAa,EAAE,GAAG,KAAK;GACjD,KAAK;GACL;GACD,CAAC,KAAK,IAAI;GACV,KAAK,iBAAiB;GACrB,GAAG;IACF,OAAO;GACT;EACF;AAEP,KAAI,KAAK,WAAW,cAClB,UAAS,UAAU;UACV,KAAK,WAAW,uBAAuB,KAAK,WAAW,SAChE,UAAS,UAAU;AAGrB,KACE,KAAK,WAAW,aACf,WAAW,YACV,WAAW,YACX,WAAW,YACV,UAAU,YAAY,MAAM,QAAQ,SAAS,KAAK,EAErD,SAAQ,KACN,uGACD;AAGH,QAAO"}