@plitzi/nexus 0.31.2 → 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.
Files changed (40) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +30 -5
  3. package/dist/advanced/index.d.ts +7 -0
  4. package/dist/advanced/index.mjs +16 -0
  5. package/dist/async/createAsync.mjs +8 -1
  6. package/dist/createStore/createStore.d.ts +4 -45
  7. package/dist/createStore/createStore.mjs +58 -36
  8. package/dist/createStore/helpers/PathTrie.d.ts +2 -0
  9. package/dist/createStore/helpers/PathTrie.mjs +55 -20
  10. package/dist/createStore/helpers/createChainReads.d.ts +1 -1
  11. package/dist/createStore/helpers/createChainReads.mjs +18 -19
  12. package/dist/createStore/helpers/createSetState.mjs +24 -33
  13. package/dist/createStore/hooks/shared.d.ts +1 -2
  14. package/dist/createStore/hooks/shared.mjs +7 -18
  15. package/dist/createStore/hooks/useStore.d.ts +4 -49
  16. package/dist/createStore/hooks/useStore.mjs +19 -27
  17. package/dist/createStore/hooks/useStoreGetter.d.ts +2 -5
  18. package/dist/createStore/hooks/useStoreGetter.mjs +19 -22
  19. package/dist/createStore/hooks/useStoreSetter.mjs +2 -4
  20. package/dist/derived/createDerived.d.ts +1 -1
  21. package/dist/derived/createDerived.mjs +12 -9
  22. package/dist/entities/createEntityStore.d.ts +38 -0
  23. package/dist/entities/createEntityStore.mjs +102 -0
  24. package/dist/entities/index.d.ts +2 -0
  25. package/dist/entities/index.mjs +2 -1
  26. package/dist/index.d.ts +5 -4
  27. package/dist/index.mjs +23 -22
  28. package/dist/middleware/historyMiddleware.d.ts +3 -3
  29. package/dist/middleware/historyMiddleware.mjs +35 -30
  30. package/dist/middleware/index.d.ts +1 -1
  31. package/dist/middleware/isDisabled.d.ts +2 -0
  32. package/dist/middleware/isDisabled.mjs +4 -0
  33. package/dist/middleware/loggerMiddleware.d.ts +2 -2
  34. package/dist/middleware/loggerMiddleware.mjs +14 -15
  35. package/dist/middleware/persistMiddleware.d.ts +7 -5
  36. package/dist/middleware/persistMiddleware.mjs +56 -28
  37. package/dist/middleware/reduxDevToolsMiddleware.d.ts +2 -2
  38. package/dist/middleware/reduxDevToolsMiddleware.mjs +26 -21
  39. package/dist/types/StoreTypes.d.ts +49 -21
  40. package/package.json +17 -1
@@ -1,26 +1,27 @@
1
- import { isPlainObject as e } from "../createStore/helpers/deepMerge.mjs";
2
- import t from "../helpers/getByPath.mjs";
3
- import n from "../helpers/isPathAffected.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
+ import r from "../helpers/isPathAffected.mjs";
4
5
  //#region src/middleware/historyMiddleware.ts
