@alova/wormhole
Version:
More modern openAPI generating solution for alova.js
50 lines (49 loc) • 1.83 kB
JavaScript
;
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,
};