@eui/core 16.0.0-next.1 → 16.0.0-next.10

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 (103) hide show
  1. package/README.md +0 -1
  2. package/docs/dependencies.html +60 -72
  3. package/docs/js/search/search_index.js +2 -2
  4. package/docs/properties.html +1 -1
  5. package/{esm2020 → esm2022}/lib/eui-core.module.mjs +5 -5
  6. package/{esm2020 → esm2022}/lib/interceptors/add-lang-param.interceptor.mjs +4 -4
  7. package/{esm2020 → esm2022}/lib/interceptors/cache-prevention.interceptor.mjs +4 -4
  8. package/{esm2020 → esm2022}/lib/interceptors/cors-security.interceptor.mjs +4 -4
  9. package/{esm2020 → esm2022}/lib/interceptors/csrf-prevention.interceptor.mjs +4 -4
  10. package/{esm2020 → esm2022}/lib/interceptors/eu-login-session-timeout-handling.interceptor.mjs +4 -4
  11. package/{esm2020 → esm2022}/lib/interceptors/openid/openid-connect.interceptor.mjs +4 -4
  12. package/{esm2020 → esm2022}/lib/interceptors/openid/openid-connect.service.mjs +4 -4
  13. package/{esm2020 → esm2022}/lib/interceptors/ux-request-error-model.interceptor.mjs +4 -4
  14. package/{esm2020 → esm2022}/lib/services/errors/global-error-handler.mjs +4 -4
  15. package/{esm2020 → esm2022}/lib/services/errors/http-error-handler.interceptor.mjs +4 -4
  16. package/{esm2020 → esm2022}/lib/services/i18n/i18n.loader.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/services/i18n/i18n.service.mjs +4 -4
  18. package/{esm2020 → esm2022}/lib/services/i18n/i18n.service.mock.mjs +4 -4
  19. package/esm2022/lib/services/locale/locale.service.mjs +231 -0
  20. package/{esm2020 → esm2022}/lib/services/locale/locale.service.mock.mjs +4 -4
  21. package/{esm2020 → esm2022}/lib/services/log/log.module.mjs +5 -5
  22. package/{esm2020 → esm2022}/lib/services/log/log.service.mjs +4 -4
  23. package/{esm2020 → esm2022}/lib/services/permission/permission.service.mjs +4 -4
  24. package/{esm2020 → esm2022}/lib/services/queue/api-queue.service.mjs +4 -4
  25. package/esm2022/lib/services/storage/local-forage.service.mjs +93 -0
  26. package/esm2022/lib/services/storage/local-storage.service.mjs +75 -0
  27. package/esm2022/lib/services/storage/session-storage.service.mjs +75 -0
  28. package/{esm2020 → esm2022}/lib/services/store/effects/app.effects.mjs +4 -4
  29. package/{esm2020 → esm2022}/lib/services/store/store.service.mjs +4 -4
  30. package/{esm2020 → esm2022}/lib/services/store/store.service.mock.mjs +4 -4
  31. package/{esm2020 → esm2022}/lib/services/user/user.service.mjs +4 -4
  32. package/{esm2020 → esm2022}/lib/services/user/user.service.mock.mjs +4 -4
  33. package/{esm2020 → esm2022}/lib/services/ux-app-shell.service.mjs +4 -4
  34. package/{esm2020 → esm2022}/lib/services/ux-dynamic-component/ux-dynamic-component.service.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/services/ux-dynamic-menu/ux-dynamic-menu.service.mjs +4 -4
  36. package/{esm2020 → esm2022}/lib/services/ux-error-feedback/ux-error-feedback.service.mjs +4 -4
  37. package/esm2022/lib/services/ux-timezone.service.mjs +717 -0
  38. package/{fesm2020 → fesm2022}/eui-core.mjs +106 -105
  39. package/fesm2022/eui-core.mjs.map +1 -0
  40. package/lib/services/ux-timezone.service.d.ts.map +1 -1
  41. package/package.json +5 -11
  42. package/esm2020/lib/services/locale/locale.service.mjs +0 -231
  43. package/esm2020/lib/services/storage/local-forage.service.mjs +0 -93
  44. package/esm2020/lib/services/storage/local-storage.service.mjs +0 -75
  45. package/esm2020/lib/services/storage/session-storage.service.mjs +0 -75
  46. package/esm2020/lib/services/ux-timezone.service.mjs +0 -716
  47. package/fesm2015/eui-core.mjs +0 -4624
  48. package/fesm2015/eui-core.mjs.map +0 -1
  49. package/fesm2020/eui-core.mjs.map +0 -1
  50. /package/{esm2020 → esm2022}/eui-core.mjs +0 -0
  51. /package/{esm2020 → esm2022}/index.mjs +0 -0
  52. /package/{esm2020 → esm2022}/lib/helpers/date-helpers.mjs +0 -0
  53. /package/{esm2020 → esm2022}/lib/helpers/dom-helpers.mjs +0 -0
  54. /package/{esm2020 → esm2022}/lib/helpers/event-helpers.mjs +0 -0
  55. /package/{esm2020 → esm2022}/lib/helpers/form-helpers.mjs +0 -0
  56. /package/{esm2020 → esm2022}/lib/helpers/format-helpers.mjs +0 -0
  57. /package/{esm2020 → esm2022}/lib/helpers/http-helpers.mjs +0 -0
  58. /package/{esm2020 → esm2022}/lib/helpers/index.mjs +0 -0
  59. /package/{esm2020 → esm2022}/lib/helpers/utils.mjs +0 -0
  60. /package/{esm2020 → esm2022}/lib/interceptors/index.mjs +0 -0
  61. /package/{esm2020 → esm2022}/lib/interceptors/openid/index.mjs +0 -0
  62. /package/{esm2020 → esm2022}/lib/interceptors/openid/openid-connect.service.mock.mjs +0 -0
  63. /package/{esm2020 → esm2022}/lib/services/app/eui-init-app.mjs +0 -0
  64. /package/{esm2020 → esm2022}/lib/services/app/eui-pre-init-app.mjs +0 -0
  65. /package/{esm2020 → esm2022}/lib/services/app/eui-startup.mjs +0 -0
  66. /package/{esm2020 → esm2022}/lib/services/app/factories/log.mjs +0 -0
  67. /package/{esm2020 → esm2022}/lib/services/app/index.mjs +0 -0
  68. /package/{esm2020 → esm2022}/lib/services/config/defaults.mjs +0 -0
  69. /package/{esm2020 → esm2022}/lib/services/config/tokens.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/services/errors/eui.error.mjs +0 -0
  71. /package/{esm2020 → esm2022}/lib/services/errors/http-error-handler-callback-functions.mjs +0 -0
  72. /package/{esm2020 → esm2022}/lib/services/errors/index.mjs +0 -0
  73. /package/{esm2020 → esm2022}/lib/services/i18n/i18n.resource.mjs +0 -0
  74. /package/{esm2020 → esm2022}/lib/services/i18n/index.mjs +0 -0
  75. /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
  76. /package/{esm2020 → esm2022}/lib/services/locale/index.mjs +0 -0
  77. /package/{esm2020 → esm2022}/lib/services/log/index.mjs +0 -0
  78. /package/{esm2020 → esm2022}/lib/services/log/log.service.mock.mjs +0 -0
  79. /package/{esm2020 → esm2022}/lib/services/queue/api-queue.service.mock.mjs +0 -0
  80. /package/{esm2020 → esm2022}/lib/services/queue/index.mjs +0 -0
  81. /package/{esm2020 → esm2022}/lib/services/storage/async-storage.service.mjs +0 -0
  82. /package/{esm2020 → esm2022}/lib/services/storage/async-storage.service.mock.mjs +0 -0
  83. /package/{esm2020 → esm2022}/lib/services/storage/index.mjs +0 -0
  84. /package/{esm2020 → esm2022}/lib/services/storage/storage.service.mjs +0 -0
  85. /package/{esm2020 → esm2022}/lib/services/storage/storage.service.mock.mjs +0 -0
  86. /package/{esm2020 → esm2022}/lib/services/store/actions/app.actions.mjs +0 -0
  87. /package/{esm2020 → esm2022}/lib/services/store/actions/i18n.actions.mjs +0 -0
  88. /package/{esm2020 → esm2022}/lib/services/store/actions/index.mjs +0 -0
  89. /package/{esm2020 → esm2022}/lib/services/store/actions/locale.actions.mjs +0 -0
  90. /package/{esm2020 → esm2022}/lib/services/store/actions/notifications.actions.mjs +0 -0
  91. /package/{esm2020 → esm2022}/lib/services/store/actions/user.actions.mjs +0 -0
  92. /package/{esm2020 → esm2022}/lib/services/store/effects/index.mjs +0 -0
  93. /package/{esm2020 → esm2022}/lib/services/store/index.mjs +0 -0
  94. /package/{esm2020 → esm2022}/lib/services/store/reducers/app.reducers.mjs +0 -0
  95. /package/{esm2020 → esm2022}/lib/services/store/reducers/core.reducers.mjs +0 -0
  96. /package/{esm2020 → esm2022}/lib/services/store/reducers/i18n.reducers.mjs +0 -0
  97. /package/{esm2020 → esm2022}/lib/services/store/reducers/index.mjs +0 -0
  98. /package/{esm2020 → esm2022}/lib/services/store/reducers/locale.reducers.mjs +0 -0
  99. /package/{esm2020 → esm2022}/lib/services/store/reducers/meta.reducers.mjs +0 -0
  100. /package/{esm2020 → esm2022}/lib/services/store/reducers/notifications.reducers.mjs +0 -0
  101. /package/{esm2020 → esm2022}/lib/services/store/reducers/user.reducers.mjs +0 -0
  102. /package/{esm2020 → esm2022}/lib/services/user/index.mjs +0 -0
  103. /package/{esm2020 → esm2022}/lib/services/ux-error-feedback/ux-error-handler.operator.mjs +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ux-timezone.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/ux-timezone.service.ts"],"names":[],"mappings":";AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwPxB,CAAC;AAEF,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,YAAY,EAAE,QAAQ,EAiblC,CAAC;AAGF,qBACa,iBAAiB;IAC1B;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIhC;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAQxB,YAAY,IAAI,QAAQ,EAAE;IAI1B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;yCAvBxB,iBAAiB;6CAAjB,iBAAiB;CA0B7B"}
