@eui/core 15.4.0 → 15.4.1
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/LICENSE +296 -296
- package/README.md +26 -26
- package/assets/i18n-eui/bg.json +114 -114
- package/assets/i18n-eui/cs.json +114 -114
- package/assets/i18n-eui/da.json +114 -114
- package/assets/i18n-eui/de.json +114 -114
- package/assets/i18n-eui/el.json +114 -114
- package/assets/i18n-eui/en.json +113 -113
- package/assets/i18n-eui/es.json +114 -114
- package/assets/i18n-eui/et.json +114 -114
- package/assets/i18n-eui/fi.json +114 -114
- package/assets/i18n-eui/fr.json +114 -114
- package/assets/i18n-eui/ga.json +114 -114
- package/assets/i18n-eui/hr.json +114 -114
- package/assets/i18n-eui/hu.json +114 -114
- package/assets/i18n-eui/it.json +114 -114
- package/assets/i18n-eui/lt.json +114 -114
- package/assets/i18n-eui/lv.json +114 -114
- package/assets/i18n-eui/mt.json +114 -114
- package/assets/i18n-eui/nl.json +114 -114
- package/assets/i18n-eui/pl.json +114 -114
- package/assets/i18n-eui/pt.json +114 -114
- package/assets/i18n-eui/ro.json +114 -114
- package/assets/i18n-eui/sk.json +114 -114
- package/assets/i18n-eui/sl.json +114 -114
- package/assets/i18n-eui/sv.json +114 -114
- package/docs/classes/RouterMock.html +5 -5
- package/docs/dependencies.html +95 -7
- package/docs/index.html +36 -59
- package/docs/injectables/CoreAppEffects.html +51 -51
- package/docs/js/menu-wc.js +12 -7
- package/docs/js/menu-wc_es5.js +1 -1
- package/docs/js/search/search_index.js +2 -2
- package/docs/miscellaneous/variables.html +1211 -1211
- package/docs/overview.html +171 -0
- package/esm2020/eui-core.mjs +4 -4
- package/esm2020/index.mjs +13 -13
- package/esm2020/lib/eui-core.module.mjs +78 -78
- package/esm2020/lib/helpers/date-helpers.mjs +3 -3
- package/esm2020/lib/helpers/dom-helpers.mjs +87 -87
- package/esm2020/lib/helpers/event-helpers.mjs +9 -9
- package/esm2020/lib/helpers/form-helpers.mjs +42 -42
- package/esm2020/lib/helpers/format-helpers.mjs +66 -66
- package/esm2020/lib/helpers/http-helpers.mjs +7 -7
- package/esm2020/lib/helpers/index.mjs +8 -8
- package/esm2020/lib/helpers/utils.mjs +7 -7
- package/esm2020/lib/interceptors/add-lang-param.interceptor.mjs +35 -35
- package/esm2020/lib/interceptors/cache-prevention.interceptor.mjs +21 -21
- package/esm2020/lib/interceptors/cors-security.interceptor.mjs +15 -15
- package/esm2020/lib/interceptors/csrf-prevention.interceptor.mjs +15 -15
- package/esm2020/lib/interceptors/eu-login-session-timeout-handling.interceptor.mjs +72 -72
- package/esm2020/lib/interceptors/index.mjs +8 -8
- package/esm2020/lib/interceptors/openid/index.mjs +4 -4
- package/esm2020/lib/interceptors/openid/openid-connect.interceptor.mjs +149 -149
- package/esm2020/lib/interceptors/openid/openid-connect.service.mjs +56 -56
- package/esm2020/lib/interceptors/openid/openid-connect.service.mock.mjs +8 -8
- package/esm2020/lib/interceptors/ux-request-error-model.interceptor.mjs +31 -31
- package/esm2020/lib/services/app/eui-init-app.mjs +29 -29
- package/esm2020/lib/services/app/eui-pre-init-app.mjs +43 -43
- package/esm2020/lib/services/app/eui-startup.mjs +40 -40
- package/esm2020/lib/services/app/factories/log.mjs +55 -55
- package/esm2020/lib/services/app/index.mjs +2 -2
- package/esm2020/lib/services/config/defaults.mjs +68 -68
- package/esm2020/lib/services/config/tokens.mjs +74 -74
- package/esm2020/lib/services/errors/eui.error.mjs +38 -38
- package/esm2020/lib/services/errors/global-error-handler.mjs +24 -24
- package/esm2020/lib/services/errors/http-error-handler-callback-functions.mjs +17 -17
- package/esm2020/lib/services/errors/http-error-handler.interceptor.mjs +55 -55
- package/esm2020/lib/services/errors/index.mjs +5 -5
- package/esm2020/lib/services/i18n/i18n.loader.mjs +198 -198
- package/esm2020/lib/services/i18n/i18n.resource.mjs +43 -43
- package/esm2020/lib/services/i18n/i18n.service.mjs +228 -228
- package/esm2020/lib/services/i18n/i18n.service.mock.mjs +38 -38
- package/esm2020/lib/services/i18n/index.mjs +6 -6
- package/esm2020/lib/services/index.mjs +19 -19
- package/esm2020/lib/services/locale/index.mjs +3 -3
- package/esm2020/lib/services/locale/locale.service.mjs +232 -232
- package/esm2020/lib/services/locale/locale.service.mock.mjs +43 -43
- package/esm2020/lib/services/log/index.mjs +4 -4
- package/esm2020/lib/services/log/log.module.mjs +38 -38
- package/esm2020/lib/services/log/log.service.mjs +51 -51
- package/esm2020/lib/services/log/log.service.mock.mjs +7 -7
- package/esm2020/lib/services/permission/permission.service.mjs +110 -110
- package/esm2020/lib/services/queue/api-queue.service.mjs +137 -137
- package/esm2020/lib/services/queue/api-queue.service.mock.mjs +23 -23
- package/esm2020/lib/services/queue/index.mjs +3 -3
- package/esm2020/lib/services/storage/async-storage.service.mjs +17 -17
- package/esm2020/lib/services/storage/async-storage.service.mock.mjs +22 -22
- package/esm2020/lib/services/storage/index.mjs +8 -8
- package/esm2020/lib/services/storage/local-forage.service.mjs +93 -93
- package/esm2020/lib/services/storage/local-storage.service.mjs +75 -75
- package/esm2020/lib/services/storage/session-storage.service.mjs +75 -75
- package/esm2020/lib/services/storage/storage.service.mjs +6 -6
- package/esm2020/lib/services/storage/storage.service.mock.mjs +12 -12
- package/esm2020/lib/services/store/actions/app.actions.mjs +74 -74
- package/esm2020/lib/services/store/actions/i18n.actions.mjs +11 -11
- package/esm2020/lib/services/store/actions/index.mjs +6 -6
- package/esm2020/lib/services/store/actions/locale.actions.mjs +11 -11
- package/esm2020/lib/services/store/actions/notifications.actions.mjs +11 -11
- package/esm2020/lib/services/store/actions/user.actions.mjs +39 -39
- package/esm2020/lib/services/store/effects/app.effects.mjs +55 -55
- package/esm2020/lib/services/store/effects/index.mjs +4 -4
- package/esm2020/lib/services/store/index.mjs +6 -6
- package/esm2020/lib/services/store/reducers/app.reducers.mjs +56 -56
- package/esm2020/lib/services/store/reducers/core.reducers.mjs +13 -13
- package/esm2020/lib/services/store/reducers/i18n.reducers.mjs +16 -16
- package/esm2020/lib/services/store/reducers/index.mjs +8 -8
- package/esm2020/lib/services/store/reducers/locale.reducers.mjs +16 -16
- package/esm2020/lib/services/store/reducers/meta.reducers.mjs +89 -89
- package/esm2020/lib/services/store/reducers/notifications.reducers.mjs +13 -13
- package/esm2020/lib/services/store/reducers/user.reducers.mjs +43 -43
- package/esm2020/lib/services/store/store.service.mjs +112 -112
- package/esm2020/lib/services/store/store.service.mock.mjs +22 -22
- package/esm2020/lib/services/user/index.mjs +3 -3
- package/esm2020/lib/services/user/user.service.mjs +64 -64
- package/esm2020/lib/services/user/user.service.mock.mjs +32 -32
- package/esm2020/lib/services/ux-app-shell.service.mjs +690 -690
- package/esm2020/lib/services/ux-dynamic-component/ux-dynamic-component.service.mjs +63 -63
- package/esm2020/lib/services/ux-dynamic-menu/ux-dynamic-menu.service.mjs +66 -66
- package/esm2020/lib/services/ux-error-feedback/ux-error-feedback.service.mjs +99 -99
- package/esm2020/lib/services/ux-error-feedback/ux-error-handler.operator.mjs +16 -16
- package/esm2020/lib/services/ux-timezone.service.mjs +716 -716
- package/fesm2015/eui-core.mjs +4484 -4484
- package/fesm2015/eui-core.mjs.map +1 -1
- package/fesm2020/eui-core.mjs +4538 -4538
- package/fesm2020/eui-core.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/eui-core.module.d.ts +20 -20
- package/lib/helpers/date-helpers.d.ts +2 -2
- package/lib/helpers/dom-helpers.d.ts +26 -26
- package/lib/helpers/event-helpers.d.ts +1 -1
- package/lib/helpers/form-helpers.d.ts +10 -10
- package/lib/helpers/format-helpers.d.ts +12 -12
- package/lib/helpers/http-helpers.d.ts +2 -2
- package/lib/helpers/index.d.ts +7 -7
- package/lib/helpers/utils.d.ts +6 -6
- package/lib/interceptors/add-lang-param.interceptor.d.ts +16 -16
- package/lib/interceptors/cache-prevention.interceptor.d.ts +8 -8
- package/lib/interceptors/cors-security.interceptor.d.ts +8 -8
- package/lib/interceptors/csrf-prevention.interceptor.d.ts +8 -8
- package/lib/interceptors/eu-login-session-timeout-handling.interceptor.d.ts +12 -12
- package/lib/interceptors/index.d.ts +7 -7
- package/lib/interceptors/openid/index.d.ts +3 -3
- package/lib/interceptors/openid/openid-connect.interceptor.d.ts +14 -14
- package/lib/interceptors/openid/openid-connect.service.d.ts +17 -17
- package/lib/interceptors/openid/openid-connect.service.mock.d.ts +5 -5
- package/lib/interceptors/ux-request-error-model.interceptor.d.ts +13 -13
- package/lib/services/app/eui-init-app.d.ts +2 -2
- package/lib/services/app/eui-pre-init-app.d.ts +16 -16
- package/lib/services/app/eui-startup.d.ts +4 -4
- package/lib/services/app/factories/log.d.ts +25 -25
- package/lib/services/app/index.d.ts +1 -1
- package/lib/services/config/defaults.d.ts +11 -11
- package/lib/services/config/tokens.d.ts +19 -19
- package/lib/services/errors/eui.error.d.ts +15 -15
- package/lib/services/errors/global-error-handler.d.ts +10 -10
- package/lib/services/errors/http-error-handler-callback-functions.d.ts +6 -6
- package/lib/services/errors/http-error-handler.interceptor.d.ts +22 -22
- package/lib/services/errors/index.d.ts +4 -4
- package/lib/services/i18n/i18n.loader.d.ts +79 -79
- package/lib/services/i18n/i18n.resource.d.ts +35 -35
- package/lib/services/i18n/i18n.service.d.ts +73 -73
- package/lib/services/i18n/i18n.service.mock.d.ts +19 -19
- package/lib/services/i18n/index.d.ts +4 -4
- package/lib/services/index.d.ts +18 -18
- package/lib/services/locale/index.d.ts +2 -2
- package/lib/services/locale/locale.service.d.ts +68 -68
- package/lib/services/locale/locale.service.mock.d.ts +15 -15
- package/lib/services/log/index.d.ts +3 -3
- package/lib/services/log/log.module.d.ts +15 -15
- package/lib/services/log/log.service.d.ts +27 -27
- package/lib/services/log/log.service.mock.d.ts +4 -4
- package/lib/services/permission/permission.service.d.ts +52 -52
- package/lib/services/queue/api-queue.service.d.ts +76 -76
- package/lib/services/queue/api-queue.service.mock.d.ts +13 -13
- package/lib/services/queue/index.d.ts +2 -2
- package/lib/services/storage/async-storage.service.d.ts +44 -44
- package/lib/services/storage/async-storage.service.mock.d.ts +11 -11
- package/lib/services/storage/index.d.ts +7 -7
- package/lib/services/storage/local-forage.service.d.ts +48 -48
- package/lib/services/storage/local-storage.service.d.ts +34 -34
- package/lib/services/storage/session-storage.service.d.ts +34 -34
- package/lib/services/storage/storage.service.d.ts +28 -28
- package/lib/services/storage/storage.service.mock.d.ts +7 -7
- package/lib/services/store/actions/app.actions.d.ts +82 -82
- package/lib/services/store/actions/i18n.actions.d.ts +11 -11
- package/lib/services/store/actions/index.d.ts +5 -5
- package/lib/services/store/actions/locale.actions.d.ts +11 -11
- package/lib/services/store/actions/notifications.actions.d.ts +10 -10
- package/lib/services/store/actions/user.actions.d.ts +35 -35
- package/lib/services/store/effects/app.effects.d.ts +19 -19
- package/lib/services/store/effects/index.d.ts +3 -3
- package/lib/services/store/index.d.ts +5 -5
- package/lib/services/store/reducers/app.reducers.d.ts +3 -3
- package/lib/services/store/reducers/core.reducers.d.ts +3 -3
- package/lib/services/store/reducers/i18n.reducers.d.ts +3 -3
- package/lib/services/store/reducers/index.d.ts +7 -7
- package/lib/services/store/reducers/locale.reducers.d.ts +3 -3
- package/lib/services/store/reducers/meta.reducers.d.ts +17 -17
- package/lib/services/store/reducers/notifications.reducers.d.ts +3 -3
- package/lib/services/store/reducers/user.reducers.d.ts +3 -3
- package/lib/services/store/store.service.d.ts +43 -43
- package/lib/services/store/store.service.mock.d.ts +12 -12
- package/lib/services/user/index.d.ts +2 -2
- package/lib/services/user/user.service.d.ts +15 -15
- package/lib/services/user/user.service.mock.d.ts +16 -16
- package/lib/services/ux-app-shell.service.d.ts +155 -155
- package/lib/services/ux-dynamic-component/ux-dynamic-component.service.d.ts +36 -36
- package/lib/services/ux-dynamic-menu/ux-dynamic-menu.service.d.ts +14 -14
- package/lib/services/ux-error-feedback/ux-error-feedback.service.d.ts +35 -35
- package/lib/services/ux-error-feedback/ux-error-handler.operator.d.ts +3 -3
- package/lib/services/ux-timezone.service.d.ts +269 -269
- package/package.json +2 -2
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
import { Optional, Inject, Injectable, LOCALE_ID } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, of } from 'rxjs';
|
|
3
|
-
import { LocaleService } from './locale.service';
|
|
4
|
-
import localeFr from '@angular/common/locales/fr';
|
|
5
|
-
import localeEl from '@angular/common/locales/el';
|
|
6
|
-
import { registerLocaleData } from '@angular/common';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class LocaleServiceMock extends LocaleService {
|
|
9
|
-
constructor(locale_id) {
|
|
10
|
-
super(null, { locale: { id: 'en', available: [] } }, locale_id, null, null, null);
|
|
11
|
-
this.locale_id = locale_id;
|
|
12
|
-
this.DEFAULT_LOCALE = 'en';
|
|
13
|
-
this.stateSubject = new BehaviorSubject({ id: this.DEFAULT_LOCALE });
|
|
14
|
-
}
|
|
15
|
-
getState() {
|
|
16
|
-
return this.stateSubject.asObservable();
|
|
17
|
-
}
|
|
18
|
-
updateState(state) {
|
|
19
|
-
this.DEFAULT_LOCALE = state.id || 'en';
|
|
20
|
-
if (state.id === 'fr') {
|
|
21
|
-
registerLocaleData(localeFr, 'fr');
|
|
22
|
-
}
|
|
23
|
-
else if (state.id === 'el') {
|
|
24
|
-
registerLocaleData(localeEl, 'fr');
|
|
25
|
-
}
|
|
26
|
-
this.stateSubject.next(state);
|
|
27
|
-
}
|
|
28
|
-
init(state) {
|
|
29
|
-
this.DEFAULT_LOCALE = state.id || 'en';
|
|
30
|
-
return of({ success: true });
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
/** @nocollapse */ LocaleServiceMock.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocaleServiceMock, deps: [{ token: LOCALE_ID, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
34
|
-
/** @nocollapse */ LocaleServiceMock.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocaleServiceMock });
|
|
35
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocaleServiceMock, decorators: [{
|
|
36
|
-
type: Injectable
|
|
37
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
38
|
-
type: Optional
|
|
39
|
-
}, {
|
|
40
|
-
type: Inject,
|
|
41
|
-
args: [LOCALE_ID]
|
|
42
|
-
}] }]; } });
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Optional, Inject, Injectable, LOCALE_ID } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, of } from 'rxjs';
|
|
3
|
+
import { LocaleService } from './locale.service';
|
|
4
|
+
import localeFr from '@angular/common/locales/fr';
|
|
5
|
+
import localeEl from '@angular/common/locales/el';
|
|
6
|
+
import { registerLocaleData } from '@angular/common';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class LocaleServiceMock extends LocaleService {
|
|
9
|
+
constructor(locale_id) {
|
|
10
|
+
super(null, { locale: { id: 'en', available: [] } }, locale_id, null, null, null);
|
|
11
|
+
this.locale_id = locale_id;
|
|
12
|
+
this.DEFAULT_LOCALE = 'en';
|
|
13
|
+
this.stateSubject = new BehaviorSubject({ id: this.DEFAULT_LOCALE });
|
|
14
|
+
}
|
|
15
|
+
getState() {
|
|
16
|
+
return this.stateSubject.asObservable();
|
|
17
|
+
}
|
|
18
|
+
updateState(state) {
|
|
19
|
+
this.DEFAULT_LOCALE = state.id || 'en';
|
|
20
|
+
if (state.id === 'fr') {
|
|
21
|
+
registerLocaleData(localeFr, 'fr');
|
|
22
|
+
}
|
|
23
|
+
else if (state.id === 'el') {
|
|
24
|
+
registerLocaleData(localeEl, 'fr');
|
|
25
|
+
}
|
|
26
|
+
this.stateSubject.next(state);
|
|
27
|
+
}
|
|
28
|
+
init(state) {
|
|
29
|
+
this.DEFAULT_LOCALE = state.id || 'en';
|
|
30
|
+
return of({ success: true });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** @nocollapse */ LocaleServiceMock.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocaleServiceMock, deps: [{ token: LOCALE_ID, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
34
|
+
/** @nocollapse */ LocaleServiceMock.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocaleServiceMock });
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocaleServiceMock, decorators: [{
|
|
36
|
+
type: Injectable
|
|
37
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
38
|
+
type: Optional
|
|
39
|
+
}, {
|
|
40
|
+
type: Inject,
|
|
41
|
+
args: [LOCALE_ID]
|
|
42
|
+
}] }]; } });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLnNlcnZpY2UubW9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbG9jYWxlL2xvY2FsZS5zZXJ2aWNlLm1vY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxRQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFDbEQsT0FBTyxRQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBR3JELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxhQUFhO0lBSWhELFlBQXFELFNBQWlCO1FBQ2xFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRGpDLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFIOUQsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsaUJBQVksR0FBaUMsSUFBSSxlQUFlLENBQWMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFJbkgsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFrQjtRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO1FBQ3ZDLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbkIsa0JBQWtCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RDO2FBQU0sSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxQixrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdEM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxDQUFDLEtBQW1CO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDdkMsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDOztpSUF6QlEsaUJBQWlCLGtCQUlNLFNBQVM7cUlBSmhDLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVOzswQkFLTSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcHRpb25hbCwgSW5qZWN0LCBJbmplY3RhYmxlLCBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBFdWlTZXJ2aWNlU3RhdHVzLCBMb2NhbGVTdGF0ZSB9IGZyb20gJ0BldWkvYmFzZSc7XHJcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICcuL2xvY2FsZS5zZXJ2aWNlJztcclxuaW1wb3J0IGxvY2FsZUZyIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2ZyJztcclxuaW1wb3J0IGxvY2FsZUVsIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2VsJztcclxuaW1wb3J0IHsgcmVnaXN0ZXJMb2NhbGVEYXRhIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIExvY2FsZVNlcnZpY2VNb2NrIGV4dGVuZHMgTG9jYWxlU2VydmljZSB7XHJcbiAgICBwcml2YXRlIERFRkFVTFRfTE9DQUxFID0gJ2VuJztcclxuICAgIHByaXZhdGUgc3RhdGVTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8TG9jYWxlU3RhdGU+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMb2NhbGVTdGF0ZT4oeyBpZDogdGhpcy5ERUZBVUxUX0xPQ0FMRSB9KTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KExPQ0FMRV9JRCkgcHJvdGVjdGVkIGxvY2FsZV9pZDogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobnVsbCwgeyBsb2NhbGU6IHsgaWQ6ICdlbicsIGF2YWlsYWJsZTogW10gfSB9LCBsb2NhbGVfaWQsIG51bGwsIG51bGwsIG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0YXRlKCk6IE9ic2VydmFibGU8TG9jYWxlU3RhdGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU3RhdGUoc3RhdGU6IExvY2FsZVN0YXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ERUZBVUxUX0xPQ0FMRSA9IHN0YXRlLmlkIHx8ICdlbic7XHJcbiAgICAgICAgaWYgKHN0YXRlLmlkID09PSAnZnInKSB7XHJcbiAgICAgICAgICAgIHJlZ2lzdGVyTG9jYWxlRGF0YShsb2NhbGVGciwgJ2ZyJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5pZCA9PT0gJ2VsJykge1xyXG4gICAgICAgICAgICByZWdpc3RlckxvY2FsZURhdGEobG9jYWxlRWwsICdmcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KHN0YXRlPzogTG9jYWxlU3RhdGUpOiBPYnNlcnZhYmxlPEV1aVNlcnZpY2VTdGF0dXM+IHtcclxuICAgICAgICB0aGlzLkRFRkFVTFRfTE9DQUxFID0gc3RhdGUuaWQgfHwgJ2VuJztcclxuICAgICAgICByZXR1cm4gb2YoeyBzdWNjZXNzOiB0cnVlIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from './log.service';
|
|
2
|
-
export * from './log.service.mock';
|
|
3
|
-
export * from './log.module';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export * from './log.service';
|
|
2
|
+
export * from './log.service.mock';
|
|
3
|
+
export * from './log.module';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2xvZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9sb2cuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbG9nLnNlcnZpY2UubW9jayc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbG9nLm1vZHVsZSc7XHJcbiJdfQ==
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import { InjectionToken, Injector, NgModule } from '@angular/core';
|
|
2
|
-
import { LogService } from './log.service';
|
|
3
|
-
import { DEFAULT_LOG_CONFIG } from '../config/defaults';
|
|
4
|
-
import { logServiceFactory } from '../app/factories/log';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
const LOG_MODULE_CONFIG_TOKEN = new InjectionToken('LOG_CONFIG');
|
|
7
|
-
/**
|
|
8
|
-
* Log Module
|
|
9
|
-
*/
|
|
10
|
-
export class LogModule {
|
|
11
|
-
/** method called in your root module to provide the LogService */
|
|
12
|
-
static forRoot(config = DEFAULT_LOG_CONFIG) {
|
|
13
|
-
return {
|
|
14
|
-
ngModule: LogModule,
|
|
15
|
-
providers: [
|
|
16
|
-
{ provide: LOG_MODULE_CONFIG_TOKEN, useValue: config },
|
|
17
|
-
{ provide: LogService, useFactory: logServiceFactory, deps: [LOG_MODULE_CONFIG_TOKEN, Injector] },
|
|
18
|
-
],
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
/** method called in your other (non root, lazy loaded) modules to import a different instance of LogService */
|
|
22
|
-
static forChild(config = DEFAULT_LOG_CONFIG) {
|
|
23
|
-
return {
|
|
24
|
-
ngModule: LogModule,
|
|
25
|
-
providers: [
|
|
26
|
-
{ provide: LOG_MODULE_CONFIG_TOKEN, useValue: config },
|
|
27
|
-
{ provide: LogService, useFactory: logServiceFactory, deps: [LOG_MODULE_CONFIG_TOKEN, Injector] },
|
|
28
|
-
],
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
/** @nocollapse */ LogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
33
|
-
/** @nocollapse */ LogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: LogModule });
|
|
34
|
-
/** @nocollapse */ LogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogModule });
|
|
35
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogModule, decorators: [{
|
|
36
|
-
type: NgModule
|
|
37
|
-
}] });
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { InjectionToken, Injector, NgModule } from '@angular/core';
|
|
2
|
+
import { LogService } from './log.service';
|
|
3
|
+
import { DEFAULT_LOG_CONFIG } from '../config/defaults';
|
|
4
|
+
import { logServiceFactory } from '../app/factories/log';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
const LOG_MODULE_CONFIG_TOKEN = new InjectionToken('LOG_CONFIG');
|
|
7
|
+
/**
|
|
8
|
+
* Log Module
|
|
9
|
+
*/
|
|
10
|
+
export class LogModule {
|
|
11
|
+
/** method called in your root module to provide the LogService */
|
|
12
|
+
static forRoot(config = DEFAULT_LOG_CONFIG) {
|
|
13
|
+
return {
|
|
14
|
+
ngModule: LogModule,
|
|
15
|
+
providers: [
|
|
16
|
+
{ provide: LOG_MODULE_CONFIG_TOKEN, useValue: config },
|
|
17
|
+
{ provide: LogService, useFactory: logServiceFactory, deps: [LOG_MODULE_CONFIG_TOKEN, Injector] },
|
|
18
|
+
],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/** method called in your other (non root, lazy loaded) modules to import a different instance of LogService */
|
|
22
|
+
static forChild(config = DEFAULT_LOG_CONFIG) {
|
|
23
|
+
return {
|
|
24
|
+
ngModule: LogModule,
|
|
25
|
+
providers: [
|
|
26
|
+
{ provide: LOG_MODULE_CONFIG_TOKEN, useValue: config },
|
|
27
|
+
{ provide: LogService, useFactory: logServiceFactory, deps: [LOG_MODULE_CONFIG_TOKEN, Injector] },
|
|
28
|
+
],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** @nocollapse */ LogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
33
|
+
/** @nocollapse */ LogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: LogModule });
|
|
34
|
+
/** @nocollapse */ LogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogModule });
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogModule, decorators: [{
|
|
36
|
+
type: NgModule
|
|
37
|
+
}] });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbG9nL2xvZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUV6RCxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUFZLFlBQVksQ0FBQyxDQUFDO0FBRTVFOztHQUVHO0FBRUgsTUFBTSxPQUFPLFNBQVM7SUFDbEIsa0VBQWtFO0lBQ2xFLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBb0Isa0JBQWtCO1FBQ2pELE9BQU87WUFDSCxRQUFRLEVBQUUsU0FBUztZQUNuQixTQUFTLEVBQUU7Z0JBQ1AsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtnQkFDdEQsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxRQUFRLENBQUMsRUFBRTthQUNwRztTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsK0dBQStHO0lBQy9HLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBb0Isa0JBQWtCO1FBQ2xELE9BQU87WUFDSCxRQUFRLEVBQUUsU0FBUztZQUNuQixTQUFTLEVBQUU7Z0JBQ1AsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtnQkFDdEQsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxRQUFRLENBQUMsRUFBRTthQUNwRztTQUNKLENBQUM7SUFDTixDQUFDOzt5SEFyQlEsU0FBUzswSEFBVCxTQUFTOzBIQUFULFNBQVM7MkZBQVQsU0FBUztrQkFEckIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBJbmplY3RvciwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTG9nQ29uZmlnIH0gZnJvbSAnQGV1aS9iYXNlJztcclxuXHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuL2xvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgREVGQVVMVF9MT0dfQ09ORklHIH0gZnJvbSAnLi4vY29uZmlnL2RlZmF1bHRzJztcclxuaW1wb3J0IHsgbG9nU2VydmljZUZhY3RvcnkgfSBmcm9tICcuLi9hcHAvZmFjdG9yaWVzL2xvZyc7XHJcblxyXG5jb25zdCBMT0dfTU9EVUxFX0NPTkZJR19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMb2dDb25maWc+KCdMT0dfQ09ORklHJyk7XHJcblxyXG4vKipcclxuICogTG9nIE1vZHVsZVxyXG4gKi9cclxuQE5nTW9kdWxlKClcclxuZXhwb3J0IGNsYXNzIExvZ01vZHVsZSB7XHJcbiAgICAvKiogbWV0aG9kIGNhbGxlZCBpbiB5b3VyIHJvb3QgbW9kdWxlIHRvIHByb3ZpZGUgdGhlIExvZ1NlcnZpY2UgKi9cclxuICAgIHN0YXRpYyBmb3JSb290KGNvbmZpZzogTG9nQ29uZmlnID0gREVGQVVMVF9MT0dfQ09ORklHKTogTW9kdWxlV2l0aFByb3ZpZGVyczxMb2dNb2R1bGU+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuZ01vZHVsZTogTG9nTW9kdWxlLFxyXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTE9HX01PRFVMRV9DT05GSUdfVE9LRU4sIHVzZVZhbHVlOiBjb25maWcgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTG9nU2VydmljZSwgdXNlRmFjdG9yeTogbG9nU2VydmljZUZhY3RvcnksIGRlcHM6IFtMT0dfTU9EVUxFX0NPTkZJR19UT0tFTiwgSW5qZWN0b3JdIH0sXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogbWV0aG9kIGNhbGxlZCBpbiB5b3VyIG90aGVyIChub24gcm9vdCwgbGF6eSBsb2FkZWQpIG1vZHVsZXMgdG8gaW1wb3J0IGEgZGlmZmVyZW50IGluc3RhbmNlIG9mIExvZ1NlcnZpY2UgKi9cclxuICAgIHN0YXRpYyBmb3JDaGlsZChjb25maWc6IExvZ0NvbmZpZyA9IERFRkFVTFRfTE9HX0NPTkZJRyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TG9nTW9kdWxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IExvZ01vZHVsZSxcclxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IExPR19NT0RVTEVfQ09ORklHX1RPS0VOLCB1c2VWYWx1ZTogY29uZmlnIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IExvZ1NlcnZpY2UsIHVzZUZhY3Rvcnk6IGxvZ1NlcnZpY2VGYWN0b3J5LCBkZXBzOiBbTE9HX01PRFVMRV9DT05GSUdfVE9LRU4sIEluamVjdG9yXSB9LFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import { Inject, Injectable, InjectionToken } from '@angular/core';
|
|
2
|
-
import { Logger } from '@eui/base';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@eui/base";
|
|
5
|
-
export const BASE_LOGGER_NAME_TOKEN = new InjectionToken('BASE_LOGGER_NAME');
|
|
6
|
-
export const LOG_LEVEL_TOKEN = new InjectionToken('LOG_LEVEL');
|
|
7
|
-
export const LOG_APPENDERS_TOKEN = new InjectionToken('LOG_APPENDERS');
|
|
8
|
-
/**
|
|
9
|
-
* Log service, responsible for getting or creating loggers. It itself acts as a base logger
|
|
10
|
-
*/
|
|
11
|
-
export class LogService extends Logger {
|
|
12
|
-
constructor(name, level, appenders) {
|
|
13
|
-
super(name, level, appenders);
|
|
14
|
-
this.name = name;
|
|
15
|
-
this.level = level;
|
|
16
|
-
this.appenders = appenders;
|
|
17
|
-
/** the list of persistent loggers */
|
|
18
|
-
this.loggers = {};
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Gets a logger by name. If the logger does not exist, it is created
|
|
22
|
-
*
|
|
23
|
-
* @param loggerName logger name
|
|
24
|
-
* @param persist optional parameter. Set it to true if you want to reuse the logger. By default, it is set to false
|
|
25
|
-
* @returns the logger
|
|
26
|
-
*/
|
|
27
|
-
getLogger(loggerName, persist = false) {
|
|
28
|
-
// create the logger, if necessary
|
|
29
|
-
const logger = (persist && this.loggers[loggerName]) || new Logger(loggerName, this.level, this.appenders);
|
|
30
|
-
// if the logger is persistent, add it to the list of persistent loggers
|
|
31
|
-
if (persist) {
|
|
32
|
-
this.loggers[loggerName] = logger;
|
|
33
|
-
}
|
|
34
|
-
return logger;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
/** @nocollapse */ LogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogService, deps: [{ token: BASE_LOGGER_NAME_TOKEN }, { token: LOG_LEVEL_TOKEN }, { token: LOG_APPENDERS_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
38
|
-
/** @nocollapse */ LogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogService });
|
|
39
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogService, decorators: [{
|
|
40
|
-
type: Injectable
|
|
41
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
42
|
-
type: Inject,
|
|
43
|
-
args: [BASE_LOGGER_NAME_TOKEN]
|
|
44
|
-
}] }, { type: i1.LogLevel, decorators: [{
|
|
45
|
-
type: Inject,
|
|
46
|
-
args: [LOG_LEVEL_TOKEN]
|
|
47
|
-
}] }, { type: undefined, decorators: [{
|
|
48
|
-
type: Inject,
|
|
49
|
-
args: [LOG_APPENDERS_TOKEN]
|
|
50
|
-
}] }]; } });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Inject, Injectable, InjectionToken } from '@angular/core';
|
|
2
|
+
import { Logger } from '@eui/base';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@eui/base";
|
|
5
|
+
export const BASE_LOGGER_NAME_TOKEN = new InjectionToken('BASE_LOGGER_NAME');
|
|
6
|
+
export const LOG_LEVEL_TOKEN = new InjectionToken('LOG_LEVEL');
|
|
7
|
+
export const LOG_APPENDERS_TOKEN = new InjectionToken('LOG_APPENDERS');
|
|
8
|
+
/**
|
|
9
|
+
* Log service, responsible for getting or creating loggers. It itself acts as a base logger
|
|
10
|
+
*/
|
|
11
|
+
export class LogService extends Logger {
|
|
12
|
+
constructor(name, level, appenders) {
|
|
13
|
+
super(name, level, appenders);
|
|
14
|
+
this.name = name;
|
|
15
|
+
this.level = level;
|
|
16
|
+
this.appenders = appenders;
|
|
17
|
+
/** the list of persistent loggers */
|
|
18
|
+
this.loggers = {};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Gets a logger by name. If the logger does not exist, it is created
|
|
22
|
+
*
|
|
23
|
+
* @param loggerName logger name
|
|
24
|
+
* @param persist optional parameter. Set it to true if you want to reuse the logger. By default, it is set to false
|
|
25
|
+
* @returns the logger
|
|
26
|
+
*/
|
|
27
|
+
getLogger(loggerName, persist = false) {
|
|
28
|
+
// create the logger, if necessary
|
|
29
|
+
const logger = (persist && this.loggers[loggerName]) || new Logger(loggerName, this.level, this.appenders);
|
|
30
|
+
// if the logger is persistent, add it to the list of persistent loggers
|
|
31
|
+
if (persist) {
|
|
32
|
+
this.loggers[loggerName] = logger;
|
|
33
|
+
}
|
|
34
|
+
return logger;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** @nocollapse */ LogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogService, deps: [{ token: BASE_LOGGER_NAME_TOKEN }, { token: LOG_LEVEL_TOKEN }, { token: LOG_APPENDERS_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
38
|
+
/** @nocollapse */ LogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogService });
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LogService, decorators: [{
|
|
40
|
+
type: Injectable
|
|
41
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
42
|
+
type: Inject,
|
|
43
|
+
args: [BASE_LOGGER_NAME_TOKEN]
|
|
44
|
+
}] }, { type: i1.LogLevel, decorators: [{
|
|
45
|
+
type: Inject,
|
|
46
|
+
args: [LOG_LEVEL_TOKEN]
|
|
47
|
+
}] }, { type: undefined, decorators: [{
|
|
48
|
+
type: Inject,
|
|
49
|
+
args: [LOG_APPENDERS_TOKEN]
|
|
50
|
+
}] }]; } });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2xvZy9sb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFlLE1BQU0sRUFBWSxNQUFNLFdBQVcsQ0FBQzs7O0FBRTFELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUFTLGtCQUFrQixDQUFDLENBQUM7QUFDckYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksY0FBYyxDQUFXLFdBQVcsQ0FBQyxDQUFDO0FBQ3pFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFnQixlQUFlLENBQUMsQ0FBQztBQUV0Rjs7R0FFRztBQUVILE1BQU0sT0FBTyxVQUFXLFNBQVEsTUFBTTtJQUlsQyxZQUM4QyxJQUFZLEVBQ25CLEtBQWUsRUFDWCxTQUF3QjtRQUUvRCxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUpZLFNBQUksR0FBSixJQUFJLENBQVE7UUFDbkIsVUFBSyxHQUFMLEtBQUssQ0FBVTtRQUNYLGNBQVMsR0FBVCxTQUFTLENBQWU7UUFObkUscUNBQXFDO1FBQzNCLFlBQU8sR0FBRyxFQUFFLENBQUM7SUFRdkIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFNBQVMsQ0FBQyxVQUFrQixFQUFFLFVBQW1CLEtBQUs7UUFDbEQsa0NBQWtDO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBTyxJQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbkgsd0VBQXdFO1FBQ3hFLElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDckM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOzswSEE3QlEsVUFBVSxrQkFLUCxzQkFBc0IsYUFDdEIsZUFBZSxhQUNmLG1CQUFtQjs4SEFQdEIsVUFBVTsyRkFBVixVQUFVO2tCQUR0QixVQUFVOzswQkFNRixNQUFNOzJCQUFDLHNCQUFzQjs7MEJBQzdCLE1BQU07MkJBQUMsZUFBZTs7MEJBQ3RCLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2dBcHBlbmRlciwgTG9nZ2VyLCBMb2dMZXZlbCB9IGZyb20gJ0BldWkvYmFzZSc7XHJcblxyXG5leHBvcnQgY29uc3QgQkFTRV9MT0dHRVJfTkFNRV9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdCQVNFX0xPR0dFUl9OQU1FJyk7XHJcbmV4cG9ydCBjb25zdCBMT0dfTEVWRUxfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48TG9nTGV2ZWw+KCdMT0dfTEVWRUwnKTtcclxuZXhwb3J0IGNvbnN0IExPR19BUFBFTkRFUlNfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48TG9nQXBwZW5kZXJbXT4oJ0xPR19BUFBFTkRFUlMnKTtcclxuXHJcbi8qKlxyXG4gKiBMb2cgc2VydmljZSwgcmVzcG9uc2libGUgZm9yIGdldHRpbmcgb3IgY3JlYXRpbmcgbG9nZ2Vycy4gSXQgaXRzZWxmIGFjdHMgYXMgYSBiYXNlIGxvZ2dlclxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTG9nU2VydmljZSBleHRlbmRzIExvZ2dlciB7XHJcbiAgICAvKiogdGhlIGxpc3Qgb2YgcGVyc2lzdGVudCBsb2dnZXJzICovXHJcbiAgICBwcm90ZWN0ZWQgbG9nZ2VycyA9IHt9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoQkFTRV9MT0dHRVJfTkFNRV9UT0tFTikgcHJvdGVjdGVkIG5hbWU6IHN0cmluZyxcclxuICAgICAgICBASW5qZWN0KExPR19MRVZFTF9UT0tFTikgcHJvdGVjdGVkIGxldmVsOiBMb2dMZXZlbCxcclxuICAgICAgICBASW5qZWN0KExPR19BUFBFTkRFUlNfVE9LRU4pIHByb3RlY3RlZCBhcHBlbmRlcnM6IExvZ0FwcGVuZGVyW11cclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUsIGxldmVsLCBhcHBlbmRlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhIGxvZ2dlciBieSBuYW1lLiBJZiB0aGUgbG9nZ2VyIGRvZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGxvZ2dlck5hbWUgbG9nZ2VyIG5hbWVcclxuICAgICAqIEBwYXJhbSBwZXJzaXN0IG9wdGlvbmFsIHBhcmFtZXRlci4gU2V0IGl0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gcmV1c2UgdGhlIGxvZ2dlci4gQnkgZGVmYXVsdCwgaXQgaXMgc2V0IHRvIGZhbHNlXHJcbiAgICAgKiBAcmV0dXJucyB0aGUgbG9nZ2VyXHJcbiAgICAgKi9cclxuICAgIGdldExvZ2dlcihsb2dnZXJOYW1lOiBzdHJpbmcsIHBlcnNpc3Q6IGJvb2xlYW4gPSBmYWxzZSk6IExvZ2dlciB7XHJcbiAgICAgICAgLy8gY3JlYXRlIHRoZSBsb2dnZXIsIGlmIG5lY2Vzc2FyeVxyXG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IChwZXJzaXN0ICYmIDxMb2dnZXI+dGhpcy5sb2dnZXJzW2xvZ2dlck5hbWVdKSB8fCBuZXcgTG9nZ2VyKGxvZ2dlck5hbWUsIHRoaXMubGV2ZWwsIHRoaXMuYXBwZW5kZXJzKTtcclxuXHJcbiAgICAgICAgLy8gaWYgdGhlIGxvZ2dlciBpcyBwZXJzaXN0ZW50LCBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgcGVyc2lzdGVudCBsb2dnZXJzXHJcbiAgICAgICAgaWYgKHBlcnNpc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXJzW2xvZ2dlck5hbWVdID0gbG9nZ2VyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { LoggerMock } from '@eui/base';
|
|
2
|
-
export class LogServiceMock extends LoggerMock {
|
|
3
|
-
getLogger() {
|
|
4
|
-
return new LoggerMock();
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { LoggerMock } from '@eui/base';
|
|
2
|
+
export class LogServiceMock extends LoggerMock {
|
|
3
|
+
getLogger() {
|
|
4
|
+
return new LoggerMock();
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLnNlcnZpY2UubW9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbG9nL2xvZy5zZXJ2aWNlLm1vY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV2QyxNQUFNLE9BQU8sY0FBZSxTQUFRLFVBQVU7SUFDMUMsU0FBUztRQUNMLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dnZXJNb2NrIH0gZnJvbSAnQGV1aS9iYXNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2dTZXJ2aWNlTW9jayBleHRlbmRzIExvZ2dlck1vY2sge1xyXG4gICAgZ2V0TG9nZ2VyKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgTG9nZ2VyTW9jaygpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
import { Injectable, Optional } from '@angular/core';
|
|
2
|
-
import { EuiService, getUserRights } from '@eui/base';
|
|
3
|
-
import { of } from 'rxjs';
|
|
4
|
-
import { UpdateUserRightsAction } from '../store/actions/user.actions';
|
|
5
|
-
import { isDefined } from '../../helpers';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "../log/log.service";
|
|
8
|
-
import * as i2 from "../store/store.service";
|
|
9
|
-
export class EuiPermissionService extends EuiService {
|
|
10
|
-
constructor(log, store) {
|
|
11
|
-
super([]);
|
|
12
|
-
this.log = log;
|
|
13
|
-
this.store = store;
|
|
14
|
-
if (log) {
|
|
15
|
-
this.logger = log.getLogger('core.PermissionService');
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* initialize the service by providing a state
|
|
20
|
-
* @param rights
|
|
21
|
-
*/
|
|
22
|
-
init(rights) {
|
|
23
|
-
super.initEuiService();
|
|
24
|
-
if (Array.isArray(rights)) {
|
|
25
|
-
this.updateState(rights);
|
|
26
|
-
return of({ success: true });
|
|
27
|
-
}
|
|
28
|
-
if (this.logger) {
|
|
29
|
-
this.logger.error('Init object should be instance of BaseUserState');
|
|
30
|
-
}
|
|
31
|
-
return of({ success: false, error: 'Init object should be instance of BaseUserState' });
|
|
32
|
-
}
|
|
33
|
-
get userRights() {
|
|
34
|
-
return this.stateInstance;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* get the user's Rights from the state
|
|
38
|
-
*/
|
|
39
|
-
getState() {
|
|
40
|
-
return this.store.select(getUserRights);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* update the state with the given user's rights
|
|
44
|
-
* @param rights
|
|
45
|
-
*/
|
|
46
|
-
updateState(rights) {
|
|
47
|
-
this.store.dispatch(new UpdateUserRightsAction(rights || []));
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* accepts a string of right and or a permission. In string first comes the right and or followed by permission in
|
|
51
|
-
* a dot separated way e.g. 'RIGHT.PERMISSION' or 'RIGHT'. The string can contain more that 2 separated fields.
|
|
52
|
-
* In that case the last field should be the permission and all the others a Right. e.g. 'RIGHT1.RIGHT2.PERMISSION'
|
|
53
|
-
* The last part is useful where you want a user to have multiple rights and the permission of the last right.
|
|
54
|
-
* @param rightsAndPermission
|
|
55
|
-
*/
|
|
56
|
-
checkAttributePermission(rightsAndPermission) {
|
|
57
|
-
const permProps = rightsAndPermission.split('.');
|
|
58
|
-
const rightId = permProps[0];
|
|
59
|
-
const hasRight = this.checkRight(rightId);
|
|
60
|
-
if (hasRight) {
|
|
61
|
-
if (permProps.length === 2) {
|
|
62
|
-
// in case of 'RIGHT.PERMISSION'
|
|
63
|
-
const permission = permProps[1];
|
|
64
|
-
return this.checkPermission(rightId, permission);
|
|
65
|
-
}
|
|
66
|
-
else if (permProps.length > 2) {
|
|
67
|
-
// in case of 'RIGHT1.RIGHT2.....PERMISSION' string call recursively
|
|
68
|
-
return this.checkAttributePermission(rightsAndPermission.slice(rightId.length + 1));
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return hasRight;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* check if a user has the right.
|
|
75
|
-
* @param rightId the id of Right
|
|
76
|
-
*/
|
|
77
|
-
checkRight(rightId) {
|
|
78
|
-
return this.userRights.some((right) => right && right.id === rightId);
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* check if a user has that right and that right has the permission given.
|
|
82
|
-
* @param rightId the right of the user
|
|
83
|
-
* @param permission the permission of the right
|
|
84
|
-
*/
|
|
85
|
-
checkPermission(rightId, permission) {
|
|
86
|
-
// the user has to have that right and that right has to have the given permission
|
|
87
|
-
return this.userRights.some((right) => right && right.id === rightId && right.permissions && right.permissions.includes(permission));
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* checks whether a user have all rights passed as an argument
|
|
91
|
-
* @param rights an array of UxUserRight
|
|
92
|
-
*/
|
|
93
|
-
haveAllRights(rights) {
|
|
94
|
-
if (!isDefined(rights)) {
|
|
95
|
-
throw Error(`The rights should be an array but instead it's not defined!`);
|
|
96
|
-
}
|
|
97
|
-
return rights.every((right) => this.userRights.find((uRight) => uRight.id === right.id));
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/** @nocollapse */ EuiPermissionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EuiPermissionService, deps: [{ token: i1.LogService, optional: true }, { token: i2.StoreService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
101
|
-
/** @nocollapse */ EuiPermissionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EuiPermissionService, providedIn: 'root' });
|
|
102
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EuiPermissionService, decorators: [{
|
|
103
|
-
type: Injectable,
|
|
104
|
-
args: [{
|
|
105
|
-
providedIn: 'root',
|
|
106
|
-
}]
|
|
107
|
-
}], ctorParameters: function () { return [{ type: i1.LogService, decorators: [{
|
|
108
|
-
type: Optional
|
|
109
|
-
}] }, { type: i2.StoreService }]; } });
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
import { Injectable, Optional } from '@angular/core';
|
|
2
|
+
import { EuiService, getUserRights } from '@eui/base';
|
|
3
|
+
import { of } from 'rxjs';
|
|
4
|
+
import { UpdateUserRightsAction } from '../store/actions/user.actions';
|
|
5
|
+
import { isDefined } from '../../helpers';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../log/log.service";
|
|
8
|
+
import * as i2 from "../store/store.service";
|
|
9
|
+
export class EuiPermissionService extends EuiService {
|
|
10
|
+
constructor(log, store) {
|
|
11
|
+
super([]);
|
|
12
|
+
this.log = log;
|
|
13
|
+
this.store = store;
|
|
14
|
+
if (log) {
|
|
15
|
+
this.logger = log.getLogger('core.PermissionService');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* initialize the service by providing a state
|
|
20
|
+
* @param rights
|
|
21
|
+
*/
|
|
22
|
+
init(rights) {
|
|
23
|
+
super.initEuiService();
|
|
24
|
+
if (Array.isArray(rights)) {
|
|
25
|
+
this.updateState(rights);
|
|
26
|
+
return of({ success: true });
|
|
27
|
+
}
|
|
28
|
+
if (this.logger) {
|
|
29
|
+
this.logger.error('Init object should be instance of BaseUserState');
|
|
30
|
+
}
|
|
31
|
+
return of({ success: false, error: 'Init object should be instance of BaseUserState' });
|
|
32
|
+
}
|
|
33
|
+
get userRights() {
|
|
34
|
+
return this.stateInstance;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* get the user's Rights from the state
|
|
38
|
+
*/
|
|
39
|
+
getState() {
|
|
40
|
+
return this.store.select(getUserRights);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* update the state with the given user's rights
|
|
44
|
+
* @param rights
|
|
45
|
+
*/
|
|
46
|
+
updateState(rights) {
|
|
47
|
+
this.store.dispatch(new UpdateUserRightsAction(rights || []));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* accepts a string of right and or a permission. In string first comes the right and or followed by permission in
|
|
51
|
+
* a dot separated way e.g. 'RIGHT.PERMISSION' or 'RIGHT'. The string can contain more that 2 separated fields.
|
|
52
|
+
* In that case the last field should be the permission and all the others a Right. e.g. 'RIGHT1.RIGHT2.PERMISSION'
|
|
53
|
+
* The last part is useful where you want a user to have multiple rights and the permission of the last right.
|
|
54
|
+
* @param rightsAndPermission
|
|
55
|
+
*/
|
|
56
|
+
checkAttributePermission(rightsAndPermission) {
|
|
57
|
+
const permProps = rightsAndPermission.split('.');
|
|
58
|
+
const rightId = permProps[0];
|
|
59
|
+
const hasRight = this.checkRight(rightId);
|
|
60
|
+
if (hasRight) {
|
|
61
|
+
if (permProps.length === 2) {
|
|
62
|
+
// in case of 'RIGHT.PERMISSION'
|
|
63
|
+
const permission = permProps[1];
|
|
64
|
+
return this.checkPermission(rightId, permission);
|
|
65
|
+
}
|
|
66
|
+
else if (permProps.length > 2) {
|
|
67
|
+
// in case of 'RIGHT1.RIGHT2.....PERMISSION' string call recursively
|
|
68
|
+
return this.checkAttributePermission(rightsAndPermission.slice(rightId.length + 1));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return hasRight;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* check if a user has the right.
|
|
75
|
+
* @param rightId the id of Right
|
|
76
|
+
*/
|
|
77
|
+
checkRight(rightId) {
|
|
78
|
+
return this.userRights.some((right) => right && right.id === rightId);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* check if a user has that right and that right has the permission given.
|
|
82
|
+
* @param rightId the right of the user
|
|
83
|
+
* @param permission the permission of the right
|
|
84
|
+
*/
|
|
85
|
+
checkPermission(rightId, permission) {
|
|
86
|
+
// the user has to have that right and that right has to have the given permission
|
|
87
|
+
return this.userRights.some((right) => right && right.id === rightId && right.permissions && right.permissions.includes(permission));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* checks whether a user have all rights passed as an argument
|
|
91
|
+
* @param rights an array of UxUserRight
|
|
92
|
+
*/
|
|
93
|
+
haveAllRights(rights) {
|
|
94
|
+
if (!isDefined(rights)) {
|
|
95
|
+
throw Error(`The rights should be an array but instead it's not defined!`);
|
|
96
|
+
}
|
|
97
|
+
return rights.every((right) => this.userRights.find((uRight) => uRight.id === right.id));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/** @nocollapse */ EuiPermissionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EuiPermissionService, deps: [{ token: i1.LogService, optional: true }, { token: i2.StoreService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
101
|
+
/** @nocollapse */ EuiPermissionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EuiPermissionService, providedIn: 'root' });
|
|
102
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: EuiPermissionService, decorators: [{
|
|
103
|
+
type: Injectable,
|
|
104
|
+
args: [{
|
|
105
|
+
providedIn: 'root',
|
|
106
|
+
}]
|
|
107
|
+
}], ctorParameters: function () { return [{ type: i1.LogService, decorators: [{
|
|
108
|
+
type: Optional
|
|
109
|
+
}] }, { type: i2.StoreService }]; } });
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9wZXJtaXNzaW9uL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFvQixhQUFhLEVBQXVCLE1BQU0sV0FBVyxDQUFDO0FBQzdGLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUsxQyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsVUFBeUI7SUFHL0QsWUFBZ0MsR0FBZSxFQUFZLEtBQW1CO1FBQzFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQURrQixRQUFHLEdBQUgsR0FBRyxDQUFZO1FBQVksVUFBSyxHQUFMLEtBQUssQ0FBYztRQUUxRSxJQUFJLEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksQ0FBQyxNQUFxQjtRQUN0QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekIsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNoQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7U0FDeEU7UUFDRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGlEQUFpRCxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsSUFBYyxVQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLE1BQXFCO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksc0JBQXNCLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHdCQUF3QixDQUFDLG1CQUEyQjtRQUNoRCxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUMsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN4QixnQ0FBZ0M7Z0JBQ2hDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQzthQUNwRDtpQkFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixvRUFBb0U7Z0JBQ3BFLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkY7U0FDSjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsT0FBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGVBQWUsQ0FBQyxPQUFlLEVBQUUsVUFBa0I7UUFDL0Msa0ZBQWtGO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ3ZCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FDMUcsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSyxhQUFhLENBQUMsTUFBcUI7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwQixNQUFNLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1NBQzlFO1FBRUQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBa0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFtQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZILENBQUM7O29JQXRHUSxvQkFBb0I7d0lBQXBCLG9CQUFvQixjQUZqQixNQUFNOzJGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQUlnQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRXVpU2VydmljZSwgRXVpU2VydmljZVN0YXR1cywgZ2V0VXNlclJpZ2h0cywgVXhVc2VyUmlnaHQsIExvZ2dlciB9IGZyb20gJ0BldWkvYmFzZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuLi9sb2cvbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi9zdG9yZS9zdG9yZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXBkYXRlVXNlclJpZ2h0c0FjdGlvbiB9IGZyb20gJy4uL3N0b3JlL2FjdGlvbnMvdXNlci5hY3Rpb25zJztcclxuaW1wb3J0IHsgaXNEZWZpbmVkIH0gZnJvbSAnLi4vLi4vaGVscGVycyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFdWlQZXJtaXNzaW9uU2VydmljZSBleHRlbmRzIEV1aVNlcnZpY2U8VXhVc2VyUmlnaHRbXT4ge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwcml2YXRlIGxvZzogTG9nU2VydmljZSwgcHJvdGVjdGVkIHN0b3JlOiBTdG9yZVNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcihbXSk7XHJcbiAgICAgICAgaWYgKGxvZykge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZy5nZXRMb2dnZXIoJ2NvcmUuUGVybWlzc2lvblNlcnZpY2UnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBpbml0aWFsaXplIHRoZSBzZXJ2aWNlIGJ5IHByb3ZpZGluZyBhIHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gcmlnaHRzXHJcbiAgICAgKi9cclxuICAgIGluaXQocmlnaHRzOiBVeFVzZXJSaWdodFtdKTogT2JzZXJ2YWJsZTxFdWlTZXJ2aWNlU3RhdHVzPiB7XHJcbiAgICAgICAgc3VwZXIuaW5pdEV1aVNlcnZpY2UoKTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyaWdodHMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUocmlnaHRzKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHsgc3VjY2VzczogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxvZ2dlcikge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignSW5pdCBvYmplY3Qgc2hvdWxkIGJlIGluc3RhbmNlIG9mIEJhc2VVc2VyU3RhdGUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiAnSW5pdCBvYmplY3Qgc2hvdWxkIGJlIGluc3RhbmNlIG9mIEJhc2VVc2VyU3RhdGUnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgdXNlclJpZ2h0cygpOiBVeFVzZXJSaWdodFtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZUluc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZ2V0IHRoZSB1c2VyJ3MgUmlnaHRzIGZyb20gdGhlIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIGdldFN0YXRlPEsgPSBVeFVzZXJSaWdodFtdPigpOiBPYnNlcnZhYmxlPEs+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoZ2V0VXNlclJpZ2h0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB1cGRhdGUgdGhlIHN0YXRlIHdpdGggdGhlIGdpdmVuIHVzZXIncyByaWdodHNcclxuICAgICAqIEBwYXJhbSByaWdodHNcclxuICAgICAqL1xyXG4gICAgdXBkYXRlU3RhdGUocmlnaHRzOiBVeFVzZXJSaWdodFtdKSB7XHJcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgVXBkYXRlVXNlclJpZ2h0c0FjdGlvbihyaWdodHMgfHwgW10pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGFjY2VwdHMgYSBzdHJpbmcgb2YgcmlnaHQgYW5kIG9yIGEgcGVybWlzc2lvbi4gSW4gc3RyaW5nIGZpcnN0IGNvbWVzIHRoZSByaWdodCBhbmQgb3IgZm9sbG93ZWQgYnkgcGVybWlzc2lvbiBpblxyXG4gICAgICogYSBkb3Qgc2VwYXJhdGVkIHdheSBlLmcuICdSSUdIVC5QRVJNSVNTSU9OJyBvciAnUklHSFQnLiBUaGUgc3RyaW5nIGNhbiBjb250YWluIG1vcmUgdGhhdCAyIHNlcGFyYXRlZCBmaWVsZHMuXHJcbiAgICAgKiBJbiB0aGF0IGNhc2UgdGhlIGxhc3QgZmllbGQgc2hvdWxkIGJlIHRoZSBwZXJtaXNzaW9uIGFuZCBhbGwgdGhlIG90aGVycyBhIFJpZ2h0LiBlLmcuICdSSUdIVDEuUklHSFQyLlBFUk1JU1NJT04nXHJcbiAgICAgKiBUaGUgbGFzdCBwYXJ0IGlzIHVzZWZ1bCB3aGVyZSB5b3Ugd2FudCBhIHVzZXIgdG8gaGF2ZSBtdWx0aXBsZSByaWdodHMgYW5kIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBsYXN0IHJpZ2h0LlxyXG4gICAgICogQHBhcmFtIHJpZ2h0c0FuZFBlcm1pc3Npb25cclxuICAgICAqL1xyXG4gICAgY2hlY2tBdHRyaWJ1dGVQZXJtaXNzaW9uKHJpZ2h0c0FuZFBlcm1pc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHBlcm1Qcm9wcyA9IHJpZ2h0c0FuZFBlcm1pc3Npb24uc3BsaXQoJy4nKTtcclxuICAgICAgICBjb25zdCByaWdodElkID0gcGVybVByb3BzWzBdO1xyXG4gICAgICAgIGNvbnN0IGhhc1JpZ2h0ID0gdGhpcy5jaGVja1JpZ2h0KHJpZ2h0SWQpO1xyXG5cclxuICAgICAgICBpZiAoaGFzUmlnaHQpIHtcclxuICAgICAgICAgICAgaWYgKHBlcm1Qcm9wcy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgJ1JJR0hULlBFUk1JU1NJT04nXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uID0gcGVybVByb3BzWzFdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tQZXJtaXNzaW9uKHJpZ2h0SWQsIHBlcm1pc3Npb24pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1Qcm9wcy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIG9mICdSSUdIVDEuUklHSFQyLi4uLi5QRVJNSVNTSU9OJyBzdHJpbmcgY2FsbCByZWN1cnNpdmVseVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tBdHRyaWJ1dGVQZXJtaXNzaW9uKHJpZ2h0c0FuZFBlcm1pc3Npb24uc2xpY2UocmlnaHRJZC5sZW5ndGggKyAxKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBoYXNSaWdodDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGNoZWNrIGlmIGEgdXNlciBoYXMgdGhlIHJpZ2h0LlxyXG4gICAgICogQHBhcmFtIHJpZ2h0SWQgdGhlIGlkIG9mIFJpZ2h0XHJcbiAgICAgKi9cclxuICAgIGNoZWNrUmlnaHQocmlnaHRJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlclJpZ2h0cy5zb21lKChyaWdodCkgPT4gcmlnaHQgJiYgcmlnaHQuaWQgPT09IHJpZ2h0SWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogY2hlY2sgaWYgYSB1c2VyIGhhcyB0aGF0IHJpZ2h0IGFuZCB0aGF0IHJpZ2h0IGhhcyB0aGUgcGVybWlzc2lvbiBnaXZlbi5cclxuICAgICAqIEBwYXJhbSByaWdodElkIHRoZSByaWdodCBvZiB0aGUgdXNlclxyXG4gICAgICogQHBhcmFtIHBlcm1pc3Npb24gdGhlIHBlcm1pc3Npb24gb2YgdGhlIHJpZ2h0XHJcbiAgICAgKi9cclxuICAgIGNoZWNrUGVybWlzc2lvbihyaWdodElkOiBzdHJpbmcsIHBlcm1pc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIC8vIHRoZSB1c2VyIGhhcyB0byBoYXZlIHRoYXQgcmlnaHQgYW5kIHRoYXQgcmlnaHQgaGFzIHRvIGhhdmUgdGhlIGdpdmVuIHBlcm1pc3Npb25cclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyUmlnaHRzLnNvbWUoXHJcbiAgICAgICAgICAgIChyaWdodCkgPT4gcmlnaHQgJiYgcmlnaHQuaWQgPT09IHJpZ2h0SWQgJiYgcmlnaHQucGVybWlzc2lvbnMgJiYgcmlnaHQucGVybWlzc2lvbnMuaW5jbHVkZXMocGVybWlzc2lvbilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogY2hlY2tzIHdoZXRoZXIgYSB1c2VyIGhhdmUgYWxsIHJpZ2h0cyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcclxuICAgICAqIEBwYXJhbSByaWdodHMgYW4gYXJyYXkgb2YgVXhVc2VyUmlnaHRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYXZlQWxsUmlnaHRzKHJpZ2h0czogVXhVc2VyUmlnaHRbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghaXNEZWZpbmVkKHJpZ2h0cykpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFRoZSByaWdodHMgc2hvdWxkIGJlIGFuIGFycmF5IGJ1dCBpbnN0ZWFkIGl0J3Mgbm90IGRlZmluZWQhYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmlnaHRzLmV2ZXJ5KChyaWdodDogVXhVc2VyUmlnaHQpID0+IHRoaXMudXNlclJpZ2h0cy5maW5kKCh1UmlnaHQ6IFV4VXNlclJpZ2h0KSA9PiB1UmlnaHQuaWQgPT09IHJpZ2h0LmlkKSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|