@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 CHANGED
@@ -1,9 +1,11 @@
1
1
  # @ngrdt/router
2
2
 
3
3
  ### Instalation
4
- ```npm install @ngrdt/router```
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(Dp3RouterService);
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/rdt-route/rdt-angular-route';
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUVoRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDJCQUEyQixDQUFDO0FBRTFDLGNBQWMsNENBQTRDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9yZHQtY29uZmlybS1kYXRhLWxvc3Muc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3JkdC1yb3V0ZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3JkdC1yb3V0ZXMudG9rZW4nO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmR0LXJvdXRlL3JkdC1yb3V0ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JkdC1yb3V0ZS9yZHQtcm91dGUtYnVpbGRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JkdC1yb3V0ZS9yZHQtYW5ndWxhci1yb3V0ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JkdC1yb3V0ZS9jb25zdGFudHMnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9yZHQtcm91dGVyLWxpbmsuZGlyZWN0aXZlJztcclxuIl19
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 = () => true;
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 Dp3Route<T> that is clone 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 Dp3Route<T> that is clone 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 Dp3Route<T> that is clone 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3JkdC1yb3V0ZS9yZHQtcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUc5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFZLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhFLE1BQU0sT0FBTyxRQUFRO0lBQ1QsYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUM3QixTQUFTLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxNQUFNLENBQVU7SUFDaEIsYUFBYSxHQUFtQixFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFlLEVBQUUsQ0FBQztJQUMvQixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLFlBQVksR0FBVyxFQUFFLENBQUM7SUFFMUIsS0FBSyxDQUFVO0lBQ2YsS0FBSyxDQUFVO0lBQ2YsT0FBTyxHQUFvQixJQUFJLENBQUM7SUFDaEMsU0FBUyxHQUFlLEVBQUUsQ0FBQztJQUMzQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLGFBQWEsR0FBa0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0lBRTVDLGNBQWMsQ0FBVTtJQUVoQyxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNB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SyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDOUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZHRTdHJpbmdVdGlscyB9IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IFN0YXRpY1JvdXRlUGFyYW1zLCBQYXJhbU1hcHBpbmcsIFBhcmFtVHlwZU1hcCB9IGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgeyBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRBbmd1bGFyUm91dGUgfSBmcm9tICcuL3JkdC1hbmd1bGFyLXJvdXRlJztcclxuaW1wb3J0IHsgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJkdFJvdXRlPFQgZXh0ZW5kcyBvYmplY3QgPSBhbnk+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 { RDT_ROUTES_TOKEN } from './rdt-routes.token';
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(RDT_ROUTES_TOKEN, { optional: true });
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 RDT_ROUTES_TOKEN with RdtRoute[].');
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 RDT_ROUTES_TOKEN = new InjectionToken('RDT_ROUTES_TOKEN');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlcy50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9yb3V0ZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZHQtcm91dGVzLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQ2hELGtCQUFrQixDQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuLi9yZHQtcm91dGUvcmR0LXJvdXRlJztcclxuXHJcbmV4cG9ydCBjb25zdCBSRFRfUk9VVEVTX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPFJkdFJvdXRlW10+KFxyXG4gICdSRFRfUk9VVEVTX1RPS0VOJ1xyXG4pO1xyXG4iXX0=
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, booleanAttribute, Directive, Input } from '@angular/core';
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 RDT_ROUTES_TOKEN = new InjectionToken('RDT_ROUTES_TOKEN');
20
+ const RDT_ROUTES_PROVIDER = new InjectionToken('RDT_ROUTES_PROVIDER');
19
21
 
