@tamagui/use-store 2.0.0-rc.8 → 2.0.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 (101) 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 +13 -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 +271 -194
  26. package/dist/cjs/useStore.native.js +438 -374
  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 +8 -12
  48. package/dist/esm/index.js.map +1 -6
  49. package/dist/esm/index.native.js +17 -8
  50. package/dist/esm/index.native.js.map +1 -1
  51. package/dist/esm/observe.mjs +77 -33
  52. package/dist/esm/observe.mjs.map +1 -1
  53. package/dist/esm/observe.native.js +128 -82
  54. package/dist/esm/observe.native.js.map +1 -1
  55. package/dist/esm/useStore.mjs +241 -166
  56. package/dist/esm/useStore.mjs.map +1 -1
  57. package/dist/esm/useStore.native.js +408 -346
  58. package/dist/esm/useStore.native.js.map +1 -1
  59. package/dist/esm/useStoreDebug.mjs +18 -9
  60. package/dist/esm/useStoreDebug.mjs.map +1 -1
  61. package/dist/esm/useStoreDebug.native.js +14 -10
  62. package/dist/esm/useStoreDebug.native.js.map +1 -1
  63. package/package.json +6 -9
  64. package/dist/cjs/comparators.js +0 -33
  65. package/dist/cjs/comparators.js.map +0 -6
  66. package/dist/cjs/configureUseStore.js +0 -25
  67. package/dist/cjs/configureUseStore.js.map +0 -6
  68. package/dist/cjs/constants.js +0 -25
  69. package/dist/cjs/constants.js.map +0 -6
  70. package/dist/cjs/decorators.js +0 -25
  71. package/dist/cjs/decorators.js.map +0 -6
  72. package/dist/cjs/helpers.js +0 -50
  73. package/dist/cjs/helpers.js.map +0 -6
  74. package/dist/cjs/index.js +0 -34
  75. package/dist/cjs/index.js.map +0 -6
  76. package/dist/cjs/interfaces.js +0 -14
  77. package/dist/cjs/interfaces.js.map +0 -6
  78. package/dist/cjs/observe.js +0 -105
  79. package/dist/cjs/observe.js.map +0 -6
  80. package/dist/cjs/useStore.js +0 -353
  81. package/dist/cjs/useStore.js.map +0 -6
  82. package/dist/cjs/useStoreDebug.js +0 -46
  83. package/dist/cjs/useStoreDebug.js.map +0 -6
  84. package/dist/esm/comparators.js +0 -17
  85. package/dist/esm/comparators.js.map +0 -6
  86. package/dist/esm/configureUseStore.js +0 -9
  87. package/dist/esm/configureUseStore.js.map +0 -6
  88. package/dist/esm/constants.js +0 -9
  89. package/dist/esm/constants.js.map +0 -6
  90. package/dist/esm/decorators.js +0 -9
  91. package/dist/esm/decorators.js.map +0 -6
  92. package/dist/esm/helpers.js +0 -34
  93. package/dist/esm/helpers.js.map +0 -6
  94. package/dist/esm/interfaces.js +0 -1
  95. package/dist/esm/interfaces.js.map +0 -6
  96. package/dist/esm/observe.js +0 -84
  97. package/dist/esm/observe.js.map +0 -6
  98. package/dist/esm/useStore.js +0 -340
  99. package/dist/esm/useStore.js.map +0 -6
  100. package/dist/esm/useStoreDebug.js +0 -22
  101. package/dist/esm/useStoreDebug.js.map +0 -6
@@ -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,39 +50,38 @@ __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
- const info = getOrCreateStoreInfo(StoreKlass, props, options);
60
- return useStoreFromInfo(info, options.selector, options);
61
+ return useStoreFromInfo(getOrCreateStoreInfo(StoreKlass, props, options), options.selector, options);
61
62
  }
62
63
  function useStoreDebug(StoreKlass, props) {
63
64
  return useStore(StoreKlass, props, {
64
- debug: !0
65
+ debug: true
65
66
  });
66
67
  }
67
68
  function createStore(StoreKlass, props, options) {
68
69
  return getOrCreateStoreInfo(StoreKlass, props, options)?.store;
69
70
  }
70
71
  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()");
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()`);
75
76
  return useStoreFromInfo(info, void 0, {
76
77
  debug
77
78
  });
78
79
  }
79
80
  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()");
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()`);
84
85
  return useStoreFromInfo(info, selector, {
85
86
  debug
86
87
  });
@@ -89,9 +90,11 @@ function createUseStore(StoreKlass) {
89
90
  return (props, options) => useStore(StoreKlass, props, options);
90
91
  }
