@sustain/core
Version:
Sustain is a Framework that is barely used despedcies to make stable and sustainable apps
76 lines • 3.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadControllers = exports.prepareMetadata = exports.buildHttpRequests = void 0;
const dependency_container_1 = require("../di/dependency-container");
const constants_1 = require("../constants");
const http_1 = require("@sustain/http");
const extract_methods_util_1 = require("./extract-methods.util");
const metadataKey = [constants_1.INTERCEPTORS, constants_1.MATCH_METADATA, constants_1.PATH_METADATA, constants_1.METHOD_METADATA, constants_1.PATH_TYPE, constants_1.METHOD_RETURN];
const HttpRequests = {};
/**
* Create the http requests object to map it with the server instance
* @param metadatas
* @param payload
*/
function buildHttpRequests(metadatas, payload) {
if (metadatas[constants_1.METHOD_METADATA]) {
if (!HttpRequests[metadatas[constants_1.METHOD_METADATA]]) {
HttpRequests[metadatas[constants_1.METHOD_METADATA]] = [];
}
const routePath = metadatas[constants_1.CONTROLLER_ROUTE]
? metadatas[constants_1.CONTROLLER_ROUTE] + metadatas[constants_1.PATH_METADATA]
: metadatas[constants_1.PATH_METADATA];
HttpRequests[metadatas[constants_1.METHOD_METADATA]].push({
interceptors: metadatas[constants_1.INTERCEPTORS],
path: {
value: routePath,
match: http_1.match(routePath, { decode: decodeURIComponent }),
type: metadatas[constants_1.PATH_TYPE] || constants_1.PATH_TYPES.String,
},
handler: Object.assign(payload.instance)[payload.method],
parent: payload.instance,
objectHanlder: Object.assign(payload.instance),
functionHandler: payload.method,
});
}
return HttpRequests;
}
exports.buildHttpRequests = buildHttpRequests;
/**
* Grap metadatas from the controller functions
* @param payload
* @param object of metadata
*/
function prepareMetadata(payload) {
const metadatas = {};
if (payload.instance.route) {
metadatas[constants_1.CONTROLLER_ROUTE] = payload.instance.route;
metadatas[constants_1.CONTROLLER_CONFIG] = payload.instance;
}
metadataKey.forEach((key) => {
metadatas[key] = Reflect.getMetadata(key, Object.assign(payload.instance)[payload.method]);
});
return metadatas;
}
exports.prepareMetadata = prepareMetadata;
/**
* Prepare controllers, it functions with they metadata
* @param controllers
* @return a list of methods {GET, POST, ...} and they routes
*/
function loadControllers(controllers) {
(controllers || []).forEach((controller) => {
const injectedController = dependency_container_1.InjectedContainer.get(controller);
extract_methods_util_1.getControllersMethods(injectedController).forEach((method) => {
const payload = {
instance: injectedController,
method,
};
const metadatas = prepareMetadata(payload);
buildHttpRequests(metadatas, payload);
});
});
return HttpRequests;
}
exports.loadControllers = loadControllers;
//# sourceMappingURL=http-request.helper.js.map