1
+ {"version":3,"file":"ux-timezone.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/ux-timezone.service.ts"],"names":[],"mappings":";AAIA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwPxB,CAAC;AAEF,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,YAAY,EAAE,QAAQ,EAiblC,CAAC;AAGF,qBACa,iBAAiB;IAC1B;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIhC;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAQxB,YAAY,IAAI,QAAQ,EAAE;IAI1B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;yCAvBxB,iBAAiB;6CAAjB,iBAAiB;CA0B7B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eui/core",
3
- "version": "16.0.0-next.1",
3
+ "version": "16.0.0-next.10",
4
4
  "tag": "next",
5
5
  "description": "eUI core package - holding UI components for Desktop applications",
6
6
  "homepage": "https://eui.ecdevops.eu",
@@ -15,11 +15,7 @@
15
15
  "npm": "Please use yarn instead of NPM to install dependencies"
16
16
  },
17
17
  "license": "EUPL-1.1",
18
- "module": "fesm2015/eui-core.mjs",
19
- "es2020": "fesm2020/eui-core.mjs",
20
- "esm2020": "esm2020/eui-core.mjs",
21
- "fesm2020": "fesm2020/eui-core.mjs",
22
- "fesm2015": "fesm2015/eui-core.mjs",
18
+ "module": "fesm2022/eui-core.mjs",
23
19
  "typings": "index.d.ts",
24
20
  "exports": {
25
21
  "./package.json": {
@@ -27,11 +23,9 @@
27
23
  },
28
24
  ".": {
29
25
  "types": "./index.d.ts",
30
- "esm2020": "./esm2020/eui-core.mjs",
31
- "es2020": "./fesm2020/eui-core.mjs",
32
- "es2015": "./fesm2015/eui-core.mjs",
33
- "node": "./fesm2015/eui-core.mjs",
34
- "default": "./fesm2020/eui-core.mjs"
26
+ "esm2022": "./esm2022/eui-core.mjs",
27
+ "esm": "./esm2022/eui-core.mjs",
28
+ "default": "./fesm2022/eui-core.mjs"
35
29
  }
36
30
  },
37
31
  "sideEffects": false,
