@langchain/core
Version:
Core LangChain.js abstractions and schemas
1 lines • 3.99 kB
Source Map (JSON)
{"version":3,"file":"object.cjs","names":["def: ZodObjectDef","refs: Refs","result: JsonSchema7ObjectType","required: string[]","parseDef","schema: ZodTypeAny"],"sources":["../../../../src/utils/zod-to-json-schema/parsers/object.ts"],"sourcesContent":["import { ZodObjectDef, ZodTypeAny } from \"zod/v3\";\nimport { parseDef } from \"../parseDef.js\";\nimport { JsonSchema7Type } from \"../parseTypes.js\";\nimport { Refs } from \"../Refs.js\";\n\nexport type JsonSchema7ObjectType = {\n type: \"object\";\n properties: Record<string, JsonSchema7Type>;\n additionalProperties?: boolean | JsonSchema7Type;\n required?: string[];\n};\n\nexport function parseObjectDef(def: ZodObjectDef, refs: Refs) {\n const forceOptionalIntoNullable = refs.target === \"openAi\";\n\n const result: JsonSchema7ObjectType = {\n type: \"object\",\n properties: {},\n };\n\n const required: string[] = [];\n\n const shape = def.shape();\n\n for (const propName in shape) {\n let propDef = shape[propName];\n\n if (propDef === undefined || propDef._def === undefined) {\n continue;\n }\n\n let propOptional = safeIsOptional(propDef);\n\n if (propOptional && forceOptionalIntoNullable) {\n if (propDef._def.typeName === \"ZodOptional\") {\n propDef = propDef._def.innerType;\n }\n\n if (!propDef.isNullable()) {\n propDef = propDef.nullable();\n }\n\n propOptional = false;\n }\n\n const parsedDef = parseDef(propDef._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", propName],\n propertyPath: [...refs.currentPath, \"properties\", propName],\n });\n\n if (parsedDef === undefined) {\n continue;\n }\n\n result.properties[propName] = parsedDef;\n\n if (!propOptional) {\n required.push(propName);\n }\n }\n\n if (required.length) {\n result.required = required;\n }\n\n const additionalProperties = decideAdditionalProperties(def, refs);\n\n if (additionalProperties !== undefined) {\n result.additionalProperties = additionalProperties;\n }\n\n return result;\n}\n\nfunction decideAdditionalProperties(def: ZodObjectDef, refs: Refs) {\n if (def.catchall._def.typeName !== \"ZodNever\") {\n return parseDef(def.catchall._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n });\n }\n\n switch (def.unknownKeys) {\n case \"passthrough\":\n return refs.allowedAdditionalProperties;\n case \"strict\":\n return refs.rejectedAdditionalProperties;\n case \"strip\":\n return refs.removeAdditionalStrategy === \"strict\"\n ? refs.allowedAdditionalProperties\n : refs.rejectedAdditionalProperties;\n }\n}\n\nfunction safeIsOptional(schema: ZodTypeAny): boolean {\n try {\n return schema.isOptional();\n } catch {\n return true;\n }\n}\n"],"mappings":";;;AAYA,SAAgB,eAAeA,KAAmBC,MAAY;CAC5D,MAAM,4BAA4B,KAAK,WAAW;CAElD,MAAMC,SAAgC;EACpC,MAAM;EACN,YAAY,CAAE;CACf;CAED,MAAMC,WAAqB,CAAE;CAE7B,MAAM,QAAQ,IAAI,OAAO;AAEzB,MAAK,MAAM,YAAY,OAAO;EAC5B,IAAI,UAAU,MAAM;AAEpB,MAAI,YAAY,UAAa,QAAQ,SAAS,OAC5C;EAGF,IAAI,eAAe,eAAe,QAAQ;AAE1C,MAAI,gBAAgB,2BAA2B;AAC7C,OAAI,QAAQ,KAAK,aAAa,eAC5B,UAAU,QAAQ,KAAK;AAGzB,OAAI,CAAC,QAAQ,YAAY,EACvB,UAAU,QAAQ,UAAU;GAG9B,eAAe;EAChB;EAED,MAAM,YAAYC,0BAAS,QAAQ,MAAM;GACvC,GAAG;GACH,aAAa;IAAC,GAAG,KAAK;IAAa;IAAc;GAAS;GAC1D,cAAc;IAAC,GAAG,KAAK;IAAa;IAAc;GAAS;EAC5D,EAAC;AAEF,MAAI,cAAc,OAChB;EAGF,OAAO,WAAW,YAAY;AAE9B,MAAI,CAAC,cACH,SAAS,KAAK,SAAS;CAE1B;AAED,KAAI,SAAS,QACX,OAAO,WAAW;CAGpB,MAAM,uBAAuB,2BAA2B,KAAK,KAAK;AAElE,KAAI,yBAAyB,QAC3B,OAAO,uBAAuB;AAGhC,QAAO;AACR;AAED,SAAS,2BAA2BJ,KAAmBC,MAAY;AACjE,KAAI,IAAI,SAAS,KAAK,aAAa,WACjC,QAAOG,0BAAS,IAAI,SAAS,MAAM;EACjC,GAAG;EACH,aAAa,CAAC,GAAG,KAAK,aAAa,sBAAuB;CAC3D,EAAC;AAGJ,SAAQ,IAAI,aAAZ;EACE,KAAK,cACH,QAAO,KAAK;EACd,KAAK,SACH,QAAO,KAAK;EACd,KAAK,QACH,QAAO,KAAK,6BAA6B,WACrC,KAAK,8BACL,KAAK;CACZ;AACF;AAED,SAAS,eAAeC,QAA6B;AACnD,KAAI;AACF,SAAO,OAAO,YAAY;CAC3B,QAAO;AACN,SAAO;CACR;AACF"}