@legendapp/state 3.0.0-beta.4 → 3.0.0-beta.41
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.
- package/.DS_Store +0 -0
- package/README.md +2 -2
- package/config/enableReactComponents.js +3 -1
- package/config/enableReactComponents.mjs +3 -1
- package/config/enableReactTracking.d.mts +2 -1
- package/config/enableReactTracking.d.ts +2 -1
- package/config/enableReactTracking.js +32 -13
- package/config/enableReactTracking.mjs +32 -13
- package/index.d.mts +46 -8
- package/index.d.ts +46 -8
- package/index.js +267 -75
- package/index.mjs +267 -75
- package/package.json +35 -1
- package/persist-plugins/async-storage.js +17 -9
- package/persist-plugins/async-storage.mjs +17 -9
- package/persist-plugins/expo-sqlite.d.mts +19 -0
- package/persist-plugins/expo-sqlite.d.ts +19 -0
- package/persist-plugins/expo-sqlite.js +72 -0
- package/persist-plugins/expo-sqlite.mjs +69 -0
- package/persist-plugins/indexeddb.js +13 -3
- package/persist-plugins/indexeddb.mjs +13 -3
- package/react-native.d.mts +4 -0
- package/react-native.d.ts +4 -0
- package/react-native.js +53 -0
- package/react-native.mjs +40 -0
- package/react-reactive/Components.d.mts +19 -0
- package/react-reactive/Components.d.ts +19 -0
- package/react-reactive/Components.js +53 -0
- package/react-reactive/Components.mjs +40 -0
- package/react-reactive/enableReactComponents.d.mts +3 -2
- package/react-reactive/enableReactComponents.d.ts +3 -2
- package/react-reactive/enableReactComponents.js +10 -3
- package/react-reactive/enableReactComponents.mjs +10 -3
- package/react-reactive/enableReactNativeComponents.d.mts +3 -20
- package/react-reactive/enableReactNativeComponents.d.ts +3 -20
- package/react-reactive/enableReactNativeComponents.js +8 -3
- package/react-reactive/enableReactNativeComponents.mjs +8 -3
- package/react-reactive/enableReactive.js +10 -3
- package/react-reactive/enableReactive.mjs +10 -3
- package/react-reactive/enableReactive.native.js +8 -3
- package/react-reactive/enableReactive.native.mjs +8 -3
- package/react-reactive/enableReactive.web.js +8 -3
- package/react-reactive/enableReactive.web.mjs +8 -3
- package/react-web.d.mts +7 -0
- package/react-web.d.ts +7 -0
- package/react-web.js +39 -0
- package/react-web.mjs +37 -0
- package/react.d.mts +59 -26
- package/react.d.ts +59 -26
- package/react.js +136 -87
- package/react.mjs +135 -89
- package/sync-plugins/crud.d.mts +24 -9
- package/sync-plugins/crud.d.ts +24 -9
- package/sync-plugins/crud.js +267 -123
- package/sync-plugins/crud.mjs +268 -124
- package/sync-plugins/firebase.d.mts +7 -3
- package/sync-plugins/firebase.d.ts +7 -3
- package/sync-plugins/firebase.js +214 -64
- package/sync-plugins/firebase.mjs +215 -65
- package/sync-plugins/keel.d.mts +12 -13
- package/sync-plugins/keel.d.ts +12 -13
- package/sync-plugins/keel.js +60 -52
- package/sync-plugins/keel.mjs +61 -48
- package/sync-plugins/supabase.d.mts +10 -5
- package/sync-plugins/supabase.d.ts +10 -5
- package/sync-plugins/supabase.js +90 -33
- package/sync-plugins/supabase.mjs +91 -34
- package/sync-plugins/tanstack-query.d.mts +3 -3
- package/sync-plugins/tanstack-query.d.ts +3 -3
- package/sync-plugins/tanstack-query.js +1 -1
- package/sync-plugins/tanstack-query.mjs +1 -1
- package/sync.d.mts +17 -8
- package/sync.d.ts +17 -8
- package/sync.js +448 -307
- package/sync.mjs +446 -307
- package/trace.js +5 -6
- package/trace.mjs +5 -6
- package/types/reactive-native.d.ts +19 -0
- package/types/reactive-web.d.ts +7 -0
package/index.js
CHANGED
|
@@ -146,6 +146,16 @@ function isEvent(value$) {
|
|
|
146
146
|
var _a;
|
|
147
147
|
return value$ && ((_a = value$[symbolGetNode]) == null ? void 0 : _a.isEvent);
|
|
148
148
|
}
|
|
149
|
+
function setNewValue(parentValue, key, newValue, useSetFn, useMapFn) {
|
|
150
|
+
if (useSetFn) {
|
|
151
|
+
parentValue.add(newValue);
|
|
152
|
+
} else if (useMapFn) {
|
|
153
|
+
parentValue.set(key, newValue);
|
|
154
|
+
} else {
|
|
155
|
+
parentValue[key] = newValue;
|
|
156
|
+
}
|
|
157
|
+
return newValue;
|
|
158
|
+
}
|
|
149
159
|
function setNodeValue(node, newValue) {
|
|
150
160
|
var _a;
|
|
151
161
|
const parentNode = (_a = node.parent) != null ? _a : node;
|
|
@@ -169,19 +179,13 @@ function setNodeValue(node, newValue) {
|
|
|
169
179
|
delete parentValue[key];
|
|
170
180
|
}
|
|
171
181
|
} else {
|
|
172
|
-
|
|
173
|
-
parentValue.add(newValue);
|
|
174
|
-
} else if (useMapFn) {
|
|
175
|
-
parentValue.set(key, newValue);
|
|
176
|
-
} else {
|
|
177
|
-
parentValue[key] = newValue;
|
|
178
|
-
}
|
|
182
|
+
setNewValue(parentValue, key, newValue, useSetFn, useMapFn);
|
|
179
183
|
}
|
|
180
184
|
} finally {
|
|
181
185
|
parentNode.isSetting--;
|
|
182
186
|
}
|
|
183
187
|
}
|
|
184
|
-
return { prevValue, newValue };
|
|
188
|
+
return { prevValue, newValue, parentValue };
|
|
185
189
|
}
|
|
186
190
|
var arrNodeKeys = [];
|
|
187
191
|
function getNodeValue(node) {
|
|
@@ -194,7 +198,7 @@ function getNodeValue(node) {
|
|
|
194
198
|
let child = node.root._;
|
|
195
199
|
for (let i = count - 1; child && i >= 0; i--) {
|
|
196
200
|
const key = arrNodeKeys[i];
|
|
197
|
-
child = key !== "size" &&
|
|
201
|
+
child = key !== "size" && isMap(child) ? child.get(key) : child[key];
|
|
198
202
|
}
|
|
199
203
|
return child;
|
|
200
204
|
}
|
|
@@ -229,7 +233,9 @@ function ensureNodeValue(node) {
|
|
|
229
233
|
if (!value || isFunction(value)) {
|
|
230
234
|
if (isChildNode(node)) {
|
|
231
235
|
const parent = ensureNodeValue(node.parent);
|
|
232
|
-
|
|
236
|
+
const useSetFn = isSet(parent);
|
|
237
|
+
const useMapFn = isMap(parent);
|
|
238
|
+
value = setNewValue(parent, node.key, {}, useSetFn, useMapFn);
|
|
233
239
|
} else {
|
|
234
240
|
value = node.root._ = {};
|
|
235
241
|
}
|
|
@@ -257,6 +263,9 @@ function extractFunction(node, key, fnOrComputed) {
|
|
|
257
263
|
function equals(a, b) {
|
|
258
264
|
return a === b || isDate(a) && isDate(b) && +a === +b;
|
|
259
265
|
}
|
|
266
|
+
function getKeys(obj, isArr, isMap2, isSet2) {
|
|
267
|
+
return isArr ? void 0 : obj ? isSet2 ? Array.from(obj) : isMap2 ? Array.from(obj.keys()) : Object.keys(obj) : [];
|
|
268
|
+
}
|
|
260
269
|
|
|
261
270
|
// src/ObservableHint.ts
|
|
262
271
|
function addSymbol(value, symbol) {
|
|
@@ -276,16 +285,27 @@ var ObservableHint = {
|
|
|
276
285
|
},
|
|
277
286
|
plain: function plainObject(value) {
|
|
278
287
|
return addSymbol(value, symbolPlain);
|
|
288
|
+
},
|
|
289
|
+
function: function plainObject2(value) {
|
|
290
|
+
return addSymbol(value, symbolPlain);
|
|
279
291
|
}
|
|
280
292
|
};
|
|
281
293
|
|
|
294
|
+
// src/checkPlain.ts
|
|
295
|
+
function checkPlain(node, value) {
|
|
296
|
+
var _a;
|
|
297
|
+
if (!node.isPlain && (((_a = node.parent) == null ? void 0 : _a.isPlain) || isHintPlain(value))) {
|
|
298
|
+
node.isPlain = true;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
282
302
|
// src/helpers.ts
|
|
283
|
-
function computeSelector(selector, e, retainObservable) {
|
|
303
|
+
function computeSelector(selector, getOptions, e, retainObservable) {
|
|
284
304
|
let c = selector;
|
|
285
305
|
if (!isObservable(c) && isFunction(c)) {
|
|
286
306
|
c = e ? c(e) : c();
|
|
287
307
|
}
|
|
288
|
-
return isObservable(c) && !retainObservable ? c.get() : c;
|
|
308
|
+
return isObservable(c) && !retainObservable ? c.get(getOptions) : c;
|
|
289
309
|
}
|
|
290
310
|
function getObservableIndex(value$) {
|
|
291
311
|
const node = getNode(value$);
|
|
@@ -384,7 +404,7 @@ function _mergeIntoObservable(target, source, levelsDeep) {
|
|
|
384
404
|
const isSourceSet = isSet(source);
|
|
385
405
|
if (isSourceSet && isSet(targetValue)) {
|
|
386
406
|
target.set(/* @__PURE__ */ new Set([...source, ...targetValue]));
|
|
387
|
-
} else if (isTargetObj && isObject(source)
|
|
407
|
+
} else if (isTargetObj && isObject(source) || isTargetArr && targetValue.length > 0) {
|
|
388
408
|
const keys = isSourceMap || isSourceSet ? Array.from(source.keys()) : Object.keys(source);
|
|
389
409
|
for (let i = 0; i < keys.length; i++) {
|
|
390
410
|
const key = keys[i];
|
|
@@ -590,6 +610,7 @@ function computeChangesAtNode(changesInBatch, node, isFromPersist, isFromSync, v
|
|
|
590
610
|
if (!isArraySubset(changes[0].path, change.path)) {
|
|
591
611
|
changes.push(change);
|
|
592
612
|
changeInBatch.level = Math.min(changeInBatch.level, level);
|
|
613
|
+
changeInBatch.whenOptimizedOnlyIf || (changeInBatch.whenOptimizedOnlyIf = whenOptimizedOnlyIf);
|
|
593
614
|
}
|
|
594
615
|
} else {
|
|
595
616
|
changesInBatch.set(node, {
|
|
@@ -604,37 +625,39 @@ function computeChangesAtNode(changesInBatch, node, isFromPersist, isFromSync, v
|
|
|
604
625
|
}
|
|
605
626
|
}
|
|
606
627
|
function computeChangesRecursive(changesInBatch, node, loading, remote, value, path, pathTypes, valueAtPath, prevAtPath, immediate, level, whenOptimizedOnlyIf) {
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
const
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
628
|
+
if (node.numListenersRecursive > 0) {
|
|
629
|
+
computeChangesAtNode(
|
|
630
|
+
changesInBatch,
|
|
631
|
+
node,
|
|
632
|
+
loading,
|
|
633
|
+
remote,
|
|
634
|
+
value,
|
|
635
|
+
path,
|
|
636
|
+
pathTypes,
|
|
637
|
+
valueAtPath,
|
|
638
|
+
prevAtPath,
|
|
639
|
+
immediate,
|
|
640
|
+
level,
|
|
641
|
+
whenOptimizedOnlyIf
|
|
642
|
+
);
|
|
643
|
+
if (node.linkedFromNodes) {
|
|
644
|
+
for (const linkedFromNode of node.linkedFromNodes) {
|
|
645
|
+
const childNode = getNodeAtPath(linkedFromNode, path);
|
|
646
|
+
computeChangesRecursive(
|
|
647
|
+
changesInBatch,
|
|
648
|
+
childNode,
|
|
649
|
+
loading,
|
|
650
|
+
remote,
|
|
651
|
+
valueAtPath,
|
|
652
|
+
[],
|
|
653
|
+
[],
|
|
654
|
+
valueAtPath,
|
|
655
|
+
prevAtPath,
|
|
656
|
+
immediate,
|
|
657
|
+
0,
|
|
658
|
+
whenOptimizedOnlyIf
|
|
659
|
+
);
|
|
660
|
+
}
|
|
638
661
|
}
|
|
639
662
|
}
|
|
640
663
|
if (node.parent) {
|
|
@@ -811,6 +834,109 @@ function linked(params, options) {
|
|
|
811
834
|
return ret;
|
|
812
835
|
}
|
|
813
836
|
|
|
837
|
+
// src/middleware.ts
|
|
838
|
+
var nodeMiddlewareHandlers = /* @__PURE__ */ new WeakMap();
|
|
839
|
+
var queuedNodes = [];
|
|
840
|
+
var queuedListeners = [];
|
|
841
|
+
var queuedTypes = [];
|
|
842
|
+
var queueSize = 0;
|
|
843
|
+
var isMicrotaskScheduled = false;
|
|
844
|
+
function registerMiddleware(node, type, handler) {
|
|
845
|
+
let handlersMap = nodeMiddlewareHandlers.get(node);
|
|
846
|
+
if (!handlersMap) {
|
|
847
|
+
handlersMap = /* @__PURE__ */ new Map();
|
|
848
|
+
nodeMiddlewareHandlers.set(node, handlersMap);
|
|
849
|
+
}
|
|
850
|
+
let handlers = handlersMap.get(type);
|
|
851
|
+
if (!handlers) {
|
|
852
|
+
handlers = /* @__PURE__ */ new Set();
|
|
853
|
+
handlersMap.set(type, handlers);
|
|
854
|
+
}
|
|
855
|
+
handlers.add(handler);
|
|
856
|
+
return () => {
|
|
857
|
+
const handlersMap2 = nodeMiddlewareHandlers.get(node);
|
|
858
|
+
if (!handlersMap2)
|
|
859
|
+
return;
|
|
860
|
+
const handlers2 = handlersMap2.get(type);
|
|
861
|
+
if (!handlers2)
|
|
862
|
+
return;
|
|
863
|
+
handlers2.delete(handler);
|
|
864
|
+
if (handlers2.size === 0) {
|
|
865
|
+
handlersMap2.delete(type);
|
|
866
|
+
if (handlersMap2.size === 0) {
|
|
867
|
+
nodeMiddlewareHandlers.delete(node);
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
};
|
|
871
|
+
}
|
|
872
|
+
function dispatchMiddlewareEvent(node, listener, type) {
|
|
873
|
+
const handlersMap = nodeMiddlewareHandlers.get(node);
|
|
874
|
+
if (!handlersMap || !handlersMap.has(type)) {
|
|
875
|
+
return;
|
|
876
|
+
}
|
|
877
|
+
const handlers = handlersMap.get(type);
|
|
878
|
+
if (!handlers || handlers.size === 0) {
|
|
879
|
+
return;
|
|
880
|
+
}
|
|
881
|
+
queuedNodes[queueSize] = node;
|
|
882
|
+
queuedListeners[queueSize] = listener;
|
|
883
|
+
queuedTypes[queueSize] = type;
|
|
884
|
+
queueSize++;
|
|
885
|
+
if (!isMicrotaskScheduled) {
|
|
886
|
+
isMicrotaskScheduled = true;
|
|
887
|
+
queueMicrotask(processQueuedEvents);
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
var eventObj = {
|
|
891
|
+
type: "listener-added",
|
|
892
|
+
node: null,
|
|
893
|
+
listener: void 0,
|
|
894
|
+
timestamp: 0
|
|
895
|
+
};
|
|
896
|
+
function processQueuedEvents() {
|
|
897
|
+
isMicrotaskScheduled = false;
|
|
898
|
+
const timestamp = typeof performance !== "undefined" ? performance.now() : Date.now();
|
|
899
|
+
eventObj.timestamp = timestamp;
|
|
900
|
+
for (let i = 0; i < queueSize; i++) {
|
|
901
|
+
const node = queuedNodes[i];
|
|
902
|
+
const listener = queuedListeners[i];
|
|
903
|
+
const type = queuedTypes[i];
|
|
904
|
+
const handlersMap = nodeMiddlewareHandlers.get(node);
|
|
905
|
+
if (!handlersMap)
|
|
906
|
+
continue;
|
|
907
|
+
const handlers = handlersMap.get(type);
|
|
908
|
+
if (!handlers || handlers.size === 0)
|
|
909
|
+
continue;
|
|
910
|
+
const nodeListeners = node.listeners;
|
|
911
|
+
const nodeListenersImmediate = node.listenersImmediate;
|
|
912
|
+
if (!nodeListeners && !nodeListenersImmediate) {
|
|
913
|
+
continue;
|
|
914
|
+
}
|
|
915
|
+
let isValid = false;
|
|
916
|
+
if (type === "listener-added") {
|
|
917
|
+
isValid = !!(nodeListeners == null ? void 0 : nodeListeners.has(listener)) || !!(nodeListenersImmediate == null ? void 0 : nodeListenersImmediate.has(listener));
|
|
918
|
+
} else if (type === "listener-removed") {
|
|
919
|
+
isValid = !(nodeListeners == null ? void 0 : nodeListeners.has(listener)) && !(nodeListenersImmediate == null ? void 0 : nodeListenersImmediate.has(listener));
|
|
920
|
+
} else {
|
|
921
|
+
isValid = !(nodeListeners == null ? void 0 : nodeListeners.size) && !(nodeListenersImmediate == null ? void 0 : nodeListenersImmediate.size);
|
|
922
|
+
}
|
|
923
|
+
if (isValid) {
|
|
924
|
+
eventObj.type = type;
|
|
925
|
+
eventObj.node = node;
|
|
926
|
+
eventObj.listener = listener;
|
|
927
|
+
const iterableHandlers = Array.from(handlers);
|
|
928
|
+
for (let j = 0; j < iterableHandlers.length; j++) {
|
|
929
|
+
try {
|
|
930
|
+
iterableHandlers[j](eventObj);
|
|
931
|
+
} catch (error) {
|
|
932
|
+
console.error(`Error in middleware handler for ${type}:`, error);
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
queueSize = 0;
|
|
938
|
+
}
|
|
939
|
+
|
|
814
940
|
// src/onChange.ts
|
|
815
941
|
function onChange(node, callback, options = {}, fromLinks) {
|
|
816
942
|
var _a;
|
|
@@ -881,6 +1007,7 @@ function onChange(node, callback, options = {}, fromLinks) {
|
|
|
881
1007
|
pathParent = [parent.key, ...pathParent];
|
|
882
1008
|
parent = parent.parent;
|
|
883
1009
|
}
|
|
1010
|
+
dispatchMiddlewareEvent(node, listener, "listener-added");
|
|
884
1011
|
return () => {
|
|
885
1012
|
listeners.delete(listener);
|
|
886
1013
|
extraDisposes == null ? void 0 : extraDisposes.forEach((fn) => fn());
|
|
@@ -889,6 +1016,10 @@ function onChange(node, callback, options = {}, fromLinks) {
|
|
|
889
1016
|
parent2.numListenersRecursive--;
|
|
890
1017
|
parent2 = parent2.parent;
|
|
891
1018
|
}
|
|
1019
|
+
dispatchMiddlewareEvent(node, listener, "listener-removed");
|
|
1020
|
+
if (listeners.size === 0) {
|
|
1021
|
+
dispatchMiddlewareEvent(node, void 0, "listeners-cleared");
|
|
1022
|
+
}
|
|
892
1023
|
};
|
|
893
1024
|
}
|
|
894
1025
|
function createCb(linkedFromNode, path, callback) {
|
|
@@ -969,13 +1100,13 @@ function updateTracking(node, track) {
|
|
|
969
1100
|
}
|
|
970
1101
|
|
|
971
1102
|
// src/trackSelector.ts
|
|
972
|
-
function trackSelector(selector, update, observeEvent, observeOptions, createResubscribe) {
|
|
1103
|
+
function trackSelector(selector, update, getOptions, observeEvent, observeOptions, createResubscribe) {
|
|
973
1104
|
var _a;
|
|
974
1105
|
let dispose;
|
|
975
1106
|
let resubscribe;
|
|
976
1107
|
let updateFn = update;
|
|
977
1108
|
beginTracking();
|
|
978
|
-
const value = selector ? computeSelector(selector, observeEvent, observeOptions == null ? void 0 : observeOptions.fromComputed) : selector;
|
|
1109
|
+
const value = selector ? computeSelector(selector, getOptions, observeEvent, observeOptions == null ? void 0 : observeOptions.fromComputed) : selector;
|
|
979
1110
|
const tracker = tracking.current;
|
|
980
1111
|
const nodes = tracker.nodes;
|
|
981
1112
|
endTracking();
|
|
@@ -1023,7 +1154,11 @@ function observe(selectorOrRun, reactionOrOptions, options) {
|
|
|
1023
1154
|
beginBatch();
|
|
1024
1155
|
delete e.value;
|
|
1025
1156
|
dispose == null ? void 0 : dispose();
|
|
1026
|
-
const {
|
|
1157
|
+
const {
|
|
1158
|
+
dispose: _dispose,
|
|
1159
|
+
value,
|
|
1160
|
+
nodes
|
|
1161
|
+
} = trackSelector(selectorOrRun, update, void 0, e, options);
|
|
1027
1162
|
dispose = _dispose;
|
|
1028
1163
|
e.value = value;
|
|
1029
1164
|
e.nodes = nodes;
|
|
@@ -1068,10 +1203,13 @@ function _when(predicate, effect, checkReady) {
|
|
|
1068
1203
|
let isOk = true;
|
|
1069
1204
|
if (isArray(ret)) {
|
|
1070
1205
|
for (let i = 0; i < ret.length; i++) {
|
|
1071
|
-
|
|
1072
|
-
|
|
1206
|
+
let item = ret[i];
|
|
1207
|
+
if (isObservable(item)) {
|
|
1208
|
+
item = computeSelector(item);
|
|
1209
|
+
} else if (isFunction(item)) {
|
|
1210
|
+
item = item();
|
|
1073
1211
|
}
|
|
1074
|
-
isOk = isOk && !!(checkReady ? isObservableValueReady(
|
|
1212
|
+
isOk = isOk && !!(checkReady ? isObservableValueReady(item) : item);
|
|
1075
1213
|
}
|
|
1076
1214
|
} else {
|
|
1077
1215
|
isOk = checkReady ? isObservableValueReady(ret) : ret;
|
|
@@ -1170,9 +1308,6 @@ function collectionSetter(node, target, prop, ...args) {
|
|
|
1170
1308
|
return ret;
|
|
1171
1309
|
}
|
|
1172
1310
|
}
|
|
1173
|
-
function getKeys(obj, isArr, isMap2) {
|
|
1174
|
-
return isArr ? void 0 : obj ? isMap2 ? Array.from(obj.keys()) : Object.keys(obj) : [];
|
|
1175
|
-
}
|
|
1176
1311
|
function updateNodes(parent, obj, prevValue) {
|
|
1177
1312
|
var _a, _b, _c;
|
|
1178
1313
|
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && typeof __devUpdateNodes !== "undefined" && isObject(obj)) {
|
|
@@ -1201,9 +1336,11 @@ function updateNodes(parent, obj, prevValue) {
|
|
|
1201
1336
|
let prevChildrenById;
|
|
1202
1337
|
let moved;
|
|
1203
1338
|
const isCurMap = isMap(obj);
|
|
1339
|
+
const isCurSet = isSet(obj);
|
|
1204
1340
|
const isPrevMap = isMap(prevValue);
|
|
1205
|
-
const
|
|
1206
|
-
const
|
|
1341
|
+
const isPrevSet = isSet(prevValue);
|
|
1342
|
+
const keys = getKeys(obj, isArr, isCurMap, isCurSet);
|
|
1343
|
+
const keysPrev = getKeys(prevValue, isArr, isPrevMap, isPrevSet);
|
|
1207
1344
|
const length = ((_a = keys || obj) == null ? void 0 : _a.length) || 0;
|
|
1208
1345
|
const lengthPrev = ((_b = keysPrev || prevValue) == null ? void 0 : _b.length) || 0;
|
|
1209
1346
|
let idField;
|
|
@@ -1436,7 +1573,8 @@ var proxyHandler = {
|
|
|
1436
1573
|
}
|
|
1437
1574
|
if (isNullOrUndefined(value) && vProp === void 0 && (ArrayModifiers.has(p) || ArrayLoopers.has(p))) {
|
|
1438
1575
|
value = [];
|
|
1439
|
-
|
|
1576
|
+
if (ArrayModifiers.has(p))
|
|
1577
|
+
setNodeValue(node, value);
|
|
1440
1578
|
vProp = value[p];
|
|
1441
1579
|
}
|
|
1442
1580
|
if (isFunction(vProp)) {
|
|
@@ -1515,7 +1653,11 @@ var proxyHandler = {
|
|
|
1515
1653
|
return { configurable: false, enumerable: false };
|
|
1516
1654
|
}
|
|
1517
1655
|
const value = getNodeValue(node);
|
|
1518
|
-
|
|
1656
|
+
if (isPrimitive(value)) {
|
|
1657
|
+
return void 0;
|
|
1658
|
+
}
|
|
1659
|
+
const descriptor = Reflect.getOwnPropertyDescriptor(value, prop);
|
|
1660
|
+
return descriptor ? { ...descriptor, configurable: true } : void 0;
|
|
1519
1661
|
},
|
|
1520
1662
|
set(node, prop, value) {
|
|
1521
1663
|
if (node.isSetting) {
|
|
@@ -1553,7 +1695,9 @@ var proxyHandler = {
|
|
|
1553
1695
|
if (isObservable(thisArg)) {
|
|
1554
1696
|
thisArg = thisArg.peek();
|
|
1555
1697
|
}
|
|
1556
|
-
|
|
1698
|
+
const fnRaw = getNodeValue(target);
|
|
1699
|
+
const fn = isFunction(fnRaw) ? fnRaw : target.lazyFn || target;
|
|
1700
|
+
return Reflect.apply(fn, thisArg, argArray);
|
|
1557
1701
|
}
|
|
1558
1702
|
};
|
|
1559
1703
|
function set(node, newValue) {
|
|
@@ -1578,6 +1722,7 @@ function setKey(node, key, newValue, level) {
|
|
|
1578
1722
|
}
|
|
1579
1723
|
}
|
|
1580
1724
|
const isRoot = !node.parent && key === "_";
|
|
1725
|
+
checkPlain(node, newValue);
|
|
1581
1726
|
if (node.parent && !getNodeValue(node) && !isFunction(newValue)) {
|
|
1582
1727
|
set(node, { [key]: newValue });
|
|
1583
1728
|
}
|
|
@@ -1585,8 +1730,8 @@ function setKey(node, key, newValue, level) {
|
|
|
1585
1730
|
if (isObservable(newValue)) {
|
|
1586
1731
|
setToObservable(childNode, newValue);
|
|
1587
1732
|
} else {
|
|
1588
|
-
const { newValue: savedValue, prevValue } = setNodeValue(childNode, newValue);
|
|
1589
|
-
const isPrim = isPrimitive(savedValue) || savedValue instanceof Date;
|
|
1733
|
+
const { newValue: savedValue, prevValue, parentValue } = setNodeValue(childNode, newValue);
|
|
1734
|
+
const isPrim = isPrimitive(prevValue) || prevValue instanceof Date || isPrimitive(savedValue) || savedValue instanceof Date;
|
|
1590
1735
|
if (!isPrim) {
|
|
1591
1736
|
let parent = childNode;
|
|
1592
1737
|
do {
|
|
@@ -1595,9 +1740,19 @@ function setKey(node, key, newValue, level) {
|
|
|
1595
1740
|
} while (parent = parent.parent);
|
|
1596
1741
|
}
|
|
1597
1742
|
const notify2 = !equals(savedValue, prevValue);
|
|
1598
|
-
const forceNotify = !notify2 && childNode.isComputing && !isPrim;
|
|
1599
|
-
if (notify2 || forceNotify) {
|
|
1600
|
-
updateNodesAndNotify(
|
|
1743
|
+
const forceNotify = !notify2 && childNode.isComputing && !isPrim && !childNode.isPlain;
|
|
1744
|
+
if ((notify2 || forceNotify) && !(childNode.isComputing && childNode.isPlain && node.numListenersRecursive === 0)) {
|
|
1745
|
+
updateNodesAndNotify(
|
|
1746
|
+
node,
|
|
1747
|
+
savedValue,
|
|
1748
|
+
prevValue,
|
|
1749
|
+
childNode,
|
|
1750
|
+
parentValue,
|
|
1751
|
+
isPrim,
|
|
1752
|
+
isRoot,
|
|
1753
|
+
level,
|
|
1754
|
+
forceNotify
|
|
1755
|
+
);
|
|
1601
1756
|
}
|
|
1602
1757
|
extractFunctionOrComputed(node, key, savedValue);
|
|
1603
1758
|
}
|
|
@@ -1652,7 +1807,7 @@ function handlerMapSet(node, p, value) {
|
|
|
1652
1807
|
} else if (isFunction(vProp)) {
|
|
1653
1808
|
return function(a, b, c) {
|
|
1654
1809
|
const l = arguments.length;
|
|
1655
|
-
const
|
|
1810
|
+
const valueMapOrSet = value;
|
|
1656
1811
|
if (p === "get") {
|
|
1657
1812
|
if (l > 0 && typeof a !== "boolean" && a !== optimized) {
|
|
1658
1813
|
return getProxy(node, a);
|
|
@@ -1666,14 +1821,14 @@ function handlerMapSet(node, p, value) {
|
|
|
1666
1821
|
return getProxy(node);
|
|
1667
1822
|
} else if (p === "delete") {
|
|
1668
1823
|
if (l > 0) {
|
|
1669
|
-
const prev = value.get ?
|
|
1824
|
+
const prev = value.get ? valueMapOrSet.get(a) : a;
|
|
1670
1825
|
deleteFn(node, a);
|
|
1671
1826
|
return prev !== void 0;
|
|
1672
1827
|
}
|
|
1673
1828
|
} else if (p === "clear") {
|
|
1674
|
-
const prev = new Map(
|
|
1675
|
-
const size =
|
|
1676
|
-
|
|
1829
|
+
const prev = isSet(valueMapOrSet) ? new Set(valueMapOrSet) : new Map(valueMapOrSet);
|
|
1830
|
+
const size = valueMapOrSet.size;
|
|
1831
|
+
valueMapOrSet.clear();
|
|
1677
1832
|
if (size) {
|
|
1678
1833
|
updateNodesAndNotify(node, value, prev);
|
|
1679
1834
|
}
|
|
@@ -1704,7 +1859,7 @@ function handlerMapSet(node, p, value) {
|
|
|
1704
1859
|
};
|
|
1705
1860
|
}
|
|
1706
1861
|
}
|
|
1707
|
-
function updateNodesAndNotify(node, newValue, prevValue, childNode, isPrim, isRoot, level, forceNotify) {
|
|
1862
|
+
function updateNodesAndNotify(node, newValue, prevValue, childNode, parentValue, isPrim, isRoot, level, forceNotify) {
|
|
1708
1863
|
if (!childNode)
|
|
1709
1864
|
childNode = node;
|
|
1710
1865
|
beginBatch();
|
|
@@ -1713,15 +1868,29 @@ function updateNodesAndNotify(node, newValue, prevValue, childNode, isPrim, isRo
|
|
|
1713
1868
|
}
|
|
1714
1869
|
let hasADiff = forceNotify || isPrim;
|
|
1715
1870
|
let whenOptimizedOnlyIf = false;
|
|
1871
|
+
let valueAsArr;
|
|
1872
|
+
let valueAsMap;
|
|
1716
1873
|
if (!isPrim || prevValue && !isPrimitive(prevValue)) {
|
|
1717
1874
|
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && typeof __devUpdateNodes !== "undefined") {
|
|
1718
1875
|
__devUpdateNodes.clear();
|
|
1719
1876
|
}
|
|
1720
1877
|
hasADiff = hasADiff || updateNodes(childNode, newValue, prevValue);
|
|
1721
1878
|
if (isArray(newValue)) {
|
|
1722
|
-
|
|
1879
|
+
valueAsArr = newValue;
|
|
1880
|
+
} else if (isMap(newValue) || isSet(newValue)) {
|
|
1881
|
+
valueAsMap = newValue;
|
|
1723
1882
|
}
|
|
1724
1883
|
}
|
|
1884
|
+
if (isArray(parentValue)) {
|
|
1885
|
+
valueAsArr = parentValue;
|
|
1886
|
+
} else if (isMap(parentValue) || isSet(parentValue)) {
|
|
1887
|
+
valueAsMap = parentValue;
|
|
1888
|
+
}
|
|
1889
|
+
if (valueAsArr) {
|
|
1890
|
+
whenOptimizedOnlyIf = (valueAsArr == null ? void 0 : valueAsArr.length) !== (prevValue == null ? void 0 : prevValue.length);
|
|
1891
|
+
} else if (valueAsMap) {
|
|
1892
|
+
whenOptimizedOnlyIf = (valueAsMap == null ? void 0 : valueAsMap.size) !== (prevValue == null ? void 0 : prevValue.size);
|
|
1893
|
+
}
|
|
1725
1894
|
if (isPrim || !newValue || isEmpty(newValue) && !isEmpty(prevValue) ? newValue !== prevValue : hasADiff) {
|
|
1726
1895
|
notify(
|
|
1727
1896
|
isPrim && isRoot ? node : childNode,
|
|
@@ -1803,7 +1972,7 @@ function peekInternal(node, activateRecursive) {
|
|
|
1803
1972
|
}
|
|
1804
1973
|
isFlushing = false;
|
|
1805
1974
|
let value = getNodeValue(node);
|
|
1806
|
-
if (!
|
|
1975
|
+
if (!node.root.isLoadingLocal && !node.isPlain) {
|
|
1807
1976
|
value = checkLazy(node, value, !!activateRecursive);
|
|
1808
1977
|
}
|
|
1809
1978
|
return value;
|
|
@@ -1834,7 +2003,8 @@ function checkLazy(node, value, activateRecursive) {
|
|
|
1834
2003
|
value = extractFunctionOrComputed(node.parent, node.key, value);
|
|
1835
2004
|
}
|
|
1836
2005
|
}
|
|
1837
|
-
|
|
2006
|
+
checkPlain(node, value);
|
|
2007
|
+
if ((lazy || node.needsExtract) && !node.isPlain && !isObservable(value) && !isPrimitive(value)) {
|
|
1838
2008
|
if (activateRecursive) {
|
|
1839
2009
|
recursivelyAutoActivate(value, node);
|
|
1840
2010
|
}
|
|
@@ -1857,11 +2027,14 @@ function checkProperty(value, key) {
|
|
|
1857
2027
|
return value[key];
|
|
1858
2028
|
}
|
|
1859
2029
|
}
|
|
1860
|
-
function
|
|
2030
|
+
function deactivateNode(node) {
|
|
1861
2031
|
var _a, _b;
|
|
1862
2032
|
(_a = node.activatedObserveDispose) == null ? void 0 : _a.call(node);
|
|
1863
2033
|
(_b = node.linkedToNodeDispose) == null ? void 0 : _b.call(node);
|
|
1864
2034
|
node.activatedObserveDispose = node.linkedToNodeDispose = node.linkedToNode = void 0;
|
|
2035
|
+
}
|
|
2036
|
+
function reactivateNode(node, lazyFn) {
|
|
2037
|
+
deactivateNode(node);
|
|
1865
2038
|
node.lazyFn = lazyFn;
|
|
1866
2039
|
node.lazy = true;
|
|
1867
2040
|
}
|
|
@@ -1909,7 +2082,7 @@ function activateNodeFunction(node, lazyFn) {
|
|
|
1909
2082
|
node.dirtyFn = refreshFn;
|
|
1910
2083
|
globalState.dirtyNodes.add(node);
|
|
1911
2084
|
}
|
|
1912
|
-
|
|
2085
|
+
const observeDispose = observe(
|
|
1913
2086
|
() => {
|
|
1914
2087
|
var _a, _b, _c, _d;
|
|
1915
2088
|
if (isFirst) {
|
|
@@ -1963,6 +2136,9 @@ function activateNodeFunction(node, lazyFn) {
|
|
|
1963
2136
|
value = (_d = (_c = activated2.get) == null ? void 0 : _c.call(activated2)) != null ? _d : activated2.initial;
|
|
1964
2137
|
}
|
|
1965
2138
|
}
|
|
2139
|
+
if (ignoreThisUpdate) {
|
|
2140
|
+
activatedValue = value;
|
|
2141
|
+
}
|
|
1966
2142
|
wasPromise = wasPromise || isPromise(value);
|
|
1967
2143
|
return value;
|
|
1968
2144
|
},
|
|
@@ -2009,6 +2185,10 @@ function activateNodeFunction(node, lazyFn) {
|
|
|
2009
2185
|
},
|
|
2010
2186
|
{ fromComputed: true }
|
|
2011
2187
|
);
|
|
2188
|
+
node.activatedObserveDispose = () => {
|
|
2189
|
+
observeDispose == null ? void 0 : observeDispose();
|
|
2190
|
+
disposes.forEach((fn) => fn());
|
|
2191
|
+
};
|
|
2012
2192
|
return activatedValue;
|
|
2013
2193
|
}
|
|
2014
2194
|
function activateNodeBase(node, value) {
|
|
@@ -2274,7 +2454,14 @@ function syncState(obs) {
|
|
|
2274
2454
|
syncCount: 0,
|
|
2275
2455
|
resetPersistence: void 0,
|
|
2276
2456
|
reset: () => Promise.resolve(),
|
|
2277
|
-
sync: () =>
|
|
2457
|
+
sync: () => {
|
|
2458
|
+
var _a;
|
|
2459
|
+
obs.peek();
|
|
2460
|
+
if ((_a = node.state) == null ? void 0 : _a.isGetting.peek()) {
|
|
2461
|
+
return when(node.state.isLoaded);
|
|
2462
|
+
}
|
|
2463
|
+
return Promise.resolve();
|
|
2464
|
+
},
|
|
2278
2465
|
getPendingChanges: () => ({}),
|
|
2279
2466
|
// TODOV3 remove
|
|
2280
2467
|
clearPersist: void 0
|
|
@@ -2288,10 +2475,13 @@ function syncState(obs) {
|
|
|
2288
2475
|
var internal = {
|
|
2289
2476
|
createPreviousHandler,
|
|
2290
2477
|
clone,
|
|
2478
|
+
deactivateNode,
|
|
2291
2479
|
deepMerge,
|
|
2292
2480
|
ensureNodeValue,
|
|
2293
2481
|
findIDKey,
|
|
2294
2482
|
get,
|
|
2483
|
+
getChildNode,
|
|
2484
|
+
getKeys,
|
|
2295
2485
|
getNode,
|
|
2296
2486
|
getNodeValue,
|
|
2297
2487
|
getPathType,
|
|
@@ -2304,6 +2494,8 @@ var internal = {
|
|
|
2304
2494
|
observableFns,
|
|
2305
2495
|
optimized,
|
|
2306
2496
|
peek,
|
|
2497
|
+
reactivateNode,
|
|
2498
|
+
registerMiddleware,
|
|
2307
2499
|
safeParse,
|
|
2308
2500
|
safeStringify,
|
|
2309
2501
|
set,
|