UNPKG

midnight

Version:

Web framework for building modern web applications

70 lines (69 loc) 1.83 kB
"use strict"; /** * @typedef {import('http').IncomingMessage} Request * @typedef {import('http').ServerResponse} Response * @typedef {() => void} Next * @typedef {(req: Request, res: Response, next: Next) => void} Middleware */ /** * @param {{ log: any, stack: Middleware[] }} app * @param {Middleware} fn */ exports.use = function (app, fn) { app.log.debug("Use middleware ".concat(fn.name || "unknown")); app.stack.push(fn); return app; }; /** * @param {{ stack: Middleware[], log: any }} app * @param {{ stack: Middleware[] }} route * @param {Request} req * @param {Response} res * @param {(err?: Error) => void} callback */ exports.handle = function (app, route, req, res, callback) { var stack = app.stack.slice(0); // Include route specific middleware if (route) { for (var _i = 0, _a = route.stack; _i < _a.length; _i++) { var layer = _a[_i]; stack.push(layer); } } var index = 0; /** * @param {Error} [err] */ var next = function (err) { // Next layer var layer = stack[index++]; // Stack done if (!layer || res.headerSent) { if (callback) { return callback(err); } return; } try { app.log.trace("Process middleware ".concat(layer.name || "unknown")); if (err) { if (layer.length === 4) { layer(err, req, res, next); } else { next(err); } } else if (layer.length < 4) { layer(req, res, next); } else { next(); } } catch (e) { next(e); } }; next(); };