@xpresser/params-loader
Version:
Xpresser's url params to state Loader.
75 lines (74 loc) • 2.48 kB
JavaScript
;
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;