@abp/ng.core 9.0.4 → 9.1.0-rc.2
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/fesm2022/abp-ng.core-locale.mjs +2 -1
- package/fesm2022/abp-ng.core-locale.mjs.map +1 -1
- package/fesm2022/abp-ng.core-testing.mjs +15 -15
- package/fesm2022/abp-ng.core.mjs +276 -288
- package/fesm2022/abp-ng.core.mjs.map +1 -1
- package/lib/providers/cookie-language.provider.d.ts +2 -3
- package/lib/utils/initial-utils.d.ts +2 -3
- package/package.json +2 -8
- package/esm2022/abp-ng.core.mjs +0 -5
- package/esm2022/lib/abstracts/abstract-guard.mjs +0 -2
- package/esm2022/lib/abstracts/auth-error-filter.mjs +0 -25
- package/esm2022/lib/abstracts/auth-response.model.mjs +0 -2
- package/esm2022/lib/abstracts/auth.guard.mjs +0 -24
- package/esm2022/lib/abstracts/auth.service.mjs +0 -67
- package/esm2022/lib/abstracts/index.mjs +0 -7
- package/esm2022/lib/abstracts/ng-model.component.mjs +0 -58
- package/esm2022/lib/clients/http.client.mjs +0 -28
- package/esm2022/lib/clients/index.mjs +0 -2
- package/esm2022/lib/components/dynamic-layout.component.mjs +0 -115
- package/esm2022/lib/components/index.mjs +0 -4
- package/esm2022/lib/components/replaceable-route-container.component.mjs +0 -42
- package/esm2022/lib/components/router-outlet.component.mjs +0 -15
- package/esm2022/lib/constants/default-layouts.mjs +0 -6
- package/esm2022/lib/constants/different-locales.mjs +0 -337
- package/esm2022/lib/constants/index.mjs +0 -3
- package/esm2022/lib/core.module.mjs +0 -203
- package/esm2022/lib/directives/autofocus.directive.mjs +0 -30
- package/esm2022/lib/directives/caps-lock.directive.mjs +0 -41
- package/esm2022/lib/directives/debounce.directive.mjs +0 -36
- package/esm2022/lib/directives/for.directive.mjs +0 -160
- package/esm2022/lib/directives/form-submit.directive.mjs +0 -77
- package/esm2022/lib/directives/index.mjs +0 -11
- package/esm2022/lib/directives/init.directive.mjs +0 -24
- package/esm2022/lib/directives/permission.directive.mjs +0 -75
- package/esm2022/lib/directives/replaceable-template.directive.mjs +0 -133
- package/esm2022/lib/directives/show-password.directive.mjs +0 -25
- package/esm2022/lib/directives/stop-propagation.directive.mjs +0 -32
- package/esm2022/lib/enums/common.mjs +0 -2
- package/esm2022/lib/enums/index.mjs +0 -2
- package/esm2022/lib/guards/index.mjs +0 -2
- package/esm2022/lib/guards/permission.guard.mjs +0 -62
- package/esm2022/lib/handlers/index.mjs +0 -2
- package/esm2022/lib/handlers/routes.handler.mjs +0 -51
- package/esm2022/lib/interceptors/api.interceptor.mjs +0 -27
- package/esm2022/lib/interceptors/index.mjs +0 -2
- package/esm2022/lib/localization.module.mjs +0 -16
- package/esm2022/lib/models/auth-events.mjs +0 -29
- package/esm2022/lib/models/auth.mjs +0 -2
- package/esm2022/lib/models/common.mjs +0 -2
- package/esm2022/lib/models/dtos.mjs +0 -137
- package/esm2022/lib/models/environment.mjs +0 -2
- package/esm2022/lib/models/index.mjs +0 -12
- package/esm2022/lib/models/localization.mjs +0 -2
- package/esm2022/lib/models/replaceable-components.mjs +0 -2
- package/esm2022/lib/models/rest.mjs +0 -2
- package/esm2022/lib/models/session.mjs +0 -2
- package/esm2022/lib/models/sort.mjs +0 -2
- package/esm2022/lib/models/utility.mjs +0 -2
- package/esm2022/lib/pipes/index.mjs +0 -8
- package/esm2022/lib/pipes/localization.pipe.mjs +0 -33
- package/esm2022/lib/pipes/safe-html.pipe.mjs +0 -23
- package/esm2022/lib/pipes/short-date-time.pipe.mjs +0 -34
- package/esm2022/lib/pipes/short-date.pipe.mjs +0 -34
- package/esm2022/lib/pipes/short-time.pipe.mjs +0 -34
- package/esm2022/lib/pipes/sort.pipe.mjs +0 -49
- package/esm2022/lib/pipes/to-injector.pipe.mjs +0 -29
- package/esm2022/lib/providers/cookie-language.provider.mjs +0 -22
- package/esm2022/lib/providers/core-module-config.provider.mjs +0 -135
- package/esm2022/lib/providers/include-localization-resources.provider.mjs +0 -6
- package/esm2022/lib/providers/index.mjs +0 -5
- package/esm2022/lib/providers/locale.provider.mjs +0 -26
- package/esm2022/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.mjs +0 -27
- package/esm2022/lib/proxy/pages/abp/multi-tenancy/index.mjs +0 -2
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.mjs +0 -24
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.mjs +0 -2
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.mjs +0 -24
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-localization.service.mjs +0 -24
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.mjs +0 -6
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.mjs +0 -2
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.mjs +0 -2
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.mjs +0 -2
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.mjs +0 -2
- package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.mjs +0 -2
- package/esm2022/lib/proxy/volo/abp/http/modeling/index.mjs +0 -2
- package/esm2022/lib/proxy/volo/abp/http/modeling/models.mjs +0 -2
- package/esm2022/lib/proxy/volo/abp/localization/index.mjs +0 -2
- package/esm2022/lib/proxy/volo/abp/localization/models.mjs +0 -2
- package/esm2022/lib/proxy/volo/abp/models.mjs +0 -2
- package/esm2022/lib/services/config-state.service.mjs +0 -189
- package/esm2022/lib/services/content-projection.service.mjs +0 -17
- package/esm2022/lib/services/dom-insertion.service.mjs +0 -34
- package/esm2022/lib/services/environment.service.mjs +0 -54
- package/esm2022/lib/services/http-error-reporter.service.mjs +0 -29
- package/esm2022/lib/services/http-wait.service.mjs +0 -75
- package/esm2022/lib/services/index.mjs +0 -26
- package/esm2022/lib/services/internet-connection-service.mjs +0 -32
- package/esm2022/lib/services/lazy-load.service.mjs +0 -40
- package/esm2022/lib/services/list.service.mjs +0 -125
- package/esm2022/lib/services/local-storage-listener.service.mjs +0 -22
- package/esm2022/lib/services/local-storage.service.mjs +0 -32
- package/esm2022/lib/services/localization.service.mjs +0 -218
- package/esm2022/lib/services/multi-tenancy.service.mjs +0 -48
- package/esm2022/lib/services/permission.service.mjs +0 -63
- package/esm2022/lib/services/replaceable-components.service.mjs +0 -49
- package/esm2022/lib/services/resource-wait.service.mjs +0 -39
- package/esm2022/lib/services/rest.service.mjs +0 -78
- package/esm2022/lib/services/router-events.service.mjs +0 -51
- package/esm2022/lib/services/router-wait.service.mjs +0 -51
- package/esm2022/lib/services/routes.service.mjs +0 -200
- package/esm2022/lib/services/session-state.service.mjs +0 -84
- package/esm2022/lib/services/subscription.service.mjs +0 -43
- package/esm2022/lib/services/title-strategy.service.mjs +0 -46
- package/esm2022/lib/services/track-by.service.mjs +0 -21
- package/esm2022/lib/services/window.service.mjs +0 -41
- package/esm2022/lib/strategies/container.strategy.mjs +0 -38
- package/esm2022/lib/strategies/content-security.strategy.mjs +0 -30
- package/esm2022/lib/strategies/content.strategy.mjs +0 -52
- package/esm2022/lib/strategies/context.strategy.mjs +0 -37
- package/esm2022/lib/strategies/cross-origin.strategy.mjs +0 -28
- package/esm2022/lib/strategies/dom.strategy.mjs +0 -27
- package/esm2022/lib/strategies/index.mjs +0 -9
- package/esm2022/lib/strategies/loading.strategy.mjs +0 -58
- package/esm2022/lib/strategies/projection.strategy.mjs +0 -80
- package/esm2022/lib/tokens/app-config.token.mjs +0 -3
- package/esm2022/lib/tokens/check-authentication-state.mjs +0 -3
- package/esm2022/lib/tokens/compare-func.token.mjs +0 -31
- package/esm2022/lib/tokens/cookie-language-key.token.mjs +0 -5
- package/esm2022/lib/tokens/dynamic-layout.token.mjs +0 -3
- package/esm2022/lib/tokens/http-context.token.mjs +0 -3
- package/esm2022/lib/tokens/include-localization-resources.token.mjs +0 -3
- package/esm2022/lib/tokens/index.mjs +0 -20
- package/esm2022/lib/tokens/list.token.mjs +0 -3
- package/esm2022/lib/tokens/localization.token.mjs +0 -10
- package/esm2022/lib/tokens/lodaer-delay.token.mjs +0 -3
- package/esm2022/lib/tokens/manage-profile.token.mjs +0 -3
- package/esm2022/lib/tokens/options.token.mjs +0 -8
- package/esm2022/lib/tokens/others-group.token.mjs +0 -3
- package/esm2022/lib/tokens/pipe-to-login.token.mjs +0 -3
- package/esm2022/lib/tokens/queue.token.mjs +0 -3
- package/esm2022/lib/tokens/set-token-response-to-storage.token.mjs +0 -6
- package/esm2022/lib/tokens/tenant-key.token.mjs +0 -3
- package/esm2022/lib/tokens/tenant-not-found-by-name.mjs +0 -3
- package/esm2022/lib/tokens/title-strategy-disable-project-name.token.mjs +0 -3
- package/esm2022/lib/utils/array-utils.mjs +0 -7
- package/esm2022/lib/utils/common-utils.mjs +0 -35
- package/esm2022/lib/utils/date-extensions.mjs +0 -6
- package/esm2022/lib/utils/date-utils.mjs +0 -13
- package/esm2022/lib/utils/environment-utils.mjs +0 -36
- package/esm2022/lib/utils/factory-utils.mjs +0 -24
- package/esm2022/lib/utils/file-utils.mjs +0 -15
- package/esm2022/lib/utils/form-utils.mjs +0 -12
- package/esm2022/lib/utils/generator-utils.mjs +0 -43
- package/esm2022/lib/utils/http-utils.mjs +0 -19
- package/esm2022/lib/utils/index.mjs +0 -21
- package/esm2022/lib/utils/initial-utils.mjs +0 -60
- package/esm2022/lib/utils/internal-store-utils.mjs +0 -37
- package/esm2022/lib/utils/lazy-load-utils.mjs +0 -40
- package/esm2022/lib/utils/localization-utils.mjs +0 -49
- package/esm2022/lib/utils/multi-tenancy-utils.mjs +0 -93
- package/esm2022/lib/utils/number-utils.mjs +0 -4
- package/esm2022/lib/utils/object-utils.mjs +0 -37
- package/esm2022/lib/utils/queue.mjs +0 -41
- package/esm2022/lib/utils/route-utils.mjs +0 -26
- package/esm2022/lib/utils/string-utils.mjs +0 -30
- package/esm2022/lib/utils/tree-utils.mjs +0 -70
- package/esm2022/lib/validators/age.validator.mjs +0 -14
- package/esm2022/lib/validators/credit-card.validator.mjs +0 -21
- package/esm2022/lib/validators/index.mjs +0 -29
- package/esm2022/lib/validators/range.validator.mjs +0 -15
- package/esm2022/lib/validators/required.validator.mjs +0 -15
- package/esm2022/lib/validators/string-length.validator.mjs +0 -15
- package/esm2022/lib/validators/unique-character.validator.mjs +0 -13
- package/esm2022/lib/validators/url.validator.mjs +0 -17
- package/esm2022/lib/validators/username.validator.mjs +0 -14
- package/esm2022/locale/abp-ng.core-locale.mjs +0 -5
- package/esm2022/locale/public-api.mjs +0 -2
- package/esm2022/locale/utils/register-locale.mjs +0 -101
- package/esm2022/public-api.mjs +0 -28
- package/esm2022/testing/abp-ng.core-testing.mjs +0 -5
- package/esm2022/testing/lib/core-testing.module.mjs +0 -76
- package/esm2022/testing/lib/pipes/index.mjs +0 -2
- package/esm2022/testing/lib/pipes/localization.pipe.mjs +0 -20
- package/esm2022/testing/lib/services/index.mjs +0 -3
- package/esm2022/testing/lib/services/mock-permission.service.mjs +0 -35
- package/esm2022/testing/lib/services/mock-rest.service.mjs +0 -31
- package/esm2022/testing/lib/utils/clear-page.util.mjs +0 -10
- package/esm2022/testing/lib/utils/index.mjs +0 -3
- package/esm2022/testing/lib/utils/wait.util.mjs +0 -5
- package/esm2022/testing/public-api.mjs +0 -5
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { Injectable, Injector } from '@angular/core';
|
|
2
|
-
import { EMPTY, BehaviorSubject, ReplaySubject, Subject, } from 'rxjs';
|
|
3
|
-
import { catchError, debounceTime, filter, finalize, shareReplay, switchMap, takeUntil, tap, } from 'rxjs/operators';
|
|
4
|
-
import { LIST_QUERY_DEBOUNCE_TIME } from '../tokens/list.token';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class ListService {
|
|
7
|
-
set filter(value) {
|
|
8
|
-
this._filter = value;
|
|
9
|
-
this.get();
|
|
10
|
-
}
|
|
11
|
-
get filter() {
|
|
12
|
-
return this._filter;
|
|
13
|
-
}
|
|
14
|
-
set maxResultCount(value) {
|
|
15
|
-
this._maxResultCount = value;
|
|
16
|
-
this.get();
|
|
17
|
-
}
|
|
18
|
-
get maxResultCount() {
|
|
19
|
-
return this._maxResultCount;
|
|
20
|
-
}
|
|
21
|
-
set page(value) {
|
|
22
|
-
if (value === this._page)
|
|
23
|
-
return;
|
|
24
|
-
this._page = value;
|
|
25
|
-
this.get();
|
|
26
|
-
}
|
|
27
|
-
get page() {
|
|
28
|
-
return this._page;
|
|
29
|
-
}
|
|
30
|
-
set totalCount(value) {
|
|
31
|
-
if (value === this._totalCount)
|
|
32
|
-
return;
|
|
33
|
-
this._totalCount = value;
|
|
34
|
-
this.get();
|
|
35
|
-
}
|
|
36
|
-
get totalCount() {
|
|
37
|
-
return this._totalCount;
|
|
38
|
-
}
|
|
39
|
-
set sortKey(value) {
|
|
40
|
-
this._sortKey = value;
|
|
41
|
-
this.get();
|
|
42
|
-
}
|
|
43
|
-
get sortKey() {
|
|
44
|
-
return this._sortKey;
|
|
45
|
-
}
|
|
46
|
-
set sortOrder(value) {
|
|
47
|
-
this._sortOrder = value;
|
|
48
|
-
this.get();
|
|
49
|
-
}
|
|
50
|
-
get sortOrder() {
|
|
51
|
-
return this._sortOrder;
|
|
52
|
-
}
|
|
53
|
-
get query$() {
|
|
54
|
-
return this._query$
|
|
55
|
-
.asObservable()
|
|
56
|
-
.pipe(this.delay, shareReplay({ bufferSize: 1, refCount: true }));
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* @deprecated Use `requestStatus$` instead.
|
|
60
|
-
*/
|
|
61
|
-
get isLoading$() {
|
|
62
|
-
return this._isLoading$.asObservable().pipe(takeUntil(this.destroy$));
|
|
63
|
-
}
|
|
64
|
-
get requestStatus$() {
|
|
65
|
-
return this._requestStatus.asObservable().pipe(takeUntil(this.destroy$));
|
|
66
|
-
}
|
|
67
|
-
constructor(injector) {
|
|
68
|
-
this._filter = '';
|
|
69
|
-
this._maxResultCount = 10;
|
|
70
|
-
this._page = 0;
|
|
71
|
-
this._totalCount = 0;
|
|
72
|
-
this._sortKey = '';
|
|
73
|
-
this._sortOrder = '';
|
|
74
|
-
this._query$ = new ReplaySubject(1);
|
|
75
|
-
this._isLoading$ = new BehaviorSubject(false);
|
|
76
|
-
this._requestStatus = new BehaviorSubject('idle');
|
|
77
|
-
this.destroy$ = new Subject();
|
|
78
|
-
this.get = () => {
|
|
79
|
-
this.resetPageWhenUnchanged();
|
|
80
|
-
this.next();
|
|
81
|
-
};
|
|
82
|
-
this.getWithoutPageReset = () => {
|
|
83
|
-
this.next();
|
|
84
|
-
};
|
|
85
|
-
const delay = injector.get(LIST_QUERY_DEBOUNCE_TIME, 300);
|
|
86
|
-
this.delay = delay ? debounceTime(delay) : tap();
|
|
87
|
-
this.get();
|
|
88
|
-
}
|
|
89
|
-
hookToQuery(streamCreatorCallback) {
|
|
90
|
-
return this.query$.pipe(tap(() => this._isLoading$.next(true)), tap(() => this._requestStatus.next('loading')), switchMap(query => streamCreatorCallback(query).pipe(catchError(() => {
|
|
91
|
-
this._requestStatus.next('error');
|
|
92
|
-
return EMPTY;
|
|
93
|
-
}), tap(() => this._requestStatus.next('success')), finalize(() => {
|
|
94
|
-
this._isLoading$.next(false);
|
|
95
|
-
this._requestStatus.next('idle');
|
|
96
|
-
}))), filter(Boolean), shareReplay({ bufferSize: 1, refCount: true }), takeUntil(this.destroy$));
|
|
97
|
-
}
|
|
98
|
-
ngOnDestroy() {
|
|
99
|
-
this.destroy$.next();
|
|
100
|
-
}
|
|
101
|
-
resetPageWhenUnchanged() {
|
|
102
|
-
const maxPage = Number(Number(this.totalCount / this._maxResultCount).toFixed());
|
|
103
|
-
const skipCount = this._page * this._maxResultCount;
|
|
104
|
-
if (skipCount !== this._totalCount) {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
if (this.page === maxPage && this.page > 0) {
|
|
108
|
-
this.page = this.page - 1;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
next() {
|
|
112
|
-
this._query$.next({
|
|
113
|
-
filter: this._filter || undefined,
|
|
114
|
-
maxResultCount: this._maxResultCount,
|
|
115
|
-
skipCount: this._page * this._maxResultCount,
|
|
116
|
-
sorting: this._sortOrder ? `${this._sortKey} ${this._sortOrder}` : undefined,
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ListService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
120
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ListService }); }
|
|
121
|
-
}
|
|
122
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: ListService, decorators: [{
|
|
123
|
-
type: Injectable
|
|
124
|
-
}], ctorParameters: () => [{ type: i0.Injector }] });
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3NlcnZpY2VzL2xpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsS0FBSyxFQUNMLGVBQWUsRUFHZixhQUFhLEVBQ2IsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEdBQ0osTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFLaEUsTUFBTSxPQUFPLFdBQVc7SUFFdEIsSUFBSSxNQUFNLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDYixDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFHRCxJQUFJLGNBQWMsQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNiLENBQUM7SUFDRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFHRCxJQUFJLElBQUksQ0FBQyxLQUFhO1FBQ3BCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUVqQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsR0FB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UUFDakYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBRXBELElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRU8sSUFBSTtRQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2hCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLFNBQVM7WUFDakMsY0FBYyxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3BDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlO1lBQzVDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ25ELENBQUMsQ0FBQztJQUMvQixDQUFDOzhHQXJKVSxXQUFXO2tIQUFYLFdBQVc7OzJGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRU1QVFksXHJcbiAgQmVoYXZpb3JTdWJqZWN0LFxyXG4gIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbixcclxuICBPYnNlcnZhYmxlLFxyXG4gIFJlcGxheVN1YmplY3QsXHJcbiAgU3ViamVjdCxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBjYXRjaEVycm9yLFxyXG4gIGRlYm91bmNlVGltZSxcclxuICBmaWx0ZXIsXHJcbiAgZmluYWxpemUsXHJcbiAgc2hhcmVSZXBsYXksXHJcbiAgc3dpdGNoTWFwLFxyXG4gIHRha2VVbnRpbCxcclxuICB0YXAsXHJcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBQlAgfSBmcm9tICcuLi9tb2RlbHMvY29tbW9uJztcclxuaW1wb3J0IHsgUGFnZWRSZXN1bHREdG8gfSBmcm9tICcuLi9tb2RlbHMvZHRvcyc7XHJcbmltcG9ydCB7IExJU1RfUVVFUllfREVCT1VOQ0VfVElNRSB9IGZyb20gJy4uL3Rva2Vucy9saXN0LnRva2VuJztcclxuXHJcbmV4cG9ydCB0eXBlIFJlcXVlc3RTdGF0dXMgPSAnaWRsZScgfCAnbG9hZGluZycgfCAnc3VjY2VzcycgfCAnZXJyb3InO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTGlzdFNlcnZpY2U8UXVlcnlQYXJhbXNUeXBlID0gQUJQLlBhZ2VRdWVyeVBhcmFtcyB8IGFueT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2ZpbHRlciA9ICcnO1xyXG4gIHNldCBmaWx0ZXIodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZmlsdGVyID0gdmFsdWU7XHJcbiAgICB0aGlzLmdldCgpO1xyXG4gIH1cclxuICBnZXQgZmlsdGVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbWF4UmVzdWx0Q291bnQgPSAxMDtcclxuICBzZXQgbWF4UmVzdWx0Q291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fbWF4UmVzdWx0Q291bnQgPSB2YWx1ZTtcclxuICAgIHRoaXMuZ2V0KCk7XHJcbiAgfVxyXG4gIGdldCBtYXhSZXN1bHRDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX21heFJlc3VsdENvdW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcGFnZSA9IDA7XHJcbiAgc2V0IHBhZ2UodmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKHZhbHVlID09PSB0aGlzLl9wYWdlKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fcGFnZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5nZXQoKTtcclxuICB9XHJcbiAgZ2V0IHBhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdG90YWxDb3VudCA9IDA7XHJcbiAgc2V0IHRvdGFsQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKHZhbHVlID09PSB0aGlzLl90b3RhbENvdW50KSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fdG90YWxDb3VudCA9IHZhbHVlO1xyXG4gICAgdGhpcy5nZXQoKTtcclxuICB9XHJcbiAgZ2V0IHRvdGFsQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90b3RhbENvdW50O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc29ydEtleSA9ICcnO1xyXG4gIHNldCBzb3J0S2V5KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NvcnRLZXkgPSB2YWx1ZTtcclxuICAgIHRoaXMuZ2V0KCk7XHJcbiAgfVxyXG4gIGdldCBzb3J0S2V5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydEtleTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NvcnRPcmRlciA9ICcnO1xyXG4gIHNldCBzb3J0T3JkZXIodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc29ydE9yZGVyID0gdmFsdWU7XHJcbiAgICB0aGlzLmdldCgpO1xyXG4gIH1cclxuICBnZXQgc29ydE9yZGVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydE9yZGVyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcXVlcnkkID0gbmV3IFJlcGxheVN1YmplY3Q8UXVlcnlQYXJhbXNUeXBlPigxKTtcclxuXHJcbiAgZ2V0IHF1ZXJ5JCgpOiBPYnNlcnZhYmxlPFF1ZXJ5UGFyYW1zVHlwZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5JFxyXG4gICAgICAuYXNPYnNlcnZhYmxlKClcclxuICAgICAgLnBpcGUodGhpcy5kZWxheSwgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcblxyXG4gIHByaXZhdGUgX3JlcXVlc3RTdGF0dXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlcXVlc3RTdGF0dXM+KCdpZGxlJyk7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIGRlbGF5OiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248UXVlcnlQYXJhbXNUeXBlPjtcclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGByZXF1ZXN0U3RhdHVzJGAgaW5zdGVhZC5cclxuICAgKi9cclxuICBnZXQgaXNMb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLl9pc0xvYWRpbmckLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKTtcclxuICB9XHJcblxyXG4gIGdldCByZXF1ZXN0U3RhdHVzJCgpOiBPYnNlcnZhYmxlPFJlcXVlc3RTdGF0dXM+IHtcclxuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0U3RhdHVzLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKTtcclxuICB9XHJcblxyXG4gIGdldCA9ICgpID0+IHtcclxuICAgIHRoaXMucmVzZXRQYWdlV2hlblVuY2hhbmdlZCgpO1xyXG4gICAgdGhpcy5uZXh0KCk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0V2l0aG91dFBhZ2VSZXNldCA9ICgpID0+IHtcclxuICAgIHRoaXMubmV4dCgpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgY29uc3QgZGVsYXkgPSBpbmplY3Rvci5nZXQoTElTVF9RVUVSWV9ERUJPVU5DRV9USU1FLCAzMDApO1xyXG4gICAgdGhpcy5kZWxheSA9IGRlbGF5ID8gZGVib3VuY2VUaW1lKGRlbGF5KSA6IHRhcCgpO1xyXG4gICAgdGhpcy5nZXQoKTtcclxuICB9XHJcblxyXG4gIGhvb2tUb1F1ZXJ5PFQ+KFxyXG4gICAgc3RyZWFtQ3JlYXRvckNhbGxiYWNrOiBRdWVyeVN0cmVhbUNyZWF0b3JDYWxsYmFjazxULCBRdWVyeVBhcmFtc1R5cGU+LFxyXG4gICk6IE9ic2VydmFibGU8UGFnZWRSZXN1bHREdG88VD4+IHtcclxuICAgIHJldHVybiB0aGlzLnF1ZXJ5JC5waXBlKFxyXG4gICAgICB0YXAoKCkgPT4gdGhpcy5faXNMb2FkaW5nJC5uZXh0KHRydWUpKSxcclxuICAgICAgdGFwKCgpID0+IHRoaXMuX3JlcXVlc3RTdGF0dXMubmV4dCgnbG9hZGluZycpKSxcclxuICAgICAgc3dpdGNoTWFwKHF1ZXJ5ID0+XHJcbiAgICAgICAgc3RyZWFtQ3JlYXRvckNhbGxiYWNrKHF1ZXJ5KS5waXBlKFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RTdGF0dXMubmV4dCgnZXJyb3InKTtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5fcmVxdWVzdFN0YXR1cy5uZXh0KCdzdWNjZXNzJykpLFxyXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0U3RhdHVzLm5leHQoJ2lkbGUnKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICksXHJcbiAgICAgICksXHJcbiAgICAgIGZpbHRlcihCb29sZWFuKSxcclxuICAgICAgc2hhcmVSZXBsYXk8YW55Pih7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSByZXNldFBhZ2VXaGVuVW5jaGFuZ2VkKCkge1xyXG4gICAgY29uc3QgbWF4UGFnZSA9IE51bWJlcihOdW1iZXIodGhpcy50b3RhbENvdW50IC8gdGhpcy5fbWF4UmVzdWx0Q291bnQpLnRvRml4ZWQoKSk7XHJcbiAgICBjb25zdCBza2lwQ291bnQgPSB0aGlzLl9wYWdlICogdGhpcy5fbWF4UmVzdWx0Q291bnQ7XHJcblxyXG4gICAgaWYgKHNraXBDb3VudCAhPT0gdGhpcy5fdG90YWxDb3VudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucGFnZSA9PT0gbWF4UGFnZSAmJiB0aGlzLnBhZ2UgPiAwKSB7XHJcbiAgICAgIHRoaXMucGFnZSA9IHRoaXMucGFnZSAtIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5leHQoKSB7XHJcbiAgICB0aGlzLl9xdWVyeSQubmV4dCh7XHJcbiAgICAgIGZpbHRlcjogdGhpcy5fZmlsdGVyIHx8IHVuZGVmaW5lZCxcclxuICAgICAgbWF4UmVzdWx0Q291bnQ6IHRoaXMuX21heFJlc3VsdENvdW50LFxyXG4gICAgICBza2lwQ291bnQ6IHRoaXMuX3BhZ2UgKiB0aGlzLl9tYXhSZXN1bHRDb3VudCxcclxuICAgICAgc29ydGluZzogdGhpcy5fc29ydE9yZGVyID8gYCR7dGhpcy5fc29ydEtleX0gJHt0aGlzLl9zb3J0T3JkZXJ9YCA6IHVuZGVmaW5lZCxcclxuICAgIH0gYXMgYW55IGFzIFF1ZXJ5UGFyYW1zVHlwZSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBRdWVyeVN0cmVhbUNyZWF0b3JDYWxsYmFjazxULCBRdWVyeVBhcmFtc1R5cGUgPSBBQlAuUGFnZVF1ZXJ5UGFyYW1zPiA9IChcclxuICBxdWVyeTogUXVlcnlQYXJhbXNUeXBlLFxyXG4pID0+IE9ic2VydmFibGU8UGFnZWRSZXN1bHREdG88VD4+O1xyXG4iXX0=
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { DOCUMENT } from '@angular/common';
|
|
2
|
-
import { Injectable, inject } from '@angular/core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class LocalStorageListenerService {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.window = inject(DOCUMENT).defaultView;
|
|
7
|
-
this.window.addEventListener('storage', event => {
|
|
8
|
-
if (event.key === 'access_token' && event.newValue === null) {
|
|
9
|
-
this.window.location.reload();
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: LocalStorageListenerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
14
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: LocalStorageListenerService, providedIn: 'root' }); }
|
|
15
|
-
}
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: LocalStorageListenerService, decorators: [{
|
|
17
|
-
type: Injectable,
|
|
18
|
-
args: [{
|
|
19
|
-
providedIn: 'root',
|
|
20
|
-
}]
|
|
21
|
-
}], ctorParameters: () => [] });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS1saXN0ZW5lci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbGlzdGVuZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBS25ELE1BQU0sT0FBTywyQkFBMkI7SUFHdEM7UUFGbUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFHdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLGNBQWMsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQVRVLDJCQUEyQjtrSEFBM0IsMkJBQTJCLGNBRjFCLE1BQU07OzJGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZUxpc3RlbmVyU2VydmljZSB7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpbmRvdyA9IGluamVjdChET0NVTUVOVCkuZGVmYXVsdFZpZXc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIGV2ZW50ID0+IHtcclxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2FjY2Vzc190b2tlbicgJiYgZXZlbnQubmV3VmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLndpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class AbpLocalStorageService {
|
|
4
|
-
constructor() { }
|
|
5
|
-
get length() {
|
|
6
|
-
return localStorage.length;
|
|
7
|
-
}
|
|
8
|
-
clear() {
|
|
9
|
-
localStorage.clear();
|
|
10
|
-
}
|
|
11
|
-
getItem(key) {
|
|
12
|
-
return localStorage.getItem(key);
|
|
13
|
-
}
|
|
14
|
-
key(index) {
|
|
15
|
-
return localStorage.key(index);
|
|
16
|
-
}
|
|
17
|
-
removeItem(key) {
|
|
18
|
-
localStorage.removeItem(key);
|
|
19
|
-
}
|
|
20
|
-
setItem(key, value) {
|
|
21
|
-
localStorage.setItem(key, value);
|
|
22
|
-
}
|
|
23
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: AbpLocalStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
24
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: AbpLocalStorageService, providedIn: 'root' }); }
|
|
25
|
-
}
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: AbpLocalStorageService, decorators: [{
|
|
27
|
-
type: Injectable,
|
|
28
|
-
args: [{
|
|
29
|
-
providedIn: 'root',
|
|
30
|
-
}]
|
|
31
|
-
}], ctorParameters: () => [] });
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLGdCQUFlLENBQUM7SUFFaEIsSUFBSSxNQUFNO1FBQ1IsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLO1FBQ0gsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxPQUFPLENBQUMsR0FBVztRQUNqQixPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELEdBQUcsQ0FBQyxLQUFhO1FBQ2YsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxVQUFVLENBQUMsR0FBVztRQUNwQixZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxPQUFPLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFDaEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs4R0FyQlUsc0JBQXNCO2tIQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBYnBMb2NhbFN0b3JhZ2VTZXJ2aWNlIGltcGxlbWVudHMgU3RvcmFnZSB7XHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG4gIFtuYW1lOiBzdHJpbmddOiBhbnk7XHJcbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpOiB2b2lkIHtcclxuICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpO1xyXG4gIH1cclxuICBnZXRJdGVtKGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xyXG4gIH1cclxuICBrZXkoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmtleShpbmRleCk7XHJcbiAgfVxyXG4gIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgfVxyXG4gIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
import { registerLocaleData } from '@angular/common';
|
|
2
|
-
import { Injectable, Injector, isDevMode, Optional, SkipSelf } from '@angular/core';
|
|
3
|
-
import { BehaviorSubject, combineLatest, from, Subject } from 'rxjs';
|
|
4
|
-
import { filter, map, switchMap } from 'rxjs/operators';
|
|
5
|
-
import { localizations$ } from '../tokens/localization.token';
|
|
6
|
-
import { CORE_OPTIONS } from '../tokens/options.token';
|
|
7
|
-
import { createLocalizer, createLocalizerWithFallback } from '../utils/localization-utils';
|
|
8
|
-
import { interpolate } from '../utils/string-utils';
|
|
9
|
-
import { ConfigStateService } from './config-state.service';
|
|
10
|
-
import { SessionStateService } from './session-state.service';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "./session-state.service";
|
|
13
|
-
import * as i2 from "./config-state.service";
|
|
14
|
-
export class LocalizationService {
|
|
15
|
-
/**
|
|
16
|
-
* Returns currently selected language
|
|
17
|
-
* Even though this looks like it's redundant to return the same value as `getLanguage()`,
|
|
18
|
-
* it's actually not. This could be invoked any time, and the latestLang could be different from the
|
|
19
|
-
* sessionState.getLanguage() value.
|
|
20
|
-
*/
|
|
21
|
-
get currentLang() {
|
|
22
|
-
return this.latestLang || this.sessionState.getLanguage();
|
|
23
|
-
}
|
|
24
|
-
get currentLang$() {
|
|
25
|
-
return this.sessionState.getLanguage$();
|
|
26
|
-
}
|
|
27
|
-
get languageChange$() {
|
|
28
|
-
return this._languageChange$.asObservable();
|
|
29
|
-
}
|
|
30
|
-
constructor(sessionState, injector, otherInstance, configState) {
|
|
31
|
-
this.sessionState = sessionState;
|
|
32
|
-
this.injector = injector;
|
|
33
|
-
this.configState = configState;
|
|
34
|
-
this.latestLang = this.sessionState.getLanguage();
|
|
35
|
-
this._languageChange$ = new Subject();
|
|
36
|
-
this.uiLocalizations$ = new BehaviorSubject(new Map());
|
|
37
|
-
this.localizations$ = new BehaviorSubject(new Map());
|
|
38
|
-
if (otherInstance)
|
|
39
|
-
throw new Error('LocalizationService should have only one instance.');
|
|
40
|
-
this.listenToSetLanguage();
|
|
41
|
-
this.initLocalizationValues();
|
|
42
|
-
}
|
|
43
|
-
initLocalizationValues() {
|
|
44
|
-
localizations$.subscribe(val => this.addLocalization(val));
|
|
45
|
-
const legacyResources$ = this.configState.getDeep$('localization.values');
|
|
46
|
-
const remoteLocalizations$ = this.configState.getDeep$('localization.resources');
|
|
47
|
-
const currentLanguage$ = this.sessionState.getLanguage$();
|
|
48
|
-
const uiLocalizations$ = combineLatest([currentLanguage$, this.uiLocalizations$]).pipe(map(([currentLang, localizations]) => localizations.get(currentLang)));
|
|
49
|
-
combineLatest([legacyResources$, remoteLocalizations$, uiLocalizations$])
|
|
50
|
-
.pipe(map(([legacy, resource, local]) => {
|
|
51
|
-
if (!resource) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const remote = combineLegacyandNewResources(legacy || {}, resource);
|
|
55
|
-
if (remote) {
|
|
56
|
-
if (!local) {
|
|
57
|
-
local = new Map();
|
|
58
|
-
}
|
|
59
|
-
Object.entries(remote).forEach(entry => {
|
|
60
|
-
const resourceName = entry[0];
|
|
61
|
-
const remoteTexts = entry[1];
|
|
62
|
-
let resource = local?.get(resourceName) || {};
|
|
63
|
-
resource = { ...resource, ...remoteTexts };
|
|
64
|
-
local?.set(resourceName, resource);
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
return local;
|
|
68
|
-
}), filter(Boolean))
|
|
69
|
-
.subscribe(val => this.localizations$.next(val));
|
|
70
|
-
}
|
|
71
|
-
addLocalization(localizations) {
|
|
72
|
-
if (!localizations)
|
|
73
|
-
return;
|
|
74
|
-
const localizationMap = this.uiLocalizations$.value;
|
|
75
|
-
localizations.forEach(loc => {
|
|
76
|
-
const cultureMap = localizationMap.get(loc.culture) || new Map();
|
|
77
|
-
loc.resources.forEach(res => {
|
|
78
|
-
let resource = cultureMap.get(res.resourceName) || {};
|
|
79
|
-
resource = { ...resource, ...res.texts };
|
|
80
|
-
cultureMap.set(res.resourceName, resource);
|
|
81
|
-
});
|
|
82
|
-
localizationMap.set(loc.culture, cultureMap);
|
|
83
|
-
});
|
|
84
|
-
this.uiLocalizations$.next(localizationMap);
|
|
85
|
-
}
|
|
86
|
-
listenToSetLanguage() {
|
|
87
|
-
this.sessionState
|
|
88
|
-
.onLanguageChange$()
|
|
89
|
-
.pipe(filter(lang => this.configState.getDeep('localization.currentCulture.cultureName') !== lang), switchMap(lang => this.configState.refreshLocalization(lang).pipe(map(() => lang))), filter(Boolean), switchMap(lang => from(this.registerLocale(lang).then(() => lang))))
|
|
90
|
-
.subscribe(lang => this._languageChange$.next(lang));
|
|
91
|
-
}
|
|
92
|
-
registerLocale(locale) {
|
|
93
|
-
const { registerLocaleFn } = this.injector.get(CORE_OPTIONS);
|
|
94
|
-
return registerLocaleFn(locale).then(module => {
|
|
95
|
-
if (module?.default)
|
|
96
|
-
registerLocaleData(module.default);
|
|
97
|
-
this.latestLang = locale;
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Returns an observable localized text with the given interpolation parameters in current language.
|
|
102
|
-
* @param key Localizaton key to replace with localized text
|
|
103
|
-
* @param interpolateParams Values to interpolate
|
|
104
|
-
*/
|
|
105
|
-
get(key, ...interpolateParams) {
|
|
106
|
-
return this.configState
|
|
107
|
-
.getAll$()
|
|
108
|
-
.pipe(map(state => this.getLocalization(state, key, ...interpolateParams)));
|
|
109
|
-
}
|
|
110
|
-
getResource(resourceName) {
|
|
111
|
-
return this.localizations$.value.get(resourceName);
|
|
112
|
-
}
|
|
113
|
-
getResource$(resourceName) {
|
|
114
|
-
return this.localizations$.pipe(map(res => res.get(resourceName)));
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Returns localized text with the given interpolation parameters in current language.
|
|
118
|
-
* @param key Localization key to replace with localized text
|
|
119
|
-
* @param interpolateParams Values to intepolate.
|
|
120
|
-
*/
|
|
121
|
-
instant(key, ...interpolateParams) {
|
|
122
|
-
return this.getLocalization(this.configState.getAll(), key, ...interpolateParams);
|
|
123
|
-
}
|
|
124
|
-
localize(resourceName, key, defaultValue) {
|
|
125
|
-
return this.configState.getOne$('localization').pipe(map(createLocalizer), map(localize => localize(resourceName, key, defaultValue)));
|
|
126
|
-
}
|
|
127
|
-
localizeSync(resourceName, key, defaultValue) {
|
|
128
|
-
const localization = this.configState.getOne('localization');
|
|
129
|
-
return createLocalizer(localization)(resourceName, key, defaultValue);
|
|
130
|
-
}
|
|
131
|
-
localizeWithFallback(resourceNames, keys, defaultValue) {
|
|
132
|
-
return this.configState.getOne$('localization').pipe(map(createLocalizerWithFallback), map(localizeWithFallback => localizeWithFallback(resourceNames, keys, defaultValue)));
|
|
133
|
-
}
|
|
134
|
-
localizeWithFallbackSync(resourceNames, keys, defaultValue) {
|
|
135
|
-
const localization = this.configState.getOne('localization');
|
|
136
|
-
return createLocalizerWithFallback(localization)(resourceNames, keys, defaultValue);
|
|
137
|
-
}
|
|
138
|
-
getLocalization(state, key, ...interpolateParams) {
|
|
139
|
-
let defaultValue = '';
|
|
140
|
-
if (!key) {
|
|
141
|
-
return defaultValue;
|
|
142
|
-
}
|
|
143
|
-
if (typeof key !== 'string') {
|
|
144
|
-
defaultValue = key.defaultValue;
|
|
145
|
-
key = key.key;
|
|
146
|
-
}
|
|
147
|
-
const keys = key.split('::');
|
|
148
|
-
const warn = (message) => {
|
|
149
|
-
if (isDevMode())
|
|
150
|
-
console.warn(message);
|
|
151
|
-
};
|
|
152
|
-
if (keys.length < 2) {
|
|
153
|
-
warn('The localization source separator (::) not found.');
|
|
154
|
-
return defaultValue || key;
|
|
155
|
-
}
|
|
156
|
-
if (!state.localization)
|
|
157
|
-
return defaultValue || keys[1];
|
|
158
|
-
const sourceName = keys[0] || state.localization.defaultResourceName;
|
|
159
|
-
const sourceKey = keys[1];
|
|
160
|
-
if (sourceName === '_') {
|
|
161
|
-
return defaultValue || sourceKey;
|
|
162
|
-
}
|
|
163
|
-
if (!sourceName) {
|
|
164
|
-
warn('Localization source name is not specified and the defaultResourceName was not defined!');
|
|
165
|
-
return defaultValue || sourceKey;
|
|
166
|
-
}
|
|
167
|
-
const source = this.localizations$.value.get(sourceName);
|
|
168
|
-
if (!source) {
|
|
169
|
-
warn('Could not find localization source: ' + sourceName);
|
|
170
|
-
return defaultValue || sourceKey;
|
|
171
|
-
}
|
|
172
|
-
let localization = source[sourceKey];
|
|
173
|
-
if (typeof localization === 'undefined') {
|
|
174
|
-
return defaultValue || sourceKey;
|
|
175
|
-
}
|
|
176
|
-
interpolateParams = interpolateParams.filter(params => params != null);
|
|
177
|
-
if (localization)
|
|
178
|
-
localization = interpolate(localization, interpolateParams);
|
|
179
|
-
if (typeof localization !== 'string')
|
|
180
|
-
localization = '';
|
|
181
|
-
return localization || defaultValue || key;
|
|
182
|
-
}
|
|
183
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: LocalizationService, deps: [{ token: i1.SessionStateService }, { token: i0.Injector }, { token: LocalizationService, optional: true, skipSelf: true }, { token: i2.ConfigStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
184
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: LocalizationService, providedIn: 'root' }); }
|
|
185
|
-
}
|
|
186
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: LocalizationService, decorators: [{
|
|
187
|
-
type: Injectable,
|
|
188
|
-
args: [{ providedIn: 'root' }]
|
|
189
|
-
}], ctorParameters: () => [{ type: i1.SessionStateService }, { type: i0.Injector }, { type: LocalizationService, decorators: [{
|
|
190
|
-
type: Optional
|
|
191
|
-
}, {
|
|
192
|
-
type: SkipSelf
|
|
193
|
-
}] }, { type: i2.ConfigStateService }] });
|
|
194
|
-
function recursivelyMergeBaseResources(baseResourceName, source) {
|
|
195
|
-
const item = source[baseResourceName];
|
|
196
|
-
if (item.baseResources.length === 0) {
|
|
197
|
-
return item;
|
|
198
|
-
}
|
|
199
|
-
return item.baseResources.reduce((acc, baseResource) => {
|
|
200
|
-
const baseItem = recursivelyMergeBaseResources(baseResource, source);
|
|
201
|
-
const texts = { ...baseItem.texts, ...item.texts };
|
|
202
|
-
return { ...acc, texts };
|
|
203
|
-
}, item);
|
|
204
|
-
}
|
|
205
|
-
function mergeResourcesWithBaseResource(resource) {
|
|
206
|
-
const entities = Object.keys(resource).map(key => {
|
|
207
|
-
const newValue = recursivelyMergeBaseResources(key, resource);
|
|
208
|
-
return [key, newValue];
|
|
209
|
-
});
|
|
210
|
-
return entities.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
|
|
211
|
-
}
|
|
212
|
-
function combineLegacyandNewResources(legacy, resource) {
|
|
213
|
-
const mergedResource = mergeResourcesWithBaseResource(resource);
|
|
214
|
-
return Object.entries(mergedResource).reduce((acc, [key, value]) => {
|
|
215
|
-
return { ...acc, [key]: value.texts };
|
|
216
|
-
}, legacy);
|
|
217
|
-
}
|
|
218
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvc2VydmljZXMvbG9jYWxpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU94RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7QUFHOUQsTUFBTSxPQUFPLG1CQUFtQjtJQVU5Qjs7Ozs7T0FLRztJQUNILElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7SUFD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Q0FBQyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUNGLENBQUM7SUFDRixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQ25DLE1BQXlCLEVBQ3pCLFFBQXFCO0lBRXJCLE1BQU0sY0FBYyxHQUFHLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWhFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtRQUNqRSxPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlZ2lzdGVyTG9jYWxlRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpc0Rldk1vZGUsIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQUJQIH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbldpdGhEZWZhdWx0IH0gZnJvbSAnLi4vbW9kZWxzL2xvY2FsaXphdGlvbic7XHJcbmltcG9ydCB7XHJcbiAgQXBwbGljYXRpb25Db25maWd1cmF0aW9uRHRvLFxyXG4gIEFwcGxpY2F0aW9uTG9jYWxpemF0aW9uUmVzb3VyY2VEdG8sXHJcbn0gZnJvbSAnLi4vcHJveHkvdm9sby9hYnAvYXNwLW5ldC1jb3JlL212Yy9hcHBsaWNhdGlvbi1jb25maWd1cmF0aW9ucy9tb2RlbHMnO1xyXG5pbXBvcnQgeyBsb2NhbGl6YXRpb25zJCB9IGZyb20gJy4uL3Rva2Vucy9sb2NhbGl6YXRpb24udG9rZW4nO1xyXG5pbXBvcnQgeyBDT1JFX09QVElPTlMgfSBmcm9tICcuLi90b2tlbnMvb3B0aW9ucy50b2tlbic7XHJcbmltcG9ydCB7IGNyZWF0ZUxvY2FsaXplciwgY3JlYXRlTG9jYWxpemVyV2l0aEZhbGxiYWNrIH0gZnJvbSAnLi4vdXRpbHMvbG9jYWxpemF0aW9uLXV0aWxzJztcclxuaW1wb3J0IHsgaW50ZXJwb2xhdGUgfSBmcm9tICcuLi91dGlscy9zdHJpbmctdXRpbHMnO1xyXG5pbXBvcnQgeyBDb25maWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblN0YXRlU2VydmljZSB9IGZyb20gJy4vc2Vzc2lvbi1zdGF0ZS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25TZXJ2aWNlIHtcclxuICBwcml2YXRlIGxhdGVzdExhbmcgPSB0aGlzLnNlc3Npb25TdGF0ZS5nZXRMYW5ndWFnZSgpO1xyXG4gIHByaXZhdGUgX2xhbmd1YWdlQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuXHJcbiAgcHJpdmF0ZSB1aUxvY2FsaXphdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pj4oKSxcclxuICApO1xyXG5cclxuICBwcml2YXRlIGxvY2FsaXphdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChuZXcgTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKSk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgY3VycmVudGx5IHNlbGVjdGVkIGxhbmd1YWdlXHJcbiAgICogRXZlbiB0aG91Z2ggdGhpcyBsb29rcyBsaWtlIGl0J3MgcmVkdW5kYW50IHRvIHJldHVybiB0aGUgc2FtZSB2YWx1ZSBhcyBgZ2V0TGFuZ3VhZ2UoKWAsXHJcbiAgICogaXQncyBhY3R1YWxseSBub3QuIFRoaXMgY291bGQgYmUgaW52b2tlZCBhbnkgdGltZSwgYW5kIHRoZSBsYXRlc3RMYW5nIGNvdWxkIGJlIGRpZmZlcmVudCBmcm9tIHRoZVxyXG4gICAqIHNlc3Npb25TdGF0ZS5nZXRMYW5ndWFnZSgpIHZhbHVlLlxyXG4gICAqL1xyXG4gIGdldCBjdXJyZW50TGFuZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubGF0ZXN0TGFuZyB8fCB0aGlzLnNlc3Npb25TdGF0ZS5nZXRMYW5ndWFnZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRMYW5nJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvblN0YXRlLmdldExhbmd1YWdlJCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxhbmd1YWdlQ2hhbmdlJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlQ2hhbmdlJC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZXNzaW9uU3RhdGU6IFNlc3Npb25TdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIEBPcHRpb25hbCgpXHJcbiAgICBAU2tpcFNlbGYoKVxyXG4gICAgb3RoZXJJbnN0YW5jZTogTG9jYWxpemF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZSxcclxuICApIHtcclxuICAgIGlmIChvdGhlckluc3RhbmNlKSB0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsaXphdGlvblNlcnZpY2Ugc2hvdWxkIGhhdmUgb25seSBvbmUgaW5zdGFuY2UuJyk7XHJcblxyXG4gICAgdGhpcy5saXN0ZW5Ub1NldExhbmd1YWdlKCk7XHJcbiAgICB0aGlzLmluaXRMb2NhbGl6YXRpb25WYWx1ZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdExvY2FsaXphdGlvblZhbHVlcygpIHtcclxuICAgIGxvY2FsaXphdGlvbnMkLnN1YnNjcmliZSh2YWwgPT4gdGhpcy5hZGRMb2NhbGl6YXRpb24odmFsKSk7XHJcblxyXG4gICAgY29uc3QgbGVnYWN5UmVzb3VyY2VzJCA9IHRoaXMuY29uZmlnU3RhdGUuZ2V0RGVlcCQoJ2xvY2FsaXphdGlvbi52YWx1ZXMnKSBhcyBPYnNlcnZhYmxlPFxyXG4gICAgICBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PlxyXG4gICAgPjtcclxuXHJcbiAgICBjb25zdCByZW1vdGVMb2NhbGl6YXRpb25zJCA9IHRoaXMuY29uZmlnU3RhdGUuZ2V0RGVlcCQoJ2xvY2FsaXphdGlvbi5yZXNvdXJjZXMnKSBhcyBPYnNlcnZhYmxlPFxyXG4gICAgICBSZWNvcmQ8c3RyaW5nLCBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlc291cmNlRHRvPlxyXG4gICAgPjtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2UkID0gdGhpcy5zZXNzaW9uU3RhdGUuZ2V0TGFuZ3VhZ2UkKCk7XHJcblxyXG4gICAgY29uc3QgdWlMb2NhbGl6YXRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW2N1cnJlbnRMYW5ndWFnZSQsIHRoaXMudWlMb2NhbGl6YXRpb25zJF0pLnBpcGUoXHJcbiAgICAgIG1hcCgoW2N1cnJlbnRMYW5nLCBsb2NhbGl6YXRpb25zXSkgPT4gbG9jYWxpemF0aW9ucy5nZXQoY3VycmVudExhbmcpKSxcclxuICAgICk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbbGVnYWN5UmVzb3VyY2VzJCwgcmVtb3RlTG9jYWxpemF0aW9ucyQsIHVpTG9jYWxpemF0aW9ucyRdKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKFtsZWdhY3ksIHJlc291cmNlLCBsb2NhbF0pID0+IHtcclxuICAgICAgICAgIGlmICghcmVzb3VyY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgcmVtb3RlID0gY29tYmluZUxlZ2FjeWFuZE5ld1Jlc291cmNlcyhsZWdhY3kgfHwge30sIHJlc291cmNlKTtcclxuICAgICAgICAgIGlmIChyZW1vdGUpIHtcclxuICAgICAgICAgICAgaWYgKCFsb2NhbCkge1xyXG4gICAgICAgICAgICAgIGxvY2FsID0gbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhyZW1vdGUpLmZvckVhY2goZW50cnkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IGVudHJ5WzBdO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlbW90ZVRleHRzID0gZW50cnlbMV07XHJcbiAgICAgICAgICAgICAgbGV0IHJlc291cmNlID0gbG9jYWw/LmdldChyZXNvdXJjZU5hbWUpIHx8IHt9O1xyXG4gICAgICAgICAgICAgIHJlc291cmNlID0geyAuLi5yZXNvdXJjZSwgLi4ucmVtb3RlVGV4dHMgfTtcclxuXHJcbiAgICAgICAgICAgICAgbG9jYWw/LnNldChyZXNvdXJjZU5hbWUsIHJlc291cmNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGxvY2FsO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbHRlcihCb29sZWFuKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHZhbCA9PiB0aGlzLmxvY2FsaXphdGlvbnMkLm5leHQodmFsKSk7XHJcbiAgfVxyXG5cclxuICBhZGRMb2NhbGl6YXRpb24obG9jYWxpemF0aW9ucz86IEFCUC5Mb2NhbGl6YXRpb25bXSkge1xyXG4gICAgaWYgKCFsb2NhbGl6YXRpb25zKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgbG9jYWxpemF0aW9uTWFwID0gdGhpcy51aUxvY2FsaXphdGlvbnMkLnZhbHVlO1xyXG5cclxuICAgIGxvY2FsaXphdGlvbnMuZm9yRWFjaChsb2MgPT4ge1xyXG4gICAgICBjb25zdCBjdWx0dXJlTWFwID1cclxuICAgICAgICBsb2NhbGl6YXRpb25NYXAuZ2V0KGxvYy5jdWx0dXJlKSB8fCBuZXcgTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKTtcclxuXHJcbiAgICAgIGxvYy5yZXNvdXJjZXMuZm9yRWFjaChyZXMgPT4ge1xyXG4gICAgICAgIGxldCByZXNvdXJjZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IGN1bHR1cmVNYXAuZ2V0KHJlcy5yZXNvdXJjZU5hbWUpIHx8IHt9O1xyXG5cclxuICAgICAgICByZXNvdXJjZSA9IHsgLi4ucmVzb3VyY2UsIC4uLnJlcy50ZXh0cyB9O1xyXG5cclxuICAgICAgICBjdWx0dXJlTWFwLnNldChyZXMucmVzb3VyY2VOYW1lLCByZXNvdXJjZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbG9jYWxpemF0aW9uTWFwLnNldChsb2MuY3VsdHVyZSwgY3VsdHVyZU1hcCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVpTG9jYWxpemF0aW9ucyQubmV4dChsb2NhbGl6YXRpb25NYXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5Ub1NldExhbmd1YWdlKCkge1xyXG4gICAgdGhpcy5zZXNzaW9uU3RhdGVcclxuICAgICAgLm9uTGFuZ3VhZ2VDaGFuZ2UkKClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZmlsdGVyKFxyXG4gICAgICAgICAgbGFuZyA9PiB0aGlzLmNvbmZpZ1N0YXRlLmdldERlZXAoJ2xvY2FsaXphdGlvbi5jdXJyZW50Q3VsdHVyZS5jdWx0dXJlTmFtZScpICE9PSBsYW5nLFxyXG4gICAgICAgICksXHJcbiAgICAgICAgc3dpdGNoTWFwKGxhbmcgPT4gdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoTG9jYWxpemF0aW9uKGxhbmcpLnBpcGUobWFwKCgpID0+IGxhbmcpKSksXHJcbiAgICAgICAgZmlsdGVyKEJvb2xlYW4pLFxyXG4gICAgICAgIHN3aXRjaE1hcChsYW5nID0+IGZyb20odGhpcy5yZWdpc3RlckxvY2FsZShsYW5nKS50aGVuKCgpID0+IGxhbmcpKSksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShsYW5nID0+IHRoaXMuX2xhbmd1YWdlQ2hhbmdlJC5uZXh0KGxhbmcpKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyTG9jYWxlKGxvY2FsZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB7IHJlZ2lzdGVyTG9jYWxlRm4gfTogQUJQLlJvb3QgPSB0aGlzLmluamVjdG9yLmdldChDT1JFX09QVElPTlMpO1xyXG5cclxuICAgIHJldHVybiByZWdpc3RlckxvY2FsZUZuKGxvY2FsZSkudGhlbihtb2R1bGUgPT4ge1xyXG4gICAgICBpZiAobW9kdWxlPy5kZWZhdWx0KSByZWdpc3RlckxvY2FsZURhdGEobW9kdWxlLmRlZmF1bHQpO1xyXG4gICAgICB0aGlzLmxhdGVzdExhbmcgPSBsb2NhbGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYW4gb2JzZXJ2YWJsZSBsb2NhbGl6ZWQgdGV4dCB3aXRoIHRoZSBnaXZlbiBpbnRlcnBvbGF0aW9uIHBhcmFtZXRlcnMgaW4gY3VycmVudCBsYW5ndWFnZS5cclxuICAgKiBAcGFyYW0ga2V5IExvY2FsaXphdG9uIGtleSB0byByZXBsYWNlIHdpdGggbG9jYWxpemVkIHRleHRcclxuICAgKiBAcGFyYW0gaW50ZXJwb2xhdGVQYXJhbXMgVmFsdWVzIHRvIGludGVycG9sYXRlXHJcbiAgICovXHJcbiAgZ2V0KGtleTogc3RyaW5nIHwgTG9jYWxpemF0aW9uV2l0aERlZmF1bHQsIC4uLmludGVycG9sYXRlUGFyYW1zOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdTdGF0ZVxyXG4gICAgICAuZ2V0QWxsJCgpXHJcbiAgICAgIC5waXBlKG1hcChzdGF0ZSA9PiB0aGlzLmdldExvY2FsaXphdGlvbihzdGF0ZSwga2V5LCAuLi5pbnRlcnBvbGF0ZVBhcmFtcykpKTtcclxuICB9XHJcblxyXG4gIGdldFJlc291cmNlKHJlc291cmNlTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb25zJC52YWx1ZS5nZXQocmVzb3VyY2VOYW1lKTtcclxuICB9XHJcblxyXG4gIGdldFJlc291cmNlJChyZXNvdXJjZU5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9ucyQucGlwZShtYXAocmVzID0+IHJlcy5nZXQocmVzb3VyY2VOYW1lKSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBsb2NhbGl6ZWQgdGV4dCB3aXRoIHRoZSBnaXZlbiBpbnRlcnBvbGF0aW9uIHBhcmFtZXRlcnMgaW4gY3VycmVudCBsYW5ndWFnZS5cclxuICAgKiBAcGFyYW0ga2V5IExvY2FsaXphdGlvbiBrZXkgdG8gcmVwbGFjZSB3aXRoIGxvY2FsaXplZCB0ZXh0XHJcbiAgICogQHBhcmFtIGludGVycG9sYXRlUGFyYW1zIFZhbHVlcyB0byBpbnRlcG9sYXRlLlxyXG4gICAqL1xyXG4gIGluc3RhbnQoa2V5OiBzdHJpbmcgfCBMb2NhbGl6YXRpb25XaXRoRGVmYXVsdCwgLi4uaW50ZXJwb2xhdGVQYXJhbXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphdGlvbih0aGlzLmNvbmZpZ1N0YXRlLmdldEFsbCgpLCBrZXksIC4uLmludGVycG9sYXRlUGFyYW1zKTtcclxuICB9XHJcblxyXG4gIGxvY2FsaXplKHJlc291cmNlTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1N0YXRlLmdldE9uZSQoJ2xvY2FsaXphdGlvbicpLnBpcGUoXHJcbiAgICAgIG1hcChjcmVhdGVMb2NhbGl6ZXIpLFxyXG4gICAgICBtYXAobG9jYWxpemUgPT4gbG9jYWxpemUocmVzb3VyY2VOYW1lLCBrZXksIGRlZmF1bHRWYWx1ZSkpLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvY2FsaXplU3luYyhyZXNvdXJjZU5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCBsb2NhbGl6YXRpb24gPSB0aGlzLmNvbmZpZ1N0YXRlLmdldE9uZSgnbG9jYWxpemF0aW9uJyk7XHJcbiAgICByZXR1cm4gY3JlYXRlTG9jYWxpemVyKGxvY2FsaXphdGlvbikocmVzb3VyY2VOYW1lLCBrZXksIGRlZmF1bHRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBsb2NhbGl6ZVdpdGhGYWxsYmFjayhcclxuICAgIHJlc291cmNlTmFtZXM6IHN0cmluZ1tdLFxyXG4gICAga2V5czogc3RyaW5nW10sXHJcbiAgICBkZWZhdWx0VmFsdWU6IHN0cmluZyxcclxuICApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RhdGUuZ2V0T25lJCgnbG9jYWxpemF0aW9uJykucGlwZShcclxuICAgICAgbWFwKGNyZWF0ZUxvY2FsaXplcldpdGhGYWxsYmFjayksXHJcbiAgICAgIG1hcChsb2NhbGl6ZVdpdGhGYWxsYmFjayA9PiBsb2NhbGl6ZVdpdGhGYWxsYmFjayhyZXNvdXJjZU5hbWVzLCBrZXlzLCBkZWZhdWx0VmFsdWUpKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBsb2NhbGl6ZVdpdGhGYWxsYmFja1N5bmMocmVzb3VyY2VOYW1lczogc3RyaW5nW10sIGtleXM6IHN0cmluZ1tdLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsb2NhbGl6YXRpb24gPSB0aGlzLmNvbmZpZ1N0YXRlLmdldE9uZSgnbG9jYWxpemF0aW9uJyk7XHJcbiAgICByZXR1cm4gY3JlYXRlTG9jYWxpemVyV2l0aEZhbGxiYWNrKGxvY2FsaXphdGlvbikocmVzb3VyY2VOYW1lcywga2V5cywgZGVmYXVsdFZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TG9jYWxpemF0aW9uKFxyXG4gICAgc3RhdGU6IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0byxcclxuICAgIGtleTogc3RyaW5nIHwgTG9jYWxpemF0aW9uV2l0aERlZmF1bHQsXHJcbiAgICAuLi5pbnRlcnBvbGF0ZVBhcmFtczogc3RyaW5nW11cclxuICApIHtcclxuICAgIGxldCBkZWZhdWx0VmFsdWUgPSAnJztcclxuXHJcbiAgICBpZiAoIWtleSkge1xyXG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykge1xyXG4gICAgICBkZWZhdWx0VmFsdWUgPSBrZXkuZGVmYXVsdFZhbHVlO1xyXG4gICAgICBrZXkgPSBrZXkua2V5O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoJzo6JykgYXMgc3RyaW5nW107XHJcbiAgICBjb25zdCB3YXJuID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybihtZXNzYWdlKTtcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGtleXMubGVuZ3RoIDwgMikge1xyXG4gICAgICB3YXJuKCdUaGUgbG9jYWxpemF0aW9uIHNvdXJjZSBzZXBhcmF0b3IgKDo6KSBub3QgZm91bmQuJyk7XHJcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgKGtleSBhcyBzdHJpbmcpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFzdGF0ZS5sb2NhbGl6YXRpb24pIHJldHVybiBkZWZhdWx0VmFsdWUgfHwga2V5c1sxXTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2VOYW1lID0ga2V5c1swXSB8fCBzdGF0ZS5sb2NhbGl6YXRpb24uZGVmYXVsdFJlc291cmNlTmFtZTtcclxuICAgIGNvbnN0IHNvdXJjZUtleSA9IGtleXNbMV07XHJcblxyXG4gICAgaWYgKHNvdXJjZU5hbWUgPT09ICdfJykge1xyXG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IHNvdXJjZUtleTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXNvdXJjZU5hbWUpIHtcclxuICAgICAgd2FybihcclxuICAgICAgICAnTG9jYWxpemF0aW9uIHNvdXJjZSBuYW1lIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBkZWZhdWx0UmVzb3VyY2VOYW1lIHdhcyBub3QgZGVmaW5lZCEnLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSB8fCBzb3VyY2VLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5sb2NhbGl6YXRpb25zJC52YWx1ZS5nZXQoc291cmNlTmFtZSk7XHJcbiAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICB3YXJuKCdDb3VsZCBub3QgZmluZCBsb2NhbGl6YXRpb24gc291cmNlOiAnICsgc291cmNlTmFtZSk7XHJcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgfHwgc291cmNlS2V5O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsb2NhbGl6YXRpb24gPSBzb3VyY2Vbc291cmNlS2V5XTtcclxuICAgIGlmICh0eXBlb2YgbG9jYWxpemF0aW9uID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlIHx8IHNvdXJjZUtleTtcclxuICAgIH1cclxuXHJcbiAgICBpbnRlcnBvbGF0ZVBhcmFtcyA9IGludGVycG9sYXRlUGFyYW1zLmZpbHRlcihwYXJhbXMgPT4gcGFyYW1zICE9IG51bGwpO1xyXG4gICAgaWYgKGxvY2FsaXphdGlvbikgbG9jYWxpemF0aW9uID0gaW50ZXJwb2xhdGUobG9jYWxpemF0aW9uLCBpbnRlcnBvbGF0ZVBhcmFtcyk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBsb2NhbGl6YXRpb24gIT09ICdzdHJpbmcnKSBsb2NhbGl6YXRpb24gPSAnJztcclxuXHJcbiAgICByZXR1cm4gbG9jYWxpemF0aW9uIHx8IGRlZmF1bHRWYWx1ZSB8fCAoa2V5IGFzIHN0cmluZyk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZWN1cnNpdmVseU1lcmdlQmFzZVJlc291cmNlcyhcclxuICBiYXNlUmVzb3VyY2VOYW1lOiBzdHJpbmcsXHJcbiAgc291cmNlOiBSZXNvdXJjZUR0byxcclxuKTogQXBwbGljYXRpb25Mb2NhbGl6YXRpb25SZXNvdXJjZUR0byB7XHJcbiAgY29uc3QgaXRlbSA9IHNvdXJjZVtiYXNlUmVzb3VyY2VOYW1lXTtcclxuXHJcbiAgaWYgKGl0ZW0uYmFzZVJlc291cmNlcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiBpdGVtO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGl0ZW0uYmFzZVJlc291cmNlcy5yZWR1Y2UoKGFjYywgYmFzZVJlc291cmNlKSA9PiB7XHJcbiAgICBjb25zdCBiYXNlSXRlbSA9IHJlY3Vyc2l2ZWx5TWVyZ2VCYXNlUmVzb3VyY2VzKGJhc2VSZXNvdXJjZSwgc291cmNlKTtcclxuICAgIGNvbnN0IHRleHRzID0geyAuLi5iYXNlSXRlbS50ZXh0cywgLi4uaXRlbS50ZXh0cyB9O1xyXG4gICAgcmV0dXJuIHsgLi4uYWNjLCB0ZXh0cyB9O1xyXG4gIH0sIGl0ZW0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtZXJnZVJlc291cmNlc1dpdGhCYXNlUmVzb3VyY2UocmVzb3VyY2U6IFJlc291cmNlRHRvKTogUmVzb3VyY2VEdG8ge1xyXG4gIGNvbnN0IGVudGl0aWVzOiBBcnJheTxbc3RyaW5nLCBBcHBsaWNhdGlvbkxvY2FsaXphdGlvblJlc291cmNlRHRvXT4gPSBPYmplY3Qua2V5cyhyZXNvdXJjZSkubWFwKFxyXG4gICAga2V5ID0+IHtcclxuICAgICAgY29uc3QgbmV3VmFsdWUgPSByZWN1cnNpdmVseU1lcmdlQmFzZVJlc291cmNlcyhrZXksIHJlc291cmNlKTtcclxuICAgICAgcmV0dXJuIFtrZXksIG5ld1ZhbHVlXTtcclxuICAgIH0sXHJcbiAgKTtcclxuICByZXR1cm4gZW50aXRpZXMucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4gKHsgLi4uYWNjLCBba2V5XTogdmFsdWUgfSksIHt9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29tYmluZUxlZ2FjeWFuZE5ld1Jlc291cmNlcyhcclxuICBsZWdhY3k6IExlZ2FjeUxhbmd1YWdlRHRvLFxyXG4gIHJlc291cmNlOiBSZXNvdXJjZUR0byxcclxuKTogTGVnYWN5TGFuZ3VhZ2VEdG8ge1xyXG4gIGNvbnN0IG1lcmdlZFJlc291cmNlID0gbWVyZ2VSZXNvdXJjZXNXaXRoQmFzZVJlc291cmNlKHJlc291cmNlKTtcclxuXHJcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG1lcmdlZFJlc291cmNlKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICByZXR1cm4geyAuLi5hY2MsIFtrZXldOiB2YWx1ZS50ZXh0cyB9O1xyXG4gIH0sIGxlZ2FjeSk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIExlZ2FjeUxhbmd1YWdlRHRvID0gUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj47XHJcbmV4cG9ydCB0eXBlIFJlc291cmNlRHRvID0gUmVjb3JkPHN0cmluZywgQXBwbGljYXRpb25Mb2NhbGl6YXRpb25SZXNvdXJjZUR0bz47XHJcbiJdfQ==
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { map, switchMap } from 'rxjs/operators';
|
|
3
|
-
import { AbpTenantService } from '../proxy/pages/abp/multi-tenancy';
|
|
4
|
-
import { TENANT_KEY } from '../tokens/tenant-key.token';
|
|
5
|
-
import { ConfigStateService } from './config-state.service';
|
|
6
|
-
import { RestService } from './rest.service';
|
|
7
|
-
import { SessionStateService } from './session-state.service';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "./rest.service";
|
|
10
|
-
import * as i2 from "./session-state.service";
|
|
11
|
-
import * as i3 from "../proxy/pages/abp/multi-tenancy";
|
|
12
|
-
import * as i4 from "./config-state.service";
|
|
13
|
-
export class MultiTenancyService {
|
|
14
|
-
constructor(restService, sessionState, tenantService, configStateService, tenantKey) {
|
|
15
|
-
this.restService = restService;
|
|
16
|
-
this.sessionState = sessionState;
|
|
17
|
-
this.tenantService = tenantService;
|
|
18
|
-
this.configStateService = configStateService;
|
|
19
|
-
this.tenantKey = tenantKey;
|
|
20
|
-
this.domainTenant = null;
|
|
21
|
-
this.isTenantBoxVisible = true;
|
|
22
|
-
this.apiName = 'abp';
|
|
23
|
-
this.setTenantToState = (tenant) => {
|
|
24
|
-
this.sessionState.setTenant({ id: tenant.tenantId, name: tenant.name, isAvailable: true });
|
|
25
|
-
return this.configStateService.refreshAppState().pipe(map(_ => tenant));
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
setTenantByName(tenantName) {
|
|
29
|
-
return this.tenantService
|
|
30
|
-
.findTenantByName(tenantName)
|
|
31
|
-
.pipe(switchMap(this.setTenantToState));
|
|
32
|
-
}
|
|
33
|
-
setTenantById(tenantId) {
|
|
34
|
-
return this.tenantService
|
|
35
|
-
.findTenantById(tenantId)
|
|
36
|
-
.pipe(switchMap(this.setTenantToState));
|
|
37
|
-
}
|
|
38
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: MultiTenancyService, deps: [{ token: i1.RestService }, { token: i2.SessionStateService }, { token: i3.AbpTenantService }, { token: i4.ConfigStateService }, { token: TENANT_KEY }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
39
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: MultiTenancyService, providedIn: 'root' }); }
|
|
40
|
-
}
|
|
41
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: MultiTenancyService, decorators: [{
|
|
42
|
-
type: Injectable,
|
|
43
|
-
args: [{ providedIn: 'root' }]
|
|
44
|
-
}], ctorParameters: () => [{ type: i1.RestService }, { type: i2.SessionStateService }, { type: i3.AbpTenantService }, { type: i4.ConfigStateService }, { type: undefined, decorators: [{
|
|
45
|
-
type: Inject,
|
|
46
|
-
args: [TENANT_KEY]
|
|
47
|
-
}] }] });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktdGVuYW5jeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3NlcnZpY2VzL211bHRpLXRlbmFuY3kuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBS3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7OztBQUc5RCxNQUFNLE9BQU8sbUJBQW1CO0lBWTlCLFlBQ1UsV0FBd0IsRUFDeEIsWUFBaUMsRUFDakMsYUFBK0IsRUFDL0Isa0JBQXNDLEVBQ25CLFNBQWlCO1FBSnBDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUNuQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBaEI5QyxpQkFBWSxHQUE0QixJQUFJLENBQUM7UUFFN0MsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBRTFCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFUixxQkFBZ0IsR0FBRyxDQUFDLE1BQTJCLEVBQUUsRUFBRTtZQUN6RCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNGLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQztJQVFFLENBQUM7SUFFTCxlQUFlLENBQUMsVUFBa0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsYUFBYTthQUN0QixnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7YUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxhQUFhLENBQUMsUUFBZ0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsYUFBYTthQUN0QixjQUFjLENBQUMsUUFBUSxDQUFDO2FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDOzhHQTlCVSxtQkFBbUIsa0pBaUJwQixVQUFVO2tIQWpCVCxtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBa0I3QixNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFicFRlbmFudFNlcnZpY2UgfSBmcm9tICcuLi9wcm94eS9wYWdlcy9hYnAvbXVsdGktdGVuYW5jeSc7XHJcbmltcG9ydCB7XHJcbiAgQ3VycmVudFRlbmFudER0byxcclxuICBGaW5kVGVuYW50UmVzdWx0RHRvLFxyXG59IGZyb20gJy4uL3Byb3h5L3ZvbG8vYWJwL2FzcC1uZXQtY29yZS9tdmMvbXVsdGktdGVuYW5jeS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBURU5BTlRfS0VZIH0gZnJvbSAnLi4vdG9rZW5zL3RlbmFudC1rZXkudG9rZW4nO1xyXG5pbXBvcnQgeyBDb25maWdTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24tc3RhdGUuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlUZW5hbmN5U2VydmljZSB7XHJcbiAgZG9tYWluVGVuYW50OiBDdXJyZW50VGVuYW50RHRvIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGlzVGVuYW50Qm94VmlzaWJsZSA9IHRydWU7XHJcblxyXG4gIGFwaU5hbWUgPSAnYWJwJztcclxuXHJcbiAgcHJpdmF0ZSBzZXRUZW5hbnRUb1N0YXRlID0gKHRlbmFudDogRmluZFRlbmFudFJlc3VsdER0bykgPT4ge1xyXG4gICAgdGhpcy5zZXNzaW9uU3RhdGUuc2V0VGVuYW50KHsgaWQ6IHRlbmFudC50ZW5hbnRJZCwgbmFtZTogdGVuYW50Lm5hbWUsIGlzQXZhaWxhYmxlOiB0cnVlIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU3RhdGVTZXJ2aWNlLnJlZnJlc2hBcHBTdGF0ZSgpLnBpcGUobWFwKF8gPT4gdGVuYW50KSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgc2Vzc2lvblN0YXRlOiBTZXNzaW9uU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0ZW5hbnRTZXJ2aWNlOiBBYnBUZW5hbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maWdTdGF0ZVNlcnZpY2U6IENvbmZpZ1N0YXRlU2VydmljZSxcclxuICAgIEBJbmplY3QoVEVOQU5UX0tFWSkgcHVibGljIHRlbmFudEtleTogc3RyaW5nLFxyXG4gICkgeyB9XHJcblxyXG4gIHNldFRlbmFudEJ5TmFtZSh0ZW5hbnROYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbmFudFNlcnZpY2VcclxuICAgICAgLmZpbmRUZW5hbnRCeU5hbWUodGVuYW50TmFtZSlcclxuICAgICAgLnBpcGUoc3dpdGNoTWFwKHRoaXMuc2V0VGVuYW50VG9TdGF0ZSkpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGVuYW50QnlJZCh0ZW5hbnRJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRTZXJ2aWNlXHJcbiAgICAgIC5maW5kVGVuYW50QnlJZCh0ZW5hbnRJZClcclxuICAgICAgLnBpcGUoc3dpdGNoTWFwKHRoaXMuc2V0VGVuYW50VG9TdGF0ZSkpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { map } from 'rxjs/operators';
|
|
3
|
-
import { ConfigStateService } from './config-state.service';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./config-state.service";
|
|
6
|
-
export class PermissionService {
|
|
7
|
-
constructor(configState) {
|
|
8
|
-
this.configState = configState;
|
|
9
|
-
}
|
|
10
|
-
getGrantedPolicy$(key) {
|
|
11
|
-
return this.getStream().pipe(map(grantedPolicies => this.isPolicyGranted(key, grantedPolicies)));
|
|
12
|
-
}
|
|
13
|
-
getGrantedPolicy(key) {
|
|
14
|
-
const policies = this.getSnapshot();
|
|
15
|
-
return this.isPolicyGranted(key, policies);
|
|
16
|
-
}
|
|
17
|
-
filterItemsByPolicy(items) {
|
|
18
|
-
const policies = this.getSnapshot();
|
|
19
|
-
return items.filter(item => !item.requiredPolicy || this.isPolicyGranted(item.requiredPolicy, policies));
|
|
20
|
-
}
|
|
21
|
-
filterItemsByPolicy$(items) {
|
|
22
|
-
return this.getStream().pipe(map(policies => items.filter(item => !item.requiredPolicy || this.isPolicyGranted(item.requiredPolicy, policies))));
|
|
23
|
-
}
|
|
24
|
-
isPolicyGranted(key, grantedPolicies) {
|
|
25
|
-
if (!key)
|
|
26
|
-
return true;
|
|
27
|
-
const orRegexp = /\|\|/g;
|
|
28
|
-
const andRegexp = /&&/g;
|
|
29
|
-
// TODO: Allow combination of ANDs & ORs
|
|
30
|
-
if (orRegexp.test(key)) {
|
|
31
|
-
const keys = key.split('||').filter(Boolean);
|
|
32
|
-
if (keys.length < 2)
|
|
33
|
-
return false;
|
|
34
|
-
return keys.some(k => this.getPolicy(k.trim(), grantedPolicies));
|
|
35
|
-
}
|
|
36
|
-
else if (andRegexp.test(key)) {
|
|
37
|
-
const keys = key.split('&&').filter(Boolean);
|
|
38
|
-
if (keys.length < 2)
|
|
39
|
-
return false;
|
|
40
|
-
return keys.every(k => this.getPolicy(k.trim(), grantedPolicies));
|
|
41
|
-
}
|
|
42
|
-
return this.getPolicy(key, grantedPolicies);
|
|
43
|
-
}
|
|
44
|
-
getStream() {
|
|
45
|
-
return this.configState.getAll$().pipe(map(this.mapToPolicies));
|
|
46
|
-
}
|
|
47
|
-
getSnapshot() {
|
|
48
|
-
return this.mapToPolicies(this.configState.getAll());
|
|
49
|
-
}
|
|
50
|
-
mapToPolicies(applicationConfiguration) {
|
|
51
|
-
return applicationConfiguration?.auth?.grantedPolicies || {};
|
|
52
|
-
}
|
|
53
|
-
getPolicy(key, grantedPolicies) {
|
|
54
|
-
return grantedPolicies[key] || false;
|
|
55
|
-
}
|
|
56
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: PermissionService, deps: [{ token: i1.ConfigStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
57
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: PermissionService, providedIn: 'root' }); }
|
|
58
|
-
}
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.5", ngImport: i0, type: PermissionService, decorators: [{
|
|
60
|
-
type: Injectable,
|
|
61
|
-
args: [{ providedIn: 'root' }]
|
|
62
|
-
}], ctorParameters: () => [{ type: i1.ConfigStateService }] });
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBRzVELE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFBc0IsV0FBK0I7UUFBL0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO0lBQUcsQ0FBQztJQUV6RCxpQkFBaUIsQ0FBQyxHQUFXO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDMUIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FDbkUsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUF1QjtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsbUJBQW1CLENBQTBCLEtBQWU7UUFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FDakIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUNwRixDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUEwQixLQUFlO1FBQzNELE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDMUIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQ2IsS0FBSyxDQUFDLE1BQU0sQ0FDVixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQ3BGLENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVTLGVBQWUsQ0FBQyxHQUF1QixFQUFFLGVBQXdDO1FBQ3pGLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFdEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV4Qix3Q0FBd0M7UUFDeEMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFbEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO2FBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFbEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRVMsU0FBUztRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRVMsV0FBVztRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFUyxhQUFhLENBQUMsd0JBQXFEO1FBQzNFLE9BQU8sd0JBQXdCLEVBQUUsSUFBSSxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVTLFNBQVMsQ0FBQyxHQUFXLEVBQUUsZUFBd0M7UUFDdkUsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3ZDLENBQUM7OEdBckVVLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBREosTUFBTTs7MkZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQUJQIH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0byB9IGZyb20gJy4uL3Byb3h5L3ZvbG8vYWJwL2FzcC1uZXQtY29yZS9tdmMvYXBwbGljYXRpb24tY29uZmlndXJhdGlvbnMvbW9kZWxzJztcclxuaW1wb3J0IHsgQ29uZmlnU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWctc3RhdGUuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjb25maWdTdGF0ZTogQ29uZmlnU3RhdGVTZXJ2aWNlKSB7fVxyXG5cclxuICBnZXRHcmFudGVkUG9saWN5JChrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyZWFtKCkucGlwZShcclxuICAgICAgbWFwKGdyYW50ZWRQb2xpY2llcyA9PiB0aGlzLmlzUG9saWN5R3JhbnRlZChrZXksIGdyYW50ZWRQb2xpY2llcykpLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEdyYW50ZWRQb2xpY3koa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIGNvbnN0IHBvbGljaWVzID0gdGhpcy5nZXRTbmFwc2hvdCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaXNQb2xpY3lHcmFudGVkKGtleSwgcG9saWNpZXMpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVySXRlbXNCeVBvbGljeTxUIGV4dGVuZHMgQUJQLkhhc1BvbGljeT4oaXRlbXM6IEFycmF5PFQ+KSB7XHJcbiAgICBjb25zdCBwb2xpY2llcyA9IHRoaXMuZ2V0U25hcHNob3QoKTtcclxuICAgIHJldHVybiBpdGVtcy5maWx0ZXIoXHJcbiAgICAgIGl0ZW0gPT4gIWl0ZW0ucmVxdWlyZWRQb2xpY3kgfHwgdGhpcy5pc1BvbGljeUdyYW50ZWQoaXRlbS5yZXF1aXJlZFBvbGljeSwgcG9saWNpZXMpLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZpbHRlckl0ZW1zQnlQb2xpY3kkPFQgZXh0ZW5kcyBBQlAuSGFzUG9saWN5PihpdGVtczogQXJyYXk8VD4pIHtcclxuICAgIHJldHVybiB0aGlzLmdldFN0cmVhbSgpLnBpcGUoXHJcbiAgICAgIG1hcChwb2xpY2llcyA9PlxyXG4gICAgICAgIGl0ZW1zLmZpbHRlcihcclxuICAgICAgICAgIGl0ZW0gPT4gIWl0ZW0ucmVxdWlyZWRQb2xpY3kgfHwgdGhpcy5pc1BvbGljeUdyYW50ZWQoaXRlbS5yZXF1aXJlZFBvbGljeSwgcG9saWNpZXMpLFxyXG4gICAgICAgICksXHJcbiAgICAgICksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGlzUG9saWN5R3JhbnRlZChrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCwgZ3JhbnRlZFBvbGljaWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPikge1xyXG4gICAgaWYgKCFrZXkpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGNvbnN0IG9yUmVnZXhwID0gL1xcfFxcfC9nO1xyXG4gICAgY29uc3QgYW5kUmVnZXhwID0gLyYmL2c7XHJcblxyXG4gICAgLy8gVE9ETzogQWxsb3cgY29tYmluYXRpb24gb2YgQU5EcyAmIE9Sc1xyXG4gICAgaWYgKG9yUmVnZXhwLnRlc3Qoa2V5KSkge1xyXG4gICAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KCd8fCcpLmZpbHRlcihCb29sZWFuKTtcclxuXHJcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA8IDIpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgIHJldHVybiBrZXlzLnNvbWUoayA9PiB0aGlzLmdldFBvbGljeShrLnRyaW0oKSwgZ3JhbnRlZFBvbGljaWVzKSk7XHJcbiAgICB9IGVsc2UgaWYgKGFuZFJlZ2V4cC50ZXN0KGtleSkpIHtcclxuICAgICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdCgnJiYnKS5maWx0ZXIoQm9vbGVhbik7XHJcblxyXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPCAyKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICByZXR1cm4ga2V5cy5ldmVyeShrID0+IHRoaXMuZ2V0UG9saWN5KGsudHJpbSgpLCBncmFudGVkUG9saWNpZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5nZXRQb2xpY3koa2V5LCBncmFudGVkUG9saWNpZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldFN0cmVhbSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1N0YXRlLmdldEFsbCQoKS5waXBlKG1hcCh0aGlzLm1hcFRvUG9saWNpZXMpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRTbmFwc2hvdCgpIHtcclxuICAgIHJldHVybiB0aGlzLm1hcFRvUG9saWNpZXModGhpcy5jb25maWdTdGF0ZS5nZXRBbGwoKSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbWFwVG9Qb2xpY2llcyhhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb246IEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbkR0bykge1xyXG4gICAgcmV0dXJuIGFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj8uYXV0aD8uZ3JhbnRlZFBvbGljaWVzIHx8IHt9O1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldFBvbGljeShrZXk6IHN0cmluZywgZ3JhbnRlZFBvbGljaWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPikge1xyXG4gICAgcmV0dXJuIGdyYW50ZWRQb2xpY2llc1trZXldIHx8IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=
|