@eui/core 15.4.1 → 15.4.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 (213) hide show
  1. package/LICENSE +296 -296
  2. package/README.md +26 -26
  3. package/assets/i18n-eui/bg.json +114 -114
  4. package/assets/i18n-eui/cs.json +114 -114
  5. package/assets/i18n-eui/da.json +114 -114
  6. package/assets/i18n-eui/de.json +114 -114
  7. package/assets/i18n-eui/el.json +114 -114
  8. package/assets/i18n-eui/en.json +113 -113
  9. package/assets/i18n-eui/es.json +114 -114
  10. package/assets/i18n-eui/et.json +114 -114
  11. package/assets/i18n-eui/fi.json +114 -114
  12. package/assets/i18n-eui/fr.json +114 -114
  13. package/assets/i18n-eui/ga.json +114 -114
  14. package/assets/i18n-eui/hr.json +114 -114
  15. package/assets/i18n-eui/hu.json +114 -114
  16. package/assets/i18n-eui/it.json +114 -114
  17. package/assets/i18n-eui/lt.json +114 -114
  18. package/assets/i18n-eui/lv.json +114 -114
  19. package/assets/i18n-eui/mt.json +114 -114
  20. package/assets/i18n-eui/nl.json +114 -114
  21. package/assets/i18n-eui/pl.json +114 -114
  22. package/assets/i18n-eui/pt.json +114 -114
  23. package/assets/i18n-eui/ro.json +114 -114
  24. package/assets/i18n-eui/sk.json +114 -114
  25. package/assets/i18n-eui/sl.json +114 -114
  26. package/assets/i18n-eui/sv.json +114 -114
  27. package/docs/classes/RouterMock.html +5 -5
  28. package/docs/dependencies.html +7 -95
  29. package/docs/index.html +59 -36
  30. package/docs/injectables/CoreAppEffects.html +51 -51
  31. package/docs/js/menu-wc.js +7 -12
  32. package/docs/js/menu-wc_es5.js +1 -1
  33. package/docs/js/search/search_index.js +2 -2
  34. package/docs/miscellaneous/variables.html +1211 -1211
  35. package/esm2020/eui-core.mjs +4 -4
  36. package/esm2020/index.mjs +13 -13
  37. package/esm2020/lib/eui-core.module.mjs +78 -78
  38. package/esm2020/lib/helpers/date-helpers.mjs +3 -3
  39. package/esm2020/lib/helpers/dom-helpers.mjs +87 -87
  40. package/esm2020/lib/helpers/event-helpers.mjs +9 -9
  41. package/esm2020/lib/helpers/form-helpers.mjs +42 -42
  42. package/esm2020/lib/helpers/format-helpers.mjs +66 -66
  43. package/esm2020/lib/helpers/http-helpers.mjs +7 -7
  44. package/esm2020/lib/helpers/index.mjs +8 -8
  45. package/esm2020/lib/helpers/utils.mjs +7 -7
  46. package/esm2020/lib/interceptors/add-lang-param.interceptor.mjs +35 -35
  47. package/esm2020/lib/interceptors/cache-prevention.interceptor.mjs +21 -21
  48. package/esm2020/lib/interceptors/cors-security.interceptor.mjs +15 -15
  49. package/esm2020/lib/interceptors/csrf-prevention.interceptor.mjs +15 -15
  50. package/esm2020/lib/interceptors/eu-login-session-timeout-handling.interceptor.mjs +72 -72
  51. package/esm2020/lib/interceptors/index.mjs +8 -8
  52. package/esm2020/lib/interceptors/openid/index.mjs +4 -4
  53. package/esm2020/lib/interceptors/openid/openid-connect.interceptor.mjs +149 -149
  54. package/esm2020/lib/interceptors/openid/openid-connect.service.mjs +56 -56
  55. package/esm2020/lib/interceptors/openid/openid-connect.service.mock.mjs +8 -8
  56. package/esm2020/lib/interceptors/ux-request-error-model.interceptor.mjs +31 -31
  57. package/esm2020/lib/services/app/eui-init-app.mjs +29 -29
  58. package/esm2020/lib/services/app/eui-pre-init-app.mjs +43 -43
  59. package/esm2020/lib/services/app/eui-startup.mjs +40 -40
  60. package/esm2020/lib/services/app/factories/log.mjs +55 -55
  61. package/esm2020/lib/services/app/index.mjs +2 -2
  62. package/esm2020/lib/services/config/defaults.mjs +68 -68
  63. package/esm2020/lib/services/config/tokens.mjs +74 -74
  64. package/esm2020/lib/services/errors/eui.error.mjs +38 -38
  65. package/esm2020/lib/services/errors/global-error-handler.mjs +24 -24
  66. package/esm2020/lib/services/errors/http-error-handler-callback-functions.mjs +17 -17
  67. package/esm2020/lib/services/errors/http-error-handler.interceptor.mjs +55 -55
  68. package/esm2020/lib/services/errors/index.mjs +5 -5
  69. package/esm2020/lib/services/i18n/i18n.loader.mjs +198 -198
  70. package/esm2020/lib/services/i18n/i18n.resource.mjs +43 -43
  71. package/esm2020/lib/services/i18n/i18n.service.mjs +228 -228
  72. package/esm2020/lib/services/i18n/i18n.service.mock.mjs +38 -38
  73. package/esm2020/lib/services/i18n/index.mjs +6 -6
  74. package/esm2020/lib/services/index.mjs +19 -19
  75. package/esm2020/lib/services/locale/index.mjs +3 -3
  76. package/esm2020/lib/services/locale/locale.service.mjs +232 -232
  77. package/esm2020/lib/services/locale/locale.service.mock.mjs +43 -43
  78. package/esm2020/lib/services/log/index.mjs +4 -4
  79. package/esm2020/lib/services/log/log.module.mjs +38 -38
  80. package/esm2020/lib/services/log/log.service.mjs +51 -51
  81. package/esm2020/lib/services/log/log.service.mock.mjs +7 -7
  82. package/esm2020/lib/services/permission/permission.service.mjs +110 -110
  83. package/esm2020/lib/services/queue/api-queue.service.mjs +137 -137
  84. package/esm2020/lib/services/queue/api-queue.service.mock.mjs +23 -23
  85. package/esm2020/lib/services/queue/index.mjs +3 -3
  86. package/esm2020/lib/services/storage/async-storage.service.mjs +17 -17
  87. package/esm2020/lib/services/storage/async-storage.service.mock.mjs +22 -22
  88. package/esm2020/lib/services/storage/index.mjs +8 -8
  89. package/esm2020/lib/services/storage/local-forage.service.mjs +93 -93
  90. package/esm2020/lib/services/storage/local-storage.service.mjs +75 -75
  91. package/esm2020/lib/services/storage/session-storage.service.mjs +75 -75
  92. package/esm2020/lib/services/storage/storage.service.mjs +6 -6
  93. package/esm2020/lib/services/storage/storage.service.mock.mjs +12 -12
  94. package/esm2020/lib/services/store/actions/app.actions.mjs +74 -74
  95. package/esm2020/lib/services/store/actions/i18n.actions.mjs +11 -11
  96. package/esm2020/lib/services/store/actions/index.mjs +6 -6
  97. package/esm2020/lib/services/store/actions/locale.actions.mjs +11 -11
  98. package/esm2020/lib/services/store/actions/notifications.actions.mjs +11 -11
  99. package/esm2020/lib/services/store/actions/user.actions.mjs +39 -39
  100. package/esm2020/lib/services/store/effects/app.effects.mjs +55 -55
  101. package/esm2020/lib/services/store/effects/index.mjs +4 -4
  102. package/esm2020/lib/services/store/index.mjs +6 -6
  103. package/esm2020/lib/services/store/reducers/app.reducers.mjs +56 -56
  104. package/esm2020/lib/services/store/reducers/core.reducers.mjs +13 -13
  105. package/esm2020/lib/services/store/reducers/i18n.reducers.mjs +16 -16
  106. package/esm2020/lib/services/store/reducers/index.mjs +8 -8
  107. package/esm2020/lib/services/store/reducers/locale.reducers.mjs +16 -16
  108. package/esm2020/lib/services/store/reducers/meta.reducers.mjs +89 -89
  109. package/esm2020/lib/services/store/reducers/notifications.reducers.mjs +13 -13
  110. package/esm2020/lib/services/store/reducers/user.reducers.mjs +43 -43
  111. package/esm2020/lib/services/store/store.service.mjs +112 -112
  112. package/esm2020/lib/services/store/store.service.mock.mjs +22 -22
  113. package/esm2020/lib/services/user/index.mjs +3 -3
  114. package/esm2020/lib/services/user/user.service.mjs +64 -64
  115. package/esm2020/lib/services/user/user.service.mock.mjs +32 -32
  116. package/esm2020/lib/services/ux-app-shell.service.mjs +690 -690
  117. package/esm2020/lib/services/ux-dynamic-component/ux-dynamic-component.service.mjs +63 -63
  118. package/esm2020/lib/services/ux-dynamic-menu/ux-dynamic-menu.service.mjs +66 -66
  119. package/esm2020/lib/services/ux-error-feedback/ux-error-feedback.service.mjs +99 -99
  120. package/esm2020/lib/services/ux-error-feedback/ux-error-handler.operator.mjs +16 -16
  121. package/esm2020/lib/services/ux-timezone.service.mjs +716 -716
  122. package/fesm2015/eui-core.mjs +4484 -4484
  123. package/fesm2015/eui-core.mjs.map +1 -1
  124. package/fesm2020/eui-core.mjs +4538 -4538
  125. package/fesm2020/eui-core.mjs.map +1 -1
  126. package/index.d.ts +5 -5
  127. package/lib/eui-core.module.d.ts +20 -20
  128. package/lib/helpers/date-helpers.d.ts +2 -2
  129. package/lib/helpers/dom-helpers.d.ts +26 -26
  130. package/lib/helpers/event-helpers.d.ts +1 -1
  131. package/lib/helpers/form-helpers.d.ts +10 -10
  132. package/lib/helpers/format-helpers.d.ts +12 -12
  133. package/lib/helpers/http-helpers.d.ts +2 -2
  134. package/lib/helpers/index.d.ts +7 -7
  135. package/lib/helpers/utils.d.ts +6 -6
  136. package/lib/interceptors/add-lang-param.interceptor.d.ts +16 -16
  137. package/lib/interceptors/cache-prevention.interceptor.d.ts +8 -8
  138. package/lib/interceptors/cors-security.interceptor.d.ts +8 -8
  139. package/lib/interceptors/csrf-prevention.interceptor.d.ts +8 -8
  140. package/lib/interceptors/eu-login-session-timeout-handling.interceptor.d.ts +12 -12
  141. package/lib/interceptors/index.d.ts +7 -7
  142. package/lib/interceptors/openid/index.d.ts +3 -3
  143. package/lib/interceptors/openid/openid-connect.interceptor.d.ts +14 -14
  144. package/lib/interceptors/openid/openid-connect.service.d.ts +17 -17
  145. package/lib/interceptors/openid/openid-connect.service.mock.d.ts +5 -5
  146. package/lib/interceptors/ux-request-error-model.interceptor.d.ts +13 -13
  147. package/lib/services/app/eui-init-app.d.ts +2 -2
  148. package/lib/services/app/eui-pre-init-app.d.ts +16 -16
  149. package/lib/services/app/eui-startup.d.ts +4 -4
  150. package/lib/services/app/factories/log.d.ts +25 -25
  151. package/lib/services/app/index.d.ts +1 -1
  152. package/lib/services/config/defaults.d.ts +11 -11
  153. package/lib/services/config/tokens.d.ts +19 -19
  154. package/lib/services/errors/eui.error.d.ts +15 -15
  155. package/lib/services/errors/global-error-handler.d.ts +10 -10
  156. package/lib/services/errors/http-error-handler-callback-functions.d.ts +6 -6
  157. package/lib/services/errors/http-error-handler.interceptor.d.ts +22 -22
  158. package/lib/services/errors/index.d.ts +4 -4
  159. package/lib/services/i18n/i18n.loader.d.ts +79 -79
  160. package/lib/services/i18n/i18n.resource.d.ts +35 -35
  161. package/lib/services/i18n/i18n.service.d.ts +73 -73
  162. package/lib/services/i18n/i18n.service.mock.d.ts +19 -19
  163. package/lib/services/i18n/index.d.ts +4 -4
  164. package/lib/services/index.d.ts +18 -18
  165. package/lib/services/locale/index.d.ts +2 -2
  166. package/lib/services/locale/locale.service.d.ts +68 -68
  167. package/lib/services/locale/locale.service.mock.d.ts +15 -15
  168. package/lib/services/log/index.d.ts +3 -3
  169. package/lib/services/log/log.module.d.ts +15 -15
  170. package/lib/services/log/log.service.d.ts +27 -27
  171. package/lib/services/log/log.service.mock.d.ts +4 -4
  172. package/lib/services/permission/permission.service.d.ts +52 -52
  173. package/lib/services/queue/api-queue.service.d.ts +76 -76
  174. package/lib/services/queue/api-queue.service.mock.d.ts +13 -13
  175. package/lib/services/queue/index.d.ts +2 -2
  176. package/lib/services/storage/async-storage.service.d.ts +44 -44
  177. package/lib/services/storage/async-storage.service.mock.d.ts +11 -11
  178. package/lib/services/storage/index.d.ts +7 -7
  179. package/lib/services/storage/local-forage.service.d.ts +48 -48
  180. package/lib/services/storage/local-storage.service.d.ts +34 -34
  181. package/lib/services/storage/session-storage.service.d.ts +34 -34
  182. package/lib/services/storage/storage.service.d.ts +28 -28
  183. package/lib/services/storage/storage.service.mock.d.ts +7 -7
  184. package/lib/services/store/actions/app.actions.d.ts +82 -82
  185. package/lib/services/store/actions/i18n.actions.d.ts +11 -11
  186. package/lib/services/store/actions/index.d.ts +5 -5
  187. package/lib/services/store/actions/locale.actions.d.ts +11 -11
  188. package/lib/services/store/actions/notifications.actions.d.ts +10 -10
  189. package/lib/services/store/actions/user.actions.d.ts +35 -35
  190. package/lib/services/store/effects/app.effects.d.ts +19 -19
  191. package/lib/services/store/effects/index.d.ts +3 -3
  192. package/lib/services/store/index.d.ts +5 -5
  193. package/lib/services/store/reducers/app.reducers.d.ts +3 -3
  194. package/lib/services/store/reducers/core.reducers.d.ts +3 -3
  195. package/lib/services/store/reducers/i18n.reducers.d.ts +3 -3
  196. package/lib/services/store/reducers/index.d.ts +7 -7
  197. package/lib/services/store/reducers/locale.reducers.d.ts +3 -3
  198. package/lib/services/store/reducers/meta.reducers.d.ts +17 -17
  199. package/lib/services/store/reducers/notifications.reducers.d.ts +3 -3
  200. package/lib/services/store/reducers/user.reducers.d.ts +3 -3
  201. package/lib/services/store/store.service.d.ts +43 -43
  202. package/lib/services/store/store.service.mock.d.ts +12 -12
  203. package/lib/services/user/index.d.ts +2 -2
  204. package/lib/services/user/user.service.d.ts +15 -15
  205. package/lib/services/user/user.service.mock.d.ts +16 -16
  206. package/lib/services/ux-app-shell.service.d.ts +155 -155
  207. package/lib/services/ux-dynamic-component/ux-dynamic-component.service.d.ts +36 -36
  208. package/lib/services/ux-dynamic-menu/ux-dynamic-menu.service.d.ts +14 -14
  209. package/lib/services/ux-error-feedback/ux-error-feedback.service.d.ts +35 -35
  210. package/lib/services/ux-error-feedback/ux-error-handler.operator.d.ts +3 -3
  211. package/lib/services/ux-timezone.service.d.ts +269 -269
  212. package/package.json +2 -2
  213. package/docs/overview.html +0 -171