5
- var r = (t, n, i = 12) => {
6
- if (!Object.is(t, n)) {
7
- if (i <= 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 {
8
9
  path: "",
9
- value: n
10
+ value: t
10
11
  };
11
- for (let e of new Set([...Object.keys(t), ...Object.keys(n)])) {
12
- if (Object.is(t[e], n[e])) continue;
13
- let a = r(t[e], n[e], i - 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);
14
15
  if (a) return {
15
- path: a.path ? `${e}.${a.path}` : e,
16
+ path: a.path ? `${n}.${a.path}` : n,
16
17
  value: a.value
17
18
  };
18
19
  }
19
20
  }
20
21
  };
21
- function i(e, i = {}) {
22
- let a = i.limit ?? 100, o = i.path, s = i.shouldRecord, c = [{
23
- state: e.getState(),
22
+ function a(t, n = {}) {
23
+ let a = n.limit ?? 100, o = n.path, s = n.shouldRecord, c = [{
24
+ state: t.getState(),
24
25
  timestamp: Date.now()
25
26
  }], l = 0, u = !1, d = () => ({
26
27
  entries: c,
@@ -29,12 +30,12 @@ function i(e, i = {}) {
29
30
  canRedo: l < c.length - 1
30
31
  }), f = d(), p = /* @__PURE__ */ new Set(), m = () => {
31
32
  f = d(), p.forEach((e) => e());
32
- }, h = ({ path: i }) => {
33
- if (u || s && !s(i) || o && i !== void 0 && !n(i, o)) return;
34
- let d = l < c.length - 1 ? c.slice(0, l + 1) : c, f = d[d.length - 1].state, p = e.getState(), h = i ?? o, g, _ = i ?? o;
33
+ }, h = ({ path: n }) => {
34
+ if (u || s && !s(n) || o && n !== void 0 && !r(n, o)) return;
35
+ let d = l < c.length - 1 ? c.slice(0, l + 1) : c, f = d[d.length - 1].state, p = t.getState(), h = n ?? o, g, _ = n ?? o;
35
36
  if (_) try {
36
- let e = r(t(f, _), t(p, _));
37
- 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);
38
39
  } catch {}
39
40
  let v = [...d, {
40
41
  path: h,
@@ -47,9 +48,9 @@ function i(e, i = {}) {
47
48
  if (n < 0 || n >= c.length || n === l) return;
48
49
  let r = c[n].state;
49
50
  if (u = !0, o) {
50
- let n = t(r, o);
51
- e.setState(o, () => n);
52
- } else e.setState(void 0, () => r);
51
+ let n = e(r, o);
52
+ t.setState(o, () => n);
53
+ } else t.setState(void 0, () => r);
53
54
  u = !1, l = n, m();
54
55
  };
55
56
  return {
@@ -61,7 +62,7 @@ function i(e, i = {}) {
61
62
  travelTo: g,
62
63
  clear: () => {
63
64
  c = [{
64
- state: e.getState(),
65
+ state: t.getState(),
65
66
  timestamp: Date.now()
66
67
  }], l = 0, m();
67
68
  }
@@ -69,13 +70,17 @@ function i(e, i = {}) {
69
70
  record: h
70
71
  };
71
72
  }
72
- var a = /* @__PURE__ */ new WeakMap();
73
- function o(e) {
74
- return a.get(e);
73
+ var o = /* @__PURE__ */ new WeakMap();
74
+ function s(e) {
75
+ return o.get(e);
75
76
  }
76
- var s = (e) => (t) => {
77
- let { handle: n, record: r } = i(t, e);
78
- return a.set(t, n), { onChange: r };
77
+ var c = (e) => {
78
+ let n = e?.enabled;
79
+ return (r) => {
80
+ if (t(n, r.getState())) return;
81
+ let { handle: i, record: s } = a(r, e);
82
+ return o.set(r, i), { onChange: s };
83
+ };
79
84
  };
80
85
  //#endregion
81
- export { o as getStoreHistory, s as historyMiddleware };
86
+ export { s as getStoreHistory, c as historyMiddleware };
@@ -4,5 +4,5 @@ export { historyMiddleware } from './historyMiddleware';
4
4
  export { reduxDevToolsMiddleware } from './reduxDevToolsMiddleware';
5
5
  export { cascade } from './cascade';
6
6
  export type { LoggerOptions } from './loggerMiddleware';
7
- export type { PersistOptions, PersistStorage } from './persistMiddleware';
7
+ export type { PersistOptions, PersistStorage, PersistTarget, PersistTargetOption } from './persistMiddleware';
8
8
  export type { ReduxDevToolsOptions } from './reduxDevToolsMiddleware';
@@ -0,0 +1,2 @@
1
+ import { MiddlewareOptions } from '../types';
2
+ export declare const isDisabled: <T extends object>(enabled: MiddlewareOptions<T>["enabled"], state: T) => boolean;
@@ -0,0 +1,4 @@
1
+ //#region src/middleware/isDisabled.ts
2
+ var e = (e, t) => typeof e == "function" ? !e(t) : e === !1;
3
+ //#endregion
4
+ export { e as isDisabled };
@@ -1,5 +1,5 @@
1
- import { StoreChange, StoreError, StoreMiddleware } from '../types';
2
- export type LoggerOptions<TState extends object> = {
1
+ import { MiddlewareOptions, StoreChange, StoreError, StoreMiddleware } from '../types';
2
+ export type LoggerOptions<TState extends object> = MiddlewareOptions<TState> & {
3
3
  filter?: (change: StoreChange<TState>) => boolean;
4
4
  sink?: (change: StoreChange<TState>) => void;
5
5
  errorSink?: (failure: StoreError<TState>) => void;
@@ -1,20 +1,19 @@
1
+ import { isDisabled as e } from "./isDisabled.mjs";
1
2
  //#region src/middleware/loggerMiddleware.ts
2
- var e = (e) => {
3
+ var t = (e) => {
3
4
  console.log("[store]", e.path ?? "(root)", e.next);
4
- }, t = (e) => {
5
+ }, n = (e) => {
5
6
  console.error("[store]", `${e.phase} error at`, e.path ?? "(root)", e.error);
6
- }, n = (n = {}) => {
7
- let { filter: r, sink: i = e, errorSink: a = t } = typeof n == "function" ? {
8
- filter: void 0,
9
- sink: n,
10
- errorSink: t
11
- } : n;
12
- return () => ({
13
- onChange: (e) => {
14
- (!r || r(e)) && i(e);
15
- },
16
- onError: a
17
- });
7
+ }, r = (r = {}) => {
8
+ let { filter: i, sink: a = t, errorSink: o = n, enabled: s } = typeof r == "function" ? { sink: r } : r;
9
+ return (t) => {
10
+ if (!e(s, t.getState())) return {
11
+ onChange: (e) => {
12
+ (!i || i(e)) && a(e);
13
+ },
14
+ onError: o
15
+ };
16
+ };
18
17
  };
19
18
  //#endregion
20
- export { n as loggerMiddleware };
19
+ export { r as loggerMiddleware };
@@ -1,16 +1,18 @@
1
- import { StoreMiddleware } from '../types';
1
+ import { MiddlewareOptions, PathOf, StoreMiddleware } from '../types';
2
2
  export type PersistStorage = {
3
3
  getItem: (key: string) => string | null;
4
4
  setItem: (key: string, value: string) => void;
5
5
  removeItem: (key: string) => void;
6
6
  };
7
- export type PersistOptions<TState extends object> = {
7
+ export type PersistTarget = PersistStorage | 'local' | 'session';
8
+ export type PersistTargetOption<TState extends object> = PersistTarget | ((state: TState) => PersistTarget | false);
9
+ export type PersistOptions<TState extends object> = MiddlewareOptions<TState> & {
8
10
  key: string;
9
- storage?: PersistStorage;
11
+ storage?: PersistTargetOption<TState>;
12
+ paths?: ReadonlyArray<PathOf<TState>>;
10
13
  partialize?: (state: TState) => Partial<TState>;
11
14
  version?: number;
12
- migrate?: (persisted: unknown, version: number) => Partial<TState>;
15
+ migrate?: (persisted: unknown, version: number) => unknown;
13
16
  merge?: (persisted: Partial<TState>, current: TState) => Partial<TState>;
14
- debounce?: number;
15
17
  };
16
18
  export declare const persistMiddleware: <TState extends object>(options: PersistOptions<TState>) => StoreMiddleware<TState>;
@@ -1,40 +1,68 @@
1
+ import e from "../helpers/getByPath.mjs";
2
+ import { isDisabled as t } from "./isDisabled.mjs";
3
+ import n from "../helpers/isPathAffected.mjs";
1
4
  //#region src/middleware/persistMiddleware.ts
2
- var e = {
3
- getItem: () => null,
4
- setItem: () => {},
5
- removeItem: () => {}
6
- }, t = () => typeof localStorage < "u" ? localStorage : e, n = (e) => {
7
- let { key: n, storage: i = t(), partialize: a, version: o = 0, migrate: s, merge: c, debounce: l = 0 } = e, u = (e) => {
8
- let t = e.getState(), r = {
9
- version: o,
10
- state: a ? a(t) : t
5
+ var r = (e = "local") => {
6
+ if (typeof e != "string") return e;
7
+ try {
8
+ return e === "session" ? globalThis.sessionStorage : globalThis.localStorage;
9
+ } catch {
10
+ return;
11
+ }
12
+ }, i = (i) => {
13
+ let { key: o, storage: s, paths: c, partialize: l, version: u = 0, migrate: d, merge: f, enabled: p } = i, m = typeof s == "function" ? s : void 0, h = typeof s == "function" ? void 0 : r(s);
14
+ if (!m && !h) return () => void 0;
15
+ let g = (e) => {
16
+ if (!m) return h;
17
+ let t = m(e);
18
+ return t ? r(t) : void 0;
19
+ }, _ = (t) => {
20
+ if (c) {
21
+ let n = {};
22
+ for (let r of c) n[r] = e(t, r);
23
+ return n;
24
+ }
25
+ return l ? l(t) : t;
26
+ }, v = (e) => {
27
+ let t = e.getState(), n = g(t);
28
+ if (!n) return;
29
+ let r = {
30
+ version: u,
31
+ state: _(t)
11
32
  };
12
- i.setItem(n, JSON.stringify(r));
13
- };
33
+ n.setItem(o, JSON.stringify(r));
34
+ }, y = (e) => !c || c.some((t) => n(e, t));
14
35
  return (e) => {
15
- let t;
36
+ if (t(p, e.getState())) return;
37
+ let n = !1, r = () => {
38
+ if (n) return;
39
+ let t = g(e.getState());
40
+ t && (n = !0, a(e, o, t, u, c, d, f));
41
+ };
16
42
  return {
17
- hydrate: (e) => {
18
- r(e, n, i, o, s, c);
19
- },
20
- onChange: () => {
21
- if (l <= 0) {
22
- u(e);
23
- return;
24
- }
25
- clearTimeout(t), t = setTimeout(() => u(e), l);
43
+ hydrate: r,
44
+ onChange: (t) => {
45
+ r(), y(t.path) && v(e);
26
46
  }
27
47
  };
28
48
  };
29
49
  };
30
- function r(e, t, n, r, i, a) {
31
- let o = n.getItem(t);
32
- if (o) try {
33
- let t = JSON.parse(o), n = t.version !== r && i ? i(t.state, t.version) : t.state;
34
- e.setState(void 0, a ? a(n, e.getState()) : n);
50
+ function a(e, t, n, r, i, a, o) {
51
+ let s = n?.getItem(t);
52
+ if (s) try {
53
+ let t = JSON.parse(s), n = t.version !== r && a ? a(t.state, t.version) : t.state;
54
+ if (i) {
55
+ let t = n;
56
+ e.batch(() => {
57
+ for (let n of i) n in t && e.setState(n, t[n]);
58
+ });
59
+ return;
60
+ }
61
+ let c = n;
62
+ e.setState(void 0, o ? o(c, e.getState()) : c);
35
63
  } catch {
36
- n.removeItem(t);
64
+ n?.removeItem(t);
37
65
  }
38
66
  }
39
67
  //#endregion
40
- export { n as persistMiddleware };
68
+ export { i as persistMiddleware };
@@ -1,5 +1,5 @@
1
- import { StoreChange, StoreMiddleware } from '../types';
2
- export type ReduxDevToolsOptions<TState extends object> = {
1
+ import { MiddlewareOptions, StoreChange, StoreMiddleware } from '../types';
2
+ export type ReduxDevToolsOptions<TState extends object> = MiddlewareOptions<TState> & {
3
3
  name?: string;
4
4
  action?: (change: StoreChange<TState>) => string;
5
5
  };
@@ -1,26 +1,31 @@
1
+ import { isDisabled as e } from "./isDisabled.mjs";
1
2
  //#region src/middleware/reduxDevToolsMiddleware.ts
2
- var e = () => {
3
+ var t = () => {
3
4
  if (!(typeof window > "u")) return window.__REDUX_DEVTOOLS_EXTENSION__;
4
- }, t = (t = {}) => (n) => {
5
- let r = e();
6
- if (!r) return;
7
- let { name: i = "nexus", action: a } = t, o = r.connect({ name: i });
8
- o.init(n.getState());
9
- let s = !1;
10
- return o.subscribe((e) => {
11
- if (e.type !== "DISPATCH" || e.state === void 0) return;
12
- let t = e.payload?.type;
13
- if (!(t !== "JUMP_TO_STATE" && t !== "JUMP_TO_ACTION" && t !== "ROLLBACK")) {
14
- s = !0;
15
- try {
16
- n.setState(void 0, JSON.parse(e.state));
17
- } finally {
18
- s = !1;
5
+ }, n = (n = {}) => {
6
+ let { enabled: r } = n;
7
+ return (i) => {
8
+ if (e(r, i.getState())) return;
9
+ let a = t();
10
+ if (!a) return;
11
+ let { name: o = "nexus", action: s } = n, c = a.connect({ name: o });
12
+ c.init(i.getState());
13
+ let l = !1;
14
+ return c.subscribe((e) => {
15
+ if (e.type !== "DISPATCH" || e.state === void 0) return;
16
+ let t = e.payload?.type;
17
+ if (!(t !== "JUMP_TO_STATE" && t !== "JUMP_TO_ACTION" && t !== "ROLLBACK")) {
18
+ l = !0;
19
+ try {
20
+ i.setState(void 0, JSON.parse(e.state));
21
+ } finally {
22
+ l = !1;
23
+ }
19
24
  }
20
- }
21
- }), { onChange: (e) => {
22
- s || o.send({ type: a ? a(e) : e.path ?? "SET_STATE" }, n.getState());
23
- } };
25
+ }), { onChange: (e) => {
26
+ l || c.send({ type: s ? s(e) : e.path ?? "SET_STATE" }, i.getState());
27
+ } };
28
+ };
24
29
  };
25
30
  //#endregion
26
- export { t as reduxDevToolsMiddleware };
31
+ export { n as reduxDevToolsMiddleware };
@@ -2,17 +2,13 @@ import { default as PathTrie } from '../createStore/helpers/PathTrie';
2
2
  import { default as Subscribers } from '../createStore/helpers/Subscribers';
3
3
  export type Path = string;
4
4
  export type Primitive = string | number | boolean | null | undefined | symbol | bigint;
5
- export type PathOf<T, Seen = never> = T extends Primitive ? never : T extends Seen ? never : {
6
- [K in keyof T & string]-?: T[K] extends Primitive ? K : T[K] extends Array<infer U> ? K | `${K}.${number}` | `${K}.${number}.${PathOf<U, Seen | T>}` : K | `${K}.${PathOf<T[K], Seen | T>}`;
5
+ export type PathOf<T, Seen = never> = T extends Primitive ? never : T extends Seen ? never : [string] extends [keyof T & string] ? string : {
6
+ [K in keyof T & string]-?: T[K] extends Primitive ? K : NonNullable<T[K]> extends Array<infer U> ? K | `${K}.${number}` | `${K}.${number}.${PathOf<U, Seen | T>}` : K | `${K}.${PathOf<NonNullable<T[K]>, Seen | T>}`;
7
7
  }[keyof T & string];
8
8
  export type PathValue<T, P> = T extends undefined ? undefined : P extends `${infer K}.${infer Rest}` ? K extends keyof NonNullable<T> ? NonNullable<T>[K] extends Array<infer U> ? Rest extends `${number}.${infer R}` ? PathValue<U, R> : Rest extends `${number}` ? U : never : PathValue<NonNullable<T>[K], Rest> : never : P extends keyof NonNullable<T> ? NonNullable<T>[P] : never;
9
9
  export type PathSetter<TState extends object, P extends PathOf<TState>> = (value: PathValue<TState, P> | ((prev: PathValue<TState, P>) => PathValue<TState, P>)) => void;
10
- export type __NoDefault = {
11
- __noDefault: true;
12
- };
13
- type NumericIndex<I> = I extends `${infer N extends number}` ? N : I extends number ? I : never;
14
- export type PathValues<TState extends object, Paths extends ReadonlyArray<PathOf<TState>>, DefaultValue = __NoDefault> = {
15
- [I in keyof Paths]: Paths[I] extends PathOf<TState> ? [DefaultValue] extends [__NoDefault] ? PathValue<TState, Paths[I]> : DefaultValue extends readonly any[] ? NumericIndex<I> extends infer NI ? NI extends keyof DefaultValue ? DefaultValue[NI] extends undefined ? PathValue<TState, Paths[I]> | undefined : NonNullable<PathValue<TState, Paths[I]>> | DefaultValue[NI] : PathValue<TState, Paths[I]> : never : NonNullable<PathValue<TState, Paths[I]>> | DefaultValue : never;
10
+ export type PathValues<TState extends object, Paths extends ReadonlyArray<PathOf<TState>>> = {
11
+ [I in keyof Paths]: Paths[I] extends PathOf<TState> ? PathValue<TState, Paths[I]> : never;
16
12
  };
17
13
  export type PathSetters<TState extends object, Paths extends ReadonlyArray<PathOf<TState>>> = {
18
14
  [I in keyof Paths]: Paths[I] extends PathOf<TState> ? PathSetter<TState, Paths[I]> : never;
@@ -54,17 +50,55 @@ export type StoreMiddlewareHandlers<T> = {
54
50
  hydrate?: (api: StoreApi<T>) => void;
55
51
  };
56
52
  export type StoreMiddleware<T extends object> = (api: StoreApi<T>) => StoreMiddlewareHandlers<T> | void;
53
+ export type MiddlewareOptions<T extends object> = {
54
+ enabled?: boolean | ((state: T) => boolean);
55
+ };
57
56
  export type Listener = (changedPath?: Path) => void;
58
57
  export type SetState<T> = {
59
58
  (path: undefined, value: T | ((prev: T) => T), canPropagate?: boolean): void;
60
59
  <P extends PathOf<T>>(path: P, value: PathValue<T, P> | ((prev: PathValue<T, P>) => PathValue<T, P>), canPropagate?: boolean): void;
61
60
  };
62
61
  export type GetState<T> = () => T;
62
+ export type BoundStore<TBase> = {
63
+ getState: {
64
+ (): TBase | undefined;
65
+ <D>(defaultValue: D): NonNullable<TBase> | D;
66
+ };
67
+ getPath: TBase extends object ? {
68
+ <SubP extends PathOf<TBase>>(subPath: SubP): PathValue<TBase, SubP> | undefined;
69
+ <SubP extends PathOf<TBase>, D>(subPath: SubP, defaultValue: D): NonNullable<PathValue<TBase, SubP>> | D;
70
+ } : {
71
+ (): TBase | undefined;
72
+ <D>(defaultValue: D): NonNullable<TBase> | D;
73
+ };
74
+ setState: SetFromBaseFn<TBase>;
75
+ subscribe: (listener: Listener) => () => void;
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;
86
+ };
63
87
  export type StoreApi<T> = {
64
88
  id?: string;
65
89
  getState: GetState<T>;
66
90
  getPath: <P extends PathOf<T>>(path: P) => PathValue<T, P> | undefined;
67
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
+ };
101
+ withBase: <P extends PathOf<T>>(basePath: P) => BoundStore<NonNullable<PathValue<T, P>>>;
68
102
  batch: <R>(fn: () => R) => R;
69
103
  subscribe: (listener: Listener) => () => void;
70
104
  subscribePath: <P extends PathOf<T>>(path: P, listener: Listener) => () => void;
@@ -80,6 +114,7 @@ export type StoreApiInternal<T> = StoreApi<T> & {
80
114
  changeListeners: Subscribers<ChangeListener<T>>;
81
115
  interceptors: WriteInterceptor<T>[];
82
116
  errorHandlers: StoreErrorHandler<T>[];
117
+ invalidateListeners: Subscribers<() => void>;
83
118
  getMergeCount?: () => number;
84
119
  };
85
120
  export type PathOrFn<TState extends object> = PathOf<TState> | ((state: TState) => PathOf<TState>);
@@ -91,15 +126,16 @@ export type PathOrFnSetter<TState extends object, Entry> = Entry extends PathOf<
91
126
  export type PathOrFnSetters<TState extends object, Entries extends ReadonlyArray<PathOrFn<TState>>> = {
92
127
  [I in keyof Entries]: PathOrFnSetter<TState, Entries[I]>;
93
128
  };
94
- export type MultiPathReturn<TState extends object, Paths extends ReadonlyArray<PathOf<TState>>, TDefaultValue = __NoDefault> = [PathValues<TState, Paths, TDefaultValue>, ...PathSetters<TState, Paths>];
129
+ export type MultiPathReturn<TState extends object, Paths extends ReadonlyArray<PathOf<TState>>> = [
130
+ PathValues<TState, Paths>,
131
+ ...PathSetters<TState, Paths>
132
+ ];
95
133
  export type UseStoreReturn<TState extends object, TArg> = TArg extends PathOf<TState> ? [PathValue<TState, TArg>, PathSetter<TState, TArg>] : TArg extends (state: TState) => unknown ? [unknown, (value: unknown) => void] : [TState, StoreApi<TState>['setState']];
96
134
  export type UseStoreOptions<T, TState extends object = object> = StoreHookReactiveOptions<T, TState> & {
97
- defaultValue?: NonNullable<T>;
98
135
  transformer?: (value: T) => unknown;
99
136
  };
100
- export type UseStoreMultiOptions<TState extends object, Paths extends ReadonlyArray<PathOf<TState>>, TDefaultValue extends readonly (PathValue<TState, Paths[number]> | undefined)[] | PathValue<TState, Paths[number]> | undefined = undefined> = Omit<StoreHookReactiveOptions<never, TState>, 'equalityFn'> & {
137
+ export type UseStoreMultiOptions<TState extends object, Paths extends ReadonlyArray<PathOf<TState>>> = Omit<StoreHookReactiveOptions<never, TState>, 'equalityFn'> & {
101
138
  equalityFn?: (a: PathValues<TState, Paths>, b: PathValues<TState, Paths>) => boolean;
102
- defaultValue?: TDefaultValue;
103
139
  transformer?: (values: PathValues<TState, Paths>) => unknown;
104
140
  };
105
141
  export type UseStoreSyncOptions<T, TState extends object = object> = StoreHookReactiveOptions<T, TState> & {
@@ -120,19 +156,11 @@ export type GetValueFromBaseFn<TBase> = TBase extends object ? {
120
156
  <SubP extends PathOf<TBase>, D>(path: SubP, defaultValue: D): NonNullable<PathValue<TBase, SubP>> | D;
121
157
  <D>(path: undefined, defaultValue: D): NonNullable<TBase> | D;
122
158
  } : () => TBase;
123
- export type GetValueFromBaseWithDefaultFn<TBase, D> = TBase extends object ? {
124
- (): NonNullable<TBase> | D;
125
- <SubP extends PathOf<NonNullable<TBase>>>(path: SubP): PathValue<NonNullable<TBase>, SubP>;
126
- <SubP extends PathOf<NonNullable<TBase>>, D2>(path: SubP, defaultValue: D2): NonNullable<PathValue<NonNullable<TBase>, SubP>> | D2;
127
- <D2>(path: undefined, defaultValue: D2): NonNullable<TBase> | D2;
128
- } : () => NonNullable<TBase> | D;
129
159
  type EntryGetter<TState extends object, Entry> = Entry extends PathOf<TState> ? GetValueFromBaseFn<PathValue<TState, Entry>> : Entry extends (state: TState) => infer R ? R extends object ? GetValueFromBaseFn<R> : () => R : never;
130
160
  export type GetterTuple<TState extends object, Entries extends ReadonlyArray<PathOf<TState> | ((state: TState) => unknown)>> = {
131
161
  [K in keyof Entries]: EntryGetter<TState, Entries[K]>;
132
162
  };
133
- export type UseStoreGetterOptions<TState extends object = object, D = __NoDefault> = StoreHookBaseOptions<TState> & {
134
- defaultValue?: D;
135
- };
163
+ export type UseStoreGetterOptions<TState extends object = object> = StoreHookBaseOptions<TState>;
136
164
  export type SetStateFn<TState extends object> = {
137
165
  (path: undefined, value: TState | ((prev: TState) => TState)): void;
138
166
  <P extends PathOf<TState>>(path: P, value: PathValue<TState, P> | ((prev: PathValue<TState, P>) => PathValue<TState, P>)): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plitzi/nexus",
3
- "version": "0.31.2",
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"
@@ -159,6 +167,10 @@
159
167
  "types": "./dist/entities/createEntityAdapter.d.ts",
160
168
  "import": "./dist/entities/createEntityAdapter.mjs"
161
169
  },
170
+ "./entities/createEntityStore": {
171
+ "types": "./dist/entities/createEntityStore.d.ts",
172
+ "import": "./dist/entities/createEntityStore.mjs"
173
+ },
162
174
  "./entities/index": {
163
175
  "types": "./dist/entities/index.d.ts",
164
176
  "import": "./dist/entities/index.mjs"
@@ -223,6 +235,10 @@
223
235
  "types": "./dist/middleware/index.d.ts",
224
236
  "import": "./dist/middleware/index.mjs"
225
237
  },
238
+ "./middleware/isDisabled": {
239
+ "types": "./dist/middleware/isDisabled.d.ts",
240
+ "import": "./dist/middleware/isDisabled.mjs"
241
+ },
226
242
  "./middleware/loggerMiddleware": {
227
243
  "types": "./dist/middleware/loggerMiddleware.d.ts",
228
244
  "import": "./dist/middleware/loggerMiddleware.mjs"