@plitzi/nexus 0.31.1

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.
Files changed (94) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/LICENSE +74 -0
  3. package/README.md +563 -0
  4. package/dist/StoreContext.d.ts +10 -0
  5. package/dist/StoreContext.mjs +11 -0
  6. package/dist/StoreProvider.d.ts +24 -0
  7. package/dist/StoreProvider.mjs +51 -0
  8. package/dist/async/createAsync.d.ts +19 -0
  9. package/dist/async/createAsync.mjs +29 -0
  10. package/dist/async/hooks/useAsync.d.ts +2 -0
  11. package/dist/async/hooks/useAsync.mjs +7 -0
  12. package/dist/async/hooks/useAsyncValue.d.ts +2 -0
  13. package/dist/async/hooks/useAsyncValue.mjs +13 -0
  14. package/dist/async/index.d.ts +4 -0
  15. package/dist/async/index.mjs +4 -0
  16. package/dist/createStore/createStore.d.ts +90 -0
  17. package/dist/createStore/createStore.mjs +104 -0
  18. package/dist/createStore/helpers/PathTrie.d.ts +13 -0
  19. package/dist/createStore/helpers/PathTrie.mjs +43 -0
  20. package/dist/createStore/helpers/Subscribers.d.ts +15 -0
  21. package/dist/createStore/helpers/Subscribers.mjs +59 -0
  22. package/dist/createStore/helpers/createChainReads.d.ts +10 -0
  23. package/dist/createStore/helpers/createChainReads.mjs +37 -0
  24. package/dist/createStore/helpers/createSetState.d.ts +22 -0
  25. package/dist/createStore/helpers/createSetState.mjs +163 -0
  26. package/dist/createStore/helpers/deepMerge.d.ts +2 -0
  27. package/dist/createStore/helpers/deepMerge.mjs +9 -0
  28. package/dist/createStore/helpers/forwardParentChanges.d.ts +7 -0
  29. package/dist/createStore/helpers/forwardParentChanges.mjs +23 -0
  30. package/dist/createStore/helpers/scopeCollisions.d.ts +4 -0
  31. package/dist/createStore/helpers/scopeCollisions.mjs +14 -0
  32. package/dist/createStore/helpers/writeByPath.d.ts +11 -0
  33. package/dist/createStore/helpers/writeByPath.mjs +51 -0
  34. package/dist/createStore/hooks/shared.d.ts +12 -0
  35. package/dist/createStore/hooks/shared.mjs +85 -0
  36. package/dist/createStore/hooks/useStore.d.ts +73 -0
  37. package/dist/createStore/hooks/useStore.mjs +57 -0
  38. package/dist/createStore/hooks/useStoreById.d.ts +3 -0
  39. package/dist/createStore/hooks/useStoreById.mjs +7 -0
  40. package/dist/createStore/hooks/useStoreGetter.d.ts +9 -0
  41. package/dist/createStore/hooks/useStoreGetter.mjs +38 -0
  42. package/dist/createStore/hooks/useStoreSetter.d.ts +5 -0
  43. package/dist/createStore/hooks/useStoreSetter.mjs +11 -0
  44. package/dist/createStore/hooks/useStoreSync.d.ts +7 -0
  45. package/dist/createStore/hooks/useStoreSync.mjs +55 -0
  46. package/dist/createStore/index.d.ts +3 -0
  47. package/dist/createStore/index.mjs +5 -0
  48. package/dist/derived/createDerived.d.ts +10 -0
  49. package/dist/derived/createDerived.mjs +21 -0
  50. package/dist/derived/hooks/useDerived.d.ts +2 -0
  51. package/dist/derived/hooks/useDerived.mjs +7 -0
  52. package/dist/derived/index.d.ts +3 -0
  53. package/dist/derived/index.mjs +3 -0
  54. package/dist/entities/createEntityAdapter.d.ts +32 -0
  55. package/dist/entities/createEntityAdapter.mjs +73 -0
  56. package/dist/entities/index.d.ts +2 -0
  57. package/dist/entities/index.mjs +2 -0
  58. package/dist/helpers/createObservable.d.ts +9 -0
  59. package/dist/helpers/createObservable.mjs +18 -0
  60. package/dist/helpers/getByPath.d.ts +4 -0
  61. package/dist/helpers/getByPath.mjs +40 -0
  62. package/dist/helpers/isPathAffected.d.ts +3 -0
  63. package/dist/helpers/isPathAffected.mjs +4 -0
  64. package/dist/helpers/parsePath.d.ts +2 -0
  65. package/dist/helpers/parsePath.mjs +7 -0
  66. package/dist/helpers/setByPath.d.ts +3 -0
  67. package/dist/helpers/setByPath.mjs +19 -0
  68. package/dist/helpers/shallowEqual.d.ts +2 -0
  69. package/dist/helpers/shallowEqual.mjs +11 -0
  70. package/dist/helpers/useIsomorphicLayoutEffect.d.ts +3 -0
  71. package/dist/helpers/useIsomorphicLayoutEffect.mjs +5 -0
  72. package/dist/history/hooks/useStoreHistory.d.ts +8 -0
  73. package/dist/history/hooks/useStoreHistory.mjs +24 -0
  74. package/dist/history/index.d.ts +4 -0
  75. package/dist/history/index.mjs +3 -0
  76. package/dist/index.d.ts +16 -0
  77. package/dist/index.mjs +21 -0
  78. package/dist/middleware/cascade.d.ts +2 -0
  79. package/dist/middleware/cascade.mjs +4 -0
  80. package/dist/middleware/historyMiddleware.d.ts +28 -0
  81. package/dist/middleware/historyMiddleware.mjs +81 -0
  82. package/dist/middleware/index.d.ts +8 -0
  83. package/dist/middleware/index.mjs +6 -0
  84. package/dist/middleware/loggerMiddleware.d.ts +7 -0
  85. package/dist/middleware/loggerMiddleware.mjs +20 -0
  86. package/dist/middleware/persistMiddleware.d.ts +16 -0
  87. package/dist/middleware/persistMiddleware.mjs +36 -0
  88. package/dist/middleware/reduxDevToolsMiddleware.d.ts +6 -0
  89. package/dist/middleware/reduxDevToolsMiddleware.mjs +26 -0
  90. package/dist/types/StoreTypes.d.ts +143 -0
  91. package/dist/types/StoreTypes.mjs +4 -0
  92. package/dist/types/index.d.ts +1 -0
  93. package/dist/types/index.mjs +2 -0
  94. package/package.json +257 -0
