state-decorator 7.0.0-beta.12-dev → 7.0.0-beta.14-dev

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/es/impl.js CHANGED
@@ -1,975 +1,2 @@
1
- /*! *****************************************************************************
2
- Copyright (c) Microsoft Corporation.
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
- /* global Reflect, Promise */
16
-
17
- var extendStatics = function(d, b) {
18
- extendStatics = Object.setPrototypeOf ||
19
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
20
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
21
- return extendStatics(d, b);
22
- };
23
-
24
- function __extends(d, b) {
25
- if (typeof b !== "function" && b !== null)
26
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
27
- extendStatics(d, b);
28
- function __() { this.constructor = d; }
29
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
30
- }
31
-
32
- var __assign = function() {
33
- __assign = Object.assign || function __assign(t) {
34
- for (var s, i = 1, n = arguments.length; i < n; i++) {
35
- s = arguments[i];
36
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
37
- }
38
- return t;
39
- };
40
- return __assign.apply(this, arguments);
41
- };
42
-
43
- function __awaiter(thisArg, _arguments, P, generator) {
44
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
45
- return new (P || (P = Promise))(function (resolve, reject) {
46
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
47
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
48
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
49
- step((generator = generator.apply(thisArg, _arguments || [])).next());
50
- });
51
- }
52
-
53
- function __generator(thisArg, body) {
54
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
55
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
56
- function verb(n) { return function (v) { return step([n, v]); }; }
57
- function step(op) {
58
- if (f) throw new TypeError("Generator is already executing.");
59
- while (_) try {
60
- 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;
61
- if (y = 0, t) op = [op[0] & 2, t.value];
62
- switch (op[0]) {
63
- case 0: case 1: t = op; break;
64
- case 4: _.label++; return { value: op[1], done: false };
65
- case 5: _.label++; y = op[1]; op = [0]; continue;
66
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
67
- default:
68
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
69
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
70
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
71
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
72
- if (t[2]) _.ops.pop();
73
- _.trys.pop(); continue;
74
- }
75
- op = body.call(thisArg, _);
76
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
77
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
78
- }
79
- }
80
-
81
- function __spreadArray(to, from, pack) {
82
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
83
- if (ar || !(i in from)) {
84
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
85
- ar[i] = from[i];
86
- }
87
- }
88
- return to.concat(ar || Array.prototype.slice.call(from));
89
- }
90
-
91
- /*! *****************************************************************************
92
- Copyright (c) GlobalSport SAS.
93
-
94
- Permission to use, copy, modify, and/or distribute this software for any
95
- purpose with or without fee is hereby granted.
96
-
97
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
98
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
99
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
100
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
101
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
102
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
103
- PERFORMANCE OF THIS SOFTWARE.
104
- ***************************************************************************** */
105
- // @ts-nocheck
106
- // SOURCE https://github.com/pmndrs/zustand/blob/master/src/shallow.ts
107
- function shallow(objA, objB) {
108
- if (Object.is(objA, objB)) {
109
- return true;
110
- }
111
- if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
112
- return false;
113
- }
114
- if (objA instanceof Set || objB instanceof Set) {
115
- // if they are equal, first condition is true
116
- return false;
117
- }
118
- var keysA = Object.keys(objA);
119
- var keysB = Object.keys(objB);
120
- if (keysA.length !== keysB.length) {
121
- return false;
122
- }
123
- for (var i = 0; i < keysA.length; i++) {
124
- if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||
125
- !Object.is(objA[keysA[i]], objB[keysA[i]])) {
126
- return false;
127
- }
128
- }
129
- return true;
130
- }
131
-
132
- /*! *****************************************************************************
133
- Copyright (c) GlobalSport SAS.
134
-
135
- Permission to use, copy, modify, and/or distribute this software for any
136
- purpose with or without fee is hereby granted.
137
-
138
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
139
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
140
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
141
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
142
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
143
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
144
- PERFORMANCE OF THIS SOFTWARE.
145
- ***************************************************************************** */
146
- /**
147
- * The State decorator can manage only one asynchronous action of same name at a time.
148
- * This enum is enumertaing all the policies in such case.
149
- */
150
- var ConflictPolicy;
151
- (function (ConflictPolicy) {
152
- /**
153
- * Reject the promise.
154
- */
155
- ConflictPolicy["REJECT"] = "reject";
156
- /**
157
- * Return a resolved promise with no result.
158
- */
159
- ConflictPolicy["IGNORE"] = "ignore";
160
- /**
161
- * Execute only the last call that conflicts after the one ongoing.
162
- */
163
- ConflictPolicy["KEEP_LAST"] = "keepLast";
164
- /**
165
- * Execute all calls one after another.
166
- */
167
- ConflictPolicy["KEEP_ALL"] = "keepAll";
168
- /**
169
- * Execute all calls one after another.
170
- * @see getPromiseId
171
- */
172
- ConflictPolicy["PARALLEL"] = "parallel";
173
- /**
174
- * Reuse the ongoing promise if any and if possible (same arguments). Only for GET requests!
175
- */
176
- ConflictPolicy["REUSE"] = "reuse";
177
- })(ConflictPolicy || (ConflictPolicy = {}));
178
- // const cfg: StoreConfig<{ p: string }, { do: () => void }, {}, {}> = {
179
- // getInitialState: () => ({ p: 'coucou' }),
180
- // actions: {
181
- // do: () => ({}),
182
- // },
183
- // };
184
- // const cfg2: StoreConfig<{ p: string }, { do: () => void }, {}, {}> = {
185
- // initialState: { p: 'coucou' },
186
- // actions: {
187
- // do: () => ({}),
188
- // },
189
- // };
190
-
191
- /*! *****************************************************************************
192
- Copyright (c) GlobalSport SAS.
193
-
194
- Permission to use, copy, modify, and/or distribute this software for any
195
- purpose with or without fee is hereby granted.
196
-
197
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
198
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
199
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
200
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
201
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
202
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
203
- PERFORMANCE OF THIS SOFTWARE.
204
- ***************************************************************************** */
205
- var EffectError = /** @class */ (function (_super) {
206
- __extends(EffectError, _super);
207
- function EffectError(source, initialError) {
208
- var _this = _super.call(this, source.message) || this;
209
- _this.source = source;
210
- _this.initialError = initialError;
211
- Object.setPrototypeOf(_this, EffectError.prototype);
212
- return _this;
213
- }
214
- return EffectError;
215
- }(Error));
216
- /** @internal */
217
- var globalConfig = {
218
- clone: defaultCloneFunc,
219
- comparator: shallow,
220
- asyncErrorHandler: function () { },
221
- retryOnErrorFunction: function (error) { return error instanceof TypeError; },
222
- notifySuccess: undefined,
223
- notifyError: undefined,
224
- notifyWarning: undefined,
225
- getErrorMessage: undefined,
226
- defaultMiddlewares: [],
227
- };
228
- function setGlobalConfig(overrideConfig) {
229
- var keys = Object.keys(overrideConfig);
230
- keys.forEach(function (k) {
231
- if (overrideConfig[k] != null) {
232
- globalConfig[k] = overrideConfig[k];
233
- }
234
- });
235
- }
236
- function defaultCloneFunc(src) {
237
- return JSON.parse(JSON.stringify(src));
238
- }
239
- function clone(obj) {
240
- try {
241
- return globalConfig.clone(obj);
242
- }
243
- catch (e) {
244
- var msg = 'StateDecorator: Cannot clone object. Set setCloneFunction on global global with another implementation like lodash/cloneDeep.';
245
- if (process.env.NODE_ENV === 'development') {
246
- console.error(msg);
247
- console.error(e.toString());
248
- }
249
- throw new Error(msg);
250
- }
251
- }
252
- // ----------------------------
253
- //
254
- // TYPE GUARDS
255
- //
256
- // -----------------------------
257
- /**
258
- * Type guard function to test if an action is a asynchronous action.
259
- */
260
- function isAsyncAction(action) {
261
- return (!(action instanceof Function) && (action.hasOwnProperty('getPromise') || action.hasOwnProperty('getGetPromise')));
262
- }
263
- /**
264
- * Type guard function to test if an action is a synchronous action.
265
- */
266
- function isSimpleSyncAction(action) {
267
- return typeof action === 'function';
268
- }
269
- /**
270
- * Type guard function to test if an action is a synchronous action.
271
- */
272
- function isSyncAction(action) {
273
- return (typeof action !== 'function' && !action.hasOwnProperty('getPromise') && !action.hasOwnProperty('getGetPromise'));
274
- }
275
- function isAsyncGetPromiseAction(action) {
276
- return typeof action !== 'function' && action.hasOwnProperty('getPromise') && !action.hasOwnProperty('getGetPromise');
277
- }
278
- function isAsyncGetPromiseGetAction(action) {
279
- return typeof action !== 'function' && !action.hasOwnProperty('getPromise') && action.hasOwnProperty('getGetPromise');
280
- }
281
- /** @internal */
282
- function computeAsyncActionInput(action) {
283
- if (isAsyncGetPromiseGetAction(action)) {
284
- return __assign(__assign({}, action), { getPromise: action.getGetPromise, retryCount: 3, conflictPolicy: ConflictPolicy.REUSE });
285
- }
286
- return action;
287
- }
288
- /** @internal */
289
- function buildLoadingMap(source, actionName, promiseId, loading) {
290
- var _a, _b, _c, _d;
291
- if (loading) {
292
- return __assign(__assign({}, source), (_a = {}, _a[actionName] = __assign(__assign({}, (source[actionName] || {})), (_b = {}, _b[promiseId] = loading, _b)), _a));
293
- }
294
- var res = __assign(__assign({}, source), (_c = {}, _c[actionName] = __assign(__assign({}, source[actionName]), (_d = {}, _d[promiseId] = false, _d)), _c));
295
- return res;
296
- }
297
- /** @internal */
298
- function updateErrorMap(source, actionName, promiseId, error) {
299
- var _a, _b, _c, _d;
300
- if (error) {
301
- return __assign(__assign({}, source), (_a = {}, _a[actionName] = __assign(__assign({}, (source[actionName] || {})), (_b = {}, _b[promiseId] = error, _b)), _a));
302
- }
303
- var res = __assign(__assign({}, source), (_c = {}, _c[actionName] = __assign(__assign({}, source[actionName]), (_d = {}, _d[promiseId] = undefined, _d)), _c));
304
- return res;
305
- }
306
- var ParallelActionError = /** @class */ (function (_super) {
307
- __extends(ParallelActionError, _super);
308
- function ParallelActionError(promiseIds) {
309
- var _this = _super.call(this, 'Error') || this;
310
- _this.promiseIds = promiseIds;
311
- Object.setPrototypeOf(_this, ParallelActionError.prototype);
312
- return _this;
313
- }
314
- return ParallelActionError;
315
- }(Error));
316
- function buildErrorMap(map) {
317
- var keys = Object.keys(map);
318
- return keys.reduce(function (acc, actionName) {
319
- var subMap = map[actionName];
320
- // DEFAULT_PROMISE_ID is set internally
321
- // if defines it means that action is NOT run in parallel
322
- if (subMap[DEFAULT_PROMISE_ID] == null) ;
323
- else if (subMap[DEFAULT_PROMISE_ID]) {
324
- acc[actionName] = subMap[DEFAULT_PROMISE_ID];
325
- }
326
- else {
327
- var res = Object.keys(subMap).reduce(function (acc, promiseId) {
328
- if (subMap[promiseId] != null) {
329
- acc.hasErr = true;
330
- acc.map[promiseId] = subMap[promiseId];
331
- }
332
- return acc;
333
- }, { hasErr: false, map: {} });
334
- if (res.hasErr) {
335
- acc[actionName] = new ParallelActionError(res.map);
336
- }
337
- }
338
- return acc;
339
- }, {});
340
- }
341
- /** @internal */
342
- function retryPromiseDecorator(promiseProvider, maxCalls, delay, isRetryError) {
343
- if (maxCalls === void 0) { maxCalls = 1; }
344
- if (delay === void 0) { delay = 1000; }
345
- if (isRetryError === void 0) { isRetryError = function () { return true; }; }
346
- if (maxCalls === 1) {
347
- return promiseProvider;
348
- }
349
- return function (ctx) {
350
- function call(callCount, p) {
351
- return __awaiter(this, void 0, void 0, function () {
352
- return __generator(this, function (_a) {
353
- if (p === null) {
354
- return [2 /*return*/, null];
355
- }
356
- return [2 /*return*/, p.catch(function (e) {
357
- if (isRetryError(e)) {
358
- if (callCount === maxCalls) {
359
- return Promise.reject(e);
360
- }
361
- return new Promise(function (resolve, reject) {
362
- setTimeout(function () {
363
- var p = promiseProvider(ctx);
364
- call(callCount + 1, p)
365
- .then(resolve)
366
- .catch(reject);
367
- }, delay * callCount);
368
- });
369
- }
370
- return Promise.reject(e);
371
- })];
372
- });
373
- });
374
- }
375
- var initialPromise = promiseProvider(ctx);
376
- if (initialPromise === null) {
377
- return null;
378
- }
379
- return call(1, initialPromise);
380
- };
381
- }
382
- /** @internal */
383
- function createRef(init) {
384
- if (init === void 0) { init = null; }
385
- return {
386
- current: init,
387
- };
388
- }
389
- // =============================
390
- //
391
- // ACTION DECORATORS
392
- //
393
- // =============================
394
- /** @internal */
395
- function buildInvocationContextBase(stateRef, derivedStateRef, propsRef) {
396
- var _a, _b;
397
- return {
398
- state: stateRef.current,
399
- s: stateRef.current,
400
- ds: (_a = derivedStateRef === null || derivedStateRef === void 0 ? void 0 : derivedStateRef.current) === null || _a === void 0 ? void 0 : _a.state,
401
- derived: (_b = derivedStateRef === null || derivedStateRef === void 0 ? void 0 : derivedStateRef.current) === null || _b === void 0 ? void 0 : _b.state,
402
- props: propsRef.current,
403
- p: propsRef.current,
404
- };
405
- }
406
- /** @internal */
407
- function buildOnMountInvocationContext(stateRef, derivedStateRef, propsRef, actionsRef) {
408
- return addContextActions(buildInvocationContextBase(stateRef, derivedStateRef, propsRef), actionsRef);
409
- }
410
- /** @internal */
411
- function buildOnUnMountInvocationContext(stateRef, derivedStateRef, propsRef, abortedActions) {
412
- return __assign(__assign({}, buildInvocationContextBase(stateRef, derivedStateRef, propsRef)), { abortedActions: abortedActions });
413
- }
414
- /** @internal */
415
- function buildOnPropChangeEffects(stateRef, derivedStateRef, propsRef, indices, index, isInit, getInitialState) {
416
- var res = buildInvocationContextBase(stateRef, derivedStateRef, propsRef);
417
- res.indices = indices;
418
- res.index = index;
419
- res.isInit = isInit;
420
- res.getInitialState = getInitialState;
421
- return res;
422
- }
423
- /** @internal */
424
- function buildInvocationContext(stateRef, derivedStateRef, propsRef, args, promiseId) {
425
- var res = buildInvocationContextBase(stateRef, derivedStateRef, propsRef);
426
- res.args = args;
427
- if (promiseId) {
428
- res.promiseId = promiseId;
429
- }
430
- return res;
431
- }
432
- /** @internal */
433
- function buildEffectsInvocationContext(stateRef, derivedStateRef, propsRef, args, result, promiseId) {
434
- var res = buildInvocationContext(stateRef, derivedStateRef, propsRef, args, promiseId);
435
- res.result = result;
436
- res.res = result;
437
- return res;
438
- }
439
- /** @internal */
440
- function buildErrorEffectsInvocationContext(stateRef, derivedStateRef, propsRef, args, error, promiseId) {
441
- var res = buildInvocationContext(stateRef, derivedStateRef, propsRef, args, promiseId);
442
- res.error = error;
443
- res.err = error;
444
- return res;
445
- }
446
- /** @internal */
447
- function buildPromiseActionContext(stateRef, derivedStateRef, propsRef, args, actionsRef, abortSignal, promiseId) {
448
- var res = addContextActions(buildInvocationContext(stateRef, derivedStateRef, propsRef, args, promiseId), actionsRef);
449
- res.abortSignal = abortSignal;
450
- return res;
451
- }
452
- /** @internal */
453
- function addStateToContext(ctx, stateRef) {
454
- var newCtx = ctx;
455
- newCtx.state = stateRef.current;
456
- newCtx.s = stateRef.current;
457
- return newCtx;
458
- }
459
- /** @internal */
460
- function addContextActions(ctx, actionsRef) {
461
- var newCtx = ctx;
462
- newCtx.actions = actionsRef.current;
463
- newCtx.a = actionsRef.current;
464
- return newCtx;
465
- }
466
- /** @internal */
467
- function addSideEffectsContext(ctx, stateRef, derivedStateRef, actionsRef, notifyWarning, clearError) {
468
- var _a;
469
- var res = addContextActions(ctx, actionsRef);
470
- addStateToContext(ctx, stateRef);
471
- var ds = (_a = derivedStateRef === null || derivedStateRef === void 0 ? void 0 : derivedStateRef.current) === null || _a === void 0 ? void 0 : _a.state;
472
- res.derived = ds;
473
- res.ds = ds;
474
- res.notifyWarning = notifyWarning;
475
- res.clearError = clearError;
476
- return res;
477
- }
478
- function notInitWarning(actionName) {
479
- if (process.env.NODE_ENV === 'development') {
480
- console.warn("[state-decorator] ".concat(actionName, " action was called while store is not initialized or destroyed, this is probably a leak"));
481
- }
482
- }
483
- function mergeState(stateRef, newState) {
484
- return newState == null ? null : __assign(__assign({}, stateRef.current), newState);
485
- }
486
- /** @internal */
487
- function decorateSimpleSyncAction(actionName, action, stateRef, derivedStateRef, propsRef, initializedRef, setState) {
488
- return function () {
489
- var args = [];
490
- for (var _i = 0; _i < arguments.length; _i++) {
491
- args[_i] = arguments[_i];
492
- }
493
- // store was destroyed
494
- if (!initializedRef.current) {
495
- notInitWarning(actionName);
496
- return;
497
- }
498
- var ctx = buildInvocationContext(stateRef, derivedStateRef, propsRef, args);
499
- var newState = mergeState(stateRef, action(ctx));
500
- setState(newState, null, actionName, 'effects', false, ctx, false);
501
- };
502
- }
503
- /** @internal */
504
- function executeSyncActionImpl(actionName, action, stateRef, derivedStateRef, propsRef, actionsRef, timeoutMap, options, setState, clearError, args) {
505
- var _a;
506
- var ctx = buildEffectsInvocationContext(stateRef, derivedStateRef, propsRef, args, undefined);
507
- var actionDropped = false;
508
- if (action.effects != null) {
509
- var newState = mergeState(stateRef, action.effects(ctx));
510
- if (newState === null) {
511
- actionDropped = true;
512
- }
513
- else {
514
- setState(newState, undefined, actionName, 'effects', false, ctx, false);
515
- }
516
- }
517
- if (!actionDropped) {
518
- if (action.debounceSideEffectsTimeout > 0) {
519
- var timeout = timeoutMap.current[actionName];
520
- if (timeout) {
521
- clearTimeout(timeout);
522
- }
523
- timeoutMap.current[actionName] = setTimeout(function () {
524
- var _a;
525
- (_a = action.sideEffects) === null || _a === void 0 ? void 0 : _a.call(action, addSideEffectsContext(ctx, stateRef, derivedStateRef, actionsRef, options.notifyWarning, clearError));
526
- delete timeoutMap.current[actionName];
527
- }, action.debounceSideEffectsTimeout);
528
- }
529
- else {
530
- (_a = action.sideEffects) === null || _a === void 0 ? void 0 : _a.call(action, addSideEffectsContext(ctx, stateRef, derivedStateRef, actionsRef, options.notifyWarning, clearError));
531
- }
532
- }
533
- }
534
- /** @internal */
535
- function decorateSyncAction(actionName, action, stateRef, derivedStateRef, propsRef, actionsRef, initializedRef, timeoutMap, options, setState, clearError) {
536
- return function () {
537
- var args = [];
538
- for (var _i = 0; _i < arguments.length; _i++) {
539
- args[_i] = arguments[_i];
540
- }
541
- // store was destroyed
542
- if (!initializedRef.current) {
543
- notInitWarning(actionName);
544
- return;
545
- }
546
- if (action.debounceTimeout) {
547
- var timeout = timeoutMap.current[actionName];
548
- if (timeout) {
549
- clearTimeout(timeout);
550
- }
551
- timeoutMap.current[actionName] = setTimeout(function () {
552
- delete timeoutMap.current[actionName];
553
- executeSyncActionImpl(actionName, action, stateRef, derivedStateRef, propsRef, actionsRef, timeoutMap, options, setState, clearError, args);
554
- }, action.debounceTimeout);
555
- }
556
- else {
557
- executeSyncActionImpl(actionName, action, stateRef, derivedStateRef, propsRef, actionsRef, timeoutMap, options, setState, clearError, args);
558
- }
559
- };
560
- }
561
- function processPromiseSuccess(context, promiseId, promiseResult, args) {
562
- var action = context.action, stateRef = context.stateRef, derivedStateRef = context.derivedStateRef, propsRef = context.propsRef, promisesRef = context.promisesRef, actionsRef = context.actionsRef, loadingMapRef = context.loadingParallelMapRef, conflictActionsRef = context.conflictActionsRef, actionName = context.actionName, options = context.options, setState = context.setState, clearError = context.clearError;
563
- // store was destroyed
564
- if (!context.initializedRef.current) {
565
- return void 0;
566
- }
567
- var newState = null;
568
- var ctx = buildEffectsInvocationContext(stateRef, derivedStateRef, propsRef, args, promiseResult, promiseId);
569
- if (action.effects) {
570
- try {
571
- newState = mergeState(stateRef, action.effects(ctx));
572
- }
573
- catch (e) {
574
- return Promise.reject(new EffectError(e));
575
- }
576
- }
577
- setState(newState, buildLoadingMap(loadingMapRef.current, actionName, promiseId, false), actionName, 'effects', true, ctx, false);
578
- var notifySuccess = options.notifySuccess || globalConfig.notifySuccess;
579
- if (notifySuccess) {
580
- var msg = void 0;
581
- if (action.getSuccessMessage) {
582
- msg = action.getSuccessMessage(ctx);
583
- }
584
- if (msg) {
585
- notifySuccess(msg);
586
- }
587
- }
588
- delete promisesRef.current[actionName][promiseId];
589
- if (action.sideEffects) {
590
- action.sideEffects(addSideEffectsContext(ctx, stateRef, derivedStateRef, actionsRef, globalConfig.notifyWarning, clearError));
591
- }
592
- processNextConflictAction(actionName, actionsRef.current, conflictActionsRef.current);
593
- return promiseResult;
594
- }
595
- function processPromiseFailed(context, promiseId, err, args) {
596
- var action = context.action, stateRef = context.stateRef, derivedStateRef = context.derivedStateRef, propsRef = context.propsRef, actionsRef = context.actionsRef, loadingMapRef = context.loadingParallelMapRef, errorMapRef = context.errorMapRef, promisesRef = context.promisesRef, conflictActionsRef = context.conflictActionsRef, actionName = context.actionName, options = context.options, clearError = context.clearError, setState = context.setState;
597
- // store was killed;
598
- if (!context.initializedRef.current) {
599
- return void 0;
600
- }
601
- var newState = null;
602
- var error = err;
603
- var ctx = buildErrorEffectsInvocationContext(stateRef, derivedStateRef, propsRef, args, error, promiseId);
604
- if (action.errorEffects) {
605
- try {
606
- newState = mergeState(stateRef, action.errorEffects(ctx));
607
- }
608
- catch (e) {
609
- error = new EffectError(e, err);
610
- }
611
- }
612
- // do not trigger a setState by itself because loading state will trigger a set anyway...
613
- errorMapRef.current = updateErrorMap(errorMapRef.current, actionName, promiseId, error);
614
- setState(newState, buildLoadingMap(loadingMapRef.current, actionName, promiseId, false), actionName, 'errorEffects', true, ctx, false);
615
- var errorHandled = false;
616
- if (newState != null || action.errorSideEffects || action.isErrorManaged || options.isErrorManaged) {
617
- errorHandled = true;
618
- }
619
- var notifyError = options.notifyError || globalConfig.notifyError;
620
- if (notifyError) {
621
- var msg = void 0;
622
- if (action.getErrorMessage) {
623
- msg = action.getErrorMessage(ctx);
624
- }
625
- // do not trigger a default error message if the error is already managed by error effects
626
- if (msg === undefined && !errorHandled && globalConfig.getErrorMessage) {
627
- msg = globalConfig.getErrorMessage(error);
628
- }
629
- if (msg) {
630
- errorHandled = true;
631
- notifyError(msg);
632
- }
633
- }
634
- globalConfig.asyncErrorHandler(error, errorHandled || action.rejectPromiseOnError, stateRef.current, propsRef.current, actionName, args);
635
- delete promisesRef.current[actionName][promiseId];
636
- if (action.errorSideEffects) {
637
- action.errorSideEffects(addSideEffectsContext(ctx, stateRef, derivedStateRef, actionsRef, globalConfig.notifyWarning, clearError));
638
- }
639
- processNextConflictAction(actionName, actionsRef.current, conflictActionsRef.current);
640
- var result = !errorHandled || action.rejectPromiseOnError ? Promise.reject(error) : Promise.resolve();
641
- return result;
642
- }
643
- /** @internal */
644
- function decorateAsyncAction(context) {
645
- var action = context.action, stateRef = context.stateRef, derivedStateRef = context.derivedStateRef, propsRef = context.propsRef, actionsRef = context.actionsRef, promisesRef = context.promisesRef, loadingMapRef = context.loadingParallelMapRef, errorMapRef = context.errorMapRef, initializedRef = context.initializedRef, conflictActionsRef = context.conflictActionsRef, actionName = context.actionName, setState = context.setState;
646
- return function () {
647
- var _a;
648
- var _b, _c;
649
- var args = [];
650
- for (var _i = 0; _i < arguments.length; _i++) {
651
- args[_i] = arguments[_i];
652
- }
653
- if (!initializedRef.current) {
654
- notInitWarning(actionName);
655
- return null;
656
- }
657
- var promises = promisesRef.current;
658
- var _d = action.conflictPolicy, conflictPolicy = _d === void 0 ? ConflictPolicy.KEEP_ALL : _d;
659
- var isParallel = conflictPolicy === ConflictPolicy.PARALLEL;
660
- var promiseId = null;
661
- if (isParallel) {
662
- if (!action.getPromiseId) {
663
- throw new Error('If conflict policy is set to ConflictPolicy.PARALLEL, getPromiseId must be set and return a string.');
664
- }
665
- promiseId = action.getPromiseId.apply(action, args);
666
- }
667
- else {
668
- promiseId = DEFAULT_PROMISE_ID;
669
- }
670
- if (!isParallel && ((_b = promises[actionName]) === null || _b === void 0 ? void 0 : _b[promiseId])) {
671
- return handleConflictingAction(promises, conflictActionsRef.current, actionName, conflictPolicy, args);
672
- }
673
- var newState = null;
674
- var hasChanged = false;
675
- var ctx = buildInvocationContext(stateRef, derivedStateRef, propsRef, args, promiseId);
676
- if (action.preEffects) {
677
- try {
678
- newState = mergeState(stateRef, action.preEffects(ctx));
679
- }
680
- catch (error) {
681
- globalConfig.asyncErrorHandler(new EffectError(error), false, stateRef.current, propsRef.current, actionName, args);
682
- return Promise.reject(new EffectError(error));
683
- }
684
- // apply internal state change for calls to other actions in the getPromise
685
- if (newState) {
686
- hasChanged = true;
687
- stateRef.current = newState;
688
- }
689
- }
690
- var abortable = action.abortable, retryCount = action.retryCount, retryDelaySeed = action.retryDelaySeed, isTriggerRetryError = action.isTriggerRetryError;
691
- var abortController = abortable && window.AbortController ? new AbortController() : null;
692
- var promiseProvider = retryPromiseDecorator(action.getPromise, retryCount ? 1 + retryCount : 1, retryDelaySeed, isTriggerRetryError || globalConfig.retryOnErrorFunction);
693
- var p = (_c = promiseProvider(buildPromiseActionContext(stateRef, derivedStateRef, propsRef, args, actionsRef, abortController === null || abortController === void 0 ? void 0 : abortController.signal))) === null || _c === void 0 ? void 0 : _c.then(function (promiseResult) { return processPromiseSuccess(context, promiseId, promiseResult, args); }).catch(function (error) { return processPromiseFailed(context, promiseId, error, args); });
694
- if (p != null) {
695
- promises[actionName] = __assign(__assign({}, (promises[actionName] || {})), (_a = {}, _a[promiseId || DEFAULT_PROMISE_ID] = {
696
- abortController: abortController,
697
- promise: p,
698
- refArgs: conflictPolicy === ConflictPolicy.REUSE && args.length > 0 ? __spreadArray([], args, true) : [],
699
- }, _a));
700
- }
701
- errorMapRef.current = updateErrorMap(errorMapRef.current, actionName, promiseId, null);
702
- setState(p == null && !hasChanged ? undefined : stateRef.current, p == null ? undefined : buildLoadingMap(loadingMapRef.current, actionName, promiseId, true), actionName, 'preEffects', true, ctx, false);
703
- return p;
704
- };
705
- }
706
- /** @internal */
707
- function isLoadingImpl(loadingMap) {
708
- var props = [];
709
- for (var _i = 1; _i < arguments.length; _i++) {
710
- props[_i - 1] = arguments[_i];
711
- }
712
- return props.some(function (propIn) {
713
- var _a;
714
- var actionName = null;
715
- var promiseId = DEFAULT_PROMISE_ID;
716
- if (Array.isArray(propIn)) {
717
- actionName = propIn[0], _a = propIn[1], promiseId = _a === void 0 ? DEFAULT_PROMISE_ID : _a;
718
- }
719
- else {
720
- actionName = propIn;
721
- }
722
- var res = loadingMap[actionName];
723
- if (res == null) {
724
- return false;
725
- }
726
- if (res[promiseId] != null) {
727
- return res[promiseId];
728
- }
729
- return false;
730
- });
731
- }
732
- // ------------------------------
733
- //
734
- // Conflict management
735
- //
736
- // ------------------------------
737
- var DEFAULT_PROMISE_ID = '__def__';
738
- /** @internal */
739
- function areSameArgs(args1, args2) {
740
- if (args1.length !== args2.length) {
741
- return false;
742
- }
743
- return args1.findIndex(function (value, index) { return args2[index] !== value; }) === -1;
744
- }
745
- /**
746
- * Handles a conflicting action depending on the action conflict policy.
747
- */
748
- /** @internal */
749
- function handleConflictingAction(promises, conflictActions, actionName, conflictPolicy, args) {
750
- var policy = conflictPolicy;
751
- if (policy === ConflictPolicy.REUSE) {
752
- // use default because action cannot be parallel
753
- if (areSameArgs(promises[actionName][DEFAULT_PROMISE_ID].refArgs, args)) {
754
- return promises[actionName][DEFAULT_PROMISE_ID].promise;
755
- } // else
756
- policy = ConflictPolicy.KEEP_ALL;
757
- }
758
- return new Promise(function (resolve, reject) {
759
- var futureAction = {
760
- resolve: resolve,
761
- reject: reject,
762
- args: clone(args),
763
- timestamp: Date.now(),
764
- };
765
- switch (policy) {
766
- case ConflictPolicy.IGNORE:
767
- resolve(void 0);
768
- break;
769
- case ConflictPolicy.REJECT:
770
- reject(new Error("An asynchronous action ".concat(actionName, " is already ongoing.")));
771
- break;
772
- case ConflictPolicy.KEEP_LAST: {
773
- conflictActions[actionName] = [futureAction];
774
- break;
775
- }
776
- case ConflictPolicy.KEEP_ALL: {
777
- var stack = conflictActions[actionName];
778
- if (!stack) {
779
- conflictActions[actionName] = stack = [];
780
- }
781
- stack.push(futureAction);
782
- break;
783
- }
784
- case ConflictPolicy.PARALLEL:
785
- case ConflictPolicy.REUSE:
786
- // no-op
787
- break;
788
- }
789
- });
790
- }
791
- /**
792
- * Processes next conflicting action (see ConflictPolicy) in the queue.
793
- */
794
- function processNextConflictAction(actionName, actions, conflictActions) {
795
- var futureActions = conflictActions[actionName];
796
- if (futureActions && futureActions.length > 0) {
797
- var futureAction_1 = conflictActions[actionName].shift();
798
- if (futureAction_1) {
799
- var p = actions[actionName].apply(actions, futureAction_1.args);
800
- if (p == null) {
801
- processNextConflictAction(actionName, actions, conflictActions);
802
- }
803
- else {
804
- p.then(function (res) {
805
- if (res === null) {
806
- // promise was aborted
807
- processNextConflictAction(actionName, actions, conflictActions);
808
- }
809
- futureAction_1.resolve(res);
810
- }).catch(function (e) { return futureAction_1.reject(e); });
811
- } // else aborted
812
- }
813
- }
814
- }
815
- /** @internal */
816
- function computeDerivedValues(s, p, derivedStateRef, options) {
817
- if ((options === null || options === void 0 ? void 0 : options.derivedState) == null) {
818
- return false;
819
- }
820
- var hasChanged = false;
821
- var compare = globalConfig.comparator;
822
- var depsMap = derivedStateRef.current.deps;
823
- var ctx = buildInvocationContextBase(s, null, p);
824
- var keys = Object.keys(options.derivedState);
825
- derivedStateRef.current.state = keys.reduce(function (acc, propName) {
826
- var compute = false;
827
- var previousDeps = depsMap[propName];
828
- var deps = options.derivedState[propName].getDeps(ctx);
829
- if (previousDeps == null) {
830
- compute = true;
831
- }
832
- else {
833
- compute =
834
- deps.find(function (dep, index) { return (previousDeps.length < index ? true : !compare(previousDeps[index], dep)); }) != null;
835
- }
836
- hasChanged = hasChanged || compute;
837
- // update cache of previous deps
838
- depsMap[propName] = deps;
839
- if (compute) {
840
- acc[propName] = options.derivedState[propName].get(ctx);
841
- }
842
- else {
843
- acc[propName] = derivedStateRef.current.state[propName];
844
- }
845
- return acc;
846
- }, {});
847
- return hasChanged;
848
- }
849
- // --------------------------------------
850
- //
851
- // Props change
852
- //
853
- // --------------------------------------
854
- /** @internal */
855
- function onPropChange(stateRef, derivedStateRef, propsRef, oldProps, actionsRef, options, getInitialState, setState, isInit, isDeferred) {
856
- var hasDerivedState = (options === null || options === void 0 ? void 0 : options.derivedState) != null;
857
- if (options.onPropsChange == null) {
858
- if ((options === null || options === void 0 ? void 0 : options.derivedState) != null) {
859
- // derived values must be updated from props
860
- setState(undefined, undefined, 'onPropsChange', 'effects', false, null, true);
861
- }
862
- return;
863
- }
864
- var onPropsChanges;
865
- if (Array.isArray(options.onPropsChange)) {
866
- onPropsChanges = options.onPropsChange;
867
- }
868
- else {
869
- onPropsChanges = [options.onPropsChange];
870
- }
871
- var stateChanged = false;
872
- var newStateRef = createRef(stateRef.current);
873
- var sideEffects = [];
874
- var compare = globalConfig.comparator;
875
- onPropsChanges.forEach(function (propsChange, index) {
876
- var _a;
877
- var getDeps = propsChange.getDeps;
878
- if (getDeps) {
879
- var propChanged_1 = false;
880
- var indices_1 = [];
881
- if (isInit) {
882
- if ((!isDeferred && propsChange.onMount) || (isDeferred && propsChange.onMountDeferred)) {
883
- propChanged_1 = true;
884
- }
885
- else {
886
- // skip this onPropsChange
887
- return;
888
- }
889
- }
890
- else {
891
- var oldValues = getDeps(oldProps);
892
- var newValues_1 = getDeps(propsRef.current);
893
- if (oldValues.length !== newValues_1.length) {
894
- console.warn('options.onPropsChange.getDeps returned array must be stable (same length)');
895
- propChanged_1 = true;
896
- }
897
- else {
898
- oldValues.forEach(function (v, i) {
899
- if (!compare(v, newValues_1[i])) {
900
- propChanged_1 = true;
901
- indices_1.push(i);
902
- }
903
- });
904
- }
905
- }
906
- if (propChanged_1) {
907
- var ctx = buildOnPropChangeEffects(newStateRef, derivedStateRef, propsRef, indices_1, index, isInit, getInitialState);
908
- var newState = mergeState(stateRef, (_a = propsChange.effects) === null || _a === void 0 ? void 0 : _a.call(propsChange, ctx));
909
- if (newState != null) {
910
- stateChanged = true;
911
- newStateRef.current = newState;
912
- setState(newStateRef.current, undefined, 'onPropsChange', 'effects', false, ctx, true, isInit);
913
- }
914
- if (propsChange.sideEffects) {
915
- sideEffects.push({ index: index, indices: indices_1, ctx: ctx });
916
- }
917
- }
918
- }
919
- });
920
- if (!stateChanged && hasDerivedState) {
921
- // derived values must be updated from props
922
- setState(undefined, undefined, 'onPropsChange', 'effects', false, null, true);
923
- }
924
- if (sideEffects.length > 0) {
925
- sideEffects.forEach(function (sideEffectInfo) {
926
- var onPropChange = onPropsChanges[sideEffectInfo.index];
927
- onPropChange.sideEffects(__assign(__assign({}, addStateToContext(addContextActions(sideEffectInfo.ctx, actionsRef), newStateRef)), { indices: sideEffectInfo.indices }));
928
- });
929
- }
930
- }
931
- // ------------------
932
- //
933
- // Middlewares
934
- //
935
- // ------------------
936
- /** @internal */
937
- function runMiddlewares(middlewares, oldState, newState, loading, actionName, actionType, isAsync, actionCtx) {
938
- // onPropChange to compute derived state but not state change
939
- if (actionName === 'onPropsChange' && newState === undefined) {
940
- return {
941
- newState: null,
942
- newLoading: false,
943
- };
944
- }
945
- if (middlewares && middlewares.length > 0) {
946
- var res = middlewares.reduce(function (acc, middleware) {
947
- var res = middleware.effects({
948
- isAsync: isAsync,
949
- name: actionName,
950
- type: actionType,
951
- context: actionCtx,
952
- }, acc.oldState, acc.newState, loading);
953
- return {
954
- newState: (res === null || res === void 0 ? void 0 : res.state) || acc.newState,
955
- oldState: (res === null || res === void 0 ? void 0 : res.state) ? acc.newState : acc.oldState,
956
- loading: (res === null || res === void 0 ? void 0 : res.loading) == null ? acc.loading : res.loading,
957
- };
958
- }, {
959
- oldState: oldState,
960
- newState: newState,
961
- loading: loading,
962
- });
963
- return {
964
- newLoading: res.loading,
965
- newState: res.newState,
966
- };
967
- }
968
- return {
969
- newState: newState,
970
- newLoading: loading,
971
- };
972
- }
973
-
974
- export { DEFAULT_PROMISE_ID, EffectError, ParallelActionError, addContextActions, addStateToContext, areSameArgs, buildErrorMap, buildInvocationContextBase, buildLoadingMap, buildOnMountInvocationContext, buildOnPropChangeEffects, buildOnUnMountInvocationContext, computeAsyncActionInput, computeDerivedValues, createRef, decorateAsyncAction, decorateSimpleSyncAction, decorateSyncAction, globalConfig, isAsyncAction, isAsyncGetPromiseAction, isAsyncGetPromiseGetAction, isLoadingImpl, isSimpleSyncAction, isSyncAction, onPropChange, retryPromiseDecorator, runMiddlewares, setGlobalConfig, updateErrorMap };
1
+ 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)};function r(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)}var 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))}var c,u=function(){function e(e){this.keys=e,this.adj={}}return e.prototype.isCyclicUtil=function(e,r,t){var n;if(t.has(e))return!0;if(r.has(e))return!1;r.add(e),t.add(e);for(var o=0,i=null!==(n=this.adj[e])&&void 0!==n?n:[];o<i.length;o++){var c=i[o];if(this.isCyclicUtil(c,r,t))return!0}return t.delete(e),!1},e.prototype.setEdges=function(e,r){this.adj[e]=r},e.prototype.isCyclic=function(){for(var e=new Set,r=new Set,t=0,n=this.keys;t<n.length;t++){var o=n[t];if(this.isCyclicUtil(o,e,r))return!0}return!1},e}();!function(e){e.REJECT="reject",e.IGNORE="ignore",e.KEEP_LAST="keepLast",e.KEEP_ALL="keepAll",e.PARALLEL="parallel",e.REUSE="reuse"}(c||(c={}));var a=function(e){function t(r,n){var o=e.call(this,r.message)||this;return o.source=r,o.initialError=n,Object.setPrototypeOf(o,t.prototype),o}return r(t,e),t}(Error),l={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 f(e){Object.keys(e).forEach((function(r){null!=e[r]&&(l[r]=e[r])}))}function s(e){try{return l.clone(e)}catch(e){throw new Error("StateDecorator: Cannot clone object. Set setCloneFunction on global global with another implementation like lodash/cloneDeep.")}}function d(e){return!(e instanceof Function)&&(e.hasOwnProperty("getPromise")||e.hasOwnProperty("getGetPromise"))}function v(e){return"function"==typeof e}function p(e){return"function"!=typeof e&&!e.hasOwnProperty("getPromise")&&!e.hasOwnProperty("getGetPromise")}function h(e){return"function"!=typeof e&&e.hasOwnProperty("getPromise")&&!e.hasOwnProperty("getGetPromise")}function g(e){return"function"!=typeof e&&!e.hasOwnProperty("getPromise")&&e.hasOwnProperty("getGetPromise")}function y(e){return g(e)?t(t({},e),{getPromise:e.getGetPromise,retryCount:3,conflictPolicy:c.REUSE}):e}function E(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 P(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 S=function(e){function t(r){var n=e.call(this,"Error")||this;return n.promiseIds=r,Object.setPrototypeOf(n,t.prototype),n}return r(t,e),t}(Error);function m(e){return Object.keys(e).reduce((function(r,t){var n=e[t];if(null==n[z]);else if(n[z])r[t]=n[z];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 S(o.map))}return r}),{})}function w(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,l){return n(this,void 0,void 0,(function(){return o(this,(function(n){return null===l?[2,null]:[2,l.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 b(e){return void 0===e&&(e=null),{current:e}}function R(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 O(e,r,t,n){return _(R(e,r,t),n)}function j(e,r,n,o){return t(t({},R(e,r,n)),{abortedActions:o})}function A(e,r,t,n,o,i,c){var u=R(e,r,t);return u.indices=n,u.index=o,u.isInit=i,u.getInitialState=c,u}function L(e,r,t,n,o){var i=R(e,r,t);return i.args=n,o&&(i.promiseId=o),i}function C(e,r,t,n,o,i){var c=L(e,r,t,n,i);return c.result=o,c.res=o,c}function k(e,r,t,n,o,i,c){var u=_(L(e,r,t,n,c),o);return u.abortSignal=i,u}function T(e,r){var t=e;return t.state=r.current,t.s=r.current,t}function _(e,r){var t=e;return t.actions=r.current,t.a=r.current,t}function M(e,r,t,n,o,i){var c,u=_(e,n);T(e,r);var a=null===(c=null==t?void 0:t.current)||void 0===c?void 0:c.state;return u.derived=a,u.ds=a,u.notifyWarning=o,u.clearError=i,u}function x(e,r,n){return(null==n?void 0:n.fullStateEffects)?r:null==r?null:t(t({},e.current),r)}function D(e,r,t,n,o,i,c,u){return function(){for(var a=[],l=0;l<arguments.length;l++)a[l]=arguments[l];if(i.current){var f=L(t,n,o,a),s=x(t,r(f),c);u(s,null,e,"effects",!1,f,!1)}}}function I(e,r,t,n,o,i,c,u,a,l,f){var s,d=C(t,n,o,f,void 0),v=!1;if(null!=r.effects){var p=x(t,r.effects(d),u);null===p?v=!0:a(p,void 0,e,"effects",!1,d,!1)}if(!v)if(r.debounceSideEffectsTimeout>0){var h=c.current[e];h&&clearTimeout(h),c.current[e]=setTimeout((function(){var o;null===(o=r.sideEffects)||void 0===o||o.call(r,M(d,t,n,i,u.notifyWarning,l)),delete c.current[e]}),r.debounceSideEffectsTimeout)}else null===(s=r.sideEffects)||void 0===s||s.call(r,M(d,t,n,i,u.notifyWarning,l))}function G(e,r,t,n,o,i,c,u,a,l,f){return function(){for(var s=[],d=0;d<arguments.length;d++)s[d]=arguments[d];if(c.current)if(r.debounceTimeout){var v=u.current[e];v&&clearTimeout(v),u.current[e]=setTimeout((function(){delete u.current[e],I(e,r,t,n,o,i,u,a,l,f,s)}),r.debounceTimeout)}else I(e,r,t,n,o,i,u,a,l,f,s)}}function U(e,r,t,n){var o=e.action,i=e.stateRef,c=e.derivedStateRef,u=e.propsRef,f=e.promisesRef,s=e.actionsRef,d=e.loadingParallelMapRef,v=e.conflictActionsRef,p=e.actionName,h=e.options,g=e.setState,y=e.clearError;if(e.initializedRef.current){var P=null,S=C(i,c,u,n,t,r);if(o.effects)try{P=x(i,o.effects(S),h)}catch(e){return Promise.reject(new a(e))}g(P,E(d.current,p,r,!1),p,"effects",!0,S,!1);var m=h.notifySuccess||l.notifySuccess;if(m){var w=void 0;o.getSuccessMessage&&(w=o.getSuccessMessage(S)),w&&m(w)}return delete f.current[p][r],o.sideEffects&&o.sideEffects(M(S,i,c,s,l.notifyWarning,y)),H(p,s.current,v.current),t}}function N(e,r,t,n){var o=e.action,i=e.stateRef,c=e.derivedStateRef,u=e.propsRef,f=e.actionsRef,s=e.loadingParallelMapRef,d=e.errorMapRef,v=e.promisesRef,p=e.conflictActionsRef,h=e.actionName,g=e.options,y=e.clearError,S=e.setState;if(e.initializedRef.current){var m=null,w=t,b=function(e,r,t,n,o,i){var c=L(e,r,t,n,i);return c.error=o,c.err=o,c}(i,c,u,n,w,r);if(o.errorEffects)try{m=x(i,o.errorEffects(b),g)}catch(e){w=new a(e,t)}d.current=P(d.current,h,r,w),S(m,E(s.current,h,r,!1),h,"errorEffects",!0,b,!1);var R=!1;(null!=m||o.errorSideEffects||o.isErrorManaged||g.isErrorManaged)&&(R=!0);var O=g.notifyError||l.notifyError;if(O){var j=void 0;o.getErrorMessage&&(j=o.getErrorMessage(b)),void 0===j&&!R&&l.getErrorMessage&&(j=l.getErrorMessage(w)),j&&(R=!0,O(j))}return l.asyncErrorHandler(w,R||o.rejectPromiseOnError,i.current,u.current,h,n),delete v.current[h][r],o.errorSideEffects&&o.errorSideEffects(M(b,i,c,f,l.notifyWarning,y)),H(h,f.current,p.current),!R||o.rejectPromiseOnError?Promise.reject(w):Promise.resolve()}}function K(e){var r=e.action,n=e.stateRef,o=e.derivedStateRef,u=e.propsRef,f=e.actionsRef,s=e.promisesRef,d=e.loadingParallelMapRef,v=e.errorMapRef,p=e.initializedRef,h=e.conflictActionsRef,g=e.actionName,y=e.setState,S=e.options;return function(){for(var m,b,R,O=[],j=0;j<arguments.length;j++)O[j]=arguments[j];if(!p.current)return null;var A=s.current,C=r.conflictPolicy,T=void 0===C?c.KEEP_ALL:C,_=T===c.PARALLEL,M=null;if(_){if(!r.getPromiseId)throw new Error("If conflict policy is set to ConflictPolicy.PARALLEL, getPromiseId must be set and return a string.");M=r.getPromiseId.apply(r,O)}else M=z;if(!_&&(null===(b=A[g])||void 0===b?void 0:b[M]))return J(A,h.current,g,T,O);var D=null,I=!1,G=L(n,o,u,O,M);if(r.preEffects){try{D=x(n,r.preEffects(G),S)}catch(e){return l.asyncErrorHandler(new a(e),!1,n.current,u.current,g,O),Promise.reject(new a(e))}D&&(I=!0,n.current=D)}var K=r.abortable,W=r.retryCount,F=r.retryDelaySeed,H=r.isTriggerRetryError,q=K&&window.AbortController?new AbortController:null,B=w(r.getPromise,W?1+W:1,F,H||l.retryOnErrorFunction),Q=null===(R=B(k(n,o,u,O,f,null==q?void 0:q.signal)))||void 0===R?void 0:R.then((function(r){return U(e,M,r,O)})).catch((function(r){return N(e,M,r,O)}));return null!=Q&&(A[g]=t(t({},A[g]||{}),((m={})[M||z]={abortController:q,promise:Q,refArgs:T===c.REUSE&&O.length>0?i([],O,!0):[]},m))),v.current=P(v.current,g,M,null),y(null!=Q||I?n.current:void 0,null==Q?void 0:E(d.current,g,M,!0),g,"preEffects",!0,G,!1),Q}}function W(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=z;Array.isArray(r)?(n=r[0],o=void 0===(t=r[1])?z:t):n=r;var i=e[n];return null!=i&&(null!=i[o]&&i[o])}))}var z="__def__";function F(e,r){return e.length===r.length&&-1===e.findIndex((function(e,t){return r[t]!==e}))}function J(e,r,t,n,o){var i=n;if(i===c.REUSE){if(F(e[t][z].refArgs,o))return e[t][z].promise;i=c.KEEP_ALL}return new Promise((function(e,n){var u={resolve:e,reject:n,args:s(o),timestamp:Date.now()};switch(i){case c.IGNORE:e(void 0);break;case c.REJECT:n(new Error("An asynchronous action ".concat(t," is already ongoing.")));break;case c.KEEP_LAST:r[t]=[u];break;case c.KEEP_ALL:var a=r[t];a||(r[t]=a=[]),a.push(u);break;case c.PARALLEL:case c.REUSE:}}))}function H(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?H(e,r,t):i.then((function(n){null===n&&H(e,r,t),o.resolve(n)})).catch((function(e){return o.reject(e)}))}}}function q(e,r,n,o){if(null==(null==o?void 0:o.derivedState))return!1;var i=!1,c=l.comparator,u=n.current.deps,a=R(e,null,r),f=Object.keys(o.derivedState);return n.current.state=f.reduce((function(e,r){var l,f,s=!1,d=o.derivedState[r],v=u[r],p=null!==(f=null===(l=d.getDeps)||void 0===l?void 0:l.call(d,a))&&void 0!==f?f:[];return d.derivedDeps&&d.derivedDeps.forEach((function(r){var t,o,i;return p.push(null!==(t=e[r])&&void 0!==t?t:null===(i=null===(o=n.current)||void 0===o?void 0:o.state)||void 0===i?void 0:i[r])})),s=null==v||null!=p.find((function(e,r){return v.length<r||!c(v[r],e)})),i=i||s,u[r]=p,e[r]=s?o.derivedState[r].get(function(e,r){return t(t({},e),{ds:r,derived:r})}(a,e)):n.current.state[r],e}),{}),i}function B(e){var r,t=Object.keys(e.derivedState),n=new u(t);if(t.forEach((function(r){n.setEdges(r,e.derivedState[r].derivedDeps)})),n.isCyclic())throw new Error("There are cycles in the derived state dependencies");for(var o=!1,i={},c=0,a=t;c<a.length;c++){var l=a[c],f=null!==(r=e.derivedState[l].derivedDeps)&&void 0!==r?r:[];o=o||f.length>0,i[l]=f.concat()}if(o){t.sort((function(e,r){return i[e].length-i[r].length}));for(var s=[],d=new Set,v=t.length;d.size!==v;){var p=t.pop();if(!d.has(p))i[p]=i[p].filter((function(e){return!d.has(e)})),0===i[p].length?(s.push(p),d.add(p)):t.splice(0,0,p)}for(var h={},g=0,y=s;g<y.length;g++){h[p=y[g]]=e.derivedState[p]}e.derivedState=h}}function Q(e,r,n,o,i,c,u,a,f,s){var d=null!=(null==c?void 0:c.derivedState);if(null!=c.onPropsChange){var v;v=Array.isArray(c.onPropsChange)?c.onPropsChange:[c.onPropsChange];var p=!1,h=b(e.current),g=[],y=l.comparator;v.forEach((function(t,i){var l,d=t.getDeps;if(d){var v=!1,E=[];if(f){if(!(!s&&t.onMount||s&&t.onMountDeferred))return;v=!0}else{var P=d(o),S=d(n.current);P.length!==S.length?(console.warn("options.onPropsChange.getDeps returned array must be stable (same length)"),v=!0):P.forEach((function(e,r){y(e,S[r])||(v=!0,E.push(r))}))}if(v){var m=A(h,r,n,E,i,f,u),w=x(e,null===(l=t.effects)||void 0===l?void 0:l.call(t,m),c);null!=w&&(p=!0,h.current=w,a(h.current,void 0,"onPropsChange","effects",!1,m,!0,f)),t.sideEffects&&g.push({index:i,indices:E,ctx:m})}}})),!p&&d&&a(void 0,void 0,"onPropsChange","effects",!1,null,!0),g.length>0&&g.forEach((function(e){v[e.index].sideEffects(t(t({},T(_(e.ctx,i),h)),{indices:e.indices}))}))}else null!=(null==c?void 0:c.derivedState)&&a(void 0,void 0,"onPropsChange","effects",!1,null,!0)}function V(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}}export{z as DEFAULT_PROMISE_ID,a as EffectError,S as ParallelActionError,_ as addContextActions,T as addStateToContext,F as areSameArgs,m as buildErrorMap,R as buildInvocationContextBase,E as buildLoadingMap,O as buildOnMountInvocationContext,A as buildOnPropChangeEffects,j as buildOnUnMountInvocationContext,y as computeAsyncActionInput,q as computeDerivedValues,b as createRef,K as decorateAsyncAction,D as decorateSimpleSyncAction,G as decorateSyncAction,B as fixDerivedDeps,l as globalConfig,d as isAsyncAction,h as isAsyncGetPromiseAction,g as isAsyncGetPromiseGetAction,W as isLoadingImpl,v as isSimpleSyncAction,p as isSyncAction,Q as onPropChange,w as retryPromiseDecorator,V as runMiddlewares,f as setGlobalConfig,P as updateErrorMap};
975
2
  //# sourceMappingURL=impl.js.map