@plitzi/nexus 0.31.2 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/async/createAsync.mjs +8 -1
  3. package/dist/createStore/createStore.d.ts +4 -45
  4. package/dist/createStore/createStore.mjs +29 -16
  5. package/dist/createStore/helpers/PathTrie.d.ts +2 -0
  6. package/dist/createStore/helpers/PathTrie.mjs +55 -20
  7. package/dist/createStore/helpers/createChainReads.d.ts +1 -1
  8. package/dist/createStore/helpers/createChainReads.mjs +12 -13
  9. package/dist/createStore/helpers/createSetState.mjs +24 -33
  10. package/dist/createStore/hooks/shared.d.ts +1 -2
  11. package/dist/createStore/hooks/shared.mjs +7 -18
  12. package/dist/createStore/hooks/useStore.d.ts +4 -49
  13. package/dist/createStore/hooks/useStore.mjs +19 -27
  14. package/dist/createStore/hooks/useStoreGetter.d.ts +2 -5
  15. package/dist/createStore/hooks/useStoreGetter.mjs +19 -22
  16. package/dist/createStore/hooks/useStoreSetter.mjs +2 -4
  17. package/dist/derived/createDerived.d.ts +1 -1
  18. package/dist/derived/createDerived.mjs +12 -9
  19. package/dist/entities/createEntityStore.d.ts +38 -0
  20. package/dist/entities/createEntityStore.mjs +102 -0
  21. package/dist/entities/index.d.ts +2 -0
  22. package/dist/entities/index.mjs +2 -1
  23. package/dist/index.mjs +11 -10
  24. package/dist/middleware/historyMiddleware.d.ts +3 -3
  25. package/dist/middleware/historyMiddleware.mjs +22 -17
  26. package/dist/middleware/index.d.ts +1 -1
  27. package/dist/middleware/isDisabled.d.ts +2 -0
  28. package/dist/middleware/isDisabled.mjs +4 -0
  29. package/dist/middleware/loggerMiddleware.d.ts +2 -2
  30. package/dist/middleware/loggerMiddleware.mjs +14 -15
  31. package/dist/middleware/persistMiddleware.d.ts +7 -5
  32. package/dist/middleware/persistMiddleware.mjs +56 -28
  33. package/dist/middleware/reduxDevToolsMiddleware.d.ts +2 -2
  34. package/dist/middleware/reduxDevToolsMiddleware.mjs +26 -21
  35. package/dist/types/StoreTypes.d.ts +31 -21
  36. package/package.json +9 -1
