UNPKG

trpc-to-openapi

Version:
96 lines 4.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.coerceSchema = exports.instanceofZodTypeCoercible = exports.zodSupportsCoerce = exports.instanceofZodTypeLikeString = exports.unwrapZodType = exports.instanceofZodTypeLikeVoid = exports.instanceofZodTypeObject = exports.instanceofZodTypeOptional = exports.instanceofZodTypeKind = exports.instanceofZodType = void 0; const zod_1 = require("zod"); const instanceofZodType = (type) => { var _a, _b; return !!((_b = (_a = type === null || type === void 0 ? void 0 : type._zod) === null || _a === void 0 ? void 0 : _a.def) === null || _b === void 0 ? void 0 : _b.type); }; exports.instanceofZodType = instanceofZodType; const instanceofZodTypeKind = (type, zodTypeKind) => { var _a, _b; return ((_b = (_a = type === null || type === void 0 ? void 0 : type._zod) === null || _a === void 0 ? void 0 : _a.def) === null || _b === void 0 ? void 0 : _b.type) === zodTypeKind; }; exports.instanceofZodTypeKind = instanceofZodTypeKind; const instanceofZodTypeOptional = (type) => { return (0, exports.instanceofZodTypeKind)(type, 'optional'); }; exports.instanceofZodTypeOptional = instanceofZodTypeOptional; const instanceofZodTypeObject = (type) => { return (0, exports.instanceofZodTypeKind)(type, 'object'); }; exports.instanceofZodTypeObject = instanceofZodTypeObject; const instanceofZodTypeLikeVoid = (type) => { return ((0, exports.instanceofZodTypeKind)(type, 'void') || (0, exports.instanceofZodTypeKind)(type, 'undefined') || (0, exports.instanceofZodTypeKind)(type, 'never')); }; exports.instanceofZodTypeLikeVoid = instanceofZodTypeLikeVoid; const unwrapZodType = (type, unwrapPreprocess) => { // TODO: Allow parsing array query params if ((0, exports.instanceofZodTypeKind)(type, 'array')) { return (0, exports.unwrapZodType)(type.element, unwrapPreprocess); } if ((0, exports.instanceofZodTypeKind)(type, 'enum')) { return (0, exports.unwrapZodType)(zod_1.z.string(), unwrapPreprocess); } if ((0, exports.instanceofZodTypeKind)(type, 'nullable')) { return (0, exports.unwrapZodType)(type.unwrap(), unwrapPreprocess); } if ((0, exports.instanceofZodTypeKind)(type, 'optional')) { return (0, exports.unwrapZodType)(type.unwrap(), unwrapPreprocess); } if ((0, exports.instanceofZodTypeKind)(type, 'default')) { return (0, exports.unwrapZodType)(type.unwrap(), unwrapPreprocess); } if ((0, exports.instanceofZodTypeKind)(type, 'lazy')) { return (0, exports.unwrapZodType)(type.def.getter(), unwrapPreprocess); } if ((0, exports.instanceofZodTypeKind)(type, 'pipe') && unwrapPreprocess) { return (0, exports.unwrapZodType)(type.def.out, unwrapPreprocess); } return type; }; exports.unwrapZodType = unwrapZodType; const instanceofZodTypeLikeString = (_type) => { const type = (0, exports.unwrapZodType)(_type, false); if ((0, exports.instanceofZodTypeKind)(type, 'pipe')) { return true; } // TODO improve this if ((0, exports.instanceofZodTypeKind)(type, 'union')) { return !type._def.options.some((option) => !(0, exports.instanceofZodTypeLikeString)(option)); } if ((0, exports.instanceofZodTypeKind)(type, 'intersection')) { return ((0, exports.instanceofZodTypeLikeString)(type.def.left) && (0, exports.instanceofZodTypeLikeString)(type.def.right)); } if ((0, exports.instanceofZodTypeKind)(type, 'literal')) { return typeof type.value === 'string'; } if ((0, exports.instanceofZodTypeKind)(type, 'enum')) { return !Object.values(type.enum).some((value) => typeof value === 'number'); } return (0, exports.instanceofZodTypeKind)(type, 'string'); }; exports.instanceofZodTypeLikeString = instanceofZodTypeLikeString; exports.zodSupportsCoerce = 'coerce' in zod_1.z; const instanceofZodTypeCoercible = (_type) => { const type = (0, exports.unwrapZodType)(_type, false); return ((0, exports.instanceofZodTypeKind)(type, 'number') || (0, exports.instanceofZodTypeKind)(type, 'boolean') || (0, exports.instanceofZodTypeKind)(type, 'bigint') || (0, exports.instanceofZodTypeKind)(type, 'date')); }; exports.instanceofZodTypeCoercible = instanceofZodTypeCoercible; const coerceSchema = (schema) => { Object.values(schema.shape).forEach((shapeSchema) => { const unwrappedShapeSchema = (0, exports.unwrapZodType)(shapeSchema, false); if ((0, exports.instanceofZodTypeCoercible)(unwrappedShapeSchema)) unwrappedShapeSchema._def.coerce = true; else if ((0, exports.instanceofZodTypeObject)(unwrappedShapeSchema)) (0, exports.coerceSchema)(unwrappedShapeSchema); }); }; exports.coerceSchema = coerceSchema; //# sourceMappingURL=zod.js.map