UNPKG

ngx-named-routes

Version:

Add named routes to your angular 7 projects

161 lines 14 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ 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; } export class NgxNamedRoutesService { /** * @param {?} __router */ constructor(__router) { this.__router = __router; this.counter = 0; this.__named_routes = {}; } /** * @param {?=} child_route * @return {?} */ loadRoutes(child_route) { this.counter++; /** @type {?} */ let routes = []; routes = child_route ? child_route.routes : cloneDeep(this.__router.config); for (let route of routes) { /** @type {?} */ let backslash_required; 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] = Object.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 }); } } return this.__named_routes; } /** * @param {?} name * @param {?=} param_values * @return {?} */ getRoute(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 {?} */ let raw_route; /** @type {?} */ let route; if (!this.__named_routes[name]) { this.loadRoutes(); if (!this.__named_routes[name]) { throw new Error(`La ruta ${name} no existe o el módulo que la define aún 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 {?} */ getNamedRoutes() { if (Object.keys(this.__named_routes).length === 0) { this.loadRoutes(); } return this.__named_routes; } /** * @param {?} name * @return {?} */ getNamedRoute(name) { if (Object.keys(this.__named_routes).length === 0) { this.loadRoutes(); } return this.__named_routes[name]; } /** * @private * @param {?} raw_route * @param {?=} param_values * @return {?} */ fillRouteParams(raw_route, param_values) { if (!param_values || param_values === {}) { return raw_route; } /** @type {?} */ let route = raw_route; for (let 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 = () => [ { type: Router } ]; /** @nocollapse */ NgxNamedRoutesService.ngInjectableDef = i0.defineInjectable({ factory: function NgxNamedRoutesService_Factory() { return new NgxNamedRoutesService(i0.inject(i1.Router)); }, token: NgxNamedRoutesService, providedIn: "root" }); if (false) { /** @type {?} */ NgxNamedRoutesService.prototype.counter; /** * @type {?} * @private */ NgxNamedRoutesService.prototype.__named_routes; /** * @type {?} * @private */ NgxNamedRoutesService.prototype.__router; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW5hbWVkLXJvdXRlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW5hbWVkLXJvdXRlcy8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtbmFtZWQtcm91dGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7Ozs7OztBQUVuQyxpQ0FHQzs7O0lBRkcsNkJBQW9DOztJQUNwQyxrQ0FBb0I7Ozs7O0FBR3hCLGlDQUlDOzs7SUFIRywyQkFBYzs7SUFDZCwrQkFBOEI7O0lBQzlCLG9DQUFpRTs7QUFPckUsTUFBTSxPQUFPLHFCQUFxQjs7OztJQU05QixZQUEyQixRQUFnQjtRQUFoQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBSnBDLFlBQU8sR0FBRyxDQUFDLENBQUM7UUFFWCxtQkFBYyxHQUF5QixFQUFFLENBQUM7SUFFSixDQUFDOzs7OztJQUV4QyxVQUFVLENBQUMsV0FBeUI7UUFDdkMsSUFBSSxDQUFDLE9BQU8sRUFBRyxDQUFDOztZQUNaLE1BQU0sR0FBRyxFQUFFO1FBQ2YsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUUsS0FBSyxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUU7O2dCQUNsQixrQkFBMEI7WUFDOUIsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDbEUsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxD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QUFDLENBQUM7SUFDckMsQ0FBQzs7Ozs7OztJQUVPLGVBQWUsQ0FBQyxTQUFTLEVBQUUsWUFBYTtRQUM1QyxJQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksS0FBSyxFQUFFLEVBQUU7WUFDdEMsT0FBTyxTQUFTLENBQUM7U0FDcEI7O1lBQ0csS0FBSyxHQUFHLFNBQVM7UUFDckIsS0FBSyxJQUFJLFNBQVMsSUFBSSxZQUFZLEVBQUU7WUFDaEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLFNBQVMsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUNuRTtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OztZQXRGSixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFqQlEsTUFBTTs7Ozs7SUFvQlgsd0NBQW1COzs7OztJQUVuQiwrQ0FBa0Q7Ozs7O0lBRS9CLHlDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciwgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ2hpbGRSb3V0ZSB7XG4gICAgcm91dGVzOiBBcnJheTx7W2tleTogc3RyaW5nXTogYW55fT47XG4gICAgcGFyZW50X3BhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTmFtZWRSb3V0ZSBleHRlbmRzIFJvdXRlIHtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIGNoaWxkcmVuPzogQXJyYXk8SU5hbWVkUm91dGU+O1xuICAgIF9sb2FkZWRDb25maWc/OiB7cm91dGVzOiBBcnJheTxJTmFtZWRSb3V0ZT47IFtrZXk6IHN0cmluZ106IGFueX07XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTmd4TmFtZWRSb3V0ZXNTZXJ2aWNlIHtcblxuICAgIHB1YmxpYyBjb3VudGVyID0gMDtcblxuICAgIHByaXZhdGUgX19uYW1lZF9yb3V0ZXM6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfX3JvdXRlcjogUm91dGVyKSB7fVxuXG4gICAgcHVibGljIGxvYWRSb3V0ZXMoY2hpbGRfcm91dGU/OiBJQ2hpbGRSb3V0ZSk6IHtba2V5OiBzdHJpbmddOiBhbnl9IHtcbiAgICAgICAgdGhpcy5jb3VudGVyICsrO1xuICAgICAgICBsZXQgcm91dGVzID0gW107XG4gICAgICAgIHJvdXRlcyA9IGNoaWxkX3JvdXRlID8gY2hpbGRfcm91dGUucm91dGVzIDogY2xvbmVEZWVwKHRoaXMuX19yb3V0ZXIuY29uZmlnKTtcbiAgICAgICAgZm9yIChsZXQgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgICAgICAgICBsZXQgYmFja3NsYXNoX3JlcXVpcmVkOiBzdHJpbmc7XG4gICAgICAgICAgICBpZiAoY2hpbGRfcm91dGUgJiYgWycnLCAnLyddLmluZGV4T2YoY2hpbGRfcm91dGUucGFyZW50X3BhdGgpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGJhY2tzbGFzaF9yZXF1aXJlZCA9IGNoaWxkX3JvdXRlLnBhcmVudF9wYXRoWzBdID09PSAnLycgPyAnJyA6ICcvJztcbiAgICAgICAgICAgICAgICByb3V0ZS5wYXRoID0gYmFja3NsYXNoX3JlcXVpcmVkICsgY2hpbGRfcm91dGUucGFyZW50X3BhdGggKyAocm91dGUucGF0aCAhPT0gJycgPyAnLycgKyByb3V0ZS5wYXRoIDogJycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBiYWNrc2xhc2hfcmVxdWlyZWQgPSByb3V0ZS5wYXRoWzBdID09PSAnLycgJiYgcm91dGUucGF0aCAhPT0gJycgPyAnJyA6ICcvJztcbiAgICAgICAgICAgICAgICByb3V0ZS5wYXRoID0gYmFja3NsYXNoX3JlcXVpcmVkICsgcm91dGUucGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyb3V0ZS5uYW1lICYmICF0aGlzLl9fbmFtZWRfcm91dGVzW3JvdXRlLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fX25hbWVkX3JvdXRlc1tyb3V0ZS5uYW1lXSA9IHsgLi4ucm91dGUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyb3V0ZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFJvdXRlcyh7cm91dGVzOiByb3V0ZS5jaGlsZHJlbiwgcGFyZW50X3BhdGg6IHJvdXRlLnBhdGh9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyb3V0ZS5fbG9hZGVkQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUm91dGVzKHtyb3V0ZXM6IHJvdXRlLl9sb2FkZWRDb25maWcucm91dGVzLCBwYXJlbnRfcGF0aDogcm91dGUucGF0aH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX19uYW1lZF9yb3V0ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvdXRlKG5hbWU6IHN0cmluZywgcGFyYW1fdmFsdWVzPzoge1trZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlcn0pOiBzdHJpbmcge1xuICAgICAgICAvLyBUT0RPOiBzaSBubyBleGlzdGUgZWwgbm9tYnJlLCBsbGFtYXIgbnVldmFtZW50ZSBhIGxvYWRSb3V0ZXMsIHBvcnF1ZSBlbCBtw7NkdWxvIHB1ZWRlIGhhYmVyIHNpZG8gY2FyZ2FkbyBwZXJlem9zYW1lbnRlXG4gICAgICAgIC8vIG5lZWQgcHJlbG9hZGluZyBzdHJhdGVneSBQcmVsb2FkQWxsTW9kdWxlc1xuICAgICAgICBsZXQgcmF3X3JvdXRlOiBzdHJpbmc7XG4gICAgICAgIGxldCByb3V0ZTogc3RyaW5nO1xuICAgICAgICBpZiAoIXRoaXMuX19uYW1lZF9yb3V0ZXNbbmFtZV0pIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFJvdXRlcygpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9fbmFtZWRfcm91dGVzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYSBydXRhICR7bmFtZX0gbm8gZXhpc3RlIG8gZWwgbcOzZHVsbyBxdWUgbGEgZGVmaW5lIGHDum4gbm8gaGEgc2lkbyBjYXJnYWRvLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByYXdfcm91dGUgPSB0aGlzLl9fbmFtZWRfcm91dGVzW25hbWVdLnBhdGg7XG4gICAgICAgICAgICBpZiAocmF3X3JvdXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsbFJvdXRlUGFyYW1zKHJhd19yb3V0ZSwgcGFyYW1fdmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJhd19yb3V0ZSA9IHRoaXMuX19uYW1lZF9yb3V0ZXNbbmFtZV0ucGF0aDtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsbFJvdXRlUGFyYW1zKHJhd19yb3V0ZSwgcGFyYW1fdmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYW1lZFJvdXRlcygpOiB7W2tleTogc3RyaW5nXTogYW55fSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9fbmFtZWRfcm91dGVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFJvdXRlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX19uYW1lZF9yb3V0ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hbWVkUm91dGUobmFtZTogc3RyaW5nKTogSU5hbWVkUm91dGUge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fX25hbWVkX3JvdXRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRSb3V0ZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9fbmFtZWRfcm91dGVzW25hbWVdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsbFJvdXRlUGFyYW1zKHJhd19yb3V0ZSwgcGFyYW1fdmFsdWVzPyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghcGFyYW1fdmFsdWVzIHx8IHBhcmFtX3ZhbHVlcyA9PT0ge30pIHtcbiAgICAgICAgICAgIHJldHVybiByYXdfcm91dGU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJvdXRlID0gcmF3X3JvdXRlO1xuICAgICAgICBmb3IgKGxldCBwYXJhbV9rZXkgaW4gcGFyYW1fdmFsdWVzKSB7XG4gICAgICAgICAgICByb3V0ZSA9IHJvdXRlLnJlcGxhY2UoJzonICsgcGFyYW1fa2V5LCBwYXJhbV92YWx1ZXNbcGFyYW1fa2V5XSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcm91dGU7XG4gICAgfVxufVxuIl19