UNPKG

airship-server

Version:

Airship is a framework for Node.JS & TypeScript that helps you to write big, scalable and maintainable API servers.

48 lines 2.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ApiMethodScheme_1 = require("../../codeGen/domain/schema/ApiMethodScheme"); const ApiMethodParam_1 = require("../../codeGen/domain/schema/ApiMethodParam"); const CustomType_1 = require("../../codeGen/domain/types/CustomType"); const ApiSchema_1 = require("../domain/ApiSchema"); const ASErrorResponse_1 = require("../../apiServer/domain/entity/ASErrorResponse"); const ASSuccessResponse_1 = require("../../apiServer/domain/entity/ASSuccessResponse"); const BaseSerializer_1 = require("../../serialize/BaseSerializer"); class AirshipApiSchemeGenerator { generateApiScheme(...methods) { let apiMethodsSchemes = []; let models = []; let responsesSchemes = []; methods.forEach(m => { let [request, response] = m; apiMethodsSchemes.push(this.getApiMethodScheme(request, response)); models.push(...BaseSerializer_1.BaseSerializer.getClassDependencies(request)); if (response != ASErrorResponse_1.default && response != ASSuccessResponse_1.default) { models.push(...BaseSerializer_1.BaseSerializer.getClassDependencies(response)); responsesSchemes.push(BaseSerializer_1.BaseSerializer.getClassScheme(response)); } }); responsesSchemes.push(BaseSerializer_1.BaseSerializer.getClassScheme(ASErrorResponse_1.default)); models.push(...BaseSerializer_1.BaseSerializer.getClassDependencies(ASErrorResponse_1.default)); responsesSchemes.push(BaseSerializer_1.BaseSerializer.getClassScheme(ASSuccessResponse_1.default)); models.push(...BaseSerializer_1.BaseSerializer.getClassDependencies(ASSuccessResponse_1.default)); return new ApiSchema_1.default(Array.from(new Set(models)).map(m => BaseSerializer_1.BaseSerializer.getClassScheme(m)), apiMethodsSchemes, responsesSchemes); } getApiMethodScheme(request, response) { let queryPath = request.getQueryPath(); let requestScheme = BaseSerializer_1.BaseSerializer.getClassScheme(request); let params = requestScheme.fields.map(field => { return new ApiMethodParam_1.default(field.name, field.type, true, field.description); }); let methodScheme = new ApiMethodScheme_1.default(queryPath .split('/') .map((name, index) => { if (index == 0 || index == 1) return name; return `${name[0].toUpperCase()}${name.slice(1)}`; }) .join(''), params, new CustomType_1.default(response.prototype.constructor.name), ''); return methodScheme; } } exports.default = AirshipApiSchemeGenerator; //# sourceMappingURL=AirshipApiSchemeGenerator.js.map