@tamagui/use-store 2.7.7 → 3.0.0-beta.637.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 (83) hide show
  1. package/dist/cjs/comparators.cjs +27 -30
  2. package/dist/cjs/comparators.native.cjs +45 -0
  3. package/dist/cjs/comparators.native.js +31 -34
  4. package/dist/cjs/comparators.native.js.map +1 -1
  5. package/dist/cjs/configureUseStore.cjs +17 -18
  6. package/dist/cjs/configureUseStore.native.cjs +33 -0
  7. package/dist/cjs/configureUseStore.native.js +17 -17
  8. package/dist/cjs/configureUseStore.native.js.map +1 -1
  9. package/dist/cjs/constants.cjs +19 -20
  10. package/dist/cjs/constants.native.cjs +34 -0
  11. package/dist/cjs/constants.native.js +19 -19
  12. package/dist/cjs/constants.native.js.map +1 -1
  13. package/dist/cjs/decorators.cjs +19 -22
  14. package/dist/cjs/decorators.native.cjs +32 -0
  15. package/dist/cjs/decorators.native.js +19 -21
  16. package/dist/cjs/decorators.native.js.map +1 -1
  17. package/dist/cjs/helpers.cjs +39 -40
  18. package/dist/cjs/helpers.native.cjs +68 -0
  19. package/dist/cjs/helpers.native.js +42 -43
  20. package/dist/cjs/helpers.native.js.map +1 -1
  21. package/dist/cjs/index.cjs +22 -23
  22. package/dist/cjs/index.native.cjs +62 -0
  23. package/dist/cjs/index.native.js +35 -36
  24. package/dist/cjs/index.native.js.map +1 -1
  25. package/dist/cjs/interfaces.cjs +10 -11
  26. package/dist/cjs/interfaces.native.cjs +19 -0
  27. package/dist/cjs/interfaces.native.js +10 -10
  28. package/dist/cjs/interfaces.native.js.map +1 -1
  29. package/dist/cjs/observe.cjs +132 -138
  30. package/dist/cjs/observe.native.cjs +221 -0
  31. package/dist/cjs/observe.native.js +192 -203
  32. package/dist/cjs/observe.native.js.map +1 -1
  33. package/dist/cjs/useStore.cjs +366 -403
  34. package/dist/cjs/useStore.native.cjs +557 -0
  35. package/dist/cjs/useStore.native.js +487 -536
  36. package/dist/cjs/useStore.native.js.map +1 -1
  37. package/dist/cjs/useStoreDebug.cjs +39 -45
  38. package/dist/cjs/useStoreDebug.native.cjs +64 -0
  39. package/dist/cjs/useStoreDebug.native.js +43 -48
  40. package/dist/cjs/useStoreDebug.native.js.map +1 -1
  41. package/dist/esm/comparators.mjs +13 -12
  42. package/dist/esm/comparators.mjs.map +1 -1
  43. package/dist/esm/comparators.native.js +17 -17
  44. package/dist/esm/comparators.native.js.map +1 -1
  45. package/dist/esm/configureUseStore.mjs +2 -1
  46. package/dist/esm/configureUseStore.mjs.map +1 -1
  47. package/dist/esm/configureUseStore.native.js +2 -1
  48. package/dist/esm/configureUseStore.native.js.map +1 -1
  49. package/dist/esm/constants.mjs +4 -3
  50. package/dist/esm/constants.mjs.map +1 -1
  51. package/dist/esm/constants.native.js +4 -3
  52. package/dist/esm/constants.native.js.map +1 -1
  53. package/dist/esm/decorators.mjs +5 -4
  54. package/dist/esm/decorators.mjs.map +1 -1
  55. package/dist/esm/decorators.native.js +5 -4
  56. package/dist/esm/decorators.native.js.map +1 -1
  57. package/dist/esm/helpers.mjs +20 -18
  58. package/dist/esm/helpers.mjs.map +1 -1
  59. package/dist/esm/helpers.native.js +23 -22
  60. package/dist/esm/helpers.native.js.map +1 -1
  61. package/dist/esm/index.js +18 -11
  62. package/dist/esm/index.js.map +1 -1
  63. package/dist/esm/index.mjs +18 -11
  64. package/dist/esm/index.mjs.map +1 -1
  65. package/dist/esm/index.native.js +30 -24
  66. package/dist/esm/index.native.js.map +1 -1
  67. package/dist/esm/interfaces.mjs +0 -2
  68. package/dist/esm/interfaces.native.js +0 -2
  69. package/dist/esm/observe.mjs +115 -113
  70. package/dist/esm/observe.mjs.map +1 -1
  71. package/dist/esm/observe.native.js +175 -179
  72. package/dist/esm/observe.native.js.map +1 -1
  73. package/dist/esm/useStore.mjs +336 -363
  74. package/dist/esm/useStore.mjs.map +1 -1
  75. package/dist/esm/useStore.native.js +457 -497
  76. package/dist/esm/useStore.native.js.map +1 -1
  77. package/dist/esm/useStoreDebug.mjs +20 -18
  78. package/dist/esm/useStoreDebug.mjs.map +1 -1
  79. package/dist/esm/useStoreDebug.native.js +23 -21
  80. package/dist/esm/useStoreDebug.native.js.map +1 -1
  81. package/package.json +3 -3
  82. package/dist/esm/interfaces.mjs.map +0 -1
  83. package/dist/esm/interfaces.native.js.map +0 -1
