@protocolnebula/ts-openapi-generator
Version:
Build API and models from Swagger/OpenAPI to use in any project type
88 lines • 3.69 kB
JavaScript
;
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