@@ -1,232 +1,232 @@
1
- /**
2
- * Angular is using a gulp task to generate the locales that we dynamically import. This task can be found here
3
- * https://github.com/angular/angular/blob/master/tools/gulp-tasks/cldr/cldr-data.js
4
- * That task is utilizing the CLDR library to load and construct the locale for each region. This service is responsible
5
- * to load those locale dynamically upon request and to update the state of the eUI app.
6
- *
7
- * Parts that are handles through configuration:
8
- * - update of the LOCALE_ID token
9
- * - initial dynamical load of locales
10
- * - bind to translation service for locale changes
11
- */
12
- import { Inject, Injectable, InjectionToken, LOCALE_ID, Optional } from '@angular/core';
13
- import { getLocaleId } from '@angular/common';
14
- import { EuiService, getLocaleState, getLocaleServiceConfigFromBase, } from '@eui/base';
15
- import { of, Subject, throwError } from 'rxjs';
16
- import { catchError, filter, map, switchMap, take, takeUntil, tap } from 'rxjs/operators';
17
- import { UpdateLocaleStateAction } from '../store';
18
- import { GLOBAL_CONFIG_TOKEN } from '../config/tokens';
19
- import { createSelector } from '@ngrx/store';
20
- import * as i0 from "@angular/core";
21
- import * as i1 from "../store";
22
- import * as i2 from "../i18n";
23
- import * as i3 from "../log";
24
- export const LOCALE_ID_MAPPER = new InjectionToken('localeIdMapper');
25
- export class LocaleService extends EuiService {
26
- constructor(store, baseGlobalConfig, locale_id, localeMapper, i18n, log) {
27
- super({ id: getLocaleId(locale_id) });
28
- this.store = store;
29
- this.baseGlobalConfig = baseGlobalConfig;
30
- this.locale_id = locale_id;
31
- this.localeMapper = localeMapper;
32
- this.i18n = i18n;
33
- this.log = log;
34
- this.subNotifier = new Subject();
35
- if (log) {
36
- this.logger = log.getLogger('core.LocaleService');
37
- }
38
- this.config = getLocaleServiceConfigFromBase(this.baseGlobalConfig);
39
- // in case no localeMapper provided, set the angular getLocaleId as default
40
- if (!this.localeMapper) {
41
- this.localeMapper = getLocaleId;
42
- }
43
- }
44
- ngOnDestroy() {
45
- this.subNotifier.next(void 0);
46
- this.subNotifier.complete();
47
- }
48
- getState(keyOrMapFn) {
49
- let selector = getLocaleState;
50
- let dotNotationToObject = (obj, key) => key.split('.').reduce((slice, i) => slice[i], obj);
51
- if (keyOrMapFn) {
52
- switch (typeof keyOrMapFn) {
53
- case 'function':
54
- selector = createSelector(getLocaleState, keyOrMapFn);
55
- break;
56
- case 'string':
57
- selector = createSelector(getLocaleState, (state) => dotNotationToObject(state, keyOrMapFn));
58
- break;
59
- }
60
- }
61
- return this.store.select(selector).pipe(takeUntil(this.subNotifier),
62
- // in case service didn't init fallback to LOCALE_ID token value
63
- map((state) => (state ? state : this.stateInstance ? this.stateInstance : this.locale_id)));
64
- }
65
- init(state) {
66
- super.initEuiService();
67
- // bind language changes to locale changes
68
- if (this.config?.bindWithTranslate) {
69
- this.bindTranslateServiceLangChangeToState();
70
- }
71
- // dynamically load locale based on provided configuration
72
- const availableLocales = state?.available || this.config?.available || this.getBrowserLocales() || [this.currentLocale];
73
- return this.loadLocale(availableLocales).pipe(takeUntil(this.subNotifier), tap(() => this.updateState(state || { id: this.currentLocale })));
74
- }
75
- /**
76
- * dynamically load locale and update the state
77
- */
78
- updateState(state) {
79
- try {
80
- const id = this.localeMapper(state.id);
81
- this.store.dispatch(new UpdateLocaleStateAction({ ...state, id }));
82
- // update global TOKEN ID based on configuration
83
- if (this.config.affectGlobalLocale) {
84
- this.locale_id = id;
85
- }
86
- }
87
- catch (e) {
88
- const message = `Locale for '${state.id}' is not available.
89
- Please use addLocale('${state.id}') first`;
90
- if (this.log) {
91
- this.logger.info(message, e);
92
- }
93
- throw new Error(message);
94
- }
95
- }
96
- addLocale(id) {
97
- return this.loadLocale(id);
98
- }
99
- get previousLocale() {
100
- return this.prevStateInstance?.id || this.currentLocale;
101
- }
102
- get currentLocale() {
103
- return this.stateInstance?.id;
104
- }
105
- /**
106
- * load and register locale data dynamically
107
- *
108
- * @param locale array of locale to load
109
- */
110
- loadLocale(locale) {
111
- // locale = Array.isArray(locale) ? locale : [locale];
112
- // const localeImports: Observable<{ data: any, localeId: string, extraData: any }>[]
113
- // = this.filterRegisteredLocales(locale).map(this.importDataAndExtraLocale.bind(this));
114
- //
115
- // // in case localeImports array is empty because locale exists, Observable still needs to complete
116
- // if (localeImports.length < 1) {
117
- // return of({ success: true });
118
- // }
119
- //
120
- // return forkJoin(...localeImports).pipe(
121
- // takeUntil(this.subNotifier),
122
- // map(localeData => {
123
- // // filter out null results and registerLocaleData including extra
124
- // localeData.filter(({ data }) => data)
125
- // .forEach(({ data, localeId, extraData }) => registerLocaleData(data, localeId, extraData));
126
- // return { success: true };
127
- // }),
128
- // catchError(error => {
129
- // if (this.log) {
130
- // this.logger.debug(`Locale load error: ${error.message}`, error);
131
- // }
132
- // return of({ success: false, error: error });
133
- // })
134
- // );
135
- return of({ success: true });
136
- }
137
- /**
138
- * listen for language changes and dynamically set locale accordingly. In case of non registered locale register it
139
- * dynamically.
140
- */
141
- bindTranslateServiceLangChangeToState() {
142
- if (this.i18n) {
143
- this.i18n.onStateChange
144
- .pipe(takeUntil(this.subNotifier),
145
- // filter out null values
146
- filter((state) => state?.activeLang !== null && state?.activeLang !== undefined),
147
- // BEWARE: filter is based on convention that locale id sliced(2) will match activeLang e.g. en-US => en
148
- // Also, if activeLang is 'en' and locale is 'en-GB' it will not trigger locale change
149
- filter((state) => state.activeLang.toLowerCase() !== this.stateInstance?.id.slice(0, 2).toLowerCase()),
150
- // to check if registration of locale otherwise register it
151
- switchMap((value) => of(value).pipe(
152
- // getLocaleId may throw Error(`Missing locale data for the locale "${locale}".`);
153
- switchMap((i18state) => {
154
- // check if activeLang is null or undefined
155
- if (!i18state.activeLang) {
156
- return throwError('Has i18nService initialized? If not make sure i18nService.init().subscribe(..)');
157
- }
158
- return of(this.localeMapper(i18state.activeLang));
159
- }), catchError((error) => {
160
- if (this.log) {
161
- this.logger.debug(error);
162
- }
163
- return this.loadLocale(value?.activeLang).pipe(filter((s) => s.success), map(() => this.localeMapper(value?.activeLang)), catchError((e) => {
164
- if (this.log) {
165
- this.logger.debug('Something went terribly really wrong during locale loading', e.err.message);
166
- }
167
- return of(e);
168
- }));
169
- }))),
170
- // update the "available" array attribute with newly registered
171
- switchMap((id) => this.getState().pipe(take(1), map((state) => {
172
- const available = state?.available ? state.available : [];
173
- return { ...state, id, available: Array.from(new Set([...available, id])) };
174
- }))))
175
- .subscribe((state) => {
176
- this.updateState(state);
177
- });
178
- }
179
- }
180
- /**
181
- * retrieve locales from browser
182
- *
183
- * @param options
184
- */
185
- getBrowserLocales() {
186
- const browserLocales = navigator.languages === undefined ? [navigator.language] : navigator.languages;
187
- if (!browserLocales) {
188
- return undefined;
189
- }
190
- return browserLocales.map((locale) => locale.trim());
191
- }
192
- /**
193
- * if locale is already registered filtered out.
194
- *
195
- * @param locales A string array contains all locale id e.g. ["el", "el-CY"]
196
- */
197
- filterRegisteredLocales(locales) {
198
- return locales.filter((loc) => {
199
- try {
200
- getLocaleId(loc);
201
- return false;
202
- }
203
- catch (e) {
204
- return true;
205
- }
206
- });
207
- }
208
- }
209
- /** @nocollapse */ LocaleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocaleService, deps: [{ token: i1.StoreService }, { token: GLOBAL_CONFIG_TOKEN }, { token: LOCALE_ID }, { token: LOCALE_ID_MAPPER, optional: true }, { token: i2.I18nService, optional: true }, { token: i3.LogService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
210
- /** @nocollapse */ LocaleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocaleService, providedIn: 'root' });
211
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocaleService, decorators: [{
212
- type: Injectable,
213
- args: [{
214
- providedIn: 'root',
215
- }]
216
- }], ctorParameters: function () { return [{ type: i1.StoreService }, { type: undefined, decorators: [{
217
- type: Inject,
218
- args: [GLOBAL_CONFIG_TOKEN]
219
- }] }, { type: undefined, decorators: [{
220
- type: Inject,
221
- args: [LOCALE_ID]
222
- }] }, { type: undefined, decorators: [{
223
- type: Optional
224
- }, {
225
- type: Inject,
226
- args: [LOCALE_ID_MAPPER]
227
- }] }, { type: i2.I18nService, decorators: [{
228
- type: Optional
229
- }] }, { type: i3.LogService, decorators: [{
230
- type: Optional
231
- }] }]; } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2xvY2FsZS9sb2NhbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFDSCxVQUFVLEVBRVYsY0FBYyxFQUNkLDhCQUE4QixHQUtqQyxNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBZ0IsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFHN0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWUsZ0JBQWdCLENBQUMsQ0FBQztBQUtuRixNQUFNLE9BQU8sYUFBbUQsU0FBUSxVQUEyQjtJQUsvRixZQUNjLEtBQW1CLEVBQ1UsZ0JBQThCLEVBQ3hDLFNBQWlCLEVBQ0EsWUFBMEIsRUFDcEQsSUFBaUIsRUFDakIsR0FBZTtRQUVuQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQVA1QixV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Q0FBQzs7NkhBL05RLGFBQWEsOENBT1YsbUJBQW1CLGFBQ25CLFNBQVMsYUFDRyxnQkFBZ0I7aUlBVC9CLGFBQWEsY0FGVixNQUFNOzJGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFRUSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQzFCLE1BQU07MkJBQUMsU0FBUzs7MEJBQ2hCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDbkMsUUFBUTs7MEJBQ1IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBbmd1bGFyIGlzIHVzaW5nIGEgZ3VscCB0YXNrIHRvIGdlbmVyYXRlIHRoZSBsb2NhbGVzIHRoYXQgd2UgZHluYW1pY2FsbHkgaW1wb3J0LiBUaGlzIHRhc2sgY2FuIGJlIGZvdW5kIGhlcmVcclxuICogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL21hc3Rlci90b29scy9ndWxwLXRhc2tzL2NsZHIvY2xkci1kYXRhLmpzXHJcbiAqIFRoYXQgdGFzayBpcyB1dGlsaXppbmcgdGhlIENMRFIgbGlicmFyeSB0byBsb2FkIGFuZCBjb25zdHJ1Y3QgdGhlIGxvY2FsZSBmb3IgZWFjaCByZWdpb24uIFRoaXMgc2VydmljZSBpcyByZXNwb25zaWJsZVxyXG4gKiB0byBsb2FkIHRob3NlIGxvY2FsZSBkeW5hbWljYWxseSB1cG9uIHJlcXVlc3QgYW5kIHRvIHVwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIGVVSSBhcHAuXHJcbiAqXHJcbiAqIFBhcnRzIHRoYXQgYXJlIGhhbmRsZXMgdGhyb3VnaCBjb25maWd1cmF0aW9uOlxyXG4gKiAgLSB1cGRhdGUgb2YgdGhlIExPQ0FMRV9JRCB0b2tlblxyXG4gKiAgLSBpbml0aWFsIGR5bmFtaWNhbCBsb2FkIG9mIGxvY2FsZXNcclxuICogIC0gYmluZCB0byB0cmFuc2xhdGlvbiBzZXJ2aWNlIGZvciBsb2NhbGUgY2hhbmdlc1xyXG4gKi9cclxuXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIExPQ0FMRV9JRCwgT25EZXN0cm95LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBnZXRMb2NhbGVJZCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgICBFdWlTZXJ2aWNlLFxyXG4gICAgRXVpU2VydmljZVN0YXR1cyxcclxuICAgIGdldExvY2FsZVN0YXRlLFxyXG4gICAgZ2V0TG9jYWxlU2VydmljZUNvbmZpZ0Zyb21CYXNlLFxyXG4gICAgR2xvYmFsQ29uZmlnLFxyXG4gICAgTG9jYWxlU2VydmljZUNvbmZpZyxcclxuICAgIExvY2FsZVN0YXRlLFxyXG4gICAgTG9nZ2VyLFxyXG59IGZyb20gJ0BldWkvYmFzZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTdG9yZVNlcnZpY2UsIFVwZGF0ZUxvY2FsZVN0YXRlQWN0aW9uIH0gZnJvbSAnLi4vc3RvcmUnO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi4vbG9nJztcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi9pMThuJztcclxuaW1wb3J0IHsgR0xPQkFMX0NPTkZJR19UT0tFTiB9IGZyb20gJy4uL2NvbmZpZy90b2tlbnMnO1xyXG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuXHJcbmV4cG9ydCB0eXBlIExvY2FsZU1hcHBlciA9IChsb2NhbGU6IHN0cmluZykgPT4gYW55O1xyXG5leHBvcnQgY29uc3QgTE9DQUxFX0lEX01BUFBFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMb2NhbGVNYXBwZXI+KCdsb2NhbGVJZE1hcHBlcicpO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxlU2VydmljZTxUIGV4dGVuZHMgTG9jYWxlU3RhdGUgPSBMb2NhbGVTdGF0ZT4gZXh0ZW5kcyBFdWlTZXJ2aWNlPFQgfCBMb2NhbGVTdGF0ZT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlcjtcclxuICAgIHByaXZhdGUgc3ViTm90aWZpZXI6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICBwcm90ZWN0ZWQgY29uZmlnOiBMb2NhbGVTZXJ2aWNlQ29uZmlnO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBzdG9yZTogU3RvcmVTZXJ2aWNlLFxyXG4gICAgICAgIEBJbmplY3QoR0xPQkFMX0NPTkZJR19UT0tFTikgcHJvdGVjdGVkIGJhc2VHbG9iYWxDb25maWc6IEdsb2JhbENvbmZpZyxcclxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgcHJvdGVjdGVkIGxvY2FsZV9pZDogc3RyaW5nLFxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTE9DQUxFX0lEX01BUFBFUikgcHJpdmF0ZSBsb2NhbGVNYXBwZXI6IExvY2FsZU1hcHBlcixcclxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGkxOG46IEkxOG5TZXJ2aWNlLFxyXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbG9nOiBMb2dTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcih7IGlkOiBnZXRMb2NhbGVJZChsb2NhbGVfaWQpIH0pO1xyXG4gICAgICAgIGlmIChsb2cpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2cuZ2V0TG9nZ2VyKCdjb3JlLkxvY2FsZVNlcnZpY2UnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlnID0gZ2V0TG9jYWxlU2VydmljZUNvbmZpZ0Zyb21CYXNlKHRoaXMuYmFzZUdsb2JhbENvbmZpZyk7XHJcbiAgICAgICAgLy8gaW4gY2FzZSBubyBsb2NhbGVNYXBwZXIgcHJvdmlkZWQsIHNldCB0aGUgYW5ndWxhciBnZXRMb2NhbGVJZCBhcyBkZWZhdWx0XHJcbiAgICAgICAgaWYgKCF0aGlzLmxvY2FsZU1hcHBlcikge1xyXG4gICAgICAgICAgICB0aGlzLmxvY2FsZU1hcHBlciA9IGdldExvY2FsZUlkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1Yk5vdGlmaWVyLm5leHQodm9pZCAwKTtcclxuICAgICAgICB0aGlzLnN1Yk5vdGlmaWVyLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdGU8SyA9IFQ+KG1hcEZuPzogKHN0YXRlOiBUKSA9PiBLKTogT2JzZXJ2YWJsZTxLPjtcclxuICAgIGdldFN0YXRlPGEgZXh0ZW5kcyBrZXlvZiBUPihrZXk/OiBhKTogT2JzZXJ2YWJsZTxUW2FdPjtcclxuICAgIGdldFN0YXRlPEs+KGtleU9yTWFwRm4/OiAoKHN0YXRlOiBUKSA9PiBLKSB8IHN0cmluZyk6IE9ic2VydmFibGU8Sz4ge1xyXG4gICAgICAgIGxldCBzZWxlY3RvcjogYW55ID0gZ2V0TG9jYWxlU3RhdGU7XHJcbiAgICAgICAgbGV0IGRvdE5vdGF0aW9uVG9PYmplY3QgPSAob2JqLCBrZXkpID0+IGtleS5zcGxpdCgnLicpLnJlZHVjZSgoc2xpY2UsIGkpID0+IHNsaWNlW2ldLCBvYmopO1xyXG5cclxuICAgICAgICBpZiAoa2V5T3JNYXBGbikge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBrZXlPck1hcEZuKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihnZXRMb2NhbGVTdGF0ZSwga2V5T3JNYXBGbik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoZ2V0TG9jYWxlU3RhdGUsIChzdGF0ZSkgPT4gZG90Tm90YXRpb25Ub09iamVjdChzdGF0ZSwga2V5T3JNYXBGbikpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnNlbGVjdChzZWxlY3RvcikucGlwZShcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3ViTm90aWZpZXIpLFxyXG4gICAgICAgICAgICAvLyBpbiBjYXNlIHNlcnZpY2UgZGlkbid0IGluaXQgZmFsbGJhY2sgdG8gTE9DQUxFX0lEIHRva2VuIHZhbHVlXHJcbiAgICAgICAgICAgIG1hcCgoc3RhdGUpID0+IChzdGF0ZSA/IHN0YXRlIDogdGhpcy5zdGF0ZUluc3RhbmNlID8gdGhpcy5zdGF0ZUluc3RhbmNlIDogdGhpcy5sb2NhbGVfaWQpKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdChzdGF0ZT86IExvY2FsZVN0YXRlIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxFdWlTZXJ2aWNlU3RhdHVzPiB7XHJcbiAgICAgICAgc3VwZXIuaW5pdEV1aVNlcnZpY2UoKTtcclxuXHJcbiAgICAgICAgLy8gYmluZCBsYW5ndWFnZSBjaGFuZ2VzIHRvIGxvY2FsZSBjaGFuZ2VzXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5iaW5kV2l0aFRyYW5zbGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmJpbmRUcmFuc2xhdGVTZXJ2aWNlTGFuZ0NoYW5nZVRvU3RhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGR5bmFtaWNhbGx5IGxvYWQgbG9jYWxlIGJhc2VkIG9uIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25cclxuICAgICAgICBjb25zdCBhdmFpbGFibGVMb2NhbGVzID0gc3RhdGU/LmF2YWlsYWJsZSB8fCB0aGlzLmNvbmZpZz8uYXZhaWxhYmxlIHx8IHRoaXMuZ2V0QnJvd3NlckxvY2FsZXMoKSB8fCBbdGhpcy5jdXJyZW50TG9jYWxlXTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkTG9jYWxlKGF2YWlsYWJsZUxvY2FsZXMpLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN1Yk5vdGlmaWVyKSxcclxuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMudXBkYXRlU3RhdGUoc3RhdGUgfHwgeyBpZDogdGhpcy5jdXJyZW50TG9jYWxlIH0pKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkeW5hbWljYWxseSBsb2FkIGxvY2FsZSBhbmQgdXBkYXRlIHRoZSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICB1cGRhdGVTdGF0ZShzdGF0ZTogTG9jYWxlU3RhdGUpOiB2b2lkIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMubG9jYWxlTWFwcGVyKHN0YXRlLmlkKTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgVXBkYXRlTG9jYWxlU3RhdGVBY3Rpb24oeyAuLi5zdGF0ZSwgaWQgfSkpO1xyXG4gICAgICAgICAgICAvLyB1cGRhdGUgZ2xvYmFsIFRPS0VOIElEIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cclxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmFmZmVjdEdsb2JhbExvY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGVfaWQgPSBpZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBMb2NhbGUgZm9yICcke3N0YXRlLmlkfScgaXMgbm90IGF2YWlsYWJsZS5cclxuICAgICAgICAgICAgICAgICBQbGVhc2UgdXNlIGFkZExvY2FsZSgnJHtzdGF0ZS5pZH0nKSBmaXJzdGA7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxvZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhtZXNzYWdlLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZExvY2FsZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxFdWlTZXJ2aWNlU3RhdHVzPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZExvY2FsZShpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByZXZpb3VzTG9jYWxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldlN0YXRlSW5zdGFuY2U/LmlkIHx8IHRoaXMuY3VycmVudExvY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY3VycmVudExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlSW5zdGFuY2U/LmlkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogbG9hZCBhbmQgcmVnaXN0ZXIgbG9jYWxlIGRhdGEgZHluYW1pY2FsbHlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbG9jYWxlIGFycmF5IG9mIGxvY2FsZSB0byBsb2FkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbG9hZExvY2FsZShsb2NhbGU6IHN0cmluZ1tdIHwgc3RyaW5nKTogT2JzZXJ2YWJsZTxFdWlTZXJ2aWNlU3RhdHVzPiB7XHJcbiAgICAgICAgLy8gbG9jYWxlID0gQXJyYXkuaXNBcnJheShsb2NhbGUpID8gbG9jYWxlIDogW2xvY2FsZV07XHJcbiAgICAgICAgLy8gY29uc3QgbG9jYWxlSW1wb3J0czogT2JzZXJ2YWJsZTx7IGRhdGE6IGFueSwgbG9jYWxlSWQ6IHN0cmluZywgZXh0cmFEYXRhOiBhbnkgfT5bXVxyXG4gICAgICAgIC8vICAgICA9IHRoaXMuZmlsdGVyUmVnaXN0ZXJlZExvY2FsZXMobG9jYWxlKS5tYXAodGhpcy5pbXBvcnREYXRhQW5kRXh0cmFMb2NhbGUuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyAvLyBpbiBjYXNlIGxvY2FsZUltcG9ydHMgYXJyYXkgaXMgZW1wdHkgYmVjYXVzZSBsb2NhbGUgZXhpc3RzLCBPYnNlcnZhYmxlIHN0aWxsIG5lZWRzIHRvIGNvbXBsZXRlXHJcbiAgICAgICAgLy8gaWYgKGxvY2FsZUltcG9ydHMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgIC8vICAgICByZXR1cm4gb2YoeyBzdWNjZXNzOiB0cnVlIH0pO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIHJldHVybiBmb3JrSm9pbiguLi5sb2NhbGVJbXBvcnRzKS5waXBlKFxyXG4gICAgICAgIC8vICAgICB0YWtlVW50aWwodGhpcy5zdWJOb3RpZmllciksXHJcbiAgICAgICAgLy8gICAgIG1hcChsb2NhbGVEYXRhID0+IHtcclxuICAgICAgICAvLyAgICAgICAgIC8vIGZpbHRlciBvdXQgbnVsbCByZXN1bHRzIGFuZCByZWdpc3RlckxvY2FsZURhdGEgaW5jbHVkaW5nIGV4dHJhXHJcbiAgICAgICAgLy8gICAgICAgICBsb2NhbGVEYXRhLmZpbHRlcigoeyBkYXRhIH0pID0+IGRhdGEpXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgLmZvckVhY2goKHsgZGF0YSwgbG9jYWxlSWQsIGV4dHJhRGF0YSB9KSA9PiByZWdpc3RlckxvY2FsZURhdGEoZGF0YSwgbG9jYWxlSWQsIGV4dHJhRGF0YSkpO1xyXG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xyXG4gICAgICAgIC8vICAgICB9KSxcclxuICAgICAgICAvLyAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5sb2cpIHtcclxuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgTG9jYWxlIGxvYWQgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCBlcnJvcik7XHJcbiAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gb2YoeyBzdWNjZXNzOiBmYWxzZSwgZXJyb3I6IGVycm9yIH0pO1xyXG4gICAgICAgIC8vICAgICB9KVxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHsgc3VjY2VzczogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGxpc3RlbiBmb3IgbGFuZ3VhZ2UgY2hhbmdlcyBhbmQgZHluYW1pY2FsbHkgc2V0IGxvY2FsZSBhY2NvcmRpbmdseS4gSW4gY2FzZSBvZiBub24gcmVnaXN0ZXJlZCBsb2NhbGUgcmVnaXN0ZXIgaXRcclxuICAgICAqIGR5bmFtaWNhbGx5LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGJpbmRUcmFuc2xhdGVTZXJ2aWNlTGFuZ0NoYW5nZVRvU3RhdGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaTE4bikge1xyXG4gICAgICAgICAgICB0aGlzLmkxOG4ub25TdGF0ZUNoYW5nZVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3ViTm90aWZpZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgbnVsbCB2YWx1ZXNcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZT8uYWN0aXZlTGFuZyAhPT0gbnVsbCAmJiBzdGF0ZT8uYWN0aXZlTGFuZyAhPT0gdW5kZWZpbmVkKSxcclxuICAgICAgICAgICAgICAgICAgICAvLyBCRVdBUkU6IGZpbHRlciBpcyBiYXNlZCBvbiBjb252ZW50aW9uIHRoYXQgbG9jYWxlIGlkIHNsaWNlZCgyKSB3aWxsIG1hdGNoIGFjdGl2ZUxhbmcgZS5nLiBlbi1VUyA9PiBlblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFsc28sIGlmIGFjdGl2ZUxhbmcgaXMgJ2VuJyBhbmQgbG9jYWxlIGlzICdlbi1HQicgaXQgd2lsbCBub3QgdHJpZ2dlciBsb2NhbGUgY2hhbmdlXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChzdGF0ZSkgPT4gc3RhdGUuYWN0aXZlTGFuZy50b0xvd2VyQ2FzZSgpICE9PSB0aGlzLnN0YXRlSW5zdGFuY2U/LmlkLnNsaWNlKDAsIDIpLnRvTG93ZXJDYXNlKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvIGNoZWNrIGlmIHJlZ2lzdHJhdGlvbiBvZiBsb2NhbGUgb3RoZXJ3aXNlIHJlZ2lzdGVyIGl0XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgb2YodmFsdWUpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXRMb2NhbGVJZCBtYXkgdGhyb3cgRXJyb3IoYE1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIHRoZSBsb2NhbGUgXCIke2xvY2FsZX1cIi5gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoaTE4c3RhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBhY3RpdmVMYW5nIGlzIG51bGwgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpMThzdGF0ZS5hY3RpdmVMYW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdIYXMgaTE4blNlcnZpY2UgaW5pdGlhbGl6ZWQ/IElmIG5vdCBtYWtlIHN1cmUgaTE4blNlcnZpY2UuaW5pdCgpLnN1YnNjcmliZSguLiknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMubG9jYWxlTWFwcGVyKGkxOHN0YXRlLmFjdGl2ZUxhbmcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkTG9jYWxlKHZhbHVlPy5hY3RpdmVMYW5nKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHM6IEV1aVNlcnZpY2VTdGF0dXMpID0+IHMuc3VjY2VzcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLmxvY2FsZU1hcHBlcih2YWx1ZT8uYWN0aXZlTGFuZykpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU29tZXRoaW5nIHdlbnQgdGVycmlibHkgcmVhbGx5IHdyb25nIGR1cmluZyBsb2NhbGUgbG9hZGluZycsIGUuZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIFwiYXZhaWxhYmxlXCIgYXJyYXkgYXR0cmlidXRlIHdpdGggbmV3bHkgcmVnaXN0ZXJlZFxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoaWQpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RhdGUoKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoc3RhdGU6IExvY2FsZVN0YXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gc3RhdGU/LmF2YWlsYWJsZSA/IHN0YXRlLmF2YWlsYWJsZSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBpZCwgYXZhaWxhYmxlOiBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLmF2YWlsYWJsZSwgaWRdKSkgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZTogTG9jYWxlU3RhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHJldHJpZXZlIGxvY2FsZXMgZnJvbSBicm93c2VyXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRCcm93c2VyTG9jYWxlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgY29uc3QgYnJvd3NlckxvY2FsZXMgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzID09PSB1bmRlZmluZWQgPyBbbmF2aWdhdG9yLmxhbmd1YWdlXSA6IG5hdmlnYXRvci5sYW5ndWFnZXM7XHJcblxyXG4gICAgICAgIGlmICghYnJvd3NlckxvY2FsZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBicm93c2VyTG9jYWxlcy5tYXAoKGxvY2FsZSkgPT4gbG9jYWxlLnRyaW0oKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBpZiBsb2NhbGUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGZpbHRlcmVkIG91dC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbG9jYWxlcyBBIHN0cmluZyBhcnJheSBjb250YWlucyBhbGwgbG9jYWxlIGlkIGUuZy4gW1wiZWxcIiwgXCJlbC1DWVwiXVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGZpbHRlclJlZ2lzdGVyZWRMb2NhbGVzKGxvY2FsZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBsb2NhbGVzLmZpbHRlcigobG9jOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGdldExvY2FsZUlkKGxvYyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiByZXR1cm5zIGFuIE9ic2VydmFibGUgd2hpY2ggbG9hZHMgdGhlIGxvY2FsZSBiYXNlZCBvbiBwcm92aWRlZCBJRFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpZCB0aGUgbG9jYWxlIGlkIGUuZy4gZW4sIGVsLUNZXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICAvLyBwcml2YXRlIGltcG9ydExvY2FsZShpZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vICAgICAvLyBpbiBjYXNlIG9mIGFuIGVycm9yLCBjYXRjaCBpdCBhbmQgcmV0dXJuIG51bGxcclxuICAgIC8vICAgICByZXR1cm4gaW1wb3J0KFxyXG4gICAgLy8gICAgICAgICAvKiB3ZWJwYWNrRXhjbHVkZTogL1xcLmRcXC50cyQvICovXHJcbiAgICAvLyAgICAgICAgIC8qIHdlYnBhY2tNb2RlOiBcImxhenktb25jZVwiICovXHJcbiAgICAvLyAgICAgICAgIC8qIHdlYnBhY2tDaHVua05hbWU6IFwiaTE4bi1iYXNlXCIgKi9cclxuICAgIC8vICAgICAgICAgYEAvLi4vbm9kZV9tb2R1bGVzL0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzLyR7aWR9YClcclxuICAgIC8vICAgICAgICAgLnRoZW4obSA9PiBtLmRlZmF1bHQpXHJcbiAgICAvLyAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5sb2cpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgTG9jYWxlIHdpdGggSUQ6IFwiJHtpZH1cIiBmYWlsZWQgdG8gbG9hZC4gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCBlcnJvcik7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIC8vICAgICAgICAgfSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiByZXR1cm5zIGEgUHJvbWlzZSB3aGljaCBsb2FkcyB0aGUgbG9jYWxlIGJhc2VkIG9uIHByb3ZpZGVkIElEXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGlkIHRoZSBsb2NhbGUgaWQgZS5nLiBlbiwgZWwtQ1lcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIC8vIHByaXZhdGUgaW1wb3J0RXh0cmFMb2NhbGUoaWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAvLyAgICAgLy8gaW4gY2FzZSBvZiBhbiBlcnJvciwgY2F0Y2ggaXQgYW5kIHJldHVybiBudWxsXHJcbiAgICAvLyAgICAgcmV0dXJuIGltcG9ydChcclxuICAgIC8vICAgICAgICAgLyogd2VicGFja0V4Y2x1ZGU6IC9cXC5kXFwudHMkLyAqL1xyXG4gICAgLy8gICAgICAgICAvKiB3ZWJwYWNrTW9kZTogXCJsYXp5LW9uY2VcIiAqL1xyXG4gICAgLy8gICAgICAgICAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImkxOG4tZXh0cmFcIiAqL1xyXG4gICAgLy8gICAgICAgICBgQC8uLi9ub2RlX21vZHVsZXMvQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvZXh0cmEvJHtpZH1gKVxyXG4gICAgLy8gICAgICAgICAudGhlbihtID0+IG0uZGVmYXVsdClcclxuICAgIC8vICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLmxvZykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBFeHRyYSBMb2NhbGUgd2l0aCBJRDogXCIke2lkfVwiIGZhaWxlZCB0byBsb2FkLiBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsIGVycm9yKTtcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgLy8gICAgICAgICB9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcG9ydHMgTG9jYWxlIGFuZCB0aGVuIEV4dHJhLiBJdCByZXR1cm5zIHRoZSBPYmplY3Qgd2hpY2ggcmVnaXN0ZXJMb2NhbGUoLi4uKSBmdW5jdGlvbiBuZWVkcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbG9jYWxlSWQgVGhlIGlkIG9mIHRoZSBsb2NhbGVcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIC8vIHByaXZhdGUgaW1wb3J0RGF0YUFuZEV4dHJhTG9jYWxlKGxvY2FsZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHsgZGF0YTogYW55LCBsb2NhbGVJZDogc3RyaW5nLCBleHRyYURhdGE6IGFueSB9PiB7XHJcbiAgICAvLyAgICAgcmV0dXJuIGZyb20odGhpcy5pbXBvcnRMb2NhbGUobG9jYWxlSWQpKS5waXBlKFxyXG4gICAgLy8gICAgICAgICBtZXJnZU1hcCgoZGF0YSkgPT4gZnJvbSh0aGlzLmltcG9ydEV4dHJhTG9jYWxlKGxvY2FsZUlkKSkucGlwZShtYXAoKGV4dHJhRGF0YSkgPT5cclxuICAgIC8vICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCB7IGRhdGEsIGxvY2FsZUlkLCBleHRyYURhdGEgfSkpKSxcclxuICAgIC8vICAgICAgICAgICAgIDFcclxuICAgIC8vICAgICAgICAgKSk7XHJcbiAgICAvLyB9XHJcbn1cclxuIl19
1
+ /**
2
+ * Angular is using a gulp task to generate the locales that we dynamically import. This task can be found here
3
+ * https://github.com/angular/angular/blob/master/tools/gulp-tasks/cldr/cldr-data.js
4
+ * That task is utilizing the CLDR library to load and construct the locale for each region. This service is responsible
5
+ * to load those locale dynamically upon request and to update the state of the eUI app.
6
+ *
7
+ * Parts that are handles through configuration:
8
+ * - update of the LOCALE_ID token
9
+ * - initial dynamical load of locales
10
+ * - bind to translation service for locale changes
11
+ */
12
+ import { Inject, Injectable, InjectionToken, LOCALE_ID, Optional } from '@angular/core';
13
+ import { getLocaleId } from '@angular/common';
14
+ import { EuiService, getLocaleState, getLocaleServiceConfigFromBase, } from '@eui/base';
15
+ import { of, Subject, throwError } from 'rxjs';
16
+ import { catchError, filter, map, switchMap, take, takeUntil, tap } from 'rxjs/operators';
17
+ import { UpdateLocaleStateAction } from '../store';
18
+ import { GLOBAL_CONFIG_TOKEN } from '../config/tokens';
19
+ import { createSelector } from '@ngrx/store';
20
+ import * as i0 from "@angular/core";
21
+ import * as i1 from "../store";
22
+ import * as i2 from "../i18n";
23
+ import * as i3 from "../log";
24
+ export const LOCALE_ID_MAPPER = new InjectionToken('localeIdMapper');
25
+ export class LocaleService extends EuiService {
26
+ constructor(store, baseGlobalConfig, locale_id, localeMapper, i18n, log) {
27
+ super({ id: getLocaleId(locale_id) });
28
+ this.store = store;
29
+ this.baseGlobalConfig = baseGlobalConfig;
30
+ this.locale_id = locale_id;
31
+ this.localeMapper = localeMapper;
32
+ this.i18n = i18n;
33
+ this.log = log;
34
+ this.subNotifier = new Subject();
35
+ if (log) {
36
+ this.logger = log.getLogger('core.LocaleService');
37
+ }
38
+ this.config = getLocaleServiceConfigFromBase(this.baseGlobalConfig);
39
+ // in case no localeMapper provided, set the angular getLocaleId as default
40
+ if (!this.localeMapper) {
41
+ this.localeMapper = getLocaleId;
42
+ }
43
+ }
44
+ ngOnDestroy() {
45
+ this.subNotifier.next(void 0);
46
+ this.subNotifier.complete();
47
+ }
48
+ getState(keyOrMapFn) {
49
+ let selector = getLocaleState;
50
+ let dotNotationToObject = (obj, key) => key.split('.').reduce((slice, i) => slice[i], obj);
51
+ if (keyOrMapFn) {
52
+ switch (typeof keyOrMapFn) {
53
+ case 'function':
54
+ selector = createSelector(getLocaleState, keyOrMapFn);
55
+ break;
56
+ case 'string':
57
+ selector = createSelector(getLocaleState, (state) => dotNotationToObject(state, keyOrMapFn));
58
+ break;
59
+ }
60
+ }
61
+ return this.store.select(selector).pipe(takeUntil(this.subNotifier),
62
+ // in case service didn't init fallback to LOCALE_ID token value
63
+ map((state) => (state ? state : this.stateInstance ? this.stateInstance : this.locale_id)));
64
+ }
65
+ init(state) {
66
+ super.initEuiService();
67
+ // bind language changes to locale changes
68
+ if (this.config?.bindWithTranslate) {
69
+ this.bindTranslateServiceLangChangeToState();
70
+ }
71
+ // dynamically load locale based on provided configuration
72
+ const availableLocales = state?.available || this.config?.available || this.getBrowserLocales() || [this.currentLocale];
73
+ return this.loadLocale(availableLocales).pipe(takeUntil(this.subNotifier), tap(() => this.updateState(state || { id: this.currentLocale })));
74
+ }
75
+ /**
76
+ * dynamically load locale and update the state
77
+ */
78
+ updateState(state) {
79
+ try {
80
+ const id = this.localeMapper(state.id);
81
+ this.store.dispatch(new UpdateLocaleStateAction({ ...state, id }));
82
+ // update global TOKEN ID based on configuration
83
+ if (this.config.affectGlobalLocale) {
84
+ this.locale_id = id;
85
+ }
86
+ }
87
+ catch (e) {
88
+ const message = `Locale for '${state.id}' is not available.
89
+ Please use addLocale('${state.id}') first`;
90
+ if (this.log) {
91
+ this.logger.info(message, e);
92
+ }
93
+ throw new Error(message);
94
+ }
95
+ }
96
+ addLocale(id) {
97
+ return this.loadLocale(id);
98
+ }
99
+ get previousLocale() {
100
+ return this.prevStateInstance?.id || this.currentLocale;
101
+ }
102
+ get currentLocale() {
103
+ return this.stateInstance?.id;
104
+ }
105
+ /**
106
+ * load and register locale data dynamically
107
+ *
108
+ * @param locale array of locale to load
109
+ */
110
+ loadLocale(locale) {
111
+ // locale = Array.isArray(locale) ? locale : [locale];
112
+ // const localeImports: Observable<{ data: any, localeId: string, extraData: any }>[]
113
+ // = this.filterRegisteredLocales(locale).map(this.importDataAndExtraLocale.bind(this));
114
+ //
115
+ // // in case localeImports array is empty because locale exists, Observable still needs to complete
116
+ // if (localeImports.length < 1) {
117
+ // return of({ success: true });
118
+ // }
119
+ //
120
+ // return forkJoin(...localeImports).pipe(
121
+ // takeUntil(this.subNotifier),
122
+ // map(localeData => {
123
+ // // filter out null results and registerLocaleData including extra
124
+ // localeData.filter(({ data }) => data)
125
+ // .forEach(({ data, localeId, extraData }) => registerLocaleData(data, localeId, extraData));
126
+ // return { success: true };
127
+ // }),
128
+ // catchError(error => {
129
+ // if (this.log) {
130
+ // this.logger.debug(`Locale load error: ${error.message}`, error);
131
+ // }
132
+ // return of({ success: false, error: error });
133
+ // })
134
+ // );
135
+ return of({ success: true });
136
+ }
137
+ /**
138
+ * listen for language changes and dynamically set locale accordingly. In case of non registered locale register it
139
+ * dynamically.
140
+ */
141
+ bindTranslateServiceLangChangeToState() {
142
+ if (this.i18n) {
143
+ this.i18n.onStateChange
144
+ .pipe(takeUntil(this.subNotifier),
145
+ // filter out null values
146
+ filter((state) => state?.activeLang !== null && state?.activeLang !== undefined),
147
+ // BEWARE: filter is based on convention that locale id sliced(2) will match activeLang e.g. en-US => en
148
+ // Also, if activeLang is 'en' and locale is 'en-GB' it will not trigger locale change
149
+ filter((state) => state.activeLang.toLowerCase() !== this.stateInstance?.id.slice(0, 2).toLowerCase()),
150
+ // to check if registration of locale otherwise register it
151
+ switchMap((value) => of(value).pipe(
152
+ // getLocaleId may throw Error(`Missing locale data for the locale "${locale}".`);
153
+ switchMap((i18state) => {
154
+ // check if activeLang is null or undefined
155
+ if (!i18state.activeLang) {
156
+ return throwError('Has i18nService initialized? If not make sure i18nService.init().subscribe(..)');
157
+ }
158
+ return of(this.localeMapper(i18state.activeLang));
159
+ }), catchError((error) => {
160
+ if (this.log) {
161
+ this.logger.debug(error);
162
+ }
163
+ return this.loadLocale(value?.activeLang).pipe(filter((s) => s.success), map(() => this.localeMapper(value?.activeLang)), catchError((e) => {
164
+ if (this.log) {
165
+ this.logger.debug('Something went terribly really wrong during locale loading', e.err.message);
166
+ }
167
+ return of(e);
168
+ }));
169
+ }))),
170
+ // update the "available" array attribute with newly registered
171
+ switchMap((id) => this.getState().pipe(take(1), map((state) => {
172
+ const available = state?.available ? state.available : [];
173
+ return { ...state, id, available: Array.from(new Set([...available, id])) };
174
+ }))))
175
+ .subscribe((state) => {
176
+ this.updateState(state);
177
+ });
178
+ }
179
+ }
180
+ /**
181
+ * retrieve locales from browser
182
+ *
183
+ * @param options
184
+ */
185
+ getBrowserLocales() {
186
+ const browserLocales = navigator.languages === undefined ? [navigator.language] : navigator.languages;
187
+ if (!browserLocales) {
188
+ return undefined;
189
+ }
190
+ return browserLocales.map((locale) => locale.trim());
191
+ }
192
+ /**
193
+ * if locale is already registered filtered out.
194
+ *
195
+ * @param locales A string array contains all locale id e.g. ["el", "el-CY"]
196
+ */
197
+ filterRegisteredLocales(locales) {
198
+ return locales.filter((loc) => {
199
+ try {
200
+ getLocaleId(loc);
201
+ return false;
202
+ }
203
+ catch (e) {
204
+ return true;
205
+ }
206
+ });
207
+ }
208
+ }
209
+ /** @nocollapse */ LocaleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocaleService, deps: [{ token: i1.StoreService }, { token: GLOBAL_CONFIG_TOKEN }, { token: LOCALE_ID }, { token: LOCALE_ID_MAPPER, optional: true }, { token: i2.I18nService, optional: true }, { token: i3.LogService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
210
+ /** @nocollapse */ LocaleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocaleService, providedIn: 'root' });
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LocaleService, decorators: [{
212
+ type: Injectable,
213
+ args: [{
214
+ providedIn: 'root',
215
+ }]
216
+ }], ctorParameters: function () { return [{ type: i1.StoreService }, { type: undefined, decorators: [{
217
+ type: Inject,
218
+ args: [GLOBAL_CONFIG_TOKEN]
219
+ }] }, { type: undefined, decorators: [{
220
+ type: Inject,
221
+ args: [LOCALE_ID]
222
+ }] }, { type: undefined, decorators: [{
223
+ type: Optional
224
+ }, {
225
+ type: Inject,
226
+ args: [LOCALE_ID_MAPPER]
227
+ }] }, { type: i2.I18nService, decorators: [{
228
+ type: Optional
229
+ }] }, { type: i3.LogService, decorators: [{
230
+ type: Optional
231
+ }] }]; } });
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2xvY2FsZS9sb2NhbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFDSCxVQUFVLEVBRVYsY0FBYyxFQUNkLDhCQUE4QixHQUtqQyxNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBZ0IsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFHN0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWUsZ0JBQWdCLENBQUMsQ0FBQztBQUtuRixNQUFNLE9BQU8sYUFBbUQsU0FBUSxVQUEyQjtJQUsvRixZQUNjLEtBQW1CLEVBQ1UsZ0JBQThCLEVBQ3hDLFNBQWlCLEVBQ0EsWUFBMEIsRUFDcEQsSUFBaUIsRUFDakIsR0FBZTtRQUVuQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQVA1QixV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Q0FBQzs7NkhBL05RLGFBQWEsOENBT1YsbUJBQW1CLGFBQ25CLFNBQVMsYUFDRyxnQkFBZ0I7aUlBVC9CLGFBQWEsY0FGVixNQUFNOzJGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFRUSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQzFCLE1BQU07MkJBQUMsU0FBUzs7MEJBQ2hCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDbkMsUUFBUTs7MEJBQ1IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW5ndWxhciBpcyB1c2luZyBhIGd1bHAgdGFzayB0byBnZW5lcmF0ZSB0aGUgbG9jYWxlcyB0aGF0IHdlIGR5bmFtaWNhbGx5IGltcG9ydC4gVGhpcyB0YXNrIGNhbiBiZSBmb3VuZCBoZXJlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvbWFzdGVyL3Rvb2xzL2d1bHAtdGFza3MvY2xkci9jbGRyLWRhdGEuanNcbiAqIFRoYXQgdGFzayBpcyB1dGlsaXppbmcgdGhlIENMRFIgbGlicmFyeSB0byBsb2FkIGFuZCBjb25zdHJ1Y3QgdGhlIGxvY2FsZSBmb3IgZWFjaCByZWdpb24uIFRoaXMgc2VydmljZSBpcyByZXNwb25zaWJsZVxuICogdG8gbG9hZCB0aG9zZSBsb2NhbGUgZHluYW1pY2FsbHkgdXBvbiByZXF1ZXN0IGFuZCB0byB1cGRhdGUgdGhlIHN0YXRlIG9mIHRoZSBlVUkgYXBwLlxuICpcbiAqIFBhcnRzIHRoYXQgYXJlIGhhbmRsZXMgdGhyb3VnaCBjb25maWd1cmF0aW9uOlxuICogIC0gdXBkYXRlIG9mIHRoZSBMT0NBTEVfSUQgdG9rZW5cbiAqICAtIGluaXRpYWwgZHluYW1pY2FsIGxvYWQgb2YgbG9jYWxlc1xuICogIC0gYmluZCB0byB0cmFuc2xhdGlvbiBzZXJ2aWNlIGZvciBsb2NhbGUgY2hhbmdlc1xuICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIExPQ0FMRV9JRCwgT25EZXN0cm95LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0TG9jYWxlSWQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBFdWlTZXJ2aWNlLFxuICAgIEV1aVNlcnZpY2VTdGF0dXMsXG4gICAgZ2V0TG9jYWxlU3RhdGUsXG4gICAgZ2V0TG9jYWxlU2VydmljZUNvbmZpZ0Zyb21CYXNlLFxuICAgIEdsb2JhbENvbmZpZyxcbiAgICBMb2NhbGVTZXJ2aWNlQ29uZmlnLFxuICAgIExvY2FsZVN0YXRlLFxuICAgIExvZ2dlcixcbn0gZnJvbSAnQGV1aS9iYXNlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN0b3JlU2VydmljZSwgVXBkYXRlTG9jYWxlU3RhdGVBY3Rpb24gfSBmcm9tICcuLi9zdG9yZSc7XG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi4vbG9nJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBHTE9CQUxfQ09ORklHX1RPS0VOIH0gZnJvbSAnLi4vY29uZmlnL3Rva2Vucyc7XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcblxuZXhwb3J0IHR5cGUgTG9jYWxlTWFwcGVyID0gKGxvY2FsZTogc3RyaW5nKSA9PiBhbnk7XG5leHBvcnQgY29uc3QgTE9DQUxFX0lEX01BUFBFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMb2NhbGVNYXBwZXI+KCdsb2NhbGVJZE1hcHBlcicpO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbGVTZXJ2aWNlPFQgZXh0ZW5kcyBMb2NhbGVTdGF0ZSA9IExvY2FsZVN0YXRlPiBleHRlbmRzIEV1aVNlcnZpY2U8VCB8IExvY2FsZVN0YXRlPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlcjtcbiAgICBwcml2YXRlIHN1Yk5vdGlmaWVyOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHByb3RlY3RlZCBjb25maWc6IExvY2FsZVNlcnZpY2VDb25maWc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHN0b3JlOiBTdG9yZVNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoR0xPQkFMX0NPTkZJR19UT0tFTikgcHJvdGVjdGVkIGJhc2VHbG9iYWxDb25maWc6IEdsb2JhbENvbmZpZyxcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIHByb3RlY3RlZCBsb2NhbGVfaWQ6IHN0cmluZyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChMT0NBTEVfSURfTUFQUEVSKSBwcml2YXRlIGxvY2FsZU1hcHBlcjogTG9jYWxlTWFwcGVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGkxOG46IEkxOG5TZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGxvZzogTG9nU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcih7IGlkOiBnZXRMb2NhbGVJZChsb2NhbGVfaWQpIH0pO1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlciA9IGxvZy5nZXRMb2dnZXIoJ2NvcmUuTG9jYWxlU2VydmljZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25maWcgPSBnZXRMb2NhbGVTZXJ2aWNlQ29uZmlnRnJvbUJhc2UodGhpcy5iYXNlR2xvYmFsQ29uZmlnKTtcbiAgICAgICAgLy8gaW4gY2FzZSBubyBsb2NhbGVNYXBwZXIgcHJvdmlkZWQsIHNldCB0aGUgYW5ndWxhciBnZXRMb2NhbGVJZCBhcyBkZWZhdWx0XG4gICAgICAgIGlmICghdGhpcy5sb2NhbGVNYXBwZXIpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxlTWFwcGVyID0gZ2V0TG9jYWxlSWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJOb3RpZmllci5uZXh0KHZvaWQgMCk7XG4gICAgICAgIHRoaXMuc3ViTm90aWZpZXIuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBnZXRTdGF0ZTxLID0gVD4obWFwRm4/OiAoc3RhdGU6IFQpID0+IEspOiBPYnNlcnZhYmxlPEs+O1xuICAgIGdldFN0YXRlPGEgZXh0ZW5kcyBrZXlvZiBUPihrZXk/OiBhKTogT2JzZXJ2YWJsZTxUW2FdPjtcbiAgICBnZXRTdGF0ZTxLPihrZXlPck1hcEZuPzogKChzdGF0ZTogVCkgPT4gSykgfCBzdHJpbmcpOiBPYnNlcnZhYmxlPEs+IHtcbiAgICAgICAgbGV0IHNlbGVjdG9yOiBhbnkgPSBnZXRMb2NhbGVTdGF0ZTtcbiAgICAgICAgbGV0IGRvdE5vdGF0aW9uVG9PYmplY3QgPSAob2JqLCBrZXkpID0+IGtleS5zcGxpdCgnLicpLnJlZHVjZSgoc2xpY2UsIGkpID0+IHNsaWNlW2ldLCBvYmopO1xuXG4gICAgICAgIGlmIChrZXlPck1hcEZuKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBrZXlPck1hcEZuKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKGdldExvY2FsZVN0YXRlLCBrZXlPck1hcEZuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihnZXRMb2NhbGVTdGF0ZSwgKHN0YXRlKSA9PiBkb3ROb3RhdGlvblRvT2JqZWN0KHN0YXRlLCBrZXlPck1hcEZuKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnNlbGVjdChzZWxlY3RvcikucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN1Yk5vdGlmaWVyKSxcbiAgICAgICAgICAgIC8vIGluIGNhc2Ugc2VydmljZSBkaWRuJ3QgaW5pdCBmYWxsYmFjayB0byBMT0NBTEVfSUQgdG9rZW4gdmFsdWVcbiAgICAgICAgICAgIG1hcCgoc3RhdGUpID0+IChzdGF0ZSA/IHN0YXRlIDogdGhpcy5zdGF0ZUluc3RhbmNlID8gdGhpcy5zdGF0ZUluc3RhbmNlIDogdGhpcy5sb2NhbGVfaWQpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGluaXQoc3RhdGU/OiBMb2NhbGVTdGF0ZSB8IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8RXVpU2VydmljZVN0YXR1cz4ge1xuICAgICAgICBzdXBlci5pbml0RXVpU2VydmljZSgpO1xuXG4gICAgICAgIC8vIGJpbmQgbGFuZ3VhZ2UgY2hhbmdlcyB0byBsb2NhbGUgY2hhbmdlc1xuICAgICAgICBpZiAodGhpcy5jb25maWc/LmJpbmRXaXRoVHJhbnNsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRUcmFuc2xhdGVTZXJ2aWNlTGFuZ0NoYW5nZVRvU3RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGR5bmFtaWNhbGx5IGxvYWQgbG9jYWxlIGJhc2VkIG9uIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29uc3QgYXZhaWxhYmxlTG9jYWxlcyA9IHN0YXRlPy5hdmFpbGFibGUgfHwgdGhpcy5jb25maWc/LmF2YWlsYWJsZSB8fCB0aGlzLmdldEJyb3dzZXJMb2NhbGVzKCkgfHwgW3RoaXMuY3VycmVudExvY2FsZV07XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRMb2NhbGUoYXZhaWxhYmxlTG9jYWxlcykucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN1Yk5vdGlmaWVyKSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRlKHN0YXRlIHx8IHsgaWQ6IHRoaXMuY3VycmVudExvY2FsZSB9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkeW5hbWljYWxseSBsb2FkIGxvY2FsZSBhbmQgdXBkYXRlIHRoZSBzdGF0ZVxuICAgICAqL1xuICAgIHVwZGF0ZVN0YXRlKHN0YXRlOiBMb2NhbGVTdGF0ZSk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmxvY2FsZU1hcHBlcihzdGF0ZS5pZCk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVcGRhdGVMb2NhbGVTdGF0ZUFjdGlvbih7IC4uLnN0YXRlLCBpZCB9KSk7XG4gICAgICAgICAgICAvLyB1cGRhdGUgZ2xvYmFsIFRPS0VOIElEIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5hZmZlY3RHbG9iYWxMb2NhbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZV9pZCA9IGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYExvY2FsZSBmb3IgJyR7c3RhdGUuaWR9JyBpcyBub3QgYXZhaWxhYmxlLlxuICAgICAgICAgICAgICAgICBQbGVhc2UgdXNlIGFkZExvY2FsZSgnJHtzdGF0ZS5pZH0nKSBmaXJzdGA7XG4gICAgICAgICAgICBpZiAodGhpcy5sb2cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKG1lc3NhZ2UsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkTG9jYWxlKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEV1aVNlcnZpY2VTdGF0dXM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZExvY2FsZShpZCk7XG4gICAgfVxuXG4gICAgZ2V0IHByZXZpb3VzTG9jYWxlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXZTdGF0ZUluc3RhbmNlPy5pZCB8fCB0aGlzLmN1cnJlbnRMb2NhbGU7XG4gICAgfVxuXG4gICAgZ2V0IGN1cnJlbnRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVJbnN0YW5jZT8uaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbG9hZCBhbmQgcmVnaXN0ZXIgbG9jYWxlIGRhdGEgZHluYW1pY2FsbHlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb2NhbGUgYXJyYXkgb2YgbG9jYWxlIHRvIGxvYWRcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWRMb2NhbGUobG9jYWxlOiBzdHJpbmdbXSB8IHN0cmluZyk6IE9ic2VydmFibGU8RXVpU2VydmljZVN0YXR1cz4ge1xuICAgICAgICAvLyBsb2NhbGUgPSBBcnJheS5pc0FycmF5KGxvY2FsZSkgPyBsb2NhbGUgOiBbbG9jYWxlXTtcbiAgICAgICAgLy8gY29uc3QgbG9jYWxlSW1wb3J0czogT2JzZXJ2YWJsZTx7IGRhdGE6IGFueSwgbG9jYWxlSWQ6IHN0cmluZywgZXh0cmFEYXRhOiBhbnkgfT5bXVxuICAgICAgICAvLyAgICAgPSB0aGlzLmZpbHRlclJlZ2lzdGVyZWRMb2NhbGVzKGxvY2FsZSkubWFwKHRoaXMuaW1wb3J0RGF0YUFuZEV4dHJhTG9jYWxlLmJpbmQodGhpcykpO1xuICAgICAgICAvL1xuICAgICAgICAvLyAvLyBpbiBjYXNlIGxvY2FsZUltcG9ydHMgYXJyYXkgaXMgZW1wdHkgYmVjYXVzZSBsb2NhbGUgZXhpc3RzLCBPYnNlcnZhYmxlIHN0aWxsIG5lZWRzIHRvIGNvbXBsZXRlXG4gICAgICAgIC8vIGlmIChsb2NhbGVJbXBvcnRzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgLy8gICAgIHJldHVybiBvZih7IHN1Y2Nlc3M6IHRydWUgfSk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gcmV0dXJuIGZvcmtKb2luKC4uLmxvY2FsZUltcG9ydHMpLnBpcGUoXG4gICAgICAgIC8vICAgICB0YWtlVW50aWwodGhpcy5zdWJOb3RpZmllciksXG4gICAgICAgIC8vICAgICBtYXAobG9jYWxlRGF0YSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgLy8gZmlsdGVyIG91dCBudWxsIHJlc3VsdHMgYW5kIHJlZ2lzdGVyTG9jYWxlRGF0YSBpbmNsdWRpbmcgZXh0cmFcbiAgICAgICAgLy8gICAgICAgICBsb2NhbGVEYXRhLmZpbHRlcigoeyBkYXRhIH0pID0+IGRhdGEpXG4gICAgICAgIC8vICAgICAgICAgICAgIC5mb3JFYWNoKCh7IGRhdGEsIGxvY2FsZUlkLCBleHRyYURhdGEgfSkgPT4gcmVnaXN0ZXJMb2NhbGVEYXRhKGRhdGEsIGxvY2FsZUlkLCBleHRyYURhdGEpKTtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgLy8gICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLmxvZykge1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgTG9jYWxlIGxvYWQgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCBlcnJvcik7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgIHJldHVybiBvZih7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogZXJyb3IgfSk7XG4gICAgICAgIC8vICAgICB9KVxuICAgICAgICAvLyApO1xuICAgICAgICByZXR1cm4gb2YoeyBzdWNjZXNzOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGxpc3RlbiBmb3IgbGFuZ3VhZ2UgY2hhbmdlcyBhbmQgZHluYW1pY2FsbHkgc2V0IGxvY2FsZSBhY2NvcmRpbmdseS4gSW4gY2FzZSBvZiBub24gcmVnaXN0ZXJlZCBsb2NhbGUgcmVnaXN0ZXIgaXRcbiAgICAgKiBkeW5hbWljYWxseS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGJpbmRUcmFuc2xhdGVTZXJ2aWNlTGFuZ0NoYW5nZVRvU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmkxOG4pIHtcbiAgICAgICAgICAgIHRoaXMuaTE4bi5vblN0YXRlQ2hhbmdlXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN1Yk5vdGlmaWVyKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlsdGVyIG91dCBudWxsIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZT8uYWN0aXZlTGFuZyAhPT0gbnVsbCAmJiBzdGF0ZT8uYWN0aXZlTGFuZyAhPT0gdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gQkVXQVJFOiBmaWx0ZXIgaXMgYmFzZWQgb24gY29udmVudGlvbiB0aGF0IGxvY2FsZSBpZCBzbGljZWQoMikgd2lsbCBtYXRjaCBhY3RpdmVMYW5nIGUuZy4gZW4tVVMgPT4gZW5cbiAgICAgICAgICAgICAgICAgICAgLy8gQWxzbywgaWYgYWN0aXZlTGFuZyBpcyAnZW4nIGFuZCBsb2NhbGUgaXMgJ2VuLUdCJyBpdCB3aWxsIG5vdCB0cmlnZ2VyIGxvY2FsZSBjaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChzdGF0ZSkgPT4gc3RhdGUuYWN0aXZlTGFuZy50b0xvd2VyQ2FzZSgpICE9PSB0aGlzLnN0YXRlSW5zdGFuY2U/LmlkLnNsaWNlKDAsIDIpLnRvTG93ZXJDYXNlKCkpLFxuICAgICAgICAgICAgICAgICAgICAvLyB0byBjaGVjayBpZiByZWdpc3RyYXRpb24gb2YgbG9jYWxlIG90aGVyd2lzZSByZWdpc3RlciBpdFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgb2YodmFsdWUpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0TG9jYWxlSWQgbWF5IHRocm93IEVycm9yKGBNaXNzaW5nIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlIFwiJHtsb2NhbGV9XCIuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChpMThzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBhY3RpdmVMYW5nIGlzIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaTE4c3RhdGUuYWN0aXZlTGFuZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ0hhcyBpMThuU2VydmljZSBpbml0aWFsaXplZD8gSWYgbm90IG1ha2Ugc3VyZSBpMThuU2VydmljZS5pbml0KCkuc3Vic2NyaWJlKC4uKScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmxvY2FsZU1hcHBlcihpMThzdGF0ZS5hY3RpdmVMYW5nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZExvY2FsZSh2YWx1ZT8uYWN0aXZlTGFuZykucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoczogRXVpU2VydmljZVN0YXR1cykgPT4gcy5zdWNjZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLmxvY2FsZU1hcHBlcih2YWx1ZT8uYWN0aXZlTGFuZykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU29tZXRoaW5nIHdlbnQgdGVycmlibHkgcmVhbGx5IHdyb25nIGR1cmluZyBsb2NhbGUgbG9hZGluZycsIGUuZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgXCJhdmFpbGFibGVcIiBhcnJheSBhdHRyaWJ1dGUgd2l0aCBuZXdseSByZWdpc3RlcmVkXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoaWQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFN0YXRlKCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoc3RhdGU6IExvY2FsZVN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZSA9IHN0YXRlPy5hdmFpbGFibGUgPyBzdGF0ZS5hdmFpbGFibGUgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGlkLCBhdmFpbGFibGU6IEFycmF5LmZyb20obmV3IFNldChbLi4uYXZhaWxhYmxlLCBpZF0pKSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdGU6IExvY2FsZVN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoc3RhdGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0cmlldmUgbG9jYWxlcyBmcm9tIGJyb3dzZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRCcm93c2VyTG9jYWxlcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJMb2NhbGVzID0gbmF2aWdhdG9yLmxhbmd1YWdlcyA9PT0gdW5kZWZpbmVkID8gW25hdmlnYXRvci5sYW5ndWFnZV0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2VzO1xuXG4gICAgICAgIGlmICghYnJvd3NlckxvY2FsZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnJvd3NlckxvY2FsZXMubWFwKChsb2NhbGUpID0+IGxvY2FsZS50cmltKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGlmIGxvY2FsZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZmlsdGVyZWQgb3V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGxvY2FsZXMgQSBzdHJpbmcgYXJyYXkgY29udGFpbnMgYWxsIGxvY2FsZSBpZCBlLmcuIFtcImVsXCIsIFwiZWwtQ1lcIl1cbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbHRlclJlZ2lzdGVyZWRMb2NhbGVzKGxvY2FsZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gbG9jYWxlcy5maWx0ZXIoKGxvYzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGdldExvY2FsZUlkKGxvYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIGFuIE9ic2VydmFibGUgd2hpY2ggbG9hZHMgdGhlIGxvY2FsZSBiYXNlZCBvbiBwcm92aWRlZCBJRFxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIHRoZSBsb2NhbGUgaWQgZS5nLiBlbiwgZWwtQ1lcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIHByaXZhdGUgaW1wb3J0TG9jYWxlKGlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vICAgICAvLyBpbiBjYXNlIG9mIGFuIGVycm9yLCBjYXRjaCBpdCBhbmQgcmV0dXJuIG51bGxcbiAgICAvLyAgICAgcmV0dXJuIGltcG9ydChcbiAgICAvLyAgICAgICAgIC8qIHdlYnBhY2tFeGNsdWRlOiAvXFwuZFxcLnRzJC8gKi9cbiAgICAvLyAgICAgICAgIC8qIHdlYnBhY2tNb2RlOiBcImxhenktb25jZVwiICovXG4gICAgLy8gICAgICAgICAvKiB3ZWJwYWNrQ2h1bmtOYW1lOiBcImkxOG4tYmFzZVwiICovXG4gICAgLy8gICAgICAgICBgQC8uLi9ub2RlX21vZHVsZXMvQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvJHtpZH1gKVxuICAgIC8vICAgICAgICAgLnRoZW4obSA9PiBtLmRlZmF1bHQpXG4gICAgLy8gICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLmxvZykge1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgTG9jYWxlIHdpdGggSUQ6IFwiJHtpZH1cIiBmYWlsZWQgdG8gbG9hZC4gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCBlcnJvcik7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICAgICAgfSk7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyBhIFByb21pc2Ugd2hpY2ggbG9hZHMgdGhlIGxvY2FsZSBiYXNlZCBvbiBwcm92aWRlZCBJRFxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIHRoZSBsb2NhbGUgaWQgZS5nLiBlbiwgZWwtQ1lcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIHByaXZhdGUgaW1wb3J0RXh0cmFMb2NhbGUoaWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gICAgIC8vIGluIGNhc2Ugb2YgYW4gZXJyb3IsIGNhdGNoIGl0IGFuZCByZXR1cm4gbnVsbFxuICAgIC8vICAgICByZXR1cm4gaW1wb3J0KFxuICAgIC8vICAgICAgICAgLyogd2VicGFja0V4Y2x1ZGU6IC9cXC5kXFwudHMkLyAqL1xuICAgIC8vICAgICAgICAgLyogd2VicGFja01vZGU6IFwibGF6eS1vbmNlXCIgKi9cbiAgICAvLyAgICAgICAgIC8qIHdlYnBhY2tDaHVua05hbWU6IFwiaTE4bi1leHRyYVwiICovXG4gICAgLy8gICAgICAgICBgQC8uLi9ub2RlX21vZHVsZXMvQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvZXh0cmEvJHtpZH1gKVxuICAgIC8vICAgICAgICAgLnRoZW4obSA9PiBtLmRlZmF1bHQpXG4gICAgLy8gICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLmxvZykge1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgRXh0cmEgTG9jYWxlIHdpdGggSUQ6IFwiJHtpZH1cIiBmYWlsZWQgdG8gbG9hZC4gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCBlcnJvcik7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vICAgICAgICAgfSk7XG4gICAgLy8gfVxuXG4gICAgLyoqXG4gICAgICogSW1wb3J0cyBMb2NhbGUgYW5kIHRoZW4gRXh0cmEuIEl0IHJldHVybnMgdGhlIE9iamVjdCB3aGljaCByZWdpc3RlckxvY2FsZSguLi4pIGZ1bmN0aW9uIG5lZWRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxvY2FsZUlkIFRoZSBpZCBvZiB0aGUgbG9jYWxlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICAvLyBwcml2YXRlIGltcG9ydERhdGFBbmRFeHRyYUxvY2FsZShsb2NhbGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx7IGRhdGE6IGFueSwgbG9jYWxlSWQ6IHN0cmluZywgZXh0cmFEYXRhOiBhbnkgfT4ge1xuICAgIC8vICAgICByZXR1cm4gZnJvbSh0aGlzLmltcG9ydExvY2FsZShsb2NhbGVJZCkpLnBpcGUoXG4gICAgLy8gICAgICAgICBtZXJnZU1hcCgoZGF0YSkgPT4gZnJvbSh0aGlzLmltcG9ydEV4dHJhTG9jYWxlKGxvY2FsZUlkKSkucGlwZShtYXAoKGV4dHJhRGF0YSkgPT5cbiAgICAvLyAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgeyBkYXRhLCBsb2NhbGVJZCwgZXh0cmFEYXRhIH0pKSksXG4gICAgLy8gICAgICAgICAgICAgMVxuICAgIC8vICAgICAgICAgKSk7XG4gICAgLy8gfVxufVxuIl19