@@ -1,3 +1,4 @@
1
+
1
2
  var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -5,49 +6,42 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
5
6
  var __getProtoOf = Object.getPrototypeOf;
6
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
8
  var __export = (target, all) => {
8
- for (var name in all) __defProp(target, name, {
9
- get: all[name],
10
- enumerable: true
11
- });
9
+ for (var name in all) __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true
12
+ });
12
13
  };
13
14
  var __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from === "object" || typeof from === "function") {
15
- for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
- get: () => from[key],
17
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
- });
19
- }
20
- return to;
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
17
+ get: () => from[key],
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
21
+ return to;
21
22
  };
22
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
- // If the importer is in node compatibility mode or this is not an ESM
24
- // file that has been converted to a CommonJS file using a Babel-
25
- // compatible transform (i.e. "__esModule" has not been set), then set
26
- // "default" to the CommonJS "module.exports" for node compatibility.
27
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
28
- value: mod,
29
- enumerable: true
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
24
+ value: mod,
25
+ enumerable: true
30
26
  }) : target, mod));
31
- var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
32
- value: true
33
- }), mod);
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
28
  var useStore_exports = {};
35
29
  __export(useStore_exports, {
36
- allStores: () => allStores,
37
- createStore: () => createStore,
38
- createUseStore: () => createUseStore,
39
- createUseStoreSelector: () => createUseStoreSelector,
40
- getOrCreateStore: () => getOrCreateStore,
41
- getStore: () => getStore,
42
- getStoreInfo: () => getStoreInfo,
43
- onCreateStore: () => onCreateStore,
44
- setIsInReaction: () => setIsInReaction,
45
- trackStoresAccess: () => trackStoresAccess,
46
- useGlobalStore: () => useGlobalStore,
47
- useGlobalStoreSelector: () => useGlobalStoreSelector,
48
- useStore: () => useStore,
49
- useStoreDebug: () => useStoreDebug,
50
- useStoreSelector: () => useStoreSelector
30
+ allStores: () => allStores,
31
+ createStore: () => createStore,
32
+ createUseStore: () => createUseStore,
33
+ createUseStoreSelector: () => createUseStoreSelector,
34
+ getOrCreateStore: () => getOrCreateStore,
35
+ getStore: () => getStore,
36
+ getStoreInfo: () => getStoreInfo,
37
+ onCreateStore: () => onCreateStore,
38
+ setIsInReaction: () => setIsInReaction,
39
+ trackStoresAccess: () => trackStoresAccess,
40
+ useGlobalStore: () => useGlobalStore,
41
+ useGlobalStoreSelector: () => useGlobalStoreSelector,
42
+ useStore: () => useStore,
43
+ useStoreDebug: () => useStoreDebug,
44
+ useStoreSelector: () => useStoreSelector
51
45
  });
52
46
  module.exports = __toCommonJS(useStore_exports);
53
47
  var import_react = __toESM(require("react"), 1);
@@ -56,412 +50,381 @@ var import_configureUseStore = require("./configureUseStore.cjs");
56
50
  var import_constants = require("./constants.cjs");
57
51
  var import_helpers = require("./helpers.cjs");
58
52
  var import_useStoreDebug = require("./useStoreDebug.cjs");
59
- const idFn = _ => _;
53
+ const idFn = (_) => _;
60
54
  function useStore(StoreKlass, props, options = import_constants.defaultOptions) {
61
- return useStoreFromInfo(getOrCreateStoreInfo(StoreKlass, props, options), options.selector, options);
55
+ return useStoreFromInfo(getOrCreateStoreInfo(StoreKlass, props, options), options.selector, options);
62
56
  }
63
57
  function useStoreDebug(StoreKlass, props) {
64
- return useStore(StoreKlass, props, {
65
- debug: true
66
- });
58
+ return useStore(StoreKlass, props, { debug: true });
67
59
  }
68
60
  function createStore(StoreKlass, props, options) {
69
- return getOrCreateStoreInfo(StoreKlass, props, options)?.store;
61
+ return getOrCreateStoreInfo(StoreKlass, props, options)?.store;
70
62
  }
71
63
  function useGlobalStore(instance, debug) {
72
- const store = instance[import_constants.UNWRAP_PROXY];
73
- const uid = (0, import_helpers.getStoreUid)(store.constructor, store.props);
74
- const info = import_helpers.cache.get(uid);
75
- if (!info) throw new Error(`This store not created using createStore()`);
76
- return useStoreFromInfo(info, void 0, {
77
- debug
78
- });
64
+ const store = instance[import_constants.UNWRAP_PROXY];
65
+ const uid = (0, import_helpers.getStoreUid)(store.constructor, store.props);
66
+ const info = import_helpers.cache.get(uid);
67
+ if (!info) throw new Error(`This store not created using createStore()`);
68
+ return useStoreFromInfo(info, void 0, { debug });
79
69
  }
