@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.
Files changed (189) hide show
  1. package/fesm2022/abp-ng.core-locale.mjs +2 -1
  2. package/fesm2022/abp-ng.core-locale.mjs.map +1 -1
  3. package/fesm2022/abp-ng.core-testing.mjs +15 -15
  4. package/fesm2022/abp-ng.core.mjs +276 -288
  5. package/fesm2022/abp-ng.core.mjs.map +1 -1
  6. package/lib/providers/cookie-language.provider.d.ts +2 -3
  7. package/lib/utils/initial-utils.d.ts +2 -3
  8. package/package.json +2 -8
  9. package/esm2022/abp-ng.core.mjs +0 -5
  10. package/esm2022/lib/abstracts/abstract-guard.mjs +0 -2
  11. package/esm2022/lib/abstracts/auth-error-filter.mjs +0 -25
  12. package/esm2022/lib/abstracts/auth-response.model.mjs +0 -2
  13. package/esm2022/lib/abstracts/auth.guard.mjs +0 -24
  14. package/esm2022/lib/abstracts/auth.service.mjs +0 -67
  15. package/esm2022/lib/abstracts/index.mjs +0 -7
  16. package/esm2022/lib/abstracts/ng-model.component.mjs +0 -58
  17. package/esm2022/lib/clients/http.client.mjs +0 -28
  18. package/esm2022/lib/clients/index.mjs +0 -2
  19. package/esm2022/lib/components/dynamic-layout.component.mjs +0 -115
  20. package/esm2022/lib/components/index.mjs +0 -4
  21. package/esm2022/lib/components/replaceable-route-container.component.mjs +0 -42
  22. package/esm2022/lib/components/router-outlet.component.mjs +0 -15
  23. package/esm2022/lib/constants/default-layouts.mjs +0 -6
  24. package/esm2022/lib/constants/different-locales.mjs +0 -337
  25. package/esm2022/lib/constants/index.mjs +0 -3
  26. package/esm2022/lib/core.module.mjs +0 -203
  27. package/esm2022/lib/directives/autofocus.directive.mjs +0 -30
  28. package/esm2022/lib/directives/caps-lock.directive.mjs +0 -41
  29. package/esm2022/lib/directives/debounce.directive.mjs +0 -36
  30. package/esm2022/lib/directives/for.directive.mjs +0 -160
  31. package/esm2022/lib/directives/form-submit.directive.mjs +0 -77
  32. package/esm2022/lib/directives/index.mjs +0 -11
  33. package/esm2022/lib/directives/init.directive.mjs +0 -24
  34. package/esm2022/lib/directives/permission.directive.mjs +0 -75
  35. package/esm2022/lib/directives/replaceable-template.directive.mjs +0 -133
  36. package/esm2022/lib/directives/show-password.directive.mjs +0 -25
  37. package/esm2022/lib/directives/stop-propagation.directive.mjs +0 -32
  38. package/esm2022/lib/enums/common.mjs +0 -2
  39. package/esm2022/lib/enums/index.mjs +0 -2
  40. package/esm2022/lib/guards/index.mjs +0 -2
  41. package/esm2022/lib/guards/permission.guard.mjs +0 -62
  42. package/esm2022/lib/handlers/index.mjs +0 -2
  43. package/esm2022/lib/handlers/routes.handler.mjs +0 -51
  44. package/esm2022/lib/interceptors/api.interceptor.mjs +0 -27
  45. package/esm2022/lib/interceptors/index.mjs +0 -2
  46. package/esm2022/lib/localization.module.mjs +0 -16
  47. package/esm2022/lib/models/auth-events.mjs +0 -29
  48. package/esm2022/lib/models/auth.mjs +0 -2
  49. package/esm2022/lib/models/common.mjs +0 -2
  50. package/esm2022/lib/models/dtos.mjs +0 -137
  51. package/esm2022/lib/models/environment.mjs +0 -2
  52. package/esm2022/lib/models/index.mjs +0 -12
  53. package/esm2022/lib/models/localization.mjs +0 -2
  54. package/esm2022/lib/models/replaceable-components.mjs +0 -2
  55. package/esm2022/lib/models/rest.mjs +0 -2
  56. package/esm2022/lib/models/session.mjs +0 -2
  57. package/esm2022/lib/models/sort.mjs +0 -2
  58. package/esm2022/lib/models/utility.mjs +0 -2
  59. package/esm2022/lib/pipes/index.mjs +0 -8
  60. package/esm2022/lib/pipes/localization.pipe.mjs +0 -33
  61. package/esm2022/lib/pipes/safe-html.pipe.mjs +0 -23
  62. package/esm2022/lib/pipes/short-date-time.pipe.mjs +0 -34
  63. package/esm2022/lib/pipes/short-date.pipe.mjs +0 -34
  64. package/esm2022/lib/pipes/short-time.pipe.mjs +0 -34
  65. package/esm2022/lib/pipes/sort.pipe.mjs +0 -49
  66. package/esm2022/lib/pipes/to-injector.pipe.mjs +0 -29
  67. package/esm2022/lib/providers/cookie-language.provider.mjs +0 -22
  68. package/esm2022/lib/providers/core-module-config.provider.mjs +0 -135
  69. package/esm2022/lib/providers/include-localization-resources.provider.mjs +0 -6
  70. package/esm2022/lib/providers/index.mjs +0 -5
  71. package/esm2022/lib/providers/locale.provider.mjs +0 -26
  72. package/esm2022/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.mjs +0 -27
  73. package/esm2022/lib/proxy/pages/abp/multi-tenancy/index.mjs +0 -2
  74. package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.mjs +0 -24
  75. package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.mjs +0 -2
  76. package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.mjs +0 -24
  77. package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-localization.service.mjs +0 -24
  78. package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.mjs +0 -6
  79. package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.mjs +0 -2
  80. package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.mjs +0 -2
  81. package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.mjs +0 -2
  82. package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.mjs +0 -2
  83. package/esm2022/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.mjs +0 -2
  84. package/esm2022/lib/proxy/volo/abp/http/modeling/index.mjs +0 -2
  85. package/esm2022/lib/proxy/volo/abp/http/modeling/models.mjs +0 -2
  86. package/esm2022/lib/proxy/volo/abp/localization/index.mjs +0 -2
  87. package/esm2022/lib/proxy/volo/abp/localization/models.mjs +0 -2
  88. package/esm2022/lib/proxy/volo/abp/models.mjs +0 -2
  89. package/esm2022/lib/services/config-state.service.mjs +0 -189
  90. package/esm2022/lib/services/content-projection.service.mjs +0 -17
  91. package/esm2022/lib/services/dom-insertion.service.mjs +0 -34
  92. package/esm2022/lib/services/environment.service.mjs +0 -54
  93. package/esm2022/lib/services/http-error-reporter.service.mjs +0 -29
  94. package/esm2022/lib/services/http-wait.service.mjs +0 -75
  95. package/esm2022/lib/services/index.mjs +0 -26
  96. package/esm2022/lib/services/internet-connection-service.mjs +0 -32
  97. package/esm2022/lib/services/lazy-load.service.mjs +0 -40
  98. package/esm2022/lib/services/list.service.mjs +0 -125
  99. package/esm2022/lib/services/local-storage-listener.service.mjs +0 -22
  100. package/esm2022/lib/services/local-storage.service.mjs +0 -32
  101. package/esm2022/lib/services/localization.service.mjs +0 -218
  102. package/esm2022/lib/services/multi-tenancy.service.mjs +0 -48
  103. package/esm2022/lib/services/permission.service.mjs +0 -63
  104. package/esm2022/lib/services/replaceable-components.service.mjs +0 -49
  105. package/esm2022/lib/services/resource-wait.service.mjs +0 -39
  106. package/esm2022/lib/services/rest.service.mjs +0 -78
  107. package/esm2022/lib/services/router-events.service.mjs +0 -51
  108. package/esm2022/lib/services/router-wait.service.mjs +0 -51
  109. package/esm2022/lib/services/routes.service.mjs +0 -200
  110. package/esm2022/lib/services/session-state.service.mjs +0 -84
  111. package/esm2022/lib/services/subscription.service.mjs +0 -43
  112. package/esm2022/lib/services/title-strategy.service.mjs +0 -46
  113. package/esm2022/lib/services/track-by.service.mjs +0 -21
  114. package/esm2022/lib/services/window.service.mjs +0 -41
  115. package/esm2022/lib/strategies/container.strategy.mjs +0 -38
  116. package/esm2022/lib/strategies/content-security.strategy.mjs +0 -30
  117. package/esm2022/lib/strategies/content.strategy.mjs +0 -52
  118. package/esm2022/lib/strategies/context.strategy.mjs +0 -37
  119. package/esm2022/lib/strategies/cross-origin.strategy.mjs +0 -28
  120. package/esm2022/lib/strategies/dom.strategy.mjs +0 -27
  121. package/esm2022/lib/strategies/index.mjs +0 -9
  122. package/esm2022/lib/strategies/loading.strategy.mjs +0 -58
  123. package/esm2022/lib/strategies/projection.strategy.mjs +0 -80
  124. package/esm2022/lib/tokens/app-config.token.mjs +0 -3
  125. package/esm2022/lib/tokens/check-authentication-state.mjs +0 -3
  126. package/esm2022/lib/tokens/compare-func.token.mjs +0 -31
  127. package/esm2022/lib/tokens/cookie-language-key.token.mjs +0 -5
  128. package/esm2022/lib/tokens/dynamic-layout.token.mjs +0 -3
  129. package/esm2022/lib/tokens/http-context.token.mjs +0 -3
  130. package/esm2022/lib/tokens/include-localization-resources.token.mjs +0 -3
  131. package/esm2022/lib/tokens/index.mjs +0 -20
  132. package/esm2022/lib/tokens/list.token.mjs +0 -3
  133. package/esm2022/lib/tokens/localization.token.mjs +0 -10
  134. package/esm2022/lib/tokens/lodaer-delay.token.mjs +0 -3
  135. package/esm2022/lib/tokens/manage-profile.token.mjs +0 -3
  136. package/esm2022/lib/tokens/options.token.mjs +0 -8
  137. package/esm2022/lib/tokens/others-group.token.mjs +0 -3
  138. package/esm2022/lib/tokens/pipe-to-login.token.mjs +0 -3
  139. package/esm2022/lib/tokens/queue.token.mjs +0 -3
  140. package/esm2022/lib/tokens/set-token-response-to-storage.token.mjs +0 -6
  141. package/esm2022/lib/tokens/tenant-key.token.mjs +0 -3
  142. package/esm2022/lib/tokens/tenant-not-found-by-name.mjs +0 -3
  143. package/esm2022/lib/tokens/title-strategy-disable-project-name.token.mjs +0 -3
  144. package/esm2022/lib/utils/array-utils.mjs +0 -7
  145. package/esm2022/lib/utils/common-utils.mjs +0 -35
  146. package/esm2022/lib/utils/date-extensions.mjs +0 -6
  147. package/esm2022/lib/utils/date-utils.mjs +0 -13
  148. package/esm2022/lib/utils/environment-utils.mjs +0 -36
  149. package/esm2022/lib/utils/factory-utils.mjs +0 -24
  150. package/esm2022/lib/utils/file-utils.mjs +0 -15
  151. package/esm2022/lib/utils/form-utils.mjs +0 -12
  152. package/esm2022/lib/utils/generator-utils.mjs +0 -43
  153. package/esm2022/lib/utils/http-utils.mjs +0 -19
  154. package/esm2022/lib/utils/index.mjs +0 -21
  155. package/esm2022/lib/utils/initial-utils.mjs +0 -60
  156. package/esm2022/lib/utils/internal-store-utils.mjs +0 -37
  157. package/esm2022/lib/utils/lazy-load-utils.mjs +0 -40
  158. package/esm2022/lib/utils/localization-utils.mjs +0 -49
  159. package/esm2022/lib/utils/multi-tenancy-utils.mjs +0 -93
  160. package/esm2022/lib/utils/number-utils.mjs +0 -4
  161. package/esm2022/lib/utils/object-utils.mjs +0 -37
  162. package/esm2022/lib/utils/queue.mjs +0 -41
  163. package/esm2022/lib/utils/route-utils.mjs +0 -26
  164. package/esm2022/lib/utils/string-utils.mjs +0 -30
  165. package/esm2022/lib/utils/tree-utils.mjs +0 -70
  166. package/esm2022/lib/validators/age.validator.mjs +0 -14
  167. package/esm2022/lib/validators/credit-card.validator.mjs +0 -21
  168. package/esm2022/lib/validators/index.mjs +0 -29
  169. package/esm2022/lib/validators/range.validator.mjs +0 -15
  170. package/esm2022/lib/validators/required.validator.mjs +0 -15
  171. package/esm2022/lib/validators/string-length.validator.mjs +0 -15
  172. package/esm2022/lib/validators/unique-character.validator.mjs +0 -13
  173. package/esm2022/lib/validators/url.validator.mjs +0 -17
  174. package/esm2022/lib/validators/username.validator.mjs +0 -14
  175. package/esm2022/locale/abp-ng.core-locale.mjs +0 -5
  176. package/esm2022/locale/public-api.mjs +0 -2
  177. package/esm2022/locale/utils/register-locale.mjs +0 -101
  178. package/esm2022/public-api.mjs +0 -28
  179. package/esm2022/testing/abp-ng.core-testing.mjs +0 -5
  180. package/esm2022/testing/lib/core-testing.module.mjs +0 -76
  181. package/esm2022/testing/lib/pipes/index.mjs +0 -2
  182. package/esm2022/testing/lib/pipes/localization.pipe.mjs +0 -20
  183. package/esm2022/testing/lib/services/index.mjs +0 -3
  184. package/esm2022/testing/lib/services/mock-permission.service.mjs +0 -35
  185. package/esm2022/testing/lib/services/mock-rest.service.mjs +0 -31
  186. package/esm2022/testing/lib/utils/clear-page.util.mjs +0 -10
  187. package/esm2022/testing/lib/utils/index.mjs +0 -3
  188. package/esm2022/testing/lib/utils/wait.util.mjs +0 -5
  189. 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=