@plitzi/nexus 0.31.2 → 0.32.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/CHANGELOG.md +6 -0
- package/dist/async/createAsync.mjs +8 -1
- package/dist/createStore/createStore.d.ts +4 -45
- package/dist/createStore/createStore.mjs +29 -16
- package/dist/createStore/helpers/PathTrie.d.ts +2 -0
- package/dist/createStore/helpers/PathTrie.mjs +55 -20
- package/dist/createStore/helpers/createChainReads.d.ts +1 -1
- package/dist/createStore/helpers/createChainReads.mjs +12 -13
- package/dist/createStore/helpers/createSetState.mjs +24 -33
- package/dist/createStore/hooks/shared.d.ts +1 -2
- package/dist/createStore/hooks/shared.mjs +7 -18
- package/dist/createStore/hooks/useStore.d.ts +4 -49
- package/dist/createStore/hooks/useStore.mjs +19 -27
- package/dist/createStore/hooks/useStoreGetter.d.ts +2 -5
- package/dist/createStore/hooks/useStoreGetter.mjs +19 -22
- package/dist/createStore/hooks/useStoreSetter.mjs +2 -4
- package/dist/derived/createDerived.d.ts +1 -1
- package/dist/derived/createDerived.mjs +12 -9
- package/dist/entities/createEntityStore.d.ts +38 -0
- package/dist/entities/createEntityStore.mjs +102 -0
- package/dist/entities/index.d.ts +2 -0
- package/dist/entities/index.mjs +2 -1
- package/dist/index.mjs +11 -10
- package/dist/middleware/historyMiddleware.d.ts +3 -3
- package/dist/middleware/historyMiddleware.mjs +22 -17
- package/dist/middleware/index.d.ts +1 -1
- package/dist/middleware/isDisabled.d.ts +2 -0
- package/dist/middleware/isDisabled.mjs +4 -0
- package/dist/middleware/loggerMiddleware.d.ts +2 -2
- package/dist/middleware/loggerMiddleware.mjs +14 -15
- package/dist/middleware/persistMiddleware.d.ts +7 -5
- package/dist/middleware/persistMiddleware.mjs +56 -28
- package/dist/middleware/reduxDevToolsMiddleware.d.ts +2 -2
- package/dist/middleware/reduxDevToolsMiddleware.mjs +26 -21
- package/dist/types/StoreTypes.d.ts +31 -21
- package/package.json +9 -1
|
@@ -4,42 +4,34 @@ import { useCallback as c, useMemo as l, useRef as u, useSyncExternalStore as d
|
|
|
4
4
|
//#region src/createStore/hooks/useStore.ts
|
|
5
5
|
var f = [];
|
|
6
6
|
function p(e, t, r) {
|
|
7
|
-
let i = r.mode ?? "sync", a = r.enabled ?? !0, o =
|
|
8
|
-
|
|
9
|
-
let
|
|
10
|
-
e,
|
|
11
|
-
t,
|
|
12
|
-
o
|
|
13
|
-
]), _ = u(g()), v = l(() => (n) => !a || i === "mount" ? () => {} : typeof t == "string" ? e.subscribePath(t, n) : e.subscribe(n), [
|
|
7
|
+
let i = r.mode ?? "sync", a = r.enabled ?? !0, o = t === void 0, f = r.equalityFn ?? (o ? s : Object.is), p = r.transformer, m = u(p);
|
|
8
|
+
m.current = p;
|
|
9
|
+
let h = l(() => n(e, t), [e, t]), g = u(h()), _ = l(() => (n) => !a || i === "mount" ? () => {} : typeof t == "string" ? e.subscribePath(t, n) : e.subscribe(n), [
|
|
14
10
|
a,
|
|
15
11
|
i,
|
|
16
12
|
t,
|
|
17
13
|
e
|
|
18
|
-
]),
|
|
19
|
-
if (!a) return
|
|
20
|
-
if (i === "mount") return
|
|
21
|
-
let e =
|
|
22
|
-
return
|
|
23
|
-
},
|
|
24
|
-
return [l(() =>
|
|
25
|
-
|
|
14
|
+
]), v = () => {
|
|
15
|
+
if (!a) return g.current;
|
|
16
|
+
if (i === "mount") return h();
|
|
17
|
+
let e = h();
|
|
18
|
+
return f(g.current, e) ? g.current : (g.current = e, e);
|
|
19
|
+
}, y = d(_, v, v);
|
|
20
|
+
return [l(() => m.current ? m.current(y) : y, [y]), c((n) => {
|
|
21
|
+
o ? e.setState(void 0, n) : typeof t == "function" ? e.setState(t(e.getState()), n) : e.setState(t, n);
|
|
26
22
|
}, [e, t])];
|
|
27
23
|
}
|
|
28
24
|
function m(n, o, s) {
|
|
29
|
-
let c = s.mode ?? "sync", d = s.enabled ?? !0, f = s.
|
|
30
|
-
|
|
31
|
-
let
|
|
32
|
-
|
|
33
|
-
let
|
|
34
|
-
equalityFn: p,
|
|
35
|
-
defaultValue: f
|
|
36
|
-
}), [
|
|
25
|
+
let c = s.mode ?? "sync", d = s.enabled ?? !0, f = s.equalityFn ?? e, p = s.transformer, m = u(p);
|
|
26
|
+
m.current = p;
|
|
27
|
+
let h = u(o);
|
|
28
|
+
h.current = o;
|
|
29
|
+
let g = o.map((e, t) => typeof e == "function" ? `fn_${t}` : e).join("|"), _ = u(null), v = l(() => t(n, h, _, { equalityFn: f }), [
|
|
37
30
|
n,
|
|
38
|
-
|
|
39
|
-
p,
|
|
31
|
+
g,
|
|
40
32
|
f
|
|
41
|
-
]),
|
|
42
|
-
return [l(() =>
|
|
33
|
+
]), y = r(a(n, h, g, d, c), v, d, _);
|
|
34
|
+
return [l(() => m.current ? m.current(y) : y, [y]), ...i(n, h, g)];
|
|
43
35
|
}
|
|
44
36
|
function h(e, t = {}) {
|
|
45
37
|
let n = o(t.store, "useStore", t.storeId), r = Array.isArray(e), i = p(n, r ? void 0 : e, r ? {
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { GetterTuple,
|
|
2
|
-
export type { GetValueFn, GetValueFromBaseFn,
|
|
1
|
+
import { GetterTuple, GetValueFromBaseFn, GetValueFn, PathOf, PathValue, UseStoreGetterOptions } from '../../types';
|
|
2
|
+
export type { GetValueFn, GetValueFromBaseFn, GetterTuple, UseStoreGetterOptions };
|
|
3
3
|
declare function useStoreGetter<TState extends object>(options?: UseStoreGetterOptions<TState>): GetValueFn<TState>;
|
|
4
4
|
declare function useStoreGetter<TState extends object, P extends PathOf<TState>>(basePath: P, options?: UseStoreGetterOptions<TState>): GetValueFromBaseFn<PathValue<TState, P>>;
|
|
5
|
-
declare function useStoreGetter<TState extends object, P extends PathOf<TState>, D>(basePath: P, options: UseStoreGetterOptions<TState, D> & {
|
|
6
|
-
defaultValue: D;
|
|
7
|
-
}): GetValueFromBaseWithDefaultFn<PathValue<TState, P>, D>;
|
|
8
5
|
declare function useStoreGetter<TState extends object, const Entries extends ReadonlyArray<PathOf<TState> | ((state: TState) => unknown)>>(entries: Entries, options?: UseStoreGetterOptions<TState>): GetterTuple<TState, Entries>;
|
|
9
6
|
export default useStoreGetter;
|
|
@@ -3,34 +3,31 @@ import { useResolvedStore as t } from "./shared.mjs";
|
|
|
3
3
|
import { useMemo as n } from "react";
|
|
4
4
|
//#region src/createStore/hooks/useStoreGetter.ts
|
|
5
5
|
function r(r, i) {
|
|
6
|
-
let a = typeof r == "string" ? r : void 0, o = Array.isArray(r) ? r : void 0, s = typeof r == "object" && !Array.isArray(r) ? r : i, c = t(s?.store, "useStoreGetter", s?.storeId),
|
|
7
|
-
return n(() =>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
let a = typeof r == "string" ? r : void 0, o = Array.isArray(r) ? r : void 0, s = typeof r == "object" && !Array.isArray(r) ? r : i, c = t(s?.store, "useStoreGetter", s?.storeId), l = o?.map((e) => typeof e == "function" ? e.toString() : e).join("|");
|
|
7
|
+
return n(() => {
|
|
8
|
+
if (o) return o.map((t) => (n, r) => {
|
|
9
|
+
let i = typeof t == "function" ? t(c.getState()) : e(c.getState(), t);
|
|
10
|
+
if (n !== void 0) {
|
|
11
|
+
let t = e(i, n);
|
|
12
|
+
return t === void 0 && r !== void 0 ? r : t;
|
|
13
|
+
}
|
|
14
|
+
return i === void 0 && r !== void 0 ? r : i;
|
|
15
|
+
});
|
|
16
16
|
if (a !== void 0) {
|
|
17
|
-
let
|
|
17
|
+
let e = c.withBase(a);
|
|
18
|
+
return (t, n) => t === void 0 ? n === void 0 ? e.getState() : e.getState(n) : n === void 0 ? e.getPath(t) : e.getPath(t, n);
|
|
19
|
+
}
|
|
20
|
+
return (t, n) => {
|
|
21
|
+
let r = c.getState();
|
|
18
22
|
if (t !== void 0) {
|
|
19
|
-
let
|
|
20
|
-
return
|
|
23
|
+
let i = e(r, t);
|
|
24
|
+
return i === void 0 && n !== void 0 ? n : i;
|
|
21
25
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
if (t !== void 0) {
|
|
26
|
-
let i = e(r, t);
|
|
27
|
-
return i === void 0 && n !== void 0 ? n : i;
|
|
28
|
-
}
|
|
29
|
-
return r;
|
|
26
|
+
return r;
|
|
27
|
+
};
|
|
30
28
|
}, [
|
|
31
29
|
c,
|
|
32
30
|
a,
|
|
33
|
-
u,
|
|
34
31
|
l
|
|
35
32
|
]);
|
|
36
33
|
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { useResolvedStore as e } from "./shared.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { useMemo as t } from "react";
|
|
3
3
|
//#region src/createStore/hooks/useStoreSetter.ts
|
|
4
4
|
function n(n, r) {
|
|
5
5
|
let i = typeof n == "string" ? n : void 0, a = typeof n == "object" ? n : r, o = e(a?.store, "useStoreSetter", a?.storeId);
|
|
6
|
-
return t((
|
|
7
|
-
i === void 0 ? o.setState(e, t) : e === void 0 ? o.setState(i, t) : o.setState(`${i}.${e}`, t);
|
|
8
|
-
}, [o, i]);
|
|
6
|
+
return t(() => i === void 0 ? o.setState : o.withBase(i).setState, [o, i]);
|
|
9
7
|
}
|
|
10
8
|
//#endregion
|
|
11
9
|
export { n as default };
|
|
@@ -7,4 +7,4 @@ export type Derived<R> = {
|
|
|
7
7
|
export type DerivedOptions<R> = {
|
|
8
8
|
equalityFn?: (a: R, b: R) => boolean;
|
|
9
9
|
};
|
|
10
|
-
export declare function createDerived<TState extends object, const Paths extends readonly PathOf<TState>[], R>(store: StoreApi<TState>, deps: Paths, compute: (values: PathValues<TState, Paths
|
|
10
|
+
export declare function createDerived<TState extends object, const Paths extends readonly PathOf<TState>[], R>(store: StoreApi<TState>, deps: Paths, compute: (values: PathValues<TState, Paths>, changedPath?: string) => R, options?: DerivedOptions<R>): Derived<R>;
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { createObservable as e } from "../helpers/createObservable.mjs";
|
|
2
2
|
//#region src/derived/createDerived.ts
|
|
3
3
|
function t(t, n, r, i = {}) {
|
|
4
|
-
let a = i.equalityFn ?? Object.is, o
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
let a = i.equalityFn ?? Object.is, o, s = e(() => {
|
|
5
|
+
let e = o;
|
|
6
|
+
return o = void 0, r(n.map((e) => t.getPath(e)), e);
|
|
7
|
+
}), c = (e) => {
|
|
8
|
+
if (o = e, !s.hasListeners()) {
|
|
9
|
+
s.invalidate();
|
|
7
10
|
return;
|
|
8
11
|
}
|
|
9
|
-
let
|
|
10
|
-
|
|
11
|
-
},
|
|
12
|
+
let t = s.get();
|
|
13
|
+
s.invalidate(), a(t, s.get()) || s.notify();
|
|
14
|
+
}, l = n.map((e) => t.subscribePath(e, c));
|
|
12
15
|
return {
|
|
13
|
-
get:
|
|
14
|
-
subscribe: (e) => (
|
|
16
|
+
get: s.get,
|
|
17
|
+
subscribe: (e) => (s.get(), s.subscribe(e)),
|
|
15
18
|
destroy: () => {
|
|
16
|
-
|
|
19
|
+
l.forEach((e) => e()), s.destroy();
|
|
17
20
|
}
|
|
18
21
|
};
|
|
19
22
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { EntityId } from './createEntityAdapter';
|
|
2
|
+
export type EntityChangeListener = () => void;
|
|
3
|
+
export type EntityStoreOptions<T> = {
|
|
4
|
+
selectId?: (entity: T) => EntityId;
|
|
5
|
+
sortComparer?: (a: T, b: T) => number;
|
|
6
|
+
};
|
|
7
|
+
export type EntityStore<T> = {
|
|
8
|
+
selectId: (entity: T) => EntityId;
|
|
9
|
+
getOne: (id: EntityId) => T | undefined;
|
|
10
|
+
getAll: () => T[];
|
|
11
|
+
getIds: () => string[];
|
|
12
|
+
has: (id: EntityId) => boolean;
|
|
13
|
+
size: () => number;
|
|
14
|
+
setOne: (entity: T) => void;
|
|
15
|
+
setMany: (entities: readonly T[]) => void;
|
|
16
|
+
setAll: (entities: readonly T[]) => void;
|
|
17
|
+
addOne: (entity: T) => void;
|
|
18
|
+
addMany: (entities: readonly T[]) => void;
|
|
19
|
+
upsertOne: (entity: T) => void;
|
|
20
|
+
upsertMany: (entities: readonly T[]) => void;
|
|
21
|
+
updateOne: (id: EntityId, changes: Partial<T>) => void;
|
|
22
|
+
updateMany: (updates: readonly {
|
|
23
|
+
id: EntityId;
|
|
24
|
+
changes: Partial<T>;
|
|
25
|
+
}[]) => void;
|
|
26
|
+
removeOne: (id: EntityId) => void;
|
|
27
|
+
removeMany: (ids: readonly EntityId[]) => void;
|
|
28
|
+
removeAll: () => void;
|
|
29
|
+
batch: (fn: () => void) => void;
|
|
30
|
+
subscribeOne: (id: EntityId, listener: EntityChangeListener) => () => void;
|
|
31
|
+
subscribeIds: (listener: EntityChangeListener) => () => void;
|
|
32
|
+
subscribeAll: (listener: EntityChangeListener) => () => void;
|
|
33
|
+
useOne: (id: EntityId) => T | undefined;
|
|
34
|
+
useIds: () => string[];
|
|
35
|
+
useAll: () => T[];
|
|
36
|
+
destroy: () => void;
|
|
37
|
+
};
|
|
38
|
+
export declare function createEntityStore<T>(initialEntities?: readonly T[], options?: EntityStoreOptions<T>): EntityStore<T>;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import e from "../createStore/helpers/Subscribers.mjs";
|
|
2
|
+
import { useCallback as t, useSyncExternalStore as n } from "react";
|
|
3
|
+
//#region src/entities/createEntityStore.ts
|
|
4
|
+
function r(r = [], i = {}) {
|
|
5
|
+
let a = i.selectId ?? ((e) => e.id), o = i.sortComparer, s = (e) => String(a(e)), c = /* @__PURE__ */ new Map();
|
|
6
|
+
for (let e of r) c.set(s(e), e);
|
|
7
|
+
let l = /* @__PURE__ */ new Map(), u = new e(), d = new e(), f, p, m = 0, h = /* @__PURE__ */ new Set(), g = !1, _ = !1, v = (e) => {
|
|
8
|
+
e && e.length > 0 && e.forEach((e) => e());
|
|
9
|
+
}, y = (e, t) => {
|
|
10
|
+
if (t && (f = void 0), p = void 0, m > 0) {
|
|
11
|
+
h.add(e), g ||= t, _ = !0;
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
v(l.get(e)), t && v(u), v(d);
|
|
15
|
+
}, b = () => {
|
|
16
|
+
let e = [...h], t = g, n = _;
|
|
17
|
+
h.clear(), g = !1, _ = !1;
|
|
18
|
+
for (let t of e) v(l.get(t));
|
|
19
|
+
t && v(u), n && v(d);
|
|
20
|
+
}, x = (e) => {
|
|
21
|
+
m++;
|
|
22
|
+
try {
|
|
23
|
+
e();
|
|
24
|
+
} finally {
|
|
25
|
+
m--, m === 0 && _ && b();
|
|
26
|
+
}
|
|
27
|
+
}, S = (e, t, n) => {
|
|
28
|
+
let r = s(e), i = c.get(r), a = i === void 0;
|
|
29
|
+
if (t && !a) return;
|
|
30
|
+
let o = n && !a ? {
|
|
31
|
+
...i,
|
|
32
|
+
...e
|
|
33
|
+
} : e;
|
|
34
|
+
o !== i && (c.set(r, o), y(r, a));
|
|
35
|
+
}, C = (e) => {
|
|
36
|
+
S(e, !1, !1);
|
|
37
|
+
}, w = (e) => {
|
|
38
|
+
S(e, !0, !1);
|
|
39
|
+
}, T = (e) => {
|
|
40
|
+
S(e, !1, !0);
|
|
41
|
+
}, E = (e, t) => {
|
|
42
|
+
let n = String(e), r = c.get(n);
|
|
43
|
+
r !== void 0 && (c.set(n, {
|
|
44
|
+
...r,
|
|
45
|
+
...t
|
|
46
|
+
}), y(n, !1));
|
|
47
|
+
}, D = (e) => {
|
|
48
|
+
let t = String(e);
|
|
49
|
+
c.has(t) && (c.delete(t), y(t, !0));
|
|
50
|
+
}, O = (e) => c.get(String(e)), k = () => f ??= [...c.keys()], A = () => {
|
|
51
|
+
if (p === void 0) {
|
|
52
|
+
let e = [...c.values()];
|
|
53
|
+
p = o ? e.sort(o) : e;
|
|
54
|
+
}
|
|
55
|
+
return p;
|
|
56
|
+
}, j = (t, n) => {
|
|
57
|
+
let r = String(t), i = l.get(r);
|
|
58
|
+
i || (i = new e(), l.set(r, i));
|
|
59
|
+
let a = i, o = a.add(n);
|
|
60
|
+
return () => {
|
|
61
|
+
o(), a.length === 0 && l.get(r) === a && l.delete(r);
|
|
62
|
+
};
|
|
63
|
+
}, M = (e) => u.add(e), N = (e) => d.add(e);
|
|
64
|
+
return {
|
|
65
|
+
selectId: a,
|
|
66
|
+
getOne: O,
|
|
67
|
+
getIds: k,
|
|
68
|
+
getAll: A,
|
|
69
|
+
has: (e) => c.has(String(e)),
|
|
70
|
+
size: () => c.size,
|
|
71
|
+
setOne: C,
|
|
72
|
+
setMany: (e) => x(() => e.forEach(C)),
|
|
73
|
+
setAll: (e) => x(() => {
|
|
74
|
+
for (let e of [...c.keys()]) D(e);
|
|
75
|
+
e.forEach(C);
|
|
76
|
+
}),
|
|
77
|
+
addOne: w,
|
|
78
|
+
addMany: (e) => x(() => e.forEach(w)),
|
|
79
|
+
upsertOne: T,
|
|
80
|
+
upsertMany: (e) => x(() => e.forEach(T)),
|
|
81
|
+
updateOne: E,
|
|
82
|
+
updateMany: (e) => x(() => e.forEach(({ id: e, changes: t }) => E(e, t))),
|
|
83
|
+
removeOne: D,
|
|
84
|
+
removeMany: (e) => x(() => e.forEach(D)),
|
|
85
|
+
removeAll: () => x(() => [...c.keys()].forEach(D)),
|
|
86
|
+
batch: x,
|
|
87
|
+
subscribeOne: j,
|
|
88
|
+
subscribeIds: M,
|
|
89
|
+
subscribeAll: N,
|
|
90
|
+
useOne: (e) => {
|
|
91
|
+
let r = String(e), i = t((e) => j(r, e), [r]), a = t(() => c.get(r), [r]);
|
|
92
|
+
return n(i, a, a);
|
|
93
|
+
},
|
|
94
|
+
useIds: () => n(M, k, k),
|
|
95
|
+
useAll: () => n(N, A, A),
|
|
96
|
+
destroy: () => {
|
|
97
|
+
c.clear(), l.clear(), u.clear(), d.clear(), f = void 0, p = void 0;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//#endregion
|
|
102
|
+
export { r as createEntityStore };
|
package/dist/entities/index.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export { createEntityAdapter } from './createEntityAdapter';
|
|
2
|
+
export { createEntityStore } from './createEntityStore';
|
|
2
3
|
export type { EntityAdapter, EntityAdapterOptions, EntityId, EntityMap, EntityUpdate, EntityUpdater } from './createEntityAdapter';
|
|
4
|
+
export type { EntityStore, EntityStoreOptions, EntityChangeListener } from './createEntityStore';
|
package/dist/entities/index.mjs
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -10,13 +10,14 @@ import l from "./createStore/index.mjs";
|
|
|
10
10
|
import { createDerived as u } from "./derived/createDerived.mjs";
|
|
11
11
|
import { useDerived as d } from "./derived/hooks/useDerived.mjs";
|
|
12
12
|
import { createEntityAdapter as f } from "./entities/createEntityAdapter.mjs";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import g from "./
|
|
16
|
-
import
|
|
17
|
-
import y from "./
|
|
18
|
-
import
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
|
|
13
|
+
import { createEntityStore as p } from "./entities/createEntityStore.mjs";
|
|
14
|
+
import { getStoreHistory as m, historyMiddleware as h } from "./middleware/historyMiddleware.mjs";
|
|
15
|
+
import { useStoreHistory as g } from "./history/hooks/useStoreHistory.mjs";
|
|
16
|
+
import _ from "./createStore/hooks/useStoreById.mjs";
|
|
17
|
+
import { createServerSnapshot as v, isServerSnapshot as y } from "./rsc/index.mjs";
|
|
18
|
+
import b from "./StoreProvider.mjs";
|
|
19
|
+
import { loggerMiddleware as x } from "./middleware/loggerMiddleware.mjs";
|
|
20
|
+
import { persistMiddleware as S } from "./middleware/persistMiddleware.mjs";
|
|
21
|
+
import { reduxDevToolsMiddleware as C } from "./middleware/reduxDevToolsMiddleware.mjs";
|
|
22
|
+
import { cascade as w } from "./middleware/cascade.mjs";
|
|
23
|
+
export { i as CANCEL, a as StoreContext, b as StoreProvider, o as StoreRegistryContext, w as cascade, e as createAsync, u as createDerived, f as createEntityAdapter, p as createEntityStore, v as createServerSnapshot, l as createStore, c as createStoreHook, m as getStoreHistory, h as historyMiddleware, y as isServerSnapshot, x as loggerMiddleware, S as persistMiddleware, C as reduxDevToolsMiddleware, r as setCodegenEnabled, t as useAsync, n as useAsyncValue, d as useDerived, _ as useStoreById, g as useStoreHistory, s as useStoreSetter };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Path, StoreApi, StoreMiddleware } from '../types';
|
|
1
|
+
import { MiddlewareOptions, Path, StoreApi, StoreMiddleware } from '../types';
|
|
2
2
|
export type HistoryEntry<TState> = {
|
|
3
3
|
path?: Path;
|
|
4
4
|
value?: unknown;
|
|
@@ -19,10 +19,10 @@ export type StoreHistory<TState> = {
|
|
|
19
19
|
travelTo: (index: number) => void;
|
|
20
20
|
clear: () => void;
|
|
21
21
|
};
|
|
22
|
-
export type StoreHistoryOptions = {
|
|
22
|
+
export type StoreHistoryOptions<TState extends object = object> = MiddlewareOptions<TState> & {
|
|
23
23
|
limit?: number;
|
|
24
24
|
path?: Path;
|
|
25
25
|
shouldRecord?: (changedPath: Path | undefined) => boolean;
|
|
26
26
|
};
|
|
27
27
|
export declare function getStoreHistory<TState extends object>(store: StoreApi<TState>): StoreHistory<TState> | undefined;
|
|
28
|
-
export declare const historyMiddleware: <TState extends object>(options?: StoreHistoryOptions) => StoreMiddleware<TState>;
|
|
28
|
+
export declare const historyMiddleware: <TState extends object>(options?: StoreHistoryOptions<TState>) => StoreMiddleware<TState>;
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { isPlainObject as e } from "../createStore/helpers/deepMerge.mjs";
|
|
2
2
|
import t from "../helpers/getByPath.mjs";
|
|
3
|
-
import n from "
|
|
3
|
+
import { isDisabled as n } from "./isDisabled.mjs";
|
|
4
|
+
import r from "../helpers/isPathAffected.mjs";
|
|
4
5
|
//#region src/middleware/historyMiddleware.ts
|
|
5
|
-
var
|
|
6
|
+
var i = (t, n, r = 12) => {
|
|
6
7
|
if (!Object.is(t, n)) {
|
|
7
|
-
if (
|
|
8
|
+
if (r <= 0 || !e(t) || !e(n)) return {
|
|
8
9
|
path: "",
|
|
9
10
|
value: n
|
|
10
11
|
};
|
|
11
12
|
for (let e of new Set([...Object.keys(t), ...Object.keys(n)])) {
|
|
12
13
|
if (Object.is(t[e], n[e])) continue;
|
|
13
|
-
let a =
|
|
14
|
+
let a = i(t[e], n[e], r - 1);
|
|
14
15
|
if (a) return {
|
|
15
16
|
path: a.path ? `${e}.${a.path}` : e,
|
|
16
17
|
value: a.value
|
|
@@ -18,8 +19,8 @@ var r = (t, n, i = 12) => {
|
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
};
|
|
21
|
-
function
|
|
22
|
-
let a =
|
|
22
|
+
function a(e, n = {}) {
|
|
23
|
+
let a = n.limit ?? 100, o = n.path, s = n.shouldRecord, c = [{
|
|
23
24
|
state: e.getState(),
|
|
24
25
|
timestamp: Date.now()
|
|
25
26
|
}], l = 0, u = !1, d = () => ({
|
|
@@ -29,11 +30,11 @@ function i(e, i = {}) {
|
|
|
29
30
|
canRedo: l < c.length - 1
|
|
30
31
|
}), f = d(), p = /* @__PURE__ */ new Set(), m = () => {
|
|
31
32
|
f = d(), p.forEach((e) => e());
|
|
32
|
-
}, h = ({ path:
|
|
33
|
-
if (u || s && !s(
|
|
34
|
-
let d = l < c.length - 1 ? c.slice(0, l + 1) : c, f = d[d.length - 1].state, p = e.getState(), h =
|
|
33
|
+
}, h = ({ path: n }) => {
|
|
34
|
+
if (u || s && !s(n) || o && n !== void 0 && !r(n, o)) return;
|
|
35
|
+
let d = l < c.length - 1 ? c.slice(0, l + 1) : c, f = d[d.length - 1].state, p = e.getState(), h = n ?? o, g, _ = n ?? o;
|
|
35
36
|
if (_) try {
|
|
36
|
-
let e =
|
|
37
|
+
let e = i(t(f, _), t(p, _));
|
|
37
38
|
e && (h = e.path ? `${_}.${e.path}` : _, g = e.value);
|
|
38
39
|
} catch {}
|
|
39
40
|
let v = [...d, {
|
|
@@ -69,13 +70,17 @@ function i(e, i = {}) {
|
|
|
69
70
|
record: h
|
|
70
71
|
};
|
|
71
72
|
}
|
|
72
|
-
var
|
|
73
|
-
function
|
|
74
|
-
return
|
|
73
|
+
var o = /* @__PURE__ */ new WeakMap();
|
|
74
|
+
function s(e) {
|
|
75
|
+
return o.get(e);
|
|
75
76
|
}
|
|
76
|
-
var
|
|
77
|
-
let
|
|
78
|
-
return
|
|
77
|
+
var c = (e) => {
|
|
78
|
+
let t = e?.enabled;
|
|
79
|
+
return (r) => {
|
|
80
|
+
if (n(t, r.getState())) return;
|
|
81
|
+
let { handle: i, record: s } = a(r, e);
|
|
82
|
+
return o.set(r, i), { onChange: s };
|
|
83
|
+
};
|
|
79
84
|
};
|
|
80
85
|
//#endregion
|
|
81
|
-
export {
|
|
86
|
+
export { s as getStoreHistory, c as historyMiddleware };
|
|
@@ -4,5 +4,5 @@ export { historyMiddleware } from './historyMiddleware';
|
|
|
4
4
|
export { reduxDevToolsMiddleware } from './reduxDevToolsMiddleware';
|
|
5
5
|
export { cascade } from './cascade';
|
|
6
6
|
export type { LoggerOptions } from './loggerMiddleware';
|
|
7
|
-
export type { PersistOptions, PersistStorage } from './persistMiddleware';
|
|
7
|
+
export type { PersistOptions, PersistStorage, PersistTarget, PersistTargetOption } from './persistMiddleware';
|
|
8
8
|
export type { ReduxDevToolsOptions } from './reduxDevToolsMiddleware';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { StoreChange, StoreError, StoreMiddleware } from '../types';
|
|
2
|
-
export type LoggerOptions<TState extends object> = {
|
|
1
|
+
import { MiddlewareOptions, StoreChange, StoreError, StoreMiddleware } from '../types';
|
|
2
|
+
export type LoggerOptions<TState extends object> = MiddlewareOptions<TState> & {
|
|
3
3
|
filter?: (change: StoreChange<TState>) => boolean;
|
|
4
4
|
sink?: (change: StoreChange<TState>) => void;
|
|
5
5
|
errorSink?: (failure: StoreError<TState>) => void;
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
+
import { isDisabled as e } from "./isDisabled.mjs";
|
|
1
2
|
//#region src/middleware/loggerMiddleware.ts
|
|
2
|
-
var
|
|
3
|
+
var t = (e) => {
|
|
3
4
|
console.log("[store]", e.path ?? "(root)", e.next);
|
|
4
|
-
},
|
|
5
|
+
}, n = (e) => {
|
|
5
6
|
console.error("[store]", `${e.phase} error at`, e.path ?? "(root)", e.error);
|
|
6
|
-
},
|
|
7
|
-
let { filter:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
onError: a
|
|
17
|
-
});
|
|
7
|
+
}, r = (r = {}) => {
|
|
8
|
+
let { filter: i, sink: a = t, errorSink: o = n, enabled: s } = typeof r == "function" ? { sink: r } : r;
|
|
9
|
+
return (t) => {
|
|
10
|
+
if (!e(s, t.getState())) return {
|
|
11
|
+
onChange: (e) => {
|
|
12
|
+
(!i || i(e)) && a(e);
|
|
13
|
+
},
|
|
14
|
+
onError: o
|
|
15
|
+
};
|
|
16
|
+
};
|
|
18
17
|
};
|
|
19
18
|
//#endregion
|
|
20
|
-
export {
|
|
19
|
+
export { r as loggerMiddleware };
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import { StoreMiddleware } from '../types';
|
|
1
|
+
import { MiddlewareOptions, PathOf, StoreMiddleware } from '../types';
|
|
2
2
|
export type PersistStorage = {
|
|
3
3
|
getItem: (key: string) => string | null;
|
|
4
4
|
setItem: (key: string, value: string) => void;
|
|
5
5
|
removeItem: (key: string) => void;
|
|
6
6
|
};
|
|
7
|
-
export type
|
|
7
|
+
export type PersistTarget = PersistStorage | 'local' | 'session';
|
|
8
|
+
export type PersistTargetOption<TState extends object> = PersistTarget | ((state: TState) => PersistTarget | false);
|
|
9
|
+
export type PersistOptions<TState extends object> = MiddlewareOptions<TState> & {
|
|
8
10
|
key: string;
|
|
9
|
-
storage?:
|
|
11
|
+
storage?: PersistTargetOption<TState>;
|
|
12
|
+
paths?: ReadonlyArray<PathOf<TState>>;
|
|
10
13
|
partialize?: (state: TState) => Partial<TState>;
|
|
11
14
|
version?: number;
|
|
12
|
-
migrate?: (persisted: unknown, version: number) =>
|
|
15
|
+
migrate?: (persisted: unknown, version: number) => unknown;
|
|
13
16
|
merge?: (persisted: Partial<TState>, current: TState) => Partial<TState>;
|
|
14
|
-
debounce?: number;
|
|
15
17
|
};
|
|
16
18
|
export declare const persistMiddleware: <TState extends object>(options: PersistOptions<TState>) => StoreMiddleware<TState>;
|
|
@@ -1,40 +1,68 @@
|
|
|
1
|
+
import e from "../helpers/getByPath.mjs";
|
|
2
|
+
import { isDisabled as t } from "./isDisabled.mjs";
|
|
3
|
+
import n from "../helpers/isPathAffected.mjs";
|
|
1
4
|
//#region src/middleware/persistMiddleware.ts
|
|
2
|
-
var e = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
var r = (e = "local") => {
|
|
6
|
+
if (typeof e != "string") return e;
|
|
7
|
+
try {
|
|
8
|
+
return e === "session" ? globalThis.sessionStorage : globalThis.localStorage;
|
|
9
|
+
} catch {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
}, i = (i) => {
|
|
13
|
+
let { key: o, storage: s, paths: c, partialize: l, version: u = 0, migrate: d, merge: f, enabled: p } = i, m = typeof s == "function" ? s : void 0, h = typeof s == "function" ? void 0 : r(s);
|
|
14
|
+
if (!m && !h) return () => void 0;
|
|
15
|
+
let g = (e) => {
|
|
16
|
+
if (!m) return h;
|
|
17
|
+
let t = m(e);
|
|
18
|
+
return t ? r(t) : void 0;
|
|
19
|
+
}, _ = (t) => {
|
|
20
|
+
if (c) {
|
|
21
|
+
let n = {};
|
|
22
|
+
for (let r of c) n[r] = e(t, r);
|
|
23
|
+
return n;
|
|
24
|
+
}
|
|
25
|
+
return l ? l(t) : t;
|
|
26
|
+
}, v = (e) => {
|
|
27
|
+
let t = e.getState(), n = g(t);
|
|
28
|
+
if (!n) return;
|
|
29
|
+
let r = {
|
|
30
|
+
version: u,
|
|
31
|
+
state: _(t)
|
|
11
32
|
};
|
|
12
|
-
|
|
13
|
-
};
|
|
33
|
+
n.setItem(o, JSON.stringify(r));
|
|
34
|
+
}, y = (e) => !c || c.some((t) => n(e, t));
|
|
14
35
|
return (e) => {
|
|
15
|
-
|
|
36
|
+
if (t(p, e.getState())) return;
|
|
37
|
+
let n = !1, r = () => {
|
|
38
|
+
if (n) return;
|
|
39
|
+
let t = g(e.getState());
|
|
40
|
+
t && (n = !0, a(e, o, t, u, c, d, f));
|
|
41
|
+
};
|
|
16
42
|
return {
|
|
17
|
-
hydrate:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
onChange: () => {
|
|
21
|
-
if (l <= 0) {
|
|
22
|
-
u(e);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
clearTimeout(t), t = setTimeout(() => u(e), l);
|
|
43
|
+
hydrate: r,
|
|
44
|
+
onChange: (t) => {
|
|
45
|
+
r(), y(t.path) && v(e);
|
|
26
46
|
}
|
|
27
47
|
};
|
|
28
48
|
};
|
|
29
49
|
};
|
|
30
|
-
function
|
|
31
|
-
let
|
|
32
|
-
if (
|
|
33
|
-
let t = JSON.parse(
|
|
34
|
-
|
|
50
|
+
function a(e, t, n, r, i, a, o) {
|
|
51
|
+
let s = n?.getItem(t);
|
|
52
|
+
if (s) try {
|
|
53
|
+
let t = JSON.parse(s), n = t.version !== r && a ? a(t.state, t.version) : t.state;
|
|
54
|
+
if (i) {
|
|
55
|
+
let t = n;
|
|
56
|
+
e.batch(() => {
|
|
57
|
+
for (let n of i) n in t && e.setState(n, t[n]);
|
|
58
|
+
});
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
let c = n;
|
|
62
|
+
e.setState(void 0, o ? o(c, e.getState()) : c);
|
|
35
63
|
} catch {
|
|
36
|
-
n
|
|
64
|
+
n?.removeItem(t);
|
|
37
65
|
}
|
|
38
66
|
}
|
|
39
67
|
//#endregion
|
|
40
|
-
export {
|
|
68
|
+
export { i as persistMiddleware };
|