UNPKG

@xpresser/params-loader

Version:
75 lines (74 loc) 2.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ParamsMiddleware = void 0; /** * Params Loader function. * @param params */ function generateParamLoader(params) { /** * Load Param Middleware Generator. * @param param */ return function ParamLoader(param) { // If param has no definition, throw error. if (!params[param]) throw new Error(`Definition for param: '${String(param)}' not found!`); // Get params definition as `helper` const helper = params[param]; // Convert to express return async (http) => { // Get value of param from http const value = http.params[param]; // run not found if param is missing if (helper.notFound && !value) return helper.notFound(http, value); // Get loadedValue of param from loader let loadedValue = undefined; try { // if loaded exists, run loader else use value if (helper.load) { loadedValue = await helper.load(value, http); } else { loadedValue = value; } // Stop if headers are already sent if (http.res.headersSent) return; } catch (e) { if (helper.loadError) return helper.loadError(http, e); // log errors http.$("logError")(e); } // if not loadedValue run notFound if (helper.notFound && !loadedValue) return helper.notFound(http, value); // add to boot if addToBoot is true if (helper.addToBoot) http.addToBoot(helper.as || param, loadedValue); // Add to loadedParams state http.addLoadedParam(helper.as || param, loadedValue); // return next return http.next(); }; }; } /** * Generate Middleware from defined params. * @param params */ function ParamsMiddleware(params) { // Generate param loader. const loadParam = generateParamLoader(params); // Holds all middlewares. const middleware = {}; // Populate middleware. for (const param in params) { middleware[param] = loadParam(param); } return middleware; } exports.ParamsMiddleware = ParamsMiddleware;