ngx-named-routes
Version:
Add named routes to your angular 7 projects
161 lines • 14 kB
JavaScript
/**
* @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