@langchain/core
Version:
Core LangChain.js abstractions and schemas
1 lines • 4.4 kB
Source Map (JSON)
{"version":3,"file":"record.cjs","names":["ZodFirstPartyTypeKind","parseDef","parseAnyDef","parseStringDef","parseBrandedDef"],"sources":["../../../../src/utils/zod-to-json-schema/parsers/record.ts"],"sourcesContent":["import {\n ZodFirstPartyTypeKind,\n ZodMapDef,\n ZodRecordDef,\n ZodTypeAny,\n} from \"zod/v3\";\nimport { parseDef } from \"../parseDef.js\";\nimport { JsonSchema7Type } from \"../parseTypes.js\";\nimport { Refs } from \"../Refs.js\";\nimport { JsonSchema7EnumType } from \"./enum.js\";\nimport { JsonSchema7ObjectType } from \"./object.js\";\nimport { JsonSchema7StringType, parseStringDef } from \"./string.js\";\nimport { parseBrandedDef } from \"./branded.js\";\nimport { parseAnyDef } from \"./any.js\";\n\ntype JsonSchema7RecordPropertyNamesType =\n | Omit<JsonSchema7StringType, \"type\">\n | Omit<JsonSchema7EnumType, \"type\">;\n\nexport type JsonSchema7RecordType = {\n type: \"object\";\n additionalProperties?: JsonSchema7Type | true;\n propertyNames?: JsonSchema7RecordPropertyNamesType;\n};\n\nexport function parseRecordDef(\n def: ZodRecordDef<ZodTypeAny, ZodTypeAny> | ZodMapDef,\n refs: Refs\n): JsonSchema7RecordType {\n if (refs.target === \"openAi\") {\n console.warn(\n \"Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.\"\n );\n }\n\n if (\n refs.target === \"openApi3\" &&\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum\n ) {\n return {\n type: \"object\",\n required: def.keyType._def.values,\n properties: def.keyType._def.values.reduce(\n (acc: Record<string, JsonSchema7Type>, key: string) => ({\n ...acc,\n [key]:\n parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", key],\n }) ?? parseAnyDef(refs),\n }),\n {}\n ),\n additionalProperties: refs.rejectedAdditionalProperties,\n } satisfies JsonSchema7ObjectType as any;\n }\n\n const schema: JsonSchema7RecordType = {\n type: \"object\",\n additionalProperties:\n parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n }) ?? refs.allowedAdditionalProperties,\n };\n\n if (refs.target === \"openApi3\") {\n return schema;\n }\n\n if (\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.checks?.length\n ) {\n const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n\n return {\n ...schema,\n propertyNames: keyType,\n };\n } else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n ...schema,\n propertyNames: {\n enum: def.keyType._def.values,\n },\n };\n } else if (\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.type._def.checks?.length\n ) {\n const { type, ...keyType } = parseBrandedDef(\n def.keyType._def,\n refs\n ) as JsonSchema7StringType;\n\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n\n return schema;\n}\n"],"mappings":";;;;;;;AAyBA,SAAgB,eACd,KACA,MACuB;AACvB,KAAI,KAAK,WAAW,SAClB,SAAQ,KACN,+FACD;AAGH,KACE,KAAK,WAAW,cAChB,IAAI,SAAS,KAAK,aAAaA,OAAAA,sBAAsB,QAErD,QAAO;EACL,MAAM;EACN,UAAU,IAAI,QAAQ,KAAK;EAC3B,YAAY,IAAI,QAAQ,KAAK,OAAO,QACjC,KAAsC,SAAiB;GACtD,GAAG;IACF,MACCC,iBAAAA,SAAS,IAAI,UAAU,MAAM;IAC3B,GAAG;IACH,aAAa;KAAC,GAAG,KAAK;KAAa;KAAc;KAAI;IACtD,CAAC,IAAIC,YAAAA,YAAY,KAAK;GAC1B,GACD,EAAE,CACH;EACD,sBAAsB,KAAK;EAC5B;CAGH,MAAM,SAAgC;EACpC,MAAM;EACN,sBACED,iBAAAA,SAAS,IAAI,UAAU,MAAM;GAC3B,GAAG;GACH,aAAa,CAAC,GAAG,KAAK,aAAa,uBAAuB;GAC3D,CAAC,IAAI,KAAK;EACd;AAED,KAAI,KAAK,WAAW,WAClB,QAAO;AAGT,KACE,IAAI,SAAS,KAAK,aAAaD,OAAAA,sBAAsB,aACrD,IAAI,QAAQ,KAAK,QAAQ,QACzB;EACA,MAAM,EAAE,MAAM,GAAG,YAAYG,eAAAA,eAAe,IAAI,QAAQ,MAAM,KAAK;AAEnE,SAAO;GACL,GAAG;GACH,eAAe;GAChB;YACQ,IAAI,SAAS,KAAK,aAAaH,OAAAA,sBAAsB,QAC9D,QAAO;EACL,GAAG;EACH,eAAe,EACb,MAAM,IAAI,QAAQ,KAAK,QACxB;EACF;UAED,IAAI,SAAS,KAAK,aAAaA,OAAAA,sBAAsB,cACrD,IAAI,QAAQ,KAAK,KAAK,KAAK,aAAaA,OAAAA,sBAAsB,aAC9D,IAAI,QAAQ,KAAK,KAAK,KAAK,QAAQ,QACnC;EACA,MAAM,EAAE,MAAM,GAAG,YAAYI,gBAAAA,gBAC3B,IAAI,QAAQ,MACZ,KACD;AAED,SAAO;GACL,GAAG;GACH,eAAe;GAChB;;AAGH,QAAO"}