91
92
  function createUseStoreSelector(StoreKlass, selector) {
92
- return props => useStore(StoreKlass, props, {
93
- selector
94
- });
93
+ return props => {
94
+ return useStore(StoreKlass, props, {
95
+ selector
96
+ });
97
+ };
95
98
  }
96
99
  function useStoreSelector(StoreKlass, selector, props) {
97
100
  return useStore(StoreKlass, props, {
@@ -100,7 +103,8 @@ function useStoreSelector(StoreKlass, selector, props) {
100
103
  }
101
104
  const storeAccessTrackers = /* @__PURE__ */new Set();
102
105
  function trackStoresAccess(cb) {
103
- return storeAccessTrackers.add(cb), () => {
106
+ storeAccessTrackers.add(cb);
107
+ return () => {
104
108
  storeAccessTrackers.delete(cb);
105
109
  };
106
110
  }
@@ -109,17 +113,18 @@ function getStore(StoreKlass, props) {
109
113
  }
110
114
  function getOrCreateStore(StoreKlass, props) {
111
115
  return getOrCreateStoreInfo(StoreKlass, props, {
112
- refuseCreation: !1
116
+ refuseCreation: false
113
117
  })?.store;
114
118
  }
115
119
  function getStoreInfo(StoreKlass, props) {
116
120
  return getOrCreateStoreInfo(StoreKlass, props, {
117
- refuseCreation: !0
121
+ refuseCreation: true
118
122
  });
119
123
  }
120
124
  const onCreateListeners = /* @__PURE__ */new Set();
121
125
  function onCreateStore(cb) {
122
- return onCreateListeners.add(cb), () => {
126
+ onCreateListeners.add(cb);
127
+ return () => {
123
128
  onCreateListeners.delete(cb);
124
129
  };
125
130
  }
@@ -130,112 +135,130 @@ function getOrCreateStoreInfo(StoreKlass, props, options, propsKeyCalculated) {
130
135
  if (options?.refuseCreation) throw new Error(`No store exists (${StoreKlass.name}) with props: ${props}`);
131
136
  const storeInstance = new StoreKlass(props);
132
137
  storeInstance.props = props;
133
- const getters = {},
134
- actions = {},
135
- stateKeys = /* @__PURE__ */new Set(),
136
- descriptors = (0, import_helpers.getStoreDescriptors)(storeInstance);
138
+ const getters = {};
139
+ const actions = {};
140
+ const stateKeys = /* @__PURE__ */new Set();
141
+ const descriptors = (0, import_helpers.getStoreDescriptors)(storeInstance);
137
142
  for (const key in descriptors) {
138
143
  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);
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);
140
145
  }
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), () => {
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 () => {
163
170
  listeners.delete(onChanged);
164
- }),
165
- triggerUpdate: () => {
166
- storeInfo.version = (storeInfo.version + 1) % Number.MAX_SAFE_INTEGER;
167
- for (const cb of listeners) cb();
168
- }
171
+ };
169
172
  },
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;
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;
174
184
  const result = storeInfo;
175
- return import_helpers.cache.set(uid, result), onCreateListeners.forEach(cb => cb(result)), result;
185
+ import_helpers.cache.set(uid, result);
186
+ onCreateListeners.forEach(cb => cb(result));
187
+ return result;
176
188
  }
177
189
  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;
190
+ if (process.env.NODE_ENV === "development") globalThis["Store"] ||= allStores;
191
+ const emptyObj = {};
192
+ 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;
197
+ };
198
+ let isInReaction = false;
187
199
  const setIsInReaction = val => {
188
200
  isInReaction = val;
189
201
  };
