@igli.kokici/st-open-api
Version:
Generates API client SDKs from an OpenAPI specification written in OpenAPI version 3.x.x
117 lines • 6.28 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var get_sorted_parameter_1 = require("./get-sorted-parameter");
var create_response_interfaces_1 = require("./create-response-interfaces");
var create_request_body_interfaces_1 = require("./create-request-body-interfaces");
var get_property_1 = require("./get-property");
var fs = require("fs");
var nodePath = require("path");
var object_property_1 = require("../classes/object-property");
var kebab_case_to_camel_1 = require("./kebab-case-to-camel");
var first_character_lower_1 = require("./first-character-lower");
var config_1 = require("./config");
var formatText_1 = require("./formatText");
var createParameter = function (type, functionName, parameters) {
var parameterClassName = "I" + functionName.substring(0, 1).toUpperCase() + functionName.substring(1) + type.substring(0, 1).toUpperCase() + type.substring(1) + "Parameter";
var reference = config_1.configuration.getReference();
var folder = config_1.configuration.getFolderManager();
var parameterObject = {
type: 'object',
required: [],
properties: {}
};
Object.values(parameters).forEach(function (p) {
// HTTP authorization header shall be added via interceptor,
// not be necessary to be provided for every single request
if (p.name === 'authorization' && type === 'header')
return;
if (p.required) {
parameterObject.required.push(p.name);
}
parameterObject.properties[p.name] = p.schema;
});
var classToRender = get_property_1.getInterfaceOrEnumFromSchema(parameterClassName, functionName, parameterObject, folder.getInterfaceParameterFolder());
var rendered = classToRender.render();
fs.appendFileSync(nodePath.join(folder.getInterfaceParameterFolder(), rendered.fileName + ".ts"), rendered.render);
var schemaName = "#/schema/parameter/" + parameterClassName;
reference.addReference(schemaName, {
fileName: rendered.fileName,
className: rendered.classEnumName,
folderPath: folder.getInterfaceParameterFolder(),
});
return reference.getImportAndTypeByRef(schemaName, folder.getServiceFolder());
};
exports.getServiceHttpFunction = function (objProperty, httpMethod, path, operation) {
var reference = config_1.configuration.getReference();
var folder = config_1.configuration.getFolderManager();
if (!!operation) {
var functionName = getOperationId(httpMethod, path, operation.operationId);
var requestBody = create_request_body_interfaces_1.createRequestBodyInterfaces(functionName, operation.requestBody);
var response = create_response_interfaces_1.createResponseInterfaces(functionName, operation.responses);
var sortedParameter = get_sorted_parameter_1.getSortedParameter(path, operation.parameters);
var operationFunction = __assign(__assign({ functionName: functionName, forceInterceptor: config_1.configuration.forceInterceptor(), imports: [], httpMethod: httpMethod, originalPath: path, description: operation.description }, requestBody), response);
operationFunction.imports.push(requestBody.import);
operationFunction.imports.push(response.import);
if (Object.keys(sortedParameter.query).length > 0) {
var _a = createParameter('query', functionName, sortedParameter.query), className = _a.className, importString = _a.import;
operationFunction.queryParameters = { className: className, params: Object.keys(sortedParameter.query) };
operationFunction.imports.push(importString);
}
if (Object.keys(sortedParameter.header).length > 0) {
var _b = createParameter('header', functionName, sortedParameter.header), className = _b.className, importString = _b.import;
operationFunction.headerParameters = { className: className, params: Object.keys(sortedParameter.header) };
operationFunction.imports.push(importString);
}
if (Object.keys(sortedParameter.path).length > 0) {
var _c = createParameter('path', functionName, sortedParameter.path), className = _c.className, importString = _c.import;
operationFunction.pathParameters = { className: className, params: Object.keys(sortedParameter.path) };
operationFunction.imports.push(importString);
}
[
object_property_1.HTTP_FUNCTION_REF,
object_property_1.HTTP_REQUEST_INTERCEPTOR_INTERFACE_REF,
object_property_1.HTTP_RESPONSE_INTERCEPTOR_INTERFACE_REF,
object_property_1.HTTP_ERROR_HANDLER_INTERFACE_REF,
object_property_1.OPEN_API_FUNCTION_REF,
]
.map(function (fun) { return fun(folder); })
.map(function (httpRef) {
return reference.getImportAndTypeByRef(httpRef.refKey, folder.getServiceFolder());
})
.forEach(function (refResult) { return objProperty.addImports(refResult.import); });
objProperty.addFunction(operationFunction);
}
};
var getOperationId = function (httpMethod, path, operationId) {
if (!!operationId) {
return first_character_lower_1.firstCharacterLower(kebab_case_to_camel_1.kebabCaseToCamel(operationId.replace('_', '-')));
}
var newPath = path.split('/').filter(function (p) { return !!p; })
.map(function (p) {
if (p.startsWith('{')) {
return 'By' + p.substr(1, 1).toUpperCase() + p.substr(2);
}
return p;
}).map(function (p) {
if (p.endsWith('}')) {
return p.substr(0, p.length - 1);
}
return p;
})
.map(function (p) {
return formatText_1.formatText(p, 'ANY', 'PascalCase');
}).join('');
return "" + httpMethod.toLowerCase() + newPath;
};
//# sourceMappingURL=get-service-http-function.js.map
;