@@ -0,0 +1,163 @@
1
+ import e from "../../helpers/parsePath.mjs";
2
+ import t from "../../helpers/getByPath.mjs";
3
+ import { UNCHANGED as n, writeByPath as r } from "./writeByPath.mjs";
4
+ import i from "../../helpers/setByPath.mjs";
5
+ import { CANCEL as a } from "../../types/StoreTypes.mjs";
6
+ //#region src/createStore/helpers/createSetState.ts
7
+ var o = Symbol("no-error"), s = (e, t, n) => {
8
+ let r = 0, i = o;
9
+ for (; r < n;) try {
10
+ for (; r < n; r++) e[r](t);
11
+ } catch (e) {
12
+ i === o && (i = e), r++;
13
+ }
14
+ return i;
15
+ }, c = "__proto__", l = (e, t) => {
16
+ let n = e;
17
+ for (let e = 0, r = t.length; e < r; e++) {
18
+ if (typeof n != "object" || !n || !Object.hasOwn(n, t[e])) return !1;
19
+ n = n[t[e]];
20
+ }
21
+ return !0;
22
+ };
23
+ function u(u) {
24
+ let { getOwnState: d, getOwnSnapshot: f, setOwnState: p, mutateOwnKey: m, parent: h, listeners: g, pathListeners: _, changeListeners: v, interceptors: y, reportError: b, invalidateDescendants: x, onDelegateToParent: S } = u, C = (e, t, n) => {
25
+ let r = t;
26
+ for (let t = 0, i = y.length; t < i; t++) {
27
+ let i;
28
+ try {
29
+ i = y[t]({
30
+ path: e,
31
+ value: r,
32
+ prev: n
33
+ });
34
+ } catch (t) {
35
+ return b(t, "beforeChange", e), a;
36
+ }
37
+ if (i === a) return a;
38
+ i !== void 0 && (r = i);
39
+ }
40
+ return r;
41
+ }, w = 0, T = /* @__PURE__ */ new Set(), E = (e, t) => {
42
+ let { items: n } = e;
43
+ if (w > 0) {
44
+ for (let e = 0, t = n.length; e < t; e++) T.add(n[e]);
45
+ return;
46
+ }
47
+ e.begin();
48
+ try {
49
+ let e = s(n, t, n.length);
50
+ e !== o && b(e, "notify", t);
51
+ } finally {
52
+ e.end();
53
+ }
54
+ }, D = (e) => {
55
+ w++;
56
+ try {
57
+ return e();
58
+ } finally {
59
+ if (w--, w === 0 && T.size > 0) {
60
+ let e = [...T];
61
+ T.clear();
62
+ let t = s(e, void 0, e.length);
63
+ t !== o && b(t, "notify", void 0);
64
+ }
65
+ }
66
+ }, O = (e, t, n) => {
67
+ let r = {
68
+ path: e,
69
+ prev: t,
70
+ next: n
71
+ }, { items: i } = v;
72
+ v.begin();
73
+ try {
74
+ let t = s(i, r, i.length);
75
+ t !== o && b(t, "onChange", e);
76
+ } finally {
77
+ v.end();
78
+ }
79
+ }, k = (e, t) => {
80
+ let n = "";
81
+ for (let r = 0; r < t.length; r++) {
82
+ n = n ? `${n}.${t[r]}` : t[r];
83
+ let i = _.direct.get(n);
84
+ i && E(i, e);
85
+ }
86
+ }, A = (e, n, r, i) => {
87
+ let a = _.getDescendants(e);
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);
93
+ }
94
+ }, j = (e, n, r, o) => {
95
+ let s = e ? t(r, e) : void 0, c = e ? typeof n == "function" ? n(s) : n : void 0;
96
+ if (e && y.length > 0) {
97
+ let t = C(e, c, s);
98
+ if (t === a) return;
99
+ c = t;
100
+ }
101
+ if (e && s === c) return;
102
+ let l = e ? i(r, e, c) : typeof n == "function" ? n(r) : {
103
+ ...r,
104
+ ...n
105
+ };
106
+ if (!e && y.length > 0) {
107
+ let e = C(void 0, l, r);
108
+ if (e === a) return;
109
+ l = e;
110
+ }
111
+ if (l !== r) {
112
+ if (p(l), v.length > 0 && O(e, r, l), !o) {
113
+ x();
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
+ }
120
+ };
121
+ return {
122
+ setState: (i, o, s = !0) => {
123
+ let u = d();
124
+ if (typeof i == "string" && i.indexOf(c) !== -1 && e(i).indexOf(c) !== -1) throw Error(`@plitzi/nexus: refused to write to unsafe path "${i}" (\`__proto__\` segment)`);
125
+ if (h && typeof i == "string" && !(i.indexOf(".") === -1 ? Object.hasOwn(u, i) : l(u, e(i)))) {
126
+ S?.(i), h.setState(i, o, s);
127
+ return;
128
+ }
129
+ if (typeof i != "string") {
130
+ j(i, o, u, s);
131
+ return;
132
+ }
133
+ if (i.indexOf(".") === -1) {
134
+ let e = u[i], t = typeof o == "function" ? o(e) : o, n = t;
135
+ if (y.length > 0) {
136
+ let r = C(i, t, e);
137
+ if (r === a) return;
138
+ n = r;
139
+ }
140
+ if (e === n) return;
141
+ 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);
144
+ let t = _.direct.get(i);
145
+ t && E(t, i), A(i, e, n, i.length + 1);
146
+ } else x();
147
+ return;
148
+ }
149
+ let b = e(i), w;
150
+ if (y.length > 0) {
151
+ let e = t(u, i), n = C(i, typeof o == "function" ? o(e) : o, e);
152
+ if (n === a) return;
153
+ w = r(u, i, b, n, !1);
154
+ } else w = r(u, i, b, o, typeof o == "function");
155
+ if (w === n) return;
156
+ let T = w;
157
+ p(T), v.length > 0 && O(i, u, T), s ? (E(g, i), k(i, b), A(i, u, T, 0)) : x();
158
+ },
159
+ batch: D
160
+ };
161
+ }
162
+ //#endregion
163
+ export { u as createSetState };
@@ -0,0 +1,2 @@
1
+ export declare const isPlainObject: (value: unknown) => value is Record<string, unknown>;
2
+ export declare const deepMerge: (base: unknown, override: unknown) => unknown;
@@ -0,0 +1,9 @@
1
+ //#region src/createStore/helpers/deepMerge.ts
2
+ var e = (e) => typeof e == "object" && !!e && !Array.isArray(e), t = (n, r) => {
3
+ if (!e(n) || !e(r)) return r;
4
+ let i = { ...n };
5
+ for (let e of Object.keys(r)) e !== "__proto__" && (i[e] = e in n ? t(n[e], r[e]) : r[e]);
6
+ return i;
7
+ };
8
+ //#endregion
9
+ export { t as deepMerge, e as isPlainObject };
@@ -0,0 +1,7 @@
1
+ import { default as PathTrie } from './PathTrie';
2
+ import { default as Subscribers } from './Subscribers';
3
+ import { ChangeListener, GetState, Listener, StoreErrorReporter, StoreApi } from '../../types';
4
+ export declare function forwardParentChanges<TState extends object>(parent: StoreApi<TState>, listeners: Subscribers<Listener>, pathListeners: PathTrie, changeListeners: Subscribers<ChangeListener<TState>>, getState: GetState<TState>, reportError: StoreErrorReporter<TState>, invalidate: () => void): {
5
+ unsubscribe: () => void;
6
+ seedBaseline: () => void;
7
+ };
@@ -0,0 +1,23 @@
1
+ //#region src/createStore/helpers/forwardParentChanges.ts
2
+ function e(e, t, n, r, i, a, o) {
3
+ let s;
4
+ return {
5
+ unsubscribe: e.subscribe((e) => {
6
+ o();
7
+ let c = e;
8
+ if (t.forEach((t) => t(e), (e) => a(e, "notify", c)), n.size > 0 && n.forEachAffected(e, (t) => t(e), (e) => a(e, "notify", c)), r.length > 0) {
9
+ let e = i(), t = {
10
+ path: c,
11
+ prev: s ?? e,
12
+ next: e
13
+ };
14
+ s = e, r.forEach((e) => e(t), (e) => a(e, "onChange", c));
15
+ }
16
+ }),
17
+ seedBaseline: () => {
18
+ s ??= i();
19
+ }
20
+ };
21
+ }
22
+ //#endregion
23
+ export { e as forwardParentChanges };
@@ -0,0 +1,4 @@
1
+ export type ScopeClaims = {
2
+ claimDelegatedWrite: (path: string, scopeId: number) => void;
3
+ };
4
+ export declare const createScopeClaims: () => ScopeClaims;
@@ -0,0 +1,14 @@
1
+ //#region src/createStore/helpers/scopeCollisions.ts
2
+ var e = () => {
3
+ let e = /* @__PURE__ */ new Map();
4
+ return { claimDelegatedWrite(t, n) {
5
+ let r = e.get(t);
6
+ if (r !== void 0 && r !== n) {
7
+ console.warn(`@plitzi/nexus: scope collision — two sibling scopes under the same parent both delegate a write to "${t}", clobbering each other through the shared parent. Write to a path each scope owns, or move the shared value into the parent and update it there.`);
8
+ return;
9
+ }
10
+ e.set(t, n);
11
+ } };
12
+ };
13
+ //#endregion
14
+ export { e as createScopeClaims };
@@ -0,0 +1,11 @@
1
+ export declare const UNCHANGED: unique symbol;
2
+ /**
3
+ * Force the codegen path on/off.
4
+ *
5
+ * - `undefined` (default) — auto-detection: probes `new Function` at first use; if CSP blocks it, falls back
6
+ * to the recursive writer automatically.
7
+ * - `false` — skip auto-detection and go directly to the recursive fallback (no `new Function`).
8
+ * - `true` — force codegen even if the probe fails (useful for testing).
9
+ */
10
+ export declare const setCodegenEnabled: (enabled: boolean | undefined) => void;
11
+ export declare const writeByPath: (root: unknown, path: string, segments: readonly string[], value: unknown, isFn: boolean) => Record<string, unknown> | typeof UNCHANGED;
@@ -0,0 +1,51 @@
1
+ //#region src/createStore/helpers/writeByPath.ts
2
+ var e = Symbol("unchanged"), t = (e) => /^\d+$/.test(e), n = (e) => Array.isArray(e) ? e.slice() : { ...e }, r = (t, i, a, o, s) => {
3
+ let c = i[a], l = typeof t == "object" && t ? t : {};
4
+ if (a === i.length - 1) {
5
+ let t = l[c], r = s ? o(t) : o;
6
+ if (t === r) return e;
7
+ let i = n(l);
8
+ return i[c] = r, i;
9
+ }
10
+ let u = r(l[c], i, a + 1, o, s);
11
+ if (u === e) return e;
12
+ let d = n(l);
13
+ return d[c] = u, d;
14
+ }, i = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/, a = (e) => i.test(e) ? `.${e}` : `[${JSON.stringify(e)}]`, o = (e) => i.test(e) ? e : JSON.stringify(e), s = (e) => {
15
+ let t = e.length, n = "";
16
+ for (let r = 0; r < t - 1; r++) {
17
+ let t = r === 0 ? "o" : `_${r - 1}`;
18
+ n += `var _${r}=${t}==null?void 0:${t}${a(e[r])};\n`;
19
+ }
20
+ let r = t > 1 ? `_${t - 2}` : "o";
21
+ n += `var _p=${r}==null?void 0:${r}${a(e[t - 1])};\n`, n += "var _v=f?v(_p):v;\nif(_p===_v)return null;\n";
22
+ let i = "_v";
23
+ for (let n = t - 1; n >= 0; n--) i = `{...${n === 0 ? "o" : `(_${n - 1}||{})`},${o(e[n])}:${i}}`;
24
+ return n += `return ${i};`, Function("o", "v", "f", n);
25
+ }, c, l, u = () => {
26
+ if (l !== void 0) return l;
27
+ if (c === void 0) try {
28
+ s(["x", "y"])({ x: {} }, 1, !1), c = !0;
29
+ } catch {
30
+ c = !1;
31
+ }
32
+ return c;
33
+ }, d = (e) => {
34
+ l = e;
35
+ }, f = /* @__PURE__ */ new Map(), p = 256, m = (e, n) => {
36
+ if (!u()) return;
37
+ let r = f.get(e);
38
+ if (r) return r;
39
+ if (n.some(t)) return;
40
+ let i = s(n);
41
+ return f.size >= p && f.delete(f.keys().next().value), f.set(e, i), i;
42
+ }, h = (t, n, i, a, o) => {
43
+ let s = m(n, i);
44
+ if (s) {
45
+ let n = s(t, a, o);
46
+ return n === null ? e : n;
47
+ }
48
+ return r(t, i, 0, a, o);
49
+ };
50
+ //#endregion
51
+ export { e as UNCHANGED, d as setCodegenEnabled, h as writeByPath };
@@ -0,0 +1,12 @@
1
+ import { PathOf, PathOrFn, StoreApi, SyncMode } from '../../types';
2
+ import { RefObject } from 'react';
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, defaultValue?: unknown): () => unknown;
5
+ export declare function makeMultiSnapshot<TState extends object>(store: StoreApi<TState>, pathsRef: RefObject<ReadonlyArray<PathOrFn<TState>>>, lastRef: RefObject<unknown[] | null>, options?: {
6
+ equalityFn?: (a: unknown[], b: unknown[]) => boolean;
7
+ defaultValue?: unknown;
8
+ }): () => unknown[];
9
+ export declare function useResolvedStore<TState extends object>(optionStore: StoreApi<TState> | undefined, hookName: string, storeId?: string): StoreApi<TState>;
10
+ export declare function useMultiSubscribe<TState extends object>(store: StoreApi<TState>, pathsRef: RefObject<ReadonlyArray<PathOrFn<TState>>>, pathsKey: string, enabled: boolean, mode: SyncMode): (cb: () => void) => () => void;
11
+ export declare function useMultiSetters<TState extends object>(store: StoreApi<TState>, pathsRef: RefObject<ReadonlyArray<PathOrFn<TState>>>, pathsKey: string): Array<(value: any) => void>;
12
+ export declare function useMultiExternalStore(subscribe: (cb: () => void) => () => void, getSnapshot: () => unknown[], enabled: boolean, lastRef: RefObject<unknown[] | null>): unknown[];
@@ -0,0 +1,85 @@
1
+ import e from "../../helpers/getByPath.mjs";
2
+ import { StoreContext as t, StoreRegistryContext as n, findStoreInRegistry as r } from "../../StoreContext.mjs";
3
+ import { useCallback as i, useContext as a, useMemo as o, useSyncExternalStore as s } from "react";
4
+ //#region src/createStore/hooks/shared.ts
5
+ var c = (e, t) => {
6
+ if (e.length !== t.length) return !1;
7
+ for (let n = 0; n < e.length; n++) if (!Object.is(e[n], t[n])) return !1;
8
+ return !0;
9
+ };
10
+ function l(t, n, r) {
11
+ return () => {
12
+ if (typeof n == "string") {
13
+ let e = t.getPath(n);
14
+ return e === void 0 ? r : e;
15
+ }
16
+ if (typeof n == "function") {
17
+ let i = t.getState(), a = e(i, n(i));
18
+ return a === void 0 ? r : a;
19
+ }
20
+ return t.getState();
21
+ };
22
+ }
23
+ function u(t, n, r, i = {}) {
24
+ let { equalityFn: a = c, defaultValue: o } = i;
25
+ return () => {
26
+ let i = n.current, s = i.some((e) => typeof e == "function") ? t.getState() : void 0, c = i.map((n, r) => {
27
+ let i = typeof n == "function" ? e(s, n(s)) : t.getPath(n);
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);
36
+ };
37
+ }
38
+ function d(e, i, o) {
39
+ let s = a(t), c = a(n);
40
+ if (e) return e;
41
+ if (o !== void 0) {
42
+ let e = r(c, o);
43
+ if (!e) throw Error(`${i}: no store registered with id "${o}" in any ancestor StoreProvider`);
44
+ return e;
45
+ }
46
+ if (!s) throw Error(`${i} must be used inside a StoreProvider`);
47
+ return s;
48
+ }
49
+ function f(e, t, n, r, i) {
50
+ return o(() => (n) => {
51
+ if (!r || i === "mount") return () => {};
52
+ let a = t.current;
53
+ if (a.some((e) => typeof e == "function")) return e.subscribe(n);
54
+ let o = a.map((t) => e.subscribePath(t, n));
55
+ return () => o.forEach((e) => e());
56
+ }, [
57
+ e,
58
+ n,
59
+ r,
60
+ i
61
+ ]);
62
+ }
63
+ function p(e, t, n) {
64
+ let r = t.current.length;
65
+ return o(() => Array.from({ length: r }, (n, r) => (n) => {
66
+ let i = t.current[r], a = typeof i == "function" ? i(e.getState()) : i;
67
+ e.setState(a, n);
68
+ }), [e, n]);
69
+ }
70
+ function m(e, t, n, r) {
71
+ let a = i(() => {
72
+ if (!n) {
73
+ let e = r.current ?? t();
74
+ return r.current = e, e;
75
+ }
76
+ return t();
77
+ }, [
78
+ n,
79
+ t,
80
+ r
81
+ ]);
82
+ return s(e, a, a);
83
+ }
84
+ //#endregion
85
+ export { c as defaultMultiEqualityFn, u as makeMultiSnapshot, l as makeSingleSnapshot, m as useMultiExternalStore, p as useMultiSetters, f as useMultiSubscribe, d as useResolvedStore };
@@ -0,0 +1,73 @@
1
+ import { ___NoDefault, MultiPathReturn, PathOf, PathOrFn, PathOrFnSetters, PathOrFnValue, PathOrFnValues, PathSetter, PathSetters, PathValue, PathValues, StoreApi, UseStoreMultiOptions, UseStoreOptions, UseStoreReturn } from '../../types';
2
+ export { defaultMultiEqualityFn } from './shared';
3
+ export type { MultiPathReturn, UseStoreOptions, UseStoreMultiOptions, UseStoreReturn };
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
+ declare function useStore<TState extends object, P extends PathOf<TState>>(path: P, options?: UseStoreOptions<PathValue<TState, P>> & {
10
+ defaultValue?: never;
11
+ transformer?: never;
12
+ }): [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
+ declare function useStore<TState extends object, P extends PathOf<TState>, TResult>(path: P, options: UseStoreOptions<PathValue<TState, P>> & {
18
+ transformer: (value: PathValue<TState, P>) => TResult;
19
+ }): [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
+ declare function useStore<TState extends object, P extends PathOf<TState>>(pathFn: (state: TState) => P, options?: UseStoreOptions<PathValue<TState, P>, TState> & {
25
+ defaultValue?: never;
26
+ transformer?: never;
27
+ }): [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
+ declare function useStore<TState extends object, P extends PathOf<TState>, TResult>(pathFn: (state: TState) => P, options: UseStoreOptions<PathValue<TState, P>, TState> & {
33
+ transformer: (value: PathValue<TState, P>) => TResult;
34
+ }): [TResult, PathSetter<TState, P>];
35
+ declare function useStore<TState extends object, const Paths extends ReadonlyArray<PathOf<TState>>>(paths: Paths, options?: Omit<UseStoreMultiOptions<TState, Paths>, 'defaultValue' | 'transformer'>): MultiPathReturn<TState, Paths, __NoDefault>;
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>;
48
+ declare function useStore<TState extends object, const Paths extends ReadonlyArray<PathOf<TState>>, TResult>(paths: Paths, options: UseStoreMultiOptions<TState, Paths> & {
49
+ transformer: (values: PathValues<TState, Paths>) => TResult;
50
+ }): [TResult, ...PathSetters<TState, Paths>];
51
+ declare function useStore<TState extends object, const Entries extends ReadonlyArray<PathOrFn<TState>>>(paths: Entries, options?: Omit<UseStoreMultiOptions<TState, any>, 'defaultValue' | 'transformer'> & {
52
+ transformer?: never;
53
+ }): [PathOrFnValues<TState, Entries>, ...PathOrFnSetters<TState, Entries>];
54
+ declare function useStore<TState extends object, const Entries extends ReadonlyArray<PathOrFn<TState>>>(paths: Entries, options: Omit<UseStoreMultiOptions<TState, any>, 'defaultValue' | 'transformer'> & {
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'> & {
70
+ transformer: (values: PathOrFnValues<TState, Entries>) => TResult;
71
+ }): [TResult, ...PathOrFnSetters<TState, Entries>];
72
+ export type { PathSetters, PathValues };
73
+ export default useStore;
@@ -0,0 +1,57 @@
1
+ import { defaultMultiEqualityFn as e, makeMultiSnapshot as t, makeSingleSnapshot as n, useMultiExternalStore as r, useMultiSetters as i, useMultiSubscribe as a, useResolvedStore as o } from "./shared.mjs";
2
+ import s from "../../helpers/shallowEqual.mjs";
3
+ import { useCallback as c, useMemo as l, useRef as u, useSyncExternalStore as d } from "react";
4
+ //#region src/createStore/hooks/useStore.ts
5
+ var f = [];
6
+ function p(e, t, r) {
7
+ let i = r.mode ?? "sync", a = r.enabled ?? !0, o = r.defaultValue, f = t === void 0, p = r.equalityFn ?? (f ? s : Object.is), m = r.transformer, h = u(m);
8
+ h.current = m;
9
+ let g = l(() => n(e, t, o), [
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), [
14
+ a,
15
+ i,
16
+ t,
17
+ e
18
+ ]), y = () => {
19
+ if (!a) return _.current;
20
+ if (i === "mount") return g();
21
+ let e = g();
22
+ return p(_.current, e) ? _.current : (_.current = e, e);
23
+ }, b = d(v, y, y);
24
+ return [l(() => h.current ? h.current(b) : b, [b]), c((n) => {
25
+ f ? e.setState(void 0, n) : typeof t == "function" ? e.setState(t(e.getState()), n) : e.setState(t, n);
26
+ }, [e, t])];
27
+ }
28
+ function m(n, o, s) {
29
+ let c = s.mode ?? "sync", d = s.enabled ?? !0, f = s.defaultValue, p = s.equalityFn ?? e, m = s.transformer, h = u(m);
30
+ h.current = m;
31
+ let g = u(o);
32
+ g.current = o;
33
+ let _ = o.map((e, t) => typeof e == "function" ? `fn_${t}` : e).join("|"), v = u(null), y = l(() => t(n, g, v, {
34
+ equalityFn: p,
35
+ defaultValue: f
36
+ }), [
37
+ n,
38
+ _,
39
+ p,
40
+ f
41
+ ]), b = r(a(n, g, _, d, c), y, d, v);
42
+ return [l(() => h.current ? h.current(b) : b, [b]), ...i(n, g, _)];
43
+ }
44
+ function h(e, t = {}) {
45
+ let n = o(t.store, "useStore", t.storeId), r = Array.isArray(e), i = p(n, r ? void 0 : e, r ? {
46
+ ...t,
47
+ enabled: !1,
48
+ transformer: void 0
49
+ } : t), a = m(n, r ? e : f, r ? t : {
50
+ ...t,
51
+ enabled: !1,
52
+ transformer: void 0
53
+ });
54
+ return r ? a : i;
55
+ }
56
+ //#endregion
57
+ export { h as default };
@@ -0,0 +1,3 @@
1
+ import { StoreApi } from '../../types';
2
+ export declare function useStoreById<TState extends object = object>(id?: string): StoreApi<TState>;
3
+ export default useStoreById;
@@ -0,0 +1,7 @@
1
+ import { useResolvedStore as e } from "./shared.mjs";
2
+ //#region src/createStore/hooks/useStoreById.ts
3
+ function t(t) {
4
+ return e(void 0, "useStoreById", t);
5
+ }
6
+ //#endregion
7
+ export { t as default };
@@ -0,0 +1,9 @@
1
+ import { GetterTuple, GetValueFromBaseWithDefaultFn, GetValueFromBaseFn, GetValueFn, PathOf, PathValue, UseStoreGetterOptions } from '../../types';
2
+ export type { GetValueFn, GetValueFromBaseFn, GetValueFromBaseWithDefaultFn, GetterTuple, UseStoreGetterOptions };
3
+ declare function useStoreGetter<TState extends object>(options?: UseStoreGetterOptions<TState>): GetValueFn<TState>;
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
+ declare function useStoreGetter<TState extends object, const Entries extends ReadonlyArray<PathOf<TState> | ((state: TState) => unknown)>>(entries: Entries, options?: UseStoreGetterOptions<TState>): GetterTuple<TState, Entries>;
9
+ export default useStoreGetter;
@@ -0,0 +1,38 @@
1
+ import e from "../../helpers/getByPath.mjs";
2
+ import { useResolvedStore as t } from "./shared.mjs";
3
+ import { useMemo as n } from "react";
4
+ //#region src/createStore/hooks/useStoreGetter.ts
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), { defaultValue: l } = s ?? {}, u = o?.map((e) => typeof e == "function" ? e.toString() : e).join("|");
7
+ return n(() => o ? o.map((t) => (n, r) => {
8
+ let i = typeof t == "function" ? t(c.getState()) : e(c.getState(), t);
9
+ if (n !== void 0) {
10
+ let t = e(i, n);
11
+ return t === void 0 && r !== void 0 ? r : t;
12
+ }
13
+ return i === void 0 && r !== void 0 ? r : i;
14
+ }) : (t, n) => {
15
+ let r = c.getState();
16
+ if (a !== void 0) {
17
+ let i = e(r, a);
18
+ if (t !== void 0) {
19
+ let r = e(i, t);
20
+ return r === void 0 && n !== void 0 ? n : r;
21
+ }
22
+ let o = n === void 0 ? l : n;
23
+ return i === void 0 && o !== void 0 ? o : i;
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;
30
+ }, [
31
+ c,
32
+ a,
33
+ u,
34
+ l
35
+ ]);
36
+ }
37
+ //#endregion
38
+ export { r as default };
@@ -0,0 +1,5 @@
1
+ import { PathOf, PathValue, SetFromBaseFn, SetStateFn, UseStoreSetterOptions } from '../../types';
2
+ export type { SetFromBaseFn, SetStateFn, UseStoreSetterOptions };
3
+ declare function useStoreSetter<TState extends object>(options?: UseStoreSetterOptions<TState>): SetStateFn<TState>;
4
+ declare function useStoreSetter<TState extends object, P extends PathOf<TState>>(basePath: P, options?: UseStoreSetterOptions<TState>): SetFromBaseFn<PathValue<TState, P>>;
5
+ export default useStoreSetter;
@@ -0,0 +1,11 @@
1
+ import { useResolvedStore as e } from "./shared.mjs";
2
+ import { useCallback as t } from "react";
3
+ //#region src/createStore/hooks/useStoreSetter.ts
4
+ function n(n, r) {
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((e, t) => {
7
+ i === void 0 ? o.setState(e, t) : e === void 0 ? o.setState(i, t) : o.setState(`${i}.${e}`, t);
8
+ }, [o, i]);
9
+ }
10
+ //#endregion
11
+ export { n as default };
@@ -0,0 +1,7 @@
1
+ import { PathOf, PathOrFn, PathValue, PathValues, UseStoreSyncMultiOptions, UseStoreSyncOptions } from '../../types';
2
+ export type { UseStoreSyncOptions, UseStoreSyncMultiOptions };
3
+ declare function useStoreSync<TState extends object>(path: undefined, value: TState | Partial<TState>, options?: UseStoreSyncOptions<TState, TState>): void;
4
+ declare function useStoreSync<TState extends object, P extends PathOf<TState>>(path: P | ((state: TState) => P), value: PathValue<TState, P>, options?: UseStoreSyncOptions<PathValue<TState, P>, TState>): void;
5
+ declare function useStoreSync<TState extends object, const Paths extends ReadonlyArray<PathOf<TState>>>(paths: Paths, values: PathValues<TState, Paths>, options?: UseStoreSyncMultiOptions<TState>): void;
6
+ declare function useStoreSync<TState extends object>(paths: ReadonlyArray<PathOrFn<TState>>, values: readonly unknown[], options?: UseStoreSyncMultiOptions<TState>): void;
7
+ export default useStoreSync;