@langchain/core
Version:
Core LangChain.js abstractions and schemas
1 lines • 4.52 kB
Source Map (JSON)
{"version":3,"file":"parseDef.cjs","names":["def: ZodTypeDef","refs: Refs","ignoreOverride","newItem: Seen","selectParser","item: Seen","getRelativePath","parseAnyDef","jsonSchema: JsonSchema7Type"],"sources":["../../../src/utils/zod-to-json-schema/parseDef.ts"],"sourcesContent":["import { ZodTypeDef } from \"zod/v3\";\nimport { Refs, Seen } from \"./Refs.js\";\nimport { ignoreOverride } from \"./Options.js\";\nimport { JsonSchema7Type } from \"./parseTypes.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\n\nexport function parseDef(\n def: ZodTypeDef,\n refs: Refs,\n forceResolution = false // Forces a new schema to be instantiated even though its def has been seen. Used for improving refs in definitions. See https://github.com/StefanTerdell/zod-to-json-schema/pull/61.\n): JsonSchema7Type | undefined {\n const seenItem = refs.seen.get(def);\n\n if (refs.override) {\n const overrideResult = refs.override?.(\n def,\n refs,\n seenItem,\n forceResolution\n );\n\n if (overrideResult !== ignoreOverride) {\n return overrideResult;\n }\n }\n\n if (seenItem && !forceResolution) {\n const seenSchema = get$ref(seenItem, refs);\n\n if (seenSchema !== undefined) {\n return seenSchema;\n }\n }\n\n const newItem: Seen = { def, path: refs.currentPath, jsonSchema: undefined };\n\n refs.seen.set(def, newItem);\n\n const jsonSchemaOrGetter = selectParser(def, (def as any).typeName, refs);\n\n // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n const jsonSchema =\n typeof jsonSchemaOrGetter === \"function\"\n ? parseDef(jsonSchemaOrGetter(), refs)\n : jsonSchemaOrGetter;\n\n if (jsonSchema) {\n addMeta(def, refs, jsonSchema);\n }\n\n if (refs.postProcess) {\n const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n\n newItem.jsonSchema = jsonSchema;\n\n return postProcessResult;\n }\n\n newItem.jsonSchema = jsonSchema;\n\n return jsonSchema;\n}\n\nconst get$ref = (\n item: Seen,\n refs: Refs\n):\n | {\n $ref: string;\n }\n | {}\n | undefined => {\n switch (refs.$refStrategy) {\n case \"root\":\n return { $ref: item.path.join(\"/\") };\n case \"relative\":\n return { $ref: getRelativePath(refs.currentPath, item.path) };\n case \"none\":\n case \"seen\": {\n if (\n item.path.length < refs.currentPath.length &&\n item.path.every((value, index) => refs.currentPath[index] === value)\n ) {\n console.warn(\n `Recursive reference detected at ${refs.currentPath.join(\n \"/\"\n )}! Defaulting to any`\n );\n\n return parseAnyDef(refs);\n }\n\n return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n }\n }\n};\n\nconst addMeta = (\n def: ZodTypeDef,\n refs: Refs,\n jsonSchema: JsonSchema7Type\n): JsonSchema7Type => {\n if (def.description) {\n jsonSchema.description = def.description;\n\n if (refs.markdownDescription) {\n jsonSchema.markdownDescription = def.description;\n }\n }\n return jsonSchema;\n};\n"],"mappings":";;;;;;AAQA,SAAgB,SACdA,KACAC,MACA,kBAAkB,OACW;CAC7B,MAAM,WAAW,KAAK,KAAK,IAAI,IAAI;AAEnC,KAAI,KAAK,UAAU;EACjB,MAAM,iBAAiB,KAAK,WAC1B,KACA,MACA,UACA,gBACD;AAED,MAAI,mBAAmBC,+BACrB,QAAO;CAEV;AAED,KAAI,YAAY,CAAC,iBAAiB;EAChC,MAAM,aAAa,QAAQ,UAAU,KAAK;AAE1C,MAAI,eAAe,OACjB,QAAO;CAEV;CAED,MAAMC,UAAgB;EAAE;EAAK,MAAM,KAAK;EAAa,YAAY;CAAW;CAE5E,KAAK,KAAK,IAAI,KAAK,QAAQ;CAE3B,MAAM,qBAAqBC,kCAAa,KAAM,IAAY,UAAU,KAAK;CAGzE,MAAM,aACJ,OAAO,uBAAuB,aAC1B,SAAS,oBAAoB,EAAE,KAAK,GACpC;AAEN,KAAI,YACF,QAAQ,KAAK,MAAM,WAAW;AAGhC,KAAI,KAAK,aAAa;EACpB,MAAM,oBAAoB,KAAK,YAAY,YAAY,KAAK,KAAK;EAEjE,QAAQ,aAAa;AAErB,SAAO;CACR;CAED,QAAQ,aAAa;AAErB,QAAO;AACR;AAED,MAAM,UAAU,CACdC,MACAJ,SAMe;AACf,SAAQ,KAAK,cAAb;EACE,KAAK,OACH,QAAO,EAAE,MAAM,KAAK,KAAK,KAAK,IAAI,CAAE;EACtC,KAAK,WACH,QAAO,EAAE,MAAMK,wCAAgB,KAAK,aAAa,KAAK,KAAK,CAAE;EAC/D,KAAK;EACL,KAAK;AACH,OACE,KAAK,KAAK,SAAS,KAAK,YAAY,UACpC,KAAK,KAAK,MAAM,CAAC,OAAO,UAAU,KAAK,YAAY,WAAW,MAAM,EACpE;IACA,QAAQ,KACN,CAAC,gCAAgC,EAAE,KAAK,YAAY,KAClD,IACD,CAAC,mBAAmB,CAAC,CACvB;AAED,WAAOC,wBAAY,KAAK;GACzB;AAED,UAAO,KAAK,iBAAiB,SAASA,wBAAY,KAAK,GAAG;CAE7D;AACF;AAED,MAAM,UAAU,CACdP,KACAC,MACAO,eACoB;AACpB,KAAI,IAAI,aAAa;EACnB,WAAW,cAAc,IAAI;AAE7B,MAAI,KAAK,qBACP,WAAW,sBAAsB,IAAI;CAExC;AACD,QAAO;AACR"}