ng-simple-state 13.0.5 → 13.0.6

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.
package/README.md CHANGED
@@ -24,6 +24,7 @@ npm i ng-simple-state
24
24
  | -------------------- | ----------------------------------------------------------------------------------------------- | ---------- |
25
25
  | *enableDevTool* | if `true` enable `Redux DevTools` browser extension for inspect the state of the store. | `false` |
26
26
  | *enableLocalStorage* | if `true` latest state of store is saved in local storage and reloaded on store initialization. | `false` |
27
+ | *persistentStorage* | Set the persistent storage `local` or `session` | `local` |
27
28
 
28
29
  _Side note: each store can be override the global configuration implementing `storeConfig()` method (see "Override global config")._
29
30
 
@@ -258,7 +259,8 @@ export class CounterStore extends NgSimpleStateBaseStore<CounterState> {
258
259
 
259
260
  override storeConfig(): NgSimpleStateStoreConfig {
260
261
  return {
261
- enableLocalStorage: true // enable local storage for this store
262
+ enableLocalStorage: true, // enable local storage for this store
263
+ persistentStorage: 'session', // persistentStorage can be 'session' or 'local' (default is localStorage)
262
264
  storeName: 'CounterStore2', // For default the store name is the class name, you can set a specific name for this store (must be be unique)
263
265
  }
264
266
  }
@@ -272,6 +274,7 @@ The options are defined by `NgSimpleStateStoreConfig` interface:
272
274
  | *enableDevTool* | if `true` enable `Redux DevTools` browser extension for inspect the state of the store. | `false` |
273
275
  | *enableLocalStorage* | if `true` latest state of store is saved in local storage and reloaded on store initialization. | `false` |
274
276
  | *storeName* | The name used into `Redux DevTools` and local storage key. | Class name |
277
+ | *persistentStorage* | Set the persistent storage `local` or `session` | `local` |
275
278
 
276
279
 
277
280
  ## Testing
@@ -4,20 +4,29 @@ import { map, distinctUntilChanged, observeOn } from 'rxjs/operators';
4
4
  import { NgSimpleStateDevTool } from './ng-simple-state-dev-tool';
5
5
  import { NgSimpleStateLocalStorage } from './ng-simple-state-local-storage';
6
6
  import { NG_SIMPLE_STORE_CONFIG } from './ng-simple-state-models';
7
+ import { NgSimpleStateSessionStorage } from './ng-simple-state-session-storage';
7
8
  import * as i0 from "@angular/core";
8
9
  export class NgSimpleStateBaseStore {
9
10
  constructor(injector) {
10
11
  this.firstState = null;
11
12
  this.devTool = injector.get(NgSimpleStateDevTool);
12
- this.localStorage = injector.get(NgSimpleStateLocalStorage);
13
13
  const globalConfig = injector.get(NG_SIMPLE_STORE_CONFIG, {});
14
14
  const storeConfig = this.storeConfig() || {};
15
15
  this.localStoreConfig = { ...globalConfig, ...storeConfig };
16
+ if (this.localStoreConfig.persistentStorage === 'local') {
17
+ this.persistentStorage = injector.get(NgSimpleStateLocalStorage);
18
+ }
19
+ else if (this.localStoreConfig.persistentStorage === 'session') {
20
+ this.persistentStorage = injector.get(NgSimpleStateSessionStorage);
21
+ }
22
+ else {
23
+ this.persistentStorage = injector.get(NgSimpleStateLocalStorage);
24
+ }
16
25
  this.localStorageIsEnabled = typeof this.localStoreConfig.enableLocalStorage === 'boolean' ? this.localStoreConfig.enableLocalStorage : false;
17
26
  this.devToolIsEnabled = typeof this.localStoreConfig.enableDevTool === 'boolean' ? this.localStoreConfig.enableDevTool : false;
18
27
  this.storeName = typeof this.localStoreConfig.storeName === 'string' ? this.localStoreConfig.storeName : this.constructor.name;
19
28
  if (this.localStorageIsEnabled) {
20
- this.firstState = this.localStorage.getItem(this.storeName);
29
+ this.firstState = this.persistentStorage.getItem(this.storeName);
21
30
  }
22
31
  if (!this.firstState) {
23
32
  this.firstState = this.initialState();
@@ -96,7 +105,7 @@ export class NgSimpleStateBaseStore {
96
105
  }
97
106
  this.devToolSend(state, actionName);
98
107
  if (this.localStorageIsEnabled) {
99
- this.localStorage.setItem(this.storeName, state);
108
+ this.persistentStorage.setItem(this.storeName, state);
100
109
  }
101
110
  this.state$.next(state);
102
111
  }
@@ -121,12 +130,12 @@ export class NgSimpleStateBaseStore {
121
130
  return this.devTool.send(this.storeName, actionName || 'unknown', newState);
122
131
  }
123
132
  }
124
- NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Injectable });
125
- NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateBaseStore });
126
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
133
+ NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Injectable });
134
+ NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateBaseStore });
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
127
136
  type: Injectable
