UNPKG

express-lazy-router

Version:
69 lines 2.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createLazyRouter = void 0; var express_1 = __importDefault(require("express")); /** * @param options * @example * ```js * const lazyLoad = createLazyLoader(); * router.use( * '/path_to_router', * lazyLoad(() => import('./path_to_router')), * ); * ``` */ 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_1.default.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; }; } exports.createLazyRouter = createLazyRouter; //# sourceMappingURL=express-lazy-router.js.map