@ngxs/storage-plugin 3.7.3-dev.master-f88f1ef → 3.7.4

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,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4cy9zdG9yYWdlLXBsdWdpbi8iLCJzb3VyY2VzIjpbInNyYy9zdG9yYWdlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFFTCxjQUFjLEVBQ2QsMkJBQTJCLEVBQzVCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBRW5FLE1BQU0sT0FBTyxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDO0FBRzlELE1BQU0sT0FBTyx1QkFBdUI7Ozs7O0lBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQ1osT0FBa0M7UUFFbEMsT0FBTztZQUNMLFFBQVEsRUFBRSx1QkFBdUI7WUFDakMsU0FBUyxFQUFFO2dCQUNUO29CQUNFLE9BQU8sRUFBRSxZQUFZO29CQUNyQixRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixLQUFLLEVBQUUsSUFBSTtpQkFDWjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsWUFBWTtvQkFDckIsUUFBUSxFQUFFLE9BQU87aUJBQ2xCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSwyQkFBMkI7b0JBQ3BDLFVBQVUsRUFBRSxxQkFBcUI7b0JBQ2pDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDckI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLFVBQVUsRUFBRSxhQUFhO29CQUN6QixJQUFJLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxXQUFXLENBQUM7aUJBQ2pEO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs7O1lBN0JGLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgUExBVEZPUk1fSUQsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR1hTX1BMVUdJTlMgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5cbmltcG9ydCB7XG4gIE5neHNTdG9yYWdlUGx1Z2luT3B0aW9ucyxcbiAgU1RPUkFHRV9FTkdJTkUsXG4gIE5HWFNfU1RPUkFHRV9QTFVHSU5fT1BUSU9OU1xufSBmcm9tICcuL3N5bWJvbHMnO1xuaW1wb3J0IHsgTmd4c1N0b3JhZ2VQbHVnaW4gfSBmcm9tICcuL3N0b3JhZ2UucGx1Z2luJztcbmltcG9ydCB7IHN0b3JhZ2VPcHRpb25zRmFjdG9yeSwgZW5naW5lRmFjdG9yeSB9IGZyb20gJy4vaW50ZXJuYWxzJztcblxuZXhwb3J0IGNvbnN0IFVTRVJfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignVVNFUl9PUFRJT05TJyk7XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgTmd4c1N0b3JhZ2VQbHVnaW5Nb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChcbiAgICBvcHRpb25zPzogTmd4c1N0b3JhZ2VQbHVnaW5PcHRpb25zXG4gICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Tmd4c1N0b3JhZ2VQbHVnaW5Nb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IE5neHNTdG9yYWdlUGx1Z2luTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBOR1hTX1BMVUdJTlMsXG4gICAgICAgICAgdXNlQ2xhc3M6IE5neHNTdG9yYWdlUGx1Z2luLFxuICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBVU0VSX09QVElPTlMsXG4gICAgICAgICAgdXNlVmFsdWU6IG9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE5HWFNfU1RPUkFHRV9QTFVHSU5fT1BUSU9OUyxcbiAgICAgICAgICB1c2VGYWN0b3J5OiBzdG9yYWdlT3B0aW9uc0ZhY3RvcnksXG4gICAgICAgICAgZGVwczogW1VTRVJfT1BUSU9OU11cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IFNUT1JBR0VfRU5HSU5FLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGVuZ2luZUZhY3RvcnksXG4gICAgICAgICAgZGVwczogW05HWFNfU1RPUkFHRV9QTFVHSU5fT1BUSU9OUywgUExBVEZPUk1fSURdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iXX0=
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,152 +1,152 @@
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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TSxHQUFHLG1CQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzt3QkFDdkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQUEsR0FBRyxFQUFDLEVBQUUsbUJBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3FCQUM5RDtvQkFBQyxPQUFPLENBQUMsRUFBRTt3QkFDViw4RUFBOEU7d0JBQzlFLDBFQUEwRTt3QkFDMUUsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxFQUFFOzRCQUNqRCxPQUFPLENBQUMsS0FBSyxDQUNYLHVDQUF1QyxHQUFHLHNFQUFzRSxFQUNoSCxHQUFHLENBQ0osQ0FBQzt5QkFDSDtxQkFDRjtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxFQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7OztZQWxHRixVQUFVOzs7OzRDQUdOLE1BQU0sU0FBQywyQkFBMkI7NENBQ2xDLE1BQU0sU0FBQyxjQUFjO3lDQUNyQixNQUFNLFNBQUMsV0FBVzs7Ozs7OztJQUZuQixxQ0FBK0U7Ozs7O0lBQy9FLG9DQUFzRDs7Ozs7SUFDdEQsd0NBQWdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUExBVEZPUk1fSUQsIEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBOZ3hzUGx1Z2luLFxuICBzZXRWYWx1ZSxcbiAgZ2V0VmFsdWUsXG4gIEluaXRTdGF0ZSxcbiAgVXBkYXRlU3RhdGUsXG4gIGFjdGlvbk1hdGNoZXIsXG4gIE5neHNOZXh0UGx1Z2luRm5cbn0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBTdG9yYWdlRW5naW5lLFxuICBOZ3hzU3RvcmFnZVBsdWdpbk9wdGlvbnMsXG4gIFNUT1JBR0VfRU5HSU5FLFxuICBOR1hTX1NUT1JBR0VfUExVR0lOX09QVElPTlNcbn0gZnJvbSAnLi9zeW1ib2xzJztcbmltcG9ydCB7IERFRkFVTFRfU1RBVEVfS0VZIH0gZnJvbSAnLi9pbnRlcm5hbHMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBXaWxsIGJlIHByb3ZpZGVkIHRocm91Z2ggVGVyc2VyIGdsb2JhbCBkZWZpbml0aW9ucyBieSBBbmd1bGFyIENMSVxuICogZHVyaW5nIHRoZSBwcm9kdWN0aW9uIGJ1aWxkLiBUaGlzIGlzIGhvdyBBbmd1bGFyIGRvZXMgdHJlZS1zaGFraW5nIGludGVybmFsbHkuXG4gKi9cbmRlY2xhcmUgY29uc3QgbmdEZXZNb2RlOiBib29sZWFuO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd4c1N0b3JhZ2VQbHVnaW4gaW1wbGVtZW50cyBOZ3hzUGx1Z2luIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChOR1hTX1NUT1JBR0VfUExVR0lOX09QVElPTlMpIHByaXZhdGUgX29wdGlvbnM6IE5neHNTdG9yYWdlUGx1Z2luT3B0aW9ucyxcbiAgICBASW5qZWN0KFNUT1JBR0VfRU5HSU5FKSBwcml2YXRlIF9lbmdpbmU6IFN0b3JhZ2VFbmdpbmUsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBfcGxhdGZvcm1JZDogc3RyaW5nXG4gICkge31cblxuICBoYW5kbGUoc3RhdGU6IGFueSwgZXZlbnQ6IGFueSwgbmV4dDogTmd4c05leHRQbHVnaW5Gbikge1xuICAgIGlmIChpc1BsYXRmb3JtU2VydmVyKHRoaXMuX3BsYXRmb3JtSWQpICYmIHRoaXMuX2VuZ2luZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5leHQoc3RhdGUsIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBXZSBjYXN0IHRvIGBzdHJpbmdbXWAgaGVyZSBhcyB3ZSdyZSBzdXJlIHRoYXQgdGhpcyBvcHRpb24gaGFzIGJlZW5cbiAgICAvLyB0cmFuc2Zvcm1lZCBieSB0aGUgYHN0b3JhZ2VPcHRpb25zRmFjdG9yeWAgZnVuY3Rpb24gdGhhdCBwcm92aWRlZCB0b2tlblxuICAgIGNvbnN0IGtleXMgPSB0aGlzLl9vcHRpb25zLmtleSBhcyBzdHJpbmdbXTtcbiAgICBjb25zdCBtYXRjaGVzID0gYWN0aW9uTWF0Y2hlcihldmVudCk7XG4gICAgY29uc3QgaXNJbml0QWN0aW9uID0gbWF0Y2hlcyhJbml0U3RhdGUpO1xuICAgIGNvbnN0IGlzVXBkYXRlQWN0aW9uID0gbWF0Y2hlcyhVcGRhdGVTdGF0ZSk7XG4gICAgY29uc3QgaXNJbml0T3JVcGRhdGVBY3Rpb24gPSBpc0luaXRBY3Rpb24gfHwgaXNVcGRhdGVBY3Rpb247XG4gICAgbGV0IGhhc01pZ3JhdGlvbiA9IGZhbHNlO1xuXG4gICAgaWYgKGlzSW5pdE9yVXBkYXRlQWN0aW9uKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIC8vIFdlJ3JlIGNoZWNraW5nIHdoYXQgc3RhdGVzIGhhdmUgYmVlbiBhZGRlZCBieSBOR1hTIGFuZCBpZiBhbnkgb2YgdGhlc2Ugc3RhdGVzIHNob3VsZCBiZSBoYW5kbGVkIGJ5XG4gICAgICAgIC8vIHRoZSBzdG9yYWdlIHBsdWdpbi4gRm9yIGluc3RhbmNlLCB3ZSBvbmx5IHdhbnQgdG8gZGVzZXJpYWxpemUgdGhlIGBhdXRoYCBzdGF0ZSwgTkdYUyBoYXMgYWRkZWRcbiAgICAgICAgLy8gdGhlIGB1c2VyYCBzdGF0ZSwgdGhlIHN0b3JhZ2UgcGx1Z2luIHdpbGwgYmUgcmVydW4gYW5kIHdpbGwgZG8gcmVkdW5kYW50IGRlc2VyaWFsaXphdGlvbi5cbiAgICAgICAgaWYgKGlzVXBkYXRlQWN0aW9uICYmIGV2ZW50LmFkZGVkU3RhdGVzICYmICFldmVudC5hZGRlZFN0YXRlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc01hc3RlciA9IGtleSA9PT0gREVGQVVMVF9TVEFURV9LRVk7XG4gICAgICAgIGxldCB2YWw6IGFueSA9IHRoaXMuX2VuZ2luZS5nZXRJdGVtKGtleSEpO1xuXG4gICAgICAgIGlmICh2YWwgIT09ICd1bmRlZmluZWQnICYmIHZhbCAhPSBudWxsKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuX29wdGlvbnMuZGVzZXJpYWxpemUhKHZhbCk7XG4gICAgICAgICAgICB2YWwgPSB0aGlzLl9vcHRpb25zLmFmdGVyRGVzZXJpYWxpemUhKG5ld1ZhbCwga2V5KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBDYXJldGFrZXIgbm90ZTogd2UgaGF2ZSBzdGlsbCBsZWZ0IHRoZSBgdHlwZW9mYCBjb25kaXRpb24gaW4gb3JkZXIgdG8gYXZvaWRcbiAgICAgICAgICAgIC8vIGNyZWF0aW5nIGEgYnJlYWtpbmcgY2hhbmdlIGZvciBwcm9qZWN0cyB0aGF0IHN0aWxsIHVzZSB0aGUgVmlldyBFbmdpbmUuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgYEVycm9yIG9jdXJyZWQgd2hpbGUgZGVzZXJpYWxpemluZyB0aGUgJHtrZXl9IHN0b3JlIHZhbHVlLCBmYWxsaW5nIGJhY2sgdG8gZW1wdHkgb2JqZWN0LCB0aGUgdmFsdWUgb2J0YWluZWQgZnJvbSB0aGUgc3RvcmU6IGAsXG4gICAgICAgICAgICAgICAgdmFsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWwgPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5taWdyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zLm1pZ3JhdGlvbnMuZm9yRWFjaChzdHJhdGVneSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9XG4gICAgICAgICAgICAgICAgc3RyYXRlZ3kudmVyc2lvbiA9PT0gZ2V0VmFsdWUodmFsLCBzdHJhdGVneS52ZXJzaW9uS2V5IHx8ICd2ZXJzaW9uJyk7XG4gICAgICAgICAgICAgIGNvbnN0IGtleU1hdGNoID0gKCFzdHJhdGVneS5rZXkgJiYgaXNNYXN0ZXIpIHx8IHN0cmF0ZWd5LmtleSA9PT0ga2V5O1xuICAgICAgICAgICAgICBpZiAodmVyc2lvbk1hdGNoICYmIGtleU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gc3RyYXRlZ3kubWlncmF0ZSh2YWwpO1xuICAgICAgICAgICAgICAgIGhhc01pZ3JhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaXNNYXN0ZXIpIHtcbiAgICAgICAgICAgIHN0YXRlID0gc2V0VmFsdWUoc3RhdGUsIGtleSEsIHZhbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlID0geyAuLi5zdGF0ZSwgLi4udmFsIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQoc3RhdGUsIGV2ZW50KS5waXBlKFxuICAgICAgdGFwKG5leHRTdGF0ZSA9PiB7XG4gICAgICAgIGlmICghaXNJbml0T3JVcGRhdGVBY3Rpb24gfHwgKGlzSW5pdE9yVXBkYXRlQWN0aW9uICYmIGhhc01pZ3JhdGlvbikpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICBsZXQgdmFsID0gbmV4dFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAoa2V5ICE9PSBERUZBVUxUX1NUQVRFX0tFWSkge1xuICAgICAgICAgICAgICB2YWwgPSBnZXRWYWx1ZShuZXh0U3RhdGUsIGtleSEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLl9vcHRpb25zLmJlZm9yZVNlcmlhbGl6ZSEodmFsLCBrZXkpO1xuICAgICAgICAgICAgICB0aGlzLl9lbmdpbmUuc2V0SXRlbShrZXkhLCB0aGlzLl9vcHRpb25zLnNlcmlhbGl6ZSEobmV3VmFsKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIC8vIENhcmV0YWtlciBub3RlOiB3ZSBoYXZlIHN0aWxsIGxlZnQgdGhlIGB0eXBlb2ZgIGNvbmRpdGlvbiBpbiBvcmRlciB0byBhdm9pZFxuICAgICAgICAgICAgICAvLyBjcmVhdGluZyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgcHJvamVjdHMgdGhhdCBzdGlsbCB1c2UgdGhlIFZpZXcgRW5naW5lLlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIGBFcnJvciBvY3VycmVkIHdoaWxlIHNlcmlhbGl6aW5nIHRoZSAke2tleX0gc3RvcmUgdmFsdWUsIHZhbHVlIG5vdCB1cGRhdGVkLCB0aGUgdmFsdWUgb2J0YWluZWQgZnJvbSB0aGUgc3RvcmU6IGAsXG4gICAgICAgICAgICAgICAgICB2YWxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
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