@angular-architects/ngrx-toolkit 0.0.3 → 0.0.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 +219 -219
- package/esm2022/index.mjs +1 -1
- package/esm2022/lib/assertions/assertions.mjs +1 -1
- package/esm2022/lib/shared/empty.mjs +1 -1
- package/esm2022/lib/with-call-state.mjs +1 -1
- package/esm2022/lib/with-data-service.mjs +16 -2
- package/esm2022/lib/with-devtools.mjs +1 -1
- package/esm2022/lib/with-redux.mjs +1 -1
- package/esm2022/lib/with-undo-redo.mjs +1 -1
- package/fesm2022/angular-architects-ngrx-toolkit.mjs +15 -1
- package/fesm2022/angular-architects-ngrx-toolkit.mjs.map +1 -1
- package/lib/with-data-service.d.ts +5 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,220 +1,220 @@
|
|
|
1
|
-
# NgRx Toolkit
|
|
2
|
-
|
|
3
|
-
<p align="center">
|
|
4
|
-
<img src="https://raw.githubusercontent.com/angular-architects/ngrx-toolkit/main/logo.png" width="320" style="text-align: center">
|
|
5
|
-
</p>
|
|
6
|
-
|
|
7
|
-
NgRx Toolkit is an extension to the NgRx Signals Store. **It is still in beta** but already offers following features:
|
|
8
|
-
|
|
9
|
-
- Devtools: Integration into Redux Devtools
|
|
10
|
-
- Redux: Possibility to use the Redux Pattern (Reducer, Actions, Effects)
|
|
11
|
-
|
|
12
|
-
To install it, run
|
|
13
|
-
|
|
14
|
-
```shell
|
|
15
|
-
npm i @angular-architects/ngrx-toolkit
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Devtools: `withDevtools()`
|
|
19
|
-
|
|
20
|
-
This extension is very easy to use. Just add it to a `signalStore`. Example:
|
|
21
|
-
|
|
22
|
-
```typescript
|
|
23
|
-
export const FlightStore = signalStore(
|
|
24
|
-
{ providedIn: 'root' },
|
|
25
|
-
withDevtools('flights'), // <-- add this
|
|
26
|
-
withState({ flights: [] as Flight[] }),
|
|
27
|
-
// ...
|
|
28
|
-
);
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Redux: `withRedux()`
|
|
32
|
-
|
|
33
|
-
`withRedux()` bring back the Redux pattern into the Signal Store.
|
|
34
|
-
|
|
35
|
-
It can be combined with any other extension of the Signal Store.
|
|
36
|
-
|
|
37
|
-
Example:
|
|
38
|
-
|
|
39
|
-
```typescript
|
|
40
|
-
export const FlightStore = signalStore(
|
|
41
|
-
{ providedIn: 'root' },
|
|
42
|
-
withState({ flights: [] as Flight[] }),
|
|
43
|
-
withRedux({
|
|
44
|
-
actions: {
|
|
45
|
-
public: {
|
|
46
|
-
load: payload<{ from: string; to: string }>(),
|
|
47
|
-
},
|
|
48
|
-
private: {
|
|
49
|
-
loaded: payload<{ flights: Flight[] }>(),
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
reducer(actions, on) {
|
|
53
|
-
on(actions.loaded, ({ flights }, state) => {
|
|
54
|
-
patchState(state, 'flights loaded', { flights });
|
|
55
|
-
});
|
|
56
|
-
},
|
|
57
|
-
effects(actions, create) {
|
|
58
|
-
const httpClient = inject(HttpClient);
|
|
59
|
-
return {
|
|
60
|
-
load$: create(actions.load).pipe(
|
|
61
|
-
switchMap(({ from, to }) =>
|
|
62
|
-
httpClient.get<Flight[]>(
|
|
63
|
-
'https://demo.angulararchitects.io/api/flight',
|
|
64
|
-
{
|
|
65
|
-
params: new HttpParams().set('from', from).set('to', to),
|
|
66
|
-
},
|
|
67
|
-
),
|
|
68
|
-
),
|
|
69
|
-
tap((flights) => actions.loaded({ flights })),
|
|
70
|
-
),
|
|
71
|
-
};
|
|
72
|
-
},
|
|
73
|
-
}),
|
|
74
|
-
);
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## DataService `withDataService()`
|
|
78
|
-
|
|
79
|
-
`withDataService()` allows to connect a Data Service to the store:
|
|
80
|
-
|
|
81
|
-
This gives you a store for a CRUD use case:
|
|
82
|
-
|
|
83
|
-
```typescript
|
|
84
|
-
export const SimpleFlightBookingStore = signalStore(
|
|
85
|
-
{ providedIn: 'root' },
|
|
86
|
-
withCallState(),
|
|
87
|
-
withEntities<Flight>(),
|
|
88
|
-
withDataService({
|
|
89
|
-
dataServiceType: FlightService,
|
|
90
|
-
filter: { from: 'Paris', to: 'New York' },
|
|
91
|
-
}),
|
|
92
|
-
withUndoRedo(),
|
|
93
|
-
);
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
The features ``withCallState`` and ``withUndoRedo`` are optional, but when present, they enrich each other.
|
|
97
|
-
|
|
98
|
-
The Data Service needs to implement the ``DataService`` interface:
|
|
99
|
-
|
|
100
|
-
```typescript
|
|
101
|
-
@Injectable({
|
|
102
|
-
providedIn: 'root'
|
|
103
|
-
})
|
|
104
|
-
export class FlightService implements DataService<Flight, FlightFilter> {
|
|
105
|
-
loadById(id: EntityId): Promise<Flight> { ... }
|
|
106
|
-
load(filter: FlightFilter): Promise<Flight[]> { ... }
|
|
107
|
-
|
|
108
|
-
create(entity: Flight): Promise<Flight> { ... }
|
|
109
|
-
update(entity: Flight): Promise<Flight> { ... }
|
|
110
|
-
delete(entity: Flight): Promise<void> { ... }
|
|
111
|
-
[...]
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Once the store is defined, it gives its consumers numerous signals and methods they just need to delegate to:
|
|
116
|
-
|
|
117
|
-
```typescript
|
|
118
|
-
@Component(...)
|
|
119
|
-
export class FlightSearchSimpleComponent {
|
|
120
|
-
private store = inject(SimpleFlightBookingStore);
|
|
121
|
-
|
|
122
|
-
from = this.store.filter.from;
|
|
123
|
-
to = this.store.filter.to;
|
|
124
|
-
flights = this.store.entities;
|
|
125
|
-
selected = this.store.selectedEntities;
|
|
126
|
-
selectedIds = this.store.selectedIds;
|
|
127
|
-
|
|
128
|
-
loading = this.store.loading;
|
|
129
|
-
|
|
130
|
-
canUndo = this.store.canUndo;
|
|
131
|
-
canRedo = this.store.canRedo;
|
|
132
|
-
|
|
133
|
-
async search() {
|
|
134
|
-
this.store.load();
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
undo(): void {
|
|
138
|
-
this.store.undo();
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
redo(): void {
|
|
142
|
-
this.store.redo();
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
updateCriteria(from: string, to: string): void {
|
|
146
|
-
this.store.updateFilter({ from, to });
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
updateBasket(id: number, selected: boolean): void {
|
|
150
|
-
this.store.updateSelected(id, selected);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## DataService with Dynamic Properties
|
|
157
|
-
|
|
158
|
-
To avoid naming conflicts, the properties set up by ``withDataService`` and the connected features can be configured in a typesafe way:
|
|
159
|
-
|
|
160
|
-
```typescript
|
|
161
|
-
export const FlightBookingStore = signalStore(
|
|
162
|
-
{ providedIn: 'root' },
|
|
163
|
-
withCallState({
|
|
164
|
-
collection: 'flight'
|
|
165
|
-
}),
|
|
166
|
-
withEntities({
|
|
167
|
-
entity: type<Flight>(),
|
|
168
|
-
collection: 'flight'
|
|
169
|
-
}),
|
|
170
|
-
withDataService({
|
|
171
|
-
dataServiceType: FlightService,
|
|
172
|
-
filter: { from: 'Graz', to: 'Hamburg' },
|
|
173
|
-
collection: 'flight'
|
|
174
|
-
}),
|
|
175
|
-
withUndoRedo({
|
|
176
|
-
collections: ['flight'],
|
|
177
|
-
}),
|
|
178
|
-
);
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
This setup makes them use ``flight`` as part of the used property names. As these implementations respect the Type Script type system, the compiler will make sure these properties are used in a typesafe way:
|
|
182
|
-
|
|
183
|
-
```typescript
|
|
184
|
-
@Component(...)
|
|
185
|
-
export class FlightSearchDynamicComponent {
|
|
186
|
-
private store = inject(FlightBookingStore);
|
|
187
|
-
|
|
188
|
-
from = this.store.flightFilter.from;
|
|
189
|
-
to = this.store.flightFilter.to;
|
|
190
|
-
flights = this.store.flightEntities;
|
|
191
|
-
selected = this.store.selectedFlightEntities;
|
|
192
|
-
selectedIds = this.store.selectedFlightIds;
|
|
193
|
-
|
|
194
|
-
loading = this.store.flightLoading;
|
|
195
|
-
|
|
196
|
-
canUndo = this.store.canUndo;
|
|
197
|
-
canRedo = this.store.canRedo;
|
|
198
|
-
|
|
199
|
-
async search() {
|
|
200
|
-
this.store.loadFlightEntities();
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
undo(): void {
|
|
204
|
-
this.store.undo();
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
redo(): void {
|
|
208
|
-
this.store.redo();
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
updateCriteria(from: string, to: string): void {
|
|
212
|
-
this.store.updateFlightFilter({ from, to });
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
updateBasket(id: number, selected: boolean): void {
|
|
216
|
-
this.store.updateSelectedFlightEntities(id, selected);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
}
|
|
1
|
+
# NgRx Toolkit
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="https://raw.githubusercontent.com/angular-architects/ngrx-toolkit/main/logo.png" width="320" style="text-align: center">
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
NgRx Toolkit is an extension to the NgRx Signals Store. **It is still in beta** but already offers following features:
|
|
8
|
+
|
|
9
|
+
- Devtools: Integration into Redux Devtools
|
|
10
|
+
- Redux: Possibility to use the Redux Pattern (Reducer, Actions, Effects)
|
|
11
|
+
|
|
12
|
+
To install it, run
|
|
13
|
+
|
|
14
|
+
```shell
|
|
15
|
+
npm i @angular-architects/ngrx-toolkit
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Devtools: `withDevtools()`
|
|
19
|
+
|
|
20
|
+
This extension is very easy to use. Just add it to a `signalStore`. Example:
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
export const FlightStore = signalStore(
|
|
24
|
+
{ providedIn: 'root' },
|
|
25
|
+
withDevtools('flights'), // <-- add this
|
|
26
|
+
withState({ flights: [] as Flight[] }),
|
|
27
|
+
// ...
|
|
28
|
+
);
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Redux: `withRedux()`
|
|
32
|
+
|
|
33
|
+
`withRedux()` bring back the Redux pattern into the Signal Store.
|
|
34
|
+
|
|
35
|
+
It can be combined with any other extension of the Signal Store.
|
|
36
|
+
|
|
37
|
+
Example:
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
export const FlightStore = signalStore(
|
|
41
|
+
{ providedIn: 'root' },
|
|
42
|
+
withState({ flights: [] as Flight[] }),
|
|
43
|
+
withRedux({
|
|
44
|
+
actions: {
|
|
45
|
+
public: {
|
|
46
|
+
load: payload<{ from: string; to: string }>(),
|
|
47
|
+
},
|
|
48
|
+
private: {
|
|
49
|
+
loaded: payload<{ flights: Flight[] }>(),
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
reducer(actions, on) {
|
|
53
|
+
on(actions.loaded, ({ flights }, state) => {
|
|
54
|
+
patchState(state, 'flights loaded', { flights });
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
effects(actions, create) {
|
|
58
|
+
const httpClient = inject(HttpClient);
|
|
59
|
+
return {
|
|
60
|
+
load$: create(actions.load).pipe(
|
|
61
|
+
switchMap(({ from, to }) =>
|
|
62
|
+
httpClient.get<Flight[]>(
|
|
63
|
+
'https://demo.angulararchitects.io/api/flight',
|
|
64
|
+
{
|
|
65
|
+
params: new HttpParams().set('from', from).set('to', to),
|
|
66
|
+
},
|
|
67
|
+
),
|
|
68
|
+
),
|
|
69
|
+
tap((flights) => actions.loaded({ flights })),
|
|
70
|
+
),
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
}),
|
|
74
|
+
);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## DataService `withDataService()`
|
|
78
|
+
|
|
79
|
+
`withDataService()` allows to connect a Data Service to the store:
|
|
80
|
+
|
|
81
|
+
This gives you a store for a CRUD use case:
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
export const SimpleFlightBookingStore = signalStore(
|
|
85
|
+
{ providedIn: 'root' },
|
|
86
|
+
withCallState(),
|
|
87
|
+
withEntities<Flight>(),
|
|
88
|
+
withDataService({
|
|
89
|
+
dataServiceType: FlightService,
|
|
90
|
+
filter: { from: 'Paris', to: 'New York' },
|
|
91
|
+
}),
|
|
92
|
+
withUndoRedo(),
|
|
93
|
+
);
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The features ``withCallState`` and ``withUndoRedo`` are optional, but when present, they enrich each other.
|
|
97
|
+
|
|
98
|
+
The Data Service needs to implement the ``DataService`` interface:
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
@Injectable({
|
|
102
|
+
providedIn: 'root'
|
|
103
|
+
})
|
|
104
|
+
export class FlightService implements DataService<Flight, FlightFilter> {
|
|
105
|
+
loadById(id: EntityId): Promise<Flight> { ... }
|
|
106
|
+
load(filter: FlightFilter): Promise<Flight[]> { ... }
|
|
107
|
+
|
|
108
|
+
create(entity: Flight): Promise<Flight> { ... }
|
|
109
|
+
update(entity: Flight): Promise<Flight> { ... }
|
|
110
|
+
delete(entity: Flight): Promise<void> { ... }
|
|
111
|
+
[...]
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Once the store is defined, it gives its consumers numerous signals and methods they just need to delegate to:
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
@Component(...)
|
|
119
|
+
export class FlightSearchSimpleComponent {
|
|
120
|
+
private store = inject(SimpleFlightBookingStore);
|
|
121
|
+
|
|
122
|
+
from = this.store.filter.from;
|
|
123
|
+
to = this.store.filter.to;
|
|
124
|
+
flights = this.store.entities;
|
|
125
|
+
selected = this.store.selectedEntities;
|
|
126
|
+
selectedIds = this.store.selectedIds;
|
|
127
|
+
|
|
128
|
+
loading = this.store.loading;
|
|
129
|
+
|
|
130
|
+
canUndo = this.store.canUndo;
|
|
131
|
+
canRedo = this.store.canRedo;
|
|
132
|
+
|
|
133
|
+
async search() {
|
|
134
|
+
this.store.load();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
undo(): void {
|
|
138
|
+
this.store.undo();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
redo(): void {
|
|
142
|
+
this.store.redo();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
updateCriteria(from: string, to: string): void {
|
|
146
|
+
this.store.updateFilter({ from, to });
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
updateBasket(id: number, selected: boolean): void {
|
|
150
|
+
this.store.updateSelected(id, selected);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## DataService with Dynamic Properties
|
|
157
|
+
|
|
158
|
+
To avoid naming conflicts, the properties set up by ``withDataService`` and the connected features can be configured in a typesafe way:
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
export const FlightBookingStore = signalStore(
|
|
162
|
+
{ providedIn: 'root' },
|
|
163
|
+
withCallState({
|
|
164
|
+
collection: 'flight'
|
|
165
|
+
}),
|
|
166
|
+
withEntities({
|
|
167
|
+
entity: type<Flight>(),
|
|
168
|
+
collection: 'flight'
|
|
169
|
+
}),
|
|
170
|
+
withDataService({
|
|
171
|
+
dataServiceType: FlightService,
|
|
172
|
+
filter: { from: 'Graz', to: 'Hamburg' },
|
|
173
|
+
collection: 'flight'
|
|
174
|
+
}),
|
|
175
|
+
withUndoRedo({
|
|
176
|
+
collections: ['flight'],
|
|
177
|
+
}),
|
|
178
|
+
);
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
This setup makes them use ``flight`` as part of the used property names. As these implementations respect the Type Script type system, the compiler will make sure these properties are used in a typesafe way:
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
@Component(...)
|
|
185
|
+
export class FlightSearchDynamicComponent {
|
|
186
|
+
private store = inject(FlightBookingStore);
|
|
187
|
+
|
|
188
|
+
from = this.store.flightFilter.from;
|
|
189
|
+
to = this.store.flightFilter.to;
|
|
190
|
+
flights = this.store.flightEntities;
|
|
191
|
+
selected = this.store.selectedFlightEntities;
|
|
192
|
+
selectedIds = this.store.selectedFlightIds;
|
|
193
|
+
|
|
194
|
+
loading = this.store.flightLoading;
|
|
195
|
+
|
|
196
|
+
canUndo = this.store.canUndo;
|
|
197
|
+
canRedo = this.store.canRedo;
|
|
198
|
+
|
|
199
|
+
async search() {
|
|
200
|
+
this.store.loadFlightEntities();
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
undo(): void {
|
|
204
|
+
this.store.undo();
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
redo(): void {
|
|
208
|
+
this.store.redo();
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
updateCriteria(from: string, to: string): void {
|
|
212
|
+
this.store.updateFlightFilter({ from, to });
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
updateBasket(id: number, selected: boolean): void {
|
|
216
|
+
this.store.updateSelectedFlightEntities(id, selected);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
}
|
|
220
220
|
```
|
package/esm2022/index.mjs
CHANGED
|
@@ -3,4 +3,4 @@ export * from './lib/with-redux';
|
|
|
3
3
|
export * from './lib/with-call-state';
|
|
4
4
|
export * from './lib/with-undo-redo';
|
|
5
5
|
export * from './lib/with-data-service';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgd2l0aERldnRvb2xzLCBwYXRjaFN0YXRlLCBBY3Rpb24gfSBmcm9tICcuL2xpYi93aXRoLWRldnRvb2xzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpdGgtcmVkdXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvd2l0aC1jYWxsLXN0YXRlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpdGgtdW5kby1yZWRvJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpdGgtZGF0YS1zZXJ2aWNlJztcbiJdfQ==
|
|
@@ -3,4 +3,4 @@ export function assertActionFnSpecs(obj) {
|
|
|
3
3
|
throw new Error('%o is not an Action Specification');
|
|
4
4
|
}
|
|
5
5
|
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvYXNzZXJ0aW9ucy9hc3NlcnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBWTtJQUVaLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztLQUN0RDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25zRm5TcGVjcyB9IGZyb20gJy4uL3dpdGgtcmVkdXgnO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QWN0aW9uRm5TcGVjcyhcbiAgb2JqOiB1bmtub3duXG4pOiBhc3NlcnRzIG9iaiBpcyBBY3Rpb25zRm5TcGVjcyB7XG4gIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCclbyBpcyBub3QgYW4gQWN0aW9uIFNwZWNpZmljYXRpb24nKTtcbiAgfVxufVxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9lbXB0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbmV4cG9ydCB0eXBlIEVtdHB5ID0ge307Il19
|
|
@@ -55,4 +55,4 @@ export function setError(error, prop) {
|
|
|
55
55
|
return { callState: { error: errorMessage } };
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jYWxsLXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi93aXRoLWNhbGwtc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUEyQnZCLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFnQztJQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsVUFBVSxDQUFDO0lBQ2hDLE9BQU87UUFDTCxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVztRQUNuRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM1RCxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUN6RCxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTztLQUN2RCxDQUFDO0FBQ0osQ0FBQztBQW9CRCxNQUFNLFVBQVUsYUFBYSxDQUE0QixNQUV4RDtJQUNDLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FDckQsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0IsT0FBTyxrQkFBa0IsQ0FDdkIsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUNyQyxZQUFZLENBQUMsQ0FBQyxLQUFzQyxFQUFFLEVBQUU7UUFFdEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBc0IsQ0FBQztRQUUzRCxPQUFPO1lBQ0wsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssU0FBUyxDQUFDO1lBQ3ZELENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLFFBQVEsQ0FBQztZQUNyRCxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hCLE1BQU0sQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDO2dCQUN0QixPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2hELENBQUMsQ0FBQztTQUNILENBQUE7SUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQ3hCLElBQVc7SUFFWCxJQUFJLElBQUksRUFBRTtRQUNSLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxTQUFTLEVBQStCLENBQUM7S0FDekU7SUFFRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUN2QixJQUFXO0lBR1gsSUFBSSxJQUFJLEVBQUU7UUFDUixPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUErQixDQUFDO0tBQ3hFO1NBQ0k7UUFDSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0tBRWhDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQ3RCLEtBQWMsRUFDZCxJQUFXO0lBR1QsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBRXRCLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixZQUFZLEdBQUcsRUFBRSxDQUFDO0tBQ25CO1NBQ0ksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksU0FBUyxJQUFJLEtBQUssRUFBRTtRQUN4RCxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN0QztTQUNJO1FBQ0gsWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM5QjtJQUdELElBQUksSUFBSSxFQUFFO1FBQ1IsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUErQixDQUFDO0tBQ3ZGO1NBQ0k7UUFDSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUM7S0FDL0M7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2lnbmFsU3RvcmVGZWF0dXJlLFxuICBzaWduYWxTdG9yZUZlYXR1cmUsXG4gIHdpdGhDb21wdXRlZCxcbiAgd2l0aFN0YXRlLFxufSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IEVtdHB5IH0gZnJvbSAnLi9zaGFyZWQvZW1wdHknO1xuXG5leHBvcnQgdHlwZSBDYWxsU3RhdGUgPSAnaW5pdCcgfCAnbG9hZGluZycgfCAnbG9hZGVkJyB8IHsgZXJyb3I6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBOYW1lZENhbGxTdGF0ZVNsaWNlPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+ID0ge1xuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0t9Q2FsbFN0YXRlYF06IENhbGxTdGF0ZTtcbn07XG5cbmV4cG9ydCB0eXBlIENhbGxTdGF0ZVNsaWNlID0ge1xuICBjYWxsU3RhdGU6IENhbGxTdGF0ZVxufVxuXG5leHBvcnQgdHlwZSBOYW1lZENhbGxTdGF0ZVNpZ25hbHM8UHJvcCBleHRlbmRzIHN0cmluZz4gPSB7XG4gIFtLIGluIFByb3AgYXMgYCR7S31Mb2FkaW5nYF06IFNpZ25hbDxib29sZWFuPjtcbn0gJiB7XG4gICAgW0sgaW4gUHJvcCBhcyBgJHtLfUxvYWRlZGBdOiBTaWduYWw8Ym9vbGVhbj47XG4gIH0gJiB7XG4gICAgW0sgaW4gUHJvcCBhcyBgJHtLfUVycm9yYF06IFNpZ25hbDxzdHJpbmcgfCBudWxsPjtcbiAgfSBcblxuZXhwb3J0IHR5cGUgQ2FsbFN0YXRlU2lnbmFscyA9IHtcbiAgbG9hZGluZzogU2lnbmFsPGJvb2xlYW4+O1xuICBsb2FkZWQ6IFNpZ25hbDxib29sZWFuPjtcbiAgZXJyb3I6IFNpZ25hbDxzdHJpbmcgfCBudWxsPlxufSBcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhbGxTdGF0ZUtleXMoY29uZmlnPzogeyBjb2xsZWN0aW9uPzogc3RyaW5nIH0pIHtcbiAgY29uc3QgcHJvcCA9IGNvbmZpZz8uY29sbGVjdGlvbjtcbiAgcmV0dXJuIHtcbiAgICBjYWxsU3RhdGVLZXk6IHByb3AgPyAgYCR7Y29uZmlnLmNvbGxlY3Rpb259Q2FsbFN0YXRlYCA6ICdjYWxsU3RhdGUnLFxuICAgIGxvYWRpbmdLZXk6IHByb3AgPyBgJHtjb25maWcuY29sbGVjdGlvbn1Mb2FkaW5nYCA6ICdsb2FkaW5nJyxcbiAgICBsb2FkZWRLZXk6IHByb3AgPyBgJHtjb25maWcuY29sbGVjdGlvbn1Mb2FkZWRgIDogJ2xvYWRlZCcsXG4gICAgZXJyb3JLZXk6IHByb3AgPyBgJHtjb25maWcuY29sbGVjdGlvbn1FcnJvcmAgOiAnZXJyb3InLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aENhbGxTdGF0ZTxDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihjb25maWc6IHtcbiAgY29sbGVjdGlvbjogQ29sbGVjdGlvbjtcbn0pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gIHsgc3RhdGU6IEVtdHB5LCBzaWduYWxzOiBFbXRweSwgbWV0aG9kczogRW10cHkgfSxcbiAge1xuICAgIHN0YXRlOiBOYW1lZENhbGxTdGF0ZVNsaWNlPENvbGxlY3Rpb24+LFxuICAgIHNpZ25hbHM6IE5hbWVkQ2FsbFN0YXRlU2lnbmFsczxDb2xsZWN0aW9uPixcbiAgICBtZXRob2RzOiBFbXRweVxuICB9XG4+O1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDYWxsU3RhdGUoKTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICB7IHN0YXRlOiBFbXRweSwgc2lnbmFsczogRW10cHksIG1ldGhvZHM6IEVtdHB5IH0sXG4gIHtcbiAgICBzdGF0ZTogQ2FsbFN0YXRlU2xpY2UsXG4gICAgc2lnbmFsczogQ2FsbFN0YXRlU2lnbmFscyxcbiAgICBtZXRob2RzOiBFbXRweVxuICB9XG4+O1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDYWxsU3RhdGU8Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4oY29uZmlnPzoge1xuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xufSk6IFNpZ25hbFN0b3JlRmVhdHVyZSB7XG4gIGNvbnN0IHsgY2FsbFN0YXRlS2V5LCBlcnJvcktleSwgbG9hZGVkS2V5LCBsb2FkaW5nS2V5IH0gPVxuICAgIGdldENhbGxTdGF0ZUtleXMoY29uZmlnKTtcblxuICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuICAgIHdpdGhTdGF0ZSh7IFtjYWxsU3RhdGVLZXldOiAnaW5pdCcgfSksXG4gICAgd2l0aENvbXB1dGVkKChzdGF0ZTogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PikgPT4ge1xuXG4gICAgICBjb25zdCBjYWxsU3RhdGUgPSBzdGF0ZVtjYWxsU3RhdGVLZXldIGFzIFNpZ25hbDxDYWxsU3RhdGU+O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbbG9hZGluZ0tleV06IGNvbXB1dGVkKCgpID0+IGNhbGxTdGF0ZSgpID09PSAnbG9hZGluZycpLFxuICAgICAgICBbbG9hZGVkS2V5XTogY29tcHV0ZWQoKCkgPT4gY2FsbFN0YXRlKCkgPT09ICdsb2FkZWQnKSxcbiAgICAgICAgW2Vycm9yS2V5XTogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHYgPSBjYWxsU3RhdGUoKTtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnID8gdi5lcnJvciA6IG51bGw7XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExvYWRpbmc8UHJvcCBleHRlbmRzIHN0cmluZz4oXG4gIHByb3A/OiBQcm9wXG4pOiBOYW1lZENhbGxTdGF0ZVNsaWNlPFByb3A+IHwgQ2FsbFN0YXRlU2xpY2Uge1xuICBpZiAocHJvcCkge1xuICAgIHJldHVybiB7IFtgJHtwcm9wfUNhbGxTdGF0ZWBdOiAnbG9hZGluZycgfSBhcyBOYW1lZENhbGxTdGF0ZVNsaWNlPFByb3A+O1xuICB9XG5cbiAgcmV0dXJuIHsgY2FsbFN0YXRlOiAnbG9hZGluZycgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldExvYWRlZDxQcm9wIGV4dGVuZHMgc3RyaW5nPihcbiAgcHJvcD86IFByb3Bcbik6IE5hbWVkQ2FsbFN0YXRlU2xpY2U8UHJvcD4gfCBDYWxsU3RhdGVTbGljZSB7XG5cbiAgaWYgKHByb3ApIHtcbiAgICByZXR1cm4geyBbYCR7cHJvcH1DYWxsU3RhdGVgXTogJ2xvYWRlZCcgfSBhcyBOYW1lZENhbGxTdGF0ZVNsaWNlPFByb3A+O1xuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiB7IGNhbGxTdGF0ZTogJ2xvYWRlZCcgfTtcblxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcjxQcm9wIGV4dGVuZHMgc3RyaW5nPihcbiAgZXJyb3I6IHVua25vd24sXG4gIHByb3A/OiBQcm9wLFxuICApOiBOYW1lZENhbGxTdGF0ZVNsaWNlPFByb3A+IHwgQ2FsbFN0YXRlU2xpY2Uge1xuXG4gICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuXG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgJ21lc3NhZ2UnIGluIGVycm9yKSB7XG4gICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKGVycm9yKTtcbiAgICB9XG4gICAgXG5cbiAgICBpZiAocHJvcCkge1xuICAgICAgcmV0dXJuIHsgW2Ake3Byb3B9Q2FsbFN0YXRlYF06IHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9IH0gYXMgTmFtZWRDYWxsU3RhdGVTbGljZTxQcm9wPjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4geyBjYWxsU3RhdGU6IHsgZXJyb3I6IGVycm9yTWVzc2FnZSB9IH07XG4gICAgfVxufVxuIl19
|
|
@@ -17,6 +17,7 @@ export function getDataServiceKeys(options) {
|
|
|
17
17
|
const setCurrentKey = options.collection ? `setCurrent${capitalize(options.collection)}` : 'setCurrent';
|
|
18
18
|
const createKey = options.collection ? `create${capitalize(options.collection)}` : 'create';
|
|
19
19
|
const updateKey = options.collection ? `update${capitalize(options.collection)}` : 'update';
|
|
20
|
+
const updateAllKey = options.collection ? `updateAll${capitalize(options.collection)}` : 'updateAll';
|
|
20
21
|
const deleteKey = options.collection ? `delete${capitalize(options.collection)}` : 'delete';
|
|
21
22
|
// TODO: Take these from @ngrx/signals/entities, when they are exported
|
|
22
23
|
const entitiesKey = options.collection ? `${options.collection}Entities` : 'entities';
|
|
@@ -37,13 +38,14 @@ export function getDataServiceKeys(options) {
|
|
|
37
38
|
setCurrentKey,
|
|
38
39
|
createKey,
|
|
39
40
|
updateKey,
|
|
41
|
+
updateAllKey,
|
|
40
42
|
deleteKey
|
|
41
43
|
};
|
|
42
44
|
}
|
|
43
45
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
46
|
export function withDataService(options) {
|
|
45
47
|
const { dataServiceType, filter, collection: prefix } = options;
|
|
46
|
-
const { entitiesKey, filterKey, loadKey, selectedEntitiesKey, selectedIdsKey, updateFilterKey, updateSelectedKey, currentKey, createKey, updateKey, deleteKey, loadByIdKey, setCurrentKey } = getDataServiceKeys(options);
|
|
48
|
+
const { entitiesKey, filterKey, loadKey, selectedEntitiesKey, selectedIdsKey, updateFilterKey, updateSelectedKey, currentKey, createKey, updateKey, updateAllKey, deleteKey, loadByIdKey, setCurrentKey } = getDataServiceKeys(options);
|
|
47
49
|
const { callStateKey } = getCallStateKeys({ collection: prefix });
|
|
48
50
|
return signalStoreFeature(withState(() => ({
|
|
49
51
|
[filterKey]: filter,
|
|
@@ -127,6 +129,18 @@ export function withDataService(options) {
|
|
|
127
129
|
throw e;
|
|
128
130
|
}
|
|
129
131
|
},
|
|
132
|
+
[updateAllKey]: async (entities) => {
|
|
133
|
+
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
134
|
+
try {
|
|
135
|
+
const result = await dataService.updateAll(entities);
|
|
136
|
+
patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));
|
|
137
|
+
store[callStateKey] && patchState(store, setLoaded(prefix));
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
store[callStateKey] && patchState(store, setError(e, prefix));
|
|
141
|
+
throw e;
|
|
142
|
+
}
|
|
143
|
+
},
|
|
130
144
|
[deleteKey]: async (entity) => {
|
|
131
145
|
patchState(store, { [currentKey]: entity });
|
|
132
146
|
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
@@ -144,4 +158,4 @@ export function withDataService(options) {
|
|
|
144
158
|
};
|
|
145
159
|
}));
|
|
146
160
|
}
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kYXRhLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtZGF0YS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBeUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQXNCLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SCxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsY0FBYyxFQUFZLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFnQnpHLE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBVztJQUNsQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQWdDO0lBQy9ELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDaEYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUMzRyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxVQUFVLENB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QUFZLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUMvRDtnQkFDRCxPQUFPLENBQUMsRUFBRTtvQkFDTixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQzlELE1BQU0sQ0FBQyxDQUFDO2lCQUNYO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDLENBQUMsQ0FDTCxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyVG9rZW4sIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNpZ25hbFN0b3JlRmVhdHVyZSwgcGF0Y2hTdGF0ZSwgc2lnbmFsU3RvcmVGZWF0dXJlLCB3aXRoQ29tcHV0ZWQsIHdpdGhNZXRob2RzLCB3aXRoU3RhdGUgfSBmcm9tIFwiQG5ncngvc2lnbmFsc1wiO1xyXG5pbXBvcnQgeyBDYWxsU3RhdGUsIGdldENhbGxTdGF0ZUtleXMsIHNldEVycm9yLCBzZXRMb2FkZWQsIHNldExvYWRpbmcgfSBmcm9tIFwiLi93aXRoLWNhbGwtc3RhdGVcIjtcclxuaW1wb3J0IHsgc2V0QWxsRW50aXRpZXMsIEVudGl0eUlkLCBhZGRFbnRpdHksIHVwZGF0ZUVudGl0eSwgcmVtb3ZlRW50aXR5IH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHMvZW50aXRpZXNcIjtcclxuaW1wb3J0IHsgRW50aXR5U3RhdGUsIE5hbWVkRW50aXR5U2lnbmFscyB9IGZyb20gXCJAbmdyeC9zaWduYWxzL2VudGl0aWVzL3NyYy9tb2RlbHNcIjtcclxuaW1wb3J0IHsgU3RhdGVTaWduYWwgfSBmcm9tIFwiQG5ncngvc2lnbmFscy9zcmMvc3RhdGUtc2lnbmFsXCI7XHJcbmltcG9ydCB7IEVtdHB5IH0gZnJvbSBcIi4vc2hhcmVkL2VtcHR5XCI7XHJcblxyXG5leHBvcnQgdHlwZSBGaWx0ZXIgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuZXhwb3J0IHR5cGUgRW50aXR5ID0geyBpZDogRW50aXR5SWQgfTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNlcnZpY2U8RSBleHRlbmRzIEVudGl0eSwgRiBleHRlbmRzIEZpbHRlcj4ge1xyXG4gICAgbG9hZChmaWx0ZXI6IEYpOiBQcm9taXNlPEVbXT47XHJcbiAgICBsb2FkQnlJZChpZDogRW50aXR5SWQpOiBQcm9taXNlPEU+O1xyXG4gICAgY3JlYXRlKGVudGl0eTogRSk6IFByb21pc2U8RT47XHJcbiAgICB1cGRhdGUoZW50aXR5OiBFKTogUHJvbWlzZTxFPjtcclxuICAgIGRlbGV0ZShlbnRpdHk6IEUpOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3RyID8gc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpIDogc3RyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YVNlcnZpY2VLZXlzKG9wdGlvbnM6IHsgY29sbGVjdGlvbj86IHN0cmluZyB9KSB7XHJcbiAgICBjb25zdCBmaWx0ZXJLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259RmlsdGVyYCA6ICdmaWx0ZXInO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJZHNLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgc2VsZWN0ZWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1JZHNgIDogJ3NlbGVjdGVkSWRzJztcclxuICAgIGNvbnN0IHNlbGVjdGVkRW50aXRpZXNLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgc2VsZWN0ZWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1FbnRpdGllc2AgOiAnc2VsZWN0ZWRFbnRpdGllcyc7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlRmlsdGVyS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYHVwZGF0ZSR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUZpbHRlcmAgOiAndXBkYXRlRmlsdGVyJztcclxuICAgIGNvbnN0IHVwZGF0ZVNlbGVjdGVkS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYHVwZGF0ZVNlbGVjdGVkJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9RW50aXRpZXNgIDogJ3VwZGF0ZVNlbGVjdGVkJztcclxuICAgIGNvbnN0IGxvYWRLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgbG9hZCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUVudGl0aWVzYCA6ICdsb2FkJztcclxuXHJcbiAgICBjb25zdCBjdXJyZW50S2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYGN1cnJlbnQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gIDogJ2N1cnJlbnQnO1xyXG4gICAgY29uc3QgbG9hZEJ5SWRLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgbG9hZCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUJ5SWRgIDogJ2xvYWRCeUlkJztcclxuICAgIGNvbnN0IHNldEN1cnJlbnRLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgc2V0Q3VycmVudCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfWAgOiAnc2V0Q3VycmVudCc7XHJcbiAgICBjb25zdCBjcmVhdGVLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgY3JlYXRlJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YCA6ICdjcmVhdGUnO1xyXG4gICAgY29uc3QgdXBkYXRlS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYHVwZGF0ZSR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfWAgOiAndXBkYXRlJztcclxuICAgIGNvbnN0IGRlbGV0ZUtleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGBkZWxldGUke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gIDogJ2RlbGV0ZSc7XHJcblxyXG4gICAgLy8gVE9ETzogVGFrZSB0aGVzZSBmcm9tIEBuZ3J4L3NpZ25hbHMvZW50aXRpZXMsIHdoZW4gdGhleSBhcmUgZXhwb3J0ZWRcclxuICAgIGNvbnN0IGVudGl0aWVzS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUVudGl0aWVzYCA6ICdlbnRpdGllcyc7XHJcbiAgICBjb25zdCBlbnRpdHlNYXBLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259RW50aXR5TWFwYCA6ICdlbnRpdHlNYXAnO1xyXG4gICAgY29uc3QgaWRzS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUlkc2AgOiAnaWRzJztcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpbHRlcktleSxcclxuICAgICAgICBzZWxlY3RlZElkc0tleSxcclxuICAgICAgICBzZWxlY3RlZEVudGl0aWVzS2V5LFxyXG4gICAgICAgIHVwZGF0ZUZpbHRlcktleSxcclxuICAgICAgICB1cGRhdGVTZWxlY3RlZEtleSxcclxuICAgICAgICBsb2FkS2V5LFxyXG4gICAgICAgIGVudGl0aWVzS2V5LFxyXG4gICAgICAgIGVudGl0eU1hcEtleSxcclxuICAgICAgICBpZHNLZXksXHJcblxyXG4gICAgICAgIGN1cnJlbnRLZXksXHJcbiAgICAgICAgbG9hZEJ5SWRLZXksXHJcbiAgICAgICAgc2V0Q3VycmVudEtleSxcclxuICAgICAgICBjcmVhdGVLZXksXHJcbiAgICAgICAgdXBkYXRlS2V5LFxyXG4gICAgICAgIGRlbGV0ZUtleVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgTmFtZWREYXRhU2VydmljZVN0YXRlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+ID1cclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0t9RmlsdGVyYF06IEY7XHJcbiAgICB9ICYge1xyXG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYHNlbGVjdGVkJHtDYXBpdGFsaXplPEs+fUlkc2BdOiBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+O1xyXG4gICAgfSAmIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBjdXJyZW50JHtDYXBpdGFsaXplPEs+fWBdOiBFO1xyXG4gICAgfVxyXG5cclxuZXhwb3J0IHR5cGUgRGF0YVNlcnZpY2VTdGF0ZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPiA9IHtcclxuICAgIGZpbHRlcjogRjtcclxuICAgIHNlbGVjdGVkSWRzOiBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+O1xyXG4gICAgY3VycmVudDogRTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgTmFtZWREYXRhU2VydmljZVNpZ25hbHM8RSBleHRlbmRzIEVudGl0eSwgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPVxyXG4gICAge1xyXG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYHNlbGVjdGVkJHtDYXBpdGFsaXplPEs+fUVudGl0aWVzYF06IFNpZ25hbDxFW10+O1xyXG4gICAgfVxyXG5cclxuZXhwb3J0IHR5cGUgRGF0YVNlcnZpY2VTaWduYWxzPEUgZXh0ZW5kcyBFbnRpdHk+ID1cclxuICAgIHtcclxuICAgICAgICBzZWxlY3RlZEVudGl0aWVzOiBTaWduYWw8RVtdPjtcclxuICAgIH1cclxuXHJcbmV4cG9ydCB0eXBlIE5hbWVkRGF0YVNlcnZpY2VNZXRob2RzPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+ID1cclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGUke0NhcGl0YWxpemU8Sz59RmlsdGVyYF06IChmaWx0ZXI6IEYpID0+IHZvaWQ7XHJcbiAgICB9ICZcclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGVTZWxlY3RlZCR7Q2FwaXRhbGl6ZTxLPn1FbnRpdGllc2BdOiAoaWQ6IEVudGl0eUlkLCBzZWxlY3RlZDogYm9vbGVhbikgPT4gdm9pZDtcclxuICAgIH0gJlxyXG4gICAge1xyXG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYGxvYWQke0NhcGl0YWxpemU8Sz59RW50aXRpZXNgXTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcclxuICAgIH0gJlxyXG5cclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBzZXRDdXJyZW50JHtDYXBpdGFsaXplPEs+fWBdOiAoZW50aXR5OiBFKSA9PiB2b2lkO1xyXG4gICAgfSAmXHJcbiAgICB7XHJcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgbG9hZCR7Q2FwaXRhbGl6ZTxLPn1CeUlkYF06IChpZDogRW50aXR5SWQpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9ICZcclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBjcmVhdGUke0NhcGl0YWxpemU8Sz59YF06IChlbnRpdHk6IEUpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9ICZcclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGUke0NhcGl0YWxpemU8Sz59YF06IChlbnRpdHk6IEUpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9ICZcclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBkZWxldGUke0NhcGl0YWxpemU8Sz59YF06IChlbnRpdHk6IEUpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9O1xyXG5cclxuXHJcbmV4cG9ydCB0eXBlIERhdGFTZXJ2aWNlTWV0aG9kczxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPiA9XHJcbiAgICB7XHJcbiAgICAgICAgdXBkYXRlRmlsdGVyOiAoZmlsdGVyOiBGKSA9PiB2b2lkO1xyXG4gICAgICAgIHVwZGF0ZVNlbGVjdGVkOiAoaWQ6IEVudGl0eUlkLCBzZWxlY3RlZDogYm9vbGVhbikgPT4gdm9pZDtcclxuICAgICAgICBsb2FkOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAgICAgICBzZXRDdXJyZW50KGVudGl0eTogRSk6IHZvaWQ7XHJcbiAgICAgICAgbG9hZEJ5SWQoaWQ6IEVudGl0eUlkKTogUHJvbWlzZTx2b2lkPjtcclxuICAgICAgICBjcmVhdGUoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPjtcclxuICAgICAgICB1cGRhdGUoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPjtcclxuICAgICAgICBkZWxldGUoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIH1cclxuXHJcbmV4cG9ydCB0eXBlIEVtcHR5ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd2l0aERhdGFTZXJ2aWNlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM6IHsgZGF0YVNlcnZpY2VUeXBlOiBQcm92aWRlclRva2VuPERhdGFTZXJ2aWNlPEUsIEY+PiwgZmlsdGVyOiBGLCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uIH0pOiBTaWduYWxTdG9yZUZlYXR1cmU8XHJcbiAgICB7XHJcbiAgICAgICAgc3RhdGU6IEVtdHB5LFxyXG4gICAgICAgIC8vIFRoZXNlIGFsdGVybmF0aXZlcyBicmVhayB0eXBlIGluZmVyZW5jZTogXHJcbiAgICAgICAgLy8gc3RhdGU6IHsgY2FsbFN0YXRlOiBDYWxsU3RhdGUgfSAmIE5hbWVkRW50aXR5U3RhdGU8RSwgQ29sbGVjdGlvbj4sXHJcbiAgICAgICAgLy8gc3RhdGU6IE5hbWVkRW50aXR5U3RhdGU8RSwgQ29sbGVjdGlvbj4sXHJcblxyXG4gICAgICAgIHNpZ25hbHM6IE5hbWVkRW50aXR5U2lnbmFsczxFLCBDb2xsZWN0aW9uPixcclxuICAgICAgICBtZXRob2RzOiBFbXRweSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgc3RhdGU6IE5hbWVkRGF0YVNlcnZpY2VTdGF0ZTxFLCBGLCBDb2xsZWN0aW9uPlxyXG4gICAgICAgIHNpZ25hbHM6IE5hbWVkRGF0YVNlcnZpY2VTaWduYWxzPEUsIENvbGxlY3Rpb24+XHJcbiAgICAgICAgbWV0aG9kczogTmFtZWREYXRhU2VydmljZU1ldGhvZHM8RSwgRiwgQ29sbGVjdGlvbj5cclxuICAgIH1cclxuPjtcclxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEYXRhU2VydmljZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPihvcHRpb25zOiB7IGRhdGFTZXJ2aWNlVHlwZTogUHJvdmlkZXJUb2tlbjxEYXRhU2VydmljZTxFLCBGPj4sIGZpbHRlcjogRiB9KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxyXG4gICAge1xyXG4gICAgICAgIHN0YXRlOiB7IGNhbGxTdGF0ZTogQ2FsbFN0YXRlIH0gJiBFbnRpdHlTdGF0ZTxFPlxyXG4gICAgICAgIHNpZ25hbHM6IEVtdHB5LFxyXG4gICAgICAgIG1ldGhvZHM6IEVtdHB5LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBzdGF0ZTogRGF0YVNlcnZpY2VTdGF0ZTxFLCBGPlxyXG4gICAgICAgIHNpZ25hbHM6IERhdGFTZXJ2aWNlU2lnbmFsczxFPlxyXG4gICAgICAgIG1ldGhvZHM6IERhdGFTZXJ2aWNlTWV0aG9kczxFLCBGPlxyXG4gICAgfT47XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG5leHBvcnQgZnVuY3Rpb24gd2l0aERhdGFTZXJ2aWNlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM6IHsgZGF0YVNlcnZpY2VUeXBlOiBQcm92aWRlclRva2VuPERhdGFTZXJ2aWNlPEUsIEY+PiwgZmlsdGVyOiBGLCBjb2xsZWN0aW9uPzogQ29sbGVjdGlvbiB9KTogU2lnbmFsU3RvcmVGZWF0dXJlPGFueSwgYW55PiB7XHJcbiAgICBjb25zdCB7IGRhdGFTZXJ2aWNlVHlwZSwgZmlsdGVyLCBjb2xsZWN0aW9uOiBwcmVmaXggfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgICAgZW50aXRpZXNLZXksXHJcbiAgICAgICAgZmlsdGVyS2V5LFxyXG4gICAgICAgIGxvYWRLZXksXHJcbiAgICAgICAgc2VsZWN0ZWRFbnRpdGllc0tleSxcclxuICAgICAgICBzZWxlY3RlZElkc0tleSxcclxuICAgICAgICB1cGRhdGVGaWx0ZXJLZXksXHJcbiAgICAgICAgdXBkYXRlU2VsZWN0ZWRLZXksXHJcblxyXG4gICAgICAgIGN1cnJlbnRLZXksXHJcbiAgICAgICAgY3JlYXRlS2V5LFxyXG4gICAgICAgIHVwZGF0ZUtleSxcclxuICAgICAgICBkZWxldGVLZXksXHJcbiAgICAgICAgbG9hZEJ5SWRLZXksXHJcbiAgICAgICAgc2V0Q3VycmVudEtleVxyXG4gICAgfSA9IGdldERhdGFTZXJ2aWNlS2V5cyhvcHRpb25zKTtcclxuXHJcbiAgICBjb25zdCB7IGNhbGxTdGF0ZUtleSB9ID0gZ2V0Q2FsbFN0YXRlS2V5cyh7IGNvbGxlY3Rpb246IHByZWZpeCB9KTtcclxuXHJcbiAgICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxyXG4gICAgICAgIHdpdGhTdGF0ZSgoKSA9PiAoe1xyXG4gICAgICAgICAgICBbZmlsdGVyS2V5XTogZmlsdGVyLFxyXG4gICAgICAgICAgICBbc2VsZWN0ZWRJZHNLZXldOiB7fSBhcyBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+LFxyXG4gICAgICAgICAgICBbY3VycmVudEtleV06IHVuZGVmaW5lZCBhcyBFIHwgdW5kZWZpbmVkXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHdpdGhDb21wdXRlZCgoc3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVudGl0aWVzID0gc3RvcmVbZW50aXRpZXNLZXldIGFzIFNpZ25hbDxFW10+O1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHN0b3JlW3NlbGVjdGVkSWRzS2V5XSBhcyBTaWduYWw8UmVjb3JkPEVudGl0eUlkLCBib29sZWFuPj47XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkRW50aXRpZXNLZXldOiBjb21wdXRlZCgoKSA9PiBlbnRpdGllcygpLmZpbHRlcihlID0+IHNlbGVjdGVkSWRzKClbZS5pZF0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgd2l0aE1ldGhvZHMoKHN0b3JlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIFN0YXRlU2lnbmFsPG9iamVjdD4pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YVNlcnZpY2UgPSBpbmplY3QoZGF0YVNlcnZpY2VUeXBlKVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgW3VwZGF0ZUZpbHRlcktleV06IChmaWx0ZXI6IEYpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtmaWx0ZXJLZXldOiBmaWx0ZXIgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVNlbGVjdGVkS2V5XTogKGlkOiBFbnRpdHlJZCwgc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCAoc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRJZHNLZXldOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZVtzZWxlY3RlZElkc0tleV0gYXMgUmVjb3JkPEVudGl0eUlkLCBib29sZWFuPixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF06IHNlbGVjdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFtsb2FkS2V5XTogYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHN0b3JlW2ZpbHRlcktleV0gYXMgU2lnbmFsPEY+O1xyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGluZyhwcmVmaXgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YVNlcnZpY2UubG9hZChmaWx0ZXIoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHByZWZpeCA/IHNldEFsbEVudGl0aWVzKHJlc3VsdCwgeyBjb2xsZWN0aW9uOiBwcmVmaXggfSkgOiBzZXRBbGxFbnRpdGllcyhyZXN1bHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0RXJyb3IoZSwgcHJlZml4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFtsb2FkQnlJZEtleV06IGFzeW5jIChpZDogRW50aXR5SWQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBkYXRhU2VydmljZS5sb2FkQnlJZChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogY3VycmVudCB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgW3NldEN1cnJlbnRLZXldOiAoY3VycmVudDogRSk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiBjdXJyZW50IH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFtjcmVhdGVLZXldOiBhc3luYyAoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGVudGl0eSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBkYXRhU2VydmljZS5jcmVhdGUoZW50aXR5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGNyZWF0ZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHByZWZpeCA/IGFkZEVudGl0eShjcmVhdGVkLCB7IGNvbGxlY3Rpb246IHByZWZpeCB9KSA6IGFkZEVudGl0eShjcmVhdGVkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldEVycm9yKGUsIHByZWZpeCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBbdXBkYXRlS2V5XTogYXN5bmMgKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiBlbnRpdHkgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkaW5nKHByZWZpeCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgZGF0YVNlcnZpY2UudXBkYXRlKGVudGl0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiB1cGRhdGVkIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaHkgZG8gd2UgbmVlZCB0aGlzIGNhc3QgdG8gUGFydGlhbDxFbnRpdHk+P1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVBcmcgPSB7IGlkOiB1cGRhdGVkLmlkLCBjaGFuZ2VzOiB1cGRhdGVkIGFzIFBhcnRpYWw8RW50aXR5PiB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBwcmVmaXggPyB1cGRhdGVFbnRpdHkodXBkYXRlQXJnLCB7IGNvbGxlY3Rpb246IHByZWZpeCB9KSA6IHVwZGF0ZUVudGl0eSh1cGRhdGVBcmcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0RXJyb3IoZSwgcHJlZml4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFtkZWxldGVLZXldOiBhc3luYyAoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGVudGl0eSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRhdGFTZXJ2aWNlLmRlbGV0ZShlbnRpdHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogdW5kZWZpbmVkIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBwcmVmaXggPyByZW1vdmVFbnRpdHkoZW50aXR5LmlkLCB7IGNvbGxlY3Rpb246IHByZWZpeCB9KSA6IHJlbW92ZUVudGl0eShlbnRpdHkuaWQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0RXJyb3IoZSwgcHJlZml4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxufSJdfQ==
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kYXRhLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtZGF0YS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBeUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQXNCLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SCxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsY0FBYyxFQUFZLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFpQnpHLE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBVztJQUNsQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQWdDO0lBQy9ELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDaEYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUMzRyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxVQUFVLENB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LENBQUM7b0JBQzlELE1BQU0sQ0FBQyxDQUFDO2lCQUNYO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDLENBQUMsQ0FDTCxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyVG9rZW4sIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTaWduYWxTdG9yZUZlYXR1cmUsIHBhdGNoU3RhdGUsIHNpZ25hbFN0b3JlRmVhdHVyZSwgd2l0aENvbXB1dGVkLCB3aXRoTWV0aG9kcywgd2l0aFN0YXRlIH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHNcIjtcbmltcG9ydCB7IENhbGxTdGF0ZSwgZ2V0Q2FsbFN0YXRlS2V5cywgc2V0RXJyb3IsIHNldExvYWRlZCwgc2V0TG9hZGluZyB9IGZyb20gXCIuL3dpdGgtY2FsbC1zdGF0ZVwiO1xuaW1wb3J0IHsgc2V0QWxsRW50aXRpZXMsIEVudGl0eUlkLCBhZGRFbnRpdHksIHVwZGF0ZUVudGl0eSwgcmVtb3ZlRW50aXR5IH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHMvZW50aXRpZXNcIjtcbmltcG9ydCB7IEVudGl0eVN0YXRlLCBOYW1lZEVudGl0eVNpZ25hbHMgfSBmcm9tIFwiQG5ncngvc2lnbmFscy9lbnRpdGllcy9zcmMvbW9kZWxzXCI7XG5pbXBvcnQgeyBTdGF0ZVNpZ25hbCB9IGZyb20gXCJAbmdyeC9zaWduYWxzL3NyYy9zdGF0ZS1zaWduYWxcIjtcbmltcG9ydCB7IEVtdHB5IH0gZnJvbSBcIi4vc2hhcmVkL2VtcHR5XCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlciA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuZXhwb3J0IHR5cGUgRW50aXR5ID0geyBpZDogRW50aXR5SWQgfTtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhU2VydmljZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPiB7XG4gICAgbG9hZChmaWx0ZXI6IEYpOiBQcm9taXNlPEVbXT47XG4gICAgbG9hZEJ5SWQoaWQ6IEVudGl0eUlkKTogUHJvbWlzZTxFPjtcbiAgICBjcmVhdGUoZW50aXR5OiBFKTogUHJvbWlzZTxFPjtcbiAgICB1cGRhdGUoZW50aXR5OiBFKTogUHJvbWlzZTxFPjtcbiAgICB1cGRhdGVBbGwoZW50aXR5OiBFW10pOiBQcm9taXNlPEVbXT47XG4gICAgZGVsZXRlKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyID8gc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpIDogc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YVNlcnZpY2VLZXlzKG9wdGlvbnM6IHsgY29sbGVjdGlvbj86IHN0cmluZyB9KSB7XG4gICAgY29uc3QgZmlsdGVyS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUZpbHRlcmAgOiAnZmlsdGVyJztcbiAgICBjb25zdCBzZWxlY3RlZElkc0tleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGBzZWxlY3RlZCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUlkc2AgOiAnc2VsZWN0ZWRJZHMnO1xuICAgIGNvbnN0IHNlbGVjdGVkRW50aXRpZXNLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgc2VsZWN0ZWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1FbnRpdGllc2AgOiAnc2VsZWN0ZWRFbnRpdGllcyc7XG5cbiAgICBjb25zdCB1cGRhdGVGaWx0ZXJLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgdXBkYXRlJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9RmlsdGVyYCA6ICd1cGRhdGVGaWx0ZXInO1xuICAgIGNvbnN0IHVwZGF0ZVNlbGVjdGVkS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYHVwZGF0ZVNlbGVjdGVkJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9RW50aXRpZXNgIDogJ3VwZGF0ZVNlbGVjdGVkJztcbiAgICBjb25zdCBsb2FkS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYGxvYWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1FbnRpdGllc2AgOiAnbG9hZCc7XG5cbiAgICBjb25zdCBjdXJyZW50S2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYGN1cnJlbnQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gIDogJ2N1cnJlbnQnO1xuICAgIGNvbnN0IGxvYWRCeUlkS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYGxvYWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1CeUlkYCA6ICdsb2FkQnlJZCc7XG4gICAgY29uc3Qgc2V0Q3VycmVudEtleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGBzZXRDdXJyZW50JHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YCA6ICdzZXRDdXJyZW50JztcbiAgICBjb25zdCBjcmVhdGVLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgY3JlYXRlJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YCA6ICdjcmVhdGUnO1xuICAgIGNvbnN0IHVwZGF0ZUtleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGB1cGRhdGUke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gIDogJ3VwZGF0ZSc7XG4gICAgY29uc3QgdXBkYXRlQWxsS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYHVwZGF0ZUFsbCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfWAgOiAndXBkYXRlQWxsJztcbiAgICBjb25zdCBkZWxldGVLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgZGVsZXRlJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YCA6ICdkZWxldGUnO1xuXG4gICAgLy8gVE9ETzogVGFrZSB0aGVzZSBmcm9tIEBuZ3J4L3NpZ25hbHMvZW50aXRpZXMsIHdoZW4gdGhleSBhcmUgZXhwb3J0ZWRcbiAgICBjb25zdCBlbnRpdGllc0tleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1FbnRpdGllc2AgOiAnZW50aXRpZXMnO1xuICAgIGNvbnN0IGVudGl0eU1hcEtleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1FbnRpdHlNYXBgIDogJ2VudGl0eU1hcCc7XG4gICAgY29uc3QgaWRzS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUlkc2AgOiAnaWRzJztcblxuICAgIHJldHVybiB7XG4gICAgICAgIGZpbHRlcktleSxcbiAgICAgICAgc2VsZWN0ZWRJZHNLZXksXG4gICAgICAgIHNlbGVjdGVkRW50aXRpZXNLZXksXG4gICAgICAgIHVwZGF0ZUZpbHRlcktleSxcbiAgICAgICAgdXBkYXRlU2VsZWN0ZWRLZXksXG4gICAgICAgIGxvYWRLZXksXG4gICAgICAgIGVudGl0aWVzS2V5LFxuICAgICAgICBlbnRpdHlNYXBLZXksXG4gICAgICAgIGlkc0tleSxcblxuICAgICAgICBjdXJyZW50S2V5LFxuICAgICAgICBsb2FkQnlJZEtleSxcbiAgICAgICAgc2V0Q3VycmVudEtleSxcbiAgICAgICAgY3JlYXRlS2V5LFxuICAgICAgICB1cGRhdGVLZXksXG4gICAgICAgIHVwZGF0ZUFsbEtleSxcbiAgICAgICAgZGVsZXRlS2V5XG4gICAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTmFtZWREYXRhU2VydmljZVN0YXRlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+ID1cbiAgICB7XG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7S31GaWx0ZXJgXTogRjtcbiAgICB9ICYge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBzZWxlY3RlZCR7Q2FwaXRhbGl6ZTxLPn1JZHNgXTogUmVjb3JkPEVudGl0eUlkLCBib29sZWFuPjtcbiAgICB9ICYge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBjdXJyZW50JHtDYXBpdGFsaXplPEs+fWBdOiBFO1xuICAgIH1cblxuZXhwb3J0IHR5cGUgRGF0YVNlcnZpY2VTdGF0ZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPiA9IHtcbiAgICBmaWx0ZXI6IEY7XG4gICAgc2VsZWN0ZWRJZHM6IFJlY29yZDxFbnRpdHlJZCwgYm9vbGVhbj47XG4gICAgY3VycmVudDogRTtcbn1cblxuZXhwb3J0IHR5cGUgTmFtZWREYXRhU2VydmljZVNpZ25hbHM8RSBleHRlbmRzIEVudGl0eSwgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPVxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgc2VsZWN0ZWQke0NhcGl0YWxpemU8Sz59RW50aXRpZXNgXTogU2lnbmFsPEVbXT47XG4gICAgfVxuXG5leHBvcnQgdHlwZSBEYXRhU2VydmljZVNpZ25hbHM8RSBleHRlbmRzIEVudGl0eT4gPVxuICAgIHtcbiAgICAgICAgc2VsZWN0ZWRFbnRpdGllczogU2lnbmFsPEVbXT47XG4gICAgfVxuXG5leHBvcnQgdHlwZSBOYW1lZERhdGFTZXJ2aWNlTWV0aG9kczxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyLCBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPiA9XG4gICAge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGUke0NhcGl0YWxpemU8Sz59RmlsdGVyYF06IChmaWx0ZXI6IEYpID0+IHZvaWQ7XG4gICAgfSAmXG4gICAge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGVTZWxlY3RlZCR7Q2FwaXRhbGl6ZTxLPn1FbnRpdGllc2BdOiAoaWQ6IEVudGl0eUlkLCBzZWxlY3RlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgICB9ICZcbiAgICB7XG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYGxvYWQke0NhcGl0YWxpemU8Sz59RW50aXRpZXNgXTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICB9ICZcblxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgc2V0Q3VycmVudCR7Q2FwaXRhbGl6ZTxLPn1gXTogKGVudGl0eTogRSkgPT4gdm9pZDtcbiAgICB9ICZcbiAgICB7XG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYGxvYWQke0NhcGl0YWxpemU8Sz59QnlJZGBdOiAoaWQ6IEVudGl0eUlkKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIH0gJlxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgY3JlYXRlJHtDYXBpdGFsaXplPEs+fWBdOiAoZW50aXR5OiBFKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIH0gJlxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgdXBkYXRlJHtDYXBpdGFsaXplPEs+fWBdOiAoZW50aXR5OiBFKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIH0gJlxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgdXBkYXRlQWxsJHtDYXBpdGFsaXplPEs+fWBdOiAoZW50aXR5OiBFW10pID0+IFByb21pc2U8dm9pZD47XG4gICAgfSAmXG4gICAge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBkZWxldGUke0NhcGl0YWxpemU8Sz59YF06IChlbnRpdHk6IEUpID0+IFByb21pc2U8dm9pZD47XG4gICAgfTtcblxuXG5leHBvcnQgdHlwZSBEYXRhU2VydmljZU1ldGhvZHM8RSBleHRlbmRzIEVudGl0eSwgRiBleHRlbmRzIEZpbHRlcj4gPVxuICAgIHtcbiAgICAgICAgdXBkYXRlRmlsdGVyOiAoZmlsdGVyOiBGKSA9PiB2b2lkO1xuICAgICAgICB1cGRhdGVTZWxlY3RlZDogKGlkOiBFbnRpdHlJZCwgc2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgICAgIGxvYWQ6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgICAgICAgc2V0Q3VycmVudChlbnRpdHk6IEUpOiB2b2lkO1xuICAgICAgICBsb2FkQnlJZChpZDogRW50aXR5SWQpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBjcmVhdGUoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgdXBkYXRlKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD47XG4gICAgICAgIHVwZGF0ZUFsbChlbnRpdGllczogRVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgZGVsZXRlKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD47XG4gICAgfVxuXG5leHBvcnQgdHlwZSBFbXB0eSA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPlxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aERhdGFTZXJ2aWNlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM6IHsgZGF0YVNlcnZpY2VUeXBlOiBQcm92aWRlclRva2VuPERhdGFTZXJ2aWNlPEUsIEY+PiwgZmlsdGVyOiBGLCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uIH0pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gICAge1xuICAgICAgICBzdGF0ZTogRW10cHksXG4gICAgICAgIC8vIFRoZXNlIGFsdGVybmF0aXZlcyBicmVhayB0eXBlIGluZmVyZW5jZTpcbiAgICAgICAgLy8gc3RhdGU6IHsgY2FsbFN0YXRlOiBDYWxsU3RhdGUgfSAmIE5hbWVkRW50aXR5U3RhdGU8RSwgQ29sbGVjdGlvbj4sXG4gICAgICAgIC8vIHN0YXRlOiBOYW1lZEVudGl0eVN0YXRlPEUsIENvbGxlY3Rpb24+LFxuXG4gICAgICAgIHNpZ25hbHM6IE5hbWVkRW50aXR5U2lnbmFsczxFLCBDb2xsZWN0aW9uPixcbiAgICAgICAgbWV0aG9kczogRW10cHksXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHN0YXRlOiBOYW1lZERhdGFTZXJ2aWNlU3RhdGU8RSwgRiwgQ29sbGVjdGlvbj5cbiAgICAgICAgc2lnbmFsczogTmFtZWREYXRhU2VydmljZVNpZ25hbHM8RSwgQ29sbGVjdGlvbj5cbiAgICAgICAgbWV0aG9kczogTmFtZWREYXRhU2VydmljZU1ldGhvZHM8RSwgRiwgQ29sbGVjdGlvbj5cbiAgICB9XG4+O1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEYXRhU2VydmljZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPihvcHRpb25zOiB7IGRhdGFTZXJ2aWNlVHlwZTogUHJvdmlkZXJUb2tlbjxEYXRhU2VydmljZTxFLCBGPj4sIGZpbHRlcjogRiB9KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICAgIHtcbiAgICAgICAgc3RhdGU6IHsgY2FsbFN0YXRlOiBDYWxsU3RhdGUgfSAmIEVudGl0eVN0YXRlPEU+XG4gICAgICAgIHNpZ25hbHM6IEVtdHB5LFxuICAgICAgICBtZXRob2RzOiBFbXRweSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgc3RhdGU6IERhdGFTZXJ2aWNlU3RhdGU8RSwgRj5cbiAgICAgICAgc2lnbmFsczogRGF0YVNlcnZpY2VTaWduYWxzPEU+XG4gICAgICAgIG1ldGhvZHM6IERhdGFTZXJ2aWNlTWV0aG9kczxFLCBGPlxuICAgIH0+O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEYXRhU2VydmljZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyLCBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihvcHRpb25zOiB7IGRhdGFTZXJ2aWNlVHlwZTogUHJvdmlkZXJUb2tlbjxEYXRhU2VydmljZTxFLCBGPj4sIGZpbHRlcjogRiwgY29sbGVjdGlvbj86IENvbGxlY3Rpb24gfSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxhbnksIGFueT4ge1xuICAgIGNvbnN0IHsgZGF0YVNlcnZpY2VUeXBlLCBmaWx0ZXIsIGNvbGxlY3Rpb246IHByZWZpeCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7XG4gICAgICAgIGVudGl0aWVzS2V5LFxuICAgICAgICBmaWx0ZXJLZXksXG4gICAgICAgIGxvYWRLZXksXG4gICAgICAgIHNlbGVjdGVkRW50aXRpZXNLZXksXG4gICAgICAgIHNlbGVjdGVkSWRzS2V5LFxuICAgICAgICB1cGRhdGVGaWx0ZXJLZXksXG4gICAgICAgIHVwZGF0ZVNlbGVjdGVkS2V5LFxuXG4gICAgICAgIGN1cnJlbnRLZXksXG4gICAgICAgIGNyZWF0ZUtleSxcbiAgICAgICAgdXBkYXRlS2V5LFxuICAgICAgICB1cGRhdGVBbGxLZXksXG4gICAgICAgIGRlbGV0ZUtleSxcbiAgICAgICAgbG9hZEJ5SWRLZXksXG4gICAgICAgIHNldEN1cnJlbnRLZXlcbiAgICB9ID0gZ2V0RGF0YVNlcnZpY2VLZXlzKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgeyBjYWxsU3RhdGVLZXkgfSA9IGdldENhbGxTdGF0ZUtleXMoeyBjb2xsZWN0aW9uOiBwcmVmaXggfSk7XG5cbiAgICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuICAgICAgICB3aXRoU3RhdGUoKCkgPT4gKHtcbiAgICAgICAgICAgIFtmaWx0ZXJLZXldOiBmaWx0ZXIsXG4gICAgICAgICAgICBbc2VsZWN0ZWRJZHNLZXldOiB7fSBhcyBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+LFxuICAgICAgICAgICAgW2N1cnJlbnRLZXldOiB1bmRlZmluZWQgYXMgRSB8IHVuZGVmaW5lZFxuICAgICAgICB9KSksXG4gICAgICAgIHdpdGhDb21wdXRlZCgoc3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdGllcyA9IHN0b3JlW2VudGl0aWVzS2V5XSBhcyBTaWduYWw8RVtdPjtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gc3RvcmVbc2VsZWN0ZWRJZHNLZXldIGFzIFNpZ25hbDxSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+PjtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRFbnRpdGllc0tleV06IGNvbXB1dGVkKCgpID0+IGVudGl0aWVzKCkuZmlsdGVyKGUgPT4gc2VsZWN0ZWRJZHMoKVtlLmlkXSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB3aXRoTWV0aG9kcygoc3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgU3RhdGVTaWduYWw8b2JqZWN0PikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNlcnZpY2UgPSBpbmplY3QoZGF0YVNlcnZpY2VUeXBlKVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbdXBkYXRlRmlsdGVyS2V5XTogKGZpbHRlcjogRik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtmaWx0ZXJLZXldOiBmaWx0ZXIgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU2VsZWN0ZWRLZXldOiAoaWQ6IEVudGl0eUlkLCBzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCAoc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzS2V5XToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlW3NlbGVjdGVkSWRzS2V5XSBhcyBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF06IHNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbbG9hZEtleV06IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gc3RvcmVbZmlsdGVyS2V5XSBhcyBTaWduYWw8Rj47XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGluZyhwcmVmaXgpKTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YVNlcnZpY2UubG9hZChmaWx0ZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBwcmVmaXggPyBzZXRBbGxFbnRpdGllcyhyZXN1bHQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pIDogc2V0QWxsRW50aXRpZXMocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRlZChwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtsb2FkQnlJZEtleV06IGFzeW5jIChpZDogRW50aXR5SWQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkaW5nKHByZWZpeCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgZGF0YVNlcnZpY2UubG9hZEJ5SWQoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogY3VycmVudCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtzZXRDdXJyZW50S2V5XTogKGN1cnJlbnQ6IEUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGN1cnJlbnQgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbY3JlYXRlS2V5XTogYXN5bmMgKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogZW50aXR5IH0pO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBkYXRhU2VydmljZS5jcmVhdGUoZW50aXR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiBjcmVhdGVkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgcHJlZml4ID8gYWRkRW50aXR5KGNyZWF0ZWQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pIDogYWRkRW50aXR5KGNyZWF0ZWQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldEVycm9yKGUsIHByZWZpeCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZUtleV06IGFzeW5jIChlbnRpdHk6IEUpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGVudGl0eSB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkaW5nKHByZWZpeCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgZGF0YVNlcnZpY2UudXBkYXRlKGVudGl0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogdXBkYXRlZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoeSBkbyB3ZSBuZWVkIHRoaXMgY2FzdCB0byBQYXJ0aWFsPEVudGl0eT4/XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVBcmcgPSB7IGlkOiB1cGRhdGVkLmlkLCBjaGFuZ2VzOiB1cGRhdGVkIGFzIFBhcnRpYWw8RW50aXR5PiB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgcHJlZml4ID8gdXBkYXRlRW50aXR5KHVwZGF0ZUFyZywgeyBjb2xsZWN0aW9uOiBwcmVmaXggfSkgOiB1cGRhdGVFbnRpdHkodXBkYXRlQXJnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRlZChwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVBbGxLZXldOiBhc3luYyAoZW50aXRpZXM6IEVbXSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkaW5nKHByZWZpeCkpO1xuXG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhU2VydmljZS51cGRhdGVBbGwoZW50aXRpZXMpO1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBwcmVmaXggPyBzZXRBbGxFbnRpdGllcyhyZXN1bHQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pIDogc2V0QWxsRW50aXRpZXMocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtkZWxldGVLZXldOiBhc3luYyAoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiBlbnRpdHkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGluZyhwcmVmaXgpKTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGF0YVNlcnZpY2UuZGVsZXRlKGVudGl0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogdW5kZWZpbmVkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgcHJlZml4ID8gcmVtb3ZlRW50aXR5KGVudGl0eS5pZCwgeyBjb2xsZWN0aW9uOiBwcmVmaXggfSkgOiByZW1vdmVFbnRpdHkoZW50aXR5LmlkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRlZChwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICApO1xufVxuIl19
|
|
@@ -76,4 +76,4 @@ export const patchState = (state, action, ...rest) => {
|
|
|
76
76
|
currentActionNames.add(action);
|
|
77
77
|
return originalPatchState(state, ...rest);
|
|
78
78
|
};
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kZXZ0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1kZXZ0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxJQUFJLGtCQUFrQixHQUVqQyxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBaUJuRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQWtDLEVBQUUsQ0FBQyxDQUFDO0FBRWxFLElBQUksa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUUzQyxJQUFJLDBCQUEwQixHQUFHLEtBQUssQ0FBQztBQUV2QyxTQUFTLG1CQUFtQjtJQUMxQixNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ1YsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE9BQU87U0FDUjtRQUVELE1BQU0sTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sU0FBUyxHQUE0QixFQUFFLENBQUM7UUFDOUMsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLEVBQUU7WUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztTQUMzQjtRQUVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDOUQsa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUV2QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxHQUFZLEVBQUUsTUFBYztJQUN0RCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRTtRQUNuRCxPQUFRLEdBQThCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDaEQ7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBYztJQUNwQyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0tBQzdDO0lBRUQsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUtELElBQUksVUFBdUMsQ0FBQztBQUU1Qzs7R0FFRztBQUNILE1BQU0sVUFBVSxLQUFLO0lBQ25CLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDdkIsMEJBQTBCLEdBQUcsS0FBSyxDQUFDO0lBQ25DLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBWTtJQUVaLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNmLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQztRQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDOUIsSUFBSSxFQUFFLG1CQUFtQjthQUMxQixDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLEdBQUcsS0FBSztZQUNSLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVztTQUNwQixDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUMvQixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLDBCQUEwQixHQUFHLElBQUksQ0FBQztTQUNuQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVNELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRTtJQUM1RCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBwYXRjaFN0YXRlIGFzIG9yaWdpbmFsUGF0Y2hTdGF0ZSxcbiAgU2lnbmFsU3RvcmVGZWF0dXJlLFxufSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMvc3JjL3NpZ25hbC1zdG9yZS1tb2RlbHMnO1xuaW1wb3J0IHsgZWZmZWN0LCBpbmplY3QsIFBMQVRGT1JNX0lELCBzaWduYWwsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXzpcbiAgICAgIHwge1xuICAgICAgICAgIGNvbm5lY3Q6IChvcHRpb25zOiB7IG5hbWU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICBzZW5kOiAoYWN0aW9uOiBBY3Rpb24sIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZDtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxufVxuXG50eXBlIEVtcHR5RmVhdHVyZVJlc3VsdCA9IHsgc3RhdGU6IHt9OyBzaWduYWxzOiB7fTsgbWV0aG9kczoge30gfTtcbmV4cG9ydCB0eXBlIEFjdGlvbiA9IHsgdHlwZTogc3RyaW5nIH07XG5cbmNvbnN0IHN0b3JlUmVnaXN0cnkgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oe30pO1xuXG5sZXQgY3VycmVudEFjdGlvbk5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmxldCBzeW5jaHJvbml6YXRpb25Jbml0aWFsaXplZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBpbml0U3luY2hyb25pemF0aW9uKCkge1xuICBlZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JlcyA9IHN0b3JlUmVnaXN0cnkoKTtcbiAgICBjb25zdCByb290U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBuYW1lIGluIHN0b3Jlcykge1xuICAgICAgY29uc3Qgc3RvcmUgPSBzdG9yZXNbbmFtZV07XG4gICAgICByb290U3RhdGVbbmFtZV0gPSBzdG9yZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVzID0gQXJyYXkuZnJvbShjdXJyZW50QWN0aW9uTmFtZXMpO1xuICAgIGNvbnN0IHR5cGUgPSBuYW1lcy5sZW5ndGggPyBuYW1lcy5qb2luKCcsICcpIDogJ1N0b3JlIFVwZGF0ZSc7XG4gICAgY3VycmVudEFjdGlvbk5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBjb25uZWN0aW9uLnNlbmQoeyB0eXBlIH0sIHJvb3RTdGF0ZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZyb21TeW1ib2wob2JqOiB1bmtub3duLCBzeW1ib2w6IHN5bWJvbCkge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICYmIHN5bWJvbCBpbiBvYmopIHtcbiAgICByZXR1cm4gKG9iaiBhcyB7IFtrZXk6IHN5bWJvbF06IGFueSB9KVtzeW1ib2xdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0b3JlU2lnbmFsKHN0b3JlOiB1bmtub3duKTogU2lnbmFsPHVua25vd24+IHtcbiAgY29uc3QgW3NpZ25hbFN0YXRlS2V5XSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc3RvcmUpO1xuICBpZiAoIXNpZ25hbFN0YXRlS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCBTdGF0ZSBTaWduYWwnKTtcbiAgfVxuXG4gIHJldHVybiBnZXRWYWx1ZUZyb21TeW1ib2woc3RvcmUsIHNpZ25hbFN0YXRlS2V5KTtcbn1cblxudHlwZSBDb25uZWN0UmVzcG9uc2UgPSB7XG4gIHNlbmQ6IChhY3Rpb246IEFjdGlvbiwgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xufTtcbmxldCBjb25uZWN0aW9uOiBDb25uZWN0UmVzcG9uc2UgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogcmVxdWlyZWQgZm9yIHRlc3RpbmcuIGlzIG5vdCBleHBvcnRlZCBkdXJpbmcgYnVpbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0KCkge1xuICBjb25uZWN0aW9uID0gdW5kZWZpbmVkO1xuICBzeW5jaHJvbml6YXRpb25Jbml0aWFsaXplZCA9IGZhbHNlO1xuICBzdG9yZVJlZ2lzdHJ5LnNldCh7fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIG5hbWUgc3RvcmUncyBuYW1lIGFzIGl0IHNob3VsZCBhcHBlYXIgaW4gdGhlIERldlRvb2xzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRGV2dG9vbHM8SW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQ+KFxuICBuYW1lOiBzdHJpbmdcbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxJbnB1dCwgRW1wdHlGZWF0dXJlUmVzdWx0PiB7XG4gIHJldHVybiAoc3RvcmUpID0+IHtcbiAgICBjb25zdCBpc1NlcnZlciA9IGlzUGxhdGZvcm1TZXJ2ZXIoaW5qZWN0KFBMQVRGT1JNX0lEKSk7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm4gc3RvcmU7XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fO1xuICAgIGlmICghZXh0ZW5zaW9ucykge1xuICAgICAgcmV0dXJuIHN0b3JlO1xuICAgIH1cblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgY29ubmVjdGlvbiA9IGV4dGVuc2lvbnMuY29ubmVjdCh7XG4gICAgICAgIG5hbWU6ICdOZ1J4IFNpZ25hbCBTdG9yZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yZVNpZ25hbCA9IGdldFN0b3JlU2lnbmFsKHN0b3JlKTtcbiAgICBzdG9yZVJlZ2lzdHJ5LnVwZGF0ZSgodmFsdWUpID0+ICh7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIFtuYW1lXTogc3RvcmVTaWduYWwsXG4gICAgfSkpO1xuXG4gICAgaWYgKCFzeW5jaHJvbml6YXRpb25Jbml0aWFsaXplZCkge1xuICAgICAgaW5pdFN5bmNocm9uaXphdGlvbigpO1xuICAgICAgc3luY2hyb25pemF0aW9uSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9yZTtcbiAgfTtcbn1cblxudHlwZSBQYXRjaEZuID0gdHlwZW9mIG9yaWdpbmFsUGF0Y2hTdGF0ZSBleHRlbmRzIChcbiAgYXJnMTogaW5mZXIgRmlyc3QsXG4gIC4uLmFyZ3M6IGluZmVyIFJlc3RcbikgPT4gaW5mZXIgUmV0dXJuZXJcbiAgPyAoc3RhdGU6IEZpcnN0LCBhY3Rpb246IHN0cmluZywgLi4ucmVzdDogUmVzdCkgPT4gUmV0dXJuZXJcbiAgOiBuZXZlcjtcblxuZXhwb3J0IGNvbnN0IHBhdGNoU3RhdGU6IFBhdGNoRm4gPSAoc3RhdGUsIGFjdGlvbiwgLi4ucmVzdCkgPT4ge1xuICBjdXJyZW50QWN0aW9uTmFtZXMuYWRkKGFjdGlvbik7XG4gIHJldHVybiBvcmlnaW5hbFBhdGNoU3RhdGUoc3RhdGUsIC4uLnJlc3QpO1xufTtcbiJdfQ==
|
|
@@ -92,4 +92,4 @@ export function withRedux(redux) {
|
|
|
92
92
|
};
|
|
93
93
|
};
|
|
94
94
|
}
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZWR1eC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1yZWR1eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQU96RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQXlDOUQsTUFBTSxVQUFVLE9BQU87SUFDckIsT0FBTyxFQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUEwQjVCLFNBQVMsZUFBZSxDQUN0QixhQUFtQixFQUNuQixlQUdDLEVBQ0QsZUFBa0UsRUFDbEUsS0FBYztJQUVkLE1BQU0sU0FBUyxHQUE2QixFQUFFLENBQUM7SUFFL0MsS0FBSyxNQUFNLElBQUksSUFBSSxhQUFhLEVBQUU7UUFDaEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUU7WUFDcEMsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxPQUFPLEVBQUU7Z0JBQ1YsT0FBc0QsQ0FDckQsV0FBc0IsRUFDdEIsS0FBSyxDQUNOLENBQUM7YUFDSDtZQUNELE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFJLGFBQWEsRUFBRTtnQkFDaEIsYUFBNkMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbEU7WUFDRCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDLENBQUM7UUFDRixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcs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QUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFNUQsT0FBTztRQUNMLE9BQU8sRUFBRSxnQkFBOEI7UUFDdkMsYUFBYSxFQUFFLGFBQWE7S0FDN0IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUt2QixLQUlEO0lBSUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2YsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxZQUFZLENBQzdDLEtBQUssQ0FBQyxPQUFPLEVBQ2IsS0FBSyxDQUFDLE9BQTZDLEVBQ25ELEtBQUssQ0FBQyxPQUFvQyxFQUMxQyxLQUFLLENBQ04sQ0FBQztRQUNGLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2lnbmFsU3RvcmVGZWF0dXJlIH0gZnJvbSAnQG5ncngvc2lnbmFscyc7XHJcbmltcG9ydCB7XHJcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxyXG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcclxufSBmcm9tICdAbmdyeC9zaWduYWxzL3NyYy9zaWduYWwtc3RvcmUtbW9kZWxzJztcclxuaW1wb3J0IHsgU3RhdGVTaWduYWwgfSBmcm9tICdAbmdyeC9zaWduYWxzL3NyYy9zdGF0ZS1zaWduYWwnO1xyXG5pbXBvcnQgeyBhc3NlcnRBY3Rpb25GblNwZWNzIH0gZnJvbSAnLi9hc3NlcnRpb25zL2Fzc2VydGlvbnMnO1xyXG5pbXBvcnQgeyBlZmZlY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKiBBY3Rpb25zICoqL1xyXG5cclxudHlwZSBQYXlsb2FkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcblxyXG50eXBlIEFjdGlvbkZuPFxyXG4gIFR5cGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXHJcbiAgQWN0aW9uUGF5bG9hZCBleHRlbmRzIFBheWxvYWQgPSBQYXlsb2FkXHJcbj4gPSAoKHBheWxvYWQ6IEFjdGlvblBheWxvYWQpID0+IEFjdGlvblBheWxvYWQgJiB7IHR5cGU6IFR5cGUgfSkgJiB7XHJcbiAgdHlwZTogVHlwZTtcclxufTtcclxuXHJcbnR5cGUgQWN0aW9uRm5zID0gUmVjb3JkPHN0cmluZywgQWN0aW9uRm4+O1xyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uc0ZuU3BlY3MgPSBSZWNvcmQ8c3RyaW5nLCBQYXlsb2FkPjtcclxuXHJcbnR5cGUgQWN0aW9uRm5DcmVhdG9yPFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcz4gPSB7XHJcbiAgW0FjdGlvbk5hbWUgaW4ga2V5b2YgU3BlY106ICgoXHJcbiAgICBwYXlsb2FkOiBTcGVjW0FjdGlvbk5hbWVdXHJcbiAgKSA9PiBTcGVjW0FjdGlvbk5hbWVdICYgeyB0eXBlOiBBY3Rpb25OYW1lIH0pICYgeyB0eXBlOiBBY3Rpb25OYW1lICYgc3RyaW5nIH07XHJcbn07XHJcblxyXG50eXBlIEFjdGlvbkZuUGF5bG9hZDxBY3Rpb24+ID0gQWN0aW9uIGV4dGVuZHMgKHBheWxvYWQ6IGluZmVyIFBheWxvYWQpID0+IHZvaWRcclxuICA/IFBheWxvYWRcclxuICA6IG5ldmVyO1xyXG5cclxudHlwZSBBY3Rpb25GbnNDcmVhdG9yPFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcz4gPSBTcGVjIGV4dGVuZHMge1xyXG4gIHByaXZhdGU6IFJlY29yZDxzdHJpbmcsIFBheWxvYWQ+O1xyXG4gIHB1YmxpYzogUmVjb3JkPHN0cmluZywgUGF5bG9hZD47XHJcbn1cclxuICA/IEFjdGlvbkZuQ3JlYXRvcjxTcGVjWydwcml2YXRlJ10+ICYgQWN0aW9uRm5DcmVhdG9yPFNwZWNbJ3B1YmxpYyddPlxyXG4gIDogQWN0aW9uRm5DcmVhdG9yPFNwZWM+O1xyXG5cclxudHlwZSBQdWJsaWNBY3Rpb25GbnM8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPiA9IFNwZWMgZXh0ZW5kcyB7XHJcbiAgcHVibGljOiBSZWNvcmQ8c3RyaW5nLCBQYXlsb2FkPjtcclxufVxyXG4gID8gQWN0aW9uRm5DcmVhdG9yPFNwZWNbJ3B1YmxpYyddPlxyXG4gIDogQWN0aW9uRm5DcmVhdG9yPFNwZWM+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBheWxvYWQ8VHlwZSBleHRlbmRzIFBheWxvYWQ+KCk6IFR5cGUge1xyXG4gIHJldHVybiB7fSBhcyBUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgbm9QYXlsb2FkID0ge307XHJcblxyXG4vKiogUmVkdWNlciAqKi9cclxuXHJcbnR5cGUgUmVkdWNlckZ1bmN0aW9uPFJlZHVjZXJBY3Rpb24sIFN0YXRlPiA9IChcclxuICBhY3Rpb246IEFjdGlvbkZuUGF5bG9hZDxSZWR1Y2VyQWN0aW9uPixcclxuICBzdGF0ZTogU3RhdGVcclxuKSA9PiB2b2lkO1xyXG5cclxudHlwZSBSZWR1Y2VyRmFjdG9yeTxTdGF0ZUFjdGlvbkZucyBleHRlbmRzIEFjdGlvbkZucywgU3RhdGU+ID0gKFxyXG4gIGFjdGlvbnM6IFN0YXRlQWN0aW9uRm5zLFxyXG4gIG9uOiA8UmVkdWNlckFjdGlvbiBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+KFxyXG4gICAgYWN0aW9uOiBSZWR1Y2VyQWN0aW9uLFxyXG4gICAgcmVkdWNlckZuOiBSZWR1Y2VyRnVuY3Rpb248QWN0aW9uRm5QYXlsb2FkPFJlZHVjZXJBY3Rpb24+LCBTdGF0ZT5cclxuICApID0+IHZvaWRcclxuKSA9PiB2b2lkO1xyXG5cclxuLyoqIEVmZmVjdCAqKi9cclxuXHJcbnR5cGUgRWZmZWN0c0ZhY3Rvcnk8U3RhdGVBY3Rpb25GbnMgZXh0ZW5kcyBBY3Rpb25GbnM+ID0gKFxyXG4gIGFjdGlvbnM6IFN0YXRlQWN0aW9uRm5zLFxyXG4gIGNyZWF0ZTogPEVmZmVjdEFjdGlvbiBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+KFxyXG4gICAgYWN0aW9uOiBFZmZlY3RBY3Rpb25cclxuICApID0+IE9ic2VydmFibGU8QWN0aW9uRm5QYXlsb2FkPEVmZmVjdEFjdGlvbj4+XHJcbikgPT4gUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZTx1bmtub3duPj47XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpb25GbnM8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPihcclxuICBhY3Rpb25GblNwZWNzOiBTcGVjLFxyXG4gIHJlZHVjZXJSZWdpc3RyeTogUmVjb3JkPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgKHBheWxvYWQ6IEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPiwgc3RhdGU6IHVua25vd24pID0+IHZvaWRcclxuICA+LFxyXG4gIGVmZmVjdHNSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+PixcclxuICBzdGF0ZTogdW5rbm93blxyXG4pIHtcclxuICBjb25zdCBhY3Rpb25GbnM6IFJlY29yZDxzdHJpbmcsIEFjdGlvbkZuPiA9IHt9O1xyXG5cclxuICBmb3IgKGNvbnN0IHR5cGUgaW4gYWN0aW9uRm5TcGVjcykge1xyXG4gICAgY29uc3QgYWN0aW9uRm4gPSAocGF5bG9hZDogUGF5bG9hZCkgPT4ge1xyXG4gICAgICBjb25zdCBmdWxsUGF5bG9hZCA9IHsgLi4ucGF5bG9hZCwgdHlwZSB9O1xyXG4gICAgICBjb25zdCByZWR1Y2VyID0gcmVkdWNlclJlZ2lzdHJ5W3R5cGVdO1xyXG4gICAgICBpZiAocmVkdWNlcikge1xyXG4gICAgICAgIChyZWR1Y2VyIGFzIChwYXlsb2FkOiB1bmtub3duLCBzdGF0ZTogdW5rbm93bikgPT4gdm9pZCkoXHJcbiAgICAgICAgICBmdWxsUGF5bG9hZCBhcyB1bmtub3duLFxyXG4gICAgICAgICAgc3RhdGVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVmZmVjdFN1YmplY3QgPSBlZmZlY3RzUmVnaXN0cnlbdHlwZV07XHJcbiAgICAgIGlmIChlZmZlY3RTdWJqZWN0KSB7XHJcbiAgICAgICAgKGVmZmVjdFN1YmplY3QgYXMgdW5rbm93biBhcyBTdWJqZWN0PHVua25vd24+KS5uZXh0KGZ1bGxQYXlsb2FkKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZnVsbFBheWxvYWQ7XHJcbiAgICB9O1xyXG4gICAgYWN0aW9uRm4udHlwZSA9IHR5cGUudG9TdHJpbmcoKTtcclxuICAgIGFjdGlvbkZuc1t0eXBlXSA9IGFjdGlvbkZuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFjdGlvbkZucztcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlUHVibGljQW5kQWxsQWN0aW9uc0ZuczxTcGVjIGV4dGVuZHMgQWN0aW9uc0ZuU3BlY3M+KFxyXG4gIGFjdGlvbkZuU3BlY3M6IFNwZWMsXHJcbiAgcmVkdWNlclJlZ2lzdHJ5OiBSZWNvcmQ8XHJcbiAgICBzdHJpbmcsXHJcbiAgICAocGF5bG9hZDogQWN0aW9uRm5QYXlsb2FkPHVua25vd24+LCBzdGF0ZTogdW5rbm93bikgPT4gdm9pZFxyXG4gID4sXHJcbiAgZWZmZWN0c1JlZ2lzdHJ5OiBSZWNvcmQ8c3RyaW5nLCBTdWJqZWN0PEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPj4+LFxyXG4gIHN0YXRlOiB1bmtub3duXHJcbik6IHsgYWxsOiBBY3Rpb25GbnM7IHB1YmxpY3M6IEFjdGlvbkZucyB9IHtcclxuICBpZiAoJ3B1YmxpYycgaW4gYWN0aW9uRm5TcGVjcyB8fCAncHJpdmF0ZScgaW4gYWN0aW9uRm5TcGVjcykge1xyXG4gICAgY29uc3QgcHJpdmF0ZXMgPSBhY3Rpb25GblNwZWNzWydwcml2YXRlJ10gfHwge307XHJcbiAgICBjb25zdCBwdWJsaWNzID0gYWN0aW9uRm5TcGVjc1sncHVibGljJ10gfHwge307XHJcblxyXG4gICAgYXNzZXJ0QWN0aW9uRm5TcGVjcyhwcml2YXRlcyk7XHJcbiAgICBhc3NlcnRBY3Rpb25GblNwZWNzKHB1YmxpY3MpO1xyXG5cclxuICAgIGNvbnN0IHByaXZhdGVBY3Rpb25GbnMgPSBjcmVhdGVBY3Rpb25GbnMoXHJcbiAgICAgIHByaXZhdGVzLFxyXG4gICAgICByZWR1Y2VyUmVnaXN0cnksXHJcbiAgICAgIGVmZmVjdHNSZWdpc3RyeSxcclxuICAgICAgc3RhdGVcclxuICAgICk7XHJcbiAgICBjb25zdCBwdWJsaWNBY3Rpb25GbnMgPSBjcmVhdGVBY3Rpb25GbnMoXHJcbiAgICAgIHB1YmxpY3MsXHJcbiAgICAgIHJlZHVjZXJSZWdpc3RyeSxcclxuICAgICAgZWZmZWN0c1JlZ2lzdHJ5LFxyXG4gICAgICBzdGF0ZVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhbGw6IHsgLi4ucHJpdmF0ZUFjdGlvbkZucywgLi4ucHVibGljQWN0aW9uRm5zIH0sXHJcbiAgICAgIHB1YmxpY3M6IHB1YmxpY0FjdGlvbkZucyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCBhY3Rpb25GbnMgPSBjcmVhdGVBY3Rpb25GbnMoXHJcbiAgICBhY3Rpb25GblNwZWNzLFxyXG4gICAgcmVkdWNlclJlZ2lzdHJ5LFxyXG4gICAgZWZmZWN0c1JlZ2lzdHJ5LFxyXG4gICAgc3RhdGVcclxuICApO1xyXG5cclxuICByZXR1cm4geyBhbGw6IGFjdGlvbkZucywgcHVibGljczogYWN0aW9uRm5zIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbGxSZWR1Y2VyUmVnaXN0cnkoXHJcbiAgcmVkdWNlcjogUmVkdWNlckZhY3Rvcnk8QWN0aW9uRm5zLCB1bmtub3duPixcclxuICBhY3Rpb25GbnM6IEFjdGlvbkZucyxcclxuICByZWR1Y2VyUmVnaXN0cnk6IFJlY29yZDxcclxuICAgIHN0cmluZyxcclxuICAgIChwYXlsb2FkOiBBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4sIHN0YXRlOiB1bmtub3duKSA9PiB2b2lkXHJcbiAgPlxyXG4pIHtcclxuICBmdW5jdGlvbiBvbihcclxuICAgIGFjdGlvbjogeyB0eXBlOiBzdHJpbmcgfSxcclxuICAgIHJlZHVjZXJGbjogKHBheWxvYWQ6IEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPiwgc3RhdGU6IHVua25vd24pID0+IHZvaWRcclxuICApIHtcclxuICAgIHJlZHVjZXJSZWdpc3RyeVthY3Rpb24udHlwZV0gPSByZWR1Y2VyRm47XHJcbiAgfVxyXG5cclxuICByZWR1Y2VyKGFjdGlvbkZucywgb24pO1xyXG5cclxuICByZXR1cm4gcmVkdWNlclJlZ2lzdHJ5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaWxsRWZmZWN0cyhcclxuICBlZmZlY3RzOiBFZmZlY3RzRmFjdG9yeTxBY3Rpb25GbnM+LFxyXG4gIGFjdGlvbkZuczogQWN0aW9uRm5zLFxyXG4gIGVmZmVjdHNSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+PiA9IHt9XHJcbik6IE9ic2VydmFibGU8dW5rbm93bj5bXSB7XHJcbiAgZnVuY3Rpb24gY3JlYXRlKGFjdGlvbjogeyB0eXBlOiBzdHJpbmcgfSkge1xyXG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPj4oKTtcclxuICAgIGVmZmVjdHNSZWdpc3RyeVthY3Rpb24udHlwZV0gPSBzdWJqZWN0O1xyXG4gICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBlZmZlY3RPYnNlcnZhYmxlcyA9IGVmZmVjdHMoYWN0aW9uRm5zLCBjcmVhdGUpO1xyXG4gIHJldHVybiBPYmplY3QudmFsdWVzKGVmZmVjdE9ic2VydmFibGVzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3RhcnRTdWJzY3JpcHRpb25zKG9ic2VydmFibGVzOiBPYnNlcnZhYmxlPHVua25vd24+W10pIHtcclxuICByZXR1cm4gb2JzZXJ2YWJsZXMubWFwKChvYnNlcnZhYmxlKSA9PiBvYnNlcnZhYmxlLnN1YnNjcmliZSgpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJvY2Vzc1JlZHV4PFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcywgUmV0dXJuVHlwZT4oXHJcbiAgYWN0aW9uRm5TcGVjczogU3BlYyxcclxuICByZWR1Y2VyOiBSZWR1Y2VyRmFjdG9yeTxBY3Rpb25GbnMsIHVua25vd24+LFxyXG4gIGVmZmVjdHM6IEVmZmVjdHNGYWN0b3J5PEFjdGlvbkZucz4sXHJcbiAgc3RvcmU6IHVua25vd25cclxuKSB7XHJcbiAgY29uc3QgcmVkdWNlclJlZ2lzdHJ5OiBSZWNvcmQ8XHJcbiAgICBzdHJpbmcsXHJcbiAgICAocGF5bG9hZDogQWN0aW9uRm5QYXlsb2FkPHVua25vd24+LCBzdGF0ZTogdW5rbm93bikgPT4gdm9pZFxyXG4gID4gPSB7fTtcclxuICBjb25zdCBlZmZlY3RzUmVnaXN0cnk6IFJlY29yZDxzdHJpbmcsIFN1YmplY3Q8QWN0aW9uRm5QYXlsb2FkPHVua25vd24+Pj4gPSB7fTtcclxuICBjb25zdCBhY3Rpb25zTWFwID0gY3JlYXRlUHVibGljQW5kQWxsQWN0aW9uc0ZucyhcclxuICAgIGFjdGlvbkZuU3BlY3MsXHJcbiAgICByZWR1Y2VyUmVnaXN0cnksXHJcbiAgICBlZmZlY3RzUmVnaXN0cnksXHJcbiAgICBzdG9yZVxyXG4gICk7XHJcbiAgY29uc3QgYWN0aW9uRm5zID0gYWN0aW9uc01hcC5hbGw7XHJcbiAgY29uc3QgcHVibGljQWN0aW9uc0ZucyA9IGFjdGlvbnNNYXAucHVibGljcztcclxuXHJcbiAgZmlsbFJlZHVjZXJSZWdpc3RyeShyZWR1Y2VyLCBhY3Rpb25GbnMsIHJlZHVjZXJSZWdpc3RyeSk7XHJcbiAgY29uc3QgZWZmZWN0T2JzZXJ2YWJsZXMgPSBmaWxsRWZmZWN0cyhlZmZlY3RzLCBhY3Rpb25GbnMsIGVmZmVjdHNSZWdpc3RyeSk7XHJcbiAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IHN0YXJ0U3Vic2NyaXB0aW9ucyhlZmZlY3RPYnNlcnZhYmxlcyk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2RzOiBwdWJsaWNBY3Rpb25zRm5zIGFzIFJldHVyblR5cGUsXHJcbiAgICBzdWJzY3JpcHRpb25zOiBzdWJzY3JpcHRpb25zLFxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gcmVkdXggcmVkdXhcclxuICpcclxuICogcHJvcGVydGllcyBkbyBub3Qgc3RhcnQgd2l0aCBgd2l0aGAgc2luY2UgdGhleSBhcmUgbm90IGV4dGVuc2lvbiBmdW5jdGlvbnMgb24gdGhlaXIgb3duLlxyXG4gKlxyXG4gKiBubyBkZXBlbmRlbmN5IHRvIE5nUnhcclxuICpcclxuICogYWN0aW9ucyBhcmUgcGFzc2VkIHRvIHJlZHVjZXIgYW5kIGVmZmVjdHMsIGJ1dCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBvdGhlciBhY3Rpb25zLlxyXG4gKiBlZmZlY3RzIHByb3ZpZGUgZm9yQWN0aW9uIGFuZCBkbyBub3QgcmV0dXJuIGFueXRoaW5nLiB0aGF0IGlzIGltcG9ydGFudCBiZWNhdXNlIGVmZmVjdHMgc2hvdWxkIHN0YXkgaW5hY2Nlc3NpYmxlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJlZHV4PFxyXG4gIFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcyxcclxuICBJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcclxuICBTdGF0ZUFjdGlvbkZucyBleHRlbmRzIEFjdGlvbkZuc0NyZWF0b3I8U3BlYz4gPSBBY3Rpb25GbnNDcmVhdG9yPFNwZWM+LFxyXG4gIFB1YmxpY1N0b3JlQWN0aW9uRm5zIGV4dGVuZHMgUHVibGljQWN0aW9uRm5zPFNwZWM+ID0gUHVibGljQWN0aW9uRm5zPFNwZWM+XHJcbj4ocmVkdXg6IHtcclxuICBhY3Rpb25zOiBTcGVjO1xyXG4gIHJlZHVjZXI6IFJlZHVjZXJGYWN0b3J5PFN0YXRlQWN0aW9uRm5zLCBTdGF0ZVNpZ25hbDxJbnB1dFsnc3RhdGUnXT4+O1xyXG4gIGVmZmVjdHM6IEVmZmVjdHNGYWN0b3J5PFN0YXRlQWN0aW9uRm5zPjtcclxufSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcclxuICBJbnB1dCxcclxuICBFbXB0eUZlYXR1cmVSZXN1bHQgJiB7IG1ldGhvZHM6IFB1YmxpY1N0b3JlQWN0aW9uRm5zIH1cclxuPiB7XHJcbiAgcmV0dXJuIChzdG9yZSkgPT4ge1xyXG4gICAgY29uc3QgeyBtZXRob2RzLCBzdWJzY3JpcHRpb25zIH0gPSBwcm9jZXNzUmVkdXg8U3BlYywgUHVibGljU3RvcmVBY3Rpb25GbnM+KFxyXG4gICAgICByZWR1eC5hY3Rpb25zLFxyXG4gICAgICByZWR1eC5yZWR1Y2VyIGFzIFJlZHVjZXJGYWN0b3J5PEFjdGlvbkZucywgdW5rbm93bj4sXHJcbiAgICAgIHJlZHV4LmVmZmVjdHMgYXMgRWZmZWN0c0ZhY3Rvcnk8QWN0aW9uRm5zPixcclxuICAgICAgc3RvcmVcclxuICAgICk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5zdG9yZSxcclxuICAgICAgbWV0aG9kcyxcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG4iXX0=
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZWR1eC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1yZWR1eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQU96RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQXlDOUQsTUFBTSxVQUFVLE9BQU87SUFDckIsT0FBTyxFQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUEwQjVCLFNBQVMsZUFBZSxDQUN0QixhQUFtQixFQUNuQixlQUdDLEVBQ0QsZUFBa0UsRUFDbEUsS0FBYztJQUVkLE1BQU0sU0FBUyxHQUE2QixFQUFFLENBQUM7SUFFL0MsS0FBSyxNQUFNLElBQUksSUFBSSxhQUFhLEVBQUU7UUFDaEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUU7WUFDcEMsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxPQUFPLEVBQUU7Z0JBQ1YsT0FBc0QsQ0FDckQsV0FBc0IsRUFDdEIsS0FBSyxDQUNOLENBQUM7YUFDSDtZQUNELE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFJLGFBQWEsRUFBRTtnQkFDaEIsYUFBNkMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbEU7WUFDRCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDLENBQUM7UUFDRixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcs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QUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFNUQsT0FBTztRQUNMLE9BQU8sRUFBRSxnQkFBOEI7UUFDdkMsYUFBYSxFQUFFLGFBQWE7S0FDN0IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUt2QixLQUlEO0lBSUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2YsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxZQUFZLENBQzdDLEtBQUssQ0FBQyxPQUFPLEVBQ2IsS0FBSyxDQUFDLE9BQTZDLEVBQ25ELEtBQUssQ0FBQyxPQUFvQyxFQUMxQyxLQUFLLENBQ04sQ0FBQztRQUNGLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNpZ25hbFN0b3JlRmVhdHVyZSB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuaW1wb3J0IHtcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG59IGZyb20gJ0BuZ3J4L3NpZ25hbHMvc3JjL3NpZ25hbC1zdG9yZS1tb2RlbHMnO1xuaW1wb3J0IHsgU3RhdGVTaWduYWwgfSBmcm9tICdAbmdyeC9zaWduYWxzL3NyYy9zdGF0ZS1zaWduYWwnO1xuaW1wb3J0IHsgYXNzZXJ0QWN0aW9uRm5TcGVjcyB9IGZyb20gJy4vYXNzZXJ0aW9ucy9hc3NlcnRpb25zJztcbmltcG9ydCB7IGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKiogQWN0aW9ucyAqKi9cblxudHlwZSBQYXlsb2FkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbnR5cGUgQWN0aW9uRm48XG4gIFR5cGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIEFjdGlvblBheWxvYWQgZXh0ZW5kcyBQYXlsb2FkID0gUGF5bG9hZFxuPiA9ICgocGF5bG9hZDogQWN0aW9uUGF5bG9hZCkgPT4gQWN0aW9uUGF5bG9hZCAmIHsgdHlwZTogVHlwZSB9KSAmIHtcbiAgdHlwZTogVHlwZTtcbn07XG5cbnR5cGUgQWN0aW9uRm5zID0gUmVjb3JkPHN0cmluZywgQWN0aW9uRm4+O1xuXG5leHBvcnQgdHlwZSBBY3Rpb25zRm5TcGVjcyA9IFJlY29yZDxzdHJpbmcsIFBheWxvYWQ+O1xuXG50eXBlIEFjdGlvbkZuQ3JlYXRvcjxTcGVjIGV4dGVuZHMgQWN0aW9uc0ZuU3BlY3M+ID0ge1xuICBbQWN0aW9uTmFtZSBpbiBrZXlvZiBTcGVjXTogKChcbiAgICBwYXlsb2FkOiBTcGVjW0FjdGlvbk5hbWVdXG4gICkgPT4gU3BlY1tBY3Rpb25OYW1lXSAmIHsgdHlwZTogQWN0aW9uTmFtZSB9KSAmIHsgdHlwZTogQWN0aW9uTmFtZSAmIHN0cmluZyB9O1xufTtcblxudHlwZSBBY3Rpb25GblBheWxvYWQ8QWN0aW9uPiA9IEFjdGlvbiBleHRlbmRzIChwYXlsb2FkOiBpbmZlciBQYXlsb2FkKSA9PiB2b2lkXG4gID8gUGF5bG9hZFxuICA6IG5ldmVyO1xuXG50eXBlIEFjdGlvbkZuc0NyZWF0b3I8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPiA9IFNwZWMgZXh0ZW5kcyB7XG4gIHByaXZhdGU6IFJlY29yZDxzdHJpbmcsIFBheWxvYWQ+O1xuICBwdWJsaWM6IFJlY29yZDxzdHJpbmcsIFBheWxvYWQ+O1xufVxuICA/IEFjdGlvbkZuQ3JlYXRvcjxTcGVjWydwcml2YXRlJ10+ICYgQWN0aW9uRm5DcmVhdG9yPFNwZWNbJ3B1YmxpYyddPlxuICA6IEFjdGlvbkZuQ3JlYXRvcjxTcGVjPjtcblxudHlwZSBQdWJsaWNBY3Rpb25GbnM8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPiA9IFNwZWMgZXh0ZW5kcyB7XG4gIHB1YmxpYzogUmVjb3JkPHN0cmluZywgUGF5bG9hZD47XG59XG4gID8gQWN0aW9uRm5DcmVhdG9yPFNwZWNbJ3B1YmxpYyddPlxuICA6IEFjdGlvbkZuQ3JlYXRvcjxTcGVjPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBheWxvYWQ8VHlwZSBleHRlbmRzIFBheWxvYWQ+KCk6IFR5cGUge1xuICByZXR1cm4ge30gYXMgVHlwZTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vUGF5bG9hZCA9IHt9O1xuXG4vKiogUmVkdWNlciAqKi9cblxudHlwZSBSZWR1Y2VyRnVuY3Rpb248UmVkdWNlckFjdGlvbiwgU3RhdGU+ID0gKFxuICBhY3Rpb246IEFjdGlvbkZuUGF5bG9hZDxSZWR1Y2VyQWN0aW9uPixcbiAgc3RhdGU6IFN0YXRlXG4pID0+IHZvaWQ7XG5cbnR5cGUgUmVkdWNlckZhY3Rvcnk8U3RhdGVBY3Rpb25GbnMgZXh0ZW5kcyBBY3Rpb25GbnMsIFN0YXRlPiA9IChcbiAgYWN0aW9uczogU3RhdGVBY3Rpb25GbnMsXG4gIG9uOiA8UmVkdWNlckFjdGlvbiBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+KFxuICAgIGFjdGlvbjogUmVkdWNlckFjdGlvbixcbiAgICByZWR1Y2VyRm46IFJlZHVjZXJGdW5jdGlvbjxBY3Rpb25GblBheWxvYWQ8UmVkdWNlckFjdGlvbj4sIFN0YXRlPlxuICApID0+IHZvaWRcbikgPT4gdm9pZDtcblxuLyoqIEVmZmVjdCAqKi9cblxudHlwZSBFZmZlY3RzRmFjdG9yeTxTdGF0ZUFjdGlvbkZucyBleHRlbmRzIEFjdGlvbkZucz4gPSAoXG4gIGFjdGlvbnM6IFN0YXRlQWN0aW9uRm5zLFxuICBjcmVhdGU6IDxFZmZlY3RBY3Rpb24gZXh0ZW5kcyB7IHR5cGU6IHN0cmluZyB9PihcbiAgICBhY3Rpb246IEVmZmVjdEFjdGlvblxuICApID0+IE9ic2VydmFibGU8QWN0aW9uRm5QYXlsb2FkPEVmZmVjdEFjdGlvbj4+XG4pID0+IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8dW5rbm93bj4+O1xuXG5mdW5jdGlvbiBjcmVhdGVBY3Rpb25GbnM8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPihcbiAgYWN0aW9uRm5TcGVjczogU3BlYyxcbiAgcmVkdWNlclJlZ2lzdHJ5OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIChwYXlsb2FkOiBBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4sIHN0YXRlOiB1bmtub3duKSA9PiB2b2lkXG4gID4sXG4gIGVmZmVjdHNSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+PixcbiAgc3RhdGU6IHVua25vd25cbikge1xuICBjb25zdCBhY3Rpb25GbnM6IFJlY29yZDxzdHJpbmcsIEFjdGlvbkZuPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgdHlwZSBpbiBhY3Rpb25GblNwZWNzKSB7XG4gICAgY29uc3QgYWN0aW9uRm4gPSAocGF5bG9hZDogUGF5bG9hZCkgPT4ge1xuICAgICAgY29uc3QgZnVsbFBheWxvYWQgPSB7IC4uLnBheWxvYWQsIHR5cGUgfTtcbiAgICAgIGNvbnN0IHJlZHVjZXIgPSByZWR1Y2VyUmVnaXN0cnlbdHlwZV07XG4gICAgICBpZiAocmVkdWNlcikge1xuICAgICAgICAocmVkdWNlciBhcyAocGF5bG9hZDogdW5rbm93biwgc3RhdGU6IHVua25vd24pID0+IHZvaWQpKFxuICAgICAgICAgIGZ1bGxQYXlsb2FkIGFzIHVua25vd24sXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVmZmVjdFN1YmplY3QgPSBlZmZlY3RzUmVnaXN0cnlbdHlwZV07XG4gICAgICBpZiAoZWZmZWN0U3ViamVjdCkge1xuICAgICAgICAoZWZmZWN0U3ViamVjdCBhcyB1bmtub3duIGFzIFN1YmplY3Q8dW5rbm93bj4pLm5leHQoZnVsbFBheWxvYWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bGxQYXlsb2FkO1xuICAgIH07XG4gICAgYWN0aW9uRm4udHlwZSA9IHR5cGUudG9TdHJpbmcoKTtcbiAgICBhY3Rpb25GbnNbdHlwZV0gPSBhY3Rpb25GbjtcbiAgfVxuXG4gIHJldHVybiBhY3Rpb25GbnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVB1YmxpY0FuZEFsbEFjdGlvbnNGbnM8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPihcbiAgYWN0aW9uRm5TcGVjczogU3BlYyxcbiAgcmVkdWNlclJlZ2lzdHJ5OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIChwYXlsb2FkOiBBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4sIHN0YXRlOiB1bmtub3duKSA9PiB2b2lkXG4gID4sXG4gIGVmZmVjdHNSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+PixcbiAgc3RhdGU6IHVua25vd25cbik6IHsgYWxsOiBBY3Rpb25GbnM7IHB1YmxpY3M6IEFjdGlvbkZucyB9IHtcbiAgaWYgKCdwdWJsaWMnIGluIGFjdGlvbkZuU3BlY3MgfHwgJ3ByaXZhdGUnIGluIGFjdGlvbkZuU3BlY3MpIHtcbiAgICBjb25zdCBwcml2YXRlcyA9IGFjdGlvbkZuU3BlY3NbJ3ByaXZhdGUnXSB8fCB7fTtcbiAgICBjb25zdCBwdWJsaWNzID0gYWN0aW9uRm5TcGVjc1sncHVibGljJ10gfHwge307XG5cbiAgICBhc3NlcnRBY3Rpb25GblNwZWNzKHByaXZhdGVzKTtcbiAgICBhc3NlcnRBY3Rpb25GblNwZWNzKHB1YmxpY3MpO1xuXG4gICAgY29uc3QgcHJpdmF0ZUFjdGlvbkZucyA9IGNyZWF0ZUFjdGlvbkZucyhcbiAgICAgIHByaXZhdGVzLFxuICAgICAgcmVkdWNlclJlZ2lzdHJ5LFxuICAgICAgZWZmZWN0c1JlZ2lzdHJ5LFxuICAgICAgc3RhdGVcbiAgICApO1xuICAgIGNvbnN0IHB1YmxpY0FjdGlvbkZucyA9IGNyZWF0ZUFjdGlvbkZucyhcbiAgICAgIHB1YmxpY3MsXG4gICAgICByZWR1Y2VyUmVnaXN0cnksXG4gICAgICBlZmZlY3RzUmVnaXN0cnksXG4gICAgICBzdGF0ZVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWxsOiB7IC4uLnByaXZhdGVBY3Rpb25GbnMsIC4uLnB1YmxpY0FjdGlvbkZucyB9LFxuICAgICAgcHVibGljczogcHVibGljQWN0aW9uRm5zLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBhY3Rpb25GbnMgPSBjcmVhdGVBY3Rpb25GbnMoXG4gICAgYWN0aW9uRm5TcGVjcyxcbiAgICByZWR1Y2VyUmVnaXN0cnksXG4gICAgZWZmZWN0c1JlZ2lzdHJ5LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIHsgYWxsOiBhY3Rpb25GbnMsIHB1YmxpY3M6IGFjdGlvbkZucyB9O1xufVxuXG5mdW5jdGlvbiBmaWxsUmVkdWNlclJlZ2lzdHJ5KFxuICByZWR1Y2VyOiBSZWR1Y2VyRmFjdG9yeTxBY3Rpb25GbnMsIHVua25vd24+LFxuICBhY3Rpb25GbnM6IEFjdGlvbkZucyxcbiAgcmVkdWNlclJlZ2lzdHJ5OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIChwYXlsb2FkOiBBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4sIHN0YXRlOiB1bmtub3duKSA9PiB2b2lkXG4gID5cbikge1xuICBmdW5jdGlvbiBvbihcbiAgICBhY3Rpb246IHsgdHlwZTogc3RyaW5nIH0sXG4gICAgcmVkdWNlckZuOiAocGF5bG9hZDogQWN0aW9uRm5QYXlsb2FkPHVua25vd24+LCBzdGF0ZTogdW5rbm93bikgPT4gdm9pZFxuICApIHtcbiAgICByZWR1Y2VyUmVnaXN0cnlbYWN0aW9uLnR5cGVdID0gcmVkdWNlckZuO1xuICB9XG5cbiAgcmVkdWNlcihhY3Rpb25GbnMsIG9uKTtcblxuICByZXR1cm4gcmVkdWNlclJlZ2lzdHJ5O1xufVxuXG5mdW5jdGlvbiBmaWxsRWZmZWN0cyhcbiAgZWZmZWN0czogRWZmZWN0c0ZhY3Rvcnk8QWN0aW9uRm5zPixcbiAgYWN0aW9uRm5zOiBBY3Rpb25GbnMsXG4gIGVmZmVjdHNSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+PiA9IHt9XG4pOiBPYnNlcnZhYmxlPHVua25vd24+W10ge1xuICBmdW5jdGlvbiBjcmVhdGUoYWN0aW9uOiB7IHR5cGU6IHN0cmluZyB9KSB7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPj4oKTtcbiAgICBlZmZlY3RzUmVnaXN0cnlbYWN0aW9uLnR5cGVdID0gc3ViamVjdDtcbiAgICByZXR1cm4gc3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0IGVmZmVjdE9ic2VydmFibGVzID0gZWZmZWN0cyhhY3Rpb25GbnMsIGNyZWF0ZSk7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKGVmZmVjdE9ic2VydmFibGVzKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRTdWJzY3JpcHRpb25zKG9ic2VydmFibGVzOiBPYnNlcnZhYmxlPHVua25vd24+W10pIHtcbiAgcmV0dXJuIG9ic2VydmFibGVzLm1hcCgob2JzZXJ2YWJsZSkgPT4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoKSk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NSZWR1eDxTcGVjIGV4dGVuZHMgQWN0aW9uc0ZuU3BlY3MsIFJldHVyblR5cGU+KFxuICBhY3Rpb25GblNwZWNzOiBTcGVjLFxuICByZWR1Y2VyOiBSZWR1Y2VyRmFjdG9yeTxBY3Rpb25GbnMsIHVua25vd24+LFxuICBlZmZlY3RzOiBFZmZlY3RzRmFjdG9yeTxBY3Rpb25GbnM+LFxuICBzdG9yZTogdW5rbm93blxuKSB7XG4gIGNvbnN0IHJlZHVjZXJSZWdpc3RyeTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICAocGF5bG9hZDogQWN0aW9uRm5QYXlsb2FkPHVua25vd24+LCBzdGF0ZTogdW5rbm93bikgPT4gdm9pZFxuICA+ID0ge307XG4gIGNvbnN0IGVmZmVjdHNSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+PiA9IHt9O1xuICBjb25zdCBhY3Rpb25zTWFwID0gY3JlYXRlUHVibGljQW5kQWxsQWN0aW9uc0ZucyhcbiAgICBhY3Rpb25GblNwZWNzLFxuICAgIHJlZHVjZXJSZWdpc3RyeSxcbiAgICBlZmZlY3RzUmVnaXN0cnksXG4gICAgc3RvcmVcbiAgKTtcbiAgY29uc3QgYWN0aW9uRm5zID0gYWN0aW9uc01hcC5hbGw7XG4gIGNvbnN0IHB1YmxpY0FjdGlvbnNGbnMgPSBhY3Rpb25zTWFwLnB1YmxpY3M7XG5cbiAgZmlsbFJlZHVjZXJSZWdpc3RyeShyZWR1Y2VyLCBhY3Rpb25GbnMsIHJlZHVjZXJSZWdpc3RyeSk7XG4gIGNvbnN0IGVmZmVjdE9ic2VydmFibGVzID0gZmlsbEVmZmVjdHMoZWZmZWN0cywgYWN0aW9uRm5zLCBlZmZlY3RzUmVnaXN0cnkpO1xuICBjb25zdCBzdWJzY3JpcHRpb25zID0gc3RhcnRTdWJzY3JpcHRpb25zKGVmZmVjdE9ic2VydmFibGVzKTtcblxuICByZXR1cm4ge1xuICAgIG1ldGhvZHM6IHB1YmxpY0FjdGlvbnNGbnMgYXMgUmV0dXJuVHlwZSxcbiAgICBzdWJzY3JpcHRpb25zOiBzdWJzY3JpcHRpb25zLFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWR1eCByZWR1eFxuICpcbiAqIHByb3BlcnRpZXMgZG8gbm90IHN0YXJ0IHdpdGggYHdpdGhgIHNpbmNlIHRoZXkgYXJlIG5vdCBleHRlbnNpb24gZnVuY3Rpb25zIG9uIHRoZWlyIG93bi5cbiAqXG4gKiBubyBkZXBlbmRlbmN5IHRvIE5nUnhcbiAqXG4gKiBhY3Rpb25zIGFyZSBwYXNzZWQgdG8gcmVkdWNlciBhbmQgZWZmZWN0cywgYnV0IGl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIG90aGVyIGFjdGlvbnMuXG4gKiBlZmZlY3RzIHByb3ZpZGUgZm9yQWN0aW9uIGFuZCBkbyBub3QgcmV0dXJuIGFueXRoaW5nLiB0aGF0IGlzIGltcG9ydGFudCBiZWNhdXNlIGVmZmVjdHMgc2hvdWxkIHN0YXkgaW5hY2Nlc3NpYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVkdXg8XG4gIFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcyxcbiAgSW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIFN0YXRlQWN0aW9uRm5zIGV4dGVuZHMgQWN0aW9uRm5zQ3JlYXRvcjxTcGVjPiA9IEFjdGlvbkZuc0NyZWF0b3I8U3BlYz4sXG4gIFB1YmxpY1N0b3JlQWN0aW9uRm5zIGV4dGVuZHMgUHVibGljQWN0aW9uRm5zPFNwZWM+ID0gUHVibGljQWN0aW9uRm5zPFNwZWM+XG4+KHJlZHV4OiB7XG4gIGFjdGlvbnM6IFNwZWM7XG4gIHJlZHVjZXI6IFJlZHVjZXJGYWN0b3J5PFN0YXRlQWN0aW9uRm5zLCBTdGF0ZVNpZ25hbDxJbnB1dFsnc3RhdGUnXT4+O1xuICBlZmZlY3RzOiBFZmZlY3RzRmFjdG9yeTxTdGF0ZUFjdGlvbkZucz47XG59KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBJbnB1dCxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0ICYgeyBtZXRob2RzOiBQdWJsaWNTdG9yZUFjdGlvbkZucyB9XG4+IHtcbiAgcmV0dXJuIChzdG9yZSkgPT4ge1xuICAgIGNvbnN0IHsgbWV0aG9kcywgc3Vic2NyaXB0aW9ucyB9ID0gcHJvY2Vzc1JlZHV4PFNwZWMsIFB1YmxpY1N0b3JlQWN0aW9uRm5zPihcbiAgICAgIHJlZHV4LmFjdGlvbnMsXG4gICAgICByZWR1eC5yZWR1Y2VyIGFzIFJlZHVjZXJGYWN0b3J5PEFjdGlvbkZucywgdW5rbm93bj4sXG4gICAgICByZWR1eC5lZmZlY3RzIGFzIEVmZmVjdHNGYWN0b3J5PEFjdGlvbkZucz4sXG4gICAgICBzdG9yZVxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0b3JlLFxuICAgICAgbWV0aG9kcyxcbiAgICB9O1xuICB9O1xufVxuIl19
|
|
@@ -90,4 +90,4 @@ export function withUndoRedo(options = {}) {
|
|
|
90
90
|
}
|
|
91
91
|
}));
|
|
92
92
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC11bmRvLXJlZG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtdW5kby1yZWRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0IsVUFBVSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpILE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUUsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVXpELE1BQU0sY0FBYyxHQUE4QjtJQUM5QyxZQUFZLEVBQUUsR0FBRztDQUNwQixDQUFDO0FBWUYsTUFBTSxVQUFVLGVBQWUsQ0FBQyxXQUFzQjtJQUNsRCxJQUFJLFdBQVcsRUFBRTtRQUNiLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7S0FDN0c7SUFDRCxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQXdDRCxNQUFNLFVBQVUsWUFBWSxDQUE0QixVQUdwRCxFQUFFO0lBR0YsSUFBSSxRQUFRLEdBQXFCLElBQUksQ0FBQztJQUN0QyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFckIsTUFBTSxVQUFVLEdBQUc7UUFDZixHQUFHLGNBQWM7UUFDakIsR0FBRyxPQUFPO0tBQ2IsQ0FBQztJQUVGLEVBQUU7SUFDRiw0Q0FBNEM7SUFDNUMsa0JBQWtCO0lBQ2xCLEVBQUU7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UUFBUSxHQUFHLElBQUksQ0FBQztnQkFFaEIsMkNBQTJDO2dCQUMzQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7S0FDSixDQUFDLENBRUwsQ0FBQTtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWxTdG9yZUZlYXR1cmUsIHBhdGNoU3RhdGUsIHNpZ25hbFN0b3JlRmVhdHVyZSwgd2l0aENvbXB1dGVkLCB3aXRoSG9va3MsIHdpdGhNZXRob2RzIH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHNcIjtcclxuaW1wb3J0IHsgRW50aXR5SWQsIEVudGl0eU1hcCwgRW50aXR5U3RhdGUgfSBmcm9tIFwiQG5ncngvc2lnbmFscy9lbnRpdGllc1wiO1xyXG5pbXBvcnQgeyBTaWduYWwsIGVmZmVjdCwgc2lnbmFsLCB1bnRyYWNrZWQsIGlzU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRW50aXR5U2lnbmFscywgTmFtZWRFbnRpdHlTaWduYWxzIH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHMvZW50aXRpZXMvc3JjL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBFbnRpdHksIGNhcGl0YWxpemUgfSBmcm9tIFwiLi93aXRoLWRhdGEtc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFbXRweSB9IGZyb20gXCIuL3NoYXJlZC9lbXB0eVwiO1xyXG5cclxuZXhwb3J0IHR5cGUgU3RhY2tJdGVtID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcblxyXG5leHBvcnQgdHlwZSBOb3JtYWxpemVkVW5kb1JlZG9PcHRpb25zID0ge1xyXG4gICAgbWF4U3RhY2tTaXplOiBudW1iZXI7XHJcbiAgICBjb2xsZWN0aW9ucz86IHN0cmluZ1tdXHJcbn1cclxuXHJcbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOb3JtYWxpemVkVW5kb1JlZG9PcHRpb25zID0ge1xyXG4gICAgbWF4U3RhY2tTaXplOiAxMDBcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIE5hbWVkVW5kb1JlZG9TdGF0ZTxDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPiA9IHtcclxuICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7S31FbnRpdHlNYXBgXTogRW50aXR5TWFwPEVudGl0eT47XHJcbn0gJiB7XHJcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtLfUlkc2BdOiBFbnRpdHlJZFtdO1xyXG4gICAgfVxyXG5cclxuZXhwb3J0IHR5cGUgTmFtZWRVbmRvUmVkb1NpZ25hbHM8Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPSB7XHJcbiAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0t9RW50aXRpZXNgXTogU2lnbmFsPEVudGl0eVtdPlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5kb1JlZG9LZXlzKGNvbGxlY3Rpb25zPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoY29sbGVjdGlvbnMpIHtcclxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuZmxhdE1hcChjID0+IFtgJHtjfUVudGl0eU1hcGAsIGAke2N9SWRzYCwgYHNlbGVjdGVkJHtjYXBpdGFsaXplKGMpfUlkc2AsIGAke2N9RmlsdGVyYF0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gWydlbnRpdHlNYXAnLCAnaWRzJywgJ3NlbGVjdGVkSWRzJywgJ2ZpbHRlciddO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd2l0aFVuZG9SZWRvPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM/OiB7IG1heFN0YWNrU2l6ZT86IG51bWJlcjsgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25bXSB9KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxyXG4gICAge1xyXG4gICAgICAgIHN0YXRlOiBFbXRweSxcclxuICAgICAgICAvLyBUaGlzIGFsdGVybmF0aXZlIGJyZWFrcyB0eXBlIGluZmVyZW5jZTpcclxuICAgICAgICAvLyBzdGF0ZTogTmFtZWRFbnRpdHlTdGF0ZTxFbnRpdHksIENvbGxlY3Rpb24+XHJcbiAgICAgICAgc2lnbmFsczogTmFtZWRFbnRpdHlTaWduYWxzPEVudGl0eSwgQ29sbGVjdGlvbj4sXHJcbiAgICAgICAgbWV0aG9kczogRW10cHlcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgc3RhdGU6IEVtdHB5LFxyXG4gICAgICAgIHNpZ25hbHM6IHtcclxuICAgICAgICAgICAgY2FuVW5kbzogU2lnbmFsPGJvb2xlYW4+LFxyXG4gICAgICAgICAgICBjYW5SZWRvOiBTaWduYWw8Ym9vbGVhbj5cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgdW5kbzogKCkgPT4gdm9pZCxcclxuICAgICAgICAgICAgcmVkbzogKCkgPT4gdm9pZFxyXG4gICAgICAgIH1cclxuICAgIH0+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhVbmRvUmVkbyhvcHRpb25zPzogeyBtYXhTdGFja1NpemU/OiBudW1iZXIgfSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcclxuICAgIHtcclxuICAgICAgICBzdGF0ZTogRW50aXR5U3RhdGU8RW50aXR5PixcclxuICAgICAgICBzaWduYWxzOiBFbnRpdHlTaWduYWxzPEVudGl0eT4sXHJcbiAgICAgICAgbWV0aG9kczogRW10cHlcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgc3RhdGU6IEVtdHB5LFxyXG4gICAgICAgIHNpZ25hbHM6IHtcclxuICAgICAgICAgICAgY2FuVW5kbzogU2lnbmFsPGJvb2xlYW4+LFxyXG4gICAgICAgICAgICBjYW5SZWRvOiBTaWduYWw8Ym9vbGVhbj5cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgdW5kbzogKCkgPT4gdm9pZCxcclxuICAgICAgICAgICAgcmVkbzogKCkgPT4gdm9pZFxyXG4gICAgICAgIH1cclxuICAgIH0+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhVbmRvUmVkbzxDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihvcHRpb25zOiB7XHJcbiAgICBtYXhTdGFja1NpemU/OiBudW1iZXI7XHJcbiAgICBjb2xsZWN0aW9ucz86IENvbGxlY3Rpb25bXVxyXG59ID0ge30pOiBcclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuU2lnbmFsU3RvcmVGZWF0dXJlPGFueSwgYW55PiB7XHJcbiAgICBsZXQgcHJldmlvdXM6IFN0YWNrSXRlbSB8IG51bGwgPSBudWxsO1xyXG4gICAgbGV0IHNraXBPbmNlID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHtcclxuICAgICAgICAuLi5kZWZhdWx0T3B0aW9ucyxcclxuICAgICAgICAuLi5vcHRpb25zXHJcbiAgICB9O1xyXG5cclxuICAgIC8vXHJcbiAgICAvLyBEZXNpZ24gRGVjaXNpb246IFRoaXMgZmVhdHVyZSBoYXMgaXRzIG93blxyXG4gICAgLy8gaW50ZXJuYWwgc3RhdGUuXHJcbiAgICAvL1xyXG5cclxuICAgIGNvbnN0IHVuZG9TdGFjazogU3RhY2tJdGVtW10gPSBbXTtcclxuICAgIGNvbnN0IHJlZG9TdGFjazogU3RhY2tJdGVtW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBjYW5VbmRvID0gc2lnbmFsKGZhbHNlKTtcclxuICAgIGNvbnN0IGNhblJlZG8gPSBzaWduYWwoZmFsc2UpO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZUludGVybmFsID0gKCkgPT4ge1xyXG4gICAgICAgIGNhblVuZG8uc2V0KHVuZG9TdGFjay5sZW5ndGggIT09IDApO1xyXG4gICAgICAgIGNhblJlZG8uc2V0KHJlZG9TdGFjay5sZW5ndGggIT09IDApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBrZXlzID0gZ2V0VW5kb1JlZG9LZXlzKG5vcm1hbGl6ZWQ/LmNvbGxlY3Rpb25zKTtcclxuXHJcbiAgICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxyXG5cclxuICAgICAgICB3aXRoQ29tcHV0ZWQoKCkgPT4gKHtcclxuICAgICAgICAgICAgY2FuVW5kbzogY2FuVW5kby5hc1JlYWRvbmx5KCksXHJcbiAgICAgICAgICAgIGNhblJlZG86IGNhblJlZG8uYXNSZWFkb25seSgpXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHdpdGhNZXRob2RzKChzdG9yZSkgPT4gKHtcclxuICAgICAgICAgICAgdW5kbygpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB1bmRvU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gJiYgcHJldmlvdXMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWRvU3RhY2sucHVzaChwcmV2aW91cyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBza2lwT25jZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHVwZGF0ZUludGVybmFsKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlZG8oKTogdm9pZCB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gcmVkb1N0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIHByZXZpb3VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5kb1N0YWNrLnB1c2gocHJldmlvdXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2tpcE9uY2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gaXRlbTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVJbnRlcm5hbCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHdpdGhIb29rcyh7XHJcbiAgICAgICAgICAgIG9uSW5pdChzdG9yZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcclxuICAgICAgICAgICAgICAgIGVmZmVjdCgoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbmQgPSBrZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHN0b3JlW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzICYmIGlzU2lnbmFsKHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFjYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5XTogcygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgICAgICAgICAgICB9LCB7fSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChza2lwT25jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwT25jZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciByZWRvU3RhY2sgYWZ0ZXIgcmVjb3JkZWQgYWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgcmVkb1N0YWNrLnNwbGljZSgwKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZG9TdGFjay5wdXNoKHByZXZpb3VzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWRvU3RhY2subGVuZ3RoID4gbm9ybWFsaXplZC5tYXhTdGFja1NpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kb1N0YWNrLnVuc2hpZnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gY2FuZDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvcG9nYXRlIGN1cnJlbnQgcmVhY3RpdmUgY29udGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB1cGRhdGVJbnRlcm5hbCgpKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgIClcclxufVxyXG4iXX0=
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC11bmRvLXJlZG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtdW5kby1yZWRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0IsVUFBVSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpILE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUUsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVXpELE1BQU0sY0FBYyxHQUE4QjtJQUM5QyxZQUFZLEVBQUUsR0FBRztDQUNwQixDQUFDO0FBWUYsTUFBTSxVQUFVLGVBQWUsQ0FBQyxXQUFzQjtJQUNsRCxJQUFJLFdBQVcsRUFBRTtRQUNiLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7S0FDN0c7SUFDRCxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQXdDRCxNQUFNLFVBQVUsWUFBWSxDQUE0QixVQUdwRCxFQUFFO0lBR0YsSUFBSSxRQUFRLEdBQXFCLElBQUksQ0FBQztJQUN0QyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFckIsTUFBTSxVQUFVLEdBQUc7UUFDZixHQUFHLGNBQWM7UUFDakIsR0FBRyxPQUFPO0tBQ2IsQ0FBQztJQUVGLEVBQUU7SUFDRiw0Q0FBNEM7SUFDNUMsa0JBQWtCO0lBQ2xCLEVBQUU7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UUFBUSxHQUFHLElBQUksQ0FBQztnQkFFaEIsMkNBQTJDO2dCQUMzQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7S0FDSixDQUFDLENBRUwsQ0FBQTtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWxTdG9yZUZlYXR1cmUsIHBhdGNoU3RhdGUsIHNpZ25hbFN0b3JlRmVhdHVyZSwgd2l0aENvbXB1dGVkLCB3aXRoSG9va3MsIHdpdGhNZXRob2RzIH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHNcIjtcbmltcG9ydCB7IEVudGl0eUlkLCBFbnRpdHlNYXAsIEVudGl0eVN0YXRlIH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHMvZW50aXRpZXNcIjtcbmltcG9ydCB7IFNpZ25hbCwgZWZmZWN0LCBzaWduYWwsIHVudHJhY2tlZCwgaXNTaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRW50aXR5U2lnbmFscywgTmFtZWRFbnRpdHlTaWduYWxzIH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHMvZW50aXRpZXMvc3JjL21vZGVsc1wiO1xuaW1wb3J0IHsgRW50aXR5LCBjYXBpdGFsaXplIH0gZnJvbSBcIi4vd2l0aC1kYXRhLXNlcnZpY2VcIjtcbmltcG9ydCB7IEVtdHB5IH0gZnJvbSBcIi4vc2hhcmVkL2VtcHR5XCI7XG5cbmV4cG9ydCB0eXBlIFN0YWNrSXRlbSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBOb3JtYWxpemVkVW5kb1JlZG9PcHRpb25zID0ge1xuICAgIG1heFN0YWNrU2l6ZTogbnVtYmVyO1xuICAgIGNvbGxlY3Rpb25zPzogc3RyaW5nW11cbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5vcm1hbGl6ZWRVbmRvUmVkb09wdGlvbnMgPSB7XG4gICAgbWF4U3RhY2tTaXplOiAxMDBcbn07XG5cbmV4cG9ydCB0eXBlIE5hbWVkVW5kb1JlZG9TdGF0ZTxDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0t9RW50aXR5TWFwYF06IEVudGl0eU1hcDxFbnRpdHk+O1xufSAmIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtLfUlkc2BdOiBFbnRpdHlJZFtdO1xuICAgIH1cblxuZXhwb3J0IHR5cGUgTmFtZWRVbmRvUmVkb1NpZ25hbHM8Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPSB7XG4gICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtLfUVudGl0aWVzYF06IFNpZ25hbDxFbnRpdHlbXT5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuZG9SZWRvS2V5cyhjb2xsZWN0aW9ucz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGlmIChjb2xsZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuZmxhdE1hcChjID0+IFtgJHtjfUVudGl0eU1hcGAsIGAke2N9SWRzYCwgYHNlbGVjdGVkJHtjYXBpdGFsaXplKGMpfUlkc2AsIGAke2N9RmlsdGVyYF0pXG4gICAgfVxuICAgIHJldHVybiBbJ2VudGl0eU1hcCcsICdpZHMnLCAnc2VsZWN0ZWRJZHMnLCAnZmlsdGVyJ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVW5kb1JlZG88Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4ob3B0aW9ucz86IHsgbWF4U3RhY2tTaXplPzogbnVtYmVyOyBjb2xsZWN0aW9uczogQ29sbGVjdGlvbltdIH0pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gICAge1xuICAgICAgICBzdGF0ZTogRW10cHksXG4gICAgICAgIC8vIFRoaXMgYWx0ZXJuYXRpdmUgYnJlYWtzIHR5cGUgaW5mZXJlbmNlOlxuICAgICAgICAvLyBzdGF0ZTogTmFtZWRFbnRpdHlTdGF0ZTxFbnRpdHksIENvbGxlY3Rpb24+XG4gICAgICAgIHNpZ25hbHM6IE5hbWVkRW50aXR5U2lnbmFsczxFbnRpdHksIENvbGxlY3Rpb24+LFxuICAgICAgICBtZXRob2RzOiBFbXRweVxuICAgIH0sXG4gICAge1xuICAgICAgICBzdGF0ZTogRW10cHksXG4gICAgICAgIHNpZ25hbHM6IHtcbiAgICAgICAgICAgIGNhblVuZG86IFNpZ25hbDxib29sZWFuPixcbiAgICAgICAgICAgIGNhblJlZG86IFNpZ25hbDxib29sZWFuPlxuICAgICAgICB9LFxuICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICB1bmRvOiAoKSA9PiB2b2lkLFxuICAgICAgICAgICAgcmVkbzogKCkgPT4gdm9pZFxuICAgICAgICB9XG4gICAgfT47XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVW5kb1JlZG8ob3B0aW9ucz86IHsgbWF4U3RhY2tTaXplPzogbnVtYmVyIH0pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gICAge1xuICAgICAgICBzdGF0ZTogRW50aXR5U3RhdGU8RW50aXR5PixcbiAgICAgICAgc2lnbmFsczogRW50aXR5U2lnbmFsczxFbnRpdHk+LFxuICAgICAgICBtZXRob2RzOiBFbXRweVxuICAgIH0sXG4gICAge1xuICAgICAgICBzdGF0ZTogRW10cHksXG4gICAgICAgIHNpZ25hbHM6IHtcbiAgICAgICAgICAgIGNhblVuZG86IFNpZ25hbDxib29sZWFuPixcbiAgICAgICAgICAgIGNhblJlZG86IFNpZ25hbDxib29sZWFuPlxuICAgICAgICB9LFxuICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICB1bmRvOiAoKSA9PiB2b2lkLFxuICAgICAgICAgICAgcmVkbzogKCkgPT4gdm9pZFxuICAgICAgICB9XG4gICAgfT47XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVW5kb1JlZG88Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4ob3B0aW9uczoge1xuICAgIG1heFN0YWNrU2l6ZT86IG51bWJlcjtcbiAgICBjb2xsZWN0aW9ucz86IENvbGxlY3Rpb25bXVxufSA9IHt9KTogXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuU2lnbmFsU3RvcmVGZWF0dXJlPGFueSwgYW55PiB7XG4gICAgbGV0IHByZXZpb3VzOiBTdGFja0l0ZW0gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgc2tpcE9uY2UgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgfTtcblxuICAgIC8vXG4gICAgLy8gRGVzaWduIERlY2lzaW9uOiBUaGlzIGZlYXR1cmUgaGFzIGl0cyBvd25cbiAgICAvLyBpbnRlcm5hbCBzdGF0ZS5cbiAgICAvL1xuXG4gICAgY29uc3QgdW5kb1N0YWNrOiBTdGFja0l0ZW1bXSA9IFtdO1xuICAgIGNvbnN0IHJlZG9TdGFjazogU3RhY2tJdGVtW10gPSBbXTtcblxuICAgIGNvbnN0IGNhblVuZG8gPSBzaWduYWwoZmFsc2UpO1xuICAgIGNvbnN0IGNhblJlZG8gPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgY29uc3QgdXBkYXRlSW50ZXJuYWwgPSAoKSA9PiB7XG4gICAgICAgIGNhblVuZG8uc2V0KHVuZG9TdGFjay5sZW5ndGggIT09IDApO1xuICAgICAgICBjYW5SZWRvLnNldChyZWRvU3RhY2subGVuZ3RoICE9PSAwKTtcbiAgICB9O1xuXG4gICAgY29uc3Qga2V5cyA9IGdldFVuZG9SZWRvS2V5cyhub3JtYWxpemVkPy5jb2xsZWN0aW9ucyk7XG5cbiAgICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuXG4gICAgICAgIHdpdGhDb21wdXRlZCgoKSA9PiAoe1xuICAgICAgICAgICAgY2FuVW5kbzogY2FuVW5kby5hc1JlYWRvbmx5KCksXG4gICAgICAgICAgICBjYW5SZWRvOiBjYW5SZWRvLmFzUmVhZG9ubHkoKVxuICAgICAgICB9KSksXG4gICAgICAgIHdpdGhNZXRob2RzKChzdG9yZSkgPT4gKHtcbiAgICAgICAgICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHVuZG9TdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIHByZXZpb3VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZG9TdGFjay5wdXNoKHByZXZpb3VzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBza2lwT25jZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IGl0ZW07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdXBkYXRlSW50ZXJuYWwoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWRvKCk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZWRvU3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBwcmV2aW91cykge1xuICAgICAgICAgICAgICAgICAgICB1bmRvU3RhY2sucHVzaChwcmV2aW91cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2tpcE9uY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBpdGVtO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVwZGF0ZUludGVybmFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKSxcbiAgICAgICAgd2l0aEhvb2tzKHtcbiAgICAgICAgICAgIG9uSW5pdChzdG9yZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICAgICAgICAgICAgICBlZmZlY3QoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbmQgPSBrZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBzdG9yZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgJiYgaXNTaWduYWwocykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXldOiBzKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNraXBPbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwT25jZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgcmVkb1N0YWNrIGFmdGVyIHJlY29yZGVkIGFjdGlvblxuICAgICAgICAgICAgICAgICAgICByZWRvU3RhY2suc3BsaWNlKDApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5kb1N0YWNrLnB1c2gocHJldmlvdXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZG9TdGFjay5sZW5ndGggPiBub3JtYWxpemVkLm1heFN0YWNrU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5kb1N0YWNrLnVuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gY2FuZDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBwcm9wb2dhdGUgY3VycmVudCByZWFjdGl2ZSBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB1cGRhdGVJbnRlcm5hbCgpKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgKVxufVxuIl19
|
|
@@ -250,6 +250,7 @@ function getDataServiceKeys(options) {
|
|
|
250
250
|
const setCurrentKey = options.collection ? `setCurrent${capitalize(options.collection)}` : 'setCurrent';
|
|
251
251
|
const createKey = options.collection ? `create${capitalize(options.collection)}` : 'create';
|
|
252
252
|
const updateKey = options.collection ? `update${capitalize(options.collection)}` : 'update';
|
|
253
|
+
const updateAllKey = options.collection ? `updateAll${capitalize(options.collection)}` : 'updateAll';
|
|
253
254
|
const deleteKey = options.collection ? `delete${capitalize(options.collection)}` : 'delete';
|
|
254
255
|
// TODO: Take these from @ngrx/signals/entities, when they are exported
|
|
255
256
|
const entitiesKey = options.collection ? `${options.collection}Entities` : 'entities';
|
|
@@ -270,13 +271,14 @@ function getDataServiceKeys(options) {
|
|
|
270
271
|
setCurrentKey,
|
|
271
272
|
createKey,
|
|
272
273
|
updateKey,
|
|
274
|
+
updateAllKey,
|
|
273
275
|
deleteKey
|
|
274
276
|
};
|
|
275
277
|
}
|
|
276
278
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
277
279
|
function withDataService(options) {
|
|
278
280
|
const { dataServiceType, filter, collection: prefix } = options;
|
|
279
|
-
const { entitiesKey, filterKey, loadKey, selectedEntitiesKey, selectedIdsKey, updateFilterKey, updateSelectedKey, currentKey, createKey, updateKey, deleteKey, loadByIdKey, setCurrentKey } = getDataServiceKeys(options);
|
|
281
|
+
const { entitiesKey, filterKey, loadKey, selectedEntitiesKey, selectedIdsKey, updateFilterKey, updateSelectedKey, currentKey, createKey, updateKey, updateAllKey, deleteKey, loadByIdKey, setCurrentKey } = getDataServiceKeys(options);
|
|
280
282
|
const { callStateKey } = getCallStateKeys({ collection: prefix });
|
|
281
283
|
return signalStoreFeature(withState(() => ({
|
|
282
284
|
[filterKey]: filter,
|
|
@@ -360,6 +362,18 @@ function withDataService(options) {
|
|
|
360
362
|
throw e;
|
|
361
363
|
}
|
|
362
364
|
},
|
|
365
|
+
[updateAllKey]: async (entities) => {
|
|
366
|
+
store[callStateKey] && patchState$1(store, setLoading(prefix));
|
|
367
|
+
try {
|
|
368
|
+
const result = await dataService.updateAll(entities);
|
|
369
|
+
patchState$1(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));
|
|
370
|
+
store[callStateKey] && patchState$1(store, setLoaded(prefix));
|
|
371
|
+
}
|
|
372
|
+
catch (e) {
|
|
373
|
+
store[callStateKey] && patchState$1(store, setError(e, prefix));
|
|
374
|
+
throw e;
|
|
375
|
+
}
|
|
376
|
+
},
|
|
363
377
|
[deleteKey]: async (entity) => {
|
|
364
378
|
patchState$1(store, { [currentKey]: entity });
|
|
365
379
|
store[callStateKey] && patchState$1(store, setLoading(prefix));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-architects-ngrx-toolkit.mjs","sources":["../../../../libs/ngrx-toolkit/src/lib/with-devtools.ts","../../../../libs/ngrx-toolkit/src/lib/assertions/assertions.ts","../../../../libs/ngrx-toolkit/src/lib/with-redux.ts","../../../../libs/ngrx-toolkit/src/lib/with-call-state.ts","../../../../libs/ngrx-toolkit/src/lib/with-data-service.ts","../../../../libs/ngrx-toolkit/src/lib/with-undo-redo.ts","../../../../libs/ngrx-toolkit/src/angular-architects-ngrx-toolkit.ts"],"sourcesContent":["import {\r\n patchState as originalPatchState,\r\n SignalStoreFeature,\r\n} from '@ngrx/signals';\r\nimport { SignalStoreFeatureResult } from '@ngrx/signals/src/signal-store-models';\r\nimport { effect, inject, PLATFORM_ID, signal, Signal } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\n\r\ndeclare global {\r\n interface Window {\r\n __REDUX_DEVTOOLS_EXTENSION__:\r\n | {\r\n connect: (options: { name: string }) => {\r\n send: (action: Action, state: Record<string, unknown>) => void;\r\n };\r\n }\r\n | undefined;\r\n }\r\n}\r\n\r\ntype EmptyFeatureResult = { state: {}; signals: {}; methods: {} };\r\nexport type Action = { type: string };\r\n\r\nconst storeRegistry = signal<Record<string, Signal<unknown>>>({});\r\n\r\nlet currentActionNames = new Set<string>();\r\n\r\nlet synchronizationInitialized = false;\r\n\r\nfunction initSynchronization() {\r\n effect(() => {\r\n if (!connection) {\r\n return;\r\n }\r\n\r\n const stores = storeRegistry();\r\n const rootState: Record<string, unknown> = {};\r\n for (const name in stores) {\r\n const store = stores[name];\r\n rootState[name] = store();\r\n }\r\n\r\n const names = Array.from(currentActionNames);\r\n const type = names.length ? names.join(', ') : 'Store Update';\r\n currentActionNames = new Set<string>();\r\n\r\n connection.send({ type }, rootState);\r\n });\r\n}\r\n\r\nfunction getValueFromSymbol(obj: unknown, symbol: symbol) {\r\n if (typeof obj === 'object' && obj && symbol in obj) {\r\n return (obj as { [key: symbol]: any })[symbol];\r\n }\r\n}\r\n\r\nfunction getStoreSignal(store: unknown): Signal<unknown> {\r\n const [signalStateKey] = Object.getOwnPropertySymbols(store);\r\n if (!signalStateKey) {\r\n throw new Error('Cannot find State Signal');\r\n }\r\n\r\n return getValueFromSymbol(store, signalStateKey);\r\n}\r\n\r\ntype ConnectResponse = {\r\n send: (action: Action, state: Record<string, unknown>) => void;\r\n};\r\nlet connection: ConnectResponse | undefined;\r\n\r\n/**\r\n * required for testing. is not exported during build\r\n */\r\nexport function reset() {\r\n connection = undefined;\r\n synchronizationInitialized = false;\r\n storeRegistry.set({});\r\n}\r\n\r\n/**\r\n * @param name store's name as it should appear in the DevTools\r\n */\r\nexport function withDevtools<Input extends SignalStoreFeatureResult>(\r\n name: string\r\n): SignalStoreFeature<Input, EmptyFeatureResult> {\r\n return (store) => {\r\n const isServer = isPlatformServer(inject(PLATFORM_ID));\r\n if (isServer) {\r\n return store;\r\n }\r\n\r\n const extensions = window.__REDUX_DEVTOOLS_EXTENSION__;\r\n if (!extensions) {\r\n return store;\r\n }\r\n\r\n if (!connection) {\r\n connection = extensions.connect({\r\n name: 'NgRx Signal Store',\r\n });\r\n }\r\n\r\n const storeSignal = getStoreSignal(store);\r\n storeRegistry.update((value) => ({\r\n ...value,\r\n [name]: storeSignal,\r\n }));\r\n\r\n if (!synchronizationInitialized) {\r\n initSynchronization();\r\n synchronizationInitialized = true;\r\n }\r\n\r\n return store;\r\n };\r\n}\r\n\r\ntype PatchFn = typeof originalPatchState extends (\r\n arg1: infer First,\r\n ...args: infer Rest\r\n) => infer Returner\r\n ? (state: First, action: string, ...rest: Rest) => Returner\r\n : never;\r\n\r\nexport const patchState: PatchFn = (state, action, ...rest) => {\r\n currentActionNames.add(action);\r\n return originalPatchState(state, ...rest);\r\n};\r\n","import { ActionsFnSpecs } from '../with-redux';\r\n\r\nexport function assertActionFnSpecs(\r\n obj: unknown\r\n): asserts obj is ActionsFnSpecs {\r\n if (!obj || typeof obj !== 'object') {\r\n throw new Error('%o is not an Action Specification');\r\n }\r\n}\r\n","import { Observable, Subject, Subscription } from 'rxjs';\r\nimport { SignalStoreFeature } from '@ngrx/signals';\r\nimport {\r\n EmptyFeatureResult,\r\n SignalStoreFeatureResult,\r\n} from '@ngrx/signals/src/signal-store-models';\r\nimport { StateSignal } from '@ngrx/signals/src/state-signal';\r\nimport { assertActionFnSpecs } from './assertions/assertions';\r\nimport { effect } from '@angular/core';\r\n\r\n/** Actions **/\r\n\r\ntype Payload = Record<string, unknown>;\r\n\r\ntype ActionFn<\r\n Type extends string = string,\r\n ActionPayload extends Payload = Payload\r\n> = ((payload: ActionPayload) => ActionPayload & { type: Type }) & {\r\n type: Type;\r\n};\r\n\r\ntype ActionFns = Record<string, ActionFn>;\r\n\r\nexport type ActionsFnSpecs = Record<string, Payload>;\r\n\r\ntype ActionFnCreator<Spec extends ActionsFnSpecs> = {\r\n [ActionName in keyof Spec]: ((\r\n payload: Spec[ActionName]\r\n ) => Spec[ActionName] & { type: ActionName }) & { type: ActionName & string };\r\n};\r\n\r\ntype ActionFnPayload<Action> = Action extends (payload: infer Payload) => void\r\n ? Payload\r\n : never;\r\n\r\ntype ActionFnsCreator<Spec extends ActionsFnSpecs> = Spec extends {\r\n private: Record<string, Payload>;\r\n public: Record<string, Payload>;\r\n}\r\n ? ActionFnCreator<Spec['private']> & ActionFnCreator<Spec['public']>\r\n : ActionFnCreator<Spec>;\r\n\r\ntype PublicActionFns<Spec extends ActionsFnSpecs> = Spec extends {\r\n public: Record<string, Payload>;\r\n}\r\n ? ActionFnCreator<Spec['public']>\r\n : ActionFnCreator<Spec>;\r\n\r\nexport function payload<Type extends Payload>(): Type {\r\n return {} as Type;\r\n}\r\n\r\nexport const noPayload = {};\r\n\r\n/** Reducer **/\r\n\r\ntype ReducerFunction<ReducerAction, State> = (\r\n action: ActionFnPayload<ReducerAction>,\r\n state: State\r\n) => void;\r\n\r\ntype ReducerFactory<StateActionFns extends ActionFns, State> = (\r\n actions: StateActionFns,\r\n on: <ReducerAction extends { type: string }>(\r\n action: ReducerAction,\r\n reducerFn: ReducerFunction<ActionFnPayload<ReducerAction>, State>\r\n ) => void\r\n) => void;\r\n\r\n/** Effect **/\r\n\r\ntype EffectsFactory<StateActionFns extends ActionFns> = (\r\n actions: StateActionFns,\r\n create: <EffectAction extends { type: string }>(\r\n action: EffectAction\r\n ) => Observable<ActionFnPayload<EffectAction>>\r\n) => Record<string, Observable<unknown>>;\r\n\r\nfunction createActionFns<Spec extends ActionsFnSpecs>(\r\n actionFnSpecs: Spec,\r\n reducerRegistry: Record<\r\n string,\r\n (payload: ActionFnPayload<unknown>, state: unknown) => void\r\n >,\r\n effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>>,\r\n state: unknown\r\n) {\r\n const actionFns: Record<string, ActionFn> = {};\r\n\r\n for (const type in actionFnSpecs) {\r\n const actionFn = (payload: Payload) => {\r\n const fullPayload = { ...payload, type };\r\n const reducer = reducerRegistry[type];\r\n if (reducer) {\r\n (reducer as (payload: unknown, state: unknown) => void)(\r\n fullPayload as unknown,\r\n state\r\n );\r\n }\r\n const effectSubject = effectsRegistry[type];\r\n if (effectSubject) {\r\n (effectSubject as unknown as Subject<unknown>).next(fullPayload);\r\n }\r\n return fullPayload;\r\n };\r\n actionFn.type = type.toString();\r\n actionFns[type] = actionFn;\r\n }\r\n\r\n return actionFns;\r\n}\r\n\r\nfunction createPublicAndAllActionsFns<Spec extends ActionsFnSpecs>(\r\n actionFnSpecs: Spec,\r\n reducerRegistry: Record<\r\n string,\r\n (payload: ActionFnPayload<unknown>, state: unknown) => void\r\n >,\r\n effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>>,\r\n state: unknown\r\n): { all: ActionFns; publics: ActionFns } {\r\n if ('public' in actionFnSpecs || 'private' in actionFnSpecs) {\r\n const privates = actionFnSpecs['private'] || {};\r\n const publics = actionFnSpecs['public'] || {};\r\n\r\n assertActionFnSpecs(privates);\r\n assertActionFnSpecs(publics);\r\n\r\n const privateActionFns = createActionFns(\r\n privates,\r\n reducerRegistry,\r\n effectsRegistry,\r\n state\r\n );\r\n const publicActionFns = createActionFns(\r\n publics,\r\n reducerRegistry,\r\n effectsRegistry,\r\n state\r\n );\r\n\r\n return {\r\n all: { ...privateActionFns, ...publicActionFns },\r\n publics: publicActionFns,\r\n };\r\n }\r\n\r\n const actionFns = createActionFns(\r\n actionFnSpecs,\r\n reducerRegistry,\r\n effectsRegistry,\r\n state\r\n );\r\n\r\n return { all: actionFns, publics: actionFns };\r\n}\r\n\r\nfunction fillReducerRegistry(\r\n reducer: ReducerFactory<ActionFns, unknown>,\r\n actionFns: ActionFns,\r\n reducerRegistry: Record<\r\n string,\r\n (payload: ActionFnPayload<unknown>, state: unknown) => void\r\n >\r\n) {\r\n function on(\r\n action: { type: string },\r\n reducerFn: (payload: ActionFnPayload<unknown>, state: unknown) => void\r\n ) {\r\n reducerRegistry[action.type] = reducerFn;\r\n }\r\n\r\n reducer(actionFns, on);\r\n\r\n return reducerRegistry;\r\n}\r\n\r\nfunction fillEffects(\r\n effects: EffectsFactory<ActionFns>,\r\n actionFns: ActionFns,\r\n effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>> = {}\r\n): Observable<unknown>[] {\r\n function create(action: { type: string }) {\r\n const subject = new Subject<ActionFnPayload<unknown>>();\r\n effectsRegistry[action.type] = subject;\r\n return subject.asObservable();\r\n }\r\n\r\n const effectObservables = effects(actionFns, create);\r\n return Object.values(effectObservables);\r\n}\r\n\r\nfunction startSubscriptions(observables: Observable<unknown>[]) {\r\n return observables.map((observable) => observable.subscribe());\r\n}\r\n\r\nfunction processRedux<Spec extends ActionsFnSpecs, ReturnType>(\r\n actionFnSpecs: Spec,\r\n reducer: ReducerFactory<ActionFns, unknown>,\r\n effects: EffectsFactory<ActionFns>,\r\n store: unknown\r\n) {\r\n const reducerRegistry: Record<\r\n string,\r\n (payload: ActionFnPayload<unknown>, state: unknown) => void\r\n > = {};\r\n const effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>> = {};\r\n const actionsMap = createPublicAndAllActionsFns(\r\n actionFnSpecs,\r\n reducerRegistry,\r\n effectsRegistry,\r\n store\r\n );\r\n const actionFns = actionsMap.all;\r\n const publicActionsFns = actionsMap.publics;\r\n\r\n fillReducerRegistry(reducer, actionFns, reducerRegistry);\r\n const effectObservables = fillEffects(effects, actionFns, effectsRegistry);\r\n const subscriptions = startSubscriptions(effectObservables);\r\n\r\n return {\r\n methods: publicActionsFns as ReturnType,\r\n subscriptions: subscriptions,\r\n };\r\n}\r\n\r\n/**\r\n * @param redux redux\r\n *\r\n * properties do not start with `with` since they are not extension functions on their own.\r\n *\r\n * no dependency to NgRx\r\n *\r\n * actions are passed to reducer and effects, but it is also possible to use other actions.\r\n * effects provide forAction and do not return anything. that is important because effects should stay inaccessible\r\n */\r\nexport function withRedux<\r\n Spec extends ActionsFnSpecs,\r\n Input extends SignalStoreFeatureResult,\r\n StateActionFns extends ActionFnsCreator<Spec> = ActionFnsCreator<Spec>,\r\n PublicStoreActionFns extends PublicActionFns<Spec> = PublicActionFns<Spec>\r\n>(redux: {\r\n actions: Spec;\r\n reducer: ReducerFactory<StateActionFns, StateSignal<Input['state']>>;\r\n effects: EffectsFactory<StateActionFns>;\r\n}): SignalStoreFeature<\r\n Input,\r\n EmptyFeatureResult & { methods: PublicStoreActionFns }\r\n> {\r\n return (store) => {\r\n const { methods, subscriptions } = processRedux<Spec, PublicStoreActionFns>(\r\n redux.actions,\r\n redux.reducer as ReducerFactory<ActionFns, unknown>,\r\n redux.effects as EffectsFactory<ActionFns>,\r\n store\r\n );\r\n return {\r\n ...store,\r\n methods,\r\n };\r\n };\r\n}\r\n","import { Signal, computed } from '@angular/core';\r\nimport {\r\n SignalStoreFeature,\r\n signalStoreFeature,\r\n withComputed,\r\n withState,\r\n} from '@ngrx/signals';\r\nimport { Emtpy } from './shared/empty';\r\n\r\nexport type CallState = 'init' | 'loading' | 'loaded' | { error: string };\r\n\r\nexport type NamedCallStateSlice<Collection extends string> = {\r\n [K in Collection as `${K}CallState`]: CallState;\r\n};\r\n\r\nexport type CallStateSlice = {\r\n callState: CallState\r\n}\r\n\r\nexport type NamedCallStateSignals<Prop extends string> = {\r\n [K in Prop as `${K}Loading`]: Signal<boolean>;\r\n} & {\r\n [K in Prop as `${K}Loaded`]: Signal<boolean>;\r\n } & {\r\n [K in Prop as `${K}Error`]: Signal<string | null>;\r\n } \r\n\r\nexport type CallStateSignals = {\r\n loading: Signal<boolean>;\r\n loaded: Signal<boolean>;\r\n error: Signal<string | null>\r\n} \r\n\r\nexport function getCallStateKeys(config?: { collection?: string }) {\r\n const prop = config?.collection;\r\n return {\r\n callStateKey: prop ? `${config.collection}CallState` : 'callState',\r\n loadingKey: prop ? `${config.collection}Loading` : 'loading',\r\n loadedKey: prop ? `${config.collection}Loaded` : 'loaded',\r\n errorKey: prop ? `${config.collection}Error` : 'error',\r\n };\r\n}\r\n\r\nexport function withCallState<Collection extends string>(config: {\r\n collection: Collection;\r\n}): SignalStoreFeature<\r\n { state: Emtpy, signals: Emtpy, methods: Emtpy },\r\n {\r\n state: NamedCallStateSlice<Collection>,\r\n signals: NamedCallStateSignals<Collection>,\r\n methods: Emtpy\r\n }\r\n>;\r\nexport function withCallState(): SignalStoreFeature<\r\n { state: Emtpy, signals: Emtpy, methods: Emtpy },\r\n {\r\n state: CallStateSlice,\r\n signals: CallStateSignals,\r\n methods: Emtpy\r\n }\r\n>;\r\nexport function withCallState<Collection extends string>(config?: {\r\n collection: Collection;\r\n}): SignalStoreFeature {\r\n const { callStateKey, errorKey, loadedKey, loadingKey } =\r\n getCallStateKeys(config);\r\n\r\n return signalStoreFeature(\r\n withState({ [callStateKey]: 'init' }),\r\n withComputed((state: Record<string, Signal<unknown>>) => {\r\n\r\n const callState = state[callStateKey] as Signal<CallState>;\r\n\r\n return {\r\n [loadingKey]: computed(() => callState() === 'loading'),\r\n [loadedKey]: computed(() => callState() === 'loaded'),\r\n [errorKey]: computed(() => {\r\n const v = callState();\r\n return typeof v === 'object' ? v.error : null;\r\n })\r\n }\r\n })\r\n );\r\n}\r\n\r\nexport function setLoading<Prop extends string>(\r\n prop?: Prop\r\n): NamedCallStateSlice<Prop> | CallStateSlice {\r\n if (prop) {\r\n return { [`${prop}CallState`]: 'loading' } as NamedCallStateSlice<Prop>;\r\n }\r\n\r\n return { callState: 'loading' };\r\n}\r\n\r\nexport function setLoaded<Prop extends string>(\r\n prop?: Prop\r\n): NamedCallStateSlice<Prop> | CallStateSlice {\r\n\r\n if (prop) {\r\n return { [`${prop}CallState`]: 'loaded' } as NamedCallStateSlice<Prop>;\r\n }\r\n else {\r\n return { callState: 'loaded' };\r\n\r\n }\r\n}\r\n\r\nexport function setError<Prop extends string>(\r\n error: unknown,\r\n prop?: Prop,\r\n ): NamedCallStateSlice<Prop> | CallStateSlice {\r\n\r\n let errorMessage = '';\r\n\r\n if (!error) {\r\n errorMessage = '';\r\n }\r\n else if (typeof error === 'object' && 'message' in error) {\r\n errorMessage = String(error.message);\r\n }\r\n else {\r\n errorMessage = String(error);\r\n }\r\n \r\n\r\n if (prop) {\r\n return { [`${prop}CallState`]: { error: errorMessage } } as NamedCallStateSlice<Prop>;\r\n }\r\n else {\r\n return { callState: { error: errorMessage } };\r\n }\r\n}\r\n","import { ProviderToken, Signal, computed, inject } from \"@angular/core\";\r\nimport { SignalStoreFeature, patchState, signalStoreFeature, withComputed, withMethods, withState } from \"@ngrx/signals\";\r\nimport { CallState, getCallStateKeys, setError, setLoaded, setLoading } from \"./with-call-state\";\r\nimport { setAllEntities, EntityId, addEntity, updateEntity, removeEntity } from \"@ngrx/signals/entities\";\r\nimport { EntityState, NamedEntitySignals } from \"@ngrx/signals/entities/src/models\";\r\nimport { StateSignal } from \"@ngrx/signals/src/state-signal\";\r\nimport { Emtpy } from \"./shared/empty\";\r\n\r\nexport type Filter = Record<string, unknown>;\r\nexport type Entity = { id: EntityId };\r\n\r\nexport interface DataService<E extends Entity, F extends Filter> {\r\n load(filter: F): Promise<E[]>;\r\n loadById(id: EntityId): Promise<E>;\r\n create(entity: E): Promise<E>;\r\n update(entity: E): Promise<E>;\r\n delete(entity: E): Promise<void>;\r\n}\r\n\r\nexport function capitalize(str: string): string {\r\n return str ? str[0].toUpperCase() + str.substring(1) : str;\r\n}\r\n\r\nexport function getDataServiceKeys(options: { collection?: string }) {\r\n const filterKey = options.collection ? `${options.collection}Filter` : 'filter';\r\n const selectedIdsKey = options.collection ? `selected${capitalize(options.collection)}Ids` : 'selectedIds';\r\n const selectedEntitiesKey = options.collection ? `selected${capitalize(options.collection)}Entities` : 'selectedEntities';\r\n\r\n const updateFilterKey = options.collection ? `update${capitalize(options.collection)}Filter` : 'updateFilter';\r\n const updateSelectedKey = options.collection ? `updateSelected${capitalize(options.collection)}Entities` : 'updateSelected';\r\n const loadKey = options.collection ? `load${capitalize(options.collection)}Entities` : 'load';\r\n\r\n const currentKey = options.collection ? `current${capitalize(options.collection)}` : 'current';\r\n const loadByIdKey = options.collection ? `load${capitalize(options.collection)}ById` : 'loadById';\r\n const setCurrentKey = options.collection ? `setCurrent${capitalize(options.collection)}` : 'setCurrent';\r\n const createKey = options.collection ? `create${capitalize(options.collection)}` : 'create';\r\n const updateKey = options.collection ? `update${capitalize(options.collection)}` : 'update';\r\n const deleteKey = options.collection ? `delete${capitalize(options.collection)}` : 'delete';\r\n\r\n // TODO: Take these from @ngrx/signals/entities, when they are exported\r\n const entitiesKey = options.collection ? `${options.collection}Entities` : 'entities';\r\n const entityMapKey = options.collection ? `${options.collection}EntityMap` : 'entityMap';\r\n const idsKey = options.collection ? `${options.collection}Ids` : 'ids';\r\n\r\n return {\r\n filterKey,\r\n selectedIdsKey,\r\n selectedEntitiesKey,\r\n updateFilterKey,\r\n updateSelectedKey,\r\n loadKey,\r\n entitiesKey,\r\n entityMapKey,\r\n idsKey,\r\n\r\n currentKey,\r\n loadByIdKey,\r\n setCurrentKey,\r\n createKey,\r\n updateKey,\r\n deleteKey\r\n };\r\n}\r\n\r\nexport type NamedDataServiceState<E extends Entity, F extends Filter, Collection extends string> =\r\n {\r\n [K in Collection as `${K}Filter`]: F;\r\n } & {\r\n [K in Collection as `selected${Capitalize<K>}Ids`]: Record<EntityId, boolean>;\r\n } & {\r\n [K in Collection as `current${Capitalize<K>}`]: E;\r\n }\r\n\r\nexport type DataServiceState<E extends Entity, F extends Filter> = {\r\n filter: F;\r\n selectedIds: Record<EntityId, boolean>;\r\n current: E;\r\n}\r\n\r\nexport type NamedDataServiceSignals<E extends Entity, Collection extends string> =\r\n {\r\n [K in Collection as `selected${Capitalize<K>}Entities`]: Signal<E[]>;\r\n }\r\n\r\nexport type DataServiceSignals<E extends Entity> =\r\n {\r\n selectedEntities: Signal<E[]>;\r\n }\r\n\r\nexport type NamedDataServiceMethods<E extends Entity, F extends Filter, Collection extends string> =\r\n {\r\n [K in Collection as `update${Capitalize<K>}Filter`]: (filter: F) => void;\r\n } &\r\n {\r\n [K in Collection as `updateSelected${Capitalize<K>}Entities`]: (id: EntityId, selected: boolean) => void;\r\n } &\r\n {\r\n [K in Collection as `load${Capitalize<K>}Entities`]: () => Promise<void>;\r\n } &\r\n\r\n {\r\n [K in Collection as `setCurrent${Capitalize<K>}`]: (entity: E) => void;\r\n } &\r\n {\r\n [K in Collection as `load${Capitalize<K>}ById`]: (id: EntityId) => Promise<void>;\r\n } &\r\n {\r\n [K in Collection as `create${Capitalize<K>}`]: (entity: E) => Promise<void>;\r\n } &\r\n {\r\n [K in Collection as `update${Capitalize<K>}`]: (entity: E) => Promise<void>;\r\n } &\r\n {\r\n [K in Collection as `delete${Capitalize<K>}`]: (entity: E) => Promise<void>;\r\n };\r\n\r\n\r\nexport type DataServiceMethods<E extends Entity, F extends Filter> =\r\n {\r\n updateFilter: (filter: F) => void;\r\n updateSelected: (id: EntityId, selected: boolean) => void;\r\n load: () => Promise<void>;\r\n\r\n setCurrent(entity: E): void;\r\n loadById(id: EntityId): Promise<void>;\r\n create(entity: E): Promise<void>;\r\n update(entity: E): Promise<void>;\r\n delete(entity: E): Promise<void>;\r\n }\r\n\r\nexport type Empty = Record<string, never>\r\n\r\nexport function withDataService<E extends Entity, F extends Filter, Collection extends string>(options: { dataServiceType: ProviderToken<DataService<E, F>>, filter: F, collection: Collection }): SignalStoreFeature<\r\n {\r\n state: Emtpy,\r\n // These alternatives break type inference: \r\n // state: { callState: CallState } & NamedEntityState<E, Collection>,\r\n // state: NamedEntityState<E, Collection>,\r\n\r\n signals: NamedEntitySignals<E, Collection>,\r\n methods: Emtpy,\r\n },\r\n {\r\n state: NamedDataServiceState<E, F, Collection>\r\n signals: NamedDataServiceSignals<E, Collection>\r\n methods: NamedDataServiceMethods<E, F, Collection>\r\n }\r\n>;\r\nexport function withDataService<E extends Entity, F extends Filter>(options: { dataServiceType: ProviderToken<DataService<E, F>>, filter: F }): SignalStoreFeature<\r\n {\r\n state: { callState: CallState } & EntityState<E>\r\n signals: Emtpy,\r\n methods: Emtpy,\r\n },\r\n {\r\n state: DataServiceState<E, F>\r\n signals: DataServiceSignals<E>\r\n methods: DataServiceMethods<E, F>\r\n }>;\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function withDataService<E extends Entity, F extends Filter, Collection extends string>(options: { dataServiceType: ProviderToken<DataService<E, F>>, filter: F, collection?: Collection }): SignalStoreFeature<any, any> {\r\n const { dataServiceType, filter, collection: prefix } = options;\r\n const {\r\n entitiesKey,\r\n filterKey,\r\n loadKey,\r\n selectedEntitiesKey,\r\n selectedIdsKey,\r\n updateFilterKey,\r\n updateSelectedKey,\r\n\r\n currentKey,\r\n createKey,\r\n updateKey,\r\n deleteKey,\r\n loadByIdKey,\r\n setCurrentKey\r\n } = getDataServiceKeys(options);\r\n\r\n const { callStateKey } = getCallStateKeys({ collection: prefix });\r\n\r\n return signalStoreFeature(\r\n withState(() => ({\r\n [filterKey]: filter,\r\n [selectedIdsKey]: {} as Record<EntityId, boolean>,\r\n [currentKey]: undefined as E | undefined\r\n })),\r\n withComputed((store: Record<string, unknown>) => {\r\n const entities = store[entitiesKey] as Signal<E[]>;\r\n const selectedIds = store[selectedIdsKey] as Signal<Record<EntityId, boolean>>;\r\n\r\n return {\r\n [selectedEntitiesKey]: computed(() => entities().filter(e => selectedIds()[e.id]))\r\n }\r\n }),\r\n withMethods((store: Record<string, unknown> & StateSignal<object>) => {\r\n const dataService = inject(dataServiceType)\r\n return {\r\n [updateFilterKey]: (filter: F): void => {\r\n patchState(store, { [filterKey]: filter });\r\n },\r\n [updateSelectedKey]: (id: EntityId, selected: boolean): void => {\r\n patchState(store, (state: Record<string, unknown>) => ({\r\n [selectedIdsKey]: {\r\n ...state[selectedIdsKey] as Record<EntityId, boolean>,\r\n [id]: selected,\r\n }\r\n }));\r\n },\r\n [loadKey]: async (): Promise<void> => {\r\n const filter = store[filterKey] as Signal<F>;\r\n store[callStateKey] && patchState(store, setLoading(prefix));\r\n\r\n try {\r\n const result = await dataService.load(filter());\r\n patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));\r\n store[callStateKey] && patchState(store, setLoaded(prefix));\r\n }\r\n catch (e) {\r\n store[callStateKey] && patchState(store, setError(e, prefix));\r\n throw e;\r\n }\r\n },\r\n [loadByIdKey]: async (id: EntityId): Promise<void> => {\r\n store[callStateKey] && patchState(store, setLoading(prefix));\r\n\r\n try {\r\n const current = await dataService.loadById(id);\r\n store[callStateKey] && patchState(store, setLoaded(prefix));\r\n patchState(store, { [currentKey]: current });\r\n }\r\n catch (e) {\r\n store[callStateKey] && patchState(store, setError(e, prefix));\r\n throw e;\r\n }\r\n },\r\n [setCurrentKey]: (current: E): void => {\r\n patchState(store, { [currentKey]: current });\r\n },\r\n [createKey]: async (entity: E): Promise<void> => {\r\n patchState(store, { [currentKey]: entity });\r\n store[callStateKey] && patchState(store, setLoading(prefix));\r\n\r\n try {\r\n const created = await dataService.create(entity);\r\n patchState(store, { [currentKey]: created });\r\n patchState(store, prefix ? addEntity(created, { collection: prefix }) : addEntity(created));\r\n store[callStateKey] && patchState(store, setLoaded(prefix));\r\n }\r\n catch (e) {\r\n store[callStateKey] && patchState(store, setError(e, prefix));\r\n throw e;\r\n }\r\n },\r\n [updateKey]: async (entity: E): Promise<void> => {\r\n patchState(store, { [currentKey]: entity });\r\n store[callStateKey] && patchState(store, setLoading(prefix));\r\n\r\n try {\r\n const updated = await dataService.update(entity);\r\n patchState(store, { [currentKey]: updated });\r\n // Why do we need this cast to Partial<Entity>?\r\n const updateArg = { id: updated.id, changes: updated as Partial<Entity> };\r\n patchState(store, prefix ? updateEntity(updateArg, { collection: prefix }) : updateEntity(updateArg));\r\n store[callStateKey] && patchState(store, setLoaded(prefix));\r\n }\r\n catch (e) {\r\n store[callStateKey] && patchState(store, setError(e, prefix));\r\n throw e;\r\n }\r\n },\r\n [deleteKey]: async (entity: E): Promise<void> => {\r\n patchState(store, { [currentKey]: entity });\r\n store[callStateKey] && patchState(store, setLoading(prefix));\r\n\r\n try {\r\n await dataService.delete(entity);\r\n patchState(store, { [currentKey]: undefined });\r\n patchState(store, prefix ? removeEntity(entity.id, { collection: prefix }) : removeEntity(entity.id));\r\n store[callStateKey] && patchState(store, setLoaded(prefix));\r\n }\r\n catch (e) {\r\n store[callStateKey] && patchState(store, setError(e, prefix));\r\n throw e;\r\n }\r\n },\r\n };\r\n })\r\n );\r\n}","import { SignalStoreFeature, patchState, signalStoreFeature, withComputed, withHooks, withMethods } from \"@ngrx/signals\";\r\nimport { EntityId, EntityMap, EntityState } from \"@ngrx/signals/entities\";\r\nimport { Signal, effect, signal, untracked, isSignal } from \"@angular/core\";\r\nimport { EntitySignals, NamedEntitySignals } from \"@ngrx/signals/entities/src/models\";\r\nimport { Entity, capitalize } from \"./with-data-service\";\r\nimport { Emtpy } from \"./shared/empty\";\r\n\r\nexport type StackItem = Record<string, unknown>;\r\n\r\nexport type NormalizedUndoRedoOptions = {\r\n maxStackSize: number;\r\n collections?: string[]\r\n}\r\n\r\nconst defaultOptions: NormalizedUndoRedoOptions = {\r\n maxStackSize: 100\r\n};\r\n\r\nexport type NamedUndoRedoState<Collection extends string> = {\r\n [K in Collection as `${K}EntityMap`]: EntityMap<Entity>;\r\n} & {\r\n [K in Collection as `${K}Ids`]: EntityId[];\r\n }\r\n\r\nexport type NamedUndoRedoSignals<Collection extends string> = {\r\n [K in Collection as `${K}Entities`]: Signal<Entity[]>\r\n}\r\n\r\nexport function getUndoRedoKeys(collections?: string[]): string[] {\r\n if (collections) {\r\n return collections.flatMap(c => [`${c}EntityMap`, `${c}Ids`, `selected${capitalize(c)}Ids`, `${c}Filter`])\r\n }\r\n return ['entityMap', 'ids', 'selectedIds', 'filter'];\r\n}\r\n\r\nexport function withUndoRedo<Collection extends string>(options?: { maxStackSize?: number; collections: Collection[] }): SignalStoreFeature<\r\n {\r\n state: Emtpy,\r\n // This alternative breaks type inference:\r\n // state: NamedEntityState<Entity, Collection>\r\n signals: NamedEntitySignals<Entity, Collection>,\r\n methods: Emtpy\r\n },\r\n {\r\n state: Emtpy,\r\n signals: {\r\n canUndo: Signal<boolean>,\r\n canRedo: Signal<boolean>\r\n },\r\n methods: {\r\n undo: () => void,\r\n redo: () => void\r\n }\r\n }>;\r\n\r\nexport function withUndoRedo(options?: { maxStackSize?: number }): SignalStoreFeature<\r\n {\r\n state: EntityState<Entity>,\r\n signals: EntitySignals<Entity>,\r\n methods: Emtpy\r\n },\r\n {\r\n state: Emtpy,\r\n signals: {\r\n canUndo: Signal<boolean>,\r\n canRedo: Signal<boolean>\r\n },\r\n methods: {\r\n undo: () => void,\r\n redo: () => void\r\n }\r\n }>;\r\n\r\nexport function withUndoRedo<Collection extends string>(options: {\r\n maxStackSize?: number;\r\n collections?: Collection[]\r\n} = {}): \r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nSignalStoreFeature<any, any> {\r\n let previous: StackItem | null = null;\r\n let skipOnce = false;\r\n\r\n const normalized = {\r\n ...defaultOptions,\r\n ...options\r\n };\r\n\r\n //\r\n // Design Decision: This feature has its own\r\n // internal state.\r\n //\r\n\r\n const undoStack: StackItem[] = [];\r\n const redoStack: StackItem[] = [];\r\n\r\n const canUndo = signal(false);\r\n const canRedo = signal(false);\r\n\r\n const updateInternal = () => {\r\n canUndo.set(undoStack.length !== 0);\r\n canRedo.set(redoStack.length !== 0);\r\n };\r\n\r\n const keys = getUndoRedoKeys(normalized?.collections);\r\n\r\n return signalStoreFeature(\r\n\r\n withComputed(() => ({\r\n canUndo: canUndo.asReadonly(),\r\n canRedo: canRedo.asReadonly()\r\n })),\r\n withMethods((store) => ({\r\n undo(): void {\r\n const item = undoStack.pop();\r\n\r\n if (item && previous) {\r\n redoStack.push(previous);\r\n }\r\n\r\n if (item) {\r\n skipOnce = true;\r\n patchState(store, item);\r\n previous = item;\r\n }\r\n\r\n updateInternal();\r\n },\r\n redo(): void {\r\n const item = redoStack.pop();\r\n\r\n if (item && previous) {\r\n undoStack.push(previous);\r\n }\r\n\r\n if (item) {\r\n skipOnce = true;\r\n patchState(store, item);\r\n previous = item;\r\n }\r\n\r\n updateInternal();\r\n }\r\n })),\r\n withHooks({\r\n onInit(store: Record<string, unknown>) {\r\n effect(() => {\r\n\r\n const cand = keys.reduce((acc, key) => {\r\n const s = store[key];\r\n if (s && isSignal(s)) {\r\n return {\r\n ...acc,\r\n [key]: s()\r\n }\r\n }\r\n return acc;\r\n }, {});\r\n\r\n if (skipOnce) {\r\n skipOnce = false;\r\n return;\r\n }\r\n\r\n // Clear redoStack after recorded action\r\n redoStack.splice(0);\r\n\r\n if (previous) {\r\n undoStack.push(previous);\r\n }\r\n\r\n if (redoStack.length > normalized.maxStackSize) {\r\n undoStack.unshift();\r\n }\r\n\r\n previous = cand;\r\n\r\n // Don't propogate current reactive context\r\n untracked(() => updateInternal());\r\n })\r\n }\r\n })\r\n\r\n )\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["originalPatchState","patchState"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"angular-architects-ngrx-toolkit.mjs","sources":["../../../../libs/ngrx-toolkit/src/lib/with-devtools.ts","../../../../libs/ngrx-toolkit/src/lib/assertions/assertions.ts","../../../../libs/ngrx-toolkit/src/lib/with-redux.ts","../../../../libs/ngrx-toolkit/src/lib/with-call-state.ts","../../../../libs/ngrx-toolkit/src/lib/with-data-service.ts","../../../../libs/ngrx-toolkit/src/lib/with-undo-redo.ts","../../../../libs/ngrx-toolkit/src/angular-architects-ngrx-toolkit.ts"],"sourcesContent":["import {\n patchState as originalPatchState,\n SignalStoreFeature,\n} from '@ngrx/signals';\nimport { SignalStoreFeatureResult } from '@ngrx/signals/src/signal-store-models';\nimport { effect, inject, PLATFORM_ID, signal, Signal } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\ndeclare global {\n interface Window {\n __REDUX_DEVTOOLS_EXTENSION__:\n | {\n connect: (options: { name: string }) => {\n send: (action: Action, state: Record<string, unknown>) => void;\n };\n }\n | undefined;\n }\n}\n\ntype EmptyFeatureResult = { state: {}; signals: {}; methods: {} };\nexport type Action = { type: string };\n\nconst storeRegistry = signal<Record<string, Signal<unknown>>>({});\n\nlet currentActionNames = new Set<string>();\n\nlet synchronizationInitialized = false;\n\nfunction initSynchronization() {\n effect(() => {\n if (!connection) {\n return;\n }\n\n const stores = storeRegistry();\n const rootState: Record<string, unknown> = {};\n for (const name in stores) {\n const store = stores[name];\n rootState[name] = store();\n }\n\n const names = Array.from(currentActionNames);\n const type = names.length ? names.join(', ') : 'Store Update';\n currentActionNames = new Set<string>();\n\n connection.send({ type }, rootState);\n });\n}\n\nfunction getValueFromSymbol(obj: unknown, symbol: symbol) {\n if (typeof obj === 'object' && obj && symbol in obj) {\n return (obj as { [key: symbol]: any })[symbol];\n }\n}\n\nfunction getStoreSignal(store: unknown): Signal<unknown> {\n const [signalStateKey] = Object.getOwnPropertySymbols(store);\n if (!signalStateKey) {\n throw new Error('Cannot find State Signal');\n }\n\n return getValueFromSymbol(store, signalStateKey);\n}\n\ntype ConnectResponse = {\n send: (action: Action, state: Record<string, unknown>) => void;\n};\nlet connection: ConnectResponse | undefined;\n\n/**\n * required for testing. is not exported during build\n */\nexport function reset() {\n connection = undefined;\n synchronizationInitialized = false;\n storeRegistry.set({});\n}\n\n/**\n * @param name store's name as it should appear in the DevTools\n */\nexport function withDevtools<Input extends SignalStoreFeatureResult>(\n name: string\n): SignalStoreFeature<Input, EmptyFeatureResult> {\n return (store) => {\n const isServer = isPlatformServer(inject(PLATFORM_ID));\n if (isServer) {\n return store;\n }\n\n const extensions = window.__REDUX_DEVTOOLS_EXTENSION__;\n if (!extensions) {\n return store;\n }\n\n if (!connection) {\n connection = extensions.connect({\n name: 'NgRx Signal Store',\n });\n }\n\n const storeSignal = getStoreSignal(store);\n storeRegistry.update((value) => ({\n ...value,\n [name]: storeSignal,\n }));\n\n if (!synchronizationInitialized) {\n initSynchronization();\n synchronizationInitialized = true;\n }\n\n return store;\n };\n}\n\ntype PatchFn = typeof originalPatchState extends (\n arg1: infer First,\n ...args: infer Rest\n) => infer Returner\n ? (state: First, action: string, ...rest: Rest) => Returner\n : never;\n\nexport const patchState: PatchFn = (state, action, ...rest) => {\n currentActionNames.add(action);\n return originalPatchState(state, ...rest);\n};\n","import { ActionsFnSpecs } from '../with-redux';\n\nexport function assertActionFnSpecs(\n obj: unknown\n): asserts obj is ActionsFnSpecs {\n if (!obj || typeof obj !== 'object') {\n throw new Error('%o is not an Action Specification');\n }\n}\n","import { Observable, Subject, Subscription } from 'rxjs';\nimport { SignalStoreFeature } from '@ngrx/signals';\nimport {\n EmptyFeatureResult,\n SignalStoreFeatureResult,\n} from '@ngrx/signals/src/signal-store-models';\nimport { StateSignal } from '@ngrx/signals/src/state-signal';\nimport { assertActionFnSpecs } from './assertions/assertions';\nimport { effect } from '@angular/core';\n\n/** Actions **/\n\ntype Payload = Record<string, unknown>;\n\ntype ActionFn<\n Type extends string = string,\n ActionPayload extends Payload = Payload\n> = ((payload: ActionPayload) => ActionPayload & { type: Type }) & {\n type: Type;\n};\n\ntype ActionFns = Record<string, ActionFn>;\n\nexport type ActionsFnSpecs = Record<string, Payload>;\n\ntype ActionFnCreator<Spec extends ActionsFnSpecs> = {\n [ActionName in keyof Spec]: ((\n payload: Spec[ActionName]\n ) => Spec[ActionName] & { type: ActionName }) & { type: ActionName & string };\n};\n\ntype ActionFnPayload<Action> = Action extends (payload: infer Payload) => void\n ? Payload\n : never;\n\ntype ActionFnsCreator<Spec extends ActionsFnSpecs> = Spec extends {\n private: Record<string, Payload>;\n public: Record<string, Payload>;\n}\n ? ActionFnCreator<Spec['private']> & ActionFnCreator<Spec['public']>\n : ActionFnCreator<Spec>;\n\ntype PublicActionFns<Spec extends ActionsFnSpecs> = Spec extends {\n public: Record<string, Payload>;\n}\n ? ActionFnCreator<Spec['public']>\n : ActionFnCreator<Spec>;\n\nexport function payload<Type extends Payload>(): Type {\n return {} as Type;\n}\n\nexport const noPayload = {};\n\n/** Reducer **/\n\ntype ReducerFunction<ReducerAction, State> = (\n action: ActionFnPayload<ReducerAction>,\n state: State\n) => void;\n\ntype ReducerFactory<StateActionFns extends ActionFns, State> = (\n actions: StateActionFns,\n on: <ReducerAction extends { type: string }>(\n action: ReducerAction,\n reducerFn: ReducerFunction<ActionFnPayload<ReducerAction>, State>\n ) => void\n) => void;\n\n/** Effect **/\n\ntype EffectsFactory<StateActionFns extends ActionFns> = (\n actions: StateActionFns,\n create: <EffectAction extends { type: string }>(\n action: EffectAction\n ) => Observable<ActionFnPayload<EffectAction>>\n) => Record<string, Observable<unknown>>;\n\nfunction createActionFns<Spec extends ActionsFnSpecs>(\n actionFnSpecs: Spec,\n reducerRegistry: Record<\n string,\n (payload: ActionFnPayload<unknown>, state: unknown) => void\n >,\n effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>>,\n state: unknown\n) {\n const actionFns: Record<string, ActionFn> = {};\n\n for (const type in actionFnSpecs) {\n const actionFn = (payload: Payload) => {\n const fullPayload = { ...payload, type };\n const reducer = reducerRegistry[type];\n if (reducer) {\n (reducer as (payload: unknown, state: unknown) => void)(\n fullPayload as unknown,\n state\n );\n }\n const effectSubject = effectsRegistry[type];\n if (effectSubject) {\n (effectSubject as unknown as Subject<unknown>).next(fullPayload);\n }\n return fullPayload;\n };\n actionFn.type = type.toString();\n actionFns[type] = actionFn;\n }\n\n return actionFns;\n}\n\nfunction createPublicAndAllActionsFns<Spec extends ActionsFnSpecs>(\n actionFnSpecs: Spec,\n reducerRegistry: Record<\n string,\n (payload: ActionFnPayload<unknown>, state: unknown) => void\n >,\n effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>>,\n state: unknown\n): { all: ActionFns; publics: ActionFns } {\n if ('public' in actionFnSpecs || 'private' in actionFnSpecs) {\n const privates = actionFnSpecs['private'] || {};\n const publics = actionFnSpecs['public'] || {};\n\n assertActionFnSpecs(privates);\n assertActionFnSpecs(publics);\n\n const privateActionFns = createActionFns(\n privates,\n reducerRegistry,\n effectsRegistry,\n state\n );\n const publicActionFns = createActionFns(\n publics,\n reducerRegistry,\n effectsRegistry,\n state\n );\n\n return {\n all: { ...privateActionFns, ...publicActionFns },\n publics: publicActionFns,\n };\n }\n\n const actionFns = createActionFns(\n actionFnSpecs,\n reducerRegistry,\n effectsRegistry,\n state\n );\n\n return { all: actionFns, publics: actionFns };\n}\n\nfunction fillReducerRegistry(\n reducer: ReducerFactory<ActionFns, unknown>,\n actionFns: ActionFns,\n reducerRegistry: Record<\n string,\n (payload: ActionFnPayload<unknown>, state: unknown) => void\n >\n) {\n function on(\n action: { type: string },\n reducerFn: (payload: ActionFnPayload<unknown>, state: unknown) => void\n ) {\n reducerRegistry[action.type] = reducerFn;\n }\n\n reducer(actionFns, on);\n\n return reducerRegistry;\n}\n\nfunction fillEffects(\n effects: EffectsFactory<ActionFns>,\n actionFns: ActionFns,\n effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>> = {}\n): Observable<unknown>[] {\n function create(action: { type: string }) {\n const subject = new Subject<ActionFnPayload<unknown>>();\n effectsRegistry[action.type] = subject;\n return subject.asObservable();\n }\n\n const effectObservables = effects(actionFns, create);\n return Object.values(effectObservables);\n}\n\nfunction startSubscriptions(observables: Observable<unknown>[]) {\n return observables.map((observable) => observable.subscribe());\n}\n\nfunction processRedux<Spec extends ActionsFnSpecs, ReturnType>(\n actionFnSpecs: Spec,\n reducer: ReducerFactory<ActionFns, unknown>,\n effects: EffectsFactory<ActionFns>,\n store: unknown\n) {\n const reducerRegistry: Record<\n string,\n (payload: ActionFnPayload<unknown>, state: unknown) => void\n > = {};\n const effectsRegistry: Record<string, Subject<ActionFnPayload<unknown>>> = {};\n const actionsMap = createPublicAndAllActionsFns(\n actionFnSpecs,\n reducerRegistry,\n effectsRegistry,\n store\n );\n const actionFns = actionsMap.all;\n const publicActionsFns = actionsMap.publics;\n\n fillReducerRegistry(reducer, actionFns, reducerRegistry);\n const effectObservables = fillEffects(effects, actionFns, effectsRegistry);\n const subscriptions = startSubscriptions(effectObservables);\n\n return {\n methods: publicActionsFns as ReturnType,\n subscriptions: subscriptions,\n };\n}\n\n/**\n * @param redux redux\n *\n * properties do not start with `with` since they are not extension functions on their own.\n *\n * no dependency to NgRx\n *\n * actions are passed to reducer and effects, but it is also possible to use other actions.\n * effects provide forAction and do not return anything. that is important because effects should stay inaccessible\n */\nexport function withRedux<\n Spec extends ActionsFnSpecs,\n Input extends SignalStoreFeatureResult,\n StateActionFns extends ActionFnsCreator<Spec> = ActionFnsCreator<Spec>,\n PublicStoreActionFns extends PublicActionFns<Spec> = PublicActionFns<Spec>\n>(redux: {\n actions: Spec;\n reducer: ReducerFactory<StateActionFns, StateSignal<Input['state']>>;\n effects: EffectsFactory<StateActionFns>;\n}): SignalStoreFeature<\n Input,\n EmptyFeatureResult & { methods: PublicStoreActionFns }\n> {\n return (store) => {\n const { methods, subscriptions } = processRedux<Spec, PublicStoreActionFns>(\n redux.actions,\n redux.reducer as ReducerFactory<ActionFns, unknown>,\n redux.effects as EffectsFactory<ActionFns>,\n store\n );\n return {\n ...store,\n methods,\n };\n };\n}\n","import { Signal, computed } from '@angular/core';\nimport {\n SignalStoreFeature,\n signalStoreFeature,\n withComputed,\n withState,\n} from '@ngrx/signals';\nimport { Emtpy } from './shared/empty';\n\nexport type CallState = 'init' | 'loading' | 'loaded' | { error: string };\n\nexport type NamedCallStateSlice<Collection extends string> = {\n [K in Collection as `${K}CallState`]: CallState;\n};\n\nexport type CallStateSlice = {\n callState: CallState\n}\n\nexport type NamedCallStateSignals<Prop extends string> = {\n [K in Prop as `${K}Loading`]: Signal<boolean>;\n} & {\n [K in Prop as `${K}Loaded`]: Signal<boolean>;\n } & {\n [K in Prop as `${K}Error`]: Signal<string | null>;\n } \n\nexport type CallStateSignals = {\n loading: Signal<boolean>;\n loaded: Signal<boolean>;\n error: Signal<string | null>\n} \n\nexport function getCallStateKeys(config?: { collection?: string }) {\n const prop = config?.collection;\n return {\n callStateKey: prop ? `${config.collection}CallState` : 'callState',\n loadingKey: prop ? `${config.collection}Loading` : 'loading',\n loadedKey: prop ? `${config.collection}Loaded` : 'loaded',\n errorKey: prop ? `${config.collection}Error` : 'error',\n };\n}\n\nexport function withCallState<Collection extends string>(config: {\n collection: Collection;\n}): SignalStoreFeature<\n { state: Emtpy, signals: Emtpy, methods: Emtpy },\n {\n state: NamedCallStateSlice<Collection>,\n signals: NamedCallStateSignals<Collection>,\n methods: Emtpy\n }\n>;\nexport function withCallState(): SignalStoreFeature<\n { state: Emtpy, signals: Emtpy, methods: Emtpy },\n {\n state: CallStateSlice,\n signals: CallStateSignals,\n methods: Emtpy\n }\n>;\nexport function withCallState<Collection extends string>(config?: {\n collection: Collection;\n}): SignalStoreFeature {\n const { callStateKey, errorKey, loadedKey, loadingKey } =\n getCallStateKeys(config);\n\n return signalStoreFeature(\n withState({ [callStateKey]: 'init' }),\n withComputed((state: Record<string, Signal<unknown>>) => {\n\n const callState = state[callStateKey] as Signal<CallState>;\n\n return {\n [loadingKey]: computed(() => callState() === 'loading'),\n [loadedKey]: computed(() => callState() === 'loaded'),\n [errorKey]: computed(() => {\n const v = callState();\n return typeof v === 'object' ? v.error : null;\n })\n }\n })\n );\n}\n\nexport function setLoading<Prop extends string>(\n prop?: Prop\n): NamedCallStateSlice<Prop> | CallStateSlice {\n if (prop) {\n return { [`${prop}CallState`]: 'loading' } as NamedCallStateSlice<Prop>;\n }\n\n return { callState: 'loading' };\n}\n\nexport function setLoaded<Prop extends string>(\n prop?: Prop\n): NamedCallStateSlice<Prop> | CallStateSlice {\n\n if (prop) {\n return { [`${prop}CallState`]: 'loaded' } as NamedCallStateSlice<Prop>;\n }\n else {\n return { callState: 'loaded' };\n\n }\n}\n\nexport function setError<Prop extends string>(\n error: unknown,\n prop?: Prop,\n ): NamedCallStateSlice<Prop> | CallStateSlice {\n\n let errorMessage = '';\n\n if (!error) {\n errorMessage = '';\n }\n else if (typeof error === 'object' && 'message' in error) {\n errorMessage = String(error.message);\n }\n else {\n errorMessage = String(error);\n }\n \n\n if (prop) {\n return { [`${prop}CallState`]: { error: errorMessage } } as NamedCallStateSlice<Prop>;\n }\n else {\n return { callState: { error: errorMessage } };\n }\n}\n","import { ProviderToken, Signal, computed, inject } from \"@angular/core\";\nimport { SignalStoreFeature, patchState, signalStoreFeature, withComputed, withMethods, withState } from \"@ngrx/signals\";\nimport { CallState, getCallStateKeys, setError, setLoaded, setLoading } from \"./with-call-state\";\nimport { setAllEntities, EntityId, addEntity, updateEntity, removeEntity } from \"@ngrx/signals/entities\";\nimport { EntityState, NamedEntitySignals } from \"@ngrx/signals/entities/src/models\";\nimport { StateSignal } from \"@ngrx/signals/src/state-signal\";\nimport { Emtpy } from \"./shared/empty\";\n\nexport type Filter = Record<string, unknown>;\nexport type Entity = { id: EntityId };\n\nexport interface DataService<E extends Entity, F extends Filter> {\n load(filter: F): Promise<E[]>;\n loadById(id: EntityId): Promise<E>;\n create(entity: E): Promise<E>;\n update(entity: E): Promise<E>;\n updateAll(entity: E[]): Promise<E[]>;\n delete(entity: E): Promise<void>;\n}\n\nexport function capitalize(str: string): string {\n return str ? str[0].toUpperCase() + str.substring(1) : str;\n}\n\nexport function getDataServiceKeys(options: { collection?: string }) {\n const filterKey = options.collection ? `${options.collection}Filter` : 'filter';\n const selectedIdsKey = options.collection ? `selected${capitalize(options.collection)}Ids` : 'selectedIds';\n const selectedEntitiesKey = options.collection ? `selected${capitalize(options.collection)}Entities` : 'selectedEntities';\n\n const updateFilterKey = options.collection ? `update${capitalize(options.collection)}Filter` : 'updateFilter';\n const updateSelectedKey = options.collection ? `updateSelected${capitalize(options.collection)}Entities` : 'updateSelected';\n const loadKey = options.collection ? `load${capitalize(options.collection)}Entities` : 'load';\n\n const currentKey = options.collection ? `current${capitalize(options.collection)}` : 'current';\n const loadByIdKey = options.collection ? `load${capitalize(options.collection)}ById` : 'loadById';\n const setCurrentKey = options.collection ? `setCurrent${capitalize(options.collection)}` : 'setCurrent';\n const createKey = options.collection ? `create${capitalize(options.collection)}` : 'create';\n const updateKey = options.collection ? `update${capitalize(options.collection)}` : 'update';\n const updateAllKey = options.collection ? `updateAll${capitalize(options.collection)}` : 'updateAll';\n const deleteKey = options.collection ? `delete${capitalize(options.collection)}` : 'delete';\n\n // TODO: Take these from @ngrx/signals/entities, when they are exported\n const entitiesKey = options.collection ? `${options.collection}Entities` : 'entities';\n const entityMapKey = options.collection ? `${options.collection}EntityMap` : 'entityMap';\n const idsKey = options.collection ? `${options.collection}Ids` : 'ids';\n\n return {\n filterKey,\n selectedIdsKey,\n selectedEntitiesKey,\n updateFilterKey,\n updateSelectedKey,\n loadKey,\n entitiesKey,\n entityMapKey,\n idsKey,\n\n currentKey,\n loadByIdKey,\n setCurrentKey,\n createKey,\n updateKey,\n updateAllKey,\n deleteKey\n };\n}\n\nexport type NamedDataServiceState<E extends Entity, F extends Filter, Collection extends string> =\n {\n [K in Collection as `${K}Filter`]: F;\n } & {\n [K in Collection as `selected${Capitalize<K>}Ids`]: Record<EntityId, boolean>;\n } & {\n [K in Collection as `current${Capitalize<K>}`]: E;\n }\n\nexport type DataServiceState<E extends Entity, F extends Filter> = {\n filter: F;\n selectedIds: Record<EntityId, boolean>;\n current: E;\n}\n\nexport type NamedDataServiceSignals<E extends Entity, Collection extends string> =\n {\n [K in Collection as `selected${Capitalize<K>}Entities`]: Signal<E[]>;\n }\n\nexport type DataServiceSignals<E extends Entity> =\n {\n selectedEntities: Signal<E[]>;\n }\n\nexport type NamedDataServiceMethods<E extends Entity, F extends Filter, Collection extends string> =\n {\n [K in Collection as `update${Capitalize<K>}Filter`]: (filter: F) => void;\n } &\n {\n [K in Collection as `updateSelected${Capitalize<K>}Entities`]: (id: EntityId, selected: boolean) => void;\n } &\n {\n [K in Collection as `load${Capitalize<K>}Entities`]: () => Promise<void>;\n } &\n\n {\n [K in Collection as `setCurrent${Capitalize<K>}`]: (entity: E) => void;\n } &\n {\n [K in Collection as `load${Capitalize<K>}ById`]: (id: EntityId) => Promise<void>;\n } &\n {\n [K in Collection as `create${Capitalize<K>}`]: (entity: E) => Promise<void>;\n } &\n {\n [K in Collection as `update${Capitalize<K>}`]: (entity: E) => Promise<void>;\n } &\n {\n [K in Collection as `updateAll${Capitalize<K>}`]: (entity: E[]) => Promise<void>;\n } &\n {\n [K in Collection as `delete${Capitalize<K>}`]: (entity: E) => Promise<void>;\n };\n\n\nexport type DataServiceMethods<E extends Entity, F extends Filter> =\n {\n updateFilter: (filter: F) => void;\n updateSelected: (id: EntityId, selected: boolean) => void;\n load: () => Promise<void>;\n\n setCurrent(entity: E): void;\n loadById(id: EntityId): Promise<void>;\n create(entity: E): Promise<void>;\n update(entity: E): Promise<void>;\n updateAll(entities: E[]): Promise<void>;\n delete(entity: E): Promise<void>;\n }\n\nexport type Empty = Record<string, never>\n\nexport function withDataService<E extends Entity, F extends Filter, Collection extends string>(options: { dataServiceType: ProviderToken<DataService<E, F>>, filter: F, collection: Collection }): SignalStoreFeature<\n {\n state: Emtpy,\n // These alternatives break type inference:\n // state: { callState: CallState } & NamedEntityState<E, Collection>,\n // state: NamedEntityState<E, Collection>,\n\n signals: NamedEntitySignals<E, Collection>,\n methods: Emtpy,\n },\n {\n state: NamedDataServiceState<E, F, Collection>\n signals: NamedDataServiceSignals<E, Collection>\n methods: NamedDataServiceMethods<E, F, Collection>\n }\n>;\nexport function withDataService<E extends Entity, F extends Filter>(options: { dataServiceType: ProviderToken<DataService<E, F>>, filter: F }): SignalStoreFeature<\n {\n state: { callState: CallState } & EntityState<E>\n signals: Emtpy,\n methods: Emtpy,\n },\n {\n state: DataServiceState<E, F>\n signals: DataServiceSignals<E>\n methods: DataServiceMethods<E, F>\n }>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withDataService<E extends Entity, F extends Filter, Collection extends string>(options: { dataServiceType: ProviderToken<DataService<E, F>>, filter: F, collection?: Collection }): SignalStoreFeature<any, any> {\n const { dataServiceType, filter, collection: prefix } = options;\n const {\n entitiesKey,\n filterKey,\n loadKey,\n selectedEntitiesKey,\n selectedIdsKey,\n updateFilterKey,\n updateSelectedKey,\n\n currentKey,\n createKey,\n updateKey,\n updateAllKey,\n deleteKey,\n loadByIdKey,\n setCurrentKey\n } = getDataServiceKeys(options);\n\n const { callStateKey } = getCallStateKeys({ collection: prefix });\n\n return signalStoreFeature(\n withState(() => ({\n [filterKey]: filter,\n [selectedIdsKey]: {} as Record<EntityId, boolean>,\n [currentKey]: undefined as E | undefined\n })),\n withComputed((store: Record<string, unknown>) => {\n const entities = store[entitiesKey] as Signal<E[]>;\n const selectedIds = store[selectedIdsKey] as Signal<Record<EntityId, boolean>>;\n\n return {\n [selectedEntitiesKey]: computed(() => entities().filter(e => selectedIds()[e.id]))\n }\n }),\n withMethods((store: Record<string, unknown> & StateSignal<object>) => {\n const dataService = inject(dataServiceType)\n return {\n [updateFilterKey]: (filter: F): void => {\n patchState(store, { [filterKey]: filter });\n },\n [updateSelectedKey]: (id: EntityId, selected: boolean): void => {\n patchState(store, (state: Record<string, unknown>) => ({\n [selectedIdsKey]: {\n ...state[selectedIdsKey] as Record<EntityId, boolean>,\n [id]: selected,\n }\n }));\n },\n [loadKey]: async (): Promise<void> => {\n const filter = store[filterKey] as Signal<F>;\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const result = await dataService.load(filter());\n patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [loadByIdKey]: async (id: EntityId): Promise<void> => {\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const current = await dataService.loadById(id);\n store[callStateKey] && patchState(store, setLoaded(prefix));\n patchState(store, { [currentKey]: current });\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [setCurrentKey]: (current: E): void => {\n patchState(store, { [currentKey]: current });\n },\n [createKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const created = await dataService.create(entity);\n patchState(store, { [currentKey]: created });\n patchState(store, prefix ? addEntity(created, { collection: prefix }) : addEntity(created));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [updateKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const updated = await dataService.update(entity);\n patchState(store, { [currentKey]: updated });\n // Why do we need this cast to Partial<Entity>?\n const updateArg = { id: updated.id, changes: updated as Partial<Entity> };\n patchState(store, prefix ? updateEntity(updateArg, { collection: prefix }) : updateEntity(updateArg));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [updateAllKey]: async (entities: E[]): Promise<void> => {\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n const result = await dataService.updateAll(entities);\n patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n [deleteKey]: async (entity: E): Promise<void> => {\n patchState(store, { [currentKey]: entity });\n store[callStateKey] && patchState(store, setLoading(prefix));\n\n try {\n await dataService.delete(entity);\n patchState(store, { [currentKey]: undefined });\n patchState(store, prefix ? removeEntity(entity.id, { collection: prefix }) : removeEntity(entity.id));\n store[callStateKey] && patchState(store, setLoaded(prefix));\n }\n catch (e) {\n store[callStateKey] && patchState(store, setError(e, prefix));\n throw e;\n }\n },\n };\n })\n );\n}\n","import { SignalStoreFeature, patchState, signalStoreFeature, withComputed, withHooks, withMethods } from \"@ngrx/signals\";\nimport { EntityId, EntityMap, EntityState } from \"@ngrx/signals/entities\";\nimport { Signal, effect, signal, untracked, isSignal } from \"@angular/core\";\nimport { EntitySignals, NamedEntitySignals } from \"@ngrx/signals/entities/src/models\";\nimport { Entity, capitalize } from \"./with-data-service\";\nimport { Emtpy } from \"./shared/empty\";\n\nexport type StackItem = Record<string, unknown>;\n\nexport type NormalizedUndoRedoOptions = {\n maxStackSize: number;\n collections?: string[]\n}\n\nconst defaultOptions: NormalizedUndoRedoOptions = {\n maxStackSize: 100\n};\n\nexport type NamedUndoRedoState<Collection extends string> = {\n [K in Collection as `${K}EntityMap`]: EntityMap<Entity>;\n} & {\n [K in Collection as `${K}Ids`]: EntityId[];\n }\n\nexport type NamedUndoRedoSignals<Collection extends string> = {\n [K in Collection as `${K}Entities`]: Signal<Entity[]>\n}\n\nexport function getUndoRedoKeys(collections?: string[]): string[] {\n if (collections) {\n return collections.flatMap(c => [`${c}EntityMap`, `${c}Ids`, `selected${capitalize(c)}Ids`, `${c}Filter`])\n }\n return ['entityMap', 'ids', 'selectedIds', 'filter'];\n}\n\nexport function withUndoRedo<Collection extends string>(options?: { maxStackSize?: number; collections: Collection[] }): SignalStoreFeature<\n {\n state: Emtpy,\n // This alternative breaks type inference:\n // state: NamedEntityState<Entity, Collection>\n signals: NamedEntitySignals<Entity, Collection>,\n methods: Emtpy\n },\n {\n state: Emtpy,\n signals: {\n canUndo: Signal<boolean>,\n canRedo: Signal<boolean>\n },\n methods: {\n undo: () => void,\n redo: () => void\n }\n }>;\n\nexport function withUndoRedo(options?: { maxStackSize?: number }): SignalStoreFeature<\n {\n state: EntityState<Entity>,\n signals: EntitySignals<Entity>,\n methods: Emtpy\n },\n {\n state: Emtpy,\n signals: {\n canUndo: Signal<boolean>,\n canRedo: Signal<boolean>\n },\n methods: {\n undo: () => void,\n redo: () => void\n }\n }>;\n\nexport function withUndoRedo<Collection extends string>(options: {\n maxStackSize?: number;\n collections?: Collection[]\n} = {}): \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nSignalStoreFeature<any, any> {\n let previous: StackItem | null = null;\n let skipOnce = false;\n\n const normalized = {\n ...defaultOptions,\n ...options\n };\n\n //\n // Design Decision: This feature has its own\n // internal state.\n //\n\n const undoStack: StackItem[] = [];\n const redoStack: StackItem[] = [];\n\n const canUndo = signal(false);\n const canRedo = signal(false);\n\n const updateInternal = () => {\n canUndo.set(undoStack.length !== 0);\n canRedo.set(redoStack.length !== 0);\n };\n\n const keys = getUndoRedoKeys(normalized?.collections);\n\n return signalStoreFeature(\n\n withComputed(() => ({\n canUndo: canUndo.asReadonly(),\n canRedo: canRedo.asReadonly()\n })),\n withMethods((store) => ({\n undo(): void {\n const item = undoStack.pop();\n\n if (item && previous) {\n redoStack.push(previous);\n }\n\n if (item) {\n skipOnce = true;\n patchState(store, item);\n previous = item;\n }\n\n updateInternal();\n },\n redo(): void {\n const item = redoStack.pop();\n\n if (item && previous) {\n undoStack.push(previous);\n }\n\n if (item) {\n skipOnce = true;\n patchState(store, item);\n previous = item;\n }\n\n updateInternal();\n }\n })),\n withHooks({\n onInit(store: Record<string, unknown>) {\n effect(() => {\n\n const cand = keys.reduce((acc, key) => {\n const s = store[key];\n if (s && isSignal(s)) {\n return {\n ...acc,\n [key]: s()\n }\n }\n return acc;\n }, {});\n\n if (skipOnce) {\n skipOnce = false;\n return;\n }\n\n // Clear redoStack after recorded action\n redoStack.splice(0);\n\n if (previous) {\n undoStack.push(previous);\n }\n\n if (redoStack.length > normalized.maxStackSize) {\n undoStack.unshift();\n }\n\n previous = cand;\n\n // Don't propogate current reactive context\n untracked(() => updateInternal());\n })\n }\n })\n\n )\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["originalPatchState","patchState"],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ export interface DataService<E extends Entity, F extends Filter> {
|
|
|
13
13
|
loadById(id: EntityId): Promise<E>;
|
|
14
14
|
create(entity: E): Promise<E>;
|
|
15
15
|
update(entity: E): Promise<E>;
|
|
16
|
+
updateAll(entity: E[]): Promise<E[]>;
|
|
16
17
|
delete(entity: E): Promise<void>;
|
|
17
18
|
}
|
|
18
19
|
export declare function capitalize(str: string): string;
|
|
@@ -33,6 +34,7 @@ export declare function getDataServiceKeys(options: {
|
|
|
33
34
|
setCurrentKey: string;
|
|
34
35
|
createKey: string;
|
|
35
36
|
updateKey: string;
|
|
37
|
+
updateAllKey: string;
|
|
36
38
|
deleteKey: string;
|
|
37
39
|
};
|
|
38
40
|
export type NamedDataServiceState<E extends Entity, F extends Filter, Collection extends string> = {
|
|
@@ -67,6 +69,8 @@ export type NamedDataServiceMethods<E extends Entity, F extends Filter, Collecti
|
|
|
67
69
|
[K in Collection as `create${Capitalize<K>}`]: (entity: E) => Promise<void>;
|
|
68
70
|
} & {
|
|
69
71
|
[K in Collection as `update${Capitalize<K>}`]: (entity: E) => Promise<void>;
|
|
72
|
+
} & {
|
|
73
|
+
[K in Collection as `updateAll${Capitalize<K>}`]: (entity: E[]) => Promise<void>;
|
|
70
74
|
} & {
|
|
71
75
|
[K in Collection as `delete${Capitalize<K>}`]: (entity: E) => Promise<void>;
|
|
72
76
|
};
|
|
@@ -78,6 +82,7 @@ export type DataServiceMethods<E extends Entity, F extends Filter> = {
|
|
|
78
82
|
loadById(id: EntityId): Promise<void>;
|
|
79
83
|
create(entity: E): Promise<void>;
|
|
80
84
|
update(entity: E): Promise<void>;
|
|
85
|
+
updateAll(entities: E[]): Promise<void>;
|
|
81
86
|
delete(entity: E): Promise<void>;
|
|
82
87
|
};
|
|
83
88
|
export type Empty = Record<string, never>;
|