cis-api-tool
Version:
根据 swagger/yapi/apifox 的接口定义生成 TypeScript/JavaScript 的接口类型及其请求函数代码。
77 lines (75 loc) • 2.22 kB
JavaScript
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 };