UNPKG

cis-api-tool

Version:

根据 swagger/yapi/apifox 的接口定义生成 TypeScript/JavaScript 的接口类型及其请求函数代码。

76 lines (74 loc) 2.21 kB
import { httpGet } from "./utils-1VVzZh0z.mjs"; import { swaggerJsonToYApiData } from "./swaggerJsonToYApiData-C1J31S7b.mjs"; import getAvailablePort from "get-port"; import http from "http"; import onExit from "signal-exit"; import url from "url"; import isEmpty from "lodash/isEmpty"; //#region src/SwaggerToYApiServer.ts var SwaggerToYApiServer = class { port = 0; swaggerJson = {}; httpServer = null; yapiData = {}; constructor(options) { this.options = options; } async getPort() { if (this.port === 0) this.port = await getAvailablePort({ port: 50505 }); return this.port; } async getUrl() { return `http://127.0.0.1:${await this.getPort()}`; } async getSwaggerJson() { if (isEmpty(this.swaggerJson)) { const res = await httpGet(this.options.swaggerJsonUrl); this.swaggerJson = res; } return this.swaggerJson; } async getYApiData() { if (isEmpty(this.yapiData)) this.yapiData = await swaggerJsonToYApiData(await this.getSwaggerJson()); return this.yapiData; } async start() { const yapiData = await this.getYApiData(); await new Promise(async (resolve) => { this.httpServer = http.createServer(async (req, res) => { const { pathname } = url.parse(req.url || ""); res.setHeader("Content-Type", "application/json"); if (pathname.includes("/api/plugin/export")) res.end(JSON.stringify(yapiData.cats.map((cat) => ({ ...cat, list: yapiData.interfaces.filter((item) => item.catid === cat._id) })))); else if (pathname.includes("/api/interface/getCatMenu")) res.end(JSON.stringify({ errcode: 0, errmsg: "成功!", data: yapiData.cats })); else if (pathname.includes("/api/project/get")) res.end(JSON.stringify({ errcode: 0, errmsg: "成功!", data: yapiData.project })); else res.end("404"); }).listen(await this.getPort(), "127.0.0.1", () => { onExit(() => this.stop()); resolve(); }); }); return this.getUrl(); } async stop() { return new Promise((resolve, reject) => { if (!this.httpServer) resolve(); else this.httpServer.close((err) => { if (err) reject(err); else resolve(); }); }); } }; //#endregion export { SwaggerToYApiServer };