57 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", { value: true });
							 | 
						||
| 
								 | 
							
								exports.parseObjectDef = parseObjectDef;
							 | 
						||
| 
								 | 
							
								const parseDef_1 = require("../parseDef.js");
							 | 
						||
| 
								 | 
							
								function decideAdditionalProperties(def, refs) {
							 | 
						||
| 
								 | 
							
								    if (refs.removeAdditionalStrategy === 'strict') {
							 | 
						||
| 
								 | 
							
								        return def.catchall._def.typeName === 'ZodNever' ?
							 | 
						||
| 
								 | 
							
								            def.unknownKeys !== 'strict'
							 | 
						||
| 
								 | 
							
								            : (0, parseDef_1.parseDef)(def.catchall._def, {
							 | 
						||
| 
								 | 
							
								                ...refs,
							 | 
						||
| 
								 | 
							
								                currentPath: [...refs.currentPath, 'additionalProperties'],
							 | 
						||
| 
								 | 
							
								            }) ?? true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    else {
							 | 
						||
| 
								 | 
							
								        return def.catchall._def.typeName === 'ZodNever' ?
							 | 
						||
| 
								 | 
							
								            def.unknownKeys === 'passthrough'
							 | 
						||
| 
								 | 
							
								            : (0, parseDef_1.parseDef)(def.catchall._def, {
							 | 
						||
| 
								 | 
							
								                ...refs,
							 | 
						||
| 
								 | 
							
								                currentPath: [...refs.currentPath, 'additionalProperties'],
							 | 
						||
| 
								 | 
							
								            }) ?? true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								function parseObjectDef(def, refs) {
							 | 
						||
| 
								 | 
							
								    const result = {
							 | 
						||
| 
								 | 
							
								        type: 'object',
							 | 
						||
| 
								 | 
							
								        ...Object.entries(def.shape()).reduce((acc, [propName, propDef]) => {
							 | 
						||
| 
								 | 
							
								            if (propDef === undefined || propDef._def === undefined)
							 | 
						||
| 
								 | 
							
								                return acc;
							 | 
						||
| 
								 | 
							
								            const propertyPath = [...refs.currentPath, 'properties', propName];
							 | 
						||
| 
								 | 
							
								            const parsedDef = (0, parseDef_1.parseDef)(propDef._def, {
							 | 
						||
| 
								 | 
							
								                ...refs,
							 | 
						||
| 
								 | 
							
								                currentPath: propertyPath,
							 | 
						||
| 
								 | 
							
								                propertyPath,
							 | 
						||
| 
								 | 
							
								            });
							 | 
						||
| 
								 | 
							
								            if (parsedDef === undefined)
							 | 
						||
| 
								 | 
							
								                return acc;
							 | 
						||
| 
								 | 
							
								            if (refs.openaiStrictMode &&
							 | 
						||
| 
								 | 
							
								                propDef.isOptional() &&
							 | 
						||
| 
								 | 
							
								                !propDef.isNullable() &&
							 | 
						||
| 
								 | 
							
								                typeof propDef._def?.defaultValue === 'undefined') {
							 | 
						||
| 
								 | 
							
								                throw new Error(`Zod field at \`${propertyPath.join('/')}\` uses \`.optional()\` without \`.nullable()\` which is not supported by the API. See: https://platform.openai.com/docs/guides/structured-outputs?api-mode=responses#all-fields-must-be-required`);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            return {
							 | 
						||
| 
								 | 
							
								                properties: {
							 | 
						||
| 
								 | 
							
								                    ...acc.properties,
							 | 
						||
| 
								 | 
							
								                    [propName]: parsedDef,
							 | 
						||
| 
								 | 
							
								                },
							 | 
						||
| 
								 | 
							
								                required: propDef.isOptional() && !refs.openaiStrictMode ? acc.required : [...acc.required, propName],
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								        }, { properties: {}, required: [] }),
							 | 
						||
| 
								 | 
							
								        additionalProperties: decideAdditionalProperties(def, refs),
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    if (!result.required.length)
							 | 
						||
| 
								 | 
							
								        delete result.required;
							 | 
						||
| 
								 | 
							
								    return result;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								//# sourceMappingURL=object.js.map
							 |