source: node_modules/@reduxjs/toolkit/dist/cjs/redux-toolkit.development.cjs@ a762898

Last change on this file since a762898 was a762898, checked in by istevanoska <ilinastevanoska@…>, 5 months ago

Added visualizations

  • Property mode set to 100644
File size: 79.8 KB
RevLine 
[a762898]1"use strict";
2var __defProp = Object.defineProperty;
3var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4var __getOwnPropNames = Object.getOwnPropertyNames;
5var __hasOwnProp = Object.prototype.hasOwnProperty;
6var __export = (target, all) => {
7 for (var name in all)
8 __defProp(target, name, { get: all[name], enumerable: true });
9};
10var __copyProps = (to, from, except, desc) => {
11 if (from && typeof from === "object" || typeof from === "function") {
12 for (let key of __getOwnPropNames(from))
13 if (!__hasOwnProp.call(to, key) && key !== except)
14 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15 }
16 return to;
17};
18var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
19var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
21// src/index.ts
22var src_exports = {};
23__export(src_exports, {
24 ReducerType: () => ReducerType,
25 SHOULD_AUTOBATCH: () => SHOULD_AUTOBATCH,
26 TaskAbortError: () => TaskAbortError,
27 Tuple: () => Tuple,
28 addListener: () => addListener,
29 asyncThunkCreator: () => asyncThunkCreator,
30 autoBatchEnhancer: () => autoBatchEnhancer,
31 buildCreateSlice: () => buildCreateSlice,
32 clearAllListeners: () => clearAllListeners,
33 combineSlices: () => combineSlices,
34 configureStore: () => configureStore,
35 createAction: () => createAction,
36 createActionCreatorInvariantMiddleware: () => createActionCreatorInvariantMiddleware,
37 createAsyncThunk: () => createAsyncThunk,
38 createDraftSafeSelector: () => createDraftSafeSelector,
39 createDraftSafeSelectorCreator: () => createDraftSafeSelectorCreator,
40 createDynamicMiddleware: () => createDynamicMiddleware,
41 createEntityAdapter: () => createEntityAdapter,
42 createImmutableStateInvariantMiddleware: () => createImmutableStateInvariantMiddleware,
43 createListenerMiddleware: () => createListenerMiddleware,
44 createNextState: () => import_immer.produce,
45 createReducer: () => createReducer,
46 createSelector: () => import_reselect2.createSelector,
47 createSelectorCreator: () => import_reselect.createSelectorCreator,
48 createSerializableStateInvariantMiddleware: () => createSerializableStateInvariantMiddleware,
49 createSlice: () => createSlice,
50 current: () => import_immer.current,
51 findNonSerializableValue: () => findNonSerializableValue,
52 formatProdErrorMessage: () => formatProdErrorMessage,
53 freeze: () => import_immer2.freeze,
54 isActionCreator: () => isActionCreator,
55 isAllOf: () => isAllOf,
56 isAnyOf: () => isAnyOf,
57 isAsyncThunkAction: () => isAsyncThunkAction,
58 isDraft: () => import_immer.isDraft,
59 isFluxStandardAction: () => isFSA,
60 isFulfilled: () => isFulfilled,
61 isImmutableDefault: () => isImmutableDefault,
62 isPending: () => isPending,
63 isPlain: () => isPlain,
64 isRejected: () => isRejected,
65 isRejectedWithValue: () => isRejectedWithValue,
66 lruMemoize: () => import_reselect2.lruMemoize,
67 miniSerializeError: () => miniSerializeError,
68 nanoid: () => nanoid,
69 original: () => import_immer2.original,
70 prepareAutoBatched: () => prepareAutoBatched,
71 removeListener: () => removeListener,
72 unwrapResult: () => unwrapResult,
73 weakMapMemoize: () => import_reselect.weakMapMemoize
74});
75module.exports = __toCommonJS(src_exports);
76__reExport(src_exports, require("redux"), module.exports);
77var import_immer2 = require("immer");
78
79// src/immerImports.ts
80var import_immer = require("immer");
81
82// src/index.ts
83var import_reselect2 = require("reselect");
84
85// src/reselectImports.ts
86var import_reselect = require("reselect");
87
88// src/createDraftSafeSelector.ts
89var createDraftSafeSelectorCreator = (...args) => {
90 const createSelector2 = (0, import_reselect.createSelectorCreator)(...args);
91 const createDraftSafeSelector2 = Object.assign((...args2) => {
92 const selector = createSelector2(...args2);
93 const wrappedSelector = (value, ...rest) => selector((0, import_immer.isDraft)(value) ? (0, import_immer.current)(value) : value, ...rest);
94 Object.assign(wrappedSelector, selector);
95 return wrappedSelector;
96 }, {
97 withTypes: () => createDraftSafeSelector2
98 });
99 return createDraftSafeSelector2;
100};
101var createDraftSafeSelector = /* @__PURE__ */ createDraftSafeSelectorCreator(import_reselect.weakMapMemoize);
102
103// src/reduxImports.ts
104var import_redux = require("redux");
105
106// src/devtoolsExtension.ts
107var composeWithDevTools = typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function() {
108 if (arguments.length === 0) return void 0;
109 if (typeof arguments[0] === "object") return import_redux.compose;
110 return import_redux.compose.apply(null, arguments);
111};
112var devToolsEnhancer = typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function() {
113 return function(noop3) {
114 return noop3;
115 };
116};
117
118// src/getDefaultMiddleware.ts
119var import_redux_thunk = require("redux-thunk");
120
121// src/tsHelpers.ts
122var hasMatchFunction = (v) => {
123 return v && typeof v.match === "function";
124};
125
126// src/createAction.ts
127function createAction(type, prepareAction) {
128 function actionCreator(...args) {
129 if (prepareAction) {
130 let prepared = prepareAction(...args);
131 if (!prepared) {
132 throw new Error(false ? _formatProdErrorMessage(0) : "prepareAction did not return an object");
133 }
134 return {
135 type,
136 payload: prepared.payload,
137 ..."meta" in prepared && {
138 meta: prepared.meta
139 },
140 ..."error" in prepared && {
141 error: prepared.error
142 }
143 };
144 }
145 return {
146 type,
147 payload: args[0]
148 };
149 }
150 actionCreator.toString = () => `${type}`;
151 actionCreator.type = type;
152 actionCreator.match = (action) => (0, import_redux.isAction)(action) && action.type === type;
153 return actionCreator;
154}
155function isActionCreator(action) {
156 return typeof action === "function" && "type" in action && // hasMatchFunction only wants Matchers but I don't see the point in rewriting it
157 hasMatchFunction(action);
158}
159function isFSA(action) {
160 return (0, import_redux.isAction)(action) && Object.keys(action).every(isValidKey);
161}
162function isValidKey(key) {
163 return ["type", "payload", "error", "meta"].indexOf(key) > -1;
164}
165
166// src/actionCreatorInvariantMiddleware.ts
167function getMessage(type) {
168 const splitType = type ? `${type}`.split("/") : [];
169 const actionName = splitType[splitType.length - 1] || "actionCreator";
170 return `Detected an action creator with type "${type || "unknown"}" being dispatched.
171Make sure you're calling the action creator before dispatching, i.e. \`dispatch(${actionName}())\` instead of \`dispatch(${actionName})\`. This is necessary even if the action has no payload.`;
172}
173function createActionCreatorInvariantMiddleware(options = {}) {
174 if (false) {
175 return () => (next) => (action) => next(action);
176 }
177 const {
178 isActionCreator: isActionCreator2 = isActionCreator
179 } = options;
180 return () => (next) => (action) => {
181 if (isActionCreator2(action)) {
182 console.warn(getMessage(action.type));
183 }
184 return next(action);
185 };
186}
187
188// src/utils.ts
189function getTimeMeasureUtils(maxDelay, fnName) {
190 let elapsed = 0;
191 return {
192 measureTime(fn) {
193 const started = Date.now();
194 try {
195 return fn();
196 } finally {
197 const finished = Date.now();
198 elapsed += finished - started;
199 }
200 },
201 warnIfExceeded() {
202 if (elapsed > maxDelay) {
203 console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms.
204If your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.
205It is disabled in production builds, so you don't need to worry about that.`);
206 }
207 }
208 };
209}
210var Tuple = class _Tuple extends Array {
211 constructor(...items) {
212 super(...items);
213 Object.setPrototypeOf(this, _Tuple.prototype);
214 }
215 static get [Symbol.species]() {
216 return _Tuple;
217 }
218 concat(...arr) {
219 return super.concat.apply(this, arr);
220 }
221 prepend(...arr) {
222 if (arr.length === 1 && Array.isArray(arr[0])) {
223 return new _Tuple(...arr[0].concat(this));
224 }
225 return new _Tuple(...arr.concat(this));
226 }
227};
228function freezeDraftable(val) {
229 return (0, import_immer.isDraftable)(val) ? (0, import_immer.produce)(val, () => {
230 }) : val;
231}
232function getOrInsertComputed(map, key, compute) {
233 if (map.has(key)) return map.get(key);
234 return map.set(key, compute(key)).get(key);
235}
236
237// src/immutableStateInvariantMiddleware.ts
238function isImmutableDefault(value) {
239 return typeof value !== "object" || value == null || Object.isFrozen(value);
240}
241function trackForMutations(isImmutable, ignoredPaths, obj) {
242 const trackedProperties = trackProperties(isImmutable, ignoredPaths, obj);
243 return {
244 detectMutations() {
245 return detectMutations(isImmutable, ignoredPaths, trackedProperties, obj);
246 }
247 };
248}
249function trackProperties(isImmutable, ignoredPaths = [], obj, path = "", checkedObjects = /* @__PURE__ */ new Set()) {
250 const tracked = {
251 value: obj
252 };
253 if (!isImmutable(obj) && !checkedObjects.has(obj)) {
254 checkedObjects.add(obj);
255 tracked.children = {};
256 const hasIgnoredPaths = ignoredPaths.length > 0;
257 for (const key in obj) {
258 const nestedPath = path ? path + "." + key : key;
259 if (hasIgnoredPaths) {
260 const hasMatches = ignoredPaths.some((ignored) => {
261 if (ignored instanceof RegExp) {
262 return ignored.test(nestedPath);
263 }
264 return nestedPath === ignored;
265 });
266 if (hasMatches) {
267 continue;
268 }
269 }
270 tracked.children[key] = trackProperties(isImmutable, ignoredPaths, obj[key], nestedPath);
271 }
272 }
273 return tracked;
274}
275function detectMutations(isImmutable, ignoredPaths = [], trackedProperty, obj, sameParentRef = false, path = "") {
276 const prevObj = trackedProperty ? trackedProperty.value : void 0;
277 const sameRef = prevObj === obj;
278 if (sameParentRef && !sameRef && !Number.isNaN(obj)) {
279 return {
280 wasMutated: true,
281 path
282 };
283 }
284 if (isImmutable(prevObj) || isImmutable(obj)) {
285 return {
286 wasMutated: false
287 };
288 }
289 const keysToDetect = {};
290 for (let key in trackedProperty.children) {
291 keysToDetect[key] = true;
292 }
293 for (let key in obj) {
294 keysToDetect[key] = true;
295 }
296 const hasIgnoredPaths = ignoredPaths.length > 0;
297 for (let key in keysToDetect) {
298 const nestedPath = path ? path + "." + key : key;
299 if (hasIgnoredPaths) {
300 const hasMatches = ignoredPaths.some((ignored) => {
301 if (ignored instanceof RegExp) {
302 return ignored.test(nestedPath);
303 }
304 return nestedPath === ignored;
305 });
306 if (hasMatches) {
307 continue;
308 }
309 }
310 const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);
311 if (result.wasMutated) {
312 return result;
313 }
314 }
315 return {
316 wasMutated: false
317 };
318}
319function createImmutableStateInvariantMiddleware(options = {}) {
320 if (false) {
321 return () => (next) => (action) => next(action);
322 } else {
323 let stringify2 = function(obj, serializer, indent, decycler) {
324 return JSON.stringify(obj, getSerialize2(serializer, decycler), indent);
325 }, getSerialize2 = function(serializer, decycler) {
326 let stack = [], keys = [];
327 if (!decycler) decycler = function(_, value) {
328 if (stack[0] === value) return "[Circular ~]";
329 return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]";
330 };
331 return function(key, value) {
332 if (stack.length > 0) {
333 var thisPos = stack.indexOf(this);
334 ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
335 ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
336 if (~stack.indexOf(value)) value = decycler.call(this, key, value);
337 } else stack.push(value);
338 return serializer == null ? value : serializer.call(this, key, value);
339 };
340 };
341 var stringify = stringify2, getSerialize = getSerialize2;
342 let {
343 isImmutable = isImmutableDefault,
344 ignoredPaths,
345 warnAfter = 32
346 } = options;
347 const track = trackForMutations.bind(null, isImmutable, ignoredPaths);
348 return ({
349 getState
350 }) => {
351 let state = getState();
352 let tracker = track(state);
353 let result;
354 return (next) => (action) => {
355 const measureUtils = getTimeMeasureUtils(warnAfter, "ImmutableStateInvariantMiddleware");
356 measureUtils.measureTime(() => {
357 state = getState();
358 result = tracker.detectMutations();
359 tracker = track(state);
360 if (result.wasMutated) {
361 throw new Error(false ? _formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || ""}'. This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);
362 }
363 });
364 const dispatchedAction = next(action);
365 measureUtils.measureTime(() => {
366 state = getState();
367 result = tracker.detectMutations();
368 tracker = track(state);
369 if (result.wasMutated) {
370 throw new Error(false ? _formatProdErrorMessage2(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || ""}. Take a look at the reducer(s) handling the action ${stringify2(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);
371 }
372 });
373 measureUtils.warnIfExceeded();
374 return dispatchedAction;
375 };
376 };
377 }
378}
379
380// src/serializableStateInvariantMiddleware.ts
381function isPlain(val) {
382 const type = typeof val;
383 return val == null || type === "string" || type === "boolean" || type === "number" || Array.isArray(val) || (0, import_redux.isPlainObject)(val);
384}
385function findNonSerializableValue(value, path = "", isSerializable = isPlain, getEntries, ignoredPaths = [], cache) {
386 let foundNestedSerializable;
387 if (!isSerializable(value)) {
388 return {
389 keyPath: path || "<root>",
390 value
391 };
392 }
393 if (typeof value !== "object" || value === null) {
394 return false;
395 }
396 if (cache?.has(value)) return false;
397 const entries = getEntries != null ? getEntries(value) : Object.entries(value);
398 const hasIgnoredPaths = ignoredPaths.length > 0;
399 for (const [key, nestedValue] of entries) {
400 const nestedPath = path ? path + "." + key : key;
401 if (hasIgnoredPaths) {
402 const hasMatches = ignoredPaths.some((ignored) => {
403 if (ignored instanceof RegExp) {
404 return ignored.test(nestedPath);
405 }
406 return nestedPath === ignored;
407 });
408 if (hasMatches) {
409 continue;
410 }
411 }
412 if (!isSerializable(nestedValue)) {
413 return {
414 keyPath: nestedPath,
415 value: nestedValue
416 };
417 }
418 if (typeof nestedValue === "object") {
419 foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);
420 if (foundNestedSerializable) {
421 return foundNestedSerializable;
422 }
423 }
424 }
425 if (cache && isNestedFrozen(value)) cache.add(value);
426 return false;
427}
428function isNestedFrozen(value) {
429 if (!Object.isFrozen(value)) return false;
430 for (const nestedValue of Object.values(value)) {
431 if (typeof nestedValue !== "object" || nestedValue === null) continue;
432 if (!isNestedFrozen(nestedValue)) return false;
433 }
434 return true;
435}
436function createSerializableStateInvariantMiddleware(options = {}) {
437 if (false) {
438 return () => (next) => (action) => next(action);
439 } else {
440 const {
441 isSerializable = isPlain,
442 getEntries,
443 ignoredActions = [],
444 ignoredActionPaths = ["meta.arg", "meta.baseQueryMeta"],
445 ignoredPaths = [],
446 warnAfter = 32,
447 ignoreState = false,
448 ignoreActions = false,
449 disableCache = false
450 } = options;
451 const cache = !disableCache && WeakSet ? /* @__PURE__ */ new WeakSet() : void 0;
452 return (storeAPI) => (next) => (action) => {
453 if (!(0, import_redux.isAction)(action)) {
454 return next(action);
455 }
456 const result = next(action);
457 const measureUtils = getTimeMeasureUtils(warnAfter, "SerializableStateInvariantMiddleware");
458 if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type) !== -1)) {
459 measureUtils.measureTime(() => {
460 const foundActionNonSerializableValue = findNonSerializableValue(action, "", isSerializable, getEntries, ignoredActionPaths, cache);
461 if (foundActionNonSerializableValue) {
462 const {
463 keyPath,
464 value
465 } = foundActionNonSerializableValue;
466 console.error(`A non-serializable value was detected in an action, in the path: \`${keyPath}\`. Value:`, value, "\nTake a look at the logic that dispatched this action: ", action, "\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)", "\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)");
467 }
468 });
469 }
470 if (!ignoreState) {
471 measureUtils.measureTime(() => {
472 const state = storeAPI.getState();
473 const foundStateNonSerializableValue = findNonSerializableValue(state, "", isSerializable, getEntries, ignoredPaths, cache);
474 if (foundStateNonSerializableValue) {
475 const {
476 keyPath,
477 value
478 } = foundStateNonSerializableValue;
479 console.error(`A non-serializable value was detected in the state, in the path: \`${keyPath}\`. Value:`, value, `
480Take a look at the reducer(s) handling this action type: ${action.type}.
481(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);
482 }
483 });
484 measureUtils.warnIfExceeded();
485 }
486 return result;
487 };
488 }
489}
490
491// src/getDefaultMiddleware.ts
492function isBoolean(x) {
493 return typeof x === "boolean";
494}
495var buildGetDefaultMiddleware = () => function getDefaultMiddleware(options) {
496 const {
497 thunk = true,
498 immutableCheck = true,
499 serializableCheck = true,
500 actionCreatorCheck = true
501 } = options ?? {};
502 let middlewareArray = new Tuple();
503 if (thunk) {
504 if (isBoolean(thunk)) {
505 middlewareArray.push(import_redux_thunk.thunk);
506 } else {
507 middlewareArray.push((0, import_redux_thunk.withExtraArgument)(thunk.extraArgument));
508 }
509 }
510 if (true) {
511 if (immutableCheck) {
512 let immutableOptions = {};
513 if (!isBoolean(immutableCheck)) {
514 immutableOptions = immutableCheck;
515 }
516 middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));
517 }
518 if (serializableCheck) {
519 let serializableOptions = {};
520 if (!isBoolean(serializableCheck)) {
521 serializableOptions = serializableCheck;
522 }
523 middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));
524 }
525 if (actionCreatorCheck) {
526 let actionCreatorOptions = {};
527 if (!isBoolean(actionCreatorCheck)) {
528 actionCreatorOptions = actionCreatorCheck;
529 }
530 middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));
531 }
532 }
533 return middlewareArray;
534};
535
536// src/autoBatchEnhancer.ts
537var SHOULD_AUTOBATCH = "RTK_autoBatch";
538var prepareAutoBatched = () => (payload) => ({
539 payload,
540 meta: {
541 [SHOULD_AUTOBATCH]: true
542 }
543});
544var createQueueWithTimer = (timeout) => {
545 return (notify) => {
546 setTimeout(notify, timeout);
547 };
548};
549var autoBatchEnhancer = (options = {
550 type: "raf"
551}) => (next) => (...args) => {
552 const store = next(...args);
553 let notifying = true;
554 let shouldNotifyAtEndOfTick = false;
555 let notificationQueued = false;
556 const listeners = /* @__PURE__ */ new Set();
557 const queueCallback = options.type === "tick" ? queueMicrotask : options.type === "raf" ? (
558 // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.
559 typeof window !== "undefined" && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10)
560 ) : options.type === "callback" ? options.queueNotification : createQueueWithTimer(options.timeout);
561 const notifyListeners = () => {
562 notificationQueued = false;
563 if (shouldNotifyAtEndOfTick) {
564 shouldNotifyAtEndOfTick = false;
565 listeners.forEach((l) => l());
566 }
567 };
568 return Object.assign({}, store, {
569 // Override the base `store.subscribe` method to keep original listeners
570 // from running if we're delaying notifications
571 subscribe(listener2) {
572 const wrappedListener = () => notifying && listener2();
573 const unsubscribe = store.subscribe(wrappedListener);
574 listeners.add(listener2);
575 return () => {
576 unsubscribe();
577 listeners.delete(listener2);
578 };
579 },
580 // Override the base `store.dispatch` method so that we can check actions
581 // for the `shouldAutoBatch` flag and determine if batching is active
582 dispatch(action) {
583 try {
584 notifying = !action?.meta?.[SHOULD_AUTOBATCH];
585 shouldNotifyAtEndOfTick = !notifying;
586 if (shouldNotifyAtEndOfTick) {
587 if (!notificationQueued) {
588 notificationQueued = true;
589 queueCallback(notifyListeners);
590 }
591 }
592 return store.dispatch(action);
593 } finally {
594 notifying = true;
595 }
596 }
597 });
598};
599
600// src/getDefaultEnhancers.ts
601var buildGetDefaultEnhancers = (middlewareEnhancer) => function getDefaultEnhancers(options) {
602 const {
603 autoBatch = true
604 } = options ?? {};
605 let enhancerArray = new Tuple(middlewareEnhancer);
606 if (autoBatch) {
607 enhancerArray.push(autoBatchEnhancer(typeof autoBatch === "object" ? autoBatch : void 0));
608 }
609 return enhancerArray;
610};
611
612// src/configureStore.ts
613function configureStore(options) {
614 const getDefaultMiddleware = buildGetDefaultMiddleware();
615 const {
616 reducer = void 0,
617 middleware,
618 devTools = true,
619 duplicateMiddlewareCheck = true,
620 preloadedState = void 0,
621 enhancers = void 0
622 } = options || {};
623 let rootReducer;
624 if (typeof reducer === "function") {
625 rootReducer = reducer;
626 } else if ((0, import_redux.isPlainObject)(reducer)) {
627 rootReducer = (0, import_redux.combineReducers)(reducer);
628 } else {
629 throw new Error(false ? _formatProdErrorMessage(1) : "`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers");
630 }
631 if (middleware && typeof middleware !== "function") {
632 throw new Error(false ? _formatProdErrorMessage2(2) : "`middleware` field must be a callback");
633 }
634 let finalMiddleware;
635 if (typeof middleware === "function") {
636 finalMiddleware = middleware(getDefaultMiddleware);
637 if (!Array.isArray(finalMiddleware)) {
638 throw new Error(false ? _formatProdErrorMessage3(3) : "when using a middleware builder function, an array of middleware must be returned");
639 }
640 } else {
641 finalMiddleware = getDefaultMiddleware();
642 }
643 if (finalMiddleware.some((item) => typeof item !== "function")) {
644 throw new Error(false ? _formatProdErrorMessage4(4) : "each middleware provided to configureStore must be a function");
645 }
646 if (duplicateMiddlewareCheck) {
647 let middlewareReferences = /* @__PURE__ */ new Set();
648 finalMiddleware.forEach((middleware2) => {
649 if (middlewareReferences.has(middleware2)) {
650 throw new Error(false ? _formatProdErrorMessage5(42) : "Duplicate middleware references found when creating the store. Ensure that each middleware is only included once.");
651 }
652 middlewareReferences.add(middleware2);
653 });
654 }
655 let finalCompose = import_redux.compose;
656 if (devTools) {
657 finalCompose = composeWithDevTools({
658 // Enable capture of stack traces for dispatched Redux actions
659 trace: true,
660 ...typeof devTools === "object" && devTools
661 });
662 }
663 const middlewareEnhancer = (0, import_redux.applyMiddleware)(...finalMiddleware);
664 const getDefaultEnhancers = buildGetDefaultEnhancers(middlewareEnhancer);
665 if (enhancers && typeof enhancers !== "function") {
666 throw new Error(false ? _formatProdErrorMessage6(5) : "`enhancers` field must be a callback");
667 }
668 let storeEnhancers = typeof enhancers === "function" ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();
669 if (!Array.isArray(storeEnhancers)) {
670 throw new Error(false ? _formatProdErrorMessage7(6) : "`enhancers` callback must return an array");
671 }
672 if (storeEnhancers.some((item) => typeof item !== "function")) {
673 throw new Error(false ? _formatProdErrorMessage8(7) : "each enhancer provided to configureStore must be a function");
674 }
675 if (finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {
676 console.error("middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`");
677 }
678 const composedEnhancer = finalCompose(...storeEnhancers);
679 return (0, import_redux.createStore)(rootReducer, preloadedState, composedEnhancer);
680}
681
682// src/mapBuilders.ts
683function executeReducerBuilderCallback(builderCallback) {
684 const actionsMap = {};
685 const actionMatchers = [];
686 let defaultCaseReducer;
687 const builder = {
688 addCase(typeOrActionCreator, reducer) {
689 if (true) {
690 if (actionMatchers.length > 0) {
691 throw new Error(false ? _formatProdErrorMessage(26) : "`builder.addCase` should only be called before calling `builder.addMatcher`");
692 }
693 if (defaultCaseReducer) {
694 throw new Error(false ? _formatProdErrorMessage2(27) : "`builder.addCase` should only be called before calling `builder.addDefaultCase`");
695 }
696 }
697 const type = typeof typeOrActionCreator === "string" ? typeOrActionCreator : typeOrActionCreator.type;
698 if (!type) {
699 throw new Error(false ? _formatProdErrorMessage3(28) : "`builder.addCase` cannot be called with an empty action type");
700 }
701 if (type in actionsMap) {
702 throw new Error(false ? _formatProdErrorMessage4(29) : `\`builder.addCase\` cannot be called with two reducers for the same action type '${type}'`);
703 }
704 actionsMap[type] = reducer;
705 return builder;
706 },
707 addAsyncThunk(asyncThunk, reducers) {
708 if (true) {
709 if (defaultCaseReducer) {
710 throw new Error(false ? _formatProdErrorMessage5(43) : "`builder.addAsyncThunk` should only be called before calling `builder.addDefaultCase`");
711 }
712 }
713 if (reducers.pending) actionsMap[asyncThunk.pending.type] = reducers.pending;
714 if (reducers.rejected) actionsMap[asyncThunk.rejected.type] = reducers.rejected;
715 if (reducers.fulfilled) actionsMap[asyncThunk.fulfilled.type] = reducers.fulfilled;
716 if (reducers.settled) actionMatchers.push({
717 matcher: asyncThunk.settled,
718 reducer: reducers.settled
719 });
720 return builder;
721 },
722 addMatcher(matcher, reducer) {
723 if (true) {
724 if (defaultCaseReducer) {
725 throw new Error(false ? _formatProdErrorMessage6(30) : "`builder.addMatcher` should only be called before calling `builder.addDefaultCase`");
726 }
727 }
728 actionMatchers.push({
729 matcher,
730 reducer
731 });
732 return builder;
733 },
734 addDefaultCase(reducer) {
735 if (true) {
736 if (defaultCaseReducer) {
737 throw new Error(false ? _formatProdErrorMessage7(31) : "`builder.addDefaultCase` can only be called once");
738 }
739 }
740 defaultCaseReducer = reducer;
741 return builder;
742 }
743 };
744 builderCallback(builder);
745 return [actionsMap, actionMatchers, defaultCaseReducer];
746}
747
748// src/createReducer.ts
749function isStateFunction(x) {
750 return typeof x === "function";
751}
752function createReducer(initialState, mapOrBuilderCallback) {
753 if (true) {
754 if (typeof mapOrBuilderCallback === "object") {
755 throw new Error(false ? _formatProdErrorMessage(8) : "The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer");
756 }
757 }
758 let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);
759 let getInitialState;
760 if (isStateFunction(initialState)) {
761 getInitialState = () => freezeDraftable(initialState());
762 } else {
763 const frozenInitialState = freezeDraftable(initialState);
764 getInitialState = () => frozenInitialState;
765 }
766 function reducer(state = getInitialState(), action) {
767 let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({
768 matcher
769 }) => matcher(action)).map(({
770 reducer: reducer2
771 }) => reducer2)];
772 if (caseReducers.filter((cr) => !!cr).length === 0) {
773 caseReducers = [finalDefaultCaseReducer];
774 }
775 return caseReducers.reduce((previousState, caseReducer) => {
776 if (caseReducer) {
777 if ((0, import_immer.isDraft)(previousState)) {
778 const draft = previousState;
779 const result = caseReducer(draft, action);
780 if (result === void 0) {
781 return previousState;
782 }
783 return result;
784 } else if (!(0, import_immer.isDraftable)(previousState)) {
785 const result = caseReducer(previousState, action);
786 if (result === void 0) {
787 if (previousState === null) {
788 return previousState;
789 }
790 throw Error("A case reducer on a non-draftable value must not return undefined");
791 }
792 return result;
793 } else {
794 return (0, import_immer.produce)(previousState, (draft) => {
795 return caseReducer(draft, action);
796 });
797 }
798 }
799 return previousState;
800 }, state);
801 }
802 reducer.getInitialState = getInitialState;
803 return reducer;
804}
805
806// src/matchers.ts
807var matches = (matcher, action) => {
808 if (hasMatchFunction(matcher)) {
809 return matcher.match(action);
810 } else {
811 return matcher(action);
812 }
813};
814function isAnyOf(...matchers) {
815 return (action) => {
816 return matchers.some((matcher) => matches(matcher, action));
817 };
818}
819function isAllOf(...matchers) {
820 return (action) => {
821 return matchers.every((matcher) => matches(matcher, action));
822 };
823}
824function hasExpectedRequestMetadata(action, validStatus) {
825 if (!action || !action.meta) return false;
826 const hasValidRequestId = typeof action.meta.requestId === "string";
827 const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;
828 return hasValidRequestId && hasValidRequestStatus;
829}
830function isAsyncThunkArray(a) {
831 return typeof a[0] === "function" && "pending" in a[0] && "fulfilled" in a[0] && "rejected" in a[0];
832}
833function isPending(...asyncThunks) {
834 if (asyncThunks.length === 0) {
835 return (action) => hasExpectedRequestMetadata(action, ["pending"]);
836 }
837 if (!isAsyncThunkArray(asyncThunks)) {
838 return isPending()(asyncThunks[0]);
839 }
840 return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.pending));
841}
842function isRejected(...asyncThunks) {
843 if (asyncThunks.length === 0) {
844 return (action) => hasExpectedRequestMetadata(action, ["rejected"]);
845 }
846 if (!isAsyncThunkArray(asyncThunks)) {
847 return isRejected()(asyncThunks[0]);
848 }
849 return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.rejected));
850}
851function isRejectedWithValue(...asyncThunks) {
852 const hasFlag = (action) => {
853 return action && action.meta && action.meta.rejectedWithValue;
854 };
855 if (asyncThunks.length === 0) {
856 return isAllOf(isRejected(...asyncThunks), hasFlag);
857 }
858 if (!isAsyncThunkArray(asyncThunks)) {
859 return isRejectedWithValue()(asyncThunks[0]);
860 }
861 return isAllOf(isRejected(...asyncThunks), hasFlag);
862}
863function isFulfilled(...asyncThunks) {
864 if (asyncThunks.length === 0) {
865 return (action) => hasExpectedRequestMetadata(action, ["fulfilled"]);
866 }
867 if (!isAsyncThunkArray(asyncThunks)) {
868 return isFulfilled()(asyncThunks[0]);
869 }
870 return isAnyOf(...asyncThunks.map((asyncThunk) => asyncThunk.fulfilled));
871}
872function isAsyncThunkAction(...asyncThunks) {
873 if (asyncThunks.length === 0) {
874 return (action) => hasExpectedRequestMetadata(action, ["pending", "fulfilled", "rejected"]);
875 }
876 if (!isAsyncThunkArray(asyncThunks)) {
877 return isAsyncThunkAction()(asyncThunks[0]);
878 }
879 return isAnyOf(...asyncThunks.flatMap((asyncThunk) => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));
880}
881
882// src/nanoid.ts
883var urlAlphabet = "ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW";
884var nanoid = (size = 21) => {
885 let id = "";
886 let i = size;
887 while (i--) {
888 id += urlAlphabet[Math.random() * 64 | 0];
889 }
890 return id;
891};
892
893// src/createAsyncThunk.ts
894var commonProperties = ["name", "message", "stack", "code"];
895var RejectWithValue = class {
896 constructor(payload, meta) {
897 this.payload = payload;
898 this.meta = meta;
899 }
900 /*
901 type-only property to distinguish between RejectWithValue and FulfillWithMeta
902 does not exist at runtime
903 */
904 _type;
905};
906var FulfillWithMeta = class {
907 constructor(payload, meta) {
908 this.payload = payload;
909 this.meta = meta;
910 }
911 /*
912 type-only property to distinguish between RejectWithValue and FulfillWithMeta
913 does not exist at runtime
914 */
915 _type;
916};
917var miniSerializeError = (value) => {
918 if (typeof value === "object" && value !== null) {
919 const simpleError = {};
920 for (const property of commonProperties) {
921 if (typeof value[property] === "string") {
922 simpleError[property] = value[property];
923 }
924 }
925 return simpleError;
926 }
927 return {
928 message: String(value)
929 };
930};
931var externalAbortMessage = "External signal was aborted";
932var createAsyncThunk = /* @__PURE__ */ (() => {
933 function createAsyncThunk2(typePrefix, payloadCreator, options) {
934 const fulfilled = createAction(typePrefix + "/fulfilled", (payload, requestId, arg, meta) => ({
935 payload,
936 meta: {
937 ...meta || {},
938 arg,
939 requestId,
940 requestStatus: "fulfilled"
941 }
942 }));
943 const pending = createAction(typePrefix + "/pending", (requestId, arg, meta) => ({
944 payload: void 0,
945 meta: {
946 ...meta || {},
947 arg,
948 requestId,
949 requestStatus: "pending"
950 }
951 }));
952 const rejected = createAction(typePrefix + "/rejected", (error, requestId, arg, payload, meta) => ({
953 payload,
954 error: (options && options.serializeError || miniSerializeError)(error || "Rejected"),
955 meta: {
956 ...meta || {},
957 arg,
958 requestId,
959 rejectedWithValue: !!payload,
960 requestStatus: "rejected",
961 aborted: error?.name === "AbortError",
962 condition: error?.name === "ConditionError"
963 }
964 }));
965 function actionCreator(arg, {
966 signal
967 } = {}) {
968 return (dispatch, getState, extra) => {
969 const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();
970 const abortController = new AbortController();
971 let abortHandler;
972 let abortReason;
973 function abort(reason) {
974 abortReason = reason;
975 abortController.abort();
976 }
977 if (signal) {
978 if (signal.aborted) {
979 abort(externalAbortMessage);
980 } else {
981 signal.addEventListener("abort", () => abort(externalAbortMessage), {
982 once: true
983 });
984 }
985 }
986 const promise = async function() {
987 let finalAction;
988 try {
989 let conditionResult = options?.condition?.(arg, {
990 getState,
991 extra
992 });
993 if (isThenable(conditionResult)) {
994 conditionResult = await conditionResult;
995 }
996 if (conditionResult === false || abortController.signal.aborted) {
997 throw {
998 name: "ConditionError",
999 message: "Aborted due to condition callback returning false."
1000 };
1001 }
1002 const abortedPromise = new Promise((_, reject) => {
1003 abortHandler = () => {
1004 reject({
1005 name: "AbortError",
1006 message: abortReason || "Aborted"
1007 });
1008 };
1009 abortController.signal.addEventListener("abort", abortHandler, {
1010 once: true
1011 });
1012 });
1013 dispatch(pending(requestId, arg, options?.getPendingMeta?.({
1014 requestId,
1015 arg
1016 }, {
1017 getState,
1018 extra
1019 })));
1020 finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {
1021 dispatch,
1022 getState,
1023 extra,
1024 requestId,
1025 signal: abortController.signal,
1026 abort,
1027 rejectWithValue: (value, meta) => {
1028 return new RejectWithValue(value, meta);
1029 },
1030 fulfillWithValue: (value, meta) => {
1031 return new FulfillWithMeta(value, meta);
1032 }
1033 })).then((result) => {
1034 if (result instanceof RejectWithValue) {
1035 throw result;
1036 }
1037 if (result instanceof FulfillWithMeta) {
1038 return fulfilled(result.payload, requestId, arg, result.meta);
1039 }
1040 return fulfilled(result, requestId, arg);
1041 })]);
1042 } catch (err) {
1043 finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err, requestId, arg);
1044 } finally {
1045 if (abortHandler) {
1046 abortController.signal.removeEventListener("abort", abortHandler);
1047 }
1048 }
1049 const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;
1050 if (!skipDispatch) {
1051 dispatch(finalAction);
1052 }
1053 return finalAction;
1054 }();
1055 return Object.assign(promise, {
1056 abort,
1057 requestId,
1058 arg,
1059 unwrap() {
1060 return promise.then(unwrapResult);
1061 }
1062 });
1063 };
1064 }
1065 return Object.assign(actionCreator, {
1066 pending,
1067 rejected,
1068 fulfilled,
1069 settled: isAnyOf(rejected, fulfilled),
1070 typePrefix
1071 });
1072 }
1073 createAsyncThunk2.withTypes = () => createAsyncThunk2;
1074 return createAsyncThunk2;
1075})();
1076function unwrapResult(action) {
1077 if (action.meta && action.meta.rejectedWithValue) {
1078 throw action.payload;
1079 }
1080 if (action.error) {
1081 throw action.error;
1082 }
1083 return action.payload;
1084}
1085function isThenable(value) {
1086 return value !== null && typeof value === "object" && typeof value.then === "function";
1087}
1088
1089// src/createSlice.ts
1090var asyncThunkSymbol = /* @__PURE__ */ Symbol.for("rtk-slice-createasyncthunk");
1091var asyncThunkCreator = {
1092 [asyncThunkSymbol]: createAsyncThunk
1093};
1094var ReducerType = /* @__PURE__ */ ((ReducerType2) => {
1095 ReducerType2["reducer"] = "reducer";
1096 ReducerType2["reducerWithPrepare"] = "reducerWithPrepare";
1097 ReducerType2["asyncThunk"] = "asyncThunk";
1098 return ReducerType2;
1099})(ReducerType || {});
1100function getType(slice, actionKey) {
1101 return `${slice}/${actionKey}`;
1102}
1103function buildCreateSlice({
1104 creators
1105} = {}) {
1106 const cAT = creators?.asyncThunk?.[asyncThunkSymbol];
1107 return function createSlice2(options) {
1108 const {
1109 name,
1110 reducerPath = name
1111 } = options;
1112 if (!name) {
1113 throw new Error(false ? _formatProdErrorMessage(11) : "`name` is a required option for createSlice");
1114 }
1115 if (typeof process !== "undefined" && true) {
1116 if (options.initialState === void 0) {
1117 console.error("You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`");
1118 }
1119 }
1120 const reducers = (typeof options.reducers === "function" ? options.reducers(buildReducerCreators()) : options.reducers) || {};
1121 const reducerNames = Object.keys(reducers);
1122 const context = {
1123 sliceCaseReducersByName: {},
1124 sliceCaseReducersByType: {},
1125 actionCreators: {},
1126 sliceMatchers: []
1127 };
1128 const contextMethods = {
1129 addCase(typeOrActionCreator, reducer2) {
1130 const type = typeof typeOrActionCreator === "string" ? typeOrActionCreator : typeOrActionCreator.type;
1131 if (!type) {
1132 throw new Error(false ? _formatProdErrorMessage2(12) : "`context.addCase` cannot be called with an empty action type");
1133 }
1134 if (type in context.sliceCaseReducersByType) {
1135 throw new Error(false ? _formatProdErrorMessage3(13) : "`context.addCase` cannot be called with two reducers for the same action type: " + type);
1136 }
1137 context.sliceCaseReducersByType[type] = reducer2;
1138 return contextMethods;
1139 },
1140 addMatcher(matcher, reducer2) {
1141 context.sliceMatchers.push({
1142 matcher,
1143 reducer: reducer2
1144 });
1145 return contextMethods;
1146 },
1147 exposeAction(name2, actionCreator) {
1148 context.actionCreators[name2] = actionCreator;
1149 return contextMethods;
1150 },
1151 exposeCaseReducer(name2, reducer2) {
1152 context.sliceCaseReducersByName[name2] = reducer2;
1153 return contextMethods;
1154 }
1155 };
1156 reducerNames.forEach((reducerName) => {
1157 const reducerDefinition = reducers[reducerName];
1158 const reducerDetails = {
1159 reducerName,
1160 type: getType(name, reducerName),
1161 createNotation: typeof options.reducers === "function"
1162 };
1163 if (isAsyncThunkSliceReducerDefinition(reducerDefinition)) {
1164 handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);
1165 } else {
1166 handleNormalReducerDefinition(reducerDetails, reducerDefinition, contextMethods);
1167 }
1168 });
1169 function buildReducer() {
1170 if (true) {
1171 if (typeof options.extraReducers === "object") {
1172 throw new Error(false ? _formatProdErrorMessage4(14) : "The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice");
1173 }
1174 }
1175 const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = void 0] = typeof options.extraReducers === "function" ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];
1176 const finalCaseReducers = {
1177 ...extraReducers,
1178 ...context.sliceCaseReducersByType
1179 };
1180 return createReducer(options.initialState, (builder) => {
1181 for (let key in finalCaseReducers) {
1182 builder.addCase(key, finalCaseReducers[key]);
1183 }
1184 for (let sM of context.sliceMatchers) {
1185 builder.addMatcher(sM.matcher, sM.reducer);
1186 }
1187 for (let m of actionMatchers) {
1188 builder.addMatcher(m.matcher, m.reducer);
1189 }
1190 if (defaultCaseReducer) {
1191 builder.addDefaultCase(defaultCaseReducer);
1192 }
1193 });
1194 }
1195 const selectSelf = (state) => state;
1196 const injectedSelectorCache = /* @__PURE__ */ new Map();
1197 const injectedStateCache = /* @__PURE__ */ new WeakMap();
1198 let _reducer;
1199 function reducer(state, action) {
1200 if (!_reducer) _reducer = buildReducer();
1201 return _reducer(state, action);
1202 }
1203 function getInitialState() {
1204 if (!_reducer) _reducer = buildReducer();
1205 return _reducer.getInitialState();
1206 }
1207 function makeSelectorProps(reducerPath2, injected = false) {
1208 function selectSlice(state) {
1209 let sliceState = state[reducerPath2];
1210 if (typeof sliceState === "undefined") {
1211 if (injected) {
1212 sliceState = getOrInsertComputed(injectedStateCache, selectSlice, getInitialState);
1213 } else if (true) {
1214 throw new Error(false ? _formatProdErrorMessage5(15) : "selectSlice returned undefined for an uninjected slice reducer");
1215 }
1216 }
1217 return sliceState;
1218 }
1219 function getSelectors(selectState = selectSelf) {
1220 const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => /* @__PURE__ */ new WeakMap());
1221 return getOrInsertComputed(selectorCache, selectState, () => {
1222 const map = {};
1223 for (const [name2, selector] of Object.entries(options.selectors ?? {})) {
1224 map[name2] = wrapSelector(selector, selectState, () => getOrInsertComputed(injectedStateCache, selectState, getInitialState), injected);
1225 }
1226 return map;
1227 });
1228 }
1229 return {
1230 reducerPath: reducerPath2,
1231 getSelectors,
1232 get selectors() {
1233 return getSelectors(selectSlice);
1234 },
1235 selectSlice
1236 };
1237 }
1238 const slice = {
1239 name,
1240 reducer,
1241 actions: context.actionCreators,
1242 caseReducers: context.sliceCaseReducersByName,
1243 getInitialState,
1244 ...makeSelectorProps(reducerPath),
1245 injectInto(injectable, {
1246 reducerPath: pathOpt,
1247 ...config
1248 } = {}) {
1249 const newReducerPath = pathOpt ?? reducerPath;
1250 injectable.inject({
1251 reducerPath: newReducerPath,
1252 reducer
1253 }, config);
1254 return {
1255 ...slice,
1256 ...makeSelectorProps(newReducerPath, true)
1257 };
1258 }
1259 };
1260 return slice;
1261 };
1262}
1263function wrapSelector(selector, selectState, getInitialState, injected) {
1264 function wrapper(rootState, ...args) {
1265 let sliceState = selectState(rootState);
1266 if (typeof sliceState === "undefined") {
1267 if (injected) {
1268 sliceState = getInitialState();
1269 } else if (true) {
1270 throw new Error(false ? _formatProdErrorMessage6(16) : "selectState returned undefined for an uninjected slice reducer");
1271 }
1272 }
1273 return selector(sliceState, ...args);
1274 }
1275 wrapper.unwrapped = selector;
1276 return wrapper;
1277}
1278var createSlice = /* @__PURE__ */ buildCreateSlice();
1279function buildReducerCreators() {
1280 function asyncThunk(payloadCreator, config) {
1281 return {
1282 _reducerDefinitionType: "asyncThunk" /* asyncThunk */,
1283 payloadCreator,
1284 ...config
1285 };
1286 }
1287 asyncThunk.withTypes = () => asyncThunk;
1288 return {
1289 reducer(caseReducer) {
1290 return Object.assign({
1291 // hack so the wrapping function has the same name as the original
1292 // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original
1293 [caseReducer.name](...args) {
1294 return caseReducer(...args);
1295 }
1296 }[caseReducer.name], {
1297 _reducerDefinitionType: "reducer" /* reducer */
1298 });
1299 },
1300 preparedReducer(prepare, reducer) {
1301 return {
1302 _reducerDefinitionType: "reducerWithPrepare" /* reducerWithPrepare */,
1303 prepare,
1304 reducer
1305 };
1306 },
1307 asyncThunk
1308 };
1309}
1310function handleNormalReducerDefinition({
1311 type,
1312 reducerName,
1313 createNotation
1314}, maybeReducerWithPrepare, context) {
1315 let caseReducer;
1316 let prepareCallback;
1317 if ("reducer" in maybeReducerWithPrepare) {
1318 if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {
1319 throw new Error(false ? _formatProdErrorMessage7(17) : "Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.");
1320 }
1321 caseReducer = maybeReducerWithPrepare.reducer;
1322 prepareCallback = maybeReducerWithPrepare.prepare;
1323 } else {
1324 caseReducer = maybeReducerWithPrepare;
1325 }
1326 context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));
1327}
1328function isAsyncThunkSliceReducerDefinition(reducerDefinition) {
1329 return reducerDefinition._reducerDefinitionType === "asyncThunk" /* asyncThunk */;
1330}
1331function isCaseReducerWithPrepareDefinition(reducerDefinition) {
1332 return reducerDefinition._reducerDefinitionType === "reducerWithPrepare" /* reducerWithPrepare */;
1333}
1334function handleThunkCaseReducerDefinition({
1335 type,
1336 reducerName
1337}, reducerDefinition, context, cAT) {
1338 if (!cAT) {
1339 throw new Error(false ? _formatProdErrorMessage8(18) : "Cannot use `create.asyncThunk` in the built-in `createSlice`. Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.");
1340 }
1341 const {
1342 payloadCreator,
1343 fulfilled,
1344 pending,
1345 rejected,
1346 settled,
1347 options
1348 } = reducerDefinition;
1349 const thunk = cAT(type, payloadCreator, options);
1350 context.exposeAction(reducerName, thunk);
1351 if (fulfilled) {
1352 context.addCase(thunk.fulfilled, fulfilled);
1353 }
1354 if (pending) {
1355 context.addCase(thunk.pending, pending);
1356 }
1357 if (rejected) {
1358 context.addCase(thunk.rejected, rejected);
1359 }
1360 if (settled) {
1361 context.addMatcher(thunk.settled, settled);
1362 }
1363 context.exposeCaseReducer(reducerName, {
1364 fulfilled: fulfilled || noop,
1365 pending: pending || noop,
1366 rejected: rejected || noop,
1367 settled: settled || noop
1368 });
1369}
1370function noop() {
1371}
1372
1373// src/entities/entity_state.ts
1374function getInitialEntityState() {
1375 return {
1376 ids: [],
1377 entities: {}
1378 };
1379}
1380function createInitialStateFactory(stateAdapter) {
1381 function getInitialState(additionalState = {}, entities) {
1382 const state = Object.assign(getInitialEntityState(), additionalState);
1383 return entities ? stateAdapter.setAll(state, entities) : state;
1384 }
1385 return {
1386 getInitialState
1387 };
1388}
1389
1390// src/entities/state_selectors.ts
1391function createSelectorsFactory() {
1392 function getSelectors(selectState, options = {}) {
1393 const {
1394 createSelector: createSelector2 = createDraftSafeSelector
1395 } = options;
1396 const selectIds = (state) => state.ids;
1397 const selectEntities = (state) => state.entities;
1398 const selectAll = createSelector2(selectIds, selectEntities, (ids, entities) => ids.map((id) => entities[id]));
1399 const selectId = (_, id) => id;
1400 const selectById = (entities, id) => entities[id];
1401 const selectTotal = createSelector2(selectIds, (ids) => ids.length);
1402 if (!selectState) {
1403 return {
1404 selectIds,
1405 selectEntities,
1406 selectAll,
1407 selectTotal,
1408 selectById: createSelector2(selectEntities, selectId, selectById)
1409 };
1410 }
1411 const selectGlobalizedEntities = createSelector2(selectState, selectEntities);
1412 return {
1413 selectIds: createSelector2(selectState, selectIds),
1414 selectEntities: selectGlobalizedEntities,
1415 selectAll: createSelector2(selectState, selectAll),
1416 selectTotal: createSelector2(selectState, selectTotal),
1417 selectById: createSelector2(selectGlobalizedEntities, selectId, selectById)
1418 };
1419 }
1420 return {
1421 getSelectors
1422 };
1423}
1424
1425// src/entities/state_adapter.ts
1426var isDraftTyped = import_immer.isDraft;
1427function createSingleArgumentStateOperator(mutator) {
1428 const operator = createStateOperator((_, state) => mutator(state));
1429 return function operation(state) {
1430 return operator(state, void 0);
1431 };
1432}
1433function createStateOperator(mutator) {
1434 return function operation(state, arg) {
1435 function isPayloadActionArgument(arg2) {
1436 return isFSA(arg2);
1437 }
1438 const runMutator = (draft) => {
1439 if (isPayloadActionArgument(arg)) {
1440 mutator(arg.payload, draft);
1441 } else {
1442 mutator(arg, draft);
1443 }
1444 };
1445 if (isDraftTyped(state)) {
1446 runMutator(state);
1447 return state;
1448 }
1449 return (0, import_immer.produce)(state, runMutator);
1450 };
1451}
1452
1453// src/entities/utils.ts
1454function selectIdValue(entity, selectId) {
1455 const key = selectId(entity);
1456 if (key === void 0) {
1457 console.warn("The entity passed to the `selectId` implementation returned undefined.", "You should probably provide your own `selectId` implementation.", "The entity that was passed:", entity, "The `selectId` implementation:", selectId.toString());
1458 }
1459 return key;
1460}
1461function ensureEntitiesArray(entities) {
1462 if (!Array.isArray(entities)) {
1463 entities = Object.values(entities);
1464 }
1465 return entities;
1466}
1467function getCurrent(value) {
1468 return (0, import_immer.isDraft)(value) ? (0, import_immer.current)(value) : value;
1469}
1470function splitAddedUpdatedEntities(newEntities, selectId, state) {
1471 newEntities = ensureEntitiesArray(newEntities);
1472 const existingIdsArray = getCurrent(state.ids);
1473 const existingIds = new Set(existingIdsArray);
1474 const added = [];
1475 const addedIds = /* @__PURE__ */ new Set([]);
1476 const updated = [];
1477 for (const entity of newEntities) {
1478 const id = selectIdValue(entity, selectId);
1479 if (existingIds.has(id) || addedIds.has(id)) {
1480 updated.push({
1481 id,
1482 changes: entity
1483 });
1484 } else {
1485 addedIds.add(id);
1486 added.push(entity);
1487 }
1488 }
1489 return [added, updated, existingIdsArray];
1490}
1491
1492// src/entities/unsorted_state_adapter.ts
1493function createUnsortedStateAdapter(selectId) {
1494 function addOneMutably(entity, state) {
1495 const key = selectIdValue(entity, selectId);
1496 if (key in state.entities) {
1497 return;
1498 }
1499 state.ids.push(key);
1500 state.entities[key] = entity;
1501 }
1502 function addManyMutably(newEntities, state) {
1503 newEntities = ensureEntitiesArray(newEntities);
1504 for (const entity of newEntities) {
1505 addOneMutably(entity, state);
1506 }
1507 }
1508 function setOneMutably(entity, state) {
1509 const key = selectIdValue(entity, selectId);
1510 if (!(key in state.entities)) {
1511 state.ids.push(key);
1512 }
1513 ;
1514 state.entities[key] = entity;
1515 }
1516 function setManyMutably(newEntities, state) {
1517 newEntities = ensureEntitiesArray(newEntities);
1518 for (const entity of newEntities) {
1519 setOneMutably(entity, state);
1520 }
1521 }
1522 function setAllMutably(newEntities, state) {
1523 newEntities = ensureEntitiesArray(newEntities);
1524 state.ids = [];
1525 state.entities = {};
1526 addManyMutably(newEntities, state);
1527 }
1528 function removeOneMutably(key, state) {
1529 return removeManyMutably([key], state);
1530 }
1531 function removeManyMutably(keys, state) {
1532 let didMutate = false;
1533 keys.forEach((key) => {
1534 if (key in state.entities) {
1535 delete state.entities[key];
1536 didMutate = true;
1537 }
1538 });
1539 if (didMutate) {
1540 state.ids = state.ids.filter((id) => id in state.entities);
1541 }
1542 }
1543 function removeAllMutably(state) {
1544 Object.assign(state, {
1545 ids: [],
1546 entities: {}
1547 });
1548 }
1549 function takeNewKey(keys, update, state) {
1550 const original3 = state.entities[update.id];
1551 if (original3 === void 0) {
1552 return false;
1553 }
1554 const updated = Object.assign({}, original3, update.changes);
1555 const newKey = selectIdValue(updated, selectId);
1556 const hasNewKey = newKey !== update.id;
1557 if (hasNewKey) {
1558 keys[update.id] = newKey;
1559 delete state.entities[update.id];
1560 }
1561 ;
1562 state.entities[newKey] = updated;
1563 return hasNewKey;
1564 }
1565 function updateOneMutably(update, state) {
1566 return updateManyMutably([update], state);
1567 }
1568 function updateManyMutably(updates, state) {
1569 const newKeys = {};
1570 const updatesPerEntity = {};
1571 updates.forEach((update) => {
1572 if (update.id in state.entities) {
1573 updatesPerEntity[update.id] = {
1574 id: update.id,
1575 // Spreads ignore falsy values, so this works even if there isn't
1576 // an existing update already at this key
1577 changes: {
1578 ...updatesPerEntity[update.id]?.changes,
1579 ...update.changes
1580 }
1581 };
1582 }
1583 });
1584 updates = Object.values(updatesPerEntity);
1585 const didMutateEntities = updates.length > 0;
1586 if (didMutateEntities) {
1587 const didMutateIds = updates.filter((update) => takeNewKey(newKeys, update, state)).length > 0;
1588 if (didMutateIds) {
1589 state.ids = Object.values(state.entities).map((e) => selectIdValue(e, selectId));
1590 }
1591 }
1592 }
1593 function upsertOneMutably(entity, state) {
1594 return upsertManyMutably([entity], state);
1595 }
1596 function upsertManyMutably(newEntities, state) {
1597 const [added, updated] = splitAddedUpdatedEntities(newEntities, selectId, state);
1598 addManyMutably(added, state);
1599 updateManyMutably(updated, state);
1600 }
1601 return {
1602 removeAll: createSingleArgumentStateOperator(removeAllMutably),
1603 addOne: createStateOperator(addOneMutably),
1604 addMany: createStateOperator(addManyMutably),
1605 setOne: createStateOperator(setOneMutably),
1606 setMany: createStateOperator(setManyMutably),
1607 setAll: createStateOperator(setAllMutably),
1608 updateOne: createStateOperator(updateOneMutably),
1609 updateMany: createStateOperator(updateManyMutably),
1610 upsertOne: createStateOperator(upsertOneMutably),
1611 upsertMany: createStateOperator(upsertManyMutably),
1612 removeOne: createStateOperator(removeOneMutably),
1613 removeMany: createStateOperator(removeManyMutably)
1614 };
1615}
1616
1617// src/entities/sorted_state_adapter.ts
1618function findInsertIndex(sortedItems, item, comparisonFunction) {
1619 let lowIndex = 0;
1620 let highIndex = sortedItems.length;
1621 while (lowIndex < highIndex) {
1622 let middleIndex = lowIndex + highIndex >>> 1;
1623 const currentItem = sortedItems[middleIndex];
1624 const res = comparisonFunction(item, currentItem);
1625 if (res >= 0) {
1626 lowIndex = middleIndex + 1;
1627 } else {
1628 highIndex = middleIndex;
1629 }
1630 }
1631 return lowIndex;
1632}
1633function insert(sortedItems, item, comparisonFunction) {
1634 const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);
1635 sortedItems.splice(insertAtIndex, 0, item);
1636 return sortedItems;
1637}
1638function createSortedStateAdapter(selectId, comparer) {
1639 const {
1640 removeOne,
1641 removeMany,
1642 removeAll
1643 } = createUnsortedStateAdapter(selectId);
1644 function addOneMutably(entity, state) {
1645 return addManyMutably([entity], state);
1646 }
1647 function addManyMutably(newEntities, state, existingIds) {
1648 newEntities = ensureEntitiesArray(newEntities);
1649 const existingKeys = new Set(existingIds ?? getCurrent(state.ids));
1650 const addedKeys = /* @__PURE__ */ new Set();
1651 const models = newEntities.filter((model) => {
1652 const modelId = selectIdValue(model, selectId);
1653 const notAdded = !addedKeys.has(modelId);
1654 if (notAdded) addedKeys.add(modelId);
1655 return !existingKeys.has(modelId) && notAdded;
1656 });
1657 if (models.length !== 0) {
1658 mergeFunction(state, models);
1659 }
1660 }
1661 function setOneMutably(entity, state) {
1662 return setManyMutably([entity], state);
1663 }
1664 function setManyMutably(newEntities, state) {
1665 let deduplicatedEntities = {};
1666 newEntities = ensureEntitiesArray(newEntities);
1667 if (newEntities.length !== 0) {
1668 for (const item of newEntities) {
1669 const entityId = selectId(item);
1670 deduplicatedEntities[entityId] = item;
1671 delete state.entities[entityId];
1672 }
1673 newEntities = ensureEntitiesArray(deduplicatedEntities);
1674 mergeFunction(state, newEntities);
1675 }
1676 }
1677 function setAllMutably(newEntities, state) {
1678 newEntities = ensureEntitiesArray(newEntities);
1679 state.entities = {};
1680 state.ids = [];
1681 addManyMutably(newEntities, state, []);
1682 }
1683 function updateOneMutably(update, state) {
1684 return updateManyMutably([update], state);
1685 }
1686 function updateManyMutably(updates, state) {
1687 let appliedUpdates = false;
1688 let replacedIds = false;
1689 for (let update of updates) {
1690 const entity = state.entities[update.id];
1691 if (!entity) {
1692 continue;
1693 }
1694 appliedUpdates = true;
1695 Object.assign(entity, update.changes);
1696 const newId = selectId(entity);
1697 if (update.id !== newId) {
1698 replacedIds = true;
1699 delete state.entities[update.id];
1700 const oldIndex = state.ids.indexOf(update.id);
1701 state.ids[oldIndex] = newId;
1702 state.entities[newId] = entity;
1703 }
1704 }
1705 if (appliedUpdates) {
1706 mergeFunction(state, [], appliedUpdates, replacedIds);
1707 }
1708 }
1709 function upsertOneMutably(entity, state) {
1710 return upsertManyMutably([entity], state);
1711 }
1712 function upsertManyMutably(newEntities, state) {
1713 const [added, updated, existingIdsArray] = splitAddedUpdatedEntities(newEntities, selectId, state);
1714 if (added.length) {
1715 addManyMutably(added, state, existingIdsArray);
1716 }
1717 if (updated.length) {
1718 updateManyMutably(updated, state);
1719 }
1720 }
1721 function areArraysEqual(a, b) {
1722 if (a.length !== b.length) {
1723 return false;
1724 }
1725 for (let i = 0; i < a.length; i++) {
1726 if (a[i] === b[i]) {
1727 continue;
1728 }
1729 return false;
1730 }
1731 return true;
1732 }
1733 const mergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {
1734 const currentEntities = getCurrent(state.entities);
1735 const currentIds = getCurrent(state.ids);
1736 const stateEntities = state.entities;
1737 let ids = currentIds;
1738 if (replacedIds) {
1739 ids = new Set(currentIds);
1740 }
1741 let sortedEntities = [];
1742 for (const id of ids) {
1743 const entity = currentEntities[id];
1744 if (entity) {
1745 sortedEntities.push(entity);
1746 }
1747 }
1748 const wasPreviouslyEmpty = sortedEntities.length === 0;
1749 for (const item of addedItems) {
1750 stateEntities[selectId(item)] = item;
1751 if (!wasPreviouslyEmpty) {
1752 insert(sortedEntities, item, comparer);
1753 }
1754 }
1755 if (wasPreviouslyEmpty) {
1756 sortedEntities = addedItems.slice().sort(comparer);
1757 } else if (appliedUpdates) {
1758 sortedEntities.sort(comparer);
1759 }
1760 const newSortedIds = sortedEntities.map(selectId);
1761 if (!areArraysEqual(currentIds, newSortedIds)) {
1762 state.ids = newSortedIds;
1763 }
1764 };
1765 return {
1766 removeOne,
1767 removeMany,
1768 removeAll,
1769 addOne: createStateOperator(addOneMutably),
1770 updateOne: createStateOperator(updateOneMutably),
1771 upsertOne: createStateOperator(upsertOneMutably),
1772 setOne: createStateOperator(setOneMutably),
1773 setMany: createStateOperator(setManyMutably),
1774 setAll: createStateOperator(setAllMutably),
1775 addMany: createStateOperator(addManyMutably),
1776 updateMany: createStateOperator(updateManyMutably),
1777 upsertMany: createStateOperator(upsertManyMutably)
1778 };
1779}
1780
1781// src/entities/create_adapter.ts
1782function createEntityAdapter(options = {}) {
1783 const {
1784 selectId,
1785 sortComparer
1786 } = {
1787 sortComparer: false,
1788 selectId: (instance) => instance.id,
1789 ...options
1790 };
1791 const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);
1792 const stateFactory = createInitialStateFactory(stateAdapter);
1793 const selectorsFactory = createSelectorsFactory();
1794 return {
1795 selectId,
1796 sortComparer,
1797 ...stateFactory,
1798 ...selectorsFactory,
1799 ...stateAdapter
1800 };
1801}
1802
1803// src/listenerMiddleware/exceptions.ts
1804var task = "task";
1805var listener = "listener";
1806var completed = "completed";
1807var cancelled = "cancelled";
1808var taskCancelled = `task-${cancelled}`;
1809var taskCompleted = `task-${completed}`;
1810var listenerCancelled = `${listener}-${cancelled}`;
1811var listenerCompleted = `${listener}-${completed}`;
1812var TaskAbortError = class {
1813 constructor(code) {
1814 this.code = code;
1815 this.message = `${task} ${cancelled} (reason: ${code})`;
1816 }
1817 name = "TaskAbortError";
1818 message;
1819};
1820
1821// src/listenerMiddleware/utils.ts
1822var assertFunction = (func, expected) => {
1823 if (typeof func !== "function") {
1824 throw new TypeError(false ? _formatProdErrorMessage(32) : `${expected} is not a function`);
1825 }
1826};
1827var noop2 = () => {
1828};
1829var catchRejection = (promise, onError = noop2) => {
1830 promise.catch(onError);
1831 return promise;
1832};
1833var addAbortSignalListener = (abortSignal, callback) => {
1834 abortSignal.addEventListener("abort", callback, {
1835 once: true
1836 });
1837 return () => abortSignal.removeEventListener("abort", callback);
1838};
1839
1840// src/listenerMiddleware/task.ts
1841var validateActive = (signal) => {
1842 if (signal.aborted) {
1843 throw new TaskAbortError(signal.reason);
1844 }
1845};
1846function raceWithSignal(signal, promise) {
1847 let cleanup = noop2;
1848 return new Promise((resolve, reject) => {
1849 const notifyRejection = () => reject(new TaskAbortError(signal.reason));
1850 if (signal.aborted) {
1851 notifyRejection();
1852 return;
1853 }
1854 cleanup = addAbortSignalListener(signal, notifyRejection);
1855 promise.finally(() => cleanup()).then(resolve, reject);
1856 }).finally(() => {
1857 cleanup = noop2;
1858 });
1859}
1860var runTask = async (task2, cleanUp) => {
1861 try {
1862 await Promise.resolve();
1863 const value = await task2();
1864 return {
1865 status: "ok",
1866 value
1867 };
1868 } catch (error) {
1869 return {
1870 status: error instanceof TaskAbortError ? "cancelled" : "rejected",
1871 error
1872 };
1873 } finally {
1874 cleanUp?.();
1875 }
1876};
1877var createPause = (signal) => {
1878 return (promise) => {
1879 return catchRejection(raceWithSignal(signal, promise).then((output) => {
1880 validateActive(signal);
1881 return output;
1882 }));
1883 };
1884};
1885var createDelay = (signal) => {
1886 const pause = createPause(signal);
1887 return (timeoutMs) => {
1888 return pause(new Promise((resolve) => setTimeout(resolve, timeoutMs)));
1889 };
1890};
1891
1892// src/listenerMiddleware/index.ts
1893var {
1894 assign
1895} = Object;
1896var INTERNAL_NIL_TOKEN = {};
1897var alm = "listenerMiddleware";
1898var createFork = (parentAbortSignal, parentBlockingPromises) => {
1899 const linkControllers = (controller) => addAbortSignalListener(parentAbortSignal, () => controller.abort(parentAbortSignal.reason));
1900 return (taskExecutor, opts) => {
1901 assertFunction(taskExecutor, "taskExecutor");
1902 const childAbortController = new AbortController();
1903 linkControllers(childAbortController);
1904 const result = runTask(async () => {
1905 validateActive(parentAbortSignal);
1906 validateActive(childAbortController.signal);
1907 const result2 = await taskExecutor({
1908 pause: createPause(childAbortController.signal),
1909 delay: createDelay(childAbortController.signal),
1910 signal: childAbortController.signal
1911 });
1912 validateActive(childAbortController.signal);
1913 return result2;
1914 }, () => childAbortController.abort(taskCompleted));
1915 if (opts?.autoJoin) {
1916 parentBlockingPromises.push(result.catch(noop2));
1917 }
1918 return {
1919 result: createPause(parentAbortSignal)(result),
1920 cancel() {
1921 childAbortController.abort(taskCancelled);
1922 }
1923 };
1924 };
1925};
1926var createTakePattern = (startListening, signal) => {
1927 const take = async (predicate, timeout) => {
1928 validateActive(signal);
1929 let unsubscribe = () => {
1930 };
1931 const tuplePromise = new Promise((resolve, reject) => {
1932 let stopListening = startListening({
1933 predicate,
1934 effect: (action, listenerApi) => {
1935 listenerApi.unsubscribe();
1936 resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);
1937 }
1938 });
1939 unsubscribe = () => {
1940 stopListening();
1941 reject();
1942 };
1943 });
1944 const promises = [tuplePromise];
1945 if (timeout != null) {
1946 promises.push(new Promise((resolve) => setTimeout(resolve, timeout, null)));
1947 }
1948 try {
1949 const output = await raceWithSignal(signal, Promise.race(promises));
1950 validateActive(signal);
1951 return output;
1952 } finally {
1953 unsubscribe();
1954 }
1955 };
1956 return (predicate, timeout) => catchRejection(take(predicate, timeout));
1957};
1958var getListenerEntryPropsFrom = (options) => {
1959 let {
1960 type,
1961 actionCreator,
1962 matcher,
1963 predicate,
1964 effect
1965 } = options;
1966 if (type) {
1967 predicate = createAction(type).match;
1968 } else if (actionCreator) {
1969 type = actionCreator.type;
1970 predicate = actionCreator.match;
1971 } else if (matcher) {
1972 predicate = matcher;
1973 } else if (predicate) {
1974 } else {
1975 throw new Error(false ? _formatProdErrorMessage(21) : "Creating or removing a listener requires one of the known fields for matching an action");
1976 }
1977 assertFunction(effect, "options.listener");
1978 return {
1979 predicate,
1980 type,
1981 effect
1982 };
1983};
1984var createListenerEntry = /* @__PURE__ */ assign((options) => {
1985 const {
1986 type,
1987 predicate,
1988 effect
1989 } = getListenerEntryPropsFrom(options);
1990 const entry = {
1991 id: nanoid(),
1992 effect,
1993 type,
1994 predicate,
1995 pending: /* @__PURE__ */ new Set(),
1996 unsubscribe: () => {
1997 throw new Error(false ? _formatProdErrorMessage2(22) : "Unsubscribe not initialized");
1998 }
1999 };
2000 return entry;
2001}, {
2002 withTypes: () => createListenerEntry
2003});
2004var findListenerEntry = (listenerMap, options) => {
2005 const {
2006 type,
2007 effect,
2008 predicate
2009 } = getListenerEntryPropsFrom(options);
2010 return Array.from(listenerMap.values()).find((entry) => {
2011 const matchPredicateOrType = typeof type === "string" ? entry.type === type : entry.predicate === predicate;
2012 return matchPredicateOrType && entry.effect === effect;
2013 });
2014};
2015var cancelActiveListeners = (entry) => {
2016 entry.pending.forEach((controller) => {
2017 controller.abort(listenerCancelled);
2018 });
2019};
2020var createClearListenerMiddleware = (listenerMap, executingListeners) => {
2021 return () => {
2022 for (const listener2 of executingListeners.keys()) {
2023 cancelActiveListeners(listener2);
2024 }
2025 listenerMap.clear();
2026 };
2027};
2028var safelyNotifyError = (errorHandler, errorToNotify, errorInfo) => {
2029 try {
2030 errorHandler(errorToNotify, errorInfo);
2031 } catch (errorHandlerError) {
2032 setTimeout(() => {
2033 throw errorHandlerError;
2034 }, 0);
2035 }
2036};
2037var addListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/add`), {
2038 withTypes: () => addListener
2039});
2040var clearAllListeners = /* @__PURE__ */ createAction(`${alm}/removeAll`);
2041var removeListener = /* @__PURE__ */ assign(/* @__PURE__ */ createAction(`${alm}/remove`), {
2042 withTypes: () => removeListener
2043});
2044var defaultErrorHandler = (...args) => {
2045 console.error(`${alm}/error`, ...args);
2046};
2047var createListenerMiddleware = (middlewareOptions = {}) => {
2048 const listenerMap = /* @__PURE__ */ new Map();
2049 const executingListeners = /* @__PURE__ */ new Map();
2050 const trackExecutingListener = (entry) => {
2051 const count = executingListeners.get(entry) ?? 0;
2052 executingListeners.set(entry, count + 1);
2053 };
2054 const untrackExecutingListener = (entry) => {
2055 const count = executingListeners.get(entry) ?? 1;
2056 if (count === 1) {
2057 executingListeners.delete(entry);
2058 } else {
2059 executingListeners.set(entry, count - 1);
2060 }
2061 };
2062 const {
2063 extra,
2064 onError = defaultErrorHandler
2065 } = middlewareOptions;
2066 assertFunction(onError, "onError");
2067 const insertEntry = (entry) => {
2068 entry.unsubscribe = () => listenerMap.delete(entry.id);
2069 listenerMap.set(entry.id, entry);
2070 return (cancelOptions) => {
2071 entry.unsubscribe();
2072 if (cancelOptions?.cancelActive) {
2073 cancelActiveListeners(entry);
2074 }
2075 };
2076 };
2077 const startListening = (options) => {
2078 const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options);
2079 return insertEntry(entry);
2080 };
2081 assign(startListening, {
2082 withTypes: () => startListening
2083 });
2084 const stopListening = (options) => {
2085 const entry = findListenerEntry(listenerMap, options);
2086 if (entry) {
2087 entry.unsubscribe();
2088 if (options.cancelActive) {
2089 cancelActiveListeners(entry);
2090 }
2091 }
2092 return !!entry;
2093 };
2094 assign(stopListening, {
2095 withTypes: () => stopListening
2096 });
2097 const notifyListener = async (entry, action, api, getOriginalState) => {
2098 const internalTaskController = new AbortController();
2099 const take = createTakePattern(startListening, internalTaskController.signal);
2100 const autoJoinPromises = [];
2101 try {
2102 entry.pending.add(internalTaskController);
2103 trackExecutingListener(entry);
2104 await Promise.resolve(entry.effect(
2105 action,
2106 // Use assign() rather than ... to avoid extra helper functions added to bundle
2107 assign({}, api, {
2108 getOriginalState,
2109 condition: (predicate, timeout) => take(predicate, timeout).then(Boolean),
2110 take,
2111 delay: createDelay(internalTaskController.signal),
2112 pause: createPause(internalTaskController.signal),
2113 extra,
2114 signal: internalTaskController.signal,
2115 fork: createFork(internalTaskController.signal, autoJoinPromises),
2116 unsubscribe: entry.unsubscribe,
2117 subscribe: () => {
2118 listenerMap.set(entry.id, entry);
2119 },
2120 cancelActiveListeners: () => {
2121 entry.pending.forEach((controller, _, set) => {
2122 if (controller !== internalTaskController) {
2123 controller.abort(listenerCancelled);
2124 set.delete(controller);
2125 }
2126 });
2127 },
2128 cancel: () => {
2129 internalTaskController.abort(listenerCancelled);
2130 entry.pending.delete(internalTaskController);
2131 },
2132 throwIfCancelled: () => {
2133 validateActive(internalTaskController.signal);
2134 }
2135 })
2136 ));
2137 } catch (listenerError) {
2138 if (!(listenerError instanceof TaskAbortError)) {
2139 safelyNotifyError(onError, listenerError, {
2140 raisedBy: "effect"
2141 });
2142 }
2143 } finally {
2144 await Promise.all(autoJoinPromises);
2145 internalTaskController.abort(listenerCompleted);
2146 untrackExecutingListener(entry);
2147 entry.pending.delete(internalTaskController);
2148 }
2149 };
2150 const clearListenerMiddleware = createClearListenerMiddleware(listenerMap, executingListeners);
2151 const middleware = (api) => (next) => (action) => {
2152 if (!(0, import_redux.isAction)(action)) {
2153 return next(action);
2154 }
2155 if (addListener.match(action)) {
2156 return startListening(action.payload);
2157 }
2158 if (clearAllListeners.match(action)) {
2159 clearListenerMiddleware();
2160 return;
2161 }
2162 if (removeListener.match(action)) {
2163 return stopListening(action.payload);
2164 }
2165 let originalState = api.getState();
2166 const getOriginalState = () => {
2167 if (originalState === INTERNAL_NIL_TOKEN) {
2168 throw new Error(false ? _formatProdErrorMessage3(23) : `${alm}: getOriginalState can only be called synchronously`);
2169 }
2170 return originalState;
2171 };
2172 let result;
2173 try {
2174 result = next(action);
2175 if (listenerMap.size > 0) {
2176 const currentState = api.getState();
2177 const listenerEntries = Array.from(listenerMap.values());
2178 for (const entry of listenerEntries) {
2179 let runListener = false;
2180 try {
2181 runListener = entry.predicate(action, currentState, originalState);
2182 } catch (predicateError) {
2183 runListener = false;
2184 safelyNotifyError(onError, predicateError, {
2185 raisedBy: "predicate"
2186 });
2187 }
2188 if (!runListener) {
2189 continue;
2190 }
2191 notifyListener(entry, action, api, getOriginalState);
2192 }
2193 }
2194 } finally {
2195 originalState = INTERNAL_NIL_TOKEN;
2196 }
2197 return result;
2198 };
2199 return {
2200 middleware,
2201 startListening,
2202 stopListening,
2203 clearListeners: clearListenerMiddleware
2204 };
2205};
2206
2207// src/dynamicMiddleware/index.ts
2208var createMiddlewareEntry = (middleware) => ({
2209 middleware,
2210 applied: /* @__PURE__ */ new Map()
2211});
2212var matchInstance = (instanceId) => (action) => action?.meta?.instanceId === instanceId;
2213var createDynamicMiddleware = () => {
2214 const instanceId = nanoid();
2215 const middlewareMap = /* @__PURE__ */ new Map();
2216 const withMiddleware = Object.assign(createAction("dynamicMiddleware/add", (...middlewares) => ({
2217 payload: middlewares,
2218 meta: {
2219 instanceId
2220 }
2221 })), {
2222 withTypes: () => withMiddleware
2223 });
2224 const addMiddleware = Object.assign(function addMiddleware2(...middlewares) {
2225 middlewares.forEach((middleware2) => {
2226 getOrInsertComputed(middlewareMap, middleware2, createMiddlewareEntry);
2227 });
2228 }, {
2229 withTypes: () => addMiddleware
2230 });
2231 const getFinalMiddleware = (api) => {
2232 const appliedMiddleware = Array.from(middlewareMap.values()).map((entry) => getOrInsertComputed(entry.applied, api, entry.middleware));
2233 return (0, import_redux.compose)(...appliedMiddleware);
2234 };
2235 const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));
2236 const middleware = (api) => (next) => (action) => {
2237 if (isWithMiddleware(action)) {
2238 addMiddleware(...action.payload);
2239 return api.dispatch;
2240 }
2241 return getFinalMiddleware(api)(next)(action);
2242 };
2243 return {
2244 middleware,
2245 addMiddleware,
2246 withMiddleware,
2247 instanceId
2248 };
2249};
2250
2251// src/combineSlices.ts
2252var import_redux2 = require("redux");
2253var isSliceLike = (maybeSliceLike) => "reducerPath" in maybeSliceLike && typeof maybeSliceLike.reducerPath === "string";
2254var getReducers = (slices) => slices.flatMap((sliceOrMap) => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer]] : Object.entries(sliceOrMap));
2255var ORIGINAL_STATE = Symbol.for("rtk-state-proxy-original");
2256var isStateProxy = (value) => !!value && !!value[ORIGINAL_STATE];
2257var stateProxyMap = /* @__PURE__ */ new WeakMap();
2258var createStateProxy = (state, reducerMap, initialStateCache) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {
2259 get: (target, prop, receiver) => {
2260 if (prop === ORIGINAL_STATE) return target;
2261 const result = Reflect.get(target, prop, receiver);
2262 if (typeof result === "undefined") {
2263 const cached = initialStateCache[prop];
2264 if (typeof cached !== "undefined") return cached;
2265 const reducer = reducerMap[prop];
2266 if (reducer) {
2267 const reducerResult = reducer(void 0, {
2268 type: nanoid()
2269 });
2270 if (typeof reducerResult === "undefined") {
2271 throw new Error(false ? _formatProdErrorMessage(24) : `The slice reducer for key "${prop.toString()}" returned undefined when called for selector(). If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);
2272 }
2273 initialStateCache[prop] = reducerResult;
2274 return reducerResult;
2275 }
2276 }
2277 return result;
2278 }
2279}));
2280var original = (state) => {
2281 if (!isStateProxy(state)) {
2282 throw new Error(false ? _formatProdErrorMessage2(25) : "original must be used on state Proxy");
2283 }
2284 return state[ORIGINAL_STATE];
2285};
2286var emptyObject = {};
2287var noopReducer = (state = emptyObject) => state;
2288function combineSlices(...slices) {
2289 const reducerMap = Object.fromEntries(getReducers(slices));
2290 const getReducer = () => Object.keys(reducerMap).length ? (0, import_redux2.combineReducers)(reducerMap) : noopReducer;
2291 let reducer = getReducer();
2292 function combinedReducer(state, action) {
2293 return reducer(state, action);
2294 }
2295 combinedReducer.withLazyLoadedSlices = () => combinedReducer;
2296 const initialStateCache = {};
2297 const inject = (slice, config = {}) => {
2298 const {
2299 reducerPath,
2300 reducer: reducerToInject
2301 } = slice;
2302 const currentReducer = reducerMap[reducerPath];
2303 if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {
2304 if (typeof process !== "undefined" && true) {
2305 console.error(`called \`inject\` to override already-existing reducer ${reducerPath} without specifying \`overrideExisting: true\``);
2306 }
2307 return combinedReducer;
2308 }
2309 if (config.overrideExisting && currentReducer !== reducerToInject) {
2310 delete initialStateCache[reducerPath];
2311 }
2312 reducerMap[reducerPath] = reducerToInject;
2313 reducer = getReducer();
2314 return combinedReducer;
2315 };
2316 const selector = Object.assign(function makeSelector(selectorFn, selectState) {
2317 return function selector2(state, ...args) {
2318 return selectorFn(createStateProxy(selectState ? selectState(state, ...args) : state, reducerMap, initialStateCache), ...args);
2319 };
2320 }, {
2321 original
2322 });
2323 return Object.assign(combinedReducer, {
2324 inject,
2325 selector
2326 });
2327}
2328
2329// src/formatProdErrorMessage.ts
2330function formatProdErrorMessage(code) {
2331 return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;
2332}
2333// Annotate the CommonJS export names for ESM import in node:
23340 && (module.exports = {
2335 ReducerType,
2336 SHOULD_AUTOBATCH,
2337 TaskAbortError,
2338 Tuple,
2339 addListener,
2340 asyncThunkCreator,
2341 autoBatchEnhancer,
2342 buildCreateSlice,
2343 clearAllListeners,
2344 combineSlices,
2345 configureStore,
2346 createAction,
2347 createActionCreatorInvariantMiddleware,
2348 createAsyncThunk,
2349 createDraftSafeSelector,
2350 createDraftSafeSelectorCreator,
2351 createDynamicMiddleware,
2352 createEntityAdapter,
2353 createImmutableStateInvariantMiddleware,
2354 createListenerMiddleware,
2355 createNextState,
2356 createReducer,
2357 createSelector,
2358 createSelectorCreator,
2359 createSerializableStateInvariantMiddleware,
2360 createSlice,
2361 current,
2362 findNonSerializableValue,
2363 formatProdErrorMessage,
2364 freeze,
2365 isActionCreator,
2366 isAllOf,
2367 isAnyOf,
2368 isAsyncThunkAction,
2369 isDraft,
2370 isFluxStandardAction,
2371 isFulfilled,
2372 isImmutableDefault,
2373 isPending,
2374 isPlain,
2375 isRejected,
2376 isRejectedWithValue,
2377 lruMemoize,
2378 miniSerializeError,
2379 nanoid,
2380 original,
2381 prepareAutoBatched,
2382 removeListener,
2383 unwrapResult,
2384 weakMapMemoize,
2385 ...require("redux")
2386});
2387//# sourceMappingURL=redux-toolkit.development.cjs.map
Note: See TracBrowser for help on using the repository browser.