@angular-architects/ngrx-toolkit 18.0.2 → 18.0.3
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 +1 -428
- package/esm2022/index.mjs +1 -3
- package/esm2022/lib/with-undo-redo.mjs +10 -4
- package/esm2022/redux-connector/angular-architects-ngrx-toolkit-redux-connector.mjs +5 -0
- package/esm2022/redux-connector/index.mjs +3 -0
- package/esm2022/redux-connector/src/lib/create-redux.mjs +41 -0
- package/esm2022/redux-connector/src/lib/model.mjs +2 -0
- package/esm2022/redux-connector/src/lib/rxjs-interop/redux-method.mjs +22 -0
- package/esm2022/redux-connector/src/lib/signal-redux-store.mjs +43 -0
- package/esm2022/redux-connector/src/lib/util.mjs +13 -0
- package/fesm2022/angular-architects-ngrx-toolkit-redux-connector.mjs +119 -0
- package/fesm2022/angular-architects-ngrx-toolkit-redux-connector.mjs.map +1 -0
- package/fesm2022/angular-architects-ngrx-toolkit.mjs +34 -138
- package/fesm2022/angular-architects-ngrx-toolkit.mjs.map +1 -1
- package/index.d.ts +0 -2
- package/lib/with-undo-redo.d.ts +14 -25
- package/package.json +14 -2
- package/redux-connector/index.d.ts +2 -0
- package/esm2022/lib/redux-connector/create-redux.mjs +0 -41
- package/esm2022/lib/redux-connector/index.mjs +0 -2
- package/esm2022/lib/redux-connector/model.mjs +0 -2
- package/esm2022/lib/redux-connector/rxjs-interop/index.mjs +0 -2
- package/esm2022/lib/redux-connector/rxjs-interop/redux-method.mjs +0 -22
- package/esm2022/lib/redux-connector/signal-redux-store.mjs +0 -43
- package/esm2022/lib/redux-connector/util.mjs +0 -13
- package/lib/redux-connector/index.d.ts +0 -1
- package/lib/redux-connector/rxjs-interop/index.d.ts +0 -1
- /package/{lib/redux-connector → redux-connector/src/lib}/create-redux.d.ts +0 -0
- /package/{lib/redux-connector → redux-connector/src/lib}/model.d.ts +0 -0
- /package/{lib/redux-connector → redux-connector/src/lib}/rxjs-interop/redux-method.d.ts +0 -0
- /package/{lib/redux-connector → redux-connector/src/lib}/signal-redux-store.d.ts +0 -0
- /package/{lib/redux-connector → redux-connector/src/lib}/util.d.ts +0 -0
package/README.md
CHANGED
|
@@ -19,431 +19,4 @@ To install it, run
|
|
|
19
19
|
npm i @angular-architects/ngrx-toolkit
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
| @ngrx/signals | @angular-architects/ngrx-toolkit |
|
|
25
|
-
|----------------|----------------------------------|
|
|
26
|
-
| <= 18.0.0-rc.1 | 0.0.4 |
|
|
27
|
-
| 18.0.0-rc.2 | 18.0.0-rc.2.x |
|
|
28
|
-
|
|
29
|
-
To install it, run
|
|
30
|
-
|
|
31
|
-
```shell
|
|
32
|
-
npm i @angular-architects/ngrx-toolkit
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
- [NgRx Toolkit](#ngrx-toolkit)
|
|
37
|
-
- [Devtools: `withDevtools()`](#devtools-withdevtools)
|
|
38
|
-
- [Redux: `withRedux()`](#redux-withredux)
|
|
39
|
-
- [DataService `withDataService()`](#dataservice-withdataservice)
|
|
40
|
-
- [DataService with Dynamic Properties](#dataservice-with-dynamic-properties)
|
|
41
|
-
- [Storage Sync `withStorageSync`](#storage-sync-withstoragesync)
|
|
42
|
-
- [Redux Connector for the NgRx Signal Store `createReduxState()`](#redux-connector-for-the-ngrx-signal-store-createreduxstate)
|
|
43
|
-
- [Use a present Signal Store](#use-a-present-signal-store)
|
|
44
|
-
- [Use well-known NgRx Store Actions](#use-well-known-ngrx-store-actions)
|
|
45
|
-
- [Map Actions to Methods](#map-actions-to-methods)
|
|
46
|
-
- [Register an Angular Dependency Injection Provider](#register-an-angular-dependency-injection-provider)
|
|
47
|
-
- [Use the Store in your Component](#use-the-store-in-your-component)
|
|
48
|
-
- [FAQ](#faq)
|
|
49
|
-
- [Why is the version range to the `@ngrx/signals` dependency so strict?](#why-is-the-version-range-to-the-ngrxsignals-dependency-so-strict)
|
|
50
|
-
- [I have an idea for a new extension, can I contribute?](#i-have-an-idea-for-a-new-extension-can-i-contribute)
|
|
51
|
-
- [I require a feature that is not available in a lower version. What should I do?](#i-require-a-feature-that-is-not-available-in-a-lower-version-what-should-i-do)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
## Devtools: `withDevtools()`
|
|
55
|
-
|
|
56
|
-
This extension is very easy to use. Just add it to a `signalStore`. Example:
|
|
57
|
-
|
|
58
|
-
```typescript
|
|
59
|
-
export const FlightStore = signalStore(
|
|
60
|
-
{ providedIn: 'root' },
|
|
61
|
-
withDevtools('flights'), // <-- add this
|
|
62
|
-
withState({ flights: [] as Flight[] })
|
|
63
|
-
// ...
|
|
64
|
-
);
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## Redux: `withRedux()`
|
|
68
|
-
|
|
69
|
-
`withRedux()` bring back the Redux pattern into the Signal Store.
|
|
70
|
-
|
|
71
|
-
It can be combined with any other extension of the Signal Store.
|
|
72
|
-
|
|
73
|
-
Example:
|
|
74
|
-
|
|
75
|
-
```typescript
|
|
76
|
-
export const FlightStore = signalStore(
|
|
77
|
-
{ providedIn: 'root' },
|
|
78
|
-
withState({ flights: [] as Flight[] }),
|
|
79
|
-
withRedux({
|
|
80
|
-
actions: {
|
|
81
|
-
public: {
|
|
82
|
-
load: payload<{ from: string; to: string }>(),
|
|
83
|
-
},
|
|
84
|
-
private: {
|
|
85
|
-
loaded: payload<{ flights: Flight[] }>(),
|
|
86
|
-
},
|
|
87
|
-
},
|
|
88
|
-
reducer(actions, on) {
|
|
89
|
-
on(actions.loaded, ({ flights }, state) => {
|
|
90
|
-
patchState(state, 'flights loaded', { flights });
|
|
91
|
-
});
|
|
92
|
-
},
|
|
93
|
-
effects(actions, create) {
|
|
94
|
-
const httpClient = inject(HttpClient);
|
|
95
|
-
return {
|
|
96
|
-
load$: create(actions.load).pipe(
|
|
97
|
-
switchMap(({ from, to }) =>
|
|
98
|
-
httpClient.get<Flight[]>('https://demo.angulararchitects.io/api/flight', {
|
|
99
|
-
params: new HttpParams().set('from', from).set('to', to),
|
|
100
|
-
})
|
|
101
|
-
),
|
|
102
|
-
tap((flights) => actions.loaded({ flights }))
|
|
103
|
-
),
|
|
104
|
-
};
|
|
105
|
-
},
|
|
106
|
-
})
|
|
107
|
-
);
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
## DataService `withDataService()`
|
|
111
|
-
|
|
112
|
-
`withDataService()` allows to connect a Data Service to the store:
|
|
113
|
-
|
|
114
|
-
This gives you a store for a CRUD use case:
|
|
115
|
-
|
|
116
|
-
```typescript
|
|
117
|
-
export const SimpleFlightBookingStore = signalStore(
|
|
118
|
-
{ providedIn: 'root' },
|
|
119
|
-
withCallState(),
|
|
120
|
-
withEntities<Flight>(),
|
|
121
|
-
withDataService({
|
|
122
|
-
dataServiceType: FlightService,
|
|
123
|
-
filter: { from: 'Paris', to: 'New York' },
|
|
124
|
-
}),
|
|
125
|
-
withUndoRedo()
|
|
126
|
-
);
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
The features `withCallState` and `withUndoRedo` are optional, but when present, they enrich each other.
|
|
130
|
-
|
|
131
|
-
The Data Service needs to implement the `DataService` interface:
|
|
132
|
-
|
|
133
|
-
```typescript
|
|
134
|
-
@Injectable({
|
|
135
|
-
providedIn: 'root'
|
|
136
|
-
})
|
|
137
|
-
export class FlightService implements DataService<Flight, FlightFilter> {
|
|
138
|
-
loadById(id: EntityId): Promise<Flight> { ... }
|
|
139
|
-
load(filter: FlightFilter): Promise<Flight[]> { ... }
|
|
140
|
-
|
|
141
|
-
create(entity: Flight): Promise<Flight> { ... }
|
|
142
|
-
update(entity: Flight): Promise<Flight> { ... }
|
|
143
|
-
delete(entity: Flight): Promise<void> { ... }
|
|
144
|
-
[...]
|
|
145
|
-
}
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
Once the store is defined, it gives its consumers numerous signals and methods they just need to delegate to:
|
|
149
|
-
|
|
150
|
-
```typescript
|
|
151
|
-
@Component(...)
|
|
152
|
-
export class FlightSearchSimpleComponent {
|
|
153
|
-
private store = inject(SimpleFlightBookingStore);
|
|
154
|
-
|
|
155
|
-
from = this.store.filter.from;
|
|
156
|
-
to = this.store.filter.to;
|
|
157
|
-
flights = this.store.entities;
|
|
158
|
-
selected = this.store.selectedEntities;
|
|
159
|
-
selectedIds = this.store.selectedIds;
|
|
160
|
-
|
|
161
|
-
loading = this.store.loading;
|
|
162
|
-
|
|
163
|
-
canUndo = this.store.canUndo;
|
|
164
|
-
canRedo = this.store.canRedo;
|
|
165
|
-
|
|
166
|
-
async search() {
|
|
167
|
-
this.store.load();
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
undo(): void {
|
|
171
|
-
this.store.undo();
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
redo(): void {
|
|
175
|
-
this.store.redo();
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
updateCriteria(from: string, to: string): void {
|
|
179
|
-
this.store.updateFilter({ from, to });
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
updateBasket(id: number, selected: boolean): void {
|
|
183
|
-
this.store.updateSelected(id, selected);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
## DataService with Dynamic Properties
|
|
190
|
-
|
|
191
|
-
To avoid naming conflicts, the properties set up by `withDataService` and the connected features can be configured in a typesafe way:
|
|
192
|
-
|
|
193
|
-
```typescript
|
|
194
|
-
export const FlightBookingStore = signalStore(
|
|
195
|
-
{ providedIn: 'root' },
|
|
196
|
-
withCallState({
|
|
197
|
-
collection: 'flight',
|
|
198
|
-
}),
|
|
199
|
-
withEntities({
|
|
200
|
-
entity: type<Flight>(),
|
|
201
|
-
collection: 'flight',
|
|
202
|
-
}),
|
|
203
|
-
withDataService({
|
|
204
|
-
dataServiceType: FlightService,
|
|
205
|
-
filter: { from: 'Graz', to: 'Hamburg' },
|
|
206
|
-
collection: 'flight',
|
|
207
|
-
}),
|
|
208
|
-
withUndoRedo({
|
|
209
|
-
collections: ['flight'],
|
|
210
|
-
})
|
|
211
|
-
);
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
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:
|
|
215
|
-
|
|
216
|
-
```typescript
|
|
217
|
-
@Component(...)
|
|
218
|
-
export class FlightSearchDynamicComponent {
|
|
219
|
-
private store = inject(FlightBookingStore);
|
|
220
|
-
|
|
221
|
-
from = this.store.flightFilter.from;
|
|
222
|
-
to = this.store.flightFilter.to;
|
|
223
|
-
flights = this.store.flightEntities;
|
|
224
|
-
selected = this.store.selectedFlightEntities;
|
|
225
|
-
selectedIds = this.store.selectedFlightIds;
|
|
226
|
-
|
|
227
|
-
loading = this.store.flightLoading;
|
|
228
|
-
|
|
229
|
-
canUndo = this.store.canUndo;
|
|
230
|
-
canRedo = this.store.canRedo;
|
|
231
|
-
|
|
232
|
-
async search() {
|
|
233
|
-
this.store.loadFlightEntities();
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
undo(): void {
|
|
237
|
-
this.store.undo();
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
redo(): void {
|
|
241
|
-
this.store.redo();
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
updateCriteria(from: string, to: string): void {
|
|
245
|
-
this.store.updateFlightFilter({ from, to });
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
updateBasket(id: number, selected: boolean): void {
|
|
249
|
-
this.store.updateSelectedFlightEntities(id, selected);
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
}
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
## Storage Sync `withStorageSync()`
|
|
256
|
-
|
|
257
|
-
`withStorageSync` adds automatic or manual synchronization with Web Storage (`localstorage`/`sessionstorage`).
|
|
258
|
-
|
|
259
|
-
> [!WARNING]
|
|
260
|
-
> As Web Storage only works in browser environments it will fallback to a stub implementation on server environments.
|
|
261
|
-
|
|
262
|
-
Example:
|
|
263
|
-
|
|
264
|
-
```ts
|
|
265
|
-
const SyncStore = signalStore(
|
|
266
|
-
withStorageSync<User>({
|
|
267
|
-
key: 'synced', // key used when writing to/reading from storage
|
|
268
|
-
autoSync: false, // read from storage on init and write on state changes - `true` by default
|
|
269
|
-
select: (state: User) => Partial<User>, // projection to keep specific slices in sync
|
|
270
|
-
parse: (stateString: string) => State, // custom parsing from storage - `JSON.parse` by default
|
|
271
|
-
stringify: (state: User) => string, // custom stringification - `JSON.stringify` by default
|
|
272
|
-
storage: () => sessionstorage, // factory to select storage to sync with
|
|
273
|
-
})
|
|
274
|
-
);
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
```ts
|
|
278
|
-
@Component(...)
|
|
279
|
-
public class SyncedStoreComponent {
|
|
280
|
-
private syncStore = inject(SyncStore);
|
|
281
|
-
|
|
282
|
-
updateFromStorage(): void {
|
|
283
|
-
this.syncStore.readFromStorage(); // reads the stored item from storage and patches the state
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
updateStorage(): void {
|
|
287
|
-
this.syncStore.writeToStorage(); // writes the current state to storage
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
clearStorage(): void {
|
|
291
|
-
this.syncStore.clearStorage(); // clears the stored item in storage
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
## Redux Connector for the NgRx Signal Store `createReduxState()`
|
|
297
|
-
|
|
298
|
-
The Redux Connector turns any `signalStore()` into a Gobal State Management Slice following the Redux pattern.
|
|
299
|
-
|
|
300
|
-
It supports:
|
|
301
|
-
|
|
302
|
-
✅ Well-known NgRx Store Actions \
|
|
303
|
-
✅ Global Action `dispatch()` \
|
|
304
|
-
✅ Angular Lazy Loading \
|
|
305
|
-
✅ Auto-generated `provideNamedStore()` & `injectNamedStore()` Functions \
|
|
306
|
-
✅ Global Action to Store Method Mappers \
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
### Use a present Signal Store
|
|
310
|
-
|
|
311
|
-
```typescript
|
|
312
|
-
export const FlightStore = signalStore(
|
|
313
|
-
// State
|
|
314
|
-
withEntities({ entity: type<Flight>(), collection: 'flight' }),
|
|
315
|
-
withEntities({ entity: type<number>(), collection: 'hide' }),
|
|
316
|
-
// Selectors
|
|
317
|
-
withComputed(({ flightEntities, hideEntities }) => ({
|
|
318
|
-
filteredFlights: computed(() => flightEntities()
|
|
319
|
-
.filter(flight => !hideEntities().includes(flight.id))),
|
|
320
|
-
flightCount: computed(() => flightEntities().length),
|
|
321
|
-
})),
|
|
322
|
-
// Updater
|
|
323
|
-
withMethods(store => ({
|
|
324
|
-
setFlights: (state: { flights: Flight[] }) => patchState(store,
|
|
325
|
-
setAllEntities(state.flights, { collection: 'flight' })),
|
|
326
|
-
updateFlight: (state: { flight: Flight }) => patchState(store,
|
|
327
|
-
updateEntity({ id: state.flight.id, changes: state.flight }, { collection: 'flight' })),
|
|
328
|
-
clearFlights: () => patchState(store,
|
|
329
|
-
removeAllEntities({ collection: 'flight' })),
|
|
330
|
-
})),
|
|
331
|
-
// Effects
|
|
332
|
-
withMethods((store, flightService = inject(FlightService)) => ({
|
|
333
|
-
loadFlights: reduxMethod<FlightFilter, { flights: Flight[] }>(pipe(
|
|
334
|
-
switchMap(filter => from(
|
|
335
|
-
flightService.load({ from: filter.from, to: filter.to })
|
|
336
|
-
)),
|
|
337
|
-
map(flights => ({ flights })),
|
|
338
|
-
), store.setFlights),
|
|
339
|
-
})),
|
|
340
|
-
);
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
### Use well-known NgRx Store Actions
|
|
344
|
-
|
|
345
|
-
```typescript
|
|
346
|
-
export const ticketActions = createActionGroup({
|
|
347
|
-
source: 'tickets',
|
|
348
|
-
events: {
|
|
349
|
-
'flights load': props<FlightFilter>(),
|
|
350
|
-
'flights loaded': props<{ flights: Flight[] }>(),
|
|
351
|
-
'flights loaded by passenger': props<{ flights: Flight[] }>(),
|
|
352
|
-
'flight update': props<{ flight: Flight }>(),
|
|
353
|
-
'flights clear': emptyProps()
|
|
354
|
-
}
|
|
355
|
-
});
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
### Map Actions to Methods
|
|
359
|
-
|
|
360
|
-
```typescript
|
|
361
|
-
export const { provideFlightStore, injectFlightStore } =
|
|
362
|
-
createReduxState('flight', FlightStore, store => withActionMappers(
|
|
363
|
-
mapAction(
|
|
364
|
-
// Filtered Action
|
|
365
|
-
ticketActions.flightsLoad,
|
|
366
|
-
// Side-Effect
|
|
367
|
-
store.loadFlights,
|
|
368
|
-
// Result Action
|
|
369
|
-
ticketActions.flightsLoaded),
|
|
370
|
-
mapAction(
|
|
371
|
-
// Filtered Actions
|
|
372
|
-
ticketActions.flightsLoaded, ticketActions.flightsLoadedByPassenger,
|
|
373
|
-
// State Updater Method (like Reducers)
|
|
374
|
-
store.setFlights
|
|
375
|
-
),
|
|
376
|
-
mapAction(ticketActions.flightUpdate, store.updateFlight),
|
|
377
|
-
mapAction(ticketActions.flightsClear, store.clearFlights),
|
|
378
|
-
)
|
|
379
|
-
);
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
### Register an Angular Dependency Injection Provider
|
|
383
|
-
|
|
384
|
-
```typescript
|
|
385
|
-
export const appRoutes: Route[] = [
|
|
386
|
-
{
|
|
387
|
-
path: 'flight-search-redux-connector',
|
|
388
|
-
providers: [provideFlightStore()],
|
|
389
|
-
component: FlightSearchReducConnectorComponent
|
|
390
|
-
},
|
|
391
|
-
];
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
### Use the Store in your Component
|
|
395
|
-
|
|
396
|
-
```typescript
|
|
397
|
-
@Component({
|
|
398
|
-
standalone: true,
|
|
399
|
-
imports: [
|
|
400
|
-
JsonPipe,
|
|
401
|
-
RouterLink,
|
|
402
|
-
FormsModule,
|
|
403
|
-
FlightCardComponent
|
|
404
|
-
],
|
|
405
|
-
selector: 'demo-flight-search-redux-connector',
|
|
406
|
-
templateUrl: './flight-search.component.html',
|
|
407
|
-
})
|
|
408
|
-
export class FlightSearchReducConnectorComponent {
|
|
409
|
-
private store = injectFlightStore();
|
|
410
|
-
|
|
411
|
-
protected flights = this.store.flightEntities;
|
|
412
|
-
|
|
413
|
-
protected search() {
|
|
414
|
-
this.store.dispatch(
|
|
415
|
-
ticketActions.flightsLoad({
|
|
416
|
-
from: this.localState.filter.from(),
|
|
417
|
-
to: this.localState.filter.to()
|
|
418
|
-
})
|
|
419
|
-
);
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
protected reset(): void {
|
|
423
|
-
this.store.dispatch(ticketActions.flightsClear());
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
```
|
|
427
|
-
## FAQ
|
|
428
|
-
|
|
429
|
-
### Why is the version range to the `@ngrx/signals` dependency so strict?
|
|
430
|
-
|
|
431
|
-
The strict version range for @ngrx/signals is necessary because some of our features rely on encapsulated types, which can change even in a patch release.
|
|
432
|
-
|
|
433
|
-
To ensure stability, we clone these internal types and run integration tests for each release. This rigorous testing means we may need to update our version, even for a patch release, to maintain compatibility and stability.
|
|
434
|
-
|
|
435
|
-
### I have an idea for a new extension, can I contribute?
|
|
436
|
-
|
|
437
|
-
Yes, please! We are always looking for new ideas and contributions.
|
|
438
|
-
|
|
439
|
-
Since we don't want to bloat the library, we are very selective about new features. You also have to provide the following:
|
|
440
|
-
- Good test coverage so that we can update it properly and don't have to call you 😉.
|
|
441
|
-
- A use case showing the feature in action in the demo app of the repository.
|
|
442
|
-
- An entry to the README.md.
|
|
443
|
-
|
|
444
|
-
This project uses [pnpm](https://pnpm.io/) to manage dependencies and run tasks (for local development and CI).
|
|
445
|
-
|
|
446
|
-
### I require a feature that is not available in a lower version. What should I do?
|
|
447
|
-
|
|
448
|
-
Please create an issue. Very likely, we are able to cherry-pick the feature into the lower version.
|
|
449
|
-
|
|
22
|
+
For more information, see the [NgRx Toolkit Documentation](https://github.com/angular-architects/ngrx-toolkit/blob/main/README.md/).
|
package/esm2022/index.mjs
CHANGED
|
@@ -5,6 +5,4 @@ export * from './lib/with-undo-redo';
|
|
|
5
5
|
export * from './lib/with-data-service';
|
|
6
6
|
export { withStorageSync } from './lib/with-storage-sync';
|
|
7
7
|
export * from './lib/with-pagination';
|
|
8
|
-
|
|
9
|
-
export * from './lib/redux-connector/rxjs-interop';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxHQUVaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUVqQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0seUJBQXlCLENBQUM7QUFDdEUsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsb0NBQW9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICB3aXRoRGV2dG9vbHMsXG4gIHBhdGNoU3RhdGUsXG4gIHVwZGF0ZVN0YXRlLFxuICBBY3Rpb24sXG59IGZyb20gJy4vbGliL3dpdGgtZGV2dG9vbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvd2l0aC1yZWR1eCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpdGgtY2FsbC1zdGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi93aXRoLXVuZG8tcmVkbyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi93aXRoLWRhdGEtc2VydmljZSc7XG5leHBvcnQgeyB3aXRoU3RvcmFnZVN5bmMsIFN5bmNDb25maWcgfSBmcm9tICcuL2xpYi93aXRoLXN0b3JhZ2Utc3luYyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi93aXRoLXBhZ2luYXRpb24nO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZWR1eC1jb25uZWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVkdXgtY29ubmVjdG9yL3J4anMtaW50ZXJvcCc7XG4iXX0=
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxHQUVaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUVqQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0seUJBQXlCLENBQUM7QUFDdEUsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIHdpdGhEZXZ0b29scyxcbiAgcGF0Y2hTdGF0ZSxcbiAgdXBkYXRlU3RhdGUsXG4gIEFjdGlvbixcbn0gZnJvbSAnLi9saWIvd2l0aC1kZXZ0b29scyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi93aXRoLXJlZHV4JztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvd2l0aC1jYWxsLXN0YXRlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpdGgtdW5kby1yZWRvJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpdGgtZGF0YS1zZXJ2aWNlJztcbmV4cG9ydCB7IHdpdGhTdG9yYWdlU3luYywgU3luY0NvbmZpZyB9IGZyb20gJy4vbGliL3dpdGgtc3RvcmFnZS1zeW5jJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpdGgtcGFnaW5hdGlvbic7XG4iXX0=
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { patchState, signalStoreFeature, withComputed, withHooks, withMethods
|
|
1
|
+
import { patchState, signalStoreFeature, withComputed, withHooks, withMethods } from '@ngrx/signals';
|
|
2
2
|
import { effect, signal, untracked, isSignal } from '@angular/core';
|
|
3
3
|
import { capitalize } from './with-data-service';
|
|
4
4
|
const defaultOptions = {
|
|
5
5
|
maxStackSize: 100,
|
|
6
|
+
keys: [],
|
|
7
|
+
skip: 0,
|
|
6
8
|
};
|
|
7
9
|
export function getUndoRedoKeys(collections) {
|
|
8
10
|
if (collections) {
|
|
@@ -15,7 +17,7 @@ export function getUndoRedoKeys(collections) {
|
|
|
15
17
|
}
|
|
16
18
|
return ['entityMap', 'ids', 'selectedIds', 'filter'];
|
|
17
19
|
}
|
|
18
|
-
export function withUndoRedo(options
|
|
20
|
+
export function withUndoRedo(options) {
|
|
19
21
|
let previous = null;
|
|
20
22
|
let skipOnce = false;
|
|
21
23
|
const normalized = {
|
|
@@ -34,7 +36,7 @@ export function withUndoRedo(options = {}) {
|
|
|
34
36
|
canUndo.set(undoStack.length !== 0);
|
|
35
37
|
canRedo.set(redoStack.length !== 0);
|
|
36
38
|
};
|
|
37
|
-
const keys = getUndoRedoKeys(normalized
|
|
39
|
+
const keys = [...getUndoRedoKeys(normalized.collections), ...normalized.keys];
|
|
38
40
|
return signalStoreFeature(withComputed(() => ({
|
|
39
41
|
canUndo: canUndo.asReadonly(),
|
|
40
42
|
canRedo: canRedo.asReadonly(),
|
|
@@ -76,6 +78,10 @@ export function withUndoRedo(options = {}) {
|
|
|
76
78
|
}
|
|
77
79
|
return acc;
|
|
78
80
|
}, {});
|
|
81
|
+
if (normalized.skip > 0) {
|
|
82
|
+
normalized.skip--;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
79
85
|
if (skipOnce) {
|
|
80
86
|
skipOnce = false;
|
|
81
87
|
return;
|
|
@@ -104,4 +110,4 @@ export function withUndoRedo(options = {}) {
|
|
|
104
110
|
},
|
|
105
111
|
}));
|
|
106
112
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC11bmRvLXJlZG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtdW5kby1yZWRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixTQUFTLEVBQ1QsV0FBVyxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBYXpELE1BQU0sY0FBYyxHQUE4QjtJQUNoRCxZQUFZLEVBQUUsR0FBRztDQUNsQixDQUFDO0FBRUYsTUFBTSxVQUFVLGVBQWUsQ0FBQyxXQUFzQjtJQUNwRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEMsR0FBRyxDQUFDLFdBQVc7WUFDZixHQUFHLENBQUMsS0FBSztZQUNULFdBQVcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQzdCLEdBQUcsQ0FBQyxRQUFRO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBd0NELE1BQU0sVUFBVSxZQUFZLENBQzFCLFVBR0ksRUFBRTtJQUdOLElBQUksUUFBUSxHQUFxQixJQUFJLENBQUM7SUFDdEMsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRXJCLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLEdBQUcsY0FBYztRQUNqQixHQUFHLE9BQU87S0FDWCxDQUFDO0lBRUYsRUFBRTtJQUNGLDRDQUE0QztJQUM1Qyxr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UUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDdEQsT0FBTztnQkFDVCxDQUFDO2dCQUVELHdDQUF3QztnQkFDeEMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFcEIsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDYixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO2dCQUVELElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQy9DLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQztnQkFFRCxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUVoQiwyQ0FBMkM7Z0JBQzNDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUNGLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgcGF0Y2hTdGF0ZSxcbiAgc2lnbmFsU3RvcmVGZWF0dXJlLFxuICB3aXRoQ29tcHV0ZWQsXG4gIHdpdGhIb29rcyxcbiAgd2l0aE1ldGhvZHMsXG4gIEVtcHR5RmVhdHVyZVJlc3VsdCxcbn0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5pbXBvcnQgeyBFbnRpdHlJZCwgRW50aXR5TWFwLCBFbnRpdHlTdGF0ZSB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMvZW50aXRpZXMnO1xuaW1wb3J0IHsgU2lnbmFsLCBlZmZlY3QsIHNpZ25hbCwgdW50cmFja2VkLCBpc1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRW50aXR5LCBjYXBpdGFsaXplIH0gZnJvbSAnLi93aXRoLWRhdGEtc2VydmljZSc7XG5pbXBvcnQge1xuICBFbnRpdHlDb21wdXRlZCxcbiAgTmFtZWRFbnRpdHlDb21wdXRlZCxcbn0gZnJvbSAnLi9zaGFyZWQvc2lnbmFsLXN0b3JlLW1vZGVscyc7XG5cbmV4cG9ydCB0eXBlIFN0YWNrSXRlbSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBOb3JtYWxpemVkVW5kb1JlZG9PcHRpb25zID0ge1xuICBtYXhTdGFja1NpemU6IG51bWJlcjtcbiAgY29sbGVjdGlvbnM/OiBzdHJpbmdbXTtcbn07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOb3JtYWxpemVkVW5kb1JlZG9PcHRpb25zID0ge1xuICBtYXhTdGFja1NpemU6IDEwMCxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmRvUmVkb0tleXMoY29sbGVjdGlvbnM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgaWYgKGNvbGxlY3Rpb25zKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb25zLmZsYXRNYXAoKGMpID0+IFtcbiAgICAgIGAke2N9RW50aXR5TWFwYCxcbiAgICAgIGAke2N9SWRzYCxcbiAgICAgIGBzZWxlY3RlZCR7Y2FwaXRhbGl6ZShjKX1JZHNgLFxuICAgICAgYCR7Y31GaWx0ZXJgLFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBbJ2VudGl0eU1hcCcsICdpZHMnLCAnc2VsZWN0ZWRJZHMnLCAnZmlsdGVyJ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVW5kb1JlZG88Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4ob3B0aW9ucz86IHtcbiAgbWF4U3RhY2tTaXplPzogbnVtYmVyO1xuICBjb2xsZWN0aW9uczogQ29sbGVjdGlvbltdO1xufSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0ICYge1xuICAgIGNvbXB1dGVkOiBOYW1lZEVudGl0eUNvbXB1dGVkPEVudGl0eSwgQ29sbGVjdGlvbj47XG4gIH0sXG4gIEVtcHR5RmVhdHVyZVJlc3VsdCAmIHtcbiAgICBjb21wdXRlZDoge1xuICAgICAgY2FuVW5kbzogU2lnbmFsPGJvb2xlYW4+O1xuICAgICAgY2FuUmVkbzogU2lnbmFsPGJvb2xlYW4+O1xuICAgIH07XG4gICAgbWV0aG9kczoge1xuICAgICAgdW5kbzogKCkgPT4gdm9pZDtcbiAgICAgIHJlZG86ICgpID0+IHZvaWQ7XG4gICAgfTtcbiAgfVxuPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhVbmRvUmVkbyhvcHRpb25zPzoge1xuICBtYXhTdGFja1NpemU/OiBudW1iZXI7XG59KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBFbXB0eUZlYXR1cmVSZXN1bHQgJiB7XG4gICAgc3RhdGU6IEVudGl0eVN0YXRlPEVudGl0eT47XG4gICAgY29tcHV0ZWQ6IEVudGl0eUNvbXB1dGVkPEVudGl0eT47XG4gIH0sXG4gIEVtcHR5RmVhdHVyZVJlc3VsdCAmIHtcbiAgICBjb21wdXRlZDoge1xuICAgICAgY2FuVW5kbzogU2lnbmFsPGJvb2xlYW4+O1xuICAgICAgY2FuUmVkbzogU2lnbmFsPGJvb2xlYW4+O1xuICAgIH07XG4gICAgbWV0aG9kczoge1xuICAgICAgdW5kbzogKCkgPT4gdm9pZDtcbiAgICAgIHJlZG86ICgpID0+IHZvaWQ7XG4gICAgfTtcbiAgfVxuPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhVbmRvUmVkbzxDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihcbiAgb3B0aW9uczoge1xuICAgIG1heFN0YWNrU2l6ZT86IG51bWJlcjtcbiAgICBjb2xsZWN0aW9ucz86IENvbGxlY3Rpb25bXTtcbiAgfSA9IHt9XG4pOiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuU2lnbmFsU3RvcmVGZWF0dXJlPGFueSwgYW55PiB7XG4gIGxldCBwcmV2aW91czogU3RhY2tJdGVtIHwgbnVsbCA9IG51bGw7XG4gIGxldCBza2lwT25jZSA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICAvL1xuICAvLyBEZXNpZ24gRGVjaXNpb246IFRoaXMgZmVhdHVyZSBoYXMgaXRzIG93blxuICAvLyBpbnRlcm5hbCBzdGF0ZS5cbiAgLy9cblxuICBjb25zdCB1bmRvU3RhY2s6IFN0YWNrSXRlbVtdID0gW107XG4gIGNvbnN0IHJlZG9TdGFjazogU3RhY2tJdGVtW10gPSBbXTtcblxuICBjb25zdCBjYW5VbmRvID0gc2lnbmFsKGZhbHNlKTtcbiAgY29uc3QgY2FuUmVkbyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgY29uc3QgdXBkYXRlSW50ZXJuYWwgPSAoKSA9PiB7XG4gICAgY2FuVW5kby5zZXQodW5kb1N0YWNrLmxlbmd0aCAhPT0gMCk7XG4gICAgY2FuUmVkby5zZXQocmVkb1N0YWNrLmxlbmd0aCAhPT0gMCk7XG4gIH07XG5cbiAgY29uc3Qga2V5cyA9IGdldFVuZG9SZWRvS2V5cyhub3JtYWxpemVkPy5jb2xsZWN0aW9ucyk7XG5cbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoQ29tcHV0ZWQoKCkgPT4gKHtcbiAgICAgIGNhblVuZG86IGNhblVuZG8uYXNSZWFkb25seSgpLFxuICAgICAgY2FuUmVkbzogY2FuUmVkby5hc1JlYWRvbmx5KCksXG4gICAgfSkpLFxuICAgIHdpdGhNZXRob2RzKChzdG9yZSkgPT4gKHtcbiAgICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB1bmRvU3RhY2sucG9wKCk7XG5cbiAgICAgICAgaWYgKGl0ZW0gJiYgcHJldmlvdXMpIHtcbiAgICAgICAgICByZWRvU3RhY2sucHVzaChwcmV2aW91cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgIHNraXBPbmNlID0gdHJ1ZTtcbiAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBpdGVtKTtcbiAgICAgICAgICBwcmV2aW91cyA9IGl0ZW07XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVJbnRlcm5hbCgpO1xuICAgICAgfSxcbiAgICAgIHJlZG8oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSByZWRvU3RhY2sucG9wKCk7XG5cbiAgICAgICAgaWYgKGl0ZW0gJiYgcHJldmlvdXMpIHtcbiAgICAgICAgICB1bmRvU3RhY2sucHVzaChwcmV2aW91cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgIHNraXBPbmNlID0gdHJ1ZTtcbiAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBpdGVtKTtcbiAgICAgICAgICBwcmV2aW91cyA9IGl0ZW07XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVJbnRlcm5hbCgpO1xuICAgICAgfSxcbiAgICB9KSksXG4gICAgd2l0aEhvb2tzKHtcbiAgICAgIG9uSW5pdChzdG9yZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW5kID0ga2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzID0gc3RvcmVba2V5XTtcbiAgICAgICAgICAgIGlmIChzICYmIGlzU2lnbmFsKHMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAgIFtrZXldOiBzKCksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KTtcblxuICAgICAgICAgIGlmIChza2lwT25jZSkge1xuICAgICAgICAgICAgc2tpcE9uY2UgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIERlZXAgQ29tcGFyaXNvbiB0byBwcmV2ZW50IGR1cGxpY2F0ZWQgZW50cmllc1xuICAgICAgICAgIC8vIG9uIHRoZSBzdGFjay4gVGhpcyBjYW4gZS5nLiBoYXBwZW4gYWZ0ZXIgYW4gdW5kb1xuICAgICAgICAgIC8vIGlmIHRoZSBjb21wb25lbnQgc2VuZHMgYmFjayB0aGUgdW5kb25lIGZpbHRlclxuICAgICAgICAgIC8vIHRvIHRoZSBzdG9yZS5cbiAgICAgICAgICAvL1xuICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShjYW5kKSA9PT0gSlNPTi5zdHJpbmdpZnkocHJldmlvdXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2xlYXIgcmVkb1N0YWNrIGFmdGVyIHJlY29yZGVkIGFjdGlvblxuICAgICAgICAgIHJlZG9TdGFjay5zcGxpY2UoMCk7XG5cbiAgICAgICAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgICAgICAgIHVuZG9TdGFjay5wdXNoKHByZXZpb3VzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVkb1N0YWNrLmxlbmd0aCA+IG5vcm1hbGl6ZWQubWF4U3RhY2tTaXplKSB7XG4gICAgICAgICAgICB1bmRvU3RhY2sudW5zaGlmdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHByZXZpb3VzID0gY2FuZDtcblxuICAgICAgICAgIC8vIERvbid0IHByb3BvZ2F0ZSBjdXJyZW50IHJlYWN0aXZlIGNvbnRleHRcbiAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdXBkYXRlSW50ZXJuYWwoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KVxuICApO1xufVxuIl19
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC11bmRvLXJlZG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtdW5kby1yZWRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixTQUFTLEVBQ1QsV0FBVyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBV2pELE1BQU0sY0FBYyxHQUE4QjtJQUNoRCxZQUFZLEVBQUUsR0FBRztJQUNqQixJQUFJLEVBQUUsRUFBRTtJQUNSLElBQUksRUFBRSxDQUFDO0NBQ1IsQ0FBQztBQUVGLE1BQU0sVUFBVSxlQUFlLENBQUMsV0FBc0I7SUFDcEQsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQixPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLEdBQUcsQ0FBQyxXQUFXO1lBQ2YsR0FBRyxDQUFDLEtBQUs7WUFDVCxXQUFXLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUM3QixHQUFHLENBQUMsUUFBUTtTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQWVELE1BQU0sVUFBVSxZQUFZLENBQ1EsT0FBZ0M7SUFhbEUsSUFBSSxRQUFRLEdBQXFCLElBQUksQ0FBQztJQUN0QyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFckIsTUFBTSxVQUFVLEdBQUc7UUFDakIsR0FBRyxjQUFjO1FBQ2pCLEdBQUcsT0FBTztLQUNY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QUssQ0FBQztvQkFDakIsT0FBTztnQkFDVCxDQUFDO2dCQUVELEVBQUU7Z0JBQ0YsZ0RBQWdEO2dCQUNoRCxtREFBbUQ7Z0JBQ25ELGdEQUFnRDtnQkFDaEQsZ0JBQWdCO2dCQUNoQixFQUFFO2dCQUNGLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ3RELE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCx3Q0FBd0M7Z0JBQ3hDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXBCLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ2IsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztnQkFFRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUMvQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7Z0JBRUQsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFFaEIsMkNBQTJDO2dCQUMzQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTaWduYWxTdG9yZUZlYXR1cmUsXG4gIHBhdGNoU3RhdGUsXG4gIHNpZ25hbFN0b3JlRmVhdHVyZSxcbiAgd2l0aENvbXB1dGVkLFxuICB3aXRoSG9va3MsXG4gIHdpdGhNZXRob2RzLFxuICBFbXB0eUZlYXR1cmVSZXN1bHQsIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdFxufSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IFNpZ25hbCwgZWZmZWN0LCBzaWduYWwsIHVudHJhY2tlZCwgaXNTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICcuL3dpdGgtZGF0YS1zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgU3RhY2tJdGVtID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIE5vcm1hbGl6ZWRVbmRvUmVkb09wdGlvbnMgPSB7XG4gIG1heFN0YWNrU2l6ZTogbnVtYmVyO1xuICBjb2xsZWN0aW9ucz86IHN0cmluZ1tdO1xuICBrZXlzOiBzdHJpbmdbXTtcbiAgc2tpcDogbnVtYmVyLFxufTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5vcm1hbGl6ZWRVbmRvUmVkb09wdGlvbnMgPSB7XG4gIG1heFN0YWNrU2l6ZTogMTAwLFxuICBrZXlzOiBbXSxcbiAgc2tpcDogMCxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmRvUmVkb0tleXMoY29sbGVjdGlvbnM/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgaWYgKGNvbGxlY3Rpb25zKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb25zLmZsYXRNYXAoKGMpID0+IFtcbiAgICAgIGAke2N9RW50aXR5TWFwYCxcbiAgICAgIGAke2N9SWRzYCxcbiAgICAgIGBzZWxlY3RlZCR7Y2FwaXRhbGl6ZShjKX1JZHNgLFxuICAgICAgYCR7Y31GaWx0ZXJgLFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBbJ2VudGl0eU1hcCcsICdpZHMnLCAnc2VsZWN0ZWRJZHMnLCAnZmlsdGVyJ107XG59XG5cbnR5cGUgTm9uTmV2ZXI8VD4gPSBUIGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IFQ7XG5cbnR5cGUgRXh0cmFjdEVudGl0eUNvbGxlY3Rpb248VD4gPSBUIGV4dGVuZHMgYCR7aW5mZXIgVX1FbnRpdGllc2AgPyBVIDogbmV2ZXI7XG5cbnR5cGUgRXh0cmFjdEVudGl0eUNvbGxlY3Rpb25zPFN0b3JlIGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0PiA9IE5vbk5ldmVyPHtcbiAgW0sgaW4ga2V5b2YgU3RvcmVbJ2NvbXB1dGVkJ11dOiBFeHRyYWN0RW50aXR5Q29sbGVjdGlvbjxLPjtcbn1ba2V5b2YgU3RvcmVbJ2NvbXB1dGVkJ11dPjtcblxudHlwZSBPcHRpb25zRm9yU3RhdGU8U3RvcmUgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQ+ID0gUGFydGlhbDxPbWl0PE5vcm1hbGl6ZWRVbmRvUmVkb09wdGlvbnMsICdjb2xsZWN0aW9ucycgfCAna2V5cyc+PiAmIHtcbiAgY29sbGVjdGlvbnM/OiBFeHRyYWN0RW50aXR5Q29sbGVjdGlvbnM8U3RvcmU+W107XG4gIGtleXM/OiAoa2V5b2YgU3RvcmVbJ3N0YXRlJ10pW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFVuZG9SZWRvPFxuICBJbnB1dCBleHRlbmRzIEVtcHR5RmVhdHVyZVJlc3VsdD4ob3B0aW9ucz86IE9wdGlvbnNGb3JTdGF0ZTxJbnB1dD4pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gIElucHV0LFxuICBFbXB0eUZlYXR1cmVSZXN1bHQgJiB7XG4gIGNvbXB1dGVkOiB7XG4gICAgY2FuVW5kbzogU2lnbmFsPGJvb2xlYW4+O1xuICAgIGNhblJlZG86IFNpZ25hbDxib29sZWFuPjtcbiAgfTtcbiAgbWV0aG9kczoge1xuICAgIHVuZG86ICgpID0+IHZvaWQ7XG4gICAgcmVkbzogKCkgPT4gdm9pZDtcbiAgfTtcbn1cbj4ge1xuICBsZXQgcHJldmlvdXM6IFN0YWNrSXRlbSB8IG51bGwgPSBudWxsO1xuICBsZXQgc2tpcE9uY2UgPSBmYWxzZTtcblxuICBjb25zdCBub3JtYWxpemVkID0ge1xuICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG5cbiAgLy9cbiAgLy8gRGVzaWduIERlY2lzaW9uOiBUaGlzIGZlYXR1cmUgaGFzIGl0cyBvd25cbiAgLy8gaW50ZXJuYWwgc3RhdGUuXG4gIC8vXG5cbiAgY29uc3QgdW5kb1N0YWNrOiBTdGFja0l0ZW1bXSA9IFtdO1xuICBjb25zdCByZWRvU3RhY2s6IFN0YWNrSXRlbVtdID0gW107XG5cbiAgY29uc3QgY2FuVW5kbyA9IHNpZ25hbChmYWxzZSk7XG4gIGNvbnN0IGNhblJlZG8gPSBzaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0IHVwZGF0ZUludGVybmFsID0gKCkgPT4ge1xuICAgIGNhblVuZG8uc2V0KHVuZG9TdGFjay5sZW5ndGggIT09IDApO1xuICAgIGNhblJlZG8uc2V0KHJlZG9TdGFjay5sZW5ndGggIT09IDApO1xuICB9O1xuXG4gIGNvbnN0IGtleXMgPSBbLi4uZ2V0VW5kb1JlZG9LZXlzKG5vcm1hbGl6ZWQuY29sbGVjdGlvbnMpLCAuLi5ub3JtYWxpemVkLmtleXNdO1xuXG4gIHJldHVybiBzaWduYWxTdG9yZUZlYXR1cmUoXG4gICAgd2l0aENvbXB1dGVkKCgpID0+ICh7XG4gICAgICBjYW5VbmRvOiBjYW5VbmRvLmFzUmVhZG9ubHkoKSxcbiAgICAgIGNhblJlZG86IGNhblJlZG8uYXNSZWFkb25seSgpLFxuICAgIH0pKSxcbiAgICB3aXRoTWV0aG9kcygoc3RvcmUpID0+ICh7XG4gICAgICB1bmRvKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gdW5kb1N0YWNrLnBvcCgpO1xuXG4gICAgICAgIGlmIChpdGVtICYmIHByZXZpb3VzKSB7XG4gICAgICAgICAgcmVkb1N0YWNrLnB1c2gocHJldmlvdXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICBza2lwT25jZSA9IHRydWU7XG4gICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgaXRlbSk7XG4gICAgICAgICAgcHJldmlvdXMgPSBpdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlSW50ZXJuYWwoKTtcbiAgICAgIH0sXG4gICAgICByZWRvKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gcmVkb1N0YWNrLnBvcCgpO1xuXG4gICAgICAgIGlmIChpdGVtICYmIHByZXZpb3VzKSB7XG4gICAgICAgICAgdW5kb1N0YWNrLnB1c2gocHJldmlvdXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICBza2lwT25jZSA9IHRydWU7XG4gICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgaXRlbSk7XG4gICAgICAgICAgcHJldmlvdXMgPSBpdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlSW50ZXJuYWwoKTtcbiAgICAgIH0sXG4gICAgfSkpLFxuICAgIHdpdGhIb29rcyh7XG4gICAgICBvbkluaXQoc3RvcmUpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW5kID0ga2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzID0gKHN0b3JlIGFzIFJlY29yZDxzdHJpbmcgfCBrZXlvZiBJbnB1dFsnc3RhdGUnXSwgdW5rbm93bj4pW2tleV07XG4gICAgICAgICAgICBpZiAocyAmJiBpc1NpZ25hbChzKSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgICBba2V5XTogcygpLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgICBpZiAobm9ybWFsaXplZC5za2lwID4gMCkge1xuICAgICAgICAgICAgbm9ybWFsaXplZC5za2lwLS07XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNraXBPbmNlKSB7XG4gICAgICAgICAgICBza2lwT25jZSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gRGVlcCBDb21wYXJpc29uIHRvIHByZXZlbnQgZHVwbGljYXRlZCBlbnRyaWVzXG4gICAgICAgICAgLy8gb24gdGhlIHN0YWNrLiBUaGlzIGNhbiBlLmcuIGhhcHBlbiBhZnRlciBhbiB1bmRvXG4gICAgICAgICAgLy8gaWYgdGhlIGNvbXBvbmVudCBzZW5kcyBiYWNrIHRoZSB1bmRvbmUgZmlsdGVyXG4gICAgICAgICAgLy8gdG8gdGhlIHN0b3JlLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGNhbmQpID09PSBKU09OLnN0cmluZ2lmeShwcmV2aW91cykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDbGVhciByZWRvU3RhY2sgYWZ0ZXIgcmVjb3JkZWQgYWN0aW9uXG4gICAgICAgICAgcmVkb1N0YWNrLnNwbGljZSgwKTtcblxuICAgICAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICAgICAgdW5kb1N0YWNrLnB1c2gocHJldmlvdXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWRvU3RhY2subGVuZ3RoID4gbm9ybWFsaXplZC5tYXhTdGFja1NpemUpIHtcbiAgICAgICAgICAgIHVuZG9TdGFjay51bnNoaWZ0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJldmlvdXMgPSBjYW5kO1xuXG4gICAgICAgICAgLy8gRG9uJ3QgcHJvcG9nYXRlIGN1cnJlbnQgcmVhY3RpdmUgY29udGV4dFxuICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB1cGRhdGVJbnRlcm5hbCgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0pXG4gICk7XG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1hcmNoaXRlY3RzLW5ncngtdG9vbGtpdC1yZWR1eC1jb25uZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9yZWR1eC1jb25uZWN0b3IvYW5ndWxhci1hcmNoaXRlY3RzLW5ncngtdG9vbGtpdC1yZWR1eC1jb25uZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { createReduxState, mapAction, withActionMappers, } from './src/lib/create-redux';
|
|
2
|
+
export { reduxMethod } from './src/lib/rxjs-interop/redux-method';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9yZWR1eC1jb25uZWN0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgY3JlYXRlUmVkdXhTdGF0ZSxcbiAgbWFwQWN0aW9uLFxuICB3aXRoQWN0aW9uTWFwcGVycyxcbn0gZnJvbSAnLi9zcmMvbGliL2NyZWF0ZS1yZWR1eCc7XG5leHBvcnQgeyByZWR1eE1ldGhvZCB9IGZyb20gJy4vc3JjL2xpYi9yeGpzLWludGVyb3AvcmVkdXgtbWV0aG9kJztcbiJdfQ==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from "@angular/core";
|
|
2
|
+
import { SignalReduxStore, injectReduxDispatch } from "./signal-redux-store";
|
|
3
|
+
import { capitalize, isActionCreator } from "./util";
|
|
4
|
+
export function mapAction(...args) {
|
|
5
|
+
let resultMethod = args.pop();
|
|
6
|
+
let storeMethod = args.pop();
|
|
7
|
+
if (isActionCreator(storeMethod)) {
|
|
8
|
+
args.push(storeMethod);
|
|
9
|
+
storeMethod = resultMethod || storeMethod;
|
|
10
|
+
resultMethod = undefined;
|
|
11
|
+
}
|
|
12
|
+
const types = args.map((creator) => creator.type);
|
|
13
|
+
return {
|
|
14
|
+
types,
|
|
15
|
+
storeMethod,
|
|
16
|
+
resultMethod
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function withActionMappers(...mappers) {
|
|
20
|
+
return mappers;
|
|
21
|
+
}
|
|
22
|
+
export function createReduxState(storeName, signalStore, withActionMappers) {
|
|
23
|
+
const isRootProvider = signalStore?.ɵprov?.providedIn === 'root';
|
|
24
|
+
return {
|
|
25
|
+
[`provide${capitalize(storeName)}Store`]: (connectReduxDevtools = false) => makeEnvironmentProviders([
|
|
26
|
+
isRootProvider ? [] : signalStore,
|
|
27
|
+
{
|
|
28
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
29
|
+
multi: true,
|
|
30
|
+
useFactory: (signalReduxStore = inject(SignalReduxStore), store = inject(signalStore)) => () => {
|
|
31
|
+
if (connectReduxDevtools) {
|
|
32
|
+
// addStoreToReduxDevtools(store, storeName, false);
|
|
33
|
+
}
|
|
34
|
+
signalReduxStore.connectFeatureStore(withActionMappers(store));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
]),
|
|
38
|
+
[`inject${capitalize(storeName)}Store`]: () => Object.assign(inject(signalStore), { dispatch: injectReduxDispatch() })
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXJlZHV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvcmVkdXgtY29ubmVjdG9yL3NyYy9saWIvY3JlYXRlLXJlZHV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFxQnJELE1BQU0sVUFBVSxTQUFTLENBR3ZCLEdBQUcsSUFJRjtJQUVELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQTJELENBQUM7SUFDdkYsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBa0UsQ0FBQztJQUU3RixJQUFJLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkIsV0FBVyxHQUFHLFlBQVksSUFBSSxXQUFXLENBQUM7UUFDMUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUksSUFBNEIsQ0FBQyxHQUFHLENBQzdDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNpQixDQUFDO0lBRTdDLE9BQU87UUFDTCxLQUFLO1FBQ0wsV0FBVztRQUNYLFlBQVk7S0FDYixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsR0FBRyxPQUFpRDtJQUVwRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUk5QixTQUFvQixFQUNwQixXQUFrQixFQUNsQixpQkFBMkY7SUFFM0YsTUFBTSxjQUFjLEdBQUksV0FBbUIsRUFBRSxLQUFLLEVBQUUsVUFBVSxLQUFLLE1BQU0sQ0FBQztJQUMxRSxPQUFPO1FBQ0wsQ0FBQyxVQUFVLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDO1lBQ25HLGNBQWMsQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQ2hDO2dCQUNFLE9BQU8sRUFBRSx1QkFBdUI7Z0JBQ2hDLEtBQUssRUFBRSxJQUFJO2dCQUNYLFVBQVUsRUFBRSxDQUNWLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUMzQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUMzQixFQUFFLENBQUMsR0FBRyxFQUFFO29CQUNSLElBQUksb0JBQW9CLEVBQUUsQ0FBQzt3QkFDekIsb0RBQW9EO29CQUN0RCxDQUFDO29CQUNELGdCQUFnQixDQUFDLG1CQUFtQixDQUNsQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FDekIsQ0FBQztnQkFDSixDQUFDO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsQ0FBQyxTQUFTLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDMUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUNuQixFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLENBQ3BDO0tBQ29DLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLCBpbmplY3QsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY3Rpb25DcmVhdG9yLCBBY3Rpb25UeXBlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlL3NyYy9tb2RlbHNcIjtcbmltcG9ydCB7IENyZWF0ZVJlZHV4U3RhdGUsIEV4dHJhY3RBY3Rpb25UeXBlcywgTWFwcGVyVHlwZXMsIFN0b3JlIH0gZnJvbSBcIi4vbW9kZWxcIjtcbmltcG9ydCB7IFNpZ25hbFJlZHV4U3RvcmUsIGluamVjdFJlZHV4RGlzcGF0Y2ggfSBmcm9tIFwiLi9zaWduYWwtcmVkdXgtc3RvcmVcIjtcbmltcG9ydCB7IGNhcGl0YWxpemUsIGlzQWN0aW9uQ3JlYXRvciB9IGZyb20gXCIuL3V0aWxcIjtcblxuXG5leHBvcnQgZnVuY3Rpb24gbWFwQWN0aW9uPFxuICBDcmVhdG9ycyBleHRlbmRzIHJlYWRvbmx5IEFjdGlvbkNyZWF0b3JbXVxuPihcbiAgLi4uYXJnczogW1xuICAgIC4uLmNyZWF0b3JzOiBDcmVhdG9ycyxcbiAgICBzdG9yZU1ldGhvZDogKGFjdGlvbjogQWN0aW9uVHlwZTxDcmVhdG9yc1tudW1iZXJdPikgPT4gdW5rbm93blxuICBdXG4pOiBNYXBwZXJUeXBlczxDcmVhdG9ycz47XG5leHBvcnQgZnVuY3Rpb24gbWFwQWN0aW9uPFxuICBDcmVhdG9ycyBleHRlbmRzIHJlYWRvbmx5IEFjdGlvbkNyZWF0b3JbXSxcbiAgVFxuPihcbiAgLi4uYXJnczogW1xuICAgIC4uLmNyZWF0b3JzOiBDcmVhdG9ycyxcbiAgICBzdG9yZU1ldGhvZDogKGFjdGlvbjogQWN0aW9uVHlwZTxDcmVhdG9yc1tudW1iZXJdPiwgcmVzdWx0TWV0aG9kOiAoaW5wdXQ6IFQpID0+IHVua25vd24pID0+IHVua25vd24sXG4gICAgcmVzdWx0TWV0aG9kOiAoaW5wdXQ6IFQpID0+IHVua25vd25cbiAgXVxuKTogTWFwcGVyVHlwZXM8Q3JlYXRvcnM+O1xuZXhwb3J0IGZ1bmN0aW9uIG1hcEFjdGlvbjxcbiAgQ3JlYXRvcnMgZXh0ZW5kcyByZWFkb25seSBBY3Rpb25DcmVhdG9yW11cbj4oXG4gIC4uLmFyZ3M6IFtcbiAgICAuLi5jcmVhdG9yczogQ3JlYXRvcnMsXG4gICAgc3RvcmVNZXRob2Q6IChhY3Rpb246IEFjdGlvblR5cGU8Q3JlYXRvcnNbbnVtYmVyXT4pID0+IHVua25vd24sXG4gICAgcmVzdWx0TWV0aG9kPzogKGlucHV0OiB1bmtub3duKSA9PiB1bmtub3duXG4gIF1cbik6IE1hcHBlclR5cGVzPENyZWF0b3JzPiB7XG4gIGxldCByZXN1bHRNZXRob2QgPSBhcmdzLnBvcCgpIGFzIHVua25vd24gYXMgKChpbnB1dDogdW5rbm93bikgPT4gdW5rbm93biApIHwgdW5kZWZpbmVkO1xuICBsZXQgc3RvcmVNZXRob2QgPSBhcmdzLnBvcCgpIGFzIHVua25vd24gYXMgKGFjdGlvbjogQWN0aW9uVHlwZTxDcmVhdG9yc1tudW1iZXJdPikgPT4gdW5rbm93bjtcblxuICBpZiAoaXNBY3Rpb25DcmVhdG9yKHN0b3JlTWV0aG9kKSkge1xuICAgIGFyZ3MucHVzaChzdG9yZU1ldGhvZCk7XG4gICAgc3RvcmVNZXRob2QgPSByZXN1bHRNZXRob2QgfHwgc3RvcmVNZXRob2Q7XG4gICAgcmVzdWx0TWV0aG9kID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdHlwZXMgPSAoYXJncyBhcyB1bmtub3duIGFzIENyZWF0b3JzKS5tYXAoXG4gICAgKGNyZWF0b3IpID0+IGNyZWF0b3IudHlwZVxuICApIGFzIHVua25vd24gYXMgRXh0cmFjdEFjdGlvblR5cGVzPENyZWF0b3JzPjtcblxuICByZXR1cm4ge1xuICAgIHR5cGVzLFxuICAgIHN0b3JlTWV0aG9kLFxuICAgIHJlc3VsdE1ldGhvZFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aEFjdGlvbk1hcHBlcnMoXG4gIC4uLm1hcHBlcnM6IE1hcHBlclR5cGVzPEFjdGlvbkNyZWF0b3I8YW55LCBhbnk+W10+W11cbik6IE1hcHBlclR5cGVzPEFjdGlvbkNyZWF0b3I8YW55LCBhbnk+W10+W10ge1xuICByZXR1cm4gbWFwcGVycztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZHV4U3RhdGU8XG4gIFN0b3JlTmFtZSBleHRlbmRzIHN0cmluZyxcbiAgU1RPUkUgZXh0ZW5kcyBTdG9yZVxuPihcbiAgc3RvcmVOYW1lOiBTdG9yZU5hbWUsXG4gIHNpZ25hbFN0b3JlOiBTVE9SRSxcbiAgd2l0aEFjdGlvbk1hcHBlcnM6IChzdG9yZTogSW5zdGFuY2VUeXBlPFNUT1JFPikgPT4gTWFwcGVyVHlwZXM8QWN0aW9uQ3JlYXRvcjxhbnksIGFueT5bXT5bXSxcbik6IENyZWF0ZVJlZHV4U3RhdGU8U3RvcmVOYW1lLCBTVE9SRT4ge1xuICBjb25zdCBpc1Jvb3RQcm92aWRlciA9IChzaWduYWxTdG9yZSBhcyBhbnkpPy7JtXByb3Y/LnByb3ZpZGVkSW4gPT09ICdyb290JztcbiAgcmV0dXJuIHtcbiAgICBbYHByb3ZpZGUke2NhcGl0YWxpemUoc3RvcmVOYW1lKX1TdG9yZWBdOiAoY29ubmVjdFJlZHV4RGV2dG9vbHMgPSBmYWxzZSkgPT4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICAgIGlzUm9vdFByb3ZpZGVyPyBbXSA6IHNpZ25hbFN0b3JlLFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIHVzZUZhY3Rvcnk6IChcbiAgICAgICAgICBzaWduYWxSZWR1eFN0b3JlID0gaW5qZWN0KFNpZ25hbFJlZHV4U3RvcmUpLFxuICAgICAgICAgIHN0b3JlID0gaW5qZWN0KHNpZ25hbFN0b3JlKVxuICAgICAgICApID0+ICgpID0+IHtcbiAgICAgICAgICBpZiAoY29ubmVjdFJlZHV4RGV2dG9vbHMpIHtcbiAgICAgICAgICAgIC8vIGFkZFN0b3JlVG9SZWR1eERldnRvb2xzKHN0b3JlLCBzdG9yZU5hbWUsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2lnbmFsUmVkdXhTdG9yZS5jb25uZWN0RmVhdHVyZVN0b3JlKFxuICAgICAgICAgICAgd2l0aEFjdGlvbk1hcHBlcnMoc3RvcmUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0pLFxuICAgIFtgaW5qZWN0JHtjYXBpdGFsaXplKHN0b3JlTmFtZSl9U3RvcmVgXTogKCkgPT4gT2JqZWN0LmFzc2lnbihcbiAgICAgIGluamVjdChzaWduYWxTdG9yZSksXG4gICAgICB7IGRpc3BhdGNoOiBpbmplY3RSZWR1eERpc3BhdGNoKCkgfVxuICAgIClcbiAgfSBhcyBDcmVhdGVSZWR1eFN0YXRlPFN0b3JlTmFtZSwgU1RPUkU+O1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9yZWR1eC1jb25uZWN0b3Ivc3JjL2xpYi9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXJvbm1lbnRQcm92aWRlcnMsIFNpZ25hbCwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGVlcFNpZ25hbCB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMvc3JjL2RlZXAtc2lnbmFsJztcbmltcG9ydCB7XG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgU3RhdGVTaWduYWxzLFxufSBmcm9tICdAbmdyeC9zaWduYWxzL3NyYy9zaWduYWwtc3RvcmUtbW9kZWxzJztcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQWN0aW9uQ3JlYXRvcixcbiAgQWN0aW9uVHlwZSxcbiAgUHJldHRpZnksXG59IGZyb20gJ0BuZ3J4L3N0b3JlL3NyYy9tb2RlbHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgVW5zdWJzY3JpYmFibGUgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgSW5jbHVkZVByb3BUeXBlPFxuICBULFxuICBWLFxuICBXaXRoTmV2ZXJzID0ge1xuICAgIFtLIGluIGtleW9mIFRdOiBFeGNsdWRlPFRbS10sIHVuZGVmaW5lZD4gZXh0ZW5kcyBWXG4gICAgICA/IFRbS10gZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICA/IEluY2x1ZGVQcm9wVHlwZTxUW0tdLCBWPlxuICAgICAgICA6IFRbS11cbiAgICAgIDogbmV2ZXI7XG4gIH1cbj4gPSBQcmV0dGlmeTxcbiAgUGljazxcbiAgICBXaXRoTmV2ZXJzLFxuICAgIHtcbiAgICAgIFtLIGluIGtleW9mIFdpdGhOZXZlcnNdOiBXaXRoTmV2ZXJzW0tdIGV4dGVuZHMgbmV2ZXJcbiAgICAgICAgPyBuZXZlclxuICAgICAgICA6IEsgZXh0ZW5kcyBzdHJpbmdcbiAgICAgICAgPyBLXG4gICAgICAgIDogbmV2ZXI7XG4gICAgfVtrZXlvZiBXaXRoTmV2ZXJzXVxuICA+XG4+O1xuXG5leHBvcnQgdHlwZSBTdG9yZSA9IFR5cGU8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgU3RhdGVTaWduYWxzPFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdFsnc3RhdGUnXT5cbj47XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVJlZHV4U3RhdGU8U3RvcmVOYW1lIGV4dGVuZHMgc3RyaW5nLCBTVE9SRSBleHRlbmRzIFN0b3JlPiA9IHtcbiAgW0sgaW4gU3RvcmVOYW1lIGFzIGBwcm92aWRlJHtDYXBpdGFsaXplPEs+fVN0b3JlYF06IChcbiAgICBjb25uZWN0UmVkdXhEZXZ0b29scz86IGJvb2xlYW5cbiAgKSA9PiBFbnZpcm9ubWVudFByb3ZpZGVycztcbn0gJiB7XG4gIFtLIGluIFN0b3JlTmFtZSBhcyBgaW5qZWN0JHtDYXBpdGFsaXplPEs+fVN0b3JlYF06ICgpID0+IEluamVjdGFibGVSZWR1eFNsaWNlPFNUT1JFPjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbGVjdG9yczxTVE9SRSBleHRlbmRzIFN0b3JlPiA9IEluY2x1ZGVQcm9wVHlwZTxcbiAgSW5zdGFuY2VUeXBlPFNUT1JFPixcbiAgU2lnbmFsPHVua25vd24+IHwgRGVlcFNpZ25hbDx1bmtub3duPlxuPjtcbmV4cG9ydCB0eXBlIERpc3BhdGNoID0ge1xuICBkaXNwYXRjaDogKFxuICAgIGlucHV0OiBBY3Rpb24gfCBPYnNlcnZhYmxlPEFjdGlvbj4gfCBTaWduYWw8QWN0aW9uPlxuICApID0+IFVuc3Vic2NyaWJhYmxlO1xufTtcbmV4cG9ydCB0eXBlIEluamVjdGFibGVSZWR1eFNsaWNlPFNUT1JFIGV4dGVuZHMgU3RvcmU+ID0gU2VsZWN0b3JzPFNUT1JFPiAmXG4gIERpc3BhdGNoO1xuXG5leHBvcnQgdHlwZSBFeHRyYWN0QWN0aW9uVHlwZXM8Q3JlYXRvcnMgZXh0ZW5kcyByZWFkb25seSBBY3Rpb25DcmVhdG9yW10+ID0ge1xuICBbS2V5IGluIGtleW9mIENyZWF0b3JzXTogQ3JlYXRvcnNbS2V5XSBleHRlbmRzIEFjdGlvbkNyZWF0b3I8aW5mZXIgVD5cbiAgICA/IFRcbiAgICA6IG5ldmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25NZXRob2Q8VCwgViBleHRlbmRzIEFjdGlvbiA9IEFjdGlvbj4ge1xuICAoYWN0aW9uOiBWKTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdG9yZU1ldGhvZDxcbiAgQ3JlYXRvcnMgZXh0ZW5kcyByZWFkb25seSBBY3Rpb25DcmVhdG9yW10sXG4gIFJlc3VsdFN0YXRlID0gdW5rbm93blxuPiB7XG4gIChhY3Rpb246IEFjdGlvblR5cGU8Q3JlYXRvcnNbbnVtYmVyXT4pOiBSZXN1bHRTdGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBwZXJUeXBlczxDcmVhdG9ycyBleHRlbmRzIHJlYWRvbmx5IEFjdGlvbkNyZWF0b3JbXT4ge1xuICB0eXBlczogRXh0cmFjdEFjdGlvblR5cGVzPENyZWF0b3JzPjtcbiAgc3RvcmVNZXRob2Q6IFN0b3JlTWV0aG9kPENyZWF0b3JzPjtcbiAgcmVzdWx0TWV0aG9kPzogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Injector, inject } from "@angular/core";
|
|
2
|
+
import { rxMethod } from "@ngrx/signals/rxjs-interop";
|
|
3
|
+
import { map, pipe } from "rxjs";
|
|
4
|
+
export function reduxMethod(generator, resultMethodOrConfig, config) {
|
|
5
|
+
const injector = inject(Injector);
|
|
6
|
+
if (typeof resultMethodOrConfig === 'function') {
|
|
7
|
+
let unsubscribable;
|
|
8
|
+
const inputResultFn = ((input, resultMethod = resultMethodOrConfig) => {
|
|
9
|
+
const rxMethodWithResult = rxMethod(pipe(generator, map(resultMethod)), {
|
|
10
|
+
...(config || {}),
|
|
11
|
+
injector: config?.injector || injector
|
|
12
|
+
});
|
|
13
|
+
const rxWithInput = rxMethodWithResult(input);
|
|
14
|
+
unsubscribable = { unsubscribe: rxWithInput.unsubscribe.bind(rxWithInput) };
|
|
15
|
+
return rxWithInput;
|
|
16
|
+
});
|
|
17
|
+
inputResultFn.unsubscribe = () => unsubscribable?.unsubscribe();
|
|
18
|
+
return inputResultFn;
|
|
19
|
+
}
|
|
20
|
+
return rxMethod(generator, resultMethodOrConfig);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtbWV0aG9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvcmVkdXgtY29ubmVjdG9yL3NyYy9saWIvcnhqcy1pbnRlcm9wL3JlZHV4LW1ldGhvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUE4QixHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBcUI3RCxNQUFNLFVBQVUsV0FBVyxDQUN6QixTQUFrRSxFQUNsRSxvQkFFQyxFQUNELE1BRUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFbEMsSUFBSSxPQUFPLG9CQUFvQixLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQy9DLElBQUksY0FBOEIsQ0FBQztRQUNuQyxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQ3JCLEtBQTJCLEVBQzNCLFlBQVksR0FBRyxvQkFBb0IsRUFDbkMsRUFBRTtZQUVGLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFRLElBQUksQ0FDN0MsU0FBUyxFQUNULEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FDbEIsRUFBRTtnQkFDRCxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztnQkFDakIsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLElBQUksUUFBUTthQUN2QyxDQUFDLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxjQUFjLEdBQUcsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUU1RSxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDLENBQStDLENBQUM7UUFFakQsYUFBYSxDQUFDLFdBQVcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFFaEUsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFRLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBQzFELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgU2lnbmFsLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgcnhNZXRob2QgfSBmcm9tIFwiQG5ncngvc2lnbmFscy9yeGpzLWludGVyb3BcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIFVuc3Vic2NyaWJhYmxlLCBtYXAsIHBpcGUgfSBmcm9tIFwicnhqc1wiO1xuXG5cbnR5cGUgUnhNZXRob2RJbnB1dDxJbnB1dD4gPSBJbnB1dCB8IE9ic2VydmFibGU8SW5wdXQ+IHwgU2lnbmFsPElucHV0PjtcblxudHlwZSBSeE1ldGhvZDxJbnB1dCwgTWV0aG9kSW5wdXQgPSBJbnB1dCwgTWV0aG9kUmVzdWx0ID0gdW5rbm93bj4gPSAoKFxuICBpbnB1dDogUnhNZXRob2RJbnB1dDxJbnB1dD4sXG4gIHJlc3VsdE1ldGhvZDogKGlucHV0OiBNZXRob2RJbnB1dCkgPT4gTWV0aG9kUmVzdWx0XG4pID0+IFVuc3Vic2NyaWJhYmxlKSAmIFVuc3Vic2NyaWJhYmxlO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVkdXhNZXRob2Q8SW5wdXQsIE1ldGhvZElucHV0ID0gSW5wdXQ+KFxuICBnZW5lcmF0b3I6IChzb3VyY2UkOiBPYnNlcnZhYmxlPElucHV0PikgPT4gT2JzZXJ2YWJsZTxNZXRob2RJbnB1dD4sXG4gIGNvbmZpZz86IHsgaW5qZWN0b3I/OiBJbmplY3RvciB9XG4pOiBSeE1ldGhvZDxJbnB1dCwgTWV0aG9kSW5wdXQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHJlZHV4TWV0aG9kPElucHV0LCBNZXRob2RJbnB1dCA9IElucHV0LCBNZXRob2RSZXN1bHQgPSB1bmtub3duPihcbiAgZ2VuZXJhdG9yOiAoc291cmNlJDogT2JzZXJ2YWJsZTxJbnB1dD4pID0+IE9ic2VydmFibGU8TWV0aG9kSW5wdXQ+LFxuICByZXN1bHRNZXRob2Q6IChpbnB1dDogTWV0aG9kSW5wdXQpID0+IE1ldGhvZFJlc3VsdCxcbiAgY29uZmlnPzoge1xuICAgIGluamVjdG9yPzogSW5qZWN0b3JcbiAgfVxuKTogUnhNZXRob2Q8SW5wdXQsIE1ldGhvZElucHV0LCBNZXRob2RSZXN1bHQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHJlZHV4TWV0aG9kPElucHV0LCBNZXRob2RJbnB1dCA9IElucHV0LCBNZXRob2RSZXN1bHQgPSB1bmtub3duPihcbiAgZ2VuZXJhdG9yOiAoc291cmNlJDogT2JzZXJ2YWJsZTxJbnB1dD4pID0+IE9ic2VydmFibGU8TWV0aG9kSW5wdXQ+LFxuICByZXN1bHRNZXRob2RPckNvbmZpZz86ICgoaW5wdXQ6IE1ldGhvZElucHV0KSA9PiBNZXRob2RSZXN1bHQpIHwge1xuICAgIGluamVjdG9yPzogSW5qZWN0b3JcbiAgfSxcbiAgY29uZmlnPzoge1xuICAgIGluamVjdG9yPzogSW5qZWN0b3JcbiAgfVxuKTogUnhNZXRob2Q8SW5wdXQsIE1ldGhvZElucHV0LCBNZXRob2RSZXN1bHQ+ICB7XG4gIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICBpZiAodHlwZW9mIHJlc3VsdE1ldGhvZE9yQ29uZmlnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbGV0IHVuc3Vic2NyaWJhYmxlOiBVbnN1YnNjcmliYWJsZTtcbiAgICBjb25zdCBpbnB1dFJlc3VsdEZuID0gKChcbiAgICAgIGlucHV0OiBSeE1ldGhvZElucHV0PElucHV0PixcbiAgICAgIHJlc3VsdE1ldGhvZCA9IHJlc3VsdE1ldGhvZE9yQ29uZmlnXG4gICAgKSA9PiB7XG5cbiAgICAgIGNvbnN0IHJ4TWV0aG9kV2l0aFJlc3VsdCA9IHJ4TWV0aG9kPElucHV0PihwaXBlKFxuICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgIG1hcChyZXN1bHRNZXRob2QpXG4gICAgICApLCB7XG4gICAgICAgIC4uLihjb25maWcgfHwge30pLFxuICAgICAgICBpbmplY3RvcjogY29uZmlnPy5pbmplY3RvciB8fCBpbmplY3RvclxuICAgICAgfSk7XG4gICAgICBjb25zdCByeFdpdGhJbnB1dCA9IHJ4TWV0aG9kV2l0aFJlc3VsdChpbnB1dCk7XG4gICAgICB1bnN1YnNjcmliYWJsZSA9IHsgdW5zdWJzY3JpYmU6IHJ4V2l0aElucHV0LnVuc3Vic2NyaWJlLmJpbmQocnhXaXRoSW5wdXQpIH07XG5cbiAgICAgIHJldHVybiByeFdpdGhJbnB1dDtcbiAgICB9KSBhcyBSeE1ldGhvZDxJbnB1dCwgTWV0aG9kSW5wdXQsIE1ldGhvZFJlc3VsdD47XG5cbiAgICBpbnB1dFJlc3VsdEZuLnVuc3Vic2NyaWJlID0gKCkgPT4gdW5zdWJzY3JpYmFibGU/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICByZXR1cm4gaW5wdXRSZXN1bHRGbjtcbiAgfVxuXG4gIHJldHVybiByeE1ldGhvZDxJbnB1dD4oZ2VuZXJhdG9yLCByZXN1bHRNZXRob2RPckNvbmZpZyk7XG59XG4iXX0=
|