source: node_modules/@reduxjs/toolkit/dist/redux-toolkit.legacy-esm.js

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

Added visualizations

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