UNPKG

gen-api-js

Version:

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

150 lines (149 loc) 6.55 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _require = require("./toTs"), jsonSchemaToTs = _require.jsonSchemaToTs; function genTemplateTS() { return _genTemplateTS.apply(this, arguments); } function _genTemplateTS() { _genTemplateTS = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() { var typeName, option, reqBody, reqType, method, ReqJsonSchema, paramName, IParamsTemplate, template, translateTempteQuery, _args = arguments; return _regenerator.default.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: translateTempteQuery = function _translateTempteQuery(arr) { var paramName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "IParams"; if (arr.length === 0) return ""; var start = "export interface ".concat(paramName, " {\n"); arr.forEach(function (item) { item.format = item.desc || item.description; item.description = item.example || item.description; item.name = item.name.replace(/(\..*)|\[\d\]/g, ""); start += "".concat(translateComment(item), "\n"); start += "".concat(item.name).concat(item.required === "1" ? ":" : "?:", " ").concat(item.type === "file" ? "File" : "string", ";\n"); }); return start + "\n}"; }; typeName = _args.length > 0 && _args[0] !== undefined ? _args[0] : "ITest"; option = _args.length > 1 ? _args[1] : undefined; reqBody = option.reqBody, reqType = option.reqType, method = option.method, ReqJsonSchema = option.ReqJsonSchema; if (!ReqJsonSchema) { _context.next = 6; break; } return _context.abrupt("return", jsonSchemaToTs(typeName, reqBody)); case 6: if (reqBody) { _context.next = 8; break; } return _context.abrupt("return", "any"); case 8: paramName = typeName; IParamsTemplate = ""; if (!(["PUT", "POST"].includes(method.toLocaleUpperCase()) && reqType.match("json"))) { _context.next = 16; break; } _context.next = 13; return Promise.resolve(translateTempte(reqBody, paramName)); case 13: IParamsTemplate = _context.sent; _context.next = 19; break; case 16: _context.next = 18; return Promise.resolve(translateTempteQuery(reqBody, paramName)); case 18: IParamsTemplate = _context.sent; case 19: template = "".concat(IParamsTemplate); return _context.abrupt("return", template); case 21: case "end": return _context.stop(); } }, _callee); })); return _genTemplateTS.apply(this, arguments); } function translateTempte(obj) { var typeName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "IParams"; var property = arguments.length > 2 ? arguments[2] : undefined; var start = "interface ".concat(typeName, " {\n"); if (property) { obj = obj.properties[property]; } if (!obj) { return "type ".concat(typeName, " = undefined"); } else if (obj && obj.type === "object") { return start + translateTempteInner(obj) + "\n}"; } else if (obj.type === "array") { return "type ".concat(typeName, " = Array<").concat(translateArrayItem(obj.items), ">\n"); } else { return "type ".concat(typeName, " = ").concat(obj.type === "integer" ? "number" : obj.type, "\n"); } } function translateTempteInner(obj) { var start = ""; for (var key in obj.properties) { if (Object.hasOwnProperty.call(obj.properties, key)) { var element = obj.properties[key]; if (element.type === "object") { var _obj$required; start += "".concat(key).concat(obj !== null && obj !== void 0 && (_obj$required = obj.required) !== null && _obj$required !== void 0 && _obj$required.includes(key) ? ":" : "?:", " {\n").concat(translateTempteInner(element), "\n};\n"); } else if (element.type === "array") { var _obj$required2; start += "".concat(key).concat(obj !== null && obj !== void 0 && (_obj$required2 = obj.required) !== null && _obj$required2 !== void 0 && _obj$required2.includes(key) ? ":" : "?:", " Array<\n").concat(translateArrayItem(element.items), ">;\n"); } else if (Array.isArray(element.type)) { var _obj$required3; start += "".concat(translateComment(element), "\n"); start += "".concat(key).concat(obj !== null && obj !== void 0 && (_obj$required3 = obj.required) !== null && _obj$required3 !== void 0 && _obj$required3.includes(key) ? ":" : "?:", " ").concat(element.type.map(function (item) { return item === "integer" ? "number" : item; }).join(" | "), ";\n"); } else { var _obj$required4; start += "".concat(translateComment(element), "\n"); start += "".concat(key).concat(obj !== null && obj !== void 0 && (_obj$required4 = obj.required) !== null && _obj$required4 !== void 0 && _obj$required4.includes(key) ? ":" : "?:", " ").concat(element.type === "integer" ? "number" : element.type, ";\n"); } } } return start; } function translateArrayItem(items) { if (items.type === "object") { return "{".concat(translateTempteInner(items), "}"); } else if (items.type === "array") { return "Array<".concat(translateTempteInner(items.items), ">\n"); } else if (items.type === "object") { return "".concat(translateTempteInner(items), "\n"); } else { return "".concat(items.type === "integer" ? "number" : items.type, "\n"); } } function translateComment(element) { if (element.format && !element.description) { return " /* ".concat(element.format, "*/"); } else if (element.format && element.description) { return "/* ".concat(element.format, ", ").concat(element.description.split("").join(", "), "*/"); } else if (element.description) { return "/* ".concat(element.description.split("").join(", "), "*/"); } else { return ""; } } module.exports = { genTemplateTS: genTemplateTS };