@ngxs/storage-plugin 3.7.4 → 3.7.5-dev.master-17a1bb8

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.
@@ -1,8 +1,8 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- export { NgxsStoragePluginModule } from './storage.module';
6
- export { NgxsStoragePlugin } from './storage.plugin';
7
- export { NGXS_STORAGE_PLUGIN_OPTIONS, STORAGE_ENGINE } from './symbols';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3hzL3N0b3JhZ2UtcGx1Z2luLyIsInNvdXJjZXMiOlsic3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELDREQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IE5neHNTdG9yYWdlUGx1Z2luTW9kdWxlIH0gZnJvbSAnLi9zdG9yYWdlLm1vZHVsZSc7XHJcbmV4cG9ydCB7IE5neHNTdG9yYWdlUGx1Z2luIH0gZnJvbSAnLi9zdG9yYWdlLnBsdWdpbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3ltYm9scyc7XHJcbiJdfQ==
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ export { NgxsStoragePluginModule } from './storage.module';
6
+ export { NgxsStoragePlugin } from './storage.plugin';
7
+ export { NGXS_STORAGE_PLUGIN_OPTIONS, STORAGE_ENGINE } from './symbols';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3hzL3N0b3JhZ2UtcGx1Z2luLyIsInNvdXJjZXMiOlsic3JjL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELDREQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IE5neHNTdG9yYWdlUGx1Z2luTW9kdWxlIH0gZnJvbSAnLi9zdG9yYWdlLm1vZHVsZSc7XG5leHBvcnQgeyBOZ3hzU3RvcmFnZVBsdWdpbiB9IGZyb20gJy4vc3RvcmFnZS5wbHVnaW4nO1xuZXhwb3J0ICogZnJvbSAnLi9zeW1ib2xzJztcbiJdfQ==
@@ -1,47 +1,47 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { NgModule, PLATFORM_ID, InjectionToken } from '@angular/core';
6
- import { NGXS_PLUGINS } from '@ngxs/store';
7
- import { STORAGE_ENGINE, NGXS_STORAGE_PLUGIN_OPTIONS } from './symbols';
8
- import { NgxsStoragePlugin } from './storage.plugin';
9
- import { storageOptionsFactory, engineFactory } from './internals';
10
- /** @type {?} */
11
- export const USER_OPTIONS = new InjectionToken('USER_OPTIONS');
12
- export class NgxsStoragePluginModule {
13
- /**
14
- * @param {?=} options
15
- * @return {?}
16
- */
17
- static forRoot(options) {
18
- return {
19
- ngModule: NgxsStoragePluginModule,
20
- providers: [
21
- {
22
- provide: NGXS_PLUGINS,
23
- useClass: NgxsStoragePlugin,
24
- multi: true
25
- },
26
- {
27
- provide: USER_OPTIONS,
28
- useValue: options
29
- },
30
- {
31
- provide: NGXS_STORAGE_PLUGIN_OPTIONS,
32
- useFactory: storageOptionsFactory,
33
- deps: [USER_OPTIONS]
34
- },
35
- {
36
- provide: STORAGE_ENGINE,
37
- useFactory: engineFactory,
38
- deps: [NGXS_STORAGE_PLUGIN_OPTIONS, PLATFORM_ID]
39
- }
40
- ]
41
- };
42
- }
43
- }
44
- NgxsStoragePluginModule.decorators = [
45
- { type: NgModule }
46
- ];
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4cy9zdG9yYWdlLXBsdWdpbi8iLCJzb3VyY2VzIjpbInNyYy9zdG9yYWdlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFFTCxjQUFjLEVBQ2QsMkJBQTJCLEVBQzVCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBRW5FLE1BQU0sT0FBTyxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDO0FBRzlELE1BQU0sT0FBTyx1QkFBdUI7Ozs7O0lBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQ1osT0FBa0M7UUFFbEMsT0FBTztZQUNMLFFBQVEsRUFBRSx1QkFBdUI7WUFDakMsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSxZQUFZO29CQUNyQixRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixLQUFLLEVBQUUsSUFBSTtpQkFDWjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsWUFBWTtvQkFDckIsUUFBUSxFQUFFLE9BQU87aUJBQ2xCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSwyQkFBMkI7b0JBQ3BDLFVBQVUsRUFBRSxxQkFBcUI7b0JBQ2pDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDckI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLFVBQVUsRUFBRSxhQUFhO29CQUN6QixJQUFJLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxXQUFXLENBQUM7aUJBQ2pEO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs7O1lBN0JGLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgUExBVEZPUk1fSUQsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HWFNfUExVR0lOUyB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgTmd4c1N0b3JhZ2VQbHVnaW5PcHRpb25zLFxyXG4gIFNUT1JBR0VfRU5HSU5FLFxyXG4gIE5HWFNfU1RPUkFHRV9QTFVHSU5fT1BUSU9OU1xyXG59IGZyb20gJy4vc3ltYm9scyc7XHJcbmltcG9ydCB7IE5neHNTdG9yYWdlUGx1Z2luIH0gZnJvbSAnLi9zdG9yYWdlLnBsdWdpbic7XHJcbmltcG9ydCB7IHN0b3JhZ2VPcHRpb25zRmFjdG9yeSwgZW5naW5lRmFjdG9yeSB9IGZyb20gJy4vaW50ZXJuYWxzJztcclxuXHJcbmV4cG9ydCBjb25zdCBVU0VSX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ1VTRVJfT1BUSU9OUycpO1xyXG5cclxuQE5nTW9kdWxlKClcclxuZXhwb3J0IGNsYXNzIE5neHNTdG9yYWdlUGx1Z2luTW9kdWxlIHtcclxuICBzdGF0aWMgZm9yUm9vdChcclxuICAgIG9wdGlvbnM/OiBOZ3hzU3RvcmFnZVBsdWdpbk9wdGlvbnNcclxuICApOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE5neHNTdG9yYWdlUGx1Z2luTW9kdWxlPiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogTmd4c1N0b3JhZ2VQbHVnaW5Nb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IE5HWFNfUExVR0lOUyxcclxuICAgICAgICAgIHVzZUNsYXNzOiBOZ3hzU3RvcmFnZVBsdWdpbixcclxuICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwcm92aWRlOiBVU0VSX09QVElPTlMsXHJcbiAgICAgICAgICB1c2VWYWx1ZTogb3B0aW9uc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcHJvdmlkZTogTkdYU19TVE9SQUdFX1BMVUdJTl9PUFRJT05TLFxyXG4gICAgICAgICAgdXNlRmFjdG9yeTogc3RvcmFnZU9wdGlvbnNGYWN0b3J5LFxyXG4gICAgICAgICAgZGVwczogW1VTRVJfT1BUSU9OU11cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IFNUT1JBR0VfRU5HSU5FLFxyXG4gICAgICAgICAgdXNlRmFjdG9yeTogZW5naW5lRmFjdG9yeSxcclxuICAgICAgICAgIGRlcHM6IFtOR1hTX1NUT1JBR0VfUExVR0lOX09QVElPTlMsIFBMQVRGT1JNX0lEXVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import { NgModule, PLATFORM_ID, InjectionToken } from '@angular/core';
6
+ import { NGXS_PLUGINS } from '@ngxs/store';
7
+ import { STORAGE_ENGINE, NGXS_STORAGE_PLUGIN_OPTIONS } from './symbols';
8
+ import { NgxsStoragePlugin } from './storage.plugin';
9
+ import { storageOptionsFactory, engineFactory } from './internals';
10
+ /** @type {?} */
11
+ export const USER_OPTIONS = new InjectionToken('USER_OPTIONS');
12
+ export class NgxsStoragePluginModule {
13
+ /**
14
+ * @param {?=} options
15
+ * @return {?}
16
+ */
17
+ static forRoot(options) {
18
+ return {
19
+ ngModule: NgxsStoragePluginModule,
20
+ providers: [
21
+ {
22
+ provide: NGXS_PLUGINS,
23
+ useClass: NgxsStoragePlugin,
24
+ multi: true
25
+ },
26
+ {
27
+ provide: USER_OPTIONS,
28
+ useValue: options
29
+ },
30
+ {
31
+ provide: NGXS_STORAGE_PLUGIN_OPTIONS,
32
+ useFactory: storageOptionsFactory,
33
+ deps: [USER_OPTIONS]
34
+ },
35
+ {
36
+ provide: STORAGE_ENGINE,
37
+ useFactory: engineFactory,
38
+ deps: [NGXS_STORAGE_PLUGIN_OPTIONS, PLATFORM_ID]
39
+ }
40
+ ]
41
+ };
42
+ }
43
+ }
44
+ NgxsStoragePluginModule.decorators = [
45
+ { type: NgModule }
46
+ ];
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4cy9zdG9yYWdlLXBsdWdpbi8iLCJzb3VyY2VzIjpbInNyYy9zdG9yYWdlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFFTCxjQUFjLEVBQ2QsMkJBQTJCLEVBQzVCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBRW5FLE1BQU0sT0FBTyxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDO0FBRzlELE1BQU0sT0FBTyx1QkFBdUI7Ozs7O0lBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQ1osT0FBa0M7UUFFbEMsT0FBTztZQUNMLFFBQVEsRUFBRSx1QkFBdUI7WUFDakMsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSxZQUFZO29CQUNyQixRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixLQUFLLEVBQUUsSUFBSTtpQkFDWjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsWUFBWTtvQkFDckIsUUFBUSxFQUFFLE9BQU87aUJBQ2xCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSwyQkFBMkI7b0JBQ3BDLFVBQVUsRUFBRSxxQkFBcUI7b0JBQ2pDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDckI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLFVBQVUsRUFBRSxhQUFhO29CQUN6QixJQUFJLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxXQUFXLENBQUM7aUJBQ2pEO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs7O1lBN0JGLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgUExBVEZPUk1fSUQsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR1hTX1BMVUdJTlMgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5cbmltcG9ydCB7XG4gIE5neHNTdG9yYWdlUGx1Z2luT3B0aW9ucyxcbiAgU1RPUkFHRV9FTkdJTkUsXG4gIE5HWFNfU1RPUkFHRV9QTFVHSU5fT1BUSU9OU1xufSBmcm9tICcuL3N5bWJvbHMnO1xuaW1wb3J0IHsgTmd4c1N0b3JhZ2VQbHVnaW4gfSBmcm9tICcuL3N0b3JhZ2UucGx1Z2luJztcbmltcG9ydCB7IHN0b3JhZ2VPcHRpb25zRmFjdG9yeSwgZW5naW5lRmFjdG9yeSB9IGZyb20gJy4vaW50ZXJuYWxzJztcblxuZXhwb3J0IGNvbnN0IFVTRVJfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignVVNFUl9PUFRJT05TJyk7XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgTmd4c1N0b3JhZ2VQbHVnaW5Nb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChcbiAgICBvcHRpb25zPzogTmd4c1N0b3JhZ2VQbHVnaW5PcHRpb25zXG4gICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Tmd4c1N0b3JhZ2VQbHVnaW5Nb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IE5neHNTdG9yYWdlUGx1Z2luTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBOR1hTX1BMVUdJTlMsXG4gICAgICAgICAgdXNlQ2xhc3M6IE5neHNTdG9yYWdlUGx1Z2luLFxuICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBVU0VSX09QVElPTlMsXG4gICAgICAgICAgdXNlVmFsdWU6IG9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE5HWFNfU1RPUkFHRV9QTFVHSU5fT1BUSU9OUyxcbiAgICAgICAgICB1c2VGYWN0b3J5OiBzdG9yYWdlT3B0aW9uc0ZhY3RvcnksXG4gICAgICAgICAgZGVwczogW1VTRVJfT1BUSU9OU11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IFNUT1JBR0VfRU5HSU5FLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGVuZ2luZUZhY3RvcnksXG4gICAgICAgICAgZGVwczogW05HWFNfU1RPUkFHRV9QTFVHSU5fT1BUSU9OUywgUExBVEZPUk1fSURdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1,152 +1,200 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { PLATFORM_ID, Inject, Injectable } from '@angular/core';
6
- import { isPlatformServer } from '@angular/common';
7
- import { setValue, getValue, InitState, UpdateState, actionMatcher } from '@ngxs/store';
8
- import { tap } from 'rxjs/operators';
9
- import { STORAGE_ENGINE, NGXS_STORAGE_PLUGIN_OPTIONS } from './symbols';
10
- import { DEFAULT_STATE_KEY } from './internals';
11
- export class NgxsStoragePlugin {
12
- /**
13
- * @param {?} _options
14
- * @param {?} _engine
15
- * @param {?} _platformId
16
- */
17
- constructor(_options, _engine, _platformId) {
18
- this._options = _options;
19
- this._engine = _engine;
20
- this._platformId = _platformId;
21
- }
22
- /**
23
- * @param {?} state
24
- * @param {?} event
25
- * @param {?} next
26
- * @return {?}
27
- */
28
- handle(state, event, next) {
29
- if (isPlatformServer(this._platformId) && this._engine === null) {
30
- return next(state, event);
31
- }
32
- // We cast to `string[]` here as we're sure that this option has been
33
- // transformed by the `storageOptionsFactory` function that provided token
34
- /** @type {?} */
35
- const keys = (/** @type {?} */ (this._options.key));
36
- /** @type {?} */
37
- const matches = actionMatcher(event);
38
- /** @type {?} */
39
- const isInitAction = matches(InitState);
40
- /** @type {?} */
41
- const isUpdateAction = matches(UpdateState);
42
- /** @type {?} */
43
- const isInitOrUpdateAction = isInitAction || isUpdateAction;
44
- /** @type {?} */
45
- let hasMigration = false;
46
- if (isInitOrUpdateAction) {
47
- for (const key of keys) {
48
- // We're checking what states have been added by NGXS and if any of these states should be handled by
49
- // the storage plugin. For instance, we only want to deserialize the `auth` state, NGXS has added
50
- // the `user` state, the storage plugin will be rerun and will do redundant deserialization.
51
- if (isUpdateAction && event.addedStates && !event.addedStates.hasOwnProperty(key)) {
52
- continue;
53
- }
54
- /** @type {?} */
55
- const isMaster = key === DEFAULT_STATE_KEY;
56
- /** @type {?} */
57
- let val = this._engine.getItem((/** @type {?} */ (key)));
58
- if (val !== 'undefined' && val != null) {
59
- try {
60
- /** @type {?} */
61
- const newVal = (/** @type {?} */ (this._options.deserialize))(val);
62
- val = (/** @type {?} */ (this._options.afterDeserialize))(newVal, key);
63
- }
64
- catch (e) {
65
- // Caretaker note: we have still left the `typeof` condition in order to avoid
66
- // creating a breaking change for projects that still use the View Engine.
67
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
68
- console.error(`Error ocurred while deserializing the ${key} store value, falling back to empty object, the value obtained from the store: `, val);
69
- }
70
- val = {};
71
- }
72
- if (this._options.migrations) {
73
- this._options.migrations.forEach((/**
74
- * @param {?} strategy
75
- * @return {?}
76
- */
77
- strategy => {
78
- /** @type {?} */
79
- const versionMatch = strategy.version === getValue(val, strategy.versionKey || 'version');
80
- /** @type {?} */
81
- const keyMatch = (!strategy.key && isMaster) || strategy.key === key;
82
- if (versionMatch && keyMatch) {
83
- val = strategy.migrate(val);
84
- hasMigration = true;
85
- }
86
- }));
87
- }
88
- if (!isMaster) {
89
- state = setValue(state, (/** @type {?} */ (key)), val);
90
- }
91
- else {
92
- state = Object.assign({}, state, val);
93
- }
94
- }
95
- }
96
- }
97
- return next(state, event).pipe(tap((/**
98
- * @param {?} nextState
99
- * @return {?}
100
- */
101
- nextState => {
102
- if (!isInitOrUpdateAction || (isInitOrUpdateAction && hasMigration)) {
103
- for (const key of keys) {
104
- /** @type {?} */
105
- let val = nextState;
106
- if (key !== DEFAULT_STATE_KEY) {
107
- val = getValue(nextState, (/** @type {?} */ (key)));
108
- }
109
- try {
110
- /** @type {?} */
111
- const newVal = (/** @type {?} */ (this._options.beforeSerialize))(val, key);
112
- this._engine.setItem((/** @type {?} */ (key)), (/** @type {?} */ (this._options.serialize))(newVal));
113
- }
114
- catch (e) {
115
- // Caretaker note: we have still left the `typeof` condition in order to avoid
116
- // creating a breaking change for projects that still use the View Engine.
117
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
118
- console.error(`Error ocurred while serializing the ${key} store value, value not updated, the value obtained from the store: `, val);
119
- }
120
- }
121
- }
122
- }
123
- })));
124
- }
125
- }
126
- NgxsStoragePlugin.decorators = [
127
- { type: Injectable }
128
- ];
129
- /** @nocollapse */
130
- NgxsStoragePlugin.ctorParameters = () => [
131
- { type: undefined, decorators: [{ type: Inject, args: [NGXS_STORAGE_PLUGIN_OPTIONS,] }] },
132
- { type: undefined, decorators: [{ type: Inject, args: [STORAGE_ENGINE,] }] },
133
- { type: String, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
134
- ];
135
- if (false) {
136
- /**
137
- * @type {?}
138
- * @private
139
- */
140
- NgxsStoragePlugin.prototype._options;
141
- /**
142
- * @type {?}
143
- * @private
144
- */
145
- NgxsStoragePlugin.prototype._engine;
146
- /**
147
- * @type {?}
148
- * @private
149
- */
150
- NgxsStoragePlugin.prototype._platformId;
151
- }
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5wbHVnaW4uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4cy9zdG9yYWdlLXBsdWdpbi8iLCJzb3VyY2VzIjpbInNyYy9zdG9yYWdlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFFTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLFNBQVMsRUFDVCxXQUFXLEVBQ1gsYUFBYSxFQUVkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBR0wsY0FBYyxFQUNkLDJCQUEyQixFQUM1QixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFTaEQsTUFBTSxPQUFPLGlCQUFpQjs7Ozs7O0lBQzVCLFlBQytDLFFBQWtDLEVBQy9DLE9BQXNCLEVBQ3pCLFdBQW1CO1FBRkgsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFDL0MsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtJQUMvQyxDQUFDOzs7Ozs7O0lBRUosTUFBTSxDQUFDLEtBQVUsRUFBRSxLQUFVLEVBQUUsSUFBc0I7UUFDbkQsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDL0QsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzNCOzs7O2NBSUssSUFBSSxHQUFHLG1CQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFZOztjQUNwQyxPQUFPLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQzs7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TSxHQUFHLG1CQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzt3QkFDdkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQUEsR0FBRyxFQUFDLEVBQUUsbUJBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3FCQUM5RDtvQkFBQyxPQUFPLENBQUMsRUFBRTt3QkFDViw4RUFBOEU7d0JBQzlFLDBFQUEwRTt3QkFDMUUsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxFQUFFOzRCQUNqRCxPQUFPLENBQUMsS0FBSyxDQUNYLHVDQUF1QyxHQUFHLHNFQUFzRSxFQUNoSCxHQUFHLENBQ0osQ0FBQzt5QkFDSDtxQkFDRjtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxFQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7OztZQWxHRixVQUFVOzs7OzRDQUdOLE1BQU0sU0FBQywyQkFBMkI7NENBQ2xDLE1BQU0sU0FBQyxjQUFjO3lDQUNyQixNQUFNLFNBQUMsV0FBVzs7Ozs7OztJQUZuQixxQ0FBK0U7Ozs7O0lBQy9FLG9DQUFzRDs7Ozs7SUFDdEQsd0NBQWdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUExBVEZPUk1fSUQsIEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBOZ3hzUGx1Z2luLFxyXG4gIHNldFZhbHVlLFxyXG4gIGdldFZhbHVlLFxyXG4gIEluaXRTdGF0ZSxcclxuICBVcGRhdGVTdGF0ZSxcclxuICBhY3Rpb25NYXRjaGVyLFxyXG4gIE5neHNOZXh0UGx1Z2luRm5cclxufSBmcm9tICdAbmd4cy9zdG9yZSc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU3RvcmFnZUVuZ2luZSxcclxuICBOZ3hzU3RvcmFnZVBsdWdpbk9wdGlvbnMsXHJcbiAgU1RPUkFHRV9FTkdJTkUsXHJcbiAgTkdYU19TVE9SQUdFX1BMVUdJTl9PUFRJT05TXHJcbn0gZnJvbSAnLi9zeW1ib2xzJztcclxuaW1wb3J0IHsgREVGQVVMVF9TVEFURV9LRVkgfSBmcm9tICcuL2ludGVybmFscyc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIFdpbGwgYmUgcHJvdmlkZWQgdGhyb3VnaCBUZXJzZXIgZ2xvYmFsIGRlZmluaXRpb25zIGJ5IEFuZ3VsYXIgQ0xJXHJcbiAqIGR1cmluZyB0aGUgcHJvZHVjdGlvbiBidWlsZC4gVGhpcyBpcyBob3cgQW5ndWxhciBkb2VzIHRyZWUtc2hha2luZyBpbnRlcm5hbGx5LlxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBuZ0Rldk1vZGU6IGJvb2xlYW47XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOZ3hzU3RvcmFnZVBsdWdpbiBpbXBsZW1lbnRzIE5neHNQbHVnaW4ge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChOR1hTX1NUT1JBR0VfUExVR0lOX09QVElPTlMpIHByaXZhdGUgX29wdGlvbnM6IE5neHNTdG9yYWdlUGx1Z2luT3B0aW9ucyxcclxuICAgIEBJbmplY3QoU1RPUkFHRV9FTkdJTkUpIHByaXZhdGUgX2VuZ2luZTogU3RvcmFnZUVuZ2luZSxcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgX3BsYXRmb3JtSWQ6IHN0cmluZ1xyXG4gICkge31cclxuXHJcbiAgaGFuZGxlKHN0YXRlOiBhbnksIGV2ZW50OiBhbnksIG5leHQ6IE5neHNOZXh0UGx1Z2luRm4pIHtcclxuICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMuX3BsYXRmb3JtSWQpICYmIHRoaXMuX2VuZ2luZSA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbmV4dChzdGF0ZSwgZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFdlIGNhc3QgdG8gYHN0cmluZ1tdYCBoZXJlIGFzIHdlJ3JlIHN1cmUgdGhhdCB0aGlzIG9wdGlvbiBoYXMgYmVlblxyXG4gICAgLy8gdHJhbnNmb3JtZWQgYnkgdGhlIGBzdG9yYWdlT3B0aW9uc0ZhY3RvcnlgIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZWQgdG9rZW5cclxuICAgIGNvbnN0IGtleXMgPSB0aGlzLl9vcHRpb25zLmtleSBhcyBzdHJpbmdbXTtcclxuICAgIGNvbnN0IG1hdGNoZXMgPSBhY3Rpb25NYXRjaGVyKGV2ZW50KTtcclxuICAgIGNvbnN0IGlzSW5pdEFjdGlvbiA9IG1hdGNoZXMoSW5pdFN0YXRlKTtcclxuICAgIGNvbnN0IGlzVXBkYXRlQWN0aW9uID0gbWF0Y2hlcyhVcGRhdGVTdGF0ZSk7XHJcbiAgICBjb25zdCBpc0luaXRPclVwZGF0ZUFjdGlvbiA9IGlzSW5pdEFjdGlvbiB8fCBpc1VwZGF0ZUFjdGlvbjtcclxuICAgIGxldCBoYXNNaWdyYXRpb24gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoaXNJbml0T3JVcGRhdGVBY3Rpb24pIHtcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xyXG4gICAgICAgIC8vIFdlJ3JlIGNoZWNraW5nIHdoYXQgc3RhdGVzIGhhdmUgYmVlbiBhZGRlZCBieSBOR1hTIGFuZCBpZiBhbnkgb2YgdGhlc2Ugc3RhdGVzIHNob3VsZCBiZSBoYW5kbGVkIGJ5XHJcbiAgICAgICAgLy8gdGhlIHN0b3JhZ2UgcGx1Z2luLiBGb3IgaW5zdGFuY2UsIHdlIG9ubHkgd2FudCB0byBkZXNlcmlhbGl6ZSB0aGUgYGF1dGhgIHN0YXRlLCBOR1hTIGhhcyBhZGRlZFxyXG4gICAgICAgIC8vIHRoZSBgdXNlcmAgc3RhdGUsIHRoZSBzdG9yYWdlIHBsdWdpbiB3aWxsIGJlIHJlcnVuIGFuZCB3aWxsIGRvIHJlZHVuZGFudCBkZXNlcmlhbGl6YXRpb24uXHJcbiAgICAgICAgaWYgKGlzVXBkYXRlQWN0aW9uICYmIGV2ZW50LmFkZGVkU3RhdGVzICYmICFldmVudC5hZGRlZFN0YXRlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlzTWFzdGVyID0ga2V5ID09PSBERUZBVUxUX1NUQVRFX0tFWTtcclxuICAgICAgICBsZXQgdmFsOiBhbnkgPSB0aGlzLl9lbmdpbmUuZ2V0SXRlbShrZXkhKTtcclxuXHJcbiAgICAgICAgaWYgKHZhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsICE9IG51bGwpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuX29wdGlvbnMuZGVzZXJpYWxpemUhKHZhbCk7XHJcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuX29wdGlvbnMuYWZ0ZXJEZXNlcmlhbGl6ZSEobmV3VmFsLCBrZXkpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBDYXJldGFrZXIgbm90ZTogd2UgaGF2ZSBzdGlsbCBsZWZ0IHRoZSBgdHlwZW9mYCBjb25kaXRpb24gaW4gb3JkZXIgdG8gYXZvaWRcclxuICAgICAgICAgICAgLy8gY3JlYXRpbmcgYSBicmVha2luZyBjaGFuZ2UgZm9yIHByb2plY3RzIHRoYXQgc3RpbGwgdXNlIHRoZSBWaWV3IEVuZ2luZS5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgRXJyb3Igb2N1cnJlZCB3aGlsZSBkZXNlcmlhbGl6aW5nIHRoZSAke2tleX0gc3RvcmUgdmFsdWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBvYmplY3QsIHRoZSB2YWx1ZSBvYnRhaW5lZCBmcm9tIHRoZSBzdG9yZTogYCxcclxuICAgICAgICAgICAgICAgIHZhbFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFsID0ge307XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMubWlncmF0aW9ucykge1xyXG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zLm1pZ3JhdGlvbnMuZm9yRWFjaChzdHJhdGVneSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbk1hdGNoID1cclxuICAgICAgICAgICAgICAgIHN0cmF0ZWd5LnZlcnNpb24gPT09IGdldFZhbHVlKHZhbCwgc3RyYXRlZ3kudmVyc2lvbktleSB8fCAndmVyc2lvbicpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGtleU1hdGNoID0gKCFzdHJhdGVneS5rZXkgJiYgaXNNYXN0ZXIpIHx8IHN0cmF0ZWd5LmtleSA9PT0ga2V5O1xyXG4gICAgICAgICAgICAgIGlmICh2ZXJzaW9uTWF0Y2ggJiYga2V5TWF0Y2gpIHtcclxuICAgICAgICAgICAgICAgIHZhbCA9IHN0cmF0ZWd5Lm1pZ3JhdGUodmFsKTtcclxuICAgICAgICAgICAgICAgIGhhc01pZ3JhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIWlzTWFzdGVyKSB7XHJcbiAgICAgICAgICAgIHN0YXRlID0gc2V0VmFsdWUoc3RhdGUsIGtleSEsIHZhbCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdGF0ZSA9IHsgLi4uc3RhdGUsIC4uLnZhbCB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXh0KHN0YXRlLCBldmVudCkucGlwZShcclxuICAgICAgdGFwKG5leHRTdGF0ZSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0luaXRPclVwZGF0ZUFjdGlvbiB8fCAoaXNJbml0T3JVcGRhdGVBY3Rpb24gJiYgaGFzTWlncmF0aW9uKSkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xyXG4gICAgICAgICAgICBsZXQgdmFsID0gbmV4dFN0YXRlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGtleSAhPT0gREVGQVVMVF9TVEFURV9LRVkpIHtcclxuICAgICAgICAgICAgICB2YWwgPSBnZXRWYWx1ZShuZXh0U3RhdGUsIGtleSEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuX29wdGlvbnMuYmVmb3JlU2VyaWFsaXplISh2YWwsIGtleSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fZW5naW5lLnNldEl0ZW0oa2V5ISwgdGhpcy5fb3B0aW9ucy5zZXJpYWxpemUhKG5ld1ZhbCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgLy8gQ2FyZXRha2VyIG5vdGU6IHdlIGhhdmUgc3RpbGwgbGVmdCB0aGUgYHR5cGVvZmAgY29uZGl0aW9uIGluIG9yZGVyIHRvIGF2b2lkXHJcbiAgICAgICAgICAgICAgLy8gY3JlYXRpbmcgYSBicmVha2luZyBjaGFuZ2UgZm9yIHByb2plY3RzIHRoYXQgc3RpbGwgdXNlIHRoZSBWaWV3IEVuZ2luZS5cclxuICAgICAgICAgICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgICBgRXJyb3Igb2N1cnJlZCB3aGlsZSBzZXJpYWxpemluZyB0aGUgJHtrZXl9IHN0b3JlIHZhbHVlLCB2YWx1ZSBub3QgdXBkYXRlZCwgdGhlIHZhbHVlIG9idGFpbmVkIGZyb20gdGhlIHN0b3JlOiBgLFxyXG4gICAgICAgICAgICAgICAgICB2YWxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import { PLATFORM_ID, Inject, Injectable } from '@angular/core';
6
+ import { isPlatformServer } from '@angular/common';
7
+ import { setValue, getValue, InitState, UpdateState, actionMatcher } from '@ngxs/store';
8
+ import { tap } from 'rxjs/operators';
9
+ import { STORAGE_ENGINE, NGXS_STORAGE_PLUGIN_OPTIONS } from './symbols';
10
+ import { DEFAULT_STATE_KEY } from './internals';
11
+ export class NgxsStoragePlugin {
12
+ /**
13
+ * @param {?} _options
14
+ * @param {?} _engine
15
+ * @param {?} _platformId
16
+ */
17
+ constructor(_options, _engine, _platformId) {
18
+ this._options = _options;
19
+ this._engine = _engine;
20
+ this._platformId = _platformId;
21
+ // We cast to `string[]` here as we're sure that this option has been
22
+ // transformed by the `storageOptionsFactory` function that provided token.
23
+ this._keys = (/** @type {?} */ (this._options.key));
24
+ // We default to `[DEFAULT_STATE_KEY]` if the user explicitly does not provide the `key` option.
25
+ this._usesDefaultStateKey = this._keys.length === 1 && this._keys[0] === DEFAULT_STATE_KEY;
26
+ }
27
+ /**
28
+ * @param {?} state
29
+ * @param {?} event
30
+ * @param {?} next
31
+ * @return {?}
32
+ */
33
+ handle(state, event, next) {
34
+ if (isPlatformServer(this._platformId) && this._engine === null) {
35
+ return next(state, event);
36
+ }
37
+ /** @type {?} */
38
+ const matches = actionMatcher(event);
39
+ /** @type {?} */
40
+ const isInitAction = matches(InitState);
41
+ /** @type {?} */
42
+ const isUpdateAction = matches(UpdateState);
43
+ /** @type {?} */
44
+ const isInitOrUpdateAction = isInitAction || isUpdateAction;
45
+ /** @type {?} */
46
+ let hasMigration = false;
47
+ if (isInitOrUpdateAction) {
48
+ /** @type {?} */
49
+ const addedStates = isUpdateAction && event.addedStates;
50
+ for (const key of this._keys) {
51
+ // We're checking what states have been added by NGXS and if any of these states should be handled by
52
+ // the storage plugin. For instance, we only want to deserialize the `auth` state, NGXS has added
53
+ // the `user` state, the storage plugin will be rerun and will do redundant deserialization.
54
+ // `usesDefaultStateKey` is necessary to check since `event.addedStates` never contains `@@STATE`.
55
+ if (!this._usesDefaultStateKey && addedStates && !addedStates.hasOwnProperty(key)) {
56
+ continue;
57
+ }
58
+ /** @type {?} */
59
+ let storedValue = this._engine.getItem((/** @type {?} */ (key)));
60
+ if (storedValue !== 'undefined' && storedValue != null) {
61
+ try {
62
+ /** @type {?} */
63
+ const newVal = (/** @type {?} */ (this._options.deserialize))(storedValue);
64
+ storedValue = (/** @type {?} */ (this._options.afterDeserialize))(newVal, key);
65
+ }
66
+ catch (_a) {
67
+ // Caretaker note: we have still left the `typeof` condition in order to avoid
68
+ // creating a breaking change for projects that still use the View Engine.
69
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
70
+ console.error(`Error ocurred while deserializing the ${key} store value, falling back to empty object, the value obtained from the store: `, storedValue);
71
+ }
72
+ storedValue = {};
73
+ }
74
+ if (this._options.migrations) {
75
+ this._options.migrations.forEach((/**
76
+ * @param {?} strategy
77
+ * @return {?}
78
+ */
79
+ strategy => {
80
+ /** @type {?} */
81
+ const versionMatch = strategy.version === getValue(storedValue, strategy.versionKey || 'version');
82
+ /** @type {?} */
83
+ const keyMatch = (!strategy.key && this._usesDefaultStateKey) || strategy.key === key;
84
+ if (versionMatch && keyMatch) {
85
+ storedValue = strategy.migrate(storedValue);
86
+ hasMigration = true;
87
+ }
88
+ }));
89
+ }
90
+ if (!this._usesDefaultStateKey) {
91
+ state = setValue(state, (/** @type {?} */ (key)), storedValue);
92
+ }
93
+ else {
94
+ // The `UpdateState` action is dispatched whenever the feature state is added.
95
+ // The below condition is met only when the `UpdateState` is dispatched.
96
+ // Let's assume that we have 2 states `counter` and `@ngxs/router-plugin` state.
97
+ // `CounterState` is provided on the root level when calling `NgxsModule.forRoot()`
98
+ // and `@ngxs/router-plugin` is provided as a feature state.
99
+ // The storage plugin may save the `counter` state value as `10` before.
100
+ // The `CounterState` may implement the `ngxsOnInit` hook and call `ctx.setState(999)`.
101
+ // The storage plugin will re-hydrate the whole state when the `RouterState` is registered,
102
+ // and the `counter` state will again equal `10` (not `999`).
103
+ if (storedValue && addedStates && Object.keys(addedStates).length > 0) {
104
+ storedValue = Object.keys(addedStates).reduce((/**
105
+ * @param {?} accumulator
106
+ * @param {?} addedState
107
+ * @return {?}
108
+ */
109
+ (accumulator, addedState) => {
110
+ // The `storedValue` may equal the whole state (when the default state key is used).
111
+ // If `addedStates` contains only `router` then we want to merge the state only
112
+ // with the `router` value.
113
+ // Let's assume that the `storedValue` is an object:
114
+ // `{ counter: 10, router: {...} }`
115
+ // This will pick only the `router` object from the `storedValue` and `counter`
116
+ // state will not be re-hydrated unnecessary.
117
+ if (storedValue.hasOwnProperty(addedState)) {
118
+ accumulator[addedState] = storedValue[addedState];
119
+ }
120
+ return accumulator;
121
+ }), (/** @type {?} */ ({})));
122
+ }
123
+ state = Object.assign({}, state, storedValue);
124
+ }
125
+ }
126
+ }
127
+ }
128
+ return next(state, event).pipe(tap((/**
129
+ * @param {?} nextState
130
+ * @return {?}
131
+ */
132
+ nextState => {
133
+ if (!isInitOrUpdateAction || (isInitOrUpdateAction && hasMigration)) {
134
+ for (const key of this._keys) {
135
+ /** @type {?} */
136
+ let val = nextState;
137
+ if (key !== DEFAULT_STATE_KEY) {
138
+ val = getValue(nextState, (/** @type {?} */ (key)));
139
+ }
140
+ try {
141
+ /** @type {?} */
142
+ const newVal = (/** @type {?} */ (this._options.beforeSerialize))(val, key);
143
+ this._engine.setItem((/** @type {?} */ (key)), (/** @type {?} */ (this._options.serialize))(newVal));
144
+ }
145
+ catch (error) {
146
+ // Caretaker note: we have still left the `typeof` condition in order to avoid
147
+ // creating a breaking change for projects that still use the View Engine.
148
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
149
+ if (error &&
150
+ (error.name === 'QuotaExceededError' ||
151
+ error.name === 'NS_ERROR_DOM_QUOTA_REACHED')) {
152
+ console.error(`The ${key} store value exceeds the browser storage quota: `, val);
153
+ }
154
+ else {
155
+ console.error(`Error ocurred while serializing the ${key} store value, value not updated, the value obtained from the store: `, val);
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
161
+ })));
162
+ }
163
+ }
164
+ NgxsStoragePlugin.decorators = [
165
+ { type: Injectable }
166
+ ];
167
+ /** @nocollapse */
168
+ NgxsStoragePlugin.ctorParameters = () => [
169
+ { type: undefined, decorators: [{ type: Inject, args: [NGXS_STORAGE_PLUGIN_OPTIONS,] }] },
170
+ { type: undefined, decorators: [{ type: Inject, args: [STORAGE_ENGINE,] }] },
171
+ { type: String, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
172
+ ];
173
+ if (false) {
174
+ /**
175
+ * @type {?}
176
+ * @private
177
+ */
178
+ NgxsStoragePlugin.prototype._keys;
179
+ /**
180
+ * @type {?}
181
+ * @private
182
+ */
183
+ NgxsStoragePlugin.prototype._usesDefaultStateKey;
184
+ /**
185
+ * @type {?}
186
+ * @private
187
+ */
188
+ NgxsStoragePlugin.prototype._options;
189
+ /**
190
+ * @type {?}
191
+ * @private
192
+ */
193
+ NgxsStoragePlugin.prototype._engine;
194
+ /**
195
+ * @type {?}
196
+ * @private
197
+ */
198
+ NgxsStoragePlugin.prototype._platformId;
199
+ }
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5wbHVnaW4uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4cy9zdG9yYWdlLXBsdWdpbi8iLCJzb3VyY2VzIjpbInNyYy9zdG9yYWdlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRW5ELE9BQU8sRUFFTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLFNBQVMsRUFDVCxXQUFXLEVBQ1gsYUFBYSxFQUVkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBR0wsY0FBYyxFQUNkLDJCQUEyQixFQUM1QixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFTaEQsTUFBTSxPQUFPLGlCQUFpQjs7Ozs7O0lBUTVCLFlBQytDLFFBQWtDLEVBQy9DLE9BQXNCLEVBQ3pCLFdBQW1CO1FBRkgsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFDL0MsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBUTs7O1FBUjFDLFVBQUssR0FBRyxtQkFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBWSxDQUFDOztRQUV0Qyx5QkFBb0IsR0FDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssaUJBQWlCLENBQUM7SUFNOUQsQ0FBQzs7Ozs7OztJQUVKLE1BQU0sQ0FBQyxLQUFVLEVBQUUsS0FBVSxFQUFFLElBQXNCO1FBQ25ELElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FB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USxDQUFDLFNBQVMsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7cUJBQzlEO29CQUFDLE9BQU8sS0FBSyxFQUFFO3dCQUNkLDhFQUE4RTt3QkFDOUUsMEVBQTBFO3dCQUMxRSxJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLEVBQUU7NEJBQ2pELElBQ0UsS0FBSztnQ0FDTCxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssb0JBQW9CO29DQUNsQyxLQUFLLENBQUMsSUFBSSxLQUFLLDRCQUE0QixDQUFDLEVBQzlDO2dDQUNBLE9BQU8sQ0FBQyxLQUFLLENBQ1gsT0FBTyxHQUFHLGtEQUFrRCxFQUM1RCxHQUFHLENBQ0osQ0FBQzs2QkFDSDtpQ0FBTTtnQ0FDTCxPQUFPLENBQUMsS0FBSyxDQUNYLHVDQUF1QyxHQUFHLHNFQUFzRSxFQUNoSCxHQUFHLENBQ0osQ0FBQzs2QkFDSDt5QkFDRjtxQkFDRjtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxFQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7OztZQTdJRixVQUFVOzs7OzRDQVVOLE1BQU0sU0FBQywyQkFBMkI7NENBQ2xDLE1BQU0sU0FBQyxjQUFjO3lDQUNyQixNQUFNLFNBQUMsV0FBVzs7Ozs7OztJQVJyQixrQ0FBOEM7Ozs7O0lBRTlDLGlEQUNpRTs7Ozs7SUFHL0QscUNBQStFOzs7OztJQUMvRSxvQ0FBc0Q7Ozs7O0lBQ3RELHdDQUFnRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBMQVRGT1JNX0lELCBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGxhaW5PYmplY3QgfSBmcm9tICdAbmd4cy9zdG9yZS9pbnRlcm5hbHMnO1xuaW1wb3J0IHtcbiAgTmd4c1BsdWdpbixcbiAgc2V0VmFsdWUsXG4gIGdldFZhbHVlLFxuICBJbml0U3RhdGUsXG4gIFVwZGF0ZVN0YXRlLFxuICBhY3Rpb25NYXRjaGVyLFxuICBOZ3hzTmV4dFBsdWdpbkZuXG59IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgU3RvcmFnZUVuZ2luZSxcbiAgTmd4c1N0b3JhZ2VQbHVnaW5PcHRpb25zLFxuICBTVE9SQUdFX0VOR0lORSxcbiAgTkdYU19TVE9SQUdFX1BMVUdJTl9PUFRJT05TXG59IGZyb20gJy4vc3ltYm9scyc7XG5pbXBvcnQgeyBERUZBVUxUX1NUQVRFX0tFWSB9IGZyb20gJy4vaW50ZXJuYWxzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gV2lsbCBiZSBwcm92aWRlZCB0aHJvdWdoIFRlcnNlciBnbG9iYWwgZGVmaW5pdGlvbnMgYnkgQW5ndWxhciBDTElcbiAqIGR1cmluZyB0aGUgcHJvZHVjdGlvbiBidWlsZC4gVGhpcyBpcyBob3cgQW5ndWxhciBkb2VzIHRyZWUtc2hha2luZyBpbnRlcm5hbGx5LlxuICovXG5kZWNsYXJlIGNvbnN0IG5nRGV2TW9kZTogYm9vbGVhbjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5neHNTdG9yYWdlUGx1Z2luIGltcGxlbWVudHMgTmd4c1BsdWdpbiB7XG4gIC8vIFdlIGNhc3QgdG8gYHN0cmluZ1tdYCBoZXJlIGFzIHdlJ3JlIHN1cmUgdGhhdCB0aGlzIG9wdGlvbiBoYXMgYmVlblxuICAvLyB0cmFuc2Zvcm1lZCBieSB0aGUgYHN0b3JhZ2VPcHRpb25zRmFjdG9yeWAgZnVuY3Rpb24gdGhhdCBwcm92aWRlZCB0b2tlbi5cbiAgcHJpdmF0ZSBfa2V5cyA9IHRoaXMuX29wdGlvbnMua2V5IGFzIHN0cmluZ1tdO1xuICAvLyBXZSBkZWZhdWx0IHRvIGBbREVGQVVMVF9TVEFURV9LRVldYCBpZiB0aGUgdXNlciBleHBsaWNpdGx5IGRvZXMgbm90IHByb3ZpZGUgdGhlIGBrZXlgIG9wdGlvbi5cbiAgcHJpdmF0ZSBfdXNlc0RlZmF1bHRTdGF0ZUtleSA9XG4gICAgdGhpcy5fa2V5cy5sZW5ndGggPT09IDEgJiYgdGhpcy5fa2V5c1swXSA9PT0gREVGQVVMVF9TVEFURV9LRVk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChOR1hTX1NUT1JBR0VfUExVR0lOX09QVElPTlMpIHByaXZhdGUgX29wdGlvbnM6IE5neHNTdG9yYWdlUGx1Z2luT3B0aW9ucyxcbiAgICBASW5qZWN0KFNUT1JBR0VfRU5HSU5FKSBwcml2YXRlIF9lbmdpbmU6IFN0b3JhZ2VFbmdpbmUsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBfcGxhdGZvcm1JZDogc3RyaW5nXG4gICkge31cblxuICBoYW5kbGUoc3RhdGU6IGFueSwgZXZlbnQ6IGFueSwgbmV4dDogTmd4c05leHRQbHVnaW5Gbikge1xuICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMuX3BsYXRmb3JtSWQpICYmIHRoaXMuX2VuZ2luZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5leHQoc3RhdGUsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaGVzID0gYWN0aW9uTWF0Y2hlcihldmVudCk7XG4gICAgY29uc3QgaXNJbml0QWN0aW9uID0gbWF0Y2hlcyhJbml0U3RhdGUpO1xuICAgIGNvbnN0IGlzVXBkYXRlQWN0aW9uID0gbWF0Y2hlcyhVcGRhdGVTdGF0ZSk7XG4gICAgY29uc3QgaXNJbml0T3JVcGRhdGVBY3Rpb24gPSBpc0luaXRBY3Rpb24gfHwgaXNVcGRhdGVBY3Rpb247XG4gICAgbGV0IGhhc01pZ3JhdGlvbiA9IGZhbHNlO1xuXG4gICAgaWYgKGlzSW5pdE9yVXBkYXRlQWN0aW9uKSB7XG4gICAgICBjb25zdCBhZGRlZFN0YXRlcyA9IGlzVXBkYXRlQWN0aW9uICYmIGV2ZW50LmFkZGVkU3RhdGVzO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLl9rZXlzKSB7XG4gICAgICAgIC8vIFdlJ3JlIGNoZWNraW5nIHdoYXQgc3RhdGVzIGhhdmUgYmVlbiBhZGRlZCBieSBOR1hTIGFuZCBpZiBhbnkgb2YgdGhlc2Ugc3RhdGVzIHNob3VsZCBiZSBoYW5kbGVkIGJ5XG4gICAgICAgIC8vIHRoZSBzdG9yYWdlIHBsdWdpbi4gRm9yIGluc3RhbmNlLCB3ZSBvbmx5IHdhbnQgdG8gZGVzZXJpYWxpemUgdGhlIGBhdXRoYCBzdGF0ZSwgTkdYUyBoYXMgYWRkZWRcbiAgICAgICAgLy8gdGhlIGB1c2VyYCBzdGF0ZSwgdGhlIHN0b3JhZ2UgcGx1Z2luIHdpbGwgYmUgcmVydW4gYW5kIHdpbGwgZG8gcmVkdW5kYW50IGRlc2VyaWFsaXphdGlvbi5cbiAgICAgICAgLy8gYHVzZXNEZWZhdWx0U3RhdGVLZXlgIGlzIG5lY2Vzc2FyeSB0byBjaGVjayBzaW5jZSBgZXZlbnQuYWRkZWRTdGF0ZXNgIG5ldmVyIGNvbnRhaW5zIGBAQFNUQVRFYC5cbiAgICAgICAgaWYgKCF0aGlzLl91c2VzRGVmYXVsdFN0YXRlS2V5ICYmIGFkZGVkU3RhdGVzICYmICFhZGRlZFN0YXRlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RvcmVkVmFsdWU6IGFueSA9IHRoaXMuX2VuZ2luZS5nZXRJdGVtKGtleSEpO1xuXG4gICAgICAgIGlmIChzdG9yZWRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc3RvcmVkVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLl9vcHRpb25zLmRlc2VyaWFsaXplIShzdG9yZWRWYWx1ZSk7XG4gICAgICAgICAgICBzdG9yZWRWYWx1ZSA9IHRoaXMuX29wdGlvbnMuYWZ0ZXJEZXNlcmlhbGl6ZSEobmV3VmFsLCBrZXkpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gQ2FyZXRha2VyIG5vdGU6IHdlIGhhdmUgc3RpbGwgbGVmdCB0aGUgYHR5cGVvZmAgY29uZGl0aW9uIGluIG9yZGVyIHRvIGF2b2lkXG4gICAgICAgICAgICAvLyBjcmVhdGluZyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgcHJvamVjdHMgdGhhdCBzdGlsbCB1c2UgdGhlIFZpZXcgRW5naW5lLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGBFcnJvciBvY3VycmVkIHdoaWxlIGRlc2VyaWFsaXppbmcgdGhlICR7a2V5fSBzdG9yZSB2YWx1ZSwgZmFsbGluZyBiYWNrIHRvIGVtcHR5IG9iamVjdCwgdGhlIHZhbHVlIG9idGFpbmVkIGZyb20gdGhlIHN0b3JlOiBgLFxuICAgICAgICAgICAgICAgIHN0b3JlZFZhbHVlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdG9yZWRWYWx1ZSA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLm1pZ3JhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMubWlncmF0aW9ucy5mb3JFYWNoKHN0cmF0ZWd5ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbk1hdGNoID1cbiAgICAgICAgICAgICAgICBzdHJhdGVneS52ZXJzaW9uID09PSBnZXRWYWx1ZShzdG9yZWRWYWx1ZSwgc3RyYXRlZ3kudmVyc2lvbktleSB8fCAndmVyc2lvbicpO1xuICAgICAgICAgICAgICBjb25zdCBrZXlNYXRjaCA9XG4gICAgICAgICAgICAgICAgKCFzdHJhdGVneS5rZXkgJiYgdGhpcy5fdXNlc0RlZmF1bHRTdGF0ZUtleSkgfHwgc3RyYXRlZ3kua2V5ID09PSBrZXk7XG4gICAgICAgICAgICAgIGlmICh2ZXJzaW9uTWF0Y2ggJiYga2V5TWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBzdG9yZWRWYWx1ZSA9IHN0cmF0ZWd5Lm1pZ3JhdGUoc3RvcmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIGhhc01pZ3JhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy5fdXNlc0RlZmF1bHRTdGF0ZUtleSkge1xuICAgICAgICAgICAgc3RhdGUgPSBzZXRWYWx1ZShzdGF0ZSwga2V5ISwgc3RvcmVkVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGUgYFVwZGF0ZVN0YXRlYCBhY3Rpb24gaXMgZGlzcGF0Y2hlZCB3aGVuZXZlciB0aGUgZmVhdHVyZSBzdGF0ZSBpcyBhZGRlZC5cbiAgICAgICAgICAgIC8vIFRoZSBiZWxvdyBjb25kaXRpb24gaXMgbWV0IG9ubHkgd2hlbiB0aGUgYFVwZGF0ZVN0YXRlYCBpcyBkaXNwYXRjaGVkLlxuICAgICAgICAgICAgLy8gTGV0J3MgYXNzdW1lIHRoYXQgd2UgaGF2ZSAyIHN0YXRlcyBgY291bnRlcmAgYW5kIGBAbmd4cy9yb3V0ZXItcGx1Z2luYCBzdGF0ZS5cbiAgICAgICAgICAgIC8vIGBDb3VudGVyU3RhdGVgIGlzIHByb3ZpZGVkIG9uIHRoZSByb290IGxldmVsIHdoZW4gY2FsbGluZyBgTmd4c01vZHVsZS5mb3JSb290KClgXG4gICAgICAgICAgICAvLyBhbmQgYEBuZ3hzL3JvdXRlci1wbHVnaW5gIGlzIHByb3ZpZGVkIGFzIGEgZmVhdHVyZSBzdGF0ZS5cbiAgICAgICAgICAgIC8vIFRoZSBzdG9yYWdlIHBsdWdpbiBtYXkgc2F2ZSB0aGUgYGNvdW50ZXJgIHN0YXRlIHZhbHVlIGFzIGAxMGAgYmVmb3JlLlxuICAgICAgICAgICAgLy8gVGhlIGBDb3VudGVyU3RhdGVgIG1heSBpbXBsZW1lbnQgdGhlIGBuZ3hzT25Jbml0YCBob29rIGFuZCBjYWxsIGBjdHguc2V0U3RhdGUoOTk5KWAuXG4gICAgICAgICAgICAvLyBUaGUgc3RvcmFnZSBwbHVnaW4gd2lsbCByZS1oeWRyYXRlIHRoZSB3aG9sZSBzdGF0ZSB3aGVuIHRoZSBgUm91dGVyU3RhdGVgIGlzIHJlZ2lzdGVyZWQsXG4gICAgICAgICAgICAvLyBhbmQgdGhlIGBjb3VudGVyYCBzdGF0ZSB3aWxsIGFnYWluIGVxdWFsIGAxMGAgKG5vdCBgOTk5YCkuXG4gICAgICAgICAgICBpZiAoc3RvcmVkVmFsdWUgJiYgYWRkZWRTdGF0ZXMgJiYgT2JqZWN0LmtleXMoYWRkZWRTdGF0ZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgc3RvcmVkVmFsdWUgPSBPYmplY3Qua2V5cyhhZGRlZFN0YXRlcykucmVkdWNlKChhY2N1bXVsYXRvciwgYWRkZWRTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBgc3RvcmVkVmFsdWVgIG1heSBlcXVhbCB0aGUgd2hvbGUgc3RhdGUgKHdoZW4gdGhlIGRlZmF1bHQgc3RhdGUga2V5IGlzIHVzZWQpLlxuICAgICAgICAgICAgICAgIC8vIElmIGBhZGRlZFN0YXRlc2AgY29udGFpbnMgb25seSBgcm91dGVyYCB0aGVuIHdlIHdhbnQgdG8gbWVyZ2UgdGhlIHN0YXRlIG9ubHlcbiAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBgcm91dGVyYCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAvLyBMZXQncyBhc3N1bWUgdGhhdCB0aGUgYHN0b3JlZFZhbHVlYCBpcyBhbiBvYmplY3Q6XG4gICAgICAgICAgICAgICAgLy8gYHsgY291bnRlcjogMTAsIHJvdXRlcjogey4uLn0gfWBcbiAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgcGljayBvbmx5IHRoZSBgcm91dGVyYCBvYmplY3QgZnJvbSB0aGUgYHN0b3JlZFZhbHVlYCBhbmQgYGNvdW50ZXJgXG4gICAgICAgICAgICAgICAgLy8gc3RhdGUgd2lsbCBub3QgYmUgcmUtaHlkcmF0ZWQgdW5uZWNlc3NhcnkuXG4gICAgICAgICAgICAgICAgaWYgKHN0b3JlZFZhbHVlLmhhc093blByb3BlcnR5KGFkZGVkU3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvclthZGRlZFN0YXRlXSA9IHN0b3JlZFZhbHVlW2FkZGVkU3RhdGVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICAgICAgICAgIH0sIDxQbGFpbk9iamVjdD57fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXRlID0geyAuLi5zdGF0ZSwgLi4uc3RvcmVkVmFsdWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChzdGF0ZSwgZXZlbnQpLnBpcGUoXG4gICAgICB0YXAobmV4dFN0YXRlID0+IHtcbiAgICAgICAgaWYgKCFpc0luaXRPclVwZGF0ZUFjdGlvbiB8fCAoaXNJbml0T3JVcGRhdGVBY3Rpb24gJiYgaGFzTWlncmF0aW9uKSkge1xuICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMuX2tleXMpIHtcbiAgICAgICAgICAgIGxldCB2YWwgPSBuZXh0U3RhdGU7XG5cbiAgICAgICAgICAgIGlmIChrZXkgIT09IERFRkFVTFRfU1RBVEVfS0VZKSB7XG4gICAgICAgICAgICAgIHZhbCA9IGdldFZhbHVlKG5leHRTdGF0ZSwga2V5ISk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuX29wdGlvbnMuYmVmb3JlU2VyaWFsaXplISh2YWwsIGtleSk7XG4gICAgICAgICAgICAgIHRoaXMuX2VuZ2luZS5zZXRJdGVtKGtleSEsIHRoaXMuX29wdGlvbnMuc2VyaWFsaXplIShuZXdWYWwpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIENhcmV0YWtlciBub3RlOiB3ZSBoYXZlIHN0aWxsIGxlZnQgdGhlIGB0eXBlb2ZgIGNvbmRpdGlvbiBpbiBvcmRlciB0byBhdm9pZFxuICAgICAgICAgICAgICAvLyBjcmVhdGluZyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgcHJvamVjdHMgdGhhdCBzdGlsbCB1c2UgdGhlIFZpZXcgRW5naW5lLlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgIChlcnJvci5uYW1lID09PSAnUXVvdGFFeGNlZWRlZEVycm9yJyB8fFxuICAgICAgICAgICAgICAgICAgICBlcnJvci5uYW1lID09PSAnTlNfRVJST1JfRE9NX1FVT1RBX1JFQUNIRUQnKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFRoZSAke2tleX0gc3RvcmUgdmFsdWUgZXhjZWVkcyB0aGUgYnJvd3NlciBzdG9yYWdlIHF1b3RhOiBgLFxuICAgICAgICAgICAgICAgICAgICB2YWxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBvY3VycmVkIHdoaWxlIHNlcmlhbGl6aW5nIHRoZSAke2tleX0gc3RvcmUgdmFsdWUsIHZhbHVlIG5vdCB1cGRhdGVkLCB0aGUgdmFsdWUgb2J0YWluZWQgZnJvbSB0aGUgc3RvcmU6IGAsXG4gICAgICAgICAgICAgICAgICAgIHZhbFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19