nope/modules/xetics-lean-connector/helper/generate.code.ts

114 lines
3.5 KiB
TypeScript
Raw Normal View History

2020-11-11 16:06:25 +00:00
/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2020-02-18 16:28:19
* @modify date 2020-12-02 08:58:38
2020-11-11 16:06:25 +00:00
* @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";
2020-11-11 16:06:25 +00:00
/**
2020-11-11 16:06:25 +00:00
* Hack to Fix the Swagger Definition.
*
* To fix the Broken Swagger Definition. Download the Definition File.
2020-11-11 16:06:25 +00:00
* Then Replace the broken chars and parse it as JSON.
*
2020-11-11 16:06:25 +00:00
*/
get(DEFAULT_URI + "/v2/api-docs", (res) => {
const { statusCode } = res;
const contentType = res.headers["content-type"];
2020-11-11 16:06:25 +00:00
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;
}
2020-11-11 16:06:25 +00:00
res.setEncoding("utf8");
let rawData = "";
res.on("data", (chunk) => {
rawData += chunk;
});
res.on("end", () => {
try {
rawData = replaceAll(rawData, "«", "<");
rawData = replaceAll(rawData, "»", ">");
2020-11-11 16:06:25 +00:00
const settings = {
swaggerProvider: {
// Function to Return all Elements
provide: () => JSON.parse(rawData)
},
2020-11-11 16:06:25 +00:00
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("/");
2020-11-11 16:06:25 +00:00
}
adaptedName = replaceAll(adaptedName, "-", "_");
adaptedName = replaceAll(adaptedName, "{", "by_");
adaptedName = replaceAll(adaptedName, "}", "");
// adaptedName = adaptedName.replace(/\{\w*}/g, '');
adaptedName = replaceAll(adaptedName, "/", "_");
2020-11-11 16:06:25 +00:00
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 "";
}
}
2020-11-11 16:06:25 +00:00
}
};
const app = new TsFromSwagger(null, settings);
app.generateCode();
} catch (e) {
console.error(e.message);
}
});
}).on("error", (e) => {
console.error(`Got error: ${e.message}`);
2020-11-11 16:06:25 +00:00
});