UNPKG

st-open-api

Version:

Generates API client SDKs from an OpenAPI specification written in OpenAPI version 3.x.x

149 lines 7.42 kB
"use strict"; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getServiceHttpFunction = void 0; 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 (_a) { var type = _a.type, functionName = _a.functionName, parameters = _a.parameters; var parameterClassName = "I".concat(functionName.substring(0, 1).toUpperCase()).concat(functionName.substring(1)).concat(type.substring(0, 1).toUpperCase()).concat(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 = (0, get_property_1.getInterfaceOrEnumFromSchema)(parameterClassName, functionName, parameterObject, folder.getInterfaceParameterFolder()); var rendered = classToRender.render(); fs.appendFileSync(nodePath.join(folder.getInterfaceParameterFolder(), "".concat(rendered.fileName, ".ts")), rendered.render); var schemaName = "#/schema/parameter/".concat(parameterClassName); reference.addReference(schemaName, { fileName: rendered.fileName, className: rendered.classEnumName, folderPath: folder.getInterfaceParameterFolder(), }); return reference.getImportAndTypeByRef(schemaName, folder.getServiceFolder()); }; var getServiceHttpFunction = function (objProperty, httpMethod, path, operation) { var _a; var reference = config_1.configuration.getReference(); var folder = config_1.configuration.getFolderManager(); if (!!operation) { var functionName = getOperationId(httpMethod, path, operation.operationId); var requestBody = (0, create_request_body_interfaces_1.createRequestBodyInterfaces)(functionName, operation.requestBody); var response = (0, create_response_interfaces_1.createResponseInterfaces)(functionName, operation.responses); var sortedParameter = (0, get_sorted_parameter_1.getSortedParameter)(path, operation.parameters); var operationFunction = { functionName: functionName, forceInterceptor: config_1.configuration.forceInterceptor(), imports: [], httpMethod: httpMethod, originalPath: path, description: operation.description, requestBody: requestBody, response: response, }; if (Array.isArray(requestBody.import)) { (_a = operationFunction.imports).push.apply(_a, __spreadArray([], __read(requestBody.import), false)); } else { operationFunction.imports.push(requestBody.import); } operationFunction.imports.push(response.import); if (Object.keys(sortedParameter.query).length > 0) { var _b = createParameter({ type: 'query', functionName: functionName, parameters: sortedParameter.query }), className = _b.className, importString = _b.import; operationFunction.queryParameters = { className: className, params: Object.keys(sortedParameter.query) }; operationFunction.imports.push(importString); } if (Object.keys(sortedParameter.header).length > 0) { var _c = createParameter({ type: 'header', functionName: functionName, parameters: sortedParameter.header }), className = _c.className, importString = _c.import; operationFunction.headerParameters = { className: className, params: sortedParameter.header }; operationFunction.imports.push(importString); } if (Object.keys(sortedParameter.path).length > 0) { var _d = createParameter({ type: 'path', functionName: functionName, parameters: sortedParameter.path }), className = _d.className, importString = _d.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); } }; exports.getServiceHttpFunction = getServiceHttpFunction; var getOperationId = function (httpMethod, path, operationId) { if (!!operationId) { return (0, first_character_lower_1.firstCharacterLower)((0, 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 (0, formatText_1.formatText)(p, 'ANY', 'PascalCase'); }).join(''); return "".concat(httpMethod.toLowerCase()).concat(newPath); }; //# sourceMappingURL=get-service-http-function.js.map