@plitzi/nexus 0.31.1 → 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 +12 -0
- package/README.md +197 -1
- package/dist/StoreProvider.mjs +44 -38
- package/dist/async/createAsync.mjs +8 -1
- package/dist/createStore/createStore.d.ts +11 -47
- package/dist/createStore/createStore.mjs +57 -39
- 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/helpers/writeByPath.mjs +1 -0
- 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.d.ts +1 -0
- package/dist/index.mjs +11 -9
- 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 +58 -26
- package/dist/middleware/reduxDevToolsMiddleware.d.ts +2 -2
- package/dist/middleware/reduxDevToolsMiddleware.mjs +26 -21
- package/dist/next/index.d.ts +26 -0
- package/dist/next/index.mjs +18 -0
- package/dist/rsc/index.d.ts +29 -0
- package/dist/rsc/index.mjs +18 -0
- package/dist/types/StoreTypes.d.ts +33 -21
- package/logo.svg +57 -0
- package/package.json +22 -10
|
@@ -1,42 +1,77 @@
|
|
|
1
1
|
import e from "../../helpers/parsePath.mjs";
|
|
2
2
|
import t from "./Subscribers.mjs";
|
|
3
3
|
//#region src/createStore/helpers/PathTrie.ts
|
|
4
|
-
var n =
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
var n = class {
|
|
5
|
+
subscribers = null;
|
|
6
|
+
children = null;
|
|
7
7
|
}, r = class {
|
|
8
8
|
direct = /* @__PURE__ */ new Map();
|
|
9
9
|
descendants = /* @__PURE__ */ new Map();
|
|
10
|
+
root = new n();
|
|
10
11
|
size = 0;
|
|
11
12
|
add(r, i) {
|
|
12
|
-
let a =
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
let a = e(r), o = this.direct.get(r);
|
|
14
|
+
if (!o) {
|
|
15
|
+
o = new t(), this.direct.set(r, o);
|
|
16
|
+
let e = this.root;
|
|
17
|
+
for (let t of a) {
|
|
18
|
+
e.children ||= /* @__PURE__ */ new Map();
|
|
19
|
+
let r = e.children.get(t);
|
|
20
|
+
r || (r = new n(), e.children.set(t, r)), e = r;
|
|
21
|
+
}
|
|
22
|
+
e.subscribers = o, this.size++;
|
|
23
|
+
let i = "";
|
|
24
|
+
for (let e = 0; e < a.length - 1; e++) {
|
|
25
|
+
i = i ? `${i}.${a[e]}` : a[e];
|
|
26
|
+
let t = this.descendants.get(i);
|
|
27
|
+
t || (t = /* @__PURE__ */ new Set(), this.descendants.set(i, t)), t.add(r);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return o.add(i), () => this.remove(r, o, i, a);
|
|
17
31
|
}
|
|
18
|
-
remove(e, t,
|
|
19
|
-
this.direct.get(e)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
32
|
+
remove(e, t, n, r) {
|
|
33
|
+
if (this.direct.get(e) !== t || (t.remove(n), t.length > 0)) return;
|
|
34
|
+
this.direct.delete(e), this.size--;
|
|
35
|
+
let i = this.root;
|
|
36
|
+
for (let e of r) {
|
|
37
|
+
if (!i.children) return;
|
|
38
|
+
let t = i.children.get(e);
|
|
39
|
+
if (!t) return;
|
|
40
|
+
i = t;
|
|
41
|
+
}
|
|
42
|
+
i.subscribers === t && (i.subscribers = null);
|
|
43
|
+
let a = "";
|
|
44
|
+
for (let t = 0; t < r.length - 1; t++) {
|
|
45
|
+
a = a ? `${a}.${r[t]}` : r[t];
|
|
46
|
+
let n = this.descendants.get(a);
|
|
47
|
+
n && (n.delete(e), n.size === 0 && this.descendants.delete(a));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
walkAncestors(e, t) {
|
|
51
|
+
let n = this.root;
|
|
52
|
+
for (let r of e) {
|
|
53
|
+
if (!n.children) return;
|
|
54
|
+
let e = n.children.get(r);
|
|
55
|
+
if (!e) return;
|
|
56
|
+
n = e, n.subscribers && t(n.subscribers);
|
|
57
|
+
}
|
|
23
58
|
}
|
|
24
59
|
getDescendants(e) {
|
|
25
60
|
return this.descendants.get(e);
|
|
26
61
|
}
|
|
27
|
-
forEachAffected(t,
|
|
28
|
-
let
|
|
29
|
-
e && e.forEach(
|
|
62
|
+
forEachAffected(t, n, r) {
|
|
63
|
+
let i = (e) => {
|
|
64
|
+
e && e.forEach(n, r);
|
|
30
65
|
};
|
|
31
66
|
if (typeof t != "string") {
|
|
32
|
-
this.direct.forEach(
|
|
67
|
+
this.direct.forEach(i);
|
|
33
68
|
return;
|
|
34
69
|
}
|
|
35
|
-
let
|
|
36
|
-
|
|
70
|
+
let a = e(t);
|
|
71
|
+
this.walkAncestors(a, i), this.descendants.get(t)?.forEach((e) => i(this.direct.get(e)));
|
|
37
72
|
}
|
|
38
73
|
clear() {
|
|
39
|
-
this.direct.clear(), this.descendants.clear(), this.size = 0;
|
|
74
|
+
this.direct.clear(), this.descendants.clear(), this.root.children = null, this.root.subscribers = null, this.size = 0;
|
|
40
75
|
}
|
|
41
76
|
};
|
|
42
77
|
//#endregion
|
|
@@ -4,7 +4,7 @@ export type ChainReads<TState extends object> = {
|
|
|
4
4
|
getState: GetState<TState>;
|
|
5
5
|
getPath: GetPath<TState>;
|
|
6
6
|
invalidate: () => void;
|
|
7
|
-
|
|
7
|
+
resetCache: () => void;
|
|
8
8
|
getMergeCount: () => number;
|
|
9
9
|
};
|
|
10
10
|
export declare function createChainReads<TState extends object>(getOwnState: () => TState, getOwnSnapshot: () => TState, parent: StoreApi<TState> | undefined): ChainReads<TState>;
|
|
@@ -6,31 +6,30 @@ function r(r, i, a) {
|
|
|
6
6
|
getState: i,
|
|
7
7
|
getPath: (e) => n(r(), e),
|
|
8
8
|
invalidate: () => {},
|
|
9
|
-
|
|
9
|
+
resetCache: () => {},
|
|
10
10
|
getMergeCount: () => 0
|
|
11
11
|
};
|
|
12
|
-
let o = a, s = !0, c = !
|
|
12
|
+
let o = a, s = !0, c = !1, l, u = 0, d = /* @__PURE__ */ new Map(), f = () => (u++, e(o.getState(), i())), p = () => ((s || l === void 0) && (l = f(), s = !1), l), m = (e) => {
|
|
13
13
|
let i = n(r(), e);
|
|
14
14
|
if (i === void 0) return o.getPath(e);
|
|
15
15
|
let a = o.getPath(e);
|
|
16
|
-
return a === void 0 || !t(i) || !t(a) ? i : n(
|
|
16
|
+
return a === void 0 || !t(i) || !t(a) ? i : n(p(), e);
|
|
17
17
|
};
|
|
18
18
|
return {
|
|
19
|
-
getState:
|
|
19
|
+
getState: p,
|
|
20
20
|
getPath: (e) => {
|
|
21
|
-
if (
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return f.set(e, t), t;
|
|
21
|
+
if (c) d.clear(), c = !1;
|
|
22
|
+
else if (d.has(e)) return d.get(e);
|
|
23
|
+
let t = m(e);
|
|
24
|
+
return d.set(e, t), t;
|
|
26
25
|
},
|
|
27
26
|
invalidate: () => {
|
|
28
|
-
|
|
27
|
+
s = !0, c = !0;
|
|
29
28
|
},
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
resetCache: () => {
|
|
30
|
+
d.clear(), l = void 0, s = !0, c = !1;
|
|
32
31
|
},
|
|
33
|
-
getMergeCount: () =>
|
|
32
|
+
getMergeCount: () => u
|
|
34
33
|
};
|
|
35
34
|
}
|
|
36
35
|
//#endregion
|
|
@@ -44,12 +44,14 @@ function u(u) {
|
|
|
44
44
|
for (let e = 0, t = n.length; e < t; e++) T.add(n[e]);
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
if (n.length !== 0) {
|
|
48
|
+
e.begin();
|
|
49
|
+
try {
|
|
50
|
+
let e = s(n, t, n.length);
|
|
51
|
+
e !== o && b(e, "notify", t);
|
|
52
|
+
} finally {
|
|
53
|
+
e.end();
|
|
54
|
+
}
|
|
53
55
|
}
|
|
54
56
|
}, D = (e) => {
|
|
55
57
|
w++;
|
|
@@ -77,19 +79,14 @@ function u(u) {
|
|
|
77
79
|
v.end();
|
|
78
80
|
}
|
|
79
81
|
}, k = (e, t) => {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if (a) for (let o of a) {
|
|
89
|
-
let a = _.direct.get(o);
|
|
90
|
-
if (!a) continue;
|
|
91
|
-
let s = o.slice(i);
|
|
92
|
-
t(n, s) !== t(r, s) && E(a, e);
|
|
82
|
+
_.walkAncestors(t, (t) => E(t, e));
|
|
83
|
+
}, A = (n, r, i, a) => {
|
|
84
|
+
let o = _.getDescendants(n);
|
|
85
|
+
if (o) for (let s of o) {
|
|
86
|
+
let o = _.direct.get(s);
|
|
87
|
+
if (!o) continue;
|
|
88
|
+
let c = e(s).slice(a);
|
|
89
|
+
t(r, c) !== t(i, c) && E(o, n);
|
|
93
90
|
}
|
|
94
91
|
}, j = (e, n, r, o) => {
|
|
95
92
|
let s = e ? t(r, e) : void 0, c = e ? typeof n == "function" ? n(s) : n : void 0;
|
|
@@ -108,15 +105,9 @@ function u(u) {
|
|
|
108
105
|
if (e === a) return;
|
|
109
106
|
l = e;
|
|
110
107
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
E(g, e), _.size > 0 && _.direct.forEach((n, i) => {
|
|
117
|
-
t(r, i) !== t(l, i) && E(n, e);
|
|
118
|
-
});
|
|
119
|
-
}
|
|
108
|
+
l !== r && (p(l), v.length > 0 && O(e, r, l), x(), o && (E(g, e), _.size > 0 && _.direct.forEach((n, i) => {
|
|
109
|
+
t(r, i) !== t(l, i) && E(n, e);
|
|
110
|
+
})));
|
|
120
111
|
};
|
|
121
112
|
return {
|
|
122
113
|
setState: (i, o, s = !0) => {
|
|
@@ -139,11 +130,11 @@ function u(u) {
|
|
|
139
130
|
}
|
|
140
131
|
if (e === n) return;
|
|
141
132
|
let r = v.length > 0 ? f() : void 0;
|
|
142
|
-
if (m(i, n), r !== void 0 && O(i, r, f()), s) {
|
|
143
|
-
E(g, i);
|
|
133
|
+
if (m(i, n), r !== void 0 && O(i, r, f()), s && (E(g, i), _.size > 0)) {
|
|
144
134
|
let t = _.direct.get(i);
|
|
145
|
-
t && E(t, i), A(i, e, n,
|
|
146
|
-
}
|
|
135
|
+
t && E(t, i), A(i, e, n, 1);
|
|
136
|
+
}
|
|
137
|
+
x();
|
|
147
138
|
return;
|
|
148
139
|
}
|
|
149
140
|
let b = e(i), w;
|
|
@@ -154,7 +145,7 @@ function u(u) {
|
|
|
154
145
|
} else w = r(u, i, b, o, typeof o == "function");
|
|
155
146
|
if (w === n) return;
|
|
156
147
|
let T = w;
|
|
157
|
-
p(T), v.length > 0 && O(i, u, T), s
|
|
148
|
+
p(T), v.length > 0 && O(i, u, T), s && (E(g, i), _.size > 0 && (k(i, b), A(i, u, T, 0))), x();
|
|
158
149
|
},
|
|
159
150
|
batch: D
|
|
160
151
|
};
|
|
@@ -24,6 +24,7 @@ var e = Symbol("unchanged"), t = (e) => /^\d+$/.test(e), n = (e) => Array.isArra
|
|
|
24
24
|
return n += `return ${i};`, Function("o", "v", "f", n);
|
|
25
25
|
}, c, l, u = () => {
|
|
26
26
|
if (l !== void 0) return l;
|
|
27
|
+
if (typeof window > "u") return !1;
|
|
27
28
|
if (c === void 0) try {
|
|
28
29
|
s(["x", "y"])({ x: {} }, 1, !1), c = !0;
|
|
29
30
|
} catch {
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { PathOf, PathOrFn, StoreApi, SyncMode } from '../../types';
|
|
2
2
|
import { RefObject } from 'react';
|
|
3
3
|
export declare const defaultMultiEqualityFn: (a: unknown[], b: unknown[]) => boolean;
|
|
4
|
-
export declare function makeSingleSnapshot<TState extends object>(store: StoreApi<TState>, pathOrFn: PathOf<TState> | ((state: TState) => PathOf<TState>) | undefined
|
|
4
|
+
export declare function makeSingleSnapshot<TState extends object>(store: StoreApi<TState>, pathOrFn: PathOf<TState> | ((state: TState) => PathOf<TState>) | undefined): () => unknown;
|
|
5
5
|
export declare function makeMultiSnapshot<TState extends object>(store: StoreApi<TState>, pathsRef: RefObject<ReadonlyArray<PathOrFn<TState>>>, lastRef: RefObject<unknown[] | null>, options?: {
|
|
6
6
|
equalityFn?: (a: unknown[], b: unknown[]) => boolean;
|
|
7
|
-
defaultValue?: unknown;
|
|
8
7
|
}): () => unknown[];
|
|
9
8
|
export declare function useResolvedStore<TState extends object>(optionStore: StoreApi<TState> | undefined, hookName: string, storeId?: string): StoreApi<TState>;
|
|
10
9
|
export declare function useMultiSubscribe<TState extends object>(store: StoreApi<TState>, pathsRef: RefObject<ReadonlyArray<PathOrFn<TState>>>, pathsKey: string, enabled: boolean, mode: SyncMode): (cb: () => void) => () => void;
|
|
@@ -7,32 +7,21 @@ var c = (e, t) => {
|
|
|
7
7
|
for (let n = 0; n < e.length; n++) if (!Object.is(e[n], t[n])) return !1;
|
|
8
8
|
return !0;
|
|
9
9
|
};
|
|
10
|
-
function l(t, n
|
|
10
|
+
function l(t, n) {
|
|
11
11
|
return () => {
|
|
12
|
-
if (typeof n == "string")
|
|
13
|
-
let e = t.getPath(n);
|
|
14
|
-
return e === void 0 ? r : e;
|
|
15
|
-
}
|
|
12
|
+
if (typeof n == "string") return t.getPath(n);
|
|
16
13
|
if (typeof n == "function") {
|
|
17
|
-
let
|
|
18
|
-
return
|
|
14
|
+
let r = t.getState();
|
|
15
|
+
return e(r, n(r));
|
|
19
16
|
}
|
|
20
17
|
return t.getState();
|
|
21
18
|
};
|
|
22
19
|
}
|
|
23
20
|
function u(t, n, r, i = {}) {
|
|
24
|
-
let { equalityFn: a = c
|
|
21
|
+
let { equalityFn: a = c } = i;
|
|
25
22
|
return () => {
|
|
26
|
-
let i = n.current,
|
|
27
|
-
|
|
28
|
-
if (i !== void 0 || o === void 0) return i;
|
|
29
|
-
if (Array.isArray(o)) {
|
|
30
|
-
let e = o[r];
|
|
31
|
-
return e === void 0 ? i : e;
|
|
32
|
-
}
|
|
33
|
-
return o;
|
|
34
|
-
}), l = r.current;
|
|
35
|
-
return l !== null && a(l, c) ? l : (r.current = c, c);
|
|
23
|
+
let i = n.current, o = i.some((e) => typeof e == "function") ? t.getState() : void 0, s = i.map((n) => typeof n == "function" ? e(o, n(o)) : t.getPath(n)), c = r.current;
|
|
24
|
+
return c !== null && a(c, s) ? c : (r.current = s, s);
|
|
36
25
|
};
|
|
37
26
|
}
|
|
38
27
|
function d(e, i, o) {
|
|
@@ -1,72 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MultiPathReturn, PathOf, PathOrFn, PathOrFnSetters, PathOrFnValues, PathSetter, PathSetters, PathValue, PathValues, StoreApi, UseStoreMultiOptions, UseStoreOptions, UseStoreReturn } from '../../types';
|
|
2
2
|
export { defaultMultiEqualityFn } from './shared';
|
|
3
3
|
export type { MultiPathReturn, UseStoreOptions, UseStoreMultiOptions, UseStoreReturn };
|
|
4
4
|
declare function useStore<TState extends object>(arg?: undefined, options?: UseStoreOptions<TState>): [TState, StoreApi<TState>['setState']];
|
|
5
|
-
declare function useStore<TState extends object, P extends PathOf<TState>>(path: P, options: Omit<UseStoreOptions<PathValue<TState, P>>, 'defaultValue'> & {
|
|
6
|
-
defaultValue: undefined;
|
|
7
|
-
transformer?: never;
|
|
8
|
-
}): [PathValue<TState, P> | undefined, PathSetter<TState, P>];
|
|
9
5
|
declare function useStore<TState extends object, P extends PathOf<TState>>(path: P, options?: UseStoreOptions<PathValue<TState, P>> & {
|
|
10
|
-
defaultValue?: never;
|
|
11
6
|
transformer?: never;
|
|
12
7
|
}): [PathValue<TState, P>, PathSetter<TState, P>];
|
|
13
|
-
declare function useStore<TState extends object, P extends PathOf<TState>, D>(path: P, options: UseStoreOptions<PathValue<TState, P>> & {
|
|
14
|
-
defaultValue: D;
|
|
15
|
-
transformer?: never;
|
|
16
|
-
}): [NonNullable<PathValue<TState, P>> | D, PathSetter<TState, P>];
|
|
17
8
|
declare function useStore<TState extends object, P extends PathOf<TState>, TResult>(path: P, options: UseStoreOptions<PathValue<TState, P>> & {
|
|
18
9
|
transformer: (value: PathValue<TState, P>) => TResult;
|
|
19
10
|
}): [TResult, PathSetter<TState, P>];
|
|
20
|
-
declare function useStore<TState extends object, P extends PathOf<TState>>(pathFn: (state: TState) => P, options: Omit<UseStoreOptions<PathValue<TState, P>, TState>, 'defaultValue'> & {
|
|
21
|
-
defaultValue: undefined;
|
|
22
|
-
transformer?: never;
|
|
23
|
-
}): [PathValue<TState, P> | undefined, PathSetter<TState, P>];
|
|
24
11
|
declare function useStore<TState extends object, P extends PathOf<TState>>(pathFn: (state: TState) => P, options?: UseStoreOptions<PathValue<TState, P>, TState> & {
|
|
25
|
-
defaultValue?: never;
|
|
26
12
|
transformer?: never;
|
|
27
13
|
}): [PathValue<TState, P>, PathSetter<TState, P>];
|
|
28
|
-
declare function useStore<TState extends object, P extends PathOf<TState>, D>(pathFn: (state: TState) => P, options: UseStoreOptions<PathValue<TState, P>, TState> & {
|
|
29
|
-
defaultValue: D;
|
|
30
|
-
transformer?: never;
|
|
31
|
-
}): [NonNullable<PathValue<TState, P>> | D, PathSetter<TState, P>];
|
|
32
14
|
declare function useStore<TState extends object, P extends PathOf<TState>, TResult>(pathFn: (state: TState) => P, options: UseStoreOptions<PathValue<TState, P>, TState> & {
|
|
33
15
|
transformer: (value: PathValue<TState, P>) => TResult;
|
|
34
16
|
}): [TResult, PathSetter<TState, P>];
|
|
35
|
-
declare function useStore<TState extends object, const Paths extends ReadonlyArray<PathOf<TState>>>(paths: Paths, options?: Omit<UseStoreMultiOptions<TState, Paths>, '
|
|
36
|
-
declare function useStore<TState extends object, const Paths extends ReadonlyArray<PathOf<TState>>>(paths: Paths, options: UseStoreMultiOptions<TState, Paths> & {
|
|
37
|
-
defaultValue: undefined;
|
|
38
|
-
transformer?: never;
|
|
39
|
-
}): MultiPathReturn<TState, Paths, undefined>;
|
|
40
|
-
declare function useStore<TState extends object, const Paths extends ReadonlyArray<PathOf<TState>>, const TDefaultValue extends readonly (PathValue<TState, Paths[number]> | undefined)[]>(paths: Paths, options: UseStoreMultiOptions<TState, Paths, TDefaultValue> & {
|
|
41
|
-
defaultValue: TDefaultValue;
|
|
42
|
-
transformer?: never;
|
|
43
|
-
}): MultiPathReturn<TState, Paths, TDefaultValue>;
|
|
44
|
-
declare function useStore<TState extends object, const Paths extends ReadonlyArray<PathOf<TState>>, TDefaultValue extends PathValue<TState, Paths[number]>>(paths: Paths, options: UseStoreMultiOptions<TState, Paths, TDefaultValue> & {
|
|
45
|
-
defaultValue: TDefaultValue;
|
|
46
|
-
transformer?: never;
|
|
47
|
-
}): MultiPathReturn<TState, Paths, TDefaultValue>;
|
|
17
|
+
declare function useStore<TState extends object, const Paths extends ReadonlyArray<PathOf<TState>>>(paths: Paths, options?: Omit<UseStoreMultiOptions<TState, Paths>, 'transformer'>): MultiPathReturn<TState, Paths>;
|
|
48
18
|
declare function useStore<TState extends object, const Paths extends ReadonlyArray<PathOf<TState>>, TResult>(paths: Paths, options: UseStoreMultiOptions<TState, Paths> & {
|
|
49
19
|
transformer: (values: PathValues<TState, Paths>) => TResult;
|
|
50
20
|
}): [TResult, ...PathSetters<TState, Paths>];
|
|
51
|
-
declare function useStore<TState extends object, const Entries extends ReadonlyArray<PathOrFn<TState>>>(paths: Entries, options?: Omit<UseStoreMultiOptions<TState, any>, '
|
|
21
|
+
declare function useStore<TState extends object, const Entries extends ReadonlyArray<PathOrFn<TState>>>(paths: Entries, options?: Omit<UseStoreMultiOptions<TState, any>, 'transformer'> & {
|
|
52
22
|
transformer?: never;
|
|
53
23
|
}): [PathOrFnValues<TState, Entries>, ...PathOrFnSetters<TState, Entries>];
|
|
54
|
-
declare function useStore<TState extends object, const Entries extends ReadonlyArray<PathOrFn<TState
|
|
55
|
-
defaultValue: undefined;
|
|
56
|
-
transformer?: never;
|
|
57
|
-
}): [{
|
|
58
|
-
[I in keyof Entries]: PathOrFnValue<TState, Entries[I]> | undefined;
|
|
59
|
-
}, ...PathOrFnSetters<TState, Entries>];
|
|
60
|
-
declare function useStore<TState extends object, const Entries extends ReadonlyArray<PathOrFn<TState>>, const TDefaultValue extends readonly unknown[]>(paths: Entries, options: Omit<UseStoreMultiOptions<TState, any>, 'defaultValue' | 'transformer'> & {
|
|
61
|
-
defaultValue: TDefaultValue;
|
|
62
|
-
transformer?: never;
|
|
63
|
-
}): [
|
|
64
|
-
{
|
|
65
|
-
[I in keyof Entries]: I extends keyof TDefaultValue ? TDefaultValue[I] extends undefined ? PathOrFnValue<TState, Entries[I]> | undefined : NonNullable<PathOrFnValue<TState, Entries[I]>> | TDefaultValue[I] : PathOrFnValue<TState, Entries[I]>;
|
|
66
|
-
},
|
|
67
|
-
...PathOrFnSetters<TState, Entries>
|
|
68
|
-
];
|
|
69
|
-
declare function useStore<TState extends object, const Entries extends ReadonlyArray<PathOrFn<TState>>, TResult>(paths: Entries, options: Omit<UseStoreMultiOptions<TState, any>, 'defaultValue' | 'transformer'> & {
|
|
24
|
+
declare function useStore<TState extends object, const Entries extends ReadonlyArray<PathOrFn<TState>>, TResult>(paths: Entries, options: Omit<UseStoreMultiOptions<TState, any>, 'transformer'> & {
|
|
70
25
|
transformer: (values: PathOrFnValues<TState, Entries>) => TResult;
|
|
71
26
|
}): [TResult, ...PathOrFnSetters<TState, Entries>];
|
|
72
27
|
export type { PathSetters, PathValues };
|
|
@@ -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>;
|