@legendapp/state 3.0.0-beta.4 → 3.0.0-beta.40
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.mjs
CHANGED
|
@@ -144,6 +144,16 @@ function isEvent(value$) {
|
|
|
144
144
|
var _a;
|
|
145
145
|
return value$ && ((_a = value$[symbolGetNode]) == null ? void 0 : _a.isEvent);
|
|
146
146
|
}
|
|
147
|
+
function setNewValue(parentValue, key, newValue, useSetFn, useMapFn) {
|
|
148
|
+
if (useSetFn) {
|
|
149
|
+
parentValue.add(newValue);
|
|
150
|
+
} else if (useMapFn) {
|
|
151
|
+
parentValue.set(key, newValue);
|
|
152
|
+
} else {
|
|
153
|
+
parentValue[key] = newValue;
|
|
154
|
+
}
|
|
155
|
+
return newValue;
|
|
156
|
+
}
|
|
147
157
|
function setNodeValue(node, newValue) {
|
|
148
158
|
var _a;
|
|
149
159
|
const parentNode = (_a = node.parent) != null ? _a : node;
|
|
@@ -167,19 +177,13 @@ function setNodeValue(node, newValue) {
|
|
|
167
177
|
delete parentValue[key];
|
|
168
178
|
}
|
|
169
179
|
} else {
|
|
170
|
-
|
|
171
|
-
parentValue.add(newValue);
|
|
172
|
-
} else if (useMapFn) {
|
|
173
|
-
parentValue.set(key, newValue);
|
|
174
|
-
} else {
|
|
175
|
-
parentValue[key] = newValue;
|
|
176
|
-
}
|
|
180
|
+
setNewValue(parentValue, key, newValue, useSetFn, useMapFn);
|
|
177
181
|
}
|
|
178
182
|
} finally {
|
|
179
183
|
parentNode.isSetting--;
|
|
180
184
|
}
|
|
181
185
|
}
|
|
182
|
-
return { prevValue, newValue };
|
|
186
|
+
return { prevValue, newValue, parentValue };
|
|
183
187
|
}
|
|
184
188
|
var arrNodeKeys = [];
|
|
185
189
|
function getNodeValue(node) {
|
|
@@ -192,7 +196,7 @@ function getNodeValue(node) {
|
|
|
192
196
|
let child = node.root._;
|
|
193
197
|
for (let i = count - 1; child && i >= 0; i--) {
|
|
194
198
|
const key = arrNodeKeys[i];
|
|
195
|
-
child = key !== "size" &&
|
|
199
|
+
child = key !== "size" && isMap(child) ? child.get(key) : child[key];
|
|
196
200
|
}
|
|
197
201
|
return child;
|
|
198
202
|
}
|
|
@@ -227,7 +231,9 @@ function ensureNodeValue(node) {
|
|
|
227
231
|
if (!value || isFunction(value)) {
|
|
228
232
|
if (isChildNode(node)) {
|
|
229
233
|
const parent = ensureNodeValue(node.parent);
|
|
230
|
-
|
|
234
|
+
const useSetFn = isSet(parent);
|
|
235
|
+
const useMapFn = isMap(parent);
|
|
236
|
+
value = setNewValue(parent, node.key, {}, useSetFn, useMapFn);
|
|
231
237
|
} else {
|
|
232
238
|
value = node.root._ = {};
|
|
233
239
|
}
|
|
@@ -255,6 +261,9 @@ function extractFunction(node, key, fnOrComputed) {
|
|
|
255
261
|
function equals(a, b) {
|
|
256
262
|
return a === b || isDate(a) && isDate(b) && +a === +b;
|
|
257
263
|
}
|
|
264
|
+
function getKeys(obj, isArr, isMap2, isSet2) {
|
|
265
|
+
return isArr ? void 0 : obj ? isSet2 ? Array.from(obj) : isMap2 ? Array.from(obj.keys()) : Object.keys(obj) : [];
|
|
266
|
+
}
|
|
258
267
|
|
|
259
268
|
// src/ObservableHint.ts
|
|
260
269
|
function addSymbol(value, symbol) {
|
|
@@ -274,16 +283,27 @@ var ObservableHint = {
|
|
|
274
283
|
},
|
|
275
284
|
plain: function plainObject(value) {
|
|
276
285
|
return addSymbol(value, symbolPlain);
|
|
286
|
+
},
|
|
287
|
+
function: function plainObject2(value) {
|
|
288
|
+
return addSymbol(value, symbolPlain);
|
|
277
289
|
}
|
|
278
290
|
};
|
|
279
291
|
|
|
292
|
+
// src/checkPlain.ts
|
|
293
|
+
function checkPlain(node, value) {
|
|
294
|
+
var _a;
|
|
295
|
+
if (!node.isPlain && (((_a = node.parent) == null ? void 0 : _a.isPlain) || isHintPlain(value))) {
|
|
296
|
+
node.isPlain = true;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
280
300
|
// src/helpers.ts
|
|
281
|
-
function computeSelector(selector, e, retainObservable) {
|
|
301
|
+
function computeSelector(selector, getOptions, e, retainObservable) {
|
|
282
302
|
let c = selector;
|
|
283
303
|
if (!isObservable(c) && isFunction(c)) {
|
|
284
304
|
c = e ? c(e) : c();
|
|
285
305
|
}
|
|
286
|
-
return isObservable(c) && !retainObservable ? c.get() : c;
|
|
306
|
+
return isObservable(c) && !retainObservable ? c.get(getOptions) : c;
|
|
287
307
|
}
|
|
288
308
|
function getObservableIndex(value$) {
|
|
289
309
|
const node = getNode(value$);
|
|
@@ -382,7 +402,7 @@ function _mergeIntoObservable(target, source, levelsDeep) {
|
|
|
382
402
|
const isSourceSet = isSet(source);
|
|
383
403
|
if (isSourceSet && isSet(targetValue)) {
|
|
384
404
|
target.set(/* @__PURE__ */ new Set([...source, ...targetValue]));
|
|
385
|
-
} else if (isTargetObj && isObject(source)
|
|
405
|
+
} else if (isTargetObj && isObject(source) || isTargetArr && targetValue.length > 0) {
|
|
386
406
|
const keys = isSourceMap || isSourceSet ? Array.from(source.keys()) : Object.keys(source);
|
|
387
407
|
for (let i = 0; i < keys.length; i++) {
|
|
388
408
|
const key = keys[i];
|
|
@@ -588,6 +608,7 @@ function computeChangesAtNode(changesInBatch, node, isFromPersist, isFromSync, v
|
|
|
588
608
|
if (!isArraySubset(changes[0].path, change.path)) {
|
|
589
609
|
changes.push(change);
|
|
590
610
|
changeInBatch.level = Math.min(changeInBatch.level, level);
|
|
611
|
+
changeInBatch.whenOptimizedOnlyIf || (changeInBatch.whenOptimizedOnlyIf = whenOptimizedOnlyIf);
|
|
591
612
|
}
|
|
592
613
|
} else {
|
|
593
614
|
changesInBatch.set(node, {
|
|
@@ -602,37 +623,39 @@ function computeChangesAtNode(changesInBatch, node, isFromPersist, isFromSync, v
|
|
|
602
623
|
}
|
|
603
624
|
}
|
|
604
625
|
function computeChangesRecursive(changesInBatch, node, loading, remote, value, path, pathTypes, valueAtPath, prevAtPath, immediate, level, whenOptimizedOnlyIf) {
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
const
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
626
|
+
if (node.numListenersRecursive > 0) {
|
|
627
|
+
computeChangesAtNode(
|
|
628
|
+
changesInBatch,
|
|
629
|
+
node,
|
|
630
|
+
loading,
|
|
631
|
+
remote,
|
|
632
|
+
value,
|
|
633
|
+
path,
|
|
634
|
+
pathTypes,
|
|
635
|
+
valueAtPath,
|
|
636
|
+
prevAtPath,
|
|
637
|
+
immediate,
|
|
638
|
+
level,
|
|
639
|
+
whenOptimizedOnlyIf
|
|
640
|
+
);
|
|
641
|
+
if (node.linkedFromNodes) {
|
|
642
|
+
for (const linkedFromNode of node.linkedFromNodes) {
|
|
643
|
+
const childNode = getNodeAtPath(linkedFromNode, path);
|
|
644
|
+
computeChangesRecursive(
|
|
645
|
+
changesInBatch,
|
|
646
|
+
childNode,
|
|
647
|
+
loading,
|
|
648
|
+
remote,
|
|
649
|
+
valueAtPath,
|
|
650
|
+
[],
|
|
651
|
+
[],
|
|
652
|
+
valueAtPath,
|
|
653
|
+
prevAtPath,
|
|
654
|
+
immediate,
|
|
655
|
+
0,
|
|
656
|
+
whenOptimizedOnlyIf
|
|
657
|
+
);
|
|
658
|
+
}
|
|
636
659
|
}
|
|
637
660
|
}
|
|
638
661
|
if (node.parent) {
|
|
@@ -809,6 +832,109 @@ function linked(params, options) {
|
|
|
809
832
|
return ret;
|
|
810
833
|
}
|
|
811
834
|
|
|
835
|
+
// src/middleware.ts
|
|
836
|
+
var nodeMiddlewareHandlers = /* @__PURE__ */ new WeakMap();
|
|
837
|
+
var queuedNodes = [];
|
|
838
|
+
var queuedListeners = [];
|
|
839
|
+
var queuedTypes = [];
|
|
840
|
+
var queueSize = 0;
|
|
841
|
+
var isMicrotaskScheduled = false;
|
|
842
|
+
function registerMiddleware(node, type, handler) {
|
|
843
|
+
let handlersMap = nodeMiddlewareHandlers.get(node);
|
|
844
|
+
if (!handlersMap) {
|
|
845
|
+
handlersMap = /* @__PURE__ */ new Map();
|
|
846
|
+
nodeMiddlewareHandlers.set(node, handlersMap);
|
|
847
|
+
}
|
|
848
|
+
let handlers = handlersMap.get(type);
|
|
849
|
+
if (!handlers) {
|
|
850
|
+
handlers = /* @__PURE__ */ new Set();
|
|
851
|
+
handlersMap.set(type, handlers);
|
|
852
|
+
}
|
|
853
|
+
handlers.add(handler);
|
|
854
|
+
return () => {
|
|
855
|
+
const handlersMap2 = nodeMiddlewareHandlers.get(node);
|
|
856
|
+
if (!handlersMap2)
|
|
857
|
+
return;
|
|
858
|
+
const handlers2 = handlersMap2.get(type);
|
|
859
|
+
if (!handlers2)
|
|
860
|
+
return;
|
|
861
|
+
handlers2.delete(handler);
|
|
862
|
+
if (handlers2.size === 0) {
|
|
863
|
+
handlersMap2.delete(type);
|
|
864
|
+
if (handlersMap2.size === 0) {
|
|
865
|
+
nodeMiddlewareHandlers.delete(node);
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
};
|
|
869
|
+
}
|
|
870
|
+
function dispatchMiddlewareEvent(node, listener, type) {
|
|
871
|
+
const handlersMap = nodeMiddlewareHandlers.get(node);
|
|
872
|
+
if (!handlersMap || !handlersMap.has(type)) {
|
|
873
|
+
return;
|
|
874
|
+
}
|
|
875
|
+
const handlers = handlersMap.get(type);
|
|
876
|
+
if (!handlers || handlers.size === 0) {
|
|
877
|
+
return;
|
|
878
|
+
}
|
|
879
|
+
queuedNodes[queueSize] = node;
|
|
880
|
+
queuedListeners[queueSize] = listener;
|
|
881
|
+
queuedTypes[queueSize] = type;
|
|
882
|
+
queueSize++;
|
|
883
|
+
if (!isMicrotaskScheduled) {
|
|
884
|
+
isMicrotaskScheduled = true;
|
|
885
|
+
queueMicrotask(processQueuedEvents);
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
var eventObj = {
|
|
889
|
+
type: "listener-added",
|
|
890
|
+
node: null,
|
|
891
|
+
listener: void 0,
|
|
892
|
+
timestamp: 0
|
|
893
|
+
};
|
|
894
|
+
function processQueuedEvents() {
|
|
895
|
+
isMicrotaskScheduled = false;
|
|
896
|
+
const timestamp = typeof performance !== "undefined" ? performance.now() : Date.now();
|
|
897
|
+
eventObj.timestamp = timestamp;
|
|
898
|
+
for (let i = 0; i < queueSize; i++) {
|
|
899
|
+
const node = queuedNodes[i];
|
|
900
|
+
const listener = queuedListeners[i];
|
|
901
|
+
const type = queuedTypes[i];
|
|
902
|
+
const handlersMap = nodeMiddlewareHandlers.get(node);
|
|
903
|
+
if (!handlersMap)
|
|
904
|
+
continue;
|
|
905
|
+
const handlers = handlersMap.get(type);
|
|
906
|
+
if (!handlers || handlers.size === 0)
|
|
907
|
+
continue;
|
|
908
|
+
const nodeListeners = node.listeners;
|
|
909
|
+
const nodeListenersImmediate = node.listenersImmediate;
|
|
910
|
+
if (!nodeListeners && !nodeListenersImmediate) {
|
|
911
|
+
continue;
|
|
912
|
+
}
|
|
913
|
+
let isValid = false;
|
|
914
|
+
if (type === "listener-added") {
|
|
915
|
+
isValid = !!(nodeListeners == null ? void 0 : nodeListeners.has(listener)) || !!(nodeListenersImmediate == null ? void 0 : nodeListenersImmediate.has(listener));
|
|
916
|
+
} else if (type === "listener-removed") {
|
|
917
|
+
isValid = !(nodeListeners == null ? void 0 : nodeListeners.has(listener)) && !(nodeListenersImmediate == null ? void 0 : nodeListenersImmediate.has(listener));
|
|
918
|
+
} else {
|
|
919
|
+
isValid = !(nodeListeners == null ? void 0 : nodeListeners.size) && !(nodeListenersImmediate == null ? void 0 : nodeListenersImmediate.size);
|
|
920
|
+
}
|
|
921
|
+
if (isValid) {
|
|
922
|
+
eventObj.type = type;
|
|
923
|
+
eventObj.node = node;
|
|
924
|
+
eventObj.listener = listener;
|
|
925
|
+
const iterableHandlers = Array.from(handlers);
|
|
926
|
+
for (let j = 0; j < iterableHandlers.length; j++) {
|
|
927
|
+
try {
|
|
928
|
+
iterableHandlers[j](eventObj);
|
|
929
|
+
} catch (error) {
|
|
930
|
+
console.error(`Error in middleware handler for ${type}:`, error);
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
queueSize = 0;
|
|
936
|
+
}
|
|
937
|
+
|
|
812
938
|
// src/onChange.ts
|
|
813
939
|
function onChange(node, callback, options = {}, fromLinks) {
|
|
814
940
|
var _a;
|
|
@@ -879,6 +1005,7 @@ function onChange(node, callback, options = {}, fromLinks) {
|
|
|
879
1005
|
pathParent = [parent.key, ...pathParent];
|
|
880
1006
|
parent = parent.parent;
|
|
881
1007
|
}
|
|
1008
|
+
dispatchMiddlewareEvent(node, listener, "listener-added");
|
|
882
1009
|
return () => {
|
|
883
1010
|
listeners.delete(listener);
|
|
884
1011
|
extraDisposes == null ? void 0 : extraDisposes.forEach((fn) => fn());
|
|
@@ -887,6 +1014,10 @@ function onChange(node, callback, options = {}, fromLinks) {
|
|
|
887
1014
|
parent2.numListenersRecursive--;
|
|
888
1015
|
parent2 = parent2.parent;
|
|
889
1016
|
}
|
|
1017
|
+
dispatchMiddlewareEvent(node, listener, "listener-removed");
|
|
1018
|
+
if (listeners.size === 0) {
|
|
1019
|
+
dispatchMiddlewareEvent(node, void 0, "listeners-cleared");
|
|
1020
|
+
}
|
|
890
1021
|
};
|
|
891
1022
|
}
|
|
892
1023
|
function createCb(linkedFromNode, path, callback) {
|
|
@@ -967,13 +1098,13 @@ function updateTracking(node, track) {
|
|
|
967
1098
|
}
|
|
968
1099
|
|
|
969
1100
|
// src/trackSelector.ts
|
|
970
|
-
function trackSelector(selector, update, observeEvent, observeOptions, createResubscribe) {
|
|
1101
|
+
function trackSelector(selector, update, getOptions, observeEvent, observeOptions, createResubscribe) {
|
|
971
1102
|
var _a;
|
|
972
1103
|
let dispose;
|
|
973
1104
|
let resubscribe;
|
|
974
1105
|
let updateFn = update;
|
|
975
1106
|
beginTracking();
|
|
976
|
-
const value = selector ? computeSelector(selector, observeEvent, observeOptions == null ? void 0 : observeOptions.fromComputed) : selector;
|
|
1107
|
+
const value = selector ? computeSelector(selector, getOptions, observeEvent, observeOptions == null ? void 0 : observeOptions.fromComputed) : selector;
|
|
977
1108
|
const tracker = tracking.current;
|
|
978
1109
|
const nodes = tracker.nodes;
|
|
979
1110
|
endTracking();
|
|
@@ -1021,7 +1152,11 @@ function observe(selectorOrRun, reactionOrOptions, options) {
|
|
|
1021
1152
|
beginBatch();
|
|
1022
1153
|
delete e.value;
|
|
1023
1154
|
dispose == null ? void 0 : dispose();
|
|
1024
|
-
const {
|
|
1155
|
+
const {
|
|
1156
|
+
dispose: _dispose,
|
|
1157
|
+
value,
|
|
1158
|
+
nodes
|
|
1159
|
+
} = trackSelector(selectorOrRun, update, void 0, e, options);
|
|
1025
1160
|
dispose = _dispose;
|
|
1026
1161
|
e.value = value;
|
|
1027
1162
|
e.nodes = nodes;
|
|
@@ -1066,10 +1201,13 @@ function _when(predicate, effect, checkReady) {
|
|
|
1066
1201
|
let isOk = true;
|
|
1067
1202
|
if (isArray(ret)) {
|
|
1068
1203
|
for (let i = 0; i < ret.length; i++) {
|
|
1069
|
-
|
|
1070
|
-
|
|
1204
|
+
let item = ret[i];
|
|
1205
|
+
if (isObservable(item)) {
|
|
1206
|
+
item = computeSelector(item);
|
|
1207
|
+
} else if (isFunction(item)) {
|
|
1208
|
+
item = item();
|
|
1071
1209
|
}
|
|
1072
|
-
isOk = isOk && !!(checkReady ? isObservableValueReady(
|
|
1210
|
+
isOk = isOk && !!(checkReady ? isObservableValueReady(item) : item);
|
|
1073
1211
|
}
|
|
1074
1212
|
} else {
|
|
1075
1213
|
isOk = checkReady ? isObservableValueReady(ret) : ret;
|
|
@@ -1168,9 +1306,6 @@ function collectionSetter(node, target, prop, ...args) {
|
|
|
1168
1306
|
return ret;
|
|
1169
1307
|
}
|
|
1170
1308
|
}
|
|
1171
|
-
function getKeys(obj, isArr, isMap2) {
|
|
1172
|
-
return isArr ? void 0 : obj ? isMap2 ? Array.from(obj.keys()) : Object.keys(obj) : [];
|
|
1173
|
-
}
|
|
1174
1309
|
function updateNodes(parent, obj, prevValue) {
|
|
1175
1310
|
var _a, _b, _c;
|
|
1176
1311
|
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && typeof __devUpdateNodes !== "undefined" && isObject(obj)) {
|
|
@@ -1199,9 +1334,11 @@ function updateNodes(parent, obj, prevValue) {
|
|
|
1199
1334
|
let prevChildrenById;
|
|
1200
1335
|
let moved;
|
|
1201
1336
|
const isCurMap = isMap(obj);
|
|
1337
|
+
const isCurSet = isSet(obj);
|
|
1202
1338
|
const isPrevMap = isMap(prevValue);
|
|
1203
|
-
const
|
|
1204
|
-
const
|
|
1339
|
+
const isPrevSet = isSet(prevValue);
|
|
1340
|
+
const keys = getKeys(obj, isArr, isCurMap, isCurSet);
|
|
1341
|
+
const keysPrev = getKeys(prevValue, isArr, isPrevMap, isPrevSet);
|
|
1205
1342
|
const length = ((_a = keys || obj) == null ? void 0 : _a.length) || 0;
|
|
1206
1343
|
const lengthPrev = ((_b = keysPrev || prevValue) == null ? void 0 : _b.length) || 0;
|
|
1207
1344
|
let idField;
|
|
@@ -1434,7 +1571,8 @@ var proxyHandler = {
|
|
|
1434
1571
|
}
|
|
1435
1572
|
if (isNullOrUndefined(value) && vProp === void 0 && (ArrayModifiers.has(p) || ArrayLoopers.has(p))) {
|
|
1436
1573
|
value = [];
|
|
1437
|
-
|
|
1574
|
+
if (ArrayModifiers.has(p))
|
|
1575
|
+
setNodeValue(node, value);
|
|
1438
1576
|
vProp = value[p];
|
|
1439
1577
|
}
|
|
1440
1578
|
if (isFunction(vProp)) {
|
|
@@ -1513,7 +1651,11 @@ var proxyHandler = {
|
|
|
1513
1651
|
return { configurable: false, enumerable: false };
|
|
1514
1652
|
}
|
|
1515
1653
|
const value = getNodeValue(node);
|
|
1516
|
-
|
|
1654
|
+
if (isPrimitive(value)) {
|
|
1655
|
+
return void 0;
|
|
1656
|
+
}
|
|
1657
|
+
const descriptor = Reflect.getOwnPropertyDescriptor(value, prop);
|
|
1658
|
+
return descriptor ? { ...descriptor, configurable: true } : void 0;
|
|
1517
1659
|
},
|
|
1518
1660
|
set(node, prop, value) {
|
|
1519
1661
|
if (node.isSetting) {
|
|
@@ -1551,7 +1693,9 @@ var proxyHandler = {
|
|
|
1551
1693
|
if (isObservable(thisArg)) {
|
|
1552
1694
|
thisArg = thisArg.peek();
|
|
1553
1695
|
}
|
|
1554
|
-
|
|
1696
|
+
const fnRaw = getNodeValue(target);
|
|
1697
|
+
const fn = isFunction(fnRaw) ? fnRaw : target.lazyFn || target;
|
|
1698
|
+
return Reflect.apply(fn, thisArg, argArray);
|
|
1555
1699
|
}
|
|
1556
1700
|
};
|
|
1557
1701
|
function set(node, newValue) {
|
|
@@ -1576,6 +1720,7 @@ function setKey(node, key, newValue, level) {
|
|
|
1576
1720
|
}
|
|
1577
1721
|
}
|
|
1578
1722
|
const isRoot = !node.parent && key === "_";
|
|
1723
|
+
checkPlain(node, newValue);
|
|
1579
1724
|
if (node.parent && !getNodeValue(node) && !isFunction(newValue)) {
|
|
1580
1725
|
set(node, { [key]: newValue });
|
|
1581
1726
|
}
|
|
@@ -1583,8 +1728,8 @@ function setKey(node, key, newValue, level) {
|
|
|
1583
1728
|
if (isObservable(newValue)) {
|
|
1584
1729
|
setToObservable(childNode, newValue);
|
|
1585
1730
|
} else {
|
|
1586
|
-
const { newValue: savedValue, prevValue } = setNodeValue(childNode, newValue);
|
|
1587
|
-
const isPrim = isPrimitive(savedValue) || savedValue instanceof Date;
|
|
1731
|
+
const { newValue: savedValue, prevValue, parentValue } = setNodeValue(childNode, newValue);
|
|
1732
|
+
const isPrim = isPrimitive(prevValue) || prevValue instanceof Date || isPrimitive(savedValue) || savedValue instanceof Date;
|
|
1588
1733
|
if (!isPrim) {
|
|
1589
1734
|
let parent = childNode;
|
|
1590
1735
|
do {
|
|
@@ -1593,9 +1738,19 @@ function setKey(node, key, newValue, level) {
|
|
|
1593
1738
|
} while (parent = parent.parent);
|
|
1594
1739
|
}
|
|
1595
1740
|
const notify2 = !equals(savedValue, prevValue);
|
|
1596
|
-
const forceNotify = !notify2 && childNode.isComputing && !isPrim;
|
|
1597
|
-
if (notify2 || forceNotify) {
|
|
1598
|
-
updateNodesAndNotify(
|
|
1741
|
+
const forceNotify = !notify2 && childNode.isComputing && !isPrim && !childNode.isPlain;
|
|
1742
|
+
if ((notify2 || forceNotify) && !(childNode.isComputing && childNode.isPlain && node.numListenersRecursive === 0)) {
|
|
1743
|
+
updateNodesAndNotify(
|
|
1744
|
+
node,
|
|
1745
|
+
savedValue,
|
|
1746
|
+
prevValue,
|
|
1747
|
+
childNode,
|
|
1748
|
+
parentValue,
|
|
1749
|
+
isPrim,
|
|
1750
|
+
isRoot,
|
|
1751
|
+
level,
|
|
1752
|
+
forceNotify
|
|
1753
|
+
);
|
|
1599
1754
|
}
|
|
1600
1755
|
extractFunctionOrComputed(node, key, savedValue);
|
|
1601
1756
|
}
|
|
@@ -1650,7 +1805,7 @@ function handlerMapSet(node, p, value) {
|
|
|
1650
1805
|
} else if (isFunction(vProp)) {
|
|
1651
1806
|
return function(a, b, c) {
|
|
1652
1807
|
const l = arguments.length;
|
|
1653
|
-
const
|
|
1808
|
+
const valueMapOrSet = value;
|
|
1654
1809
|
if (p === "get") {
|
|
1655
1810
|
if (l > 0 && typeof a !== "boolean" && a !== optimized) {
|
|
1656
1811
|
return getProxy(node, a);
|
|
@@ -1664,14 +1819,14 @@ function handlerMapSet(node, p, value) {
|
|
|
1664
1819
|
return getProxy(node);
|
|
1665
1820
|
} else if (p === "delete") {
|
|
1666
1821
|
if (l > 0) {
|
|
1667
|
-
const prev = value.get ?
|
|
1822
|
+
const prev = value.get ? valueMapOrSet.get(a) : a;
|
|
1668
1823
|
deleteFn(node, a);
|
|
1669
1824
|
return prev !== void 0;
|
|
1670
1825
|
}
|
|
1671
1826
|
} else if (p === "clear") {
|
|
1672
|
-
const prev = new Map(
|
|
1673
|
-
const size =
|
|
1674
|
-
|
|
1827
|
+
const prev = isSet(valueMapOrSet) ? new Set(valueMapOrSet) : new Map(valueMapOrSet);
|
|
1828
|
+
const size = valueMapOrSet.size;
|
|
1829
|
+
valueMapOrSet.clear();
|
|
1675
1830
|
if (size) {
|
|
1676
1831
|
updateNodesAndNotify(node, value, prev);
|
|
1677
1832
|
}
|
|
@@ -1702,7 +1857,7 @@ function handlerMapSet(node, p, value) {
|
|
|
1702
1857
|
};
|
|
1703
1858
|
}
|
|
1704
1859
|
}
|
|
1705
|
-
function updateNodesAndNotify(node, newValue, prevValue, childNode, isPrim, isRoot, level, forceNotify) {
|
|
1860
|
+
function updateNodesAndNotify(node, newValue, prevValue, childNode, parentValue, isPrim, isRoot, level, forceNotify) {
|
|
1706
1861
|
if (!childNode)
|
|
1707
1862
|
childNode = node;
|
|
1708
1863
|
beginBatch();
|
|
@@ -1711,15 +1866,29 @@ function updateNodesAndNotify(node, newValue, prevValue, childNode, isPrim, isRo
|
|
|
1711
1866
|
}
|
|
1712
1867
|
let hasADiff = forceNotify || isPrim;
|
|
1713
1868
|
let whenOptimizedOnlyIf = false;
|
|
1869
|
+
let valueAsArr;
|
|
1870
|
+
let valueAsMap;
|
|
1714
1871
|
if (!isPrim || prevValue && !isPrimitive(prevValue)) {
|
|
1715
1872
|
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && typeof __devUpdateNodes !== "undefined") {
|
|
1716
1873
|
__devUpdateNodes.clear();
|
|
1717
1874
|
}
|
|
1718
1875
|
hasADiff = hasADiff || updateNodes(childNode, newValue, prevValue);
|
|
1719
1876
|
if (isArray(newValue)) {
|
|
1720
|
-
|
|
1877
|
+
valueAsArr = newValue;
|
|
1878
|
+
} else if (isMap(newValue) || isSet(newValue)) {
|
|
1879
|
+
valueAsMap = newValue;
|
|
1721
1880
|
}
|
|
1722
1881
|
}
|
|
1882
|
+
if (isArray(parentValue)) {
|
|
1883
|
+
valueAsArr = parentValue;
|
|
1884
|
+
} else if (isMap(parentValue) || isSet(parentValue)) {
|
|
1885
|
+
valueAsMap = parentValue;
|
|
1886
|
+
}
|
|
1887
|
+
if (valueAsArr) {
|
|
1888
|
+
whenOptimizedOnlyIf = (valueAsArr == null ? void 0 : valueAsArr.length) !== (prevValue == null ? void 0 : prevValue.length);
|
|
1889
|
+
} else if (valueAsMap) {
|
|
1890
|
+
whenOptimizedOnlyIf = (valueAsMap == null ? void 0 : valueAsMap.size) !== (prevValue == null ? void 0 : prevValue.size);
|
|
1891
|
+
}
|
|
1723
1892
|
if (isPrim || !newValue || isEmpty(newValue) && !isEmpty(prevValue) ? newValue !== prevValue : hasADiff) {
|
|
1724
1893
|
notify(
|
|
1725
1894
|
isPrim && isRoot ? node : childNode,
|
|
@@ -1801,7 +1970,7 @@ function peekInternal(node, activateRecursive) {
|
|
|
1801
1970
|
}
|
|
1802
1971
|
isFlushing = false;
|
|
1803
1972
|
let value = getNodeValue(node);
|
|
1804
|
-
if (!
|
|
1973
|
+
if (!node.root.isLoadingLocal && !node.isPlain) {
|
|
1805
1974
|
value = checkLazy(node, value, !!activateRecursive);
|
|
1806
1975
|
}
|
|
1807
1976
|
return value;
|
|
@@ -1832,7 +2001,8 @@ function checkLazy(node, value, activateRecursive) {
|
|
|
1832
2001
|
value = extractFunctionOrComputed(node.parent, node.key, value);
|
|
1833
2002
|
}
|
|
1834
2003
|
}
|
|
1835
|
-
|
|
2004
|
+
checkPlain(node, value);
|
|
2005
|
+
if ((lazy || node.needsExtract) && !node.isPlain && !isObservable(value) && !isPrimitive(value)) {
|
|
1836
2006
|
if (activateRecursive) {
|
|
1837
2007
|
recursivelyAutoActivate(value, node);
|
|
1838
2008
|
}
|
|
@@ -1855,11 +2025,14 @@ function checkProperty(value, key) {
|
|
|
1855
2025
|
return value[key];
|
|
1856
2026
|
}
|
|
1857
2027
|
}
|
|
1858
|
-
function
|
|
2028
|
+
function deactivateNode(node) {
|
|
1859
2029
|
var _a, _b;
|
|
1860
2030
|
(_a = node.activatedObserveDispose) == null ? void 0 : _a.call(node);
|
|
1861
2031
|
(_b = node.linkedToNodeDispose) == null ? void 0 : _b.call(node);
|
|
1862
2032
|
node.activatedObserveDispose = node.linkedToNodeDispose = node.linkedToNode = void 0;
|
|
2033
|
+
}
|
|
2034
|
+
function reactivateNode(node, lazyFn) {
|
|
2035
|
+
deactivateNode(node);
|
|
1863
2036
|
node.lazyFn = lazyFn;
|
|
1864
2037
|
node.lazy = true;
|
|
1865
2038
|
}
|
|
@@ -1907,7 +2080,7 @@ function activateNodeFunction(node, lazyFn) {
|
|
|
1907
2080
|
node.dirtyFn = refreshFn;
|
|
1908
2081
|
globalState.dirtyNodes.add(node);
|
|
1909
2082
|
}
|
|
1910
|
-
|
|
2083
|
+
const observeDispose = observe(
|
|
1911
2084
|
() => {
|
|
1912
2085
|
var _a, _b, _c, _d;
|
|
1913
2086
|
if (isFirst) {
|
|
@@ -1961,6 +2134,9 @@ function activateNodeFunction(node, lazyFn) {
|
|
|
1961
2134
|
value = (_d = (_c = activated2.get) == null ? void 0 : _c.call(activated2)) != null ? _d : activated2.initial;
|
|
1962
2135
|
}
|
|
1963
2136
|
}
|
|
2137
|
+
if (ignoreThisUpdate) {
|
|
2138
|
+
activatedValue = value;
|
|
2139
|
+
}
|
|
1964
2140
|
wasPromise = wasPromise || isPromise(value);
|
|
1965
2141
|
return value;
|
|
1966
2142
|
},
|
|
@@ -2007,6 +2183,10 @@ function activateNodeFunction(node, lazyFn) {
|
|
|
2007
2183
|
},
|
|
2008
2184
|
{ fromComputed: true }
|
|
2009
2185
|
);
|
|
2186
|
+
node.activatedObserveDispose = () => {
|
|
2187
|
+
observeDispose == null ? void 0 : observeDispose();
|
|
2188
|
+
disposes.forEach((fn) => fn());
|
|
2189
|
+
};
|
|
2010
2190
|
return activatedValue;
|
|
2011
2191
|
}
|
|
2012
2192
|
function activateNodeBase(node, value) {
|
|
@@ -2272,7 +2452,14 @@ function syncState(obs) {
|
|
|
2272
2452
|
syncCount: 0,
|
|
2273
2453
|
resetPersistence: void 0,
|
|
2274
2454
|
reset: () => Promise.resolve(),
|
|
2275
|
-
sync: () =>
|
|
2455
|
+
sync: () => {
|
|
2456
|
+
var _a;
|
|
2457
|
+
obs.peek();
|
|
2458
|
+
if ((_a = node.state) == null ? void 0 : _a.isGetting.peek()) {
|
|
2459
|
+
return when(node.state.isLoaded);
|
|
2460
|
+
}
|
|
2461
|
+
return Promise.resolve();
|
|
2462
|
+
},
|
|
2276
2463
|
getPendingChanges: () => ({}),
|
|
2277
2464
|
// TODOV3 remove
|
|
2278
2465
|
clearPersist: void 0
|
|
@@ -2286,10 +2473,13 @@ function syncState(obs) {
|
|
|
2286
2473
|
var internal = {
|
|
2287
2474
|
createPreviousHandler,
|
|
2288
2475
|
clone,
|
|
2476
|
+
deactivateNode,
|
|
2289
2477
|
deepMerge,
|
|
2290
2478
|
ensureNodeValue,
|
|
2291
2479
|
findIDKey,
|
|
2292
2480
|
get,
|
|
2481
|
+
getChildNode,
|
|
2482
|
+
getKeys,
|
|
2293
2483
|
getNode,
|
|
2294
2484
|
getNodeValue,
|
|
2295
2485
|
getPathType,
|
|
@@ -2302,6 +2492,8 @@ var internal = {
|
|
|
2302
2492
|
observableFns,
|
|
2303
2493
|
optimized,
|
|
2304
2494
|
peek,
|
|
2495
|
+
reactivateNode,
|
|
2496
|
+
registerMiddleware,
|
|
2305
2497
|
safeParse,
|
|
2306
2498
|
safeStringify,
|
|
2307
2499
|
set,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@legendapp/state",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.40",
|
|
4
4
|
"description": "legend-state",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"private": false,
|
|
@@ -13,6 +13,14 @@
|
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"use-sync-external-store": "^1.2.2"
|
|
15
15
|
},
|
|
16
|
+
"peerDependencies": {
|
|
17
|
+
"expo-sqlite": "^15.0.0"
|
|
18
|
+
},
|
|
19
|
+
"peerDependenciesMeta": {
|
|
20
|
+
"expo-sqlite": {
|
|
21
|
+
"optional": true
|
|
22
|
+
}
|
|
23
|
+
},
|
|
16
24
|
"author": "Legend <contact@legendapp.com> (https://github.com/LegendApp)",
|
|
17
25
|
"keywords": [
|
|
18
26
|
"react",
|
|
@@ -48,6 +56,12 @@
|
|
|
48
56
|
"./types/babel": {
|
|
49
57
|
"types": "./types/babel.d.ts"
|
|
50
58
|
},
|
|
59
|
+
"./types/reactive-web": {
|
|
60
|
+
"types": "./types/reactive-web.d.ts"
|
|
61
|
+
},
|
|
62
|
+
"./types/reactive-native": {
|
|
63
|
+
"types": "./types/reactive-native.d.ts"
|
|
64
|
+
},
|
|
51
65
|
".": {
|
|
52
66
|
"import": "./index.mjs",
|
|
53
67
|
"require": "./index.js",
|
|
@@ -63,6 +77,16 @@
|
|
|
63
77
|
"require": "./react.js",
|
|
64
78
|
"types": "./react.d.ts"
|
|
65
79
|
},
|
|
80
|
+
"./react-native": {
|
|
81
|
+
"import": "./react-native.mjs",
|
|
82
|
+
"require": "./react-native.js",
|
|
83
|
+
"types": "./react-native.d.ts"
|
|
84
|
+
},
|
|
85
|
+
"./react-web": {
|
|
86
|
+
"import": "./react-web.mjs",
|
|
87
|
+
"require": "./react-web.js",
|
|
88
|
+
"types": "./react-web.d.ts"
|
|
89
|
+
},
|
|
66
90
|
"./trace": {
|
|
67
91
|
"import": "./trace.mjs",
|
|
68
92
|
"require": "./trace.js",
|
|
@@ -73,6 +97,11 @@
|
|
|
73
97
|
"require": "./react-reactive/enableReactive.js",
|
|
74
98
|
"types": "./react-reactive/enableReactive.d.ts"
|
|
75
99
|
},
|
|
100
|
+
"./react-reactive/Components": {
|
|
101
|
+
"import": "./react-reactive/Components.mjs",
|
|
102
|
+
"require": "./react-reactive/Components.js",
|
|
103
|
+
"types": "./react-reactive/Components.d.ts"
|
|
104
|
+
},
|
|
76
105
|
"./react-reactive/enableReactComponents": {
|
|
77
106
|
"import": "./react-reactive/enableReactComponents.mjs",
|
|
78
107
|
"require": "./react-reactive/enableReactComponents.js",
|
|
@@ -228,6 +257,11 @@
|
|
|
228
257
|
"require": "./persist-plugins/local-storage.js",
|
|
229
258
|
"types": "./persist-plugins/local-storage.d.ts"
|
|
230
259
|
},
|
|
260
|
+
"./persist-plugins/expo-sqlite": {
|
|
261
|
+
"import": "./persist-plugins/expo-sqlite.mjs",
|
|
262
|
+
"require": "./persist-plugins/expo-sqlite.js",
|
|
263
|
+
"types": "./persist-plugins/expo-sqlite.d.ts"
|
|
264
|
+
},
|
|
231
265
|
"./persist-plugins/async-storage": {
|
|
232
266
|
"import": "./persist-plugins/async-storage.mjs",
|
|
233
267
|
"require": "./persist-plugins/async-storage.js",
|