@hanzogui/use-store 3.0.6 → 4.4.0

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