UNPKG

@alova/wormhole

Version:

More modern openAPI generating solution for alova.js

90 lines (89 loc) 2.67 kB
"use strict"; 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; }