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