@langchain/core
Version:
Core LangChain.js abstractions and schemas
1 lines • 4.42 kB
Source Map (JSON)
{"version":3,"file":"parseDef.cjs","names":["ignoreOverride","selectParser","getRelativePath","parseAnyDef"],"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,SACd,KACA,MACA,kBAAkB,OACW;CAC7B,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;CAElC,IAAI,KAAK,UAAU;EACjB,MAAM,iBAAiB,KAAK,WAC1B,KACA,MACA,UACA,eACF;EAEA,IAAI,mBAAmBA,gBAAAA,gBACrB,OAAO;CAEX;CAEA,IAAI,YAAY,CAAC,iBAAiB;EAChC,MAAM,aAAa,QAAQ,UAAU,IAAI;EAEzC,IAAI,eAAe,KAAA,GACjB,OAAO;CAEX;CAEA,MAAM,UAAgB;EAAE;EAAK,MAAM,KAAK;EAAa,YAAY,KAAA;CAAU;CAE3E,KAAK,KAAK,IAAI,KAAK,OAAO;CAE1B,MAAM,qBAAqBC,qBAAAA,aAAa,KAAM,IAAY,UAAU,IAAI;CAGxE,MAAM,aACJ,OAAO,uBAAuB,aAC1B,SAAS,mBAAmB,GAAG,IAAI,IACnC;CAEN,IAAI,YACF,QAAQ,KAAK,MAAM,UAAU;CAG/B,IAAI,KAAK,aAAa;EACpB,MAAM,oBAAoB,KAAK,YAAY,YAAY,KAAK,IAAI;EAEhE,QAAQ,aAAa;EAErB,OAAO;CACT;CAEA,QAAQ,aAAa;CAErB,OAAO;AACT;AAEA,MAAM,WACJ,MACA,SAMe;CACf,QAAQ,KAAK,cAAb;EACE,KAAK,QACH,OAAO,EAAE,MAAM,KAAK,KAAK,KAAK,GAAG,EAAE;EACrC,KAAK,YACH,OAAO,EAAE,MAAMC,wBAAAA,gBAAgB,KAAK,aAAa,KAAK,IAAI,EAAE;EAC9D,KAAK;EACL,KAAK;GACH,IACE,KAAK,KAAK,SAAS,KAAK,YAAY,UACpC,KAAK,KAAK,OAAO,OAAO,UAAU,KAAK,YAAY,WAAW,KAAK,GACnE;IACA,QAAQ,KACN,mCAAmC,KAAK,YAAY,KAClD,GACF,EAAE,oBACJ;IAEA,OAAOC,YAAAA,YAAY,IAAI;GACzB;GAEA,OAAO,KAAK,iBAAiB,SAASA,YAAAA,YAAY,IAAI,IAAI,KAAA;CAE9D;AACF;AAEA,MAAM,WACJ,KACA,MACA,eACoB;CACpB,IAAI,IAAI,aAAa;EACnB,WAAW,cAAc,IAAI;EAE7B,IAAI,KAAK,qBACP,WAAW,sBAAsB,IAAI;CAEzC;CACA,OAAO;AACT"}