UNPKG

ngx-named-routes

Version:

Add named routes to your angular 7 projects

194 lines 15.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; import { cloneDeep } from 'lodash'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; /** * @record */ export function IChildRoute() { } if (false) { /** @type {?} */ IChildRoute.prototype.routes; /** @type {?} */ IChildRoute.prototype.parent_path; } /** * @record */ export function INamedRoute() { } if (false) { /** @type {?|undefined} */ INamedRoute.prototype.name; /** @type {?|undefined} */ INamedRoute.prototype.children; /** @type {?|undefined} */ INamedRoute.prototype._loadedConfig; } var NgxNamedRoutesService = /** @class */ (function () { function NgxNamedRoutesService(__router) { this.__router = __router; this.counter = 0; this.__named_routes = {}; } /** * @param {?=} child_route * @return {?} */ NgxNamedRoutesService.prototype.loadRoutes = /** * @param {?=} child_route * @return {?} */ function (child_route) { var e_1, _a; this.counter++; /** @type {?} */ var routes = []; routes = child_route ? child_route.routes : cloneDeep(this.__router.config); try { for (var routes_1 = tslib_1.__values(routes), routes_1_1 = routes_1.next(); !routes_1_1.done; routes_1_1 = routes_1.next()) { var route = routes_1_1.value; /** @type {?} */ var backslash_required = void 0; if (child_route && ['', '/'].indexOf(child_route.parent_path) === -1) { backslash_required = child_route.parent_path[0] === '/' ? '' : '/'; route.path = backslash_required + child_route.parent_path + (route.path !== '' ? '/' + route.path : ''); } else { backslash_required = route.path[0] === '/' && route.path !== '' ? '' : '/'; route.path = backslash_required + route.path; } if (route.name && !this.__named_routes[route.name]) { this.__named_routes[route.name] = tslib_1.__assign({}, route); } if (route.children) { this.loadRoutes({ routes: route.children, parent_path: route.path }); } if (route._loadedConfig) { this.loadRoutes({ routes: route._loadedConfig.routes, parent_path: route.path }); } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (routes_1_1 && !routes_1_1.done && (_a = routes_1.return)) _a.call(routes_1); } finally { if (e_1) throw e_1.error; } } return this.__named_routes; }; /** * @param {?} name * @param {?=} param_values * @return {?} */ NgxNamedRoutesService.prototype.getRoute = /** * @param {?} name * @param {?=} param_values * @return {?} */ function (name, param_values) { // TODO: si no existe el nombre, llamar nuevamente a loadRoutes, porque el módulo puede haber sido cargado perezosamente // need preloading strategy PreloadAllModules /** @type {?} */ var raw_route; /** @type {?} */ var route; if (!this.__named_routes[name]) { this.loadRoutes(); if (!this.__named_routes[name]) { throw new Error("La ruta " + name + " no existe o el m\u00F3dulo que la define a\u00FAn no ha sido cargado."); } raw_route = this.__named_routes[name].path; if (raw_route) { return this.fillRouteParams(raw_route, param_values); } } else { raw_route = this.__named_routes[name].path; return this.fillRouteParams(raw_route, param_values); } }; /** * @return {?} */ NgxNamedRoutesService.prototype.getNamedRoutes = /** * @return {?} */ function () { if (Object.keys(this.__named_routes).length === 0) { this.loadRoutes(); } return this.__named_routes; }; /** * @param {?} name * @return {?} */ NgxNamedRoutesService.prototype.getNamedRoute = /** * @param {?} name * @return {?} */ function (name) { if (Object.keys(this.__named_routes).length === 0) { this.loadRoutes(); } return this.__named_routes[name]; }; /** * @private * @param {?} raw_route * @param {?=} param_values * @return {?} */ NgxNamedRoutesService.prototype.fillRouteParams = /** * @private * @param {?} raw_route * @param {?=} param_values * @return {?} */ function (raw_route, param_values) { if (!param_values || param_values === {}) { return raw_route; } /** @type {?} */ var route = raw_route; for (var param_key in param_values) { route = route.replace(':' + param_key, param_values[param_key]); } return route; }; NgxNamedRoutesService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NgxNamedRoutesService.ctorParameters = function () { return [ { type: Router } ]; }; /** @nocollapse */ NgxNamedRoutesService.ngInjectableDef = i0.defineInjectable({ factory: function NgxNamedRoutesService_Factory() { return new NgxNamedRoutesService(i0.inject(i1.Router)); }, token: NgxNamedRoutesService, providedIn: "root" }); return NgxNamedRoutesService; }()); export { NgxNamedRoutesService }; if (false) { /** @type {?} */ NgxNamedRoutesService.prototype.counter; /** * @type {?} * @private */ NgxNamedRoutesService.prototype.__named_routes; /** * @type {?} * @private */ NgxNamedRoutesService.prototype.__router; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW5hbWVkLXJvdXRlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW5hbWVkLXJvdXRlcy8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtbmFtZWQtcm91dGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7QUFFbkMsaUNBR0M7OztJQUZHLDZCQUFvQzs7SUFDcEMsa0NBQW9COzs7OztBQUd4QixpQ0FJQzs7O0lBSEcsMkJBQWM7O0lBQ2QsK0JBQThCOztJQUM5QixvQ0FBaUU7O0FBSXJFO0lBU0ksK0JBQTJCLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFKcEMsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUVYLG1CQUFjLEdBQXlCLEVBQUUsQ0FBQztJQUVKLENBQUM7Ozs7O0lBRXhDLDBDQUFVOzs7O0lBQWpCLFVBQWtCLFdBQXlCOztRQUN2QyxJQUFJLENBQUMsT0FBTyxFQUFHLENBQUM7O1lBQ1osTUFBTSxHQUFHLEVBQUU7UUFDZixNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7WUFDNUUsS0FBa0IsSUFBQSxXQUFBLGlCQUFBLE1BQU0sQ0FBQSw4QkFBQSxrREFBRTtnQkFBckIsSUFBSSxLQUFLLG1CQUFBOztvQkFDTixrQkFBa0IsU0FBUTtnQkFDOUIsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFD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QUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ3JCO1FBRUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Ozs7Ozs7SUFFTywrQ0FBZTs7Ozs7O0lBQXZCLFVBQXdCLFNBQVMsRUFBRSxZQUFhO1FBQzVDLElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxLQUFLLEVBQUUsRUFBRTtZQUN0QyxPQUFPLFNBQVMsQ0FBQztTQUNwQjs7WUFDRyxLQUFLLEdBQUcsU0FBUztRQUNyQixLQUFLLElBQUksU0FBUyxJQUFJLFlBQVksRUFBRTtZQUNoQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ25FO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7Z0JBdEZKLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBakJRLE1BQU07OztnQ0FEZjtDQXVHQyxBQXZGRCxJQXVGQztTQXBGWSxxQkFBcUI7OztJQUU5Qix3Q0FBbUI7Ozs7O0lBRW5CLCtDQUFrRDs7Ozs7SUFFL0IseUNBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyLCBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDaGlsZFJvdXRlIHtcbiAgICByb3V0ZXM6IEFycmF5PHtba2V5OiBzdHJpbmddOiBhbnl9PjtcbiAgICBwYXJlbnRfcGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOYW1lZFJvdXRlIGV4dGVuZHMgUm91dGUge1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgY2hpbGRyZW4/OiBBcnJheTxJTmFtZWRSb3V0ZT47XG4gICAgX2xvYWRlZENvbmZpZz86IHtyb3V0ZXM6IEFycmF5PElOYW1lZFJvdXRlPjsgW2tleTogc3RyaW5nXTogYW55fTtcbn1cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBOZ3hOYW1lZFJvdXRlc1NlcnZpY2Uge1xuXG4gICAgcHVibGljIGNvdW50ZXIgPSAwO1xuXG4gICAgcHJpdmF0ZSBfX25hbWVkX3JvdXRlczoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIF9fcm91dGVyOiBSb3V0ZXIpIHt9XG5cbiAgICBwdWJsaWMgbG9hZFJvdXRlcyhjaGlsZF9yb3V0ZT86IElDaGlsZFJvdXRlKToge1trZXk6IHN0cmluZ106IGFueX0ge1xuICAgICAgICB0aGlzLmNvdW50ZXIgKys7XG4gICAgICAgIGxldCByb3V0ZXMgPSBbXTtcbiAgICAgICAgcm91dGVzID0gY2hpbGRfcm91dGUgPyBjaGlsZF9yb3V0ZS5yb3V0ZXMgOiBjbG9uZURlZXAodGhpcy5fX3JvdXRlci5jb25maWcpO1xuICAgICAgICBmb3IgKGxldCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgICAgICAgIGxldCBiYWNrc2xhc2hfcmVxdWlyZWQ6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChjaGlsZF9yb3V0ZSAmJiBbJycsICcvJ10uaW5kZXhPZihjaGlsZF9yb3V0ZS5wYXJlbnRfcGF0aCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgYmFja3NsYXNoX3JlcXVpcmVkID0gY2hpbGRfcm91dGUucGFyZW50X3BhdGhbMF0gPT09ICcvJyA/ICcnIDogJy8nO1xuICAgICAgICAgICAgICAgIHJvdXRlLnBhdGggPSBiYWNrc2xhc2hfcmVxdWlyZWQgKyBjaGlsZF9yb3V0ZS5wYXJlbnRfcGF0aCArIChyb3V0ZS5wYXRoICE9PSAnJyA/ICcvJyArIHJvdXRlLnBhdGggOiAnJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJhY2tzbGFzaF9yZXF1aXJlZCA9IHJvdXRlLnBhdGhbMF0gPT09ICcvJyAmJiByb3V0ZS5wYXRoICE9PSAnJyA/ICcnIDogJy8nO1xuICAgICAgICAgICAgICAgIHJvdXRlLnBhdGggPSBiYWNrc2xhc2hfcmVxdWlyZWQgKyByb3V0ZS5wYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvdXRlLm5hbWUgJiYgIXRoaXMuX19uYW1lZF9yb3V0ZXNbcm91dGUubmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9fbmFtZWRfcm91dGVzW3JvdXRlLm5hbWVdID0geyAuLi5yb3V0ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUm91dGVzKHtyb3V0ZXM6IHJvdXRlLmNoaWxkcmVuLCBwYXJlbnRfcGF0aDogcm91dGUucGF0aH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJvdXRlLl9sb2FkZWRDb25maWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRSb3V0ZXMoe3JvdXRlczogcm91dGUuX2xvYWRlZENvbmZpZy5yb3V0ZXMsIHBhcmVudF9wYXRoOiByb3V0ZS5wYXRofSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fX25hbWVkX3JvdXRlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Um91dGUobmFtZTogc3RyaW5nLCBwYXJhbV92YWx1ZXM/OiB7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyfSk6IHN0cmluZyB7XG4gICAgICAgIC8vIFRPRE86IHNpIG5vIGV4aXN0ZSBlbCBub21icmUsIGxsYW1hciBudWV2YW1lbnRlIGEgbG9hZFJvdXRlcywgcG9ycXVlIGVsIG3Ds2R1bG8gcHVlZGUgaGFiZXIgc2lkbyBjYXJnYWRvIHBlcmV6b3NhbWVudGVcbiAgICAgICAgLy8gbmVlZCBwcmVsb2FkaW5nIHN0cmF0ZWd5IFByZWxvYWRBbGxNb2R1bGVzXG4gICAgICAgIGxldCByYXdfcm91dGU6IHN0cmluZztcbiAgICAgICAgbGV0IHJvdXRlOiBzdHJpbmc7XG4gICAgICAgIGlmICghdGhpcy5fX25hbWVkX3JvdXRlc1tuYW1lXSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkUm91dGVzKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX19uYW1lZF9yb3V0ZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExhIHJ1dGEgJHtuYW1lfSBubyBleGlzdGUgbyBlbCBtw7NkdWxvIHF1ZSBsYSBkZWZpbmUgYcO6biBubyBoYSBzaWRvIGNhcmdhZG8uYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhd19yb3V0ZSA9IHRoaXMuX19uYW1lZF9yb3V0ZXNbbmFtZV0ucGF0aDtcbiAgICAgICAgICAgIGlmIChyYXdfcm91dGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWxsUm91dGVQYXJhbXMocmF3X3JvdXRlLCBwYXJhbV92YWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmF3X3JvdXRlID0gdGhpcy5fX25hbWVkX3JvdXRlc1tuYW1lXS5wYXRoO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWxsUm91dGVQYXJhbXMocmF3X3JvdXRlLCBwYXJhbV92YWx1ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hbWVkUm91dGVzKCk6IHtba2V5OiBzdHJpbmddOiBhbnl9IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX19uYW1lZF9yb3V0ZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkUm91dGVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fX25hbWVkX3JvdXRlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZWRSb3V0ZShuYW1lOiBzdHJpbmcpOiBJTmFtZWRSb3V0ZSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9fbmFtZWRfcm91dGVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFJvdXRlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX19uYW1lZF9yb3V0ZXNbbmFtZV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWxsUm91dGVQYXJhbXMocmF3X3JvdXRlLCBwYXJhbV92YWx1ZXM/KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFwYXJhbV92YWx1ZXMgfHwgcGFyYW1fdmFsdWVzID09PSB7fSkge1xuICAgICAgICAgICAgcmV0dXJuIHJhd19yb3V0ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcm91dGUgPSByYXdfcm91dGU7XG4gICAgICAgIGZvciAobGV0IHBhcmFtX2tleSBpbiBwYXJhbV92YWx1ZXMpIHtcbiAgICAgICAgICAgIHJvdXRlID0gcm91dGUucmVwbGFjZSgnOicgKyBwYXJhbV9rZXksIHBhcmFtX3ZhbHVlc1twYXJhbV9rZXldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb3V0ZTtcbiAgICB9XG59XG4iXX0=