1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.parseObjectDef = void 0;
- const zod_1 = require("zod");
- const parseDef_js_1 = require("../parseDef.js");
- function parseObjectDef(def, refs) {
- const forceOptionalIntoNullable = refs.target === "openAi";
- const result = {
- type: "object",
- properties: {},
- };
- const required = [];
- const shape = def.shape();
- for (const propName in shape) {
- let propDef = shape[propName];
- if (propDef === undefined || propDef._def === undefined) {
- continue;
- }
- let propOptional = safeIsOptional(propDef);
- if (propOptional && forceOptionalIntoNullable) {
- if (propDef instanceof zod_1.ZodOptional) {
- propDef = propDef._def.innerType;
- }
- if (!propDef.isNullable()) {
- propDef = propDef.nullable();
- }
- propOptional = false;
- }
- const parsedDef = (0, parseDef_js_1.parseDef)(propDef._def, {
- ...refs,
- currentPath: [...refs.currentPath, "properties", propName],
- propertyPath: [...refs.currentPath, "properties", propName],
- });
- if (parsedDef === undefined) {
- continue;
- }
- result.properties[propName] = parsedDef;
- if (!propOptional) {
- required.push(propName);
- }
- }
- if (required.length) {
- result.required = required;
- }
- const additionalProperties = decideAdditionalProperties(def, refs);
- if (additionalProperties !== undefined) {
- result.additionalProperties = additionalProperties;
- }
- return result;
- }
- exports.parseObjectDef = parseObjectDef;
- function decideAdditionalProperties(def, refs) {
- if (def.catchall._def.typeName !== "ZodNever") {
- return (0, parseDef_js_1.parseDef)(def.catchall._def, {
- ...refs,
- currentPath: [...refs.currentPath, "additionalProperties"],
- });
- }
- switch (def.unknownKeys) {
- case "passthrough":
- return refs.allowedAdditionalProperties;
- case "strict":
- return refs.rejectedAdditionalProperties;
- case "strip":
- return refs.removeAdditionalStrategy === "strict"
- ? refs.allowedAdditionalProperties
- : refs.rejectedAdditionalProperties;
- }
- }
- function safeIsOptional(schema) {
- try {
- return schema.isOptional();
- }
- catch {
- return true;
- }
- }
|