@@ -1,231 +0,0 @@
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
- if (keyOrMapFn) {
51
- switch (typeof keyOrMapFn) {
52
- case 'function':
53
- selector = createSelector(getLocaleState, keyOrMapFn);
54
- break;
55
- case 'string':
56
- selector = createSelector(getLocaleState, (state) => state[keyOrMapFn]);
57
- break;
58
- }
59
- }
60
- return this.store.select(selector).pipe(takeUntil(this.subNotifier),
61
- // in case service didn't init fallback to LOCALE_ID token value
62
- map((state) => (state ? state : this.stateInstance ? this.stateInstance : this.locale_id)));
63
- }
64
- init(state) {
65
- super.initEuiService();
66
- // bind language changes to locale changes
67
- if (this.config?.bindWithTranslate) {
68
- this.bindTranslateServiceLangChangeToState();
69
- }
70
- // dynamically load locale based on provided configuration
71
- const availableLocales = state?.available || this.config?.available || this.getBrowserLocales() || [this.currentLocale];
72
- return this.loadLocale(availableLocales).pipe(takeUntil(this.subNotifier), tap(() => this.updateState({ id: this.currentLocale })));
73
- }
74
- /**
75
- * dynamically load locale and update the state
76
- */
77
- updateState(state) {
78
- try {
79
- const id = this.localeMapper(state.id);
80
- this.store.dispatch(new UpdateLocaleStateAction({ ...state, id }));
81
- // update global TOKEN ID based on configuration
82
- if (this.config.affectGlobalLocale) {
83
- this.locale_id = id;
84
- }
85
- }
86
- catch (e) {
87
- const message = `Locale for '${state.id}' is not available.
88
- Please use addLocale('${state.id}') first`;
89
- if (this.log) {
90
- this.logger.info(message, e);
91
- }
92
- throw new Error(message);
93
- }
94
- }
95
- addLocale(id) {
96
- return this.loadLocale(id);
97
- }
98
- get previousLocale() {
99
- return this.prevStateInstance?.id || this.currentLocale;
100
- }
101
- get currentLocale() {
102
- return this.stateInstance?.id;
103
- }
104
- /**
105
- * load and register locale data dynamically
106
- *
107
- * @param locale array of locale to load
108
- */
109
- loadLocale(locale) {
110
- // locale = Array.isArray(locale) ? locale : [locale];
111
- // const localeImports: Observable<{ data: any, localeId: string, extraData: any }>[]
112
- // = this.filterRegisteredLocales(locale).map(this.importDataAndExtraLocale.bind(this));
113
- //
114
- // // in case localeImports array is empty because locale exists, Observable still needs to complete
115
- // if (localeImports.length < 1) {
116
- // return of({ success: true });
117
- // }
118
- //
119
- // return forkJoin(...localeImports).pipe(
120
- // takeUntil(this.subNotifier),
121
- // map(localeData => {
122
- // // filter out null results and registerLocaleData including extra
123
- // localeData.filter(({ data }) => data)
124
- // .forEach(({ data, localeId, extraData }) => registerLocaleData(data, localeId, extraData));
125
- // return { success: true };
126
- // }),
127
- // catchError(error => {
128
- // if (this.log) {
129
- // this.logger.debug(`Locale load error: ${error.message}`, error);
130
- // }
131
- // return of({ success: false, error: error });
132
- // })
133
- // );
134
- return of({ success: true });
135
- }
136
- /**
137
- * listen for language changes and dynamically set locale accordingly. In case of non registered locale register it
138
- * dynamically.
139
- */
140
- bindTranslateServiceLangChangeToState() {
141
- if (this.i18n) {
142
- this.i18n.onStateChange
143
- .pipe(takeUntil(this.subNotifier),
144
- // filter out null values
145
- filter((state) => state?.activeLang !== null && state?.activeLang !== undefined),
146
- // BEWARE: filter is based on convention that locale id sliced(2) will match activeLang e.g. en-US => en
147
- // Also, if activeLang is 'en' and locale is 'en-GB' it will not trigger locale change
148
- filter((state) => state.activeLang.toLowerCase() !== this.stateInstance?.id.slice(0, 2).toLowerCase()),
149
- // to check if registration of locale otherwise register it
150
- switchMap((value) => of(value).pipe(
151
- // getLocaleId may throw Error(`Missing locale data for the locale "${locale}".`);
152
- switchMap((i18state) => {
153
- // check if activeLang is null or undefined
154
- if (!i18state.activeLang) {
155
- return throwError('Has i18nService initialized? If not make sure i18nService.init().subscribe(..)');
156
- }
157
- return of(this.localeMapper(i18state.activeLang));
158
- }), catchError((error) => {
159
- if (this.log) {
160
- this.logger.debug(error);
161
- }
162
- return this.loadLocale(value?.activeLang).pipe(filter((s) => s.success), map(() => this.localeMapper(value?.activeLang)), catchError((e) => {
163
- if (this.log) {
164
- this.logger.debug('Something went terribly really wrong during locale loading', e.err.message);
165
- }
166
- return of(e);
167
- }));
168
- }))),
169
- // update the "available" array attribute with newly registered
170
- switchMap((id) => this.getState().pipe(take(1), map((state) => {
171
- const available = state?.available ? state.available : [];
172
- return { ...state, id, available: Array.from(new Set([...available, id])) };
173
- }))))
174
- .subscribe((state) => {
175
- this.updateState(state);
176
- });
177
- }
178
- }
179
- /**
180
- * retrieve locales from browser
181
- *
182
- * @param options
183
- */
184
- getBrowserLocales() {
185
- const browserLocales = navigator.languages === undefined ? [navigator.language] : navigator.languages;
186
- if (!browserLocales) {
187
- return undefined;
188
- }
189
- return browserLocales.map((locale) => locale.trim());
190
- }
191
- /**
192
- * if locale is already registered filtered out.
193
- *
194
- * @param locales A string array contains all locale id e.g. ["el", "el-CY"]
195
- */
196
- filterRegisteredLocales(locales) {
197
- return locales.filter((loc) => {
198
- try {
199
- getLocaleId(loc);
200
- return false;
201
- }
202
- catch (e) {
203
- return true;
204
- }
205
- });
206
- }
207
- }
208
- /** @nocollapse */ LocaleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.2", 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 });
209
- /** @nocollapse */ LocaleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: LocaleService, providedIn: 'root' });
210
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: LocaleService, decorators: [{
211
- type: Injectable,
212
- args: [{
213
- providedIn: 'root',
214
- }]
215
- }], ctorParameters: function () { return [{ type: i1.StoreService }, { type: undefined, decorators: [{
216
- type: Inject,
217
- args: [GLOBAL_CONFIG_TOKEN]
218
- }] }, { type: undefined, decorators: [{
219
- type: Inject,
220
- args: [LOCALE_ID]
221
- }] }, { type: undefined, decorators: [{
222
- type: Optional
223
- }, {
224
- type: Inject,
225
- args: [LOCALE_ID_MAPPER]
226
- }] }, { type: i2.I18nService, decorators: [{
227
- type: Optional
228
- }] }, { type: i3.LogService, decorators: [{
229
- type: Optional
230
- }] }]; } });
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2xvY2FsZS9sb2NhbGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFDSCxVQUFVLEVBRVYsY0FBYyxFQUNkLDhCQUE4QixHQUtqQyxNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBZ0IsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFHN0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWUsZ0JBQWdCLENBQUMsQ0FBQztBQUtuRixNQUFNLE9BQU8sYUFBbUQsU0FBUSxVQUEyQjtJQUsvRixZQUNjLEtBQW1CLEVBQ1UsZ0JBQThCLEVBQ3hDLFNBQWlCLEVBQ0EsWUFBMEIsRUFDcEQsSUFBaUIsRUFDakIsR0FBZTtRQUVuQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQVA1QixV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SSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ25DLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFuZ3VsYXIgaXMgdXNpbmcgYSBndWxwIHRhc2sgdG8gZ2VuZXJhdGUgdGhlIGxvY2FsZXMgdGhhdCB3ZSBkeW5hbWljYWxseSBpbXBvcnQuIFRoaXMgdGFzayBjYW4gYmUgZm91bmQgaGVyZVxuICogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iL21hc3Rlci90b29scy9ndWxwLXRhc2tzL2NsZHIvY2xkci1kYXRhLmpzXG4gKiBUaGF0IHRhc2sgaXMgdXRpbGl6aW5nIHRoZSBDTERSIGxpYnJhcnkgdG8gbG9hZCBhbmQgY29uc3RydWN0IHRoZSBsb2NhbGUgZm9yIGVhY2ggcmVnaW9uLiBUaGlzIHNlcnZpY2UgaXMgcmVzcG9uc2libGVcbiAqIHRvIGxvYWQgdGhvc2UgbG9jYWxlIGR5bmFtaWNhbGx5IHVwb24gcmVxdWVzdCBhbmQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgZVVJIGFwcC5cbiAqXG4gKiBQYXJ0cyB0aGF0IGFyZSBoYW5kbGVzIHRocm91Z2ggY29uZmlndXJhdGlvbjpcbiAqICAtIHVwZGF0ZSBvZiB0aGUgTE9DQUxFX0lEIHRva2VuXG4gKiAgLSBpbml0aWFsIGR5bmFtaWNhbCBsb2FkIG9mIGxvY2FsZXNcbiAqICAtIGJpbmQgdG8gdHJhbnNsYXRpb24gc2VydmljZSBmb3IgbG9jYWxlIGNoYW5nZXNcbiAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBMT0NBTEVfSUQsIE9uRGVzdHJveSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldExvY2FsZUlkIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgRXVpU2VydmljZSxcbiAgICBFdWlTZXJ2aWNlU3RhdHVzLFxuICAgIGdldExvY2FsZVN0YXRlLFxuICAgIGdldExvY2FsZVNlcnZpY2VDb25maWdGcm9tQmFzZSxcbiAgICBHbG9iYWxDb25maWcsXG4gICAgTG9jYWxlU2VydmljZUNvbmZpZyxcbiAgICBMb2NhbGVTdGF0ZSxcbiAgICBMb2dnZXIsXG59IGZyb20gJ0BldWkvYmFzZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdG9yZVNlcnZpY2UsIFVwZGF0ZUxvY2FsZVN0YXRlQWN0aW9uIH0gZnJvbSAnLi4vc3RvcmUnO1xuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4uL2xvZyc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgR0xPQkFMX0NPTkZJR19UT0tFTiB9IGZyb20gJy4uL2NvbmZpZy90b2tlbnMnO1xuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbmV4cG9ydCB0eXBlIExvY2FsZU1hcHBlciA9IChsb2NhbGU6IHN0cmluZykgPT4gYW55O1xuZXhwb3J0IGNvbnN0IExPQ0FMRV9JRF9NQVBQRVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48TG9jYWxlTWFwcGVyPignbG9jYWxlSWRNYXBwZXInKTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxlU2VydmljZTxUIGV4dGVuZHMgTG9jYWxlU3RhdGUgPSBMb2NhbGVTdGF0ZT4gZXh0ZW5kcyBFdWlTZXJ2aWNlPFQgfCBMb2NhbGVTdGF0ZT4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXI7XG4gICAgcHJpdmF0ZSBzdWJOb3RpZmllcjogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcm90ZWN0ZWQgY29uZmlnOiBMb2NhbGVTZXJ2aWNlQ29uZmlnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBzdG9yZTogU3RvcmVTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEdMT0JBTF9DT05GSUdfVE9LRU4pIHByb3RlY3RlZCBiYXNlR2xvYmFsQ29uZmlnOiBHbG9iYWxDb25maWcsXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcm90ZWN0ZWQgbG9jYWxlX2lkOiBzdHJpbmcsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTE9DQUxFX0lEX01BUFBFUikgcHJpdmF0ZSBsb2NhbGVNYXBwZXI6IExvY2FsZU1hcHBlcixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBpMThuOiBJMThuU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBsb2c6IExvZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoeyBpZDogZ2V0TG9jYWxlSWQobG9jYWxlX2lkKSB9KTtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2cuZ2V0TG9nZ2VyKCdjb3JlLkxvY2FsZVNlcnZpY2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29uZmlnID0gZ2V0TG9jYWxlU2VydmljZUNvbmZpZ0Zyb21CYXNlKHRoaXMuYmFzZUdsb2JhbENvbmZpZyk7XG4gICAgICAgIC8vIGluIGNhc2Ugbm8gbG9jYWxlTWFwcGVyIHByb3ZpZGVkLCBzZXQgdGhlIGFuZ3VsYXIgZ2V0TG9jYWxlSWQgYXMgZGVmYXVsdFxuICAgICAgICBpZiAoIXRoaXMubG9jYWxlTWFwcGVyKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsZU1hcHBlciA9IGdldExvY2FsZUlkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3ViTm90aWZpZXIubmV4dCh2b2lkIDApO1xuICAgICAgICB0aGlzLnN1Yk5vdGlmaWVyLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgZ2V0U3RhdGU8SyA9IFQ+KG1hcEZuPzogKHN0YXRlOiBUKSA9PiBLKTogT2JzZXJ2YWJsZTxLPjtcbiAgICBnZXRTdGF0ZTxhIGV4dGVuZHMga2V5b2YgVD4oa2V5PzogYSk6IE9ic2VydmFibGU8VFthXT47XG4gICAgZ2V0U3RhdGU8Sz4oa2V5T3JNYXBGbj86ICgoc3RhdGU6IFQpID0+IEspIHwgc3RyaW5nKTogT2JzZXJ2YWJsZTxLPiB7XG4gICAgICAgIGxldCBzZWxlY3RvcjogYW55ID0gZ2V0TG9jYWxlU3RhdGU7XG5cbiAgICAgICAgaWYgKGtleU9yTWFwRm4pIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGtleU9yTWFwRm4pIHtcbiAgICAgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoZ2V0TG9jYWxlU3RhdGUsIGtleU9yTWFwRm4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKGdldExvY2FsZVN0YXRlLCAoc3RhdGUpID0+IHN0YXRlW2tleU9yTWFwRm5dKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KHNlbGVjdG9yKS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3ViTm90aWZpZXIpLFxuICAgICAgICAgICAgLy8gaW4gY2FzZSBzZXJ2aWNlIGRpZG4ndCBpbml0IGZhbGxiYWNrIHRvIExPQ0FMRV9JRCB0b2tlbiB2YWx1ZVxuICAgICAgICAgICAgbWFwKChzdGF0ZSkgPT4gKHN0YXRlID8gc3RhdGUgOiB0aGlzLnN0YXRlSW5zdGFuY2UgPyB0aGlzLnN0YXRlSW5zdGFuY2UgOiB0aGlzLmxvY2FsZV9pZCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaW5pdChzdGF0ZT86IExvY2FsZVN0YXRlIHwgdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxFdWlTZXJ2aWNlU3RhdHVzPiB7XG4gICAgICAgIHN1cGVyLmluaXRFdWlTZXJ2aWNlKCk7XG5cbiAgICAgICAgLy8gYmluZCBsYW5ndWFnZSBjaGFuZ2VzIHRvIGxvY2FsZSBjaGFuZ2VzXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZz8uYmluZFdpdGhUcmFuc2xhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZFRyYW5zbGF0ZVNlcnZpY2VMYW5nQ2hhbmdlVG9TdGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZHluYW1pY2FsbHkgbG9hZCBsb2NhbGUgYmFzZWQgb24gcHJvdmlkZWQgY29uZmlndXJhdGlvblxuICAgICAgICBjb25zdCBhdmFpbGFibGVMb2NhbGVzID0gc3RhdGU/LmF2YWlsYWJsZSB8fCB0aGlzLmNvbmZpZz8uYXZhaWxhYmxlIHx8IHRoaXMuZ2V0QnJvd3NlckxvY2FsZXMoKSB8fCBbdGhpcy5jdXJyZW50TG9jYWxlXTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZExvY2FsZShhdmFpbGFibGVMb2NhbGVzKS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3ViTm90aWZpZXIpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMudXBkYXRlU3RhdGUoeyBpZDogdGhpcy5jdXJyZW50TG9jYWxlIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGR5bmFtaWNhbGx5IGxvYWQgbG9jYWxlIGFuZCB1cGRhdGUgdGhlIHN0YXRlXG4gICAgICovXG4gICAgdXBkYXRlU3RhdGUoc3RhdGU6IExvY2FsZVN0YXRlKTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMubG9jYWxlTWFwcGVyKHN0YXRlLmlkKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFVwZGF0ZUxvY2FsZVN0YXRlQWN0aW9uKHsgLi4uc3RhdGUsIGlkIH0pKTtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBnbG9iYWwgVE9LRU4gSUQgYmFzZWQgb24gY29uZmlndXJhdGlvblxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmFmZmVjdEdsb2JhbExvY2FsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxlX2lkID0gaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTG9jYWxlIGZvciAnJHtzdGF0ZS5pZH0nIGlzIG5vdCBhdmFpbGFibGUuXG4gICAgICAgICAgICAgICAgIFBsZWFzZSB1c2UgYWRkTG9jYWxlKCcke3N0YXRlLmlkfScpIGZpcnN0YDtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvZykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8obWVzc2FnZSwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRMb2NhbGUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RXVpU2VydmljZVN0YXR1cz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkTG9jYWxlKGlkKTtcbiAgICB9XG5cbiAgICBnZXQgcHJldmlvdXNMb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldlN0YXRlSW5zdGFuY2U/LmlkIHx8IHRoaXMuY3VycmVudExvY2FsZTtcbiAgICB9XG5cbiAgICBnZXQgY3VycmVudExvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZUluc3RhbmNlPy5pZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBsb2FkIGFuZCByZWdpc3RlciBsb2NhbGUgZGF0YSBkeW5hbWljYWxseVxuICAgICAqXG4gICAgICogQHBhcmFtIGxvY2FsZSBhcnJheSBvZiBsb2NhbGUgdG8gbG9hZFxuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZExvY2FsZShsb2NhbGU6IHN0cmluZ1tdIHwgc3RyaW5nKTogT2JzZXJ2YWJsZTxFdWlTZXJ2aWNlU3RhdHVzPiB7XG4gICAgICAgIC8vIGxvY2FsZSA9IEFycmF5LmlzQXJyYXkobG9jYWxlKSA/IGxvY2FsZSA6IFtsb2NhbGVdO1xuICAgICAgICAvLyBjb25zdCBsb2NhbGVJbXBvcnRzOiBPYnNlcnZhYmxlPHsgZGF0YTogYW55LCBsb2NhbGVJZDogc3RyaW5nLCBleHRyYURhdGE6IGFueSB9PltdXG4gICAgICAgIC8vICAgICA9IHRoaXMuZmlsdGVyUmVnaXN0ZXJlZExvY2FsZXMobG9jYWxlKS5tYXAodGhpcy5pbXBvcnREYXRhQW5kRXh0cmFMb2NhbGUuYmluZCh0aGlzKSk7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIC8vIGluIGNhc2UgbG9jYWxlSW1wb3J0cyBhcnJheSBpcyBlbXB0eSBiZWNhdXNlIGxvY2FsZSBleGlzdHMsIE9ic2VydmFibGUgc3RpbGwgbmVlZHMgdG8gY29tcGxldGVcbiAgICAgICAgLy8gaWYgKGxvY2FsZUltcG9ydHMubGVuZ3RoIDwgMSkge1xuICAgICAgICAvLyAgICAgcmV0dXJuIG9mKHsgc3VjY2VzczogdHJ1ZSB9KTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvL1xuICAgICAgICAvLyByZXR1cm4gZm9ya0pvaW4oLi4ubG9jYWxlSW1wb3J0cykucGlwZShcbiAgICAgICAgLy8gICAgIHRha2VVbnRpbCh0aGlzLnN1Yk5vdGlmaWVyKSxcbiAgICAgICAgLy8gICAgIG1hcChsb2NhbGVEYXRhID0+IHtcbiAgICAgICAgLy8gICAgICAgICAvLyBmaWx0ZXIgb3V0IG51bGwgcmVzdWx0cyBhbmQgcmVnaXN0ZXJMb2NhbGVEYXRhIGluY2x1ZGluZyBleHRyYVxuICAgICAgICAvLyAgICAgICAgIGxvY2FsZURhdGEuZmlsdGVyKCh7IGRhdGEgfSkgPT4gZGF0YSlcbiAgICAgICAgLy8gICAgICAgICAgICAgLmZvckVhY2goKHsgZGF0YSwgbG9jYWxlSWQsIGV4dHJhRGF0YSB9KSA9PiByZWdpc3RlckxvY2FsZURhdGEoZGF0YSwgbG9jYWxlSWQsIGV4dHJhRGF0YSkpO1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAvLyAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMubG9nKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBMb2NhbGUgbG9hZCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsIGVycm9yKTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIG9mKHsgc3VjY2VzczogZmFsc2UsIGVycm9yOiBlcnJvciB9KTtcbiAgICAgICAgLy8gICAgIH0pXG4gICAgICAgIC8vICk7XG4gICAgICAgIHJldHVybiBvZih7IHN1Y2Nlc3M6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbGlzdGVuIGZvciBsYW5ndWFnZSBjaGFuZ2VzIGFuZCBkeW5hbWljYWxseSBzZXQgbG9jYWxlIGFjY29yZGluZ2x5LiBJbiBjYXNlIG9mIG5vbiByZWdpc3RlcmVkIGxvY2FsZSByZWdpc3RlciBpdFxuICAgICAqIGR5bmFtaWNhbGx5LlxuICAgICAqL1xuICAgIHByaXZhdGUgYmluZFRyYW5zbGF0ZVNlcnZpY2VMYW5nQ2hhbmdlVG9TdGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaTE4bikge1xuICAgICAgICAgICAgdGhpcy5pMThuLm9uU3RhdGVDaGFuZ2VcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3ViTm90aWZpZXIpLFxuICAgICAgICAgICAgICAgICAgICAvLyBmaWx0ZXIgb3V0IG51bGwgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoc3RhdGUpID0+IHN0YXRlPy5hY3RpdmVMYW5nICE9PSBudWxsICYmIHN0YXRlPy5hY3RpdmVMYW5nICE9PSB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICAvLyBCRVdBUkU6IGZpbHRlciBpcyBiYXNlZCBvbiBjb252ZW50aW9uIHRoYXQgbG9jYWxlIGlkIHNsaWNlZCgyKSB3aWxsIG1hdGNoIGFjdGl2ZUxhbmcgZS5nLiBlbi1VUyA9PiBlblxuICAgICAgICAgICAgICAgICAgICAvLyBBbHNvLCBpZiBhY3RpdmVMYW5nIGlzICdlbicgYW5kIGxvY2FsZSBpcyAnZW4tR0InIGl0IHdpbGwgbm90IHRyaWdnZXIgbG9jYWxlIGNoYW5nZVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiBzdGF0ZS5hY3RpdmVMYW5nLnRvTG93ZXJDYXNlKCkgIT09IHRoaXMuc3RhdGVJbnN0YW5jZT8uaWQuc2xpY2UoMCwgMikudG9Mb3dlckNhc2UoKSksXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvIGNoZWNrIGlmIHJlZ2lzdHJhdGlvbiBvZiBsb2NhbGUgb3RoZXJ3aXNlIHJlZ2lzdGVyIGl0XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBvZih2YWx1ZSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXRMb2NhbGVJZCBtYXkgdGhyb3cgRXJyb3IoYE1pc3NpbmcgbG9jYWxlIGRhdGEgZm9yIHRoZSBsb2NhbGUgXCIke2xvY2FsZX1cIi5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGkxOHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFjdGl2ZUxhbmcgaXMgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpMThzdGF0ZS5hY3RpdmVMYW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignSGFzIGkxOG5TZXJ2aWNlIGluaXRpYWxpemVkPyBJZiBub3QgbWFrZSBzdXJlIGkxOG5TZXJ2aWNlLmluaXQoKS5zdWJzY3JpYmUoLi4pJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMubG9jYWxlTWFwcGVyKGkxOHN0YXRlLmFjdGl2ZUxhbmcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkTG9jYWxlKHZhbHVlPy5hY3RpdmVMYW5nKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChzOiBFdWlTZXJ2aWNlU3RhdHVzKSA9PiBzLnN1Y2Nlc3MpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMubG9jYWxlTWFwcGVyKHZhbHVlPy5hY3RpdmVMYW5nKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTb21ldGhpbmcgd2VudCB0ZXJyaWJseSByZWFsbHkgd3JvbmcgZHVyaW5nIGxvY2FsZSBsb2FkaW5nJywgZS5lcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBcImF2YWlsYWJsZVwiIGFycmF5IGF0dHJpYnV0ZSB3aXRoIG5ld2x5IHJlZ2lzdGVyZWRcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChpZCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RhdGUoKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChzdGF0ZTogTG9jYWxlU3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gc3RhdGU/LmF2YWlsYWJsZSA/IHN0YXRlLmF2YWlsYWJsZSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgaWQsIGF2YWlsYWJsZTogQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5hdmFpbGFibGUsIGlkXSkpIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZTogTG9jYWxlU3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZShzdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXRyaWV2ZSBsb2NhbGVzIGZyb20gYnJvd3NlclxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEJyb3dzZXJMb2NhbGVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgYnJvd3NlckxvY2FsZXMgPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzID09PSB1bmRlZmluZWQgPyBbbmF2aWdhdG9yLmxhbmd1YWdlXSA6IG5hdmlnYXRvci5sYW5ndWFnZXM7XG5cbiAgICAgICAgaWYgKCFicm93c2VyTG9jYWxlcykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBicm93c2VyTG9jYWxlcy5tYXAoKGxvY2FsZSkgPT4gbG9jYWxlLnRyaW0oKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaWYgbG9jYWxlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBmaWx0ZXJlZCBvdXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9jYWxlcyBBIHN0cmluZyBhcnJheSBjb250YWlucyBhbGwgbG9jYWxlIGlkIGUuZy4gW1wiZWxcIiwgXCJlbC1DWVwiXVxuICAgICAqL1xuICAgIHByaXZhdGUgZmlsdGVyUmVnaXN0ZXJlZExvY2FsZXMobG9jYWxlczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBsb2NhbGVzLmZpbHRlcigobG9jOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZ2V0TG9jYWxlSWQobG9jKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB3aGljaCBsb2FkcyB0aGUgbG9jYWxlIGJhc2VkIG9uIHByb3ZpZGVkIElEXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgdGhlIGxvY2FsZSBpZCBlLmcuIGVuLCBlbC1DWVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLy8gcHJpdmF0ZSBpbXBvcnRMb2NhbGUoaWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gICAgIC8vIGluIGNhc2Ugb2YgYW4gZXJyb3IsIGNhdGNoIGl0IGFuZCByZXR1cm4gbnVsbFxuICAgIC8vICAgICByZXR1cm4gaW1wb3J0KFxuICAgIC8vICAgICAgICAgLyogd2VicGFja0V4Y2x1ZGU6IC9cXC5kXFwudHMkLyAqL1xuICAgIC8vICAgICAgICAgLyogd2VicGFja01vZGU6IFwibGF6eS1vbmNlXCIgKi9cbiAgICAvLyAgICAgICAgIC8qIHdlYnBhY2tDaHVua05hbWU6IFwiaTE4bi1iYXNlXCIgKi9cbiAgICAvLyAgICAgICAgIGBALy4uL25vZGVfbW9kdWxlcy9AYW5ndWxhci9jb21tb24vbG9jYWxlcy8ke2lkfWApXG4gICAgLy8gICAgICAgICAudGhlbihtID0+IG0uZGVmYXVsdClcbiAgICAvLyAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgLy8gICAgICAgICAgICAgaWYgKHRoaXMubG9nKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBMb2NhbGUgd2l0aCBJRDogXCIke2lkfVwiIGZhaWxlZCB0byBsb2FkLiBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsIGVycm9yKTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIGEgUHJvbWlzZSB3aGljaCBsb2FkcyB0aGUgbG9jYWxlIGJhc2VkIG9uIHByb3ZpZGVkIElEXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgdGhlIGxvY2FsZSBpZCBlLmcuIGVuLCBlbC1DWVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgLy8gcHJpdmF0ZSBpbXBvcnRFeHRyYUxvY2FsZShpZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyAgICAgLy8gaW4gY2FzZSBvZiBhbiBlcnJvciwgY2F0Y2ggaXQgYW5kIHJldHVybiBudWxsXG4gICAgLy8gICAgIHJldHVybiBpbXBvcnQoXG4gICAgLy8gICAgICAgICAvKiB3ZWJwYWNrRXhjbHVkZTogL1xcLmRcXC50cyQvICovXG4gICAgLy8gICAgICAgICAvKiB3ZWJwYWNrTW9kZTogXCJsYXp5LW9uY2VcIiAqL1xuICAgIC8vICAgICAgICAgLyogd2VicGFja0NodW5rTmFtZTogXCJpMThuLWV4dHJhXCIgKi9cbiAgICAvLyAgICAgICAgIGBALy4uL25vZGVfbW9kdWxlcy9AYW5ndWxhci9jb21tb24vbG9jYWxlcy9leHRyYS8ke2lkfWApXG4gICAgLy8gICAgICAgICAudGhlbihtID0+IG0uZGVmYXVsdClcbiAgICAvLyAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgLy8gICAgICAgICAgICAgaWYgKHRoaXMubG9nKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBFeHRyYSBMb2NhbGUgd2l0aCBJRDogXCIke2lkfVwiIGZhaWxlZCB0byBsb2FkLiBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsIGVycm9yKTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBvcnRzIExvY2FsZSBhbmQgdGhlbiBFeHRyYS4gSXQgcmV0dXJucyB0aGUgT2JqZWN0IHdoaWNoIHJlZ2lzdGVyTG9jYWxlKC4uLikgZnVuY3Rpb24gbmVlZHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9jYWxlSWQgVGhlIGlkIG9mIHRoZSBsb2NhbGVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIC8vIHByaXZhdGUgaW1wb3J0RGF0YUFuZEV4dHJhTG9jYWxlKGxvY2FsZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHsgZGF0YTogYW55LCBsb2NhbGVJZDogc3RyaW5nLCBleHRyYURhdGE6IGFueSB9PiB7XG4gICAgLy8gICAgIHJldHVybiBmcm9tKHRoaXMuaW1wb3J0TG9jYWxlKGxvY2FsZUlkKSkucGlwZShcbiAgICAvLyAgICAgICAgIG1lcmdlTWFwKChkYXRhKSA9PiBmcm9tKHRoaXMuaW1wb3J0RXh0cmFMb2NhbGUobG9jYWxlSWQpKS5waXBlKG1hcCgoZXh0cmFEYXRhKSA9PlxuICAgIC8vICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCB7IGRhdGEsIGxvY2FsZUlkLCBleHRyYURhdGEgfSkpKSxcbiAgICAvLyAgICAgICAgICAgICAxXG4gICAgLy8gICAgICAgICApKTtcbiAgICAvLyB9XG59XG4iXX0=
@@ -1,93 +0,0 @@
1
- import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
2
- import { from } from 'rxjs';
3
- import { take, tap } from 'rxjs/operators';
4
- import * as lf from 'localforage';
5
- import { AsyncStorageService } from './async-storage.service';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../log/log.service";
8
- /** @internal */
9
- export const localForage = 'defineDriver' in lf ? lf : lf['default'];
10
- export const LOCAL_FORAGE_SERVICE_CONFIG_TOKEN = new InjectionToken('LOCAL_FORAGE_SERVICE_CONFIG');
11
- /**
12
- * localforage service, using the localForage javascript library
13
- * https://localforage.github.io/localForage
14
- */
15
- export class LocalForageService extends AsyncStorageService {
16
- constructor(config, log) {
17
- super();
18
- this.config = config;
19
- this.log = log;
20
- // configure localforage, if specified
21
- if (config) {
22
- localForage.config(config);
23
- }
24
- }
25
- /**
26
- * the name of the storage service
27
- */
28
- name() {
29
- return LocalForageService.NAME;
30
- }
31
- /**
32
- * reflects the readiness of the storage
33
- * @returns one time emission Observable<void>
34
- */
35
- ready() {
36
- return from(localForage.ready()).pipe(take(1), tap(() => { }, (err) => {
37
- if (this.log) {
38
- this.log.error(this.name(), 'ready', err);
39
- }
40
- }));
41
- }
42
- /**
43
- * retrieve an object from localforage
44
- * @param key the associated key
45
- * @returns one time emission Observable of value
46
- */
47
- get(key) {
48
- return from(localForage.getItem(key)).pipe(take(1), tap(() => { }, (err) => {
49
- if (this.log) {
50
- this.log.error(this.name(), 'get', err);
51
- }
52
- }));
53
- }
54
- /**
55
- * sets an object in localforage
56
- * @param key the associated key
57
- * @param value the value to set
58
- * @returns one time emission Observable
59
- */
60
- set(key, value) {
61
- return from(localForage.setItem(key, value)).pipe(take(1), tap(() => { }, (err) => {
62
- if (this.log) {
63
- this.log.error(this.name(), 'set', err);
64
- }
65
- }));
66
- }
67
- /**
68
- * removes an object from localforage
69
- * @param key the associated key
70
- * @returns one time emission Observable
71
- */
72
- remove(key) {
73
- return from(localForage.removeItem(key)).pipe(take(1), tap(() => { }, (err) => {
74
- if (this.log) {
75
- this.log.error(this.name(), 'remove', err);
76
- }
77
- }));
78
- }
79
- }
80
- LocalForageService.NAME = 'LocalForageService';
81
- /** @nocollapse */ LocalForageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: LocalForageService, deps: [{ token: LOCAL_FORAGE_SERVICE_CONFIG_TOKEN, optional: true }, { token: i1.LogService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
82
- /** @nocollapse */ LocalForageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: LocalForageService });
83
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: LocalForageService, decorators: [{
84
- type: Injectable
85
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
86
- type: Inject,
87
- args: [LOCAL_FORAGE_SERVICE_CONFIG_TOKEN]
88
- }, {
89
- type: Optional
90
- }] }, { type: i1.LogService, decorators: [{
91
- type: Optional
92
- }] }]; } });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtZm9yYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3N0b3JhZ2UvbG9jYWwtZm9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsSUFBSSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUc5RCxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFRLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLElBQUksY0FBYyxDQUFNLDZCQUE2QixDQUFDLENBQUM7QUFFeEc7OztHQUdHO0FBRUgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLG1CQUFtQjtJQUd2RCxZQUE2RSxNQUFXLEVBQXdCLEdBQWU7UUFDM0gsS0FBSyxFQUFFLENBQUM7UUFEaUUsV0FBTSxHQUFOLE1BQU0sQ0FBSztRQUF3QixRQUFHLEdBQUgsR0FBRyxDQUFZO1FBRTNILHNDQUFzQztRQUN0QyxJQUFJLE1BQU0sRUFBRTtZQUNSLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUI7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJO1FBQ0EsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUs7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ2pDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxHQUFHLENBQ0MsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUNSLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDSixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQzthQUM3QztRQUNMLENBQUMsQ0FDSixDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxHQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FDQyxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQ1IsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNKLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQzNDO1FBQ0wsQ0FBQyxDQUNKLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBVTtRQUN2QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDN0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FDQyxHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQ1IsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNKLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQzNDO1FBQ0wsQ0FBQyxDQUNKLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEdBQVc7UUFDZCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN6QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUNDLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFDUixDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ0osSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDOUM7UUFDTCxDQUFDLENBQ0osQ0FDSixDQUFDO0lBQ04sQ0FBQzs7QUEzRk0sdUJBQUksR0FBRyxvQkFBb0IsQ0FBQzt5SUFEMUIsa0JBQWtCLGtCQUdQLGlDQUFpQzs2SUFINUMsa0JBQWtCO2tHQUFsQixrQkFBa0I7a0JBRDlCLFVBQVU7OzBCQUlNLE1BQU07MkJBQUMsaUNBQWlDOzswQkFBRyxRQUFROzswQkFBMkIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgKiBhcyBsZiBmcm9tICdsb2NhbGZvcmFnZSc7XG5pbXBvcnQgeyBBc3luY1N0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9hc3luYy1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4uL2xvZy9sb2cuc2VydmljZSc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBsb2NhbEZvcmFnZTogYW55ID0gJ2RlZmluZURyaXZlcicgaW4gbGYgPyBsZiA6IGxmWydkZWZhdWx0J107XG5leHBvcnQgY29uc3QgTE9DQUxfRk9SQUdFX1NFUlZJQ0VfQ09ORklHX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ0xPQ0FMX0ZPUkFHRV9TRVJWSUNFX0NPTkZJRycpO1xuXG4vKipcbiAqIGxvY2FsZm9yYWdlIHNlcnZpY2UsIHVzaW5nIHRoZSBsb2NhbEZvcmFnZSBqYXZhc2NyaXB0IGxpYnJhcnlcbiAqIGh0dHBzOi8vbG9jYWxmb3JhZ2UuZ2l0aHViLmlvL2xvY2FsRm9yYWdlXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2NhbEZvcmFnZVNlcnZpY2UgZXh0ZW5kcyBBc3luY1N0b3JhZ2VTZXJ2aWNlIHtcbiAgICBzdGF0aWMgTkFNRSA9ICdMb2NhbEZvcmFnZVNlcnZpY2UnO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChMT0NBTF9GT1JBR0VfU0VSVklDRV9DT05GSUdfVE9LRU4pIEBPcHRpb25hbCgpIHByb3RlY3RlZCBjb25maWc6IGFueSwgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIGxvZzogTG9nU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICAvLyBjb25maWd1cmUgbG9jYWxmb3JhZ2UsIGlmIHNwZWNpZmllZFxuICAgICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgICAgICBsb2NhbEZvcmFnZS5jb25maWcoY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoZSBuYW1lIG9mIHRoZSBzdG9yYWdlIHNlcnZpY2VcbiAgICAgKi9cbiAgICBuYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBMb2NhbEZvcmFnZVNlcnZpY2UuTkFNRTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZWZsZWN0cyB0aGUgcmVhZGluZXNzIG9mIHRoZSBzdG9yYWdlXG4gICAgICogQHJldHVybnMgb25lIHRpbWUgZW1pc3Npb24gT2JzZXJ2YWJsZTx2b2lkPlxuICAgICAqL1xuICAgIHJlYWR5KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiBmcm9tKGxvY2FsRm9yYWdlLnJlYWR5KCkpLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgdGFwKFxuICAgICAgICAgICAgICAgICgpID0+IHt9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubG9nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZy5lcnJvcih0aGlzLm5hbWUoKSwgJ3JlYWR5JywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXRyaWV2ZSBhbiBvYmplY3QgZnJvbSBsb2NhbGZvcmFnZVxuICAgICAqIEBwYXJhbSBrZXkgdGhlIGFzc29jaWF0ZWQga2V5XG4gICAgICogQHJldHVybnMgb25lIHRpbWUgZW1pc3Npb24gT2JzZXJ2YWJsZSBvZiB2YWx1ZVxuICAgICAqL1xuICAgIGdldChrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiBmcm9tKGxvY2FsRm9yYWdlLmdldEl0ZW0oa2V5KSkucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICB0YXAoXG4gICAgICAgICAgICAgICAgKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKHRoaXMubmFtZSgpLCAnZ2V0JywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGFuIG9iamVjdCBpbiBsb2NhbGZvcmFnZVxuICAgICAqIEBwYXJhbSBrZXkgdGhlIGFzc29jaWF0ZWQga2V5XG4gICAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBzZXRcbiAgICAgKiBAcmV0dXJucyBvbmUgdGltZSBlbWlzc2lvbiBPYnNlcnZhYmxlXG4gICAgICovXG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGZyb20obG9jYWxGb3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKSkucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICB0YXAoXG4gICAgICAgICAgICAgICAgKCkgPT4ge30sXG4gICAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKHRoaXMubmFtZSgpLCAnc2V0JywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVzIGFuIG9iamVjdCBmcm9tIGxvY2FsZm9yYWdlXG4gICAgICogQHBhcmFtIGtleSB0aGUgYXNzb2NpYXRlZCBrZXlcbiAgICAgKiBAcmV0dXJucyBvbmUgdGltZSBlbWlzc2lvbiBPYnNlcnZhYmxlXG4gICAgICovXG4gICAgcmVtb3ZlKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGZyb20obG9jYWxGb3JhZ2UucmVtb3ZlSXRlbShrZXkpKS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHRhcChcbiAgICAgICAgICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2cuZXJyb3IodGhpcy5uYW1lKCksICdyZW1vdmUnLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,75 +0,0 @@
1
- import { Injectable, Optional } from '@angular/core';
2
- import { StorageService } from './storage.service';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../log/log.service";
5
- /**
6
- * localStorage service
7
- */
8
- export class LocalStorageService extends StorageService {
9
- constructor(log) {
10
- super();
11
- this.log = log;
12
- }
13
- /**
14
- * the name of the storage service
15
- */
16
- name() {
17
- return LocalStorageService.NAME;
18
- }
19
- /**
20
- * retrieve an object from local storage
21
- * @param key the associated key
22
- * @returns the value or undefined, if case of error
23
- */
24
- get(key) {
25
- try {
26
- const serialized = localStorage.getItem(key);
27
- return serialized && JSON.parse(serialized);
28
- }
29
- catch (err) {
30
- if (this.log) {
31
- this.log.error(this.name(), 'get', err);
32
- }
33
- return undefined;
34
- }
35
- }
36
- /**
37
- * sets an object in local storage
38
- * @param key the associated key
39
- * @param value the value to set
40
- */
41
- set(key, value) {
42
- try {
43
- const serialized = JSON.stringify(value);
44
- localStorage.setItem(key, serialized);
45
- }
46
- catch (err) {
47
- if (this.log) {
48
- this.log.error(this.name(), 'set', err);
49
- }
50
- }
51
- }
52
- /**
53
- * removes an object from local storage
54
- * @param key the associated key
55
- */
56
- remove(key) {
57
- try {
58
- localStorage.removeItem(key);
59
- }
60
- catch (err) {
61
- if (this.log) {
62
- this.log.error(this.name(), 'remove', err);
63
- }
64
- }
65
- }
66
- }
67
- LocalStorageService.NAME = 'LocalStorageService';
68
- /** @nocollapse */ LocalStorageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: LocalStorageService, deps: [{ token: i1.LogService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
69
- /** @nocollapse */ LocalStorageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: LocalStorageService });
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: LocalStorageService, decorators: [{
71
- type: Injectable
72
- }], ctorParameters: function () { return [{ type: i1.LogService, decorators: [{
73
- type: Optional
74
- }] }]; } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9zdG9yYWdlL2xvY2FsLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQUduRDs7R0FFRztBQUVILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxjQUFjO0lBR25ELFlBQWtDLEdBQWU7UUFDN0MsS0FBSyxFQUFFLENBQUM7UUFEc0IsUUFBRyxHQUFILEdBQUcsQ0FBWTtJQUVqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJO1FBQ0EsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxHQUFHLENBQUMsR0FBVztRQUNYLElBQUk7WUFDQSxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLE9BQU8sVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDL0M7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsT0FBTyxTQUFTLENBQUM7U0FDcEI7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBVTtRQUN2QixJQUFJO1lBQ0EsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUN6QztRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDM0M7U0FDSjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBVztRQUNkLElBQUk7WUFDQSxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hDO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUM5QztTQUNKO0lBQ0wsQ0FBQzs7QUExRE0sd0JBQUksR0FBRyxxQkFBcUIsQ0FBQzswSUFEM0IsbUJBQW1COzhJQUFuQixtQkFBbUI7a0dBQW5CLG1CQUFtQjtrQkFEL0IsVUFBVTs7MEJBSU0sUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuLi9sb2cvbG9nLnNlcnZpY2UnO1xuXG4vKipcbiAqIGxvY2FsU3RvcmFnZSBzZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIGV4dGVuZHMgU3RvcmFnZVNlcnZpY2Uge1xuICAgIHN0YXRpYyBOQU1FID0gJ0xvY2FsU3RvcmFnZVNlcnZpY2UnO1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJvdGVjdGVkIGxvZzogTG9nU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoZSBuYW1lIG9mIHRoZSBzdG9yYWdlIHNlcnZpY2VcbiAgICAgKi9cbiAgICBuYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLk5BTUU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0cmlldmUgYW4gb2JqZWN0IGZyb20gbG9jYWwgc3RvcmFnZVxuICAgICAqIEBwYXJhbSBrZXkgdGhlIGFzc29jaWF0ZWQga2V5XG4gICAgICogQHJldHVybnMgdGhlIHZhbHVlIG9yIHVuZGVmaW5lZCwgaWYgY2FzZSBvZiBlcnJvclxuICAgICAqL1xuICAgIGdldChrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVkICYmIEpTT04ucGFyc2Uoc2VyaWFsaXplZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKHRoaXMubG9nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2cuZXJyb3IodGhpcy5uYW1lKCksICdnZXQnLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgYW4gb2JqZWN0IGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgKiBAcGFyYW0ga2V5IHRoZSBhc3NvY2lhdGVkIGtleVxuICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gc2V0XG4gICAgICovXG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBzZXJpYWxpemVkKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sb2cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZy5lcnJvcih0aGlzLm5hbWUoKSwgJ3NldCcsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZW1vdmVzIGFuIG9iamVjdCBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICAgKiBAcGFyYW0ga2V5IHRoZSBhc3NvY2lhdGVkIGtleVxuICAgICAqL1xuICAgIHJlbW92ZShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sb2cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZy5lcnJvcih0aGlzLm5hbWUoKSwgJ3JlbW92ZScsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,75 +0,0 @@
1
- import { Injectable, Optional } from '@angular/core';
2
- import { StorageService } from './storage.service';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../log/log.service";
5
- /**
6
- * sessionStorage service
7
- */
8
- export class SessionStorageService extends StorageService {
9
- constructor(log) {
10
- super();
11
- this.log = log;
12
- }
13
- /**
14
- * the name of the storage service
15
- */
16
- name() {
17
- return SessionStorageService.NAME;
18
- }
19
- /**
20
- * retrieve an object from session storage
21
- * @param key the associated key
22
- * @returns the value or undefined, if case of error
23
- */
24
- get(key) {
25
- try {
26
- const serialized = sessionStorage.getItem(key);
27
- return serialized && JSON.parse(serialized);
28
- }
29
- catch (err) {
30
- if (this.log) {
31
- this.log.error(this.name(), 'get', err);
32
- }
33
- return undefined;
34
- }
35
- }
36
- /**
37
- * sets an object in session storage
38
- * @param key the associated key
39
- * @param value the value to set
40
- */
41
- set(key, value) {
42
- try {
43
- const serialized = JSON.stringify(value);
44
- sessionStorage.setItem(key, serialized);
45
- }
46
- catch (err) {
47
- if (this.log) {
48
- this.log.error(this.name(), 'set', err);
49
- }
50
- }
51
- }
52
- /**
53
- * removes an object from session storage
54
- * @param key the associated key
55
- */
56
- remove(key) {
57
- try {
58
- sessionStorage.removeItem(key);
59
- }
60
- catch (err) {
61
- if (this.log) {
62
- this.log.error(this.name(), 'remove', err);
63
- }
64
- }
65
- }
66
- }
67
- SessionStorageService.NAME = 'SessionStorageService';
68
- /** @nocollapse */ SessionStorageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: SessionStorageService, deps: [{ token: i1.LogService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
69
- /** @nocollapse */ SessionStorageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: SessionStorageService });
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-next.2", ngImport: i0, type: SessionStorageService, decorators: [{
71
- type: Injectable
72
- }], ctorParameters: function () { return [{ type: i1.LogService, decorators: [{
73
- type: Optional
74
- }] }]; } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3N0b3JhZ2Uvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFHbkQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsY0FBYztJQUdyRCxZQUFrQyxHQUFlO1FBQzdDLEtBQUssRUFBRSxDQUFDO1FBRHNCLFFBQUcsR0FBSCxHQUFHLENBQVk7SUFFakQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSTtRQUNBLE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsR0FBRyxDQUFDLEdBQVc7UUFDWCxJQUFJO1lBQ0EsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQyxPQUFPLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQy9DO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQzthQUMzQztZQUNELE9BQU8sU0FBUyxDQUFDO1NBQ3BCO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxHQUFHLENBQUMsR0FBVyxFQUFFLEtBQVU7UUFDdkIsSUFBSTtZQUNBLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDM0M7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQzNDO1NBQ0o7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEdBQVc7UUFDZCxJQUFJO1lBQ0EsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNsQztRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDOUM7U0FDSjtJQUNMLENBQUM7O0FBMURNLDBCQUFJLEdBQUcsdUJBQXVCLENBQUM7NElBRDdCLHFCQUFxQjtnSkFBckIscUJBQXFCO2tHQUFyQixxQkFBcUI7a0JBRGpDLFVBQVU7OzBCQUlNLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi4vbG9nL2xvZy5zZXJ2aWNlJztcblxuLyoqXG4gKiBzZXNzaW9uU3RvcmFnZSBzZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgZXh0ZW5kcyBTdG9yYWdlU2VydmljZSB7XG4gICAgc3RhdGljIE5BTUUgPSAnU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlJztcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByb3RlY3RlZCBsb2c6IExvZ1NlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0aGUgbmFtZSBvZiB0aGUgc3RvcmFnZSBzZXJ2aWNlXG4gICAgICovXG4gICAgbmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLk5BTUU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0cmlldmUgYW4gb2JqZWN0IGZyb20gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICogQHBhcmFtIGtleSB0aGUgYXNzb2NpYXRlZCBrZXlcbiAgICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgb3IgdW5kZWZpbmVkLCBpZiBjYXNlIG9mIGVycm9yXG4gICAgICovXG4gICAgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplZCAmJiBKU09OLnBhcnNlKHNlcmlhbGl6ZWQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvZykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKHRoaXMubmFtZSgpLCAnZ2V0JywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIGFuIG9iamVjdCBpbiBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgKiBAcGFyYW0ga2V5IHRoZSBhc3NvY2lhdGVkIGtleVxuICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gc2V0XG4gICAgICovXG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShrZXksIHNlcmlhbGl6ZWQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvZykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nLmVycm9yKHRoaXMubmFtZSgpLCAnc2V0JywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlbW92ZXMgYW4gb2JqZWN0IGZyb20gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICogQHBhcmFtIGtleSB0aGUgYXNzb2NpYXRlZCBrZXlcbiAgICAgKi9cbiAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sb2cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZy5lcnJvcih0aGlzLm5hbWUoKSwgJ3JlbW92ZScsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=