nope/modules/xetics-lean-connector/helper/generate.code.ts
2020-11-11 17:06:25 +01:00

116 lines
4.1 KiB
TypeScript

/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2020-02-18 16:28:19
* @modify date 2020-11-11 12:40:41
* @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) {
let 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}`);
});