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
JavaScript
;
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