ng-simple-state 15.0.2 → 15.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -4
- package/esm2020/lib/ng-simple-state-base-store.mjs +26 -33
- package/esm2020/lib/ng-simple-state-browser-storage.mjs +17 -1
- package/esm2020/lib/ng-simple-state-dev-tool.mjs +6 -7
- package/esm2020/lib/ng-simple-state-local-storage.mjs +3 -3
- package/esm2020/lib/ng-simple-state-models.mjs +1 -1
- package/esm2020/lib/ng-simple-state-session-storage.mjs +3 -3
- package/esm2020/lib/ng-simple-state.module.mjs +6 -11
- package/fesm2015/ng-simple-state.mjs +57 -54
- package/fesm2015/ng-simple-state.mjs.map +1 -1
- package/fesm2020/ng-simple-state.mjs +57 -54
- package/fesm2020/ng-simple-state.mjs.map +1 -1
- package/lib/ng-simple-state-base-store.d.ts +3 -2
- package/lib/ng-simple-state-browser-storage.d.ts +5 -0
- package/lib/ng-simple-state-dev-tool.d.ts +18 -1
- package/lib/ng-simple-state-models.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -84,11 +84,11 @@ export class CounterStore extends NgSimpleStateBaseStore<CounterState> {
|
|
|
84
84
|
}
|
|
85
85
|
```
|
|
86
86
|
|
|
87
|
-
3) Implement `initialState()`
|
|
87
|
+
3) Implement `initialState()` and `storeConfig()` methods and provide the initial state of the store, eg.:
|
|
88
88
|
|
|
89
89
|
```ts
|
|
90
90
|
import { Injectable } from '@angular/core';
|
|
91
|
-
import { NgSimpleStateBaseStore } from 'ng-simple-state';
|
|
91
|
+
import { NgSimpleStateBaseStore, NgSimpleStateStoreConfig } from 'ng-simple-state';
|
|
92
92
|
|
|
93
93
|
export interface CounterState {
|
|
94
94
|
count: number;
|
|
@@ -96,6 +96,12 @@ export interface CounterState {
|
|
|
96
96
|
|
|
97
97
|
@Injectable()
|
|
98
98
|
export class CounterStore extends NgSimpleStateBaseStore<CounterState> {
|
|
99
|
+
|
|
100
|
+
storeConfig(): NgSimpleStateStoreConfig {
|
|
101
|
+
return {
|
|
102
|
+
storeName: 'CounterStore'
|
|
103
|
+
};
|
|
104
|
+
}
|
|
99
105
|
|
|
100
106
|
initialState(): CounterState {
|
|
101
107
|
return {
|
|
@@ -110,7 +116,7 @@ export class CounterStore extends NgSimpleStateBaseStore<CounterState> {
|
|
|
110
116
|
|
|
111
117
|
```ts
|
|
112
118
|
import { Injectable } from '@angular/core';
|
|
113
|
-
import { NgSimpleStateBaseStore } from 'ng-simple-state';
|
|
119
|
+
import { NgSimpleStateBaseStore, NgSimpleStateStoreConfig } from 'ng-simple-state';
|
|
114
120
|
import { Observable } from 'rxjs';
|
|
115
121
|
|
|
116
122
|
export interface CounterState {
|
|
@@ -119,6 +125,12 @@ export interface CounterState {
|
|
|
119
125
|
|
|
120
126
|
@Injectable()
|
|
121
127
|
export class CounterStore extends NgSimpleStateBaseStore<CounterState> {
|
|
128
|
+
|
|
129
|
+
storeConfig(): NgSimpleStateStoreConfig {
|
|
130
|
+
return {
|
|
131
|
+
storeName: 'CounterStore'
|
|
132
|
+
};
|
|
133
|
+
}
|
|
122
134
|
|
|
123
135
|
initialState(): CounterState {
|
|
124
136
|
return {
|
|
@@ -136,7 +148,7 @@ export class CounterStore extends NgSimpleStateBaseStore<CounterState> {
|
|
|
136
148
|
|
|
137
149
|
```ts
|
|
138
150
|
import { Injectable } from '@angular/core';
|
|
139
|
-
import { NgSimpleStateBaseStore } from 'ng-simple-state';
|
|
151
|
+
import { NgSimpleStateBaseStore, NgSimpleStateStoreConfig } from 'ng-simple-state';
|
|
140
152
|
import { Observable } from 'rxjs';
|
|
141
153
|
|
|
142
154
|
export interface CounterState {
|
|
@@ -146,6 +158,12 @@ export interface CounterState {
|
|
|
146
158
|
@Injectable()
|
|
147
159
|
export class CounterStore extends NgSimpleStateBaseStore<CounterState> {
|
|
148
160
|
|
|
161
|
+
storeConfig(): NgSimpleStateStoreConfig {
|
|
162
|
+
return {
|
|
163
|
+
storeName: 'CounterStore'
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
149
167
|
initialState(): CounterState {
|
|
150
168
|
return {
|
|
151
169
|
count: 0
|
|
@@ -252,6 +270,12 @@ export class CounterComponent extends NgSimpleStateBaseStore<CounterState> {
|
|
|
252
270
|
super(injector);
|
|
253
271
|
}
|
|
254
272
|
|
|
273
|
+
storeConfig(): NgSimpleStateStoreConfig {
|
|
274
|
+
return {
|
|
275
|
+
storeName: 'CounterComponent'
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
|
|
255
279
|
initialState(): CounterState {
|
|
256
280
|
return {
|
|
257
281
|
count: 0
|
|
@@ -398,6 +422,12 @@ export type TodoState = Array<Todo>;
|
|
|
398
422
|
@Injectable()
|
|
399
423
|
export class TodoStore extends NgSimpleStateBaseStore<TodoState> {
|
|
400
424
|
|
|
425
|
+
storeConfig(): NgSimpleStateStoreConfig {
|
|
426
|
+
return {
|
|
427
|
+
storeName: 'TodoStore'
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
|
|
401
431
|
initialState(): TodoState {
|
|
402
432
|
return [];
|
|
403
433
|
}
|
|
@@ -447,6 +477,85 @@ export class AppComponent {
|
|
|
447
477
|
}
|
|
448
478
|
```
|
|
449
479
|
|
|
480
|
+
|
|
481
|
+
## NgSimpleStateBaseStore API
|
|
482
|
+
|
|
483
|
+
```ts
|
|
484
|
+
@Injectable()
|
|
485
|
+
@Directive()
|
|
486
|
+
export abstract class NgSimpleStateBaseStore<S extends object | Array<any>> implements OnDestroy {
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Return the observable of the state
|
|
490
|
+
* @returns Observable of the state
|
|
491
|
+
*/
|
|
492
|
+
public get state(): BehaviorSubject<S>;
|
|
493
|
+
|
|
494
|
+
constructor(@Inject(Injector) injector: Injector);
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* When you override this method, you have to call the `super.ngOnDestroy()` method in your `ngOnDestroy()` method.
|
|
498
|
+
*/
|
|
499
|
+
ngOnDestroy(): void;
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Reset store to first loaded store state:
|
|
503
|
+
* - the last saved state, if `enableLocalStorage` config is `true`
|
|
504
|
+
* - otherwise the initial state provided from `initialState()` method.
|
|
505
|
+
*/
|
|
506
|
+
resetState(): boolean;
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Restart the store to initial state provided from `initialState()` method
|
|
510
|
+
*/
|
|
511
|
+
restartState(): boolean;
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
* Override this method for set a specific config for the store
|
|
515
|
+
* @returns NgSimpleStateStoreConfig
|
|
516
|
+
*/
|
|
517
|
+
storeConfig(): NgSimpleStateStoreConfig;
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* Set into the store the initial state
|
|
521
|
+
* @param injector current Injector
|
|
522
|
+
* @returns The state object
|
|
523
|
+
*/
|
|
524
|
+
initialState(injector?: Injector): S;
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* Select a store state
|
|
528
|
+
* @param selectFn State selector (if not provided return full state)
|
|
529
|
+
* @param comparator A function used to compare the previous and current state for equality. Defaults to a `===` check.
|
|
530
|
+
* @returns Observable of the selected state
|
|
531
|
+
*/
|
|
532
|
+
selectState<K>(selectFn?: (state: Readonly<S>) => K, comparator?: (previous: K, current: K) => boolean): Observable<K>;
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* Return the current store state (snapshot)
|
|
536
|
+
* @returns The current state
|
|
537
|
+
*/
|
|
538
|
+
getCurrentState(): Readonly<S>;
|
|
539
|
+
|
|
540
|
+
/**
|
|
541
|
+
* Return the first loaded store state:
|
|
542
|
+
* the last saved state, if `enableLocalStorage` config is `true`;
|
|
543
|
+
* otherwise the initial state provided from `initialState()` method.
|
|
544
|
+
* @returns The first state
|
|
545
|
+
*/
|
|
546
|
+
getFirstState(): Readonly<S> | null;
|
|
547
|
+
|
|
548
|
+
/**
|
|
549
|
+
* Set a new state
|
|
550
|
+
* @param selectFn State reducer
|
|
551
|
+
* @param actionName The action label into Redux DevTools (default is parent function name)
|
|
552
|
+
* @returns True if the state is changed
|
|
553
|
+
*/
|
|
554
|
+
setState(stateFn: (currentState: Readonly<S>) => Partial<S>, actionName?: string): boolean;
|
|
555
|
+
}
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
|
|
450
559
|
## Alternatives
|
|
451
560
|
|
|
452
561
|
Aren't you satisfied? there are some valid alternatives:
|
|
@@ -6,35 +6,37 @@ import { NgSimpleStateLocalStorage } from './ng-simple-state-local-storage';
|
|
|
6
6
|
import { NG_SIMPLE_STORE_CONFIG } from './ng-simple-state-models';
|
|
7
7
|
import { NgSimpleStateSessionStorage } from './ng-simple-state-session-storage';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
|
-
// tslint:disable-next-line: directive-class-suffix
|
|
10
9
|
export class NgSimpleStateBaseStore {
|
|
11
10
|
constructor(injector) {
|
|
12
|
-
this.firstState = null;
|
|
13
11
|
this.devMode = isDevMode();
|
|
14
|
-
this.devTool = injector.get(NgSimpleStateDevTool);
|
|
15
12
|
const globalConfig = injector.get(NG_SIMPLE_STORE_CONFIG, {});
|
|
16
13
|
const storeConfig = this.storeConfig() || {};
|
|
17
14
|
this.localStoreConfig = { ...globalConfig, ...storeConfig };
|
|
18
|
-
if (this.localStoreConfig.persistentStorage === 'local') {
|
|
19
|
-
this.persistentStorage = injector.get(NgSimpleStateLocalStorage);
|
|
20
|
-
}
|
|
21
|
-
else if (this.localStoreConfig.persistentStorage === 'session') {
|
|
22
|
-
this.persistentStorage = injector.get(NgSimpleStateSessionStorage);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
this.persistentStorage = injector.get(NgSimpleStateLocalStorage);
|
|
26
|
-
}
|
|
27
15
|
this.localStorageIsEnabled = typeof this.localStoreConfig.enableLocalStorage === 'boolean' ? this.localStoreConfig.enableLocalStorage : false;
|
|
16
|
+
if (this.localStorageIsEnabled) {
|
|
17
|
+
if (this.localStoreConfig.persistentStorage === 'local') {
|
|
18
|
+
this.persistentStorage = injector.get(NgSimpleStateLocalStorage);
|
|
19
|
+
}
|
|
20
|
+
else if (this.localStoreConfig.persistentStorage === 'session') {
|
|
21
|
+
this.persistentStorage = injector.get(NgSimpleStateSessionStorage);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
28
24
|
this.devToolIsEnabled = typeof this.localStoreConfig.enableDevTool === 'boolean' ? this.localStoreConfig.enableDevTool : false;
|
|
25
|
+
if (this.devToolIsEnabled) {
|
|
26
|
+
this.devTool = injector.get(NgSimpleStateDevTool);
|
|
27
|
+
}
|
|
29
28
|
this.storeName = typeof this.localStoreConfig.storeName === 'string' ? this.localStoreConfig.storeName : this.constructor.name;
|
|
30
29
|
if (typeof this.localStoreConfig.comparator === 'function') {
|
|
31
30
|
this.comparator = this.localStoreConfig.comparator;
|
|
32
31
|
}
|
|
33
|
-
if (this.localStorageIsEnabled) {
|
|
34
|
-
|
|
32
|
+
if (this.localStorageIsEnabled && this.persistentStorage) {
|
|
33
|
+
const firstState = this.persistentStorage.getItem(this.storeName);
|
|
34
|
+
if (firstState) {
|
|
35
|
+
this.firstState = firstState;
|
|
36
|
+
}
|
|
35
37
|
}
|
|
36
38
|
if (!this.firstState) {
|
|
37
|
-
this.firstState = this.initialState();
|
|
39
|
+
this.firstState = this.initialState(injector);
|
|
38
40
|
}
|
|
39
41
|
this.devToolSend(this.firstState, `initialState`);
|
|
40
42
|
this.isArray = Array.isArray(this.firstState);
|
|
@@ -66,14 +68,7 @@ export class NgSimpleStateBaseStore {
|
|
|
66
68
|
* Restart the store to initial state provided from `initialState()` method
|
|
67
69
|
*/
|
|
68
70
|
restartState() {
|
|
69
|
-
return this.setState(() =>
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Override this method for set a specific config for the store
|
|
73
|
-
* @returns NgSimpleStateStoreConfig
|
|
74
|
-
*/
|
|
75
|
-
storeConfig() {
|
|
76
|
-
return null;
|
|
71
|
+
return this.setState(() => this.initialState(), 'restartState');
|
|
77
72
|
}
|
|
78
73
|
/**
|
|
79
74
|
* Select a store state
|
|
@@ -81,7 +76,6 @@ export class NgSimpleStateBaseStore {
|
|
|
81
76
|
* @param comparator A function used to compare the previous and current state for equality. Defaults to a `===` check.
|
|
82
77
|
* @returns Observable of the selected state
|
|
83
78
|
*/
|
|
84
|
-
// eslint-disable-next-line no-unused-vars
|
|
85
79
|
selectState(selectFn, comparator) {
|
|
86
80
|
if (!selectFn) {
|
|
87
81
|
selectFn = (tmpState) => Object.assign(this.isArray ? [] : {}, tmpState);
|
|
@@ -113,7 +107,6 @@ export class NgSimpleStateBaseStore {
|
|
|
113
107
|
* @param actionName The action label into Redux DevTools (default is parent function name)
|
|
114
108
|
* @returns True if the state is changed
|
|
115
109
|
*/
|
|
116
|
-
// eslint-disable-next-line no-unused-vars
|
|
117
110
|
setState(stateFn, actionName) {
|
|
118
111
|
const currState = this.getCurrentState();
|
|
119
112
|
const newState = stateFn(currState);
|
|
@@ -129,7 +122,7 @@ export class NgSimpleStateBaseStore {
|
|
|
129
122
|
}
|
|
130
123
|
this.state$.next(state);
|
|
131
124
|
this.devToolSend(state, actionName);
|
|
132
|
-
if (this.localStorageIsEnabled) {
|
|
125
|
+
if (this.localStorageIsEnabled && this.persistentStorage) {
|
|
133
126
|
this.persistentStorage.setItem(this.storeName, state);
|
|
134
127
|
}
|
|
135
128
|
return true;
|
|
@@ -141,7 +134,7 @@ export class NgSimpleStateBaseStore {
|
|
|
141
134
|
* @returns True if fìdev tools are enabled
|
|
142
135
|
*/
|
|
143
136
|
devToolSend(newState, actionName) {
|
|
144
|
-
if (!this.devToolIsEnabled) {
|
|
137
|
+
if (!this.devToolIsEnabled || !this.devTool) {
|
|
145
138
|
return false;
|
|
146
139
|
}
|
|
147
140
|
if (!actionName) {
|
|
@@ -164,7 +157,7 @@ export class NgSimpleStateBaseStore {
|
|
|
164
157
|
*/
|
|
165
158
|
deepFreeze(object) {
|
|
166
159
|
// No freezing in production (for better performance).
|
|
167
|
-
if (this.devMode || !object) {
|
|
160
|
+
if (!this.devMode || !object) {
|
|
168
161
|
return object;
|
|
169
162
|
}
|
|
170
163
|
// When already frozen, we assume its children are frozen (for better performance).
|
|
@@ -183,10 +176,10 @@ export class NgSimpleStateBaseStore {
|
|
|
183
176
|
return object;
|
|
184
177
|
}
|
|
185
178
|
}
|
|
186
|
-
NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
187
|
-
NgSimpleStateBaseStore.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.
|
|
188
|
-
NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
189
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
179
|
+
NgSimpleStateBaseStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateBaseStore, deps: [{ token: Injector }], target: i0.ɵɵFactoryTarget.Directive });
|
|
180
|
+
NgSimpleStateBaseStore.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.0", type: NgSimpleStateBaseStore, ngImport: i0 });
|
|
181
|
+
NgSimpleStateBaseStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateBaseStore });
|
|
182
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateBaseStore, decorators: [{
|
|
190
183
|
type: Injectable
|
|
191
184
|
}, {
|
|
192
185
|
type: Directive
|
|
@@ -194,4 +187,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
|
|
|
194
187
|
type: Inject,
|
|
195
188
|
args: [Injector]
|
|
196
189
|
}] }]; } });
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLWJhc2Utc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zaW1wbGUtc3RhdGUvc3JjL2xpYi9uZy1zaW1wbGUtc3RhdGUtYmFzZS1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWEsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBNEIsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFJaEYsbURBQW1EO0FBQ25ELE1BQU0sT0FBZ0Isc0JBQXNCO0lBdUJ4QyxZQUE4QixRQUFrQjtRQWR4QyxlQUFVLEdBQWEsSUFBSSxDQUFDO1FBRTVCLFlBQU8sR0FBWSxTQUFTLEVBQUUsQ0FBQztRQWFuQyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUVsRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxZQUFZ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LElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQzFELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxVQUFVLENBQUMsTUFBZ0I7UUFDL0Isc0RBQXNEO1FBQ3RELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN6QixPQUFPLE1BQXFCLENBQUM7U0FDaEM7UUFFRCxtRkFBbUY7UUFDbkYsd0VBQXdFO1FBQ3hFLEVBQUU7UUFDRiw2RUFBNkU7UUFDN0Usd0VBQXdFO1FBQ3hFLG9CQUFvQjtRQUNwQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekIsT0FBTyxNQUFxQixDQUFDO1NBQ2hDO1FBRUQsb0ZBQW9GO1FBQ3BGLDRDQUE0QztRQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBRSxNQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFFLE9BQU8sTUFBcUIsQ0FBQztJQUNqQyxDQUFDOzttSEFyTmlCLHNCQUFzQixrQkF1QnBCLFFBQVE7dUdBdkJWLHNCQUFzQjt1SEFBdEIsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBSDNDLFVBQVU7O2tCQUNWLFNBQVM7OzBCQXlCTyxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPbkRlc3Ryb3ksIERpcmVjdGl2ZSwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgb2JzZXJ2ZU9uIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlQnJvd3NlclN0b3JhZ2UgfSBmcm9tICcuL25nLXNpbXBsZS1zdGF0ZS1icm93c2VyLXN0b3JhZ2UnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlRGV2VG9vbCB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLWRldi10b29sJztcclxuaW1wb3J0IHsgTmdTaW1wbGVTdGF0ZUxvY2FsU3RvcmFnZSB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLWxvY2FsLXN0b3JhZ2UnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlU3RvcmVDb25maWcsIE5HX1NJTVBMRV9TVE9SRV9DT05GSUcgfSBmcm9tICcuL25nLXNpbXBsZS1zdGF0ZS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlU2Vzc2lvblN0b3JhZ2UgfSBmcm9tICcuL25nLXNpbXBsZS1zdGF0ZS1zZXNzaW9uLXN0b3JhZ2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5ARGlyZWN0aXZlKClcclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtY2xhc3Mtc3VmZml4XHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ1NpbXBsZVN0YXRlQmFzZVN0b3JlPFMgZXh0ZW5kcyBvYmplY3QgfCBBcnJheTxhbnk+PiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxTPjtcclxuICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlSXNFbmFibGVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBkZXZUb29sSXNFbmFibGVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBkZXZUb29sOiBOZ1NpbXBsZVN0YXRlRGV2VG9vbDtcclxuICAgIHByaXZhdGUgcGVyc2lzdGVudFN0b3JhZ2U6IE5nU2ltcGxlU3RhdGVCcm93c2VyU3RvcmFnZTtcclxuICAgIHByaXZhdGUgbG9jYWxTdG9yZUNvbmZpZzogTmdTaW1wbGVTdGF0ZVN0b3JlQ29uZmlnO1xyXG4gICAgcHJpdmF0ZSBzdG9yZU5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgZmlyc3RTdGF0ZTogUyB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBpc0FycmF5OiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBkZXZNb2RlOiBib29sZWFuID0gaXNEZXZNb2RlKCk7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgY29tcGFyYXRvciE6IDxLPihwcmV2aW91czogSywgY3VycmVudDogSykgPT4gYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiB0aGUgb2JzZXJ2YWJsZSBvZiB0aGUgc3RhdGVcclxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc3RhdGUoKTogQmVoYXZpb3JTdWJqZWN0PFM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChJbmplY3RvcikgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5kZXZUb29sID0gaW5qZWN0b3IuZ2V0KE5nU2ltcGxlU3RhdGVEZXZUb29sKTtcclxuXHJcbiAgICAgICAgY29uc3QgZ2xvYmFsQ29uZmlnID0gaW5qZWN0b3IuZ2V0KE5HX1NJTVBMRV9TVE9SRV9DT05GSUcsIHt9KTtcclxuICAgICAgICBjb25zdCBzdG9yZUNvbmZpZyA9IHRoaXMuc3RvcmVDb25maWcoKSB8fCB7fTtcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmVDb25maWcgPSB7IC4uLmdsb2JhbENvbmZpZywgLi4uc3RvcmVDb25maWcgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubG9jYWxTdG9yZUNvbmZpZy5wZXJzaXN0ZW50U3RvcmFnZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlID0gaW5qZWN0b3IuZ2V0KE5nU2ltcGxlU3RhdGVMb2NhbFN0b3JhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sb2NhbFN0b3JlQ29uZmlnLnBlcnNpc3RlbnRTdG9yYWdlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJzaXN0ZW50U3RvcmFnZSA9IGluamVjdG9yLmdldChOZ1NpbXBsZVN0YXRlU2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVyc2lzdGVudFN0b3JhZ2UgPSBpbmplY3Rvci5nZXQoTmdTaW1wbGVTdGF0ZUxvY2FsU3RvcmFnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZUlzRW5hYmxlZCA9IHR5cGVvZiB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlTG9jYWxTdG9yYWdlID09PSAnYm9vbGVhbicgPyB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlTG9jYWxTdG9yYWdlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kZXZUb29sSXNFbmFibGVkID0gdHlwZW9mIHRoaXMubG9jYWxTdG9yZUNvbmZpZy5lbmFibGVEZXZUb29sID09PSAnYm9vbGVhbicgPyB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlRGV2VG9vbCA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RvcmVOYW1lID0gdHlwZW9mIHRoaXMubG9jYWxTdG9yZUNvbmZpZy5zdG9yZU5hbWUgPT09ICdzdHJpbmcnID8gdGhpcy5sb2NhbFN0b3JlQ29uZmlnLnN0b3JlTmFtZSA6IHRoaXMuY29uc3RydWN0b3IubmFtZTtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9jYWxTdG9yZUNvbmZpZy5jb21wYXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcGFyYXRvciA9IHRoaXMubG9jYWxTdG9yZUNvbmZpZy5jb21wYXJhdG9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlSXNFbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3RTdGF0ZSA9IHRoaXMucGVyc2lzdGVudFN0b3JhZ2UuZ2V0SXRlbTxTPih0aGlzLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5maXJzdFN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3RTdGF0ZSA9IHRoaXMuaW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRldlRvb2xTZW5kKHRoaXMuZmlyc3RTdGF0ZSwgYGluaXRpYWxTdGF0ZWApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHRoaXMuZmlyc3RTdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFM+KE9iamVjdC5hc3NpZ24odGhpcy5pc0FycmF5ID8gW10gOiB7fSwgdGhpcy5maXJzdFN0YXRlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHlvdSBvdmVycmlkZSB0aGlzIG1ldGhvZCwgeW91IGhhdmUgdG8gY2FsbCB0aGUgYHN1cGVyLm5nT25EZXN0cm95KClgIG1ldGhvZCBpbiB5b3VyIGBuZ09uRGVzdHJveSgpYCBtZXRob2QuXHJcbiAgICAgKi9cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGV2VG9vbFNlbmQodW5kZWZpbmVkLCAnbmdPbkRlc3Ryb3knKTtcclxuICAgICAgICB0aGlzLnN0YXRlJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXQgc3RvcmUgdG8gZmlyc3QgbG9hZGVkIHN0b3JlIHN0YXRlOlxyXG4gICAgICogIC0gdGhlIGxhc3Qgc2F2ZWQgc3RhdGUsIGlmIGBlbmFibGVMb2NhbFN0b3JhZ2VgIGNvbmZpZyBpcyBgdHJ1ZWBcclxuICAgICAqICAtIG90aGVyd2lzZSB0aGUgaW5pdGlhbCBzdGF0ZSBwcm92aWRlZCBmcm9tIGBpbml0aWFsU3RhdGUoKWAgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICByZXNldFN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFN0YXRlKCgpID0+ICh0aGlzLmZpcnN0U3RhdGUgYXMgUyksICdyZXNldFN0YXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN0YXJ0IHRoZSBzdG9yZSB0byBpbml0aWFsIHN0YXRlIHByb3ZpZGVkIGZyb20gYGluaXRpYWxTdGF0ZSgpYCBtZXRob2RcclxuICAgICAqL1xyXG4gICAgcmVzdGFydFN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFN0YXRlKCgpID0+ICh0aGlzLmluaXRpYWxTdGF0ZSgpKSwgJ3Jlc3RhcnRTdGF0ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIHNldCBhIHNwZWNpZmljIGNvbmZpZyBmb3IgdGhlIHN0b3JlXHJcbiAgICAgKiBAcmV0dXJucyBOZ1NpbXBsZVN0YXRlU3RvcmVDb25maWdcclxuICAgICAqL1xyXG4gICAgc3RvcmVDb25maWcoKTogTmdTaW1wbGVTdGF0ZVN0b3JlQ29uZmlnIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgaW50byB0aGUgc3RvcmUgdGhlIGluaXRpYWwgc3RhdGVcclxuICAgICAqIEByZXR1cm5zIFRoZSBzdGF0ZSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGluaXRpYWxTdGF0ZSgpOiBTO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VsZWN0IGEgc3RvcmUgc3RhdGVcclxuICAgICAqIEBwYXJhbSBzZWxlY3RGbiBTdGF0ZSBzZWxlY3RvciAoaWYgbm90IHByb3ZpZGVkIHJldHVybiBmdWxsIHN0YXRlKVxyXG4gICAgICogQHBhcmFtIGNvbXBhcmF0b3IgQSBmdW5jdGlvbiB1c2VkIHRvIGNvbXBhcmUgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IHN0YXRlIGZvciBlcXVhbGl0eS4gRGVmYXVsdHMgdG8gYSBgPT09YCBjaGVjay5cclxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHNlbGVjdGVkIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgc2VsZWN0U3RhdGU8Sz4oc2VsZWN0Rm4/OiAoc3RhdGU6IFJlYWRvbmx5PFM+KSA9PiBLLCBjb21wYXJhdG9yPzogKHByZXZpb3VzOiBLLCBjdXJyZW50OiBLKSA9PiBib29sZWFuKTogT2JzZXJ2YWJsZTxLPiB7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RGbikge1xyXG4gICAgICAgICAgICBzZWxlY3RGbiA9ICh0bXBTdGF0ZTogUmVhZG9ubHk8Uz4pID0+IE9iamVjdC5hc3NpZ24odGhpcy5pc0FycmF5ID8gW10gOiB7fSwgdG1wU3RhdGUpIGFzIHVua25vd24gYXMgSztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjb21wYXJhdG9yICYmIHRoaXMuY29tcGFyYXRvcikge1xyXG4gICAgICAgICAgICBjb21wYXJhdG9yID0gdGhpcy5jb21wYXJhdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQucGlwZShcclxuICAgICAgICAgICAgbWFwKHN0YXRlID0+IChzZWxlY3RGbiBhcyBhbnkpKHN0YXRlIGFzIFJlYWRvbmx5PFM+KSksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGNvbXBhcmF0b3IpLFxyXG4gICAgICAgICAgICBvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiB0aGUgY3VycmVudCBzdG9yZSBzdGF0ZSAoc25hcHNob3QpXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBnZXRDdXJyZW50U3RhdGUoKTogUmVhZG9ubHk8Uz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZXBGcmVlemUodGhpcy5zdGF0ZSQuZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IGxvYWRlZCBzdG9yZSBzdGF0ZTpcclxuICAgICAqIHRoZSBsYXN0IHNhdmVkIHN0YXRlLCBpZiBgZW5hYmxlTG9jYWxTdG9yYWdlYCBjb25maWcgaXMgYHRydWVgO1xyXG4gICAgICogb3RoZXJ3aXNlIHRoZSBpbml0aWFsIHN0YXRlIHByb3ZpZGVkIGZyb20gYGluaXRpYWxTdGF0ZSgpYCBtZXRob2QuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgZmlyc3Qgc3RhdGVcclxuICAgICAqL1xyXG4gICAgZ2V0Rmlyc3RTdGF0ZSgpOiBSZWFkb25seTxTPiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZXBGcmVlemUodGhpcy5maXJzdFN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBhIG5ldyBzdGF0ZVxyXG4gICAgICogQHBhcmFtIHNlbGVjdEZuIFN0YXRlIHJlZHVjZXJcclxuICAgICAqIEBwYXJhbSBhY3Rpb25OYW1lIFRoZSBhY3Rpb24gbGFiZWwgaW50byBSZWR1eCBEZXZUb29scyAoZGVmYXVsdCBpcyBwYXJlbnQgZnVuY3Rpb24gbmFtZSlcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0YXRlIGlzIGNoYW5nZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBzZXRTdGF0ZShzdGF0ZUZuOiAoY3VycmVudFN0YXRlOiBSZWFkb25seTxTPikgPT4gUGFydGlhbDxTPiwgYWN0aW9uTmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGN1cnJTdGF0ZSA9IHRoaXMuZ2V0Q3VycmVudFN0YXRlKCk7XHJcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZUZuKGN1cnJTdGF0ZSk7XHJcbiAgICAgICAgaWYgKGN1cnJTdGF0ZSA9PT0gbmV3U3RhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RhdGU6IFM7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNBcnJheSkge1xyXG4gICAgICAgICAgICBzdGF0ZSA9IE9iamVjdC5hc3NpZ24oW10gYXMgUywgbmV3U3RhdGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgY3VyclN0YXRlLCBuZXdTdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhdGUkLm5leHQoc3RhdGUpO1xyXG4gICAgICAgIHRoaXMuZGV2VG9vbFNlbmQoc3RhdGUsIGFjdGlvbk5hbWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZUlzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlLnNldEl0ZW08Uz4odGhpcy5zdG9yZU5hbWUsIHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIHRvIGRldiB0b29sIGEgbmV3IHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gbmV3U3RhdGUgbmV3IHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgYWN0aW9uIG5hbWVcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgZsOsZGV2IHRvb2xzIGFyZSBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZGV2VG9vbFNlbmQobmV3U3RhdGU6IFMgfCB1bmRlZmluZWQsIGFjdGlvbk5hbWU/OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGV2VG9vbElzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAvLyByZXRyaXZlIHRoZSBwYXJlbnQgKG9mIHBhcmVudCkgbWV0aG9kIGludG8gdGhlIHN0YWNrIHRyYWNlXHJcbiAgICAgICAgICAgIGFjdGlvbk5hbWUgPSBuZXcgRXJyb3IoKS5zdGFja1xyXG4gICAgICAgICAgICAgICAgPy5zcGxpdCgnXFxuJylbM11cclxuICAgICAgICAgICAgICAgIC50cmltKClcclxuICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpWzFdXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoJy4nKVsxXSB8fCAndW5rbm93bic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5kZXZUb29sLnNlbmQodGhpcy5zdG9yZU5hbWUsIGFjdGlvbk5hbWUsIG5ld1N0YXRlKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnN0b3JlTmFtZSArICcuJyArIGFjdGlvbk5hbWUsIG5ld1N0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWN1cnNpdmVseSBPYmplY3QuZnJlZXplIHNpbXBsZSBKYXZhc2NyaXB0IHN0cnVjdHVyZXMgY29uc2lzdGluZyBvZiBwbGFpbiBvYmplY3RzLCBhcnJheXMsIGFuZCBwcmltaXRpdmVzLlxyXG4gICAgICogTWFrZSB0aGUgZGF0YSBpbW11dGFibGUuXHJcbiAgICAgKiBAcmV0dXJucyBpbW11dGFibGUgb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZGVlcEZyZWV6ZShvYmplY3Q6IFMgfCBudWxsKTogUmVhZG9ubHk8Uz4ge1xyXG4gICAgICAgIC8vIE5vIGZyZWV6aW5nIGluIHByb2R1Y3Rpb24gKGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UpLlxyXG4gICAgICAgIGlmICh0aGlzLmRldk1vZGUgfHwgIW9iamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0IGFzIFJlYWRvbmx5PFM+O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gV2hlbiBhbHJlYWR5IGZyb3plbiwgd2UgYXNzdW1lIGl0cyBjaGlsZHJlbiBhcmUgZnJvemVuIChmb3IgYmV0dGVyIHBlcmZvcm1hbmNlKS5cclxuICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSB0cnVlIGlmIHlvdSBhbHdheXMgdXNlIGBkZWVwRnJlZXplYCB0byBmcmVlemUgb2JqZWN0cy5cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIE5vdGUgdGhhdCBPYmplY3QuaXNGcm96ZW4gd2lsbCBhbHNvIHJldHVybiBgdHJ1ZWAgZm9yIHByaW1pdGl2ZXMgKG51bWJlcnMsXHJcbiAgICAgICAgLy8gc3RyaW5ncywgYm9vbGVhbnMsIHVuZGVmaW5lZCwgbnVsbCksIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgZm9yXHJcbiAgICAgICAgLy8gdGhvc2UgZXhwbGljaXRseS5cclxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuKG9iamVjdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iamVjdCBhcyBSZWFkb25seTxTPjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgYW4gYXJyYXkgb3IgcGxhaW4gb2JqZWN0LCBzb1xyXG4gICAgICAgIC8vIGp1c3QgZnJlZXplIGl0IGFuZCByZWN1cnNlIG9uIGl0cyB2YWx1ZXMuXHJcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShvYmplY3QpO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChrZXkgPT4gdGhpcy5kZWVwRnJlZXplKChvYmplY3QgYXMgYW55KVtrZXldKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBvYmplY3QgYXMgUmVhZG9ubHk8Uz47XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLWJhc2Utc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zaW1wbGUtc3RhdGUvc3JjL2xpYi9uZy1zaW1wbGUtc3RhdGUtYmFzZS1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWEsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFjLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBNEIsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFJaEYsTUFBTSxPQUFnQixzQkFBc0I7SUFzQnhDLFlBQThCLFFBQWtCO1FBWHhDLFlBQU8sR0FBWSxTQUFTLEVBQUUsQ0FBQztRQWFuQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUU1RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEtBQUssU0FBUyxDQUFD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LElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUMxRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUM1RDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssVUFBVSxDQUFDLE1BQWdCO1FBQy9CLHNEQUFzRDtRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUMxQixPQUFPLE1BQXFCLENBQUM7U0FDaEM7UUFFRCxtRkFBbUY7UUFDbkYsd0VBQXdFO1FBQ3hFLEVBQUU7UUFDRiw2RUFBNkU7UUFDN0Usd0VBQXdFO1FBQ3hFLG9CQUFvQjtRQUNwQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekIsT0FBTyxNQUFxQixDQUFDO1NBQ2hDO1FBRUQsb0ZBQW9GO1FBQ3BGLDRDQUE0QztRQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBRSxNQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFFLE9BQU8sTUFBcUIsQ0FBQztJQUNqQyxDQUFDOzttSEF4TmlCLHNCQUFzQixrQkFzQnBCLFFBQVE7dUdBdEJWLHNCQUFzQjt1SEFBdEIsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBRjNDLFVBQVU7O2tCQUNWLFNBQVM7OzBCQXVCTyxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPbkRlc3Ryb3ksIERpcmVjdGl2ZSwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgb2JzZXJ2ZU9uIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlQnJvd3NlclN0b3JhZ2UgfSBmcm9tICcuL25nLXNpbXBsZS1zdGF0ZS1icm93c2VyLXN0b3JhZ2UnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlRGV2VG9vbCB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLWRldi10b29sJztcclxuaW1wb3J0IHsgTmdTaW1wbGVTdGF0ZUxvY2FsU3RvcmFnZSB9IGZyb20gJy4vbmctc2ltcGxlLXN0YXRlLWxvY2FsLXN0b3JhZ2UnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlU3RvcmVDb25maWcsIE5HX1NJTVBMRV9TVE9SRV9DT05GSUcgfSBmcm9tICcuL25nLXNpbXBsZS1zdGF0ZS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBOZ1NpbXBsZVN0YXRlU2Vzc2lvblN0b3JhZ2UgfSBmcm9tICcuL25nLXNpbXBsZS1zdGF0ZS1zZXNzaW9uLXN0b3JhZ2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5nU2ltcGxlU3RhdGVCYXNlU3RvcmU8UyBleHRlbmRzIG9iamVjdCB8IEFycmF5PGFueT4+IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRlJDogQmVoYXZpb3JTdWJqZWN0PFM+O1xyXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VJc0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGRldlRvb2xJc0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGRldlRvb2whOiBOZ1NpbXBsZVN0YXRlRGV2VG9vbDtcclxuICAgIHByaXZhdGUgcGVyc2lzdGVudFN0b3JhZ2UhOiBOZ1NpbXBsZVN0YXRlQnJvd3NlclN0b3JhZ2U7XHJcbiAgICBwcml2YXRlIGxvY2FsU3RvcmVDb25maWc6IE5nU2ltcGxlU3RhdGVTdG9yZUNvbmZpZztcclxuICAgIHByaXZhdGUgc3RvcmVOYW1lOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGZpcnN0U3RhdGUhOiBTO1xyXG4gICAgcHJpdmF0ZSBpc0FycmF5OiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBkZXZNb2RlOiBib29sZWFuID0gaXNEZXZNb2RlKCk7XHJcbiAgICBwcml2YXRlIGNvbXBhcmF0b3IhOiA8Sz4ocHJldmlvdXM6IEssIGN1cnJlbnQ6IEspID0+IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIG9ic2VydmFibGUgb2YgdGhlIHN0YXRlXHJcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHN0YXRlKCk6IEJlaGF2aW9yU3ViamVjdDxTPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoSW5qZWN0b3IpIGluamVjdG9yOiBJbmplY3Rvcikge1xyXG5cclxuICAgICAgICBjb25zdCBnbG9iYWxDb25maWcgPSBpbmplY3Rvci5nZXQoTkdfU0lNUExFX1NUT1JFX0NPTkZJRywge30pO1xyXG4gICAgICAgIGNvbnN0IHN0b3JlQ29uZmlnID0gdGhpcy5zdG9yZUNvbmZpZygpIHx8IHt9O1xyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yZUNvbmZpZyA9IHsgLi4uZ2xvYmFsQ29uZmlnLCAuLi5zdG9yZUNvbmZpZyB9O1xyXG5cclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZUlzRW5hYmxlZCA9IHR5cGVvZiB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlTG9jYWxTdG9yYWdlID09PSAnYm9vbGVhbicgPyB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlTG9jYWxTdG9yYWdlIDogZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZUlzRW5hYmxlZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2NhbFN0b3JlQ29uZmlnLnBlcnNpc3RlbnRTdG9yYWdlID09PSAnbG9jYWwnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlID0gaW5qZWN0b3IuZ2V0KE5nU2ltcGxlU3RhdGVMb2NhbFN0b3JhZ2UpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxTdG9yZUNvbmZpZy5wZXJzaXN0ZW50U3RvcmFnZSA9PT0gJ3Nlc3Npb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlID0gaW5qZWN0b3IuZ2V0KE5nU2ltcGxlU3RhdGVTZXNzaW9uU3RvcmFnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGV2VG9vbElzRW5hYmxlZCA9IHR5cGVvZiB0aGlzLmxvY2FsU3RvcmVDb25maWcuZW5hYmxlRGV2VG9vbCA9PT0gJ2Jvb2xlYW4nID8gdGhpcy5sb2NhbFN0b3JlQ29uZmlnLmVuYWJsZURldlRvb2wgOiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5kZXZUb29sSXNFbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGV2VG9vbCA9IGluamVjdG9yLmdldChOZ1NpbXBsZVN0YXRlRGV2VG9vbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0b3JlTmFtZSA9IHR5cGVvZiB0aGlzLmxvY2FsU3RvcmVDb25maWcuc3RvcmVOYW1lID09PSAnc3RyaW5nJyA/IHRoaXMubG9jYWxTdG9yZUNvbmZpZy5zdG9yZU5hbWUgOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvY2FsU3RvcmVDb25maWcuY29tcGFyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBhcmF0b3IgPSB0aGlzLmxvY2FsU3RvcmVDb25maWcuY29tcGFyYXRvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZUlzRW5hYmxlZCAmJiB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0U3RhdGUgPSB0aGlzLnBlcnNpc3RlbnRTdG9yYWdlLmdldEl0ZW08Uz4odGhpcy5zdG9yZU5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoZmlyc3RTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdFN0YXRlID0gZmlyc3RTdGF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuZmlyc3RTdGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0U3RhdGUgPSB0aGlzLmluaXRpYWxTdGF0ZShpbmplY3Rvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRldlRvb2xTZW5kKHRoaXMuZmlyc3RTdGF0ZSwgYGluaXRpYWxTdGF0ZWApO1xyXG5cclxuICAgICAgICB0aGlzLmlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHRoaXMuZmlyc3RTdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFM+KE9iamVjdC5hc3NpZ24odGhpcy5pc0FycmF5ID8gW10gOiB7fSwgdGhpcy5maXJzdFN0YXRlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHlvdSBvdmVycmlkZSB0aGlzIG1ldGhvZCwgeW91IGhhdmUgdG8gY2FsbCB0aGUgYHN1cGVyLm5nT25EZXN0cm95KClgIG1ldGhvZCBpbiB5b3VyIGBuZ09uRGVzdHJveSgpYCBtZXRob2QuXHJcbiAgICAgKi9cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGV2VG9vbFNlbmQodW5kZWZpbmVkLCAnbmdPbkRlc3Ryb3knKTtcclxuICAgICAgICB0aGlzLnN0YXRlJC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXQgc3RvcmUgdG8gZmlyc3QgbG9hZGVkIHN0b3JlIHN0YXRlOlxyXG4gICAgICogIC0gdGhlIGxhc3Qgc2F2ZWQgc3RhdGUsIGlmIGBlbmFibGVMb2NhbFN0b3JhZ2VgIGNvbmZpZyBpcyBgdHJ1ZWBcclxuICAgICAqICAtIG90aGVyd2lzZSB0aGUgaW5pdGlhbCBzdGF0ZSBwcm92aWRlZCBmcm9tIGBpbml0aWFsU3RhdGUoKWAgbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICByZXNldFN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldFN0YXRlKCgpID0+IHRoaXMuZmlyc3RTdGF0ZSwgJ3Jlc2V0U3RhdGUnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3RhcnQgdGhlIHN0b3JlIHRvIGluaXRpYWwgc3RhdGUgcHJvdmlkZWQgZnJvbSBgaW5pdGlhbFN0YXRlKClgIG1ldGhvZFxyXG4gICAgICovXHJcbiAgICByZXN0YXJ0U3RhdGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoKCkgPT4gdGhpcy5pbml0aWFsU3RhdGUoKSwgJ3Jlc3RhcnRTdGF0ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIHNldCBhIHNwZWNpZmljIGNvbmZpZyBmb3IgdGhlIHN0b3JlXHJcbiAgICAgKiBAcmV0dXJucyBOZ1NpbXBsZVN0YXRlU3RvcmVDb25maWdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHN0b3JlQ29uZmlnKCk6IE5nU2ltcGxlU3RhdGVTdG9yZUNvbmZpZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBpbnRvIHRoZSBzdG9yZSB0aGUgaW5pdGlhbCBzdGF0ZVxyXG4gICAgICogQHBhcmFtIGluamVjdG9yIGN1cnJlbnQgSW5qZWN0b3JcclxuICAgICAqIEByZXR1cm5zIFRoZSBzdGF0ZSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IGluaXRpYWxTdGF0ZShpbmplY3Rvcj86IEluamVjdG9yKTogUztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbGVjdCBhIHN0b3JlIHN0YXRlXHJcbiAgICAgKiBAcGFyYW0gc2VsZWN0Rm4gU3RhdGUgc2VsZWN0b3IgKGlmIG5vdCBwcm92aWRlZCByZXR1cm4gZnVsbCBzdGF0ZSlcclxuICAgICAqIEBwYXJhbSBjb21wYXJhdG9yIEEgZnVuY3Rpb24gdXNlZCB0byBjb21wYXJlIHRoZSBwcmV2aW91cyBhbmQgY3VycmVudCBzdGF0ZSBmb3IgZXF1YWxpdHkuIERlZmF1bHRzIHRvIGEgYD09PWAgY2hlY2suXHJcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSBzZWxlY3RlZCBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBzZWxlY3RTdGF0ZTxLPihzZWxlY3RGbj86IChzdGF0ZTogUmVhZG9ubHk8Uz4pID0+IEssIGNvbXBhcmF0b3I/OiAocHJldmlvdXM6IEssIGN1cnJlbnQ6IEspID0+IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEs+IHtcclxuICAgICAgICBpZiAoIXNlbGVjdEZuKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdEZuID0gKHRtcFN0YXRlOiBSZWFkb25seTxTPikgPT4gT2JqZWN0LmFzc2lnbih0aGlzLmlzQXJyYXkgPyBbXSA6IHt9LCB0bXBTdGF0ZSkgYXMgSztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjb21wYXJhdG9yICYmIHRoaXMuY29tcGFyYXRvcikge1xyXG4gICAgICAgICAgICBjb21wYXJhdG9yID0gdGhpcy5jb21wYXJhdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSQucGlwZShcclxuICAgICAgICAgICAgbWFwKHN0YXRlID0+IChzZWxlY3RGbiBhcyAoc3RhdGU6IFJlYWRvbmx5PFM+KSA9PiBLKShzdGF0ZSBhcyBSZWFkb25seTxTPikpLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChjb21wYXJhdG9yKSxcclxuICAgICAgICAgICAgb2JzZXJ2ZU9uKGFzeW5jU2NoZWR1bGVyKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RvcmUgc3RhdGUgKHNuYXBzaG90KVxyXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgc3RhdGVcclxuICAgICAqL1xyXG4gICAgZ2V0Q3VycmVudFN0YXRlKCk6IFJlYWRvbmx5PFM+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWVwRnJlZXplKHRoaXMuc3RhdGUkLmdldFZhbHVlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRoZSBmaXJzdCBsb2FkZWQgc3RvcmUgc3RhdGU6XHJcbiAgICAgKiB0aGUgbGFzdCBzYXZlZCBzdGF0ZSwgaWYgYGVuYWJsZUxvY2FsU3RvcmFnZWAgY29uZmlnIGlzIGB0cnVlYDtcclxuICAgICAqIG90aGVyd2lzZSB0aGUgaW5pdGlhbCBzdGF0ZSBwcm92aWRlZCBmcm9tIGBpbml0aWFsU3RhdGUoKWAgbWV0aG9kLlxyXG4gICAgICogQHJldHVybnMgVGhlIGZpcnN0IHN0YXRlXHJcbiAgICAgKi9cclxuICAgIGdldEZpcnN0U3RhdGUoKTogUmVhZG9ubHk8Uz4gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWVwRnJlZXplKHRoaXMuZmlyc3RTdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgYSBuZXcgc3RhdGVcclxuICAgICAqIEBwYXJhbSBzZWxlY3RGbiBTdGF0ZSByZWR1Y2VyXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTmFtZSBUaGUgYWN0aW9uIGxhYmVsIGludG8gUmVkdXggRGV2VG9vbHMgKGRlZmF1bHQgaXMgcGFyZW50IGZ1bmN0aW9uIG5hbWUpXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkXHJcbiAgICAgKi9cclxuICAgIHNldFN0YXRlKHN0YXRlRm46IChjdXJyZW50U3RhdGU6IFJlYWRvbmx5PFM+KSA9PiBQYXJ0aWFsPFM+LCBhY3Rpb25OYW1lPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgY3VyclN0YXRlID0gdGhpcy5nZXRDdXJyZW50U3RhdGUoKTtcclxuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlRm4oY3VyclN0YXRlKTtcclxuICAgICAgICBpZiAoY3VyclN0YXRlID09PSBuZXdTdGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdGF0ZTogUztcclxuICAgICAgICBpZiAodGhpcy5pc0FycmF5KSB7XHJcbiAgICAgICAgICAgIHN0YXRlID0gT2JqZWN0LmFzc2lnbihbXSBhcyBTLCBuZXdTdGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyU3RhdGUsIG5ld1N0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdGF0ZSQubmV4dChzdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5kZXZUb29sU2VuZChzdGF0ZSwgYWN0aW9uTmFtZSk7XHJcbiAgICAgICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlSXNFbmFibGVkICYmIHRoaXMucGVyc2lzdGVudFN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJzaXN0ZW50U3RvcmFnZS5zZXRJdGVtPFM+KHRoaXMuc3RvcmVOYW1lLCBzdGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZCB0byBkZXYgdG9vbCBhIG5ldyBzdGF0ZVxyXG4gICAgICogQHBhcmFtIG5ld1N0YXRlIG5ldyBzdGF0ZVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIGFjdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIGbDrGRldiB0b29scyBhcmUgZW5hYmxlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRldlRvb2xTZW5kKG5ld1N0YXRlOiBTIHwgdW5kZWZpbmVkLCBhY3Rpb25OYW1lPzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldlRvb2xJc0VuYWJsZWQgfHwgIXRoaXMuZGV2VG9vbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAvLyByZXRyaXZlIHRoZSBwYXJlbnQgKG9mIHBhcmVudCkgbWV0aG9kIGludG8gdGhlIHN0YWNrIHRyYWNlXHJcbiAgICAgICAgICAgIGFjdGlvbk5hbWUgPSBuZXcgRXJyb3IoKS5zdGFja1xyXG4gICAgICAgICAgICAgICAgPy5zcGxpdCgnXFxuJylbM11cclxuICAgICAgICAgICAgICAgIC50cmltKClcclxuICAgICAgICAgICAgICAgIC5zcGxpdCgnICcpWzFdXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoJy4nKVsxXSB8fCAndW5rbm93bic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5kZXZUb29sLnNlbmQodGhpcy5zdG9yZU5hbWUsIGFjdGlvbk5hbWUsIG5ld1N0YXRlKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnN0b3JlTmFtZSArICcuJyArIGFjdGlvbk5hbWUsIG5ld1N0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWN1cnNpdmVseSBPYmplY3QuZnJlZXplIHNpbXBsZSBKYXZhc2NyaXB0IHN0cnVjdHVyZXMgY29uc2lzdGluZyBvZiBwbGFpbiBvYmplY3RzLCBhcnJheXMsIGFuZCBwcmltaXRpdmVzLlxyXG4gICAgICogTWFrZSB0aGUgZGF0YSBpbW11dGFibGUuXHJcbiAgICAgKiBAcmV0dXJucyBpbW11dGFibGUgb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZGVlcEZyZWV6ZShvYmplY3Q6IFMgfCBudWxsKTogUmVhZG9ubHk8Uz4ge1xyXG4gICAgICAgIC8vIE5vIGZyZWV6aW5nIGluIHByb2R1Y3Rpb24gKGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UpLlxyXG4gICAgICAgIGlmICghdGhpcy5kZXZNb2RlIHx8ICFvYmplY3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iamVjdCBhcyBSZWFkb25seTxTPjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFdoZW4gYWxyZWFkeSBmcm96ZW4sIHdlIGFzc3VtZSBpdHMgY2hpbGRyZW4gYXJlIGZyb3plbiAoZm9yIGJldHRlciBwZXJmb3JtYW5jZSkuXHJcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgdHJ1ZSBpZiB5b3UgYWx3YXlzIHVzZSBgZGVlcEZyZWV6ZWAgdG8gZnJlZXplIG9iamVjdHMuXHJcbiAgICAgICAgLy9cclxuICAgICAgICAvLyBOb3RlIHRoYXQgT2JqZWN0LmlzRnJvemVuIHdpbGwgYWxzbyByZXR1cm4gYHRydWVgIGZvciBwcmltaXRpdmVzIChudW1iZXJzLFxyXG4gICAgICAgIC8vIHN0cmluZ3MsIGJvb2xlYW5zLCB1bmRlZmluZWQsIG51bGwpLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGZvclxyXG4gICAgICAgIC8vIHRob3NlIGV4cGxpY2l0bHkuXHJcbiAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbihvYmplY3QpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvYmplY3QgYXMgUmVhZG9ubHk8Uz47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggZWl0aGVyIGFuIGFycmF5IG9yIHBsYWluIG9iamVjdCwgc29cclxuICAgICAgICAvLyBqdXN0IGZyZWV6ZSBpdCBhbmQgcmVjdXJzZSBvbiBpdHMgdmFsdWVzLlxyXG4gICAgICAgIE9iamVjdC5mcmVlemUob2JqZWN0KTtcclxuICAgICAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goa2V5ID0+IHRoaXMuZGVlcEZyZWV6ZSgob2JqZWN0IGFzIGFueSlba2V5XSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gb2JqZWN0IGFzIFJlYWRvbmx5PFM+O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -51,5 +51,21 @@ export class NgSimpleStateBrowserStorage {
|
|
|
51
51
|
}
|
|
52
52
|
return false;
|
|
53
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Removes all key/value pairs, if there are any.
|
|
56
|
+
* @returns True if storage is cleared
|
|
57
|
+
*/
|
|
58
|
+
clear() {
|
|
59
|
+
if (this.isStorageActive) {
|
|
60
|
+
for (let i = 0, e = this.storage.length; i < e; i++) {
|
|
61
|
+
const key = this.storage.key(i);
|
|
62
|
+
if (key && key.startsWith(BASE_KEY)) {
|
|
63
|
+
this.storage.removeItem(key);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
54
70
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLWJyb3dzZXItc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNpbXBsZS1zdGF0ZS9zcmMvbGliL25nLXNpbXBsZS1zdGF0ZS1icm93c2VyLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDO0FBRTFDLE1BQU0sT0FBZ0IsMkJBQTJCO0lBSTdDLFlBQW9CLE9BQWdCO1FBQWhCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFGNUIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFHNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBSSxHQUFXLEVBQUUsS0FBUTtRQUM1QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDNUQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFJLEdBQVc7UUFDbEIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNuRCxJQUFJLEtBQUssRUFBRTtnQkFDUCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUI7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLEdBQVc7UUFDbEIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN4QyxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUs7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDaEM7YUFDSjtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQkFTRV9LRVkgPSAnTmdTaW1wbGVTdGF0ZTo6JztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ1NpbXBsZVN0YXRlQnJvd3NlclN0b3JhZ2Uge1xyXG5cclxuICAgIHByaXZhdGUgaXNTdG9yYWdlQWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlKSB7XHJcbiAgICAgICAgdGhpcy5pc1N0b3JhZ2VBY3RpdmUgPSAhIXN0b3JhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBzdG9yYWdlIGlzIGFjdGl2ZVxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBzdG9yYWdlIGlzIGFjdGl2ZVxyXG4gICAgICovXHJcbiAgICBpc0FjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1N0b3JhZ2VBY3RpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgaXRlbSBpbnRvIHN0b3JhZ2VcclxuICAgICAqIEBwYXJhbSBrZXkga2V5IG5hbWVcclxuICAgICAqIEBwYXJhbSBzdGF0ZSBzdGF0ZSB2YWxpZVxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBpdGVtIGlzIHN0b3JlZCBpbnRvIHN0b3JhZ2VcclxuICAgICAqL1xyXG4gICAgc2V0SXRlbTxLPihrZXk6IHN0cmluZywgc3RhdGU6IEspOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc1N0b3JhZ2VBY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oQkFTRV9LRVkgKyBrZXksIEpTT04uc3RyaW5naWZ5KHN0YXRlKSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gaXRlbSBmcm9tIHN0b3JhZ2VcclxuICAgICAqIEBwYXJhbSBrZXkga2V5IG5hbWVcclxuICAgICAqIEByZXR1cm5zIHRoZSBpdGVtXHJcbiAgICAgKi9cclxuICAgIGdldEl0ZW08Sz4oa2V5OiBzdHJpbmcpOiBLIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9yYWdlQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oQkFTRV9LRVkgKyBrZXkpO1xyXG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBpdGVtIGZyb20gc3RvcmFnZVxyXG4gICAgICogQHBhcmFtIGtleSBrZXkgbmFtZVxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBpdGVtIGlzIHJlbW92ZWRcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlSXRlbShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU3RvcmFnZUFjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbShCQVNFX0tFWSArIGtleSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXkvdmFsdWUgcGFpcnMsIGlmIHRoZXJlIGFyZSBhbnkuXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHN0b3JhZ2UgaXMgY2xlYXJlZFxyXG4gICAgICovXHJcbiAgICBjbGVhcigpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc1N0b3JhZ2VBY3RpdmUpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGUgPSB0aGlzLnN0b3JhZ2UubGVuZ3RoOyBpIDwgZTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnN0b3JhZ2Uua2V5KGkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSAmJiBrZXkuc3RhcnRzV2l0aChCQVNFX0tFWSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -2,8 +2,7 @@ import { Injectable } from '@angular/core';
|
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export class NgSimpleStateDevTool {
|
|
4
4
|
constructor(ngZone) {
|
|
5
|
-
|
|
6
|
-
this.globalDevtools = window['__REDUX_DEVTOOLS_EXTENSION__'] || window['devToolsExtension'];
|
|
5
|
+
this.globalDevtools = window.__REDUX_DEVTOOLS_EXTENSION__ || window.devToolsExtension;
|
|
7
6
|
this.isActiveDevtool = false;
|
|
8
7
|
this.instanceId = `ng-simple-state-${Date.now()}`;
|
|
9
8
|
this.baseState = {};
|
|
@@ -39,17 +38,17 @@ export class NgSimpleStateDevTool {
|
|
|
39
38
|
* @returns True if dev tool is enabled and action is send
|
|
40
39
|
*/
|
|
41
40
|
send(storeName, actionName, state) {
|
|
42
|
-
if (this.isActiveDevtool) {
|
|
41
|
+
if (this.isActiveDevtool && this.localDevTool) {
|
|
43
42
|
this.localDevTool.send(`${storeName}.${actionName}`, Object.assign(this.baseState, { [storeName]: state }), false, this.instanceId);
|
|
44
43
|
return true;
|
|
45
44
|
}
|
|
46
45
|
return false;
|
|
47
46
|
}
|
|
48
47
|
}
|
|
49
|
-
NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
50
|
-
NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
51
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
48
|
+
NgSimpleStateDevTool.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateDevTool, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
49
|
+
NgSimpleStateDevTool.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateDevTool, providedIn: 'root' });
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateDevTool, decorators: [{
|
|
52
51
|
type: Injectable,
|
|
53
52
|
args: [{ providedIn: 'root' }]
|
|
54
53
|
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLWRldi10b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctc2ltcGxlLXN0YXRlL3NyYy9saWIvbmctc2ltcGxlLXN0YXRlLWRldi10b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBb0JuRCxNQUFNLE9BQU8sb0JBQW9CO0lBUTdCLFlBQVksTUFBYztRQU5sQixtQkFBYyxHQUFhLE1BQU0sQ0FBQyw0QkFBNEIsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFFM0Ysb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsZUFBVSxHQUFHLG1CQUFtQixJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUM3QyxjQUFTLEdBQTJCLEVBQUUsQ0FBQztRQUczQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsMkVBQTJFO1lBQzNFLHFFQUFxRTtZQUNyRSw2RUFBNkU7WUFDN0UsbUVBQW1FO1lBQ25FLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7b0JBQzVDLElBQUksRUFBRSxlQUFlO29CQUNyQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7aUJBQzlCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUMzQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDMUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksQ0FBSSxTQUFpQixFQUFFLFVBQWtCLEVBQUUsS0FBUTtRQUNuRCxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBSSxHQUFHLFNBQVMsSUFBSSxVQUFVLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2SSxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs7aUhBaERRLG9CQUFvQjtxSEFBcEIsb0JBQW9CLGNBRFAsTUFBTTsyRkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuXHJcblxyXG5pbnRlcmZhY2UgRGV2dG9vbHNMb2NhbCB7XHJcbiAgICBpbml0OiAoc3RhdGU6IG9iamVjdCkgPT4gdm9pZDtcclxuICAgIHNlbmQ6IDxUPihhY3Rpb246IHN0cmluZywgc3RhdGU6IFJlY29yZDxzdHJpbmcsIFQ+LCBvcHRpb25zOiBhbnksIGluc3RhbmNlSWQ6IHN0cmluZykgPT4gdm9pZDtcclxufVxyXG5pbnRlcmZhY2UgRGV2dG9vbHMge1xyXG4gICAgY29ubmVjdChvcHRpb25zOiB7IG5hbWU6IHN0cmluZywgaW5zdGFuY2VJZDogc3RyaW5nIH0pOiBEZXZ0b29sc0xvY2FsO1xyXG59XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgICAgICBfX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fOiBEZXZ0b29scztcclxuICAgICAgICBkZXZUb29sc0V4dGVuc2lvbjogRGV2dG9vbHM7XHJcbiAgICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBOZ1NpbXBsZVN0YXRlRGV2VG9vbCB7XHJcblxyXG4gICAgcHJpdmF0ZSBnbG9iYWxEZXZ0b29sczogRGV2dG9vbHMgPSB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyB8fCB3aW5kb3cuZGV2VG9vbHNFeHRlbnNpb247XHJcbiAgICBwcml2YXRlIGxvY2FsRGV2VG9vbCE6IERldnRvb2xzTG9jYWw7XHJcbiAgICBwcml2YXRlIGlzQWN0aXZlRGV2dG9vbCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBpbnN0YW5jZUlkID0gYG5nLXNpbXBsZS1zdGF0ZS0ke0RhdGUubm93KCl9YDtcclxuICAgIHByaXZhdGUgYmFzZVN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XHJcblxyXG4gICAgY29uc3RydWN0b3Iobmdab25lOiBOZ1pvbmUpIHtcclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxEZXZ0b29scykge1xyXG4gICAgICAgICAgICAvLyBUaGUgYGNvbm5lY3RgIG1ldGhvZCBhZGRzIGBtZXNzYWdlYCBldmVudCBsaXN0ZW5lciBzaW5jZSBpdCBjb21tdW5pY2F0ZXNcclxuICAgICAgICAgICAgLy8gd2l0aCBhbiBleHRlbnNpb24gdGhyb3VnaCBgd2luZG93LnBvc3RNZXNzYWdlYCBhbmQgbWVzc2FnZSBldmVudHMuXHJcbiAgICAgICAgICAgIC8vIFdlIGhhbmRsZSBvbmx5IDIgZXZlbnRzOyB0aHVzLCB3ZSBkb24ndCB3YW50IHRvIHJ1biBtYW55IGNoYW5nZSBkZXRlY3Rpb25zXHJcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIGV4dGVuc2lvbiBzZW5kcyBldmVudHMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGhhbmRsZS5cclxuICAgICAgICAgICAgbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxEZXZUb29sID0gdGhpcy5nbG9iYWxEZXZ0b29scy5jb25uZWN0KHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnTmdTaW1wbGVTdGF0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VJZDogdGhpcy5pbnN0YW5jZUlkXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNBY3RpdmVEZXZ0b29sID0gISF0aGlzLmxvY2FsRGV2VG9vbDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQWN0aXZlRGV2dG9vbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxEZXZUb29sLmluaXQodGhpcy5iYXNlU3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBkZXYgdG9vbCBpcyBhY3R2aWNlXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIGRldiB0b29sIGlzIGFjdHZpY2VcclxuICAgICAqL1xyXG4gICAgaXNBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBY3RpdmVEZXZ0b29sO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZCB0byBkZXYgdG9vbCBhIG5ldyBzdGF0ZVxyXG4gICAgICogQHBhcmFtIHN0b3JlTmFtZSBUaGUgc3RvcmUgbmFtZVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIGFjdGlvbiBuYW1lXHJcbiAgICAgKiBAcGFyYW0gc3RhdGUgdGhlIHN0YXRlXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIGRldiB0b29sIGlzIGVuYWJsZWQgYW5kIGFjdGlvbiBpcyBzZW5kXHJcbiAgICAgKi9cclxuICAgIHNlbmQ8VD4oc3RvcmVOYW1lOiBzdHJpbmcsIGFjdGlvbk5hbWU6IHN0cmluZywgc3RhdGU6IFQpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZURldnRvb2wgJiYgdGhpcy5sb2NhbERldlRvb2wpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NhbERldlRvb2wuc2VuZDxUPihgJHtzdG9yZU5hbWV9LiR7YWN0aW9uTmFtZX1gLCBPYmplY3QuYXNzaWduKHRoaXMuYmFzZVN0YXRlLCB7IFtzdG9yZU5hbWVdOiBzdGF0ZSB9KSwgZmFsc2UsIHRoaXMuaW5zdGFuY2VJZCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -6,9 +6,9 @@ export class NgSimpleStateLocalStorage extends NgSimpleStateBrowserStorage {
|
|
|
6
6
|
super(localStorage);
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
-
NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
10
|
-
NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
11
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
9
|
+
NgSimpleStateLocalStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateLocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
10
|
+
NgSimpleStateLocalStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateLocalStorage, providedIn: 'root' });
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateLocalStorage, decorators: [{
|
|
12
12
|
type: Injectable,
|
|
13
13
|
args: [{ providedIn: 'root' }]
|
|
14
14
|
}], ctorParameters: function () { return []; } });
|
|
@@ -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,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLW1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNpbXBsZS1zdGF0ZS9zcmMvbGliL25nLXNpbXBsZS1zdGF0ZS1tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQW1CL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDcEQsd0JBQXdCLENBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIE5nU2ltcGxlU3RhdGUgY29uZmlnIG9wdGlvblxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBOZ1NpbXBsZVN0YXRlQ29uZmlnIHtcclxuICAgIGVuYWJsZURldlRvb2w/OiBib29sZWFuO1xyXG4gICAgZW5hYmxlTG9jYWxTdG9yYWdlPzogYm9vbGVhbjtcclxuICAgIHBlcnNpc3RlbnRTdG9yYWdlPzogJ3Nlc3Npb24nIHwgJ2xvY2FsJztcclxuICAgIGNvbXBhcmF0b3I/OiA8Sz4ocHJldmlvdXM6IEssIGN1cnJlbnQ6IEspID0+IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBOZ1NpbXBsZVN0YXRlIGNvbmZpZyBvcHRpb24gZm9yIHN0b3JlXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIE5nU2ltcGxlU3RhdGVTdG9yZUNvbmZpZyBleHRlbmRzIE5nU2ltcGxlU3RhdGVDb25maWcge1xyXG4gICAgc3RvcmVOYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBOZ1NpbXBsZVN0YXRlIGNvbmZpZyBJbmplY3Rpb25Ub2tlblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE5HX1NJTVBMRV9TVE9SRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48TmdTaW1wbGVTdGF0ZUNvbmZpZz4oXHJcbiAgICAnbmctc2ltcGxlLXN0YXRlLmNvbmZpZydcclxuKTtcclxuIl19
|
|
@@ -6,9 +6,9 @@ export class NgSimpleStateSessionStorage extends NgSimpleStateBrowserStorage {
|
|
|
6
6
|
super(sessionStorage);
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
-
NgSimpleStateSessionStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
10
|
-
NgSimpleStateSessionStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.
|
|
11
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
9
|
+
NgSimpleStateSessionStorage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateSessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
10
|
+
NgSimpleStateSessionStorage.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateSessionStorage, providedIn: 'root' });
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateSessionStorage, decorators: [{
|
|
12
12
|
type: Injectable,
|
|
13
13
|
args: [{ providedIn: 'root' }]
|
|
14
14
|
}], ctorParameters: function () { return []; } });
|
|
@@ -14,15 +14,10 @@ export class NgSimpleStateModule {
|
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.
|
|
18
|
-
NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.
|
|
19
|
-
NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.
|
|
21
|
-
type: NgModule
|
|
22
|
-
args: [{
|
|
23
|
-
declarations: [],
|
|
24
|
-
imports: [],
|
|
25
|
-
exports: [],
|
|
26
|
-
}]
|
|
17
|
+
NgSimpleStateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
18
|
+
NgSimpleStateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateModule });
|
|
19
|
+
NgSimpleStateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateModule });
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImport: i0, type: NgSimpleStateModule, decorators: [{
|
|
21
|
+
type: NgModule
|
|
27
22
|
}] });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctc2ltcGxlLXN0YXRlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNpbXBsZS1zdGF0ZS9zcmMvbGliL25nLXNpbXBsZS1zdGF0ZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUF1QixzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQUd2RixNQUFNLE9BQU8sbUJBQW1CO0lBQzVCLE1BQU0sQ0FBQyxPQUFPLENBQ1YsbUJBQXlDO1FBRXpDLE9BQU87WUFDSCxRQUFRLEVBQUUsbUJBQW1CO1lBQzdCLFNBQVMsRUFBRTtnQkFDUDtvQkFDSSxPQUFPLEVBQUUsc0JBQXNCO29CQUMvQixRQUFRLEVBQUUsbUJBQW1CO2lCQUNoQzthQUNKO1NBQ0osQ0FBQztJQUNOLENBQUM7O2dIQWJRLG1CQUFtQjtpSEFBbkIsbUJBQW1CO2lIQUFuQixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFEL0IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nU2ltcGxlU3RhdGVDb25maWcsIE5HX1NJTVBMRV9TVE9SRV9DT05GSUcgfSBmcm9tICcuL25nLXNpbXBsZS1zdGF0ZS1tb2RlbHMnO1xyXG5cclxuQE5nTW9kdWxlKClcclxuZXhwb3J0IGNsYXNzIE5nU2ltcGxlU3RhdGVNb2R1bGUge1xyXG4gICAgc3RhdGljIGZvclJvb3QoXHJcbiAgICAgICAgbmdIdHRwQ2FjaGluZ0NvbmZpZz86IE5nU2ltcGxlU3RhdGVDb25maWdcclxuICAgICk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TmdTaW1wbGVTdGF0ZU1vZHVsZT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5nTW9kdWxlOiBOZ1NpbXBsZVN0YXRlTW9kdWxlLFxyXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBOR19TSU1QTEVfU1RPUkVfQ09ORklHLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBuZ0h0dHBDYWNoaW5nQ29uZmlnLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|