@alova/wormhole
Version:
More modern openAPI generating solution for alova.js
90 lines (89 loc) • 2.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generate = generate;
exports.getValue = getValue;
exports.setComment = setComment;
exports.normalizeCode = normalizeCode;
exports.getTsStr = getTsStr;
const helper_1 = require("../../../../helper");
const utils_1 = require("../../../../utils");
function generate(ast, ctx, generators) {
const generator = generators.find((generator) => {
const tyes = [generator.type].flat();
return tyes.includes(ast.type);
});
if (generator) {
return generator.generate(ast, ctx);
}
return null;
}
function getValue(result, options) {
if (options.shallowDeep) {
options.shallowDeep = false;
options.deep = false;
return result.code;
}
return options.deep || !result.name ? result.code : result.name;
}
function setComment(ast, options) {
let { comment } = ast;
if (ast.deepComment && options.deep) {
comment += ast.deepComment;
}
const commenter = helper_1.CommentHelper.load({
type: options.commentType,
comment,
});
if (ast.deprecated) {
commenter.add('[deprecated]');
}
ast.comment = commenter.end();
return ast.comment ?? '';
}
async function normalizeCode(code, type) {
const typeMap = {
type: {
reg: /type Ts =(.*)/s,
transform(code) {
return getTsStr({ type: 'type', name: 'Ts', code });
},
},
interface: {
reg: /interface Ts (.*)/s,
transform(code) {
return getTsStr({ type: 'interface', name: 'Ts', code });
},
},
enum: {
reg: /enum Ts (.*)/s,
transform(code) {
return getTsStr({ type: 'enum', name: 'Ts', code });
},
},
};
const tsStrFormat = await (0, utils_1.format)(typeMap[type].transform(code), {
semi: false, // remove semicolon
});
const resultFormat = typeMap[type].reg.exec(tsStrFormat)?.[1] ?? '';
return resultFormat.trim();
}
function getTsStr(genResult, options) {
let result = genResult.code;
switch (genResult.type) {
case 'interface':
result = `interface ${genResult.name} ${genResult.code}`;
break;
case 'type':
result = `type ${genResult.name} = ${genResult.code}`;
break;
case 'enum':
result = `enum ${genResult.name} ${genResult.code}`;
break;
default:
break;
}
if (options?.export) {
result = `export ${result}`;
}
return result;
}