UNPKG

cis-api-tool

Version:

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

77 lines (75 loc) 2.22 kB
import { swaggerJsonToYApiData } from "./swaggerJsonToYApiData-C1J31S7b.mjs"; import { fetchApifoxOpenAPI } from "./apifox-CRjuXhZr.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/ApifoxToYApiServer.ts var ApifoxToYApiServer = class { port = 0; openApiData = {}; httpServer = null; yapiData = {}; constructor(options) { this.options = options; } async getPort() { if (this.port === 0) this.port = await getAvailablePort({ port: 50506 }); return this.port; } async getUrl() { return `http://127.0.0.1:${await this.getPort()}`; } async getOpenApiData() { if (isEmpty(this.openApiData)) { const config = { serverUrl: this.options.serverUrl, token: this.options.token, projectId: this.options.projectId }; this.openApiData = await fetchApifoxOpenAPI(config); } return this.openApiData; } async getYApiData() { if (isEmpty(this.yapiData)) this.yapiData = await swaggerJsonToYApiData(await this.getOpenApiData()); 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() { if (this.httpServer) { this.httpServer.close(); this.httpServer = null; } } }; //#endregion export { ApifoxToYApiServer };