ng-simple-state 14.0.6 → 15.0.1

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.
@@ -60,7 +60,7 @@ export class NgSimpleStateBaseStore {
60
60
  return this.setState(() => this.firstState, 'resetState');
61
61
  }
62
62
  /**
63
- * Reset the store to initial state provided from `initialState()` method
63
+ * Restart the store to initial state provided from `initialState()` method
64
64
  */
65
65
  restartState() {
66
66
  return this.setState(() => (this.initialState()), 'restartState');
@@ -75,14 +75,15 @@ export class NgSimpleStateBaseStore {
75
75
  /**
76
76
  * Select a store state
77
77
  * @param selectFn State selector (if not provided return full state)
78
+ * @param comparator A function used to compare the previous and current keys for equality. Defaults to a `===` check.
78
79
  * @returns Observable of the selected state
79
80
  */
80
81
  // eslint-disable-next-line no-unused-vars
81
- selectState(selectFn) {
82
+ selectState(selectFn, comparator) {
82
83
  if (!selectFn) {
83
84
  selectFn = (tmpState) => Object.assign(this.isArray ? [] : {}, tmpState);
84
85
  }
85
- return this.state$.pipe(map(state => selectFn(state)), distinctUntilChanged(), observeOn(asyncScheduler));
86
+ return this.state$.pipe(map(state => selectFn(state)), distinctUntilChanged(comparator), observeOn(asyncScheduler));
86
87
  }
87
88
  /**
88
89
  * Return the current store state (snapshot)
@@ -143,9 +144,12 @@ export class NgSimpleStateBaseStore {
143
144
  ?.split('\n')[3]
144
145
  .trim()
145
146
  .split(' ')[1]
146
- .split('.')[1];
147
+ .split('.')[1] || 'unknown';
147
148
  }
148
- return this.devTool.send(this.storeName, actionName || 'unknown', newState);
149
+ if (!this.devTool.send(this.storeName, actionName, newState)) {
150
+ console.log(this.storeName + '.' + actionName, newState);
151
+ }
152
+ return true;
149
153
  }
150
154
  /**
151
155
  * Recursively Object.freeze simple Javascript structures consisting of plain objects, arrays, and primitives.
@@ -158,9 +162,7 @@ export class NgSimpleStateBaseStore {
158
162
  return object;
159
163
  }
160
164
  // When already frozen, we assume its children are frozen (for better performance).
161
- // This should be true if you always use `deepFreeze` to freeze objects,
162
- // which is why you should have a linter rule that prevents you from using
163
- // `Object.freeze` standalone.
165
+ // This should be true if you always use `deepFreeze` to freeze objects.
164
166
  //
165
167
  // Note that Object.isFrozen will also return `true` for primitives (numbers,
166
168
  // strings, booleans, undefined, null), so there is no need to check for
@@ -175,10 +177,10 @@ export class NgSimpleStateBaseStore {
175
177
  return object;
176
178
  }
177
179
  }
178
- NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Directive });
179
- NgSimpleStateBaseStore.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: NgSimpleStateBaseStore, ngImport: i0 });
180
- NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateBaseStore });
181
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
180
+ NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Directive });
181
+ NgSimpleStateBaseStore.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: NgSimpleStateBaseStore, ngImport: i0 });
182
+ NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateBaseStore });
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
182
184
  type: Injectable
183
185
  }, {
184
186
  type: Directive
@@ -186,4 +188,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
186
188
  type: Inject,
187
189
  args: [Injector]
188
190
  }] }]; } });
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLWJhc2Utc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zaW1wbGUtc3RhdGUvc3JjL2xpYi9uZy1zaW1wbGUtc3RhdGUtYmFzZS1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWEsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBNEIsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFJaEYsbURBQW1EO0FBQ25ELE1BQU0sT0FBZ0Isc0JBQXNCO0lBcUJ4QyxZQUE4QixRQUFrQjtRQVp4QyxlQUFVLEdBQWEsSUFBSSxDQUFDO1FBRTVCLFlBQU8sR0FBWSxTQUFTLEVBQUUsQ0FBQztRQVduQyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUVsRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxZQUFZ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Q3hFLDBFQUEwRTtRQUMxRSw4QkFBOEI7UUFDOUIsRUFBRTtRQUNGLDZFQUE2RTtRQUM3RSx3RUFBd0U7UUFDeEUsb0JBQW9CO1FBQ3BCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QixPQUFPLE1BQXFCLENBQUM7U0FDaEM7UUFFRCxvRkFBb0Y7UUFDcEYsNENBQTRDO1FBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFFLE1BQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUUsT0FBTyxNQUFxQixDQUFDO0lBQ2pDLENBQUM7O21IQTNNaUIsc0JBQXNCLGtCQXFCcEIsUUFBUTt1R0FyQlYsc0JBQXNCO3VIQUF0QixzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFIM0MsVUFBVTs7a0JBQ1YsU0FBUzs7MEJBdUJPLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9uRGVzdHJveSwgRGlyZWN0aXZlLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBhc3luY1NjaGVkdWxlciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBvYnNlcnZlT24gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE5nU2ltcGxlU3RhdGVCcm93c2VyU3RvcmFnZSB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLWJyb3dzZXItc3RvcmFnZSc7XHJcbmltcG9ydCB7IE5nU2ltcGxlU3RhdGVEZXZUb29sIH0gZnJvbSAnLi9uZy1zaW1wbGUtc3RhdGUtZGV2LXRvb2wnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlTG9jYWxTdG9yYWdlIH0gZnJvbSAnLi9uZy1zaW1wbGUtc3RhdGUtbG9jYWwtc3RvcmFnZSc7XHJcbmltcG9ydCB7IE5nU2ltcGxlU3RhdGVTdG9yZUNvbmZpZywgTkdfU0lNUExFX1NUT1JFX0NPTkZJRyB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLW1vZGVscyc7XHJcbmltcG9ydCB7IE5nU2ltcGxlU3RhdGVTZXNzaW9uU3RvcmFnZSB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLXNlc3Npb24tc3RvcmFnZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbkBEaXJlY3RpdmUoKVxyXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5nU2ltcGxlU3RhdGVCYXNlU3RvcmU8UyBleHRlbmRzIG9iamVjdCB8IEFycmF5PGFueT4+IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRlJDogQmVoYXZpb3JTdWJqZWN0PFM+O1xyXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VJc0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGRldlRvb2xJc0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGRldlRvb2w6IE5nU2ltcGxlU3RhdGVEZXZUb29sO1xyXG4gICAgcHJpdmF0ZSBwZXJzaXN0ZW50U3RvcmFnZTogTmdTaW1wbGVTdGF0ZUJyb3dzZXJTdG9yYWdlO1xyXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JlQ29uZmlnOiBOZ1NpbXBsZVN0YXRlU3RvcmVDb25maWc7XHJcbiAgICBwcml2YXRlIHN0b3JlTmFtZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBmaXJzdFN0YXRlOiBTIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIGlzQXJyYXk6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGRldk1vZGU6IGJvb2xlYW4gPSBpc0Rldk1vZGUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiB0aGUgb2JzZXJ2YWJsZSBvZiB0aGUgc3RhdGVcclxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc3RhdGUoKTogQmVoYXZpb3JTdWJqZWN0PFM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJbmplY3RvcikgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5kZXZUb29sID0gaW5qZWN0b3IuZ2V0KE5nU2ltcGxlU3RhdGVEZXZUb29sKTtcclxuXHJcbiAgICAgICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gaW5qZWN0b3IuZ2V0KE5HX1NJTVBMRV9TVE9SRV9DT05GSUcsIHt9KTtcclxuICAgICAgICBjb25zdCBzdG9yZUNvbmZpZyA9IHRoaXMuc3RvcmVDb25maWcoKSB8fCB7fTtcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmVDb25maWcgPSB7IC4uLmdsb2JhbENvbmZpZywgLi4uc3RvcmVDb25maWcgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubG9jYWxTdG9yZUNvbmZpZy5wZXJzaXN0ZW50U3RvcmFnZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlID0gaW5qZWN0b3IuZ2V0KE5nU2ltcGxlU3RhdGVMb2NhbFN0b3JhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sb2NhbFN0b3JlQ29uZmlnLnBlcnNpc3RlbnRTdG9yYWdlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJzaXN0ZW50U3RvcmFnZSA9IGluamVjdG9yLmdldChOZ1NpbXBsZVN0YXRlU2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVyc2lzdGVudFN0b3JhZ2UgPSBpbmplY3Rvci5nZXQoTmdTaW1wbGVTdGF0ZUxvY2FsU3RvcmFnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZUlzRW5hYmxlZCA9IHR5cGVvZiB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlTG9jYWxTdG9yYWdlID09PSAnYm9vbGVhbicgPyB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlTG9jYWxTdG9yYWdlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kZXZUb29sSXNFbmFibGVkID0gdHlwZW9mIHRoaXMubG9jYWxTdG9yZUNvbmZpZy5lbmFibGVEZXZUb29sID09PSAnYm9vbGVhbicgPyB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlRGV2VG9vbCA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RvcmVOYW1lID0gdHlwZW9mIHRoaXMubG9jYWxTdG9yZUNvbmZpZy5zdG9yZU5hbWUgPT09ICdzdHJpbmcnID8gdGhpcy5sb2NhbFN0b3JlQ29uZmlnLnN0b3JlTmFtZSA6IHRoaXMuY29uc3RydWN0b3IubmFtZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlSXNFbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3RTdGF0ZSA9IHRoaXMucGVyc2lzdGVudFN0b3JhZ2UuZ2V0SXRlbTxTPih0aGlzLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5maXJzdFN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3RTdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRldlRvb2xTZW5kKHRoaXMuZmlyc3RTdGF0ZSwgYGluaXRpYWxTdGF0ZWApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHRoaXMuZmlyc3RTdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFM+KE9iamVjdC5hc3NpZ24odGhpcy5pc0FycmF5ID8gW10gOiB7fSwgdGhpcy5maXJzdFN0YXRlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHlvdSBvdmVycmlkZSB0aGlzIG1ldGhvZCwgeW91IGhhdmUgdG8gY2FsbCB0aGUgYHN1cGVyLm5nT25EZXN0cm95KClgIG1ldGhvZCBpbiB5b3VyIGBuZ09uRGVzdHJveSgpYCBtZXRob2QuXHJcbiAgICAgKi9cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGV2VG9vbFNlbmQodW5kZWZpbmVkLCAnbmdPbkRlc3Ryb3knKTtcclxuICAgICAgICB0aGlzLnN0YXRlJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXQgc3RvcmUgdG8gZmlyc3QgbG9hZGVkIHN0b3JlIHN0YXRlOlxyXG4gICAgICogIC0gdGhlIGxhc3Qgc2F2ZWQgc3RhdGUsIGlmIGBlbmFibGVMb2NhbFN0b3JhZ2VgIGNvbmZpZyBpcyBgdHJ1ZWBcclxuICAgICAqICAtIG90aGVyd2lzZSB0aGUgaW5pdGlhbCBzdGF0ZSBwcm92aWRlZCBmcm9tIGBpbml0aWFsU3RhdGUoKWAgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICByZXNldFN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFN0YXRlKCgpID0+ICh0aGlzLmZpcnN0U3RhdGUgYXMgUyksICdyZXNldFN0YXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldCB0aGUgc3RvcmUgdG8gaW5pdGlhbCBzdGF0ZSBwcm92aWRlZCBmcm9tIGBpbml0aWFsU3RhdGUoKWAgbWV0aG9kXHJcbiAgICAgKi9cclxuICAgIHJlc3RhcnRTdGF0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSgoKSA9PiAodGhpcy5pbml0aWFsU3RhdGUoKSksICdyZXN0YXJ0U3RhdGUnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIGZvciBzZXQgYSBzcGVjaWZpYyBjb25maWcgZm9yIHRoZSBzdG9yZVxyXG4gICAgICogQHJldHVybnMgTmdTaW1wbGVTdGF0ZVN0b3JlQ29uZmlnXHJcbiAgICAgKi9cclxuICAgIHN0b3JlQ29uZmlnKCk6IE5nU2ltcGxlU3RhdGVTdG9yZUNvbmZpZyB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGludG8gdGhlIHN0b3JlIHRoZSBpbml0aWFsIHN0YXRlXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgc3RhdGUgb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBpbml0aWFsU3RhdGUoKTogUztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCBhIHN0b3JlIHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gc2VsZWN0Rm4gU3RhdGUgc2VsZWN0b3IgKGlmIG5vdCBwcm92aWRlZCByZXR1cm4gZnVsbCBzdGF0ZSlcclxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHNlbGVjdGVkIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgc2VsZWN0U3RhdGU8Sz4oc2VsZWN0Rm4/OiAoc3RhdGU6IFJlYWRvbmx5PFM+KSA9PiBLKTogT2JzZXJ2YWJsZTxLPiB7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RGbikge1xyXG4gICAgICAgICAgICBzZWxlY3RGbiA9ICh0bXBTdGF0ZTogUmVhZG9ubHk8Uz4pID0+IE9iamVjdC5hc3NpZ24odGhpcy5pc0FycmF5ID8gW10gOiB7fSwgdG1wU3RhdGUpIGFzIHVua25vd24gYXMgSztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUkLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcChzdGF0ZSA9PiAoc2VsZWN0Rm4gYXMgYW55KShzdGF0ZSBhcyBSZWFkb25seTxTPikpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICBvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiB0aGUgY3VycmVudCBzdG9yZSBzdGF0ZSAoc25hcHNob3QpXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBnZXRDdXJyZW50U3RhdGUoKTogUmVhZG9ubHk8Uz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZXBGcmVlemUodGhpcy5zdGF0ZSQuZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IGxvYWRlZCBzdG9yZSBzdGF0ZTpcclxuICAgICAqIHRoZSBsYXN0IHNhdmVkIHN0YXRlLCBpZiBgZW5hYmxlTG9jYWxTdG9yYWdlYCBjb25maWcgaXMgYHRydWVgO1xyXG4gICAgICogb3RoZXJ3aXNlIHRoZSBpbml0aWFsIHN0YXRlIHByb3ZpZGVkIGZyb20gYGluaXRpYWxTdGF0ZSgpYCBtZXRob2QuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgZmlyc3Qgc3RhdGVcclxuICAgICAqL1xyXG4gICAgZ2V0Rmlyc3RTdGF0ZSgpOiBSZWFkb25seTxTPiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZXBGcmVlemUodGhpcy5maXJzdFN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIG5ldyBzdGF0ZVxyXG4gICAgICogQHBhcmFtIHNlbGVjdEZuIFN0YXRlIHJlZHVjZXJcclxuICAgICAqIEBwYXJhbSBhY3Rpb25OYW1lIFRoZSBhY3Rpb24gbGFiZWwgaW50byBSZWR1eCBEZXZUb29scyAoZGVmYXVsdCBpcyBwYXJlbnQgZnVuY3Rpb24gbmFtZSlcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0YXRlIGlzIGNoYW5nZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBzZXRTdGF0ZShzdGF0ZUZuOiAoY3VycmVudFN0YXRlOiBSZWFkb25seTxTPikgPT4gUGFydGlhbDxTPiwgYWN0aW9uTmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGN1cnJTdGF0ZSA9IHRoaXMuZ2V0Q3VycmVudFN0YXRlKCk7XHJcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZUZuKGN1cnJTdGF0ZSk7XHJcbiAgICAgICAgaWYgKGN1cnJTdGF0ZSA9PT0gbmV3U3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RhdGU6IFM7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheSkge1xyXG4gICAgICAgICAgICBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oW10gYXMgUywgbmV3U3RhdGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgY3VyclN0YXRlLCBuZXdTdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhdGUkLm5leHQoc3RhdGUpO1xyXG4gICAgICAgIHRoaXMuZGV2VG9vbFNlbmQoc3RhdGUsIGFjdGlvbk5hbWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZUlzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlLnNldEl0ZW08Uz4odGhpcy5zdG9yZU5hbWUsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIHRvIGRldiB0b29sIGEgbmV3IHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gbmV3U3RhdGUgbmV3IHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgYWN0aW9uIG5hbWVcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgZsOsZGV2IHRvb2xzIGFyZSBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZGV2VG9vbFNlbmQobmV3U3RhdGU6IFMgfCB1bmRlZmluZWQsIGFjdGlvbk5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGV2VG9vbElzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAvLyByZXRyaXZlIHRoZSBwYXJlbnQgKG9mIHBhcmVudCkgbWV0aG9kIGludG8gdGhlIHN0YWNrIHRyYWNlXHJcbiAgICAgICAgICAgIGFjdGlvbk5hbWUgPSBuZXcgRXJyb3IoKS5zdGFja1xyXG4gICAgICAgICAgICAgICAgPy5zcGxpdCgnXFxuJylbM11cclxuICAgICAgICAgICAgICAgIC50cmltKClcclxuICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpWzFdXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoJy4nKVsxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV2VG9vbC5zZW5kKHRoaXMuc3RvcmVOYW1lLCBhY3Rpb25OYW1lIHx8ICd1bmtub3duJywgbmV3U3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVjdXJzaXZlbHkgT2JqZWN0LmZyZWV6ZSBzaW1wbGUgSmF2YXNjcmlwdCBzdHJ1Y3R1cmVzIGNvbnNpc3Rpbmcgb2YgcGxhaW4gb2JqZWN0cywgYXJyYXlzLCBhbmQgcHJpbWl0aXZlcy4gXHJcbiAgICAgKiBNYWtlIHRoZSBkYXRhIGltbXV0YWJsZS5cclxuICAgICAqIEByZXR1cm5zIGltbXV0YWJsZSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkZWVwRnJlZXplKG9iamVjdDogUyB8IG51bGwpOiBSZWFkb25seTxTPiB7XHJcbiAgICAgICAgLy8gTm8gZnJlZXppbmcgaW4gcHJvZHVjdGlvbiAoZm9yIGJldHRlciBwZXJmb3JtYW5jZSkuXHJcbiAgICAgICAgaWYgKHRoaXMuZGV2TW9kZSB8fCAhb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmplY3QgYXMgUmVhZG9ubHk8Uz47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBXaGVuIGFscmVhZHkgZnJvemVuLCB3ZSBhc3N1bWUgaXRzIGNoaWxkcmVuIGFyZSBmcm96ZW4gKGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UpLlxyXG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHRydWUgaWYgeW91IGFsd2F5cyB1c2UgYGRlZXBGcmVlemVgIHRvIGZyZWV6ZSBvYmplY3RzLFxyXG4gICAgICAgIC8vIHdoaWNoIGlzIHdoeSB5b3Ugc2hvdWxkIGhhdmUgYSBsaW50ZXIgcnVsZSB0aGF0IHByZXZlbnRzIHlvdSBmcm9tIHVzaW5nXHJcbiAgICAgICAgLy8gYE9iamVjdC5mcmVlemVgIHN0YW5kYWxvbmUuXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyBOb3RlIHRoYXQgT2JqZWN0LmlzRnJvemVuIHdpbGwgYWxzbyByZXR1cm4gYHRydWVgIGZvciBwcmltaXRpdmVzIChudW1iZXJzLFxyXG4gICAgICAgIC8vIHN0cmluZ3MsIGJvb2xlYW5zLCB1bmRlZmluZWQsIG51bGwpLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGZvclxyXG4gICAgICAgIC8vIHRob3NlIGV4cGxpY2l0bHkuXHJcbiAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbihvYmplY3QpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmplY3QgYXMgUmVhZG9ubHk8Uz47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggZWl0aGVyIGFuIGFycmF5IG9yIHBsYWluIG9iamVjdCwgc29cclxuICAgICAgICAvLyBqdXN0IGZyZWV6ZSBpdCBhbmQgcmVjdXJzZSBvbiBpdHMgdmFsdWVzLlxyXG4gICAgICAgIE9iamVjdC5mcmVlemUob2JqZWN0KTtcclxuICAgICAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goa2V5ID0+IHRoaXMuZGVlcEZyZWV6ZSgob2JqZWN0IGFzIGFueSlba2V5XSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gb2JqZWN0IGFzIFJlYWRvbmx5PFM+O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLWJhc2Utc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zaW1wbGUtc3RhdGUvc3JjL2xpYi9uZy1zaW1wbGUtc3RhdGUtYmFzZS1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWEsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBNEIsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFJaEYsbURBQW1EO0FBQ25ELE1BQU0sT0FBZ0Isc0JBQXNCO0lBcUJ4QyxZQUE4QixRQUFrQjtRQVp4QyxlQUFVLEdBQWEsSUFBSSxDQUFDO1FBRTVCLFlBQU8sR0FBWSxTQUFTLEVBQUUsQ0FBQztRQVduQyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUVsRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxZQUFZ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QUNLLFVBQVUsQ0FBQyxNQUFnQjtRQUMvQixzREFBc0Q7UUFDdEQsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3pCLE9BQU8sTUFBcUIsQ0FBQztTQUNoQztRQUVELG1GQUFtRjtRQUNuRix3RUFBd0U7UUFDeEUsRUFBRTtRQUNGLDZFQUE2RTtRQUM3RSx3RUFBd0U7UUFDeEUsb0JBQW9CO1FBQ3BCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QixPQUFPLE1BQXFCLENBQUM7U0FDaEM7UUFFRCxvRkFBb0Y7UUFDcEYsNENBQTRDO1FBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFFLE1BQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUUsT0FBTyxNQUFxQixDQUFDO0lBQ2pDLENBQUM7O21IQTdNaUIsc0JBQXNCLGtCQXFCcEIsUUFBUTt1R0FyQlYsc0JBQXNCO3VIQUF0QixzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFIM0MsVUFBVTs7a0JBQ1YsU0FBUzs7MEJBdUJPLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9uRGVzdHJveSwgRGlyZWN0aXZlLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBhc3luY1NjaGVkdWxlciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBvYnNlcnZlT24gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE5nU2ltcGxlU3RhdGVCcm93c2VyU3RvcmFnZSB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLWJyb3dzZXItc3RvcmFnZSc7XHJcbmltcG9ydCB7IE5nU2ltcGxlU3RhdGVEZXZUb29sIH0gZnJvbSAnLi9uZy1zaW1wbGUtc3RhdGUtZGV2LXRvb2wnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlTG9jYWxTdG9yYWdlIH0gZnJvbSAnLi9uZy1zaW1wbGUtc3RhdGUtbG9jYWwtc3RvcmFnZSc7XHJcbmltcG9ydCB7IE5nU2ltcGxlU3RhdGVTdG9yZUNvbmZpZywgTkdfU0lNUExFX1NUT1JFX0NPTkZJRyB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLW1vZGVscyc7XHJcbmltcG9ydCB7IE5nU2ltcGxlU3RhdGVTZXNzaW9uU3RvcmFnZSB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLXNlc3Npb24tc3RvcmFnZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbkBEaXJlY3RpdmUoKVxyXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5nU2ltcGxlU3RhdGVCYXNlU3RvcmU8UyBleHRlbmRzIG9iamVjdCB8IEFycmF5PGFueT4+IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRlJDogQmVoYXZpb3JTdWJqZWN0PFM+O1xyXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VJc0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGRldlRvb2xJc0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGRldlRvb2w6IE5nU2ltcGxlU3RhdGVEZXZUb29sO1xyXG4gICAgcHJpdmF0ZSBwZXJzaXN0ZW50U3RvcmFnZTogTmdTaW1wbGVTdGF0ZUJyb3dzZXJTdG9yYWdlO1xyXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JlQ29uZmlnOiBOZ1NpbXBsZVN0YXRlU3RvcmVDb25maWc7XHJcbiAgICBwcml2YXRlIHN0b3JlTmFtZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBmaXJzdFN0YXRlOiBTIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIGlzQXJyYXk6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGRldk1vZGU6IGJvb2xlYW4gPSBpc0Rldk1vZGUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiB0aGUgb2JzZXJ2YWJsZSBvZiB0aGUgc3RhdGVcclxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc3RhdGUoKTogQmVoYXZpb3JTdWJqZWN0PFM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJbmplY3RvcikgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5kZXZUb29sID0gaW5qZWN0b3IuZ2V0KE5nU2ltcGxlU3RhdGVEZXZUb29sKTtcclxuXHJcbiAgICAgICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gaW5qZWN0b3IuZ2V0KE5HX1NJTVBMRV9TVE9SRV9DT05GSUcsIHt9KTtcclxuICAgICAgICBjb25zdCBzdG9yZUNvbmZpZyA9IHRoaXMuc3RvcmVDb25maWcoKSB8fCB7fTtcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmVDb25maWcgPSB7IC4uLmdsb2JhbENvbmZpZywgLi4uc3RvcmVDb25maWcgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubG9jYWxTdG9yZUNvbmZpZy5wZXJzaXN0ZW50U3RvcmFnZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlID0gaW5qZWN0b3IuZ2V0KE5nU2ltcGxlU3RhdGVMb2NhbFN0b3JhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sb2NhbFN0b3JlQ29uZmlnLnBlcnNpc3RlbnRTdG9yYWdlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJzaXN0ZW50U3RvcmFnZSA9IGluamVjdG9yLmdldChOZ1NpbXBsZVN0YXRlU2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVyc2lzdGVudFN0b3JhZ2UgPSBpbmplY3Rvci5nZXQoTmdTaW1wbGVTdGF0ZUxvY2FsU3RvcmFnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZUlzRW5hYmxlZCA9IHR5cGVvZiB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlTG9jYWxTdG9yYWdlID09PSAnYm9vbGVhbicgPyB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlTG9jYWxTdG9yYWdlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kZXZUb29sSXNFbmFibGVkID0gdHlwZW9mIHRoaXMubG9jYWxTdG9yZUNvbmZpZy5lbmFibGVEZXZUb29sID09PSAnYm9vbGVhbicgPyB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlRGV2VG9vbCA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RvcmVOYW1lID0gdHlwZW9mIHRoaXMubG9jYWxTdG9yZUNvbmZpZy5zdG9yZU5hbWUgPT09ICdzdHJpbmcnID8gdGhpcy5sb2NhbFN0b3JlQ29uZmlnLnN0b3JlTmFtZSA6IHRoaXMuY29uc3RydWN0b3IubmFtZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlSXNFbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3RTdGF0ZSA9IHRoaXMucGVyc2lzdGVudFN0b3JhZ2UuZ2V0SXRlbTxTPih0aGlzLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5maXJzdFN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3RTdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRldlRvb2xTZW5kKHRoaXMuZmlyc3RTdGF0ZSwgYGluaXRpYWxTdGF0ZWApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHRoaXMuZmlyc3RTdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFM+KE9iamVjdC5hc3NpZ24odGhpcy5pc0FycmF5ID8gW10gOiB7fSwgdGhpcy5maXJzdFN0YXRlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHlvdSBvdmVycmlkZSB0aGlzIG1ldGhvZCwgeW91IGhhdmUgdG8gY2FsbCB0aGUgYHN1cGVyLm5nT25EZXN0cm95KClgIG1ldGhvZCBpbiB5b3VyIGBuZ09uRGVzdHJveSgpYCBtZXRob2QuXHJcbiAgICAgKi9cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGV2VG9vbFNlbmQodW5kZWZpbmVkLCAnbmdPbkRlc3Ryb3knKTtcclxuICAgICAgICB0aGlzLnN0YXRlJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXQgc3RvcmUgdG8gZmlyc3QgbG9hZGVkIHN0b3JlIHN0YXRlOlxyXG4gICAgICogIC0gdGhlIGxhc3Qgc2F2ZWQgc3RhdGUsIGlmIGBlbmFibGVMb2NhbFN0b3JhZ2VgIGNvbmZpZyBpcyBgdHJ1ZWBcclxuICAgICAqICAtIG90aGVyd2lzZSB0aGUgaW5pdGlhbCBzdGF0ZSBwcm92aWRlZCBmcm9tIGBpbml0aWFsU3RhdGUoKWAgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICByZXNldFN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFN0YXRlKCgpID0+ICh0aGlzLmZpcnN0U3RhdGUgYXMgUyksICdyZXNldFN0YXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN0YXJ0IHRoZSBzdG9yZSB0byBpbml0aWFsIHN0YXRlIHByb3ZpZGVkIGZyb20gYGluaXRpYWxTdGF0ZSgpYCBtZXRob2RcclxuICAgICAqL1xyXG4gICAgcmVzdGFydFN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFN0YXRlKCgpID0+ICh0aGlzLmluaXRpYWxTdGF0ZSgpKSwgJ3Jlc3RhcnRTdGF0ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIHNldCBhIHNwZWNpZmljIGNvbmZpZyBmb3IgdGhlIHN0b3JlXHJcbiAgICAgKiBAcmV0dXJucyBOZ1NpbXBsZVN0YXRlU3RvcmVDb25maWdcclxuICAgICAqL1xyXG4gICAgc3RvcmVDb25maWcoKTogTmdTaW1wbGVTdGF0ZVN0b3JlQ29uZmlnIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgaW50byB0aGUgc3RvcmUgdGhlIGluaXRpYWwgc3RhdGVcclxuICAgICAqIEByZXR1cm5zIFRoZSBzdGF0ZSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGluaXRpYWxTdGF0ZSgpOiBTO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VsZWN0IGEgc3RvcmUgc3RhdGVcclxuICAgICAqIEBwYXJhbSBzZWxlY3RGbiBTdGF0ZSBzZWxlY3RvciAoaWYgbm90IHByb3ZpZGVkIHJldHVybiBmdWxsIHN0YXRlKVxyXG4gICAgICogQHBhcmFtIGNvbXBhcmF0b3IgQSBmdW5jdGlvbiB1c2VkIHRvIGNvbXBhcmUgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IGtleXMgZm9yIGVxdWFsaXR5LiBEZWZhdWx0cyB0byBhIGA9PT1gIGNoZWNrLlxyXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgc2VsZWN0ZWQgc3RhdGVcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBzZWxlY3RTdGF0ZTxLPihzZWxlY3RGbj86IChzdGF0ZTogUmVhZG9ubHk8Uz4pID0+IEssIGNvbXBhcmF0b3I/OiAocHJldmlvdXM6IEssIGN1cnJlbnQ6IEspID0+IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEs+IHtcclxuICAgICAgICBpZiAoIXNlbGVjdEZuKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdEZuID0gKHRtcFN0YXRlOiBSZWFkb25seTxTPikgPT4gT2JqZWN0LmFzc2lnbih0aGlzLmlzQXJyYXkgPyBbXSA6IHt9LCB0bXBTdGF0ZSkgYXMgdW5rbm93biBhcyBLO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQucGlwZShcclxuICAgICAgICAgICAgbWFwKHN0YXRlID0+IChzZWxlY3RGbiBhcyBhbnkpKHN0YXRlIGFzIFJlYWRvbmx5PFM+KSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGNvbXBhcmF0b3IpLFxyXG4gICAgICAgICAgICBvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiB0aGUgY3VycmVudCBzdG9yZSBzdGF0ZSAoc25hcHNob3QpXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBnZXRDdXJyZW50U3RhdGUoKTogUmVhZG9ubHk8Uz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZXBGcmVlemUodGhpcy5zdGF0ZSQuZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IGxvYWRlZCBzdG9yZSBzdGF0ZTpcclxuICAgICAqIHRoZSBsYXN0IHNhdmVkIHN0YXRlLCBpZiBgZW5hYmxlTG9jYWxTdG9yYWdlYCBjb25maWcgaXMgYHRydWVgO1xyXG4gICAgICogb3RoZXJ3aXNlIHRoZSBpbml0aWFsIHN0YXRlIHByb3ZpZGVkIGZyb20gYGluaXRpYWxTdGF0ZSgpYCBtZXRob2QuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgZmlyc3Qgc3RhdGVcclxuICAgICAqL1xyXG4gICAgZ2V0Rmlyc3RTdGF0ZSgpOiBSZWFkb25seTxTPiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZXBGcmVlemUodGhpcy5maXJzdFN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIG5ldyBzdGF0ZVxyXG4gICAgICogQHBhcmFtIHNlbGVjdEZuIFN0YXRlIHJlZHVjZXJcclxuICAgICAqIEBwYXJhbSBhY3Rpb25OYW1lIFRoZSBhY3Rpb24gbGFiZWwgaW50byBSZWR1eCBEZXZUb29scyAoZGVmYXVsdCBpcyBwYXJlbnQgZnVuY3Rpb24gbmFtZSlcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0YXRlIGlzIGNoYW5nZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBzZXRTdGF0ZShzdGF0ZUZuOiAoY3VycmVudFN0YXRlOiBSZWFkb25seTxTPikgPT4gUGFydGlhbDxTPiwgYWN0aW9uTmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGN1cnJTdGF0ZSA9IHRoaXMuZ2V0Q3VycmVudFN0YXRlKCk7XHJcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZUZuKGN1cnJTdGF0ZSk7XHJcbiAgICAgICAgaWYgKGN1cnJTdGF0ZSA9PT0gbmV3U3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RhdGU6IFM7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheSkge1xyXG4gICAgICAgICAgICBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oW10gYXMgUywgbmV3U3RhdGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgY3VyclN0YXRlLCBuZXdTdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhdGUkLm5leHQoc3RhdGUpO1xyXG4gICAgICAgIHRoaXMuZGV2VG9vbFNlbmQoc3RhdGUsIGFjdGlvbk5hbWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZUlzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlLnNldEl0ZW08Uz4odGhpcy5zdG9yZU5hbWUsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIHRvIGRldiB0b29sIGEgbmV3IHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gbmV3U3RhdGUgbmV3IHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgYWN0aW9uIG5hbWVcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgZsOsZGV2IHRvb2xzIGFyZSBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZGV2VG9vbFNlbmQobmV3U3RhdGU6IFMgfCB1bmRlZmluZWQsIGFjdGlvbk5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGV2VG9vbElzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAvLyByZXRyaXZlIHRoZSBwYXJlbnQgKG9mIHBhcmVudCkgbWV0aG9kIGludG8gdGhlIHN0YWNrIHRyYWNlXHJcbiAgICAgICAgICAgIGFjdGlvbk5hbWUgPSBuZXcgRXJyb3IoKS5zdGFja1xyXG4gICAgICAgICAgICAgICAgPy5zcGxpdCgnXFxuJylbM11cclxuICAgICAgICAgICAgICAgIC50cmltKClcclxuICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpWzFdXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoJy4nKVsxXSB8fCAndW5rbm93bic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5kZXZUb29sLnNlbmQodGhpcy5zdG9yZU5hbWUsIGFjdGlvbk5hbWUsIG5ld1N0YXRlKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnN0b3JlTmFtZSArICcuJyArIGFjdGlvbk5hbWUsIG5ld1N0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWN1cnNpdmVseSBPYmplY3QuZnJlZXplIHNpbXBsZSBKYXZhc2NyaXB0IHN0cnVjdHVyZXMgY29uc2lzdGluZyBvZiBwbGFpbiBvYmplY3RzLCBhcnJheXMsIGFuZCBwcmltaXRpdmVzLlxyXG4gICAgICogTWFrZSB0aGUgZGF0YSBpbW11dGFibGUuXHJcbiAgICAgKiBAcmV0dXJucyBpbW11dGFibGUgb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZGVlcEZyZWV6ZShvYmplY3Q6IFMgfCBudWxsKTogUmVhZG9ubHk8Uz4ge1xyXG4gICAgICAgIC8vIE5vIGZyZWV6aW5nIGluIHByb2R1Y3Rpb24gKGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UpLlxyXG4gICAgICAgIGlmICh0aGlzLmRldk1vZGUgfHwgIW9iamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0IGFzIFJlYWRvbmx5PFM+O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gV2hlbiBhbHJlYWR5IGZyb3plbiwgd2UgYXNzdW1lIGl0cyBjaGlsZHJlbiBhcmUgZnJvemVuIChmb3IgYmV0dGVyIHBlcmZvcm1hbmNlKS5cclxuICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSB0cnVlIGlmIHlvdSBhbHdheXMgdXNlIGBkZWVwRnJlZXplYCB0byBmcmVlemUgb2JqZWN0cy5cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIE5vdGUgdGhhdCBPYmplY3QuaXNGcm96ZW4gd2lsbCBhbHNvIHJldHVybiBgdHJ1ZWAgZm9yIHByaW1pdGl2ZXMgKG51bWJlcnMsXHJcbiAgICAgICAgLy8gc3RyaW5ncywgYm9vbGVhbnMsIHVuZGVmaW5lZCwgbnVsbCksIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgZm9yXHJcbiAgICAgICAgLy8gdGhvc2UgZXhwbGljaXRseS5cclxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuKG9iamVjdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iamVjdCBhcyBSZWFkb25seTxTPjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYW4gYXJyYXkgb3IgcGxhaW4gb2JqZWN0LCBzb1xyXG4gICAgICAgIC8vIGp1c3QgZnJlZXplIGl0IGFuZCByZWN1cnNlIG9uIGl0cyB2YWx1ZXMuXHJcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShvYmplY3QpO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChrZXkgPT4gdGhpcy5kZWVwRnJlZXplKChvYmplY3QgYXMgYW55KVtrZXldKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBvYmplY3QgYXMgUmVhZG9ubHk8Uz47XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -46,9 +46,9 @@ export class NgSimpleStateDevTool {
46
46
  return false;
47
47
  }
48
48
  }
49
- NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateDevTool, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
50
- NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
51
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
49
+ NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateDevTool, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
50
+ NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
52
52
  type: Injectable,
53
53
  args: [{ providedIn: 'root' }]
54
54
  }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
@@ -6,9 +6,9 @@ export class NgSimpleStateLocalStorage extends NgSimpleStateBrowserStorage {
6
6
  super(localStorage);
7
7
  }
8
8
  }
9
- NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
- NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
9
+ NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
+ NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
12
12
  type: Injectable,
13
13
  args: [{ providedIn: 'root' }]
14
14
  }], ctorParameters: function () { return []; } });
@@ -6,9 +6,9 @@ export class NgSimpleStateSessionStorage extends NgSimpleStateBrowserStorage {
6
6
  super(sessionStorage);
7
7
  }
8
8
  }
9
- NgSimpleStateSessionStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateSessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
- NgSimpleStateSessionStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateSessionStorage, providedIn: 'root' });
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateSessionStorage, decorators: [{
9
+ NgSimpleStateSessionStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateSessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
+ NgSimpleStateSessionStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateSessionStorage, providedIn: 'root' });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateSessionStorage, decorators: [{
12
12
  type: Injectable,
13
13
  args: [{ providedIn: 'root' }]
14
14
  }], ctorParameters: function () { return []; } });
@@ -14,10 +14,10 @@ export class NgSimpleStateModule {
14
14
  };
15
15
  }
16
16
  }
17
- NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18
- NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateModule });
19
- NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateModule });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateModule, decorators: [{
17
+ NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18
+ NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateModule });
19
+ NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateModule });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateModule, decorators: [{
21
21
  type: NgModule,
22
22
  args: [{
23
23
  declarations: [],
@@ -21,10 +21,10 @@ class NgSimpleStateModule {
21
21
  };
22
22
  }
23
23
  }
24
- NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
25
- NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateModule });
26
- NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateModule });
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateModule, decorators: [{
24
+ NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
25
+ NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateModule });
26
+ NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateModule });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateModule, decorators: [{
28
28
  type: NgModule,
29
29
  args: [{
30
30
  declarations: [],
@@ -79,9 +79,9 @@ class NgSimpleStateDevTool {
79
79
  return false;
80
80
  }
81
81
  }
82
- NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateDevTool, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
83
- NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
82
+ NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateDevTool, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
83
+ NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
85
85
  type: Injectable,
86
86
  args: [{ providedIn: 'root' }]
87
87
  }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
@@ -146,9 +146,9 @@ class NgSimpleStateLocalStorage extends NgSimpleStateBrowserStorage {
146
146
  super(localStorage);
147
147
  }
148
148
  }
149
- NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
150
- NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
149
+ NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
150
+ NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
152
152
  type: Injectable,
153
153
  args: [{ providedIn: 'root' }]
154
154
  }], ctorParameters: function () { return []; } });
@@ -158,9 +158,9 @@ class NgSimpleStateSessionStorage extends NgSimpleStateBrowserStorage {
158
158
  super(sessionStorage);
159
159
  }
160
160
  }
161
- NgSimpleStateSessionStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateSessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
162
- NgSimpleStateSessionStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateSessionStorage, providedIn: 'root' });
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateSessionStorage, decorators: [{
161
+ NgSimpleStateSessionStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateSessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
162
+ NgSimpleStateSessionStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateSessionStorage, providedIn: 'root' });
163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateSessionStorage, decorators: [{
164
164
  type: Injectable,
165
165
  args: [{ providedIn: 'root' }]
166
166
  }], ctorParameters: function () { return []; } });
@@ -219,7 +219,7 @@ class NgSimpleStateBaseStore {
219
219
  return this.setState(() => this.firstState, 'resetState');
220
220
  }
221
221
  /**
222
- * Reset the store to initial state provided from `initialState()` method
222
+ * Restart the store to initial state provided from `initialState()` method
223
223
  */
224
224
  restartState() {
225
225
  return this.setState(() => (this.initialState()), 'restartState');
@@ -234,14 +234,15 @@ class NgSimpleStateBaseStore {
234
234
  /**
235
235
  * Select a store state
236
236
  * @param selectFn State selector (if not provided return full state)
237
+ * @param comparator A function used to compare the previous and current keys for equality. Defaults to a `===` check.
237
238
  * @returns Observable of the selected state
238
239
  */
239
240
  // eslint-disable-next-line no-unused-vars
240
- selectState(selectFn) {
241
+ selectState(selectFn, comparator) {
241
242
  if (!selectFn) {
242
243
  selectFn = (tmpState) => Object.assign(this.isArray ? [] : {}, tmpState);
243
244
  }
244
- return this.state$.pipe(map(state => selectFn(state)), distinctUntilChanged(), observeOn(asyncScheduler));
245
+ return this.state$.pipe(map(state => selectFn(state)), distinctUntilChanged(comparator), observeOn(asyncScheduler));
245
246
  }
246
247
  /**
247
248
  * Return the current store state (snapshot)
@@ -299,9 +300,12 @@ class NgSimpleStateBaseStore {
299
300
  }
300
301
  if (!actionName) {
301
302
  // retrive the parent (of parent) method into the stack trace
302
- actionName = (_a = new Error().stack) === null || _a === void 0 ? void 0 : _a.split('\n')[3].trim().split(' ')[1].split('.')[1];
303
+ actionName = ((_a = new Error().stack) === null || _a === void 0 ? void 0 : _a.split('\n')[3].trim().split(' ')[1].split('.')[1]) || 'unknown';
303
304
  }
304
- return this.devTool.send(this.storeName, actionName || 'unknown', newState);
305
+ if (!this.devTool.send(this.storeName, actionName, newState)) {
306
+ console.log(this.storeName + '.' + actionName, newState);
307
+ }
308
+ return true;
305
309
  }
306
310
  /**
307
311
  * Recursively Object.freeze simple Javascript structures consisting of plain objects, arrays, and primitives.
@@ -314,9 +318,7 @@ class NgSimpleStateBaseStore {
314
318
  return object;
315
319
  }
316
320
  // When already frozen, we assume its children are frozen (for better performance).
317
- // This should be true if you always use `deepFreeze` to freeze objects,
318
- // which is why you should have a linter rule that prevents you from using
319
- // `Object.freeze` standalone.
321
+ // This should be true if you always use `deepFreeze` to freeze objects.
320
322
  //
321
323
  // Note that Object.isFrozen will also return `true` for primitives (numbers,
322
324
  // strings, booleans, undefined, null), so there is no need to check for
@@ -331,10 +333,10 @@ class NgSimpleStateBaseStore {
331
333
  return object;
332
334
  }
333
335
  }
334
- NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Directive });
335
- NgSimpleStateBaseStore.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: NgSimpleStateBaseStore, ngImport: i0 });
336
- NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateBaseStore });
337
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
336
+ NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Directive });
337
+ NgSimpleStateBaseStore.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: NgSimpleStateBaseStore, ngImport: i0 });
338
+ NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateBaseStore });
339
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
338
340
  type: Injectable
339
341
  }, {
340
342
  type: Directive
@@ -1 +1 @@
1
- {"version":3,"file":"ng-simple-state.mjs","sources":["../../../projects/ng-simple-state/src/lib/ng-simple-state-models.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state.module.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-dev-tool.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-browser-storage.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-local-storage.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-session-storage.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-base-store.ts","../../../projects/ng-simple-state/src/public-api.ts","../../../projects/ng-simple-state/src/ng-simple-state.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * NgSimpleState config option\r\n */\r\nexport interface NgSimpleStateConfig {\r\n enableDevTool?: boolean;\r\n enableLocalStorage?: boolean;\r\n persistentStorage?: 'session' | 'local';\r\n}\r\n\r\n/**\r\n * NgSimpleState config option for store\r\n */\r\nexport interface NgSimpleStateStoreConfig extends NgSimpleStateConfig {\r\n storeName?: string;\r\n}\r\n\r\n/**\r\n * NgSimpleState config InjectionToken\r\n */\r\nexport const NG_SIMPLE_STORE_CONFIG = new InjectionToken<NgSimpleStateConfig>(\r\n 'ng-simple-state.config'\r\n);\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { NgSimpleStateConfig, NG_SIMPLE_STORE_CONFIG } from './ng-simple-state-models';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n})\r\nexport class NgSimpleStateModule {\r\n static forRoot(\r\n ngHttpCachingConfig?: NgSimpleStateConfig\r\n ): ModuleWithProviders<NgSimpleStateModule> {\r\n return {\r\n ngModule: NgSimpleStateModule,\r\n providers: [\r\n {\r\n provide: NG_SIMPLE_STORE_CONFIG,\r\n useValue: ngHttpCachingConfig,\r\n },\r\n ],\r\n };\r\n }\r\n}\r\n","import { Injectable, NgZone } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateDevTool {\r\n\r\n // tslint:disable-next-line: no-string-literal\r\n private globalDevtools: any = (window as any)['__REDUX_DEVTOOLS_EXTENSION__'] || (window as any)['devToolsExtension'];\r\n private localDevTool: any;\r\n private isActiveDevtool = false;\r\n private instanceId = `ng-simple-state-${Date.now()}`;\r\n private baseState: { [key: string]: any } = {};\r\n\r\n constructor(ngZone: NgZone) {\r\n if (this.globalDevtools) {\r\n // The `connect` method adds `message` event listener since it communicates\r\n // with an extension through `window.postMessage` and message events.\r\n // We handle only 2 events; thus, we don't want to run many change detections\r\n // because the extension sends events that we don't have to handle.\r\n ngZone.runOutsideAngular(() => {\r\n this.localDevTool = this.globalDevtools.connect({\r\n name: 'NgSimpleState',\r\n instanceId: this.instanceId\r\n });\r\n this.isActiveDevtool = !!this.localDevTool;\r\n if (this.isActiveDevtool) {\r\n this.localDevTool.init(this.baseState);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Return true if dev tool is actvice\r\n * @returns True if dev tool is actvice\r\n */\r\n isActive(): boolean {\r\n return this.isActiveDevtool;\r\n }\r\n\r\n /**\r\n * Send to dev tool a new state\r\n * @param storeName The store name\r\n * @param actionName The action name\r\n * @param state the state\r\n * @returns True if dev tool is enabled and action is send\r\n */\r\n send(storeName: string, actionName: string, state: any): boolean {\r\n if (this.isActiveDevtool) {\r\n this.localDevTool.send(`${storeName}.${actionName}`, Object.assign(this.baseState, { [storeName]: state }), false, this.instanceId);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","export const BASE_KEY = 'NgSimpleState::';\r\n\r\nexport abstract class NgSimpleStateBrowserStorage {\r\n\r\n private isStorageActive = false;\r\n\r\n constructor(private storage: Storage) {\r\n this.isStorageActive = !!storage;\r\n }\r\n\r\n /**\r\n * Return true if storage is active\r\n * @returns True if storage is active\r\n */\r\n isActive(): boolean {\r\n return this.isStorageActive;\r\n }\r\n\r\n /**\r\n * Set item into storage\r\n * @param key key name\r\n * @param state state valie\r\n * @returns True if item is stored into storage\r\n */\r\n setItem<K>(key: string, state: K): boolean {\r\n if (this.isStorageActive) {\r\n this.storage.setItem(BASE_KEY + key, JSON.stringify(state));\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Return item from storage\r\n * @param key key name\r\n * @returns the item\r\n */\r\n getItem<K>(key: string): K | null {\r\n if (this.isStorageActive) {\r\n const state = this.storage.getItem(BASE_KEY + key);\r\n if (state) {\r\n return JSON.parse(state);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Remove item from storage\r\n * @param key key name\r\n * @returns True if item is removed\r\n */\r\n removeItem(key: string): boolean {\r\n if (this.isStorageActive) {\r\n this.storage.removeItem(BASE_KEY + key);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateLocalStorage extends NgSimpleStateBrowserStorage {\r\n constructor() {\r\n super(localStorage);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateSessionStorage extends NgSimpleStateBrowserStorage {\r\n constructor() {\r\n super(sessionStorage);\r\n }\r\n}\r\n","import { Inject, Injectable, Injector, OnDestroy, Directive, isDevMode } from '@angular/core';\r\nimport { BehaviorSubject, Observable, asyncScheduler } from 'rxjs';\r\nimport { map, distinctUntilChanged, observeOn } from 'rxjs/operators';\r\nimport { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';\r\nimport { NgSimpleStateDevTool } from './ng-simple-state-dev-tool';\r\nimport { NgSimpleStateLocalStorage } from './ng-simple-state-local-storage';\r\nimport { NgSimpleStateStoreConfig, NG_SIMPLE_STORE_CONFIG } from './ng-simple-state-models';\r\nimport { NgSimpleStateSessionStorage } from './ng-simple-state-session-storage';\r\n\r\n@Injectable()\r\n@Directive()\r\n// tslint:disable-next-line: directive-class-suffix\r\nexport abstract class NgSimpleStateBaseStore<S extends object | Array<any>> implements OnDestroy {\r\n\r\n private state$: BehaviorSubject<S>;\r\n private localStorageIsEnabled: boolean;\r\n private devToolIsEnabled: boolean;\r\n private devTool: NgSimpleStateDevTool;\r\n private persistentStorage: NgSimpleStateBrowserStorage;\r\n private localStoreConfig: NgSimpleStateStoreConfig;\r\n private storeName: string;\r\n private firstState: S | null = null;\r\n private isArray: boolean;\r\n private devMode: boolean = isDevMode();\r\n\r\n /**\r\n * Return the observable of the state\r\n * @returns Observable of the state\r\n */\r\n public get state(): BehaviorSubject<S> {\r\n return this.state$;\r\n }\r\n\r\n constructor(@Inject(Injector) injector: Injector) {\r\n this.devTool = injector.get(NgSimpleStateDevTool);\r\n\r\n const globalConfig = injector.get(NG_SIMPLE_STORE_CONFIG, {});\r\n const storeConfig = this.storeConfig() || {};\r\n this.localStoreConfig = { ...globalConfig, ...storeConfig };\r\n\r\n if (this.localStoreConfig.persistentStorage === 'local') {\r\n this.persistentStorage = injector.get(NgSimpleStateLocalStorage);\r\n } else if (this.localStoreConfig.persistentStorage === 'session') {\r\n this.persistentStorage = injector.get(NgSimpleStateSessionStorage);\r\n } else {\r\n this.persistentStorage = injector.get(NgSimpleStateLocalStorage);\r\n }\r\n\r\n this.localStorageIsEnabled = typeof this.localStoreConfig.enableLocalStorage === 'boolean' ? this.localStoreConfig.enableLocalStorage : false;\r\n this.devToolIsEnabled = typeof this.localStoreConfig.enableDevTool === 'boolean' ? this.localStoreConfig.enableDevTool : false;\r\n this.storeName = typeof this.localStoreConfig.storeName === 'string' ? this.localStoreConfig.storeName : this.constructor.name;\r\n\r\n if (this.localStorageIsEnabled) {\r\n this.firstState = this.persistentStorage.getItem<S>(this.storeName);\r\n }\r\n if (!this.firstState) {\r\n this.firstState = this.initialState();\r\n }\r\n\r\n this.devToolSend(this.firstState, `initialState`);\r\n\r\n this.isArray = Array.isArray(this.firstState);\r\n this.state$ = new BehaviorSubject<S>(Object.assign(this.isArray ? [] : {}, this.firstState));\r\n }\r\n\r\n /**\r\n * When you override this method, you have to call the `super.ngOnDestroy()` method in your `ngOnDestroy()` method.\r\n */\r\n ngOnDestroy(): void {\r\n this.devToolSend(undefined, 'ngOnDestroy');\r\n this.state$.complete();\r\n }\r\n\r\n /**\r\n * Reset store to first loaded store state:\r\n * - the last saved state, if `enableLocalStorage` config is `true`\r\n * - otherwise the initial state provided from `initialState()` method.\r\n */\r\n resetState(): boolean {\r\n return this.setState(() => (this.firstState as S), 'resetState');\r\n }\r\n\r\n /**\r\n * Reset the store to initial state provided from `initialState()` method\r\n */\r\n restartState(): boolean {\r\n return this.setState(() => (this.initialState()), 'restartState');\r\n }\r\n\r\n /**\r\n * Override this method for set a specific config for the store\r\n * @returns NgSimpleStateStoreConfig\r\n */\r\n storeConfig(): NgSimpleStateStoreConfig | null {\r\n return null;\r\n }\r\n\r\n /**\r\n * Set into the store the initial state\r\n * @returns The state object\r\n */\r\n protected abstract initialState(): S;\r\n\r\n /**\r\n * Select a store state\r\n * @param selectFn State selector (if not provided return full state)\r\n * @returns Observable of the selected state\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n selectState<K>(selectFn?: (state: Readonly<S>) => K): Observable<K> {\r\n if (!selectFn) {\r\n selectFn = (tmpState: Readonly<S>) => Object.assign(this.isArray ? [] : {}, tmpState) as unknown as K;\r\n }\r\n return this.state$.pipe(\r\n map(state => (selectFn as any)(state as Readonly<S>)),\r\n distinctUntilChanged(),\r\n observeOn(asyncScheduler)\r\n );\r\n }\r\n\r\n /**\r\n * Return the current store state (snapshot)\r\n * @returns The current state\r\n */\r\n getCurrentState(): Readonly<S> {\r\n return this.deepFreeze(this.state$.getValue());\r\n }\r\n\r\n /**\r\n * Return the first loaded store state:\r\n * the last saved state, if `enableLocalStorage` config is `true`;\r\n * otherwise the initial state provided from `initialState()` method.\r\n * @returns The first state\r\n */\r\n getFirstState(): Readonly<S> | null {\r\n return this.deepFreeze(this.firstState);\r\n }\r\n\r\n /**\r\n * Set a new state\r\n * @param selectFn State reducer\r\n * @param actionName The action label into Redux DevTools (default is parent function name)\r\n * @returns True if the state is changed\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n setState(stateFn: (currentState: Readonly<S>) => Partial<S>, actionName?: string): boolean {\r\n const currState = this.getCurrentState();\r\n const newState = stateFn(currState);\r\n if (currState === newState) {\r\n return false;\r\n }\r\n let state: S;\r\n if (this.isArray) {\r\n state = Object.assign([] as S, newState);\r\n } else {\r\n state = Object.assign({}, currState, newState);\r\n }\r\n this.state$.next(state);\r\n this.devToolSend(state, actionName);\r\n if (this.localStorageIsEnabled) {\r\n this.persistentStorage.setItem<S>(this.storeName, state);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Send to dev tool a new state\r\n * @param newState new state\r\n * @param actionName The action name\r\n * @returns True if fìdev tools are enabled\r\n */\r\n private devToolSend(newState: S | undefined, actionName?: string): boolean {\r\n if (!this.devToolIsEnabled) {\r\n return false;\r\n }\r\n if (!actionName) {\r\n // retrive the parent (of parent) method into the stack trace\r\n actionName = new Error().stack\r\n ?.split('\\n')[3]\r\n .trim()\r\n .split(' ')[1]\r\n .split('.')[1];\r\n }\r\n return this.devTool.send(this.storeName, actionName || 'unknown', newState);\r\n }\r\n\r\n /**\r\n * Recursively Object.freeze simple Javascript structures consisting of plain objects, arrays, and primitives. \r\n * Make the data immutable.\r\n * @returns immutable object\r\n */\r\n private deepFreeze(object: S | null): Readonly<S> {\r\n // No freezing in production (for better performance).\r\n if (this.devMode || !object) {\r\n return object as Readonly<S>;\r\n }\r\n\r\n // When already frozen, we assume its children are frozen (for better performance).\r\n // This should be true if you always use `deepFreeze` to freeze objects,\r\n // which is why you should have a linter rule that prevents you from using\r\n // `Object.freeze` standalone.\r\n //\r\n // Note that Object.isFrozen will also return `true` for primitives (numbers,\r\n // strings, booleans, undefined, null), so there is no need to check for\r\n // those explicitly.\r\n if (Object.isFrozen(object)) {\r\n return object as Readonly<S>;\r\n }\r\n\r\n // At this point we know that we're dealing with either an array or plain object, so\r\n // just freeze it and recurse on its values.\r\n Object.freeze(object);\r\n Object.keys(object).forEach(key => this.deepFreeze((object as any)[key]));\r\n\r\n return object as Readonly<S>;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ng-simple-state\r\n */\r\nexport * from './lib/ng-simple-state.module';\r\nexport * from './lib/ng-simple-state-base-store';\r\nexport * from './lib/ng-simple-state-dev-tool';\r\nexport * from './lib/ng-simple-state-local-storage';\r\nexport * from './lib/ng-simple-state-session-storage';\r\nexport * from './lib/ng-simple-state-models';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-simple-state.mjs","sources":["../../../projects/ng-simple-state/src/lib/ng-simple-state-models.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state.module.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-dev-tool.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-browser-storage.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-local-storage.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-session-storage.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-base-store.ts","../../../projects/ng-simple-state/src/public-api.ts","../../../projects/ng-simple-state/src/ng-simple-state.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * NgSimpleState config option\r\n */\r\nexport interface NgSimpleStateConfig {\r\n enableDevTool?: boolean;\r\n enableLocalStorage?: boolean;\r\n persistentStorage?: 'session' | 'local';\r\n}\r\n\r\n/**\r\n * NgSimpleState config option for store\r\n */\r\nexport interface NgSimpleStateStoreConfig extends NgSimpleStateConfig {\r\n storeName?: string;\r\n}\r\n\r\n/**\r\n * NgSimpleState config InjectionToken\r\n */\r\nexport const NG_SIMPLE_STORE_CONFIG = new InjectionToken<NgSimpleStateConfig>(\r\n 'ng-simple-state.config'\r\n);\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { NgSimpleStateConfig, NG_SIMPLE_STORE_CONFIG } from './ng-simple-state-models';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n})\r\nexport class NgSimpleStateModule {\r\n static forRoot(\r\n ngHttpCachingConfig?: NgSimpleStateConfig\r\n ): ModuleWithProviders<NgSimpleStateModule> {\r\n return {\r\n ngModule: NgSimpleStateModule,\r\n providers: [\r\n {\r\n provide: NG_SIMPLE_STORE_CONFIG,\r\n useValue: ngHttpCachingConfig,\r\n },\r\n ],\r\n };\r\n }\r\n}\r\n","import { Injectable, NgZone } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateDevTool {\r\n\r\n // tslint:disable-next-line: no-string-literal\r\n private globalDevtools: any = (window as any)['__REDUX_DEVTOOLS_EXTENSION__'] || (window as any)['devToolsExtension'];\r\n private localDevTool: any;\r\n private isActiveDevtool = false;\r\n private instanceId = `ng-simple-state-${Date.now()}`;\r\n private baseState: { [key: string]: any } = {};\r\n\r\n constructor(ngZone: NgZone) {\r\n if (this.globalDevtools) {\r\n // The `connect` method adds `message` event listener since it communicates\r\n // with an extension through `window.postMessage` and message events.\r\n // We handle only 2 events; thus, we don't want to run many change detections\r\n // because the extension sends events that we don't have to handle.\r\n ngZone.runOutsideAngular(() => {\r\n this.localDevTool = this.globalDevtools.connect({\r\n name: 'NgSimpleState',\r\n instanceId: this.instanceId\r\n });\r\n this.isActiveDevtool = !!this.localDevTool;\r\n if (this.isActiveDevtool) {\r\n this.localDevTool.init(this.baseState);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Return true if dev tool is actvice\r\n * @returns True if dev tool is actvice\r\n */\r\n isActive(): boolean {\r\n return this.isActiveDevtool;\r\n }\r\n\r\n /**\r\n * Send to dev tool a new state\r\n * @param storeName The store name\r\n * @param actionName The action name\r\n * @param state the state\r\n * @returns True if dev tool is enabled and action is send\r\n */\r\n send(storeName: string, actionName: string, state: any): boolean {\r\n if (this.isActiveDevtool) {\r\n this.localDevTool.send(`${storeName}.${actionName}`, Object.assign(this.baseState, { [storeName]: state }), false, this.instanceId);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","export const BASE_KEY = 'NgSimpleState::';\r\n\r\nexport abstract class NgSimpleStateBrowserStorage {\r\n\r\n private isStorageActive = false;\r\n\r\n constructor(private storage: Storage) {\r\n this.isStorageActive = !!storage;\r\n }\r\n\r\n /**\r\n * Return true if storage is active\r\n * @returns True if storage is active\r\n */\r\n isActive(): boolean {\r\n return this.isStorageActive;\r\n }\r\n\r\n /**\r\n * Set item into storage\r\n * @param key key name\r\n * @param state state valie\r\n * @returns True if item is stored into storage\r\n */\r\n setItem<K>(key: string, state: K): boolean {\r\n if (this.isStorageActive) {\r\n this.storage.setItem(BASE_KEY + key, JSON.stringify(state));\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Return item from storage\r\n * @param key key name\r\n * @returns the item\r\n */\r\n getItem<K>(key: string): K | null {\r\n if (this.isStorageActive) {\r\n const state = this.storage.getItem(BASE_KEY + key);\r\n if (state) {\r\n return JSON.parse(state);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Remove item from storage\r\n * @param key key name\r\n * @returns True if item is removed\r\n */\r\n removeItem(key: string): boolean {\r\n if (this.isStorageActive) {\r\n this.storage.removeItem(BASE_KEY + key);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateLocalStorage extends NgSimpleStateBrowserStorage {\r\n constructor() {\r\n super(localStorage);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateSessionStorage extends NgSimpleStateBrowserStorage {\r\n constructor() {\r\n super(sessionStorage);\r\n }\r\n}\r\n","import { Inject, Injectable, Injector, OnDestroy, Directive, isDevMode } from '@angular/core';\r\nimport { BehaviorSubject, Observable, asyncScheduler } from 'rxjs';\r\nimport { map, distinctUntilChanged, observeOn } from 'rxjs/operators';\r\nimport { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';\r\nimport { NgSimpleStateDevTool } from './ng-simple-state-dev-tool';\r\nimport { NgSimpleStateLocalStorage } from './ng-simple-state-local-storage';\r\nimport { NgSimpleStateStoreConfig, NG_SIMPLE_STORE_CONFIG } from './ng-simple-state-models';\r\nimport { NgSimpleStateSessionStorage } from './ng-simple-state-session-storage';\r\n\r\n@Injectable()\r\n@Directive()\r\n// tslint:disable-next-line: directive-class-suffix\r\nexport abstract class NgSimpleStateBaseStore<S extends object | Array<any>> implements OnDestroy {\r\n\r\n private state$: BehaviorSubject<S>;\r\n private localStorageIsEnabled: boolean;\r\n private devToolIsEnabled: boolean;\r\n private devTool: NgSimpleStateDevTool;\r\n private persistentStorage: NgSimpleStateBrowserStorage;\r\n private localStoreConfig: NgSimpleStateStoreConfig;\r\n private storeName: string;\r\n private firstState: S | null = null;\r\n private isArray: boolean;\r\n private devMode: boolean = isDevMode();\r\n\r\n /**\r\n * Return the observable of the state\r\n * @returns Observable of the state\r\n */\r\n public get state(): BehaviorSubject<S> {\r\n return this.state$;\r\n }\r\n\r\n constructor(@Inject(Injector) injector: Injector) {\r\n this.devTool = injector.get(NgSimpleStateDevTool);\r\n\r\n const globalConfig = injector.get(NG_SIMPLE_STORE_CONFIG, {});\r\n const storeConfig = this.storeConfig() || {};\r\n this.localStoreConfig = { ...globalConfig, ...storeConfig };\r\n\r\n if (this.localStoreConfig.persistentStorage === 'local') {\r\n this.persistentStorage = injector.get(NgSimpleStateLocalStorage);\r\n } else if (this.localStoreConfig.persistentStorage === 'session') {\r\n this.persistentStorage = injector.get(NgSimpleStateSessionStorage);\r\n } else {\r\n this.persistentStorage = injector.get(NgSimpleStateLocalStorage);\r\n }\r\n\r\n this.localStorageIsEnabled = typeof this.localStoreConfig.enableLocalStorage === 'boolean' ? this.localStoreConfig.enableLocalStorage : false;\r\n this.devToolIsEnabled = typeof this.localStoreConfig.enableDevTool === 'boolean' ? this.localStoreConfig.enableDevTool : false;\r\n this.storeName = typeof this.localStoreConfig.storeName === 'string' ? this.localStoreConfig.storeName : this.constructor.name;\r\n\r\n if (this.localStorageIsEnabled) {\r\n this.firstState = this.persistentStorage.getItem<S>(this.storeName);\r\n }\r\n if (!this.firstState) {\r\n this.firstState = this.initialState();\r\n }\r\n\r\n this.devToolSend(this.firstState, `initialState`);\r\n\r\n this.isArray = Array.isArray(this.firstState);\r\n this.state$ = new BehaviorSubject<S>(Object.assign(this.isArray ? [] : {}, this.firstState));\r\n }\r\n\r\n /**\r\n * When you override this method, you have to call the `super.ngOnDestroy()` method in your `ngOnDestroy()` method.\r\n */\r\n ngOnDestroy(): void {\r\n this.devToolSend(undefined, 'ngOnDestroy');\r\n this.state$.complete();\r\n }\r\n\r\n /**\r\n * Reset store to first loaded store state:\r\n * - the last saved state, if `enableLocalStorage` config is `true`\r\n * - otherwise the initial state provided from `initialState()` method.\r\n */\r\n resetState(): boolean {\r\n return this.setState(() => (this.firstState as S), 'resetState');\r\n }\r\n\r\n /**\r\n * Restart the store to initial state provided from `initialState()` method\r\n */\r\n restartState(): boolean {\r\n return this.setState(() => (this.initialState()), 'restartState');\r\n }\r\n\r\n /**\r\n * Override this method for set a specific config for the store\r\n * @returns NgSimpleStateStoreConfig\r\n */\r\n storeConfig(): NgSimpleStateStoreConfig | null {\r\n return null;\r\n }\r\n\r\n /**\r\n * Set into the store the initial state\r\n * @returns The state object\r\n */\r\n protected abstract initialState(): S;\r\n\r\n /**\r\n * Select a store state\r\n * @param selectFn State selector (if not provided return full state)\r\n * @param comparator A function used to compare the previous and current keys for equality. Defaults to a `===` check.\r\n * @returns Observable of the selected state\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n selectState<K>(selectFn?: (state: Readonly<S>) => K, comparator?: (previous: K, current: K) => boolean): Observable<K> {\r\n if (!selectFn) {\r\n selectFn = (tmpState: Readonly<S>) => Object.assign(this.isArray ? [] : {}, tmpState) as unknown as K;\r\n }\r\n return this.state$.pipe(\r\n map(state => (selectFn as any)(state as Readonly<S>)),\r\n distinctUntilChanged(comparator),\r\n observeOn(asyncScheduler)\r\n );\r\n }\r\n\r\n /**\r\n * Return the current store state (snapshot)\r\n * @returns The current state\r\n */\r\n getCurrentState(): Readonly<S> {\r\n return this.deepFreeze(this.state$.getValue());\r\n }\r\n\r\n /**\r\n * Return the first loaded store state:\r\n * the last saved state, if `enableLocalStorage` config is `true`;\r\n * otherwise the initial state provided from `initialState()` method.\r\n * @returns The first state\r\n */\r\n getFirstState(): Readonly<S> | null {\r\n return this.deepFreeze(this.firstState);\r\n }\r\n\r\n /**\r\n * Set a new state\r\n * @param selectFn State reducer\r\n * @param actionName The action label into Redux DevTools (default is parent function name)\r\n * @returns True if the state is changed\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n setState(stateFn: (currentState: Readonly<S>) => Partial<S>, actionName?: string): boolean {\r\n const currState = this.getCurrentState();\r\n const newState = stateFn(currState);\r\n if (currState === newState) {\r\n return false;\r\n }\r\n let state: S;\r\n if (this.isArray) {\r\n state = Object.assign([] as S, newState);\r\n } else {\r\n state = Object.assign({}, currState, newState);\r\n }\r\n this.state$.next(state);\r\n this.devToolSend(state, actionName);\r\n if (this.localStorageIsEnabled) {\r\n this.persistentStorage.setItem<S>(this.storeName, state);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Send to dev tool a new state\r\n * @param newState new state\r\n * @param actionName The action name\r\n * @returns True if fìdev tools are enabled\r\n */\r\n private devToolSend(newState: S | undefined, actionName?: string): boolean {\r\n if (!this.devToolIsEnabled) {\r\n return false;\r\n }\r\n if (!actionName) {\r\n // retrive the parent (of parent) method into the stack trace\r\n actionName = new Error().stack\r\n ?.split('\\n')[3]\r\n .trim()\r\n .split(' ')[1]\r\n .split('.')[1] || 'unknown';\r\n }\r\n if (!this.devTool.send(this.storeName, actionName, newState)) {\r\n console.log(this.storeName + '.' + actionName, newState);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Recursively Object.freeze simple Javascript structures consisting of plain objects, arrays, and primitives.\r\n * Make the data immutable.\r\n * @returns immutable object\r\n */\r\n private deepFreeze(object: S | null): Readonly<S> {\r\n // No freezing in production (for better performance).\r\n if (this.devMode || !object) {\r\n return object as Readonly<S>;\r\n }\r\n\r\n // When already frozen, we assume its children are frozen (for better performance).\r\n // This should be true if you always use `deepFreeze` to freeze objects.\r\n //\r\n // Note that Object.isFrozen will also return `true` for primitives (numbers,\r\n // strings, booleans, undefined, null), so there is no need to check for\r\n // those explicitly.\r\n if (Object.isFrozen(object)) {\r\n return object as Readonly<S>;\r\n }\r\n\r\n // At this point we know that we're dealing with either an array or plain object, so\r\n // just freeze it and recurse on its values.\r\n Object.freeze(object);\r\n Object.keys(object).forEach(key => this.deepFreeze((object as any)[key]));\r\n\r\n return object as Readonly<S>;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ng-simple-state\r\n */\r\nexport * from './lib/ng-simple-state.module';\r\nexport * from './lib/ng-simple-state-base-store';\r\nexport * from './lib/ng-simple-state-dev-tool';\r\nexport * from './lib/ng-simple-state-local-storage';\r\nexport * from './lib/ng-simple-state-session-storage';\r\nexport * from './lib/ng-simple-state-models';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAkBA;;AAEG;MACU,sBAAsB,GAAG,IAAI,cAAc,CACpD,wBAAwB;;MCdf,mBAAmB,CAAA;IAC5B,OAAO,OAAO,CACV,mBAAyC,EAAA;QAEzC,OAAO;AACH,YAAA,QAAQ,EAAE,mBAAmB;AAC7B,YAAA,SAAS,EAAE;AACP,gBAAA;AACI,oBAAA,OAAO,EAAE,sBAAsB;AAC/B,oBAAA,QAAQ,EAAE,mBAAmB;AAChC,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;;gHAbQ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;iHAAnB,mBAAmB,EAAA,CAAA,CAAA;iHAAnB,mBAAmB,EAAA,CAAA,CAAA;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,OAAO,EAAE,EAAE;iBACd,CAAA;;;MCJY,oBAAoB,CAAA;AAS7B,IAAA,WAAA,CAAY,MAAc,EAAA;;AANlB,QAAA,IAAc,CAAA,cAAA,GAAS,MAAc,CAAC,8BAA8B,CAAC,IAAK,MAAc,CAAC,mBAAmB,CAAC,CAAC;AAE9G,QAAA,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;QACxB,IAAA,CAAA,UAAU,GAAG,CAAA,gBAAA,EAAmB,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE,CAAC;AAC7C,QAAA,IAAS,CAAA,SAAA,GAA2B,EAAE,CAAC;QAG3C,IAAI,IAAI,CAAC,cAAc,EAAE;;;;;AAKrB,YAAA,MAAM,CAAC,iBAAiB,CAAC,MAAK;gBAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAC5C,oBAAA,IAAI,EAAE,eAAe;oBACrB,UAAU,EAAE,IAAI,CAAC,UAAU;AAC9B,iBAAA,CAAC,CAAC;gBACH,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC3C,IAAI,IAAI,CAAC,eAAe,EAAE;oBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1C,iBAAA;AACL,aAAC,CAAC,CAAC;AACN,SAAA;KACJ;AAED;;;AAGG;IACH,QAAQ,GAAA;QACJ,OAAO,IAAI,CAAC,eAAe,CAAC;KAC/B;AAED;;;;;;AAMG;AACH,IAAA,IAAI,CAAC,SAAiB,EAAE,UAAkB,EAAE,KAAU,EAAA;QAClD,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAG,EAAA,SAAS,CAAI,CAAA,EAAA,UAAU,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACpI,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;;iHAjDQ,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACF3B,MAAM,QAAQ,GAAG,iBAAiB,CAAC;MAEpB,2BAA2B,CAAA;AAI7C,IAAA,WAAA,CAAoB,OAAgB,EAAA;AAAhB,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;AAF5B,QAAA,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;AAG5B,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC;KACpC;AAED;;;AAGG;IACH,QAAQ,GAAA;QACJ,OAAO,IAAI,CAAC,eAAe,CAAC;KAC/B;AAED;;;;;AAKG;IACH,OAAO,CAAI,GAAW,EAAE,KAAQ,EAAA;QAC5B,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAED;;;;AAIG;AACH,IAAA,OAAO,CAAI,GAAW,EAAA;QAClB,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;AACnD,YAAA,IAAI,KAAK,EAAE;AACP,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC5B,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;;;AAIG;AACH,IAAA,UAAU,CAAC,GAAW,EAAA;QAClB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;AACxC,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AACJ;;ACvDK,MAAO,yBAA0B,SAAQ,2BAA2B,CAAA;AACtE,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,YAAY,CAAC,CAAC;KACvB;;sHAHQ,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;2FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACC5B,MAAO,2BAA4B,SAAQ,2BAA2B,CAAA;AACxE,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,cAAc,CAAC,CAAC;KACzB;;wHAHQ,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,2BAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cADd,MAAM,EAAA,CAAA,CAAA;2FACnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACQlC;MACsB,sBAAsB,CAAA;AAqBxC,IAAA,WAAA,CAA8B,QAAkB,EAAA;AAZxC,QAAA,IAAU,CAAA,UAAA,GAAa,IAAI,CAAC;AAE5B,QAAA,IAAO,CAAA,OAAA,GAAY,SAAS,EAAE,CAAC;QAWnC,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAElD,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,gBAAgB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,YAAY,CAAK,EAAA,WAAW,CAAE,CAAC;AAE5D,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,KAAK,OAAO,EAAE;YACrD,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AACpE,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,KAAK,SAAS,EAAE;YAC9D,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AACtE,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AACpE,SAAA;QAED,IAAI,CAAC,qBAAqB,GAAG,OAAO,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,KAAK,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAC9I,IAAI,CAAC,gBAAgB,GAAG,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,KAAK,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,KAAK,CAAC;QAC/H,IAAI,CAAC,SAAS,GAAG,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,KAAK,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAE/H,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AACvE,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACzC,SAAA;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAc,YAAA,CAAA,CAAC,CAAC;QAElD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;KAChG;AAtCD;;;AAGG;AACH,IAAA,IAAW,KAAK,GAAA;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;AAkCD;;AAEG;IACH,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;KAC1B;AAED;;;;AAIG;IACH,UAAU,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAO,IAAI,CAAC,UAAgB,EAAE,YAAY,CAAC,CAAC;KACpE;AAED;;AAEG;IACH,YAAY,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;KACrE;AAED;;;AAGG;IACH,WAAW,GAAA;AACP,QAAA,OAAO,IAAI,CAAC;KACf;AAQD;;;;;AAKG;;IAEH,WAAW,CAAI,QAAoC,EAAE,UAAiD,EAAA;QAClG,IAAI,CAAC,QAAQ,EAAE;YACX,QAAQ,GAAG,CAAC,QAAqB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAiB,CAAC;AACzG,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,GAAG,CAAC,KAAK,IAAK,QAAgB,CAAC,KAAoB,CAAC,CAAC,EACrD,oBAAoB,CAAC,UAAU,CAAC,EAChC,SAAS,CAAC,cAAc,CAAC,CAC5B,CAAC;KACL;AAED;;;AAGG;IACH,eAAe,GAAA;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;KAClD;AAED;;;;;AAKG;IACH,aAAa,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC3C;AAED;;;;;AAKG;;IAEH,QAAQ,CAAC,OAAkD,EAAE,UAAmB,EAAA;AAC5E,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACzC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,SAAS,KAAK,QAAQ,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AACD,QAAA,IAAI,KAAQ,CAAC;QACb,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAO,EAAE,QAAQ,CAAC,CAAC;AAC5C,SAAA;AAAM,aAAA;YACH,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClD,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAI,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC5D,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;;;;AAKG;IACK,WAAW,CAAC,QAAuB,EAAE,UAAmB,EAAA;;AAC5D,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;QACD,IAAI,CAAC,UAAU,EAAE;;AAEb,YAAA,UAAU,GAAG,CAAA,CAAA,EAAA,GAAA,IAAI,KAAK,EAAE,CAAC,KAAK,MACxB,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA,CACd,IAAI,EAAA,CACJ,KAAK,CAAC,GAAG,CAAA,CAAE,CAAC,CACZ,CAAA,KAAK,CAAC,GAAG,CAAE,CAAA,CAAC,CAAC,KAAI,SAAS,CAAC;AACnC,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE;AAC1D,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC5D,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;;;AAIG;AACK,IAAA,UAAU,CAAC,MAAgB,EAAA;;AAE/B,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,OAAO,MAAqB,CAAC;AAChC,SAAA;;;;;;;AAQD,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACzB,YAAA,OAAO,MAAqB,CAAC;AAChC,SAAA;;;AAID,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAE,MAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE1E,QAAA,OAAO,MAAqB,CAAC;KAChC;;AA7MiB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,kBAqBpB,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;uGArBV,sBAAsB,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;uHAAtB,sBAAsB,EAAA,CAAA,CAAA;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAH3C,UAAU;;kBACV,SAAS;;;8BAuBO,MAAM;+BAAC,QAAQ,CAAA;;;;ACjChC;;AAEG;;ACFH;;AAEG;;;;"}
@@ -21,10 +21,10 @@ class NgSimpleStateModule {
21
21
  };
22
22
  }
23
23
  }
24
- NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
25
- NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateModule });
26
- NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateModule });
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateModule, decorators: [{
24
+ NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
25
+ NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateModule });
26
+ NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateModule });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateModule, decorators: [{
28
28
  type: NgModule,
29
29
  args: [{
30
30
  declarations: [],
@@ -79,9 +79,9 @@ class NgSimpleStateDevTool {
79
79
  return false;
80
80
  }
81
81
  }
82
- NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateDevTool, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
83
- NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
82
+ NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateDevTool, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
83
+ NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
85
85
  type: Injectable,
86
86
  args: [{ providedIn: 'root' }]
87
87
  }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
@@ -146,9 +146,9 @@ class NgSimpleStateLocalStorage extends NgSimpleStateBrowserStorage {
146
146
  super(localStorage);
147
147
  }
148
148
  }
149
- NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
150
- NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
149
+ NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
150
+ NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
152
152
  type: Injectable,
153
153
  args: [{ providedIn: 'root' }]
154
154
  }], ctorParameters: function () { return []; } });
