@legendapp/state 3.0.0-beta.3 → 3.0.0-beta.31

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 (74) hide show
  1. package/.DS_Store +0 -0
  2. package/config/enableReactComponents.js +3 -1
  3. package/config/enableReactComponents.mjs +3 -1
  4. package/config/enableReactTracking.d.mts +2 -1
  5. package/config/enableReactTracking.d.ts +2 -1
  6. package/config/enableReactTracking.js +32 -13
  7. package/config/enableReactTracking.mjs +32 -13
  8. package/index.d.mts +38 -5
  9. package/index.d.ts +38 -5
  10. package/index.js +202 -31
  11. package/index.mjs +202 -31
  12. package/package.json +35 -1
  13. package/persist-plugins/async-storage.js +17 -9
  14. package/persist-plugins/async-storage.mjs +17 -9
  15. package/persist-plugins/expo-sqlite.d.mts +19 -0
  16. package/persist-plugins/expo-sqlite.d.ts +19 -0
  17. package/persist-plugins/expo-sqlite.js +72 -0
  18. package/persist-plugins/expo-sqlite.mjs +69 -0
  19. package/react-native.d.mts +4 -0
  20. package/react-native.d.ts +4 -0
  21. package/react-native.js +53 -0
  22. package/react-native.mjs +40 -0
  23. package/react-reactive/Components.d.mts +19 -0
  24. package/react-reactive/Components.d.ts +19 -0
  25. package/react-reactive/Components.js +53 -0
  26. package/react-reactive/Components.mjs +40 -0
  27. package/react-reactive/enableReactComponents.d.mts +3 -2
  28. package/react-reactive/enableReactComponents.d.ts +3 -2
  29. package/react-reactive/enableReactComponents.js +10 -3
  30. package/react-reactive/enableReactComponents.mjs +10 -3
  31. package/react-reactive/enableReactNativeComponents.d.mts +3 -20
  32. package/react-reactive/enableReactNativeComponents.d.ts +3 -20
  33. package/react-reactive/enableReactNativeComponents.js +8 -3
  34. package/react-reactive/enableReactNativeComponents.mjs +8 -3
  35. package/react-reactive/enableReactive.js +10 -3
  36. package/react-reactive/enableReactive.mjs +10 -3
  37. package/react-reactive/enableReactive.native.js +8 -3
  38. package/react-reactive/enableReactive.native.mjs +8 -3
  39. package/react-reactive/enableReactive.web.js +8 -3
  40. package/react-reactive/enableReactive.web.mjs +8 -3
  41. package/react-web.d.mts +6 -0
  42. package/react-web.d.ts +6 -0
  43. package/react-web.js +39 -0
  44. package/react-web.mjs +37 -0
  45. package/react.d.mts +41 -21
  46. package/react.d.ts +41 -21
  47. package/react.js +86 -63
  48. package/react.mjs +87 -65
  49. package/sync-plugins/crud.d.mts +24 -9
  50. package/sync-plugins/crud.d.ts +24 -9
  51. package/sync-plugins/crud.js +250 -116
  52. package/sync-plugins/crud.mjs +251 -117
  53. package/sync-plugins/firebase.d.mts +7 -3
  54. package/sync-plugins/firebase.d.ts +7 -3
  55. package/sync-plugins/firebase.js +4 -2
  56. package/sync-plugins/firebase.mjs +4 -2
  57. package/sync-plugins/keel.d.mts +12 -13
  58. package/sync-plugins/keel.d.ts +12 -13
  59. package/sync-plugins/keel.js +60 -52
  60. package/sync-plugins/keel.mjs +61 -48
  61. package/sync-plugins/supabase.d.mts +7 -3
  62. package/sync-plugins/supabase.d.ts +7 -3
  63. package/sync-plugins/supabase.js +90 -33
  64. package/sync-plugins/supabase.mjs +91 -34
  65. package/sync-plugins/tanstack-query.d.mts +3 -3
  66. package/sync-plugins/tanstack-query.d.ts +3 -3
  67. package/sync.d.mts +16 -8
  68. package/sync.d.ts +16 -8
  69. package/sync.js +324 -215
  70. package/sync.mjs +323 -215
  71. package/trace.js +5 -6
  72. package/trace.mjs +5 -6
  73. package/types/reactive-native.d.ts +19 -0
  74. package/types/reactive-web.d.ts +7 -0
