state-decorator 6.8.0 → 6.10.0

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.
Files changed (77) hide show
  1. package/README.md +90 -25
  2. package/dist/impl.d.ts +195 -0
  3. package/dist/impl.js +2 -0
  4. package/dist/impl.js.map +1 -0
  5. package/dist/index.d.ts +168 -0
  6. package/dist/index.js +2 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/middlewares.d.ts +26 -0
  9. package/dist/middlewares.js +2 -0
  10. package/dist/middlewares.js.map +1 -0
  11. package/dist/shallow.d.ts +15 -0
  12. package/dist/test.d.ts +134 -0
  13. package/dist/test.js +2 -0
  14. package/dist/test.js.map +1 -0
  15. package/dist/types.d.ts +352 -0
  16. package/dist/v5.d.ts +58 -0
  17. package/dist/v5.js +2 -0
  18. package/dist/v5.js.map +1 -0
  19. package/dist/v5_test.d.ts +70 -0
  20. package/dist/v5_test.js +2 -0
  21. package/dist/v5_test.js.map +1 -0
  22. package/dist/v5_types.d.ts +227 -0
  23. package/es/impl.d.ts +195 -0
  24. package/es/impl.js +2 -0
  25. package/es/impl.js.map +1 -0
  26. package/es/index.d.ts +168 -0
  27. package/es/index.js +2 -0
  28. package/es/index.js.map +1 -0
  29. package/es/middlewares.d.ts +26 -0
  30. package/es/middlewares.js +2 -0
  31. package/es/middlewares.js.map +1 -0
  32. package/es/shallow.d.ts +15 -0
  33. package/es/test.d.ts +134 -0
  34. package/es/test.js +2 -0
  35. package/es/test.js.map +1 -0
  36. package/es/types.d.ts +352 -0
  37. package/es/v5.d.ts +58 -0
  38. package/es/v5.js +2 -0
  39. package/es/v5.js.map +1 -0
  40. package/es/v5_test.d.ts +70 -0
  41. package/es/v5_test.js +2 -0
  42. package/es/v5_test.js.map +1 -0
  43. package/es/v5_types.d.ts +227 -0
  44. package/impl.d.ts +107 -3
  45. package/impl.js +1 -1
  46. package/impl.js.map +1 -1
  47. package/index.d.ts +14 -0
  48. package/index.js +1 -1
  49. package/index.js.map +1 -1
  50. package/middlewares.d.ts +14 -0
  51. package/middlewares.js +1 -1
  52. package/middlewares.js.map +1 -1
  53. package/package.json +3 -4
  54. package/shallow.d.ts +14 -0
  55. package/test.d.ts +17 -0
  56. package/test.js +1 -1
  57. package/test.js.map +1 -1
  58. package/types.d.ts +20 -0
  59. package/v5.d.ts +14 -0
  60. package/v5.js +1 -1
  61. package/v5.js.map +1 -1
  62. package/v5_test.d.ts +14 -0
  63. package/v5_test.js +1 -1
  64. package/v5_test.js.map +1 -1
  65. package/v5_types.d.ts +14 -0
  66. package/impl.es.js +0 -2
  67. package/impl.es.js.map +0 -1
  68. package/index.es.js +0 -2
  69. package/index.es.js.map +0 -1
  70. package/middlewares.es.js +0 -2
  71. package/middlewares.es.js.map +0 -1
  72. package/test.es.js +0 -2
  73. package/test.es.js.map +0 -1
  74. package/v5.es.js +0 -2
  75. package/v5.es.js.map +0 -1
  76. package/v5_test.es.js +0 -2
  77. package/v5_test.es.js.map +0 -1
