UNPKG

gen-api-js

Version:

根据线上接口文档轻量化简易一键批量生成模块化 JavaScript/TypeScript API接口

315 lines (314 loc) 19 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var _require = require("../utils/index"), getIds = _require.getIds, getPageData = _require.getPageData; module.exports = /*#__PURE__*/function (_global$Generator) { function YApi(config) { var _this; (0, _classCallCheck2.default)(this, YApi); _this = _callSuper(this, YApi, [config]); _this.setDocUrl("http://api.doc.jiyou-tech.com"); return _this; } (0, _inherits2.default)(YApi, _global$Generator); return (0, _createClass2.default)(YApi, [{ key: "getUrl", value: function getUrl(catId) { return { projectUrl: this.config.docUrl + "/project/".concat(this.projectId, "/interface/api/cat_").concat(catId), menuUrl: this.config.docUrl + "/project/".concat(this.projectId, "/interface/api/").concat(catId), indexUrl: this.config.docUrl + "/project/".concat(this.projectId, "/interface/api") }; } }, { key: "init", value: function () { var _init = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4(opt, index) { var _this2 = this; return _regenerator.default.wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: return _context4.abrupt("return", new Promise(/*#__PURE__*/function () { var _ref = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3(resolve, reject) { var _this2$cacheData$_thi, oldCatIds, _this2$cacheData$_thi2; return _regenerator.default.wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return _this2.browser.newPage(); case 2: _this2.page = _context3.sent; _this2.page.setDefaultTimeout(0); // yapi登录地址 _context3.next = 6; return _this2.page.goto(_this2.config.docUrl + "/login"); case 6: _context3.next = 8; return _this2.page.waitForSelector("#email", { timeout: 0 }); case 8: _context3.next = 10; return _this2.page.$("#yapi > div > div.router-main > div.header-box.m-header.ant-layout-header"); case 10: if (_context3.sent) { _context3.next = 12; break; } _this2.spinner.warn("请登录"); case 12: _context3.next = 14; return _this2.page.waitForSelector("#yapi > div > div.router-main > div.header-box.m-header.ant-layout-header"); case 14: _context3.next = 16; return getPageData(_this2.page, _this2.config.docUrl + "/api/project/get?id=".concat(opt.projectId), _this2.spinner); case 16: _this2.opt = opt; _this2.catIds = opt.catIds; _this2.projectId = opt.projectId; _this2.index = index; if (!(opt.catIds && Array.isArray(opt.catIds))) { _context3.next = 28; break; } oldCatIds = ((_this2$cacheData$_thi = _this2.cacheData[_this2.cacheKey.name]) === null || _this2$cacheData$_thi === void 0 || (_this2$cacheData$_thi = _this2$cacheData$_thi[index]) === null || _this2$cacheData$_thi === void 0 ? void 0 : _this2$cacheData$_thi.ids) || []; _this2.catIds = opt.catIds.filter(function (item) { return !oldCatIds.some(function (s) { return getIds(s) === getIds(item); }); }); if (_this2.catIds.length) { _context3.next = 26; break; } resolve(); return _context3.abrupt("return", false); case 26: _context3.next = 31; break; case 28: if (!((_this2$cacheData$_thi2 = _this2.cacheData[_this2.cacheKey.name]) !== null && _this2$cacheData$_thi2 !== void 0 && _this2$cacheData$_thi2[index] && _this2.cacheData[_this2.cacheKey.name][index].pid)) { _context3.next = 31; break; } resolve(); return _context3.abrupt("return", false); case 31: // 判单当前是否选过文件,如果选过文件把当前选过的文件加载第一项 if (_this2.selectName) { _this2.files = (0, _toConsumableArray2.default)(new Set([_this2.selectName].concat((0, _toConsumableArray2.default)(_this2.files)))); } _context3.prev = 32; _this2.apiUrl = _this2.getUrl().indexUrl; _context3.next = 36; return _this2.page.goto(_this2.apiUrl); case 36: // 监听当前接口返回数据 _this2.getData("/api/interface/list_menu?project_id=".concat(opt.projectId)).then(/*#__PURE__*/function () { var _ref2 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2(menuList) { var readList, mIndex, res, _yield$_this2$gen, add, ids, noIds, i, _index, _yield$_this2$gen2, _add; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _this2.spinner.stop(); _context2.next = 3; return _this2.page.waitForSelector("#yapi > div > div.router-main > div.header-box.m-header.ant-layout-header > div > div.breadcrumb-container > div > span:nth-child(2) > span.ant-breadcrumb-link", { timeout: 0 }); case 3: _context2.next = 5; return _this2.page.$eval("#yapi > div > div.router-main > div.header-box.m-header.ant-layout-header > div > div.breadcrumb-container > div > span:nth-child(2) > span.ant-breadcrumb-link", function (el) { return el.innerText; }); case 5: _this2.projectName = _context2.sent; _this2.projectNames.push("".concat(_this2.projectName, "(").concat(_this2.apiUrl, ")")); // 判断当前数组里面是否都是string类型或者是number类型 readList = function readList(lIndex, item) { return new Promise(/*#__PURE__*/function () { var _ref3 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(resolve) { var _JSON$parse; var data; return _regenerator.default.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: _context.next = 2; return getPageData(_this2.page, _this2.config.docUrl + "/api/interface/get?id=".concat(item._id), _this2.spinner); case 2: data = _context.sent; data.reqBody = data.req_body_form.length ? data.req_body_form : data.req_params.length ? data.req_params : data.req_query.length ? data.req_query : data.req_body_other; data.reqType = data.req_body_type; data.ReqJsonSchema = data.req_body_is_json_schema; data.ResJsonSchema = data.res_body ? JSON.stringify((_JSON$parse = JSON.parse(data.res_body)) === null || _JSON$parse === void 0 || (_JSON$parse = _JSON$parse.properties) === null || _JSON$parse === void 0 ? void 0 : _JSON$parse.data) : ""; resolve(data); case 8: case "end": return _context.stop(); } }, _callee); })); return function (_x6) { return _ref3.apply(this, arguments); }; }()); }; if (!_this2.config.projects.every(function (item) { return typeof item === "string" || typeof item === "number"; })) { _context2.next = 23; break; } _this2.selectName = ""; mIndex = 0; case 11: if (!(mIndex < menuList.length)) { _context2.next = 21; break; } if (_this2.selectName) { _context2.next = 15; break; } _context2.next = 15; return _this2.gen("请选择需要生成所有接口的文件"); case 15: _context2.next = 17; return _this2.gen(); case 17: _context2.sent.add(menuList[mIndex], null, null, true); case 18: mIndex++; _context2.next = 11; break; case 21: _context2.next = 62; break; case 23: if (_this2.opt.catIds) { _context2.next = 38; break; } _context2.next = 26; return _this2.page.goto(_this2.config.docUrl + "/api/interface/list?page=1&limit=999999&project_id=".concat(opt.projectId)); case 26: res = _context2.sent; _context2.next = 29; return res.json(); case 29: menuList = _context2.sent.data; _context2.next = 32; return _this2.gen("\u8BF7\u9009\u62E9\u9700\u8981\u751F\u6210".concat(_this2.projectName, "\u9879\u76EE\u63A5\u53E3\u6587\u4EF6((\u63A5\u53E3\u5171").concat(menuList.list.length, "\u4E2A))")); case 32: _yield$_this2$gen = _context2.sent; add = _yield$_this2$gen.add; _context2.next = 36; return add(menuList, undefined, readList); case 36: _context2.next = 62; break; case 38: ids = menuList.map(function (item) { return item._id; }); noIds = _this2.catIds.filter(function (item) { return !ids.includes(getIds(item)); }); noIds.some(function (item) { _this2.spinner.warn("".concat(item, "\u5206\u7C7Bid\u4E0D\u5B58\u5728,\u8BF7\u68C0\u67E5\u8BE5\u5206\u7C7Bid\u662F\u5426\u5728\u8BE5\u9879\u76EE")); resolve(); }); i = 0; case 42: if (!(i < _this2.catIds.length)) { _context2.next = 62; break; } _index = 0; case 44: if (!(_index < menuList.length)) { _context2.next = 59; break; } if (!(menuList[_index]._id == getIds(_this2.catIds[i]))) { _context2.next = 56; break; } _context2.next = 48; return _this2.page.click(".interface-list > li:nth-child(".concat(_index + 2, ")")); case 48: _context2.next = 50; return _this2.gen("\u8BF7\u9009\u62E9\u9700\u8981\u751F\u6210".concat(menuList[_index].name || menuList[_index].desc, "\u63A5\u53E3\u7684\u6587\u4EF6(\u9879\u76EE\u540D:").concat(_this2.projectName, "(\u63A5\u53E3\u5171").concat(menuList[_index].list.length, "\u4E2A))")); case 50: _yield$_this2$gen2 = _context2.sent; _add = _yield$_this2$gen2.add; if (!menuList[_index].list) { _context2.next = 55; break; } _context2.next = 55; return _add(menuList[_index], _this2.catIds[i], readList); case 55: return _context2.abrupt("break", 59); case 56: _index++; _context2.next = 44; break; case 59: i++; _context2.next = 42; break; case 62: _context2.next = 64; return _this2.createWriteFile().writeHeader().writeApi(); case 64: resolve(); case 65: case "end": return _context2.stop(); } }, _callee2); })); return function (_x5) { return _ref2.apply(this, arguments); }; }()); _context3.next = 42; break; case 39: _context3.prev = 39; _context3.t0 = _context3["catch"](32); console.log(_context3.t0); case 42: case "end": return _context3.stop(); } }, _callee3, null, [[32, 39]]); })); return function (_x3, _x4) { return _ref.apply(this, arguments); }; }())); case 1: case "end": return _context4.stop(); } }, _callee4); })); function init(_x, _x2) { return _init.apply(this, arguments); } return init; }() }]); }(global.Generator);