UNPKG

@sustain/core

Version:

Sustain is a Framework that is barely used despedcies to make stable and sustainable apps

76 lines 3.26 kB
"use strict"; 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