UNPKG

@alova/wormhole

Version:

More modern openAPI generating solution for alova.js

50 lines (49 loc) 1.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.enumTypeParser = enumTypeParser; const standardLoader_1 = require("../../../../core/loader/standardLoader"); const helper_1 = require("../../../../helper"); const type_1 = require("../../../../type"); const utils_1 = require("../../../../utils"); const utils_2 = require("./utils"); function enumTypeParser(schema, ctx) { const result = { ...(0, utils_2.initAST)(schema, ctx), type: type_1.ASTType.ENUM, params: [], }; const enumArray = schema.enum ?? []; let typeArray = [schema.type ?? []].flat(); // 如果没有指定type,从enum值中推断类型 if (typeArray.length === 0 && enumArray.length > 0) { typeArray = [...new Set(enumArray.map(item => (0, utils_1.getType)(item)))]; } // 类型兼容性检查函数 const isTypeCompatible = (itemType, allowedTypes) => { return allowedTypes.includes(itemType) || (allowedTypes.includes('number') && itemType === 'integer'); }; // 验证所有枚举值的类型 const hasInvalidType = enumArray.some(item => !isTypeCompatible((0, utils_1.getType)(item), typeArray)); if (hasInvalidType) { throw helper_1.logger.throwError(`enum ${schema.title ?? 'undefined'} type error`, { enum: enumArray, type: typeArray, }); } enumArray.forEach((item) => { const keyName = typeof item === 'string' && standardLoader_1.standardLoader.validate(item) ? item.toUpperCase() : ''; result.params.push({ keyName, ast: { type: type_1.ASTType.LITERAL, params: item, }, }); }); return result; } exports.default = { type: 'enum', parse: enumTypeParser, };