128
137
  }], ctorParameters: function () { return [{ type: i0.Injector, decorators: [{
129
138
  type: Inject,
130
139
  args: [Injector]
131
140
  }] }]; } });
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLWJhc2Utc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zaW1wbGUtc3RhdGUvc3JjL2xpYi9uZy1zaW1wbGUtc3RhdGUtYmFzZS1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBYyxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQTRCLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRTVGLE1BQU0sT0FBZ0Isc0JBQXNCO0lBb0J4QyxZQUE4QixRQUFrQjtRQVh4QyxlQUFVLEdBQWEsSUFBSSxDQUFDO1FBWWhDLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTVELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBRTVELElBQUksQ0FBQyxxQkFB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QyxDQUFDLENBQUM7aUJBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsSUFBSSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEYsQ0FBQzs7bUhBbkppQixzQkFBc0Isa0JBb0JwQixRQUFRO3VIQXBCVixzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFEM0MsVUFBVTs7MEJBcUJNLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG9ic2VydmVPbiB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTmdTaW1wbGVTdGF0ZURldlRvb2wgfSBmcm9tICcuL25nLXNpbXBsZS1zdGF0ZS1kZXYtdG9vbCc7XHJcbmltcG9ydCB7IE5nU2ltcGxlU3RhdGVMb2NhbFN0b3JhZ2UgfSBmcm9tICcuL25nLXNpbXBsZS1zdGF0ZS1sb2NhbC1zdG9yYWdlJztcclxuaW1wb3J0IHsgTmdTaW1wbGVTdGF0ZVN0b3JlQ29uZmlnLCBOR19TSU1QTEVfU1RPUkVfQ09ORklHIH0gZnJvbSAnLi9uZy1zaW1wbGUtc3RhdGUtbW9kZWxzJztcclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmdTaW1wbGVTdGF0ZUJhc2VTdG9yZTxTIGV4dGVuZHMgb2JqZWN0IHwgQXJyYXk8YW55Pj4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8Uz47XHJcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZUlzRW5hYmxlZDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgZGV2VG9vbElzRW5hYmxlZDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgZGV2VG9vbDogTmdTaW1wbGVTdGF0ZURldlRvb2w7XHJcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZTogTmdTaW1wbGVTdGF0ZUxvY2FsU3RvcmFnZTtcclxuICAgIHByaXZhdGUgbG9jYWxTdG9yZUNvbmZpZzogTmdTaW1wbGVTdGF0ZVN0b3JlQ29uZmlnO1xyXG4gICAgcHJpdmF0ZSBzdG9yZU5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgZmlyc3RTdGF0ZTogUyB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBpc0FycmF5OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRoZSBvYnNlcnZhYmxlIHN0YXRlXHJcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHN0YXRlKCk6IEJlaGF2aW9yU3ViamVjdDxTPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSW5qZWN0b3IpIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHRoaXMuZGV2VG9vbCA9IGluamVjdG9yLmdldChOZ1NpbXBsZVN0YXRlRGV2VG9vbCk7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UgPSBpbmplY3Rvci5nZXQoTmdTaW1wbGVTdGF0ZUxvY2FsU3RvcmFnZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGluamVjdG9yLmdldChOR19TSU1QTEVfU1RPUkVfQ09ORklHLCB7fSk7XHJcbiAgICAgICAgY29uc3Qgc3RvcmVDb25maWcgPSB0aGlzLnN0b3JlQ29uZmlnKCkgfHwge307XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JlQ29uZmlnID0geyAuLi5nbG9iYWxDb25maWcsIC4uLnN0b3JlQ29uZmlnIH07XHJcblxyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlSXNFbmFibGVkID0gdHlwZW9mIHRoaXMubG9jYWxTdG9yZUNvbmZpZy5lbmFibGVMb2NhbFN0b3JhZ2UgPT09ICdib29sZWFuJyA/IHRoaXMubG9jYWxTdG9yZUNvbmZpZy5lbmFibGVMb2NhbFN0b3JhZ2UgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmRldlRvb2xJc0VuYWJsZWQgPSB0eXBlb2YgdGhpcy5sb2NhbFN0b3JlQ29uZmlnLmVuYWJsZURldlRvb2wgPT09ICdib29sZWFuJyA/IHRoaXMubG9jYWxTdG9yZUNvbmZpZy5lbmFibGVEZXZUb29sIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdG9yZU5hbWUgPSB0eXBlb2YgdGhpcy5sb2NhbFN0b3JlQ29uZmlnLnN0b3JlTmFtZSA9PT0gJ3N0cmluZycgPyB0aGlzLmxvY2FsU3RvcmVDb25maWcuc3RvcmVOYW1lIDogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VJc0VuYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdFN0YXRlID0gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbTxTPih0aGlzLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5maXJzdFN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3RTdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRldlRvb2xTZW5kKHRoaXMuZmlyc3RTdGF0ZSwgYGluaXRpYWxTdGF0ZWApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHRoaXMuZmlyc3RTdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFM+KE9iamVjdC5hc3NpZ24odGhpcy5pc0FycmF5ID8gW10gOiB7fSwgdGhpcy5maXJzdFN0YXRlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHlvdSBvdmVycmlkZSB0aGlzIG1ldGhvZCwgeW91IGhhdmUgdG8gY2FsbCB0aGUgYHN1cGVyLm5nT25EZXN0cm95KClgIG1ldGhvZCBpbiB5b3VyIGBuZ09uRGVzdHJveSgpYCBtZXRob2QuXHJcbiAgICAgKi9cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGV2VG9vbFNlbmQodW5kZWZpbmVkLCAnbmdPbkRlc3Ryb3knKTtcclxuICAgICAgICB0aGlzLnN0YXRlJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXQgc3RvcmUgdG8gZmlyc3QgbG9hZGVkIHN0b3JlIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHJlc2V0U3RhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAodGhpcy5maXJzdFN0YXRlIGFzIFMpLCAncmVzZXRTdGF0ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXQgc3RvcmUgdG8gaW5pdGlhbCBzdG9yZSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICByZXN0YXJ0U3RhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgoKSA9PiAodGhpcy5pbml0aWFsU3RhdGUoKSksICdyZXN0YXJ0U3RhdGUnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIGZvciBzZXQgYSBzcGVjaWZpYyBjb25maWcgZm9yIHRoZSBzdG9yZVxyXG4gICAgICogQHJldHVybnMgTmdTaW1wbGVTdGF0ZVN0b3JlQ29uZmlnXHJcbiAgICAgKi9cclxuICAgIHN0b3JlQ29uZmlnKCk6IE5nU2ltcGxlU3RhdGVTdG9yZUNvbmZpZyB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGludG8gdGhlIHN0b3JlIHRoZSBpbml0aWFsIHN0YXRlXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgc3RhdGUgb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBpbml0aWFsU3RhdGUoKTogUztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCBhIHN0b3JlIHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gc2VsZWN0Rm4gU3RhdGUgc2VsZWN0b3IgKGlmIG5vdCBwcm92aWRlZCByZXR1cm4gZnVsbCBzdGF0ZSlcclxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHNlbGVjdGVkIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgc2VsZWN0U3RhdGU8Sz4oc2VsZWN0Rm4/OiAoc3RhdGU6IFJlYWRvbmx5PFM+KSA9PiBLKTogT2JzZXJ2YWJsZTxLPiB7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RGbikge1xyXG4gICAgICAgICAgICBzZWxlY3RGbiA9ICh0bXBTdGF0ZTogUmVhZG9ubHk8Uz4pOiBhbnkgPT4gT2JqZWN0LmFzc2lnbih0aGlzLmlzQXJyYXkgPyBbXSA6IHt9LCB0bXBTdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoc3RhdGUgPT4gKHNlbGVjdEZuIGFzIGFueSkoc3RhdGUgYXMgUmVhZG9ubHk8Uz4pKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgb2JzZXJ2ZU9uKGFzeW5jU2NoZWR1bGVyKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RvcmUgc3RhdGUgKHNuYXBzaG90KVxyXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgc3RhdGVcclxuICAgICAqL1xyXG4gICAgZ2V0Q3VycmVudFN0YXRlKCk6IFMge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlJC5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGEgbmV3IHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gc2VsZWN0Rm4gU3RhdGUgcmVkdWNlclxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIGFjdGlvbiBsYWJlbCBpbnRvIFJlZHV4IERldlRvb2xzIChkZWZhdWx0IGlzIHBhcmVudCBmdW5jdGlvbiBuYW1lKVxyXG4gICAgICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHNldFN0YXRlKHN0YXRlRm46IChjdXJyZW50U3RhdGU6IFJlYWRvbmx5PFM+KSA9PiBQYXJ0aWFsPFM+LCBhY3Rpb25OYW1lPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY3VyclN0YXRlID0gdGhpcy5nZXRDdXJyZW50U3RhdGUoKTtcclxuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlRm4oY3VyclN0YXRlKTtcclxuICAgICAgICBsZXQgc3RhdGU6IFM7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheSkge1xyXG4gICAgICAgICAgICBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oW10sIG5ld1N0YXRlKSBhcyBhbnk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyU3RhdGUsIG5ld1N0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kZXZUb29sU2VuZChzdGF0ZSwgYWN0aW9uTmFtZSk7XHJcbiAgICAgICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlSXNFbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW08Uz4odGhpcy5zdG9yZU5hbWUsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdGF0ZSQubmV4dChzdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIHRvIGRldiB0b29sIGEgbmV3IHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gbmV3U3RhdGUgbmV3IHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgYWN0aW9uIG5hbWVcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgZsOsZGV2IHRvb2xzIGFyZSBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZGV2VG9vbFNlbmQobmV3U3RhdGU6IFMgfCB1bmRlZmluZWQsIGFjdGlvbk5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGV2VG9vbElzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAvLyByZXRyaXZlIHRoZSBwYXJlbnQgKG9mIHBhcmVudCkgbWV0aG9kIGludG8gdGhlIHN0YWNrIHRyYWNlXHJcbiAgICAgICAgICAgIGFjdGlvbk5hbWUgPSBuZXcgRXJyb3IoKS5zdGFja1xyXG4gICAgICAgICAgICAgICAgPy5zcGxpdCgnXFxuJylbM11cclxuICAgICAgICAgICAgICAgIC50cmltKClcclxuICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpWzFdXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoJy4nKVsxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV2VG9vbC5zZW5kKHRoaXMuc3RvcmVOYW1lLCBhY3Rpb25OYW1lIHx8ICd1bmtub3duJywgbmV3U3RhdGUpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLWJhc2Utc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zaW1wbGUtc3RhdGUvc3JjL2xpYi9uZy1zaW1wbGUtc3RhdGUtYmFzZS1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBYyxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQTRCLHNCQUFzQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBRWhGLE1BQU0sT0FBZ0Isc0JBQXNCO0lBb0J4QyxZQUE4QixRQUFrQjtRQVh4QyxlQUFVLEdBQWEsSUFBSSxDQUFDO1FBWWhDLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWxELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBRTVELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFp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QUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFdBQVcsQ0FBQyxRQUF1QixFQUFFLFVBQW1CO1FBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2IsNkRBQTZEO1lBQzdELFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLEtBQUs7Z0JBQzFCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDZixJQUFJLEVBQUU7aUJBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDYixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEI7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxJQUFJLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRixDQUFDOzttSEExSmlCLHNCQUFzQixrQkFvQnBCLFFBQVE7dUhBcEJWLHNCQUFzQjsyRkFBdEIsc0JBQXNCO2tCQUQzQyxVQUFVOzswQkFxQk0sTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgb2JzZXJ2ZU9uIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlQnJvd3NlclN0b3JhZ2UgfSBmcm9tICcuL25nLXNpbXBsZS1zdGF0ZS1icm93c2VyLXN0b3JhZ2UnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlRGV2VG9vbCB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLWRldi10b29sJztcclxuaW1wb3J0IHsgTmdTaW1wbGVTdGF0ZUxvY2FsU3RvcmFnZSB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLWxvY2FsLXN0b3JhZ2UnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlU3RvcmVDb25maWcsIE5HX1NJTVBMRV9TVE9SRV9DT05GSUcgfSBmcm9tICcuL25nLXNpbXBsZS1zdGF0ZS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlU2Vzc2lvblN0b3JhZ2UgfSBmcm9tICcuL25nLXNpbXBsZS1zdGF0ZS1zZXNzaW9uLXN0b3JhZ2UnO1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ1NpbXBsZVN0YXRlQmFzZVN0b3JlPFMgZXh0ZW5kcyBvYmplY3QgfCBBcnJheTxhbnk+PiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxTPjtcclxuICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlSXNFbmFibGVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBkZXZUb29sSXNFbmFibGVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBkZXZUb29sOiBOZ1NpbXBsZVN0YXRlRGV2VG9vbDtcclxuICAgIHByaXZhdGUgcGVyc2lzdGVudFN0b3JhZ2U6IE5nU2ltcGxlU3RhdGVCcm93c2VyU3RvcmFnZTtcclxuICAgIHByaXZhdGUgbG9jYWxTdG9yZUNvbmZpZzogTmdTaW1wbGVTdGF0ZVN0b3JlQ29uZmlnO1xyXG4gICAgcHJpdmF0ZSBzdG9yZU5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgZmlyc3RTdGF0ZTogUyB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBpc0FycmF5OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRoZSBvYnNlcnZhYmxlIHN0YXRlXHJcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHN0YXRlKCk6IEJlaGF2aW9yU3ViamVjdDxTPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSW5qZWN0b3IpIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHRoaXMuZGV2VG9vbCA9IGluamVjdG9yLmdldChOZ1NpbXBsZVN0YXRlRGV2VG9vbCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGdsb2JhbENvbmZpZyA9IGluamVjdG9yLmdldChOR19TSU1QTEVfU1RPUkVfQ09ORklHLCB7fSk7XHJcbiAgICAgICAgY29uc3Qgc3RvcmVDb25maWcgPSB0aGlzLnN0b3JlQ29uZmlnKCkgfHwge307XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JlQ29uZmlnID0geyAuLi5nbG9iYWxDb25maWcsIC4uLnN0b3JlQ29uZmlnIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxvY2FsU3RvcmVDb25maWcucGVyc2lzdGVudFN0b3JhZ2UgPT09ICdsb2NhbCcpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJzaXN0ZW50U3RvcmFnZSA9IGluamVjdG9yLmdldChOZ1NpbXBsZVN0YXRlTG9jYWxTdG9yYWdlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxTdG9yZUNvbmZpZy5wZXJzaXN0ZW50U3RvcmFnZSA9PT0gJ3Nlc3Npb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVyc2lzdGVudFN0b3JhZ2UgPSBpbmplY3Rvci5nZXQoTmdTaW1wbGVTdGF0ZVNlc3Npb25TdG9yYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlID0gaW5qZWN0b3IuZ2V0KE5nU2ltcGxlU3RhdGVMb2NhbFN0b3JhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VJc0VuYWJsZWQgPSB0eXBlb2YgdGhpcy5sb2NhbFN0b3JlQ29uZmlnLmVuYWJsZUxvY2FsU3RvcmFnZSA9PT0gJ2Jvb2xlYW4nID8gdGhpcy5sb2NhbFN0b3JlQ29uZmlnLmVuYWJsZUxvY2FsU3RvcmFnZSA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGV2VG9vbElzRW5hYmxlZCA9IHR5cGVvZiB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlRGV2VG9vbCA9PT0gJ2Jvb2xlYW4nID8gdGhpcy5sb2NhbFN0b3JlQ29uZmlnLmVuYWJsZURldlRvb2wgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLnN0b3JlTmFtZSA9IHR5cGVvZiB0aGlzLmxvY2FsU3RvcmVDb25maWcuc3RvcmVOYW1lID09PSAnc3RyaW5nJyA/IHRoaXMubG9jYWxTdG9yZUNvbmZpZy5zdG9yZU5hbWUgOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZUlzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0U3RhdGUgPSB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlLmdldEl0ZW08Uz4odGhpcy5zdG9yZU5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuZmlyc3RTdGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0U3RhdGUgPSB0aGlzLmluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kZXZUb29sU2VuZCh0aGlzLmZpcnN0U3RhdGUsIGBpbml0aWFsU3RhdGVgKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0FycmF5ID0gQXJyYXkuaXNBcnJheSh0aGlzLmZpcnN0U3RhdGUpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTPihPYmplY3QuYXNzaWduKHRoaXMuaXNBcnJheSA/IFtdIDoge30sIHRoaXMuZmlyc3RTdGF0ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hlbiB5b3Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QsIHlvdSBoYXZlIHRvIGNhbGwgdGhlIGBzdXBlci5uZ09uRGVzdHJveSgpYCBtZXRob2QgaW4geW91ciBgbmdPbkRlc3Ryb3koKWAgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRldlRvb2xTZW5kKHVuZGVmaW5lZCwgJ25nT25EZXN0cm95Jyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSQuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IHN0b3JlIHRvIGZpcnN0IGxvYWRlZCBzdG9yZSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICByZXNldFN0YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHRoaXMuZmlyc3RTdGF0ZSBhcyBTKSwgJ3Jlc2V0U3RhdGUnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IHN0b3JlIHRvIGluaXRpYWwgc3RvcmUgc3RhdGVcclxuICAgICAqL1xyXG4gICAgcmVzdGFydFN0YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKCkgPT4gKHRoaXMuaW5pdGlhbFN0YXRlKCkpLCAncmVzdGFydFN0YXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCBmb3Igc2V0IGEgc3BlY2lmaWMgY29uZmlnIGZvciB0aGUgc3RvcmVcclxuICAgICAqIEByZXR1cm5zIE5nU2ltcGxlU3RhdGVTdG9yZUNvbmZpZ1xyXG4gICAgICovXHJcbiAgICBzdG9yZUNvbmZpZygpOiBOZ1NpbXBsZVN0YXRlU3RvcmVDb25maWcgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBpbnRvIHRoZSBzdG9yZSB0aGUgaW5pdGlhbCBzdGF0ZVxyXG4gICAgICogQHJldHVybnMgVGhlIHN0YXRlIG9iamVjdFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW5pdGlhbFN0YXRlKCk6IFM7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZWxlY3QgYSBzdG9yZSBzdGF0ZVxyXG4gICAgICogQHBhcmFtIHNlbGVjdEZuIFN0YXRlIHNlbGVjdG9yIChpZiBub3QgcHJvdmlkZWQgcmV0dXJuIGZ1bGwgc3RhdGUpXHJcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSBzZWxlY3RlZCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHNlbGVjdFN0YXRlPEs+KHNlbGVjdEZuPzogKHN0YXRlOiBSZWFkb25seTxTPikgPT4gSyk6IE9ic2VydmFibGU8Sz4ge1xyXG4gICAgICAgIGlmICghc2VsZWN0Rm4pIHtcclxuICAgICAgICAgICAgc2VsZWN0Rm4gPSAodG1wU3RhdGU6IFJlYWRvbmx5PFM+KTogYW55ID0+IE9iamVjdC5hc3NpZ24odGhpcy5pc0FycmF5ID8gW10gOiB7fSwgdG1wU3RhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQucGlwZShcclxuICAgICAgICAgICAgbWFwKHN0YXRlID0+IChzZWxlY3RGbiBhcyBhbnkpKHN0YXRlIGFzIFJlYWRvbmx5PFM+KSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIG9ic2VydmVPbihhc3luY1NjaGVkdWxlcilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRoZSBjdXJyZW50IHN0b3JlIHN0YXRlIChzbmFwc2hvdClcclxuICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHN0YXRlXHJcbiAgICAgKi9cclxuICAgIGdldEN1cnJlbnRTdGF0ZSgpOiBTIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIG5ldyBzdGF0ZVxyXG4gICAgICogQHBhcmFtIHNlbGVjdEZuIFN0YXRlIHJlZHVjZXJcclxuICAgICAqIEBwYXJhbSBhY3Rpb25OYW1lIFRoZSBhY3Rpb24gbGFiZWwgaW50byBSZWR1eCBEZXZUb29scyAoZGVmYXVsdCBpcyBwYXJlbnQgZnVuY3Rpb24gbmFtZSlcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBzZXRTdGF0ZShzdGF0ZUZuOiAoY3VycmVudFN0YXRlOiBSZWFkb25seTxTPikgPT4gUGFydGlhbDxTPiwgYWN0aW9uTmFtZT86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGN1cnJTdGF0ZSA9IHRoaXMuZ2V0Q3VycmVudFN0YXRlKCk7XHJcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZUZuKGN1cnJTdGF0ZSk7XHJcbiAgICAgICAgbGV0IHN0YXRlOiBTO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXJyYXkpIHtcclxuICAgICAgICAgICAgc3RhdGUgPSBPYmplY3QuYXNzaWduKFtdLCBuZXdTdGF0ZSkgYXMgYW55O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgY3VyclN0YXRlLCBuZXdTdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGV2VG9vbFNlbmQoc3RhdGUsIGFjdGlvbk5hbWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZUlzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlLnNldEl0ZW08Uz4odGhpcy5zdG9yZU5hbWUsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdGF0ZSQubmV4dChzdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIHRvIGRldiB0b29sIGEgbmV3IHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gbmV3U3RhdGUgbmV3IHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgYWN0aW9uIG5hbWVcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgZsOsZGV2IHRvb2xzIGFyZSBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZGV2VG9vbFNlbmQobmV3U3RhdGU6IFMgfCB1bmRlZmluZWQsIGFjdGlvbk5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGV2VG9vbElzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAvLyByZXRyaXZlIHRoZSBwYXJlbnQgKG9mIHBhcmVudCkgbWV0aG9kIGludG8gdGhlIHN0YWNrIHRyYWNlXHJcbiAgICAgICAgICAgIGFjdGlvbk5hbWUgPSBuZXcgRXJyb3IoKS5zdGFja1xyXG4gICAgICAgICAgICAgICAgPy5zcGxpdCgnXFxuJylbM11cclxuICAgICAgICAgICAgICAgIC50cmltKClcclxuICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpWzFdXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoJy4nKVsxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV2VG9vbC5zZW5kKHRoaXMuc3RvcmVOYW1lLCBhY3Rpb25OYW1lIHx8ICd1bmtub3duJywgbmV3U3RhdGUpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,56 @@
1
+ export const BASE_KEY = 'NgSimpleState::';
2
+ export class NgSimpleStateBrowserStorage {
3
+ // eslint-disable-next-line no-unused-vars
4
+ constructor(storage) {
5
+ this.storage = storage;
6
+ this.isStorageActive = false;
7
+ this.isStorageActive = !!localStorage;
8
+ }
9
+ /**
10
+ * Return true if local storage is active
11
+ * @returns True if local storage is active
12
+ */
13
+ isActive() {
14
+ return this.isStorageActive;
15
+ }
16
+ /**
17
+ * Set item into local storage
18
+ * @param key key name
19
+ * @param state state valie
20
+ * @returns True if item is stored into local storage
21
+ */
22
+ setItem(key, state) {
23
+ if (this.isStorageActive) {
24
+ this.storage.setItem(BASE_KEY + key, JSON.stringify(state));
25
+ return true;
26
+ }
27
+ return false;
28
+ }
29
+ /**
30
+ * Return item from local storage
31
+ * @param key key name
32
+ * @returns the item
33
+ */
34
+ getItem(key) {
35
+ if (this.isStorageActive) {
36
+ const state = this.storage.getItem(BASE_KEY + key);
37
+ if (state) {
38
+ return JSON.parse(state);
39
+ }
40
+ }
41
+ return null;
42
+ }
43
+ /**
44
+ * Remove item from local storage
45
+ * @param key key name
46
+ * @returns True if item is removed
47
+ */
48
+ removeItem(key) {
49
+ if (this.isStorageActive) {
50
+ this.storage.removeItem(BASE_KEY + key);
51
+ return true;
52
+ }
53
+ return false;
54
+ }
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLWJyb3dzZXItc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNpbXBsZS1zdGF0ZS9zcmMvbGliL25nLXNpbXBsZS1zdGF0ZS1icm93c2VyLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDO0FBRTFDLE1BQU0sT0FBZ0IsMkJBQTJCO0lBSTdDLDBDQUEwQztJQUMxQyxZQUFvQixPQUFnQjtRQUFoQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBSDVCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBSTVCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUMxQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNKLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUksR0FBVyxFQUFFLEtBQVE7UUFDNUIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzVELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBSSxHQUFXO1FBQ2xCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbkQsSUFBSSxLQUFLLEVBQUU7Z0JBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzVCO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxHQUFXO1FBQ2xCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBCQVNFX0tFWSA9ICdOZ1NpbXBsZVN0YXRlOjonO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5nU2ltcGxlU3RhdGVCcm93c2VyU3RvcmFnZSB7XHJcblxyXG4gICAgcHJpdmF0ZSBpc1N0b3JhZ2VBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSkge1xyXG4gICAgICAgIHRoaXMuaXNTdG9yYWdlQWN0aXZlID0gISFsb2NhbFN0b3JhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBsb2NhbCBzdG9yYWdlIGlzIGFjdGl2ZVxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBsb2NhbCBzdG9yYWdlIGlzIGFjdGl2ZVxyXG4gICAgICovXHJcbiAgICBpc0FjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1N0b3JhZ2VBY3RpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgaXRlbSBpbnRvIGxvY2FsIHN0b3JhZ2VcclxuICAgICAqIEBwYXJhbSBrZXkga2V5IG5hbWVcclxuICAgICAqIEBwYXJhbSBzdGF0ZSBzdGF0ZSB2YWxpZVxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBpdGVtIGlzIHN0b3JlZCBpbnRvIGxvY2FsIHN0b3JhZ2VcclxuICAgICAqL1xyXG4gICAgc2V0SXRlbTxLPihrZXk6IHN0cmluZywgc3RhdGU6IEspOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc1N0b3JhZ2VBY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oQkFTRV9LRVkgKyBrZXksIEpTT04uc3RyaW5naWZ5KHN0YXRlKSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gaXRlbSBmcm9tIGxvY2FsIHN0b3JhZ2VcclxuICAgICAqIEBwYXJhbSBrZXkga2V5IG5hbWVcclxuICAgICAqIEByZXR1cm5zIHRoZSBpdGVtXHJcbiAgICAgKi9cclxuICAgIGdldEl0ZW08Sz4oa2V5OiBzdHJpbmcpOiBLIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9yYWdlQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oQkFTRV9LRVkgKyBrZXkpO1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBpdGVtIGZyb20gbG9jYWwgc3RvcmFnZVxyXG4gICAgICogQHBhcmFtIGtleSBrZXkgbmFtZVxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBpdGVtIGlzIHJlbW92ZWRcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlSXRlbShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU3RvcmFnZUFjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbShCQVNFX0tFWSArIGtleSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -40,9 +40,9 @@ export class NgSimpleStateDevTool {
40
40
  return false;
41
41
  }
42
42
  }
