UNPKG

rap2itf

Version:
482 lines (481 loc) 15.5 kB
'use strict' var __assign = (this && this.__assign) || function () { __assign = Object.assign || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i] for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p] } return t } return __assign.apply(this, arguments) } var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value) }) } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)) } catch (e) { reject(e) } } function rejected(value) { try { step(generator['throw'](value)) } catch (e) { reject(e) } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected) } step((generator = generator.apply(thisArg, _arguments || [])).next()) }) } var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1] return t[1] }, trys: [], ops: [], }, f, y, t, g return ( (g = { next: verb(0), throw: verb(1), return: verb(2) }), typeof Symbol === 'function' && (g[Symbol.iterator] = function () { return this }), g ) function verb(n) { return function (v) { return step([n, v]) } } function step(op) { if (f) throw new TypeError('Generator is already executing.') while (_) try { if ( ((f = 1), y && (t = op[0] & 2 ? y['return'] : op[0] ? y['throw'] || ((t = y['return']) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) ) return t if (((y = 0), t)) op = [op[0] & 2, t.value] switch (op[0]) { case 0: case 1: t = op break case 4: _.label++ return { value: op[1], done: false } case 5: _.label++ y = op[1] op = [0] continue case 7: op = _.ops.pop() _.trys.pop() continue default: if ( !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) && (op[0] === 6 || op[0] === 2) ) { _ = 0 continue } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1] break } if (op[0] === 6 && _.label < t[1]) { _.label = t[1] t = op break } if (t && _.label < t[2]) { _.label = t[2] _.ops.push(op) break } if (t[2]) _.ops.pop() _.trys.pop() continue } op = body.call(thisArg, _) } catch (e) { op = [6, e] y = 0 } finally { f = t = 0 } if (op[0] & 5) throw op[1] return { value: op[0] ? op[1] : void 0, done: true } } } var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError('Symbol.asyncIterator is not defined.') var m = o[Symbol.asyncIterator], i return m ? m.call(o) : ((o = typeof __values === 'function' ? __values(o) : o[Symbol.iterator]()), (i = {}), verb('next'), verb('throw'), verb('return'), (i[Symbol.asyncIterator] = function () { return this }), i) function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { ;(v = o[n](v)), settle(resolve, reject, v.done, v.value) }) } } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function (v) { resolve({ value: v, done: d }) }, reject) } } exports.__esModule = true var chalk_1 = require('chalk') var formatter_1 = require('json-schema-to-typescript/dist/src/formatter') var json_schema_to_typescript_1 = require('json-schema-to-typescript') var types_1 = require('./types') var base_creator_1 = require('./core/base-creator') var utils_1 = require('./utils') var tools_1 = require('./core/tools') var scanFile_1 = require('./core/scanFile') var ora = require('ora') var packageJson = require('../package.json') var path = require('path') var getWriteFile = function (existFileList, outputFiles) { var outputFiles_1, outputFiles_1_1 return __awaiter(void 0, void 0, void 0, function () { var tempoutfiles, cmdPath, handleOverWrite, _a, pathname, content, rePath, confirm_1, fun, goOn, e_1_1 var e_1, _b return __generator(this, function (_c) { switch (_c.label) { case 0: tempoutfiles = [] cmdPath = process.cwd() handleOverWrite = { yes: function (it) { tempoutfiles.push(it) return true }, no: function (it) { return true }, allYes: function (it) { tempoutfiles.length = 0 tempoutfiles.push.apply(tempoutfiles, outputFiles) return false }, allNo: function (it) { return false }, } _c.label = 1 case 1: _c.trys.push([1, 8, 9, 14]) outputFiles_1 = __asyncValues(outputFiles) _c.label = 2 case 2: return [4 /*yield*/, outputFiles_1.next()] case 3: if (!((outputFiles_1_1 = _c.sent()), !outputFiles_1_1.done)) return [3 /*break*/, 7] ;(_a = outputFiles_1_1.value), (pathname = _a.path), (content = _a.content) if (!(existFileList.length && existFileList.includes(pathname))) return [3 /*break*/, 5] rePath = path.relative(cmdPath, pathname) return [ 4 /*yield*/, (0, utils_1.fileOverWiriteconfirm)( '\u786E\u5B9A\u8981\u8986\u76D6\u6587\u4EF6: ' + rePath + ' \u5417\uFF1F', ), ] case 4: confirm_1 = _c.sent().confirm fun = handleOverWrite[confirm_1] if (typeof fun === 'function') { goOn = fun({ path: pathname, content: content }) if (goOn) { return [3 /*break*/, 6] } else { return [3 /*break*/, 7] } } return [3 /*break*/, 6] case 5: // 清空 tempoutfiles.length = 0 // 添加所有的文件 tempoutfiles.push.apply(tempoutfiles, outputFiles) return [3 /*break*/, 7] case 6: return [3 /*break*/, 2] case 7: return [3 /*break*/, 14] case 8: e_1_1 = _c.sent() e_1 = { error: e_1_1 } return [3 /*break*/, 14] case 9: _c.trys.push([9, , 12, 13]) if (!(outputFiles_1_1 && !outputFiles_1_1.done && (_b = outputFiles_1['return']))) return [3 /*break*/, 11] return [4 /*yield*/, _b.call(outputFiles_1)] case 10: _c.sent() _c.label = 11 case 11: return [3 /*break*/, 13] case 12: if (e_1) throw e_1.error return [7 /*endfinally*/] case 13: return [7 /*endfinally*/] case 14: return [2 /*return*/, tempoutfiles] } }) }) } function default_1(_a) { var // type, _b = _a.rapUrl, // type, rapUrl = _b === void 0 ? 'http://rap2.taobao.org' : _b, _c = _a.apiUrl, apiUrl = _c === void 0 ? 'http://rap2api.taobao.org' : _c, _d = _a.rapperPath, rapperPath = _d === void 0 ? './src/rapper' : _d, // urlMapper = (t) => t, codeStyle = _a.codeStyle, interfaceId = _a.interfaceId, _e = _a.split, split = _e === void 0 ? 2 : _e, token = _a.token, projectId = _a.projectId return __awaiter(this, void 0, void 0, function () { var spinner, rapperVersion, flag, outputFiles, interfaces, e_2, interfaceModels, err_1, existFileList, tempoutfiles var _this = this return __generator(this, function (_f) { switch (_f.label) { case 0: spinner = ora(chalk_1['default'].grey('rapper: 开始检查版本')) rapperVersion = packageJson.version console.log('\u5F53\u524Drapper\u7248\u672C: ' + chalk_1['default'].grey(rapperVersion)) // spinner.start(); /** 参数校验 */ spinner.start(chalk_1['default'].grey('rapper: 开始校验参数')) flag = [ { id: 'projectId', value: projectId }, { id: 'token', value: token }, ].every(function (it) { if (!it.value) { spinner.warn( chalk_1['default'].yellow( '\u5C1A\u672A\u914D\u7F6E' + it.id + ',\u8BF7\u5728\u914D\u7F6E\u6587\u4EF6\u4E2D\u914D\u7F6E\u6216\u8005\u4F7F\u7528\u547D\u4EE4\u884C\u8BBE\u7F6E\u53C2\u6570', ), ) return false } return true }) if (!flag) { process.exit(1) } if (!interfaceId) { spinner.warn( chalk_1['default'].gray('rapper: interfaceId 没有配置,将会获取项目下所有接口 '), ) } spinner.succeed(chalk_1['default'].grey('rapper: 参数校验成功')) // spinner.succeed(chalk.grey('rapper: 参数校验成功')); json_schema_to_typescript_1.DEFAULT_OPTIONS.style = __assign( __assign({}, json_schema_to_typescript_1.DEFAULT_OPTIONS.style), { singleQuote: true, semi: true, trailingComma: types_1.TRAILING_COMMA.ES5 }, ) if (codeStyle && typeof codeStyle === 'object') { json_schema_to_typescript_1.DEFAULT_OPTIONS.style = __assign({}, codeStyle) } rapperPath = rapperPath.replace(/\/$/, '') rapUrl = rapUrl.replace(/\/$/, '') apiUrl = apiUrl.replace(/\/$/, '') outputFiles = [] interfaces = [] spinner.start(chalk_1['default'].grey('rapper: 正在从 Rap 平台获取接口信息...')) _f.label = 1 case 1: _f.trys.push([1, 3, , 4]) return [4 /*yield*/, (0, tools_1.getInterfaces)(apiUrl)] case 2: // interfaces = await getInterfaces(apiUrl); interfaces = _f.sent() spinner.succeed(chalk_1['default'].grey('rapper: 获取接口信息成功')) return [3 /*break*/, 4] case 3: e_2 = _f.sent() return [ 2 /*return*/, new Promise(function () { return spinner.fail( chalk_1['default'].red( 'rapper: \u83B7\u53D6\u63A5\u53E3\u4FE1\u606F\u5931\u8D25\uFF0C' + e_2, ), ) }), ] case 4: if (typeof interfaceId !== 'undefined' && interfaceId !== '') { interfaces = interfaces.filter(function (it) { return String(it.id) === String(interfaceId) }) } if (interfaces.length === 0) { console.log( chalk_1['default'].grey( 'rapper: \u6CA1\u6709\u627E\u5230interfaceId\u662F' + interfaceId + '\u7684\u63A5\u53E3', ), ) process.exit(0) } /** Rap 接口引用扫描,如果 projectId 更改了就不再扫描,避免过多的报错信息展现在Terminal */ spinner.start(chalk_1['default'].grey('rapper: 正在生成模板代码...')) _f.label = 5 case 5: _f.trys.push([5, 7, , 8]) return [ 4 /*yield*/, (0, base_creator_1.createInterfaceModel)(interfaces, { rapUrl: rapUrl }, Number(split)), ] case 6: interfaceModels = _f.sent() interfaceModels.forEach(function (it) { outputFiles.push({ path: path.resolve(rapperPath, it.fileName + '.ts'), content: (0, formatter_1.format)( '\n ' + (0, tools_1.creatHeadHelpStr)(rapperVersion) + '\n ' + it.body + '\n ', json_schema_to_typescript_1.DEFAULT_OPTIONS, ), }) }) /** 生成的模板文件第一行增加MD5 */ outputFiles = outputFiles.map(function (item) { return __assign(__assign({}, item), { content: '/* md5: ' + (0, utils_1.getMd5)(item.content) + ' */\n' + item.content, }) }) return [3 /*break*/, 8] case 7: err_1 = _f.sent() spinner.fail(chalk_1['default'].red('rapper: \u5931\u8D25\uFF01' + err_1.message)) return [2 /*return*/] case 8: /** 扫描找出生成的模板文件是否被手动修改过 */ spinner.start(chalk_1['default'].grey('rapper: 检查文件是否被修改')) existFileList = (0, scanFile_1.getFiles)(rapperPath) // const changeFiles = findChangeFiles(existFileList); spinner.succeed(chalk_1['default'].grey('rapper: 检查文件成功')) return [4 /*yield*/, getWriteFile(existFileList, outputFiles)] case 9: tempoutfiles = _f.sent() return [ 2 /*return*/, Promise.all( tempoutfiles.map(function (_a) { var path = _a.path, content = _a.content return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_b) { ;(0, utils_1.writeFile)(path, content).then(function () { spinner.succeed(chalk_1['default'].green('\u5199\u5165\u6210\u529F: ' + path)) }) return [2 /*return*/] }) }) }), ) .then(function () { spinner.succeed( chalk_1['default'].green( '\u5171\u540C\u6B65\u4E86 ' + tempoutfiles.length + ' \u4E2A\u63A5\u53E3', ), ) }) ['catch'](function (err) { spinner.fail(chalk_1['default'].red('rapper: \u5931\u8D25\uFF01' + err.message)) }), ] } }) }) } exports['default'] = default_1