UNPKG

@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
"use strict"; 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