43
- NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateDevTool, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
44
- NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
43
+ NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateDevTool, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
44
+ NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
46
46
  type: Injectable,
47
47
  args: [{ providedIn: 'root' }]
48
48
  }], ctorParameters: function () { return []; } });
@@ -1,62 +1,15 @@
1
1
  import { Injectable } from '@angular/core';
2
+ import { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';
2
3
  import * as i0 from "@angular/core";
3
- export const BASE_KEY = 'NgSimpleState::';
4
- export class NgSimpleStateLocalStorage {
4
+ export class NgSimpleStateLocalStorage extends NgSimpleStateBrowserStorage {
5
5
  constructor() {
6
- this.isStorageActive = false;
7
- this.isStorageActive = !!localStorage;
8
- }
9
- /**
10
- * Return true if local storage is active
11
- * @returns True if local storage is active
12
- */
13
- isActive() {
14
- return this.isStorageActive;
15
- }
16
- /**
17
- * Set item into local storage
18
- * @param key key name
19
- * @param state state valie
20
- * @returns True if item is stored into local storage
21
- */
22
- setItem(key, state) {
23
- if (this.isStorageActive) {
24
- localStorage.setItem(BASE_KEY + key, JSON.stringify(state));
25
- return true;
26
- }
27
- return false;
28
- }
29
- /**
30
- * Return item from local storage
31
- * @param key key name
32
- * @returns the item
33
- */
34
- getItem(key) {
35
- if (this.isStorageActive) {
36
- const state = localStorage.getItem(BASE_KEY + key);
37
- if (state) {
38
- return JSON.parse(state);
39
- }
40
- }
41
- return null;
42
- }
43
- /**
44
- * Remove item from local storage
45
- * @param key key name
46
- * @returns True if item is removed
47
- */
48
- removeItem(key) {
49
- if (this.isStorageActive) {
50
- localStorage.removeItem(BASE_KEY + key);
51
- return true;
52
- }
53
- return false;
6
+ super(localStorage);
54
7
  }
55
8
  }
56
- NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
57
- NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
9
+ NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
+ NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
59
12
  type: Injectable,
60
13
  args: [{ providedIn: 'root' }]
61
14
  }], ctorParameters: function () { return []; } });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLWxvY2FsLXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zaW1wbGUtc3RhdGUvc3JjL2xpYi9uZy1zaW1wbGUtc3RhdGUtbG9jYWwtc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUM7QUFHMUMsTUFBTSxPQUFPLHlCQUF5QjtJQUlsQztRQUZRLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUMxQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNKLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUksR0FBVyxFQUFFLEtBQVE7UUFDNUIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDNUQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFJLEdBQVc7UUFDbEIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELElBQUksS0FBSyxFQUFFO2dCQUNQLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM1QjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsR0FBVztRQUNsQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7O3NIQXhEUSx5QkFBeUI7MEhBQXpCLHlCQUF5QixjQURaLE1BQU07MkZBQ25CLHlCQUF5QjtrQkFEckMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgY29uc3QgQkFTRV9LRVkgPSAnTmdTaW1wbGVTdGF0ZTo6JztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBOZ1NpbXBsZVN0YXRlTG9jYWxTdG9yYWdlIHtcclxuXHJcbiAgICBwcml2YXRlIGlzU3RvcmFnZUFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXNTdG9yYWdlQWN0aXZlID0gISFsb2NhbFN0b3JhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBsb2NhbCBzdG9yYWdlIGlzIGFjdGl2ZVxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBsb2NhbCBzdG9yYWdlIGlzIGFjdGl2ZVxyXG4gICAgICovXHJcbiAgICBpc0FjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1N0b3JhZ2VBY3RpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgaXRlbSBpbnRvIGxvY2FsIHN0b3JhZ2VcclxuICAgICAqIEBwYXJhbSBrZXkga2V5IG5hbWVcclxuICAgICAqIEBwYXJhbSBzdGF0ZSBzdGF0ZSB2YWxpZVxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBpdGVtIGlzIHN0b3JlZCBpbnRvIGxvY2FsIHN0b3JhZ2VcclxuICAgICAqL1xyXG4gICAgc2V0SXRlbTxLPihrZXk6IHN0cmluZywgc3RhdGU6IEspOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc1N0b3JhZ2VBY3RpdmUpIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oQkFTRV9LRVkgKyBrZXksIEpTT04uc3RyaW5naWZ5KHN0YXRlKSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gaXRlbSBmcm9tIGxvY2FsIHN0b3JhZ2VcclxuICAgICAqIEBwYXJhbSBrZXkga2V5IG5hbWVcclxuICAgICAqIEByZXR1cm5zIHRoZSBpdGVtXHJcbiAgICAgKi9cclxuICAgIGdldEl0ZW08Sz4oa2V5OiBzdHJpbmcpOiBLIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9yYWdlQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQkFTRV9LRVkgKyBrZXkpO1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBpdGVtIGZyb20gbG9jYWwgc3RvcmFnZVxyXG4gICAgICogQHBhcmFtIGtleSBrZXkgbmFtZVxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBpdGVtIGlzIHJlbW92ZWRcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlSXRlbShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU3RvcmFnZUFjdGl2ZSkge1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShCQVNFX0tFWSArIGtleSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIl19
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLWxvY2FsLXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zaW1wbGUtc3RhdGUvc3JjL2xpYi9uZy1zaW1wbGUtc3RhdGUtbG9jYWwtc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQUdoRixNQUFNLE9BQU8seUJBQTBCLFNBQVEsMkJBQTJCO0lBQ3RFO1FBQ0ksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7O3NIQUhRLHlCQUF5QjswSEFBekIseUJBQXlCLGNBRFosTUFBTTsyRkFDbkIseUJBQXlCO2tCQURyQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdTaW1wbGVTdGF0ZUJyb3dzZXJTdG9yYWdlIH0gZnJvbSAnLi9uZy1zaW1wbGUtc3RhdGUtYnJvd3Nlci1zdG9yYWdlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBOZ1NpbXBsZVN0YXRlTG9jYWxTdG9yYWdlIGV4dGVuZHMgTmdTaW1wbGVTdGF0ZUJyb3dzZXJTdG9yYWdlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKGxvY2FsU3RvcmFnZSk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -3,4 +3,4 @@ import { InjectionToken } from '@angular/core';
3
3
  * NgSimpleState config InjectionToken
