UNPKG

@protocolnebula/ts-openapi-generator

Version:

Build API and models from Swagger/OpenAPI to use in any project type

88 lines 3.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.APIParserService = void 0; const api_model_1 = require("../../../models/api.model"); const model_attributes_model_1 = require("../../../models/model-attributes.model"); const models_util_1 = require("../../../utils/models.util"); const parser_base_service_1 = require("./parser-base.service"); class APIParserService extends parser_base_service_1.ParserBaseService { constructor(document, store) { super(document, store); this.document = document; this.store = store; } process() { console.group("Processing APIs from 'paths'"); const apiRawList = this.document.paths; for (let url in apiRawList) { console.group('Processing api', url); const rawModel = apiRawList[url]; this.parseVerbs(rawModel, url); console.groupEnd(); } this.store.apis.sort(); console.groupEnd(); } parseVerbs(rawModel, url) { for (const verb in rawModel) { const verbRaw = rawModel[verb]; console.group(verb.toUpperCase(), '-', verbRaw.operationId); const api = new api_model_1.ApiModel(url, verb); api.tags = verbRaw.tags || url.substr(1).split('/'); api.description = verbRaw.summary; api.operationId = verbRaw.operationId; console.info('Parsing parameters'); console.group(); this.parseRquestParameters(api, verbRaw.parameters); console.groupEnd(); console.info('Parsing requestBody'); console.group(); this.parseRequestBody(api, verbRaw.requestBody); console.groupEnd(); console.info('Parsing response'); console.group(); this.parseResponse(api, verbRaw.responses); console.groupEnd(); this.store.apis.add(api); console.groupEnd(); } } parseRquestParameters(apiModel, parameters) { if (!parameters) { console.debug(`No query parameters`); return; } apiModel.queryParams = this.parseApiParameters(parameters, (0, models_util_1.getApiDefaultModelName)(apiModel, 'Params')); } parseRequestBody(apiModel, scheme) { if (!scheme) { console.debug(`No requestBody`); return; } if (this.isRefObject(scheme)) { console.debug(`is ref of ${scheme.$ref}`); const instance = new model_attributes_model_1.ModelAttributessModel(null); instance.typeURI = scheme.$ref; } else if (this.isRequestBodyObject(scheme)) { const keys = Object.keys(scheme.content); const mainKey = keys[0]; apiModel.requestContentType = mainKey; apiModel.requestBody = this.parseSchema(scheme.content[mainKey].schema, (0, models_util_1.getApiDefaultModelName)(apiModel, 'Request'), mainKey); } else { throw `${apiModel.verb.toUpperCase()} ${apiModel.url} has no correct scheme.`; } } parseResponse(apiModel, responses) { const response = responses['200']; if (this.isResponseObject(response)) { const keys = Object.keys(response.content); const mainKey = keys[0]; apiModel.responseContentType = mainKey; apiModel.response = this.parseSchema(response.content[mainKey].schema, (0, models_util_1.getApiDefaultModelName)(apiModel, 'Response'), mainKey); } } } exports.APIParserService = APIParserService; //# sourceMappingURL=api-parser.service.js.map