80
70
  function useGlobalStoreSelector(instance, selector, debug) {
81
- const store = instance[import_constants.UNWRAP_PROXY];
82
- const uid = (0, import_helpers.getStoreUid)(store.constructor, store.props);
83
- const info = import_helpers.cache.get(uid);
84
- if (!info) throw new Error(`This store not created using createStore()`);
85
- return useStoreFromInfo(info, selector, {
86
- debug
87
- });
71
+ const store = instance[import_constants.UNWRAP_PROXY];
72
+ const uid = (0, import_helpers.getStoreUid)(store.constructor, store.props);
73
+ const info = import_helpers.cache.get(uid);
74
+ if (!info) throw new Error(`This store not created using createStore()`);
75
+ return useStoreFromInfo(info, selector, { debug });
88
76
  }
89
77
  function createUseStore(StoreKlass) {
90
- return (props, options) => useStore(StoreKlass, props, options);
78
+ return (props, options) => useStore(StoreKlass, props, options);
91
79
  }
92
80
  function createUseStoreSelector(StoreKlass, selector) {
93
- return props => {
94
- return useStore(StoreKlass, props, {
95
- selector
96
- });
97
- };
81
+ return (props) => {
82
+ return useStore(StoreKlass, props, { selector });
83
+ };
98
84
  }
99
85
  function useStoreSelector(StoreKlass, selector, props) {
100
- return useStore(StoreKlass, props, {
101
- selector
102
- });
86
+ return useStore(StoreKlass, props, { selector });
103
87
  }
104
- const storeAccessTrackers = /* @__PURE__ */new Set();
88
+ const storeAccessTrackers = /* @__PURE__ */ new Set();
105
89
  function trackStoresAccess(cb) {
106
- storeAccessTrackers.add(cb);
107
- return () => {
108
- storeAccessTrackers.delete(cb);
109
- };
90
+ storeAccessTrackers.add(cb);
91
+ return () => {
92
+ storeAccessTrackers.delete(cb);
93
+ };
110
94
  }
111
95
  function getStore(StoreKlass, props) {
112
- return getStoreInfo(StoreKlass, props)?.store;
96
+ return getStoreInfo(StoreKlass, props)?.store;
113
97
  }
114
98
  function getOrCreateStore(StoreKlass, props) {
115
- return getOrCreateStoreInfo(StoreKlass, props, {
116
- refuseCreation: false
117
- })?.store;
99
+ return getOrCreateStoreInfo(StoreKlass, props, { refuseCreation: false })?.store;
118
100
  }
119
101
  function getStoreInfo(StoreKlass, props) {
120
- return getOrCreateStoreInfo(StoreKlass, props, {
121
- refuseCreation: true
122
- });
102
+ return getOrCreateStoreInfo(StoreKlass, props, { refuseCreation: true });
123
103
  }
124
- const onCreateListeners = /* @__PURE__ */new Set();
104
+ const onCreateListeners = /* @__PURE__ */ new Set();
125
105
  function onCreateStore(cb) {
126
- onCreateListeners.add(cb);
127
- return () => {
128
- onCreateListeners.delete(cb);
129
- };
106
+ onCreateListeners.add(cb);
107
+ return () => {
108
+ onCreateListeners.delete(cb);
109
+ };
130
110
  }