package/index.js CHANGED
@@ -181,7 +181,7 @@ function setNodeValue(node, newValue) {
181
181
  parentNode.isSetting--;
182
182
  }
183
183
  }
184
- return { prevValue, newValue };
184
+ return { prevValue, newValue, parentValue };
185
185
  }
186
186
  var arrNodeKeys = [];
187
187
  function getNodeValue(node) {
@@ -257,6 +257,9 @@ function extractFunction(node, key, fnOrComputed) {
257
257
  function equals(a, b) {
258
258
  return a === b || isDate(a) && isDate(b) && +a === +b;
259
259
  }
260
+ function getKeys(obj, isArr, isMap2, isSet2) {
261
+ return isArr ? void 0 : obj ? isSet2 ? Array.from(obj) : isMap2 ? Array.from(obj.keys()) : Object.keys(obj) : [];
262
+ }
260
263
 
261
264
  // src/ObservableHint.ts
262
265
  function addSymbol(value, symbol) {
@@ -276,16 +279,19 @@ var ObservableHint = {
276
279
  },
277
280
  plain: function plainObject(value) {
278
281
  return addSymbol(value, symbolPlain);
282
+ },
283
+ function: function plainObject2(value) {
284
+ return addSymbol(value, symbolPlain);
279
285
  }
280
286
  };
281
287
 
282
288
  // src/helpers.ts
283
- function computeSelector(selector, e, retainObservable) {
289
+ function computeSelector(selector, getOptions, e, retainObservable) {
284
290
  let c = selector;
285
291
  if (!isObservable(c) && isFunction(c)) {
286
292
  c = e ? c(e) : c();
287
293
  }
288
- return isObservable(c) && !retainObservable ? c.get() : c;
294
+ return isObservable(c) && !retainObservable ? c.get(getOptions) : c;
289
295
  }
290
296
  function getObservableIndex(value$) {
291
297
  const node = getNode(value$);
@@ -384,7 +390,7 @@ function _mergeIntoObservable(target, source, levelsDeep) {
384
390
  const isSourceSet = isSet(source);
385
391
  if (isSourceSet && isSet(targetValue)) {
386
392
  target.set(/* @__PURE__ */ new Set([...source, ...targetValue]));
387
- } else if (isTargetObj && isObject(source) && !isEmpty(targetValue) || isTargetArr && targetValue.length > 0) {
393
+ } else if (isTargetObj && isObject(source) || isTargetArr && targetValue.length > 0) {
388
394
  const keys = isSourceMap || isSourceSet ? Array.from(source.keys()) : Object.keys(source);
389
395
  for (let i = 0; i < keys.length; i++) {
390
396
  const key = keys[i];
@@ -590,6 +596,7 @@ function computeChangesAtNode(changesInBatch, node, isFromPersist, isFromSync, v
590
596
  if (!isArraySubset(changes[0].path, change.path)) {
591
597
  changes.push(change);
592
598
  changeInBatch.level = Math.min(changeInBatch.level, level);
599
+ changeInBatch.whenOptimizedOnlyIf || (changeInBatch.whenOptimizedOnlyIf = whenOptimizedOnlyIf);
593
600
  }
594
601
  } else {
595
602
  changesInBatch.set(node, {
@@ -811,6 +818,109 @@ function linked(params, options) {
811
818
  return ret;
812
819
  }
813
820
 
821
+ // src/middleware.ts
822
+ var nodeMiddlewareHandlers = /* @__PURE__ */ new WeakMap();
823
+ var queuedNodes = [];
824
+ var queuedListeners = [];
825
+ var queuedTypes = [];
826
+ var queueSize = 0;
827
+ var isMicrotaskScheduled = false;
828
+ function registerMiddleware(node, type, handler) {
829
+ let handlersMap = nodeMiddlewareHandlers.get(node);
830
+ if (!handlersMap) {
831
+ handlersMap = /* @__PURE__ */ new Map();
832
+ nodeMiddlewareHandlers.set(node, handlersMap);
833
+ }
834
+ let handlers = handlersMap.get(type);
835
+ if (!handlers) {
836
+ handlers = /* @__PURE__ */ new Set();
837
+ handlersMap.set(type, handlers);
838
+ }
839
+ handlers.add(handler);
840
+ return () => {
841
+ const handlersMap2 = nodeMiddlewareHandlers.get(node);
842
+ if (!handlersMap2)
843
+ return;
844
+ const handlers2 = handlersMap2.get(type);
845
+ if (!handlers2)
846
+ return;
847
+ handlers2.delete(handler);
848
+ if (handlers2.size === 0) {
849
+ handlersMap2.delete(type);
850
+ if (handlersMap2.size === 0) {
851
+ nodeMiddlewareHandlers.delete(node);
852
+ }
853
+ }
854
+ };
855
+ }
856
+ function dispatchMiddlewareEvent(node, listener, type) {
857
+ const handlersMap = nodeMiddlewareHandlers.get(node);
858
+ if (!handlersMap || !handlersMap.has(type)) {
859
+ return;
860
+ }
861
+ const handlers = handlersMap.get(type);
862
+ if (!handlers || handlers.size === 0) {
863
+ return;
864
+ }
865
+ queuedNodes[queueSize] = node;
866
+ queuedListeners[queueSize] = listener;
867
+ queuedTypes[queueSize] = type;
868
+ queueSize++;
869
+ if (!isMicrotaskScheduled) {
870
+ isMicrotaskScheduled = true;
871
+ queueMicrotask(processQueuedEvents);
872
+ }
873
+ }
874
+ var eventObj = {
875
+ type: "listener-added",
876
+ node: null,
877
+ listener: void 0,
878
+ timestamp: 0
879
+ };
880
+ function processQueuedEvents() {
881
+ isMicrotaskScheduled = false;
882
+ const timestamp = typeof performance !== "undefined" ? performance.now() : Date.now();
883
+ eventObj.timestamp = timestamp;
884
+ for (let i = 0; i < queueSize; i++) {
885
+ const node = queuedNodes[i];
886
+ const listener = queuedListeners[i];
887
+ const type = queuedTypes[i];
888
+ const handlersMap = nodeMiddlewareHandlers.get(node);
889
+ if (!handlersMap)
890
+ continue;
891
+ const handlers = handlersMap.get(type);
892
+ if (!handlers || handlers.size === 0)
893
+ continue;
894
+ const nodeListeners = node.listeners;
895
+ const nodeListenersImmediate = node.listenersImmediate;
896
+ if (!nodeListeners && !nodeListenersImmediate) {
897
+ continue;
898
+ }
899
+ let isValid = false;
900
+ if (type === "listener-added") {
901
+ isValid = !!(nodeListeners == null ? void 0 : nodeListeners.has(listener)) || !!(nodeListenersImmediate == null ? void 0 : nodeListenersImmediate.has(listener));
902
+ } else if (type === "listener-removed") {
903
+ isValid = !(nodeListeners == null ? void 0 : nodeListeners.has(listener)) && !(nodeListenersImmediate == null ? void 0 : nodeListenersImmediate.has(listener));
904
+ } else {
905
+ isValid = !(nodeListeners == null ? void 0 : nodeListeners.size) && !(nodeListenersImmediate == null ? void 0 : nodeListenersImmediate.size);
906
+ }
907
+ if (isValid) {
908
+ eventObj.type = type;
909
+ eventObj.node = node;
910
+ eventObj.listener = listener;
911
+ const iterableHandlers = Array.from(handlers);
912
+ for (let j = 0; j < iterableHandlers.length; j++) {
913
+ try {
914
+ iterableHandlers[j](eventObj);
915
+ } catch (error) {
916
+ console.error(`Error in middleware handler for ${type}:`, error);
917
+ }
918
+ }
919
+ }
920
+ }
921
+ queueSize = 0;
922
+ }
923
+
814
924
  // src/onChange.ts
815
925
  function onChange(node, callback, options = {}, fromLinks) {
816
926
  var _a;
@@ -881,6 +991,7 @@ function onChange(node, callback, options = {}, fromLinks) {
881
991
  pathParent = [parent.key, ...pathParent];
882
992
  parent = parent.parent;
883
993
  }
994
+ dispatchMiddlewareEvent(node, listener, "listener-added");
884
995
  return () => {
885
996
  listeners.delete(listener);
886
997
  extraDisposes == null ? void 0 : extraDisposes.forEach((fn) => fn());
@@ -889,6 +1000,10 @@ function onChange(node, callback, options = {}, fromLinks) {
889
1000
  parent2.numListenersRecursive--;
890
1001
  parent2 = parent2.parent;
891
1002
  }
1003
+ dispatchMiddlewareEvent(node, listener, "listener-removed");
1004
+ if (listeners.size === 0) {
1005
+ dispatchMiddlewareEvent(node, void 0, "listeners-cleared");
1006
+ }
892
1007
  };
893
1008
  }
894
1009
  function createCb(linkedFromNode, path, callback) {
@@ -969,13 +1084,13 @@ function updateTracking(node, track) {
969
1084
  }
970
1085
 
971
1086
  // src/trackSelector.ts
972
- function trackSelector(selector, update, observeEvent, observeOptions, createResubscribe) {
1087
+ function trackSelector(selector, update, getOptions, observeEvent, observeOptions, createResubscribe) {
973
1088
  var _a;
974
1089
  let dispose;
975
1090
  let resubscribe;
976
1091
  let updateFn = update;
977
1092
  beginTracking();
978
- const value = selector ? computeSelector(selector, observeEvent, observeOptions == null ? void 0 : observeOptions.fromComputed) : selector;
1093
+ const value = selector ? computeSelector(selector, getOptions, observeEvent, observeOptions == null ? void 0 : observeOptions.fromComputed) : selector;
979
1094
  const tracker = tracking.current;
980
1095
  const nodes = tracker.nodes;
981
1096
  endTracking();
@@ -1023,7 +1138,11 @@ function observe(selectorOrRun, reactionOrOptions, options) {
1023
1138
  beginBatch();
1024
1139
  delete e.value;
1025
1140
  dispose == null ? void 0 : dispose();
1026
- const { dispose: _dispose, value, nodes } = trackSelector(selectorOrRun, update, e, options);
1141
+ const {
1142
+ dispose: _dispose,
1143
+ value,
1144
+ nodes
1145
+ } = trackSelector(selectorOrRun, update, void 0, e, options);
1027
1146
  dispose = _dispose;
1028
1147
  e.value = value;
1029
1148
  e.nodes = nodes;
@@ -1068,10 +1187,13 @@ function _when(predicate, effect, checkReady) {
1068
1187
  let isOk = true;
1069
1188
  if (isArray(ret)) {
1070
1189
  for (let i = 0; i < ret.length; i++) {
1071
- if (isObservable(ret[i])) {
1072
- ret[i] = computeSelector(ret[i]);
1190
+ let item = ret[i];
1191
+ if (isObservable(item)) {
1192
+ item = computeSelector(item);
1193
+ } else if (isFunction(item)) {
1194
+ item = item();
1073
1195
  }
1074
- isOk = isOk && !!(checkReady ? isObservableValueReady(ret[i]) : ret[i]);
1196
+ isOk = isOk && !!(checkReady ? isObservableValueReady(item) : item);
1075
1197
  }
1076
1198
  } else {
1077
1199
  isOk = checkReady ? isObservableValueReady(ret) : ret;
@@ -1170,9 +1292,6 @@ function collectionSetter(node, target, prop, ...args) {
1170
1292
  return ret;
1171
1293
  }
1172
1294
  }
1173
- function getKeys(obj, isArr, isMap2) {
1174
- return isArr ? void 0 : obj ? isMap2 ? Array.from(obj.keys()) : Object.keys(obj) : [];
1175
- }
1176
1295
  function updateNodes(parent, obj, prevValue) {
1177
1296
  var _a, _b, _c;
1178
1297
  if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && typeof __devUpdateNodes !== "undefined" && isObject(obj)) {
@@ -1201,9 +1320,11 @@ function updateNodes(parent, obj, prevValue) {
1201
1320
  let prevChildrenById;
1202
1321
  let moved;
1203
1322
  const isCurMap = isMap(obj);
1323
+ const isCurSet = isSet(obj);
1204
1324
  const isPrevMap = isMap(prevValue);
1205
- const keys = getKeys(obj, isArr, isCurMap);
1206
- const keysPrev = getKeys(prevValue, isArr, isPrevMap);
1325
+ const isPrevSet = isSet(prevValue);
1326
+ const keys = getKeys(obj, isArr, isCurMap, isCurSet);
1327
+ const keysPrev = getKeys(prevValue, isArr, isPrevMap, isPrevSet);
1207
1328
  const length = ((_a = keys || obj) == null ? void 0 : _a.length) || 0;
1208
1329
  const lengthPrev = ((_b = keysPrev || prevValue) == null ? void 0 : _b.length) || 0;
1209
1330
  let idField;
@@ -1553,7 +1674,9 @@ var proxyHandler = {
1553
1674
  if (isObservable(thisArg)) {
1554
1675
  thisArg = thisArg.peek();
1555
1676
  }
1556
- return Reflect.apply(target.lazyFn || target, thisArg, argArray);
1677
+ const fnRaw = getNodeValue(target);
1678
+ const fn = isFunction(fnRaw) ? fnRaw : target.lazyFn || target;
1679
+ return Reflect.apply(fn, thisArg, argArray);
1557
1680
  }
1558
1681
  };
1559
1682
  function set(node, newValue) {
@@ -1585,8 +1708,8 @@ function setKey(node, key, newValue, level) {
1585
1708
  if (isObservable(newValue)) {
1586
1709
  setToObservable(childNode, newValue);
1587
1710
  } else {
1588
- const { newValue: savedValue, prevValue } = setNodeValue(childNode, newValue);
1589
- const isPrim = isPrimitive(savedValue) || savedValue instanceof Date;
1711
+ const { newValue: savedValue, prevValue, parentValue } = setNodeValue(childNode, newValue);
1712
+ const isPrim = isPrimitive(prevValue) || prevValue instanceof Date || isPrimitive(savedValue) || savedValue instanceof Date;
1590
1713
  if (!isPrim) {
1591
1714
  let parent = childNode;
1592
1715
  do {
@@ -1597,7 +1720,17 @@ function setKey(node, key, newValue, level) {
1597
1720
  const notify2 = !equals(savedValue, prevValue);
1598
1721
  const forceNotify = !notify2 && childNode.isComputing && !isPrim;
1599
1722
  if (notify2 || forceNotify) {
1600
- updateNodesAndNotify(node, savedValue, prevValue, childNode, isPrim, isRoot, level, forceNotify);
1723
+ updateNodesAndNotify(
1724
+ node,
1725
+ savedValue,
1726
+ prevValue,
1727
+ childNode,
1728
+ parentValue,
1729
+ isPrim,
1730
+ isRoot,
1731
+ level,
1732
+ forceNotify
1733
+ );
1601
1734
  }
1602
1735
  extractFunctionOrComputed(node, key, savedValue);
1603
1736
  }
@@ -1652,7 +1785,7 @@ function handlerMapSet(node, p, value) {
1652
1785
  } else if (isFunction(vProp)) {
1653
1786
  return function(a, b, c) {
1654
1787
  const l = arguments.length;
1655
- const valueMap = value;
1788
+ const valueMapOrSet = value;
1656
1789
  if (p === "get") {
1657
1790
  if (l > 0 && typeof a !== "boolean" && a !== optimized) {
1658
1791
  return getProxy(node, a);
@@ -1666,14 +1799,14 @@ function handlerMapSet(node, p, value) {
1666
1799
  return getProxy(node);
1667
1800
  } else if (p === "delete") {
1668
1801
  if (l > 0) {
1669
- const prev = value.get ? valueMap.get(a) : a;
1802
+ const prev = value.get ? valueMapOrSet.get(a) : a;
1670
1803
  deleteFn(node, a);
1671
1804
  return prev !== void 0;
1672
1805
  }
1673
1806
  } else if (p === "clear") {
1674
- const prev = new Map(valueMap);
1675
- const size = valueMap.size;
1676
- valueMap.clear();
1807
+ const prev = isSet(valueMapOrSet) ? new Set(valueMapOrSet) : new Map(valueMapOrSet);
1808
+ const size = valueMapOrSet.size;
1809
+ valueMapOrSet.clear();
1677
1810
  if (size) {
1678
1811
  updateNodesAndNotify(node, value, prev);
1679
1812
  }
@@ -1704,7 +1837,7 @@ function handlerMapSet(node, p, value) {
1704
1837
  };
1705
1838
  }
1706
1839
  }
1707
- function updateNodesAndNotify(node, newValue, prevValue, childNode, isPrim, isRoot, level, forceNotify) {
1840
+ function updateNodesAndNotify(node, newValue, prevValue, childNode, parentValue, isPrim, isRoot, level, forceNotify) {
1708
1841
  if (!childNode)
1709
1842
  childNode = node;
1710
1843
  beginBatch();
@@ -1713,15 +1846,29 @@ function updateNodesAndNotify(node, newValue, prevValue, childNode, isPrim, isRo
1713
1846
  }
1714
1847
  let hasADiff = forceNotify || isPrim;
1715
1848
  let whenOptimizedOnlyIf = false;
1849
+ let valueAsArr;
1850
+ let valueAsMap;
1716
1851
  if (!isPrim || prevValue && !isPrimitive(prevValue)) {
1717
1852
  if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && typeof __devUpdateNodes !== "undefined") {
1718
1853
  __devUpdateNodes.clear();
1719
1854
  }
1720
1855
  hasADiff = hasADiff || updateNodes(childNode, newValue, prevValue);
1721
1856
  if (isArray(newValue)) {
1722
- whenOptimizedOnlyIf = (newValue == null ? void 0 : newValue.length) !== (prevValue == null ? void 0 : prevValue.length);
1857
+ valueAsArr = newValue;
1858
+ } else if (isMap(newValue) || isSet(newValue)) {
1859
+ valueAsMap = newValue;
1723
1860
  }
1724
1861
  }
1862
+ if (isArray(parentValue)) {
1863
+ valueAsArr = parentValue;
1864
+ } else if (isMap(parentValue) || isSet(parentValue)) {
1865
+ valueAsMap = parentValue;
1866
+ }
1867
+ if (valueAsArr) {
1868
+ whenOptimizedOnlyIf = (valueAsArr == null ? void 0 : valueAsArr.length) !== (prevValue == null ? void 0 : prevValue.length);
1869
+ } else if (valueAsMap) {
1870
+ whenOptimizedOnlyIf = (valueAsMap == null ? void 0 : valueAsMap.size) !== (prevValue == null ? void 0 : prevValue.size);
1871
+ }
1725
1872
  if (isPrim || !newValue || isEmpty(newValue) && !isEmpty(prevValue) ? newValue !== prevValue : hasADiff) {
1726
1873
  notify(
1727
1874
  isPrim && isRoot ? node : childNode,
@@ -1788,7 +1935,7 @@ function peek(node) {
1788
1935
  }
1789
1936
  var isFlushing = false;
1790
1937
  function peekInternal(node, activateRecursive) {
1791
- var _a;
1938
+ var _a, _b;
1792
1939
  isFlushing = true;
1793
1940
  if (activateRecursive && ((_a = node.dirtyChildren) == null ? void 0 : _a.size)) {
1794
1941
  const dirty = Array.from(node.dirtyChildren);
@@ -1803,7 +1950,10 @@ function peekInternal(node, activateRecursive) {
1803
1950
  }
1804
1951
  isFlushing = false;
1805
1952
  let value = getNodeValue(node);
1806
- if (!globalState.isLoadingLocal) {
1953
+ if (((_b = node.parent) == null ? void 0 : _b.isPlain) || isHintPlain(value)) {
1954
+ node.isPlain = true;
1955
+ }
1956
+ if (!node.root.isLoadingLocal && !node.isPlain) {
1807
1957
  value = checkLazy(node, value, !!activateRecursive);
1808
1958
  }
1809
1959
  return value;
@@ -1857,11 +2007,14 @@ function checkProperty(value, key) {
1857
2007
  return value[key];
1858
2008
  }
1859
2009
  }
1860
- function reactivateNode(node, lazyFn) {
2010
+ function deactivateNode(node) {
1861
2011
  var _a, _b;
1862
2012
  (_a = node.activatedObserveDispose) == null ? void 0 : _a.call(node);
1863
2013
  (_b = node.linkedToNodeDispose) == null ? void 0 : _b.call(node);
1864
2014
  node.activatedObserveDispose = node.linkedToNodeDispose = node.linkedToNode = void 0;
2015
+ }
2016
+ function reactivateNode(node, lazyFn) {
2017
+ deactivateNode(node);
1865
2018
  node.lazyFn = lazyFn;
1866
2019
  node.lazy = true;
1867
2020
  }
@@ -1909,7 +2062,7 @@ function activateNodeFunction(node, lazyFn) {
1909
2062
  node.dirtyFn = refreshFn;
1910
2063
  globalState.dirtyNodes.add(node);
1911
2064
  }
1912
- node.activatedObserveDispose = observe(
2065
+ const observeDispose = observe(
1913
2066
  () => {
1914
2067
  var _a, _b, _c, _d;
1915
2068
  if (isFirst) {
@@ -1963,6 +2116,9 @@ function activateNodeFunction(node, lazyFn) {
1963
2116
  value = (_d = (_c = activated2.get) == null ? void 0 : _c.call(activated2)) != null ? _d : activated2.initial;
1964
2117
  }
1965
2118
  }
2119
+ if (ignoreThisUpdate) {
2120
+ activatedValue = value;
2121
+ }
1966
2122
  wasPromise = wasPromise || isPromise(value);
1967
2123
  return value;
1968
2124
  },
@@ -2009,6 +2165,10 @@ function activateNodeFunction(node, lazyFn) {
2009
2165
  },
2010
2166
  { fromComputed: true }
2011
2167
  );
2168
+ node.activatedObserveDispose = () => {
2169
+ observeDispose == null ? void 0 : observeDispose();
2170
+ disposes.forEach((fn) => fn());
2171
+ };
2012
2172
  return activatedValue;
2013
2173
  }
2014
2174
  function activateNodeBase(node, value) {
@@ -2274,7 +2434,14 @@ function syncState(obs) {
2274
2434
  syncCount: 0,
2275
2435
  resetPersistence: void 0,
2276
2436
  reset: () => Promise.resolve(),
2277
- sync: () => Promise.resolve(),
2437
+ sync: () => {
2438
+ var _a;
2439
+ obs.peek();
2440
+ if ((_a = node.state) == null ? void 0 : _a.isGetting.peek()) {
2441
+ return when(node.state.isLoaded);
2442
+ }
2443
+ return Promise.resolve();
2444
+ },
2278
2445
  getPendingChanges: () => ({}),
2279
2446
  // TODOV3 remove
2280
2447
  clearPersist: void 0
@@ -2288,10 +2455,12 @@ function syncState(obs) {
2288
2455
  var internal = {
2289
2456
  createPreviousHandler,
2290
2457
  clone,
2458
+ deactivateNode,
2291
2459
  deepMerge,
2292
2460
  ensureNodeValue,
2293
2461
  findIDKey,
2294
2462
  get,
2463
+ getKeys,
2295
2464
  getNode,
2296
2465
  getNodeValue,
2297
2466
  getPathType,
@@ -2304,6 +2473,8 @@ var internal = {
2304
2473
  observableFns,
2305
2474
  optimized,
2306
2475
  peek,
2476
+ reactivateNode,
2477
+ registerMiddleware,
2307
2478
  safeParse,
2308
2479
  safeStringify,
2309
2480
  set,