@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.
- package/CHANGELOG.md +12 -0
- package/README.md +30 -5
- package/dist/advanced/index.d.ts +7 -0
- package/dist/advanced/index.mjs +16 -0
- package/dist/async/createAsync.mjs +8 -1
- package/dist/createStore/createStore.d.ts +4 -45
- package/dist/createStore/createStore.mjs +58 -36
- package/dist/createStore/helpers/PathTrie.d.ts +2 -0
- package/dist/createStore/helpers/PathTrie.mjs +55 -20
- package/dist/createStore/helpers/createChainReads.d.ts +1 -1
- package/dist/createStore/helpers/createChainReads.mjs +18 -19
- package/dist/createStore/helpers/createSetState.mjs +24 -33
- package/dist/createStore/hooks/shared.d.ts +1 -2
- package/dist/createStore/hooks/shared.mjs +7 -18
- package/dist/createStore/hooks/useStore.d.ts +4 -49
- package/dist/createStore/hooks/useStore.mjs +19 -27
- package/dist/createStore/hooks/useStoreGetter.d.ts +2 -5
- package/dist/createStore/hooks/useStoreGetter.mjs +19 -22
- package/dist/createStore/hooks/useStoreSetter.mjs +2 -4
- package/dist/derived/createDerived.d.ts +1 -1
- package/dist/derived/createDerived.mjs +12 -9
- package/dist/entities/createEntityStore.d.ts +38 -0
- package/dist/entities/createEntityStore.mjs +102 -0
- package/dist/entities/index.d.ts +2 -0
- package/dist/entities/index.mjs +2 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.mjs +23 -22
- package/dist/middleware/historyMiddleware.d.ts +3 -3
- package/dist/middleware/historyMiddleware.mjs +35 -30
- package/dist/middleware/index.d.ts +1 -1
- package/dist/middleware/isDisabled.d.ts +2 -0
- package/dist/middleware/isDisabled.mjs +4 -0
- package/dist/middleware/loggerMiddleware.d.ts +2 -2
- package/dist/middleware/loggerMiddleware.mjs +14 -15
- package/dist/middleware/persistMiddleware.d.ts +7 -5
- package/dist/middleware/persistMiddleware.mjs +56 -28
- package/dist/middleware/reduxDevToolsMiddleware.d.ts +2 -2
- package/dist/middleware/reduxDevToolsMiddleware.mjs +26 -21
- package/dist/types/StoreTypes.d.ts +49 -21
- package/package.json +17 -1
|
@@ -7,32 +7,21 @@ var c = (e, t) => {
|
|
|
7
7
|
for (let n = 0; n < e.length; n++) if (!Object.is(e[n], t[n])) return !1;
|
|
8
8
|
return !0;
|
|
9
9
|
};
|
|
10
|
-
function l(t, n
|
|
10
|
+
function l(t, n) {
|
|
11
11
|
return () => {
|
|
12
|
-
if (typeof n == "string")
|
|
13
|
-
let e = t.getPath(n);
|
|
14
|
-
return e === void 0 ? r : e;
|
|
15
|
-
}
|
|
12
|
+
if (typeof n == "string") return t.getPath(n);
|
|
16
13
|
if (typeof n == "function") {
|
|
17
|
-
let
|
|
18
|
-
return
|
|
14
|
+
let r = t.getState();
|
|
15
|
+
return e(r, n(r));
|
|
19
16
|
}
|
|
20
17
|
return t.getState();
|
|
21
18
|
};
|
|
22
19
|
}
|
|
23
20
|
function u(t, n, r, i = {}) {
|
|
24
|
-
let { equalityFn: a = c
|
|
21
|
+
let { equalityFn: a = c } = i;
|
|
25
22
|
return () => {
|
|
26
|
-
let i = n.current,
|
|
27
|
-
|
|
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);
|
|
23
|
+
let i = n.current, o = i.some((e) => typeof e == "function") ? t.getState() : void 0, s = i.map((n) => typeof n == "function" ? e(o, n(o)) : t.getPath(n)), c = r.current;
|
|
24
|
+
return c !== null && a(c, s) ? c : (r.current = s, s);
|
|
36
25
|
};
|
|
37
26
|
}
|
|
38
27
|
function d(e, i, o) {
|
|
@@ -1,72 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MultiPathReturn, PathOf, PathOrFn, PathOrFnSetters, PathOrFnValues, PathSetter, PathSetters, PathValue, PathValues, StoreApi, UseStoreMultiOptions, UseStoreOptions, UseStoreReturn } from '../../types';
|
|
2
2
|
export { defaultMultiEqualityFn } from './shared';
|
|
3
3
|
export type { MultiPathReturn, UseStoreOptions, UseStoreMultiOptions, UseStoreReturn };
|
|
4
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
5
|
declare function useStore<TState extends object, P extends PathOf<TState>>(path: P, options?: UseStoreOptions<PathValue<TState, P>> & {
|
|
10
|
-
defaultValue?: never;
|
|
11
6
|
transformer?: never;
|
|
12
7
|
}): [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
8
|
declare function useStore<TState extends object, P extends PathOf<TState>, TResult>(path: P, options: UseStoreOptions<PathValue<TState, P>> & {
|
|
18
9
|
transformer: (value: PathValue<TState, P>) => TResult;
|
|
19
10
|
}): [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
11
|
declare function useStore<TState extends object, P extends PathOf<TState>>(pathFn: (state: TState) => P, options?: UseStoreOptions<PathValue<TState, P>, TState> & {
|
|
25
|
-
defaultValue?: never;
|
|
26
12
|
transformer?: never;
|
|
27
13
|
}): [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
14
|
declare function useStore<TState extends object, P extends PathOf<TState>, TResult>(pathFn: (state: TState) => P, options: UseStoreOptions<PathValue<TState, P>, TState> & {
|
|
33
15
|
transformer: (value: PathValue<TState, P>) => TResult;
|
|
34
16
|
}): [TResult, PathSetter<TState, P>];
|
|
35
|
-
declare function useStore<TState extends object, const Paths extends ReadonlyArray<PathOf<TState>>>(paths: Paths, options?: Omit<UseStoreMultiOptions<TState, Paths>, '
|
|
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>;
|
|
17
|
+
declare function useStore<TState extends object, const Paths extends ReadonlyArray<PathOf<TState>>>(paths: Paths, options?: Omit<UseStoreMultiOptions<TState, Paths>, 'transformer'>): MultiPathReturn<TState, Paths>;
|
|
48
18
|
declare function useStore<TState extends object, const Paths extends ReadonlyArray<PathOf<TState>>, TResult>(paths: Paths, options: UseStoreMultiOptions<TState, Paths> & {
|
|
49
19
|
transformer: (values: PathValues<TState, Paths>) => TResult;
|
|
50
20
|
}): [TResult, ...PathSetters<TState, Paths>];
|
|
51
|
-
declare function useStore<TState extends object, const Entries extends ReadonlyArray<PathOrFn<TState>>>(paths: Entries, options?: Omit<UseStoreMultiOptions<TState, any>, '
|
|
21
|
+
declare function useStore<TState extends object, const Entries extends ReadonlyArray<PathOrFn<TState>>>(paths: Entries, options?: Omit<UseStoreMultiOptions<TState, any>, 'transformer'> & {
|
|
52
22
|
transformer?: never;
|
|
53
23
|
}): [PathOrFnValues<TState, Entries>, ...PathOrFnSetters<TState, Entries>];
|
|
54
|
-
declare function useStore<TState extends object, const Entries extends ReadonlyArray<PathOrFn<TState
|
|
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'> & {
|
|
24
|
+
declare function useStore<TState extends object, const Entries extends ReadonlyArray<PathOrFn<TState>>, TResult>(paths: Entries, options: Omit<UseStoreMultiOptions<TState, any>, 'transformer'> & {
|
|
70
25
|
transformer: (values: PathOrFnValues<TState, Entries>) => TResult;
|
|
71
26
|
}): [TResult, ...PathOrFnSetters<TState, Entries>];
|
|
72
27
|
export type { PathSetters, PathValues };
|
|
@@ -4,42 +4,34 @@ import { useCallback as c, useMemo as l, useRef as u, useSyncExternalStore as d
|
|
|
4
4
|
//#region src/createStore/hooks/useStore.ts
|
|
5
5
|
var f = [];
|
|
6
6
|
function p(e, t, r) {
|
|
7
|
-
let i = r.mode ?? "sync", a = r.enabled ?? !0, o =
|
|
8
|
-
|
|
9
|
-
let
|
|
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), [
|
|
7
|
+
let i = r.mode ?? "sync", a = r.enabled ?? !0, o = t === void 0, f = r.equalityFn ?? (o ? s : Object.is), p = r.transformer, m = u(p);
|
|
8
|
+
m.current = p;
|
|
9
|
+
let h = l(() => n(e, t), [e, t]), g = u(h()), _ = l(() => (n) => !a || i === "mount" ? () => {} : typeof t == "string" ? e.subscribePath(t, n) : e.subscribe(n), [
|
|
14
10
|
a,
|
|
15
11
|
i,
|
|
16
12
|
t,
|
|
17
13
|
e
|
|
18
|
-
]),
|
|
19
|
-
if (!a) return
|
|
20
|
-
if (i === "mount") return
|
|
21
|
-
let e =
|
|
22
|
-
return
|
|
23
|
-
},
|
|
24
|
-
return [l(() =>
|
|
25
|
-
|
|
14
|
+
]), v = () => {
|
|
15
|
+
if (!a) return g.current;
|
|
16
|
+
if (i === "mount") return h();
|
|
17
|
+
let e = h();
|
|
18
|
+
return f(g.current, e) ? g.current : (g.current = e, e);
|
|
19
|
+
}, y = d(_, v, v);
|
|
20
|
+
return [l(() => m.current ? m.current(y) : y, [y]), c((n) => {
|
|
21
|
+
o ? e.setState(void 0, n) : typeof t == "function" ? e.setState(t(e.getState()), n) : e.setState(t, n);
|
|
26
22
|
}, [e, t])];
|
|
27
23
|
}
|
|
28
24
|
function m(n, o, s) {
|
|
29
|
-
let c = s.mode ?? "sync", d = s.enabled ?? !0, f = s.
|
|
30
|
-
|
|
31
|
-
let
|
|
32
|
-
|
|
33
|
-
let
|
|
34
|
-
equalityFn: p,
|
|
35
|
-
defaultValue: f
|
|
36
|
-
}), [
|
|
25
|
+
let c = s.mode ?? "sync", d = s.enabled ?? !0, f = s.equalityFn ?? e, p = s.transformer, m = u(p);
|
|
26
|
+
m.current = p;
|
|
27
|
+
let h = u(o);
|
|
28
|
+
h.current = o;
|
|
29
|
+
let g = o.map((e, t) => typeof e == "function" ? `fn_${t}` : e).join("|"), _ = u(null), v = l(() => t(n, h, _, { equalityFn: f }), [
|
|
37
30
|
n,
|
|
38
|
-
|
|
39
|
-
p,
|
|
31
|
+
g,
|
|
40
32
|
f
|
|
41
|
-
]),
|
|
42
|
-
return [l(() =>
|
|
33
|
+
]), y = r(a(n, h, g, d, c), v, d, _);
|
|
34
|
+
return [l(() => m.current ? m.current(y) : y, [y]), ...i(n, h, g)];
|
|
43
35
|
}
|
|
44
36
|
function h(e, t = {}) {
|
|
45
37
|
let n = o(t.store, "useStore", t.storeId), r = Array.isArray(e), i = p(n, r ? void 0 : e, r ? {
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { GetterTuple,
|
|
2
|
-
export type { GetValueFn, GetValueFromBaseFn,
|
|
1
|
+
import { GetterTuple, GetValueFromBaseFn, GetValueFn, PathOf, PathValue, UseStoreGetterOptions } from '../../types';
|
|
2
|
+
export type { GetValueFn, GetValueFromBaseFn, GetterTuple, UseStoreGetterOptions };
|
|
3
3
|
declare function useStoreGetter<TState extends object>(options?: UseStoreGetterOptions<TState>): GetValueFn<TState>;
|
|
4
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
5
|
declare function useStoreGetter<TState extends object, const Entries extends ReadonlyArray<PathOf<TState> | ((state: TState) => unknown)>>(entries: Entries, options?: UseStoreGetterOptions<TState>): GetterTuple<TState, Entries>;
|
|
9
6
|
export default useStoreGetter;
|
|
@@ -3,34 +3,31 @@ import { useResolvedStore as t } from "./shared.mjs";
|
|
|
3
3
|
import { useMemo as n } from "react";
|
|
4
4
|
//#region src/createStore/hooks/useStoreGetter.ts
|
|
5
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),
|
|
7
|
-
return n(() =>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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), l = o?.map((e) => typeof e == "function" ? e.toString() : e).join("|");
|
|
7
|
+
return n(() => {
|
|
8
|
+
if (o) return o.map((t) => (n, r) => {
|
|
9
|
+
let i = typeof t == "function" ? t(c.getState()) : e(c.getState(), t);
|
|
10
|
+
if (n !== void 0) {
|
|
11
|
+
let t = e(i, n);
|
|
12
|
+
return t === void 0 && r !== void 0 ? r : t;
|
|
13
|
+
}
|
|
14
|
+
return i === void 0 && r !== void 0 ? r : i;
|
|
15
|
+
});
|
|
16
16
|
if (a !== void 0) {
|
|
17
|
-
let
|
|
17
|
+
let e = c.withBase(a);
|
|
18
|
+
return (t, n) => t === void 0 ? n === void 0 ? e.getState() : e.getState(n) : n === void 0 ? e.getPath(t) : e.getPath(t, n);
|
|
19
|
+
}
|
|
20
|
+
return (t, n) => {
|
|
21
|
+
let r = c.getState();
|
|
18
22
|
if (t !== void 0) {
|
|
19
|
-
let
|
|
20
|
-
return
|
|
23
|
+
let i = e(r, t);
|
|
24
|
+
return i === void 0 && n !== void 0 ? n : i;
|
|
21
25
|
}
|
|
22
|
-
|
|
23
|
-
|
|
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;
|
|
26
|
+
return r;
|
|
27
|
+
};
|
|
30
28
|
}, [
|
|
31
29
|
c,
|
|
32
30
|
a,
|
|
33
|
-
u,
|
|
34
31
|
l
|
|
35
32
|
]);
|
|
36
33
|
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { useResolvedStore as e } from "./shared.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { useMemo as t } from "react";
|
|
3
3
|
//#region src/createStore/hooks/useStoreSetter.ts
|
|
4
4
|
function n(n, r) {
|
|
5
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((
|
|
7
|
-
i === void 0 ? o.setState(e, t) : e === void 0 ? o.setState(i, t) : o.setState(`${i}.${e}`, t);
|
|
8
|
-
}, [o, i]);
|
|
6
|
+
return t(() => i === void 0 ? o.setState : o.withBase(i).setState, [o, i]);
|
|
9
7
|
}
|
|
10
8
|
//#endregion
|
|
11
9
|
export { n as default };
|
|
@@ -7,4 +7,4 @@ export type Derived<R> = {
|
|
|
7
7
|
export type DerivedOptions<R> = {
|
|
8
8
|
equalityFn?: (a: R, b: R) => boolean;
|
|
9
9
|
};
|
|
10
|
-
export declare function createDerived<TState extends object, const Paths extends readonly PathOf<TState>[], R>(store: StoreApi<TState>, deps: Paths, compute: (values: PathValues<TState, Paths
|
|
10
|
+
export declare function createDerived<TState extends object, const Paths extends readonly PathOf<TState>[], R>(store: StoreApi<TState>, deps: Paths, compute: (values: PathValues<TState, Paths>, changedPath?: string) => R, options?: DerivedOptions<R>): Derived<R>;
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { createObservable as e } from "../helpers/createObservable.mjs";
|
|
2
2
|
//#region src/derived/createDerived.ts
|
|
3
3
|
function t(t, n, r, i = {}) {
|
|
4
|
-
let a = i.equalityFn ?? Object.is, o
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
let a = i.equalityFn ?? Object.is, o, s = e(() => {
|
|
5
|
+
let e = o;
|
|
6
|
+
return o = void 0, r(n.map((e) => t.getPath(e)), e);
|
|
7
|
+
}), c = (e) => {
|
|
8
|
+
if (o = e, !s.hasListeners()) {
|
|
9
|
+
s.invalidate();
|
|
7
10
|
return;
|
|
8
11
|
}
|
|
9
|
-
let
|
|
10
|
-
|
|
11
|
-
},
|
|
12
|
+
let t = s.get();
|
|
13
|
+
s.invalidate(), a(t, s.get()) || s.notify();
|
|
14
|
+
}, l = n.map((e) => t.subscribePath(e, c));
|
|
12
15
|
return {
|
|
13
|
-
get:
|
|
14
|
-
subscribe: (e) => (
|
|
16
|
+
get: s.get,
|
|
17
|
+
subscribe: (e) => (s.get(), s.subscribe(e)),
|
|
15
18
|
destroy: () => {
|
|
16
|
-
|
|
19
|
+
l.forEach((e) => e()), s.destroy();
|
|
17
20
|
}
|
|
18
21
|
};
|
|
19
22
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { EntityId } from './createEntityAdapter';
|
|
2
|
+
export type EntityChangeListener = () => void;
|
|
3
|
+
export type EntityStoreOptions<T> = {
|
|
4
|
+
selectId?: (entity: T) => EntityId;
|
|
5
|
+
sortComparer?: (a: T, b: T) => number;
|
|
6
|
+
};
|
|
7
|
+
export type EntityStore<T> = {
|
|
8
|
+
selectId: (entity: T) => EntityId;
|
|
9
|
+
getOne: (id: EntityId) => T | undefined;
|
|
10
|
+
getAll: () => T[];
|
|
11
|
+
getIds: () => string[];
|
|
12
|
+
has: (id: EntityId) => boolean;
|
|
13
|
+
size: () => number;
|
|
14
|
+
setOne: (entity: T) => void;
|
|
15
|
+
setMany: (entities: readonly T[]) => void;
|
|
16
|
+
setAll: (entities: readonly T[]) => void;
|
|
17
|
+
addOne: (entity: T) => void;
|
|
18
|
+
addMany: (entities: readonly T[]) => void;
|
|
19
|
+
upsertOne: (entity: T) => void;
|
|
20
|
+
upsertMany: (entities: readonly T[]) => void;
|
|
21
|
+
updateOne: (id: EntityId, changes: Partial<T>) => void;
|
|
22
|
+
updateMany: (updates: readonly {
|
|
23
|
+
id: EntityId;
|
|
24
|
+
changes: Partial<T>;
|
|
25
|
+
}[]) => void;
|
|
26
|
+
removeOne: (id: EntityId) => void;
|
|
27
|
+
removeMany: (ids: readonly EntityId[]) => void;
|
|
28
|
+
removeAll: () => void;
|
|
29
|
+
batch: (fn: () => void) => void;
|
|
30
|
+
subscribeOne: (id: EntityId, listener: EntityChangeListener) => () => void;
|
|
31
|
+
subscribeIds: (listener: EntityChangeListener) => () => void;
|
|
32
|
+
subscribeAll: (listener: EntityChangeListener) => () => void;
|
|
33
|
+
useOne: (id: EntityId) => T | undefined;
|
|
34
|
+
useIds: () => string[];
|
|
35
|
+
useAll: () => T[];
|
|
36
|
+
destroy: () => void;
|
|
37
|
+
};
|
|
38
|
+
export declare function createEntityStore<T>(initialEntities?: readonly T[], options?: EntityStoreOptions<T>): EntityStore<T>;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import e from "../createStore/helpers/Subscribers.mjs";
|
|
2
|
+
import { useCallback as t, useSyncExternalStore as n } from "react";
|
|
3
|
+
//#region src/entities/createEntityStore.ts
|
|
4
|
+
function r(r = [], i = {}) {
|
|
5
|
+
let a = i.selectId ?? ((e) => e.id), o = i.sortComparer, s = (e) => String(a(e)), c = /* @__PURE__ */ new Map();
|
|
6
|
+
for (let e of r) c.set(s(e), e);
|
|
7
|
+
let l = /* @__PURE__ */ new Map(), u = new e(), d = new e(), f, p, m = 0, h = /* @__PURE__ */ new Set(), g = !1, _ = !1, v = (e) => {
|
|
8
|
+
e && e.length > 0 && e.forEach((e) => e());
|
|
9
|
+
}, y = (e, t) => {
|
|
10
|
+
if (t && (f = void 0), p = void 0, m > 0) {
|
|
11
|
+
h.add(e), g ||= t, _ = !0;
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
v(l.get(e)), t && v(u), v(d);
|
|
15
|
+
}, b = () => {
|
|
16
|
+
let e = [...h], t = g, n = _;
|
|
17
|
+
h.clear(), g = !1, _ = !1;
|
|
18
|
+
for (let t of e) v(l.get(t));
|
|
19
|
+
t && v(u), n && v(d);
|
|
20
|
+
}, x = (e) => {
|
|
21
|
+
m++;
|
|
22
|
+
try {
|
|
23
|
+
e();
|
|
24
|
+
} finally {
|
|
25
|
+
m--, m === 0 && _ && b();
|
|
26
|
+
}
|
|
27
|
+
}, S = (e, t, n) => {
|
|
28
|
+
let r = s(e), i = c.get(r), a = i === void 0;
|
|
29
|
+
if (t && !a) return;
|
|
30
|
+
let o = n && !a ? {
|
|
31
|
+
...i,
|
|
32
|
+
...e
|
|
33
|
+
} : e;
|
|
34
|
+
o !== i && (c.set(r, o), y(r, a));
|
|
35
|
+
}, C = (e) => {
|
|
36
|
+
S(e, !1, !1);
|
|
37
|
+
}, w = (e) => {
|
|
38
|
+
S(e, !0, !1);
|
|
39
|
+
}, T = (e) => {
|
|
40
|
+
S(e, !1, !0);
|
|
41
|
+
}, E = (e, t) => {
|
|
42
|
+
let n = String(e), r = c.get(n);
|
|
43
|
+
r !== void 0 && (c.set(n, {
|
|
44
|
+
...r,
|
|
45
|
+
...t
|
|
46
|
+
}), y(n, !1));
|
|
47
|
+
}, D = (e) => {
|
|
48
|
+
let t = String(e);
|
|
49
|
+
c.has(t) && (c.delete(t), y(t, !0));
|
|
50
|
+
}, O = (e) => c.get(String(e)), k = () => f ??= [...c.keys()], A = () => {
|
|
51
|
+
if (p === void 0) {
|
|
52
|
+
let e = [...c.values()];
|
|
53
|
+
p = o ? e.sort(o) : e;
|
|
54
|
+
}
|
|
55
|
+
return p;
|
|
56
|
+
}, j = (t, n) => {
|
|
57
|
+
let r = String(t), i = l.get(r);
|
|
58
|
+
i || (i = new e(), l.set(r, i));
|
|
59
|
+
let a = i, o = a.add(n);
|
|
60
|
+
return () => {
|
|
61
|
+
o(), a.length === 0 && l.get(r) === a && l.delete(r);
|
|
62
|
+
};
|
|
63
|
+
}, M = (e) => u.add(e), N = (e) => d.add(e);
|
|
64
|
+
return {
|
|
65
|
+
selectId: a,
|
|
66
|
+
getOne: O,
|
|
67
|
+
getIds: k,
|
|
68
|
+
getAll: A,
|
|
69
|
+
has: (e) => c.has(String(e)),
|
|
70
|
+
size: () => c.size,
|
|
71
|
+
setOne: C,
|
|
72
|
+
setMany: (e) => x(() => e.forEach(C)),
|
|
73
|
+
setAll: (e) => x(() => {
|
|
74
|
+
for (let e of [...c.keys()]) D(e);
|
|
75
|
+
e.forEach(C);
|
|
76
|
+
}),
|
|
77
|
+
addOne: w,
|
|
78
|
+
addMany: (e) => x(() => e.forEach(w)),
|
|
79
|
+
upsertOne: T,
|
|
80
|
+
upsertMany: (e) => x(() => e.forEach(T)),
|
|
81
|
+
updateOne: E,
|
|
82
|
+
updateMany: (e) => x(() => e.forEach(({ id: e, changes: t }) => E(e, t))),
|
|
83
|
+
removeOne: D,
|
|
84
|
+
removeMany: (e) => x(() => e.forEach(D)),
|
|
85
|
+
removeAll: () => x(() => [...c.keys()].forEach(D)),
|
|
86
|
+
batch: x,
|
|
87
|
+
subscribeOne: j,
|
|
88
|
+
subscribeIds: M,
|
|
89
|
+
subscribeAll: N,
|
|
90
|
+
useOne: (e) => {
|
|
91
|
+
let r = String(e), i = t((e) => j(r, e), [r]), a = t(() => c.get(r), [r]);
|
|
92
|
+
return n(i, a, a);
|
|
93
|
+
},
|
|
94
|
+
useIds: () => n(M, k, k),
|
|
95
|
+
useAll: () => n(N, A, A),
|
|
96
|
+
destroy: () => {
|
|
97
|
+
c.clear(), l.clear(), u.clear(), d.clear(), f = void 0, p = void 0;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//#endregion
|
|
102
|
+
export { r as createEntityStore };
|
package/dist/entities/index.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export { createEntityAdapter } from './createEntityAdapter';
|
|
2
|
+
export { createEntityStore } from './createEntityStore';
|
|
2
3
|
export type { EntityAdapter, EntityAdapterOptions, EntityId, EntityMap, EntityUpdate, EntityUpdater } from './createEntityAdapter';
|
|
4
|
+
export type { EntityStore, EntityStoreOptions, EntityChangeListener } from './createEntityStore';
|
package/dist/entities/index.mjs
CHANGED
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,22 +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 g from "./
|
|
16
|
-
import {
|
|
17
|
-
import
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import
|
|
21
|
-
import {
|
|
22
|
-
|
|
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,4 +1,4 @@
|
|
|
1
|
-
import { Path, StoreApi, StoreMiddleware } from '../types';
|
|
1
|
+
import { MiddlewareOptions, Path, StoreApi, StoreMiddleware } from '../types';
|
|
2
2
|
export type HistoryEntry<TState> = {
|
|
3
3
|
path?: Path;
|
|
4
4
|
value?: unknown;
|
|
@@ -19,10 +19,10 @@ export type StoreHistory<TState> = {
|
|
|
19
19
|
travelTo: (index: number) => void;
|
|
20
20
|
clear: () => void;
|
|
21
21
|
};
|
|
22
|
-
export type StoreHistoryOptions = {
|
|
22
|
+
export type StoreHistoryOptions<TState extends object = object> = MiddlewareOptions<TState> & {
|
|
23
23
|
limit?: number;
|
|
24
24
|
path?: Path;
|
|
25
25
|
shouldRecord?: (changedPath: Path | undefined) => boolean;
|
|
26
26
|
};
|
|
27
27
|
export declare function getStoreHistory<TState extends object>(store: StoreApi<TState>): StoreHistory<TState> | undefined;
|
|
28
|
-
export declare const historyMiddleware: <TState extends object>(options?: StoreHistoryOptions) => StoreMiddleware<TState>;
|
|
28
|
+
export declare const historyMiddleware: <TState extends object>(options?: StoreHistoryOptions<TState>) => StoreMiddleware<TState>;
|