@@ -158,9 +158,9 @@ class NgSimpleStateSessionStorage extends NgSimpleStateBrowserStorage {
158
158
  super(sessionStorage);
159
159
  }
160
160
  }
161
- NgSimpleStateSessionStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateSessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
162
- NgSimpleStateSessionStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateSessionStorage, providedIn: 'root' });
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateSessionStorage, decorators: [{
161
+ NgSimpleStateSessionStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateSessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
162
+ NgSimpleStateSessionStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateSessionStorage, providedIn: 'root' });
163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateSessionStorage, decorators: [{
164
164
  type: Injectable,
165
165
  args: [{ providedIn: 'root' }]
166
166
  }], ctorParameters: function () { return []; } });
@@ -219,7 +219,7 @@ class NgSimpleStateBaseStore {
219
219
  return this.setState(() => this.firstState, 'resetState');
220
220
  }
221
221
  /**
222
- * Reset the store to initial state provided from `initialState()` method
222
+ * Restart the store to initial state provided from `initialState()` method
223
223
  */
224
224
  restartState() {
225
225
  return this.setState(() => (this.initialState()), 'restartState');
@@ -234,14 +234,15 @@ class NgSimpleStateBaseStore {
234
234
  /**
235
235
  * Select a store state
236
236
  * @param selectFn State selector (if not provided return full state)
237
+ * @param comparator A function used to compare the previous and current keys for equality. Defaults to a `===` check.
237
238
  * @returns Observable of the selected state
238
239
  */
239
240
  // eslint-disable-next-line no-unused-vars
240
- selectState(selectFn) {
241
+ selectState(selectFn, comparator) {
241
242
  if (!selectFn) {
242
243
  selectFn = (tmpState) => Object.assign(this.isArray ? [] : {}, tmpState);
243
244
  }
244
- return this.state$.pipe(map(state => selectFn(state)), distinctUntilChanged(), observeOn(asyncScheduler));
245
+ return this.state$.pipe(map(state => selectFn(state)), distinctUntilChanged(comparator), observeOn(asyncScheduler));
245
246
  }
246
247
  /**
247
248
  * Return the current store state (snapshot)
@@ -302,9 +303,12 @@ class NgSimpleStateBaseStore {
302
303
  ?.split('\n')[3]
303
304
  .trim()
304
305
  .split(' ')[1]
305
- .split('.')[1];
306
+ .split('.')[1] || 'unknown';
306
307
  }
307
- return this.devTool.send(this.storeName, actionName || 'unknown', newState);
308
+ if (!this.devTool.send(this.storeName, actionName, newState)) {
309
+ console.log(this.storeName + '.' + actionName, newState);
310
+ }
311
+ return true;
308
312
  }
309
313
  /**
310
314
  * Recursively Object.freeze simple Javascript structures consisting of plain objects, arrays, and primitives.
@@ -317,9 +321,7 @@ class NgSimpleStateBaseStore {
317
321
  return object;
318
322
  }
319
323
  // When already frozen, we assume its children are frozen (for better performance).
320
- // This should be true if you always use `deepFreeze` to freeze objects,
321
- // which is why you should have a linter rule that prevents you from using
322
- // `Object.freeze` standalone.
324
+ // This should be true if you always use `deepFreeze` to freeze objects.
323
325
  //
324
326
  // Note that Object.isFrozen will also return `true` for primitives (numbers,
325
327
  // strings, booleans, undefined, null), so there is no need to check for
@@ -334,10 +336,10 @@ class NgSimpleStateBaseStore {
334
336
  return object;
335
337
  }
336
338
  }
337
- NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Directive });
338
- NgSimpleStateBaseStore.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: NgSimpleStateBaseStore, ngImport: i0 });
339
- NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateBaseStore });
340
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
339
+ NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Directive });
340
+ NgSimpleStateBaseStore.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: NgSimpleStateBaseStore, ngImport: i0 });
341
+ NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateBaseStore });
342
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
341
343
  type: Injectable
342
344
  }, {
343
345
  type: Directive
@@ -1 +1 @@
1
- {"version":3,"file":"ng-simple-state.mjs","sources":["../../../projects/ng-simple-state/src/lib/ng-simple-state-models.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state.module.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-dev-tool.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-browser-storage.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-local-storage.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-session-storage.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-base-store.ts","../../../projects/ng-simple-state/src/public-api.ts","../../../projects/ng-simple-state/src/ng-simple-state.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * NgSimpleState config option\r\n */\r\nexport interface NgSimpleStateConfig {\r\n enableDevTool?: boolean;\r\n enableLocalStorage?: boolean;\r\n persistentStorage?: 'session' | 'local';\r\n}\r\n\r\n/**\r\n * NgSimpleState config option for store\r\n */\r\nexport interface NgSimpleStateStoreConfig extends NgSimpleStateConfig {\r\n storeName?: string;\r\n}\r\n\r\n/**\r\n * NgSimpleState config InjectionToken\r\n */\r\nexport const NG_SIMPLE_STORE_CONFIG = new InjectionToken<NgSimpleStateConfig>(\r\n 'ng-simple-state.config'\r\n);\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { NgSimpleStateConfig, NG_SIMPLE_STORE_CONFIG } from './ng-simple-state-models';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n})\r\nexport class NgSimpleStateModule {\r\n static forRoot(\r\n ngHttpCachingConfig?: NgSimpleStateConfig\r\n ): ModuleWithProviders<NgSimpleStateModule> {\r\n return {\r\n ngModule: NgSimpleStateModule,\r\n providers: [\r\n {\r\n provide: NG_SIMPLE_STORE_CONFIG,\r\n useValue: ngHttpCachingConfig,\r\n },\r\n ],\r\n };\r\n }\r\n}\r\n","import { Injectable, NgZone } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateDevTool {\r\n\r\n // tslint:disable-next-line: no-string-literal\r\n private globalDevtools: any = (window as any)['__REDUX_DEVTOOLS_EXTENSION__'] || (window as any)['devToolsExtension'];\r\n private localDevTool: any;\r\n private isActiveDevtool = false;\r\n private instanceId = `ng-simple-state-${Date.now()}`;\r\n private baseState: { [key: string]: any } = {};\r\n\r\n constructor(ngZone: NgZone) {\r\n if (this.globalDevtools) {\r\n // The `connect` method adds `message` event listener since it communicates\r\n // with an extension through `window.postMessage` and message events.\r\n // We handle only 2 events; thus, we don't want to run many change detections\r\n // because the extension sends events that we don't have to handle.\r\n ngZone.runOutsideAngular(() => {\r\n this.localDevTool = this.globalDevtools.connect({\r\n name: 'NgSimpleState',\r\n instanceId: this.instanceId\r\n });\r\n this.isActiveDevtool = !!this.localDevTool;\r\n if (this.isActiveDevtool) {\r\n this.localDevTool.init(this.baseState);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Return true if dev tool is actvice\r\n * @returns True if dev tool is actvice\r\n */\r\n isActive(): boolean {\r\n return this.isActiveDevtool;\r\n }\r\n\r\n /**\r\n * Send to dev tool a new state\r\n * @param storeName The store name\r\n * @param actionName The action name\r\n * @param state the state\r\n * @returns True if dev tool is enabled and action is send\r\n */\r\n send(storeName: string, actionName: string, state: any): boolean {\r\n if (this.isActiveDevtool) {\r\n this.localDevTool.send(`${storeName}.${actionName}`, Object.assign(this.baseState, { [storeName]: state }), false, this.instanceId);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","export const BASE_KEY = 'NgSimpleState::';\r\n\r\nexport abstract class NgSimpleStateBrowserStorage {\r\n\r\n private isStorageActive = false;\r\n\r\n constructor(private storage: Storage) {\r\n this.isStorageActive = !!storage;\r\n }\r\n\r\n /**\r\n * Return true if storage is active\r\n * @returns True if storage is active\r\n */\r\n isActive(): boolean {\r\n return this.isStorageActive;\r\n }\r\n\r\n /**\r\n * Set item into storage\r\n * @param key key name\r\n * @param state state valie\r\n * @returns True if item is stored into storage\r\n */\r\n setItem<K>(key: string, state: K): boolean {\r\n if (this.isStorageActive) {\r\n this.storage.setItem(BASE_KEY + key, JSON.stringify(state));\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Return item from storage\r\n * @param key key name\r\n * @returns the item\r\n */\r\n getItem<K>(key: string): K | null {\r\n if (this.isStorageActive) {\r\n const state = this.storage.getItem(BASE_KEY + key);\r\n if (state) {\r\n return JSON.parse(state);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Remove item from storage\r\n * @param key key name\r\n * @returns True if item is removed\r\n */\r\n removeItem(key: string): boolean {\r\n if (this.isStorageActive) {\r\n this.storage.removeItem(BASE_KEY + key);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateLocalStorage extends NgSimpleStateBrowserStorage {\r\n constructor() {\r\n super(localStorage);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateSessionStorage extends NgSimpleStateBrowserStorage {\r\n constructor() {\r\n super(sessionStorage);\r\n }\r\n}\r\n","import { Inject, Injectable, Injector, OnDestroy, Directive, isDevMode } from '@angular/core';\r\nimport { BehaviorSubject, Observable, asyncScheduler } from 'rxjs';\r\nimport { map, distinctUntilChanged, observeOn } from 'rxjs/operators';\r\nimport { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';\r\nimport { NgSimpleStateDevTool } from './ng-simple-state-dev-tool';\r\nimport { NgSimpleStateLocalStorage } from './ng-simple-state-local-storage';\r\nimport { NgSimpleStateStoreConfig, NG_SIMPLE_STORE_CONFIG } from './ng-simple-state-models';\r\nimport { NgSimpleStateSessionStorage } from './ng-simple-state-session-storage';\r\n\r\n@Injectable()\r\n@Directive()\r\n// tslint:disable-next-line: directive-class-suffix\r\nexport abstract class NgSimpleStateBaseStore<S extends object | Array<any>> implements OnDestroy {\r\n\r\n private state$: BehaviorSubject<S>;\r\n private localStorageIsEnabled: boolean;\r\n private devToolIsEnabled: boolean;\r\n private devTool: NgSimpleStateDevTool;\r\n private persistentStorage: NgSimpleStateBrowserStorage;\r\n private localStoreConfig: NgSimpleStateStoreConfig;\r\n private storeName: string;\r\n private firstState: S | null = null;\r\n private isArray: boolean;\r\n private devMode: boolean = isDevMode();\r\n\r\n /**\r\n * Return the observable of the state\r\n * @returns Observable of the state\r\n */\r\n public get state(): BehaviorSubject<S> {\r\n return this.state$;\r\n }\r\n\r\n constructor(@Inject(Injector) injector: Injector) {\r\n this.devTool = injector.get(NgSimpleStateDevTool);\r\n\r\n const globalConfig = injector.get(NG_SIMPLE_STORE_CONFIG, {});\r\n const storeConfig = this.storeConfig() || {};\r\n this.localStoreConfig = { ...globalConfig, ...storeConfig };\r\n\r\n if (this.localStoreConfig.persistentStorage === 'local') {\r\n this.persistentStorage = injector.get(NgSimpleStateLocalStorage);\r\n } else if (this.localStoreConfig.persistentStorage === 'session') {\r\n this.persistentStorage = injector.get(NgSimpleStateSessionStorage);\r\n } else {\r\n this.persistentStorage = injector.get(NgSimpleStateLocalStorage);\r\n }\r\n\r\n this.localStorageIsEnabled = typeof this.localStoreConfig.enableLocalStorage === 'boolean' ? this.localStoreConfig.enableLocalStorage : false;\r\n this.devToolIsEnabled = typeof this.localStoreConfig.enableDevTool === 'boolean' ? this.localStoreConfig.enableDevTool : false;\r\n this.storeName = typeof this.localStoreConfig.storeName === 'string' ? this.localStoreConfig.storeName : this.constructor.name;\r\n\r\n if (this.localStorageIsEnabled) {\r\n this.firstState = this.persistentStorage.getItem<S>(this.storeName);\r\n }\r\n if (!this.firstState) {\r\n this.firstState = this.initialState();\r\n }\r\n\r\n this.devToolSend(this.firstState, `initialState`);\r\n\r\n this.isArray = Array.isArray(this.firstState);\r\n this.state$ = new BehaviorSubject<S>(Object.assign(this.isArray ? [] : {}, this.firstState));\r\n }\r\n\r\n /**\r\n * When you override this method, you have to call the `super.ngOnDestroy()` method in your `ngOnDestroy()` method.\r\n */\r\n ngOnDestroy(): void {\r\n this.devToolSend(undefined, 'ngOnDestroy');\r\n this.state$.complete();\r\n }\r\n\r\n /**\r\n * Reset store to first loaded store state:\r\n * - the last saved state, if `enableLocalStorage` config is `true`\r\n * - otherwise the initial state provided from `initialState()` method.\r\n */\r\n resetState(): boolean {\r\n return this.setState(() => (this.firstState as S), 'resetState');\r\n }\r\n\r\n /**\r\n * Reset the store to initial state provided from `initialState()` method\r\n */\r\n restartState(): boolean {\r\n return this.setState(() => (this.initialState()), 'restartState');\r\n }\r\n\r\n /**\r\n * Override this method for set a specific config for the store\r\n * @returns NgSimpleStateStoreConfig\r\n */\r\n storeConfig(): NgSimpleStateStoreConfig | null {\r\n return null;\r\n }\r\n\r\n /**\r\n * Set into the store the initial state\r\n * @returns The state object\r\n */\r\n protected abstract initialState(): S;\r\n\r\n /**\r\n * Select a store state\r\n * @param selectFn State selector (if not provided return full state)\r\n * @returns Observable of the selected state\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n selectState<K>(selectFn?: (state: Readonly<S>) => K): Observable<K> {\r\n if (!selectFn) {\r\n selectFn = (tmpState: Readonly<S>) => Object.assign(this.isArray ? [] : {}, tmpState) as unknown as K;\r\n }\r\n return this.state$.pipe(\r\n map(state => (selectFn as any)(state as Readonly<S>)),\r\n distinctUntilChanged(),\r\n observeOn(asyncScheduler)\r\n );\r\n }\r\n\r\n /**\r\n * Return the current store state (snapshot)\r\n * @returns The current state\r\n */\r\n getCurrentState(): Readonly<S> {\r\n return this.deepFreeze(this.state$.getValue());\r\n }\r\n\r\n /**\r\n * Return the first loaded store state:\r\n * the last saved state, if `enableLocalStorage` config is `true`;\r\n * otherwise the initial state provided from `initialState()` method.\r\n * @returns The first state\r\n */\r\n getFirstState(): Readonly<S> | null {\r\n return this.deepFreeze(this.firstState);\r\n }\r\n\r\n /**\r\n * Set a new state\r\n * @param selectFn State reducer\r\n * @param actionName The action label into Redux DevTools (default is parent function name)\r\n * @returns True if the state is changed\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n setState(stateFn: (currentState: Readonly<S>) => Partial<S>, actionName?: string): boolean {\r\n const currState = this.getCurrentState();\r\n const newState = stateFn(currState);\r\n if (currState === newState) {\r\n return false;\r\n }\r\n let state: S;\r\n if (this.isArray) {\r\n state = Object.assign([] as S, newState);\r\n } else {\r\n state = Object.assign({}, currState, newState);\r\n }\r\n this.state$.next(state);\r\n this.devToolSend(state, actionName);\r\n if (this.localStorageIsEnabled) {\r\n this.persistentStorage.setItem<S>(this.storeName, state);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Send to dev tool a new state\r\n * @param newState new state\r\n * @param actionName The action name\r\n * @returns True if fìdev tools are enabled\r\n */\r\n private devToolSend(newState: S | undefined, actionName?: string): boolean {\r\n if (!this.devToolIsEnabled) {\r\n return false;\r\n }\r\n if (!actionName) {\r\n // retrive the parent (of parent) method into the stack trace\r\n actionName = new Error().stack\r\n ?.split('\\n')[3]\r\n .trim()\r\n .split(' ')[1]\r\n .split('.')[1];\r\n }\r\n return this.devTool.send(this.storeName, actionName || 'unknown', newState);\r\n }\r\n\r\n /**\r\n * Recursively Object.freeze simple Javascript structures consisting of plain objects, arrays, and primitives. \r\n * Make the data immutable.\r\n * @returns immutable object\r\n */\r\n private deepFreeze(object: S | null): Readonly<S> {\r\n // No freezing in production (for better performance).\r\n if (this.devMode || !object) {\r\n return object as Readonly<S>;\r\n }\r\n\r\n // When already frozen, we assume its children are frozen (for better performance).\r\n // This should be true if you always use `deepFreeze` to freeze objects,\r\n // which is why you should have a linter rule that prevents you from using\r\n // `Object.freeze` standalone.\r\n //\r\n // Note that Object.isFrozen will also return `true` for primitives (numbers,\r\n // strings, booleans, undefined, null), so there is no need to check for\r\n // those explicitly.\r\n if (Object.isFrozen(object)) {\r\n return object as Readonly<S>;\r\n }\r\n\r\n // At this point we know that we're dealing with either an array or plain object, so\r\n // just freeze it and recurse on its values.\r\n Object.freeze(object);\r\n Object.keys(object).forEach(key => this.deepFreeze((object as any)[key]));\r\n\r\n return object as Readonly<S>;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ng-simple-state\r\n */\r\nexport * from './lib/ng-simple-state.module';\r\nexport * from './lib/ng-simple-state-base-store';\r\nexport * from './lib/ng-simple-state-dev-tool';\r\nexport * from './lib/ng-simple-state-local-storage';\r\nexport * from './lib/ng-simple-state-session-storage';\r\nexport * from './lib/ng-simple-state-models';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-simple-state.mjs","sources":["../../../projects/ng-simple-state/src/lib/ng-simple-state-models.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state.module.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-dev-tool.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-browser-storage.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-local-storage.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-session-storage.ts","../../../projects/ng-simple-state/src/lib/ng-simple-state-base-store.ts","../../../projects/ng-simple-state/src/public-api.ts","../../../projects/ng-simple-state/src/ng-simple-state.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * NgSimpleState config option\r\n */\r\nexport interface NgSimpleStateConfig {\r\n enableDevTool?: boolean;\r\n enableLocalStorage?: boolean;\r\n persistentStorage?: 'session' | 'local';\r\n}\r\n\r\n/**\r\n * NgSimpleState config option for store\r\n */\r\nexport interface NgSimpleStateStoreConfig extends NgSimpleStateConfig {\r\n storeName?: string;\r\n}\r\n\r\n/**\r\n * NgSimpleState config InjectionToken\r\n */\r\nexport const NG_SIMPLE_STORE_CONFIG = new InjectionToken<NgSimpleStateConfig>(\r\n 'ng-simple-state.config'\r\n);\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { NgSimpleStateConfig, NG_SIMPLE_STORE_CONFIG } from './ng-simple-state-models';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [],\r\n exports: [],\r\n})\r\nexport class NgSimpleStateModule {\r\n static forRoot(\r\n ngHttpCachingConfig?: NgSimpleStateConfig\r\n ): ModuleWithProviders<NgSimpleStateModule> {\r\n return {\r\n ngModule: NgSimpleStateModule,\r\n providers: [\r\n {\r\n provide: NG_SIMPLE_STORE_CONFIG,\r\n useValue: ngHttpCachingConfig,\r\n },\r\n ],\r\n };\r\n }\r\n}\r\n","import { Injectable, NgZone } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateDevTool {\r\n\r\n // tslint:disable-next-line: no-string-literal\r\n private globalDevtools: any = (window as any)['__REDUX_DEVTOOLS_EXTENSION__'] || (window as any)['devToolsExtension'];\r\n private localDevTool: any;\r\n private isActiveDevtool = false;\r\n private instanceId = `ng-simple-state-${Date.now()}`;\r\n private baseState: { [key: string]: any } = {};\r\n\r\n constructor(ngZone: NgZone) {\r\n if (this.globalDevtools) {\r\n // The `connect` method adds `message` event listener since it communicates\r\n // with an extension through `window.postMessage` and message events.\r\n // We handle only 2 events; thus, we don't want to run many change detections\r\n // because the extension sends events that we don't have to handle.\r\n ngZone.runOutsideAngular(() => {\r\n this.localDevTool = this.globalDevtools.connect({\r\n name: 'NgSimpleState',\r\n instanceId: this.instanceId\r\n });\r\n this.isActiveDevtool = !!this.localDevTool;\r\n if (this.isActiveDevtool) {\r\n this.localDevTool.init(this.baseState);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Return true if dev tool is actvice\r\n * @returns True if dev tool is actvice\r\n */\r\n isActive(): boolean {\r\n return this.isActiveDevtool;\r\n }\r\n\r\n /**\r\n * Send to dev tool a new state\r\n * @param storeName The store name\r\n * @param actionName The action name\r\n * @param state the state\r\n * @returns True if dev tool is enabled and action is send\r\n */\r\n send(storeName: string, actionName: string, state: any): boolean {\r\n if (this.isActiveDevtool) {\r\n this.localDevTool.send(`${storeName}.${actionName}`, Object.assign(this.baseState, { [storeName]: state }), false, this.instanceId);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","export const BASE_KEY = 'NgSimpleState::';\r\n\r\nexport abstract class NgSimpleStateBrowserStorage {\r\n\r\n private isStorageActive = false;\r\n\r\n constructor(private storage: Storage) {\r\n this.isStorageActive = !!storage;\r\n }\r\n\r\n /**\r\n * Return true if storage is active\r\n * @returns True if storage is active\r\n */\r\n isActive(): boolean {\r\n return this.isStorageActive;\r\n }\r\n\r\n /**\r\n * Set item into storage\r\n * @param key key name\r\n * @param state state valie\r\n * @returns True if item is stored into storage\r\n */\r\n setItem<K>(key: string, state: K): boolean {\r\n if (this.isStorageActive) {\r\n this.storage.setItem(BASE_KEY + key, JSON.stringify(state));\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Return item from storage\r\n * @param key key name\r\n * @returns the item\r\n */\r\n getItem<K>(key: string): K | null {\r\n if (this.isStorageActive) {\r\n const state = this.storage.getItem(BASE_KEY + key);\r\n if (state) {\r\n return JSON.parse(state);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Remove item from storage\r\n * @param key key name\r\n * @returns True if item is removed\r\n */\r\n removeItem(key: string): boolean {\r\n if (this.isStorageActive) {\r\n this.storage.removeItem(BASE_KEY + key);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateLocalStorage extends NgSimpleStateBrowserStorage {\r\n constructor() {\r\n super(localStorage);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateSessionStorage extends NgSimpleStateBrowserStorage {\r\n constructor() {\r\n super(sessionStorage);\r\n }\r\n}\r\n","import { Inject, Injectable, Injector, OnDestroy, Directive, isDevMode } from '@angular/core';\r\nimport { BehaviorSubject, Observable, asyncScheduler } from 'rxjs';\r\nimport { map, distinctUntilChanged, observeOn } from 'rxjs/operators';\r\nimport { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';\r\nimport { NgSimpleStateDevTool } from './ng-simple-state-dev-tool';\r\nimport { NgSimpleStateLocalStorage } from './ng-simple-state-local-storage';\r\nimport { NgSimpleStateStoreConfig, NG_SIMPLE_STORE_CONFIG } from './ng-simple-state-models';\r\nimport { NgSimpleStateSessionStorage } from './ng-simple-state-session-storage';\r\n\r\n@Injectable()\r\n@Directive()\r\n// tslint:disable-next-line: directive-class-suffix\r\nexport abstract class NgSimpleStateBaseStore<S extends object | Array<any>> implements OnDestroy {\r\n\r\n private state$: BehaviorSubject<S>;\r\n private localStorageIsEnabled: boolean;\r\n private devToolIsEnabled: boolean;\r\n private devTool: NgSimpleStateDevTool;\r\n private persistentStorage: NgSimpleStateBrowserStorage;\r\n private localStoreConfig: NgSimpleStateStoreConfig;\r\n private storeName: string;\r\n private firstState: S | null = null;\r\n private isArray: boolean;\r\n private devMode: boolean = isDevMode();\r\n\r\n /**\r\n * Return the observable of the state\r\n * @returns Observable of the state\r\n */\r\n public get state(): BehaviorSubject<S> {\r\n return this.state$;\r\n }\r\n\r\n constructor(@Inject(Injector) injector: Injector) {\r\n this.devTool = injector.get(NgSimpleStateDevTool);\r\n\r\n const globalConfig = injector.get(NG_SIMPLE_STORE_CONFIG, {});\r\n const storeConfig = this.storeConfig() || {};\r\n this.localStoreConfig = { ...globalConfig, ...storeConfig };\r\n\r\n if (this.localStoreConfig.persistentStorage === 'local') {\r\n this.persistentStorage = injector.get(NgSimpleStateLocalStorage);\r\n } else if (this.localStoreConfig.persistentStorage === 'session') {\r\n this.persistentStorage = injector.get(NgSimpleStateSessionStorage);\r\n } else {\r\n this.persistentStorage = injector.get(NgSimpleStateLocalStorage);\r\n }\r\n\r\n this.localStorageIsEnabled = typeof this.localStoreConfig.enableLocalStorage === 'boolean' ? this.localStoreConfig.enableLocalStorage : false;\r\n this.devToolIsEnabled = typeof this.localStoreConfig.enableDevTool === 'boolean' ? this.localStoreConfig.enableDevTool : false;\r\n this.storeName = typeof this.localStoreConfig.storeName === 'string' ? this.localStoreConfig.storeName : this.constructor.name;\r\n\r\n if (this.localStorageIsEnabled) {\r\n this.firstState = this.persistentStorage.getItem<S>(this.storeName);\r\n }\r\n if (!this.firstState) {\r\n this.firstState = this.initialState();\r\n }\r\n\r\n this.devToolSend(this.firstState, `initialState`);\r\n\r\n this.isArray = Array.isArray(this.firstState);\r\n this.state$ = new BehaviorSubject<S>(Object.assign(this.isArray ? [] : {}, this.firstState));\r\n }\r\n\r\n /**\r\n * When you override this method, you have to call the `super.ngOnDestroy()` method in your `ngOnDestroy()` method.\r\n */\r\n ngOnDestroy(): void {\r\n this.devToolSend(undefined, 'ngOnDestroy');\r\n this.state$.complete();\r\n }\r\n\r\n /**\r\n * Reset store to first loaded store state:\r\n * - the last saved state, if `enableLocalStorage` config is `true`\r\n * - otherwise the initial state provided from `initialState()` method.\r\n */\r\n resetState(): boolean {\r\n return this.setState(() => (this.firstState as S), 'resetState');\r\n }\r\n\r\n /**\r\n * Restart the store to initial state provided from `initialState()` method\r\n */\r\n restartState(): boolean {\r\n return this.setState(() => (this.initialState()), 'restartState');\r\n }\r\n\r\n /**\r\n * Override this method for set a specific config for the store\r\n * @returns NgSimpleStateStoreConfig\r\n */\r\n storeConfig(): NgSimpleStateStoreConfig | null {\r\n return null;\r\n }\r\n\r\n /**\r\n * Set into the store the initial state\r\n * @returns The state object\r\n */\r\n protected abstract initialState(): S;\r\n\r\n /**\r\n * Select a store state\r\n * @param selectFn State selector (if not provided return full state)\r\n * @param comparator A function used to compare the previous and current keys for equality. Defaults to a `===` check.\r\n * @returns Observable of the selected state\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n selectState<K>(selectFn?: (state: Readonly<S>) => K, comparator?: (previous: K, current: K) => boolean): Observable<K> {\r\n if (!selectFn) {\r\n selectFn = (tmpState: Readonly<S>) => Object.assign(this.isArray ? [] : {}, tmpState) as unknown as K;\r\n }\r\n return this.state$.pipe(\r\n map(state => (selectFn as any)(state as Readonly<S>)),\r\n distinctUntilChanged(comparator),\r\n observeOn(asyncScheduler)\r\n );\r\n }\r\n\r\n /**\r\n * Return the current store state (snapshot)\r\n * @returns The current state\r\n */\r\n getCurrentState(): Readonly<S> {\r\n return this.deepFreeze(this.state$.getValue());\r\n }\r\n\r\n /**\r\n * Return the first loaded store state:\r\n * the last saved state, if `enableLocalStorage` config is `true`;\r\n * otherwise the initial state provided from `initialState()` method.\r\n * @returns The first state\r\n */\r\n getFirstState(): Readonly<S> | null {\r\n return this.deepFreeze(this.firstState);\r\n }\r\n\r\n /**\r\n * Set a new state\r\n * @param selectFn State reducer\r\n * @param actionName The action label into Redux DevTools (default is parent function name)\r\n * @returns True if the state is changed\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n setState(stateFn: (currentState: Readonly<S>) => Partial<S>, actionName?: string): boolean {\r\n const currState = this.getCurrentState();\r\n const newState = stateFn(currState);\r\n if (currState === newState) {\r\n return false;\r\n }\r\n let state: S;\r\n if (this.isArray) {\r\n state = Object.assign([] as S, newState);\r\n } else {\r\n state = Object.assign({}, currState, newState);\r\n }\r\n this.state$.next(state);\r\n this.devToolSend(state, actionName);\r\n if (this.localStorageIsEnabled) {\r\n this.persistentStorage.setItem<S>(this.storeName, state);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Send to dev tool a new state\r\n * @param newState new state\r\n * @param actionName The action name\r\n * @returns True if fìdev tools are enabled\r\n */\r\n private devToolSend(newState: S | undefined, actionName?: string): boolean {\r\n if (!this.devToolIsEnabled) {\r\n return false;\r\n }\r\n if (!actionName) {\r\n // retrive the parent (of parent) method into the stack trace\r\n actionName = new Error().stack\r\n ?.split('\\n')[3]\r\n .trim()\r\n .split(' ')[1]\r\n .split('.')[1] || 'unknown';\r\n }\r\n if (!this.devTool.send(this.storeName, actionName, newState)) {\r\n console.log(this.storeName + '.' + actionName, newState);\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Recursively Object.freeze simple Javascript structures consisting of plain objects, arrays, and primitives.\r\n * Make the data immutable.\r\n * @returns immutable object\r\n */\r\n private deepFreeze(object: S | null): Readonly<S> {\r\n // No freezing in production (for better performance).\r\n if (this.devMode || !object) {\r\n return object as Readonly<S>;\r\n }\r\n\r\n // When already frozen, we assume its children are frozen (for better performance).\r\n // This should be true if you always use `deepFreeze` to freeze objects.\r\n //\r\n // Note that Object.isFrozen will also return `true` for primitives (numbers,\r\n // strings, booleans, undefined, null), so there is no need to check for\r\n // those explicitly.\r\n if (Object.isFrozen(object)) {\r\n return object as Readonly<S>;\r\n }\r\n\r\n // At this point we know that we're dealing with either an array or plain object, so\r\n // just freeze it and recurse on its values.\r\n Object.freeze(object);\r\n Object.keys(object).forEach(key => this.deepFreeze((object as any)[key]));\r\n\r\n return object as Readonly<S>;\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ng-simple-state\r\n */\r\nexport * from './lib/ng-simple-state.module';\r\nexport * from './lib/ng-simple-state-base-store';\r\nexport * from './lib/ng-simple-state-dev-tool';\r\nexport * from './lib/ng-simple-state-local-storage';\r\nexport * from './lib/ng-simple-state-session-storage';\r\nexport * from './lib/ng-simple-state-models';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -30,7 +30,7 @@ export declare abstract class NgSimpleStateBaseStore<S extends object | Array<an
30
30
  */
31
31
  resetState(): boolean;
32
32
  /**
33
- * Reset the store to initial state provided from `initialState()` method
33
+ * Restart the store to initial state provided from `initialState()` method
34
34
  */
35
35
  restartState(): boolean;
36
36
  /**
@@ -46,9 +46,10 @@ export declare abstract class NgSimpleStateBaseStore<S extends object | Array<an
46
46
  /**
47
47
  * Select a store state
48
48
  * @param selectFn State selector (if not provided return full state)
49
+ * @param comparator A function used to compare the previous and current keys for equality. Defaults to a `===` check.
49
50
  * @returns Observable of the selected state
50
51
  */
51
- selectState<K>(selectFn?: (state: Readonly<S>) => K): Observable<K>;
52
+ selectState<K>(selectFn?: (state: Readonly<S>) => K, comparator?: (previous: K, current: K) => boolean): Observable<K>;
52
53
  /**
53
54
  * Return the current store state (snapshot)
54
55
  * @returns The current state
@@ -82,6 +83,6 @@ export declare abstract class NgSimpleStateBaseStore<S extends object | Array<an
82
83
  */
83
84
  private deepFreeze;
84
85
  static ɵfac: i0.ɵɵFactoryDeclaration<NgSimpleStateBaseStore<any>, never>;
85
- static ɵdir: i0.ɵɵDirectiveDeclaration<NgSimpleStateBaseStore<any>, never, never, {}, {}, never, never, false>;
86
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgSimpleStateBaseStore<any>, never, never, {}, {}, never, never, false, never>;
86
87
  static ɵprov: i0.ɵɵInjectableDeclaration<NgSimpleStateBaseStore<any>>;
87
88
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-simple-state",
3
- "version": "14.0.6",
3
+ "version": "15.0.1",
4
4
  "description": "Simple state management in Angular with only Services and RxJS.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,8 +19,8 @@
19
19
  },
20
20
  "homepage": "https://github.com/nigrosimone/ng-simple-state",
21
21
  "peerDependencies": {
22
- "@angular/common": "^14.0.0",
23
- "@angular/core": "^14.0.0"
22
+ "@angular/common": "^15.0.0",
23
+ "@angular/core": "^15.0.0"
24
24
  },
25
25
  "dependencies": {
26
26
  "tslib": "^2.3.0"