@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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @plitzi/nexus
2
2
 
3
+ ## 0.32.1
4
+
5
+ ### Patch Changes
6
+
7
+ - v0.32.1
8
+
3
9
  ## 0.32.0
4
10
 
5
11
  ### Minor Changes
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 updaters + selectors for a normalized `Record<id, T>` map. |
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 { createChainReads as e } from "./helpers/createChainReads.mjs";
2
- import { createSetState as t } from "./helpers/createSetState.mjs";
3
- import { forwardParentChanges as n } from "./helpers/forwardParentChanges.mjs";
4
- import r from "./helpers/Subscribers.mjs";
5
- import i from "./helpers/PathTrie.mjs";
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 a from "./hooks/useStore.mjs";
8
- import o from "./hooks/useStoreGetter.mjs";
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(a, o) {
14
- let s = {}, c, u = new r(), d = new r(), f = new i(), p = new r(), m = () => {
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 } = e(b, x, v), D = () => {
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 } = t({
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 = n(v, u, f, d, S, y, w), d.length > 0 && O.seedBaseline());
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 a == "function" ? a(j, S) : a;
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
- withBase: (e) => ({
66
- getState: (t) => {
67
- let n = C(e);
68
- return n === void 0 && t !== void 0 ? t : n;
69
- },
70
- getPath: (t, n) => {
71
- let r = C(`${e}.${t}`);
72
- return r === void 0 && n !== void 0 ? n : r;
73
- },
74
- setState: (t, n) => j(t === void 0 ? e : `${e}.${t}`, n),
75
- subscribe: (t) => z(e, t),
76
- subscribePath: (t, n) => z(`${e}.${t}`, n)
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 e(e, t) {
103
- return a(e, t);
111
+ function t(e, t) {
112
+ return o(e, t);
104
113
  }
105
- function t(e, t, n) {
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: e,
116
- useStoreSync: t,
117
- useStoreGetter: n,
118
- useStoreSetter: r
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 { deepMerge as e, isPlainObject as t } from "./deepMerge.mjs";
2
- import n from "../../helpers/getByPath.mjs";
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: (e) => n(r(), e),
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++, e(o.getState(), i())), p = () => ((s || l === void 0) && (l = f(), s = !1), l), m = (e) => {
13
- let i = n(r(), e);
14
- if (i === void 0) return o.getPath(e);
15
- let a = o.getPath(e);
16
- return a === void 0 || !t(i) || !t(a) ? i : n(p(), e);
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 * from './types';
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 { createAsync as e } from "./async/createAsync.mjs";
2
- import { useAsync as t } from "./async/hooks/useAsync.mjs";
3
- import { useAsyncValue as n } from "./async/hooks/useAsyncValue.mjs";
4
- import { setCodegenEnabled as r } from "./createStore/helpers/writeByPath.mjs";
5
- import { CANCEL as i } from "./types/StoreTypes.mjs";
6
- import { StoreContext as a, StoreRegistryContext as o } from "./StoreContext.mjs";
7
- import s from "./createStore/hooks/useStoreSetter.mjs";
8
- import { createStoreHook as c } from "./createStore/createStore.mjs";
9
- import l from "./createStore/index.mjs";
10
- import { createDerived as u } from "./derived/createDerived.mjs";
11
- import { useDerived as d } from "./derived/hooks/useDerived.mjs";
12
- import { createEntityAdapter as f } from "./entities/createEntityAdapter.mjs";
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
+ 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 { isPlainObject as e } from "../createStore/helpers/deepMerge.mjs";
2
- import t from "../helpers/getByPath.mjs";
3
- import { isDisabled as n } from "./isDisabled.mjs";
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 = (t, n, r = 12) => {
7
- if (!Object.is(t, n)) {
8
- if (r <= 0 || !e(t) || !e(n)) return {
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: n
10
+ value: t
11
11
  };
12
- for (let e of new Set([...Object.keys(t), ...Object.keys(n)])) {
13
- if (Object.is(t[e], n[e])) continue;
14
- let a = i(t[e], n[e], r - 1);
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 ? `${e}.${a.path}` : e,
16
+ path: a.path ? `${n}.${a.path}` : n,
17
17
  value: a.value
18
18
  };
19
19
  }
20
20
  }
21
21
  };
22
- function a(e, n = {}) {
22
+ function a(t, n = {}) {
23
23
  let a = n.limit ?? 100, o = n.path, s = n.shouldRecord, c = [{
24
- state: e.getState(),
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 = e.getState(), h = n ?? o, g, _ = n ?? o;
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 e = i(t(f, _), t(p, _));
38
- e && (h = e.path ? `${_}.${e.path}` : _, g = e.value);
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 = t(r, o);
52
- e.setState(o, () => n);
53
- } else e.setState(void 0, () => r);
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: e.getState(),
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 t = e?.enabled;
78
+ let n = e?.enabled;
79
79
  return (r) => {
80
- if (n(t, r.getState())) return;
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.0",
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"