4
4
  */
5
5
  export const NG_SIMPLE_STORE_CONFIG = new InjectionToken('ng-simple-state.config');
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLW1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNpbXBsZS1zdGF0ZS9zcmMvbGliL25nLXNpbXBsZS1zdGF0ZS1tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWlCL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDcEQsd0JBQXdCLENBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIE5nU2ltcGxlU3RhdGUgY29uZmlnIG9wdGlvblxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBOZ1NpbXBsZVN0YXRlQ29uZmlnIHtcclxuICAgIGVuYWJsZURldlRvb2w/OiBib29sZWFuO1xyXG4gICAgZW5hYmxlTG9jYWxTdG9yYWdlPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIE5nU2ltcGxlU3RhdGUgY29uZmlnIG9wdGlvbiBmb3Igc3RvcmVcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTmdTaW1wbGVTdGF0ZVN0b3JlQ29uZmlnIGV4dGVuZHMgTmdTaW1wbGVTdGF0ZUNvbmZpZyB7XHJcbiAgICBzdG9yZU5hbWU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBOZ1NpbXBsZVN0YXRlIGNvbmZpZyBJbmplY3Rpb25Ub2tlblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE5HX1NJTVBMRV9TVE9SRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48TmdTaW1wbGVTdGF0ZUNvbmZpZz4oXHJcbiAgICAnbmctc2ltcGxlLXN0YXRlLmNvbmZpZydcclxuKTtcclxuIl19
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLW1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNpbXBsZS1zdGF0ZS9zcmMvbGliL25nLXNpbXBsZS1zdGF0ZS1tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWtCL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDcEQsd0JBQXdCLENBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIE5nU2ltcGxlU3RhdGUgY29uZmlnIG9wdGlvblxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBOZ1NpbXBsZVN0YXRlQ29uZmlnIHtcclxuICAgIGVuYWJsZURldlRvb2w/OiBib29sZWFuO1xyXG4gICAgZW5hYmxlTG9jYWxTdG9yYWdlPzogYm9vbGVhbjtcclxuICAgIHBlcnNpc3RlbnRTdG9yYWdlPzogJ3Nlc3Npb24nIHwgJ2xvY2FsJztcclxufVxyXG5cclxuLyoqXHJcbiAqIE5nU2ltcGxlU3RhdGUgY29uZmlnIG9wdGlvbiBmb3Igc3RvcmVcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTmdTaW1wbGVTdGF0ZVN0b3JlQ29uZmlnIGV4dGVuZHMgTmdTaW1wbGVTdGF0ZUNvbmZpZyB7XHJcbiAgICBzdG9yZU5hbWU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBOZ1NpbXBsZVN0YXRlIGNvbmZpZyBJbmplY3Rpb25Ub2tlblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE5HX1NJTVBMRV9TVE9SRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48TmdTaW1wbGVTdGF0ZUNvbmZpZz4oXHJcbiAgICAnbmctc2ltcGxlLXN0YXRlLmNvbmZpZydcclxuKTtcclxuIl19
@@ -0,0 +1,15 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';
3
+ import * as i0 from "@angular/core";
4
+ export class NgSimpleStateSessionStorage extends NgSimpleStateBrowserStorage {
5
+ constructor() {
6
+ super(sessionStorage);
7
+ }
8
+ }
9
+ NgSimpleStateSessionStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateSessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
+ NgSimpleStateSessionStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateSessionStorage, providedIn: 'root' });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateSessionStorage, decorators: [{
12
+ type: Injectable,
13
+ args: [{ providedIn: 'root' }]
14
+ }], ctorParameters: function () { return []; } });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLXNlc3Npb24tc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNpbXBsZS1zdGF0ZS9zcmMvbGliL25nLXNpbXBsZS1zdGF0ZS1zZXNzaW9uLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFHaEYsTUFBTSxPQUFPLDJCQUE0QixTQUFRLDJCQUEyQjtJQUN4RTtRQUNJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMxQixDQUFDOzt3SEFIUSwyQkFBMkI7NEhBQTNCLDJCQUEyQixjQURkLE1BQU07MkZBQ25CLDJCQUEyQjtrQkFEdkMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nU2ltcGxlU3RhdGVCcm93c2VyU3RvcmFnZSB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLWJyb3dzZXItc3RvcmFnZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTmdTaW1wbGVTdGF0ZVNlc3Npb25TdG9yYWdlIGV4dGVuZHMgTmdTaW1wbGVTdGF0ZUJyb3dzZXJTdG9yYWdlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKHNlc3Npb25TdG9yYWdlKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -14,10 +14,10 @@ export class NgSimpleStateModule {
14
14
  };
