use-typed-reducer 3.3.0-2 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,39 +1,38 @@
1
- import { MutableRefObject } from "react";
2
- type PromiseBox<T> = T | Promise<T>;
3
- type VoidFn<Fn extends (...any: any[]) => any> = ReturnType<Fn> extends Promise<any> ? (...a: Parameters<Fn>) => Promise<void> : (...a: Parameters<Fn>) => void;
4
- type Action<State> = (...args: any) => PromiseBox<(state: State) => State>;
5
- export type Dispatch<State, Fns extends {
6
- [key in keyof Fns]: Action<State>;
7
- }> = {
8
- [R in keyof Fns]: (...args: any[]) => PromiseBox<(state: State) => State>;
9
- };
10
- type MapReducers<State extends {}, Reducers extends Dispatch<State, Reducers>> = {
11
- [R in keyof Reducers]: VoidFn<Reducers[R]>;
12
- };
13
- type ReducerArgs<State extends {}, Props extends object> = {
14
- state: () => State;
15
- props: () => Props;
16
- initialState: State;
17
- };
18
- type FnMap<State> = {
19
- [k: string]: (...args: any[]) => PromiseBox<Partial<State>>;
20
- };
21
- type MappedReducers<State extends {}, Fns extends FnMap<State>> = {
22
- [F in keyof Fns]: (...args: Parameters<Fns[F]>) => PromiseBox<Partial<State>>;
23
- };
24
- type MapReducerReturn<State extends {}, Fns extends FnMap<State>> = {
25
- [F in keyof Fns]: VoidFn<Fns[F]>;
26
- };
27
- type UseReducerReduce<State extends object, Props extends object> = (args: ReducerArgs<State, Props>) => MappedReducers<State, FnMap<State>>;
28
- type UseReducer<Selector, State extends {}, Props extends {}, Reducers extends UseReducerReduce<State, Props>> = readonly [state: Selector, dispatchers: MapReducerReturn<State, ReturnType<Reducers>>];
29
- type ReducerMiddleware<State extends object, Props extends object, Reducers extends (args: ReducerArgs<State, Props>) => MappedReducers<State, FnMap<State>>> = Array<(state: State, key: keyof ReturnType<Reducers>) => State>;
30
- type Callback<T> = T | ((prev: T) => T);
31
- export declare const useTypedReducer: <State extends {}, Reducers extends Dispatch<State, Reducers>>(initialState: State, reducers: Reducers) => [state: State, dispatch: MapReducers<State, Reducers>];
32
- export declare const useMutable: <T extends {}>(state: T) => MutableRefObject<T>;
33
- export declare const dispatchCallback: <Prev extends unknown, T extends Callback<Prev>>(prev: Prev, setter: T) => any;
34
- export type DispatchCallback<T extends any> = Callback<T>;
35
- export declare const useReducer: <State extends {}, Reducers extends UseReducerReduce<State, Props>, Props extends object, Middlewares extends ReducerMiddleware<State, Props, Reducers>>(initialState: State, reducer: Reducers, props?: Props | undefined, middlewares?: Middlewares | undefined) => UseReducer<State, State, Props, Reducers>;
36
- export declare const createReducer: <State extends {} = {}, Props extends object = {}>() => <Reducer extends (args: ReducerArgs<State, Props>) => MappedReducers<State, FnMap<State>>>(reducer: Reducer) => Reducer;
37
- export declare const createGlobalReducer: <State extends {}, Reducers extends UseReducerReduce<State, Props>, Props extends object, Middlewares extends ReducerMiddleware<State, Props, Reducers>>(initialState: State, reducer: Reducers, props?: Props | undefined, middlewares?: Middlewares | undefined) => <Selector extends (state: State) => any>(selector?: Selector | undefined) => UseReducer<Selector extends (state: State) => State ? State : ReturnType<Selector>, State, Props, Reducers>;
38
- export default useTypedReducer;
39
- //# sourceMappingURL=index.d.ts.map
1
+ import { MutableRefObject } from "react";
2
+ declare type PromiseBox<T> = T | Promise<T>;
3
+ declare type VoidFn<Fn extends (...any: any[]) => any> = ReturnType<Fn> extends Promise<any> ? (...a: Parameters<Fn>) => Promise<void> : (...a: Parameters<Fn>) => void;
4
+ declare type Action<State> = (...args: any) => PromiseBox<(state: State) => State>;
5
+ export declare type Dispatch<State, Fns extends {
6
+ [key in keyof Fns]: Action<State>;
7
+ }> = {
8
+ [R in keyof Fns]: (...args: any[]) => PromiseBox<(state: State) => State>;
9
+ };
10
+ declare type MapReducers<State extends {}, Reducers extends Dispatch<State, Reducers>> = {
11
+ [R in keyof Reducers]: VoidFn<Reducers[R]>;
12
+ };
13
+ declare type ReducerArgs<State extends {}, Props extends object> = {
14
+ state: () => State;
15
+ props: () => Props;
16
+ initialState: State;
17
+ };
18
+ declare type FnMap<State> = {
19
+ [k: string]: (...args: any[]) => PromiseBox<Partial<State>>;
20
+ };
21
+ declare type MappedReducers<State extends {}, Fns extends FnMap<State>> = {
22
+ [F in keyof Fns]: (...args: Parameters<Fns[F]>) => PromiseBox<Partial<State>>;
23
+ };
24
+ declare type MapReducerReturn<State extends {}, Fns extends FnMap<State>> = {
25
+ [F in keyof Fns]: VoidFn<Fns[F]>;
26
+ };
27
+ declare type UseReducerReduce<State extends object, Props extends object> = (args: ReducerArgs<State, Props>) => MappedReducers<State, FnMap<State>>;
28
+ declare type UseReducer<Selector, State extends {}, Props extends {}, Reducers extends UseReducerReduce<State, Props>> = readonly [state: Selector, dispatchers: MapReducerReturn<State, ReturnType<Reducers>>];
29
+ declare type ReducerMiddleware<State extends object, Props extends object, Reducers extends (args: ReducerArgs<State, Props>) => MappedReducers<State, FnMap<State>>> = Array<(state: State, key: keyof ReturnType<Reducers>) => State>;
30
+ declare type Callback<T> = T | ((prev: T) => T);
31
+ export declare const useTypedReducer: <State extends {}, Reducers extends Dispatch<State, Reducers>>(initialState: State, reducers: Reducers) => [state: State, dispatch: MapReducers<State, Reducers>];
32
+ export declare const useMutable: <T extends {}>(state: T) => MutableRefObject<T>;
33
+ export declare const dispatchCallback: <Prev extends unknown, T extends Callback<Prev>>(prev: Prev, setter: T) => any;
34
+ export declare type DispatchCallback<T extends any> = Callback<T>;
35
+ export declare const useReducer: <State extends {}, Reducers extends UseReducerReduce<State, Props>, Props extends object, Middlewares extends ReducerMiddleware<State, Props, Reducers>>(initialState: State, reducer: Reducers, props?: Props | undefined, middlewares?: Middlewares | undefined) => UseReducer<State, State, Props, Reducers>;
36
+ export declare const createReducer: <State extends {} = {}, Props extends object = {}>() => <Reducer extends (args: ReducerArgs<State, Props>) => MappedReducers<State, FnMap<State>>>(reducer: Reducer) => Reducer;
37
+ export declare const createGlobalReducer: <State extends {}, Reducers extends UseReducerReduce<State, Props>, Props extends object, Middlewares extends ReducerMiddleware<State, Props, Reducers>>(initialState: State, reducer: Reducers, props?: Props | undefined, middlewares?: Middlewares | undefined) => <Selector extends (state: State) => any>(selector?: Selector | undefined) => UseReducer<Selector extends (state: State) => State ? State : ReturnType<Selector>, State, Props, Reducers>;
38
+ export default useTypedReducer;
@@ -0,0 +1,380 @@
1
+ import react, { useState, useMemo, useRef, useEffect } from 'react';
2
+
3
+ /*! *****************************************************************************
4
+ Copyright (c) Microsoft Corporation.
5
+
6
+ Permission to use, copy, modify, and/or distribute this software for any
7
+ purpose with or without fee is hereby granted.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ PERFORMANCE OF THIS SOFTWARE.
16
+ ***************************************************************************** */
17
+
18
+ var __assign = function() {
19
+ __assign = Object.assign || function __assign(t) {
20
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
21
+ s = arguments[i];
22
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+
29
+ function __awaiter(thisArg, _arguments, P, generator) {
30
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
31
+ return new (P || (P = Promise))(function (resolve, reject) {
32
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
33
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
34
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
35
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
36
+ });
37
+ }
38
+
39
+ function __generator(thisArg, body) {
40
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
41
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
42
+ function verb(n) { return function (v) { return step([n, v]); }; }
43
+ function step(op) {
44
+ if (f) throw new TypeError("Generator is already executing.");
45
+ while (_) try {
46
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
47
+ if (y = 0, t) op = [op[0] & 2, t.value];
48
+ switch (op[0]) {
49
+ case 0: case 1: t = op; break;
50
+ case 4: _.label++; return { value: op[1], done: false };
51
+ case 5: _.label++; y = op[1]; op = [0]; continue;
52
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
53
+ default:
54
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
55
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
56
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
57
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
58
+ if (t[2]) _.ops.pop();
59
+ _.trys.pop(); continue;
60
+ }
61
+ op = body.call(thisArg, _);
62
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
63
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
64
+ }
65
+ }
66
+
67
+ function __read(o, n) {
68
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
69
+ if (!m) return o;
70
+ var i = m.call(o), r, ar = [], e;
71
+ try {
72
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
73
+ }
74
+ catch (error) { e = { error: error }; }
75
+ finally {
76
+ try {
77
+ if (r && !r.done && (m = i["return"])) m.call(i);
78
+ }
79
+ finally { if (e) throw e.error; }
80
+ }
81
+ return ar;
82
+ }
83
+
84
+ function __spread() {
85
+ for (var ar = [], i = 0; i < arguments.length; i++)
86
+ ar = ar.concat(__read(arguments[i]));
87
+ return ar;
88
+ }
89
+
90
+ function createCommonjsModule(fn, module) {
91
+ return module = { exports: {} }, fn(module, module.exports), module.exports;
92
+ }
93
+
94
+ function n(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var p="function"===typeof Object.is?Object.is:n,q=react.useSyncExternalStore,r=react.useRef,t=react.useEffect,u=react.useMemo,v=react.useDebugValue;
95
+ var useSyncExternalStoreWithSelector=function(a,b,e,l,h){var c=r(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f;}else f=c.current;c=u(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==h&&f.hasValue){var b=f.value;if(h(b,a))return k=b}return k=a}b=k;if(p(d,a))return b;var e=l(a);if(void 0!==h&&h(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return [function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,h]);var d=q(a,c[0],c[1]);
96
+ t(function(){f.hasValue=!0;f.value=d;},[d]);v(d);return d};
97
+
98
+ var useSyncExternalStoreWithSelector_production_min = {
99
+ useSyncExternalStoreWithSelector: useSyncExternalStoreWithSelector
100
+ };
101
+
102
+ var useSyncExternalStoreWithSelector_development = createCommonjsModule(function (module, exports) {
103
+
104
+ if (process.env.NODE_ENV !== "production") {
105
+ (function() {
106
+
107
+ /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
108
+ if (
109
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
110
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===
111
+ 'function'
112
+ ) {
113
+ __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());
114
+ }
115
+ var React = react;
116
+
117
+ /**
118
+ * inlined Object.is polyfill to avoid requiring consumers ship their own
119
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
120
+ */
121
+ function is(x, y) {
122
+ return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare
123
+ ;
124
+ }
125
+
126
+ var objectIs = typeof Object.is === 'function' ? Object.is : is;
127
+
128
+ var useSyncExternalStore = React.useSyncExternalStore;
129
+
130
+ // for CommonJS interop.
131
+
132
+ var useRef = React.useRef,
133
+ useEffect = React.useEffect,
134
+ useMemo = React.useMemo,
135
+ useDebugValue = React.useDebugValue; // Same as useSyncExternalStore, but supports selector and isEqual arguments.
136
+
137
+ function useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {
138
+ // Use this to track the rendered snapshot.
139
+ var instRef = useRef(null);
140
+ var inst;
141
+
142
+ if (instRef.current === null) {
143
+ inst = {
144
+ hasValue: false,
145
+ value: null
146
+ };
147
+ instRef.current = inst;
148
+ } else {
149
+ inst = instRef.current;
150
+ }
151
+
152
+ var _useMemo = useMemo(function () {
153
+ // Track the memoized state using closure variables that are local to this
154
+ // memoized instance of a getSnapshot function. Intentionally not using a
155
+ // useRef hook, because that state would be shared across all concurrent
156
+ // copies of the hook/component.
157
+ var hasMemo = false;
158
+ var memoizedSnapshot;
159
+ var memoizedSelection;
160
+
161
+ var memoizedSelector = function (nextSnapshot) {
162
+ if (!hasMemo) {
163
+ // The first time the hook is called, there is no memoized result.
164
+ hasMemo = true;
165
+ memoizedSnapshot = nextSnapshot;
166
+
167
+ var _nextSelection = selector(nextSnapshot);
168
+
169
+ if (isEqual !== undefined) {
170
+ // Even if the selector has changed, the currently rendered selection
171
+ // may be equal to the new selection. We should attempt to reuse the
172
+ // current value if possible, to preserve downstream memoizations.
173
+ if (inst.hasValue) {
174
+ var currentSelection = inst.value;
175
+
176
+ if (isEqual(currentSelection, _nextSelection)) {
177
+ memoizedSelection = currentSelection;
178
+ return currentSelection;
179
+ }
180
+ }
181
+ }
182
+
183
+ memoizedSelection = _nextSelection;
184
+ return _nextSelection;
185
+ } // We may be able to reuse the previous invocation's result.
186
+
187
+
188
+ // We may be able to reuse the previous invocation's result.
189
+ var prevSnapshot = memoizedSnapshot;
190
+ var prevSelection = memoizedSelection;
191
+
192
+ if (objectIs(prevSnapshot, nextSnapshot)) {
193
+ // The snapshot is the same as last time. Reuse the previous selection.
194
+ return prevSelection;
195
+ } // The snapshot has changed, so we need to compute a new selection.
196
+
197
+
198
+ // The snapshot has changed, so we need to compute a new selection.
199
+ var nextSelection = selector(nextSnapshot); // If a custom isEqual function is provided, use that to check if the data
200
+ // has changed. If it hasn't, return the previous selection. That signals
201
+ // to React that the selections are conceptually equal, and we can bail
202
+ // out of rendering.
203
+
204
+ // If a custom isEqual function is provided, use that to check if the data
205
+ // has changed. If it hasn't, return the previous selection. That signals
206
+ // to React that the selections are conceptually equal, and we can bail
207
+ // out of rendering.
208
+ if (isEqual !== undefined && isEqual(prevSelection, nextSelection)) {
209
+ return prevSelection;
210
+ }
211
+
212
+ memoizedSnapshot = nextSnapshot;
213
+ memoizedSelection = nextSelection;
214
+ return nextSelection;
215
+ }; // Assigning this to a constant so that Flow knows it can't change.
216
+
217
+
218
+ // Assigning this to a constant so that Flow knows it can't change.
219
+ var maybeGetServerSnapshot = getServerSnapshot === undefined ? null : getServerSnapshot;
220
+
221
+ var getSnapshotWithSelector = function () {
222
+ return memoizedSelector(getSnapshot());
223
+ };
224
+
225
+ var getServerSnapshotWithSelector = maybeGetServerSnapshot === null ? undefined : function () {
226
+ return memoizedSelector(maybeGetServerSnapshot());
227
+ };
228
+ return [getSnapshotWithSelector, getServerSnapshotWithSelector];
229
+ }, [getSnapshot, getServerSnapshot, selector, isEqual]),
230
+ getSelection = _useMemo[0],
231
+ getServerSelection = _useMemo[1];
232
+
233
+ var value = useSyncExternalStore(subscribe, getSelection, getServerSelection);
234
+ useEffect(function () {
235
+ inst.hasValue = true;
236
+ inst.value = value;
237
+ }, [value]);
238
+ useDebugValue(value);
239
+ return value;
240
+ }
241
+
242
+ exports.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector;
243
+ /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
244
+ if (
245
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
246
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===
247
+ 'function'
248
+ ) {
249
+ __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());
250
+ }
251
+
252
+ })();
253
+ }
254
+ });
255
+ var useSyncExternalStoreWithSelector_development_1 = useSyncExternalStoreWithSelector_development.useSyncExternalStoreWithSelector;
256
+
257
+ var withSelector = createCommonjsModule(function (module) {
258
+
259
+ if (process.env.NODE_ENV === 'production') {
260
+ module.exports = useSyncExternalStoreWithSelector_production_min;
261
+ } else {
262
+ module.exports = useSyncExternalStoreWithSelector_development;
263
+ }
264
+ });
265
+
266
+ var entries = function (t) { return Object.entries(t); };
267
+ var isPromise = function (promise) { return promise instanceof Promise; };
268
+ var useTypedReducer = function (initialState, reducers) {
269
+ var _a = __read(useState(initialState), 2), state = _a[0], setState = _a[1];
270
+ var dispatches = useMemo(function () {
271
+ return entries(reducers).reduce(function (acc, _a) {
272
+ var _b;
273
+ var _c = __read(_a, 2), name = _c[0], dispatch = _c[1];
274
+ return (__assign(__assign({}, acc), (_b = {}, _b[name] = function () {
275
+ var params = [];
276
+ for (var _i = 0; _i < arguments.length; _i++) {
277
+ params[_i] = arguments[_i];
278
+ }
279
+ return __awaiter(void 0, void 0, void 0, function () {
280
+ var dispatcher;
281
+ return __generator(this, function (_a) {
282
+ switch (_a.label) {
283
+ case 0: return [4 /*yield*/, dispatch.apply(void 0, __spread(params))];
284
+ case 1:
285
+ dispatcher = _a.sent();
286
+ return [2 /*return*/, setState(function (previousState) { return dispatcher(previousState); })];
287
+ }
288
+ });
289
+ });
290
+ }, _b)));
291
+ }, reducers);
292
+ }, [reducers]);
293
+ return [state, dispatches];
294
+ };
295
+ var useMutable = function (state) {
296
+ var mutable = useRef(state !== null && state !== void 0 ? state : {});
297
+ useEffect(function () { return void (mutable.current = state); }, [state]);
298
+ return mutable;
299
+ };
300
+ var dispatchCallback = function (prev, setter) {
301
+ return typeof setter === "function" ? setter(prev) : setter;
302
+ };
303
+ var reduceMiddleware = function (state, prev, middleware, key) { return middleware.reduce(function (acc, fn) { return fn(acc, key); }, __assign(__assign({}, prev), state)); };
304
+ var useReducer = function (initialState, reducer, props, middlewares) {
305
+ var _a = __read(useState(function () { return initialState; }), 2), state = _a[0], setState = _a[1];
306
+ var mutableState = useMutable(state);
307
+ var mutableProps = useMutable(props !== null && props !== void 0 ? props : {});
308
+ var mutableReducer = useMutable(reducer);
309
+ var middleware = useMutable(middlewares !== null && middlewares !== void 0 ? middlewares : []);
310
+ var savedInitialState = useRef(initialState);
311
+ var dispatchers = useMemo(function () {
312
+ var reducers = mutableReducer.current({
313
+ state: function () { return mutableState.current; },
314
+ props: function () { return mutableProps.current; },
315
+ initialState: savedInitialState.current
316
+ });
317
+ return entries(reducers).reduce(function (acc, _a) {
318
+ var _b;
319
+ var _c = __read(_a, 2), name = _c[0], dispatch = _c[1];
320
+ return (__assign(__assign({}, acc), (_b = {}, _b[name] = function () {
321
+ var params = [];
322
+ for (var _i = 0; _i < arguments.length; _i++) {
323
+ params[_i] = arguments[_i];
324
+ }
325
+ var result = dispatch.apply(void 0, __spread(params));
326
+ var set = function (newState) {
327
+ return setState(function (prev) { return reduceMiddleware(newState, prev, middleware.current, name); });
328
+ };
329
+ return isPromise(result) ? void result.then(set) : set(result);
330
+ }, _b)));
331
+ }, {});
332
+ }, [mutableProps, mutableReducer, mutableState]);
333
+ return [state, dispatchers];
334
+ };
335
+ var createReducer = function () {
336
+ return function (reducer) {
337
+ return reducer;
338
+ };
339
+ };
340
+ var createGlobalReducer = function (initialState, reducer, props, middlewares) {
341
+ var state = initialState;
342
+ var getSnapshot = function () { return state; };
343
+ var listeners = new Set();
344
+ var addListener = function (listener) {
345
+ listeners.add(listener);
346
+ return function () { return listeners.delete(listener); };
347
+ };
348
+ var setState = function (callback) {
349
+ var previousState = __assign({}, state);
350
+ var newState = callback(state);
351
+ state = newState;
352
+ listeners.forEach(function (exec) { return exec(newState, previousState); });
353
+ };
354
+ var getProps = function () { return props || {}; };
355
+ var args = { state: getSnapshot, props: getProps, initialState: initialState };
356
+ var middlewareList = middlewares || [];
357
+ var dispatchers = entries(reducer(args)).reduce(function (acc, _a) {
358
+ var _b;
359
+ var _c = __read(_a, 2), name = _c[0], fn = _c[1];
360
+ return (__assign(__assign({}, acc), (_b = {}, _b[name] = function () {
361
+ var args = [];
362
+ for (var _i = 0; _i < arguments.length; _i++) {
363
+ args[_i] = arguments[_i];
364
+ }
365
+ var result = fn.apply(void 0, __spread(args));
366
+ var set = function (newState) {
367
+ return setState(function (prev) { return reduceMiddleware(newState, prev, middlewareList, name); });
368
+ };
369
+ return isPromise(result) ? result.then(set) : set(result);
370
+ }, _b)));
371
+ }, {});
372
+ var defaultSelector = function (state) { return state; };
373
+ return function useStore(selector) {
374
+ var state = withSelector.useSyncExternalStoreWithSelector(addListener, getSnapshot, getSnapshot, selector || defaultSelector, Object.is);
375
+ return [state, dispatchers];
376
+ };
377
+ };
378
+
379
+ export default useTypedReducer;
380
+ export { createGlobalReducer, createReducer, dispatchCallback, useMutable, useReducer, useTypedReducer };