openapi-ts-request
Version:
Swagger2/OpenAPI3/Apifox to TypeScript/JavaScript, request client(support any client), request mock service, enum and enum translation, react-query/vue-query, type field label, JSON Schemas
83 lines (82 loc) • 3.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const prompts_1 = require("@clack/prompts");
const commander_1 = require("commander");
const index_1 = require("../index");
const log_1 = require("../log");
const readConfig_1 = require("../readConfig");
const utils_1 = require("./utils");
commander_1.program
.option('-cfn, --configFileName <string>', 'config file name')
.option('-cfp, --configFilePath <string>', 'config file path')
.option('-i, --interactive <boolean>', 'enable interactive mode', true);
commander_1.program.parse();
const options = commander_1.program.opts();
/**
* 1. 执行 cli 命令读取配置文件,已经使用 openapi.ts 替代了 cli.ts,后期会废弃 cli.ts
* 2. 如果配置文件有多个 service,则交互式选择要生成的 service
*/
function run() {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const config = yield (0, readConfig_1.readConfig)({
fallbackName: 'openapi-ts-request',
filePath: options.filePath,
fileName: options.fileName,
});
try {
const tasks = [];
if (config) {
let configs = Array.isArray(config)
? config
: [config];
/** 是否交互式 */
let isInteractive = false;
if (configs.length > 1 && (0, utils_1.parseInteractiveMode)(options.interactive)) {
// 有多个配置,则交互式选择
isInteractive = true;
console.log(''); // 添加一个空行
(0, prompts_1.intro)('🎉 欢迎使用 openapi-ts-request 生成器');
const selected = yield (0, prompts_1.multiselect)({
message: '请选择要生成的 service',
options: (0, utils_1.createMultiselectOptions)(configs),
});
if ((0, prompts_1.isCancel)(selected)) {
(0, prompts_1.cancel)('👋 Has cancelled');
process.exit(0);
}
configs = selected;
}
for (const config of configs) {
tasks.push((0, index_1.generateService)(config));
}
const results = yield Promise.allSettled(tasks);
let errorMsg = '';
for (let i = 0; i < results.length; i++) {
const result = results[i];
if (result.status === 'rejected') {
const cnf = configs[i];
const label = cnf.describe ||
('schemaPath' in cnf ? cnf.schemaPath : 'Apifox Config');
errorMsg += `${label}${label && ':'}${result.reason}\n`;
}
}
if (errorMsg) {
throw new Error(errorMsg);
}
if (isInteractive && !errorMsg) {
(0, prompts_1.outro)('🎉 All done!');
}
}
else {
throw new Error('config is not found');
}
}
catch (error) {
(0, log_1.logError)(error);
process.exit(1);
}
});
}
void run();