15
15
  }
16
16
  }
17
- NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18
- NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateModule });
19
- NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateModule, imports: [[]] });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateModule, decorators: [{
17
+ NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18
+ NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateModule });
19
+ NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateModule, imports: [[]] });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateModule, decorators: [{
21
21
  type: NgModule,
22
22
  args: [{
23
23
  declarations: [],
@@ -5,5 +5,6 @@ export * from './lib/ng-simple-state.module';
5
5
  export * from './lib/ng-simple-state-base-store';
6
6
  export * from './lib/ng-simple-state-dev-tool';
7
7
  export * from './lib/ng-simple-state-local-storage';
8
+ export * from './lib/ng-simple-state-session-storage';
8
9
  export * from './lib/ng-simple-state-models';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25nLXNpbXBsZS1zdGF0ZS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZy1zaW1wbGUtc3RhdGVcclxuICovXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL25nLXNpbXBsZS1zdGF0ZS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZy1zaW1wbGUtc3RhdGUtYmFzZS1zdG9yZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL25nLXNpbXBsZS1zdGF0ZS1kZXYtdG9vbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL25nLXNpbXBsZS1zdGF0ZS1sb2NhbC1zdG9yYWdlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbmctc2ltcGxlLXN0YXRlLW1vZGVscyc7XHJcbiJdfQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25nLXNpbXBsZS1zdGF0ZS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5nLXNpbXBsZS1zdGF0ZVxyXG4gKi9cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbmctc2ltcGxlLXN0YXRlLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL25nLXNpbXBsZS1zdGF0ZS1iYXNlLXN0b3JlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbmctc2ltcGxlLXN0YXRlLWRldi10b29sJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbmctc2ltcGxlLXN0YXRlLWxvY2FsLXN0b3JhZ2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZy1zaW1wbGUtc3RhdGUtc2Vzc2lvbi1zdG9yYWdlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbmctc2ltcGxlLXN0YXRlLW1vZGVscyc7XHJcbiJdfQ==
@@ -21,10 +21,10 @@ class NgSimpleStateModule {
21
21
  };
22
22
  }
23
23
  }
24
- NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
25
- NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateModule });
26
- NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateModule, imports: [[]] });
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateModule, decorators: [{
24
+ NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
25
+ NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateModule });
26
+ NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateModule, imports: [[]] });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateModule, decorators: [{
28
28
  type: NgModule,
29
29
  args: [{
30
30
  declarations: [],
@@ -73,16 +73,18 @@ class NgSimpleStateDevTool {
73
73
  return false;
74
74
  }
75
75
  }
76
- NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateDevTool, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
77
- NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
76
+ NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateDevTool, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
77
+ NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
79
79
  type: Injectable,
80
80
  args: [{ providedIn: 'root' }]
81
81
  }], ctorParameters: function () { return []; } });
