UNPKG

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
#!/usr/bin/env node "use strict"; 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();