131
111
  function getOrCreateStoreInfo(StoreKlass, props, options, propsKeyCalculated) {
132
- if (!StoreKlass) return null;
133
- const uid = (0, import_helpers.getStoreUid)(StoreKlass, propsKeyCalculated ?? props);
134
- if (!options?.avoidCache && import_helpers.cache.has(uid)) return import_helpers.cache.get(uid);
135
- if (options?.refuseCreation) throw new Error(`No store exists (${StoreKlass.name}) with props: ${props}`);
136
- const storeInstance = new StoreKlass(props);
137
- storeInstance.props = props;
138
- const getters = {};
139
- const actions = {};
140
- const stateKeys = /* @__PURE__ */new Set();
141
- const descriptors = (0, import_helpers.getStoreDescriptors)(storeInstance);
142
- for (const key in descriptors) {
143
- const descriptor = descriptors[key];
144
- if (typeof descriptor.value === "function") actions[key] = descriptor.value;else if (typeof descriptor.get === "function") getters[key] = descriptor.get;else if (key !== "props" && key[0] !== "_") stateKeys.add(key);
145
- }
146
- const keyComparators = storeInstance["_comparators"];
147
- const listeners = /* @__PURE__ */new Set();
148
- const storeInfo = {
149
- uid,
150
- keyComparators,
151
- storeInstance,
152
- getters,
153
- stateKeys,
154
- props,
155
- actions,
156
- debug: options?.debug,
157
- disableTracking: false,
158
- gettersState: {
159
- getCache: /* @__PURE__ */new Map(),
160
- depsToGetter: /* @__PURE__ */new Map(),
161
- curGetKeys: /* @__PURE__ */new Set(),
162
- isGetting: false
163
- },
164
- listeners,
165
- trackers: /* @__PURE__ */new Set(),
166
- version: 0,
167
- subscribe: onChanged => {
168
- listeners.add(onChanged);
169
- return () => {
170
- listeners.delete(onChanged);
171
- };
172
- },
173
- triggerUpdate: () => {
174
- storeInfo.version = (storeInfo.version + 1) % Number.MAX_SAFE_INTEGER;
175
- for (const cb of listeners) cb();
176
- }
177
- };
178
- const store = createProxiedStore(
179
- // we assign store right after and proxiedStore never accesses it until later on
180
- storeInfo);
181
- if (process.env.NODE_ENV === "development") allStores[StoreKlass.name + uid] = store;
182
- store.mount?.();
183
- storeInfo.store = store;
184
- const result = storeInfo;
185
- import_helpers.cache.set(uid, result);
186
- onCreateListeners.forEach(cb => cb(result));
187
- return result;
112
+ if (!StoreKlass) return null;
113
+ const uid = (0, import_helpers.getStoreUid)(StoreKlass, propsKeyCalculated ?? props);
114
+ if (!options?.avoidCache && import_helpers.cache.has(uid)) return import_helpers.cache.get(uid);
115
+ if (options?.refuseCreation) throw new Error(`No store exists (${StoreKlass.name}) with props: ${props}`);
116
+ const storeInstance = new StoreKlass(props);
117
+ storeInstance.props = props;
118
+ const getters = {};
119
+ const actions = {};
120
+ const stateKeys = /* @__PURE__ */ new Set();
121
+ const descriptors = (0, import_helpers.getStoreDescriptors)(storeInstance);
122
+ for (const key in descriptors) {
123
+ const descriptor = descriptors[key];
124
+ if (typeof descriptor.value === "function") actions[key] = descriptor.value;
125
+ else if (typeof descriptor.get === "function") getters[key] = descriptor.get;
126
+ else if (key !== "props" && key[0] !== "_") stateKeys.add(key);
127
+ }
128
+ const keyComparators = storeInstance["_comparators"];
129
+ const listeners = /* @__PURE__ */ new Set();
130
+ const storeInfo = {
131
+ uid,
132
+ keyComparators,
133
+ storeInstance,
134
+ getters,
135
+ stateKeys,
136
+ props,
137
+ actions,
138
+ debug: options?.debug,
139
+ disableTracking: false,
140
+ gettersState: {
141
+ getCache: /* @__PURE__ */ new Map(),
142
+ depsToGetter: /* @__PURE__ */ new Map(),
143
+ curGetKeys: /* @__PURE__ */ new Set(),
144
+ isGetting: false
145
+ },
146
+ listeners,
147
+ trackers: /* @__PURE__ */ new Set(),
148
+ version: 0,
149
+ subscribe: (onChanged) => {
150
+ listeners.add(onChanged);
151
+ return () => {
152
+ listeners.delete(onChanged);
153
+ };
154
+ },
155
+ triggerUpdate: () => {
156
+ storeInfo.version = (storeInfo.version + 1) % Number.MAX_SAFE_INTEGER;
157
+ for (const cb of listeners) cb();
158
+ }
159
+ };
160
+ const store = createProxiedStore(storeInfo);
161
+ if (process.env.NODE_ENV === "development") allStores[StoreKlass.name + uid] = store;
162
+ store.mount?.();
163
+ storeInfo.store = store;
164
+ const result = storeInfo;
165
+ import_helpers.cache.set(uid, result);
166
+ onCreateListeners.forEach((cb) => cb(result));
167
+ return result;
188
168
  }
189
169
  const allStores = {};
190
170
  if (process.env.NODE_ENV === "development") globalThis["Store"] ||= allStores;
191
171
  const emptyObj = {};
192
172
  const selectKeys = (obj, keys) => {
193
- if (!keys.length) return emptyObj;
194
- const res = {};
195
- for (const key of keys) res[key] = obj[key];
196
- return res;
173
+ if (!keys.length) return emptyObj;
174
+ const res = {};
175
+ for (const key of keys) res[key] = obj[key];
176
+ return res;
197
177
  };
198
178
  let isInReaction = false;