82
82
 
83
83
  const BASE_KEY = 'NgSimpleState::';
84
- class NgSimpleStateLocalStorage {
85
- constructor() {
84
+ class NgSimpleStateBrowserStorage {
85
+ // eslint-disable-next-line no-unused-vars
86
+ constructor(storage) {
87
+ this.storage = storage;
86
88
  this.isStorageActive = false;
87
89
  this.isStorageActive = !!localStorage;
88
90
  }
@@ -101,7 +103,7 @@ class NgSimpleStateLocalStorage {
101
103
  */
102
104
  setItem(key, state) {
103
105
  if (this.isStorageActive) {
104
- localStorage.setItem(BASE_KEY + key, JSON.stringify(state));
106
+ this.storage.setItem(BASE_KEY + key, JSON.stringify(state));
105
107
  return true;
106
108
  }
107
109
  return false;
@@ -113,7 +115,7 @@ class NgSimpleStateLocalStorage {
113
115
  */
114
116
  getItem(key) {
115
117
  if (this.isStorageActive) {
116
- const state = localStorage.getItem(BASE_KEY + key);
118
+ const state = this.storage.getItem(BASE_KEY + key);
117
119
  if (state) {
118
120
  return JSON.parse(state);
119
121
  }
@@ -127,15 +129,33 @@ class NgSimpleStateLocalStorage {
127
129
  */
128
130
  removeItem(key) {
129
131
  if (this.isStorageActive) {
130
- localStorage.removeItem(BASE_KEY + key);
132
+ this.storage.removeItem(BASE_KEY + key);
131
133
  return true;
132
134
  }
133
135
  return false;
134
136
  }
137
+ }
138
+
139
+ class NgSimpleStateLocalStorage extends NgSimpleStateBrowserStorage {
140
+ constructor() {
141
+ super(localStorage);
142
+ }
143
+ }
144
+ NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
145
+ NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
147
+ type: Injectable,
148
+ args: [{ providedIn: 'root' }]
149
+ }], ctorParameters: function () { return []; } });
150
+
151
+ class NgSimpleStateSessionStorage extends NgSimpleStateBrowserStorage {
152
+ constructor() {
153
+ super(sessionStorage);
154
+ }
135
155
  }
136
- NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
137
- NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
156
+ NgSimpleStateSessionStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateSessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
157
+ NgSimpleStateSessionStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateSessionStorage, providedIn: 'root' });
158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateSessionStorage, decorators: [{
139
159
  type: Injectable,
140
160
  args: [{ providedIn: 'root' }]
141
161
  }], ctorParameters: function () { return []; } });
@@ -144,15 +164,23 @@ class NgSimpleStateBaseStore {
144
164
  constructor(injector) {
145
165
  this.firstState = null;
146
166
  this.devTool = injector.get(NgSimpleStateDevTool);
147
- this.localStorage = injector.get(NgSimpleStateLocalStorage);
148
167
  const globalConfig = injector.get(NG_SIMPLE_STORE_CONFIG, {});
149
168
  const storeConfig = this.storeConfig() || {};
150
169
  this.localStoreConfig = Object.assign(Object.assign({}, globalConfig), storeConfig);
170
+ if (this.localStoreConfig.persistentStorage === 'local') {
171
+ this.persistentStorage = injector.get(NgSimpleStateLocalStorage);
172
+ }
173
+ else if (this.localStoreConfig.persistentStorage === 'session') {
174
+ this.persistentStorage = injector.get(NgSimpleStateSessionStorage);
175
+ }
176
+ else {
177
+ this.persistentStorage = injector.get(NgSimpleStateLocalStorage);
178
+ }
151
179
  this.localStorageIsEnabled = typeof this.localStoreConfig.enableLocalStorage === 'boolean' ? this.localStoreConfig.enableLocalStorage : false;
152
180
  this.devToolIsEnabled = typeof this.localStoreConfig.enableDevTool === 'boolean' ? this.localStoreConfig.enableDevTool : false;
153
181
  this.storeName = typeof this.localStoreConfig.storeName === 'string' ? this.localStoreConfig.storeName : this.constructor.name;
154
182
  if (this.localStorageIsEnabled) {
155
- this.firstState = this.localStorage.getItem(this.storeName);
183
+ this.firstState = this.persistentStorage.getItem(this.storeName);
156
184
  }
157
185
  if (!this.firstState) {
158
186
  this.firstState = this.initialState();
@@ -231,7 +259,7 @@ class NgSimpleStateBaseStore {
231
259
  }
232
260
  this.devToolSend(state, actionName);
233
261
  if (this.localStorageIsEnabled) {
234
- this.localStorage.setItem(this.storeName, state);
262
+ this.persistentStorage.setItem(this.storeName, state);
235
263
  }
236
264
  this.state$.next(state);
237
265
  }
@@ -253,9 +281,9 @@ class NgSimpleStateBaseStore {
253
281
  return this.devTool.send(this.storeName, actionName || 'unknown', newState);
254
282
  }
255
283
  }
256
- NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Injectable });
257
- NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateBaseStore });
258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
284
+ NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Injectable });
285
+ NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateBaseStore });
286
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
259
287
  type: Injectable
