@ngrdt/router 0.0.17 → 0.0.18
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 +254 -254
- package/fesm2022/ngrdt-router.mjs +90 -23
- package/fesm2022/ngrdt-router.mjs.map +1 -1
- package/index.d.ts +416 -12
- package/package.json +1 -3
- package/esm2022/index.mjs +0 -13
- package/esm2022/lib/directives/rdt-any-route-active.directive.mjs +0 -126
- package/esm2022/lib/directives/rdt-router-link.directive.mjs +0 -69
- package/esm2022/lib/guards/global-route-guard.service.mjs +0 -51
- package/esm2022/lib/guards/prevent-data-loss.guard.mjs +0 -7
- package/esm2022/lib/rdt-route/constants.mjs +0 -5
- package/esm2022/lib/rdt-route/rdt-angular-route.mjs +0 -196
- package/esm2022/lib/rdt-route/rdt-route-builder.mjs +0 -112
- package/esm2022/lib/rdt-route/rdt-route.mjs +0 -308
- package/esm2022/lib/rdt-route/utils.mjs +0 -15
- package/esm2022/lib/services/rdt-cannot-be-entered.token.mjs +0 -7
- package/esm2022/lib/services/rdt-confirm-data-loss.service.mjs +0 -11
- package/esm2022/lib/services/rdt-router.service.mjs +0 -161
- package/esm2022/lib/services/rdt-routes.token.mjs +0 -3
- package/esm2022/ngrdt-router.mjs +0 -5
- package/lib/directives/rdt-any-route-active.directive.d.ts +0 -34
- package/lib/directives/rdt-router-link.directive.d.ts +0 -23
- package/lib/guards/global-route-guard.service.d.ts +0 -10
- package/lib/guards/prevent-data-loss.guard.d.ts +0 -2
- package/lib/rdt-route/constants.d.ts +0 -3
- package/lib/rdt-route/rdt-angular-route.d.ts +0 -29
- package/lib/rdt-route/rdt-route-builder.d.ts +0 -46
- package/lib/rdt-route/rdt-route.d.ts +0 -138
- package/lib/rdt-route/utils.d.ts +0 -21
- package/lib/services/rdt-cannot-be-entered.token.d.ts +0 -7
- package/lib/services/rdt-confirm-data-loss.service.d.ts +0 -9
- package/lib/services/rdt-router.service.d.ts +0 -61
- package/lib/services/rdt-routes.token.d.ts +0 -3
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { booleanAttribute, Directive, EnvironmentInjector, inject, Input, } from '@angular/core';
|
|
2
|
-
import { RouterLink } from '@angular/router';
|
|
3
|
-
import { RdtRoute } from '../rdt-route/rdt-route';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/router";
|
|
6
|
-
export class RdtRouterLinkDirective {
|
|
7
|
-
routerLinkRef = inject(RouterLink, { self: true });
|
|
8
|
-
envInjector = inject(EnvironmentInjector);
|
|
9
|
-
route;
|
|
10
|
-
target = '_self';
|
|
11
|
-
params;
|
|
12
|
-
queryParams;
|
|
13
|
-
stateParams;
|
|
14
|
-
disabled = false;
|
|
15
|
-
ngOnInit() {
|
|
16
|
-
this.update();
|
|
17
|
-
}
|
|
18
|
-
ngOnChanges() {
|
|
19
|
-
this.update();
|
|
20
|
-
}
|
|
21
|
-
update() {
|
|
22
|
-
if (this.route.canBeEntered(this.envInjector) && !this.disabled) {
|
|
23
|
-
this.setLink();
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
this.disableLink();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
setLink() {
|
|
30
|
-
this.routerLinkRef.routerLink = this.route.createAbsoluteUrl(this.params);
|
|
31
|
-
this.routerLinkRef.state = this.stateParams ?? this.route.stateParams;
|
|
32
|
-
this.routerLinkRef.queryParams = this.queryParams ?? this.route.queryParams;
|
|
33
|
-
this.routerLinkRef.ngOnChanges({});
|
|
34
|
-
}
|
|
35
|
-
disableLink() {
|
|
36
|
-
this.routerLinkRef.routerLink = null;
|
|
37
|
-
this.routerLinkRef.ngOnChanges({});
|
|
38
|
-
}
|
|
39
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtRouterLinkDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
40
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.7", type: RdtRouterLinkDirective, isStandalone: true, selector: "[rdtRouterLink]", inputs: { route: ["rdtRouterLink", "route"], target: "target", params: "params", queryParams: "queryParams", stateParams: "stateParams", disabled: ["disabled", "disabled", booleanAttribute] }, usesOnChanges: true, hostDirectives: [{ directive: i1.RouterLink, inputs: ["target", "target"] }], ngImport: i0 });
|
|
41
|
-
}
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtRouterLinkDirective, decorators: [{
|
|
43
|
-
type: Directive,
|
|
44
|
-
args: [{
|
|
45
|
-
selector: '[rdtRouterLink]',
|
|
46
|
-
standalone: true,
|
|
47
|
-
hostDirectives: [
|
|
48
|
-
{
|
|
49
|
-
directive: RouterLink,
|
|
50
|
-
inputs: ['target'],
|
|
51
|
-
},
|
|
52
|
-
],
|
|
53
|
-
}]
|
|
54
|
-
}], propDecorators: { route: [{
|
|
55
|
-
type: Input,
|
|
56
|
-
args: [{ alias: 'rdtRouterLink', required: true }]
|
|
57
|
-
}], target: [{
|
|
58
|
-
type: Input
|
|
59
|
-
}], params: [{
|
|
60
|
-
type: Input
|
|
61
|
-
}], queryParams: [{
|
|
62
|
-
type: Input
|
|
63
|
-
}], stateParams: [{
|
|
64
|
-
type: Input
|
|
65
|
-
}], disabled: [{
|
|
66
|
-
type: Input,
|
|
67
|
-
args: [{ transform: booleanAttribute }]
|
|
68
|
-
}] } });
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlci1saW5rLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9yb3V0ZXIvc3JjL2xpYi9kaXJlY3RpdmVzL3JkdC1yb3V0ZXItbGluay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBWWxELE1BQU0sT0FBTyxzQkFBc0I7SUFHaEIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFHM0QsS0FBSyxDQUFlO0lBR3BCLE1BQU0sR0FBNEMsT0FBTyxDQUFDO0lBRzFELE1BQU0sQ0FBYztJQUdwQixXQUFXLENBQVU7SUFHckIsV0FBVyxDQUFVO0lBR3JCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFakIsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU8sTUFBTTtRQUNaLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVPLE9BQU87UUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDNUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7dUdBbERVLHNCQUFzQjsyRkFBdEIsc0JBQXNCLCtOQXFCYixnQkFBZ0I7OzJGQXJCekIsc0JBQXNCO2tCQVZsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixjQUFjLEVBQUU7d0JBQ2Q7NEJBQ0UsU0FBUyxFQUFFLFVBQVU7NEJBQ3JCLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzt5QkFDbkI7cUJBQ0Y7aUJBQ0Y7OEJBUUMsS0FBSztzQkFESixLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUlqRCxNQUFNO3NCQURMLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBib29sZWFuQXR0cmlidXRlLFxyXG4gIERpcmVjdGl2ZSxcclxuICBFbnZpcm9ubWVudEluamVjdG9yLFxyXG4gIGluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYXJhbXMsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRSb3V0ZSB9IGZyb20gJy4uL3JkdC1yb3V0ZS9yZHQtcm91dGUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbcmR0Um91dGVyTGlua10nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaG9zdERpcmVjdGl2ZXM6IFtcclxuICAgIHtcclxuICAgICAgZGlyZWN0aXZlOiBSb3V0ZXJMaW5rLFxyXG4gICAgICBpbnB1dHM6IFsndGFyZ2V0J10sXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRSb3V0ZXJMaW5rRGlyZWN0aXZlPFQgZXh0ZW5kcyBvYmplY3Q+XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlc1xyXG57XHJcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXJMaW5rUmVmID0gaW5qZWN0KFJvdXRlckxpbmssIHsgc2VsZjogdHJ1ZSB9KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVudkluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xyXG5cclxuICBASW5wdXQoeyBhbGlhczogJ3JkdFJvdXRlckxpbmsnLCByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHJvdXRlITogUmR0Um91dGU8VD47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgdGFyZ2V0OiAnX2JsYW5rJyB8ICdfc2VsZicgfCAnX3BhcmVudCcgfCAnX3RvcCcgPSAnX3NlbGYnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHBhcmFtcz86IFBhcnRpYWw8VD47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcXVlcnlQYXJhbXM/OiBQYXJhbXM7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc3RhdGVQYXJhbXM/OiBQYXJhbXM7XHJcblxyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxyXG4gIGRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlKCkge1xyXG4gICAgaWYgKHRoaXMucm91dGUuY2FuQmVFbnRlcmVkKHRoaXMuZW52SW5qZWN0b3IpICYmICF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuc2V0TGluaygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNhYmxlTGluaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRMaW5rKCkge1xyXG4gICAgdGhpcy5yb3V0ZXJMaW5rUmVmLnJvdXRlckxpbmsgPSB0aGlzLnJvdXRlLmNyZWF0ZUFic29sdXRlVXJsKHRoaXMucGFyYW1zKTtcclxuICAgIHRoaXMucm91dGVyTGlua1JlZi5zdGF0ZSA9IHRoaXMuc3RhdGVQYXJhbXMgPz8gdGhpcy5yb3V0ZS5zdGF0ZVBhcmFtcztcclxuICAgIHRoaXMucm91dGVyTGlua1JlZi5xdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXMgPz8gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcztcclxuICAgIHRoaXMucm91dGVyTGlua1JlZi5uZ09uQ2hhbmdlcyh7fSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc2FibGVMaW5rKCkge1xyXG4gICAgdGhpcy5yb3V0ZXJMaW5rUmVmLnJvdXRlckxpbmsgPSBudWxsO1xyXG4gICAgdGhpcy5yb3V0ZXJMaW5rUmVmLm5nT25DaGFuZ2VzKHt9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,51 +0,0 @@
|
|
|
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
|
|
@@ -1,7 +0,0 @@
|
|
|
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,5 +0,0 @@
|
|
|
1
|
-
export var RdtNavigationSource;
|
|
2
|
-
(function (RdtNavigationSource) {
|
|
3
|
-
RdtNavigationSource["BREADCRUMB"] = "breadcrumb";
|
|
4
|
-
})(RdtNavigationSource || (RdtNavigationSource = {}));
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3JkdC1yb3V0ZS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksbUJBRVg7QUFGRCxXQUFZLG1CQUFtQjtJQUM3QixnREFBeUIsQ0FBQTtBQUMzQixDQUFDLEVBRlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUU5QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFJkdE5hdmlnYXRpb25Tb3VyY2Uge1xyXG4gIEJSRUFEQ1JVTUIgPSAnYnJlYWRjcnVtYicsXHJcbn1cclxuIl19
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import { Location } from '@angular/common';
|
|
2
|
-
import { EnvironmentInjector, inject, runInInjectionContext, } from '@angular/core';
|
|
3
|
-
import { Router, } from '@angular/router';
|
|
4
|
-
import { RDT_CANNOT_BE_ENTERED_PROVIDER } from '../services/rdt-cannot-be-entered.token';
|
|
5
|
-
import { RdtNavigationSource } from './constants';
|
|
6
|
-
export class RdtAngularRoute {
|
|
7
|
-
route;
|
|
8
|
-
children = [];
|
|
9
|
-
// Must be set from component declaration files
|
|
10
|
-
loadChildren;
|
|
11
|
-
component;
|
|
12
|
-
providers = [];
|
|
13
|
-
resolvers = {};
|
|
14
|
-
canActivate = [];
|
|
15
|
-
canActivateChild = [];
|
|
16
|
-
canDeactivate = [];
|
|
17
|
-
runGuardsAndResolvers;
|
|
18
|
-
data;
|
|
19
|
-
constructor(route) {
|
|
20
|
-
this.route = route;
|
|
21
|
-
}
|
|
22
|
-
provide(...providers) {
|
|
23
|
-
this.providers.push(...providers);
|
|
24
|
-
return this;
|
|
25
|
-
}
|
|
26
|
-
setModule(callback) {
|
|
27
|
-
this.loadChildren = callback;
|
|
28
|
-
return this;
|
|
29
|
-
}
|
|
30
|
-
setComponent(comp) {
|
|
31
|
-
this.component = comp;
|
|
32
|
-
return this;
|
|
33
|
-
}
|
|
34
|
-
setChildren(...routes) {
|
|
35
|
-
this.children = routes;
|
|
36
|
-
return this;
|
|
37
|
-
}
|
|
38
|
-
addResolve(paramName, resolver) {
|
|
39
|
-
this.resolvers[paramName] = resolver;
|
|
40
|
-
return this;
|
|
41
|
-
}
|
|
42
|
-
addCanActivate(...fns) {
|
|
43
|
-
this.canActivate.push(...fns);
|
|
44
|
-
return this;
|
|
45
|
-
}
|
|
46
|
-
addCanDeactivate(...fns) {
|
|
47
|
-
this.canDeactivate.push(...fns);
|
|
48
|
-
return this;
|
|
49
|
-
}
|
|
50
|
-
addCanActivateChild(...fns) {
|
|
51
|
-
this.canActivateChild.push(...fns);
|
|
52
|
-
return this;
|
|
53
|
-
}
|
|
54
|
-
setRunGuardsAndResolvers(value) {
|
|
55
|
-
this.runGuardsAndResolvers = value;
|
|
56
|
-
return this;
|
|
57
|
-
}
|
|
58
|
-
build() {
|
|
59
|
-
this.checkChildrenMatch();
|
|
60
|
-
let res = {
|
|
61
|
-
path: this.route.path,
|
|
62
|
-
providers: this.providers,
|
|
63
|
-
title: this.route.name,
|
|
64
|
-
canMatch: this.getCanMatch(),
|
|
65
|
-
};
|
|
66
|
-
if (this.component) {
|
|
67
|
-
res.component = this.component;
|
|
68
|
-
}
|
|
69
|
-
else if (this.loadChildren) {
|
|
70
|
-
res.loadChildren = this.loadChildren;
|
|
71
|
-
}
|
|
72
|
-
res.data = this.data ?? {
|
|
73
|
-
breadcrumb: {
|
|
74
|
-
label: this.route.name,
|
|
75
|
-
disable: this.route.entryDisabled,
|
|
76
|
-
staticStateParams: {
|
|
77
|
-
src: RdtNavigationSource.BREADCRUMB,
|
|
78
|
-
},
|
|
79
|
-
},
|
|
80
|
-
...this.route.data,
|
|
81
|
-
};
|
|
82
|
-
const guard = (route, state) => {
|
|
83
|
-
const injector = inject(EnvironmentInjector);
|
|
84
|
-
if (runInInjectionContext(injector, this.route.canBeEntered.bind(this.route))) {
|
|
85
|
-
return true;
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
const router = inject(Router);
|
|
89
|
-
const location = inject(Location);
|
|
90
|
-
let url = inject(RDT_CANNOT_BE_ENTERED_PROVIDER);
|
|
91
|
-
if (typeof url === 'function') {
|
|
92
|
-
//console.error(this.route.absolutePath);
|
|
93
|
-
url = runInInjectionContext(injector, url.bind(url, location.path(), state.url, this.route));
|
|
94
|
-
}
|
|
95
|
-
if (typeof url === 'string') {
|
|
96
|
-
return router.parseUrl(url);
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
this.canActivate.push(guard);
|
|
104
|
-
res.canActivate = this.canActivate;
|
|
105
|
-
res.canDeactivate = this.canDeactivate;
|
|
106
|
-
// If children exist, change
|
|
107
|
-
// {
|
|
108
|
-
// path: '/path',
|
|
109
|
-
// component: FeatureComponent,
|
|
110
|
-
// children: [...]
|
|
111
|
-
// }
|
|
112
|
-
// into
|
|
113
|
-
// {
|
|
114
|
-
// path: '/path',
|
|
115
|
-
// children: [
|
|
116
|
-
// {
|
|
117
|
-
// path: '',
|
|
118
|
-
// component: FeatureComponent
|
|
119
|
-
// },
|
|
120
|
-
// ...
|
|
121
|
-
// ]
|
|
122
|
-
// }
|
|
123
|
-
if (this.children.length > 0) {
|
|
124
|
-
if (this.loadChildren || this.component) {
|
|
125
|
-
const path = res.path;
|
|
126
|
-
res.path = '';
|
|
127
|
-
res.pathMatch = 'full';
|
|
128
|
-
res.canMatch = undefined;
|
|
129
|
-
res = {
|
|
130
|
-
path: path,
|
|
131
|
-
children: [res, ...this.children],
|
|
132
|
-
canActivateChild: this.canActivateChild,
|
|
133
|
-
canMatch: this.getCanMatch(),
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
res.children = this.children;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
if (Object.keys(this.resolvers).length > 0) {
|
|
141
|
-
res.resolve = this.resolvers;
|
|
142
|
-
}
|
|
143
|
-
if (this.runGuardsAndResolvers) {
|
|
144
|
-
res.runGuardsAndResolvers = this.runGuardsAndResolvers;
|
|
145
|
-
}
|
|
146
|
-
return res;
|
|
147
|
-
}
|
|
148
|
-
getCanMatch() {
|
|
149
|
-
const paramMap = this.route.paramMap;
|
|
150
|
-
const hasNumberParams = Object.keys(paramMap).some((p) => paramMap[p] === 'number');
|
|
151
|
-
if (!hasNumberParams) {
|
|
152
|
-
return undefined;
|
|
153
|
-
}
|
|
154
|
-
const routeSegmentLength = this.route.path.split('/').length;
|
|
155
|
-
const regex = this.route.regex
|
|
156
|
-
? new RegExp(`^${this.route.regex.source}$`)
|
|
157
|
-
: this.route.absoluteRegex;
|
|
158
|
-
return [
|
|
159
|
-
(route, segments) => {
|
|
160
|
-
const path = segments
|
|
161
|
-
.slice(0, routeSegmentLength)
|
|
162
|
-
.map((s) => s.path)
|
|
163
|
-
.join('/');
|
|
164
|
-
return regex.test(path);
|
|
165
|
-
},
|
|
166
|
-
];
|
|
167
|
-
}
|
|
168
|
-
checkChildrenMatch() {
|
|
169
|
-
// Check that all routes are present if route is not
|
|
170
|
-
// lazy loaded module.
|
|
171
|
-
if (!this.loadChildren &&
|
|
172
|
-
(this.route.children.length > 0 || this.children.length > 0)) {
|
|
173
|
-
if (this.children.length < this.route.children.length) {
|
|
174
|
-
throw new Error(`RdtRoute ${this.route.name} has ${this.route.children.length} children, but RdtAngularRoute has ${this.children.length}. 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
|
|
175
|
-
.map((ch) => ch.name)
|
|
176
|
-
.join(', ')}`);
|
|
177
|
-
}
|
|
178
|
-
else if (this.children.length > this.route.children.length) {
|
|
179
|
-
throw new Error(`RdtRoute ${this.route.name} has ${this.route.children.length} children, but RdtAngularRoute has ${this.children.length}. 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
|
|
180
|
-
.map((ch) => ch.path)
|
|
181
|
-
.join(', ')}`);
|
|
182
|
-
}
|
|
183
|
-
const n1 = this.children.map((ch) => ch.path);
|
|
184
|
-
const n2 = this.route.children.map((ch) => ch.path);
|
|
185
|
-
n1.sort();
|
|
186
|
-
n2.sort();
|
|
187
|
-
for (let i = 0; i < n1.length; i++) {
|
|
188
|
-
if (n1[i] !== n2[i]) {
|
|
189
|
-
throw new Error(`Paths of children provided in RdtRoute and
|
|
190
|
-
RdtAngularRoute do not match. ${n1[i]} != ${n2[i]}`);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWFuZ3VsYXItcm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvcmR0LXJvdXRlL3JkdC1hbmd1bGFyLXJvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsbUJBQW1CLEVBRW5CLE1BQU0sRUFFTixxQkFBcUIsR0FFdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQVVMLE1BQU0sR0FJUCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdsRCxNQUFNLE9BQU8sZUFBZTtJQUNsQixLQUFLLENBQWM7SUFDbkIsUUFBUSxHQUFZLEVBQUUsQ0FBQztJQUUvQiwrQ0FBK0M7SUFDdkMsWUFBWSxDQUF3QjtJQUNwQyxTQUFTLENBQWE7SUFDdEIsU0FBUyxHQUF3QyxFQUFFLENBQUM7SUFDcEQsU0FBUyxHQUEwQyxFQUFFLENBQUM7SUFDdEQsV0FBVyxHQUFvQixFQUFFLENBQUM7SUFDbEMsZ0JBQWdCLEdBQXlCLEVBQUUsQ0FBQztJQUM1QyxhQUFhLEdBQXlCLEVBQUUsQ0FBQztJQUN6QyxxQkFBcUIsQ0FBeUI7SUFDOUMsSUFBSSxDQUFRO0lBRXBCLFlBQVksS0FBa0I7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLFNBQTBCO1FBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQThCO1FBQ3RDLElBQUksQ0FB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QUFFLENBQUM7Z0JBQ25DLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNwQixNQUFNLElBQUksS0FBSyxDQUNiOzRDQUNnQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3BELENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXHJcbiAgaW5qZWN0LFxyXG4gIFByb3ZpZGVyLFxyXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcclxuICBUeXBlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgQ2FuQWN0aXZhdGVDaGlsZEZuLFxyXG4gIENhbkFjdGl2YXRlRm4sXHJcbiAgQ2FuRGVhY3RpdmF0ZUZuLFxyXG4gIENhbk1hdGNoRm4sXHJcbiAgRGF0YSxcclxuICBMb2FkQ2hpbGRyZW5DYWxsYmFjayxcclxuICBSZXNvbHZlRm4sXHJcbiAgUm91dGUsXHJcbiAgUm91dGVyLFxyXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXHJcbiAgUnVuR3VhcmRzQW5kUmVzb2x2ZXJzLFxyXG4gIFVybFNlZ21lbnQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUkRUX0NBTk5PVF9CRV9FTlRFUkVEX1BST1ZJREVSIH0gZnJvbSAnLi4vc2VydmljZXMvcmR0LWNhbm5vdC1iZS1lbnRlcmVkLnRva2VuJztcclxuaW1wb3J0IHsgUmR0TmF2aWdhdGlvblNvdXJjZSB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuL3JkdC1yb3V0ZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmR0QW5ndWxhclJvdXRlPFQgZXh0ZW5kcyBvYmplY3Q+IHtcclxuICBwcml2YXRlIHJvdXRlOiBSZHRSb3V0ZTxUPjtcclxuICBwcml2YXRlIGNoaWxkcmVuOiBSb3V0ZVtdID0gW107XHJcblxyXG4gIC8vIE11c3QgYmUgc2V0IGZyb20gY29tcG9uZW50IGRlY2xhcmF0aW9uIGZpbGVzXHJcbiAgcHJpdmF0ZSBsb2FkQ2hpbGRyZW4/OiBMb2FkQ2hpbGRyZW5DYWxsYmFjaztcclxuICBwcml2YXRlIGNvbXBvbmVudD86IFR5cGU8YW55PjtcclxuICBwcml2YXRlIHByb3ZpZGVyczogKFByb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnMpW10gPSBbXTtcclxuICBwcml2YXRlIHJlc29sdmVyczogeyBba2V5OiBzdHJpbmddOiBSZXNvbHZlRm48dW5rbm93bj4gfSA9IHt9O1xyXG4gIHByaXZhdGUgY2FuQWN0aXZhdGU6IENhbkFjdGl2YXRlRm5bXSA9IFtdO1xyXG4gIHByaXZhdGUgY2FuQWN0aXZhdGVDaGlsZDogQ2FuQWN0aXZhdGVDaGlsZEZuW10gPSBbXTtcclxuICBwcml2YXRlIGNhbkRlYWN0aXZhdGU6IENhbkRlYWN0aXZhdGVGbjxUPltdID0gW107XHJcbiAgcHJpdmF0ZSBydW5HdWFyZHNBbmRSZXNvbHZlcnM/OiBSdW5HdWFyZHNBbmRSZXNvbHZlcnM7XHJcbiAgcHJpdmF0ZSBkYXRhPzogRGF0YTtcclxuXHJcbiAgY29uc3RydWN0b3Iocm91dGU6IFJkdFJvdXRlPFQ+KSB7XHJcbiAgICB0aGlzLnJvdXRlID0gcm91dGU7XHJcbiAgfVxyXG5cclxuICBwcm92aWRlKC4uLnByb3ZpZGVyczogVHlwZTx1bmtub3duPltdKSB7XHJcbiAgICB0aGlzLnByb3ZpZGVycy5wdXNoKC4uLnByb3ZpZGVycyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIHNldE1vZHVsZShjYWxsYmFjazogTG9hZENoaWxkcmVuQ2FsbGJhY2spIHtcclxuICAgIHRoaXMubG9hZENoaWxkcmVuID0gY2FsbGJhY2s7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIHNldENvbXBvbmVudChjb21wOiBUeXBlPGFueT4pIHtcclxuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2hpbGRyZW4oLi4ucm91dGVzOiBSb3V0ZVtdKSB7XHJcbiAgICB0aGlzLmNoaWxkcmVuID0gcm91dGVzO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBhZGRSZXNvbHZlKHBhcmFtTmFtZTogc3RyaW5nLCByZXNvbHZlcjogUmVzb2x2ZUZuPHVua25vd24+KSB7XHJcbiAgICB0aGlzLnJlc29sdmVyc1twYXJhbU5hbWVdID0gcmVzb2x2ZXI7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGFkZENhbkFjdGl2YXRlKC4uLmZuczogQ2FuQWN0aXZhdGVGbltdKSB7XHJcbiAgICB0aGlzLmNhbkFjdGl2YXRlLnB1c2goLi4uZm5zKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgYWRkQ2FuRGVhY3RpdmF0ZSguLi5mbnM6IENhbkRlYWN0aXZhdGVGbjxhbnk+W10pIHtcclxuICAgIHRoaXMuY2FuRGVhY3RpdmF0ZS5wdXNoKC4uLmZucyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGFkZENhbkFjdGl2YXRlQ2hpbGQoLi4uZm5zOiBDYW5BY3RpdmF0ZUNoaWxkRm5bXSkge1xyXG4gICAgdGhpcy5jYW5BY3RpdmF0ZUNoaWxkLnB1c2goLi4uZm5zKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgc2V0UnVuR3VhcmRzQW5kUmVzb2x2ZXJzKHZhbHVlOiBSdW5HdWFyZHNBbmRSZXNvbHZlcnMpIHtcclxuICAgIHRoaXMucnVuR3VhcmRzQW5kUmVzb2x2ZXJzID0gdmFsdWU7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGJ1aWxkKCk6IFJvdXRlIHtcclxuICAgIHRoaXMuY2hlY2tDaGlsZHJlbk1hdGNoKCk7XHJcblxyXG4gICAgbGV0IHJlczogUm91dGUgPSB7XHJcbiAgICAgIHBhdGg6IHRoaXMucm91dGUucGF0aCxcclxuICAgICAgcHJvdmlkZXJzOiB0aGlzLnByb3ZpZGVycyxcclxuICAgICAgdGl0bGU6IHRoaXMucm91dGUubmFtZSxcclxuICAgICAgY2FuTWF0Y2g6IHRoaXMuZ2V0Q2FuTWF0Y2goKSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50KSB7XHJcbiAgICAgIHJlcy5jb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkQ2hpbGRyZW4pIHtcclxuICAgICAgcmVzLmxvYWRDaGlsZHJlbiA9IHRoaXMubG9hZENoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlcy5kYXRhID0gdGhpcy5kYXRhID8/IHtcclxuICAgICAgYnJlYWRjcnVtYjoge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLnJvdXRlLm5hbWUsXHJcbiAgICAgICAgZGlzYWJsZTogdGhpcy5yb3V0ZS5lbnRyeURpc2FibGVkLFxyXG4gICAgICAgIHN0YXRpY1N0YXRlUGFyYW1zOiB7XHJcbiAgICAgICAgICBzcmM6IFJkdE5hdmlnYXRpb25Tb3VyY2UuQlJFQURDUlVNQixcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICAuLi50aGlzLnJvdXRlLmRhdGEsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGd1YXJkOiBDYW5BY3RpdmF0ZUZuID0gKFxyXG4gICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICAgICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcclxuICAgICkgPT4ge1xyXG4gICAgICBjb25zdCBpbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dChcclxuICAgICAgICAgIGluamVjdG9yLFxyXG4gICAgICAgICAgdGhpcy5yb3V0ZS5jYW5CZUVudGVyZWQuYmluZCh0aGlzLnJvdXRlKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xyXG4gICAgICAgIGxldCB1cmwgPSBpbmplY3QoUkRUX0NBTk5PVF9CRV9FTlRFUkVEX1BST1ZJREVSKTtcclxuICAgICAgICBpZiAodHlwZW9mIHVybCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmVycm9yKHRoaXMucm91dGUuYWJzb2x1dGVQYXRoKTtcclxuICAgICAgICAgIHVybCA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dChcclxuICAgICAgICAgICAgaW5qZWN0b3IsXHJcbiAgICAgICAgICAgIHVybC5iaW5kKHVybCwgbG9jYXRpb24ucGF0aCgpLCBzdGF0ZS51cmwsIHRoaXMucm91dGUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIHJldHVybiByb3V0ZXIucGFyc2VVcmwodXJsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMuY2FuQWN0aXZhdGUucHVzaChndWFyZCk7XHJcblxyXG4gICAgcmVzLmNhbkFjdGl2YXRlID0gdGhpcy5jYW5BY3RpdmF0ZTtcclxuICAgIHJlcy5jYW5EZWFjdGl2YXRlID0gdGhpcy5jYW5EZWFjdGl2YXRlO1xyXG5cclxuICAgIC8vIElmIGNoaWxkcmVuIGV4aXN0LCBjaGFuZ2VcclxuICAgIC8vIHtcclxuICAgIC8vICAgIHBhdGg6ICcvcGF0aCcsXHJcbiAgICAvLyAgICBjb21wb25lbnQ6IEZlYXR1cmVDb21wb25lbnQsXHJcbiAgICAvLyAgICBjaGlsZHJlbjogWy4uLl1cclxuICAgIC8vIH1cclxuICAgIC8vIGludG9cclxuICAgIC8vIHtcclxuICAgIC8vICAgIHBhdGg6ICcvcGF0aCcsXHJcbiAgICAvLyAgICBjaGlsZHJlbjogW1xyXG4gICAgLy8gICAgICB7XHJcbiAgICAvLyAgICAgICAgcGF0aDogJycsXHJcbiAgICAvLyAgICAgICAgY29tcG9uZW50OiBGZWF0dXJlQ29tcG9uZW50XHJcbiAgICAvLyAgICAgIH0sXHJcbiAgICAvLyAgICAuLi5cclxuICAgIC8vICAgIF1cclxuICAgIC8vICAgIH1cclxuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKHRoaXMubG9hZENoaWxkcmVuIHx8IHRoaXMuY29tcG9uZW50KSB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHJlcy5wYXRoO1xyXG4gICAgICAgIHJlcy5wYXRoID0gJyc7XHJcbiAgICAgICAgcmVzLnBhdGhNYXRjaCA9ICdmdWxsJztcclxuICAgICAgICByZXMuY2FuTWF0Y2ggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmVzID0ge1xyXG4gICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgIGNoaWxkcmVuOiBbcmVzLCAuLi50aGlzLmNoaWxkcmVuXSxcclxuICAgICAgICAgIGNhbkFjdGl2YXRlQ2hpbGQ6IHRoaXMuY2FuQWN0aXZhdGVDaGlsZCxcclxuICAgICAgICAgIGNhbk1hdGNoOiB0aGlzLmdldENhbk1hdGNoKCksXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXMuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMucmVzb2x2ZXJzKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJlcy5yZXNvbHZlID0gdGhpcy5yZXNvbHZlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKSB7XHJcbiAgICAgIHJlcy5ydW5HdWFyZHNBbmRSZXNvbHZlcnMgPSB0aGlzLnJ1bkd1YXJkc0FuZFJlc29sdmVycztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDYW5NYXRjaCgpOiBDYW5NYXRjaEZuW10gfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgcGFyYW1NYXAgPSB0aGlzLnJvdXRlLnBhcmFtTWFwO1xyXG4gICAgY29uc3QgaGFzTnVtYmVyUGFyYW1zID0gT2JqZWN0LmtleXMocGFyYW1NYXApLnNvbWUoXHJcbiAgICAgIChwKSA9PiBwYXJhbU1hcFtwIGFzIGtleW9mIFRdID09PSAnbnVtYmVyJ1xyXG4gICAgKTtcclxuICAgIGlmICghaGFzTnVtYmVyUGFyYW1zKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCByb3V0ZVNlZ21lbnRMZW5ndGggPSB0aGlzLnJvdXRlLnBhdGguc3BsaXQoJy8nKS5sZW5ndGg7XHJcbiAgICBjb25zdCByZWdleCA9IHRoaXMucm91dGUucmVnZXhcclxuICAgICAgPyBuZXcgUmVnRXhwKGBeJHt0aGlzLnJvdXRlLnJlZ2V4LnNvdXJjZX0kYClcclxuICAgICAgOiB0aGlzLnJvdXRlLmFic29sdXRlUmVnZXg7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAocm91dGU6IFJvdXRlLCBzZWdtZW50czogVXJsU2VnbWVudFtdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHNlZ21lbnRzXHJcbiAgICAgICAgICAuc2xpY2UoMCwgcm91dGVTZWdtZW50TGVuZ3RoKVxyXG4gICAgICAgICAgLm1hcCgocykgPT4gcy5wYXRoKVxyXG4gICAgICAgICAgLmpvaW4oJy8nKTtcclxuICAgICAgICByZXR1cm4gcmVnZXgudGVzdChwYXRoKTtcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrQ2hpbGRyZW5NYXRjaCgpIHtcclxuICAgIC8vIENoZWNrIHRoYXQgYWxsIHJvdXRlcyBhcmUgcHJlc2VudCBpZiByb3V0ZSBpcyBub3RcclxuICAgIC8vIGxhenkgbG9hZGVkIG1vZHVsZS5cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMubG9hZENoaWxkcmVuICYmXHJcbiAgICAgICh0aGlzLnJvdXRlLmNoaWxkcmVuLmxlbmd0aCA+IDAgfHwgdGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA8IHRoaXMucm91dGUuY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYFJkdFJvdXRlICR7dGhpcy5yb3V0ZS5uYW1lfSBoYXMgJHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZS5jaGlsZHJlbi5sZW5ndGhcclxuICAgICAgICAgIH0gY2hpbGRyZW4sIGJ1dCBSZHRBbmd1bGFyUm91dGUgaGFzICR7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ubGVuZ3RoXHJcbiAgICAgICAgICB9LiBUaGVzZSBudW1iZXJzIG11c3QgbWF0Y2guIERpZCB5b3UgZm9yZ2V0IHRvIGNhbGwgLnNldENoaWxkcmVuKCkgbWV0aG9kIGluIGdsb2JhbCByb3V0ZXMgZGVmaW5pdGlvbj8gUm91dGVzIHdpdGggZm9sbG93aW5nIG5hbWVzIHNob3VsZCBiZSBwcmVzZW50OiAke3RoaXMucm91dGUuY2hpbGRyZW5cclxuICAgICAgICAgICAgLm1hcCgoY2gpID0+IGNoLm5hbWUpXHJcbiAgICAgICAgICAgIC5qb2luKCcsICcpfWBcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gdGhpcy5yb3V0ZS5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBgUmR0Um91dGUgJHt0aGlzLnJvdXRlLm5hbWV9IGhhcyAke1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlLmNoaWxkcmVuLmxlbmd0aFxyXG4gICAgICAgICAgfSBjaGlsZHJlbiwgYnV0IFJkdEFuZ3VsYXJSb3V0ZSBoYXMgJHtcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5sZW5ndGhcclxuICAgICAgICAgIH0uIFRoZXNlIG51bWJlcnMgbXVzdCBtYXRjaC4gRGlkIHlvdSBmb3JnZXQgdG8gY2FsbCAuc2V0Q2hpbGRyZW4oKSBtZXRob2QgaW4gZmVhdHVyZSBzaGVsbCByb3V0ZXMgZGVmaW5pdGlvbj8gUm91dGVzIHdpdGggZm9sbG93aW5nIHBhdGhzIHNob3VsZCBiZSBwcmVzZW50OiAke3RoaXMuY2hpbGRyZW5cclxuICAgICAgICAgICAgLm1hcCgoY2gpID0+IGNoLnBhdGgpXHJcbiAgICAgICAgICAgIC5qb2luKCcsICcpfWBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG4xID0gdGhpcy5jaGlsZHJlbi5tYXAoKGNoKSA9PiBjaC5wYXRoISk7XHJcbiAgICAgIGNvbnN0IG4yID0gdGhpcy5yb3V0ZS5jaGlsZHJlbi5tYXAoKGNoKSA9PiBjaC5wYXRoKTtcclxuICAgICAgbjEuc29ydCgpO1xyXG4gICAgICBuMi5zb3J0KCk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAobjFbaV0gIT09IG4yW2ldKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBQYXRocyBvZiBjaGlsZHJlbiBwcm92aWRlZCBpbiBSZHRSb3V0ZSBhbmRcclxuICAgICAgICAgICAgUmR0QW5ndWxhclJvdXRlIGRvIG5vdCBtYXRjaC4gJHtuMVtpXX0gIT0gJHtuMltpXX1gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { RdtRoute } from './rdt-route';
|
|
2
|
-
const DEFAULT_PARAM_TYPE = 'number';
|
|
3
|
-
export class RdtRouteBuilder extends RdtRoute {
|
|
4
|
-
/**
|
|
5
|
-
* CanBeEntered function is synchronous function which
|
|
6
|
-
* lets framework hide menu buttons and disable links.
|
|
7
|
-
* Function is run in environment injection context, so
|
|
8
|
-
* you can inject global services, tokens, etc.
|
|
9
|
-
* @param fn
|
|
10
|
-
*/
|
|
11
|
-
setCanBeEntered(fn) {
|
|
12
|
-
this._canBeEntered = fn;
|
|
13
|
-
return this;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Entry disabled route will generate disabled breadcrumb.
|
|
17
|
-
* It should not have any component nor module added to it.
|
|
18
|
-
* @param value
|
|
19
|
-
* @returns
|
|
20
|
-
*/
|
|
21
|
-
setEntryDisabled(value = true) {
|
|
22
|
-
this._entryDisabled = value;
|
|
23
|
-
return this;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Sets path relative to parent. It is defined the same way as Angular route path including parameters.
|
|
27
|
-
* You need to call setParam() for each parameter you use in the path.
|
|
28
|
-
*/
|
|
29
|
-
setPath(path) {
|
|
30
|
-
this._path = path;
|
|
31
|
-
const s = path.split('/');
|
|
32
|
-
const params = [];
|
|
33
|
-
s.forEach((part) => {
|
|
34
|
-
if (part.includes(':')) {
|
|
35
|
-
const param = part.split(':')[1];
|
|
36
|
-
if (param) {
|
|
37
|
-
params.push(param);
|
|
38
|
-
if (!this._paramMap[param]) {
|
|
39
|
-
this._paramMap[param] = DEFAULT_PARAM_TYPE;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
this.orderedParams = params;
|
|
45
|
-
return this;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Sets Angular route data.
|
|
49
|
-
* @param data Angular route data object. Breadcrumb key is merged into it.
|
|
50
|
-
*/
|
|
51
|
-
setData(data) {
|
|
52
|
-
this._data = data;
|
|
53
|
-
return this;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Defines parameter type and lets framework parse it.
|
|
57
|
-
* @param paramName
|
|
58
|
-
* @param type
|
|
59
|
-
*/
|
|
60
|
-
setParam(paramName, type) {
|
|
61
|
-
this._paramMap[paramName] = type;
|
|
62
|
-
return this;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Sets name to display in breadcrumb, etc.
|
|
66
|
-
*/
|
|
67
|
-
setName(name) {
|
|
68
|
-
this._name = name;
|
|
69
|
-
return this;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Call .build() on children before you call this method!
|
|
73
|
-
*/
|
|
74
|
-
setChildren(...children) {
|
|
75
|
-
this._children = children;
|
|
76
|
-
for (const child of children) {
|
|
77
|
-
child._parent = this;
|
|
78
|
-
}
|
|
79
|
-
return this;
|
|
80
|
-
}
|
|
81
|
-
build() {
|
|
82
|
-
if (typeof this._path !== 'string') {
|
|
83
|
-
throw new Error('Please provide path for route. Empty string is acceptable.');
|
|
84
|
-
}
|
|
85
|
-
this._built = true;
|
|
86
|
-
this.setRegex();
|
|
87
|
-
return this;
|
|
88
|
-
}
|
|
89
|
-
setRegex() {
|
|
90
|
-
const params = Object.keys(this._paramMap);
|
|
91
|
-
params.sort((a, b) => b.length - a.length);
|
|
92
|
-
let substituted = this.path;
|
|
93
|
-
params.forEach((p) => {
|
|
94
|
-
const type = this._paramMap[p];
|
|
95
|
-
if (!type) {
|
|
96
|
-
throw new Error('Params is not set i');
|
|
97
|
-
}
|
|
98
|
-
substituted = substituted.replace(`:${p}`, RdtRouteBuilder.groups[type]);
|
|
99
|
-
});
|
|
100
|
-
if (substituted === '') {
|
|
101
|
-
this._regex = null;
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
this._regex = new RegExp(substituted);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
static groups = {
|
|
108
|
-
string: '(.+)',
|
|
109
|
-
number: '(\\d+)',
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvcmR0LXJvdXRlL3JkdC1yb3V0ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkMsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUM7QUFFcEMsTUFBTSxPQUFPLGVBQXdDLFNBQVEsUUFBVztJQUN0RTs7Ozs7O09BTUc7SUFDSCxlQUFlLENBQUMsRUFBaUI7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSTtRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFPLENBQUMsSUFBWTtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFZLENBQUM7Z0JBQzVDLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztvQkFDN0MsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLElBQVU7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxTQUFrQixFQUFFLElBQXlCO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLElBQVk7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsR0FBRyxRQUFvQjtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzVCLEtBQXlCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUM1QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsNERBQTRELENBQzdELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sSUFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRU8sUUFBUTtRQUNkLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQVksQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDekMsQ0FBQztZQUNELFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFVLE1BQU0sR0FBRztRQUMvQixNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRSxRQUFRO0tBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuL3JkdC1yb3V0ZSc7XHJcblxyXG5jb25zdCBERUZBVUxUX1BBUkFNX1RZUEUgPSAnbnVtYmVyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZHRSb3V0ZUJ1aWxkZXI8VCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBSZHRSb3V0ZTxUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FuQmVFbnRlcmVkIGZ1bmN0aW9uIGlzIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHdoaWNoXHJcbiAgICogbGV0cyBmcmFtZXdvcmsgaGlkZSBtZW51IGJ1dHRvbnMgYW5kIGRpc2FibGUgbGlua3MuXHJcbiAgICogRnVuY3Rpb24gaXMgcnVuIGluIGVudmlyb25tZW50IGluamVjdGlvbiBjb250ZXh0LCBzb1xyXG4gICAqIHlvdSBjYW4gaW5qZWN0IGdsb2JhbCBzZXJ2aWNlcywgdG9rZW5zLCBldGMuXHJcbiAgICogQHBhcmFtIGZuXHJcbiAgICovXHJcbiAgc2V0Q2FuQmVFbnRlcmVkKGZuOiAoKSA9PiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9jYW5CZUVudGVyZWQgPSBmbjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW50cnkgZGlzYWJsZWQgcm91dGUgd2lsbCBnZW5lcmF0ZSBkaXNhYmxlZCBicmVhZGNydW1iLlxyXG4gICAqIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkgY29tcG9uZW50IG5vciBtb2R1bGUgYWRkZWQgdG8gaXQuXHJcbiAgICogQHBhcmFtIHZhbHVlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBzZXRFbnRyeURpc2FibGVkKHZhbHVlID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5fZW50cnlEaXNhYmxlZCA9IHZhbHVlO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHBhdGggcmVsYXRpdmUgdG8gcGFyZW50LiBJdCBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcyBBbmd1bGFyIHJvdXRlIHBhdGggaW5jbHVkaW5nIHBhcmFtZXRlcnMuXHJcbiAgICogWW91IG5lZWQgdG8gY2FsbCBzZXRQYXJhbSgpIGZvciBlYWNoIHBhcmFtZXRlciB5b3UgdXNlIGluIHRoZSBwYXRoLlxyXG4gICAqL1xyXG4gIHNldFBhdGgocGF0aDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wYXRoID0gcGF0aDtcclxuICAgIGNvbnN0IHMgPSBwYXRoLnNwbGl0KCcvJyk7XHJcbiAgICBjb25zdCBwYXJhbXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBzLmZvckVhY2goKHBhcnQpID0+IHtcclxuICAgICAgaWYgKHBhcnQuaW5jbHVkZXMoJzonKSkge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtID0gcGFydC5zcGxpdCgnOicpWzFdIGFzIGtleW9mIFQ7XHJcbiAgICAgICAgaWYgKHBhcmFtKSB7XHJcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbU1hcFtwYXJhbV0pIHtcclxuICAgICAgICAgICAgdGhpcy5fcGFyYW1NYXBbcGFyYW1dID0gREVGQVVMVF9QQVJBTV9UWVBFO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9yZGVyZWRQYXJhbXMgPSBwYXJhbXM7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgQW5ndWxhciByb3V0ZSBkYXRhLlxyXG4gICAqIEBwYXJhbSBkYXRhIEFuZ3VsYXIgcm91dGUgZGF0YSBvYmplY3QuIEJyZWFkY3J1bWIga2V5IGlzIG1lcmdlZCBpbnRvIGl0LlxyXG4gICAqL1xyXG4gIHNldERhdGEoZGF0YTogRGF0YSkge1xyXG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZXMgcGFyYW1ldGVyIHR5cGUgYW5kIGxldHMgZnJhbWV3b3JrIHBhcnNlIGl0LlxyXG4gICAqIEBwYXJhbSBwYXJhbU5hbWVcclxuICAgKiBAcGFyYW0gdHlwZVxyXG4gICAqL1xyXG4gIHNldFBhcmFtKHBhcmFtTmFtZToga2V5b2YgVCwgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJykge1xyXG4gICAgdGhpcy5fcGFyYW1NYXBbcGFyYW1OYW1lXSA9IHR5cGU7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgbmFtZSB0byBkaXNwbGF5IGluIGJyZWFkY3J1bWIsIGV0Yy5cclxuICAgKi9cclxuICBzZXROYW1lKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGwgLmJ1aWxkKCkgb24gY2hpbGRyZW4gYmVmb3JlIHlvdSBjYWxsIHRoaXMgbWV0aG9kIVxyXG4gICAqL1xyXG4gIHNldENoaWxkcmVuKC4uLmNoaWxkcmVuOiBSZHRSb3V0ZVtdKSB7XHJcbiAgICB0aGlzLl9jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICAoY2hpbGQgYXMgUmR0Um91dGVCdWlsZGVyKS5fcGFyZW50ID0gdGhpcztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgYnVpbGQoKSB7XHJcbiAgICBpZiAodHlwZW9mIHRoaXMuX3BhdGggIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnUGxlYXNlIHByb3ZpZGUgcGF0aCBmb3Igcm91dGUuIEVtcHR5IHN0cmluZyBpcyBhY2NlcHRhYmxlLidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2J1aWx0ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2V0UmVnZXgoKTtcclxuICAgIHJldHVybiB0aGlzIGFzIFJkdFJvdXRlPFQ+O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRSZWdleCgpIHtcclxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5rZXlzKHRoaXMuX3BhcmFtTWFwKTtcclxuICAgIHBhcmFtcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKTtcclxuICAgIGxldCBzdWJzdGl0dXRlZCA9IHRoaXMucGF0aDtcclxuICAgIHBhcmFtcy5mb3JFYWNoKChwKSA9PiB7XHJcbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLl9wYXJhbU1hcFtwIGFzIGtleW9mIFRdO1xyXG4gICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtcyBpcyBub3Qgc2V0IGknKTtcclxuICAgICAgfVxyXG4gICAgICBzdWJzdGl0dXRlZCA9IHN1YnN0aXR1dGVkLnJlcGxhY2UoYDoke3B9YCwgUmR0Um91dGVCdWlsZGVyLmdyb3Vwc1t0eXBlXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc3Vic3RpdHV0ZWQgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuX3JlZ2V4ID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3JlZ2V4ID0gbmV3IFJlZ0V4cChzdWJzdGl0dXRlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBncm91cHMgPSB7XHJcbiAgICBzdHJpbmc6ICcoLispJyxcclxuICAgIG51bWJlcjogJyhcXFxcZCspJyxcclxuICB9O1xyXG59XHJcbiJdfQ==
|