116 lines
4.1 KiB
TypeScript
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}`);
|
|
});
|