260
288
  }], ctorParameters: function () {
261
289
  return [{ type: i0.Injector, decorators: [{
@@ -272,5 +300,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImpor
272
300
  * Generated bundle index. Do not edit.
273
301
  */
274
302
 
275
- export { BASE_KEY, NG_SIMPLE_STORE_CONFIG, NgSimpleStateBaseStore, NgSimpleStateDevTool, NgSimpleStateLocalStorage, NgSimpleStateModule };
303
+ export { NG_SIMPLE_STORE_CONFIG, NgSimpleStateBaseStore, NgSimpleStateDevTool, NgSimpleStateLocalStorage, NgSimpleStateModule, NgSimpleStateSessionStorage };
276
304
  //# sourceMappingURL=ng-simple-state.mjs.map
@@ -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-local-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}\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 } 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() {\r\n if (this.globalDevtools) {\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 * 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","import { Injectable } from '@angular/core';\r\n\r\nexport const BASE_KEY = 'NgSimpleState::';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateLocalStorage {\r\n\r\n private isStorageActive = false;\r\n\r\n constructor() {\r\n this.isStorageActive = !!localStorage;\r\n }\r\n\r\n /**\r\n * Return true if local storage is active\r\n * @returns True if local 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 local storage\r\n * @param key key name\r\n * @param state state valie\r\n * @returns True if item is stored into local storage\r\n */\r\n setItem<K>(key: string, state: K): boolean {\r\n if (this.isStorageActive) {\r\n localStorage.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 local 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 = localStorage.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 local 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 localStorage.removeItem(BASE_KEY + key);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Inject, Injectable, Injector, OnDestroy } from '@angular/core';\r\nimport { BehaviorSubject, Observable, asyncScheduler } from 'rxjs';\r\nimport { map, distinctUntilChanged, observeOn } from 'rxjs/operators';\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\n@Injectable()\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 localStorage: NgSimpleStateLocalStorage;\r\n private localStoreConfig: NgSimpleStateStoreConfig;\r\n private storeName: string;\r\n private firstState: S | null = null;\r\n private isArray: boolean;\r\n\r\n /**\r\n * Return the observable 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 this.localStorage = injector.get(NgSimpleStateLocalStorage);\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 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.localStorage.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 */\r\n resetState(): void {\r\n this.setState(() => (this.firstState as S), 'resetState');\r\n }\r\n\r\n /**\r\n * Reset store to initial store state\r\n */\r\n restartState(): void {\r\n 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>): any => Object.assign(this.isArray ? [] : {}, tmpState);\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(): S {\r\n return this.state$.getValue();\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 */\r\n // eslint-disable-next-line no-unused-vars\r\n setState(stateFn: (currentState: Readonly<S>) => Partial<S>, actionName?: string): void {\r\n const currState = this.getCurrentState();\r\n const newState = stateFn(currState);\r\n let state: S;\r\n if (this.isArray) {\r\n state = Object.assign([], newState) as any;\r\n } else {\r\n state = Object.assign({}, currState, newState);\r\n }\r\n this.devToolSend(state, actionName);\r\n if (this.localStorageIsEnabled) {\r\n this.localStorage.setItem<S>(this.storeName, state);\r\n }\r\n this.state$.next(state);\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 * 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-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 } 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() {\r\n if (this.globalDevtools) {\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 * 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 // eslint-disable-next-line no-unused-vars\r\n constructor(private storage: Storage) {\r\n this.isStorageActive = !!localStorage;\r\n }\r\n\r\n /**\r\n * Return true if local storage is active\r\n * @returns True if local 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 local storage\r\n * @param key key name\r\n * @param state state valie\r\n * @returns True if item is stored into local 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 local 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 local 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 } 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@Injectable()\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\r\n /**\r\n * Return the observable 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 */\r\n resetState(): void {\r\n this.setState(() => (this.firstState as S), 'resetState');\r\n }\r\n\r\n /**\r\n * Reset store to initial store state\r\n */\r\n restartState(): void {\r\n 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>): any => Object.assign(this.isArray ? [] : {}, tmpState);\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(): S {\r\n return this.state$.getValue();\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 */\r\n // eslint-disable-next-line no-unused-vars\r\n setState(stateFn: (currentState: Readonly<S>) => Partial<S>, actionName?: string): void {\r\n const currState = this.getCurrentState();\r\n const newState = stateFn(currState);\r\n let state: S;\r\n if (this.isArray) {\r\n state = Object.assign([], newState) as any;\r\n } else {\r\n state = Object.assign({}, currState, newState);\r\n }\r\n this.devToolSend(state, actionName);\r\n if (this.localStorageIsEnabled) {\r\n this.persistentStorage.setItem<S>(this.storeName, state);\r\n }\r\n this.state$.next(state);\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 * 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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"}
@@ -21,10 +21,10 @@ class NgSimpleStateModule {
21
21
  };
22
22
  }
23
23
  }
24
- NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
25
- NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateModule });
26
- NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateModule, imports: [[]] });
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateModule, decorators: [{
24
+ NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
25
+ NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateModule });
26
+ NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateModule, imports: [[]] });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateModule, decorators: [{
28
28
  type: NgModule,
29
29
  args: [{
30
30
  declarations: [],
@@ -73,16 +73,18 @@ class NgSimpleStateDevTool {
73
73
  return false;
74
74
  }
75
75
  }
76
- NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateDevTool, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
77
- NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
76
+ NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateDevTool, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
77
+ NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
79
79
  type: Injectable,
80
80
  args: [{ providedIn: 'root' }]
81
81
  }], ctorParameters: function () { return []; } });
82
82
 
83
83
  const BASE_KEY = 'NgSimpleState::';
84
- class NgSimpleStateLocalStorage {
85
- constructor() {
84
+ class NgSimpleStateBrowserStorage {
85
+ // eslint-disable-next-line no-unused-vars
86
+ constructor(storage) {
87
+ this.storage = storage;
86
88
  this.isStorageActive = false;
87
89
  this.isStorageActive = !!localStorage;
88
90
  }
@@ -101,7 +103,7 @@ class NgSimpleStateLocalStorage {
101
103
  */
102
104
  setItem(key, state) {
103
105
  if (this.isStorageActive) {
104
- localStorage.setItem(BASE_KEY + key, JSON.stringify(state));
106
+ this.storage.setItem(BASE_KEY + key, JSON.stringify(state));
105
107
  return true;
106
108
  }
107
109
  return false;
@@ -113,7 +115,7 @@ class NgSimpleStateLocalStorage {
113
115
  */
114
116
  getItem(key) {
115
117
  if (this.isStorageActive) {
116
- const state = localStorage.getItem(BASE_KEY + key);
118
+ const state = this.storage.getItem(BASE_KEY + key);
117
119
  if (state) {
118
120
  return JSON.parse(state);
119
121
  }
@@ -127,15 +129,33 @@ class NgSimpleStateLocalStorage {
127
129
  */
128
130
  removeItem(key) {
129
131
  if (this.isStorageActive) {
130
- localStorage.removeItem(BASE_KEY + key);
132
+ this.storage.removeItem(BASE_KEY + key);
131
133
  return true;
132
134
  }
133
135
  return false;
134
136
  }
137
+ }
138
+
139
+ class NgSimpleStateLocalStorage extends NgSimpleStateBrowserStorage {
140
+ constructor() {
141
+ super(localStorage);
142
+ }
143
+ }
144
+ NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
145
+ NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
147
+ type: Injectable,
148
+ args: [{ providedIn: 'root' }]
149
+ }], ctorParameters: function () { return []; } });
150
+
151
+ class NgSimpleStateSessionStorage extends NgSimpleStateBrowserStorage {
152
+ constructor() {
153
+ super(sessionStorage);
154
+ }
135
155
  }
136
- NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
137
- NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
138
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
156
+ NgSimpleStateSessionStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateSessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
157
+ NgSimpleStateSessionStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateSessionStorage, providedIn: 'root' });
158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateSessionStorage, decorators: [{
139
159
  type: Injectable,
140
160
  args: [{ providedIn: 'root' }]
141
161
  }], ctorParameters: function () { return []; } });
@@ -144,15 +164,23 @@ class NgSimpleStateBaseStore {
144
164
  constructor(injector) {
145
165
  this.firstState = null;
146
166
  this.devTool = injector.get(NgSimpleStateDevTool);
147
- this.localStorage = injector.get(NgSimpleStateLocalStorage);
148
167
  const globalConfig = injector.get(NG_SIMPLE_STORE_CONFIG, {});
149
168
  const storeConfig = this.storeConfig() || {};
150
169
  this.localStoreConfig = { ...globalConfig, ...storeConfig };
170
+ if (this.localStoreConfig.persistentStorage === 'local') {
171
+ this.persistentStorage = injector.get(NgSimpleStateLocalStorage);
172
+ }
173
+ else if (this.localStoreConfig.persistentStorage === 'session') {
174
+ this.persistentStorage = injector.get(NgSimpleStateSessionStorage);
175
+ }
176
+ else {
177
+ this.persistentStorage = injector.get(NgSimpleStateLocalStorage);
178
+ }
151
179
  this.localStorageIsEnabled = typeof this.localStoreConfig.enableLocalStorage === 'boolean' ? this.localStoreConfig.enableLocalStorage : false;
152
180
  this.devToolIsEnabled = typeof this.localStoreConfig.enableDevTool === 'boolean' ? this.localStoreConfig.enableDevTool : false;
153
181
  this.storeName = typeof this.localStoreConfig.storeName === 'string' ? this.localStoreConfig.storeName : this.constructor.name;
154
182
  if (this.localStorageIsEnabled) {
155
- this.firstState = this.localStorage.getItem(this.storeName);
183
+ this.firstState = this.persistentStorage.getItem(this.storeName);
156
184
  }
157
185
  if (!this.firstState) {
158
186
  this.firstState = this.initialState();
@@ -231,7 +259,7 @@ class NgSimpleStateBaseStore {
231
259
  }
232
260
  this.devToolSend(state, actionName);
233
261
  if (this.localStorageIsEnabled) {
234
- this.localStorage.setItem(this.storeName, state);
262
+ this.persistentStorage.setItem(this.storeName, state);
235
263
  }
236
264
  this.state$.next(state);
237
265
  }
@@ -256,9 +284,9 @@ class NgSimpleStateBaseStore {
256
284
  return this.devTool.send(this.storeName, actionName || 'unknown', newState);
257
285
  }
258
286
  }
259
- NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Injectable });
260
- NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateBaseStore });
261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
287
+ NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Injectable });
288
+ NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateBaseStore });
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.1", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
262
290
  type: Injectable