@@ -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,37 @@ 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
+ };
63
78
  export type StoreApi<T> = {
64
79
  id?: string;
65
80
  getState: GetState<T>;
66
81
  getPath: <P extends PathOf<T>>(path: P) => PathValue<T, P> | undefined;
67
82
  setState: SetState<T>;
83
+ withBase: <P extends PathOf<T>>(basePath: P) => BoundStore<NonNullable<PathValue<T, P>>>;
68
84
  batch: <R>(fn: () => R) => R;
69
85
  subscribe: (listener: Listener) => () => void;
70
86
  subscribePath: <P extends PathOf<T>>(path: P, listener: Listener) => () => void;
@@ -80,6 +96,7 @@ export type StoreApiInternal<T> = StoreApi<T> & {
80
96
  changeListeners: Subscribers<ChangeListener<T>>;
81
97
  interceptors: WriteInterceptor<T>[];
82
98
  errorHandlers: StoreErrorHandler<T>[];
99
+ invalidateListeners: Subscribers<() => void>;
83
100
  getMergeCount?: () => number;
84
101
  };
85
102
  export type PathOrFn<TState extends object> = PathOf<TState> | ((state: TState) => PathOf<TState>);
@@ -91,15 +108,16 @@ export type PathOrFnSetter<TState extends object, Entry> = Entry extends PathOf<
91
108
  export type PathOrFnSetters<TState extends object, Entries extends ReadonlyArray<PathOrFn<TState>>> = {
92
109
  [I in keyof Entries]: PathOrFnSetter<TState, Entries[I]>;
93
110
  };
94
- export type MultiPathReturn<TState extends object, Paths extends ReadonlyArray<PathOf<TState>>, TDefaultValue = __NoDefault> = [PathValues<TState, Paths, TDefaultValue>, ...PathSetters<TState, Paths>];
111
+ export type MultiPathReturn<TState extends object, Paths extends ReadonlyArray<PathOf<TState>>> = [
112
+ PathValues<TState, Paths>,
113
+ ...PathSetters<TState, Paths>
114
+ ];
95
115
  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
116
  export type UseStoreOptions<T, TState extends object = object> = StoreHookReactiveOptions<T, TState> & {
97
- defaultValue?: NonNullable<T>;
98
117
  transformer?: (value: T) => unknown;
99
118
  };
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'> & {
119
+ export type UseStoreMultiOptions<TState extends object, Paths extends ReadonlyArray<PathOf<TState>>> = Omit<StoreHookReactiveOptions<never, TState>, 'equalityFn'> & {
101
120
  equalityFn?: (a: PathValues<TState, Paths>, b: PathValues<TState, Paths>) => boolean;
102
- defaultValue?: TDefaultValue;
103
121
  transformer?: (values: PathValues<TState, Paths>) => unknown;
104
122
  };
105
123
  export type UseStoreSyncOptions<T, TState extends object = object> = StoreHookReactiveOptions<T, TState> & {
@@ -120,19 +138,11 @@ export type GetValueFromBaseFn<TBase> = TBase extends object ? {
120
138
  <SubP extends PathOf<TBase>, D>(path: SubP, defaultValue: D): NonNullable<PathValue<TBase, SubP>> | D;
121
139
  <D>(path: undefined, defaultValue: D): NonNullable<TBase> | D;
122
140
  } : () => 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
141
  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
142
  export type GetterTuple<TState extends object, Entries extends ReadonlyArray<PathOf<TState> | ((state: TState) => unknown)>> = {
131
143
  [K in keyof Entries]: EntryGetter<TState, Entries[K]>;
132
144
  };
133
- export type UseStoreGetterOptions<TState extends object = object, D = __NoDefault> = StoreHookBaseOptions<TState> & {
134
- defaultValue?: D;
135
- };
145
+ export type UseStoreGetterOptions<TState extends object = object> = StoreHookBaseOptions<TState>;
136
146
  export type SetStateFn<TState extends object> = {
137
147
  (path: undefined, value: TState | ((prev: TState) => TState)): void;
138
148
  <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.0",
4
4
  "license": "Apache-2.0",
5
5
  "files": [
6
6
  "dist",
@@ -159,6 +159,10 @@
159
159
  "types": "./dist/entities/createEntityAdapter.d.ts",
160
160
  "import": "./dist/entities/createEntityAdapter.mjs"
161
161
  },
162
+ "./entities/createEntityStore": {
163
+ "types": "./dist/entities/createEntityStore.d.ts",
164
+ "import": "./dist/entities/createEntityStore.mjs"
165
+ },
162
166
  "./entities/index": {
163
167
  "types": "./dist/entities/index.d.ts",
164
168
  "import": "./dist/entities/index.mjs"
@@ -223,6 +227,10 @@
223
227
  "types": "./dist/middleware/index.d.ts",
224
228
  "import": "./dist/middleware/index.mjs"
225
229
  },
230
+ "./middleware/isDisabled": {
231
+ "types": "./dist/middleware/isDisabled.d.ts",
232
+ "import": "./dist/middleware/isDisabled.mjs"
233
+ },
226
234
  "./middleware/loggerMiddleware": {
227
235
  "types": "./dist/middleware/loggerMiddleware.d.ts",
228
236
  "import": "./dist/middleware/loggerMiddleware.mjs"