UNPKG

express-lazy-router

Version:
62 lines 2.15 kB
import express from "express"; /** * @param options * @example * ```js * const lazyLoad = createLazyLoader(); * router.use( * '/path_to_router', * lazyLoad(() => import('./path_to_router')), * ); * ``` */ export function createLazyRouter(options) { var _a; if (options === void 0) { options = {}; } var preload = (_a = options.preload) !== null && _a !== void 0 ? _a : false; /** * lazy load express router * @param resolver */ return function lazyRouter(resolver) { var lazyRouter = express.Router(); // Preserve loading order of router for default error handler // https://github.com/azu/express-lazy-router/issues/1 var loadedRouter; var resolveResolver = function () { return resolver().then(function (router) { if (!router) { throw new Error("lazyLoad(resolver) the resolver function should return a promise object, but it returns falsy value: " + router + "\n\nYou need to return a promise object from the callback function.\n\n lazyLoad(() => import('./path_to_router')), \n"); } if ("default" in router) { loadedRouter = router.default; } else { loadedRouter = router; } }); }; lazyRouter.use(function lazyRouterHandler(req, res, next) { if (loadedRouter) { return loadedRouter(req, res, next); } else { // request handler at first time resolveResolver() .then(function () { return loadedRouter(req, res, next); }) .catch(function (error) { next(error); }); } }); if (preload) { resolveResolver().catch(function (error) { console.error("[lazy-router] Fail to preload", error); }); } return lazyRouter; }; } //# sourceMappingURL=express-lazy-router.js.map