@wavemaker/app-ng-runtime 11.8.0-next.141688 → 11.8.0-next.141689
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/build-task/bundles/index.umd.js +4 -4
- package/build-task/esm2022/advanced/carousel/carousel-template/carousel-template.build.mjs +3 -3
- package/build-task/esm2022/containers/repeat-template.build.mjs +3 -3
- package/build-task/fesm2022/index.mjs +4 -4
- package/build-task/fesm2022/index.mjs.map +1 -1
- package/components/advanced/carousel/bundles/index.umd.js +3 -2
- package/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +1 -1
- package/components/advanced/carousel/esm2022/carousel-template/carousel-template.directive.mjs +4 -3
- package/components/advanced/carousel/fesm2022/index.mjs +3 -2
- package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
- package/components/base/bundles/index.umd.js +45 -32
- package/components/base/directives/show-in-device.directive.d.ts +3 -6
- package/components/base/esm2022/directives/show-in-device.directive.mjs +12 -14
- package/components/base/esm2022/public_api.mjs +2 -1
- package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +5 -7
- package/components/base/esm2022/widgets/common/base/base.component.mjs +22 -15
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +13 -6
- package/components/base/esm2022/widgets/common/repeat-template/repeat-template.directive.mjs +4 -3
- package/components/base/fesm2022/index.mjs +45 -33
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/public_api.d.ts +1 -0
- package/components/base/widgets/common/base/base.component.d.ts +18 -1
- package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +2 -2
- package/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +1 -1
- package/components/basic/search/bundles/index.umd.js +10 -9
- package/components/basic/search/esm2022/search.component.mjs +11 -10
- package/components/basic/search/fesm2022/index.mjs +10 -9
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/data/form/bundles/index.umd.js +1 -1
- package/components/data/form/esm2022/form.component.mjs +2 -2
- package/components/data/form/fesm2022/index.mjs +1 -1
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/list/bundles/index.umd.js +10 -7
- package/components/data/list/esm2022/list-item.directive.mjs +6 -1
- package/components/data/list/esm2022/list.component.mjs +7 -8
- package/components/data/list/fesm2022/index.mjs +11 -8
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/list/list-item.directive.d.ts +4 -0
- package/components/data/pagination/bundles/index.umd.js +10 -9
- package/components/data/pagination/esm2022/pagination.component.mjs +11 -10
- package/components/data/pagination/fesm2022/index.mjs +10 -9
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +3 -1
- package/components/data/table/esm2022/table.component.mjs +4 -2
- package/components/data/table/fesm2022/index.mjs +3 -1
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/input/color-picker/bundles/index.umd.js +2 -2
- package/components/input/color-picker/esm2022/color-picker.component.mjs +3 -3
- package/components/input/color-picker/fesm2022/index.mjs +2 -2
- package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
- package/components/input/default/bundles/index.umd.js +37 -32
- package/components/input/default/esm2022/checkbox/checkbox.component.mjs +6 -5
- package/components/input/default/esm2022/select/select.component.mjs +6 -5
- package/components/input/default/esm2022/text/base/base-input.mjs +3 -2
- package/components/input/default/esm2022/text/calendar/input-calendar.component.mjs +5 -4
- package/components/input/default/esm2022/text/color/input-color.component.mjs +5 -4
- package/components/input/default/fesm2022/index.mjs +37 -32
- package/components/input/default/fesm2022/index.mjs.map +1 -1
- package/components/input/default/text/base/base-input.d.ts +1 -0
- package/components/input/epoch/bundles/index.umd.js +13 -11
- package/components/input/epoch/esm2022/date/date.component.mjs +2 -2
- package/components/input/epoch/esm2022/date-time/date-time.component.mjs +6 -5
- package/components/input/epoch/esm2022/time/time.component.mjs +6 -5
- package/components/input/epoch/fesm2022/index.mjs +13 -11
- package/components/input/epoch/fesm2022/index.mjs.map +1 -1
- package/components/input/rating/bundles/index.umd.js +12 -10
- package/components/input/rating/esm2022/rating.component.mjs +13 -11
- package/components/input/rating/fesm2022/index.mjs +12 -10
- package/components/input/rating/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/bundles/index.umd.js +4 -3
- package/components/input/slider/esm2022/slider.component.mjs +5 -4
- package/components/input/slider/fesm2022/index.mjs +4 -3
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/bundles/index.umd.js +10 -12
- package/components/navigation/menu/esm2022/menu.module.mjs +3 -2
- package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +3 -2
- package/components/navigation/menu/esm2022/nav/nav.component.mjs +8 -12
- package/components/navigation/menu/fesm2022/index.mjs +11 -13
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +1 -1
- package/components/navigation/menu/nav/nav.component.d.ts +1 -2
- package/core/bundles/index.umd.js +23 -0
- package/core/esm2022/public_api.mjs +2 -1
- package/core/esm2022/services/custom-icons-loader.service.mjs +26 -0
- package/core/fesm2022/index.mjs +25 -3
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +1 -0
- package/core/services/custom-icons-loader.service.d.ts +7 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +19 -8
- package/runtime/base/components/app-component/app.component.d.ts +3 -1
- package/runtime/base/directives/accessroles.directive.d.ts +4 -3
- package/runtime/base/esm2022/components/app-component/app.component.mjs +9 -5
- package/runtime/base/esm2022/directives/accessroles.directive.mjs +14 -7
- package/runtime/base/esm2022/services/i18n.service.mjs +2 -2
- package/runtime/base/fesm2022/index.mjs +20 -9
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +1 -1
package/core/public_api.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export * from './services/field-type.service';
|
|
|
15
15
|
export * from './services/field-widget.service';
|
|
16
16
|
export * from './services/script-loader.service';
|
|
17
17
|
export * from './services/user-custom-pipe-manager.service';
|
|
18
|
+
export * from './services/custom-icons-loader.service';
|
|
18
19
|
export { StatePersistence } from './services/state-persistence.service';
|
|
19
20
|
export { PaginationService } from './services/pagination.service';
|
|
20
21
|
export * from './core.module';
|
package/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wavemaker/app-ng-runtime",
|
|
3
|
-
"version": "11.8.0-next.
|
|
3
|
+
"version": "11.8.0-next.141689",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@wavemaker/app-ng-runtime",
|
|
9
|
-
"version": "11.8.0-next.
|
|
9
|
+
"version": "11.8.0-next.141689",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"engines": {
|
|
12
12
|
"node": ">=18.16.1",
|
package/package.json
CHANGED
|
@@ -2016,16 +2016,18 @@
|
|
|
2016
2016
|
USER_ROLE["AUTHENTICATED"] = "Authenticated";
|
|
2017
2017
|
})(USER_ROLE || (USER_ROLE = {}));
|
|
2018
2018
|
class AccessrolesDirective {
|
|
2019
|
-
constructor(templateRef, viewContainerRef, securityService, inj) {
|
|
2019
|
+
constructor(templateRef, viewContainerRef, securityService, inj, explicitContext) {
|
|
2020
2020
|
this.templateRef = templateRef;
|
|
2021
2021
|
this.viewContainerRef = viewContainerRef;
|
|
2022
2022
|
this.securityService = securityService;
|
|
2023
2023
|
this.inj = inj;
|
|
2024
2024
|
this.processed = false;
|
|
2025
|
+
this.context = {};
|
|
2025
2026
|
const securityConfig = this.securityService.get();
|
|
2026
2027
|
this.securityEnabled = lodashEs.get(securityConfig, 'securityEnabled');
|
|
2027
2028
|
this.isUserAuthenticated = lodashEs.get(securityConfig, 'authenticated');
|
|
2028
2029
|
this.userRoles = lodashEs.get(securityConfig, 'userInfo.userRoles');
|
|
2030
|
+
lodashEs.extend(this.context, inj._lView[8], explicitContext);
|
|
2029
2031
|
}
|
|
2030
2032
|
/**
|
|
2031
2033
|
* Returns array of roles from comma separated string of roles
|
|
@@ -2087,13 +2089,13 @@
|
|
|
2087
2089
|
const isAccessible = !this.securityEnabled || this.hasAccessToWidget(widgetRoles, this.userRoles);
|
|
2088
2090
|
if (isAccessible) {
|
|
2089
2091
|
// [WMS-19294] pass on the previous context as second param.
|
|
2090
|
-
this.viewContainerRef.createEmbeddedView(this.templateRef, this.
|
|
2092
|
+
this.viewContainerRef.createEmbeddedView(this.templateRef, this.context);
|
|
2091
2093
|
}
|
|
2092
2094
|
else {
|
|
2093
2095
|
this.viewContainerRef.clear();
|
|
2094
2096
|
}
|
|
2095
2097
|
}
|
|
2096
|
-
static { this.ɵfac = function AccessrolesDirective_Factory(t) { return new (t || AccessrolesDirective)(i0__namespace.ɵɵdirectiveInject(i0__namespace.TemplateRef), i0__namespace.ɵɵdirectiveInject(i0__namespace.ViewContainerRef), i0__namespace.ɵɵdirectiveInject(i2__namespace.SecurityService), i0__namespace.ɵɵdirectiveInject(i0__namespace.Injector)); }; }
|
|
2098
|
+
static { this.ɵfac = function AccessrolesDirective_Factory(t) { return new (t || AccessrolesDirective)(i0__namespace.ɵɵdirectiveInject(i0__namespace.TemplateRef), i0__namespace.ɵɵdirectiveInject(i0__namespace.ViewContainerRef), i0__namespace.ɵɵdirectiveInject(i2__namespace.SecurityService), i0__namespace.ɵɵdirectiveInject(i0__namespace.Injector), i0__namespace.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
|
|
2097
2099
|
static { this.ɵdir = /*@__PURE__*/ i0__namespace.ɵɵdefineDirective({ type: AccessrolesDirective, selectors: [["", "accessroles", ""]], inputs: { accessroles: "accessroles" } }); }
|
|
2098
2100
|
}
|
|
2099
2101
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0__namespace.ɵsetClassMetadata(AccessrolesDirective, [{
|
|
@@ -2101,7 +2103,12 @@
|
|
|
2101
2103
|
args: [{
|
|
2102
2104
|
selector: '[accessroles]'
|
|
2103
2105
|
}]
|
|
2104
|
-
}], () => [{ type: i0__namespace.TemplateRef }, { type: i0__namespace.ViewContainerRef }, { type: i2__namespace.SecurityService }, { type: i0__namespace.Injector }
|
|
2106
|
+
}], () => [{ type: i0__namespace.TemplateRef }, { type: i0__namespace.ViewContainerRef }, { type: i2__namespace.SecurityService }, { type: i0__namespace.Injector }, { type: undefined, decorators: [{
|
|
2107
|
+
type: i0.Inject,
|
|
2108
|
+
args: ['EXPLICIT_CONTEXT']
|
|
2109
|
+
}, {
|
|
2110
|
+
type: i0.Optional
|
|
2111
|
+
}] }], { accessroles: [{
|
|
2105
2112
|
type: i0.Input
|
|
2106
2113
|
}] }); })();
|
|
2107
2114
|
|
|
@@ -2846,7 +2853,7 @@
|
|
|
2846
2853
|
return locale === moment.tz(timezoneName).format('Z');
|
|
2847
2854
|
});
|
|
2848
2855
|
}
|
|
2849
|
-
|
|
2856
|
+
this.formatsByLocale.timezone = locale;
|
|
2850
2857
|
const localeData = compInstance && compInstance.formatsByLocale ? compInstance.formatsByLocale : this.formatsByLocale;
|
|
2851
2858
|
Object.assign(localeData, localeObj);
|
|
2852
2859
|
resolve();
|
|
@@ -3693,7 +3700,7 @@
|
|
|
3693
3700
|
i0__namespace.ɵɵproperty("ngIf", !ctx_r2.isApplicationType);
|
|
3694
3701
|
} }
|
|
3695
3702
|
class AppComponent {
|
|
3696
|
-
constructor(_pipeProvider, _appRef, elRef, oAuthService, dialogService, spinnerService, ngZone, router, app, appManager) {
|
|
3703
|
+
constructor(_pipeProvider, _appRef, elRef, oAuthService, dialogService, spinnerService, ngZone, router, app, appManager, customIconsLoaderService) {
|
|
3697
3704
|
this.elRef = elRef;
|
|
3698
3705
|
this.oAuthService = oAuthService;
|
|
3699
3706
|
this.dialogService = dialogService;
|
|
@@ -3701,6 +3708,7 @@
|
|
|
3701
3708
|
this.router = router;
|
|
3702
3709
|
this.app = app;
|
|
3703
3710
|
this.appManager = appManager;
|
|
3711
|
+
this.customIconsLoaderService = customIconsLoaderService;
|
|
3704
3712
|
this.startApp = false;
|
|
3705
3713
|
this.isApplicationType = false;
|
|
3706
3714
|
this.spinner = { show: false, messages: [], arialabel: '' };
|
|
@@ -3709,6 +3717,9 @@
|
|
|
3709
3717
|
i1.setNgZone(ngZone);
|
|
3710
3718
|
i1.setAppRef(_appRef);
|
|
3711
3719
|
this.isApplicationType = i1.getWmProjectProperties().type === 'APPLICATION';
|
|
3720
|
+
if (this.isApplicationType) {
|
|
3721
|
+
this.customIconsLoaderService.load();
|
|
3722
|
+
}
|
|
3712
3723
|
this.appManager.beforeAppReady();
|
|
3713
3724
|
// subscribe to OAuth changes
|
|
3714
3725
|
oAuthService.getOAuthProvidersAsObservable().subscribe((providers) => {
|
|
@@ -3824,7 +3835,7 @@
|
|
|
3824
3835
|
ngDoCheck() {
|
|
3825
3836
|
i1.$invokeWatchers();
|
|
3826
3837
|
}
|
|
3827
|
-
static { this.ɵfac = function AppComponent_Factory(t) { return new (t || AppComponent)(i0__namespace.ɵɵdirectiveInject(PipeProvider), i0__namespace.ɵɵdirectiveInject(i0__namespace.ApplicationRef), i0__namespace.ɵɵdirectiveInject(i0__namespace.ElementRef), i0__namespace.ɵɵdirectiveInject(i2$2__namespace.OAuthService), i0__namespace.ɵɵdirectiveInject(i1__namespace.AbstractDialogService), i0__namespace.ɵɵdirectiveInject(i1__namespace.AbstractSpinnerService), i0__namespace.ɵɵdirectiveInject(i0__namespace.NgZone), i0__namespace.ɵɵdirectiveInject(i1$1__namespace.Router), i0__namespace.ɵɵdirectiveInject(i1__namespace.App), i0__namespace.ɵɵdirectiveInject(AppManagerService)); }; }
|
|
3838
|
+
static { this.ɵfac = function AppComponent_Factory(t) { return new (t || AppComponent)(i0__namespace.ɵɵdirectiveInject(PipeProvider), i0__namespace.ɵɵdirectiveInject(i0__namespace.ApplicationRef), i0__namespace.ɵɵdirectiveInject(i0__namespace.ElementRef), i0__namespace.ɵɵdirectiveInject(i2$2__namespace.OAuthService), i0__namespace.ɵɵdirectiveInject(i1__namespace.AbstractDialogService), i0__namespace.ɵɵdirectiveInject(i1__namespace.AbstractSpinnerService), i0__namespace.ɵɵdirectiveInject(i0__namespace.NgZone), i0__namespace.ɵɵdirectiveInject(i1$1__namespace.Router), i0__namespace.ɵɵdirectiveInject(i1__namespace.App), i0__namespace.ɵɵdirectiveInject(AppManagerService), i0__namespace.ɵɵdirectiveInject(i1__namespace.CustomIconsLoaderService)); }; }
|
|
3828
3839
|
static { this.ɵcmp = /*@__PURE__*/ i0__namespace.ɵɵdefineComponent({ type: AppComponent, selectors: [["app-root"]], viewQuery: function AppComponent_Query(rf, ctx) { if (rf & 1) {
|
|
3829
3840
|
i0__namespace.ɵɵviewQuery(i1$1.RouterOutlet, 5);
|
|
3830
3841
|
i0__namespace.ɵɵviewQuery(_c0, 5, i0.ViewContainerRef);
|
|
@@ -3842,7 +3853,7 @@
|
|
|
3842
3853
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0__namespace.ɵsetClassMetadata(AppComponent, [{
|
|
3843
3854
|
type: i0.Component,
|
|
3844
3855
|
args: [{ selector: 'app-root', encapsulation: i0.ViewEncapsulation.None, template: "<ng-container *ngIf=\"startApp\">\n <router-outlet></router-outlet>\n <div wmContainer partialContainer content=\"Common\" hidden class=\"ng-hide\" *ngIf=\"isApplicationType\"></div>\n <app-spinner name=\"globalspinner\" classname=\"global-spinner\" role=\"alert\" aria-live=\"assertive\" [attr.aria-label]=\"spinner.arialabel || 'Loading'\" [show]=\"spinner.show\" [spinnermessages]=\"spinner.messages\"></app-spinner>\n <div wmDialog name=\"oAuthLoginDialog\" title=\"Application is requesting you to sign in with\"\n close.event=\"closeOAuthDialog()\">\n <ng-template #dialogBody>\n <ul class=\"list-items\">\n <li class=\"list-item\" *ngFor=\"let provider of providersConfig\">\n <button class=\"btn\" (click)=\"provider.invoke()\">{{provider.name}}</button>\n </li>\n </ul>\n </ng-template>\n </div>\n <div wmConfirmDialog name=\"_app-confirm-dialog\" title.bind=\"title\" message.bind=\"message\" oktext.bind=\"oktext\"\n canceltext.bind=\"canceltext\" closable=\"false\" iconclass.bind=\"iconclass\"\n escape.event=\"onEscape()\" ok.event=\"onOk()\" cancel.event=\"onCancel()\" close.event=\"onClose()\" opened.event=\"onOpen()\"></div>\n <div *ngIf=\"!isApplicationType\" wmConfirmDialog name=\"PrefabConfirmDialog\" title.bind=\"title\" message.bind=\"text\" oktext.bind=\"okButtonText\"\n canceltext.bind=\"cancelButtonText\" closable=\"false\" iconclass.bind=\"iconclass\"\n escape.event=\"onEscape()\" ok.event=\"onOk()\" cancel.event=\"onCancel()\" close.event=\"onClose()\" opened.event=\"onOpen()\"></div>\n <div *ngIf=\"!isApplicationType\" wmAlertDialog name=\"PrefabAlertDialog\" title.bind=\"title\" message.bind=\"text\" oktext.bind=\"okButtonText\"\n canceltext.bind=\"cancelButtonText\" closable=\"false\" iconclass.bind=\"iconclass\"\n escape.event=\"onEscape()\" ok.event=\"onOk()\" cancel.event=\"onCancel()\" close.event=\"onClose()\" opened.event=\"onOpen()\"></div>\n <div wmAppExt></div>\n <i id=\"wm-mobile-display\"></i>\n</ng-container>\n<!--Dummy container to create the component dynamically-->\n<ng-container #dynamicComponent></ng-container>\n" }]
|
|
3845
|
-
}], () => [{ type: PipeProvider }, { type: i0__namespace.ApplicationRef }, { type: i0__namespace.ElementRef }, { type: i2$2__namespace.OAuthService }, { type: i1__namespace.AbstractDialogService }, { type: i1__namespace.AbstractSpinnerService }, { type: i0__namespace.NgZone }, { type: i1$1__namespace.Router }, { type: i1__namespace.App }, { type: AppManagerService }], { routerOutlet: [{
|
|
3856
|
+
}], () => [{ type: PipeProvider }, { type: i0__namespace.ApplicationRef }, { type: i0__namespace.ElementRef }, { type: i2$2__namespace.OAuthService }, { type: i1__namespace.AbstractDialogService }, { type: i1__namespace.AbstractSpinnerService }, { type: i0__namespace.NgZone }, { type: i1$1__namespace.Router }, { type: i1__namespace.App }, { type: AppManagerService }, { type: i1__namespace.CustomIconsLoaderService }], { routerOutlet: [{
|
|
3846
3857
|
type: i0.ViewChild,
|
|
3847
3858
|
args: [i1$1.RouterOutlet]
|
|
3848
3859
|
}], dynamicComponentContainerRef: [{
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ApplicationRef, DoCheck, ElementRef, NgZone, ViewContainerRef, AfterViewInit } from '@angular/core';
|
|
2
2
|
import { Router, RouterOutlet } from '@angular/router';
|
|
3
|
+
import { CustomIconsLoaderService } from '@wm/core';
|
|
3
4
|
import { AbstractDialogService, AbstractSpinnerService, App } from '@wm/core';
|
|
4
5
|
import { OAuthService } from '@wm/oAuth';
|
|
5
6
|
import { AppManagerService } from '../../services/app.manager.service';
|
|
@@ -18,12 +19,13 @@ export declare class AppComponent implements DoCheck, AfterViewInit {
|
|
|
18
19
|
private router;
|
|
19
20
|
private app;
|
|
20
21
|
private appManager;
|
|
22
|
+
private customIconsLoaderService;
|
|
21
23
|
startApp: boolean;
|
|
22
24
|
isApplicationType: boolean;
|
|
23
25
|
routerOutlet: RouterOutlet;
|
|
24
26
|
dynamicComponentContainerRef: ViewContainerRef;
|
|
25
27
|
spinner: SPINNER;
|
|
26
|
-
constructor(_pipeProvider: PipeProvider, _appRef: ApplicationRef, elRef: ElementRef, oAuthService: OAuthService, dialogService: AbstractDialogService, spinnerService: AbstractSpinnerService, ngZone: NgZone, router: Router, app: App, appManager: AppManagerService);
|
|
28
|
+
constructor(_pipeProvider: PipeProvider, _appRef: ApplicationRef, elRef: ElementRef, oAuthService: OAuthService, dialogService: AbstractDialogService, spinnerService: AbstractSpinnerService, ngZone: NgZone, router: Router, app: App, appManager: AppManagerService, customIconsLoaderService: CustomIconsLoaderService);
|
|
27
29
|
providersConfig: any;
|
|
28
30
|
isOAuthDialogOpen: boolean;
|
|
29
31
|
showOAuthDialog(): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TemplateRef, ViewContainerRef
|
|
1
|
+
import { Injector, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { SecurityService } from '@wm/security';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class AccessrolesDirective {
|
|
@@ -9,8 +9,9 @@ export declare class AccessrolesDirective {
|
|
|
9
9
|
private processed;
|
|
10
10
|
private readonly isUserAuthenticated;
|
|
11
11
|
private readonly userRoles;
|
|
12
|
+
private readonly context;
|
|
12
13
|
private securityEnabled;
|
|
13
|
-
constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef, securityService: SecurityService, inj: Injector);
|
|
14
|
+
constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef, securityService: SecurityService, inj: Injector, explicitContext: any);
|
|
14
15
|
/**
|
|
15
16
|
* Returns array of roles from comma separated string of roles
|
|
16
17
|
* Handles encoded commas
|
|
@@ -33,6 +34,6 @@ export declare class AccessrolesDirective {
|
|
|
33
34
|
*/
|
|
34
35
|
private hasAccessToWidget;
|
|
35
36
|
set accessroles(roles: any);
|
|
36
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<AccessrolesDirective,
|
|
37
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AccessrolesDirective, [null, null, null, null, { optional: true; }]>;
|
|
37
38
|
static ɵdir: i0.ɵɵDirectiveDeclaration<AccessrolesDirective, "[accessroles]", never, { "accessroles": { "alias": "accessroles"; "required": false; }; }, {}, never, never, false, never>;
|
|
38
39
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ApplicationRef, Component, ElementRef, NgZone, ViewEncapsulation, ViewChild, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router, RouterOutlet } from '@angular/router';
|
|
3
3
|
import { setTheme } from 'ngx-bootstrap/utils';
|
|
4
|
-
import { noop } from '@wm/core';
|
|
4
|
+
import { CustomIconsLoaderService, noop } from '@wm/core';
|
|
5
5
|
import { $invokeWatchers, AbstractDialogService, AbstractSpinnerService, getWmProjectProperties, hasCordova, setAppRef, setNgZone, setPipeProvider, App, addClass, removeClass } from '@wm/core';
|
|
6
6
|
import { OAuthService } from '@wm/oAuth';
|
|
7
7
|
import { AppManagerService } from '../../services/app.manager.service';
|
|
@@ -74,7 +74,7 @@ function AppComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
|
74
74
|
i0.ɵɵproperty("ngIf", !ctx_r2.isApplicationType);
|
|
75
75
|
} }
|
|
76
76
|
export class AppComponent {
|
|
77
|
-
constructor(_pipeProvider, _appRef, elRef, oAuthService, dialogService, spinnerService, ngZone, router, app, appManager) {
|
|
77
|
+
constructor(_pipeProvider, _appRef, elRef, oAuthService, dialogService, spinnerService, ngZone, router, app, appManager, customIconsLoaderService) {
|
|
78
78
|
this.elRef = elRef;
|
|
79
79
|
this.oAuthService = oAuthService;
|
|
80
80
|
this.dialogService = dialogService;
|
|
@@ -82,6 +82,7 @@ export class AppComponent {
|
|
|
82
82
|
this.router = router;
|
|
83
83
|
this.app = app;
|
|
84
84
|
this.appManager = appManager;
|
|
85
|
+
this.customIconsLoaderService = customIconsLoaderService;
|
|
85
86
|
this.startApp = false;
|
|
86
87
|
this.isApplicationType = false;
|
|
87
88
|
this.spinner = { show: false, messages: [], arialabel: '' };
|
|
@@ -90,6 +91,9 @@ export class AppComponent {
|
|
|
90
91
|
setNgZone(ngZone);
|
|
91
92
|
setAppRef(_appRef);
|
|
92
93
|
this.isApplicationType = getWmProjectProperties().type === 'APPLICATION';
|
|
94
|
+
if (this.isApplicationType) {
|
|
95
|
+
this.customIconsLoaderService.load();
|
|
96
|
+
}
|
|
93
97
|
this.appManager.beforeAppReady();
|
|
94
98
|
// subscribe to OAuth changes
|
|
95
99
|
oAuthService.getOAuthProvidersAsObservable().subscribe((providers) => {
|
|
@@ -205,7 +209,7 @@ export class AppComponent {
|
|
|
205
209
|
ngDoCheck() {
|
|
206
210
|
$invokeWatchers();
|
|
207
211
|
}
|
|
208
|
-
static { this.ɵfac = function AppComponent_Factory(t) { return new (t || AppComponent)(i0.ɵɵdirectiveInject(i1.PipeProvider), i0.ɵɵdirectiveInject(i0.ApplicationRef), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i2.OAuthService), i0.ɵɵdirectiveInject(i3.AbstractDialogService), i0.ɵɵdirectiveInject(i3.AbstractSpinnerService), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i4.Router), i0.ɵɵdirectiveInject(i3.App), i0.ɵɵdirectiveInject(i5.AppManagerService)); }; }
|
|
212
|
+
static { this.ɵfac = function AppComponent_Factory(t) { return new (t || AppComponent)(i0.ɵɵdirectiveInject(i1.PipeProvider), i0.ɵɵdirectiveInject(i0.ApplicationRef), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i2.OAuthService), i0.ɵɵdirectiveInject(i3.AbstractDialogService), i0.ɵɵdirectiveInject(i3.AbstractSpinnerService), i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i4.Router), i0.ɵɵdirectiveInject(i3.App), i0.ɵɵdirectiveInject(i5.AppManagerService), i0.ɵɵdirectiveInject(i3.CustomIconsLoaderService)); }; }
|
|
209
213
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AppComponent, selectors: [["app-root"]], viewQuery: function AppComponent_Query(rf, ctx) { if (rf & 1) {
|
|
210
214
|
i0.ɵɵviewQuery(RouterOutlet, 5);
|
|
211
215
|
i0.ɵɵviewQuery(_c0, 5, ViewContainerRef);
|
|
@@ -223,7 +227,7 @@ export class AppComponent {
|
|
|
223
227
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AppComponent, [{
|
|
224
228
|
type: Component,
|
|
225
229
|
args: [{ selector: 'app-root', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"startApp\">\n <router-outlet></router-outlet>\n <div wmContainer partialContainer content=\"Common\" hidden class=\"ng-hide\" *ngIf=\"isApplicationType\"></div>\n <app-spinner name=\"globalspinner\" classname=\"global-spinner\" role=\"alert\" aria-live=\"assertive\" [attr.aria-label]=\"spinner.arialabel || 'Loading'\" [show]=\"spinner.show\" [spinnermessages]=\"spinner.messages\"></app-spinner>\n <div wmDialog name=\"oAuthLoginDialog\" title=\"Application is requesting you to sign in with\"\n close.event=\"closeOAuthDialog()\">\n <ng-template #dialogBody>\n <ul class=\"list-items\">\n <li class=\"list-item\" *ngFor=\"let provider of providersConfig\">\n <button class=\"btn\" (click)=\"provider.invoke()\">{{provider.name}}</button>\n </li>\n </ul>\n </ng-template>\n </div>\n <div wmConfirmDialog name=\"_app-confirm-dialog\" title.bind=\"title\" message.bind=\"message\" oktext.bind=\"oktext\"\n canceltext.bind=\"canceltext\" closable=\"false\" iconclass.bind=\"iconclass\"\n escape.event=\"onEscape()\" ok.event=\"onOk()\" cancel.event=\"onCancel()\" close.event=\"onClose()\" opened.event=\"onOpen()\"></div>\n <div *ngIf=\"!isApplicationType\" wmConfirmDialog name=\"PrefabConfirmDialog\" title.bind=\"title\" message.bind=\"text\" oktext.bind=\"okButtonText\"\n canceltext.bind=\"cancelButtonText\" closable=\"false\" iconclass.bind=\"iconclass\"\n escape.event=\"onEscape()\" ok.event=\"onOk()\" cancel.event=\"onCancel()\" close.event=\"onClose()\" opened.event=\"onOpen()\"></div>\n <div *ngIf=\"!isApplicationType\" wmAlertDialog name=\"PrefabAlertDialog\" title.bind=\"title\" message.bind=\"text\" oktext.bind=\"okButtonText\"\n canceltext.bind=\"cancelButtonText\" closable=\"false\" iconclass.bind=\"iconclass\"\n escape.event=\"onEscape()\" ok.event=\"onOk()\" cancel.event=\"onCancel()\" close.event=\"onClose()\" opened.event=\"onOpen()\"></div>\n <div wmAppExt></div>\n <i id=\"wm-mobile-display\"></i>\n</ng-container>\n<!--Dummy container to create the component dynamically-->\n<ng-container #dynamicComponent></ng-container>\n" }]
|
|
226
|
-
}], () => [{ type: i1.PipeProvider }, { type: i0.ApplicationRef }, { type: i0.ElementRef }, { type: i2.OAuthService }, { type: i3.AbstractDialogService }, { type: i3.AbstractSpinnerService }, { type: i0.NgZone }, { type: i4.Router }, { type: i3.App }, { type: i5.AppManagerService }], { routerOutlet: [{
|
|
230
|
+
}], () => [{ type: i1.PipeProvider }, { type: i0.ApplicationRef }, { type: i0.ElementRef }, { type: i2.OAuthService }, { type: i3.AbstractDialogService }, { type: i3.AbstractSpinnerService }, { type: i0.NgZone }, { type: i4.Router }, { type: i3.App }, { type: i5.AppManagerService }, { type: i3.CustomIconsLoaderService }], { routerOutlet: [{
|
|
227
231
|
type: ViewChild,
|
|
228
232
|
args: [RouterOutlet]
|
|
229
233
|
}], dynamicComponentContainerRef: [{
|
|
@@ -231,4 +235,4 @@ export class AppComponent {
|
|
|
231
235
|
args: ['dynamicComponent', { read: ViewContainerRef }]
|
|
232
236
|
}] }); })();
|
|
233
237
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AppComponent, { className: "AppComponent", filePath: "components/app-component/app.component.ts", lineNumber: 23 }); })();
|
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvY29tcG9uZW50cy9hcHAtY29tcG9uZW50L2FwcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ydW50aW1lLWJhc2Uvc3JjL2NvbXBvbmVudHMvYXBwLWNvbXBvbmVudC9hcHAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQVcsVUFBVSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3RKLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRS9DLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDak0sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7SUNQaEUsMEJBQTBHOzs7O0lBTzFGLEFBREosOEJBQStELGlCQUNYO0lBQTVCLCtMQUFTLG9CQUFp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RyxHQUFHLEVBQUU7WUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDckQsT0FBTyxZQUFZLENBQUM7UUFDeEIsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDM0MsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwRSxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFDTCxlQUFlLEVBQUUsQ0FBQztJQUN0QixDQUFDOzZFQTNKUSxZQUFZO29FQUFaLFlBQVk7MkJBSVYsWUFBWTttQ0FFZSxnQkFBZ0I7Ozs7OztZQzVCMUQsZ0ZBQStCO1lBMkIvQixpQ0FBK0M7O1lBM0JoQyxtQ0FBYzs7O2lGRHNCaEIsWUFBWTtjQUx4QixTQUFTOzJCQUNJLFVBQVUsaUJBRUwsaUJBQWlCLENBQUMsSUFBSTttU0FNWixZQUFZO2tCQUFwQyxTQUFTO21CQUFDLFlBQVk7WUFFa0MsNEJBQTRCO2tCQUFwRixTQUFTO21CQUFDLGtCQUFrQixFQUFFLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFDOztrRkFOOUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBDb21wb25lbnQsIERvQ2hlY2ssIEVsZW1lbnRSZWYsIE5nWm9uZSwgVmlld0VuY2Fwc3VsYXRpb24sIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkNhbmNlbCwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvbkVycm9yLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciwgUm91dGVyT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgc2V0VGhlbWUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3V0aWxzJztcblxuaW1wb3J0IHtub29wfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyAkaW52b2tlV2F0Y2hlcnMsIEFic3RyYWN0RGlhbG9nU2VydmljZSwgQWJzdHJhY3RTcGlubmVyU2VydmljZSwgZ2V0V21Qcm9qZWN0UHJvcGVydGllcywgaGFzQ29yZG92YSwgc2V0QXBwUmVmLCBzZXROZ1pvbmUsIHNldFBpcGVQcm92aWRlciwgQXBwLCBhZGRDbGFzcywgcmVtb3ZlQ2xhc3MgfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBPQXV0aFNlcnZpY2UgfSBmcm9tICdAd20vb0F1dGgnO1xuaW1wb3J0IHsgQXBwTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAubWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBpcGVQcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BpcGUtcHJvdmlkZXIuc2VydmljZSc7XG5cbmludGVyZmFjZSBTUElOTkVSIHtcbiAgICBzaG93OiBib29sZWFuO1xuICAgIG1lc3NhZ2VzOiBBcnJheTxzdHJpbmc+O1xuICAgIGFyaWFsYWJlbDogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1yb290JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXBwLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCBpbXBsZW1lbnRzIERvQ2hlY2ssIEFmdGVyVmlld0luaXQge1xuICAgIHB1YmxpYyBzdGFydEFwcCA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0FwcGxpY2F0aW9uVHlwZSA9IGZhbHNlO1xuXG4gICAgQFZpZXdDaGlsZChSb3V0ZXJPdXRsZXQpIHJvdXRlck91dGxldDogUm91dGVyT3V0bGV0O1xuXG4gICAgQFZpZXdDaGlsZCgnZHluYW1pY0NvbXBvbmVudCcsIHtyZWFkOiBWaWV3Q29udGFpbmVyUmVmfSkgZHluYW1pY0NvbXBvbmVudENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIHNwaW5uZXI6IFNQSU5ORVIgPSB7c2hvdzogZmFsc2UsIG1lc3NhZ2VzOiBbXSwgYXJpYWxhYmVsOiAnJ307XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIF9waXBlUHJvdmlkZXI6IFBpcGVQcm92aWRlcixcbiAgICAgICAgX2FwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgb0F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogQWJzdHJhY3REaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBBYnN0cmFjdFNwaW5uZXJTZXJ2aWNlLFxuICAgICAgICBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBhcHBNYW5hZ2VyOiBBcHBNYW5hZ2VyU2VydmljZVxuICAgICkge1xuICAgICAgICBzZXRQaXBlUHJvdmlkZXIoX3BpcGVQcm92aWRlcik7XG4gICAgICAgIHNldE5nWm9uZShuZ1pvbmUpO1xuICAgICAgICBzZXRBcHBSZWYoX2FwcFJlZik7XG5cbiAgICAgICAgdGhpcy5pc0FwcGxpY2F0aW9uVHlwZSA9IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS50eXBlID09PSAnQVBQTElDQVRJT04nO1xuXG4gICAgICAgIHRoaXMuYXBwTWFuYWdlci5iZWZvcmVBcHBSZWFkeSgpO1xuXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBPQXV0aCBjaGFuZ2VzXG4gICAgICAgIG9BdXRoU2VydmljZS5nZXRPQXV0aFByb3ZpZGVyc0FzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgocHJvdmlkZXJzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzQ29uZmlnID0gcHJvdmlkZXJzO1xuICAgICAgICAgICAgaWYgKHByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dPQXV0aERpYWxvZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlT0F1dGhEaWFsb2coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSBtZXNzYWdlIHNvdXJjZSB0byBzaG93L2hpZGUgYXBwIHNwaW5uZXJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5nZXRNZXNzYWdlU291cmNlKCkuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vIHNldFRpbWVvdXQgaXMgdG8gYXZvaWQgJ0V4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3InXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXIuc2hvdyA9IGRhdGEuc2hvdztcbiAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXIubWVzc2FnZXMgPSBkYXRhLm1lc3NhZ2VzO1xuICAgICAgICAgICAgICAgIHRoaXMuc3Bpbm5lci5hcmlhbGFiZWwgPSBkYXRhLm1lc3NhZ2VzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gc2V0IHRoZW1lIHRvIGJzMyBvbiBuZ3gtYm9vdHN0cmFwLiBUaGlzIGF2b2lkcyBydW50aW1lIGNhbGN1bGF0aW9uIHRvIGRldGVybWluZSBicyB0aGVtZS4gVGh1cyByZXNvbHZlcyBwZXJmb3JtYW5jZS5cbiAgICAgICAgc2V0VGhlbWUoJ2JzMycpO1xuXG4gICAgICAgIGxldCBzcGlubmVySWQ7XG5cbiAgICAgICAgbGV0IG9uUGFnZVJlbmRlcmVkID0gbm9vcDtcblxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFnZSA9IGUudXJsLnNwbGl0KCc/JylbMF07XG4gICAgICAgICAgICAgICAgcGFnZSA9IHBhZ2Uuc3Vic3RyaW5nKDEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwLmFjdGl2ZUxheW91dE5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAubGF5b3V0UGFnZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodGhpcy5hcHAuYWN0aXZlTGF5b3V0TmFtZSAmJiB0aGlzLmFwcC5sYXlvdXRQYWdlcyAmJiB0aGlzLmFwcC5sYXlvdXRQYWdlcy5sZW5ndGggJiYgdGhpcy5hcHAubGF5b3V0UGFnZXMuaW5jbHVkZXMocGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bpbm5lcklkID0gdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCcnLCAnd21Sb3V0ZXJPdXRsZXQnLCAnJywgJ3dtUm91dGVyT3V0bGV0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bpbm5lcklkID0gdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCcnLCAnZ2xvYmFsU3Bpbm5lcicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdhcHAtcGFnZS1vdXRsZXQnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyhub2RlLCAncGFnZS1sb2FkLWluLXByb2dyZXNzJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZUxvYWRTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIG9uUGFnZVJlbmRlcmVkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoc3Bpbm5lcklkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2FwcC1wYWdlLW91dGxldCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgJ3BhZ2UtbG9hZC1pbi1wcm9ncmVzcycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9uUGFnZVJlbmRlcmVkID0gbm9vcDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAuYWN0aXZlUGFnZUxvYWRUaW1lID0gRGF0ZS5ub3coKSAtIHBhZ2VMb2FkU3RhcnRUaW1lO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kIHx8IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsIHx8IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+e1xuICAgICAgICAgICAgICAgICAgICBvblBhZ2VSZW5kZXJlZCgpO1xuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcHBNYW5hZ2VyLnN1YnNjcmliZSgncGFnZVJlYWR5JywgKCkgPT4ge1xuICAgICAgICAgICAgb25QYWdlUmVuZGVyZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBwTWFuYWdlci5zdWJzY3JpYmUoJ3BhZ2VBdHRhY2gnLCAoKSA9PiB7XG4gICAgICAgICAgICBvblBhZ2VSZW5kZXJlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm92aWRlcnNDb25maWc7XG4gICAgaXNPQXV0aERpYWxvZ09wZW4gPSBmYWxzZTtcblxuICAgIHNob3dPQXV0aERpYWxvZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT0F1dGhEaWFsb2dPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmlzT0F1dGhEaWFsb2dPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKCdvQXV0aExvZ2luRGlhbG9nJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZU9BdXRoRGlhbG9nKCkge1xuICAgICAgICBpZiAodGhpcy5pc09BdXRoRGlhbG9nT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09BdXRoRGlhbG9nT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsb3NlKCdvQXV0aExvZ2luRGlhbG9nJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0KCkge1xuICAgICAgICAvL3RvIGZpeCB0aGUgaXNzdWUgdGhhdCBoYXBwZW5zIG9ubHkgaW4gdGhlIGRldmVsb3BtZW50IG1vZGVcbiAgICAgICAgLy9FeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAgICAgIC8vZml4OiBodHRwczovL2Jsb2cuYW5ndWxhci11bml2ZXJzaXR5LmlvL2FuZ3VsYXItZGVidWdnaW5nL1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBcHAgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcC5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmO1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVJvdXRlck91dGxldCgpO1xuICAgICAgICB9LCAxMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvdmVycmlkZVJvdXRlck91dGxldCgpIHtcbiAgICAgICAgLy9vdmVycmlkZSB0aGUgYXR0YWNoL2RldGFjaCBtZXRob2RzXG4gICAgICAgIGNvbnN0IG9BdHRhY2ggPSB0aGlzLnJvdXRlck91dGxldC5hdHRhY2g7XG4gICAgICAgIGNvbnN0IG9EZXRhY2ggPSB0aGlzLnJvdXRlck91dGxldC5kZXRhY2g7XG4gICAgICAgIHRoaXMucm91dGVyT3V0bGV0LmF0dGFjaCA9IChjb21wb25lbnRSZWY6IGFueSkgPT4ge1xuICAgICAgICAgICAgb0F0dGFjaC5jYWxsKHRoaXMucm91dGVyT3V0bGV0LCBjb21wb25lbnRSZWYpO1xuICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLm5nT25BdHRhY2goKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXJPdXRsZXQuZGV0YWNoID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcHAuYWN0aXZlUGFnZS5uZ09uRGV0YWNoKCk7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSBvRGV0YWNoLmNhbGwodGhpcy5yb3V0ZXJPdXRsZXQpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmIChoYXNDb3Jkb3ZhKCkgJiYgIXdpbmRvd1snd21EZXZpY2VSZWFkeSddKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd3bURldmljZVJlYWR5JyAsICgpID0+IHRoaXMuc3RhcnQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgICRpbnZva2VXYXRjaGVycygpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzdGFydEFwcFwiPlxuICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cbiAgICA8ZGl2IHdtQ29udGFpbmVyIHBhcnRpYWxDb250YWluZXIgY29udGVudD1cIkNvbW1vblwiIGhpZGRlbiBjbGFzcz1cIm5nLWhpZGVcIiAqbmdJZj1cImlzQXBwbGljYXRpb25UeXBlXCI+PC9kaXY+XG4gICAgPGFwcC1zcGlubmVyIG5hbWU9XCJnbG9iYWxzcGlubmVyXCIgY2xhc3NuYW1lPVwiZ2xvYmFsLXNwaW5uZXJcIiByb2xlPVwiYWxlcnRcIiBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInNwaW5uZXIuYXJpYWxhYmVsIHx8ICdMb2FkaW5nJ1wiIFtzaG93XT1cInNwaW5uZXIuc2hvd1wiIFtzcGlubmVybWVzc2FnZXNdPVwic3Bpbm5lci5tZXNzYWdlc1wiPjwvYXBwLXNwaW5uZXI+XG4gICAgPGRpdiB3bURpYWxvZyBuYW1lPVwib0F1dGhMb2dpbkRpYWxvZ1wiIHRpdGxlPVwiQXBwbGljYXRpb24gaXMgcmVxdWVzdGluZyB5b3UgdG8gc2lnbiBpbiB3aXRoXCJcbiAgICAgICAgIGNsb3NlLmV2ZW50PVwiY2xvc2VPQXV0aERpYWxvZygpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlhbG9nQm9keT5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtaXRlbXNcIj5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgcHJvdmlkZXIgb2YgcHJvdmlkZXJzQ29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiAoY2xpY2spPVwicHJvdmlkZXIuaW52b2tlKClcIj57e3Byb3ZpZGVyLm5hbWV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgd21Db25maXJtRGlhbG9nIG5hbWU9XCJfYXBwLWNvbmZpcm0tZGlhbG9nXCIgdGl0bGUuYmluZD1cInRpdGxlXCIgbWVzc2FnZS5iaW5kPVwibWVzc2FnZVwiIG9rdGV4dC5iaW5kPVwib2t0ZXh0XCJcbiAgICAgICAgIGNhbmNlbHRleHQuYmluZD1cImNhbmNlbHRleHRcIiBjbG9zYWJsZT1cImZhbHNlXCIgaWNvbmNsYXNzLmJpbmQ9XCJpY29uY2xhc3NcIlxuICAgICAgICAgZXNjYXBlLmV2ZW50PVwib25Fc2NhcGUoKVwiIG9rLmV2ZW50PVwib25PaygpXCIgY2FuY2VsLmV2ZW50PVwib25DYW5jZWwoKVwiIGNsb3NlLmV2ZW50PVwib25DbG9zZSgpXCIgb3BlbmVkLmV2ZW50PVwib25PcGVuKClcIj48L2Rpdj5cbiAgICA8ZGl2ICAqbmdJZj1cIiFpc0FwcGxpY2F0aW9uVHlwZVwiIHdtQ29uZmlybURpYWxvZyBuYW1lPVwiUHJlZmFiQ29uZmlybURpYWxvZ1wiIHRpdGxlLmJpbmQ9XCJ0aXRsZVwiIG1lc3NhZ2UuYmluZD1cInRleHRcIiBva3RleHQuYmluZD1cIm9rQnV0dG9uVGV4dFwiXG4gICAgICAgICBjYW5jZWx0ZXh0LmJpbmQ9XCJjYW5jZWxCdXR0b25UZXh0XCIgY2xvc2FibGU9XCJmYWxzZVwiIGljb25jbGFzcy5iaW5kPVwiaWNvbmNsYXNzXCJcbiAgICAgICAgIGVzY2FwZS5ldmVudD1cIm9uRXNjYXBlKClcIiBvay5ldmVudD1cIm9uT2soKVwiIGNhbmNlbC5ldmVudD1cIm9uQ2FuY2VsKClcIiBjbG9zZS5ldmVudD1cIm9uQ2xvc2UoKVwiIG9wZW5lZC5ldmVudD1cIm9uT3BlbigpXCI+PC9kaXY+XG4gICAgPGRpdiAgKm5nSWY9XCIhaXNBcHBsaWNhdGlvblR5cGVcIiB3bUFsZXJ0RGlhbG9nIG5hbWU9XCJQcmVmYWJBbGVydERpYWxvZ1wiIHRpdGxlLmJpbmQ9XCJ0aXRsZVwiIG1lc3NhZ2UuYmluZD1cInRleHRcIiBva3RleHQuYmluZD1cIm9rQnV0dG9uVGV4dFwiXG4gICAgICAgICBjYW5jZWx0ZXh0LmJpbmQ9XCJjYW5jZWxCdXR0b25UZXh0XCIgY2xvc2FibGU9XCJmYWxzZVwiIGljb25jbGFzcy5iaW5kPVwiaWNvbmNsYXNzXCJcbiAgICAgICAgIGVzY2FwZS5ldmVudD1cIm9uRXNjYXBlKClcIiBvay5ldmVudD1cIm9uT2soKVwiIGNhbmNlbC5ldmVudD1cIm9uQ2FuY2VsKClcIiBjbG9zZS5ldmVudD1cIm9uQ2xvc2UoKVwiIG9wZW5lZC5ldmVudD1cIm9uT3BlbigpXCI+PC9kaXY+XG4gICAgPGRpdiB3bUFwcEV4dD48L2Rpdj5cbiAgICA8aSBpZD1cIndtLW1vYmlsZS1kaXNwbGF5XCI+PC9pPlxuPC9uZy1jb250YWluZXI+XG48IS0tRHVtbXkgY29udGFpbmVyIHRvIGNyZWF0ZSB0aGUgY29tcG9uZW50IGR5bmFtaWNhbGx5LS0+XG48bmctY29udGFpbmVyICNkeW5hbWljQ29tcG9uZW50PjwvbmctY29udGFpbmVyPlxuIl19
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvY29tcG9uZW50cy9hcHAtY29tcG9uZW50L2FwcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ydW50aW1lLWJhc2Uvc3JjL2NvbXBvbmVudHMvYXBwLWNvbXBvbmVudC9hcHAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQVcsVUFBVSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3RKLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRS9DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDak0sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7SUNQaEUsMEJBQTBHOzs7O0lBTzFGLEFBREosOEJBQStELGlCQUNYO0lBQTVC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blJlZiwgQ29tcG9uZW50LCBEb0NoZWNrLCBFbGVtZW50UmVmLCBOZ1pvbmUsIFZpZXdFbmNhcHN1bGF0aW9uLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FcnJvciwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIsIFJvdXRlck91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IHNldFRoZW1lIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC91dGlscyc7XG5cbmltcG9ydCB7IEN1c3RvbUljb25zTG9hZGVyU2VydmljZSwgbm9vcCB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7ICRpbnZva2VXYXRjaGVycywgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLCBBYnN0cmFjdFNwaW5uZXJTZXJ2aWNlLCBnZXRXbVByb2plY3RQcm9wZXJ0aWVzLCBoYXNDb3Jkb3ZhLCBzZXRBcHBSZWYsIHNldE5nWm9uZSwgc2V0UGlwZVByb3ZpZGVyLCBBcHAsIGFkZENsYXNzLCByZW1vdmVDbGFzcyB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IE9BdXRoU2VydmljZSB9IGZyb20gJ0B3bS9vQXV0aCc7XG5pbXBvcnQgeyBBcHBNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC5tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGlwZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGlwZS1wcm92aWRlci5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIFNQSU5ORVIge1xuICAgIHNob3c6IGJvb2xlYW47XG4gICAgbWVzc2FnZXM6IEFycmF5PHN0cmluZz47XG4gICAgYXJpYWxhYmVsOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXJvb3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcHAuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHVibGljIHN0YXJ0QXBwID0gZmFsc2U7XG4gICAgcHVibGljIGlzQXBwbGljYXRpb25UeXBlID0gZmFsc2U7XG5cbiAgICBAVmlld0NoaWxkKFJvdXRlck91dGxldCkgcm91dGVyT3V0bGV0OiBSb3V0ZXJPdXRsZXQ7XG5cbiAgICBAVmlld0NoaWxkKCdkeW5hbWljQ29tcG9uZW50Jywge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KSBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgc3Bpbm5lcjogU1BJTk5FUiA9IHtzaG93OiBmYWxzZSwgbWVzc2FnZXM6IFtdLCBhcmlhbGFiZWw6ICcnfTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgX3BpcGVQcm92aWRlcjogUGlwZVByb3ZpZGVyLFxuICAgICAgICBfYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBvQXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBBYnN0cmFjdERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc3Bpbm5lclNlcnZpY2U6IEFic3RyYWN0U3Bpbm5lclNlcnZpY2UsXG4gICAgICAgIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIGFwcDogQXBwLFxuICAgICAgICBwcml2YXRlIGFwcE1hbmFnZXI6IEFwcE1hbmFnZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGN1c3RvbUljb25zTG9hZGVyU2VydmljZTogQ3VzdG9tSWNvbnNMb2FkZXJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHNldFBpcGVQcm92aWRlcihfcGlwZVByb3ZpZGVyKTtcbiAgICAgICAgc2V0Tmdab25lKG5nWm9uZSk7XG4gICAgICAgIHNldEFwcFJlZihfYXBwUmVmKTtcblxuICAgICAgICB0aGlzLmlzQXBwbGljYXRpb25UeXBlID0gZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLnR5cGUgPT09ICdBUFBMSUNBVElPTic7XG4gICAgICAgIGlmKHRoaXMuaXNBcHBsaWNhdGlvblR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tSWNvbnNMb2FkZXJTZXJ2aWNlLmxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXBwTWFuYWdlci5iZWZvcmVBcHBSZWFkeSgpO1xuXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBPQXV0aCBjaGFuZ2VzXG4gICAgICAgIG9BdXRoU2VydmljZS5nZXRPQXV0aFByb3ZpZGVyc0FzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgocHJvdmlkZXJzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzQ29uZmlnID0gcHJvdmlkZXJzO1xuICAgICAgICAgICAgaWYgKHByb3ZpZGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dPQXV0aERpYWxvZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlT0F1dGhEaWFsb2coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSBtZXNzYWdlIHNvdXJjZSB0byBzaG93L2hpZGUgYXBwIHNwaW5uZXJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5nZXRNZXNzYWdlU291cmNlKCkuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vIHNldFRpbWVvdXQgaXMgdG8gYXZvaWQgJ0V4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3InXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXIuc2hvdyA9IGRhdGEuc2hvdztcbiAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXIubWVzc2FnZXMgPSBkYXRhLm1lc3NhZ2VzO1xuICAgICAgICAgICAgICAgIHRoaXMuc3Bpbm5lci5hcmlhbGFiZWwgPSBkYXRhLm1lc3NhZ2VzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gc2V0IHRoZW1lIHRvIGJzMyBvbiBuZ3gtYm9vdHN0cmFwLiBUaGlzIGF2b2lkcyBydW50aW1lIGNhbGN1bGF0aW9uIHRvIGRldGVybWluZSBicyB0aGVtZS4gVGh1cyByZXNvbHZlcyBwZXJmb3JtYW5jZS5cbiAgICAgICAgc2V0VGhlbWUoJ2JzMycpO1xuXG4gICAgICAgIGxldCBzcGlubmVySWQ7XG5cbiAgICAgICAgbGV0IG9uUGFnZVJlbmRlcmVkID0gbm9vcDtcblxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGUgPT4ge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFnZSA9IGUudXJsLnNwbGl0KCc/JylbMF07XG4gICAgICAgICAgICAgICAgcGFnZSA9IHBhZ2Uuc3Vic3RyaW5nKDEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwLmFjdGl2ZUxheW91dE5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAubGF5b3V0UGFnZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodGhpcy5hcHAuYWN0aXZlTGF5b3V0TmFtZSAmJiB0aGlzLmFwcC5sYXlvdXRQYWdlcyAmJiB0aGlzLmFwcC5sYXlvdXRQYWdlcy5sZW5ndGggJiYgdGhpcy5hcHAubGF5b3V0UGFnZXMuaW5jbHVkZXMocGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bpbm5lcklkID0gdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCcnLCAnd21Sb3V0ZXJPdXRsZXQnLCAnJywgJ3dtUm91dGVyT3V0bGV0Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bpbm5lcklkID0gdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCcnLCAnZ2xvYmFsU3Bpbm5lcicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdhcHAtcGFnZS1vdXRsZXQnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBhZGRDbGFzcyhub2RlLCAncGFnZS1sb2FkLWluLXByb2dyZXNzJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZUxvYWRTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIG9uUGFnZVJlbmRlcmVkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoc3Bpbm5lcklkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2FwcC1wYWdlLW91dGxldCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgJ3BhZ2UtbG9hZC1pbi1wcm9ncmVzcycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9uUGFnZVJlbmRlcmVkID0gbm9vcDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHAuYWN0aXZlUGFnZUxvYWRUaW1lID0gRGF0ZS5ub3coKSAtIHBhZ2VMb2FkU3RhcnRUaW1lO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kIHx8IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsIHx8IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+e1xuICAgICAgICAgICAgICAgICAgICBvblBhZ2VSZW5kZXJlZCgpO1xuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcHBNYW5hZ2VyLnN1YnNjcmliZSgncGFnZVJlYWR5JywgKCkgPT4ge1xuICAgICAgICAgICAgb25QYWdlUmVuZGVyZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBwTWFuYWdlci5zdWJzY3JpYmUoJ3BhZ2VBdHRhY2gnLCAoKSA9PiB7XG4gICAgICAgICAgICBvblBhZ2VSZW5kZXJlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm92aWRlcnNDb25maWc7XG4gICAgaXNPQXV0aERpYWxvZ09wZW4gPSBmYWxzZTtcblxuICAgIHNob3dPQXV0aERpYWxvZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT0F1dGhEaWFsb2dPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmlzT0F1dGhEaWFsb2dPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKCdvQXV0aExvZ2luRGlhbG9nJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZU9BdXRoRGlhbG9nKCkge1xuICAgICAgICBpZiAodGhpcy5pc09BdXRoRGlhbG9nT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09BdXRoRGlhbG9nT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsb3NlKCdvQXV0aExvZ2luRGlhbG9nJywgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0KCkge1xuICAgICAgICAvL3RvIGZpeCB0aGUgaXNzdWUgdGhhdCBoYXBwZW5zIG9ubHkgaW4gdGhlIGRldmVsb3BtZW50IG1vZGVcbiAgICAgICAgLy9FeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAgICAgIC8vZml4OiBodHRwczovL2Jsb2cuYW5ndWxhci11bml2ZXJzaXR5LmlvL2FuZ3VsYXItZGVidWdnaW5nL1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBcHAgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcC5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmO1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVJvdXRlck91dGxldCgpO1xuICAgICAgICB9LCAxMCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvdmVycmlkZVJvdXRlck91dGxldCgpIHtcbiAgICAgICAgLy9vdmVycmlkZSB0aGUgYXR0YWNoL2RldGFjaCBtZXRob2RzXG4gICAgICAgIGNvbnN0IG9BdHRhY2ggPSB0aGlzLnJvdXRlck91dGxldC5hdHRhY2g7XG4gICAgICAgIGNvbnN0IG9EZXRhY2ggPSB0aGlzLnJvdXRlck91dGxldC5kZXRhY2g7XG4gICAgICAgIHRoaXMucm91dGVyT3V0bGV0LmF0dGFjaCA9IChjb21wb25lbnRSZWY6IGFueSkgPT4ge1xuICAgICAgICAgICAgb0F0dGFjaC5jYWxsKHRoaXMucm91dGVyT3V0bGV0LCBjb21wb25lbnRSZWYpO1xuICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLm5nT25BdHRhY2goKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXJPdXRsZXQuZGV0YWNoID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcHAuYWN0aXZlUGFnZS5uZ09uRGV0YWNoKCk7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSBvRGV0YWNoLmNhbGwodGhpcy5yb3V0ZXJPdXRsZXQpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmIChoYXNDb3Jkb3ZhKCkgJiYgIXdpbmRvd1snd21EZXZpY2VSZWFkeSddKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd3bURldmljZVJlYWR5JyAsICgpID0+IHRoaXMuc3RhcnQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgICRpbnZva2VXYXRjaGVycygpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzdGFydEFwcFwiPlxuICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cbiAgICA8ZGl2IHdtQ29udGFpbmVyIHBhcnRpYWxDb250YWluZXIgY29udGVudD1cIkNvbW1vblwiIGhpZGRlbiBjbGFzcz1cIm5nLWhpZGVcIiAqbmdJZj1cImlzQXBwbGljYXRpb25UeXBlXCI+PC9kaXY+XG4gICAgPGFwcC1zcGlubmVyIG5hbWU9XCJnbG9iYWxzcGlubmVyXCIgY2xhc3NuYW1lPVwiZ2xvYmFsLXNwaW5uZXJcIiByb2xlPVwiYWxlcnRcIiBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInNwaW5uZXIuYXJpYWxhYmVsIHx8ICdMb2FkaW5nJ1wiIFtzaG93XT1cInNwaW5uZXIuc2hvd1wiIFtzcGlubmVybWVzc2FnZXNdPVwic3Bpbm5lci5tZXNzYWdlc1wiPjwvYXBwLXNwaW5uZXI+XG4gICAgPGRpdiB3bURpYWxvZyBuYW1lPVwib0F1dGhMb2dpbkRpYWxvZ1wiIHRpdGxlPVwiQXBwbGljYXRpb24gaXMgcmVxdWVzdGluZyB5b3UgdG8gc2lnbiBpbiB3aXRoXCJcbiAgICAgICAgIGNsb3NlLmV2ZW50PVwiY2xvc2VPQXV0aERpYWxvZygpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlhbG9nQm9keT5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtaXRlbXNcIj5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgcHJvdmlkZXIgb2YgcHJvdmlkZXJzQ29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiAoY2xpY2spPVwicHJvdmlkZXIuaW52b2tlKClcIj57e3Byb3ZpZGVyLm5hbWV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgd21Db25maXJtRGlhbG9nIG5hbWU9XCJfYXBwLWNvbmZpcm0tZGlhbG9nXCIgdGl0bGUuYmluZD1cInRpdGxlXCIgbWVzc2FnZS5iaW5kPVwibWVzc2FnZVwiIG9rdGV4dC5iaW5kPVwib2t0ZXh0XCJcbiAgICAgICAgIGNhbmNlbHRleHQuYmluZD1cImNhbmNlbHRleHRcIiBjbG9zYWJsZT1cImZhbHNlXCIgaWNvbmNsYXNzLmJpbmQ9XCJpY29uY2xhc3NcIlxuICAgICAgICAgZXNjYXBlLmV2ZW50PVwib25Fc2NhcGUoKVwiIG9rLmV2ZW50PVwib25PaygpXCIgY2FuY2VsLmV2ZW50PVwib25DYW5jZWwoKVwiIGNsb3NlLmV2ZW50PVwib25DbG9zZSgpXCIgb3BlbmVkLmV2ZW50PVwib25PcGVuKClcIj48L2Rpdj5cbiAgICA8ZGl2ICAqbmdJZj1cIiFpc0FwcGxpY2F0aW9uVHlwZVwiIHdtQ29uZmlybURpYWxvZyBuYW1lPVwiUHJlZmFiQ29uZmlybURpYWxvZ1wiIHRpdGxlLmJpbmQ9XCJ0aXRsZVwiIG1lc3NhZ2UuYmluZD1cInRleHRcIiBva3RleHQuYmluZD1cIm9rQnV0dG9uVGV4dFwiXG4gICAgICAgICBjYW5jZWx0ZXh0LmJpbmQ9XCJjYW5jZWxCdXR0b25UZXh0XCIgY2xvc2FibGU9XCJmYWxzZVwiIGljb25jbGFzcy5iaW5kPVwiaWNvbmNsYXNzXCJcbiAgICAgICAgIGVzY2FwZS5ldmVudD1cIm9uRXNjYXBlKClcIiBvay5ldmVudD1cIm9uT2soKVwiIGNhbmNlbC5ldmVudD1cIm9uQ2FuY2VsKClcIiBjbG9zZS5ldmVudD1cIm9uQ2xvc2UoKVwiIG9wZW5lZC5ldmVudD1cIm9uT3BlbigpXCI+PC9kaXY+XG4gICAgPGRpdiAgKm5nSWY9XCIhaXNBcHBsaWNhdGlvblR5cGVcIiB3bUFsZXJ0RGlhbG9nIG5hbWU9XCJQcmVmYWJBbGVydERpYWxvZ1wiIHRpdGxlLmJpbmQ9XCJ0aXRsZVwiIG1lc3NhZ2UuYmluZD1cInRleHRcIiBva3RleHQuYmluZD1cIm9rQnV0dG9uVGV4dFwiXG4gICAgICAgICBjYW5jZWx0ZXh0LmJpbmQ9XCJjYW5jZWxCdXR0b25UZXh0XCIgY2xvc2FibGU9XCJmYWxzZVwiIGljb25jbGFzcy5iaW5kPVwiaWNvbmNsYXNzXCJcbiAgICAgICAgIGVzY2FwZS5ldmVudD1cIm9uRXNjYXBlKClcIiBvay5ldmVudD1cIm9uT2soKVwiIGNhbmNlbC5ldmVudD1cIm9uQ2FuY2VsKClcIiBjbG9zZS5ldmVudD1cIm9uQ2xvc2UoKVwiIG9wZW5lZC5ldmVudD1cIm9uT3BlbigpXCI+PC9kaXY+XG4gICAgPGRpdiB3bUFwcEV4dD48L2Rpdj5cbiAgICA8aSBpZD1cIndtLW1vYmlsZS1kaXNwbGF5XCI+PC9pPlxuPC9uZy1jb250YWluZXI+XG48IS0tRHVtbXkgY29udGFpbmVyIHRvIGNyZWF0ZSB0aGUgY29tcG9uZW50IGR5bmFtaWNhbGx5LS0+XG48bmctY29udGFpbmVyICNkeW5hbWljQ29tcG9uZW50PjwvbmctY29udGFpbmVyPlxuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Directive, Input, TemplateRef, ViewContainerRef
|
|
1
|
+
import { Directive, Inject, Injector, Input, Optional, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { SecurityService } from '@wm/security';
|
|
3
|
-
import { get, includes, split, trim } from "lodash-es";
|
|
3
|
+
import { extend, get, includes, split, trim } from "lodash-es";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@wm/security";
|
|
6
6
|
var USER_ROLE;
|
|
@@ -10,16 +10,18 @@ var USER_ROLE;
|
|
|
10
10
|
USER_ROLE["AUTHENTICATED"] = "Authenticated";
|
|
11
11
|
})(USER_ROLE || (USER_ROLE = {}));
|
|
12
12
|
export class AccessrolesDirective {
|
|
13
|
-
constructor(templateRef, viewContainerRef, securityService, inj) {
|
|
13
|
+
constructor(templateRef, viewContainerRef, securityService, inj, explicitContext) {
|
|
14
14
|
this.templateRef = templateRef;
|
|
15
15
|
this.viewContainerRef = viewContainerRef;
|
|
16
16
|
this.securityService = securityService;
|
|
17
17
|
this.inj = inj;
|
|
18
18
|
this.processed = false;
|
|
19
|
+
this.context = {};
|
|
19
20
|
const securityConfig = this.securityService.get();
|
|
20
21
|
this.securityEnabled = get(securityConfig, 'securityEnabled');
|
|
21
22
|
this.isUserAuthenticated = get(securityConfig, 'authenticated');
|
|
22
23
|
this.userRoles = get(securityConfig, 'userInfo.userRoles');
|
|
24
|
+
extend(this.context, inj._lView[8], explicitContext);
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
25
27
|
* Returns array of roles from comma separated string of roles
|
|
@@ -81,13 +83,13 @@ export class AccessrolesDirective {
|
|
|
81
83
|
const isAccessible = !this.securityEnabled || this.hasAccessToWidget(widgetRoles, this.userRoles);
|
|
82
84
|
if (isAccessible) {
|
|
83
85
|
// [WMS-19294] pass on the previous context as second param.
|
|
84
|
-
this.viewContainerRef.createEmbeddedView(this.templateRef, this.
|
|
86
|
+
this.viewContainerRef.createEmbeddedView(this.templateRef, this.context);
|
|
85
87
|
}
|
|
86
88
|
else {
|
|
87
89
|
this.viewContainerRef.clear();
|
|
88
90
|
}
|
|
89
91
|
}
|
|
90
|
-
static { this.ɵfac = function AccessrolesDirective_Factory(t) { return new (t || AccessrolesDirective)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i1.SecurityService), i0.ɵɵdirectiveInject(i0.Injector)); }; }
|
|
92
|
+
static { this.ɵfac = function AccessrolesDirective_Factory(t) { return new (t || AccessrolesDirective)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i1.SecurityService), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
|
|
91
93
|
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: AccessrolesDirective, selectors: [["", "accessroles", ""]], inputs: { accessroles: "accessroles" } }); }
|
|
92
94
|
}
|
|
93
95
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AccessrolesDirective, [{
|
|
@@ -95,7 +97,12 @@ export class AccessrolesDirective {
|
|
|
95
97
|
args: [{
|
|
96
98
|
selector: '[accessroles]'
|
|
97
99
|
}]
|
|
98
|
-
}], () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.SecurityService }, { type: i0.Injector }
|
|
100
|
+
}], () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.SecurityService }, { type: i0.Injector }, { type: undefined, decorators: [{
|
|
101
|
+
type: Inject,
|
|
102
|
+
args: ['EXPLICIT_CONTEXT']
|
|
103
|
+
}, {
|
|
104
|
+
type: Optional
|
|
105
|
+
}] }], { accessroles: [{
|
|
99
106
|
type: Input
|
|
100
107
|
}] }); })();
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzcm9sZXMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcnVudGltZS1iYXNlL3NyYy9kaXJlY3RpdmVzL2FjY2Vzc3JvbGVzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFMUcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQzs7O0FBRTdELElBQUssU0FJSjtBQUpELFdBQUssU0FBUztJQUNWLGtDQUFxQixDQUFBO0lBQ3JCLG9DQUF1QixDQUFBO0lBQ3ZCLDRDQUErQixDQUFBO0FBQ25DLENBQUMsRUFKSSxTQUFTLEtBQVQsU0FBUyxRQUliO0FBS0QsTUFBTSxPQUFPLG9CQUFvQjtJQVE3QixZQUNZLFdBQTZCLEVBQzdCLGdCQUFrQyxFQUNsQyxlQUFnQyxFQUNoQyxHQUFhLEVBQ21CLGVBQW9CO1FBSnBELGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUM3QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxDQUFVO1FBVmpCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFHVCxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBVTFCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDOUQs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QUhoQyxTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLGVBQWU7YUFDNUI7O3NCQWNRLE1BQU07dUJBQUMsa0JBQWtCOztzQkFBRyxRQUFRO3FCQWtFNUIsV0FBVztrQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT3B0aW9uYWwsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtTZWN1cml0eVNlcnZpY2V9IGZyb20gJ0B3bS9zZWN1cml0eSc7XG5pbXBvcnQge2V4dGVuZCwgZ2V0LCBpbmNsdWRlcywgc3BsaXQsIHRyaW19IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZW51bSBVU0VSX1JPTEUge1xuICAgIEVWRVJZT05FID0gJ0V2ZXJ5b25lJyxcbiAgICBBTk9OWU1PVVMgPSAnQW5vbnltb3VzJyxcbiAgICBBVVRIRU5USUNBVEVEID0gJ0F1dGhlbnRpY2F0ZWQnXG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2FjY2Vzc3JvbGVzXSdcbn0pXG5leHBvcnQgY2xhc3MgQWNjZXNzcm9sZXNEaXJlY3RpdmUge1xuXG4gICAgcHJpdmF0ZSBwcm9jZXNzZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzVXNlckF1dGhlbnRpY2F0ZWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyUm9sZXM7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0ID0ge307XG4gICAgcHJpdmF0ZSBzZWN1cml0eUVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGluajogSW5qZWN0b3IsXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICBjb25zdCBzZWN1cml0eUNvbmZpZyA9IHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmdldCgpO1xuICAgICAgICB0aGlzLnNlY3VyaXR5RW5hYmxlZCA9IGdldChzZWN1cml0eUNvbmZpZywgJ3NlY3VyaXR5RW5hYmxlZCcpO1xuICAgICAgICB0aGlzLmlzVXNlckF1dGhlbnRpY2F0ZWQgPSBnZXQoc2VjdXJpdHlDb25maWcsICdhdXRoZW50aWNhdGVkJyk7XG4gICAgICAgIHRoaXMudXNlclJvbGVzID0gZ2V0KHNlY3VyaXR5Q29uZmlnLCAndXNlckluZm8udXNlclJvbGVzJyk7XG4gICAgICAgIGV4dGVuZCh0aGlzLmNvbnRleHQsIChpbmogYXMgYW55KS5fbFZpZXdbOF0sIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhcnJheSBvZiByb2xlcyBmcm9tIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2Ygcm9sZXNcbiAgICAgKiBIYW5kbGVzIGVuY29kZWQgY29tbWFzXG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqIEByZXR1cm5zIHthbnl9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRXaWRnZXRSb2xlc0FycmF5RnJvbVN0cih2YWwpIHtcbiAgICAgICAgY29uc3QgVU5JQ09ERV9DT01NQV9SRUdFWCA9IC8mIzQ0Oy9nO1xuXG4gICAgICAgIHZhbCA9IHZhbCB8fCAnJztcbiAgICAgICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXBsYWNlIHRoZSB1bmljb2RlIGVxdWl2YWxlbnQgb2YgY29tbWEgd2l0aCBjb21tYVxuICAgICAgICByZXR1cm4gc3BsaXQodmFsLCAnLCcpLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgcmV0dXJuIHRyaW0odikucmVwbGFjZShVTklDT0RFX0NPTU1BX1JFR0VYLCAnLCcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgcm9sZXMgaW4gZmlyc3QgYXJyYXlzIGlzXG4gICAgICogQHBhcmFtIHdpZGdldFJvbGVzXG4gICAgICogQHBhcmFtIHVzZXJSb2xlc1xuICAgICAqIEByZXR1cm5zIHthbnl9XG4gICAgICovXG4gICAgcHJpdmF0ZSBtYXRjaFJvbGVzKHdpZGdldFJvbGVzLCB1c2VyUm9sZXMpIHtcbiAgICAgICAgcmV0dXJuIHdpZGdldFJvbGVzLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpbmNsdWRlcyh1c2VyUm9sZXMsIGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNpZGVzIHdoZXRoZXIgdGhlIGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIgaGFzIGFjY2VzcyB0byB3aWRnZXQgb3Igbm90XG4gICAgICogQHBhcmFtIHdpZGdldFJvbGVzXG4gICAgICogQHBhcmFtIHVzZXJSb2xlc1xuICAgICAqIEByZXR1cm5zIHthbnl9XG4gICAgICovXG4gICAgcHJpdmF0ZSBoYXNBY2Nlc3NUb1dpZGdldCh3aWRnZXRSb2xlcywgdXNlclJvbGVzKSB7XG4gICAgICAgIC8vIGFjY2VzcyB0aGUgd2lkZ2V0IHdoZW4gJ0V2ZXJ5b25lJyBpcyBjaG9zZW5cbiAgICAgICAgaWYgKGluY2x1ZGVzKHdpZGdldFJvbGVzLCBVU0VSX1JPTEUuRVZFUllPTkUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFjY2VzcyB0aGUgd2lkZ2V0IHdoZW4gJ0Fub255bW91cycgaXMgY2hvc2VuIGFuZCB1c2VyIGlzIG5vdCBhdXRoZW50aWNhdGVkXG4gICAgICAgIGlmIChpbmNsdWRlcyh3aWRnZXRSb2xlcywgVVNFUl9ST0xFLkFOT05ZTU9VUykgJiYgIXRoaXMuaXNVc2VyQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhY2Nlc3MgdGhlIHdpZGdldCB3aGVuICdPbmx5IEF1dGhlbnRpY2F0ZWQgVXNlcnMnIGlzIGNob3NlbiBhbmQgdXNlciBpcyBhdXRoZW50aWNhdGVkXG4gICAgICAgIGlmIChpbmNsdWRlcyh3aWRnZXRSb2xlcywgVVNFUl9ST0xFLkFVVEhFTlRJQ0FURUQpICYmIHRoaXMuaXNVc2VyQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhY2Nlc3MgdGhlIHdpZGdldCB3aGVuIHdpZGdldCByb2xlIGFuZCBsb2dnZWQgaW4gdXNlciByb2xlIG1hdGNoZXNcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNVc2VyQXV0aGVudGljYXRlZCAmJiB0aGlzLm1hdGNoUm9sZXMod2lkZ2V0Um9sZXMsIHVzZXJSb2xlcyk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGFjY2Vzc3JvbGVzKHJvbGVzKSB7XG4gICAgICAgIC8vIGZsYWcgdG8gY29tcHV0ZSB0aGUgZGlyZWN0aXZlIG9ubHkgb25jZVxuICAgICAgICBpZiAodGhpcy5wcm9jZXNzZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0Um9sZXMgPSB0aGlzLmdldFdpZGdldFJvbGVzQXJyYXlGcm9tU3RyKHJvbGVzKTtcbiAgICAgICAgY29uc3QgaXNBY2Nlc3NpYmxlID0gIXRoaXMuc2VjdXJpdHlFbmFibGVkIHx8IHRoaXMuaGFzQWNjZXNzVG9XaWRnZXQod2lkZ2V0Um9sZXMsIHRoaXMudXNlclJvbGVzKTtcbiAgICAgICAgaWYgKGlzQWNjZXNzaWJsZSkge1xuICAgICAgICAgICAgLy8gW1dNUy0xOTI5NF0gcGFzcyBvbiB0aGUgcHJldmlvdXMgY29udGV4dCBhcyBzZWNvbmQgcGFyYW0uXG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsIHRoaXMuY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|