/** * @author Martin Karkowski * @email m.karkowski@zema.de * @create date 2020-02-18 16:28:19 * @modify date 2020-12-02 08:58:38 * @desc [description] */ import { get } from "http"; import { TsFromSwagger } from "swagger-ts-client"; import { camelize, replaceAll } from "../../../lib/helpers/stringMethods"; import { DEFAULT_URI } from "../defaults/default.params"; /** * Hack to Fix the Swagger Definition. * * To fix the Broken Swagger Definition. Download the Definition File. * Then Replace the broken chars and parse it as JSON. * */ get(DEFAULT_URI + "/v2/api-docs", (res) => { const { statusCode } = res; const contentType = res.headers["content-type"]; let error; if (statusCode !== 200) { error = new Error("Request Failed.\n" + `Status Code: ${statusCode}`); } else if (!/^application\/json/.test(contentType)) { error = new Error( "Invalid content-type.\n" + `Expected application/json but received ${contentType}` ); } if (error) { console.error(error.message); // Consume response data to free up memory res.resume(); return; } res.setEncoding("utf8"); let rawData = ""; res.on("data", (chunk) => { rawData += chunk; }); res.on("end", () => { try { rawData = replaceAll(rawData, "«", "<"); rawData = replaceAll(rawData, "»", ">"); const settings = { swaggerProvider: { // Function to Return all Elements provide: () => JSON.parse(rawData) }, type: { outPutPath: "./modules/xetics-lean-connector/generated/interfaces.ts", generatedTypes: "interface", templateFile: "./modules/xetics-lean-connector/helper/typeDefinitions.handlebars", membersOptional: true }, operations: { outPutPath: "./modules/xetics-lean-connector/generated/clients", operationsNameTransformFn(name: string, httpVerb, operation) { let adaptedName = name; if (name.split("/").length > 1) { adaptedName = name.split("/").slice(3).join("/"); } adaptedName = replaceAll(adaptedName, "-", "_"); adaptedName = replaceAll(adaptedName, "{", "by_"); adaptedName = replaceAll(adaptedName, "}", ""); // adaptedName = adaptedName.replace(/\{\w*}/g, ''); adaptedName = replaceAll(adaptedName, "/", "_"); return camelize(httpVerb + "_" + adaptedName); }, operationsGroupNameTransformFn(name: string, httpVerb, operation) { const adaptedName = operation.tags[0]; return camelize(adaptedName, "-"); }, templateFile: "./modules/xetics-lean-connector/helper/node-rest-client.handlebars" }, templateHelpers: { updateURL: function (context, ...options) { if (context && typeof context === "string") { console.log(context); return replaceAll(context, "{", "${"); } else { return ""; } }, getDoku: function (context, ...options) { if (context && typeof context === "string") { return "LINK"; } else { return ""; } } } }; const app = new TsFromSwagger(null, settings); app.generateCode(); } catch (e) { console.error(e.message); } }); }).on("error", (e) => { console.error(`Got error: ${e.message}`); });