/** * @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}`); });