st-open-api
Version:
Generates API client SDKs from an OpenAPI specification written in OpenAPI version 3.x.x
149 lines • 7.42 kB
JavaScript
;
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