UNPKG

68.2 kBJavaScriptView Raw
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));
20// src/index.ts
21import { enableES5 } from "immer";
22export * from "redux";
23import { default as default2, current as current2, freeze, original, isDraft as isDraft4 } from "immer";
24import { createSelector as createSelector2 } from "reselect";
25// src/createDraftSafeSelector.ts
26import { current, isDraft } from "immer";
27import { createSelector } from "reselect";
28var createDraftSafeSelector = (...args) => {
29 const selector = createSelector(...args);
30 const wrappedSelector = (value, ...rest) => selector(isDraft(value) ? current(value) : value, ...rest);
31 return wrappedSelector;
32};
33// src/configureStore.ts
34import { createStore, compose as compose2, applyMiddleware, combineReducers } from "redux";
35// src/devtoolsExtension.ts
36import { compose } from "redux";
37var composeWithDevTools = typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function () {
38 if (arguments.length === 0)
39 return void 0;
40 if (typeof arguments[0] === "object")
41 return compose;
42 return compose.apply(null, arguments);
43};
44var devToolsEnhancer = typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function () {
45 return function (noop2) {
46 return noop2;
47 };
48};
49// src/isPlainObject.ts
50function isPlainObject(value) {
51 if (typeof value !== "object" || value === null)
52 return false;
53 let proto = Object.getPrototypeOf(value);
54 if (proto === null)
55 return true;
56 let baseProto = proto;
57 while (Object.getPrototypeOf(baseProto) !== null) {
58 baseProto = Object.getPrototypeOf(baseProto);
59 }
60 return proto === baseProto;
61}
62// src/getDefaultMiddleware.ts
63import thunkMiddleware from "redux-thunk";
64// src/utils.ts
65import createNextState, { isDraftable } from "immer";
66function getTimeMeasureUtils(maxDelay, fnName) {
67 let elapsed = 0;
68 return {
69 measureTime(fn) {
70 const started = Date.now();
71 try {
72 return fn();
73 }
74 finally {
75 const finished = Date.now();
76 elapsed += finished - started;
77 }
78 },
79 warnIfExceeded() {
80 if (elapsed > maxDelay) {
81 console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms.
82If 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.
83It is disabled in production builds, so you don't need to worry about that.`);
84 }
85 }
86 };
87}
88var MiddlewareArray = class extends Array {
89 constructor(...args) {
90 super(...args);
91 Object.setPrototypeOf(this, MiddlewareArray.prototype);
92 }
93 static get [Symbol.species]() {
94 return MiddlewareArray;
95 }
96 concat(...arr) {
97 return super.concat.apply(this, arr);
98 }
99 prepend(...arr) {
100 if (arr.length === 1 && Array.isArray(arr[0])) {
101 return new MiddlewareArray(...arr[0].concat(this));
102 }
103 return new MiddlewareArray(...arr.concat(this));
104 }
105};
106var EnhancerArray = class extends Array {
107 constructor(...args) {
108 super(...args);
109 Object.setPrototypeOf(this, EnhancerArray.prototype);
110 }
111 static get [Symbol.species]() {
112 return EnhancerArray;
113 }
114 concat(...arr) {
115 return super.concat.apply(this, arr);
116 }
117 prepend(...arr) {
118 if (arr.length === 1 && Array.isArray(arr[0])) {
119 return new EnhancerArray(...arr[0].concat(this));
120 }
121 return new EnhancerArray(...arr.concat(this));
122 }
123};
124function freezeDraftable(val) {
125 return isDraftable(val) ? createNextState(val, () => {
126 }) : val;
127}
128// src/immutableStateInvariantMiddleware.ts
129var isProduction = false;
130var prefix = "Invariant failed";
131function invariant(condition, message) {
132 if (condition) {
133 return;
134 }
135 if (isProduction) {
136 throw new Error(prefix);
137 }
138 throw new Error(`${prefix}: ${message || ""}`);
139}
140function stringify(obj, serializer, indent, decycler) {
141 return JSON.stringify(obj, getSerialize(serializer, decycler), indent);
142}
143function getSerialize(serializer, decycler) {
144 let stack = [], keys = [];
145 if (!decycler)
146 decycler = function (_, value) {
147 if (stack[0] === value)
148 return "[Circular ~]";
149 return "[Circular ~." + keys.slice(0, stack.indexOf(value)).join(".") + "]";
150 };
151 return function (key, value) {
152 if (stack.length > 0) {
153 var thisPos = stack.indexOf(this);
154 ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);
155 ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);
156 if (~stack.indexOf(value))
157 value = decycler.call(this, key, value);
158 }
159 else
160 stack.push(value);
161 return serializer == null ? value : serializer.call(this, key, value);
162 };
163}
164function isImmutableDefault(value) {
165 return typeof value !== "object" || value == null || Object.isFrozen(value);
166}
167function trackForMutations(isImmutable, ignorePaths, obj) {
168 const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);
169 return {
170 detectMutations() {
171 return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);
172 }
173 };
174}
175function trackProperties(isImmutable, ignorePaths = [], obj, path = "") {
176 const tracked = { value: obj };
177 if (!isImmutable(obj)) {
178 tracked.children = {};
179 for (const key in obj) {
180 const childPath = path ? path + "." + key : key;
181 if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {
182 continue;
183 }
184 tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);
185 }
186 }
187 return tracked;
188}
189function detectMutations(isImmutable, ignoredPaths = [], trackedProperty, obj, sameParentRef = false, path = "") {
190 const prevObj = trackedProperty ? trackedProperty.value : void 0;
191 const sameRef = prevObj === obj;
192 if (sameParentRef && !sameRef && !Number.isNaN(obj)) {
193 return { wasMutated: true, path };
194 }
195 if (isImmutable(prevObj) || isImmutable(obj)) {
196 return { wasMutated: false };
197 }
198 const keysToDetect = {};
199 for (let key in trackedProperty.children) {
200 keysToDetect[key] = true;
201 }
202 for (let key in obj) {
203 keysToDetect[key] = true;
204 }
205 const hasIgnoredPaths = ignoredPaths.length > 0;
206 for (let key in keysToDetect) {
207 const nestedPath = path ? path + "." + key : key;
208 if (hasIgnoredPaths) {
209 const hasMatches = ignoredPaths.some((ignored) => {
210 if (ignored instanceof RegExp) {
211 return ignored.test(nestedPath);
212 }
213 return nestedPath === ignored;
214 });
215 if (hasMatches) {
216 continue;
217 }
218 }
219 const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);
220 if (result.wasMutated) {
221 return result;
222 }
223 }
224 return { wasMutated: false };
225}
226function createImmutableStateInvariantMiddleware(options = {}) {
227 if (false) {
228 return () => (next) => (action) => next(action);
229 }
230 let { isImmutable = isImmutableDefault, ignoredPaths, warnAfter = 32, ignore } = options;
231 ignoredPaths = ignoredPaths || ignore;
232 const track = trackForMutations.bind(null, isImmutable, ignoredPaths);
233 return ({ getState }) => {
234 let state = getState();
235 let tracker = track(state);
236 let result;
237 return (next) => (action) => {
238 const measureUtils = getTimeMeasureUtils(warnAfter, "ImmutableStateInvariantMiddleware");
239 measureUtils.measureTime(() => {
240 state = getState();
241 result = tracker.detectMutations();
242 tracker = track(state);
243 invariant(!result.wasMutated, `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)`);
244 });
245 const dispatchedAction = next(action);
246 measureUtils.measureTime(() => {
247 state = getState();
248 result = tracker.detectMutations();
249 tracker = track(state);
250 result.wasMutated && invariant(!result.wasMutated, `A state mutation was detected inside a dispatch, in the path: ${result.path || ""}. Take a look at the reducer(s) handling the action ${stringify(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);
251 });
252 measureUtils.warnIfExceeded();
253 return dispatchedAction;
254 };
255 };
256}
257// src/serializableStateInvariantMiddleware.ts
258function isPlain(val) {
259 const type = typeof val;
260 return val == null || type === "string" || type === "boolean" || type === "number" || Array.isArray(val) || isPlainObject(val);
261}
262function findNonSerializableValue(value, path = "", isSerializable = isPlain, getEntries, ignoredPaths = [], cache) {
263 let foundNestedSerializable;
264 if (!isSerializable(value)) {
265 return {
266 keyPath: path || "<root>",
267 value
268 };
269 }
270 if (typeof value !== "object" || value === null) {
271 return false;
272 }
273 if (cache == null ? void 0 : cache.has(value))
274 return false;
275 const entries = getEntries != null ? getEntries(value) : Object.entries(value);
276 const hasIgnoredPaths = ignoredPaths.length > 0;
277 for (const [key, nestedValue] of entries) {
278 const nestedPath = path ? path + "." + key : key;
279 if (hasIgnoredPaths) {
280 const hasMatches = ignoredPaths.some((ignored) => {
281 if (ignored instanceof RegExp) {
282 return ignored.test(nestedPath);
283 }
284 return nestedPath === ignored;
285 });
286 if (hasMatches) {
287 continue;
288 }
289 }
290 if (!isSerializable(nestedValue)) {
291 return {
292 keyPath: nestedPath,
293 value: nestedValue
294 };
295 }
296 if (typeof nestedValue === "object") {
297 foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);
298 if (foundNestedSerializable) {
299 return foundNestedSerializable;
300 }
301 }
302 }
303 if (cache && isNestedFrozen(value))
304 cache.add(value);
305 return false;
306}
307function isNestedFrozen(value) {
308 if (!Object.isFrozen(value))
309 return false;
310 for (const nestedValue of Object.values(value)) {
311 if (typeof nestedValue !== "object" || nestedValue === null)
312 continue;
313 if (!isNestedFrozen(nestedValue))
314 return false;
315 }
316 return true;
317}
318function createSerializableStateInvariantMiddleware(options = {}) {
319 if (false) {
320 return () => (next) => (action) => next(action);
321 }
322 const { isSerializable = isPlain, getEntries, ignoredActions = [], ignoredActionPaths = ["meta.arg", "meta.baseQueryMeta"], ignoredPaths = [], warnAfter = 32, ignoreState = false, ignoreActions = false, disableCache = false } = options;
323 const cache = !disableCache && WeakSet ? new WeakSet() : void 0;
324 return (storeAPI) => (next) => (action) => {
325 const result = next(action);
326 const measureUtils = getTimeMeasureUtils(warnAfter, "SerializableStateInvariantMiddleware");
327 if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type) !== -1)) {
328 measureUtils.measureTime(() => {
329 const foundActionNonSerializableValue = findNonSerializableValue(action, "", isSerializable, getEntries, ignoredActionPaths, cache);
330 if (foundActionNonSerializableValue) {
331 const { keyPath, value } = foundActionNonSerializableValue;
332 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)");
333 }
334 });
335 }
336 if (!ignoreState) {
337 measureUtils.measureTime(() => {
338 const state = storeAPI.getState();
339 const foundStateNonSerializableValue = findNonSerializableValue(state, "", isSerializable, getEntries, ignoredPaths, cache);
340 if (foundStateNonSerializableValue) {
341 const { keyPath, value } = foundStateNonSerializableValue;
342 console.error(`A non-serializable value was detected in the state, in the path: \`${keyPath}\`. Value:`, value, `
343Take a look at the reducer(s) handling this action type: ${action.type}.
344(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);
345 }
346 });
347 measureUtils.warnIfExceeded();
348 }
349 return result;
350 };
351}
352// src/getDefaultMiddleware.ts
353function isBoolean(x) {
354 return typeof x === "boolean";
355}
356function curryGetDefaultMiddleware() {
357 return function curriedGetDefaultMiddleware(options) {
358 return getDefaultMiddleware(options);
359 };
360}
361function getDefaultMiddleware(options = {}) {
362 const { thunk = true, immutableCheck = true, serializableCheck = true } = options;
363 let middlewareArray = new MiddlewareArray();
364 if (thunk) {
365 if (isBoolean(thunk)) {
366 middlewareArray.push(thunkMiddleware);
367 }
368 else {
369 middlewareArray.push(thunkMiddleware.withExtraArgument(thunk.extraArgument));
370 }
371 }
372 if (true) {
373 if (immutableCheck) {
374 let immutableOptions = {};
375 if (!isBoolean(immutableCheck)) {
376 immutableOptions = immutableCheck;
377 }
378 middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));
379 }
380 if (serializableCheck) {
381 let serializableOptions = {};
382 if (!isBoolean(serializableCheck)) {
383 serializableOptions = serializableCheck;
384 }
385 middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));
386 }
387 }
388 return middlewareArray;
389}
390// src/configureStore.ts
391var IS_PRODUCTION = false;
392function configureStore(options) {
393 const curriedGetDefaultMiddleware = curryGetDefaultMiddleware();
394 const { reducer = void 0, middleware = curriedGetDefaultMiddleware(), devTools = true, preloadedState = void 0, enhancers = void 0 } = options || {};
395 let rootReducer;
396 if (typeof reducer === "function") {
397 rootReducer = reducer;
398 }
399 else if (isPlainObject(reducer)) {
400 rootReducer = combineReducers(reducer);
401 }
402 else {
403 throw new Error('"reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');
404 }
405 let finalMiddleware = middleware;
406 if (typeof finalMiddleware === "function") {
407 finalMiddleware = finalMiddleware(curriedGetDefaultMiddleware);
408 if (!IS_PRODUCTION && !Array.isArray(finalMiddleware)) {
409 throw new Error("when using a middleware builder function, an array of middleware must be returned");
410 }
411 }
412 if (!IS_PRODUCTION && finalMiddleware.some((item) => typeof item !== "function")) {
413 throw new Error("each middleware provided to configureStore must be a function");
414 }
415 const middlewareEnhancer = applyMiddleware(...finalMiddleware);
416 let finalCompose = compose2;
417 if (devTools) {
418 finalCompose = composeWithDevTools(__spreadValues({
419 trace: !IS_PRODUCTION
420 }, typeof devTools === "object" && devTools));
421 }
422 const defaultEnhancers = new EnhancerArray(middlewareEnhancer);
423 let storeEnhancers = defaultEnhancers;
424 if (Array.isArray(enhancers)) {
425 storeEnhancers = [middlewareEnhancer, ...enhancers];
426 }
427 else if (typeof enhancers === "function") {
428 storeEnhancers = enhancers(defaultEnhancers);
429 }
430 const composedEnhancer = finalCompose(...storeEnhancers);
431 return createStore(rootReducer, preloadedState, composedEnhancer);
432}
433// src/createAction.ts
434function createAction(type, prepareAction) {
435 function actionCreator(...args) {
436 if (prepareAction) {
437 let prepared = prepareAction(...args);
438 if (!prepared) {
439 throw new Error("prepareAction did not return an object");
440 }
441 return __spreadValues(__spreadValues({
442 type,
443 payload: prepared.payload
444 }, "meta" in prepared && { meta: prepared.meta }), "error" in prepared && { error: prepared.error });
445 }
446 return { type, payload: args[0] };
447 }
448 actionCreator.toString = () => `${type}`;
449 actionCreator.type = type;
450 actionCreator.match = (action) => action.type === type;
451 return actionCreator;
452}
453function isAction(action) {
454 return isPlainObject(action) && "type" in action;
455}
456function isFSA(action) {
457 return isAction(action) && typeof action.type === "string" && Object.keys(action).every(isValidKey);
458}
459function isValidKey(key) {
460 return ["type", "payload", "error", "meta"].indexOf(key) > -1;
461}
462function getType(actionCreator) {
463 return `${actionCreator}`;
464}
465// src/createReducer.ts
466import createNextState2, { isDraft as isDraft2, isDraftable as isDraftable2 } from "immer";
467// src/mapBuilders.ts
468function executeReducerBuilderCallback(builderCallback) {
469 const actionsMap = {};
470 const actionMatchers = [];
471 let defaultCaseReducer;
472 const builder = {
473 addCase(typeOrActionCreator, reducer) {
474 if (true) {
475 if (actionMatchers.length > 0) {
476 throw new Error("`builder.addCase` should only be called before calling `builder.addMatcher`");
477 }
478 if (defaultCaseReducer) {
479 throw new Error("`builder.addCase` should only be called before calling `builder.addDefaultCase`");
480 }
481 }
482 const type = typeof typeOrActionCreator === "string" ? typeOrActionCreator : typeOrActionCreator.type;
483 if (type in actionsMap) {
484 throw new Error("addCase cannot be called with two reducers for the same action type");
485 }
486 actionsMap[type] = reducer;
487 return builder;
488 },
489 addMatcher(matcher, reducer) {
490 if (true) {
491 if (defaultCaseReducer) {
492 throw new Error("`builder.addMatcher` should only be called before calling `builder.addDefaultCase`");
493 }
494 }
495 actionMatchers.push({ matcher, reducer });
496 return builder;
497 },
498 addDefaultCase(reducer) {
499 if (true) {
500 if (defaultCaseReducer) {
501 throw new Error("`builder.addDefaultCase` can only be called once");
502 }
503 }
504 defaultCaseReducer = reducer;
505 return builder;
506 }
507 };
508 builderCallback(builder);
509 return [actionsMap, actionMatchers, defaultCaseReducer];
510}
511// src/createReducer.ts
512function isStateFunction(x) {
513 return typeof x === "function";
514}
515var hasWarnedAboutObjectNotation = false;
516function createReducer(initialState, mapOrBuilderCallback, actionMatchers = [], defaultCaseReducer) {
517 if (true) {
518 if (typeof mapOrBuilderCallback === "object") {
519 if (!hasWarnedAboutObjectNotation) {
520 hasWarnedAboutObjectNotation = true;
521 console.warn("The object notation for `createReducer` is deprecated, and will be removed in RTK 2.0. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer");
522 }
523 }
524 }
525 let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = typeof mapOrBuilderCallback === "function" ? executeReducerBuilderCallback(mapOrBuilderCallback) : [mapOrBuilderCallback, actionMatchers, defaultCaseReducer];
526 let getInitialState;
527 if (isStateFunction(initialState)) {
528 getInitialState = () => freezeDraftable(initialState());
529 }
530 else {
531 const frozenInitialState = freezeDraftable(initialState);
532 getInitialState = () => frozenInitialState;
533 }
534 function reducer(state = getInitialState(), action) {
535 let caseReducers = [
536 actionsMap[action.type],
537 ...finalActionMatchers.filter(({ matcher }) => matcher(action)).map(({ reducer: reducer2 }) => reducer2)
538 ];
539 if (caseReducers.filter((cr) => !!cr).length === 0) {
540 caseReducers = [finalDefaultCaseReducer];
541 }
542 return caseReducers.reduce((previousState, caseReducer) => {
543 if (caseReducer) {
544 if (isDraft2(previousState)) {
545 const draft = previousState;
546 const result = caseReducer(draft, action);
547 if (result === void 0) {
548 return previousState;
549 }
550 return result;
551 }
552 else if (!isDraftable2(previousState)) {
553 const result = caseReducer(previousState, action);
554 if (result === void 0) {
555 if (previousState === null) {
556 return previousState;
557 }
558 throw Error("A case reducer on a non-draftable value must not return undefined");
559 }
560 return result;
561 }
562 else {
563 return createNextState2(previousState, (draft) => {
564 return caseReducer(draft, action);
565 });
566 }
567 }
568 return previousState;
569 }, state);
570 }
571 reducer.getInitialState = getInitialState;
572 return reducer;
573}
574// src/createSlice.ts
575var hasWarnedAboutObjectNotation2 = false;
576function getType2(slice, actionKey) {
577 return `${slice}/${actionKey}`;
578}
579function createSlice(options) {
580 const { name } = options;
581 if (!name) {
582 throw new Error("`name` is a required option for createSlice");
583 }
584 if (typeof process !== "undefined" && true) {
585 if (options.initialState === void 0) {
586 console.error("You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`");
587 }
588 }
589 const initialState = typeof options.initialState == "function" ? options.initialState : freezeDraftable(options.initialState);
590 const reducers = options.reducers || {};
591 const reducerNames = Object.keys(reducers);
592 const sliceCaseReducersByName = {};
593 const sliceCaseReducersByType = {};
594 const actionCreators = {};
595 reducerNames.forEach((reducerName) => {
596 const maybeReducerWithPrepare = reducers[reducerName];
597 const type = getType2(name, reducerName);
598 let caseReducer;
599 let prepareCallback;
600 if ("reducer" in maybeReducerWithPrepare) {
601 caseReducer = maybeReducerWithPrepare.reducer;
602 prepareCallback = maybeReducerWithPrepare.prepare;
603 }
604 else {
605 caseReducer = maybeReducerWithPrepare;
606 }
607 sliceCaseReducersByName[reducerName] = caseReducer;
608 sliceCaseReducersByType[type] = caseReducer;
609 actionCreators[reducerName] = prepareCallback ? createAction(type, prepareCallback) : createAction(type);
610 });
611 function buildReducer() {
612 if (true) {
613 if (typeof options.extraReducers === "object") {
614 if (!hasWarnedAboutObjectNotation2) {
615 hasWarnedAboutObjectNotation2 = true;
616 console.warn("The object notation for `createSlice.extraReducers` is deprecated, and will be removed in RTK 2.0. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice");
617 }
618 }
619 }
620 const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = void 0] = typeof options.extraReducers === "function" ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];
621 const finalCaseReducers = __spreadValues(__spreadValues({}, extraReducers), sliceCaseReducersByType);
622 return createReducer(initialState, (builder) => {
623 for (let key in finalCaseReducers) {
624 builder.addCase(key, finalCaseReducers[key]);
625 }
626 for (let m of actionMatchers) {
627 builder.addMatcher(m.matcher, m.reducer);
628 }
629 if (defaultCaseReducer) {
630 builder.addDefaultCase(defaultCaseReducer);
631 }
632 });
633 }
634 let _reducer;
635 return {
636 name,
637 reducer(state, action) {
638 if (!_reducer)
639 _reducer = buildReducer();
640 return _reducer(state, action);
641 },
642 actions: actionCreators,
643 caseReducers: sliceCaseReducersByName,
644 getInitialState() {
645 if (!_reducer)
646 _reducer = buildReducer();
647 return _reducer.getInitialState();
648 }
649 };
650}
651// src/entities/entity_state.ts
652function getInitialEntityState() {
653 return {
654 ids: [],
655 entities: {}
656 };
657}
658function createInitialStateFactory() {
659 function getInitialState(additionalState = {}) {
660 return Object.assign(getInitialEntityState(), additionalState);
661 }
662 return { getInitialState };
663}
664// src/entities/state_selectors.ts
665function createSelectorsFactory() {
666 function getSelectors(selectState) {
667 const selectIds = (state) => state.ids;
668 const selectEntities = (state) => state.entities;
669 const selectAll = createDraftSafeSelector(selectIds, selectEntities, (ids, entities) => ids.map((id) => entities[id]));
670 const selectId = (_, id) => id;
671 const selectById = (entities, id) => entities[id];
672 const selectTotal = createDraftSafeSelector(selectIds, (ids) => ids.length);
673 if (!selectState) {
674 return {
675 selectIds,
676 selectEntities,
677 selectAll,
678 selectTotal,
679 selectById: createDraftSafeSelector(selectEntities, selectId, selectById)
680 };
681 }
682 const selectGlobalizedEntities = createDraftSafeSelector(selectState, selectEntities);
683 return {
684 selectIds: createDraftSafeSelector(selectState, selectIds),
685 selectEntities: selectGlobalizedEntities,
686 selectAll: createDraftSafeSelector(selectState, selectAll),
687 selectTotal: createDraftSafeSelector(selectState, selectTotal),
688 selectById: createDraftSafeSelector(selectGlobalizedEntities, selectId, selectById)
689 };
690 }
691 return { getSelectors };
692}
693// src/entities/state_adapter.ts
694import createNextState3, { isDraft as isDraft3 } from "immer";
695function createSingleArgumentStateOperator(mutator) {
696 const operator = createStateOperator((_, state) => mutator(state));
697 return function operation(state) {
698 return operator(state, void 0);
699 };
700}
701function createStateOperator(mutator) {
702 return function operation(state, arg) {
703 function isPayloadActionArgument(arg2) {
704 return isFSA(arg2);
705 }
706 const runMutator = (draft) => {
707 if (isPayloadActionArgument(arg)) {
708 mutator(arg.payload, draft);
709 }
710 else {
711 mutator(arg, draft);
712 }
713 };
714 if (isDraft3(state)) {
715 runMutator(state);
716 return state;
717 }
718 else {
719 return createNextState3(state, runMutator);
720 }
721 };
722}
723// src/entities/utils.ts
724function selectIdValue(entity, selectId) {
725 const key = selectId(entity);
726 if (key === void 0) {
727 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());
728 }
729 return key;
730}
731function ensureEntitiesArray(entities) {
732 if (!Array.isArray(entities)) {
733 entities = Object.values(entities);
734 }
735 return entities;
736}
737function splitAddedUpdatedEntities(newEntities, selectId, state) {
738 newEntities = ensureEntitiesArray(newEntities);
739 const added = [];
740 const updated = [];
741 for (const entity of newEntities) {
742 const id = selectIdValue(entity, selectId);
743 if (id in state.entities) {
744 updated.push({ id, changes: entity });
745 }
746 else {
747 added.push(entity);
748 }
749 }
750 return [added, updated];
751}
752// src/entities/unsorted_state_adapter.ts
753function createUnsortedStateAdapter(selectId) {
754 function addOneMutably(entity, state) {
755 const key = selectIdValue(entity, selectId);
756 if (key in state.entities) {
757 return;
758 }
759 state.ids.push(key);
760 state.entities[key] = entity;
761 }
762 function addManyMutably(newEntities, state) {
763 newEntities = ensureEntitiesArray(newEntities);
764 for (const entity of newEntities) {
765 addOneMutably(entity, state);
766 }
767 }
768 function setOneMutably(entity, state) {
769 const key = selectIdValue(entity, selectId);
770 if (!(key in state.entities)) {
771 state.ids.push(key);
772 }
773 state.entities[key] = entity;
774 }
775 function setManyMutably(newEntities, state) {
776 newEntities = ensureEntitiesArray(newEntities);
777 for (const entity of newEntities) {
778 setOneMutably(entity, state);
779 }
780 }
781 function setAllMutably(newEntities, state) {
782 newEntities = ensureEntitiesArray(newEntities);
783 state.ids = [];
784 state.entities = {};
785 addManyMutably(newEntities, state);
786 }
787 function removeOneMutably(key, state) {
788 return removeManyMutably([key], state);
789 }
790 function removeManyMutably(keys, state) {
791 let didMutate = false;
792 keys.forEach((key) => {
793 if (key in state.entities) {
794 delete state.entities[key];
795 didMutate = true;
796 }
797 });
798 if (didMutate) {
799 state.ids = state.ids.filter((id) => id in state.entities);
800 }
801 }
802 function removeAllMutably(state) {
803 Object.assign(state, {
804 ids: [],
805 entities: {}
806 });
807 }
808 function takeNewKey(keys, update, state) {
809 const original2 = state.entities[update.id];
810 const updated = Object.assign({}, original2, update.changes);
811 const newKey = selectIdValue(updated, selectId);
812 const hasNewKey = newKey !== update.id;
813 if (hasNewKey) {
814 keys[update.id] = newKey;
815 delete state.entities[update.id];
816 }
817 state.entities[newKey] = updated;
818 return hasNewKey;
819 }
820 function updateOneMutably(update, state) {
821 return updateManyMutably([update], state);
822 }
823 function updateManyMutably(updates, state) {
824 const newKeys = {};
825 const updatesPerEntity = {};
826 updates.forEach((update) => {
827 if (update.id in state.entities) {
828 updatesPerEntity[update.id] = {
829 id: update.id,
830 changes: __spreadValues(__spreadValues({}, updatesPerEntity[update.id] ? updatesPerEntity[update.id].changes : null), update.changes)
831 };
832 }
833 });
834 updates = Object.values(updatesPerEntity);
835 const didMutateEntities = updates.length > 0;
836 if (didMutateEntities) {
837 const didMutateIds = updates.filter((update) => takeNewKey(newKeys, update, state)).length > 0;
838 if (didMutateIds) {
839 state.ids = Object.keys(state.entities);
840 }
841 }
842 }
843 function upsertOneMutably(entity, state) {
844 return upsertManyMutably([entity], state);
845 }
846 function upsertManyMutably(newEntities, state) {
847 const [added, updated] = splitAddedUpdatedEntities(newEntities, selectId, state);
848 updateManyMutably(updated, state);
849 addManyMutably(added, state);
850 }
851 return {
852 removeAll: createSingleArgumentStateOperator(removeAllMutably),
853 addOne: createStateOperator(addOneMutably),
854 addMany: createStateOperator(addManyMutably),
855 setOne: createStateOperator(setOneMutably),
856 setMany: createStateOperator(setManyMutably),
857 setAll: createStateOperator(setAllMutably),
858 updateOne: createStateOperator(updateOneMutably),
859 updateMany: createStateOperator(updateManyMutably),
860 upsertOne: createStateOperator(upsertOneMutably),
861 upsertMany: createStateOperator(upsertManyMutably),
862 removeOne: createStateOperator(removeOneMutably),
863 removeMany: createStateOperator(removeManyMutably)
864 };
865}
866// src/entities/sorted_state_adapter.ts
867function createSortedStateAdapter(selectId, sort) {
868 const { removeOne, removeMany, removeAll } = createUnsortedStateAdapter(selectId);
869 function addOneMutably(entity, state) {
870 return addManyMutably([entity], state);
871 }
872 function addManyMutably(newEntities, state) {
873 newEntities = ensureEntitiesArray(newEntities);
874 const models = newEntities.filter((model) => !(selectIdValue(model, selectId) in state.entities));
875 if (models.length !== 0) {
876 merge(models, state);
877 }
878 }
879 function setOneMutably(entity, state) {
880 return setManyMutably([entity], state);
881 }
882 function setManyMutably(newEntities, state) {
883 newEntities = ensureEntitiesArray(newEntities);
884 if (newEntities.length !== 0) {
885 merge(newEntities, state);
886 }
887 }
888 function setAllMutably(newEntities, state) {
889 newEntities = ensureEntitiesArray(newEntities);
890 state.entities = {};
891 state.ids = [];
892 addManyMutably(newEntities, state);
893 }
894 function updateOneMutably(update, state) {
895 return updateManyMutably([update], state);
896 }
897 function updateManyMutably(updates, state) {
898 let appliedUpdates = false;
899 for (let update of updates) {
900 const entity = state.entities[update.id];
901 if (!entity) {
902 continue;
903 }
904 appliedUpdates = true;
905 Object.assign(entity, update.changes);
906 const newId = selectId(entity);
907 if (update.id !== newId) {
908 delete state.entities[update.id];
909 state.entities[newId] = entity;
910 }
911 }
912 if (appliedUpdates) {
913 resortEntities(state);
914 }
915 }
916 function upsertOneMutably(entity, state) {
917 return upsertManyMutably([entity], state);
918 }
919 function upsertManyMutably(newEntities, state) {
920 const [added, updated] = splitAddedUpdatedEntities(newEntities, selectId, state);
921 updateManyMutably(updated, state);
922 addManyMutably(added, state);
923 }
924 function areArraysEqual(a, b) {
925 if (a.length !== b.length) {
926 return false;
927 }
928 for (let i = 0; i < a.length && i < b.length; i++) {
929 if (a[i] === b[i]) {
930 continue;
931 }
932 return false;
933 }
934 return true;
935 }
936 function merge(models, state) {
937 models.forEach((model) => {
938 state.entities[selectId(model)] = model;
939 });
940 resortEntities(state);
941 }
942 function resortEntities(state) {
943 const allEntities = Object.values(state.entities);
944 allEntities.sort(sort);
945 const newSortedIds = allEntities.map(selectId);
946 const { ids } = state;
947 if (!areArraysEqual(ids, newSortedIds)) {
948 state.ids = newSortedIds;
949 }
950 }
951 return {
952 removeOne,
953 removeMany,
954 removeAll,
955 addOne: createStateOperator(addOneMutably),
956 updateOne: createStateOperator(updateOneMutably),
957 upsertOne: createStateOperator(upsertOneMutably),
958 setOne: createStateOperator(setOneMutably),
959 setMany: createStateOperator(setManyMutably),
960 setAll: createStateOperator(setAllMutably),
961 addMany: createStateOperator(addManyMutably),
962 updateMany: createStateOperator(updateManyMutably),
963 upsertMany: createStateOperator(upsertManyMutably)
964 };
965}
966// src/entities/create_adapter.ts
967function createEntityAdapter(options = {}) {
968 const { selectId, sortComparer } = __spreadValues({
969 sortComparer: false,
970 selectId: (instance) => instance.id
971 }, options);
972 const stateFactory = createInitialStateFactory();
973 const selectorsFactory = createSelectorsFactory();
974 const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);
975 return __spreadValues(__spreadValues(__spreadValues({
976 selectId,
977 sortComparer
978 }, stateFactory), selectorsFactory), stateAdapter);
979}
980// src/nanoid.ts
981var urlAlphabet = "ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW";
982var nanoid = (size = 21) => {
983 let id = "";
984 let i = size;
985 while (i--) {
986 id += urlAlphabet[Math.random() * 64 | 0];
987 }
988 return id;
989};
990// src/createAsyncThunk.ts
991var commonProperties = [
992 "name",
993 "message",
994 "stack",
995 "code"
996];
997var RejectWithValue = class {
998 constructor(payload, meta) {
999 this.payload = payload;
1000 this.meta = meta;
1001 }
1002};
1003var FulfillWithMeta = class {
1004 constructor(payload, meta) {
1005 this.payload = payload;
1006 this.meta = meta;
1007 }
1008};
1009var miniSerializeError = (value) => {
1010 if (typeof value === "object" && value !== null) {
1011 const simpleError = {};
1012 for (const property of commonProperties) {
1013 if (typeof value[property] === "string") {
1014 simpleError[property] = value[property];
1015 }
1016 }
1017 return simpleError;
1018 }
1019 return { message: String(value) };
1020};
1021var createAsyncThunk = (() => {
1022 function createAsyncThunk2(typePrefix, payloadCreator, options) {
1023 const fulfilled = createAction(typePrefix + "/fulfilled", (payload, requestId, arg, meta) => ({
1024 payload,
1025 meta: __spreadProps(__spreadValues({}, meta || {}), {
1026 arg,
1027 requestId,
1028 requestStatus: "fulfilled"
1029 })
1030 }));
1031 const pending = createAction(typePrefix + "/pending", (requestId, arg, meta) => ({
1032 payload: void 0,
1033 meta: __spreadProps(__spreadValues({}, meta || {}), {
1034 arg,
1035 requestId,
1036 requestStatus: "pending"
1037 })
1038 }));
1039 const rejected = createAction(typePrefix + "/rejected", (error, requestId, arg, payload, meta) => ({
1040 payload,
1041 error: (options && options.serializeError || miniSerializeError)(error || "Rejected"),
1042 meta: __spreadProps(__spreadValues({}, meta || {}), {
1043 arg,
1044 requestId,
1045 rejectedWithValue: !!payload,
1046 requestStatus: "rejected",
1047 aborted: (error == null ? void 0 : error.name) === "AbortError",
1048 condition: (error == null ? void 0 : error.name) === "ConditionError"
1049 })
1050 }));
1051 let displayedWarning = false;
1052 const AC = typeof AbortController !== "undefined" ? AbortController : class {
1053 constructor() {
1054 this.signal = {
1055 aborted: false,
1056 addEventListener() {
1057 },
1058 dispatchEvent() {
1059 return false;
1060 },
1061 onabort() {
1062 },
1063 removeEventListener() {
1064 },
1065 reason: void 0,
1066 throwIfAborted() {
1067 }
1068 };
1069 }
1070 abort() {
1071 if (true) {
1072 if (!displayedWarning) {
1073 displayedWarning = true;
1074 console.info(`This platform does not implement AbortController.
1075If you want to use the AbortController to react to \`abort\` events, please consider importing a polyfill like 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only'.`);
1076 }
1077 }
1078 }
1079 };
1080 function actionCreator(arg) {
1081 return (dispatch, getState, extra) => {
1082 const requestId = (options == null ? void 0 : options.idGenerator) ? options.idGenerator(arg) : nanoid();
1083 const abortController = new AC();
1084 let abortReason;
1085 let started = false;
1086 function abort(reason) {
1087 abortReason = reason;
1088 abortController.abort();
1089 }
1090 const promise2 = async function () {
1091 var _a, _b;
1092 let finalAction;
1093 try {
1094 let conditionResult = (_a = options == null ? void 0 : options.condition) == null ? void 0 : _a.call(options, arg, { getState, extra });
1095 if (isThenable(conditionResult)) {
1096 conditionResult = await conditionResult;
1097 }
1098 if (conditionResult === false || abortController.signal.aborted) {
1099 throw {
1100 name: "ConditionError",
1101 message: "Aborted due to condition callback returning false."
1102 };
1103 }
1104 started = true;
1105 const abortedPromise = new Promise((_, reject) => abortController.signal.addEventListener("abort", () => reject({
1106 name: "AbortError",
1107 message: abortReason || "Aborted"
1108 })));
1109 dispatch(pending(requestId, arg, (_b = options == null ? void 0 : options.getPendingMeta) == null ? void 0 : _b.call(options, { requestId, arg }, { getState, extra })));
1110 finalAction = await Promise.race([
1111 abortedPromise,
1112 Promise.resolve(payloadCreator(arg, {
1113 dispatch,
1114 getState,
1115 extra,
1116 requestId,
1117 signal: abortController.signal,
1118 abort,
1119 rejectWithValue: (value, meta) => {
1120 return new RejectWithValue(value, meta);
1121 },
1122 fulfillWithValue: (value, meta) => {
1123 return new FulfillWithMeta(value, meta);
1124 }
1125 })).then((result) => {
1126 if (result instanceof RejectWithValue) {
1127 throw result;
1128 }
1129 if (result instanceof FulfillWithMeta) {
1130 return fulfilled(result.payload, requestId, arg, result.meta);
1131 }
1132 return fulfilled(result, requestId, arg);
1133 })
1134 ]);
1135 }
1136 catch (err) {
1137 finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err, requestId, arg);
1138 }
1139 const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && finalAction.meta.condition;
1140 if (!skipDispatch) {
1141 dispatch(finalAction);
1142 }
1143 return finalAction;
1144 }();
1145 return Object.assign(promise2, {
1146 abort,
1147 requestId,
1148 arg,
1149 unwrap() {
1150 return promise2.then(unwrapResult);
1151 }
1152 });
1153 };
1154 }
1155 return Object.assign(actionCreator, {
1156 pending,
1157 rejected,
1158 fulfilled,
1159 typePrefix
1160 });
1161 }
1162 createAsyncThunk2.withTypes = () => createAsyncThunk2;
1163 return createAsyncThunk2;
1164})();
1165function unwrapResult(action) {
1166 if (action.meta && action.meta.rejectedWithValue) {
1167 throw action.payload;
1168 }
1169 if (action.error) {
1170 throw action.error;
1171 }
1172 return action.payload;
1173}
1174function isThenable(value) {
1175 return value !== null && typeof value === "object" && typeof value.then === "function";
1176}
1177// src/tsHelpers.ts
1178var hasMatchFunction = (v) => {
1179 return v && typeof v.match === "function";
1180};
1181// src/matchers.ts
1182var matches = (matcher, action) => {
1183 if (hasMatchFunction(matcher)) {
1184 return matcher.match(action);
1185 }
1186 else {
1187 return matcher(action);
1188 }
1189};
1190function isAnyOf(...matchers) {
1191 return (action) => {
1192 return matchers.some((matcher) => matches(matcher, action));
1193 };
1194}
1195function isAllOf(...matchers) {
1196 return (action) => {
1197 return matchers.every((matcher) => matches(matcher, action));
1198 };
1199}
1200function hasExpectedRequestMetadata(action, validStatus) {
1201 if (!action || !action.meta)
1202 return false;
1203 const hasValidRequestId = typeof action.meta.requestId === "string";
1204 const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;
1205 return hasValidRequestId && hasValidRequestStatus;
1206}
1207function isAsyncThunkArray(a) {
1208 return typeof a[0] === "function" && "pending" in a[0] && "fulfilled" in a[0] && "rejected" in a[0];
1209}
1210function isPending(...asyncThunks) {
1211 if (asyncThunks.length === 0) {
1212 return (action) => hasExpectedRequestMetadata(action, ["pending"]);
1213 }
1214 if (!isAsyncThunkArray(asyncThunks)) {
1215 return isPending()(asyncThunks[0]);
1216 }
1217 return (action) => {
1218 const matchers = asyncThunks.map((asyncThunk) => asyncThunk.pending);
1219 const combinedMatcher = isAnyOf(...matchers);
1220 return combinedMatcher(action);
1221 };
1222}
1223function isRejected(...asyncThunks) {
1224 if (asyncThunks.length === 0) {
1225 return (action) => hasExpectedRequestMetadata(action, ["rejected"]);
1226 }
1227 if (!isAsyncThunkArray(asyncThunks)) {
1228 return isRejected()(asyncThunks[0]);
1229 }
1230 return (action) => {
1231 const matchers = asyncThunks.map((asyncThunk) => asyncThunk.rejected);
1232 const combinedMatcher = isAnyOf(...matchers);
1233 return combinedMatcher(action);
1234 };
1235}
1236function isRejectedWithValue(...asyncThunks) {
1237 const hasFlag = (action) => {
1238 return action && action.meta && action.meta.rejectedWithValue;
1239 };
1240 if (asyncThunks.length === 0) {
1241 return (action) => {
1242 const combinedMatcher = isAllOf(isRejected(...asyncThunks), hasFlag);
1243 return combinedMatcher(action);
1244 };
1245 }
1246 if (!isAsyncThunkArray(asyncThunks)) {
1247 return isRejectedWithValue()(asyncThunks[0]);
1248 }
1249 return (action) => {
1250 const combinedMatcher = isAllOf(isRejected(...asyncThunks), hasFlag);
1251 return combinedMatcher(action);
1252 };
1253}
1254function isFulfilled(...asyncThunks) {
1255 if (asyncThunks.length === 0) {
1256 return (action) => hasExpectedRequestMetadata(action, ["fulfilled"]);
1257 }
1258 if (!isAsyncThunkArray(asyncThunks)) {
1259 return isFulfilled()(asyncThunks[0]);
1260 }
1261 return (action) => {
1262 const matchers = asyncThunks.map((asyncThunk) => asyncThunk.fulfilled);
1263 const combinedMatcher = isAnyOf(...matchers);
1264 return combinedMatcher(action);
1265 };
1266}
1267function isAsyncThunkAction(...asyncThunks) {
1268 if (asyncThunks.length === 0) {
1269 return (action) => hasExpectedRequestMetadata(action, ["pending", "fulfilled", "rejected"]);
1270 }
1271 if (!isAsyncThunkArray(asyncThunks)) {
1272 return isAsyncThunkAction()(asyncThunks[0]);
1273 }
1274 return (action) => {
1275 const matchers = [];
1276 for (const asyncThunk of asyncThunks) {
1277 matchers.push(asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled);
1278 }
1279 const combinedMatcher = isAnyOf(...matchers);
1280 return combinedMatcher(action);
1281 };
1282}
1283// src/listenerMiddleware/utils.ts
1284var assertFunction = (func, expected) => {
1285 if (typeof func !== "function") {
1286 throw new TypeError(`${expected} is not a function`);
1287 }
1288};
1289var noop = () => {
1290};
1291var catchRejection = (promise2, onError = noop) => {
1292 promise2.catch(onError);
1293 return promise2;
1294};
1295var addAbortSignalListener = (abortSignal, callback) => {
1296 abortSignal.addEventListener("abort", callback, { once: true });
1297 return () => abortSignal.removeEventListener("abort", callback);
1298};
1299var abortControllerWithReason = (abortController, reason) => {
1300 const signal = abortController.signal;
1301 if (signal.aborted) {
1302 return;
1303 }
1304 if (!("reason" in signal)) {
1305 Object.defineProperty(signal, "reason", {
1306 enumerable: true,
1307 value: reason,
1308 configurable: true,
1309 writable: true
1310 });
1311 }
1312 ;
1313 abortController.abort(reason);
1314};
1315// src/listenerMiddleware/exceptions.ts
1316var task = "task";
1317var listener = "listener";
1318var completed = "completed";
1319var cancelled = "cancelled";
1320var taskCancelled = `task-${cancelled}`;
1321var taskCompleted = `task-${completed}`;
1322var listenerCancelled = `${listener}-${cancelled}`;
1323var listenerCompleted = `${listener}-${completed}`;
1324var TaskAbortError = class {
1325 constructor(code) {
1326 this.code = code;
1327 this.name = "TaskAbortError";
1328 this.message = `${task} ${cancelled} (reason: ${code})`;
1329 }
1330};
1331// src/listenerMiddleware/task.ts
1332var validateActive = (signal) => {
1333 if (signal.aborted) {
1334 throw new TaskAbortError(signal.reason);
1335 }
1336};
1337function raceWithSignal(signal, promise2) {
1338 let cleanup = noop;
1339 return new Promise((resolve, reject) => {
1340 const notifyRejection = () => reject(new TaskAbortError(signal.reason));
1341 if (signal.aborted) {
1342 notifyRejection();
1343 return;
1344 }
1345 cleanup = addAbortSignalListener(signal, notifyRejection);
1346 promise2.finally(() => cleanup()).then(resolve, reject);
1347 }).finally(() => {
1348 cleanup = noop;
1349 });
1350}
1351var runTask = async (task2, cleanUp) => {
1352 try {
1353 await Promise.resolve();
1354 const value = await task2();
1355 return {
1356 status: "ok",
1357 value
1358 };
1359 }
1360 catch (error) {
1361 return {
1362 status: error instanceof TaskAbortError ? "cancelled" : "rejected",
1363 error
1364 };
1365 }
1366 finally {
1367 cleanUp == null ? void 0 : cleanUp();
1368 }
1369};
1370var createPause = (signal) => {
1371 return (promise2) => {
1372 return catchRejection(raceWithSignal(signal, promise2).then((output) => {
1373 validateActive(signal);
1374 return output;
1375 }));
1376 };
1377};
1378var createDelay = (signal) => {
1379 const pause = createPause(signal);
1380 return (timeoutMs) => {
1381 return pause(new Promise((resolve) => setTimeout(resolve, timeoutMs)));
1382 };
1383};
1384// src/listenerMiddleware/index.ts
1385var { assign } = Object;
1386var INTERNAL_NIL_TOKEN = {};
1387var alm = "listenerMiddleware";
1388var createFork = (parentAbortSignal) => {
1389 const linkControllers = (controller) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));
1390 return (taskExecutor) => {
1391 assertFunction(taskExecutor, "taskExecutor");
1392 const childAbortController = new AbortController();
1393 linkControllers(childAbortController);
1394 const result = runTask(async () => {
1395 validateActive(parentAbortSignal);
1396 validateActive(childAbortController.signal);
1397 const result2 = await taskExecutor({
1398 pause: createPause(childAbortController.signal),
1399 delay: createDelay(childAbortController.signal),
1400 signal: childAbortController.signal
1401 });
1402 validateActive(childAbortController.signal);
1403 return result2;
1404 }, () => abortControllerWithReason(childAbortController, taskCompleted));
1405 return {
1406 result: createPause(parentAbortSignal)(result),
1407 cancel() {
1408 abortControllerWithReason(childAbortController, taskCancelled);
1409 }
1410 };
1411 };
1412};
1413var createTakePattern = (startListening, signal) => {
1414 const take = async (predicate, timeout) => {
1415 validateActive(signal);
1416 let unsubscribe = () => {
1417 };
1418 const tuplePromise = new Promise((resolve, reject) => {
1419 let stopListening = startListening({
1420 predicate,
1421 effect: (action, listenerApi) => {
1422 listenerApi.unsubscribe();
1423 resolve([
1424 action,
1425 listenerApi.getState(),
1426 listenerApi.getOriginalState()
1427 ]);
1428 }
1429 });
1430 unsubscribe = () => {
1431 stopListening();
1432 reject();
1433 };
1434 });
1435 const promises = [
1436 tuplePromise
1437 ];
1438 if (timeout != null) {
1439 promises.push(new Promise((resolve) => setTimeout(resolve, timeout, null)));
1440 }
1441 try {
1442 const output = await raceWithSignal(signal, Promise.race(promises));
1443 validateActive(signal);
1444 return output;
1445 }
1446 finally {
1447 unsubscribe();
1448 }
1449 };
1450 return (predicate, timeout) => catchRejection(take(predicate, timeout));
1451};
1452var getListenerEntryPropsFrom = (options) => {
1453 let { type, actionCreator, matcher, predicate, effect } = options;
1454 if (type) {
1455 predicate = createAction(type).match;
1456 }
1457 else if (actionCreator) {
1458 type = actionCreator.type;
1459 predicate = actionCreator.match;
1460 }
1461 else if (matcher) {
1462 predicate = matcher;
1463 }
1464 else if (predicate) {
1465 }
1466 else {
1467 throw new Error("Creating or removing a listener requires one of the known fields for matching an action");
1468 }
1469 assertFunction(effect, "options.listener");
1470 return { predicate, type, effect };
1471};
1472var createListenerEntry = (options) => {
1473 const { type, predicate, effect } = getListenerEntryPropsFrom(options);
1474 const id = nanoid();
1475 const entry = {
1476 id,
1477 effect,
1478 type,
1479 predicate,
1480 pending: new Set(),
1481 unsubscribe: () => {
1482 throw new Error("Unsubscribe not initialized");
1483 }
1484 };
1485 return entry;
1486};
1487var cancelActiveListeners = (entry) => {
1488 entry.pending.forEach((controller) => {
1489 abortControllerWithReason(controller, listenerCancelled);
1490 });
1491};
1492var createClearListenerMiddleware = (listenerMap) => {
1493 return () => {
1494 listenerMap.forEach(cancelActiveListeners);
1495 listenerMap.clear();
1496 };
1497};
1498var safelyNotifyError = (errorHandler, errorToNotify, errorInfo) => {
1499 try {
1500 errorHandler(errorToNotify, errorInfo);
1501 }
1502 catch (errorHandlerError) {
1503 setTimeout(() => {
1504 throw errorHandlerError;
1505 }, 0);
1506 }
1507};
1508var addListener = createAction(`${alm}/add`);
1509var clearAllListeners = createAction(`${alm}/removeAll`);
1510var removeListener = createAction(`${alm}/remove`);
1511var defaultErrorHandler = (...args) => {
1512 console.error(`${alm}/error`, ...args);
1513};
1514function createListenerMiddleware(middlewareOptions = {}) {
1515 const listenerMap = new Map();
1516 const { extra, onError = defaultErrorHandler } = middlewareOptions;
1517 assertFunction(onError, "onError");
1518 const insertEntry = (entry) => {
1519 entry.unsubscribe = () => listenerMap.delete(entry.id);
1520 listenerMap.set(entry.id, entry);
1521 return (cancelOptions) => {
1522 entry.unsubscribe();
1523 if (cancelOptions == null ? void 0 : cancelOptions.cancelActive) {
1524 cancelActiveListeners(entry);
1525 }
1526 };
1527 };
1528 const findListenerEntry = (comparator) => {
1529 for (const entry of Array.from(listenerMap.values())) {
1530 if (comparator(entry)) {
1531 return entry;
1532 }
1533 }
1534 return void 0;
1535 };
1536 const startListening = (options) => {
1537 let entry = findListenerEntry((existingEntry) => existingEntry.effect === options.effect);
1538 if (!entry) {
1539 entry = createListenerEntry(options);
1540 }
1541 return insertEntry(entry);
1542 };
1543 const stopListening = (options) => {
1544 const { type, effect, predicate } = getListenerEntryPropsFrom(options);
1545 const entry = findListenerEntry((entry2) => {
1546 const matchPredicateOrType = typeof type === "string" ? entry2.type === type : entry2.predicate === predicate;
1547 return matchPredicateOrType && entry2.effect === effect;
1548 });
1549 if (entry) {
1550 entry.unsubscribe();
1551 if (options.cancelActive) {
1552 cancelActiveListeners(entry);
1553 }
1554 }
1555 return !!entry;
1556 };
1557 const notifyListener = async (entry, action, api, getOriginalState) => {
1558 const internalTaskController = new AbortController();
1559 const take = createTakePattern(startListening, internalTaskController.signal);
1560 try {
1561 entry.pending.add(internalTaskController);
1562 await Promise.resolve(entry.effect(action, assign({}, api, {
1563 getOriginalState,
1564 condition: (predicate, timeout) => take(predicate, timeout).then(Boolean),
1565 take,
1566 delay: createDelay(internalTaskController.signal),
1567 pause: createPause(internalTaskController.signal),
1568 extra,
1569 signal: internalTaskController.signal,
1570 fork: createFork(internalTaskController.signal),
1571 unsubscribe: entry.unsubscribe,
1572 subscribe: () => {
1573 listenerMap.set(entry.id, entry);
1574 },
1575 cancelActiveListeners: () => {
1576 entry.pending.forEach((controller, _, set) => {
1577 if (controller !== internalTaskController) {
1578 abortControllerWithReason(controller, listenerCancelled);
1579 set.delete(controller);
1580 }
1581 });
1582 }
1583 })));
1584 }
1585 catch (listenerError) {
1586 if (!(listenerError instanceof TaskAbortError)) {
1587 safelyNotifyError(onError, listenerError, {
1588 raisedBy: "effect"
1589 });
1590 }
1591 }
1592 finally {
1593 abortControllerWithReason(internalTaskController, listenerCompleted);
1594 entry.pending.delete(internalTaskController);
1595 }
1596 };
1597 const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);
1598 const middleware = (api) => (next) => (action) => {
1599 if (!isAction(action)) {
1600 return next(action);
1601 }
1602 if (addListener.match(action)) {
1603 return startListening(action.payload);
1604 }
1605 if (clearAllListeners.match(action)) {
1606 clearListenerMiddleware();
1607 return;
1608 }
1609 if (removeListener.match(action)) {
1610 return stopListening(action.payload);
1611 }
1612 let originalState = api.getState();
1613 const getOriginalState = () => {
1614 if (originalState === INTERNAL_NIL_TOKEN) {
1615 throw new Error(`${alm}: getOriginalState can only be called synchronously`);
1616 }
1617 return originalState;
1618 };
1619 let result;
1620 try {
1621 result = next(action);
1622 if (listenerMap.size > 0) {
1623 let currentState = api.getState();
1624 const listenerEntries = Array.from(listenerMap.values());
1625 for (let entry of listenerEntries) {
1626 let runListener = false;
1627 try {
1628 runListener = entry.predicate(action, currentState, originalState);
1629 }
1630 catch (predicateError) {
1631 runListener = false;
1632 safelyNotifyError(onError, predicateError, {
1633 raisedBy: "predicate"
1634 });
1635 }
1636 if (!runListener) {
1637 continue;
1638 }
1639 notifyListener(entry, action, api, getOriginalState);
1640 }
1641 }
1642 }
1643 finally {
1644 originalState = INTERNAL_NIL_TOKEN;
1645 }
1646 return result;
1647 };
1648 return {
1649 middleware,
1650 startListening,
1651 stopListening,
1652 clearListeners: clearListenerMiddleware
1653 };
1654}
1655// src/autoBatchEnhancer.ts
1656var SHOULD_AUTOBATCH = "RTK_autoBatch";
1657var prepareAutoBatched = () => (payload) => ({
1658 payload,
1659 meta: { [SHOULD_AUTOBATCH]: true }
1660});
1661var promise;
1662var queueMicrotaskShim = typeof queueMicrotask === "function" ? queueMicrotask.bind(typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : globalThis) : (cb) => (promise || (promise = Promise.resolve())).then(cb).catch((err) => setTimeout(() => {
1663 throw err;
1664}, 0));
1665var createQueueWithTimer = (timeout) => {
1666 return (notify) => {
1667 setTimeout(notify, timeout);
1668 };
1669};
1670var rAF = typeof window !== "undefined" && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10);
1671var autoBatchEnhancer = (options = { type: "raf" }) => (next) => (...args) => {
1672 const store = next(...args);
1673 let notifying = true;
1674 let shouldNotifyAtEndOfTick = false;
1675 let notificationQueued = false;
1676 const listeners = new Set();
1677 const queueCallback = options.type === "tick" ? queueMicrotaskShim : options.type === "raf" ? rAF : options.type === "callback" ? options.queueNotification : createQueueWithTimer(options.timeout);
1678 const notifyListeners = () => {
1679 notificationQueued = false;
1680 if (shouldNotifyAtEndOfTick) {
1681 shouldNotifyAtEndOfTick = false;
1682 listeners.forEach((l) => l());
1683 }
1684 };
1685 return Object.assign({}, store, {
1686 subscribe(listener2) {
1687 const wrappedListener = () => notifying && listener2();
1688 const unsubscribe = store.subscribe(wrappedListener);
1689 listeners.add(listener2);
1690 return () => {
1691 unsubscribe();
1692 listeners.delete(listener2);
1693 };
1694 },
1695 dispatch(action) {
1696 var _a;
1697 try {
1698 notifying = !((_a = action == null ? void 0 : action.meta) == null ? void 0 : _a[SHOULD_AUTOBATCH]);
1699 shouldNotifyAtEndOfTick = !notifying;
1700 if (shouldNotifyAtEndOfTick) {
1701 if (!notificationQueued) {
1702 notificationQueued = true;
1703 queueCallback(notifyListeners);
1704 }
1705 }
1706 return store.dispatch(action);
1707 }
1708 finally {
1709 notifying = true;
1710 }
1711 }
1712 });
1713};
1714// src/index.ts
1715enableES5();
1716export { EnhancerArray, MiddlewareArray, SHOULD_AUTOBATCH, TaskAbortError, addListener, autoBatchEnhancer, clearAllListeners, configureStore, createAction, createAsyncThunk, createDraftSafeSelector, createEntityAdapter, createImmutableStateInvariantMiddleware, createListenerMiddleware, default2 as createNextState, createReducer, createSelector2 as createSelector, createSerializableStateInvariantMiddleware, createSlice, current2 as current, findNonSerializableValue, freeze, getDefaultMiddleware, getType, isAction, isAllOf, isAnyOf, isAsyncThunkAction, isDraft4 as isDraft, isFSA as isFluxStandardAction, isFulfilled, isImmutableDefault, isPending, isPlain, isPlainObject, isRejected, isRejectedWithValue, miniSerializeError, nanoid, original, prepareAutoBatched, removeListener, unwrapResult };
1717//# sourceMappingURL=redux-toolkit.modern.development.js.map
\No newline at end of file