@alova/wormhole
Version:
More modern openAPI generating solution for alova.js
62 lines (61 loc) • 2.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.normalEnumTypeGenerator = normalEnumTypeGenerator;
exports.isNormalEnum = isNormalEnum;
exports.enumTypeGenerator = enumTypeGenerator;
const loader_1 = require("../../../../core/loader");
const type_1 = require("../../../../type");
const utils_1 = require("../../../../utils");
const utils_2 = require("./utils");
function normalEnumTypeGenerator(ast, ctx) {
const result = {
name: ast.keyName ?? '',
comment: (0, utils_2.setComment)(ast, ctx.options),
type: 'enum',
code: '',
};
const lines = [`{`];
ast.params.forEach((param, idx, arr) => {
ctx.pathKey = param.keyName;
const paramResult = ctx.next(param.ast, ctx.options);
const endText = idx === arr.length - 1 ? '' : ',';
const keyName = loader_1.standardLoader.validate(param.keyName) ? param.keyName : `"${param.keyName || paramResult.code}"`;
`${param.ast.comment ?? ''}${keyName} = ${paramResult.code}${endText}`
.split('\n')
.forEach(line => lines.push(` ${line}`));
});
lines.push(`}`);
result.code = lines.join('\n');
return result;
}
function otherEnumTypeGenerator(ast, ctx) {
const result = {
name: ast.keyName ?? '',
comment: (0, utils_2.setComment)(ast, ctx.options),
type: 'type',
code: '',
};
result.code = ast.params
.map((param) => {
ctx.pathKey = param.keyName;
return (0, utils_2.getValue)(ctx.next(param.ast, ctx.options), ctx.options);
})
.join(' | ');
return result;
}
function isNormalEnum(ast, ctx) {
return !ctx.options.noEnum
&& ast.params.every(item => item.ast.type === type_1.ASTType.LITERAL
&& ['string', 'number', 'integer'].includes((0, utils_1.getType)(item.ast.params))
&& item.keyName);
}
function enumTypeGenerator(ast, ctx) {
if (ctx.path.length <= 1 && isNormalEnum(ast, ctx)) {
return normalEnumTypeGenerator(ast, ctx);
}
return otherEnumTypeGenerator(ast, ctx);
}
exports.default = {
type: type_1.ASTType.ENUM,
generate: enumTypeGenerator,
};