package/README.md CHANGED
@@ -237,12 +237,12 @@ const actions: StoreActions<State, Actions> = {
237
237
 
238
238
  ## Recipes
239
239
 
240
- - If the effects function returns **null**, the side effects, if any, are not executed when the action is called.
240
+ - If the effects function returns `null`, the side effects, if any, are not executed when the action is called.
241
241
  - If not effects function is defined by side effects function is provided, the side effects will be executed when the action is called.
242
242
 
243
243
  ## Cancel action
244
244
 
245
- To cancel effects/side effects just return **null** instead of new state in **effects**.
245
+ To cancel effects/side effects just return `null` instead of new state in **effects**.
246
246
 
247
247
  # Asynchronous actions
248
248
 
@@ -281,16 +281,36 @@ const actions: StoreActions<State, Actions> = {
281
281
  };
282
282
  ```
283
283
 
284
- - If **null** is returned by **getPromise**, the action is not executed. It allows to cancel an action depending on state or props etc.
284
+ - If `null` is returned by **getPromise**, the action is not executed. It allows to cancel an action depending on state or props etc.
285
285
 
286
286
  - **getGetPromise** is a shortcut that sets the conflict policy to **ConflictPolicy.REUSE** and **retryCount** to 3.
287
287
 
288
- - To cancel any effects just return **null** instead of new state in **xxxEffects**.
288
+ - To cancel any effects just return `null` instead of new state in **xxxEffects**.
289
289
 
290
290
  ## Asynchronous action lifecycle
291
291
 
292
292
  <!-- ![Lifecycle](https://raw.githubusercontent.com/GlobalSport/state-decorator/develop/doc/StateDecoratorDiagram.png) -->
293
293
 
294
+ ```mermaid
295
+ graph TD
296
+ A(Call action) --> preEffects
297
+ preEffects --> optimisticEffects
298
+ optimisticEffects --> getPromise
299
+ getPromise --> promiseSuccess{Success?}
300
+ promiseSuccess -->|Yes| effects[effects]
301
+ effects --> notifySuccess[notifySuccess]
302
+ notifySuccess --> sideEffects[sideEffects]
303
+ sideEffects --> promiseResolved[Promise is resolved]
304
+ promiseResolved --> Z(End)
305
+ promiseSuccess -->|No| errorEffects[errorEffects]
306
+ errorEffects --> notifyError[notifyError]
307
+ notifyError --> errSideEffetcs[errorSideEffects]
308
+ errSideEffetcs --> errorManaged{Error managed?}
309
+ errorManaged --> |Yes| promiseResolved
310
+ errorManaged --> |No| promiseRejected
311
+ promiseRejected --> Z
312
+ ```
313
+
294
314
  - check if a previous call to this action is ongoing,
295
315
  - if yes, check if the conflict policy is parallel,
296
316
  - if yes, let the flow continue.
@@ -308,6 +328,7 @@ const actions: StoreActions<State, Actions> = {
308
328
  - **errorEffects**: change state from promise arguments and returned error.
309
329
  - if **notifyError** is set, call it with **getErrorMessage()**.
310
330
  - **errorSideEffects**: trigger a side effect with no change on state.
331
+ - Global **asyncErrorHandler** is called (with a flag indicating that the error was managed or not, see [Error management](#ErrorManagement) for more details).
311
332
 
312
333
  - If a conflicting action is stored, process it.
313
334
 
@@ -326,24 +347,6 @@ const { isLoading, loading, loadingMap } = useLocalStore(getInitialState, action
326
347
  const isOneLoading = isLoading('action1', 'action2', ['parallelAction', 'promiseId']);
327
348
  ```
328
349
 
329
- ## Error state
330
-
331
- The last error of each asynchronous actions is available on the errorMap.
332
-
333
- ```typescript
334
- const { errorMap } = useLocalStore(getInitialState, actionsImpl);
335
-
336
-
337
- if (errorMap.action1)) {
338
- // show retry action
339
- }
340
-
341
- if (errorMap.action1 instanceof MyCustomError ){
342
- // show retry action with custom error handling
343
- }
344
-
345
- ```
346
-
347
350
  ## Success / error notifications
348
351
 
349
352
  A notification function can be called when the asynchronous action succeeded or failed.
@@ -355,9 +358,38 @@ A notification function can be called when the asynchronous action succeeded or
355
358
  1. _getErrorMessage_ (message built from the error and action context).
356
359
  2. _getSuccessMessage_ (message built from the action context)
357
360
 
361
+ ```typescript
362
+ // global notification functions
363
+ setGlobalConfig({
364
+ notifySuccess: (msg) => console.log(msg),
365
+ notifyError: (msg) => console.log(msg),
366
+ });
367
+
368
+ // local notification functions
369
+ const store = useLocalStore(getInitialState, actionsImpl, props, {
370
+ notifySuccess: (msg) => console.log(msg),
371
+ notifyError: (msg) => console.log(msg),
372
+ });
373
+ ```
374
+
375
+ ```typescript
376
+ // action implementation
377
+ const actions: StoreActions<State, Actions> = {
378
+ loadList: {
379
+ getPromise: () => new Promise((_, reject) => setTimeout(reject, 500, new Error('Too bad'))),
380
+ getSuccessMessage: () => 'success!',
381
+ getErrorMessage: ({ err }) => `Error: ${err.message}`,
382
+ },
383
+ };
384
+ ```
385
+
358
386
  ## <a name="ErrorManagement"></a>Error management
359
387
 
360
- When an asynchronous action fails, if the state needs to be updated, set the _errorEffects_ property of the asynchronous action.
388
+ ### Effects and side effects
389
+
390
+ When an asynchronous action fails, if the state needs to be updated, set the **errorEffects** property of the asynchronous action.
391
+
392
+ If some actions need to be triggered, set **errorSideEffects**.
361
393
 
362
394
  ```typescript
363
395
  const actions: StoreActions<State, Actions> = {
@@ -372,7 +404,40 @@ const actions: StoreActions<State, Actions> = {
372
404
  };
373
405
  ```
374
406
 
375
- **Note:** If an error message or an error reducer is defined, the error will be trapped to prevent other error management (console traces...). If, for any reason, you need to have the promise to be rejected, set **rejectPromiseOnError** to _true_.
407
+ ### Promise result
408
+
409
+ If **getPromise** is failing and the error is _managed_, the action promise will be returned as **resolved** to prevent other error managements (console traces…) to be executed, otherwise it will be returned as **rejected**.
410
+
411
+ An error is _managed_ if:
412
+
413
+ - **errorEffects** is defined and is not returning `null`.
414
+ - or **errorSideEffects** is defined,
415
+ - or **notifyError** is defined and **getErrorMessage** is not returning `null`,
416
+ - or **isErrorManaged** is set to `true`.
417
+
418
+ If the error is managed but you need to have the promise to be rejected, set **rejectPromiseOnError** to `true`.
419
+
420
+ Global **asyncErrorHandler** is called for each error with this _managed_ flag for global error management (logging).
421
+
422
+ ### Error state
423
+
424
+ In order to display UI after an error, the last error of each asynchronous action is available on **errorMap**.
425
+
426
+ ```typescript
427
+ const { errorMap } = useLocalStore(getInitialState, actionsImpl);
428
+
429
+
430
+ if (errorMap.action1)) {
431
+ // show retry action
432
+ }
433
+
434
+ if (errorMap.action1 instanceof MyCustomError){
435
+ // show retry action with custom error handling
436
+ }
437
+
438
+ ```
439
+
440
+ Recipe: When only using the **errorMap** to manage errors (ie. there's no effects nor message and so on), the error is considered _not managed_ resulting in a rejected promise and global **asyncErrorHandler** called with _managed_ flag set to false. In that case, set **isErrorManaged** to `true` to specify that the error is _managed_ externally.
376
441
 
377
442
  ## <a name="ConflictingActions"></a>Conflicting actions
378
443
 
@@ -1324,7 +1389,7 @@ TypeError: Cannot set property 'crash' of null
1324
1389
 
1325
1390
  # Immutability
1326
1391
 
1327
- - Immutability: each effects **must** return a new state instance (or **null** if there's no change).
1392
+ - Immutability: each effects **must** return a new state instance (or `null` if there's no change).
1328
1393
  - I recommend using [Immer](https://github.com/immerjs/immer) to manage complex cases (deep nesting). A **immerizeActions** action decorator is provided to decorate each effect with Immer.
1329
1394
 
1330
1395
  # Limitations
package/dist/impl.d.ts ADDED
@@ -0,0 +1,195 @@
1
+ /*! *****************************************************************************
2
+ Copyright (c) GlobalSport SAS.
3
+
4
+ Permission to use, copy, modify, and/or distribute this software for any
5
+ purpose with or without fee is hereby granted.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
9
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
10
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
11
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13
+ PERFORMANCE OF THIS SOFTWARE.
14
+ ***************************************************************************** */
15
+ import { AsyncAction, SimpleSyncAction, SyncAction, StoreAction, AsyncActionPromise, AsyncActionPromiseGet, PromiseProvider, DecoratedActions, InternalLoadingMap, StoreOptions, InvocationContextActions, OnMountInvocationContext, OnPropsChangeEffectsContext, ContextState, Middleware, MiddlewareFactory, ContextWithDerived, PromiseIdErrorMap, ErrorMap, ErrorParallelMap } from './types';
16
+ export declare type SetStateFunc<S, A> = (newState: S, newLoadingMap: InternalLoadingMap<A>, actionName: keyof A | 'onPropsChange', actionType: 'preEffects' | 'effects' | 'errorEffects' | null, // FIXME
17
+ isAsync: boolean, actionCtx: any, propsChanged: boolean, isInit?: boolean) => void;
18
+ /** @internal */
19
+ export declare type PromiseMap<A> = {
20
+ [name in keyof A]?: {
21
+ [promiseId: string]: {
22
+ promise: Promise<any>;
23
+ refArgs: any[];
24
+ abortController: AbortController;
25
+ };
26
+ };
27
+ };
28
+ /** @internal */
29
+ export declare type FutureActions = {
30
+ args: any[];
31
+ resolve: (...args: any[]) => void;
32
+ reject: (...args: any[]) => void;
33
+ timestamp?: number;
34
+ };
35
+ /** @internal */
36
+ export declare type ConflictActionsMap<A> = {
37
+ [name in keyof A]?: FutureActions[];
38
+ };
39
+ /** @internal */
40
+ export declare type AsyncActionExecContext<S, DS, F extends (...args: any[]) => any, A extends DecoratedActions, P> = {
41
+ actionName: keyof A;
42
+ action: AsyncActionPromise<S, F, A, P, DS>;
43
+ stateRef: Ref<S>;
44
+ derivedStateRef: Ref<DerivedState<DS>>;
45
+ propsRef: Ref<P>;
46
+ loadingMapRef: Ref<InternalLoadingMap<A>>;
47
+ errorMapRef: Ref<ErrorParallelMap<A>>;
48
+ promisesRef: Ref<PromiseMap<A>>;
49
+ conflictActionsRef: Ref<ConflictActionsMap<A>>;
50
+ actionsRef: Ref<A>;
51
+ initializedRef: Ref<boolean>;
52
+ options: StoreOptions<S, A, P, any>;
53
+ setState: SetStateFunc<S, A>;
54
+ };
55
+ /** @internal */
56
+ export declare type TimeoutMap<A> = {
57
+ [name in keyof A]?: any;
58
+ };
59
+ export declare type NotifyFunc = (msg: string) => void;
60
+ export declare type CloneFunction = <C>(obj: C) => C;
61
+ export declare type ComparatorFunction = <C>(obj1: C, Obj2: C) => boolean;
62
+ export declare type RetryOnErrorFunction = (error: any) => boolean;
63
+ export declare type AsyncErrorHandler = (error: any, isHandled: boolean, state: any, props: any, actionName: string, args: any[]) => void;
64
+ declare type DerivedStateMap<DS> = {
65
+ [name in keyof DS]?: any[];
66
+ };
67
+ /** @internal */
68
+ export declare type DerivedState<DS> = {
69
+ state: DS;
70
+ deps: DerivedStateMap<DS>;
71
+ };
72
+ /**
73
+ * Global configuration, shared with all stores.
74
+ */
75
+ export declare type GlobalConfig = {
76
+ /**
77
+ * Clone function.
78
+ * Used to clone state and props when managing optimistic reducer and conflicting actions.
79
+ * Default implementation is a very basic algorithm using JSON.stringify. To clone complex stats,
80
+ * use a custom implementation like lodash/cloneDeep.
81
+ * @default JSON.stringify
82
+ */
83
+ clone: CloneFunction;
84
+ /**
85
+ * Compare to objets and returns if they are equal.
86
+ * Used to comparent previous and current state slice.
87
+ * @default shallow
88
+ */
89
+ comparator: ComparatorFunction;
90
+ /**
91
+ * Global callback function to handle asychronous actions rejected promise.
92
+ */
93
+ asyncErrorHandler: AsyncErrorHandler;
94
+ /**
95
+ * Tests if the error will trigger a retry of the action or will fail directly.
96
+ * Default implementation is returning true for TypeError instances only.
97
+ * @see AsynchActionBase#retryCount
98
+ */
99
+ retryOnErrorFunction: RetryOnErrorFunction;
100
+ /**
101
+ * Global notification function that will called when an asynchronous action succeeded,
102
+ * if and only if, an error message is specified for this action using
103
+ * <code>getErrorMessage</code>.
104
+ * If another function is set in the options, the function from the options will be used.
105
+ */
106
+ notifySuccess: NotifyFunc;
107
+ /**
108
+ * Global notification function that will called when an asynchronous action fails,
109
+ * if and only if, an error message is specified for this action using
110
+ * <code>getErrorMessage</code>.
111
+ * If another function is set in the options, the function from the options will be used.
112
+ */
113
+ notifyError: NotifyFunc;
114
+ /**
115
+ * Global notification function that will injected in onDone and onFail of an asynchronous actions and onActionDone of a synchronous function,
116
+ * If another function is set in the options, the function from the options will be used.
117
+ */
118
+ notifyWarning: NotifyFunc;
119
+ /**
120
+ * A default error message provider.
121
+ * Used to return generic messages on generic HTTP errors
122
+ */
123
+ getErrorMessage: (error: Error) => string;
124
+ /**
125
+ * Default middlewares. Store middleware array will be concatenated with this one.
126
+ * By default contains only the optimistic middleware.
127
+ */
128
+ defaultMiddlewares: MiddlewareFactory<any, any, any>[];
129
+ };
130
+ /** @internal */
131
+ export declare const globalConfig: GlobalConfig;
132
+ export declare function setGlobalConfig(overrideConfig: Partial<GlobalConfig>): void;
133
+ /**
134
+ * Type guard function to test if an action is a asynchronous action.
135
+ */
136
+ export declare function isAsyncAction<S, DS, F extends (...args: any[]) => any, A, P, FxRes = S>(action: StoreAction<S, F, A, P, DS, FxRes>): action is AsyncAction<S, F, A, P, DS, FxRes>;
137
+ /**
138
+ * Type guard function to test if an action is a synchronous action.
139
+ */
140
+ export declare function isSimpleSyncAction<S, F extends (...args: any[]) => any, A, P, DS = {}, FxRes = S>(action: StoreAction<S, F, A, P, DS, FxRes>): action is SimpleSyncAction<S, F, P, DS, FxRes>;
141
+ /**
142
+ * Type guard function to test if an action is a synchronous action.
143
+ */
144
+ export declare function isSyncAction<S, F extends (...args: any[]) => any, A, P, DS = {}, FxRes = S>(action: StoreAction<S, F, A, P, DS, FxRes>): action is SyncAction<S, F, A, P, DS, FxRes>;
145
+ export declare function isAsyncGetPromiseAction<S, DS, F extends (...args: any[]) => any, A, P, FxRes = S>(action: StoreAction<S, F, A, P, DS, FxRes>): action is AsyncActionPromise<S, F, A, P, DS, FxRes>;
146
+ export declare function isAsyncGetPromiseGetAction<S, DS, F extends (...args: any[]) => any, A, P, FxRes = S>(action: StoreAction<S, F, A, P, DS, FxRes>): action is AsyncActionPromiseGet<S, F, A, P, DS, FxRes>;
147
+ /** @internal */
148
+ export declare function computeAsyncActionInput<S, DS, F extends (...args: any[]) => any, A, P, FxRes = S>(action: AsyncAction<S, F, A, P, DS, FxRes>): AsyncActionPromise<S, F, A, P, DS, FxRes>;
149
+ /** @internal */
150
+ export declare function buildLoadingMap<A>(source: InternalLoadingMap<A>, actionName: keyof A, promiseId: string, loading: boolean): InternalLoadingMap<A>;
151
+ /** @internal */
152
+ export declare function updateErrorMap<A>(source: ErrorParallelMap<A>, actionName: keyof A, promiseId: string, error: Error): ErrorParallelMap<A>;
153
+ export declare class ParallelActionError extends Error {
154
+ promiseIds: PromiseIdErrorMap;
155
+ constructor(promiseIds: PromiseIdErrorMap);
156
+ }
157
+ export declare function buildErrorMap<A>(map: ErrorParallelMap<A>): ErrorMap<A>;
158
+ /** @internal */
159
+ export declare function retryPromiseDecorator<S, DS, F extends (...args: any[]) => Promise<any>, A, P>(promiseProvider: PromiseProvider<S, DS, F, A, P>, maxCalls?: number, delay?: number, isRetryError?: (e: Error) => boolean): PromiseProvider<S, DS, F, A, P>;
160
+ export declare type Ref<P> = {
161
+ current: P;
162
+ };
163
+ /** @internal */
164
+ export declare function createRef<U>(init?: U): Ref<U>;
165
+ /** @internal */
166
+ export declare function buildInvocationContextBase<S, DS, P>(stateRef: Ref<S>, derivedStateRef: Ref<DerivedState<DS>>, propsRef: Ref<P>): ContextWithDerived<S, DS, P>;
167
+ /** @internal */
168
+ export declare function buildOnMountInvocationContext<S, DS, A, P>(stateRef: Ref<S>, derivedStateRef: Ref<DerivedState<DS>>, propsRef: Ref<P>, actionsRef: Ref<A>): OnMountInvocationContext<S, A, P>;
169
+ /** @internal */
170
+ export declare function buildOnPropChangeEffects<S, DS, P>(stateRef: Ref<S>, derivedStateRef: Ref<DerivedState<DS>>, propsRef: Ref<P>, indices: number[], index: number, isInit: boolean): OnPropsChangeEffectsContext<S, DS, P>;
171
+ /** @internal */
172
+ export declare function addStateToContext<T, S>(ctx: T, stateRef: Ref<S>): T & ContextState<S>;
173
+ /** @internal */
174
+ export declare function addContextActions<T, A>(ctx: T, actionsRef: Ref<A>): T & InvocationContextActions<A>;
175
+ /** @internal */
176
+ export declare function decorateSimpleSyncAction<S, DS, F extends (...args: any[]) => any, A extends DecoratedActions, P>(actionName: keyof A, action: SimpleSyncAction<S, F, P, DS>, stateRef: Ref<S>, derivedStateRef: Ref<DerivedState<DS>>, propsRef: Ref<P>, initializedRef: Ref<boolean>, setState: SetStateFunc<S, A>): (...args: Parameters<F>) => void;
177
+ /** @internal */
178
+ export declare function decorateSyncAction<S, DS, F extends (...args: any[]) => any, A extends DecoratedActions, P>(actionName: keyof A, action: SyncAction<S, F, A, P, DS>, stateRef: Ref<S>, derivedStateRef: Ref<DerivedState<DS>>, propsRef: Ref<P>, actionsRef: Ref<A>, initializedRef: Ref<boolean>, timeoutMap: Ref<TimeoutMap<A>>, options: StoreOptions<S, A, P, any>, setState: SetStateFunc<S, A>): (...args: Parameters<F>) => void;
179
+ /** @internal */
180
+ export declare function decorateAsyncAction<S, DS, F extends (...args: any[]) => any, A extends DecoratedActions, P>(context: AsyncActionExecContext<S, DS, F, A, P>): (...args: Parameters<F>) => Promise<any>;
181
+ /** @internal */
182
+ export declare function isLoadingImpl<A, K extends keyof A>(loadingMap: InternalLoadingMap<A>, ...props: (K | [K, string])[]): boolean;
183
+ export declare const DEFAULT_PROMISE_ID = "__def__";
184
+ /** @internal */
185
+ export declare function areSameArgs(args1: any[], args2: any[]): boolean;
186
+ /** @internal */
187
+ export declare function computeDerivedValues<S, A, P, DS>(s: Ref<S>, p: Ref<P>, derivedStateRef: Ref<DerivedState<DS>>, options: StoreOptions<S, A, P, DS>): boolean;
188
+ /** @internal */
189
+ export declare function onPropChange<S, P, A, DS>(stateRef: Ref<S>, derivedStateRef: Ref<DerivedState<DS>>, propsRef: Ref<P>, oldProps: P, actionsRef: Ref<A>, options: StoreOptions<S, A, P, DS>, setState: SetStateFunc<S, A>, isInit: boolean): void;
190
+ /** @internal */
191
+ export declare function runMiddlewares<S, A extends DecoratedActions, P>(middlewares: Middleware<S, A, P>[], oldState: S, newState: S, loading: boolean, actionName: keyof A, actionType: 'preEffects' | 'effects' | 'errorEffects' | null, isAsync: boolean, actionCtx: any): {
192
+ newState: S;
193
+ newLoading: boolean;
194
+ };
195
+ export {};
package/dist/impl.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=function(r,t){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e[t]=r[t])})(r,t)};var r,t=function(){return(t=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++)for(var o in r=arguments[t])Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);return e}).apply(this,arguments)};function n(e,r,t,n){return new(t||(t=Promise))((function(o,i){function c(e){try{a(n.next(e))}catch(e){i(e)}}function u(e){try{a(n.throw(e))}catch(e){i(e)}}function a(e){var r;e.done?o(e.value):(r=e.value,r instanceof t?r:new t((function(e){e(r)}))).then(c,u)}a((n=n.apply(e,r||[])).next())}))}function o(e,r){var t,n,o,i,c={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;c;)try{if(t=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return c.label++,{value:i[1],done:!1};case 5:c.label++,n=i[1],i=[0];continue;case 7:i=c.ops.pop(),c.trys.pop();continue;default:if(!(o=c.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){c=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){c.label=i[1];break}if(6===i[0]&&c.label<o[1]){c.label=o[1],o=i;break}if(o&&c.label<o[2]){c.label=o[2],c.ops.push(i);break}o[2]&&c.ops.pop(),c.trys.pop();continue}i=r.call(e,c)}catch(e){i=[6,e],n=0}finally{t=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}function i(e,r,t){if(t||2===arguments.length)for(var n,o=0,i=r.length;o<i;o++)!n&&o in r||(n||(n=Array.prototype.slice.call(r,0,o)),n[o]=r[o]);return e.concat(n||Array.prototype.slice.call(r))}!function(e){e.REJECT="reject",e.IGNORE="ignore",e.KEEP_LAST="keepLast",e.KEEP_ALL="keepAll",e.PARALLEL="parallel",e.REUSE="reuse"}(r||(r={}));var c={clone:function(e){return JSON.parse(JSON.stringify(e))},comparator:function(e,r){if(Object.is(e,r))return!0;if("object"!=typeof e||null===e||"object"!=typeof r||null===r)return!1;if(e instanceof Set||r instanceof Set)return!1;var t=Object.keys(e),n=Object.keys(r);if(t.length!==n.length)return!1;for(var o=0;o<t.length;o++)if(!Object.prototype.hasOwnProperty.call(r,t[o])||!Object.is(e[t[o]],r[t[o]]))return!1;return!0},asyncErrorHandler:function(){},retryOnErrorFunction:function(e){return e instanceof TypeError},notifySuccess:void 0,notifyError:void 0,notifyWarning:void 0,getErrorMessage:void 0,defaultMiddlewares:[]};function u(e){try{return c.clone(e)}catch(e){var r="StateDecorator: Cannot clone object. Call setCloneFunction with another implementation like lodash/cloneDeep.";throw"development"===process.env.NODE_ENV&&(console.error(r),console.error(e.toString())),new Error(r)}}function a(e){return"function"!=typeof e&&!e.hasOwnProperty("getPromise")&&e.hasOwnProperty("getGetPromise")}function s(e,r,n,o){var i,c,u,a;return t(t({},e),o?((i={})[r]=t(t({},e[r]||{}),((c={})[n]=o,c)),i):((u={})[r]=t(t({},e[r]),((a={})[n]=!1,a)),u))}function l(e,r,n,o){var i,c,u,a;return t(t({},e),o?((i={})[r]=t(t({},e[r]||{}),((c={})[n]=o,c)),i):((u={})[r]=t(t({},e[r]),((a={})[n]=void 0,a)),u))}var f=function(r){function t(e){var n=r.call(this,"Error")||this;return n.promiseIds=e,Object.setPrototypeOf(n,t.prototype),n}return function(r,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=r}e(r,t),r.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}(t,r),t}(Error);function d(e,r,t,i){return void 0===r&&(r=1),void 0===t&&(t=1e3),void 0===i&&(i=function(){return!0}),1===r?e:function(c){var u=e(c);return null===u?null:function u(a,s){return n(this,void 0,void 0,(function(){return o(this,(function(n){return null===s?[2,null]:[2,s.catch((function(n){return i(n)?a===r?Promise.reject(n):new Promise((function(r,n){setTimeout((function(){var t=e(c);u(a+1,t).then(r).catch(n)}),t*a)})):Promise.reject(n)}))]}))}))}(1,u)}}function p(e){return void 0===e&&(e=null),{current:e}}function v(e,r,t){var n,o;return{state:e.current,s:e.current,ds:null===(n=null==r?void 0:r.current)||void 0===n?void 0:n.state,derived:null===(o=null==r?void 0:r.current)||void 0===o?void 0:o.state,props:t.current,p:t.current}}function g(e,r,t,n,o,i){var c=v(e,r,t);return c.indices=n,c.index=o,c.isInit=i,c}function y(e,r,t,n,o){var i=v(e,r,t);return i.args=n,o&&(i.promiseId=o),i}function h(e,r,t,n,o,i){var c=y(e,r,t,n,i);return c.result=o,c.res=o,c}function E(e,r,t,n,o,i,c){var u=P(y(e,r,t,n,c),o);return u.abortSignal=i,u}function m(e,r){var t=e;return t.state=r.current,t.s=r.current,t}function P(e,r){var t=e;return t.actions=r.current,t.a=r.current,t}function S(e,r,t,n,o){var i,c=P(e,n);m(e,r);var u=null===(i=null==t?void 0:t.current)||void 0===i?void 0:i.state;return c.derived=u,c.ds=u,c.notifyWarning=o,c}function b(e){"development"===process.env.NODE_ENV&&console.warn("[state-decorator] "+e+" action was called while store is not initialized or destroyed, this is probably a leak")}function w(e,r,t,n,o,i,c,u,a,s){var l,f=h(t,n,o,s,void 0),d=!1;if(null!=r.effects){var p=r.effects(f);null===p?d=!0:a(p,void 0,e,"effects",!1,f,!1)}if(!d)if(r.debounceSideEffectsTimeout>0){var v=c.current[e];v&&clearTimeout(v),c.current[e]=setTimeout((function(){var o;null===(o=r.sideEffects)||void 0===o||o.call(r,S(f,t,n,i,u.notifyWarning)),delete c.current[e]}),r.debounceSideEffectsTimeout)}else null===(l=r.sideEffects)||void 0===l||l.call(r,S(f,t,n,i,u.notifyWarning))}function A(e,r,t,n){var o=e.action,i=e.stateRef,u=e.derivedStateRef,a=e.propsRef,l=e.promisesRef,f=e.actionsRef,d=e.loadingMapRef,p=e.conflictActionsRef,v=e.actionName,g=e.options,y=e.setState;if(e.initializedRef.current){var E=null,m=h(i,u,a,n,t,r);o.effects&&(E=o.effects(m)),y(E,s(d.current,v,r,!1),v,"effects",!0,m,!1);var P=g.notifySuccess||c.notifySuccess;if(P){var b=void 0;o.getSuccessMessage&&(b=o.getSuccessMessage(m)),b&&P(b)}return delete l.current[v][r],o.sideEffects&&o.sideEffects(S(m,i,u,f,c.notifyWarning)),L(v,f.current,p.current),t}}function x(e,r,t,n){var o=e.action,i=e.stateRef,u=e.derivedStateRef,a=e.propsRef,f=e.actionsRef,d=e.loadingMapRef,p=e.errorMapRef,v=e.promisesRef,g=e.conflictActionsRef,h=e.actionName,E=e.options,m=e.setState;if(e.initializedRef.current){var P=null,b=function(e,r,t,n,o,i){var c=y(e,r,t,n,i);return c.error=o,c.err=o,c}(i,u,a,n,t,r);o.errorEffects&&(P=o.errorEffects(b)),p.current=l(p.current,h,r,t),m(P,s(d.current,h,r,!1),h,"errorEffects",!0,b,!1);var w=!1;(null!=P||o.errorSideEffects||o.isErrorManaged)&&(w=!0);var A=E.notifyError||c.notifyError;if(A){var x=void 0;o.getErrorMessage&&(x=o.getErrorMessage(b)),void 0===x&&!w&&c.getErrorMessage&&(x=c.getErrorMessage(t)),x&&(w=!0,A(x))}return c.asyncErrorHandler(t,w||o.rejectPromiseOnError,i.current,a.current,h,n),delete v.current[h][r],o.errorSideEffects&&o.errorSideEffects(S(b,i,u,f,c.notifyWarning)),L(h,f.current,g.current),!w||o.rejectPromiseOnError?Promise.reject(t):Promise.resolve()}}var O="__def__";function R(e,r){return e.length===r.length&&-1===e.findIndex((function(e,t){return r[t]!==e}))}function C(e,t,n,o,i){var c=o;if(c===r.REUSE){if(R(e[n][O].refArgs,i))return e[n][O].promise;c=r.KEEP_ALL}return new Promise((function(e,o){var a={resolve:e,reject:o,args:u(i),timestamp:Date.now()};switch(c){case r.IGNORE:e(void 0);break;case r.REJECT:o(new Error("An asynchronous action "+n+" is already ongoing."));break;case r.KEEP_LAST:t[n]=[a];break;case r.KEEP_ALL:var s=t[n];s||(t[n]=s=[]),s.push(a);break;case r.PARALLEL:case r.REUSE:}}))}function L(e,r,t){var n=t[e];if(n&&n.length>0){var o=t[e].shift();if(o){var i=r[e].apply(r,o.args);null==i?L(e,r,t):i.then((function(n){null===n&&L(e,r,t),o.resolve(n)})).catch((function(e){return o.reject(e)}))}}}exports.DEFAULT_PROMISE_ID=O,exports.ParallelActionError=f,exports.addContextActions=P,exports.addStateToContext=m,exports.areSameArgs=R,exports.buildErrorMap=function(e){return Object.keys(e).reduce((function(r,t){var n=e[t];if(null==n[O]);else if(n[O])r[t]=n[O];else{var o=Object.keys(n).reduce((function(e,r){return null!=n[r]&&(e.hasErr=!0,e.map[r]=n[r]),e}),{hasErr:!1,map:{}});o.hasErr&&(r[t]=new f(o.map))}return r}),{})},exports.buildInvocationContextBase=v,exports.buildLoadingMap=s,exports.buildOnMountInvocationContext=function(e,r,t,n){return P(v(e,r,t),n)},exports.buildOnPropChangeEffects=g,exports.computeAsyncActionInput=function(e){return a(e)?t(t({},e),{getPromise:e.getGetPromise,retryCount:3,conflictPolicy:r.REUSE}):e},exports.computeDerivedValues=function(e,r,t,n){if(null==(null==n?void 0:n.derivedState))return!1;var o=!1,i=c.comparator,u=t.current.deps,a=v(e,null,r),s=Object.keys(n.derivedState);return t.current.state=s.reduce((function(e,r){var c=!1,s=u[r],l=n.derivedState[r].getDeps(a);return c=null==s||null!=l.find((function(e,r){return s.length<r||!i(s[r],e)})),o=o||c,u[r]=l,e[r]=c?n.derivedState[r].get(a):t.current.state[r],e}),{}),o},exports.createRef=p,exports.decorateAsyncAction=function(e){var n=e.action,o=e.stateRef,u=e.derivedStateRef,a=e.propsRef,f=e.actionsRef,p=e.promisesRef,v=e.loadingMapRef,g=e.errorMapRef,h=e.initializedRef,m=e.conflictActionsRef,P=e.actionName,S=e.setState;return function(){for(var w,R,L,j=[],_=0;_<arguments.length;_++)j[_]=arguments[_];if(!h.current)return b(P),null;var M=p.current,T=n.conflictPolicy,k=void 0===T?r.KEEP_ALL:T,I=k===r.PARALLEL,D=null;if(I){if(!n.getPromiseId)throw new Error("If conflict policy is set to ConflictPolicy.PARALLEL, getPromiseId must be set and return a string.");D=n.getPromiseId.apply(n,j)}else D=O;if(!I&&(null===(R=M[P])||void 0===R?void 0:R[D]))return C(M,m.current,P,k,j);var G=null,N=!1,K=y(o,u,a,j,D);n.preEffects&&(G=n.preEffects(K))&&(N=!0,o.current=G);var U=n.abortable,W=n.retryCount,F=n.retryDelaySeed,z=n.isTriggerRetryError,J=U&&window.AbortController?new AbortController:null,V=d(n.getPromise,W?1+W:1,F,z||c.retryOnErrorFunction),H=null===(L=V(E(o,u,a,j,f,null==J?void 0:J.signal)))||void 0===L?void 0:L.then((function(r){return A(e,D,r,j)})).catch((function(r){return x(e,D,r,j)}));return null!=H&&(M[P]=t(t({},M[P]||{}),((w={})[D||O]={abortController:J,promise:H,refArgs:k===r.REUSE&&j.length>0?i([],j):[]},w))),g.current=l(g.current,P,D,null),S(null!=H||N?o.current:void 0,null==H?void 0:s(v.current,P,D,!0),P,"preEffects",!0,K,!1),H}},exports.decorateSimpleSyncAction=function(e,r,t,n,o,i,c){return function(){for(var u=[],a=0;a<arguments.length;a++)u[a]=arguments[a];if(i.current){var s=y(t,n,o,u),l=r(s);c(l,null,e,"effects",!1,s,!1)}else b(e)}},exports.decorateSyncAction=function(e,r,t,n,o,i,c,u,a,s){return function(){for(var l=[],f=0;f<arguments.length;f++)l[f]=arguments[f];if(c.current)if(r.debounceTimeout){var d=u.current[e];d&&clearTimeout(d),u.current[e]=setTimeout((function(){delete u.current[e],w(e,r,t,n,o,i,u,a,s,l)}),r.debounceTimeout)}else w(e,r,t,n,o,i,u,a,s,l);else b(e)}},exports.globalConfig=c,exports.isAsyncAction=function(e){return!(e instanceof Function)&&(e.hasOwnProperty("getPromise")||e.hasOwnProperty("getGetPromise"))},exports.isAsyncGetPromiseAction=function(e){return"function"!=typeof e&&e.hasOwnProperty("getPromise")&&!e.hasOwnProperty("getGetPromise")},exports.isAsyncGetPromiseGetAction=a,exports.isLoadingImpl=function(e){for(var r=[],t=1;t<arguments.length;t++)r[t-1]=arguments[t];return r.some((function(r){var t,n=null,o=O;Array.isArray(r)?(n=r[0],o=void 0===(t=r[1])?O:t):n=r;var i=e[n];return null!=i&&(null!=i[o]&&i[o])}))},exports.isSimpleSyncAction=function(e){return"function"==typeof e},exports.isSyncAction=function(e){return"function"!=typeof e&&!e.hasOwnProperty("getPromise")&&!e.hasOwnProperty("getGetPromise")},exports.onPropChange=function(e,r,n,o,i,u,a,s){var l=null!=(null==u?void 0:u.derivedState);if(null!=u.onPropsChange){var f;f=Array.isArray(u.onPropsChange)?u.onPropsChange:[u.onPropsChange];var d=!1,v=p(e.current),y=[],h=c.comparator;f.forEach((function(e,t){var i,c,u=e.getDeps;if(u){var l=!1,f=[];if(s){if(!e.onMount)return;l=!0}else{var p=u(o),E=u(n.current);p.length!==E.length?(console.warn("options.onPropsChange.getDeps returned array must be stable (same length)"),l=!0):p.forEach((function(e,r){h(e,E[r])||(l=!0,f.push(r))}))}if(l){var m=g(v,r,n,f,t,s),P=null!==(c=null===(i=e.effects)||void 0===i?void 0:i.call(e,m))&&void 0!==c?c:null;null!=P&&(d=!0,v.current=P,a(v.current,void 0,"onPropsChange","effects",!1,m,!0,s)),e.sideEffects&&y.push({index:t,indices:f,ctx:m})}}})),!d&&l&&a(void 0,void 0,"onPropsChange","effects",!1,null,!0),y.length>0&&y.forEach((function(e){f[e.index].sideEffects(t(t({},m(P(e.ctx,i),v)),{indices:e.indices}))}))}else null!=(null==u?void 0:u.derivedState)&&a(void 0,void 0,"onPropsChange","effects",!1,null,!0)},exports.retryPromiseDecorator=d,exports.runMiddlewares=function(e,r,t,n,o,i,c,u){if("onPropsChange"===o&&void 0===t)return{newState:null,newLoading:!1};if(e&&e.length>0){var a=e.reduce((function(e,r){var t=r.effects({isAsync:c,name:o,type:i,context:u},e.oldState,e.newState,n);return{newState:(null==t?void 0:t.state)||e.newState,oldState:(null==t?void 0:t.state)?e.newState:e.oldState,loading:null==(null==t?void 0:t.loading)?e.loading:t.loading}}),{oldState:r,newState:t,loading:n});return{newLoading:a.loading,newState:a.newState}}return{newState:t,newLoading:n}},exports.setGlobalConfig=function(e){Object.keys(e).forEach((function(r){null!=e[r]&&(c[r]=e[r])}))},exports.updateErrorMap=l;
2
+ //# sourceMappingURL=impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impl.js","sources":["../../node_modules/tslib/tslib.es6.js"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__assign","assign","t","s","i","n","arguments","length","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__spreadArray","to","from","pack","ar","l","slice","concat","String","__","constructor","create"],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ /*! *****************************************************************************
2
+ Copyright (c) GlobalSport SAS.
3
+
4
+ Permission to use, copy, modify, and/or distribute this software for any
5
+ purpose with or without fee is hereby granted.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
9
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
10
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
11
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13
+ PERFORMANCE OF THIS SOFTWARE.
14
+ ***************************************************************************** */
15
+ import { setGlobalConfig, GlobalConfig, ParallelActionError } from './impl';
16
+ import { DecoratedActions, StoreActions, AsyncAction, SyncAction, SimpleSyncAction, LoadingMap, ErrorMap, LoadingParallelMap, ErrorParallelMap, StoreOptions, AsyncActionPromise, InvocationContext, GetPromiseInvocationContext, EffectsInvocationContext, InvocationContextActions, WarningNotifyFunc, ErrorEffectsInvocationContext, OnMountInvocationContext, ContextBase, OnPropsChangeEffectsContext, ContextState, ConflictPolicy, Middleware, AbortActionCallback, MiddlewareFactory, LoadingProps } from './types';
17
+ export { DecoratedActions, StoreActions, LoadingMap, ErrorMap, LoadingParallelMap, ErrorParallelMap, ParallelActionError, StoreOptions, AsyncActionPromise as AsynchActionPromise, InvocationContext, GetPromiseInvocationContext, EffectsInvocationContext, InvocationContextActions, WarningNotifyFunc, ErrorEffectsInvocationContext, OnMountInvocationContext, ContextBase, OnPropsChangeEffectsContext, SyncAction, AsyncAction, SimpleSyncAction, ContextState, ConflictPolicy, GlobalConfig, Middleware, setGlobalConfig, LoadingProps, AbortActionCallback, };
18
+ export declare type IsLoadingFunc<A> = (...props: (keyof A | [keyof A, string])[]) => boolean;
19
+ declare type StateListenerUnregister = () => void;
20
+ export declare type StoreApi<S, A extends DecoratedActions, P, DS = {}> = {
21
+ /**
22
+ * The current store state (with derived state if any).
23
+ */
24
+ readonly state: S & DS;
25
+ /**
26
+ * The store decorator (ie. ready to use) actions.
27
+ */
28
+ readonly actions: A;
29
+ /**
30
+ * A boolean that indicates that at least one asynchronous action is loading.
31
+ */
32
+ readonly loading: boolean;
33
+ /**
34
+ * A map of loading actions map (computed on property access)
35
+ */
36
+ readonly loadingMap: LoadingMap<A>;
37
+ /**
38
+ * A map of loading actions map (computed on property access)
39
+ */
40
+ readonly errorMap: ErrorMap<A>;
41
+ /**
42
+ * A map of parallel loading actions map (computed on property access)
43
+ */
44
+ readonly loadingParallelMap: LoadingParallelMap<A>;
45
+ /**
46
+ * A map of parallel actions error map (computed on property access)
47
+ */
48
+ readonly errorParallelMap: ErrorParallelMap<A>;
49
+ /**
50
+ * Initializes the store with the specified props
51
+ */
52
+ init: (p: P) => void;
53
+ /**
54
+ * Update the store with the specified props
55
+ */
56
+ setProps: (p: P) => void;
57
+ /**
58
+ * Destroy the store
59
+ */
60
+ destroy: () => void;
61
+ /**
62
+ * Abort an asynchronous action marked as abortable.
63
+ */
64
+ abortAction: (actionName: keyof A, promiseId?: string) => boolean;
65
+ /**
66
+ * Add a store state change listener
67
+ */
68
+ addStateListener: (listener: StateListener<S, DS, A>) => StateListenerUnregister;
69
+ /**
70
+ * A function that takes a list of action names or a tuple of [action name, promiseId] and returns <code>true</code> if any action is loading.
71
+ */
72
+ isLoading: IsLoadingFunc<A>;
73
+ getConfig: () => {
74
+ getInitialState: (p: P) => S;
75
+ options: StoreOptions<S, A, P, DS>;
76
+ actions: StoreActions<S, A, P, DS>;
77
+ };
78
+ };
79
+ export declare type StateListenerContext<S, DS, A extends DecoratedActions> = S & DS & A & Pick<StoreApi<S, A, any, DS>, 'loading' | 'loadingMap' | 'errorMap' | 'isLoading' | 'abortAction'>;
80
+ export declare type StateListener<S, DS, A extends DecoratedActions> = (ctx: StateListenerContext<S, DS, A>) => void;
81
+ /**
82
+ * Create a new store.
83
+ * @param getInitialState The state initialization function (using props)
84
+ * @param actionsImpl The actions implementation (pure functions only).
85
+ * @param options Options to configure the store
86
+ * @returns a store.
87
+ */
88
+ export declare function createStore<S, A extends DecoratedActions, P, DS = {}>(getInitialState: (p: P) => S, actionsImpl: StoreActions<S, A, P, DS>, options?: StoreOptions<S, A, P, DS>, storeMiddlewares?: MiddlewareFactory<S, A, P>[]): StoreApi<S, A, P, DS>;
89
+ /**
90
+ * A react hook to get a state slice. Will be refresh if, and only if, one property of the slice has changed
91
+ * @param store The store to listen to.
92
+ * @param slicerFunc A function that returns a state slice
93
+ * @param comparator An optional function to compare if slice property has changed (shallow test by default)
94
+ * @returns The state slice.
95
+ */
96
+ export declare function useStoreSlice<S, A extends DecoratedActions, P, DS, SLICE>(store: StoreApi<S, A, P, DS>, slicerFunc: (ctx: StateListenerContext<S, DS, A>) => SLICE): SLICE;
97
+ export declare function useStoreSlice<S, A extends DecoratedActions, P, DS, K extends keyof StateListenerContext<S, DS, A>>(store: StoreApi<S, A, P, DS>, properties: K[]): Pick<StateListenerContext<S, DS, A>, K>;
98
+ /**
99
+ * Binds the store to this component.
100
+ * Store will be destroyed when component is unmouted.
101
+ * Props passed to actions will come from this components.
102
+ * If store is configured to react of props changes, it will used passed props.
103
+ * A store must be bound to only one React component.
104
+ * This component will be refreshed for every change in the store.
105
+ *
106
+ * @param store The store to listen to.
107
+ * @param props The parent component props
108
+ * @returns The state, actions and isLoading function.
109
+ */
110
+ export declare function useStore<S, A extends DecoratedActions, P, DS = {}>(store: StoreApi<S, A, P, DS>, props?: P): {
111
+ state: S & DS;
112
+ actions: A;
113
+ loading: boolean;
114
+ isLoading: IsLoadingFunc<A>;
115
+ abortAction: (actionName: keyof A, promiseId?: string) => boolean;
116
+ loadingMap: LoadingMap<A>;
117
+ errorMap: ErrorMap<A>;
118
+ loadingParallelMap: LoadingParallelMap<A>;
119
+ errorParallelMap: ErrorParallelMap<A>;
120
+ };
121
+ /**
122
+ * Binds the store to this component.
123
+ * Store will be destroyed when component is unmouted.
124
+ * Props passed to actions will come from this components.
125
+ * If store is configured to react of props changes, it will used passed props.
126
+ * A store must be bound to only one React component.
127
+ *
128
+ * This component will NOT be refreshed for any change in the store.
129
+ *
130
+ * @param store The store to listen to.
131
+ * @param props The parent component props
132
+ */
133
+ export declare function useBindStore<S, A extends DecoratedActions, P, DS = {}>(store: StoreApi<S, A, P, DS>, props?: P): StoreApi<S, A, P, DS>;
134
+ /**
135
+ * Creates and manages a local store.
136
+ * @param getInitialState Function to compute initial state from props.
137
+ * @param actionImpl Actions implementation.
138
+ * @param props Owner component props to update state or react on prop changes
139
+ * @param options The store options.
140
+ * @returns The state, actions and isLoading function.
141
+ */
142
+ export declare function useLocalStore<S, A extends DecoratedActions, P, DS = {}>(getInitialState: (p: P) => S, actionImpl: StoreActions<S, A, P, DS>, props?: P, options?: StoreOptions<S, A, P, DS>, middlewares?: MiddlewareFactory<S, A, P>[]): {
143
+ state: S & DS;
144
+ actions: A;
145
+ loading: boolean;
146
+ isLoading: IsLoadingFunc<A>;
147
+ abortAction: (actionName: keyof A, promiseId?: string) => boolean;
148
+ loadingMap: LoadingMap<A>;
149
+ errorMap: ErrorMap<A>;
150
+ loadingParallelMap: LoadingParallelMap<A>;
151
+ errorParallelMap: ErrorParallelMap<A>;
152
+ };
153
+ export default useLocalStore;
154
+ /**
155
+ * Creates a new object by picking properties to the object passed a first parameter
156
+ * @param obj Object to pick properties from
157
+ * @param props Property names
158
+ * @returns a new object containing only picked properties
159
+ */
160
+ export declare function pick<T, K extends keyof T>(obj: T, props: K[]): Pick<T, K>;
161
+ /**
162
+ * Returns a function that creates a new object by picking properties to the object passed as first parameter.
163
+ * To be used in conjunction of <code>useStoreSlice</code> like in example:
164
+ * const s = useStoreSlice(myStore, slice('list', 'addItem'));
165
+ * @param props Property names
166
+ * @returns a function to pick property from an passed object.
167
+ */
168
+ export declare function slice<T, K extends keyof T>(...props: K[]): (obj: T) => Pick<T, K>;
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r,e=require("react"),n=require("./impl"),t=function(){return(t=Object.assign||function(r){for(var e,n=1,t=arguments.length;n<t;n++)for(var u in e=arguments[n])Object.prototype.hasOwnProperty.call(e,u)&&(r[u]=e[u]);return r}).apply(this,arguments)};function u(r,e,n){if(n||2===arguments.length)for(var t,u=0,o=e.length;u<o;u++)!t&&u in e||(t||(t=Array.prototype.slice.call(e,0,u)),t[u]=e[u]);return r.concat(t||Array.prototype.slice.call(e))}function o(r,e,o,c){void 0===o&&(o={}),void 0===c&&(c=null);var i=n.createRef(),a=n.createRef(),l=n.createRef(),s=n.createRef(),f=n.createRef(),d=n.createRef(),p=n.createRef(),v=n.createRef(),g=n.createRef(),y=n.createRef(!1),M=n.createRef([]),b={},R=0;function A(r,e){var n=t(t({},r),e),u=t(t(t({},n),s.current),{isLoading:O,abortAction:m,loading:h(),loadingMap:j(),errorMap:x()});Object.keys(b).forEach((function(r){b[r](u)}))}function E(r){i.current=r,n.computeDerivedValues(i,l,a,o),A(i.current,a.current.state)}function L(t){var u;if(!y.current){l.current=t,y.current=!0,i.current=r(t);var b=new Set(null==o?void 0:o.initialActionsMarkedLoading);d.current=Object.keys(e).reduce((function(r,e){var t;return r[e]=b.has(e)?((t={})[n.DEFAULT_PROMISE_ID]=!0,t):{},r}),{}),p.current=Object.keys(e).reduce((function(r,e){return r[e]={},r}),{}),f.current={},v.current={},g.current={},a.current={state:null,deps:{}},M.current=[];var R={options:o,get state(){return i.current},actions:e,setState:E},L=function(r){var e,n=r();M.current.push(n),null===(e=n.init)||void 0===e||e.call(n,R)};null===(u=n.globalConfig.defaultMiddlewares)||void 0===u||u.forEach(L),null==c||c.forEach(L),n.computeDerivedValues(i,l,a,o),n.onPropChange(i,a,l,null,s,o,P,!0),(null==o?void 0:o.onMount)&&o.onMount(n.buildOnMountInvocationContext(i,a,l,s)),A(i.current,a.current.state)}}function P(r,e,t,u,c,s,f,p){void 0===f&&(f=!1),void 0===p&&(p=!1);var v=!1;if(y.current){var g=e,b=!!c&&n.isLoadingImpl(g||d.current,[t,null==s?void 0:s.promiseId]),R=n.runMiddlewares(M.current,i.current,r,b,t,u,c,s),E=R.newState,L=R.newLoading;if(null!=E&&(v=!0,i.current=E),b!==L&&(g=n.buildLoadingMap(g,t,(null==s?void 0:s.promiseId)||n.DEFAULT_PROMISE_ID,L),0===Object.keys(g).length&&(g=void 0)),null!=g&&(v=!0,d.current=g),v)n.computeDerivedValues(i,l,a,o),p||A(E||i.current,a.current.state);else if(f){n.computeDerivedValues(i,l,a,o)&&!p&&A(E||i.current,a.current.state)}}}var S=Object.keys(e);function O(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return n.isLoadingImpl.apply(void 0,u([d.current],r))}function m(r,e){var t,u;void 0===e&&(e=n.DEFAULT_PROMISE_ID);var o=null===(u=null===(t=v.current[r])||void 0===t?void 0:t[e])||void 0===u?void 0:u.abortController,c=!1;return o&&(o.abort(),c=!0),c}function h(){if(y.current){var r=d.current;return null!=Object.keys(r).find((function(e){var n=r[e];return Object.keys(n).find((function(r){return!!n[r]}))}))}return null}function j(){if(y.current){var r=d.current;return Object.keys(r).reduce((function(e,n){var t=r[n];return e[n]=null!=Object.keys(t).find((function(r){return!!t[r]})),e}),{})}return null}function x(){return y.current?n.buildErrorMap(p.current):null}return s.current=S.reduce((function(r,t){var u=e[t];return n.isSimpleSyncAction(u)?r[t]=n.decorateSimpleSyncAction(t,u,i,a,l,y,P):n.isAsyncAction(u)?r[t]=n.decorateAsyncAction({actionName:t,stateRef:i,derivedStateRef:a,propsRef:l,loadingMapRef:d,errorMapRef:p,actionsRef:s,promisesRef:v,conflictActionsRef:g,initializedRef:y,options:o,setState:P,action:n.computeAsyncActionInput(u)}):n.isSyncAction(u)&&(r[t]=n.decorateSyncAction(t,u,i,a,l,s,y,f,o,P)),r}),{}),{getConfig:function(){return{getInitialState:r,options:o,actions:e}},setProps:function(r){var e=l.current;l.current=r,y.current?n.onPropChange(i,a,l,e,s,o,P,!1):L(r)},addStateListener:function(r){var e=""+R++;return b[e]=r,function(){delete b[e]}},init:L,destroy:function(){var r;y.current&&(null===(r=null==o?void 0:o.onUnmount)||void 0===r||r.call(o,n.buildOnMountInvocationContext(i,a,l,s)),l.current=null,i.current=null,d.current=null,p.current=null,v.current=null,g.current=null,a.current=null,Object.keys(f.current).forEach((function(r){clearTimeout(f.current[r])})),f.current=null,b={},y.current=!1,M.current.forEach((function(r){var e;null===(e=r.destroy)||void 0===e||e.call(r)})),M.current=[])},isLoading:O,abortAction:m,get actions(){return s.current},get state(){return y.current?t(t({},i.current),a.current.state):null},get loading(){return h()},get loadingMap(){return j()},get errorMap(){return x()},get loadingParallelMap(){return y.current?d.current:null},get errorParallelMap(){return y.current?p.current:null}}}function c(r,n){void 0===n&&(n=null);var t=e.useReducer((function(r){return r>100?0:r+1}),0)[1],u=e.useRef(r);return r.setProps(n),e.useLayoutEffect((function(){return u.current.addStateListener((function(){t()}))}),[]),e.useEffect((function(){return function(){return r.destroy()}}),[]),{state:r.state,actions:r.actions,loading:r.loading,isLoading:r.isLoading,abortAction:r.abortAction,loadingMap:r.loadingMap,errorMap:r.errorMap,loadingParallelMap:r.loadingParallelMap,errorParallelMap:r.errorParallelMap}}function i(r,n,t,u,i){var a=e.useRef();return null==a.current&&(a.current=o(r,n,u,i)),c(a.current,t)}function a(r,e){return e.reduce((function(e,n){return r.hasOwnProperty(n)&&(e[n]=r[n]),e}),{})}exports.ConflictPolicy=void 0,(r=exports.ConflictPolicy||(exports.ConflictPolicy={})).REJECT="reject",r.IGNORE="ignore",r.KEEP_LAST="keepLast",r.KEEP_ALL="keepAll",r.PARALLEL="parallel",r.REUSE="reuse",Object.defineProperty(exports,"ParallelActionError",{enumerable:!0,get:function(){return n.ParallelActionError}}),Object.defineProperty(exports,"setGlobalConfig",{enumerable:!0,get:function(){return n.setGlobalConfig}}),exports.createStore=o,exports.default=i,exports.pick=a,exports.slice=function(){for(var r=[],e=0;e<arguments.length;e++)r[e]=arguments[e];return function(e){return a(e,r)}},exports.useBindStore=function(r,n){return void 0===n&&(n=null),e.useRef(r),r.setProps(n),e.useEffect((function(){return function(){return r.destroy()}}),[]),r},exports.useLocalStore=i,exports.useStore=c,exports.useStoreSlice=function(r,u){var o=e.useReducer((function(r){return r>100?0:r+1}),0)[1],c=e.useMemo((function(){return u instanceof Function?u:function(r){return a(r,u)}}),[u]),i=e.useRef(null);if(null===i.current){var l=r.state;i.current=c(t(t(t({},l),r.actions),{actions:r.actions,loading:r.loading,isLoading:r.isLoading,abortAction:r.abortAction,loadingMap:r.loadingMap,errorMap:r.errorMap}))}return e.useLayoutEffect((function(){return r.addStateListener((function(r){var e,t=c(r),u=i.current,a=n.globalConfig.comparator;e=null==u||!a(t,u),i.current=t,e&&o()}))}),[]),i.current};
2
+ //# sourceMappingURL=index.js.map