2020-11-11 16:06:25 +00:00
|
|
|
/**
|
|
|
|
* @author Martin Karkowski
|
|
|
|
* @email m.karkowski@zema.de
|
|
|
|
* @create date 2020-02-18 16:28:19
|
2020-12-04 18:10:33 +00:00
|
|
|
* @modify date 2020-12-02 08:58:38
|
2020-11-11 16:06:25 +00:00
|
|
|
* @desc [description]
|
|
|
|
*/
|
|
|
|
|
2020-12-04 18:10:33 +00:00
|
|
|
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-12-04 18:10:33 +00:00
|
|
|
/**
|
2020-11-11 16:06:25 +00:00
|
|
|
* Hack to Fix the Swagger Definition.
|
2020-12-04 18:10:33 +00:00
|
|
|
*
|
|
|
|
* 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-12-04 18:10:33 +00:00
|
|
|
*
|
2020-11-11 16:06:25 +00:00
|
|
|
*/
|
2020-12-04 18:10:33 +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
|
|
|
|
2020-12-04 18:10:33 +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
|
|
|
|
2020-12-04 18:10:33 +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
|
|
|
|
2020-12-04 18:10:33 +00:00
|
|
|
const settings = {
|
|
|
|
swaggerProvider: {
|
|
|
|
// Function to Return all Elements
|
|
|
|
provide: () => JSON.parse(rawData)
|
|
|
|
},
|
2020-11-11 16:06:25 +00:00
|
|
|
|
2020-12-04 18:10:33 +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
|
|
|
}
|
2020-12-04 18:10:33 +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
|
|
|
|
2020-12-04 18:10:33 +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
|
|
|
}
|
2020-12-04 18:10:33 +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
|
|
|
});
|