@ngrdt/router 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -11
- package/esm2022/index.mjs +6 -3
- package/esm2022/lib/directives/rdt-any-route-active.directive.mjs +121 -0
- package/esm2022/lib/guards/global-route-guard.service.mjs +51 -0
- package/esm2022/lib/guards/prevent-data-loss.guard.mjs +7 -0
- package/esm2022/lib/rdt-route/rdt-route.mjs +11 -5
- package/esm2022/lib/services/rdt-router.service.mjs +4 -4
- package/esm2022/lib/services/rdt-routes.token.mjs +2 -2
- package/fesm2022/ngrdt-router.mjs +185 -10
- package/fesm2022/ngrdt-router.mjs.map +1 -1
- package/index.d.ts +5 -2
- package/lib/directives/rdt-any-route-active.directive.d.ts +31 -0
- package/lib/guards/global-route-guard.service.d.ts +10 -0
- package/lib/guards/prevent-data-loss.guard.d.ts +2 -0
- package/lib/rdt-route/rdt-route.d.ts +2 -0
- package/lib/services/rdt-routes.token.d.ts +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# @ngrdt/router
|
|
2
2
|
|
|
3
3
|
### Instalation
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
`npm install @ngrdt/router`
|
|
5
6
|
|
|
6
7
|
### Define Route
|
|
8
|
+
|
|
7
9
|
```javascript
|
|
8
10
|
export const COOL_ROUTE = new RdtRouteBuilder()
|
|
9
11
|
.setName('Cool Route')
|
|
@@ -13,6 +15,7 @@ export const COOL_ROUTE = new RdtRouteBuilder()
|
|
|
13
15
|
```
|
|
14
16
|
|
|
15
17
|
### Define Child Route
|
|
18
|
+
|
|
16
19
|
```javascript
|
|
17
20
|
export const COOL_ROUTE_CHILD = new RdtRouteBuilder()
|
|
18
21
|
.setName('Cool Route child')
|
|
@@ -20,30 +23,29 @@ export const COOL_ROUTE_CHILD = new RdtRouteBuilder()
|
|
|
20
23
|
.setCanBeEntered(() => inject(MockPermissionService).hasPermission('COOL_CHILD_ACCESS'))
|
|
21
24
|
.build();
|
|
22
25
|
|
|
23
|
-
PARENT_ROUTE
|
|
24
|
-
.setChildren(COOL_ROUTE_CHILD)
|
|
26
|
+
PARENT_ROUTE.setChildren(COOL_ROUTE_CHILD);
|
|
25
27
|
```
|
|
26
28
|
|
|
27
29
|
### Define Angular Route
|
|
30
|
+
|
|
28
31
|
```javascript
|
|
29
32
|
// Create angular route
|
|
30
|
-
COOL_ROUTE.toAngularRoute()
|
|
31
|
-
.setComponent(RouteLevel1Component)
|
|
32
|
-
.build()
|
|
33
|
+
COOL_ROUTE.toAngularRoute().setComponent(RouteLevel1Component).build();
|
|
33
34
|
|
|
34
35
|
// Get information of route
|
|
35
|
-
COOL_ROUTE.name
|
|
36
|
+
COOL_ROUTE.name;
|
|
36
37
|
```
|
|
38
|
+
|
|
37
39
|
### Use It in template
|
|
40
|
+
|
|
38
41
|
```html
|
|
39
|
-
<button [rdtRouterLink]="COOL_ROUTE" [params]="{ coolId: 123 }">
|
|
40
|
-
Go to Level 2
|
|
41
|
-
</button>
|
|
42
|
+
<button [rdtRouterLink]="COOL_ROUTE" [params]="{ coolId: 123 }">Go to Level 2</button>
|
|
42
43
|
```
|
|
43
44
|
|
|
44
45
|
### See other cool features like
|
|
46
|
+
|
|
45
47
|
```javascript
|
|
46
|
-
private readonly rdtRouter: RdtRouterService = inject(
|
|
48
|
+
private readonly rdtRouter: RdtRouterService = inject(RdtRouterService);
|
|
47
49
|
|
|
48
50
|
rdtRouter.navigate(...);
|
|
49
51
|
rdtRouter.parseAbsoluteUrl(...);
|
package/esm2022/index.mjs
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
export * from './lib/services/rdt-confirm-data-loss.service';
|
|
2
2
|
export * from './lib/services/rdt-router.service';
|
|
3
3
|
export * from './lib/services/rdt-routes.token';
|
|
4
|
+
export * from './lib/rdt-route/constants';
|
|
5
|
+
export * from './lib/rdt-route/rdt-angular-route';
|
|
4
6
|
export * from './lib/rdt-route/rdt-route';
|
|
5
7
|
export * from './lib/rdt-route/rdt-route-builder';
|
|
6
|
-
export * from './lib/
|
|
7
|
-
export * from './lib/rdt-route/constants';
|
|
8
|
+
export * from './lib/directives/rdt-any-route-active.directive';
|
|
8
9
|
export * from './lib/directives/rdt-router-link.directive';
|
|
9
|
-
|
|
10
|
+
export * from './lib/guards/global-route-guard.service';
|
|
11
|
+
export * from './lib/guards/prevent-data-loss.guard';
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUVoRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG1DQUFtQyxDQUFDO0FBRWxELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9yZHQtY29uZmlybS1kYXRhLWxvc3Muc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9yZHQtcm91dGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcmR0LXJvdXRlcy50b2tlbic7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3JkdC1yb3V0ZS9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmR0LXJvdXRlL3JkdC1hbmd1bGFyLXJvdXRlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JkdC1yb3V0ZS9yZHQtcm91dGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmR0LXJvdXRlL3JkdC1yb3V0ZS1idWlsZGVyJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9yZHQtYW55LXJvdXRlLWFjdGl2ZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9yZHQtcm91dGVyLWxpbmsuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2d1YXJkcy9nbG9iYWwtcm91dGUtZ3VhcmQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ndWFyZHMvcHJldmVudC1kYXRhLWxvc3MuZ3VhcmQnO1xuIl19
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { DestroyRef, Directive, ElementRef, Input, Renderer2, inject, } from '@angular/core';
|
|
2
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { NavigationEnd, Router, RouterModule, } from '@angular/router';
|
|
4
|
+
import { filter } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
const EXACT_TRUE_OPTS = {
|
|
7
|
+
paths: 'exact',
|
|
8
|
+
queryParams: 'exact',
|
|
9
|
+
fragment: 'ignored',
|
|
10
|
+
matrixParams: 'ignored',
|
|
11
|
+
};
|
|
12
|
+
const EXACT_FALSE_OPTS = {
|
|
13
|
+
paths: 'subset',
|
|
14
|
+
queryParams: 'subset',
|
|
15
|
+
fragment: 'ignored',
|
|
16
|
+
matrixParams: 'ignored',
|
|
17
|
+
};
|
|
18
|
+
export class RdtAnyRouteActiveDirective {
|
|
19
|
+
destroyRef = inject(DestroyRef);
|
|
20
|
+
router = inject(Router);
|
|
21
|
+
renderer = inject(Renderer2);
|
|
22
|
+
elRef = inject(ElementRef);
|
|
23
|
+
set anyRouteActive(data) {
|
|
24
|
+
this.classes = this.parseClasses(data);
|
|
25
|
+
}
|
|
26
|
+
watchedRoutes = [];
|
|
27
|
+
set anyRouteActiveOptions(value) {
|
|
28
|
+
this._anyRouteActiveOptions = this.parseOptions(value);
|
|
29
|
+
}
|
|
30
|
+
_anyRouteActiveOptions = EXACT_FALSE_OPTS;
|
|
31
|
+
ariaCurrentWhenActive;
|
|
32
|
+
get isActive() {
|
|
33
|
+
return this._isActive;
|
|
34
|
+
}
|
|
35
|
+
_isActive = false;
|
|
36
|
+
classes = [];
|
|
37
|
+
ngOnInit() {
|
|
38
|
+
this.update();
|
|
39
|
+
this.listenRouterEvents();
|
|
40
|
+
}
|
|
41
|
+
ngOnChanges(changes) {
|
|
42
|
+
if (changes['anyRouteActive']?.previousValue) {
|
|
43
|
+
const prev = this.parseClasses(changes['anyRouteActive'].previousValue);
|
|
44
|
+
prev.forEach((c) => this.removeClass(c));
|
|
45
|
+
}
|
|
46
|
+
this.update();
|
|
47
|
+
}
|
|
48
|
+
update() {
|
|
49
|
+
this._isActive = this.watchedRoutes.some((route) => {
|
|
50
|
+
const param = typeof route === 'string' ? route : this.router.createUrlTree(route);
|
|
51
|
+
return this.router.isActive(param, this._anyRouteActiveOptions);
|
|
52
|
+
});
|
|
53
|
+
this.setClasses();
|
|
54
|
+
this.setAriaCurrent();
|
|
55
|
+
}
|
|
56
|
+
setAriaCurrent() {
|
|
57
|
+
const el = this.elRef.nativeElement;
|
|
58
|
+
if (this._isActive && this.ariaCurrentWhenActive !== undefined) {
|
|
59
|
+
const value = this.ariaCurrentWhenActive.toString();
|
|
60
|
+
this.renderer.setAttribute(el, 'aria-current', value);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.renderer.removeAttribute(el, 'aria-current');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
setClasses() {
|
|
67
|
+
if (this._isActive) {
|
|
68
|
+
this.classes.forEach((c) => this.addClass(c));
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.classes.forEach((c) => this.removeClass(c));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
addClass(className) {
|
|
75
|
+
this.renderer.addClass(this.elRef.nativeElement, className);
|
|
76
|
+
}
|
|
77
|
+
removeClass(className) {
|
|
78
|
+
this.renderer.removeClass(this.elRef.nativeElement, className);
|
|
79
|
+
}
|
|
80
|
+
listenRouterEvents() {
|
|
81
|
+
this.router.events
|
|
82
|
+
.pipe(filter((ev) => ev instanceof NavigationEnd), takeUntilDestroyed(this.destroyRef))
|
|
83
|
+
.subscribe(() => this.update());
|
|
84
|
+
}
|
|
85
|
+
parseClasses(data) {
|
|
86
|
+
const classes = Array.isArray(data) ? data : data.split(' ');
|
|
87
|
+
return classes.filter((c) => !!c);
|
|
88
|
+
}
|
|
89
|
+
parseOptions(input) {
|
|
90
|
+
if ('exact' in input) {
|
|
91
|
+
if (input.exact) {
|
|
92
|
+
return EXACT_TRUE_OPTS;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
return EXACT_FALSE_OPTS;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
return input;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtAnyRouteActiveDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
103
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: RdtAnyRouteActiveDirective, isStandalone: true, selector: "[rdtAnyRouteActive]", inputs: { anyRouteActive: "anyRouteActive", watchedRoutes: "watchedRoutes", anyRouteActiveOptions: "anyRouteActiveOptions", ariaCurrentWhenActive: "ariaCurrentWhenActive" }, providers: [RouterModule], usesOnChanges: true, ngImport: i0 });
|
|
104
|
+
}
|
|
105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtAnyRouteActiveDirective, decorators: [{
|
|
106
|
+
type: Directive,
|
|
107
|
+
args: [{
|
|
108
|
+
selector: '[rdtAnyRouteActive]',
|
|
109
|
+
standalone: true,
|
|
110
|
+
providers: [RouterModule],
|
|
111
|
+
}]
|
|
112
|
+
}], propDecorators: { anyRouteActive: [{
|
|
113
|
+
type: Input
|
|
114
|
+
}], watchedRoutes: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], anyRouteActiveOptions: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}], ariaCurrentWhenActive: [{
|
|
119
|
+
type: Input
|
|
120
|
+
}] } });
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWFueS1yb3V0ZS1hY3RpdmUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL2RpcmVjdGl2ZXMvcmR0LWFueS1yb3V0ZS1hY3RpdmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBR0wsU0FBUyxFQUVULE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBRUwsYUFBYSxFQUNiLE1BQU0sRUFDTixZQUFZLEdBQ2IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUU5QixNQUFNLGVBQWUsR0FBeUI7SUFDNUMsS0FBSyxFQUFFLE9BQU87SUFDZCxXQUFXLEVBQUUsT0FBTztJQUNwQixRQUFRLEVBQUUsU0FBUztJQUNuQixZQUFZLEVBQUUsU0FBUztDQUN4QixDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBeUI7SUFDN0MsS0FBSyxFQUFFLFFBQVE7SUFDZixXQUFXLEVBQUUsUUFBUTtJQUNyQixRQUFRLEVBQUUsU0FBUztJQUNuQixZQUFZLEVBQUUsU0FBUztDQUN4QixDQUFDO0FBT0YsTUFBTSxPQUFPLDBCQUEwQjtJQUNwQixVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixLQUFLLEdBQTRCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVyRSxJQUNJLGNBQWMsQ0FBQyxJQUF1QjtRQUN4QyxJQUFJLENBQUMsT0FB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QixDQUFDLFlBQVksQ0FBQzs7MkZBRWQsMEJBQTBCO2tCQUx0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQzFCOzhCQVFLLGNBQWM7c0JBRGpCLEtBQUs7Z0JBTU4sYUFBYTtzQkFEWixLQUFLO2dCQUlGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkFNRyxxQkFBcUI7c0JBQTdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBpbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHtcclxuICBJc0FjdGl2ZU1hdGNoT3B0aW9ucyxcclxuICBOYXZpZ2F0aW9uRW5kLFxyXG4gIFJvdXRlcixcclxuICBSb3V0ZXJNb2R1bGUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XHJcblxyXG5jb25zdCBFWEFDVF9UUlVFX09QVFM6IElzQWN0aXZlTWF0Y2hPcHRpb25zID0ge1xyXG4gIHBhdGhzOiAnZXhhY3QnLFxyXG4gIHF1ZXJ5UGFyYW1zOiAnZXhhY3QnLFxyXG4gIGZyYWdtZW50OiAnaWdub3JlZCcsXHJcbiAgbWF0cml4UGFyYW1zOiAnaWdub3JlZCcsXHJcbn07XHJcblxyXG5jb25zdCBFWEFDVF9GQUxTRV9PUFRTOiBJc0FjdGl2ZU1hdGNoT3B0aW9ucyA9IHtcclxuICBwYXRoczogJ3N1YnNldCcsXHJcbiAgcXVlcnlQYXJhbXM6ICdzdWJzZXQnLFxyXG4gIGZyYWdtZW50OiAnaWdub3JlZCcsXHJcbiAgbWF0cml4UGFyYW1zOiAnaWdub3JlZCcsXHJcbn07XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tyZHRBbnlSb3V0ZUFjdGl2ZV0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgcHJvdmlkZXJzOiBbUm91dGVyTW9kdWxlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdEFueVJvdXRlQWN0aXZlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYW55Um91dGVBY3RpdmUoZGF0YTogc3RyaW5nW10gfCBzdHJpbmcpIHtcclxuICAgIHRoaXMuY2xhc3NlcyA9IHRoaXMucGFyc2VDbGFzc2VzKGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICB3YXRjaGVkUm91dGVzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10gPSBbXTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYW55Um91dGVBY3RpdmVPcHRpb25zKHZhbHVlOiB7IGV4YWN0OiBib29sZWFuIH0gfCBJc0FjdGl2ZU1hdGNoT3B0aW9ucykge1xyXG4gICAgdGhpcy5fYW55Um91dGVBY3RpdmVPcHRpb25zID0gdGhpcy5wYXJzZU9wdGlvbnModmFsdWUpO1xyXG4gIH1cclxuICBwcml2YXRlIF9hbnlSb3V0ZUFjdGl2ZU9wdGlvbnM6IElzQWN0aXZlTWF0Y2hPcHRpb25zID0gRVhBQ1RfRkFMU0VfT1BUUztcclxuXHJcbiAgQElucHV0KCkgYXJpYUN1cnJlbnRXaGVuQWN0aXZlPzpcclxuICAgIHwgJ3BhZ2UnXHJcbiAgICB8ICdzdGVwJ1xyXG4gICAgfCAnbG9jYXRpb24nXHJcbiAgICB8ICdkYXRlJ1xyXG4gICAgfCAndGltZSdcclxuICAgIHwgdHJ1ZVxyXG4gICAgfCBmYWxzZTtcclxuXHJcbiAgZ2V0IGlzQWN0aXZlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzQWN0aXZlO1xyXG4gIH1cclxuICBwcml2YXRlIF9pc0FjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGNsYXNzZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICAgIHRoaXMubGlzdGVuUm91dGVyRXZlbnRzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snYW55Um91dGVBY3RpdmUnXT8ucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICBjb25zdCBwcmV2ID0gdGhpcy5wYXJzZUNsYXNzZXMoY2hhbmdlc1snYW55Um91dGVBY3RpdmUnXS5wcmV2aW91c1ZhbHVlKTtcclxuICAgICAgcHJldi5mb3JFYWNoKChjKSA9PiB0aGlzLnJlbW92ZUNsYXNzKGMpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgdGhpcy5faXNBY3RpdmUgPSB0aGlzLndhdGNoZWRSb3V0ZXMuc29tZSgocm91dGUpID0+IHtcclxuICAgICAgY29uc3QgcGFyYW0gPVxyXG4gICAgICAgIHR5cGVvZiByb3V0ZSA9PT0gJ3N0cmluZycgPyByb3V0ZSA6IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUocm91dGUpO1xyXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIuaXNBY3RpdmUocGFyYW0sIHRoaXMuX2FueVJvdXRlQWN0aXZlT3B0aW9ucyk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0Q2xhc3NlcygpO1xyXG4gICAgdGhpcy5zZXRBcmlhQ3VycmVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBcmlhQ3VycmVudCgpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGlmICh0aGlzLl9pc0FjdGl2ZSAmJiB0aGlzLmFyaWFDdXJyZW50V2hlbkFjdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5hcmlhQ3VycmVudFdoZW5BY3RpdmUudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWwsICdhcmlhLWN1cnJlbnQnLCB2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShlbCwgJ2FyaWEtY3VycmVudCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDbGFzc2VzKCkge1xyXG4gICAgaWYgKHRoaXMuX2lzQWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuY2xhc3Nlcy5mb3JFYWNoKChjKSA9PiB0aGlzLmFkZENsYXNzKGMpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2xhc3Nlcy5mb3JFYWNoKChjKSA9PiB0aGlzLnJlbW92ZUNsYXNzKGMpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVDbGFzcyhjbGFzc05hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RlblJvdXRlckV2ZW50cygpIHtcclxuICAgIHRoaXMucm91dGVyLmV2ZW50c1xyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoKGV2KSA9PiBldiBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZSgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFyc2VDbGFzc2VzKGRhdGE6IHN0cmluZ1tdIHwgc3RyaW5nKSB7XHJcbiAgICBjb25zdCBjbGFzc2VzID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBkYXRhLnNwbGl0KCcgJyk7XHJcbiAgICByZXR1cm4gY2xhc3Nlcy5maWx0ZXIoKGMpID0+ICEhYyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhcnNlT3B0aW9ucyhpbnB1dDogeyBleGFjdDogYm9vbGVhbiB9IHwgSXNBY3RpdmVNYXRjaE9wdGlvbnMpIHtcclxuICAgIGlmICgnZXhhY3QnIGluIGlucHV0KSB7XHJcbiAgICAgIGlmIChpbnB1dC5leGFjdCkge1xyXG4gICAgICAgIHJldHVybiBFWEFDVF9UUlVFX09QVFM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIEVYQUNUX0ZBTFNFX09QVFM7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { GuardsCheckStart, NavigationEnd, Router, } from '@angular/router';
|
|
3
|
+
import { preventDataLossGuardFn } from './prevent-data-loss.guard';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/router";
|
|
6
|
+
export class GlobalRouteGuardService {
|
|
7
|
+
router;
|
|
8
|
+
constructor(router) {
|
|
9
|
+
this.router = router;
|
|
10
|
+
}
|
|
11
|
+
// This will help ensure that routes are automatically protected by ensuring that global guards are applied to every route
|
|
12
|
+
ensureGlobalGuards() {
|
|
13
|
+
let lastUrl = '';
|
|
14
|
+
this.router.events.subscribe((e) => {
|
|
15
|
+
// Remember last url after successful navigation
|
|
16
|
+
if (e instanceof NavigationEnd) {
|
|
17
|
+
lastUrl = location.href;
|
|
18
|
+
}
|
|
19
|
+
if (e instanceof GuardsCheckStart) {
|
|
20
|
+
let lastChild = e.state.root;
|
|
21
|
+
while (lastChild?.firstChild) {
|
|
22
|
+
lastChild = lastChild.firstChild;
|
|
23
|
+
}
|
|
24
|
+
// Native back button will immediately replace url on click
|
|
25
|
+
// Replace it back to last url before guard check is finished.
|
|
26
|
+
// Angular will set it to correct value afterwards.
|
|
27
|
+
history.replaceState(window.history.state, '', lastUrl);
|
|
28
|
+
if (lastChild?.routeConfig) {
|
|
29
|
+
this.ensureCanDeactivateGuards(lastChild.routeConfig);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
ensureCanDeactivateGuards(routeConfig) {
|
|
35
|
+
if (!routeConfig.canDeactivate) {
|
|
36
|
+
routeConfig.canDeactivate = [];
|
|
37
|
+
}
|
|
38
|
+
const canDeactivateGuards = routeConfig.canDeactivate;
|
|
39
|
+
// ensure that the "MySpecialCanDeactivateGuard" is in effect.
|
|
40
|
+
if (!canDeactivateGuards.find((o) => o == preventDataLossGuardFn)) {
|
|
41
|
+
canDeactivateGuards.push(preventDataLossGuardFn);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GlobalRouteGuardService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
45
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GlobalRouteGuardService, providedIn: 'root' });
|
|
46
|
+
}
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GlobalRouteGuardService, decorators: [{
|
|
48
|
+
type: Injectable,
|
|
49
|
+
args: [{ providedIn: 'root' }]
|
|
50
|
+
}], ctorParameters: () => [{ type: i1.Router }] });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLXJvdXRlLWd1YXJkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvZ3VhcmRzL2dsb2JhbC1yb3V0ZS1ndWFyZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUVMLGdCQUFnQixFQUNoQixhQUFhLEVBRWIsTUFBTSxHQUNQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUduRSxNQUFNLE9BQU8sdUJBQXVCO0lBQ2Q7SUFBcEIsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRXRDLDBIQUEwSDtJQUNuSCxrQkFBa0I7UUFDdkIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2pDLGdEQUFnRDtZQUNoRCxJQUFJLENBQUMsWUFBWSxhQUFhLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDMUIsQ0FBQztZQUNELElBQUksQ0FBQyxZQUFZLGdCQUFnQixFQUFFLENBQUM7Z0JBQ2xDLElBQUksU0FBUyxHQUEyQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDckQsT0FBTyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUM7b0JBQzdCLFNBQVMsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO2dCQUNuQyxDQUFDO2dCQUNELDJEQUEyRDtnQkFDM0QsOERBQThEO2dCQUM5RCxtREFBbUQ7Z0JBQ25ELE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUV4RCxJQUFJLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxXQUFrQjtRQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQy9CLFdBQVcsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLENBQUM7UUFFRCxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFFdEQsOERBQThEO1FBQzlELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7WUFDbEUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7dUdBeENVLHVCQUF1QjsyR0FBdkIsdUJBQXVCLGNBRFYsTUFBTTs7MkZBQ25CLHVCQUF1QjtrQkFEbkMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICBHdWFyZHNDaGVja1N0YXJ0LFxyXG4gIE5hdmlnYXRpb25FbmQsXHJcbiAgUm91dGUsXHJcbiAgUm91dGVyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHByZXZlbnREYXRhTG9zc0d1YXJkRm4gfSBmcm9tICcuL3ByZXZlbnQtZGF0YS1sb3NzLmd1YXJkJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBHbG9iYWxSb3V0ZUd1YXJkU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge31cclxuXHJcbiAgLy8gVGhpcyB3aWxsIGhlbHAgZW5zdXJlIHRoYXQgcm91dGVzIGFyZSBhdXRvbWF0aWNhbGx5IHByb3RlY3RlZCBieSBlbnN1cmluZyB0aGF0IGdsb2JhbCBndWFyZHMgYXJlIGFwcGxpZWQgdG8gZXZlcnkgcm91dGVcclxuICBwdWJsaWMgZW5zdXJlR2xvYmFsR3VhcmRzKCkge1xyXG4gICAgbGV0IGxhc3RVcmwgPSAnJztcclxuXHJcbiAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIC8vIFJlbWVtYmVyIGxhc3QgdXJsIGFmdGVyIHN1Y2Nlc3NmdWwgbmF2aWdhdGlvblxyXG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuICAgICAgICBsYXN0VXJsID0gbG9jYXRpb24uaHJlZjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEd1YXJkc0NoZWNrU3RhcnQpIHtcclxuICAgICAgICBsZXQgbGFzdENoaWxkOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90ID0gZS5zdGF0ZS5yb290O1xyXG4gICAgICAgIHdoaWxlIChsYXN0Q2hpbGQ/LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgIGxhc3RDaGlsZCA9IGxhc3RDaGlsZC5maXJzdENoaWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBOYXRpdmUgYmFjayBidXR0b24gd2lsbCBpbW1lZGlhdGVseSByZXBsYWNlIHVybCBvbiBjbGlja1xyXG4gICAgICAgIC8vIFJlcGxhY2UgaXQgYmFjayB0byBsYXN0IHVybCBiZWZvcmUgZ3VhcmQgY2hlY2sgaXMgZmluaXNoZWQuXHJcbiAgICAgICAgLy8gQW5ndWxhciB3aWxsIHNldCBpdCB0byBjb3JyZWN0IHZhbHVlIGFmdGVyd2FyZHMuXHJcbiAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUod2luZG93Lmhpc3Rvcnkuc3RhdGUsICcnLCBsYXN0VXJsKTtcclxuXHJcbiAgICAgICAgaWYgKGxhc3RDaGlsZD8ucm91dGVDb25maWcpIHtcclxuICAgICAgICAgIHRoaXMuZW5zdXJlQ2FuRGVhY3RpdmF0ZUd1YXJkcyhsYXN0Q2hpbGQucm91dGVDb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVuc3VyZUNhbkRlYWN0aXZhdGVHdWFyZHMocm91dGVDb25maWc6IFJvdXRlKSB7XHJcbiAgICBpZiAoIXJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUpIHtcclxuICAgICAgcm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZSA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNhbkRlYWN0aXZhdGVHdWFyZHMgPSByb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlO1xyXG5cclxuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBcIk15U3BlY2lhbENhbkRlYWN0aXZhdGVHdWFyZFwiIGlzIGluIGVmZmVjdC5cclxuICAgIGlmICghY2FuRGVhY3RpdmF0ZUd1YXJkcy5maW5kKChvKSA9PiBvID09IHByZXZlbnREYXRhTG9zc0d1YXJkRm4pKSB7XHJcbiAgICAgIGNhbkRlYWN0aXZhdGVHdWFyZHMucHVzaChwcmV2ZW50RGF0YUxvc3NHdWFyZEZuKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { RdtComponentGuardStoreService } from '@ngrdt/core';
|
|
3
|
+
export const preventDataLossGuardFn = () => {
|
|
4
|
+
const guardStore = inject(RdtComponentGuardStoreService);
|
|
5
|
+
return guardStore.checkCanLeaveGlobal$();
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmVudC1kYXRhLWxvc3MuZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvZ3VhcmRzL3ByZXZlbnQtZGF0YS1sb3NzLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUF5QixHQUFHLEVBQUU7SUFDL0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDekQsT0FBTyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztBQUMzQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2FuRGVhY3RpdmF0ZUZuIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0Q29tcG9uZW50R3VhcmRTdG9yZVNlcnZpY2UgfSBmcm9tICdAbmdyZHQvY29yZSc7XHJcblxyXG5leHBvcnQgY29uc3QgcHJldmVudERhdGFMb3NzR3VhcmRGbjogQ2FuRGVhY3RpdmF0ZUZuPGFueT4gPSAoKSA9PiB7XHJcbiAgY29uc3QgZ3VhcmRTdG9yZSA9IGluamVjdChSZHRDb21wb25lbnRHdWFyZFN0b3JlU2VydmljZSk7XHJcbiAgcmV0dXJuIGd1YXJkU3RvcmUuY2hlY2tDYW5MZWF2ZUdsb2JhbCQoKTtcclxufTtcclxuIl19
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { RdtStringUtils } from '@ngrdt/utils';
|
|
2
2
|
import { RdtAngularRoute } from './rdt-angular-route';
|
|
3
3
|
import { runInInjectionContext } from '@angular/core';
|
|
4
|
+
export function ALWAYS_TRUE() {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
4
7
|
export class RdtRoute {
|
|
5
8
|
orderedParams = [];
|
|
6
9
|
_paramMap = {};
|
|
@@ -14,7 +17,7 @@ export class RdtRoute {
|
|
|
14
17
|
_parent = null;
|
|
15
18
|
_children = [];
|
|
16
19
|
_entryDisabled = false;
|
|
17
|
-
_canBeEntered =
|
|
20
|
+
_canBeEntered = ALWAYS_TRUE;
|
|
18
21
|
_absoluteRegex;
|
|
19
22
|
get paramMap() {
|
|
20
23
|
return this._paramMap;
|
|
@@ -69,6 +72,9 @@ export class RdtRoute {
|
|
|
69
72
|
get staticParams() {
|
|
70
73
|
return { ...this._staticParams };
|
|
71
74
|
}
|
|
75
|
+
get hasCanBeEnteredGuard() {
|
|
76
|
+
return this._canBeEntered !== ALWAYS_TRUE;
|
|
77
|
+
}
|
|
72
78
|
canBeEntered(injector) {
|
|
73
79
|
return injector
|
|
74
80
|
? runInInjectionContext(injector, this._canBeEntered)
|
|
@@ -139,7 +145,7 @@ export class RdtRoute {
|
|
|
139
145
|
return new RdtAngularRoute(this);
|
|
140
146
|
}
|
|
141
147
|
// Provides static mapping for parameter names tableName -> urlName.
|
|
142
|
-
// Returns new instance of
|
|
148
|
+
// Returns new instance of RdtRoute<T> that is clone of
|
|
143
149
|
// this route and its parents (NOT children).
|
|
144
150
|
withParamMappings(mappings) {
|
|
145
151
|
const clone = this.clone();
|
|
@@ -147,7 +153,7 @@ export class RdtRoute {
|
|
|
147
153
|
return clone;
|
|
148
154
|
}
|
|
149
155
|
// Sets selected parameters for itself and parents.
|
|
150
|
-
// Returns new instance of
|
|
156
|
+
// Returns new instance of RdtRoute<T> that is clone of
|
|
151
157
|
// this route and its parents (NOT children).
|
|
152
158
|
withStaticParams(param1, param2) {
|
|
153
159
|
const clone = this.clone();
|
|
@@ -189,7 +195,7 @@ export class RdtRoute {
|
|
|
189
195
|
});
|
|
190
196
|
return res;
|
|
191
197
|
}
|
|
192
|
-
// Returns new instance of
|
|
198
|
+
// Returns new instance of RdtRoute<T> that is clone of
|
|
193
199
|
// this route and its parents (NOT children).
|
|
194
200
|
clone() {
|
|
195
201
|
const clone = new RdtRoute();
|
|
@@ -205,4 +211,4 @@ export class RdtRoute {
|
|
|
205
211
|
return clone;
|
|
206
212
|
}
|
|
207
213
|
}
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3JkdC1yb3V0ZS9yZHQtcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUc5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFZLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhFLE1BQU0sT0FBTyxRQUFRO0lBQ1QsYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUM3QixTQUFTLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxNQUFNLENBQVU7SUFDaEIsYUFBYSxHQUFtQixFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFlLEVBQUUsQ0FBQztJQUMvQixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLFlBQVksR0FBVyxFQUFFLENBQUM7SUFFMUIsS0FBSyxDQUFVO0lBQ2YsS0FBSyxDQUFVO0lBQ2YsT0FBTyxHQUFvQixJQUFJLENBQUM7SUFDaEMsU0FBUyxHQUFlLEVBQUUsQ0FBQztJQUMzQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLGFBQWEsR0FBa0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBRTVDLGNBQWMsQ0FBVTtJQUVoQyxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixnQ0FBZ0M7WUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksTUFBTSxDQUM5QixHQUFHLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQ2pFLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQzlCLEdBQUcsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FDOUQsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFXO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQW1CO1FBQzlCLE9BQU8sUUFBUTtZQUNiLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCw2Q0FBNkM7SUFDN0MsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU8sSUFBSSxDQUFDLE1BQWdCLEVBQUUsTUFBMkIsRUFBRTtRQUMxRCxNQUFNLE1BQU0sR0FBMkMsRUFBRSxDQUFDO1FBQzFELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwRSxNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFZLENBQUM7WUFDekMsTUFBTSxTQUFTLEdBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDLEVBQUUsU0FBUyxJQUFJLEdBQUcsQ0FBQztZQUN0RSxJQUFJLEdBQUcsR0FBb0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXJDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDckMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QixDQUFDO1lBQ0QsTUFBTSxDQUFDLFNBQW9CLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDckMsQ0FBQztRQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBRWhDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsaUJBQWlCLENBQUMsV0FBdUIsSUFBSSxDQUFDLGFBQWE7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sY0FBYyxDQUFDLFNBQVMsQ0FDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQ2pDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLFdBQXVCLElBQUksQ0FBQyxhQUFhO1FBQ3pELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxTQUFTLENBQUMsSUFBWSxFQUFFLFFBQW9CO1FBQ2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLGdCQUFnQixHQUFRLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUU5QyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JDLElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDbEMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFJLFFBQWdCLENBQ25ELE9BQU8sQ0FBQyxTQUFTLENBQ2xCLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxHQUFHLGdCQUFnQixDQUFDLEtBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELE9BQU8sSUFBSSxlQUFlLENBQUksSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSx1REFBdUQ7SUFDdkQsNkNBQTZDO0lBQzdDLGlCQUFpQixDQUFDLFFBQXdCO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixLQUFLLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFRRCxtREFBbUQ7SUFDbkQsdURBQXVEO0lBQ3ZELDZDQUE2QztJQUM3QyxnQkFBZ0IsQ0FBb0IsTUFBd0IsRUFBRSxNQUFXO1FBQ3ZFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUzQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxZQUFZLEdBQUksTUFBdUIsQ0FBQyxZQUFZLENBQUM7WUFDM0QsSUFBSSxPQUFPLEdBQW9CLEtBQUssQ0FBQztZQUVyQyxPQUFPLE9BQU8sRUFBRSxDQUFDO2dCQUNmLElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxZQUFZLEVBQUUsQ0FBQztvQkFDMUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7Z0JBQ2pDLENBQUM7Z0JBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLGFBQWEsR0FBRyxNQUFXLENBQUM7UUFDcEMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGVBQWUsQ0FBQyxXQUFtQjtRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDeEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsZUFBZSxDQUFDLFdBQW1CO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUN4QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsa0NBQWtDO0lBQ2xDLGtCQUFrQixDQUFDLEdBQU07UUFDdkIsTUFBTSxHQUFHLEdBQWUsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDcEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBWSxDQUFDO1lBQzdELElBQUksV0FBVyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUN2QixHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCw2Q0FBNkM7SUFDN0MsS0FBSztRQUNILE1BQU0sS0FBSyxHQUFHLElBQUksUUFBUSxFQUFLLENBQUM7UUFDaEMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDOUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZHRTdHJpbmdVdGlscyB9IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IFN0YXRpY1JvdXRlUGFyYW1zLCBQYXJhbU1hcHBpbmcsIFBhcmFtVHlwZU1hcCB9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgeyBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRBbmd1bGFyUm91dGUgfSBmcm9tICcuL3JkdC1hbmd1bGFyLXJvdXRlJztcclxuaW1wb3J0IHsgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJkdFJvdXRlPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IHtcclxuICBwcm90ZWN0ZWQgb3JkZXJlZFBhcmFtczogc3RyaW5nW10gPSBbXTtcclxuICBwcm90ZWN0ZWQgX3BhcmFtTWFwOiBQYXJhbVR5cGVNYXA8VD4gPSB7fTtcclxuICBwcm90ZWN0ZWQgX3JlZ2V4ITogUmVnRXhwO1xyXG4gIHByb3RlY3RlZCBwYXJhbU1hcHBpbmdzOiBQYXJhbU1hcHBpbmdbXSA9IFtdO1xyXG4gIHByb3RlY3RlZCBfc3RhdGljUGFyYW1zOiBQYXJ0aWFsPFQ+ID0ge307XHJcbiAgcHJvdGVjdGVkIF9xdWVyeVBhcmFtczogUGFyYW1zID0ge307XHJcbiAgcHJvdGVjdGVkIF9zdGF0ZVBhcmFtczogUGFyYW1zID0ge307XHJcblxyXG4gIHByb3RlY3RlZCBfbmFtZSE6IHN0cmluZztcclxuICBwcm90ZWN0ZWQgX3BhdGghOiBzdHJpbmc7XHJcbiAgcHJvdGVjdGVkIF9wYXJlbnQ6IFJkdFJvdXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIF9jaGlsZHJlbjogUmR0Um91dGVbXSA9IFtdO1xyXG4gIHByb3RlY3RlZCBfZW50cnlEaXNhYmxlZCA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBfY2FuQmVFbnRlcmVkOiAoKSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBfYWJzb2x1dGVSZWdleD86IFJlZ0V4cDtcclxuXHJcbiAgZ2V0IHBhcmFtTWFwKCk6IFJlYWRvbmx5PFBhcmFtVHlwZU1hcDxUPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtTWFwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcclxuICB9XHJcblxyXG4gIGdldCBwYXRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhdGg7XHJcbiAgfVxyXG5cclxuICBnZXQgcGFyZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICB9XHJcblxyXG4gIGdldCBjaGlsZHJlbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIGdldCBiYXNlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudC5hYnNvbHV0ZVBhdGggOiAnLyc7XHJcbiAgfVxyXG5cclxuICBnZXQgYWJzb2x1dGVQYXRoKCkge1xyXG4gICAgcmV0dXJuIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocyh0aGlzLmJhc2VQYXRoLCB0aGlzLl9wYXRoKTtcclxuICB9XHJcblxyXG4gIGdldCByZWdleCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWdleDtcclxuICB9XHJcblxyXG4gIGdldCBhYnNvbHV0ZVJlZ2V4KCk6IFJlZ0V4cCB7XHJcbiAgICBpZiAodGhpcy5fYWJzb2x1dGVSZWdleCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYWJzb2x1dGVSZWdleDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcGFyZW50KSB7XHJcbiAgICAgIC8vIFJlbW92ZSBpbml0aWFsIF4gYW5kIGVuZGluZyAkXHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX3BhcmVudC5hYnNvbHV0ZVJlZ2V4LnNvdXJjZS5zbGljZSgxLCAtMSk7XHJcbiAgICAgIHRoaXMuX2Fic29sdXRlUmVnZXggPSBuZXcgUmVnRXhwKFxyXG4gICAgICAgICdeJyArIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocyhwYXJlbnQsIHRoaXMuX3JlZ2V4LnNvdXJjZSkgKyAnJCdcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2Fic29sdXRlUmVnZXggPSBuZXcgUmVnRXhwKFxyXG4gICAgICAgICdeJyArIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocygnLycsIHRoaXMuX3JlZ2V4LnNvdXJjZSkgKyAnJCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9hYnNvbHV0ZVJlZ2V4O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVudHJ5RGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW50cnlEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGdldCBzdGF0ZVBhcmFtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0ZVBhcmFtcztcclxuICB9XHJcblxyXG4gIGdldCBxdWVyeVBhcmFtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9xdWVyeVBhcmFtcztcclxuICB9XHJcblxyXG4gIHRlc3RVcmwodXJsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFic29sdXRlUmVnZXgudGVzdCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN0YXRpY1BhcmFtcygpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuX3N0YXRpY1BhcmFtcyB9O1xyXG4gIH1cclxuXHJcbiAgY2FuQmVFbnRlcmVkKGluamVjdG9yPzogSW5qZWN0b3IpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpbmplY3RvclxyXG4gICAgICA/IHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgdGhpcy5fY2FuQmVFbnRlcmVkKVxyXG4gICAgICA6IHRoaXMuX2NhbkJlRW50ZXJlZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gRXh0cmFjdHMgdXJsIHBhcmFtZXRlcnMgZnJvbSBhYnNvbHV0ZSB1cmwuXHJcbiAgcGFyc2VBYnNvbHV0ZVVybCh1cmw6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsIHtcclxuICAgIGNvbnN0IHJlZyA9IHRoaXMuYWJzb2x1dGVSZWdleDtcclxuICAgIGlmICghcmVnLnRlc3QodXJsKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IG1hdGNoZXMgPSByZWcuZXhlYyh1cmwpO1xyXG4gICAgaWYgKG1hdGNoZXMpIHtcclxuICAgICAgY29uc3QgdmFsdWVzID0gbWF0Y2hlcy5zbGljZSgxKS5yZXZlcnNlKCk7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbGwodmFsdWVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWxsKHZhbHVlczogc3RyaW5nW10sIHJlczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KSB7XHJcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleSBpbiBrZXlvZiBUXT86IHN0cmluZyB8IG51bWJlciB9ID0ge307XHJcbiAgICBjb25zdCByZXZlcnNlZFBhcmFtcyA9IHRoaXMub3JkZXJlZFBhcmFtcy5zbGljZSgpLnJldmVyc2UoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmV2ZXJzZWRQYXJhbXMubGVuZ3RoICYmIGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qga2V5ID0gcmV2ZXJzZWRQYXJhbXNbaV0gYXMga2V5b2YgVDtcclxuICAgICAgY29uc3QgbWFwcGVkS2V5ID1cclxuICAgICAgICB0aGlzLnBhcmFtTWFwcGluZ3MuZmluZCgobSkgPT4gbS51cmxOYW1lID09PSBrZXkpPy50YWJsZU5hbWUgPz8ga2V5O1xyXG4gICAgICBsZXQgdmFsOiBzdHJpbmcgfCBudW1iZXIgPSB2YWx1ZXNbaV07XHJcblxyXG4gICAgICBpZiAodGhpcy5fcGFyYW1NYXBba2V5XSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICB2YWwgPSBwYXJzZUludCh2YWwpO1xyXG4gICAgICB9XHJcbiAgICAgIHBhcmFtc1ttYXBwZWRLZXkgYXMga2V5b2YgVF0gPSB2YWw7XHJcbiAgICB9XHJcbiAgICByZXNbdGhpcy5hYnNvbHV0ZVBhdGhdID0gcGFyYW1zO1xyXG5cclxuICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gcmV2ZXJzZWRQYXJhbXMubGVuZ3RoICYmIHRoaXMuX3BhcmVudCkge1xyXG4gICAgICB0aGlzLl9wYXJlbnQuZmlsbCh2YWx1ZXMuc2xpY2UocmV2ZXJzZWRQYXJhbXMubGVuZ3RoKSwgcmVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVBYnNvbHV0ZVVybChwYXJhbU1hcDogUGFydGlhbDxUPiA9IHRoaXMuX3N0YXRpY1BhcmFtcyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVVcmwodGhpcy5hYnNvbHV0ZVBhdGgsIHBhcmFtTWFwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBSZHRTdHJpbmdVdGlscy5qb2luUGF0aHMoXHJcbiAgICAgICAgdGhpcy5fcGFyZW50LmNyZWF0ZUFic29sdXRlVXJsKCksXHJcbiAgICAgICAgdGhpcy5jcmVhdGVSZWxhdGl2ZVVybChwYXJhbU1hcClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZVJlbGF0aXZlVXJsKHBhcmFtTWFwOiBQYXJ0aWFsPFQ+ID0gdGhpcy5fc3RhdGljUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVVcmwodGhpcy5wYXRoLCBwYXJhbU1hcCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVVybChwYXRoOiBzdHJpbmcsIHBhcmFtTWFwOiBQYXJ0aWFsPFQ+KSB7XHJcbiAgICBjb25zdCBwYXJhbU5hbWVzID0gT2JqZWN0LmtleXModGhpcy5fcGFyYW1NYXApO1xyXG4gICAgcGFyYW1OYW1lcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKTtcclxuICAgIGNvbnN0IGV4dGVuZGVkUGFyYW1NYXA6IGFueSA9IHsgLi4ucGFyYW1NYXAgfTtcclxuXHJcbiAgICB0aGlzLnBhcmFtTWFwcGluZ3MuZm9yRWFjaCgobWFwcGluZykgPT4ge1xyXG4gICAgICBpZiAobWFwcGluZy50YWJsZU5hbWUgaW4gcGFyYW1NYXApIHtcclxuICAgICAgICBleHRlbmRlZFBhcmFtTWFwW21hcHBpbmcudXJsTmFtZV0gPSAocGFyYW1NYXAgYXMgYW55KVtcclxuICAgICAgICAgIG1hcHBpbmcudGFibGVOYW1lXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcGFyYW1OYW1lcy5mb3JFYWNoKChwYXJhbSkgPT4ge1xyXG4gICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKGA6JHtwYXJhbX1gLCBgJHtleHRlbmRlZFBhcmFtTWFwW3BhcmFtIGFzIGtleW9mIFRdfWApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHBhdGg7XHJcbiAgfVxyXG5cclxuICB0b0FuZ3VsYXJSb3V0ZSgpIHtcclxuICAgIGlmICghdGhpcy5fcmVnZXgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBmaXJzdCBjYWxsIC5idWlsZCgpIG9uIHJvdXRlIScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBSZHRBbmd1bGFyUm91dGU8VD4odGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLyBQcm92aWRlcyBzdGF0aWMgbWFwcGluZyBmb3IgcGFyYW1ldGVyIG5hbWVzIHRhYmxlTmFtZSAtPiB1cmxOYW1lLlxyXG4gIC8vIFJldHVybnMgbmV3IGluc3RhbmNlIG9mIERwM1JvdXRlPFQ+IHRoYXQgaXMgY2xvbmUgb2ZcclxuICAvLyB0aGlzIHJvdXRlIGFuZCBpdHMgcGFyZW50cyAoTk9UIGNoaWxkcmVuKS5cclxuICB3aXRoUGFyYW1NYXBwaW5ncyhtYXBwaW5nczogUGFyYW1NYXBwaW5nW10pIHtcclxuICAgIGNvbnN0IGNsb25lID0gdGhpcy5jbG9uZSgpO1xyXG4gICAgY2xvbmUucGFyYW1NYXBwaW5ncyA9IG1hcHBpbmdzO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxuXHJcbiAgd2l0aFN0YXRpY1BhcmFtcyhwYXJhbXM6IFQpOiBSZHRSb3V0ZTxUPjtcclxuICB3aXRoU3RhdGljUGFyYW1zPFQyIGV4dGVuZHMgb2JqZWN0PihcclxuICAgIHJvdXRlOiBSZHRSb3V0ZTxUPixcclxuICAgIHBhcmFtczogVDJcclxuICApOiBSZHRSb3V0ZTxUPjtcclxuXHJcbiAgLy8gU2V0cyBzZWxlY3RlZCBwYXJhbWV0ZXJzIGZvciBpdHNlbGYgYW5kIHBhcmVudHMuXHJcbiAgLy8gUmV0dXJucyBuZXcgaW5zdGFuY2Ugb2YgRHAzUm91dGU8VD4gdGhhdCBpcyBjbG9uZSBvZlxyXG4gIC8vIHRoaXMgcm91dGUgYW5kIGl0cyBwYXJlbnRzIChOT1QgY2hpbGRyZW4pLlxyXG4gIHdpdGhTdGF0aWNQYXJhbXM8VDIgZXh0ZW5kcyBvYmplY3Q+KHBhcmFtMTogUmR0Um91dGU8VDI+IHwgVCwgcGFyYW0yPzogVDIpIHtcclxuICAgIGNvbnN0IGNsb25lID0gdGhpcy5jbG9uZSgpO1xyXG5cclxuICAgIGlmIChwYXJhbTIpIHtcclxuICAgICAgY29uc3Qgcm91dGVBYnNQYXRoID0gKHBhcmFtMSBhcyBSZHRSb3V0ZTxUMj4pLmFic29sdXRlUGF0aDtcclxuICAgICAgbGV0IGN1cnJlbnQ6IFJkdFJvdXRlIHwgbnVsbCA9IGNsb25lO1xyXG5cclxuICAgICAgd2hpbGUgKGN1cnJlbnQpIHtcclxuICAgICAgICBpZiAoY3VycmVudC5hYnNvbHV0ZVBhdGggPT09IHJvdXRlQWJzUGF0aCkge1xyXG4gICAgICAgICAgY3VycmVudC5fc3RhdGljUGFyYW1zID0gcGFyYW0yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5fcGFyZW50O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjbG9uZS5fc3RhdGljUGFyYW1zID0gcGFyYW0xIGFzIFQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFBhcmFtcykge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5fcXVlcnlQYXJhbXMgPSB7IC4uLnF1ZXJ5UGFyYW1zIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICB3aXRoU3RhdGVQYXJhbXMoc3RhdGVQYXJhbXM6IFBhcmFtcykge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5fc3RhdGVQYXJhbXMgPSB7IC4uLnN0YXRlUGFyYW1zIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICAvLyBSZXR1cm5zIFBhcnRpYWwgb2Ygb2JqZWN0IHRoYXQgb25seSBjb250YWlucyBwcm9wZXJ0aWVzXHJcbiAgLy8gbmVjZXNzYXJ5IHRvIGNyZWF0ZSB0aGlzIHJvdXRlLlxyXG4gIGV4dHJhY3RSb3V0ZVBhcmFtcyhyb3c6IFQpOiBQYXJ0aWFsPFQ+IHtcclxuICAgIGNvbnN0IHJlczogUGFydGlhbDxUPiA9IHt9O1xyXG5cclxuICAgIHRoaXMub3JkZXJlZFBhcmFtcy5mb3JFYWNoKChwYXJhbSkgPT4ge1xyXG4gICAgICBjb25zdCBtYXBwaW5nID0gdGhpcy5wYXJhbU1hcHBpbmdzLmZpbmQoKG0pID0+IG0udXJsTmFtZSA9PT0gcGFyYW0pO1xyXG4gICAgICBjb25zdCBtYXBwZWRQYXJhbSA9IChtYXBwaW5nPy50YWJsZU5hbWUgPz8gcGFyYW0pIGFzIGtleW9mIFQ7XHJcbiAgICAgIGlmIChtYXBwZWRQYXJhbSBpbiByb3cpIHtcclxuICAgICAgICByZXNbbWFwcGVkUGFyYW1dID0gcm93W21hcHBlZFBhcmFtXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIC8vIFJldHVybnMgbmV3IGluc3RhbmNlIG9mIERwM1JvdXRlPFQ+IHRoYXQgaXMgY2xvbmUgb2ZcclxuICAvLyB0aGlzIHJvdXRlIGFuZCBpdHMgcGFyZW50cyAoTk9UIGNoaWxkcmVuKS5cclxuICBjbG9uZSgpIHtcclxuICAgIGNvbnN0IGNsb25lID0gbmV3IFJkdFJvdXRlPFQ+KCk7XHJcbiAgICBjbG9uZS5fbmFtZSA9IHRoaXMuX25hbWU7XHJcbiAgICBjbG9uZS5fcGFyZW50ID0gdGhpcy5fcGFyZW50Py5jbG9uZSgpID8/IG51bGw7XHJcbiAgICBjbG9uZS5fcGF0aCA9IHRoaXMucGF0aDtcclxuICAgIGNsb25lLl9lbnRyeURpc2FibGVkID0gdGhpcy5fZW50cnlEaXNhYmxlZDtcclxuICAgIGNsb25lLm9yZGVyZWRQYXJhbXMgPSBbLi4udGhpcy5vcmRlcmVkUGFyYW1zXTtcclxuICAgIGNsb25lLl9wYXJhbU1hcCA9IHsgLi4udGhpcy5fcGFyYW1NYXAgfTtcclxuICAgIGNsb25lLl9yZWdleCA9IG5ldyBSZWdFeHAodGhpcy5fcmVnZXgpO1xyXG4gICAgY2xvbmUucGFyYW1NYXBwaW5ncyA9IHRoaXMucGFyYW1NYXBwaW5ncztcclxuICAgIGNsb25lLl9zdGF0aWNQYXJhbXMgPSB0aGlzLl9zdGF0aWNQYXJhbXM7XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3JkdC1yb3V0ZS9yZHQtcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUc5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFZLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhFLE1BQU0sVUFBVSxXQUFXO0lBQ3pCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sT0FBTyxRQUFRO0lBQ1QsYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUM3QixTQUFTLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxNQUFNLENBQVU7SUFDaEIsYUFBYSxHQUFtQixFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFlLEVBQUUsQ0FBQztJQUMvQixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLFlBQVksR0FBVyxFQUFFLENBQUM7SUFFMUIsS0FBSyxDQUFVO0lBQ2YsS0FBSyxDQUFVO0lBQ2YsT0FBTyxHQUFvQixJQUFJLENBQUM7SUFDaEMsU0FBUyxHQUFlLEVBQUUsQ0FBQztJQUMzQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLGFBQWEsR0FBa0IsV0FBVyxDQUFDO0lBRTdDLGNBQWMsQ0FBVTtJQUVoQyxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJ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R0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCw2Q0FBNkM7SUFDN0MsS0FBSztRQUNILE1BQU0sS0FBSyxHQUFHLElBQUksUUFBUSxFQUFLLENBQUM7UUFDaEMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDOUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZHRTdHJpbmdVdGlscyB9IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IFN0YXRpY1JvdXRlUGFyYW1zLCBQYXJhbU1hcHBpbmcsIFBhcmFtVHlwZU1hcCB9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgeyBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRBbmd1bGFyUm91dGUgfSBmcm9tICcuL3JkdC1hbmd1bGFyLXJvdXRlJztcclxuaW1wb3J0IHsgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFMV0FZU19UUlVFKCkge1xyXG4gIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmR0Um91dGU8VCBleHRlbmRzIG9iamVjdCA9IGFueT4ge1xyXG4gIHByb3RlY3RlZCBvcmRlcmVkUGFyYW1zOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHByb3RlY3RlZCBfcGFyYW1NYXA6IFBhcmFtVHlwZU1hcDxUPiA9IHt9O1xyXG4gIHByb3RlY3RlZCBfcmVnZXghOiBSZWdFeHA7XHJcbiAgcHJvdGVjdGVkIHBhcmFtTWFwcGluZ3M6IFBhcmFtTWFwcGluZ1tdID0gW107XHJcbiAgcHJvdGVjdGVkIF9zdGF0aWNQYXJhbXM6IFBhcnRpYWw8VD4gPSB7fTtcclxuICBwcm90ZWN0ZWQgX3F1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7fTtcclxuICBwcm90ZWN0ZWQgX3N0YXRlUGFyYW1zOiBQYXJhbXMgPSB7fTtcclxuXHJcbiAgcHJvdGVjdGVkIF9uYW1lITogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfcGF0aCE6IHN0cmluZztcclxuICBwcm90ZWN0ZWQgX3BhcmVudDogUmR0Um91dGUgfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgX2NoaWxkcmVuOiBSZHRSb3V0ZVtdID0gW107XHJcbiAgcHJvdGVjdGVkIF9lbnRyeURpc2FibGVkID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIF9jYW5CZUVudGVyZWQ6ICgpID0+IGJvb2xlYW4gPSBBTFdBWVNfVFJVRTtcclxuXHJcbiAgcHJpdmF0ZSBfYWJzb2x1dGVSZWdleD86IFJlZ0V4cDtcclxuXHJcbiAgZ2V0IHBhcmFtTWFwKCk6IFJlYWRvbmx5PFBhcmFtVHlwZU1hcDxUPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtTWFwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcclxuICB9XHJcblxyXG4gIGdldCBwYXRoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhdGg7XHJcbiAgfVxyXG5cclxuICBnZXQgcGFyZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICB9XHJcblxyXG4gIGdldCBjaGlsZHJlbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIGdldCBiYXNlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudC5hYnNvbHV0ZVBhdGggOiAnLyc7XHJcbiAgfVxyXG5cclxuICBnZXQgYWJzb2x1dGVQYXRoKCkge1xyXG4gICAgcmV0dXJuIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocyh0aGlzLmJhc2VQYXRoLCB0aGlzLl9wYXRoKTtcclxuICB9XHJcblxyXG4gIGdldCByZWdleCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWdleDtcclxuICB9XHJcblxyXG4gIGdldCBhYnNvbHV0ZVJlZ2V4KCk6IFJlZ0V4cCB7XHJcbiAgICBpZiAodGhpcy5fYWJzb2x1dGVSZWdleCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYWJzb2x1dGVSZWdleDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcGFyZW50KSB7XHJcbiAgICAgIC8vIFJlbW92ZSBpbml0aWFsIF4gYW5kIGVuZGluZyAkXHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX3BhcmVudC5hYnNvbHV0ZVJlZ2V4LnNvdXJjZS5zbGljZSgxLCAtMSk7XHJcbiAgICAgIHRoaXMuX2Fic29sdXRlUmVnZXggPSBuZXcgUmVnRXhwKFxyXG4gICAgICAgICdeJyArIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocyhwYXJlbnQsIHRoaXMuX3JlZ2V4LnNvdXJjZSkgKyAnJCdcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2Fic29sdXRlUmVnZXggPSBuZXcgUmVnRXhwKFxyXG4gICAgICAgICdeJyArIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocygnLycsIHRoaXMuX3JlZ2V4LnNvdXJjZSkgKyAnJCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9hYnNvbHV0ZVJlZ2V4O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVudHJ5RGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW50cnlEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGdldCBzdGF0ZVBhcmFtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zdGF0ZVBhcmFtcztcclxuICB9XHJcblxyXG4gIGdldCBxdWVyeVBhcmFtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9xdWVyeVBhcmFtcztcclxuICB9XHJcblxyXG4gIHRlc3RVcmwodXJsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFic29sdXRlUmVnZXgudGVzdCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN0YXRpY1BhcmFtcygpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuX3N0YXRpY1BhcmFtcyB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0NhbkJlRW50ZXJlZEd1YXJkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbkJlRW50ZXJlZCAhPT0gQUxXQVlTX1RSVUU7XHJcbiAgfVxyXG5cclxuICBjYW5CZUVudGVyZWQoaW5qZWN0b3I/OiBJbmplY3Rvcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGluamVjdG9yXHJcbiAgICAgID8gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCB0aGlzLl9jYW5CZUVudGVyZWQpXHJcbiAgICAgIDogdGhpcy5fY2FuQmVFbnRlcmVkKCk7XHJcbiAgfVxyXG5cclxuICAvLyBFeHRyYWN0cyB1cmwgcGFyYW1ldGVycyBmcm9tIGFic29sdXRlIHVybC5cclxuICBwYXJzZUFic29sdXRlVXJsKHVybDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwge1xyXG4gICAgY29uc3QgcmVnID0gdGhpcy5hYnNvbHV0ZVJlZ2V4O1xyXG4gICAgaWYgKCFyZWcudGVzdCh1cmwpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlZy5leGVjKHVybCk7XHJcbiAgICBpZiAobWF0Y2hlcykge1xyXG4gICAgICBjb25zdCB2YWx1ZXMgPSBtYXRjaGVzLnNsaWNlKDEpLnJldmVyc2UoKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZmlsbCh2YWx1ZXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbGwodmFsdWVzOiBzdHJpbmdbXSwgcmVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcclxuICAgIGNvbnN0IHBhcmFtczogeyBba2V5IGluIGtleW9mIFRdPzogc3RyaW5nIHwgbnVtYmVyIH0gPSB7fTtcclxuICAgIGNvbnN0IHJldmVyc2VkUGFyYW1zID0gdGhpcy5vcmRlcmVkUGFyYW1zLnNsaWNlKCkucmV2ZXJzZSgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXZlcnNlZFBhcmFtcy5sZW5ndGggJiYgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBrZXkgPSByZXZlcnNlZFBhcmFtc1tpXSBhcyBrZXlvZiBUO1xyXG4gICAgICBjb25zdCBtYXBwZWRLZXkgPVxyXG4gICAgICAgIHRoaXMucGFyYW1NYXBwaW5ncy5maW5kKChtKSA9PiBtLnVybE5hbWUgPT09IGtleSk/LnRhYmxlTmFtZSA/PyBrZXk7XHJcbiAgICAgIGxldCB2YWw6IHN0cmluZyB8IG51bWJlciA9IHZhbHVlc1tpXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9wYXJhbU1hcFtrZXldID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHZhbCA9IHBhcnNlSW50KHZhbCk7XHJcbiAgICAgIH1cclxuICAgICAgcGFyYW1zW21hcHBlZEtleSBhcyBrZXlvZiBUXSA9IHZhbDtcclxuICAgIH1cclxuICAgIHJlc1t0aGlzLmFic29sdXRlUGF0aF0gPSBwYXJhbXM7XHJcblxyXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPiByZXZlcnNlZFBhcmFtcy5sZW5ndGggJiYgdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgIHRoaXMuX3BhcmVudC5maWxsKHZhbHVlcy5zbGljZShyZXZlcnNlZFBhcmFtcy5sZW5ndGgpLCByZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGNyZWF0ZUFic29sdXRlVXJsKHBhcmFtTWFwOiBQYXJ0aWFsPFQ+ID0gdGhpcy5fc3RhdGljUGFyYW1zKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5fcGFyZW50KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVVybCh0aGlzLmFic29sdXRlUGF0aCwgcGFyYW1NYXApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocyhcclxuICAgICAgICB0aGlzLl9wYXJlbnQuY3JlYXRlQWJzb2x1dGVVcmwoKSxcclxuICAgICAgICB0aGlzLmNyZWF0ZVJlbGF0aXZlVXJsKHBhcmFtTWFwKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlUmVsYXRpdmVVcmwocGFyYW1NYXA6IFBhcnRpYWw8VD4gPSB0aGlzLl9zdGF0aWNQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVVybCh0aGlzLnBhdGgsIHBhcmFtTWFwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVXJsKHBhdGg6IHN0cmluZywgcGFyYW1NYXA6IFBhcnRpYWw8VD4pIHtcclxuICAgIGNvbnN0IHBhcmFtTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9wYXJhbU1hcCk7XHJcbiAgICBwYXJhbU5hbWVzLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpO1xyXG4gICAgY29uc3QgZXh0ZW5kZWRQYXJhbU1hcDogYW55ID0geyAuLi5wYXJhbU1hcCB9O1xyXG5cclxuICAgIHRoaXMucGFyYW1NYXBwaW5ncy5mb3JFYWNoKChtYXBwaW5nKSA9PiB7XHJcbiAgICAgIGlmIChtYXBwaW5nLnRhYmxlTmFtZSBpbiBwYXJhbU1hcCkge1xyXG4gICAgICAgIGV4dGVuZGVkUGFyYW1NYXBbbWFwcGluZy51cmxOYW1lXSA9IChwYXJhbU1hcCBhcyBhbnkpW1xyXG4gICAgICAgICAgbWFwcGluZy50YWJsZU5hbWVcclxuICAgICAgICBdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBwYXJhbU5hbWVzLmZvckVhY2goKHBhcmFtKSA9PiB7XHJcbiAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoYDoke3BhcmFtfWAsIGAke2V4dGVuZGVkUGFyYW1NYXBbcGFyYW0gYXMga2V5b2YgVF19YCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGF0aDtcclxuICB9XHJcblxyXG4gIHRvQW5ndWxhclJvdXRlKCkge1xyXG4gICAgaWYgKCF0aGlzLl9yZWdleCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIGZpcnN0IGNhbGwgLmJ1aWxkKCkgb24gcm91dGUhJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IFJkdEFuZ3VsYXJSb3V0ZTxUPih0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vIFByb3ZpZGVzIHN0YXRpYyBtYXBwaW5nIGZvciBwYXJhbWV0ZXIgbmFtZXMgdGFibGVOYW1lIC0+IHVybE5hbWUuXHJcbiAgLy8gUmV0dXJucyBuZXcgaW5zdGFuY2Ugb2YgUmR0Um91dGU8VD4gdGhhdCBpcyBjbG9uZSBvZlxyXG4gIC8vIHRoaXMgcm91dGUgYW5kIGl0cyBwYXJlbnRzIChOT1QgY2hpbGRyZW4pLlxyXG4gIHdpdGhQYXJhbU1hcHBpbmdzKG1hcHBpbmdzOiBQYXJhbU1hcHBpbmdbXSkge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5wYXJhbU1hcHBpbmdzID0gbWFwcGluZ3M7XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICB3aXRoU3RhdGljUGFyYW1zKHBhcmFtczogVCk6IFJkdFJvdXRlPFQ+O1xyXG4gIHdpdGhTdGF0aWNQYXJhbXM8VDIgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAgcm91dGU6IFJkdFJvdXRlPFQ+LFxyXG4gICAgcGFyYW1zOiBUMlxyXG4gICk6IFJkdFJvdXRlPFQ+O1xyXG5cclxuICAvLyBTZXRzIHNlbGVjdGVkIHBhcmFtZXRlcnMgZm9yIGl0c2VsZiBhbmQgcGFyZW50cy5cclxuICAvLyBSZXR1cm5zIG5ldyBpbnN0YW5jZSBvZiBSZHRSb3V0ZTxUPiB0aGF0IGlzIGNsb25lIG9mXHJcbiAgLy8gdGhpcyByb3V0ZSBhbmQgaXRzIHBhcmVudHMgKE5PVCBjaGlsZHJlbikuXHJcbiAgd2l0aFN0YXRpY1BhcmFtczxUMiBleHRlbmRzIG9iamVjdD4ocGFyYW0xOiBSZHRSb3V0ZTxUMj4gfCBULCBwYXJhbTI/OiBUMikge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcblxyXG4gICAgaWYgKHBhcmFtMikge1xyXG4gICAgICBjb25zdCByb3V0ZUFic1BhdGggPSAocGFyYW0xIGFzIFJkdFJvdXRlPFQyPikuYWJzb2x1dGVQYXRoO1xyXG4gICAgICBsZXQgY3VycmVudDogUmR0Um91dGUgfCBudWxsID0gY2xvbmU7XHJcblxyXG4gICAgICB3aGlsZSAoY3VycmVudCkge1xyXG4gICAgICAgIGlmIChjdXJyZW50LmFic29sdXRlUGF0aCA9PT0gcm91dGVBYnNQYXRoKSB7XHJcbiAgICAgICAgICBjdXJyZW50Ll9zdGF0aWNQYXJhbXMgPSBwYXJhbTI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Ll9wYXJlbnQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsb25lLl9zdGF0aWNQYXJhbXMgPSBwYXJhbTEgYXMgVDtcclxuICAgIH1cclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIHdpdGhRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogUGFyYW1zKSB7XHJcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcclxuICAgIGNsb25lLl9xdWVyeVBhcmFtcyA9IHsgLi4ucXVlcnlQYXJhbXMgfTtcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIHdpdGhTdGF0ZVBhcmFtcyhzdGF0ZVBhcmFtczogUGFyYW1zKSB7XHJcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcclxuICAgIGNsb25lLl9zdGF0ZVBhcmFtcyA9IHsgLi4uc3RhdGVQYXJhbXMgfTtcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIC8vIFJldHVybnMgUGFydGlhbCBvZiBvYmplY3QgdGhhdCBvbmx5IGNvbnRhaW5zIHByb3BlcnRpZXNcclxuICAvLyBuZWNlc3NhcnkgdG8gY3JlYXRlIHRoaXMgcm91dGUuXHJcbiAgZXh0cmFjdFJvdXRlUGFyYW1zKHJvdzogVCk6IFBhcnRpYWw8VD4ge1xyXG4gICAgY29uc3QgcmVzOiBQYXJ0aWFsPFQ+ID0ge307XHJcblxyXG4gICAgdGhpcy5vcmRlcmVkUGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1hcHBpbmcgPSB0aGlzLnBhcmFtTWFwcGluZ3MuZmluZCgobSkgPT4gbS51cmxOYW1lID09PSBwYXJhbSk7XHJcbiAgICAgIGNvbnN0IG1hcHBlZFBhcmFtID0gKG1hcHBpbmc/LnRhYmxlTmFtZSA/PyBwYXJhbSkgYXMga2V5b2YgVDtcclxuICAgICAgaWYgKG1hcHBlZFBhcmFtIGluIHJvdykge1xyXG4gICAgICAgIHJlc1ttYXBwZWRQYXJhbV0gPSByb3dbbWFwcGVkUGFyYW1dO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8gUmV0dXJucyBuZXcgaW5zdGFuY2Ugb2YgUmR0Um91dGU8VD4gdGhhdCBpcyBjbG9uZSBvZlxyXG4gIC8vIHRoaXMgcm91dGUgYW5kIGl0cyBwYXJlbnRzIChOT1QgY2hpbGRyZW4pLlxyXG4gIGNsb25lKCkge1xyXG4gICAgY29uc3QgY2xvbmUgPSBuZXcgUmR0Um91dGU8VD4oKTtcclxuICAgIGNsb25lLl9uYW1lID0gdGhpcy5fbmFtZTtcclxuICAgIGNsb25lLl9wYXJlbnQgPSB0aGlzLl9wYXJlbnQ/LmNsb25lKCkgPz8gbnVsbDtcclxuICAgIGNsb25lLl9wYXRoID0gdGhpcy5wYXRoO1xyXG4gICAgY2xvbmUuX2VudHJ5RGlzYWJsZWQgPSB0aGlzLl9lbnRyeURpc2FibGVkO1xyXG4gICAgY2xvbmUub3JkZXJlZFBhcmFtcyA9IFsuLi50aGlzLm9yZGVyZWRQYXJhbXNdO1xyXG4gICAgY2xvbmUuX3BhcmFtTWFwID0geyAuLi50aGlzLl9wYXJhbU1hcCB9O1xyXG4gICAgY2xvbmUuX3JlZ2V4ID0gbmV3IFJlZ0V4cCh0aGlzLl9yZWdleCk7XHJcbiAgICBjbG9uZS5wYXJhbU1hcHBpbmdzID0gdGhpcy5wYXJhbU1hcHBpbmdzO1xyXG4gICAgY2xvbmUuX3N0YXRpY1BhcmFtcyA9IHRoaXMuX3N0YXRpY1BhcmFtcztcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -3,10 +3,10 @@ import { inject, Injectable } from '@angular/core';
|
|
|
3
3
|
import { NavigationEnd, Router } from '@angular/router';
|
|
4
4
|
import { RdtStringUtils } from '@ngrdt/utils';
|
|
5
5
|
import { filter, take } from 'rxjs';
|
|
6
|
-
import {
|
|
6
|
+
import { RDT_ROUTES_PROVIDER } from './rdt-routes.token';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export class RdtRouterService {
|
|
9
|
-
allRoutes = inject(
|
|
9
|
+
allRoutes = inject(RDT_ROUTES_PROVIDER, { optional: true });
|
|
10
10
|
location = inject(Location);
|
|
11
11
|
router = inject(Router);
|
|
12
12
|
baseHref = inject(PlatformLocation).getBaseHrefFromDOM();
|
|
@@ -28,7 +28,7 @@ export class RdtRouterService {
|
|
|
28
28
|
nextNavigationEnd$ = this.navigationEnd$.pipe(take(1));
|
|
29
29
|
constructor() {
|
|
30
30
|
if (this.allRoutes === null) {
|
|
31
|
-
console.warn('All routes not provided. Make sure to provide
|
|
31
|
+
console.warn('All routes not provided. Make sure to provide RDT_ROUTES_PROVIDER with RdtRoute[].');
|
|
32
32
|
this.allRoutes = [];
|
|
33
33
|
}
|
|
34
34
|
this.navigationEnd$.subscribe((e) => {
|
|
@@ -125,4 +125,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
125
125
|
providedIn: 'root',
|
|
126
126
|
}]
|
|
127
127
|
}], ctorParameters: () => [] });
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3NlcnZpY2VzL3JkdC1yb3V0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQVV0RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVqRCxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFFbEUsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFFMUMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFD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LGNBRmYsTUFBTTs7MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uLCBQbGF0Zm9ybUxvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFBhcmFtcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0U3RyaW5nVXRpbHMgfSBmcm9tICdAbmdyZHQvdXRpbHMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuLi9yZHQtcm91dGUvcmR0LXJvdXRlJztcclxuaW1wb3J0IHsgUkRUX1JPVVRFU19UT0tFTiB9IGZyb20gJy4vcmR0LXJvdXRlcy50b2tlbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE5hdmlnYXRlUGFyYW1zIHtcclxuICBzdGF0ZT86IFBhcmFtcztcclxuICBxdWVyeT86IFBhcmFtcztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdFJvdXRlclNlcnZpY2Uge1xyXG4gIHJlYWRvbmx5IGFsbFJvdXRlcyA9IGluamVjdChSRFRfUk9VVEVTX1RPS0VOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGxvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZUhyZWYgPSBpbmplY3QoUGxhdGZvcm1Mb2NhdGlvbikuZ2V0QmFzZUhyZWZGcm9tRE9NKCk7XHJcblxyXG4gIHByaXZhdGUgX3ByZXZpb3VzVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9jdXJyZW50VXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgZ2V0IHByZXZpb3VzVXJsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByZXZpb3VzVXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRVcmwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFVybDtcclxuICB9XHJcblxyXG4gIHBhcnNlUHJldmlvdXNVcmwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJldmlvdXNVcmwgPyB0aGlzLnBhcnNlQWJzb2x1dGVVcmwodGhpcy5fcHJldmlvdXNVcmwpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHBhcnNlQ3VycmVudFVybCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VXJsID8gdGhpcy5wYXJzZUFic29sdXRlVXJsKHRoaXMuX2N1cnJlbnRVcmwpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IG5hdmlnYXRpb25FbmQkID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXHJcbiAgICBmaWx0ZXIoKGUpID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKVxyXG4gICkgYXMgT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uRW5kPjtcclxuXHJcbiAgcmVhZG9ubHkgbmV4dE5hdmlnYXRpb25FbmQkID0gdGhpcy5uYXZpZ2F0aW9uRW5kJC5waXBlKHRha2UoMSkpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGlmICh0aGlzLmFsbFJvdXRlcyA9PT0gbnVsbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgJ0FsbCByb3V0ZXMgbm90IHByb3ZpZGVkLiBNYWtlIHN1cmUgdG8gcHJvdmlkZSBSRFRfUk9VVEVTX1RPS0VOIHdpdGggUmR0Um91dGVbXS4nXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuYWxsUm91dGVzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRW5kJC5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5fcHJldmlvdXNVcmwgPSB0aGlzLl9jdXJyZW50VXJsO1xyXG4gICAgICB0aGlzLl9jdXJyZW50VXJsID0gZS51cmw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlPFQgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAgbGluazogUmR0Um91dGU8VD4sXHJcbiAgICBwYXJhbXM/OiBQYXJ0aWFsPFQ+LFxyXG4gICAgdGFyZ2V0OiAnX2JsYW5rJyB8ICdfc2VsZicgfCAnX3BhcmVudCcgfCAnX3RvcCcgPSAnX3NlbGYnXHJcbiAgKSB7XHJcbiAgICBjb25zdCB1cmwgPSBwYXJhbXNcclxuICAgICAgPyBsaW5rLmNyZWF0ZUFic29sdXRlVXJsKHBhcmFtcylcclxuICAgICAgOiBsaW5rLmNyZWF0ZUFic29sdXRlVXJsKCk7XHJcblxyXG4gICAgaWYgKHRhcmdldCA9PT0gJ19zZWxmJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0sIHtcclxuICAgICAgICBxdWVyeVBhcmFtczogbGluay5xdWVyeVBhcmFtcyxcclxuICAgICAgICBzdGF0ZTogbGluay5zdGF0ZVBhcmFtcyxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWJzb2x1dGVQYXRoID0gUmR0U3RyaW5nVXRpbHMuY3JlYXRlQWJzb2x1dGVVcmwodXJsLCB0aGlzLmJhc2VIcmVmKTtcclxuICAgIGNvbnN0IHBhdGhXaXRoUGFyYW1zID0gUmR0U3RyaW5nVXRpbHMuYXBwZW5kUXVlcnlQYXJhbXMoXHJcbiAgICAgIGFic29sdXRlUGF0aCxcclxuICAgICAgbGluay5xdWVyeVBhcmFtc1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHdpbiA9IHdpbmRvdy5vcGVuKHBhdGhXaXRoUGFyYW1zLCB0YXJnZXQpO1xyXG4gICAgaWYgKHdpbikge1xyXG4gICAgICAod2luIGFzIGFueSkuUmR0U3RhdGVQYXJhbXMgPSBsaW5rLnN0YXRlUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlSG9tZShwYXJhbXM/OiBSZHROYXZpZ2F0ZVBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmFwcGVuZFF1ZXJ5UGFyYW1zKCcvJywgcGFyYW1zPy5xdWVyeSA/PyB7fSksXHJcbiAgICAgIHtcclxuICAgICAgICBzdGF0ZTogcGFyYW1zPy5zdGF0ZSxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHBhcnNlQWJzb2x1dGVVcmwodXJsID0gdGhpcy5sb2NhdGlvbi5wYXRoKCkpIHtcclxuICAgIGlmICh0aGlzLmFsbFJvdXRlcykge1xyXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMuYWxsUm91dGVzKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gcm91dGUucGFyc2VBYnNvbHV0ZVVybCh1cmwpO1xyXG4gICAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICAgIHJldHVybiB7IHJvdXRlLCBwYXJhbXMgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVCYWNrKHBhcmFtcz86IFJkdE5hdmlnYXRlUGFyYW1zKSB7XHJcbiAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlQWJzb2x1dGVVcmwoKTtcclxuICAgIGlmIChwYXJzZWQpIHtcclxuICAgICAgbGV0IHJvdXRlOiBSZHRSb3V0ZSB8IG51bGwgPSBwYXJzZWQucm91dGUud2l0aFN0YXRpY1BhcmFtcyhwYXJzZWQucGFyYW1zKTtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIHJvdXRlID0gcm91dGUucGFyZW50O1xyXG4gICAgICB9IHdoaWxlIChyb3V0ZSAmJiByb3V0ZS5lbnRyeURpc2FibGVkKTtcclxuXHJcbiAgICAgIC8vIEluIGNhc2Ugcm91dGUgaGFzIG5vIGFuY2VzdG9yIHdpdGggYWxsb3dlZCBlbnRyeSxcclxuICAgICAgaWYgKCFyb3V0ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlSG9tZShwYXJhbXMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICBpZiAocGFyYW1zLnF1ZXJ5KSB7XHJcbiAgICAgICAgICByb3V0ZSA9IHJvdXRlLndpdGhRdWVyeVBhcmFtcyhwYXJhbXMucXVlcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1zLnN0YXRlKSB7XHJcbiAgICAgICAgICByb3V0ZSA9IHJvdXRlLndpdGhTdGF0ZVBhcmFtcyhwYXJhbXMuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZShyb3V0ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYENhbm5vdCBnbyBiYWNrIGZyb20gJHt0aGlzLmxvY2F0aW9uLnBhdGgoKX0gYmVjYXVzZSBubyByb3V0ZSBtYXRjaGVzIGN1cnJlbnQgdXJsYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4dHJhY3RBbGxQYXJhbXMoY3VycmVudFJvdXRlPzogUmR0Um91dGUpIHtcclxuICAgIGlmICghY3VycmVudFJvdXRlKSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VBYnNvbHV0ZVVybCgpO1xyXG4gICAgICBpZiAoIXBhcnNlZCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignTm8gcm91dGUgbWF0Y2hlcyBjdXJyZW50IHVybC4nKTtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudFJvdXRlID0gcGFyc2VkLnJvdXRlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdXJsID0gdGhpcy5sb2NhdGlvbi5wYXRoKCk7XHJcbiAgICByZXR1cm4gY3VycmVudFJvdXRlLnBhcnNlQWJzb2x1dGVVcmwodXJsKTtcclxuICB9XHJcblxyXG4gIGlzUGFyZW50T2ZDdXJyZW50TG9jYXRpb24ocm91dGU6IFJkdFJvdXRlKSB7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnBhcnNlQWJzb2x1dGVVcmwoKSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVF1ZXJ5UGFyYW1zKC4uLnBhcmFtTmFtZXM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFs/Jl0oJHtwYXJhbU5hbWVzLmpvaW4oJ3wnKX0pPVteJl0qYCwgJ2cnKTtcclxuXHJcbiAgICByZXR1cm4gaGlzdG9yeS5yZXBsYWNlU3RhdGUoXHJcbiAgICAgIG51bGwsXHJcbiAgICAgICcnLFxyXG4gICAgICBsb2NhdGlvbi5wYXRobmFtZSArIGxvY2F0aW9uLnNlYXJjaC5yZXBsYWNlKHJlZ2V4LCAnJykucmVwbGFjZSgvXiYvLCAnPycpXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3NlcnZpY2VzL3JkdC1yb3V0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQVV6RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLFNBQVMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVwRCxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFFbEUsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFFMUMsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFD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LGNBRmYsTUFBTTs7MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uLCBQbGF0Zm9ybUxvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFBhcmFtcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0U3RyaW5nVXRpbHMgfSBmcm9tICdAbmdyZHQvdXRpbHMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuLi9yZHQtcm91dGUvcmR0LXJvdXRlJztcclxuaW1wb3J0IHsgUkRUX1JPVVRFU19QUk9WSURFUiB9IGZyb20gJy4vcmR0LXJvdXRlcy50b2tlbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE5hdmlnYXRlUGFyYW1zIHtcclxuICBzdGF0ZT86IFBhcmFtcztcclxuICBxdWVyeT86IFBhcmFtcztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdFJvdXRlclNlcnZpY2Uge1xyXG4gIHJlYWRvbmx5IGFsbFJvdXRlcyA9IGluamVjdChSRFRfUk9VVEVTX1BST1ZJREVSLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGxvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZUhyZWYgPSBpbmplY3QoUGxhdGZvcm1Mb2NhdGlvbikuZ2V0QmFzZUhyZWZGcm9tRE9NKCk7XHJcblxyXG4gIHByaXZhdGUgX3ByZXZpb3VzVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9jdXJyZW50VXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgZ2V0IHByZXZpb3VzVXJsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ByZXZpb3VzVXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRVcmwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFVybDtcclxuICB9XHJcblxyXG4gIHBhcnNlUHJldmlvdXNVcmwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJldmlvdXNVcmwgPyB0aGlzLnBhcnNlQWJzb2x1dGVVcmwodGhpcy5fcHJldmlvdXNVcmwpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHBhcnNlQ3VycmVudFVybCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VXJsID8gdGhpcy5wYXJzZUFic29sdXRlVXJsKHRoaXMuX2N1cnJlbnRVcmwpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IG5hdmlnYXRpb25FbmQkID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXHJcbiAgICBmaWx0ZXIoKGUpID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKVxyXG4gICkgYXMgT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uRW5kPjtcclxuXHJcbiAgcmVhZG9ubHkgbmV4dE5hdmlnYXRpb25FbmQkID0gdGhpcy5uYXZpZ2F0aW9uRW5kJC5waXBlKHRha2UoMSkpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGlmICh0aGlzLmFsbFJvdXRlcyA9PT0gbnVsbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgJ0FsbCByb3V0ZXMgbm90IHByb3ZpZGVkLiBNYWtlIHN1cmUgdG8gcHJvdmlkZSBSRFRfUk9VVEVTX1BST1ZJREVSIHdpdGggUmR0Um91dGVbXS4nXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuYWxsUm91dGVzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRW5kJC5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgdGhpcy5fcHJldmlvdXNVcmwgPSB0aGlzLl9jdXJyZW50VXJsO1xyXG4gICAgICB0aGlzLl9jdXJyZW50VXJsID0gZS51cmw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlPFQgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAgbGluazogUmR0Um91dGU8VD4sXHJcbiAgICBwYXJhbXM/OiBQYXJ0aWFsPFQ+LFxyXG4gICAgdGFyZ2V0OiAnX2JsYW5rJyB8ICdfc2VsZicgfCAnX3BhcmVudCcgfCAnX3RvcCcgPSAnX3NlbGYnXHJcbiAgKSB7XHJcbiAgICBjb25zdCB1cmwgPSBwYXJhbXNcclxuICAgICAgPyBsaW5rLmNyZWF0ZUFic29sdXRlVXJsKHBhcmFtcylcclxuICAgICAgOiBsaW5rLmNyZWF0ZUFic29sdXRlVXJsKCk7XHJcblxyXG4gICAgaWYgKHRhcmdldCA9PT0gJ19zZWxmJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0sIHtcclxuICAgICAgICBxdWVyeVBhcmFtczogbGluay5xdWVyeVBhcmFtcyxcclxuICAgICAgICBzdGF0ZTogbGluay5zdGF0ZVBhcmFtcyxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWJzb2x1dGVQYXRoID0gUmR0U3RyaW5nVXRpbHMuY3JlYXRlQWJzb2x1dGVVcmwodXJsLCB0aGlzLmJhc2VIcmVmKTtcclxuICAgIGNvbnN0IHBhdGhXaXRoUGFyYW1zID0gUmR0U3RyaW5nVXRpbHMuYXBwZW5kUXVlcnlQYXJhbXMoXHJcbiAgICAgIGFic29sdXRlUGF0aCxcclxuICAgICAgbGluay5xdWVyeVBhcmFtc1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHdpbiA9IHdpbmRvdy5vcGVuKHBhdGhXaXRoUGFyYW1zLCB0YXJnZXQpO1xyXG4gICAgaWYgKHdpbikge1xyXG4gICAgICAod2luIGFzIGFueSkuUmR0U3RhdGVQYXJhbXMgPSBsaW5rLnN0YXRlUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlSG9tZShwYXJhbXM/OiBSZHROYXZpZ2F0ZVBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmFwcGVuZFF1ZXJ5UGFyYW1zKCcvJywgcGFyYW1zPy5xdWVyeSA/PyB7fSksXHJcbiAgICAgIHtcclxuICAgICAgICBzdGF0ZTogcGFyYW1zPy5zdGF0ZSxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHBhcnNlQWJzb2x1dGVVcmwodXJsID0gdGhpcy5sb2NhdGlvbi5wYXRoKCkpIHtcclxuICAgIGlmICh0aGlzLmFsbFJvdXRlcykge1xyXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMuYWxsUm91dGVzKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gcm91dGUucGFyc2VBYnNvbHV0ZVVybCh1cmwpO1xyXG4gICAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICAgIHJldHVybiB7IHJvdXRlLCBwYXJhbXMgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVCYWNrKHBhcmFtcz86IFJkdE5hdmlnYXRlUGFyYW1zKSB7XHJcbiAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlQWJzb2x1dGVVcmwoKTtcclxuICAgIGlmIChwYXJzZWQpIHtcclxuICAgICAgbGV0IHJvdXRlOiBSZHRSb3V0ZSB8IG51bGwgPSBwYXJzZWQucm91dGUud2l0aFN0YXRpY1BhcmFtcyhwYXJzZWQucGFyYW1zKTtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIHJvdXRlID0gcm91dGUucGFyZW50O1xyXG4gICAgICB9IHdoaWxlIChyb3V0ZSAmJiByb3V0ZS5lbnRyeURpc2FibGVkKTtcclxuXHJcbiAgICAgIC8vIEluIGNhc2Ugcm91dGUgaGFzIG5vIGFuY2VzdG9yIHdpdGggYWxsb3dlZCBlbnRyeSxcclxuICAgICAgaWYgKCFyb3V0ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlSG9tZShwYXJhbXMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICBpZiAocGFyYW1zLnF1ZXJ5KSB7XHJcbiAgICAgICAgICByb3V0ZSA9IHJvdXRlLndpdGhRdWVyeVBhcmFtcyhwYXJhbXMucXVlcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyYW1zLnN0YXRlKSB7XHJcbiAgICAgICAgICByb3V0ZSA9IHJvdXRlLndpdGhTdGF0ZVBhcmFtcyhwYXJhbXMuc3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZShyb3V0ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYENhbm5vdCBnbyBiYWNrIGZyb20gJHt0aGlzLmxvY2F0aW9uLnBhdGgoKX0gYmVjYXVzZSBubyByb3V0ZSBtYXRjaGVzIGN1cnJlbnQgdXJsYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4dHJhY3RBbGxQYXJhbXMoY3VycmVudFJvdXRlPzogUmR0Um91dGUpIHtcclxuICAgIGlmICghY3VycmVudFJvdXRlKSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VBYnNvbHV0ZVVybCgpO1xyXG4gICAgICBpZiAoIXBhcnNlZCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignTm8gcm91dGUgbWF0Y2hlcyBjdXJyZW50IHVybC4nKTtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudFJvdXRlID0gcGFyc2VkLnJvdXRlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdXJsID0gdGhpcy5sb2NhdGlvbi5wYXRoKCk7XHJcbiAgICByZXR1cm4gY3VycmVudFJvdXRlLnBhcnNlQWJzb2x1dGVVcmwodXJsKTtcclxuICB9XHJcblxyXG4gIGlzUGFyZW50T2ZDdXJyZW50TG9jYXRpb24ocm91dGU6IFJkdFJvdXRlKSB7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnBhcnNlQWJzb2x1dGVVcmwoKSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVF1ZXJ5UGFyYW1zKC4uLnBhcmFtTmFtZXM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFs/Jl0oJHtwYXJhbU5hbWVzLmpvaW4oJ3wnKX0pPVteJl0qYCwgJ2cnKTtcclxuXHJcbiAgICByZXR1cm4gaGlzdG9yeS5yZXBsYWNlU3RhdGUoXHJcbiAgICAgIG51bGwsXHJcbiAgICAgICcnLFxyXG4gICAgICBsb2NhdGlvbi5wYXRobmFtZSArIGxvY2F0aW9uLnNlYXJjaC5yZXBsYWNlKHJlZ2V4LCAnJykucmVwbGFjZSgvXiYvLCAnPycpXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
|
-
export const
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const RDT_ROUTES_PROVIDER = new InjectionToken('RDT_ROUTES_PROVIDER');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlcy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9yb3V0ZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZHQtcm91dGVzLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQ25ELHFCQUFxQixDQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuLi9yZHQtcm91dGUvcmR0LXJvdXRlJztcclxuXHJcbmV4cG9ydCBjb25zdCBSRFRfUk9VVEVTX1BST1ZJREVSID0gbmV3IEluamVjdGlvblRva2VuPFJkdFJvdXRlW10+KFxyXG4gICdSRFRfUk9VVEVTX1BST1ZJREVSJ1xyXG4pO1xyXG4iXX0=
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, Injectable, EnvironmentInjector, runInInjectionContext,
|
|
2
|
+
import { InjectionToken, inject, Injectable, EnvironmentInjector, runInInjectionContext, DestroyRef, Renderer2, ElementRef, Directive, Input, booleanAttribute } from '@angular/core';
|
|
3
3
|
import { defer, of, filter, take } from 'rxjs';
|
|
4
4
|
import { Location, PlatformLocation } from '@angular/common';
|
|
5
5
|
import * as i1 from '@angular/router';
|
|
6
|
-
import { Router, NavigationEnd, RouterLink } from '@angular/router';
|
|
6
|
+
import { Router, NavigationEnd, RouterModule, RouterLink, GuardsCheckStart } from '@angular/router';
|
|
7
7
|
import { RdtStringUtils } from '@ngrdt/utils';
|
|
8
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
9
|
+
import { RdtComponentGuardStoreService } from '@ngrdt/core';
|
|
8
10
|
|
|
9
11
|
const RDT_CONFIRM_DATA_LOSS_SERVICE = new InjectionToken('RDT_CONFIRM_DATA_LOSS_SERVICE', { factory: () => new RdtConfirmDataLossServiceAlert() });
|
|
10
12
|
class RdtConfirmDataLossService {
|
|
@@ -15,10 +17,10 @@ class RdtConfirmDataLossServiceAlert extends RdtConfirmDataLossService {
|
|
|
15
17
|
}
|
|
16
18
|
}
|
|
17
19
|
|
|
18
|
-
const
|
|
20
|
+
const RDT_ROUTES_PROVIDER = new InjectionToken('RDT_ROUTES_PROVIDER');
|
|
19
21
|
|
|
20
22
|
class RdtRouterService {
|
|
21
|
-
allRoutes = inject(
|
|
23
|
+
allRoutes = inject(RDT_ROUTES_PROVIDER, { optional: true });
|
|
22
24
|
location = inject(Location);
|
|
23
25
|
router = inject(Router);
|
|
24
26
|
baseHref = inject(PlatformLocation).getBaseHrefFromDOM();
|
|
@@ -40,7 +42,7 @@ class RdtRouterService {
|
|
|
40
42
|
nextNavigationEnd$ = this.navigationEnd$.pipe(take(1));
|
|
41
43
|
constructor() {
|
|
42
44
|
if (this.allRoutes === null) {
|
|
43
|
-
console.warn('All routes not provided. Make sure to provide
|
|
45
|
+
console.warn('All routes not provided. Make sure to provide RDT_ROUTES_PROVIDER with RdtRoute[].');
|
|
44
46
|
this.allRoutes = [];
|
|
45
47
|
}
|
|
46
48
|
this.navigationEnd$.subscribe((e) => {
|
|
@@ -314,6 +316,9 @@ class RdtAngularRoute {
|
|
|
314
316
|
}
|
|
315
317
|
}
|
|
316
318
|
|
|
319
|
+
function ALWAYS_TRUE() {
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
317
322
|
class RdtRoute {
|
|
318
323
|
orderedParams = [];
|
|
319
324
|
_paramMap = {};
|
|
@@ -327,7 +332,7 @@ class RdtRoute {
|
|
|
327
332
|
_parent = null;
|
|
328
333
|
_children = [];
|
|
329
334
|
_entryDisabled = false;
|
|
330
|
-
_canBeEntered =
|
|
335
|
+
_canBeEntered = ALWAYS_TRUE;
|
|
331
336
|
_absoluteRegex;
|
|
332
337
|
get paramMap() {
|
|
333
338
|
return this._paramMap;
|
|
@@ -382,6 +387,9 @@ class RdtRoute {
|
|
|
382
387
|
get staticParams() {
|
|
383
388
|
return { ...this._staticParams };
|
|
384
389
|
}
|
|
390
|
+
get hasCanBeEnteredGuard() {
|
|
391
|
+
return this._canBeEntered !== ALWAYS_TRUE;
|
|
392
|
+
}
|
|
385
393
|
canBeEntered(injector) {
|
|
386
394
|
return injector
|
|
387
395
|
? runInInjectionContext(injector, this._canBeEntered)
|
|
@@ -452,7 +460,7 @@ class RdtRoute {
|
|
|
452
460
|
return new RdtAngularRoute(this);
|
|
453
461
|
}
|
|
454
462
|
// Provides static mapping for parameter names tableName -> urlName.
|
|
455
|
-
// Returns new instance of
|
|
463
|
+
// Returns new instance of RdtRoute<T> that is clone of
|
|
456
464
|
// this route and its parents (NOT children).
|
|
457
465
|
withParamMappings(mappings) {
|
|
458
466
|
const clone = this.clone();
|
|
@@ -460,7 +468,7 @@ class RdtRoute {
|
|
|
460
468
|
return clone;
|
|
461
469
|
}
|
|
462
470
|
// Sets selected parameters for itself and parents.
|
|
463
|
-
// Returns new instance of
|
|
471
|
+
// Returns new instance of RdtRoute<T> that is clone of
|
|
464
472
|
// this route and its parents (NOT children).
|
|
465
473
|
withStaticParams(param1, param2) {
|
|
466
474
|
const clone = this.clone();
|
|
@@ -502,7 +510,7 @@ class RdtRoute {
|
|
|
502
510
|
});
|
|
503
511
|
return res;
|
|
504
512
|
}
|
|
505
|
-
// Returns new instance of
|
|
513
|
+
// Returns new instance of RdtRoute<T> that is clone of
|
|
506
514
|
// this route and its parents (NOT children).
|
|
507
515
|
clone() {
|
|
508
516
|
const clone = new RdtRoute();
|
|
@@ -588,6 +596,122 @@ class RdtRouteBuilder extends RdtRoute {
|
|
|
588
596
|
};
|
|
589
597
|
}
|
|
590
598
|
|
|
599
|
+
const EXACT_TRUE_OPTS = {
|
|
600
|
+
paths: 'exact',
|
|
601
|
+
queryParams: 'exact',
|
|
602
|
+
fragment: 'ignored',
|
|
603
|
+
matrixParams: 'ignored',
|
|
604
|
+
};
|
|
605
|
+
const EXACT_FALSE_OPTS = {
|
|
606
|
+
paths: 'subset',
|
|
607
|
+
queryParams: 'subset',
|
|
608
|
+
fragment: 'ignored',
|
|
609
|
+
matrixParams: 'ignored',
|
|
610
|
+
};
|
|
611
|
+
class RdtAnyRouteActiveDirective {
|
|
612
|
+
destroyRef = inject(DestroyRef);
|
|
613
|
+
router = inject(Router);
|
|
614
|
+
renderer = inject(Renderer2);
|
|
615
|
+
elRef = inject(ElementRef);
|
|
616
|
+
set anyRouteActive(data) {
|
|
617
|
+
this.classes = this.parseClasses(data);
|
|
618
|
+
}
|
|
619
|
+
watchedRoutes = [];
|
|
620
|
+
set anyRouteActiveOptions(value) {
|
|
621
|
+
this._anyRouteActiveOptions = this.parseOptions(value);
|
|
622
|
+
}
|
|
623
|
+
_anyRouteActiveOptions = EXACT_FALSE_OPTS;
|
|
624
|
+
ariaCurrentWhenActive;
|
|
625
|
+
get isActive() {
|
|
626
|
+
return this._isActive;
|
|
627
|
+
}
|
|
628
|
+
_isActive = false;
|
|
629
|
+
classes = [];
|
|
630
|
+
ngOnInit() {
|
|
631
|
+
this.update();
|
|
632
|
+
this.listenRouterEvents();
|
|
633
|
+
}
|
|
634
|
+
ngOnChanges(changes) {
|
|
635
|
+
if (changes['anyRouteActive']?.previousValue) {
|
|
636
|
+
const prev = this.parseClasses(changes['anyRouteActive'].previousValue);
|
|
637
|
+
prev.forEach((c) => this.removeClass(c));
|
|
638
|
+
}
|
|
639
|
+
this.update();
|
|
640
|
+
}
|
|
641
|
+
update() {
|
|
642
|
+
this._isActive = this.watchedRoutes.some((route) => {
|
|
643
|
+
const param = typeof route === 'string' ? route : this.router.createUrlTree(route);
|
|
644
|
+
return this.router.isActive(param, this._anyRouteActiveOptions);
|
|
645
|
+
});
|
|
646
|
+
this.setClasses();
|
|
647
|
+
this.setAriaCurrent();
|
|
648
|
+
}
|
|
649
|
+
setAriaCurrent() {
|
|
650
|
+
const el = this.elRef.nativeElement;
|
|
651
|
+
if (this._isActive && this.ariaCurrentWhenActive !== undefined) {
|
|
652
|
+
const value = this.ariaCurrentWhenActive.toString();
|
|
653
|
+
this.renderer.setAttribute(el, 'aria-current', value);
|
|
654
|
+
}
|
|
655
|
+
else {
|
|
656
|
+
this.renderer.removeAttribute(el, 'aria-current');
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
setClasses() {
|
|
660
|
+
if (this._isActive) {
|
|
661
|
+
this.classes.forEach((c) => this.addClass(c));
|
|
662
|
+
}
|
|
663
|
+
else {
|
|
664
|
+
this.classes.forEach((c) => this.removeClass(c));
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
addClass(className) {
|
|
668
|
+
this.renderer.addClass(this.elRef.nativeElement, className);
|
|
669
|
+
}
|
|
670
|
+
removeClass(className) {
|
|
671
|
+
this.renderer.removeClass(this.elRef.nativeElement, className);
|
|
672
|
+
}
|
|
673
|
+
listenRouterEvents() {
|
|
674
|
+
this.router.events
|
|
675
|
+
.pipe(filter((ev) => ev instanceof NavigationEnd), takeUntilDestroyed(this.destroyRef))
|
|
676
|
+
.subscribe(() => this.update());
|
|
677
|
+
}
|
|
678
|
+
parseClasses(data) {
|
|
679
|
+
const classes = Array.isArray(data) ? data : data.split(' ');
|
|
680
|
+
return classes.filter((c) => !!c);
|
|
681
|
+
}
|
|
682
|
+
parseOptions(input) {
|
|
683
|
+
if ('exact' in input) {
|
|
684
|
+
if (input.exact) {
|
|
685
|
+
return EXACT_TRUE_OPTS;
|
|
686
|
+
}
|
|
687
|
+
else {
|
|
688
|
+
return EXACT_FALSE_OPTS;
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
else {
|
|
692
|
+
return input;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtAnyRouteActiveDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
696
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: RdtAnyRouteActiveDirective, isStandalone: true, selector: "[rdtAnyRouteActive]", inputs: { anyRouteActive: "anyRouteActive", watchedRoutes: "watchedRoutes", anyRouteActiveOptions: "anyRouteActiveOptions", ariaCurrentWhenActive: "ariaCurrentWhenActive" }, providers: [RouterModule], usesOnChanges: true, ngImport: i0 });
|
|
697
|
+
}
|
|
698
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtAnyRouteActiveDirective, decorators: [{
|
|
699
|
+
type: Directive,
|
|
700
|
+
args: [{
|
|
701
|
+
selector: '[rdtAnyRouteActive]',
|
|
702
|
+
standalone: true,
|
|
703
|
+
providers: [RouterModule],
|
|
704
|
+
}]
|
|
705
|
+
}], propDecorators: { anyRouteActive: [{
|
|
706
|
+
type: Input
|
|
707
|
+
}], watchedRoutes: [{
|
|
708
|
+
type: Input
|
|
709
|
+
}], anyRouteActiveOptions: [{
|
|
710
|
+
type: Input
|
|
711
|
+
}], ariaCurrentWhenActive: [{
|
|
712
|
+
type: Input
|
|
713
|
+
}] } });
|
|
714
|
+
|
|
591
715
|
class RdtRouterLinkDirective {
|
|
592
716
|
routerLinkRef = inject(RouterLink, { self: true });
|
|
593
717
|
envInjector = inject(EnvironmentInjector);
|
|
@@ -652,9 +776,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
652
776
|
args: [{ transform: booleanAttribute }]
|
|
653
777
|
}] } });
|
|
654
778
|
|
|
779
|
+
const preventDataLossGuardFn = () => {
|
|
780
|
+
const guardStore = inject(RdtComponentGuardStoreService);
|
|
781
|
+
return guardStore.checkCanLeaveGlobal$();
|
|
782
|
+
};
|
|
783
|
+
|
|
784
|
+
class GlobalRouteGuardService {
|
|
785
|
+
router;
|
|
786
|
+
constructor(router) {
|
|
787
|
+
this.router = router;
|
|
788
|
+
}
|
|
789
|
+
// This will help ensure that routes are automatically protected by ensuring that global guards are applied to every route
|
|
790
|
+
ensureGlobalGuards() {
|
|
791
|
+
let lastUrl = '';
|
|
792
|
+
this.router.events.subscribe((e) => {
|
|
793
|
+
// Remember last url after successful navigation
|
|
794
|
+
if (e instanceof NavigationEnd) {
|
|
795
|
+
lastUrl = location.href;
|
|
796
|
+
}
|
|
797
|
+
if (e instanceof GuardsCheckStart) {
|
|
798
|
+
let lastChild = e.state.root;
|
|
799
|
+
while (lastChild?.firstChild) {
|
|
800
|
+
lastChild = lastChild.firstChild;
|
|
801
|
+
}
|
|
802
|
+
// Native back button will immediately replace url on click
|
|
803
|
+
// Replace it back to last url before guard check is finished.
|
|
804
|
+
// Angular will set it to correct value afterwards.
|
|
805
|
+
history.replaceState(window.history.state, '', lastUrl);
|
|
806
|
+
if (lastChild?.routeConfig) {
|
|
807
|
+
this.ensureCanDeactivateGuards(lastChild.routeConfig);
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
});
|
|
811
|
+
}
|
|
812
|
+
ensureCanDeactivateGuards(routeConfig) {
|
|
813
|
+
if (!routeConfig.canDeactivate) {
|
|
814
|
+
routeConfig.canDeactivate = [];
|
|
815
|
+
}
|
|
816
|
+
const canDeactivateGuards = routeConfig.canDeactivate;
|
|
817
|
+
// ensure that the "MySpecialCanDeactivateGuard" is in effect.
|
|
818
|
+
if (!canDeactivateGuards.find((o) => o == preventDataLossGuardFn)) {
|
|
819
|
+
canDeactivateGuards.push(preventDataLossGuardFn);
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GlobalRouteGuardService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
823
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GlobalRouteGuardService, providedIn: 'root' });
|
|
824
|
+
}
|
|
825
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: GlobalRouteGuardService, decorators: [{
|
|
826
|
+
type: Injectable,
|
|
827
|
+
args: [{ providedIn: 'root' }]
|
|
828
|
+
}], ctorParameters: () => [{ type: i1.Router }] });
|
|
829
|
+
|
|
655
830
|
/**
|
|
656
831
|
* Generated bundle index. Do not edit.
|
|
657
832
|
*/
|
|
658
833
|
|
|
659
|
-
export { RDT_CONFIRM_DATA_LOSS_SERVICE,
|
|
834
|
+
export { ALWAYS_TRUE, GlobalRouteGuardService, RDT_CONFIRM_DATA_LOSS_SERVICE, RDT_ROUTES_PROVIDER, RdtAngularRoute, RdtAnyRouteActiveDirective, RdtConfirmDataLossService, RdtConfirmDataLossServiceAlert, RdtNavigationSource, RdtRoute, RdtRouteBuilder, RdtRouterLinkDirective, RdtRouterService, preventDataLossGuardFn };
|
|
660
835
|
//# sourceMappingURL=ngrdt-router.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngrdt-router.mjs","sources":["../../../../@ngrdt/router/src/lib/services/rdt-confirm-data-loss.service.ts","../../../../@ngrdt/router/src/lib/services/rdt-routes.token.ts","../../../../@ngrdt/router/src/lib/services/rdt-router.service.ts","../../../../@ngrdt/router/src/lib/rdt-route/constants.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-angular-route.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-route.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-route-builder.ts","../../../../@ngrdt/router/src/lib/directives/rdt-router-link.directive.ts","../../../../@ngrdt/router/src/ngrdt-router.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { defer, Observable, of } from 'rxjs';\r\n\r\nexport const RDT_CONFIRM_DATA_LOSS_SERVICE =\r\n new InjectionToken<RdtConfirmDataLossService>(\r\n 'RDT_CONFIRM_DATA_LOSS_SERVICE',\r\n { factory: () => new RdtConfirmDataLossServiceAlert() }\r\n );\r\n\r\nexport abstract class RdtConfirmDataLossService {\r\n abstract confirmDataLoss(): Observable<boolean>;\r\n}\r\n\r\nexport class RdtConfirmDataLossServiceAlert extends RdtConfirmDataLossService {\r\n override confirmDataLoss(): Observable<boolean> {\r\n return defer(() =>\r\n of(confirm('Are you sure you want to leave this page?'))\r\n );\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\n\r\nexport const RDT_ROUTES_TOKEN = new InjectionToken<RdtRoute[]>(\r\n 'RDT_ROUTES_TOKEN'\r\n);\r\n","import { Location, PlatformLocation } from '@angular/common';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { NavigationEnd, Params, Router } from '@angular/router';\r\nimport { RdtStringUtils } from '@ngrdt/utils';\r\nimport { filter, Observable, take } from 'rxjs';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\nimport { RDT_ROUTES_TOKEN } from './rdt-routes.token';\r\n\r\nexport interface RdtNavigateParams {\r\n state?: Params;\r\n query?: Params;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RdtRouterService {\r\n readonly allRoutes = inject(RDT_ROUTES_TOKEN, { optional: true });\r\n\r\n private readonly location = inject(Location);\r\n private readonly router = inject(Router);\r\n private readonly baseHref = inject(PlatformLocation).getBaseHrefFromDOM();\r\n\r\n private _previousUrl: string | null = null;\r\n private _currentUrl: string | null = null;\r\n\r\n get previousUrl() {\r\n return this._previousUrl;\r\n }\r\n\r\n get currentUrl() {\r\n return this._currentUrl;\r\n }\r\n\r\n parsePreviousUrl() {\r\n return this._previousUrl ? this.parseAbsoluteUrl(this._previousUrl) : null;\r\n }\r\n\r\n parseCurrentUrl() {\r\n return this._currentUrl ? this.parseAbsoluteUrl(this._currentUrl) : null;\r\n }\r\n\r\n readonly navigationEnd$ = this.router.events.pipe(\r\n filter((e) => e instanceof NavigationEnd)\r\n ) as Observable<NavigationEnd>;\r\n\r\n readonly nextNavigationEnd$ = this.navigationEnd$.pipe(take(1));\r\n\r\n constructor() {\r\n if (this.allRoutes === null) {\r\n console.warn(\r\n 'All routes not provided. Make sure to provide RDT_ROUTES_TOKEN with RdtRoute[].'\r\n );\r\n this.allRoutes = [];\r\n }\r\n\r\n this.navigationEnd$.subscribe((e) => {\r\n this._previousUrl = this._currentUrl;\r\n this._currentUrl = e.url;\r\n });\r\n }\r\n\r\n navigate<T extends object>(\r\n link: RdtRoute<T>,\r\n params?: Partial<T>,\r\n target: '_blank' | '_self' | '_parent' | '_top' = '_self'\r\n ) {\r\n const url = params\r\n ? link.createAbsoluteUrl(params)\r\n : link.createAbsoluteUrl();\r\n\r\n if (target === '_self') {\r\n return this.router.navigate([url], {\r\n queryParams: link.queryParams,\r\n state: link.stateParams,\r\n });\r\n }\r\n\r\n const absolutePath = RdtStringUtils.createAbsoluteUrl(url, this.baseHref);\r\n const pathWithParams = RdtStringUtils.appendQueryParams(\r\n absolutePath,\r\n link.queryParams\r\n );\r\n const win = window.open(pathWithParams, target);\r\n if (win) {\r\n (win as any).RdtStateParams = link.stateParams;\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n navigateHome(params?: RdtNavigateParams) {\r\n return this.router.navigateByUrl(\r\n RdtStringUtils.appendQueryParams('/', params?.query ?? {}),\r\n {\r\n state: params?.state,\r\n }\r\n );\r\n }\r\n\r\n parseAbsoluteUrl(url = this.location.path()) {\r\n if (this.allRoutes) {\r\n for (const route of this.allRoutes) {\r\n const params = route.parseAbsoluteUrl(url);\r\n if (params) {\r\n return { route, params };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n navigateBack(params?: RdtNavigateParams) {\r\n const parsed = this.parseAbsoluteUrl();\r\n if (parsed) {\r\n let route: RdtRoute | null = parsed.route.withStaticParams(parsed.params);\r\n do {\r\n route = route.parent;\r\n } while (route && route.entryDisabled);\r\n\r\n // In case route has no ancestor with allowed entry,\r\n if (!route) {\r\n return this.navigateHome(params);\r\n }\r\n if (params) {\r\n if (params.query) {\r\n route = route.withQueryParams(params.query);\r\n }\r\n if (params.state) {\r\n route = route.withStateParams(params.state);\r\n }\r\n }\r\n return this.navigate(route);\r\n } else {\r\n console.warn(\r\n `Cannot go back from ${this.location.path()} because no route matches current url`\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n extractAllParams(currentRoute?: RdtRoute) {\r\n if (!currentRoute) {\r\n const parsed = this.parseAbsoluteUrl();\r\n if (!parsed) {\r\n console.warn('No route matches current url.');\r\n return {};\r\n }\r\n currentRoute = parsed.route;\r\n }\r\n const url = this.location.path();\r\n return currentRoute.parseAbsoluteUrl(url);\r\n }\r\n\r\n isParentOfCurrentLocation(route: RdtRoute) {\r\n console.log(this.parseAbsoluteUrl());\r\n return true;\r\n }\r\n\r\n removeQueryParams(...paramNames: string[]) {\r\n const regex = new RegExp(`[?&](${paramNames.join('|')})=[^&]*`, 'g');\r\n\r\n return history.replaceState(\r\n null,\r\n '',\r\n location.pathname + location.search.replace(regex, '').replace(/^&/, '?')\r\n );\r\n }\r\n}\r\n","export enum RdtNavigationSource {\r\n BREADCRUMB = 'breadcrumb',\r\n}\r\n","import {\r\n EnvironmentInjector,\r\n EnvironmentProviders,\r\n inject,\r\n Provider,\r\n runInInjectionContext,\r\n Type,\r\n} from '@angular/core';\r\nimport {\r\n CanActivateChildFn,\r\n CanActivateFn,\r\n CanDeactivateFn,\r\n CanMatchFn,\r\n LoadChildrenCallback,\r\n ResolveFn,\r\n Route,\r\n RunGuardsAndResolvers,\r\n UrlSegment,\r\n} from '@angular/router';\r\nimport { RdtNavigationSource } from './constants';\r\nimport { RdtRoute } from './rdt-route';\r\n\r\nexport class RdtAngularRoute<T extends object> {\r\n private route: RdtRoute<T>;\r\n private children: Route[] = [];\r\n\r\n // Must be set from component declaration files\r\n private loadChildren?: LoadChildrenCallback;\r\n private component?: Type<any>;\r\n private providers: (Provider | EnvironmentProviders)[] = [];\r\n private resolvers: { [key: string]: ResolveFn<unknown> } = {};\r\n private canActivate: CanActivateFn[] = [];\r\n private canActivateChild: CanActivateChildFn[] = [];\r\n private canDeactivate: CanDeactivateFn<T>[] = [];\r\n private runGuardsAndResolvers?: RunGuardsAndResolvers;\r\n\r\n constructor(route: RdtRoute<T>) {\r\n this.route = route;\r\n }\r\n\r\n provide(...providers: Type<unknown>[]) {\r\n this.providers.push(...providers);\r\n return this;\r\n }\r\n\r\n setModule(callback: LoadChildrenCallback) {\r\n this.loadChildren = callback;\r\n return this;\r\n }\r\n\r\n setComponent(comp: Type<any>) {\r\n this.component = comp;\r\n return this;\r\n }\r\n\r\n setChildren(...routes: Route[]) {\r\n this.children = routes;\r\n return this;\r\n }\r\n\r\n addResolve(paramName: string, resolver: ResolveFn<unknown>) {\r\n this.resolvers[paramName] = resolver;\r\n return this;\r\n }\r\n\r\n addCanActivate(...fns: CanActivateFn[]) {\r\n this.canActivate.push(...fns);\r\n return this;\r\n }\r\n\r\n addCanDeactivate(...fns: CanDeactivateFn<any>[]) {\r\n this.canDeactivate.push(...fns);\r\n return this;\r\n }\r\n\r\n addCanActivateChild(...fns: CanActivateChildFn[]) {\r\n this.canActivateChild.push(...fns);\r\n return this;\r\n }\r\n\r\n setRunGuardsAndResolvers(value: RunGuardsAndResolvers) {\r\n this.runGuardsAndResolvers = value;\r\n return this;\r\n }\r\n\r\n build(): Route {\r\n this.checkChildrenMatch();\r\n\r\n let res: Route = {\r\n path: this.route.path,\r\n providers: this.providers,\r\n title: this.route.name,\r\n canMatch: this.getCanMatch(),\r\n };\r\n\r\n if (this.component) {\r\n res.component = this.component;\r\n } else if (this.loadChildren) {\r\n res.loadChildren = this.loadChildren;\r\n }\r\n\r\n res.data = {\r\n breadcrumb: {\r\n label: this.route.name,\r\n disable: this.route.entryDisabled,\r\n staticStateParams: {\r\n src: RdtNavigationSource.BREADCRUMB,\r\n },\r\n },\r\n };\r\n\r\n const guard = () => {\r\n const injector = inject(EnvironmentInjector);\r\n return runInInjectionContext(\r\n injector,\r\n this.route.canBeEntered.bind(this.route)\r\n );\r\n };\r\n this.canActivate.push(guard);\r\n this.canActivateChild.push(guard);\r\n\r\n res.canActivate = this.canActivate;\r\n res.canDeactivate = this.canDeactivate;\r\n\r\n // If children exist, change\r\n // {\r\n // path: '/path',\r\n // component: FeatureComponent,\r\n // children: [...]\r\n // }\r\n // into\r\n // {\r\n // path: '/path',\r\n // children: [\r\n // {\r\n // path: '',\r\n // component: FeatureComponent\r\n // },\r\n // ...\r\n // ]\r\n // }\r\n if (this.children.length > 0) {\r\n if (this.loadChildren || this.component) {\r\n const path = res.path;\r\n res.path = '';\r\n res.pathMatch = 'full';\r\n res.canMatch = undefined;\r\n res = {\r\n path: path,\r\n children: [res, ...this.children],\r\n canActivateChild: this.canActivateChild,\r\n canMatch: this.getCanMatch(),\r\n };\r\n } else {\r\n res.children = this.children;\r\n }\r\n }\r\n\r\n if (Object.keys(this.resolvers).length > 0) {\r\n res.resolve = this.resolvers;\r\n }\r\n\r\n if (this.runGuardsAndResolvers) {\r\n res.runGuardsAndResolvers = this.runGuardsAndResolvers;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n private getCanMatch(): CanMatchFn[] | undefined {\r\n const paramMap = this.route.paramMap;\r\n const hasNumberParams = Object.keys(paramMap).some(\r\n (p) => paramMap[p as keyof T] === 'number'\r\n );\r\n if (!hasNumberParams) {\r\n return undefined;\r\n }\r\n const routeSegmentLength = this.route.path.split('/').length;\r\n const regex = new RegExp(`^${this.route.regex.source}$`);\r\n return [\r\n (route: Route, segments: UrlSegment[]) => {\r\n const path = segments\r\n .slice(0, routeSegmentLength)\r\n .map((s) => s.path)\r\n .join('/');\r\n return regex.test(path);\r\n },\r\n ];\r\n }\r\n\r\n private checkChildrenMatch() {\r\n // Check that all routes are present if route is not\r\n // lazy loaded module.\r\n if (\r\n !this.loadChildren &&\r\n (this.route.children.length > 0 || this.children.length > 0)\r\n ) {\r\n if (this.children.length < this.route.children.length) {\r\n throw new Error(\r\n `RdtRoute ${this.route.name} has ${\r\n this.route.children.length\r\n } children, but RdtAngularRoute has ${\r\n this.children.length\r\n }. These numbers must match. Did you forget to call .setChildren() method in global routes definition? Routes with following names should be present: ${this.route.children\r\n .map((ch) => ch.name)\r\n .join(', ')}`\r\n );\r\n } else if (this.children.length > this.route.children.length) {\r\n throw new Error(\r\n `RdtRoute ${this.route.name} has ${\r\n this.route.children.length\r\n } children, but RdtAngularRoute has ${\r\n this.children.length\r\n }. These numbers must match. Did you forget to call .setChildren() method in feature shell routes definition? Routes with following paths should be present: ${this.children\r\n .map((ch) => ch.path)\r\n .join(', ')}`\r\n );\r\n }\r\n const n1 = this.children.map((ch) => ch.path!);\r\n const n2 = this.route.children.map((ch) => ch.path);\r\n n1.sort();\r\n n2.sort();\r\n for (let i = 0; i < n1.length; i++) {\r\n if (n1[i] !== n2[i]) {\r\n throw new Error(\r\n `Paths of children provided in RdtRoute and\r\n RdtAngularRoute do not match. ${n1[i]} != ${n2[i]}`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { RdtStringUtils } from '@ngrdt/utils';\r\nimport { StaticRouteParams, ParamMapping, ParamTypeMap } from './utils';\r\nimport { Params } from '@angular/router';\r\nimport { RdtAngularRoute } from './rdt-angular-route';\r\nimport { Injector, runInInjectionContext } from '@angular/core';\r\n\r\nexport class RdtRoute<T extends object = any> {\r\n protected orderedParams: string[] = [];\r\n protected _paramMap: ParamTypeMap<T> = {};\r\n protected _regex!: RegExp;\r\n protected paramMappings: ParamMapping[] = [];\r\n protected _staticParams: Partial<T> = {};\r\n protected _queryParams: Params = {};\r\n protected _stateParams: Params = {};\r\n\r\n protected _name!: string;\r\n protected _path!: string;\r\n protected _parent: RdtRoute | null = null;\r\n protected _children: RdtRoute[] = [];\r\n protected _entryDisabled = false;\r\n protected _canBeEntered: () => boolean = () => true;\r\n\r\n private _absoluteRegex?: RegExp;\r\n\r\n get paramMap(): Readonly<ParamTypeMap<T>> {\r\n return this._paramMap;\r\n }\r\n\r\n get name() {\r\n return this._name;\r\n }\r\n\r\n get path() {\r\n return this._path;\r\n }\r\n\r\n get parent() {\r\n return this._parent;\r\n }\r\n\r\n get children() {\r\n return this._children;\r\n }\r\n\r\n get basePath(): string {\r\n return this._parent ? this._parent.absolutePath : '/';\r\n }\r\n\r\n get absolutePath() {\r\n return RdtStringUtils.joinPaths(this.basePath, this._path);\r\n }\r\n\r\n get regex() {\r\n return this._regex;\r\n }\r\n\r\n get absoluteRegex(): RegExp {\r\n if (this._absoluteRegex) {\r\n return this._absoluteRegex;\r\n }\r\n\r\n if (this._parent) {\r\n // Remove initial ^ and ending $\r\n const parent = this._parent.absoluteRegex.source.slice(1, -1);\r\n this._absoluteRegex = new RegExp(\r\n '^' + RdtStringUtils.joinPaths(parent, this._regex.source) + '$'\r\n );\r\n } else {\r\n this._absoluteRegex = new RegExp(\r\n '^' + RdtStringUtils.joinPaths('/', this._regex.source) + '$'\r\n );\r\n }\r\n return this._absoluteRegex;\r\n }\r\n\r\n get entryDisabled() {\r\n return this._entryDisabled;\r\n }\r\n\r\n get stateParams() {\r\n return this._stateParams;\r\n }\r\n\r\n get queryParams() {\r\n return this._queryParams;\r\n }\r\n\r\n testUrl(url: string) {\r\n return this.absoluteRegex.test(url);\r\n }\r\n\r\n get staticParams() {\r\n return { ...this._staticParams };\r\n }\r\n\r\n canBeEntered(injector?: Injector): boolean {\r\n return injector\r\n ? runInInjectionContext(injector, this._canBeEntered)\r\n : this._canBeEntered();\r\n }\r\n\r\n // Extracts url parameters from absolute url.\r\n parseAbsoluteUrl(url: string): Record<string, any> | null {\r\n const reg = this.absoluteRegex;\r\n if (!reg.test(url)) {\r\n return null;\r\n }\r\n const matches = reg.exec(url);\r\n if (matches) {\r\n const values = matches.slice(1).reverse();\r\n return this.fill(values);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n private fill(values: string[], res: Record<string, any> = {}) {\r\n const params: { [key in keyof T]?: string | number } = {};\r\n const reversedParams = this.orderedParams.slice().reverse();\r\n for (let i = 0; i < reversedParams.length && i < values.length; i++) {\r\n const key = reversedParams[i] as keyof T;\r\n const mappedKey =\r\n this.paramMappings.find((m) => m.urlName === key)?.tableName ?? key;\r\n let val: string | number = values[i];\r\n\r\n if (this._paramMap[key] === 'number') {\r\n val = parseInt(val);\r\n }\r\n params[mappedKey as keyof T] = val;\r\n }\r\n res[this.absolutePath] = params;\r\n\r\n if (values.length > reversedParams.length && this._parent) {\r\n this._parent.fill(values.slice(reversedParams.length), res);\r\n }\r\n return res;\r\n }\r\n\r\n createAbsoluteUrl(paramMap: Partial<T> = this._staticParams): string {\r\n if (!this._parent) {\r\n return this.createUrl(this.absolutePath, paramMap);\r\n } else {\r\n return RdtStringUtils.joinPaths(\r\n this._parent.createAbsoluteUrl(),\r\n this.createRelativeUrl(paramMap)\r\n );\r\n }\r\n }\r\n\r\n createRelativeUrl(paramMap: Partial<T> = this._staticParams) {\r\n return this.createUrl(this.path, paramMap);\r\n }\r\n\r\n private createUrl(path: string, paramMap: Partial<T>) {\r\n const paramNames = Object.keys(this._paramMap);\r\n paramNames.sort((a, b) => b.length - a.length);\r\n const extendedParamMap: any = { ...paramMap };\r\n\r\n this.paramMappings.forEach((mapping) => {\r\n if (mapping.tableName in paramMap) {\r\n extendedParamMap[mapping.urlName] = (paramMap as any)[\r\n mapping.tableName\r\n ];\r\n }\r\n });\r\n\r\n paramNames.forEach((param) => {\r\n path = path.replace(`:${param}`, `${extendedParamMap[param as keyof T]}`);\r\n });\r\n\r\n return path;\r\n }\r\n\r\n toAngularRoute() {\r\n if (!this._regex) {\r\n throw new Error('You have to first call .build() on route!');\r\n }\r\n return new RdtAngularRoute<T>(this);\r\n }\r\n\r\n // Provides static mapping for parameter names tableName -> urlName.\r\n // Returns new instance of Dp3Route<T> that is clone of\r\n // this route and its parents (NOT children).\r\n withParamMappings(mappings: ParamMapping[]) {\r\n const clone = this.clone();\r\n clone.paramMappings = mappings;\r\n return clone;\r\n }\r\n\r\n withStaticParams(params: T): RdtRoute<T>;\r\n withStaticParams<T2 extends object>(\r\n route: RdtRoute<T>,\r\n params: T2\r\n ): RdtRoute<T>;\r\n\r\n // Sets selected parameters for itself and parents.\r\n // Returns new instance of Dp3Route<T> that is clone of\r\n // this route and its parents (NOT children).\r\n withStaticParams<T2 extends object>(param1: RdtRoute<T2> | T, param2?: T2) {\r\n const clone = this.clone();\r\n\r\n if (param2) {\r\n const routeAbsPath = (param1 as RdtRoute<T2>).absolutePath;\r\n let current: RdtRoute | null = clone;\r\n\r\n while (current) {\r\n if (current.absolutePath === routeAbsPath) {\r\n current._staticParams = param2;\r\n }\r\n current = current._parent;\r\n }\r\n } else {\r\n clone._staticParams = param1 as T;\r\n }\r\n return clone;\r\n }\r\n\r\n withQueryParams(queryParams: Params) {\r\n const clone = this.clone();\r\n clone._queryParams = { ...queryParams };\r\n return clone;\r\n }\r\n\r\n withStateParams(stateParams: Params) {\r\n const clone = this.clone();\r\n clone._stateParams = { ...stateParams };\r\n return clone;\r\n }\r\n\r\n // Returns Partial of object that only contains properties\r\n // necessary to create this route.\r\n extractRouteParams(row: T): Partial<T> {\r\n const res: Partial<T> = {};\r\n\r\n this.orderedParams.forEach((param) => {\r\n const mapping = this.paramMappings.find((m) => m.urlName === param);\r\n const mappedParam = (mapping?.tableName ?? param) as keyof T;\r\n if (mappedParam in row) {\r\n res[mappedParam] = row[mappedParam];\r\n }\r\n });\r\n\r\n return res;\r\n }\r\n\r\n // Returns new instance of Dp3Route<T> that is clone of\r\n // this route and its parents (NOT children).\r\n clone() {\r\n const clone = new RdtRoute<T>();\r\n clone._name = this._name;\r\n clone._parent = this._parent?.clone() ?? null;\r\n clone._path = this.path;\r\n clone._entryDisabled = this._entryDisabled;\r\n clone.orderedParams = [...this.orderedParams];\r\n clone._paramMap = { ...this._paramMap };\r\n clone._regex = new RegExp(this._regex);\r\n clone.paramMappings = this.paramMappings;\r\n clone._staticParams = this._staticParams;\r\n return clone;\r\n }\r\n}\r\n","import { RdtRoute } from './rdt-route';\r\n\r\nconst DEFAULT_PARAM_TYPE = 'number';\r\n\r\nexport class RdtRouteBuilder<T extends object = any> extends RdtRoute<T> {\r\n setCanBeEntered(fn: () => boolean) {\r\n this._canBeEntered = fn;\r\n return this;\r\n }\r\n\r\n setEntryDisabled(value = true) {\r\n this._entryDisabled = value;\r\n return this;\r\n }\r\n\r\n setPath(path: string) {\r\n this._path = path;\r\n const s = path.split('/');\r\n const params: string[] = [];\r\n s.forEach((part) => {\r\n if (part.includes(':')) {\r\n const param = part.split(':')[1] as keyof T;\r\n if (param) {\r\n params.push(param as string);\r\n if (!this._paramMap[param]) {\r\n this._paramMap[param] = DEFAULT_PARAM_TYPE;\r\n }\r\n }\r\n }\r\n });\r\n this.orderedParams = params;\r\n return this;\r\n }\r\n\r\n setParam(paramName: keyof T, type: 'string' | 'number') {\r\n this._paramMap[paramName] = type;\r\n return this;\r\n }\r\n\r\n setName(name: string) {\r\n this._name = name;\r\n return this;\r\n }\r\n\r\n setChildren(...children: RdtRoute[]) {\r\n this._children = children;\r\n for (const child of children) {\r\n (child as RdtRouteBuilder)._parent = this;\r\n }\r\n return this;\r\n }\r\n\r\n build() {\r\n if (typeof this._path !== 'string') {\r\n throw new Error(\r\n 'Please provide path for route. Empty string is acceptable.'\r\n );\r\n }\r\n this.setRegex();\r\n return this as RdtRoute<T>;\r\n }\r\n\r\n private setRegex() {\r\n const params = Object.keys(this._paramMap);\r\n params.sort((a, b) => b.length - a.length);\r\n let substituted = this.path;\r\n params.forEach((p) => {\r\n const type = this._paramMap[p as keyof T];\r\n if (!type) {\r\n throw new Error('Params is not set i');\r\n }\r\n substituted = substituted.replace(`:${p}`, RdtRouteBuilder.groups[type]);\r\n });\r\n\r\n this._regex = new RegExp(substituted);\r\n }\r\n\r\n private static readonly groups = {\r\n string: '(.+)',\r\n number: '(\\\\d+)',\r\n };\r\n}\r\n","import {\r\n booleanAttribute,\r\n Directive,\r\n EnvironmentInjector,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { Params, RouterLink } from '@angular/router';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\n\r\n@Directive({\r\n selector: '[rdtRouterLink]',\r\n standalone: true,\r\n hostDirectives: [\r\n {\r\n directive: RouterLink,\r\n inputs: ['target'],\r\n },\r\n ],\r\n})\r\nexport class RdtRouterLinkDirective<T extends object>\r\n implements OnInit, OnChanges\r\n{\r\n private readonly routerLinkRef = inject(RouterLink, { self: true });\r\n private readonly envInjector = inject(EnvironmentInjector);\r\n\r\n @Input({ alias: 'rdtRouterLink', required: true })\r\n route!: RdtRoute<T>;\r\n\r\n @Input()\r\n target: '_blank' | '_self' | '_parent' | '_top' = '_self';\r\n\r\n @Input()\r\n params?: Partial<T>;\r\n\r\n @Input()\r\n queryParams?: Params;\r\n\r\n @Input()\r\n stateParams?: Params;\r\n\r\n @Input({ transform: booleanAttribute })\r\n disabled = false;\r\n\r\n ngOnInit() {\r\n this.update();\r\n }\r\n\r\n ngOnChanges() {\r\n this.update();\r\n }\r\n\r\n private update() {\r\n if (this.route.canBeEntered(this.envInjector) && !this.disabled) {\r\n this.setLink();\r\n } else {\r\n this.disableLink();\r\n }\r\n }\r\n\r\n private setLink() {\r\n this.routerLinkRef.routerLink = this.route.createAbsoluteUrl(this.params);\r\n this.routerLinkRef.state = this.stateParams ?? this.route.stateParams;\r\n this.routerLinkRef.queryParams = this.queryParams ?? this.route.queryParams;\r\n this.routerLinkRef.ngOnChanges({});\r\n }\r\n\r\n private disableLink() {\r\n this.routerLinkRef.routerLink = null;\r\n this.routerLinkRef.ngOnChanges({});\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngrdt-router.mjs","sources":["../../../../@ngrdt/router/src/lib/services/rdt-confirm-data-loss.service.ts","../../../../@ngrdt/router/src/lib/services/rdt-routes.token.ts","../../../../@ngrdt/router/src/lib/services/rdt-router.service.ts","../../../../@ngrdt/router/src/lib/rdt-route/constants.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-angular-route.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-route.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-route-builder.ts","../../../../@ngrdt/router/src/lib/directives/rdt-any-route-active.directive.ts","../../../../@ngrdt/router/src/lib/directives/rdt-router-link.directive.ts","../../../../@ngrdt/router/src/lib/guards/prevent-data-loss.guard.ts","../../../../@ngrdt/router/src/lib/guards/global-route-guard.service.ts","../../../../@ngrdt/router/src/ngrdt-router.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { defer, Observable, of } from 'rxjs';\r\n\r\nexport const RDT_CONFIRM_DATA_LOSS_SERVICE =\r\n new InjectionToken<RdtConfirmDataLossService>(\r\n 'RDT_CONFIRM_DATA_LOSS_SERVICE',\r\n { factory: () => new RdtConfirmDataLossServiceAlert() }\r\n );\r\n\r\nexport abstract class RdtConfirmDataLossService {\r\n abstract confirmDataLoss(): Observable<boolean>;\r\n}\r\n\r\nexport class RdtConfirmDataLossServiceAlert extends RdtConfirmDataLossService {\r\n override confirmDataLoss(): Observable<boolean> {\r\n return defer(() =>\r\n of(confirm('Are you sure you want to leave this page?'))\r\n );\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\n\r\nexport const RDT_ROUTES_PROVIDER = new InjectionToken<RdtRoute[]>(\r\n 'RDT_ROUTES_PROVIDER'\r\n);\r\n","import { Location, PlatformLocation } from '@angular/common';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { NavigationEnd, Params, Router } from '@angular/router';\r\nimport { RdtStringUtils } from '@ngrdt/utils';\r\nimport { filter, Observable, take } from 'rxjs';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\nimport { RDT_ROUTES_PROVIDER } from './rdt-routes.token';\r\n\r\nexport interface RdtNavigateParams {\r\n state?: Params;\r\n query?: Params;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RdtRouterService {\r\n readonly allRoutes = inject(RDT_ROUTES_PROVIDER, { optional: true });\r\n\r\n private readonly location = inject(Location);\r\n private readonly router = inject(Router);\r\n private readonly baseHref = inject(PlatformLocation).getBaseHrefFromDOM();\r\n\r\n private _previousUrl: string | null = null;\r\n private _currentUrl: string | null = null;\r\n\r\n get previousUrl() {\r\n return this._previousUrl;\r\n }\r\n\r\n get currentUrl() {\r\n return this._currentUrl;\r\n }\r\n\r\n parsePreviousUrl() {\r\n return this._previousUrl ? this.parseAbsoluteUrl(this._previousUrl) : null;\r\n }\r\n\r\n parseCurrentUrl() {\r\n return this._currentUrl ? this.parseAbsoluteUrl(this._currentUrl) : null;\r\n }\r\n\r\n readonly navigationEnd$ = this.router.events.pipe(\r\n filter((e) => e instanceof NavigationEnd)\r\n ) as Observable<NavigationEnd>;\r\n\r\n readonly nextNavigationEnd$ = this.navigationEnd$.pipe(take(1));\r\n\r\n constructor() {\r\n if (this.allRoutes === null) {\r\n console.warn(\r\n 'All routes not provided. Make sure to provide RDT_ROUTES_PROVIDER with RdtRoute[].'\r\n );\r\n this.allRoutes = [];\r\n }\r\n\r\n this.navigationEnd$.subscribe((e) => {\r\n this._previousUrl = this._currentUrl;\r\n this._currentUrl = e.url;\r\n });\r\n }\r\n\r\n navigate<T extends object>(\r\n link: RdtRoute<T>,\r\n params?: Partial<T>,\r\n target: '_blank' | '_self' | '_parent' | '_top' = '_self'\r\n ) {\r\n const url = params\r\n ? link.createAbsoluteUrl(params)\r\n : link.createAbsoluteUrl();\r\n\r\n if (target === '_self') {\r\n return this.router.navigate([url], {\r\n queryParams: link.queryParams,\r\n state: link.stateParams,\r\n });\r\n }\r\n\r\n const absolutePath = RdtStringUtils.createAbsoluteUrl(url, this.baseHref);\r\n const pathWithParams = RdtStringUtils.appendQueryParams(\r\n absolutePath,\r\n link.queryParams\r\n );\r\n const win = window.open(pathWithParams, target);\r\n if (win) {\r\n (win as any).RdtStateParams = link.stateParams;\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n navigateHome(params?: RdtNavigateParams) {\r\n return this.router.navigateByUrl(\r\n RdtStringUtils.appendQueryParams('/', params?.query ?? {}),\r\n {\r\n state: params?.state,\r\n }\r\n );\r\n }\r\n\r\n parseAbsoluteUrl(url = this.location.path()) {\r\n if (this.allRoutes) {\r\n for (const route of this.allRoutes) {\r\n const params = route.parseAbsoluteUrl(url);\r\n if (params) {\r\n return { route, params };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n navigateBack(params?: RdtNavigateParams) {\r\n const parsed = this.parseAbsoluteUrl();\r\n if (parsed) {\r\n let route: RdtRoute | null = parsed.route.withStaticParams(parsed.params);\r\n do {\r\n route = route.parent;\r\n } while (route && route.entryDisabled);\r\n\r\n // In case route has no ancestor with allowed entry,\r\n if (!route) {\r\n return this.navigateHome(params);\r\n }\r\n if (params) {\r\n if (params.query) {\r\n route = route.withQueryParams(params.query);\r\n }\r\n if (params.state) {\r\n route = route.withStateParams(params.state);\r\n }\r\n }\r\n return this.navigate(route);\r\n } else {\r\n console.warn(\r\n `Cannot go back from ${this.location.path()} because no route matches current url`\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n extractAllParams(currentRoute?: RdtRoute) {\r\n if (!currentRoute) {\r\n const parsed = this.parseAbsoluteUrl();\r\n if (!parsed) {\r\n console.warn('No route matches current url.');\r\n return {};\r\n }\r\n currentRoute = parsed.route;\r\n }\r\n const url = this.location.path();\r\n return currentRoute.parseAbsoluteUrl(url);\r\n }\r\n\r\n isParentOfCurrentLocation(route: RdtRoute) {\r\n console.log(this.parseAbsoluteUrl());\r\n return true;\r\n }\r\n\r\n removeQueryParams(...paramNames: string[]) {\r\n const regex = new RegExp(`[?&](${paramNames.join('|')})=[^&]*`, 'g');\r\n\r\n return history.replaceState(\r\n null,\r\n '',\r\n location.pathname + location.search.replace(regex, '').replace(/^&/, '?')\r\n );\r\n }\r\n}\r\n","export enum RdtNavigationSource {\r\n BREADCRUMB = 'breadcrumb',\r\n}\r\n","import {\r\n EnvironmentInjector,\r\n EnvironmentProviders,\r\n inject,\r\n Provider,\r\n runInInjectionContext,\r\n Type,\r\n} from '@angular/core';\r\nimport {\r\n CanActivateChildFn,\r\n CanActivateFn,\r\n CanDeactivateFn,\r\n CanMatchFn,\r\n LoadChildrenCallback,\r\n ResolveFn,\r\n Route,\r\n RunGuardsAndResolvers,\r\n UrlSegment,\r\n} from '@angular/router';\r\nimport { RdtNavigationSource } from './constants';\r\nimport { RdtRoute } from './rdt-route';\r\n\r\nexport class RdtAngularRoute<T extends object> {\r\n private route: RdtRoute<T>;\r\n private children: Route[] = [];\r\n\r\n // Must be set from component declaration files\r\n private loadChildren?: LoadChildrenCallback;\r\n private component?: Type<any>;\r\n private providers: (Provider | EnvironmentProviders)[] = [];\r\n private resolvers: { [key: string]: ResolveFn<unknown> } = {};\r\n private canActivate: CanActivateFn[] = [];\r\n private canActivateChild: CanActivateChildFn[] = [];\r\n private canDeactivate: CanDeactivateFn<T>[] = [];\r\n private runGuardsAndResolvers?: RunGuardsAndResolvers;\r\n\r\n constructor(route: RdtRoute<T>) {\r\n this.route = route;\r\n }\r\n\r\n provide(...providers: Type<unknown>[]) {\r\n this.providers.push(...providers);\r\n return this;\r\n }\r\n\r\n setModule(callback: LoadChildrenCallback) {\r\n this.loadChildren = callback;\r\n return this;\r\n }\r\n\r\n setComponent(comp: Type<any>) {\r\n this.component = comp;\r\n return this;\r\n }\r\n\r\n setChildren(...routes: Route[]) {\r\n this.children = routes;\r\n return this;\r\n }\r\n\r\n addResolve(paramName: string, resolver: ResolveFn<unknown>) {\r\n this.resolvers[paramName] = resolver;\r\n return this;\r\n }\r\n\r\n addCanActivate(...fns: CanActivateFn[]) {\r\n this.canActivate.push(...fns);\r\n return this;\r\n }\r\n\r\n addCanDeactivate(...fns: CanDeactivateFn<any>[]) {\r\n this.canDeactivate.push(...fns);\r\n return this;\r\n }\r\n\r\n addCanActivateChild(...fns: CanActivateChildFn[]) {\r\n this.canActivateChild.push(...fns);\r\n return this;\r\n }\r\n\r\n setRunGuardsAndResolvers(value: RunGuardsAndResolvers) {\r\n this.runGuardsAndResolvers = value;\r\n return this;\r\n }\r\n\r\n build(): Route {\r\n this.checkChildrenMatch();\r\n\r\n let res: Route = {\r\n path: this.route.path,\r\n providers: this.providers,\r\n title: this.route.name,\r\n canMatch: this.getCanMatch(),\r\n };\r\n\r\n if (this.component) {\r\n res.component = this.component;\r\n } else if (this.loadChildren) {\r\n res.loadChildren = this.loadChildren;\r\n }\r\n\r\n res.data = {\r\n breadcrumb: {\r\n label: this.route.name,\r\n disable: this.route.entryDisabled,\r\n staticStateParams: {\r\n src: RdtNavigationSource.BREADCRUMB,\r\n },\r\n },\r\n };\r\n\r\n const guard = () => {\r\n const injector = inject(EnvironmentInjector);\r\n return runInInjectionContext(\r\n injector,\r\n this.route.canBeEntered.bind(this.route)\r\n );\r\n };\r\n this.canActivate.push(guard);\r\n this.canActivateChild.push(guard);\r\n\r\n res.canActivate = this.canActivate;\r\n res.canDeactivate = this.canDeactivate;\r\n\r\n // If children exist, change\r\n // {\r\n // path: '/path',\r\n // component: FeatureComponent,\r\n // children: [...]\r\n // }\r\n // into\r\n // {\r\n // path: '/path',\r\n // children: [\r\n // {\r\n // path: '',\r\n // component: FeatureComponent\r\n // },\r\n // ...\r\n // ]\r\n // }\r\n if (this.children.length > 0) {\r\n if (this.loadChildren || this.component) {\r\n const path = res.path;\r\n res.path = '';\r\n res.pathMatch = 'full';\r\n res.canMatch = undefined;\r\n res = {\r\n path: path,\r\n children: [res, ...this.children],\r\n canActivateChild: this.canActivateChild,\r\n canMatch: this.getCanMatch(),\r\n };\r\n } else {\r\n res.children = this.children;\r\n }\r\n }\r\n\r\n if (Object.keys(this.resolvers).length > 0) {\r\n res.resolve = this.resolvers;\r\n }\r\n\r\n if (this.runGuardsAndResolvers) {\r\n res.runGuardsAndResolvers = this.runGuardsAndResolvers;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n private getCanMatch(): CanMatchFn[] | undefined {\r\n const paramMap = this.route.paramMap;\r\n const hasNumberParams = Object.keys(paramMap).some(\r\n (p) => paramMap[p as keyof T] === 'number'\r\n );\r\n if (!hasNumberParams) {\r\n return undefined;\r\n }\r\n const routeSegmentLength = this.route.path.split('/').length;\r\n const regex = new RegExp(`^${this.route.regex.source}$`);\r\n return [\r\n (route: Route, segments: UrlSegment[]) => {\r\n const path = segments\r\n .slice(0, routeSegmentLength)\r\n .map((s) => s.path)\r\n .join('/');\r\n return regex.test(path);\r\n },\r\n ];\r\n }\r\n\r\n private checkChildrenMatch() {\r\n // Check that all routes are present if route is not\r\n // lazy loaded module.\r\n if (\r\n !this.loadChildren &&\r\n (this.route.children.length > 0 || this.children.length > 0)\r\n ) {\r\n if (this.children.length < this.route.children.length) {\r\n throw new Error(\r\n `RdtRoute ${this.route.name} has ${\r\n this.route.children.length\r\n } children, but RdtAngularRoute has ${\r\n this.children.length\r\n }. These numbers must match. Did you forget to call .setChildren() method in global routes definition? Routes with following names should be present: ${this.route.children\r\n .map((ch) => ch.name)\r\n .join(', ')}`\r\n );\r\n } else if (this.children.length > this.route.children.length) {\r\n throw new Error(\r\n `RdtRoute ${this.route.name} has ${\r\n this.route.children.length\r\n } children, but RdtAngularRoute has ${\r\n this.children.length\r\n }. These numbers must match. Did you forget to call .setChildren() method in feature shell routes definition? Routes with following paths should be present: ${this.children\r\n .map((ch) => ch.path)\r\n .join(', ')}`\r\n );\r\n }\r\n const n1 = this.children.map((ch) => ch.path!);\r\n const n2 = this.route.children.map((ch) => ch.path);\r\n n1.sort();\r\n n2.sort();\r\n for (let i = 0; i < n1.length; i++) {\r\n if (n1[i] !== n2[i]) {\r\n throw new Error(\r\n `Paths of children provided in RdtRoute and\r\n RdtAngularRoute do not match. ${n1[i]} != ${n2[i]}`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { RdtStringUtils } from '@ngrdt/utils';\r\nimport { StaticRouteParams, ParamMapping, ParamTypeMap } from './utils';\r\nimport { Params } from '@angular/router';\r\nimport { RdtAngularRoute } from './rdt-angular-route';\r\nimport { Injector, runInInjectionContext } from '@angular/core';\r\n\r\nexport function ALWAYS_TRUE() {\r\n return true;\r\n}\r\n\r\nexport class RdtRoute<T extends object = any> {\r\n protected orderedParams: string[] = [];\r\n protected _paramMap: ParamTypeMap<T> = {};\r\n protected _regex!: RegExp;\r\n protected paramMappings: ParamMapping[] = [];\r\n protected _staticParams: Partial<T> = {};\r\n protected _queryParams: Params = {};\r\n protected _stateParams: Params = {};\r\n\r\n protected _name!: string;\r\n protected _path!: string;\r\n protected _parent: RdtRoute | null = null;\r\n protected _children: RdtRoute[] = [];\r\n protected _entryDisabled = false;\r\n protected _canBeEntered: () => boolean = ALWAYS_TRUE;\r\n\r\n private _absoluteRegex?: RegExp;\r\n\r\n get paramMap(): Readonly<ParamTypeMap<T>> {\r\n return this._paramMap;\r\n }\r\n\r\n get name() {\r\n return this._name;\r\n }\r\n\r\n get path() {\r\n return this._path;\r\n }\r\n\r\n get parent() {\r\n return this._parent;\r\n }\r\n\r\n get children() {\r\n return this._children;\r\n }\r\n\r\n get basePath(): string {\r\n return this._parent ? this._parent.absolutePath : '/';\r\n }\r\n\r\n get absolutePath() {\r\n return RdtStringUtils.joinPaths(this.basePath, this._path);\r\n }\r\n\r\n get regex() {\r\n return this._regex;\r\n }\r\n\r\n get absoluteRegex(): RegExp {\r\n if (this._absoluteRegex) {\r\n return this._absoluteRegex;\r\n }\r\n\r\n if (this._parent) {\r\n // Remove initial ^ and ending $\r\n const parent = this._parent.absoluteRegex.source.slice(1, -1);\r\n this._absoluteRegex = new RegExp(\r\n '^' + RdtStringUtils.joinPaths(parent, this._regex.source) + '$'\r\n );\r\n } else {\r\n this._absoluteRegex = new RegExp(\r\n '^' + RdtStringUtils.joinPaths('/', this._regex.source) + '$'\r\n );\r\n }\r\n return this._absoluteRegex;\r\n }\r\n\r\n get entryDisabled() {\r\n return this._entryDisabled;\r\n }\r\n\r\n get stateParams() {\r\n return this._stateParams;\r\n }\r\n\r\n get queryParams() {\r\n return this._queryParams;\r\n }\r\n\r\n testUrl(url: string) {\r\n return this.absoluteRegex.test(url);\r\n }\r\n\r\n get staticParams() {\r\n return { ...this._staticParams };\r\n }\r\n\r\n get hasCanBeEnteredGuard() {\r\n return this._canBeEntered !== ALWAYS_TRUE;\r\n }\r\n\r\n canBeEntered(injector?: Injector): boolean {\r\n return injector\r\n ? runInInjectionContext(injector, this._canBeEntered)\r\n : this._canBeEntered();\r\n }\r\n\r\n // Extracts url parameters from absolute url.\r\n parseAbsoluteUrl(url: string): Record<string, any> | null {\r\n const reg = this.absoluteRegex;\r\n if (!reg.test(url)) {\r\n return null;\r\n }\r\n const matches = reg.exec(url);\r\n if (matches) {\r\n const values = matches.slice(1).reverse();\r\n return this.fill(values);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n private fill(values: string[], res: Record<string, any> = {}) {\r\n const params: { [key in keyof T]?: string | number } = {};\r\n const reversedParams = this.orderedParams.slice().reverse();\r\n for (let i = 0; i < reversedParams.length && i < values.length; i++) {\r\n const key = reversedParams[i] as keyof T;\r\n const mappedKey =\r\n this.paramMappings.find((m) => m.urlName === key)?.tableName ?? key;\r\n let val: string | number = values[i];\r\n\r\n if (this._paramMap[key] === 'number') {\r\n val = parseInt(val);\r\n }\r\n params[mappedKey as keyof T] = val;\r\n }\r\n res[this.absolutePath] = params;\r\n\r\n if (values.length > reversedParams.length && this._parent) {\r\n this._parent.fill(values.slice(reversedParams.length), res);\r\n }\r\n return res;\r\n }\r\n\r\n createAbsoluteUrl(paramMap: Partial<T> = this._staticParams): string {\r\n if (!this._parent) {\r\n return this.createUrl(this.absolutePath, paramMap);\r\n } else {\r\n return RdtStringUtils.joinPaths(\r\n this._parent.createAbsoluteUrl(),\r\n this.createRelativeUrl(paramMap)\r\n );\r\n }\r\n }\r\n\r\n createRelativeUrl(paramMap: Partial<T> = this._staticParams) {\r\n return this.createUrl(this.path, paramMap);\r\n }\r\n\r\n private createUrl(path: string, paramMap: Partial<T>) {\r\n const paramNames = Object.keys(this._paramMap);\r\n paramNames.sort((a, b) => b.length - a.length);\r\n const extendedParamMap: any = { ...paramMap };\r\n\r\n this.paramMappings.forEach((mapping) => {\r\n if (mapping.tableName in paramMap) {\r\n extendedParamMap[mapping.urlName] = (paramMap as any)[\r\n mapping.tableName\r\n ];\r\n }\r\n });\r\n\r\n paramNames.forEach((param) => {\r\n path = path.replace(`:${param}`, `${extendedParamMap[param as keyof T]}`);\r\n });\r\n\r\n return path;\r\n }\r\n\r\n toAngularRoute() {\r\n if (!this._regex) {\r\n throw new Error('You have to first call .build() on route!');\r\n }\r\n return new RdtAngularRoute<T>(this);\r\n }\r\n\r\n // Provides static mapping for parameter names tableName -> urlName.\r\n // Returns new instance of RdtRoute<T> that is clone of\r\n // this route and its parents (NOT children).\r\n withParamMappings(mappings: ParamMapping[]) {\r\n const clone = this.clone();\r\n clone.paramMappings = mappings;\r\n return clone;\r\n }\r\n\r\n withStaticParams(params: T): RdtRoute<T>;\r\n withStaticParams<T2 extends object>(\r\n route: RdtRoute<T>,\r\n params: T2\r\n ): RdtRoute<T>;\r\n\r\n // Sets selected parameters for itself and parents.\r\n // Returns new instance of RdtRoute<T> that is clone of\r\n // this route and its parents (NOT children).\r\n withStaticParams<T2 extends object>(param1: RdtRoute<T2> | T, param2?: T2) {\r\n const clone = this.clone();\r\n\r\n if (param2) {\r\n const routeAbsPath = (param1 as RdtRoute<T2>).absolutePath;\r\n let current: RdtRoute | null = clone;\r\n\r\n while (current) {\r\n if (current.absolutePath === routeAbsPath) {\r\n current._staticParams = param2;\r\n }\r\n current = current._parent;\r\n }\r\n } else {\r\n clone._staticParams = param1 as T;\r\n }\r\n return clone;\r\n }\r\n\r\n withQueryParams(queryParams: Params) {\r\n const clone = this.clone();\r\n clone._queryParams = { ...queryParams };\r\n return clone;\r\n }\r\n\r\n withStateParams(stateParams: Params) {\r\n const clone = this.clone();\r\n clone._stateParams = { ...stateParams };\r\n return clone;\r\n }\r\n\r\n // Returns Partial of object that only contains properties\r\n // necessary to create this route.\r\n extractRouteParams(row: T): Partial<T> {\r\n const res: Partial<T> = {};\r\n\r\n this.orderedParams.forEach((param) => {\r\n const mapping = this.paramMappings.find((m) => m.urlName === param);\r\n const mappedParam = (mapping?.tableName ?? param) as keyof T;\r\n if (mappedParam in row) {\r\n res[mappedParam] = row[mappedParam];\r\n }\r\n });\r\n\r\n return res;\r\n }\r\n\r\n // Returns new instance of RdtRoute<T> that is clone of\r\n // this route and its parents (NOT children).\r\n clone() {\r\n const clone = new RdtRoute<T>();\r\n clone._name = this._name;\r\n clone._parent = this._parent?.clone() ?? null;\r\n clone._path = this.path;\r\n clone._entryDisabled = this._entryDisabled;\r\n clone.orderedParams = [...this.orderedParams];\r\n clone._paramMap = { ...this._paramMap };\r\n clone._regex = new RegExp(this._regex);\r\n clone.paramMappings = this.paramMappings;\r\n clone._staticParams = this._staticParams;\r\n return clone;\r\n }\r\n}\r\n","import { RdtRoute } from './rdt-route';\r\n\r\nconst DEFAULT_PARAM_TYPE = 'number';\r\n\r\nexport class RdtRouteBuilder<T extends object = any> extends RdtRoute<T> {\r\n setCanBeEntered(fn: () => boolean) {\r\n this._canBeEntered = fn;\r\n return this;\r\n }\r\n\r\n setEntryDisabled(value = true) {\r\n this._entryDisabled = value;\r\n return this;\r\n }\r\n\r\n setPath(path: string) {\r\n this._path = path;\r\n const s = path.split('/');\r\n const params: string[] = [];\r\n s.forEach((part) => {\r\n if (part.includes(':')) {\r\n const param = part.split(':')[1] as keyof T;\r\n if (param) {\r\n params.push(param as string);\r\n if (!this._paramMap[param]) {\r\n this._paramMap[param] = DEFAULT_PARAM_TYPE;\r\n }\r\n }\r\n }\r\n });\r\n this.orderedParams = params;\r\n return this;\r\n }\r\n\r\n setParam(paramName: keyof T, type: 'string' | 'number') {\r\n this._paramMap[paramName] = type;\r\n return this;\r\n }\r\n\r\n setName(name: string) {\r\n this._name = name;\r\n return this;\r\n }\r\n\r\n setChildren(...children: RdtRoute[]) {\r\n this._children = children;\r\n for (const child of children) {\r\n (child as RdtRouteBuilder)._parent = this;\r\n }\r\n return this;\r\n }\r\n\r\n build() {\r\n if (typeof this._path !== 'string') {\r\n throw new Error(\r\n 'Please provide path for route. Empty string is acceptable.'\r\n );\r\n }\r\n this.setRegex();\r\n return this as RdtRoute<T>;\r\n }\r\n\r\n private setRegex() {\r\n const params = Object.keys(this._paramMap);\r\n params.sort((a, b) => b.length - a.length);\r\n let substituted = this.path;\r\n params.forEach((p) => {\r\n const type = this._paramMap[p as keyof T];\r\n if (!type) {\r\n throw new Error('Params is not set i');\r\n }\r\n substituted = substituted.replace(`:${p}`, RdtRouteBuilder.groups[type]);\r\n });\r\n\r\n this._regex = new RegExp(substituted);\r\n }\r\n\r\n private static readonly groups = {\r\n string: '(.+)',\r\n number: '(\\\\d+)',\r\n };\r\n}\r\n","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Renderer2,\r\n SimpleChanges,\r\n inject,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport {\r\n IsActiveMatchOptions,\r\n NavigationEnd,\r\n Router,\r\n RouterModule,\r\n} from '@angular/router';\r\nimport { filter } from 'rxjs';\r\n\r\nconst EXACT_TRUE_OPTS: IsActiveMatchOptions = {\r\n paths: 'exact',\r\n queryParams: 'exact',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n};\r\n\r\nconst EXACT_FALSE_OPTS: IsActiveMatchOptions = {\r\n paths: 'subset',\r\n queryParams: 'subset',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n};\r\n\r\n@Directive({\r\n selector: '[rdtAnyRouteActive]',\r\n standalone: true,\r\n providers: [RouterModule],\r\n})\r\nexport class RdtAnyRouteActiveDirective implements OnInit, OnChanges {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly router = inject(Router);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly elRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n\r\n @Input()\r\n set anyRouteActive(data: string[] | string) {\r\n this.classes = this.parseClasses(data);\r\n }\r\n\r\n @Input()\r\n watchedRoutes: (string | string[])[] = [];\r\n\r\n @Input()\r\n set anyRouteActiveOptions(value: { exact: boolean } | IsActiveMatchOptions) {\r\n this._anyRouteActiveOptions = this.parseOptions(value);\r\n }\r\n private _anyRouteActiveOptions: IsActiveMatchOptions = EXACT_FALSE_OPTS;\r\n\r\n @Input() ariaCurrentWhenActive?:\r\n | 'page'\r\n | 'step'\r\n | 'location'\r\n | 'date'\r\n | 'time'\r\n | true\r\n | false;\r\n\r\n get isActive() {\r\n return this._isActive;\r\n }\r\n private _isActive = false;\r\n\r\n private classes: string[] = [];\r\n\r\n ngOnInit() {\r\n this.update();\r\n this.listenRouterEvents();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['anyRouteActive']?.previousValue) {\r\n const prev = this.parseClasses(changes['anyRouteActive'].previousValue);\r\n prev.forEach((c) => this.removeClass(c));\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n update() {\r\n this._isActive = this.watchedRoutes.some((route) => {\r\n const param =\r\n typeof route === 'string' ? route : this.router.createUrlTree(route);\r\n return this.router.isActive(param, this._anyRouteActiveOptions);\r\n });\r\n this.setClasses();\r\n this.setAriaCurrent();\r\n }\r\n\r\n private setAriaCurrent() {\r\n const el = this.elRef.nativeElement;\r\n\r\n if (this._isActive && this.ariaCurrentWhenActive !== undefined) {\r\n const value = this.ariaCurrentWhenActive.toString();\r\n this.renderer.setAttribute(el, 'aria-current', value);\r\n } else {\r\n this.renderer.removeAttribute(el, 'aria-current');\r\n }\r\n }\r\n\r\n private setClasses() {\r\n if (this._isActive) {\r\n this.classes.forEach((c) => this.addClass(c));\r\n } else {\r\n this.classes.forEach((c) => this.removeClass(c));\r\n }\r\n }\r\n\r\n private addClass(className: string) {\r\n this.renderer.addClass(this.elRef.nativeElement, className);\r\n }\r\n\r\n private removeClass(className: string) {\r\n this.renderer.removeClass(this.elRef.nativeElement, className);\r\n }\r\n\r\n private listenRouterEvents() {\r\n this.router.events\r\n .pipe(\r\n filter((ev) => ev instanceof NavigationEnd),\r\n takeUntilDestroyed(this.destroyRef)\r\n )\r\n .subscribe(() => this.update());\r\n }\r\n\r\n private parseClasses(data: string[] | string) {\r\n const classes = Array.isArray(data) ? data : data.split(' ');\r\n return classes.filter((c) => !!c);\r\n }\r\n\r\n private parseOptions(input: { exact: boolean } | IsActiveMatchOptions) {\r\n if ('exact' in input) {\r\n if (input.exact) {\r\n return EXACT_TRUE_OPTS;\r\n } else {\r\n return EXACT_FALSE_OPTS;\r\n }\r\n } else {\r\n return input;\r\n }\r\n }\r\n}\r\n","import {\r\n booleanAttribute,\r\n Directive,\r\n EnvironmentInjector,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { Params, RouterLink } from '@angular/router';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\n\r\n@Directive({\r\n selector: '[rdtRouterLink]',\r\n standalone: true,\r\n hostDirectives: [\r\n {\r\n directive: RouterLink,\r\n inputs: ['target'],\r\n },\r\n ],\r\n})\r\nexport class RdtRouterLinkDirective<T extends object>\r\n implements OnInit, OnChanges\r\n{\r\n private readonly routerLinkRef = inject(RouterLink, { self: true });\r\n private readonly envInjector = inject(EnvironmentInjector);\r\n\r\n @Input({ alias: 'rdtRouterLink', required: true })\r\n route!: RdtRoute<T>;\r\n\r\n @Input()\r\n target: '_blank' | '_self' | '_parent' | '_top' = '_self';\r\n\r\n @Input()\r\n params?: Partial<T>;\r\n\r\n @Input()\r\n queryParams?: Params;\r\n\r\n @Input()\r\n stateParams?: Params;\r\n\r\n @Input({ transform: booleanAttribute })\r\n disabled = false;\r\n\r\n ngOnInit() {\r\n this.update();\r\n }\r\n\r\n ngOnChanges() {\r\n this.update();\r\n }\r\n\r\n private update() {\r\n if (this.route.canBeEntered(this.envInjector) && !this.disabled) {\r\n this.setLink();\r\n } else {\r\n this.disableLink();\r\n }\r\n }\r\n\r\n private setLink() {\r\n this.routerLinkRef.routerLink = this.route.createAbsoluteUrl(this.params);\r\n this.routerLinkRef.state = this.stateParams ?? this.route.stateParams;\r\n this.routerLinkRef.queryParams = this.queryParams ?? this.route.queryParams;\r\n this.routerLinkRef.ngOnChanges({});\r\n }\r\n\r\n private disableLink() {\r\n this.routerLinkRef.routerLink = null;\r\n this.routerLinkRef.ngOnChanges({});\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { CanDeactivateFn } from '@angular/router';\r\nimport { RdtComponentGuardStoreService } from '@ngrdt/core';\r\n\r\nexport const preventDataLossGuardFn: CanDeactivateFn<any> = () => {\r\n const guardStore = inject(RdtComponentGuardStoreService);\r\n return guardStore.checkCanLeaveGlobal$();\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n GuardsCheckStart,\r\n NavigationEnd,\r\n Route,\r\n Router,\r\n} from '@angular/router';\r\nimport { preventDataLossGuardFn } from './prevent-data-loss.guard';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class GlobalRouteGuardService {\r\n constructor(private router: Router) {}\r\n\r\n // This will help ensure that routes are automatically protected by ensuring that global guards are applied to every route\r\n public ensureGlobalGuards() {\r\n let lastUrl = '';\r\n\r\n this.router.events.subscribe((e) => {\r\n // Remember last url after successful navigation\r\n if (e instanceof NavigationEnd) {\r\n lastUrl = location.href;\r\n }\r\n if (e instanceof GuardsCheckStart) {\r\n let lastChild: ActivatedRouteSnapshot = e.state.root;\r\n while (lastChild?.firstChild) {\r\n lastChild = lastChild.firstChild;\r\n }\r\n // Native back button will immediately replace url on click\r\n // Replace it back to last url before guard check is finished.\r\n // Angular will set it to correct value afterwards.\r\n history.replaceState(window.history.state, '', lastUrl);\r\n\r\n if (lastChild?.routeConfig) {\r\n this.ensureCanDeactivateGuards(lastChild.routeConfig);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private ensureCanDeactivateGuards(routeConfig: Route) {\r\n if (!routeConfig.canDeactivate) {\r\n routeConfig.canDeactivate = [];\r\n }\r\n\r\n const canDeactivateGuards = routeConfig.canDeactivate;\r\n\r\n // ensure that the \"MySpecialCanDeactivateGuard\" is in effect.\r\n if (!canDeactivateGuards.find((o) => o == preventDataLossGuardFn)) {\r\n canDeactivateGuards.push(preventDataLossGuardFn);\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export * from './lib/services/rdt-confirm-data-loss.service';
|
|
2
2
|
export * from './lib/services/rdt-router.service';
|
|
3
3
|
export * from './lib/services/rdt-routes.token';
|
|
4
|
+
export * from './lib/rdt-route/constants';
|
|
5
|
+
export * from './lib/rdt-route/rdt-angular-route';
|
|
4
6
|
export * from './lib/rdt-route/rdt-route';
|
|
5
7
|
export * from './lib/rdt-route/rdt-route-builder';
|
|
6
|
-
export * from './lib/
|
|
7
|
-
export * from './lib/rdt-route/constants';
|
|
8
|
+
export * from './lib/directives/rdt-any-route-active.directive';
|
|
8
9
|
export * from './lib/directives/rdt-router-link.directive';
|
|
10
|
+
export * from './lib/guards/global-route-guard.service';
|
|
11
|
+
export * from './lib/guards/prevent-data-loss.guard';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { OnChanges, OnInit, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { IsActiveMatchOptions } from '@angular/router';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class RdtAnyRouteActiveDirective implements OnInit, OnChanges {
|
|
5
|
+
private readonly destroyRef;
|
|
6
|
+
private readonly router;
|
|
7
|
+
private readonly renderer;
|
|
8
|
+
private readonly elRef;
|
|
9
|
+
set anyRouteActive(data: string[] | string);
|
|
10
|
+
watchedRoutes: (string | string[])[];
|
|
11
|
+
set anyRouteActiveOptions(value: {
|
|
12
|
+
exact: boolean;
|
|
13
|
+
} | IsActiveMatchOptions);
|
|
14
|
+
private _anyRouteActiveOptions;
|
|
15
|
+
ariaCurrentWhenActive?: 'page' | 'step' | 'location' | 'date' | 'time' | true | false;
|
|
16
|
+
get isActive(): boolean;
|
|
17
|
+
private _isActive;
|
|
18
|
+
private classes;
|
|
19
|
+
ngOnInit(): void;
|
|
20
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
21
|
+
update(): void;
|
|
22
|
+
private setAriaCurrent;
|
|
23
|
+
private setClasses;
|
|
24
|
+
private addClass;
|
|
25
|
+
private removeClass;
|
|
26
|
+
private listenRouterEvents;
|
|
27
|
+
private parseClasses;
|
|
28
|
+
private parseOptions;
|
|
29
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RdtAnyRouteActiveDirective, never>;
|
|
30
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RdtAnyRouteActiveDirective, "[rdtAnyRouteActive]", never, { "anyRouteActive": { "alias": "anyRouteActive"; "required": false; }; "watchedRoutes": { "alias": "watchedRoutes"; "required": false; }; "anyRouteActiveOptions": { "alias": "anyRouteActiveOptions"; "required": false; }; "ariaCurrentWhenActive": { "alias": "ariaCurrentWhenActive"; "required": false; }; }, {}, never, never, true, never>;
|
|
31
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Router } from '@angular/router';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class GlobalRouteGuardService {
|
|
4
|
+
private router;
|
|
5
|
+
constructor(router: Router);
|
|
6
|
+
ensureGlobalGuards(): void;
|
|
7
|
+
private ensureCanDeactivateGuards;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GlobalRouteGuardService, never>;
|
|
9
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<GlobalRouteGuardService>;
|
|
10
|
+
}
|
|
@@ -2,6 +2,7 @@ import { ParamMapping, ParamTypeMap } from './utils';
|
|
|
2
2
|
import { Params } from '@angular/router';
|
|
3
3
|
import { RdtAngularRoute } from './rdt-angular-route';
|
|
4
4
|
import { Injector } from '@angular/core';
|
|
5
|
+
export declare function ALWAYS_TRUE(): boolean;
|
|
5
6
|
export declare class RdtRoute<T extends object = any> {
|
|
6
7
|
protected orderedParams: string[];
|
|
7
8
|
protected _paramMap: ParamTypeMap<T>;
|
|
@@ -31,6 +32,7 @@ export declare class RdtRoute<T extends object = any> {
|
|
|
31
32
|
get queryParams(): Params;
|
|
32
33
|
testUrl(url: string): boolean;
|
|
33
34
|
get staticParams(): Partial<T>;
|
|
35
|
+
get hasCanBeEnteredGuard(): boolean;
|
|
34
36
|
canBeEntered(injector?: Injector): boolean;
|
|
35
37
|
parseAbsoluteUrl(url: string): Record<string, any> | null;
|
|
36
38
|
private fill;
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngrdt/router",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^18.2.0",
|
|
6
6
|
"@angular/core": "^18.2.0",
|
|
7
|
-
"@ngrdt/utils": "^0.0.
|
|
7
|
+
"@ngrdt/utils": "^0.0.7",
|
|
8
|
+
"@ngrdt/core": "0.0.4",
|
|
9
|
+
"@angular/router": "^18.2.0",
|
|
10
|
+
"rxjs": "~7.8.0"
|
|
8
11
|
},
|
|
9
12
|
"sideEffects": false,
|
|
10
13
|
"module": "fesm2022/ngrdt-router.mjs",
|