@tamagui/use-store 1.15.40
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/README.md +91 -0
- package/dist/cjs/Store.js +99 -0
- package/dist/cjs/Store.js.map +6 -0
- package/dist/cjs/comparators.js +45 -0
- package/dist/cjs/comparators.js.map +6 -0
- package/dist/cjs/configureUseStore.js +34 -0
- package/dist/cjs/configureUseStore.js.map +6 -0
- package/dist/cjs/constants.js +35 -0
- package/dist/cjs/constants.js.map +6 -0
- package/dist/cjs/decorators.js +34 -0
- package/dist/cjs/decorators.js.map +6 -0
- package/dist/cjs/fastCompare.js +168 -0
- package/dist/cjs/fastCompare.js.map +6 -0
- package/dist/cjs/helpers.js +101 -0
- package/dist/cjs/helpers.js.map +6 -0
- package/dist/cjs/index.js +47 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/interfaces.js +17 -0
- package/dist/cjs/interfaces.js.map +6 -0
- package/dist/cjs/reaction.js +78 -0
- package/dist/cjs/reaction.js.map +6 -0
- package/dist/cjs/selector.js +139 -0
- package/dist/cjs/selector.js.map +6 -0
- package/dist/cjs/useStore.js +534 -0
- package/dist/cjs/useStore.js.map +6 -0
- package/dist/cjs/useStoreDebug.js +73 -0
- package/dist/cjs/useStoreDebug.js.map +6 -0
- package/dist/esm/Store.js +69 -0
- package/dist/esm/Store.js.map +6 -0
- package/dist/esm/Store.mjs +69 -0
- package/dist/esm/Store.mjs.map +6 -0
- package/dist/esm/comparators.js +21 -0
- package/dist/esm/comparators.js.map +6 -0
- package/dist/esm/comparators.mjs +21 -0
- package/dist/esm/comparators.mjs.map +6 -0
- package/dist/esm/configureUseStore.js +9 -0
- package/dist/esm/configureUseStore.js.map +6 -0
- package/dist/esm/configureUseStore.mjs +9 -0
- package/dist/esm/configureUseStore.mjs.map +6 -0
- package/dist/esm/constants.js +10 -0
- package/dist/esm/constants.js.map +6 -0
- package/dist/esm/constants.mjs +10 -0
- package/dist/esm/constants.mjs.map +6 -0
- package/dist/esm/decorators.js +10 -0
- package/dist/esm/decorators.js.map +6 -0
- package/dist/esm/decorators.mjs +10 -0
- package/dist/esm/decorators.mjs.map +6 -0
- package/dist/esm/fastCompare.js +143 -0
- package/dist/esm/fastCompare.js.map +6 -0
- package/dist/esm/fastCompare.mjs +143 -0
- package/dist/esm/fastCompare.mjs.map +6 -0
- package/dist/esm/helpers.js +70 -0
- package/dist/esm/helpers.js.map +6 -0
- package/dist/esm/helpers.mjs +70 -0
- package/dist/esm/helpers.mjs.map +6 -0
- package/dist/esm/index.js +14 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/index.mjs +14 -0
- package/dist/esm/index.mjs.map +6 -0
- package/dist/esm/interfaces.js +1 -0
- package/dist/esm/interfaces.js.map +6 -0
- package/dist/esm/interfaces.mjs +1 -0
- package/dist/esm/interfaces.mjs.map +6 -0
- package/dist/esm/reaction.js +53 -0
- package/dist/esm/reaction.js.map +6 -0
- package/dist/esm/reaction.mjs +53 -0
- package/dist/esm/reaction.mjs.map +6 -0
- package/dist/esm/selector.js +114 -0
- package/dist/esm/selector.js.map +6 -0
- package/dist/esm/selector.mjs +114 -0
- package/dist/esm/selector.mjs.map +6 -0
- package/dist/esm/useStore.js +516 -0
- package/dist/esm/useStore.js.map +6 -0
- package/dist/esm/useStore.mjs +516 -0
- package/dist/esm/useStore.mjs.map +6 -0
- package/dist/esm/useStoreDebug.js +35 -0
- package/dist/esm/useStoreDebug.js.map +6 -0
- package/dist/esm/useStoreDebug.mjs +35 -0
- package/dist/esm/useStoreDebug.mjs.map +6 -0
- package/package.json +44 -0
- package/src/Store.tsx +77 -0
- package/src/comparators.tsx +18 -0
- package/src/configureUseStore.tsx +7 -0
- package/src/constants.tsx +6 -0
- package/src/decorators.tsx +8 -0
- package/src/helpers.tsx +87 -0
- package/src/index.ts +9 -0
- package/src/interfaces.tsx +32 -0
- package/src/reaction.tsx +109 -0
- package/src/selector.tsx +129 -0
- package/src/useStore.tsx +705 -0
- package/src/useStoreDebug.tsx +40 -0
- package/types/Store.d.ts +28 -0
- package/types/Store.d.ts.map +1 -0
- package/types/comparators.d.ts +6 -0
- package/types/comparators.d.ts.map +1 -0
- package/types/configureUseStore.d.ts +4 -0
- package/types/configureUseStore.d.ts.map +1 -0
- package/types/constants.d.ts +6 -0
- package/types/constants.d.ts.map +1 -0
- package/types/decorators.d.ts +3 -0
- package/types/decorators.d.ts.map +1 -0
- package/types/fastCompare.d.ts +13 -0
- package/types/fastCompare.d.ts.map +1 -0
- package/types/helpers.d.ts +13 -0
- package/types/helpers.d.ts.map +1 -0
- package/types/index.d.ts +10 -0
- package/types/index.d.ts.map +1 -0
- package/types/interfaces.d.ts +30 -0
- package/types/interfaces.d.ts.map +1 -0
- package/types/reaction.d.ts +4 -0
- package/types/reaction.d.ts.map +1 -0
- package/types/selector.d.ts +3 -0
- package/types/selector.d.ts.map +1 -0
- package/types/useStore.d.ts +18 -0
- package/types/useStore.d.ts.map +1 -0
- package/types/useStoreDebug.d.ts +7 -0
- package/types/useStoreDebug.d.ts.map +1 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
const wkm = /* @__PURE__ */ new WeakMap();
|
|
3
|
+
const weakKey = (obj, prefix = "") => {
|
|
4
|
+
if (wkm.has(obj))
|
|
5
|
+
return wkm.get(obj);
|
|
6
|
+
const key = `${prefix}-${Math.random()}`;
|
|
7
|
+
wkm.set(obj, key);
|
|
8
|
+
return key;
|
|
9
|
+
};
|
|
10
|
+
function getStoreUid(Constructor, props) {
|
|
11
|
+
const storeName = process.env.NODE_ENV === "development" ? Constructor.name : weakKey(Constructor);
|
|
12
|
+
return `${storeName}${!props ? "" : typeof props === "string" ? props : getKey(props)}`;
|
|
13
|
+
}
|
|
14
|
+
const UNWRAP_STORE_INFO = Symbol("UNWRAP_STORE_INFO");
|
|
15
|
+
const cache = /* @__PURE__ */ new Map();
|
|
16
|
+
function getStoreDescriptors(storeInstance) {
|
|
17
|
+
const proto = Object.getPrototypeOf(storeInstance);
|
|
18
|
+
const instanceDescriptors = Object.getOwnPropertyDescriptors(storeInstance);
|
|
19
|
+
const protoDescriptors = Object.getOwnPropertyDescriptors(proto);
|
|
20
|
+
const descriptors = {
|
|
21
|
+
...protoDescriptors,
|
|
22
|
+
...instanceDescriptors
|
|
23
|
+
};
|
|
24
|
+
delete descriptors.constructor;
|
|
25
|
+
return descriptors;
|
|
26
|
+
}
|
|
27
|
+
function get(_, b) {
|
|
28
|
+
return _;
|
|
29
|
+
}
|
|
30
|
+
function getKey(props) {
|
|
31
|
+
let s = "";
|
|
32
|
+
const sorted = Object.keys(props).sort();
|
|
33
|
+
for (const key of sorted) {
|
|
34
|
+
const v = props[key];
|
|
35
|
+
if (v && typeof v === "object") {
|
|
36
|
+
s += getKey(v);
|
|
37
|
+
} else {
|
|
38
|
+
s += `.${key}:${v}`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return s;
|
|
42
|
+
}
|
|
43
|
+
function useConstant(fn) {
|
|
44
|
+
const ref = useRef();
|
|
45
|
+
if (!ref.current) {
|
|
46
|
+
ref.current = { v: fn() };
|
|
47
|
+
}
|
|
48
|
+
return ref.current.v;
|
|
49
|
+
}
|
|
50
|
+
function simpleStr(arg) {
|
|
51
|
+
if (process.env.NODE_ENV === "development") {
|
|
52
|
+
return typeof arg === "function" ? "fn" : typeof arg === "string" ? `"${arg}"` : !arg ? arg : typeof arg !== "object" ? arg : Array.isArray(arg) ? "[...]" : `{...}`;
|
|
53
|
+
}
|
|
54
|
+
return arg;
|
|
55
|
+
}
|
|
56
|
+
function getStoreDebugInfo(store) {
|
|
57
|
+
return store[UNWRAP_STORE_INFO] ?? cache.get(getStoreUid(store.constructor, store.props));
|
|
58
|
+
}
|
|
59
|
+
export {
|
|
60
|
+
UNWRAP_STORE_INFO,
|
|
61
|
+
cache,
|
|
62
|
+
useConstant as default,
|
|
63
|
+
get,
|
|
64
|
+
getKey,
|
|
65
|
+
getStoreDebugInfo,
|
|
66
|
+
getStoreDescriptors,
|
|
67
|
+
getStoreUid,
|
|
68
|
+
simpleStr
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/helpers.tsx"],
|
|
4
|
+
"mappings": "AAAA,SAAS,cAAc;AAIvB,MAAM,MAAM,oBAAI,QAAqB;AACrC,MAAM,UAAU,CAAC,KAAU,SAAS,OAAO;AACzC,MAAI,IAAI,IAAI,GAAG;AAAG,WAAO,IAAI,IAAI,GAAG;AACpC,QAAM,MAAM,GAAG,UAAU,KAAK,OAAO;AACrC,MAAI,IAAI,KAAK,GAAG;AAChB,SAAO;AACT;AAEO,SAAS,YAAY,aAAkB,OAA+B;AAG3E,QAAM,YACJ,QAAQ,IAAI,aAAa,gBAAgB,YAAY,OAAO,QAAQ,WAAW;AACjF,SAAO,GAAG,YAAY,CAAC,QAAQ,KAAK,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK;AACtF;AAEO,MAAM,oBAAoB,OAAO,mBAAmB;AACpD,MAAM,QAAQ,oBAAI,IAAuB;AAEzC,SAAS,oBAAoB,eAAoB;AACtD,QAAM,QAAQ,OAAO,eAAe,aAAa;AACjD,QAAM,sBAAsB,OAAO,0BAA0B,aAAa;AAC1E,QAAM,mBAAmB,OAAO,0BAA0B,KAAK;AAC/D,QAAM,cAAc;AAAA,IAClB,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAEA,SAAO,YAAY;AACnB,SAAO;AACT;AAEO,SAAS,IAAO,GAAM,GAAyD;AACpF,SAAO;AACT;AAEO,SAAS,OAAO,OAAe;AACpC,MAAI,IAAI;AACR,QAAM,SAAS,OAAO,KAAK,KAAK,EAAE,KAAK;AACvC,aAAW,OAAO,QAAQ;AACxB,UAAM,IAAI,MAAM,GAAG;AACnB,QAAI,KAAK,OAAO,MAAM,UAAU;AAC9B,WAAK,OAAO,CAAC;AAAA,IACf,OAAO;AACL,WAAK,IAAI,OAAO;AAAA,IAClB;AAAA,EACF;AACA,SAAO;AACT;AAIe,SAAR,YAAgC,IAAgB;AACrD,QAAM,MAAM,OAAqB;AACjC,MAAI,CAAC,IAAI,SAAS;AAChB,QAAI,UAAU,EAAE,GAAG,GAAG,EAAE;AAAA,EAC1B;AACA,SAAO,IAAI,QAAQ;AACrB;AAEO,SAAS,UAAU,KAAU;AAClC,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,WAAO,OAAO,QAAQ,aAClB,OACA,OAAO,QAAQ,WACf,IAAI,SACJ,CAAC,MACD,MACA,OAAO,QAAQ,WACf,MACA,MAAM,QAAQ,GAAG,IACjB,UACA;AAAA,EACN;AACA,SAAO;AACT;AAGO,SAAS,kBAAkB,OAAY;AAC5C,SACE,MAAM,iBAAiB,KAAK,MAAM,IAAI,YAAY,MAAM,aAAa,MAAM,KAAK,CAAC;AAErF;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
const wkm = /* @__PURE__ */ new WeakMap();
|
|
3
|
+
const weakKey = (obj, prefix = "") => {
|
|
4
|
+
if (wkm.has(obj))
|
|
5
|
+
return wkm.get(obj);
|
|
6
|
+
const key = `${prefix}-${Math.random()}`;
|
|
7
|
+
wkm.set(obj, key);
|
|
8
|
+
return key;
|
|
9
|
+
};
|
|
10
|
+
function getStoreUid(Constructor, props) {
|
|
11
|
+
const storeName = process.env.NODE_ENV === "development" ? Constructor.name : weakKey(Constructor);
|
|
12
|
+
return `${storeName}${!props ? "" : typeof props === "string" ? props : getKey(props)}`;
|
|
13
|
+
}
|
|
14
|
+
const UNWRAP_STORE_INFO = Symbol("UNWRAP_STORE_INFO");
|
|
15
|
+
const cache = /* @__PURE__ */ new Map();
|
|
16
|
+
function getStoreDescriptors(storeInstance) {
|
|
17
|
+
const proto = Object.getPrototypeOf(storeInstance);
|
|
18
|
+
const instanceDescriptors = Object.getOwnPropertyDescriptors(storeInstance);
|
|
19
|
+
const protoDescriptors = Object.getOwnPropertyDescriptors(proto);
|
|
20
|
+
const descriptors = {
|
|
21
|
+
...protoDescriptors,
|
|
22
|
+
...instanceDescriptors
|
|
23
|
+
};
|
|
24
|
+
delete descriptors.constructor;
|
|
25
|
+
return descriptors;
|
|
26
|
+
}
|
|
27
|
+
function get(_, b) {
|
|
28
|
+
return _;
|
|
29
|
+
}
|
|
30
|
+
function getKey(props) {
|
|
31
|
+
let s = "";
|
|
32
|
+
const sorted = Object.keys(props).sort();
|
|
33
|
+
for (const key of sorted) {
|
|
34
|
+
const v = props[key];
|
|
35
|
+
if (v && typeof v === "object") {
|
|
36
|
+
s += getKey(v);
|
|
37
|
+
} else {
|
|
38
|
+
s += `.${key}:${v}`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return s;
|
|
42
|
+
}
|
|
43
|
+
function useConstant(fn) {
|
|
44
|
+
const ref = useRef();
|
|
45
|
+
if (!ref.current) {
|
|
46
|
+
ref.current = { v: fn() };
|
|
47
|
+
}
|
|
48
|
+
return ref.current.v;
|
|
49
|
+
}
|
|
50
|
+
function simpleStr(arg) {
|
|
51
|
+
if (process.env.NODE_ENV === "development") {
|
|
52
|
+
return typeof arg === "function" ? "fn" : typeof arg === "string" ? `"${arg}"` : !arg ? arg : typeof arg !== "object" ? arg : Array.isArray(arg) ? "[...]" : `{...}`;
|
|
53
|
+
}
|
|
54
|
+
return arg;
|
|
55
|
+
}
|
|
56
|
+
function getStoreDebugInfo(store) {
|
|
57
|
+
return store[UNWRAP_STORE_INFO] ?? cache.get(getStoreUid(store.constructor, store.props));
|
|
58
|
+
}
|
|
59
|
+
export {
|
|
60
|
+
UNWRAP_STORE_INFO,
|
|
61
|
+
cache,
|
|
62
|
+
useConstant as default,
|
|
63
|
+
get,
|
|
64
|
+
getKey,
|
|
65
|
+
getStoreDebugInfo,
|
|
66
|
+
getStoreDescriptors,
|
|
67
|
+
getStoreUid,
|
|
68
|
+
simpleStr
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=helpers.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/helpers.tsx"],
|
|
4
|
+
"mappings": "AAAA,SAAS,cAAc;AAIvB,MAAM,MAAM,oBAAI,QAAqB;AACrC,MAAM,UAAU,CAAC,KAAU,SAAS,OAAO;AACzC,MAAI,IAAI,IAAI,GAAG;AAAG,WAAO,IAAI,IAAI,GAAG;AACpC,QAAM,MAAM,GAAG,UAAU,KAAK,OAAO;AACrC,MAAI,IAAI,KAAK,GAAG;AAChB,SAAO;AACT;AAEO,SAAS,YAAY,aAAkB,OAA+B;AAG3E,QAAM,YACJ,QAAQ,IAAI,aAAa,gBAAgB,YAAY,OAAO,QAAQ,WAAW;AACjF,SAAO,GAAG,YAAY,CAAC,QAAQ,KAAK,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK;AACtF;AAEO,MAAM,oBAAoB,OAAO,mBAAmB;AACpD,MAAM,QAAQ,oBAAI,IAAuB;AAEzC,SAAS,oBAAoB,eAAoB;AACtD,QAAM,QAAQ,OAAO,eAAe,aAAa;AACjD,QAAM,sBAAsB,OAAO,0BAA0B,aAAa;AAC1E,QAAM,mBAAmB,OAAO,0BAA0B,KAAK;AAC/D,QAAM,cAAc;AAAA,IAClB,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAEA,SAAO,YAAY;AACnB,SAAO;AACT;AAEO,SAAS,IAAO,GAAM,GAAyD;AACpF,SAAO;AACT;AAEO,SAAS,OAAO,OAAe;AACpC,MAAI,IAAI;AACR,QAAM,SAAS,OAAO,KAAK,KAAK,EAAE,KAAK;AACvC,aAAW,OAAO,QAAQ;AACxB,UAAM,IAAI,MAAM,GAAG;AACnB,QAAI,KAAK,OAAO,MAAM,UAAU;AAC9B,WAAK,OAAO,CAAC;AAAA,IACf,OAAO;AACL,WAAK,IAAI,OAAO;AAAA,IAClB;AAAA,EACF;AACA,SAAO;AACT;AAIe,SAAR,YAAgC,IAAgB;AACrD,QAAM,MAAM,OAAqB;AACjC,MAAI,CAAC,IAAI,SAAS;AAChB,QAAI,UAAU,EAAE,GAAG,GAAG,EAAE;AAAA,EAC1B;AACA,SAAO,IAAI,QAAQ;AACrB;AAEO,SAAS,UAAU,KAAU;AAClC,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,WAAO,OAAO,QAAQ,aAClB,OACA,OAAO,QAAQ,WACf,IAAI,SACJ,CAAC,MACD,MACA,OAAO,QAAQ,WACf,MACA,MAAM,QAAQ,GAAG,IACjB,UACA;AAAA,EACN;AACA,SAAO;AACT;AAGO,SAAS,kBAAkB,OAAY;AAC5C,SACE,MAAM,iBAAiB,KAAK,MAAM,IAAI,YAAY,MAAM,aAAa,MAAM,KAAK,CAAC;AAErF;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./useStore";
|
|
2
|
+
import { configureUseStore } from "./configureUseStore";
|
|
3
|
+
export * from "./interfaces";
|
|
4
|
+
export * from "./selector";
|
|
5
|
+
export * from "./reaction";
|
|
6
|
+
export * from "./Store";
|
|
7
|
+
import { UNWRAP_PROXY } from "./constants";
|
|
8
|
+
export * from "./comparators";
|
|
9
|
+
export * from "./decorators";
|
|
10
|
+
export {
|
|
11
|
+
UNWRAP_PROXY,
|
|
12
|
+
configureUseStore
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export * from "./useStore";
|
|
2
|
+
import { configureUseStore } from "./configureUseStore";
|
|
3
|
+
export * from "./interfaces";
|
|
4
|
+
export * from "./selector";
|
|
5
|
+
export * from "./reaction";
|
|
6
|
+
export * from "./Store";
|
|
7
|
+
import { UNWRAP_PROXY } from "./constants";
|
|
8
|
+
export * from "./comparators";
|
|
9
|
+
export * from "./decorators";
|
|
10
|
+
export {
|
|
11
|
+
UNWRAP_PROXY,
|
|
12
|
+
configureUseStore
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=interfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=interfaces.mjs.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { isEqualSubsetShallow } from "./comparators";
|
|
3
|
+
import { UNWRAP_PROXY } from "./constants";
|
|
4
|
+
import { setIsInReaction } from "./useStore";
|
|
5
|
+
const dispose = (d) => {
|
|
6
|
+
if (typeof d === "function") {
|
|
7
|
+
d();
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
function useReaction(store, selector, receiver, equalityFn = isEqualSubsetShallow, memoArgs) {
|
|
11
|
+
return useMemo(() => reaction(store, selector, receiver, equalityFn), [memoArgs]);
|
|
12
|
+
}
|
|
13
|
+
function reaction(store, selector, receiver, equalityFn = isEqualSubsetShallow) {
|
|
14
|
+
let last = void 0;
|
|
15
|
+
let innerDispose;
|
|
16
|
+
function updateReaction() {
|
|
17
|
+
var _a;
|
|
18
|
+
try {
|
|
19
|
+
setIsInReaction(true);
|
|
20
|
+
const storeInstance = store[UNWRAP_PROXY] || store;
|
|
21
|
+
const next = selector(storeInstance);
|
|
22
|
+
if (!equalityFn(last, next)) {
|
|
23
|
+
if (process.env.NODE_ENV === "development") {
|
|
24
|
+
console.groupCollapsed(
|
|
25
|
+
`\u{1F311} \u23ED %c${receiver.name.padStart(24)} (${storeInstance.constructor.name}${((_a = store.props) == null ? void 0 : _a.id) ? `:${store.props.id}` : ""}) ${last} => ${next}`,
|
|
26
|
+
"color: chocolate;"
|
|
27
|
+
);
|
|
28
|
+
console.groupCollapsed("trace >");
|
|
29
|
+
console.trace();
|
|
30
|
+
console.groupEnd();
|
|
31
|
+
console.log(" ARG", next);
|
|
32
|
+
console.groupEnd();
|
|
33
|
+
}
|
|
34
|
+
dispose(innerDispose);
|
|
35
|
+
last = next;
|
|
36
|
+
innerDispose = receiver(next);
|
|
37
|
+
}
|
|
38
|
+
} finally {
|
|
39
|
+
setIsInReaction(false);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const disposeSubscribe = store.subscribe(updateReaction);
|
|
43
|
+
updateReaction();
|
|
44
|
+
return () => {
|
|
45
|
+
disposeSubscribe();
|
|
46
|
+
dispose(innerDispose);
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
reaction,
|
|
51
|
+
useReaction
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=reaction.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/reaction.tsx"],
|
|
4
|
+
"mappings": "AAAA,SAAS,eAAe;AAExB,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAE7B,SAAS,uBAAuB;AAEhC,MAAM,UAAU,CAAC,MAAW;AAC1B,MAAI,OAAO,MAAM,YAAY;AAC3B,MAAE;AAAA,EACJ;AACF;AAEO,SAAS,YAId,OACA,UACA,UAGA,aAA0C,sBAC1C,UACA;AACA,SAAO,QAAQ,MAAM,SAAS,OAAO,UAAU,UAAU,UAAU,GAAG,CAAC,QAAQ,CAAC;AAClF;AAEO,SAAS,SAId,OACA,UACA,UAGA,aAA0C,sBAC1C;AACA,MAAI,OAAY;AAChB,MAAI;AAEJ,WAAS,iBAAiB;AA1C5B;AA2CI,QAAI;AACF,sBAAgB,IAAI;AACpB,YAAM,gBAAgB,MAAM,YAAY,KAAK;AAC7C,YAAM,OAAO,SAAS,aAAa;AACnC,UAAI,CAAC,WAAW,MAAM,IAAI,GAAG;AAC3B,YAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,kBAAQ;AAAA,YACN,uBAAW,SAAS,KAAK,SAAS,EAAE,MAAM,cAAc,YAAY,SAClE,WAAM,UAAN,mBAAa,MAAK,IAAI,MAAM,MAAM,OAAO,OACtC,WAAW;AAAA,YAChB;AAAA,UACF;AACA,kBAAQ,eAAe,SAAS;AAChC,kBAAQ,MAAM;AACd,kBAAQ,SAAS;AACjB,kBAAQ,IAAI,SAAS,IAAI;AACzB,kBAAQ,SAAS;AAAA,QACnB;AACA,gBAAQ,YAAY;AACpB,eAAO;AACP,uBAAe,SAAS,IAAI;AAAA,MAC9B;AAAA,IACF,UAAE;AACA,sBAAgB,KAAK;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,mBAAmB,MAAM,UAAU,cAAc;AACvD,iBAAe;AAEf,SAAO,MAAM;AACX,qBAAiB;AACjB,YAAQ,YAAY;AAAA,EACtB;AACF;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { isEqualSubsetShallow } from "./comparators";
|
|
3
|
+
import { UNWRAP_PROXY } from "./constants";
|
|
4
|
+
import { setIsInReaction } from "./useStore";
|
|
5
|
+
const dispose = (d) => {
|
|
6
|
+
if (typeof d === "function") {
|
|
7
|
+
d();
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
function useReaction(store, selector, receiver, equalityFn = isEqualSubsetShallow, memoArgs) {
|
|
11
|
+
return useMemo(() => reaction(store, selector, receiver, equalityFn), [memoArgs]);
|
|
12
|
+
}
|
|
13
|
+
function reaction(store, selector, receiver, equalityFn = isEqualSubsetShallow) {
|
|
14
|
+
let last = void 0;
|
|
15
|
+
let innerDispose;
|
|
16
|
+
function updateReaction() {
|
|
17
|
+
var _a;
|
|
18
|
+
try {
|
|
19
|
+
setIsInReaction(true);
|
|
20
|
+
const storeInstance = store[UNWRAP_PROXY] || store;
|
|
21
|
+
const next = selector(storeInstance);
|
|
22
|
+
if (!equalityFn(last, next)) {
|
|
23
|
+
if (process.env.NODE_ENV === "development") {
|
|
24
|
+
console.groupCollapsed(
|
|
25
|
+
`\u{1F311} \u23ED %c${receiver.name.padStart(24)} (${storeInstance.constructor.name}${((_a = store.props) == null ? void 0 : _a.id) ? `:${store.props.id}` : ""}) ${last} => ${next}`,
|
|
26
|
+
"color: chocolate;"
|
|
27
|
+
);
|
|
28
|
+
console.groupCollapsed("trace >");
|
|
29
|
+
console.trace();
|
|
30
|
+
console.groupEnd();
|
|
31
|
+
console.log(" ARG", next);
|
|
32
|
+
console.groupEnd();
|
|
33
|
+
}
|
|
34
|
+
dispose(innerDispose);
|
|
35
|
+
last = next;
|
|
36
|
+
innerDispose = receiver(next);
|
|
37
|
+
}
|
|
38
|
+
} finally {
|
|
39
|
+
setIsInReaction(false);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const disposeSubscribe = store.subscribe(updateReaction);
|
|
43
|
+
updateReaction();
|
|
44
|
+
return () => {
|
|
45
|
+
disposeSubscribe();
|
|
46
|
+
dispose(innerDispose);
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
reaction,
|
|
51
|
+
useReaction
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=reaction.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/reaction.tsx"],
|
|
4
|
+
"mappings": "AAAA,SAAS,eAAe;AAExB,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAE7B,SAAS,uBAAuB;AAEhC,MAAM,UAAU,CAAC,MAAW;AAC1B,MAAI,OAAO,MAAM,YAAY;AAC3B,MAAE;AAAA,EACJ;AACF;AAEO,SAAS,YAId,OACA,UACA,UAGA,aAA0C,sBAC1C,UACA;AACA,SAAO,QAAQ,MAAM,SAAS,OAAO,UAAU,UAAU,UAAU,GAAG,CAAC,QAAQ,CAAC;AAClF;AAEO,SAAS,SAId,OACA,UACA,UAGA,aAA0C,sBAC1C;AACA,MAAI,OAAY;AAChB,MAAI;AAEJ,WAAS,iBAAiB;AA1C5B;AA2CI,QAAI;AACF,sBAAgB,IAAI;AACpB,YAAM,gBAAgB,MAAM,YAAY,KAAK;AAC7C,YAAM,OAAO,SAAS,aAAa;AACnC,UAAI,CAAC,WAAW,MAAM,IAAI,GAAG;AAC3B,YAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,kBAAQ;AAAA,YACN,uBAAW,SAAS,KAAK,SAAS,EAAE,MAAM,cAAc,YAAY,SAClE,WAAM,UAAN,mBAAa,MAAK,IAAI,MAAM,MAAM,OAAO,OACtC,WAAW;AAAA,YAChB;AAAA,UACF;AACA,kBAAQ,eAAe,SAAS;AAChC,kBAAQ,MAAM;AACd,kBAAQ,SAAS;AACjB,kBAAQ,IAAI,SAAS,IAAI;AACzB,kBAAQ,SAAS;AAAA,QACnB;AACA,gBAAQ,YAAY;AACpB,eAAO;AACP,uBAAe,SAAS,IAAI;AAAA,MAC9B;AAAA,IACF,UAAE;AACA,sBAAgB,KAAK;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,mBAAmB,MAAM,UAAU,cAAc;AACvD,iBAAe;AAEf,SAAO,MAAM;AACX,qBAAiB;AACjB,YAAQ,YAAY;AAAA,EACtB;AACF;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
import { isEqualSubsetShallow } from "./comparators";
|
|
3
|
+
import { UNWRAP_PROXY } from "./constants";
|
|
4
|
+
import { setIsInReaction, trackStoresAccess } from "./useStore";
|
|
5
|
+
const logUpdate = process.env.NODE_ENV === "development" ? (fn, stores, last, next) => {
|
|
6
|
+
const getStoreLogName = (store) => {
|
|
7
|
+
var _a;
|
|
8
|
+
const str = store[UNWRAP_PROXY] ?? store;
|
|
9
|
+
return `${str.constructor.name}${((_a = store.props) == null ? void 0 : _a.id) ? `:${store.props.id}` : ""}`;
|
|
10
|
+
};
|
|
11
|
+
const storeNames = stores.map(getStoreLogName).join(", ");
|
|
12
|
+
const name = `\u{1F311} \u25B6\uFE0F %c${fn.name} ${storeNames} () ${last} => ${next}`;
|
|
13
|
+
console.groupCollapsed(name, "color: tomato;");
|
|
14
|
+
console.groupCollapsed("trace >");
|
|
15
|
+
console.trace();
|
|
16
|
+
console.groupEnd();
|
|
17
|
+
console.log(" next", next);
|
|
18
|
+
console.groupEnd();
|
|
19
|
+
} : null;
|
|
20
|
+
function selector(fn) {
|
|
21
|
+
let prev = runStoreSelector(fn);
|
|
22
|
+
let disposeValue = null;
|
|
23
|
+
const subscribe = () => {
|
|
24
|
+
return subscribeToStores([...prev.stores], () => {
|
|
25
|
+
try {
|
|
26
|
+
disposeValue == null ? void 0 : disposeValue();
|
|
27
|
+
setIsInReaction(true);
|
|
28
|
+
const next = runStoreSelector(fn);
|
|
29
|
+
if (typeof next.value === "function") {
|
|
30
|
+
disposeValue = next.value;
|
|
31
|
+
if (process.env.NODE_ENV === "development") {
|
|
32
|
+
logUpdate(fn, [...next.stores], "(fn)", "(fn)");
|
|
33
|
+
}
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (isEqualSubsetShallow(prev.stores, next.stores) && isEqualSubsetShallow(prev.value, next.value)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (process.env.NODE_ENV === "development") {
|
|
40
|
+
logUpdate(fn, [...next.stores], prev.value, next.value);
|
|
41
|
+
}
|
|
42
|
+
prev = next;
|
|
43
|
+
dispose();
|
|
44
|
+
dispose = subscribe();
|
|
45
|
+
} finally {
|
|
46
|
+
setIsInReaction(false);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
let dispose = subscribe();
|
|
51
|
+
return () => {
|
|
52
|
+
dispose();
|
|
53
|
+
disposeValue == null ? void 0 : disposeValue();
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function useSelector(fn) {
|
|
57
|
+
const [state, setState] = useState(() => {
|
|
58
|
+
return runStoreSelector(fn);
|
|
59
|
+
});
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
let dispose;
|
|
62
|
+
const unsub = subscribeToStores([...state.stores], () => {
|
|
63
|
+
dispose == null ? void 0 : dispose();
|
|
64
|
+
const next = runStoreSelector(fn);
|
|
65
|
+
if (typeof next.value === "function") {
|
|
66
|
+
if (process.env.NODE_ENV === "development") {
|
|
67
|
+
logUpdate(fn, [...next.stores], "(fn)", "(fn)");
|
|
68
|
+
}
|
|
69
|
+
dispose = next.value;
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
setState((prev) => {
|
|
73
|
+
if (isEqualSubsetShallow(prev.stores, next.stores) && isEqualSubsetShallow(prev.value, next.value)) {
|
|
74
|
+
return prev;
|
|
75
|
+
}
|
|
76
|
+
if (process.env.NODE_ENV === "development") {
|
|
77
|
+
logUpdate(fn, [...next.stores], prev.value, next.value);
|
|
78
|
+
}
|
|
79
|
+
return next;
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
return () => {
|
|
83
|
+
unsub();
|
|
84
|
+
dispose == null ? void 0 : dispose();
|
|
85
|
+
};
|
|
86
|
+
}, [...state.stores]);
|
|
87
|
+
return state.value;
|
|
88
|
+
}
|
|
89
|
+
function runStoreSelector(selector2) {
|
|
90
|
+
const stores = /* @__PURE__ */ new Set();
|
|
91
|
+
const dispose = trackStoresAccess((store) => {
|
|
92
|
+
stores.add(store);
|
|
93
|
+
});
|
|
94
|
+
const value = selector2();
|
|
95
|
+
dispose();
|
|
96
|
+
return {
|
|
97
|
+
value,
|
|
98
|
+
stores
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function subscribeToStores(stores, onUpdate) {
|
|
102
|
+
const disposes = [];
|
|
103
|
+
for (const store of stores) {
|
|
104
|
+
disposes.push(store.subscribe(onUpdate));
|
|
105
|
+
}
|
|
106
|
+
return () => {
|
|
107
|
+
disposes.forEach((x) => x());
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export {
|
|
111
|
+
selector,
|
|
112
|
+
useSelector
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=selector.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/selector.tsx"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["selector"]
|
|
6
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
import { isEqualSubsetShallow } from "./comparators";
|
|
3
|
+
import { UNWRAP_PROXY } from "./constants";
|
|
4
|
+
import { setIsInReaction, trackStoresAccess } from "./useStore";
|
|
5
|
+
const logUpdate = process.env.NODE_ENV === "development" ? (fn, stores, last, next) => {
|
|
6
|
+
const getStoreLogName = (store) => {
|
|
7
|
+
var _a;
|
|
8
|
+
const str = store[UNWRAP_PROXY] ?? store;
|
|
9
|
+
return `${str.constructor.name}${((_a = store.props) == null ? void 0 : _a.id) ? `:${store.props.id}` : ""}`;
|
|
10
|
+
};
|
|
11
|
+
const storeNames = stores.map(getStoreLogName).join(", ");
|
|
12
|
+
const name = `\u{1F311} \u25B6\uFE0F %c${fn.name} ${storeNames} () ${last} => ${next}`;
|
|
13
|
+
console.groupCollapsed(name, "color: tomato;");
|
|
14
|
+
console.groupCollapsed("trace >");
|
|
15
|
+
console.trace();
|
|
16
|
+
console.groupEnd();
|
|
17
|
+
console.log(" next", next);
|
|
18
|
+
console.groupEnd();
|
|
19
|
+
} : null;
|
|
20
|
+
function selector(fn) {
|
|
21
|
+
let prev = runStoreSelector(fn);
|
|
22
|
+
let disposeValue = null;
|
|
23
|
+
const subscribe = () => {
|
|
24
|
+
return subscribeToStores([...prev.stores], () => {
|
|
25
|
+
try {
|
|
26
|
+
disposeValue == null ? void 0 : disposeValue();
|
|
27
|
+
setIsInReaction(true);
|
|
28
|
+
const next = runStoreSelector(fn);
|
|
29
|
+
if (typeof next.value === "function") {
|
|
30
|
+
disposeValue = next.value;
|
|
31
|
+
if (process.env.NODE_ENV === "development") {
|
|
32
|
+
logUpdate(fn, [...next.stores], "(fn)", "(fn)");
|
|
33
|
+
}
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (isEqualSubsetShallow(prev.stores, next.stores) && isEqualSubsetShallow(prev.value, next.value)) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (process.env.NODE_ENV === "development") {
|
|
40
|
+
logUpdate(fn, [...next.stores], prev.value, next.value);
|
|
41
|
+
}
|
|
42
|
+
prev = next;
|
|
43
|
+
dispose();
|
|
44
|
+
dispose = subscribe();
|
|
45
|
+
} finally {
|
|
46
|
+
setIsInReaction(false);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
let dispose = subscribe();
|
|
51
|
+
return () => {
|
|
52
|
+
dispose();
|
|
53
|
+
disposeValue == null ? void 0 : disposeValue();
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function useSelector(fn) {
|
|
57
|
+
const [state, setState] = useState(() => {
|
|
58
|
+
return runStoreSelector(fn);
|
|
59
|
+
});
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
let dispose;
|
|
62
|
+
const unsub = subscribeToStores([...state.stores], () => {
|
|
63
|
+
dispose == null ? void 0 : dispose();
|
|
64
|
+
const next = runStoreSelector(fn);
|
|
65
|
+
if (typeof next.value === "function") {
|
|
66
|
+
if (process.env.NODE_ENV === "development") {
|
|
67
|
+
logUpdate(fn, [...next.stores], "(fn)", "(fn)");
|
|
68
|
+
}
|
|
69
|
+
dispose = next.value;
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
setState((prev) => {
|
|
73
|
+
if (isEqualSubsetShallow(prev.stores, next.stores) && isEqualSubsetShallow(prev.value, next.value)) {
|
|
74
|
+
return prev;
|
|
75
|
+
}
|
|
76
|
+
if (process.env.NODE_ENV === "development") {
|
|
77
|
+
logUpdate(fn, [...next.stores], prev.value, next.value);
|
|
78
|
+
}
|
|
79
|
+
return next;
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
return () => {
|
|
83
|
+
unsub();
|
|
84
|
+
dispose == null ? void 0 : dispose();
|
|
85
|
+
};
|
|
86
|
+
}, [...state.stores]);
|
|
87
|
+
return state.value;
|
|
88
|
+
}
|
|
89
|
+
function runStoreSelector(selector2) {
|
|
90
|
+
const stores = /* @__PURE__ */ new Set();
|
|
91
|
+
const dispose = trackStoresAccess((store) => {
|
|
92
|
+
stores.add(store);
|
|
93
|
+
});
|
|
94
|
+
const value = selector2();
|
|
95
|
+
dispose();
|
|
96
|
+
return {
|
|
97
|
+
value,
|
|
98
|
+
stores
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function subscribeToStores(stores, onUpdate) {
|
|
102
|
+
const disposes = [];
|
|
103
|
+
for (const store of stores) {
|
|
104
|
+
disposes.push(store.subscribe(onUpdate));
|
|
105
|
+
}
|
|
106
|
+
return () => {
|
|
107
|
+
disposes.forEach((x) => x());
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export {
|
|
111
|
+
selector,
|
|
112
|
+
useSelector
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=selector.mjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/selector.tsx"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["selector"]
|
|
6
|
+
}
|