@plitzi/nexus 0.32.0 → 0.32.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.
- package/CHANGELOG.md +6 -0
- package/README.md +30 -5
- package/dist/advanced/index.d.ts +7 -0
- package/dist/advanced/index.mjs +16 -0
- package/dist/createStore/createStore.mjs +46 -37
- package/dist/createStore/helpers/createChainReads.mjs +8 -8
- package/dist/index.d.ts +5 -4
- package/dist/index.mjs +23 -23
- package/dist/middleware/historyMiddleware.mjs +22 -22
- package/dist/types/StoreTypes.d.ts +18 -0
- package/package.json +9 -1
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -22,26 +22,51 @@ function Counter() {
|
|
|
22
22
|
}
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
+
## The whole imperative API in three verbs
|
|
26
|
+
|
|
27
|
+
Outside React, a store speaks three words. `get`, `set` and `watch` are typed against your state and cover the common case — the longer `getState` / `getPath` / `subscribePath` names stay for advanced reads (default values) and back-compat.
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import { createStore } from '@plitzi/nexus';
|
|
31
|
+
|
|
32
|
+
const store = createStore<State>({ count: 0, user: { name: 'Carlos' } });
|
|
33
|
+
|
|
34
|
+
store.get('user.name'); // 'Carlos' (one path, no full merge)
|
|
35
|
+
store.get(); // entire state
|
|
36
|
+
store.set('user.name', 'Ada'); // typed dot-path write
|
|
37
|
+
store.set('count', n => n + 1); // updater form
|
|
38
|
+
const off = store.watch('user.name', name => render(name)); // fires only for this path
|
|
39
|
+
```
|
|
40
|
+
|
|
25
41
|
## What each piece is for
|
|
26
42
|
|
|
43
|
+
### Core — the 90%
|
|
44
|
+
|
|
27
45
|
| Import | What it's for |
|
|
28
46
|
|---|---|
|
|
29
|
-
| `createStore` | Create a vanilla store (no React needed). |
|
|
47
|
+
| `createStore` | Create a vanilla store (no React needed). Exposes `get` / `set` / `watch`. |
|
|
30
48
|
| `createStoreHook<T>()` | Bind your state type once → fully-typed `useStore*` hooks. |
|
|
31
49
|
| `StoreProvider` | Put a store on React context; optionally scope/sync/record it. |
|
|
32
50
|
| `useStore` | Subscribe + write a path (or paths). Re-renders on change only. |
|
|
51
|
+
|
|
52
|
+
### Advanced — reach for it when you need it
|
|
53
|
+
|
|
54
|
+
Also importable from the focused `@plitzi/nexus/advanced` entry point, which keeps root autocomplete on the Core.
|
|
55
|
+
|
|
56
|
+
| Import | What it's for |
|
|
57
|
+
|---|---|
|
|
33
58
|
| `useStoreSetter` | A stable setter — write without subscribing/re-rendering. |
|
|
34
59
|
| `useStoreGetter` | A stable getter — read current values in callbacks, no re-render. |
|
|
35
60
|
| `useStoreById` | Get a named ancestor store's `StoreApi` by `id` (reachable across disconnected providers). |
|
|
36
61
|
| `useStoreSync` | Mirror an external value (props) **into** the store. |
|
|
37
62
|
| `createDerived` / `useDerived` | A memoized value computed from store paths (reselect-style). |
|
|
38
|
-
| `createEntityAdapter` | CRUD
|
|
63
|
+
| `createEntityAdapter` / `createEntityStore` | CRUD + selectors for a normalized `Record<id, T>` map; the store variant adds O(1) per-item updates. |
|
|
64
|
+
| `createAsync` / `useAsync` / `useAsyncValue` | Race-safe fetch landed on a path; inline UI or Suspense. |
|
|
39
65
|
| `loggerMiddleware` / `persistMiddleware` / `historyMiddleware` / `reduxDevToolsMiddleware` | Middlewares: log, persist to storage, record time-travel, connect to Redux DevTools. |
|
|
66
|
+
| `getStoreHistory` / `useStoreHistory` | Undo / redo / jump-to-snapshot action log (enabled by `historyMiddleware`). |
|
|
40
67
|
| `setCodegenEnabled` | Force on/off the `new Function` codegen path (auto-detects CSP/SSR). |
|
|
41
|
-
| `createServerSnapshot` | Mark server-fetched data for RSC → Client handoff. |
|
|
42
|
-
| `isServerSnapshot` | Check if a value has the SSR marker flag. |
|
|
68
|
+
| `createServerSnapshot` / `isServerSnapshot` | Mark server-fetched data for RSC → Client handoff, and check the marker. |
|
|
43
69
|
| `bindServerAction` | Optimistic updates + revalidation for Next.js Server Actions. |
|
|
44
|
-
| `getStoreHistory` / `useStoreHistory` | Undo / redo / jump-to-snapshot action log (enabled by `historyMiddleware`). |
|
|
45
70
|
|
|
46
71
|
## Architecture
|
|
47
72
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as useStoreById } from '../createStore/hooks/useStoreById';
|
|
2
|
+
export { default as useStoreSetter } from '../createStore/hooks/useStoreSetter';
|
|
3
|
+
export * from '../async';
|
|
4
|
+
export * from '../derived';
|
|
5
|
+
export * from '../entities';
|
|
6
|
+
export * from '../history';
|
|
7
|
+
export * from '../middleware';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import e from "../createStore/hooks/useStoreById.mjs";
|
|
2
|
+
import t from "../createStore/hooks/useStoreSetter.mjs";
|
|
3
|
+
import { createAsync as n } from "../async/createAsync.mjs";
|
|
4
|
+
import { useAsync as r } from "../async/hooks/useAsync.mjs";
|
|
5
|
+
import { useAsyncValue as i } from "../async/hooks/useAsyncValue.mjs";
|
|
6
|
+
import { createDerived as a } from "../derived/createDerived.mjs";
|
|
7
|
+
import { useDerived as o } from "../derived/hooks/useDerived.mjs";
|
|
8
|
+
import { createEntityAdapter as s } from "../entities/createEntityAdapter.mjs";
|
|
9
|
+
import { createEntityStore as c } from "../entities/createEntityStore.mjs";
|
|
10
|
+
import { getStoreHistory as l, historyMiddleware as u } from "../middleware/historyMiddleware.mjs";
|
|
11
|
+
import { useStoreHistory as d } from "../history/hooks/useStoreHistory.mjs";
|
|
12
|
+
import { loggerMiddleware as f } from "../middleware/loggerMiddleware.mjs";
|
|
13
|
+
import { persistMiddleware as p } from "../middleware/persistMiddleware.mjs";
|
|
14
|
+
import { reduxDevToolsMiddleware as m } from "../middleware/reduxDevToolsMiddleware.mjs";
|
|
15
|
+
import { cascade as h } from "../middleware/cascade.mjs";
|
|
16
|
+
export { h as cascade, n as createAsync, a as createDerived, s as createEntityAdapter, c as createEntityStore, l as getStoreHistory, u as historyMiddleware, f as loggerMiddleware, p as persistMiddleware, m as reduxDevToolsMiddleware, r as useAsync, i as useAsyncValue, o as useDerived, e as useStoreById, d as useStoreHistory, t as useStoreSetter };
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import r from "./helpers/
|
|
5
|
-
import i from "./helpers/
|
|
1
|
+
import e from "./hooks/useStoreSetter.mjs";
|
|
2
|
+
import t from "./helpers/Subscribers.mjs";
|
|
3
|
+
import { createChainReads as n } from "./helpers/createChainReads.mjs";
|
|
4
|
+
import { createSetState as r } from "./helpers/createSetState.mjs";
|
|
5
|
+
import { forwardParentChanges as i } from "./helpers/forwardParentChanges.mjs";
|
|
6
|
+
import a from "./helpers/PathTrie.mjs";
|
|
6
7
|
import "./helpers/scopeCollisions.mjs";
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import s from "./hooks/useStoreSetter.mjs";
|
|
8
|
+
import o from "./hooks/useStore.mjs";
|
|
9
|
+
import s from "./hooks/useStoreGetter.mjs";
|
|
10
10
|
import c from "./hooks/useStoreSync.mjs";
|
|
11
11
|
//#region src/createStore/createStore.ts
|
|
12
12
|
var l = 0;
|
|
13
|
-
function u(
|
|
14
|
-
let s = {}, c, u = new
|
|
13
|
+
function u(e, o) {
|
|
14
|
+
let s = {}, c, u = new t(), d = new t(), f = new a(), p = new t(), m = () => {
|
|
15
15
|
p.length !== 0 && p.forEach((e) => e());
|
|
16
16
|
}, h = [], g = [], _ = [], v = o?.parent;
|
|
17
17
|
++l;
|
|
@@ -23,11 +23,11 @@ function u(a, o) {
|
|
|
23
23
|
path: n
|
|
24
24
|
};
|
|
25
25
|
for (let e = 0, t = g.length; e < t; e++) g[e](r);
|
|
26
|
-
}, b = () => s, x = () => c ??= { ...s }, { getState: S, getPath: C, invalidate: w, resetCache: T, getMergeCount: E } =
|
|
26
|
+
}, b = () => s, x = () => c ??= { ...s }, { getState: S, getPath: C, invalidate: w, resetCache: T, getMergeCount: E } = n(b, x, v), D = () => {
|
|
27
27
|
w(), m();
|
|
28
28
|
}, O, k, A = !1;
|
|
29
29
|
v && (T(), k = v.subscribeInvalidate?.(D));
|
|
30
|
-
let { setState: j, batch: M } =
|
|
30
|
+
let { setState: j, batch: M } = r({
|
|
31
31
|
getOwnState: b,
|
|
32
32
|
getOwnSnapshot: x,
|
|
33
33
|
setOwnState: (e) => {
|
|
@@ -45,7 +45,7 @@ function u(a, o) {
|
|
|
45
45
|
invalidateDescendants: m,
|
|
46
46
|
onDelegateToParent: void 0
|
|
47
47
|
}), N = () => u.length > 0 || f.size > 0 || d.length > 0, P = () => {
|
|
48
|
-
O || !v || (w(), T(), O =
|
|
48
|
+
O || !v || (w(), T(), O = i(v, u, f, d, S, y, w), d.length > 0 && O.seedBaseline());
|
|
49
49
|
}, F = () => {
|
|
50
50
|
O && (O.unsubscribe(), O = void 0, T());
|
|
51
51
|
}, I = () => {
|
|
@@ -56,25 +56,34 @@ function u(a, o) {
|
|
|
56
56
|
let t = L(d.add(e));
|
|
57
57
|
return O?.seedBaseline(), t;
|
|
58
58
|
};
|
|
59
|
-
s = typeof
|
|
59
|
+
s = typeof e == "function" ? e(j, S) : e;
|
|
60
60
|
let V = {
|
|
61
61
|
id: o?.id,
|
|
62
62
|
getState: S,
|
|
63
63
|
getPath: C,
|
|
64
64
|
setState: j,
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
65
|
+
get: ((e) => e === void 0 ? S() : C(e)),
|
|
66
|
+
set: j,
|
|
67
|
+
watch: ((e, t) => typeof e == "function" ? R(e) : z(e, t)),
|
|
68
|
+
withBase: (e) => {
|
|
69
|
+
let t = (t, n) => j(t === void 0 ? e : `${e}.${t}`, n);
|
|
70
|
+
return {
|
|
71
|
+
getState: (t) => {
|
|
72
|
+
let n = C(e);
|
|
73
|
+
return n === void 0 && t !== void 0 ? t : n;
|
|
74
|
+
},
|
|
75
|
+
getPath: (t, n) => {
|
|
76
|
+
let r = C(`${e}.${t}`);
|
|
77
|
+
return r === void 0 && n !== void 0 ? n : r;
|
|
78
|
+
},
|
|
79
|
+
setState: t,
|
|
80
|
+
subscribe: (t) => z(e, t),
|
|
81
|
+
subscribePath: (t, n) => z(`${e}.${t}`, n),
|
|
82
|
+
get: (t) => C(t === void 0 ? e : `${e}.${t}`),
|
|
83
|
+
set: t,
|
|
84
|
+
watch: (t, n) => typeof t == "function" ? z(e, t) : z(`${e}.${t}`, n)
|
|
85
|
+
};
|
|
86
|
+
},
|
|
78
87
|
batch: M,
|
|
79
88
|
subscribe: R,
|
|
80
89
|
subscribePath: z,
|
|
@@ -99,23 +108,23 @@ function u(a, o) {
|
|
|
99
108
|
return V;
|
|
100
109
|
}
|
|
101
110
|
var d = () => {
|
|
102
|
-
function
|
|
103
|
-
return
|
|
111
|
+
function t(e, t) {
|
|
112
|
+
return o(e, t);
|
|
104
113
|
}
|
|
105
|
-
function
|
|
114
|
+
function n(e, t, n) {
|
|
106
115
|
c(e, t, n);
|
|
107
116
|
}
|
|
108
|
-
function n(e, t) {
|
|
109
|
-
return o(e, t);
|
|
110
|
-
}
|
|
111
117
|
function r(e, t) {
|
|
112
118
|
return s(e, t);
|
|
113
119
|
}
|
|
120
|
+
function i(t, n) {
|
|
121
|
+
return e(t, n);
|
|
122
|
+
}
|
|
114
123
|
return {
|
|
115
|
-
useStore:
|
|
116
|
-
useStoreSync:
|
|
117
|
-
useStoreGetter:
|
|
118
|
-
useStoreSetter:
|
|
124
|
+
useStore: t,
|
|
125
|
+
useStoreSync: n,
|
|
126
|
+
useStoreGetter: r,
|
|
127
|
+
useStoreSetter: i
|
|
119
128
|
};
|
|
120
129
|
};
|
|
121
130
|
//#endregion
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
import n from "
|
|
1
|
+
import e from "../../helpers/getByPath.mjs";
|
|
2
|
+
import { deepMerge as t, isPlainObject as n } from "./deepMerge.mjs";
|
|
3
3
|
//#region src/createStore/helpers/createChainReads.ts
|
|
4
4
|
function r(r, i, a) {
|
|
5
5
|
if (!a) return {
|
|
6
6
|
getState: i,
|
|
7
|
-
getPath: (
|
|
7
|
+
getPath: (t) => e(r(), t),
|
|
8
8
|
invalidate: () => {},
|
|
9
9
|
resetCache: () => {},
|
|
10
10
|
getMergeCount: () => 0
|
|
11
11
|
};
|
|
12
|
-
let o = a, s = !0, c = !1, l, u = 0, d = /* @__PURE__ */ new Map(), f = () => (u++,
|
|
13
|
-
let i =
|
|
14
|
-
if (i === void 0) return o.getPath(
|
|
15
|
-
let a = o.getPath(
|
|
16
|
-
return a === void 0 || !
|
|
12
|
+
let o = a, s = !0, c = !1, l, u = 0, d = /* @__PURE__ */ new Map(), f = () => (u++, t(o.getState(), i())), p = () => ((s || l === void 0) && (l = f(), s = !1), l), m = (t) => {
|
|
13
|
+
let i = e(r(), t);
|
|
14
|
+
if (i === void 0) return o.getPath(t);
|
|
15
|
+
let a = o.getPath(t);
|
|
16
|
+
return a === void 0 || !n(i) || !n(a) ? i : e(p(), t);
|
|
17
17
|
};
|
|
18
18
|
return {
|
|
19
19
|
getState: p,
|
package/dist/index.d.ts
CHANGED
|
@@ -2,16 +2,17 @@ import { default as createStore } from './createStore';
|
|
|
2
2
|
import { default as useStoreById } from './createStore/hooks/useStoreById';
|
|
3
3
|
import { default as useStoreSetter } from './createStore/hooks/useStoreSetter';
|
|
4
4
|
import { default as StoreProvider } from './StoreProvider';
|
|
5
|
-
export * from './async';
|
|
6
5
|
export * from './createStore';
|
|
6
|
+
export * from './StoreProvider';
|
|
7
|
+
export * from './types';
|
|
8
|
+
export { createStore, StoreProvider };
|
|
9
|
+
export * from './async';
|
|
7
10
|
export * from './derived';
|
|
8
11
|
export * from './entities';
|
|
9
12
|
export * from './history';
|
|
10
13
|
export * from './middleware';
|
|
11
|
-
export * from './StoreProvider';
|
|
12
14
|
export * from './createStore/hooks/useStoreSetter';
|
|
13
15
|
export * from './createStore/hooks/useStoreById';
|
|
14
|
-
export
|
|
15
|
-
export { createStore, StoreProvider, useStoreById, useStoreSetter };
|
|
16
|
+
export { useStoreById, useStoreSetter };
|
|
16
17
|
export { setCodegenEnabled } from './createStore/helpers/writeByPath';
|
|
17
18
|
export { createServerSnapshot, isServerSnapshot } from './rsc';
|
package/dist/index.mjs
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import s from "./
|
|
8
|
-
import {
|
|
9
|
-
import l from "./
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import _ from "./
|
|
17
|
-
import {
|
|
18
|
-
import
|
|
19
|
-
import {
|
|
20
|
-
import
|
|
21
|
-
import {
|
|
22
|
-
import
|
|
23
|
-
export {
|
|
1
|
+
import { StoreContext as e, StoreRegistryContext as t } from "./StoreContext.mjs";
|
|
2
|
+
import n from "./createStore/hooks/useStoreById.mjs";
|
|
3
|
+
import r from "./createStore/hooks/useStoreSetter.mjs";
|
|
4
|
+
import { createAsync as i } from "./async/createAsync.mjs";
|
|
5
|
+
import { useAsync as a } from "./async/hooks/useAsync.mjs";
|
|
6
|
+
import { useAsyncValue as o } from "./async/hooks/useAsyncValue.mjs";
|
|
7
|
+
import { createDerived as s } from "./derived/createDerived.mjs";
|
|
8
|
+
import { useDerived as c } from "./derived/hooks/useDerived.mjs";
|
|
9
|
+
import { createEntityAdapter as l } from "./entities/createEntityAdapter.mjs";
|
|
10
|
+
import { createEntityStore as u } from "./entities/createEntityStore.mjs";
|
|
11
|
+
import { getStoreHistory as d, historyMiddleware as f } from "./middleware/historyMiddleware.mjs";
|
|
12
|
+
import { useStoreHistory as p } from "./history/hooks/useStoreHistory.mjs";
|
|
13
|
+
import { loggerMiddleware as m } from "./middleware/loggerMiddleware.mjs";
|
|
14
|
+
import { persistMiddleware as h } from "./middleware/persistMiddleware.mjs";
|
|
15
|
+
import { reduxDevToolsMiddleware as g } from "./middleware/reduxDevToolsMiddleware.mjs";
|
|
16
|
+
import { cascade as _ } from "./middleware/cascade.mjs";
|
|
17
|
+
import { setCodegenEnabled as v } from "./createStore/helpers/writeByPath.mjs";
|
|
18
|
+
import { CANCEL as y } from "./types/StoreTypes.mjs";
|
|
19
|
+
import { createStoreHook as b } from "./createStore/createStore.mjs";
|
|
20
|
+
import x from "./createStore/index.mjs";
|
|
21
|
+
import { createServerSnapshot as S, isServerSnapshot as C } from "./rsc/index.mjs";
|
|
22
|
+
import w from "./StoreProvider.mjs";
|
|
23
|
+
export { y as CANCEL, e as StoreContext, w as StoreProvider, t as StoreRegistryContext, _ as cascade, i as createAsync, s as createDerived, l as createEntityAdapter, u as createEntityStore, S as createServerSnapshot, x as createStore, b as createStoreHook, d as getStoreHistory, f as historyMiddleware, C as isServerSnapshot, m as loggerMiddleware, h as persistMiddleware, g as reduxDevToolsMiddleware, v as setCodegenEnabled, a as useAsync, o as useAsyncValue, c as useDerived, n as useStoreById, p as useStoreHistory, r as useStoreSetter };
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import
|
|
2
|
-
import t from "
|
|
3
|
-
import {
|
|
1
|
+
import e from "../helpers/getByPath.mjs";
|
|
2
|
+
import { isDisabled as t } from "./isDisabled.mjs";
|
|
3
|
+
import { isPlainObject as n } from "../createStore/helpers/deepMerge.mjs";
|
|
4
4
|
import r from "../helpers/isPathAffected.mjs";
|
|
5
5
|
//#region src/middleware/historyMiddleware.ts
|
|
6
|
-
var i = (
|
|
7
|
-
if (!Object.is(
|
|
8
|
-
if (r <= 0 || !e
|
|
6
|
+
var i = (e, t, r = 12) => {
|
|
7
|
+
if (!Object.is(e, t)) {
|
|
8
|
+
if (r <= 0 || !n(e) || !n(t)) return {
|
|
9
9
|
path: "",
|
|
10
|
-
value:
|
|
10
|
+
value: t
|
|
11
11
|
};
|
|
12
|
-
for (let
|
|
13
|
-
if (Object.is(
|
|
14
|
-
let a = i(
|
|
12
|
+
for (let n of new Set([...Object.keys(e), ...Object.keys(t)])) {
|
|
13
|
+
if (Object.is(e[n], t[n])) continue;
|
|
14
|
+
let a = i(e[n], t[n], r - 1);
|
|
15
15
|
if (a) return {
|
|
16
|
-
path: a.path ? `${
|
|
16
|
+
path: a.path ? `${n}.${a.path}` : n,
|
|
17
17
|
value: a.value
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
-
function a(
|
|
22
|
+
function a(t, n = {}) {
|
|
23
23
|
let a = n.limit ?? 100, o = n.path, s = n.shouldRecord, c = [{
|
|
24
|
-
state:
|
|
24
|
+
state: t.getState(),
|
|
25
25
|
timestamp: Date.now()
|
|
26
26
|
}], l = 0, u = !1, d = () => ({
|
|
27
27
|
entries: c,
|
|
@@ -32,10 +32,10 @@ function a(e, n = {}) {
|
|
|
32
32
|
f = d(), p.forEach((e) => e());
|
|
33
33
|
}, h = ({ path: n }) => {
|
|
34
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 =
|
|
35
|
+
let d = l < c.length - 1 ? c.slice(0, l + 1) : c, f = d[d.length - 1].state, p = t.getState(), h = n ?? o, g, _ = n ?? o;
|
|
36
36
|
if (_) try {
|
|
37
|
-
let
|
|
38
|
-
|
|
37
|
+
let t = i(e(f, _), e(p, _));
|
|
38
|
+
t && (h = t.path ? `${_}.${t.path}` : _, g = t.value);
|
|
39
39
|
} catch {}
|
|
40
40
|
let v = [...d, {
|
|
41
41
|
path: h,
|
|
@@ -48,9 +48,9 @@ function a(e, n = {}) {
|
|
|
48
48
|
if (n < 0 || n >= c.length || n === l) return;
|
|
49
49
|
let r = c[n].state;
|
|
50
50
|
if (u = !0, o) {
|
|
51
|
-
let n =
|
|
52
|
-
|
|
53
|
-
} else
|
|
51
|
+
let n = e(r, o);
|
|
52
|
+
t.setState(o, () => n);
|
|
53
|
+
} else t.setState(void 0, () => r);
|
|
54
54
|
u = !1, l = n, m();
|
|
55
55
|
};
|
|
56
56
|
return {
|
|
@@ -62,7 +62,7 @@ function a(e, n = {}) {
|
|
|
62
62
|
travelTo: g,
|
|
63
63
|
clear: () => {
|
|
64
64
|
c = [{
|
|
65
|
-
state:
|
|
65
|
+
state: t.getState(),
|
|
66
66
|
timestamp: Date.now()
|
|
67
67
|
}], l = 0, m();
|
|
68
68
|
}
|
|
@@ -75,9 +75,9 @@ function s(e) {
|
|
|
75
75
|
return o.get(e);
|
|
76
76
|
}
|
|
77
77
|
var c = (e) => {
|
|
78
|
-
let
|
|
78
|
+
let n = e?.enabled;
|
|
79
79
|
return (r) => {
|
|
80
|
-
if (n
|
|
80
|
+
if (t(n, r.getState())) return;
|
|
81
81
|
let { handle: i, record: s } = a(r, e);
|
|
82
82
|
return o.set(r, i), { onChange: s };
|
|
83
83
|
};
|
|
@@ -74,12 +74,30 @@ export type BoundStore<TBase> = {
|
|
|
74
74
|
setState: SetFromBaseFn<TBase>;
|
|
75
75
|
subscribe: (listener: Listener) => () => void;
|
|
76
76
|
subscribePath: TBase extends object ? <SubP extends PathOf<TBase>>(subPath: SubP, listener: Listener) => () => void : (listener: Listener) => () => void;
|
|
77
|
+
get: TBase extends object ? {
|
|
78
|
+
(): TBase | undefined;
|
|
79
|
+
<SubP extends PathOf<TBase>>(subPath: SubP): PathValue<TBase, SubP> | undefined;
|
|
80
|
+
} : () => TBase | undefined;
|
|
81
|
+
set: SetFromBaseFn<TBase>;
|
|
82
|
+
watch: TBase extends object ? {
|
|
83
|
+
(listener: Listener): () => void;
|
|
84
|
+
<SubP extends PathOf<TBase>>(subPath: SubP, listener: Listener): () => void;
|
|
85
|
+
} : (listener: Listener) => () => void;
|
|
77
86
|
};
|
|
78
87
|
export type StoreApi<T> = {
|
|
79
88
|
id?: string;
|
|
80
89
|
getState: GetState<T>;
|
|
81
90
|
getPath: <P extends PathOf<T>>(path: P) => PathValue<T, P> | undefined;
|
|
82
91
|
setState: SetState<T>;
|
|
92
|
+
get: {
|
|
93
|
+
(): T;
|
|
94
|
+
<P extends PathOf<T>>(path: P): PathValue<T, P> | undefined;
|
|
95
|
+
};
|
|
96
|
+
set: SetState<T>;
|
|
97
|
+
watch: {
|
|
98
|
+
(listener: Listener): () => void;
|
|
99
|
+
<P extends PathOf<T>>(path: P, listener: Listener): () => void;
|
|
100
|
+
};
|
|
83
101
|
withBase: <P extends PathOf<T>>(basePath: P) => BoundStore<NonNullable<PathValue<T, P>>>;
|
|
84
102
|
batch: <R>(fn: () => R) => R;
|
|
85
103
|
subscribe: (listener: Listener) => () => void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plitzi/nexus",
|
|
3
|
-
"version": "0.32.
|
|
3
|
+
"version": "0.32.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
@@ -47,6 +47,14 @@
|
|
|
47
47
|
"types": "./dist/StoreProvider.d.ts",
|
|
48
48
|
"import": "./dist/StoreProvider.mjs"
|
|
49
49
|
},
|
|
50
|
+
"./advanced": {
|
|
51
|
+
"types": "./dist/advanced/index.d.ts",
|
|
52
|
+
"import": "./dist/advanced/index.mjs"
|
|
53
|
+
},
|
|
54
|
+
"./advanced/index": {
|
|
55
|
+
"types": "./dist/advanced/index.d.ts",
|
|
56
|
+
"import": "./dist/advanced/index.mjs"
|
|
57
|
+
},
|
|
50
58
|
"./async": {
|
|
51
59
|
"types": "./dist/async/index.d.ts",
|
|
52
60
|
"import": "./dist/async/index.mjs"
|