199
- const setIsInReaction = val => {
200
- isInReaction = val;
179
+ const setIsInReaction = (val) => {
180
+ isInReaction = val;
201
181
  };
202
182
  function useStoreFromInfo(info, userSelector, options) {
203
- const store = info?.store;
204
- const internal = import_react.default.useRef(void 0);
205
- const component = (0, import_useStoreDebug.useCurrentComponent)();
206
- if (!internal.current) internal.current = {
207
- component,
208
- tracked: /* @__PURE__ */new Set(),
209
- last: null,
210
- lastKeys: null
211
- };
212
- const curInternal = internal.current;
213
- const shouldPrintDebug = options?.debug;
214
- const getSnapshot = import_react.default.useCallback(() => {
215
- if (!info || !store) return;
216
- const curInternal2 = internal.current;
217
- const isTracking = curInternal2.tracked.size;
218
- const keys = [...(!isTracking ? info.stateKeys : curInternal2.tracked)];
219
- const nextKeys = `${info.version}${keys.join("")}${userSelector || ""}`;
220
- const lastKeys = curInternal2.lastKeys;
221
- if (nextKeys === curInternal2.lastKeys) return curInternal2.last;
222
- curInternal2.lastKeys = nextKeys;
223
- let snap;
224
- info.disableTracking = true;
225
- const last = curInternal2.last;
226
- if (userSelector) snap = userSelector(store);else snap = selectKeys(store, keys);
227
- info.disableTracking = false;
228
- const isUnchanged = !userSelector && !isTracking && last || typeof last !== "undefined" && (0, import_comparators.isEqualSubsetShallow)(last, snap, {
229
- keyComparators: info.keyComparators
230
- });
231
- if (shouldPrintDebug) console.info("🌑 getSnapshot", {
232
- storeState: selectKeys(store, Object.keys(store)),
233
- userSelector,
234
- info,
235
- isUnchanged,
236
- component,
237
- keys,
238
- last,
239
- snap,
240
- curInternal: curInternal2,
241
- nextKeys,
242
- lastKeys
243
- });
244
- if (isUnchanged) return last;
245
- curInternal2.last = snap;
246
- return snap;
247
- }, [store]);
248
- const state = import_react.default.useSyncExternalStore(info?.subscribe || idFn, getSnapshot, getSnapshot);
249
- if (!info || !store || !state) return state;
250
- if (userSelector) return state;
251
- return new Proxy(store, {
252
- get(target, key) {
253
- const curVal = Reflect.get(target, key);
254
- if (isInReaction) return curVal;
255
- const keyString = key;
256
- if (info.stateKeys.has(keyString) || keyString in info.getters) {
257
- if (shouldPrintDebug) console.info("👀 tracking", keyString);
258
- curInternal.tracked.add(keyString);
259
- }
260
- if (Reflect.has(state, key)) return Reflect.get(state, key);
261
- return curVal;
262
- }
263
- });
183
+ const store = info?.store;
184
+ const internal = import_react.default.useRef(void 0);
185
+ const component = (0, import_useStoreDebug.useCurrentComponent)();
186
+ if (!internal.current) internal.current = {
187
+ component,
188
+ tracked: /* @__PURE__ */ new Set(),
189
+ last: null,
190
+ lastKeys: null
191
+ };
192
+ const curInternal = internal.current;
193
+ const shouldPrintDebug = options?.debug;
194
+ const getSnapshot = import_react.default.useCallback(() => {
195
+ if (!info || !store) return;
196
+ const curInternal2 = internal.current;
197
+ const isTracking = curInternal2.tracked.size;
198
+ const keys = [...!isTracking ? info.stateKeys : curInternal2.tracked];
199
+ const nextKeys = `${info.version}${keys.join("")}${userSelector || ""}`;
200
+ const lastKeys = curInternal2.lastKeys;
201
+ if (nextKeys === curInternal2.lastKeys) return curInternal2.last;
202
+ curInternal2.lastKeys = nextKeys;
203
+ let snap;
204
+ info.disableTracking = true;
205
+ const last = curInternal2.last;
206
+ if (userSelector) snap = userSelector(store);
207
+ else snap = selectKeys(store, keys);
208
+ info.disableTracking = false;
209
+ const isUnchanged = !userSelector && !isTracking && last || typeof last !== "undefined" && (0, import_comparators.isEqualSubsetShallow)(last, snap, { keyComparators: info.keyComparators });
210
+ if (shouldPrintDebug) console.info("🌑 getSnapshot", {
211
+ storeState: selectKeys(store, Object.keys(store)),
212
+ userSelector,
213
+ info,
214
+ isUnchanged,
215
+ component,
216
+ keys,
217
+ last,
218
+ snap,
219
+ curInternal: curInternal2,
220
+ nextKeys,
221
+ lastKeys
222
+ });
223
+ if (isUnchanged) return last;
224
+ curInternal2.last = snap;
225
+ return snap;
226
+ }, [store]);
227
+ const state = import_react.default.useSyncExternalStore(info?.subscribe || idFn, getSnapshot, getSnapshot);
228
+ if (!info || !store || !state) return state;
229
+ if (userSelector) return state;
230
+ return new Proxy(store, { get(target, key) {
231
+ const curVal = Reflect.get(target, key);
232
+ if (isInReaction) return curVal;
233
+ const keyString = key;
234
+ if (info.stateKeys.has(keyString) || keyString in info.getters) {
235
+ if (shouldPrintDebug) console.info("👀 tracking", keyString);
236
+ curInternal.tracked.add(keyString);
237
+ }
238
+ if (Reflect.has(state, key)) return Reflect.get(state, key);
239
+ return curVal;
240
+ } });
264
241
  }
265
- let setters = /* @__PURE__ */new Set();
266
- const logStack = /* @__PURE__ */new Set();
242
+ let setters = /* @__PURE__ */ new Set();
243
+ const logStack = /* @__PURE__ */ new Set();
267
244
  function createProxiedStore(storeInfo) {
268
- const {
269
- actions,
270
- storeInstance,
271
- getters,
272
- gettersState
273
- } = storeInfo;
274
- const {
275
- getCache,
276
- curGetKeys,
277
- depsToGetter
278
- } = gettersState;
279
- const constr = storeInstance.constructor;
280
- const shouldDebug2 = storeInfo.debug ?? import_useStoreDebug.DebugStores.has(constr);
281
- let didSet = false;
282
- const wrappedActions = {};
283
- for (const key in actions) {
284
- if (key === "subscribe") continue;
285
- const actionFn = actions[key];
286
- const isGetFn = key.startsWith("get");
287
- wrappedActions[key] = function useStoreAction(...args) {
288
- let res;
289
- if (isGetFn || gettersState.isGetting) return Reflect.apply(actionFn, proxiedStore, args);
290
- if (process.env.NODE_ENV === "development" && shouldDebug2) console.info("(debug) startAction", key);
291
- res = Reflect.apply(actionFn, proxiedStore, args);
292
- if (res instanceof Promise) return res.then(finishAction);
293
- finishAction();
294
- return res;
295
- };
296
- if (process.env.NODE_ENV === "development") {
297
- let hashCode = function (str) {
298
- let hash = 0;
299
- for (let i = 0; i < str.length; i++) hash = str.charCodeAt(i) + ((hash << 5) - hash);
300
- return hash;
301
- },
302
- strColor = function (str) {
303
- return `hsl(${hashCode(str) % 360}, 90%, 40%)`;
304
- };
305
- if (!key.startsWith("get") && !key.startsWith("_") && key !== "subscribe") {
306
- const ogAction = wrappedActions[key];
307
- wrappedActions[key] = new Proxy(ogAction, {
308
- apply(target, thisArg, args) {
309
- const isDebugging = shouldDebug2 || storeInfo.debug;
310
- if (!(process.env.LOG_LEVEL !== "0" && (isDebugging || import_configureUseStore.configureOpts.logLevel !== "error"))) return Reflect.apply(target, thisArg, args);
311
- setters = /* @__PURE__ */new Set();
312
- const curSetters = setters;
313
- const isTopLevelLogger = logStack.size == 0;
314
- const logs = /* @__PURE__ */new Set();
315
- logStack.add(logs);
316
- let res;
317
- const id = counter++;
318
- try {
319
- res = Reflect.apply(target, thisArg, args);
320
- } catch (err) {
321
- console.error("Error", err);
322
- throw err;
323
- } finally {
324
- logStack.add("end");
325
- const name = constr.name;
326
- const color = strColor(name);
327
- const simpleArgs = args.map(import_helpers.simpleStr);
328
- logs.add([`%c \u{1F311} ${id} ${name.padStart(isTopLevelLogger ? 8 : 4)}%c.${key}(${simpleArgs.join(", ")})${isTopLevelLogger && logStack.size > 1 ? ` (+${logStack.size - 1})` : ""}`, `color: ${color};`, "color: black;"]);
329
- if (curSetters.size) curSetters.forEach(({
330
- key: key2,
331
- value
332
- }) => {
333
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") logs.add([` SET ${key2} ${value}`, value]);else logs.add([` SET ${key2}`, value]);
334
- });
335
- if (isTopLevelLogger) {
336
- let error = null;
337
- try {
338
- for (const item of logStack) {
339
- if (item === "end") {
340
- console.groupEnd();
341
- continue;
342
- }
343
- const [head, ...rest] = item;
344
- if (head) {
345
- console.groupCollapsed(...head);
346
- console.groupCollapsed("...");
347
- console.info("args", args);
348
- console.info("response", res);
349
- console.groupCollapsed("trace");
350
- console.trace();
351
- console.groupEnd();
352
- console.groupEnd();
353
- for (const [name2, ...log] of rest) {
354
- console.groupCollapsed(name2);
355
- console.info(...log);
356
- console.groupEnd();
357
- }
358
- } else console.info("Weird log", head, ...rest);
359
- }
360
- } catch (err) {
361
- error = err;
362
- }
363
- for (const _ of logStack) console.groupEnd();
364
- if (error) console.error(`error loggin`, error);
365
- logStack.clear();
366
- }
367
- return res;
368
- }
369
- }
370
- });
371
- }
372
- }
373
- }
374
- const finishAction = val => {
375
- if (process.env.NODE_ENV === "development" && shouldDebug2) console.info("(debug) finishAction", {
376
- didSet
377
- });
378
- if (didSet) {
379
- storeInfo.triggerUpdate();
380
- didSet = false;
381
- }
382
- return val;
383
- };
384
- let isTriggering = false;
385
- const proxiedStore = new Proxy(storeInstance, {
386
- get(_, key) {
387
- if (key in wrappedActions) return wrappedActions[key];
388
- if (key in passThroughKeys) return Reflect.get(storeInstance, key);
389
- if (key === import_constants.UNWRAP_PROXY) return storeInstance;
390
- if (key === import_helpers.UNWRAP_STORE_INFO) return storeInfo;
391
- if (storeAccessTrackers.size) storeAccessTrackers.forEach(cb => cb(storeInfo));
392
- if (typeof key !== "string") return Reflect.get(storeInstance, key);
393
- if (!storeInfo.disableTracking) {
394
- if (gettersState.isGetting) gettersState.curGetKeys.add(key);
395
- }
396
- if (key in getters) {
397
- if (getCache.has(key)) return getCache.get(key);
398
- curGetKeys.clear();
399
- const isSubGetter = gettersState.isGetting;
400
- gettersState.isGetting = true;
401
- const res = getters[key].call(proxiedStore);
402
- if (!isSubGetter) gettersState.isGetting = false;
403
- for (const gk of curGetKeys) {
404
- if (!depsToGetter.has(gk)) depsToGetter.set(gk, /* @__PURE__ */new Set());
405
- depsToGetter.get(gk).add(key);
406
- }
407
- getCache.set(key, res);
408
- return res;
409
- }
410
- return Reflect.get(storeInstance, key);
411
- },
412
- set(target, key, value, receiver) {
413
- const cur = Reflect.get(target, key);
414
- const res = Reflect.set(target, key, value, receiver);
415
- if (res && cur !== value) {
416
- if (typeof key === "string") {
417
- clearGetterCache(key);
418
- if (shouldDebug2) {
419
- setters.add({
420
- key,
421
- value
422
- });
423
- if (getShouldDebug(storeInfo)) console.info("(debug) SET", res, key, value);
424
- }
425
- if (process.env.NODE_ENV === "development" && shouldDebug2) console.info("SET...", {
426
- key,
427
- value
428
- });
429
- }
430
- if (!isTriggering) {
431
- isTriggering = true;
432
- waitForEventLoop(() => {
433
- storeInfo.triggerUpdate();
434
- isTriggering = false;
435
- });
436
- }
437
- }
438
- return res;
439
- }
440
- });
441
- function clearGetterCache(setKey) {
442
- const parentGetters = depsToGetter.get(setKey);
443
- getCache.delete(setKey);
444
- if (!parentGetters) return;
445
- for (const gk of parentGetters) {
446
- getCache.delete(gk);
447
- if (depsToGetter.has(gk)) clearGetterCache(gk);
448
- }
449
- }
450
- return proxiedStore;
245
+ const { actions, storeInstance, getters, gettersState } = storeInfo;
246
+ const { getCache, curGetKeys, depsToGetter } = gettersState;
247
+ const constr = storeInstance.constructor;
248
+ const shouldDebug2 = storeInfo.debug ?? import_useStoreDebug.DebugStores.has(constr);
249
+ let didSet = false;
250
+ const wrappedActions = {};
251
+ for (const key in actions) {
252
+ if (key === "subscribe") continue;
253
+ const actionFn = actions[key];
254
+ const isGetFn = key.startsWith("get");
255
+ wrappedActions[key] = function useStoreAction(...args) {
256
+ let res;
257
+ if (isGetFn || gettersState.isGetting) return Reflect.apply(actionFn, proxiedStore, args);
258
+ if (process.env.NODE_ENV === "development" && shouldDebug2) console.info("(debug) startAction", key);
259
+ res = Reflect.apply(actionFn, proxiedStore, args);
260
+ if (res instanceof Promise) return res.then(finishAction);
261
+ finishAction();
262
+ return res;
263
+ };
264
+ if (process.env.NODE_ENV === "development") {
265
+ let hashCode = function(str) {
266
+ let hash = 0;
267
+ for (let i = 0; i < str.length; i++) hash = str.charCodeAt(i) + ((hash << 5) - hash);
268
+ return hash;
269
+ }, strColor = function(str) {
270
+ return `hsl(${hashCode(str) % 360}, 90%, 40%)`;
271
+ };
272
+ if (!key.startsWith("get") && !key.startsWith("_") && key !== "subscribe") {
273
+ const ogAction = wrappedActions[key];
274
+ wrappedActions[key] = new Proxy(ogAction, { apply(target, thisArg, args) {
275
+ const isDebugging = shouldDebug2 || storeInfo.debug;
276
+ if (!(process.env.LOG_LEVEL !== "0" && (isDebugging || import_configureUseStore.configureOpts.logLevel !== "error"))) return Reflect.apply(target, thisArg, args);
277
+ setters = /* @__PURE__ */ new Set();
278
+ const curSetters = setters;
279
+ const isTopLevelLogger = logStack.size == 0;
280
+ const logs = /* @__PURE__ */ new Set();
281
+ logStack.add(logs);
282
+ let res;
283
+ const id = counter++;
284
+ try {
285
+ res = Reflect.apply(target, thisArg, args);
286
+ } catch (err) {
287
+ console.error("Error", err);
288
+ throw err;
289
+ } finally {
290
+ logStack.add("end");
291
+ const name = constr.name;
292
+ const color = strColor(name);
293
+ const simpleArgs = args.map(import_helpers.simpleStr);
294
+ logs.add([
295
+ `%c \u{1F311} ${id} ${name.padStart(isTopLevelLogger ? 8 : 4)}%c.${key}(${simpleArgs.join(", ")})${isTopLevelLogger && logStack.size > 1 ? ` (+${logStack.size - 1})` : ""}`,
296
+ `color: ${color};`,
297
+ "color: black;"
298
+ ]);
299
+ if (curSetters.size) curSetters.forEach(({ key: key2, value }) => {
300
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") logs.add([` SET ${key2} ${value}`, value]);
301
+ else logs.add([` SET ${key2}`, value]);
302
+ });
303
+ if (isTopLevelLogger) {
304
+ let error = null;
305
+ try {
306
+ for (const item of logStack) {
307
+ if (item === "end") {
308
+ console.groupEnd();
309
+ continue;
310
+ }
311
+ const [head, ...rest] = item;
312
+ if (head) {
313
+ console.groupCollapsed(...head);
314
+ console.groupCollapsed("...");
315
+ console.info("args", args);
316
+ console.info("response", res);
317
+ console.groupCollapsed("trace");
318
+ console.trace();
319
+ console.groupEnd();
320
+ console.groupEnd();
321
+ for (const [name2, ...log] of rest) {
322
+ console.groupCollapsed(name2);
323
+ console.info(...log);
324
+ console.groupEnd();
325
+ }
326
+ } else console.info("Weird log", head, ...rest);
327
+ }
328
+ } catch (err) {
329
+ error = err;
330
+ }
331
+ for (const _ of logStack) console.groupEnd();
332
+ if (error) console.error(`error loggin`, error);
333
+ logStack.clear();
334
+ }
335
+ return res;
336
+ }
337
+ } });
338
+ }
339
+ }
340
+ }
341
+ const finishAction = (val) => {
342
+ if (process.env.NODE_ENV === "development" && shouldDebug2) console.info("(debug) finishAction", { didSet });
343
+ if (didSet) {
344
+ storeInfo.triggerUpdate();
345
+ didSet = false;
346
+ }
347
+ return val;
348
+ };
349
+ let isTriggering = false;
350
+ const proxiedStore = new Proxy(storeInstance, {
351
+ get(_, key) {
352
+ if (key in wrappedActions) return wrappedActions[key];
353
+ if (key in passThroughKeys) return Reflect.get(storeInstance, key);
354
+ if (key === import_constants.UNWRAP_PROXY) return storeInstance;
355
+ if (key === import_helpers.UNWRAP_STORE_INFO) return storeInfo;
356
+ if (storeAccessTrackers.size) storeAccessTrackers.forEach((cb) => cb(storeInfo));
357
+ if (typeof key !== "string") return Reflect.get(storeInstance, key);
358
+ if (!storeInfo.disableTracking) {
359
+ if (gettersState.isGetting) gettersState.curGetKeys.add(key);
360
+ }
361
+ if (key in getters) {
362
+ if (getCache.has(key)) return getCache.get(key);
363
+ curGetKeys.clear();
364
+ const isSubGetter = gettersState.isGetting;
365
+ gettersState.isGetting = true;
366
+ const res = getters[key].call(proxiedStore);
367
+ if (!isSubGetter) gettersState.isGetting = false;
368
+ for (const gk of curGetKeys) {
369
+ if (!depsToGetter.has(gk)) depsToGetter.set(gk, /* @__PURE__ */ new Set());
370
+ depsToGetter.get(gk).add(key);
371
+ }
372
+ getCache.set(key, res);
373
+ return res;
374
+ }
375
+ return Reflect.get(storeInstance, key);
376
+ },
377
+ set(target, key, value, receiver) {
378
+ const cur = Reflect.get(target, key);
379
+ const res = Reflect.set(target, key, value, receiver);
380
+ if (res && cur !== value) {
381
+ if (typeof key === "string") {
382
+ clearGetterCache(key);
383
+ if (shouldDebug2) {
384
+ setters.add({
385
+ key,
386
+ value
387
+ });
388
+ if (getShouldDebug(storeInfo)) console.info("(debug) SET", res, key, value);
389
+ }
390
+ if (process.env.NODE_ENV === "development" && shouldDebug2) console.info("SET...", {
391
+ key,
392
+ value
393
+ });
394
+ }
395
+ if (!isTriggering) {
396
+ isTriggering = true;
397
+ waitForEventLoop(() => {
398
+ storeInfo.triggerUpdate();
399
+ isTriggering = false;
400
+ });
401
+ }
402
+ }
403
+ return res;
404
+ }
405
+ });
406
+ function clearGetterCache(setKey) {
407
+ const parentGetters = depsToGetter.get(setKey);
408
+ getCache.delete(setKey);
409
+ if (!parentGetters) return;
410
+ for (const gk of parentGetters) {
411
+ getCache.delete(gk);
412
+ if (depsToGetter.has(gk)) clearGetterCache(gk);
413
+ }
414
+ }
415
+ return proxiedStore;
451
416
  }
452
- const waitForEventLoop = process.env.NODE_ENV === "test" || false ? cb => cb() : queueMicrotask;
417
+ const waitForEventLoop = process.env.NODE_ENV === "test" || false ? (cb) => cb() : queueMicrotask;
453
418
  let counter = 0;
454
419
  const passThroughKeys = {
455
- subscribe: true,
456
- _version: true,
457
- _trackers: true,
458
- $$typeof: true,
459
- _listeners: true,
460
- _enableTracking: true
420
+ subscribe: true,
421
+ _version: true,
422
+ _trackers: true,
423
+ $$typeof: true,
424
+ _listeners: true,
425
+ _enableTracking: true
461
426
  };
462
427
  function getShouldDebug(storeInfo) {
463
- const info = {
464
- storeInstance: storeInfo.store
465
- };
466
- return [...storeInfo.trackers].some(tracker => tracker.component && (0, import_useStoreDebug.shouldDebug)(tracker.component, info));
467
- }
428
+ const info = { storeInstance: storeInfo.store };
429
+ return [...storeInfo.trackers].some((tracker) => tracker.component && (0, import_useStoreDebug.shouldDebug)(tracker.component, info));
430
+ }