190
202
  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 = {
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 = {
195
207
  component,
196
208
  tracked: /* @__PURE__ */new Set(),
197
209
  last: null,
198
210
  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", {
219
- storeState: selectKeys(store, Object.keys(store)),
220
- userSelector,
221
- info,
222
- isUnchanged,
223
- component,
224
- keys,
225
- last,
226
- snap,
227
- curInternal: curInternal2,
228
- nextKeys,
229
- 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, {
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, {
234
252
  get(target, key) {
235
253
  const curVal = Reflect.get(target, key);
236
254
  if (isInReaction) return curVal;
237
255
  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;
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;
239
262
  }
240
263
  });
241
264
  }
@@ -243,28 +266,34 @@ let setters = /* @__PURE__ */new Set();
243
266
  const logStack = /* @__PURE__ */new Set();
244
267
  function createProxiedStore(storeInfo) {
245
268
  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;
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;
259
282
  const wrappedActions = {};
260
283
  for (const key in actions) {
261
284
  if (key === "subscribe") continue;
262
- const actionFn = actions[key],
263
- isGetFn = key.startsWith("get");
264
- if (wrappedActions[key] = function (...args) {
285
+ const actionFn = actions[key];
286
+ const isGetFn = key.startsWith("get");
287
+ wrappedActions[key] = function useStoreAction(...args) {
265
288
  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") {
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") {
268
297
  let hashCode = function (str) {
269
298
  let hash = 0;
270
299
  for (let i = 0; i < str.length; i++) hash = str.charCodeAt(i) + ((hash << 5) - hash);
@@ -280,27 +309,30 @@ function createProxiedStore(storeInfo) {
280
309
  const isDebugging = shouldDebug2 || storeInfo.debug;
281
310
  if (!(process.env.LOG_LEVEL !== "0" && (isDebugging || import_configureUseStore.configureOpts.logLevel !== "error"))) return Reflect.apply(target, thisArg, args);
282
311
  setters = /* @__PURE__ */new Set();
283
- const curSetters = setters,
284
- isTopLevelLogger = logStack.size == 0,
285
- logs = /* @__PURE__ */new Set();
312
+ const curSetters = setters;
313
+ const isTopLevelLogger = logStack.size == 0;
314
+ const logs = /* @__PURE__ */new Set();
286
315
  logStack.add(logs);
287
316
  let res;
288
317
  const id = counter++;
289
318
  try {
290
319
  res = Reflect.apply(target, thisArg, args);
291
320
  } catch (err) {
292
- throw console.error("Error", err), err;
321
+ console.error("Error", err);
322
+ throw err;
293
323
  } finally {
294
324
  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(({
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(({
299
330
  key: key2,
300
331
  value
301
332
  }) => {
302
- typeof value == "string" || typeof value == "number" || typeof value == "boolean" ? logs.add([` SET ${key2} ${value}`, value]) : logs.add([` SET ${key2}`, value]);
303
- }), isTopLevelLogger) {
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) {
304
336
  let error = null;
305
337
  try {
306
338
  for (const item of logStack) {
@@ -310,15 +342,27 @@ function createProxiedStore(storeInfo) {
310
342
  }
311
343
  const [head, ...rest] = item;
312
344
  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();
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
+ }
315
358
  } else console.info("Weird log", head, ...rest);
316
359
  }
317
360
  } catch (err) {
318
361
  error = err;
319
362
  }
320
363
  for (const _ of logStack) console.groupEnd();
321
- error && console.error("error loggin", error), logStack.clear();
364
+ if (error) console.error(`error loggin`, error);
365
+ logStack.clear();
322
366
  }
323
367
  return res;
324
368
  }
@@ -327,60 +371,93 @@ function createProxiedStore(storeInfo) {
327
371
  }
328
372
  }
329
373
  }
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;
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;
334
385
  const proxiedStore = new Proxy(storeInstance, {
335
- // GET
336
386
  get(_, key) {
337
387
  if (key in wrappedActions) return wrappedActions[key];
338
388
  if (key in passThroughKeys) return Reflect.get(storeInstance, key);
339
389
  if (key === import_constants.UNWRAP_PROXY) return storeInstance;
340
390
  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) {
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) {
343
397
  if (getCache.has(key)) return getCache.get(key);
344
398
  curGetKeys.clear();
345
399
  const isSubGetter = gettersState.isGetting;
346
- gettersState.isGetting = !0;
400
+ gettersState.isGetting = true;
347
401
  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;
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;
351
409
  }
352
410
  return Reflect.get(storeInstance, key);
353
411
  },
354
- // SET
355
412
  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;
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;
367
439
  }
368
440
  });
369
441
  function clearGetterCache(setKey) {
370
442
  const parentGetters = depsToGetter.get(setKey);
371
- if (getCache.delete(setKey), !!parentGetters) for (const gk of parentGetters) getCache.delete(gk), depsToGetter.has(gk) && clearGetterCache(gk);
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
+ }
372
449
  }
373
450
  return proxiedStore;
374
451
  }
375
- const waitForEventLoop = process.env.NODE_ENV === "test" ? cb => cb() : queueMicrotask;
452
+ const waitForEventLoop = process.env.NODE_ENV === "test" || false ? cb => cb() : queueMicrotask;
376
453
  let counter = 0;
377
454
  const passThroughKeys = {
378
- subscribe: !0,
379
- _version: !0,
380
- _trackers: !0,
381
- $$typeof: !0,
382
- _listeners: !0,
383
- _enableTracking: !0
455
+ subscribe: true,
456
+ _version: true,
457
+ _trackers: true,
458
+ $$typeof: true,
459
+ _listeners: true,
460
+ _enableTracking: true
384
461
  };
385
462
  function getShouldDebug(storeInfo) {
386
463
  const info = {