20
22
  class RdtRouterService {
21
- allRoutes = inject(RDT_ROUTES_TOKEN, { optional: true });
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 RDT_ROUTES_TOKEN with RdtRoute[].');
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 = () => true;
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 Dp3Route<T> that is clone 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 Dp3Route<T> that is clone 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 Dp3Route<T> that is clone 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, RDT_ROUTES_TOKEN, RdtAngularRoute, RdtConfirmDataLossService, RdtConfirmDataLossServiceAlert, RdtNavigationSource, RdtRoute, RdtRouteBuilder, RdtRouterLinkDirective, RdtRouterService };
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":";;;;;;;;;;MAGa,6BAA6B,GACxC,IAAI,cAAc,CAChB,+BAA+B,EAC/B,EAAE,OAAO,EAAE,MAAM,IAAI,8BAA8B,EAAE,EAAE,EACvD;MAEkB,yBAAyB,CAAA;AAE9C,CAAA;AAEK,MAAO,8BAA+B,SAAQ,yBAAyB,CAAA;IAClE,eAAe,GAAA;AACtB,QAAA,OAAO,KAAK,CAAC,MACX,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,CACzD,CAAC;KACH;AACF;;MChBY,mBAAmB,GAAG,IAAI,cAAc,CACnD,qBAAqB;;MCYV,gBAAgB,CAAA;IAClB,SAAS,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAEpD,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAElE,YAAY,GAAkB,IAAI,CAAC;IACnC,WAAW,GAAkB,IAAI,CAAC;AAE1C,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;AAED,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAED,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;KAC5E;IAED,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;KAC1E;IAEQ,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAC/C,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,aAAa,CAAC,CACb,CAAC;AAEtB,IAAA,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhE,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AAC3B,YAAA,OAAO,CAAC,IAAI,CACV,oFAAoF,CACrF,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;SACrB;QAED,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAClC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;AACrC,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC;AAC3B,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,QAAQ,CACN,IAAiB,EACjB,MAAmB,EACnB,SAAkD,OAAO,EAAA;QAEzD,MAAM,GAAG,GAAG,MAAM;AAChB,cAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAChC,cAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAE7B,QAAA,IAAI,MAAM,KAAK,OAAO,EAAE;YACtB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE;gBACjC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,KAAK,EAAE,IAAI,CAAC,WAAW;AACxB,aAAA,CAAC,CAAC;SACJ;AAED,QAAA,MAAM,YAAY,GAAG,cAAc,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1E,QAAA,MAAM,cAAc,GAAG,cAAc,CAAC,iBAAiB,CACrD,YAAY,EACZ,IAAI,CAAC,WAAW,CACjB,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,GAAG,EAAE;AACN,YAAA,GAAW,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC;SAChD;AACD,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC9B;AAED,IAAA,YAAY,CAAC,MAA0B,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAC9B,cAAc,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,EAC1D;YACE,KAAK,EAAE,MAAM,EAAE,KAAK;AACrB,SAAA,CACF,CAAC;KACH;IAED,gBAAgB,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClC,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAI,MAAM,EAAE;AACV,oBAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;iBAC1B;aACF;SACF;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,YAAY,CAAC,MAA0B,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACvC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,KAAK,GAAoB,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1E,YAAA,GAAG;AACD,gBAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;AACvB,aAAC,QAAQ,KAAK,IAAI,KAAK,CAAC,aAAa,EAAE;;YAGvC,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;aAClC;YACD,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,MAAM,CAAC,KAAK,EAAE;oBAChB,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBAC7C;AACD,gBAAA,IAAI,MAAM,CAAC,KAAK,EAAE;oBAChB,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBAC7C;aACF;AACD,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC7B;aAAM;AACL,YAAA,OAAO,CAAC,IAAI,CACV,CAAA,oBAAA,EAAuB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAuC,qCAAA,CAAA,CACnF,CAAC;AACF,YAAA,OAAO,IAAI,CAAC;SACb;KACF;AAED,IAAA,gBAAgB,CAAC,YAAuB,EAAA;QACtC,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;AAC9C,gBAAA,OAAO,EAAE,CAAC;aACX;AACD,YAAA,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;SAC7B;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACjC,QAAA,OAAO,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;KAC3C;AAED,IAAA,yBAAyB,CAAC,KAAe,EAAA;QACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC;KACb;IAED,iBAAiB,CAAC,GAAG,UAAoB,EAAA;AACvC,QAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,OAAA,CAAS,EAAE,GAAG,CAAC,CAAC;AAErE,QAAA,OAAO,OAAO,CAAC,YAAY,CACzB,IAAI,EACJ,EAAE,EACF,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAC1E,CAAC;KACH;uGAtJU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;2FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ICfW,oBAEX;AAFD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AAC3B,CAAC,EAFW,mBAAmB,KAAnB,mBAAmB,GAE9B,EAAA,CAAA,CAAA;;MCoBY,eAAe,CAAA;AAClB,IAAA,KAAK,CAAc;IACnB,QAAQ,GAAY,EAAE,CAAC;;AAGvB,IAAA,YAAY,CAAwB;AACpC,IAAA,SAAS,CAAa;IACtB,SAAS,GAAwC,EAAE,CAAC;IACpD,SAAS,GAA0C,EAAE,CAAC;IACtD,WAAW,GAAoB,EAAE,CAAC;IAClC,gBAAgB,GAAyB,EAAE,CAAC;IAC5C,aAAa,GAAyB,EAAE,CAAC;AACzC,IAAA,qBAAqB,CAAyB;AAEtD,IAAA,WAAA,CAAY,KAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;IAED,OAAO,CAAC,GAAG,SAA0B,EAAA;QACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;AAClC,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,SAAS,CAAC,QAA8B,EAAA;AACtC,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;AAC7B,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,YAAY,CAAC,IAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC;KACb;IAED,WAAW,CAAC,GAAG,MAAe,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;AACvB,QAAA,OAAO,IAAI,CAAC;KACb;IAED,UAAU,CAAC,SAAiB,EAAE,QAA4B,EAAA;AACxD,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC;KACb;IAED,cAAc,CAAC,GAAG,GAAoB,EAAA;QACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9B,QAAA,OAAO,IAAI,CAAC;KACb;IAED,gBAAgB,CAAC,GAAG,GAA2B,EAAA;QAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AAChC,QAAA,OAAO,IAAI,CAAC;KACb;IAED,mBAAmB,CAAC,GAAG,GAAyB,EAAA;QAC9C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,wBAAwB,CAAC,KAA4B,EAAA;AACnD,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC;KACb;IAED,KAAK,GAAA;QACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAE1B,QAAA,IAAI,GAAG,GAAU;AACf,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACtB,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;SAC7B,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;SAChC;AAAM,aAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AAC5B,YAAA,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;SACtC;QAED,GAAG,CAAC,IAAI,GAAG;AACT,YAAA,UAAU,EAAE;AACV,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;AACtB,gBAAA,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;AACjC,gBAAA,iBAAiB,EAAE;oBACjB,GAAG,EAAE,mBAAmB,CAAC,UAAU;AACpC,iBAAA;AACF,aAAA;SACF,CAAC;QAEF,MAAM,KAAK,GAAG,MAAK;AACjB,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAC7C,YAAA,OAAO,qBAAqB,CAC1B,QAAQ,EACR,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CACzC,CAAC;AACJ,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAElC,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACnC,QAAA,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;;QAmBvC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;AACvC,gBAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AACtB,gBAAA,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;AACd,gBAAA,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;AACvB,gBAAA,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC;AACzB,gBAAA,GAAG,GAAG;AACJ,oBAAA,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,oBAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;iBAC7B,CAAC;aACH;iBAAM;AACL,gBAAA,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;aAC9B;SACF;AAED,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,YAAA,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;SAC9B;AAED,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;SACxD;AAED,QAAA,OAAO,GAAG,CAAC;KACZ;IAEO,WAAW,GAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACrC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAChD,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAY,CAAC,KAAK,QAAQ,CAC3C,CAAC;QACF,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,OAAO,SAAS,CAAC;SAClB;AACD,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AAC7D,QAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAI,CAAA,EAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC,CAAC;QACzD,OAAO;AACL,YAAA,CAAC,KAAY,EAAE,QAAsB,KAAI;gBACvC,MAAM,IAAI,GAAG,QAAQ;AAClB,qBAAA,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC;qBAC5B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;qBAClB,IAAI,CAAC,GAAG,CAAC,CAAC;AACb,gBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACzB;SACF,CAAC;KACH;IAEO,kBAAkB,GAAA;;;QAGxB,IACE,CAAC,IAAI,CAAC,YAAY;AAClB,aAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAC5D;AACA,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;AACrD,gBAAA,MAAM,IAAI,KAAK,CACb,CAAA,SAAA,EAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA,KAAA,EACzB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MACtB,CAAA,mCAAA,EACE,IAAI,CAAC,QAAQ,CAAC,MAChB,CAAA,qJAAA,EAAwJ,IAAI,CAAC,KAAK,CAAC,QAAQ;qBACxK,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC;AACpB,qBAAA,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAChB,CAAC;aACH;AAAM,iBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAC5D,MAAM,IAAI,KAAK,CACb,CAAY,SAAA,EAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CACzB,KAAA,EAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MACtB,CAAA,mCAAA,EACE,IAAI,CAAC,QAAQ,CAAC,MAChB,CAAA,4JAAA,EAA+J,IAAI,CAAC,QAAQ;qBACzK,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC;AACpB,qBAAA,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAChB,CAAC;aACH;AACD,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAK,CAAC,CAAC;AAC/C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;YACpD,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,EAAE,CAAC,IAAI,EAAE,CAAC;AACV,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;oBACnB,MAAM,IAAI,KAAK,CACb,CAAA;4CACgC,EAAE,CAAC,CAAC,CAAC,CAAO,IAAA,EAAA,EAAE,CAAC,CAAC,CAAC,CAAE,CAAA,CACpD,CAAC;iBACH;aACF;SACF;KACF;AACF;;SClOe,WAAW,GAAA;AACzB,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;MAEY,QAAQ,CAAA;IACT,aAAa,GAAa,EAAE,CAAC;IAC7B,SAAS,GAAoB,EAAE,CAAC;AAChC,IAAA,MAAM,CAAU;IAChB,aAAa,GAAmB,EAAE,CAAC;IACnC,aAAa,GAAe,EAAE,CAAC;IAC/B,YAAY,GAAW,EAAE,CAAC;IAC1B,YAAY,GAAW,EAAE,CAAC;AAE1B,IAAA,KAAK,CAAU;AACf,IAAA,KAAK,CAAU;IACf,OAAO,GAAoB,IAAI,CAAC;IAChC,SAAS,GAAe,EAAE,CAAC;IAC3B,cAAc,GAAG,KAAK,CAAC;IACvB,aAAa,GAAkB,WAAW,CAAC;AAE7C,IAAA,cAAc,CAAU;AAEhC,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;AAED,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AAED,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC;KACvD;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5D;AAED,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,OAAO,IAAI,CAAC,cAAc,CAAC;SAC5B;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;;AAEhB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,cAAc,GAAG,IAAI,MAAM,CAC9B,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CACjE,CAAC;SACH;aAAM;YACL,IAAI,CAAC,cAAc,GAAG,IAAI,MAAM,CAC9B,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAC9D,CAAC;SACH;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;AAED,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;AAED,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;AAED,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;AAED,IAAA,OAAO,CAAC,GAAW,EAAA;QACjB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACrC;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;KAClC;AAED,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,aAAa,KAAK,WAAW,CAAC;KAC3C;AAED,IAAA,YAAY,CAAC,QAAmB,EAAA;AAC9B,QAAA,OAAO,QAAQ;cACX,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;AACrD,cAAE,IAAI,CAAC,aAAa,EAAE,CAAC;KAC1B;;AAGD,IAAA,gBAAgB,CAAC,GAAW,EAAA;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC;SACb;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,OAAO,EAAE;YACX,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC1C,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1B;aAAM;AACL,YAAA,OAAO,IAAI,CAAC;SACb;KACF;AAEO,IAAA,IAAI,CAAC,MAAgB,EAAE,GAAA,GAA2B,EAAE,EAAA;QAC1D,MAAM,MAAM,GAA2C,EAAE,CAAC;QAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnE,YAAA,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAY,CAAC;YACzC,MAAM,SAAS,GACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,EAAE,SAAS,IAAI,GAAG,CAAC;AACtE,YAAA,IAAI,GAAG,GAAoB,MAAM,CAAC,CAAC,CAAC,CAAC;YAErC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;AACpC,gBAAA,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;aACrB;AACD,YAAA,MAAM,CAAC,SAAoB,CAAC,GAAG,GAAG,CAAC;SACpC;AACD,QAAA,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;AAEhC,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AACzD,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;SAC7D;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AAED,IAAA,iBAAiB,CAAC,QAAA,GAAuB,IAAI,CAAC,aAAa,EAAA;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;SACpD;aAAM;AACL,YAAA,OAAO,cAAc,CAAC,SAAS,CAC7B,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAChC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAC;SACH;KACF;AAED,IAAA,iBAAiB,CAAC,QAAA,GAAuB,IAAI,CAAC,aAAa,EAAA;QACzD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;KAC5C;IAEO,SAAS,CAAC,IAAY,EAAE,QAAoB,EAAA;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/C,QAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/C,QAAA,MAAM,gBAAgB,GAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC;QAE9C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACrC,YAAA,IAAI,OAAO,CAAC,SAAS,IAAI,QAAQ,EAAE;AACjC,gBAAA,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAI,QAAgB,CACnD,OAAO,CAAC,SAAS,CAClB,CAAC;aACH;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC3B,YAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAA,CAAE,EAAE,CAAA,EAAG,gBAAgB,CAAC,KAAgB,CAAC,CAAA,CAAE,CAAC,CAAC;AAC5E,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,IAAI,CAAC;KACb;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;SAC9D;AACD,QAAA,OAAO,IAAI,eAAe,CAAI,IAAI,CAAC,CAAC;KACrC;;;;AAKD,IAAA,iBAAiB,CAAC,QAAwB,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC3B,QAAA,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC;AAC/B,QAAA,OAAO,KAAK,CAAC;KACd;;;;IAWD,gBAAgB,CAAoB,MAAwB,EAAE,MAAW,EAAA;AACvE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAE3B,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,YAAY,GAAI,MAAuB,CAAC,YAAY,CAAC;YAC3D,IAAI,OAAO,GAAoB,KAAK,CAAC;YAErC,OAAO,OAAO,EAAE;AACd,gBAAA,IAAI,OAAO,CAAC,YAAY,KAAK,YAAY,EAAE;AACzC,oBAAA,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC;iBAChC;AACD,gBAAA,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;aAC3B;SACF;aAAM;AACL,YAAA,KAAK,CAAC,aAAa,GAAG,MAAW,CAAC;SACnC;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,eAAe,CAAC,WAAmB,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC3B,QAAA,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;AACxC,QAAA,OAAO,KAAK,CAAC;KACd;AAED,IAAA,eAAe,CAAC,WAAmB,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC3B,QAAA,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;AACxC,QAAA,OAAO,KAAK,CAAC;KACd;;;AAID,IAAA,kBAAkB,CAAC,GAAM,EAAA;QACvB,MAAM,GAAG,GAAe,EAAE,CAAC;QAE3B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACnC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;YACpE,MAAM,WAAW,IAAI,OAAO,EAAE,SAAS,IAAI,KAAK,CAAY,CAAC;AAC7D,YAAA,IAAI,WAAW,IAAI,GAAG,EAAE;gBACtB,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;aACrC;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,GAAG,CAAC;KACZ;;;IAID,KAAK,GAAA;AACH,QAAA,MAAM,KAAK,GAAG,IAAI,QAAQ,EAAK,CAAC;AAChC,QAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;AAC9C,QAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,KAAK,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,KAAK,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACxC,KAAK,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,QAAA,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACzC,QAAA,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AACzC,QAAA,OAAO,KAAK,CAAC;KACd;AACF;;AC1QD,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAE9B,MAAO,eAAwC,SAAQ,QAAW,CAAA;AACtE,IAAA,eAAe,CAAC,EAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,QAAA,OAAO,IAAI,CAAC;KACb;IAED,gBAAgB,CAAC,KAAK,GAAG,IAAI,EAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,OAAO,CAAC,IAAY,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;AAC5B,QAAA,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACjB,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAY,CAAC;gBAC5C,IAAI,KAAK,EAAE;AACT,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AAC1B,wBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,kBAAkB,CAAC;qBAC5C;iBACF;aACF;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC;KACb;IAED,QAAQ,CAAC,SAAkB,EAAE,IAAyB,EAAA;AACpD,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,OAAO,CAAC,IAAY,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,OAAO,IAAI,CAAC;KACb;IAED,WAAW,CAAC,GAAG,QAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,QAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;AAC3B,YAAA,KAAyB,CAAC,OAAO,GAAG,IAAI,CAAC;SAC3C;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,KAAK,GAAA;AACH,QAAA,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;AAClC,YAAA,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;SACH;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,QAAA,OAAO,IAAmB,CAAC;KAC5B;IAEO,QAAQ,GAAA;QACd,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3C,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3C,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAY,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;aACxC;AACD,YAAA,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,CAAE,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC;KACvC;IAEO,OAAgB,MAAM,GAAG;AAC/B,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,MAAM,EAAE,QAAQ;KACjB,CAAC;;;AC5DJ,MAAM,eAAe,GAAyB;AAC5C,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,YAAY,EAAE,SAAS;CACxB,CAAC;AAEF,MAAM,gBAAgB,GAAyB;AAC7C,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,WAAW,EAAE,QAAQ;AACrB,IAAA,QAAQ,EAAE,SAAS;AACnB,IAAA,YAAY,EAAE,SAAS;CACxB,CAAC;MAOW,0BAA0B,CAAA;AACpB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAChC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACxB,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7B,IAAA,KAAK,GAA4B,MAAM,CAAC,UAAU,CAAC,CAAC;IAErE,IACI,cAAc,CAAC,IAAuB,EAAA;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KACxC;IAGD,aAAa,GAA0B,EAAE,CAAC;IAE1C,IACI,qBAAqB,CAAC,KAAgD,EAAA;QACxE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KACxD;IACO,sBAAsB,GAAyB,gBAAgB,CAAC;AAE/D,IAAA,qBAAqB,CAOpB;AAEV,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IACO,SAAS,GAAG,KAAK,CAAC;IAElB,OAAO,GAAa,EAAE,CAAC;IAE/B,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE,aAAa,EAAE;AAC5C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAAC;AACxE,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1C;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;YACjD,MAAM,KAAK,GACT,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACvE,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAClE,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAEO,cAAc,GAAA;AACpB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAEpC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE;YAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;SACvD;aAAM;YACL,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;SACnD;KACF;IAEO,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/C;aAAM;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;SAClD;KACF;AAEO,IAAA,QAAQ,CAAC,SAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;KAC7D;AAEO,IAAA,WAAW,CAAC,SAAiB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;KAChE;IAEO,kBAAkB,GAAA;QACxB,IAAI,CAAC,MAAM,CAAC,MAAM;AACf,aAAA,IAAI,CACH,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,aAAa,CAAC,EAC3C,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACpC;aACA,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACnC;AAEO,IAAA,YAAY,CAAC,IAAuB,EAAA;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7D,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACnC;AAEO,IAAA,YAAY,CAAC,KAAgD,EAAA;AACnE,QAAA,IAAI,OAAO,IAAI,KAAK,EAAE;AACpB,YAAA,IAAI,KAAK,CAAC,KAAK,EAAE;AACf,gBAAA,OAAO,eAAe,CAAC;aACxB;iBAAM;AACL,gBAAA,OAAO,gBAAgB,CAAC;aACzB;SACF;aAAM;AACL,YAAA,OAAO,KAAK,CAAC;SACd;KACF;uGA/GU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,SAAA,EAF1B,CAAC,YAAY,CAAC,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEd,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,CAAC,YAAY,CAAC;AAC1B,iBAAA,CAAA;8BAQK,cAAc,EAAA,CAAA;sBADjB,KAAK;gBAMN,aAAa,EAAA,CAAA;sBADZ,KAAK;gBAIF,qBAAqB,EAAA,CAAA;sBADxB,KAAK;gBAMG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;;;MCrCK,sBAAsB,CAAA;IAGhB,aAAa,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,IAAA,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAG3D,IAAA,KAAK,CAAe;IAGpB,MAAM,GAA4C,OAAO,CAAC;AAG1D,IAAA,MAAM,CAAc;AAGpB,IAAA,WAAW,CAAU;AAGrB,IAAA,WAAW,CAAU;IAGrB,QAAQ,GAAG,KAAK,CAAC;IAEjB,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAED,WAAW,GAAA;QACT,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAEO,MAAM,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;aAAM;YACL,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;KACF;IAEO,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AACtE,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAC5E,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;KACpC;IAEO,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;KACpC;uGAlDU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,+NAqBb,gBAAgB,CAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FArBzB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAVlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,cAAc,EAAE;AACd,wBAAA;AACE,4BAAA,SAAS,EAAE,UAAU;4BACrB,MAAM,EAAE,CAAC,QAAQ,CAAC;AACnB,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAA;8BAQC,KAAK,EAAA,CAAA;sBADJ,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAIjD,MAAM,EAAA,CAAA;sBADL,KAAK;gBAIN,MAAM,EAAA,CAAA;sBADL,KAAK;gBAIN,WAAW,EAAA,CAAA;sBADV,KAAK;gBAIN,WAAW,EAAA,CAAA;sBADV,KAAK;gBAIN,QAAQ,EAAA,CAAA;sBADP,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;;;ACvCjC,MAAM,sBAAsB,GAAyB,MAAK;AAC/D,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC;AACzD,IAAA,OAAO,UAAU,CAAC,oBAAoB,EAAE,CAAC;AAC3C;;MCIa,uBAAuB,CAAA;AACd,IAAA,MAAA,CAAA;AAApB,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAAI;;IAG/B,kBAAkB,GAAA;QACvB,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;;AAEjC,YAAA,IAAI,CAAC,YAAY,aAAa,EAAE;AAC9B,gBAAA,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;aACzB;AACD,YAAA,IAAI,CAAC,YAAY,gBAAgB,EAAE;AACjC,gBAAA,IAAI,SAAS,GAA2B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AACrD,gBAAA,OAAO,SAAS,EAAE,UAAU,EAAE;AAC5B,oBAAA,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC;iBAClC;;;;AAID,gBAAA,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AAExD,gBAAA,IAAI,SAAS,EAAE,WAAW,EAAE;AAC1B,oBAAA,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;iBACvD;aACF;AACH,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,yBAAyB,CAAC,WAAkB,EAAA;AAClD,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AAC9B,YAAA,WAAW,CAAC,aAAa,GAAG,EAAE,CAAC;SAChC;AAED,QAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,aAAa,CAAC;;AAGtD,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,sBAAsB,CAAC,EAAE;AACjE,YAAA,mBAAmB,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;SAClD;KACF;uGAxCU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA;;2FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACVlC;;AAEG;;;;"}
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/rdt-route/rdt-angular-route';
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
+ }
@@ -0,0 +1,2 @@
1
+ import { CanDeactivateFn } from '@angular/router';
2
+ export declare const preventDataLossGuardFn: CanDeactivateFn<any>;
@@ -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;
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { RdtRoute } from '../rdt-route/rdt-route';
3
- export declare const RDT_ROUTES_TOKEN: InjectionToken<RdtRoute<any>[]>;
3
+ export declare const RDT_ROUTES_PROVIDER: InjectionToken<RdtRoute<any>[]>;
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "@ngrdt/router",
3
- "version": "0.0.4",
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.1"
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",