263
291
  }], ctorParameters: function () { return [{ type: i0.Injector, decorators: [{
264
292
  type: Inject,
@@ -273,5 +301,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImpor
273
301
  * Generated bundle index. Do not edit.
274
302
  */
275
303
 
276
- export { BASE_KEY, NG_SIMPLE_STORE_CONFIG, NgSimpleStateBaseStore, NgSimpleStateDevTool, NgSimpleStateLocalStorage, NgSimpleStateModule };
304
+ export { NG_SIMPLE_STORE_CONFIG, NgSimpleStateBaseStore, NgSimpleStateDevTool, NgSimpleStateLocalStorage, NgSimpleStateModule, NgSimpleStateSessionStorage };
277
305
  //# sourceMappingURL=ng-simple-state.mjs.map
@@ -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-local-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}\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 } 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() {\r\n if (this.globalDevtools) {\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 * 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","import { Injectable } from '@angular/core';\r\n\r\nexport const BASE_KEY = 'NgSimpleState::';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NgSimpleStateLocalStorage {\r\n\r\n private isStorageActive = false;\r\n\r\n constructor() {\r\n this.isStorageActive = !!localStorage;\r\n }\r\n\r\n /**\r\n * Return true if local storage is active\r\n * @returns True if local 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 local storage\r\n * @param key key name\r\n * @param state state valie\r\n * @returns True if item is stored into local storage\r\n */\r\n setItem<K>(key: string, state: K): boolean {\r\n if (this.isStorageActive) {\r\n localStorage.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 local 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 = localStorage.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 local 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 localStorage.removeItem(BASE_KEY + key);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import { Inject, Injectable, Injector, OnDestroy } from '@angular/core';\r\nimport { BehaviorSubject, Observable, asyncScheduler } from 'rxjs';\r\nimport { map, distinctUntilChanged, observeOn } from 'rxjs/operators';\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\n@Injectable()\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 localStorage: NgSimpleStateLocalStorage;\r\n private localStoreConfig: NgSimpleStateStoreConfig;\r\n private storeName: string;\r\n private firstState: S | null = null;\r\n private isArray: boolean;\r\n\r\n /**\r\n * Return the observable 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 this.localStorage = injector.get(NgSimpleStateLocalStorage);\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 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.localStorage.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 */\r\n resetState(): void {\r\n this.setState(() => (this.firstState as S), 'resetState');\r\n }\r\n\r\n /**\r\n * Reset store to initial store state\r\n */\r\n restartState(): void {\r\n 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>): any => Object.assign(this.isArray ? [] : {}, tmpState);\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(): S {\r\n return this.state$.getValue();\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 */\r\n // eslint-disable-next-line no-unused-vars\r\n setState(stateFn: (currentState: Readonly<S>) => Partial<S>, actionName?: string): void {\r\n const currState = this.getCurrentState();\r\n const newState = stateFn(currState);\r\n let state: S;\r\n if (this.isArray) {\r\n state = Object.assign([], newState) as any;\r\n } else {\r\n state = Object.assign({}, currState, newState);\r\n }\r\n this.devToolSend(state, actionName);\r\n if (this.localStorageIsEnabled) {\r\n this.localStorage.setItem<S>(this.storeName, state);\r\n }\r\n this.state$.next(state);\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 * 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-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 } 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() {\r\n if (this.globalDevtools) {\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 * 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 // eslint-disable-next-line no-unused-vars\r\n constructor(private storage: Storage) {\r\n this.isStorageActive = !!localStorage;\r\n }\r\n\r\n /**\r\n * Return true if local storage is active\r\n * @returns True if local 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 local storage\r\n * @param key key name\r\n * @param state state valie\r\n * @returns True if item is stored into local 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 local 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 local 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 } 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@Injectable()\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\r\n /**\r\n * Return the observable 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 */\r\n resetState(): void {\r\n this.setState(() => (this.firstState as S), 'resetState');\r\n }\r\n\r\n /**\r\n * Reset store to initial store state\r\n */\r\n restartState(): void {\r\n 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>): any => Object.assign(this.isArray ? [] : {}, tmpState);\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(): S {\r\n return this.state$.getValue();\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 */\r\n // eslint-disable-next-line no-unused-vars\r\n setState(stateFn: (currentState: Readonly<S>) => Partial<S>, actionName?: string): void {\r\n const currState = this.getCurrentState();\r\n const newState = stateFn(currState);\r\n let state: S;\r\n if (this.isArray) {\r\n state = Object.assign([], newState) as any;\r\n } else {\r\n state = Object.assign({}, currState, newState);\r\n }\r\n this.devToolSend(state, actionName);\r\n if (this.localStorageIsEnabled) {\r\n this.persistentStorage.setItem<S>(this.storeName, state);\r\n }\r\n this.state$.next(state);\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 * 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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"}
@@ -7,7 +7,7 @@ export declare abstract class NgSimpleStateBaseStore<S extends object | Array<an
7
7
  private localStorageIsEnabled;
8
8
  private devToolIsEnabled;
9
9
  private devTool;
10
- private localStorage;
10
+ private persistentStorage;
11
11
  private localStoreConfig;
12
12
  private storeName;
13
13
  private firstState;
@@ -0,0 +1,30 @@
1
+ export declare const BASE_KEY = "NgSimpleState::";
2
+ export declare abstract class NgSimpleStateBrowserStorage {
3
+ private storage;
4
+ private isStorageActive;
5
+ constructor(storage: Storage);
6
+ /**
7
+ * Return true if local storage is active
8
+ * @returns True if local storage is active
9
+ */
10
+ isActive(): boolean;
11
+ /**
12
+ * Set item into local storage
13
+ * @param key key name
14
+ * @param state state valie
15
+ * @returns True if item is stored into local storage
16
+ */
17
+ setItem<K>(key: string, state: K): boolean;
18
+ /**
19
+ * Return item from local storage
20
+ * @param key key name
21
+ * @returns the item
22
+ */
23
+ getItem<K>(key: string): K | null;
24
+ /**
25
+ * Remove item from local storage
26
+ * @param key key name
27
+ * @returns True if item is removed
28
+ */
29
+ removeItem(key: string): boolean;
30
+ }
@@ -1,32 +1,7 @@
1
+ import { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';
1
2
  import * as i0 from "@angular/core";
2
- export declare const BASE_KEY = "NgSimpleState::";
3
- export declare class NgSimpleStateLocalStorage {
4
- private isStorageActive;
3
+ export declare class NgSimpleStateLocalStorage extends NgSimpleStateBrowserStorage {
5
4
  constructor();
6
- /**
7
- * Return true if local storage is active
8
- * @returns True if local storage is active
9
- */
10
- isActive(): boolean;
11
- /**
12
- * Set item into local storage
13
- * @param key key name
14
- * @param state state valie
15
- * @returns True if item is stored into local storage
16
- */
17
- setItem<K>(key: string, state: K): boolean;
18
- /**
19
- * Return item from local storage
20
- * @param key key name
21
- * @returns the item
22
- */
23
- getItem<K>(key: string): K | null;
24
- /**
25
- * Remove item from local storage
26
- * @param key key name
27
- * @returns True if item is removed
28
- */
29
- removeItem(key: string): boolean;
30
5
  static ɵfac: i0.ɵɵFactoryDeclaration<NgSimpleStateLocalStorage, never>;
31
6
  static ɵprov: i0.ɵɵInjectableDeclaration<NgSimpleStateLocalStorage>;
32
7
  }
@@ -5,6 +5,7 @@ import { InjectionToken } from '@angular/core';
5
5
  export interface NgSimpleStateConfig {
6
6
  enableDevTool?: boolean;
7
7
  enableLocalStorage?: boolean;
8
+ persistentStorage?: 'session' | 'local';
8
9
  }
9
10
  /**
10
11
  * NgSimpleState config option for store
@@ -0,0 +1,7 @@
1
+ import { NgSimpleStateBrowserStorage } from './ng-simple-state-browser-storage';
2
+ import * as i0 from "@angular/core";
3
+ export declare class NgSimpleStateSessionStorage extends NgSimpleStateBrowserStorage {
4
+ constructor();
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgSimpleStateSessionStorage, never>;
6
+ static ɵprov: i0.ɵɵInjectableDeclaration<NgSimpleStateSessionStorage>;
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-simple-state",
3
- "version": "13.0.5",
3
+ "version": "13.0.6",
4
4
  "description": "Simple state management in Angular with only Services and RxJS.",
5
5
  "repository": {
6
6
  "type": "git",
package/public-api.d.ts CHANGED
@@ -2,4 +2,5 @@ export * from './lib/ng-simple-state.module';
2
2
  export * from './lib/ng-simple-state-base-store';
3
3
  export * from './lib/ng-simple-state-dev-tool';
4
4
  export * from './lib/ng-simple-state-local-storage';
5
+ export * from './lib/ng-simple-state-session-storage';
5
6
  export * from './lib/ng-simple-state-models';