@legendapp/state 3.0.0-beta.1 → 3.0.0-beta.12
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/index.d.mts +2 -0
- package/index.d.ts +2 -0
- package/index.js +9 -3
- package/index.mjs +9 -3
- package/package.json +7 -1
- package/persist-plugins/async-storage.js +17 -9
- package/persist-plugins/async-storage.mjs +17 -9
- package/react-reactive/enableReactComponents.d.mts +3 -2
- package/react-reactive/enableReactComponents.d.ts +3 -2
- package/react-reactive/enableReactComponents.js +7 -2
- package/react-reactive/enableReactComponents.mjs +7 -2
- 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 +7 -2
- package/react-reactive/enableReactive.mjs +7 -2
- 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.d.mts +9 -7
- package/react.d.ts +9 -7
- package/sync-plugins/crud.d.mts +5 -2
- package/sync-plugins/crud.d.ts +5 -2
- package/sync-plugins/crud.js +22 -24
- package/sync-plugins/crud.mjs +22 -24
- package/sync-plugins/keel.js +1 -1
- package/sync-plugins/keel.mjs +1 -1
- package/sync-plugins/supabase.js +14 -6
- package/sync-plugins/supabase.mjs +14 -6
- package/sync-plugins/tanstack-query.d.mts +5 -5
- package/sync-plugins/tanstack-query.d.ts +5 -5
- package/sync-plugins/tanstack-query.js +17 -2
- package/sync-plugins/tanstack-query.mjs +17 -2
- package/sync-plugins/tanstack-react-query.d.mts +4 -2
- package/sync-plugins/tanstack-react-query.d.ts +4 -2
- package/sync.js +114 -91
- package/sync.mjs +114 -91
- 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/sync.js
CHANGED
|
@@ -743,9 +743,20 @@ async function loadLocal(value$, syncOptions, syncState$, localState) {
|
|
|
743
743
|
await state.when(initialized$);
|
|
744
744
|
}
|
|
745
745
|
if (persistPlugin.loadTable) {
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
746
|
+
try {
|
|
747
|
+
const promise = persistPlugin.loadTable(table, config);
|
|
748
|
+
if (promise) {
|
|
749
|
+
await promise;
|
|
750
|
+
}
|
|
751
|
+
} catch (err) {
|
|
752
|
+
if (process.env.NODE_ENV === "development") {
|
|
753
|
+
console.error(
|
|
754
|
+
"[legend-state] Error loading local cache. This would be a crashing error in production.",
|
|
755
|
+
err
|
|
756
|
+
);
|
|
757
|
+
} else {
|
|
758
|
+
throw err;
|
|
759
|
+
}
|
|
749
760
|
}
|
|
750
761
|
}
|
|
751
762
|
const prevValue = getNodeValue(node);
|
|
@@ -848,7 +859,8 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
848
859
|
localState.isApplyingPending = false;
|
|
849
860
|
}
|
|
850
861
|
};
|
|
851
|
-
|
|
862
|
+
const { get, subscribe } = syncOptions;
|
|
863
|
+
if (get || subscribe) {
|
|
852
864
|
sync = async () => {
|
|
853
865
|
var _a;
|
|
854
866
|
if (isSynced && (!getNodeValue(getNode(syncState$)).isSyncEnabled || state.shouldIgnoreUnobserved(node, sync))) {
|
|
@@ -861,8 +873,7 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
861
873
|
}
|
|
862
874
|
const lastSync = (_a = metadatas.get(obs$)) == null ? void 0 : _a.lastSync;
|
|
863
875
|
const pending = localState.pendingChanges;
|
|
864
|
-
|
|
865
|
-
if (get) {
|
|
876
|
+
if (get || subscribe) {
|
|
866
877
|
const { waitFor } = syncOptions;
|
|
867
878
|
const runGet = () => {
|
|
868
879
|
var _a2;
|
|
@@ -955,7 +966,7 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
955
966
|
node.activationState.onChange = onChange;
|
|
956
967
|
}
|
|
957
968
|
if (!isSubscribed && syncOptions.subscribe) {
|
|
958
|
-
const
|
|
969
|
+
const subscribe2 = syncOptions.subscribe;
|
|
959
970
|
isSubscribed = true;
|
|
960
971
|
const doSubscribe = () => {
|
|
961
972
|
const subscribeParams = {
|
|
@@ -963,17 +974,27 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
963
974
|
value$: obs$,
|
|
964
975
|
lastSync,
|
|
965
976
|
update: (params) => {
|
|
966
|
-
state.when(
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
977
|
+
state.when(
|
|
978
|
+
() => !get || syncState$.isLoaded.get(),
|
|
979
|
+
() => {
|
|
980
|
+
state.when(waitFor || true, () => {
|
|
981
|
+
params.mode || (params.mode = syncOptions.mode || "merge");
|
|
982
|
+
onChange(params);
|
|
983
|
+
if (!syncState$.isLoaded.peek()) {
|
|
984
|
+
syncState$.assign({
|
|
985
|
+
isLoaded: syncStateValue.numPendingRemoteLoads < 1,
|
|
986
|
+
error: void 0,
|
|
987
|
+
isGetting: syncStateValue.numPendingGets > 0
|
|
988
|
+
});
|
|
989
|
+
}
|
|
990
|
+
});
|
|
991
|
+
}
|
|
992
|
+
);
|
|
972
993
|
},
|
|
973
994
|
refresh: () => state.when(syncState$.isLoaded, sync),
|
|
974
995
|
onError: (error) => onGetError(error, { source: "subscribe", subscribeParams })
|
|
975
996
|
};
|
|
976
|
-
unsubscribe =
|
|
997
|
+
unsubscribe = subscribe2(subscribeParams);
|
|
977
998
|
};
|
|
978
999
|
if (waitFor) {
|
|
979
1000
|
state.whenReady(waitFor, doSubscribe);
|
|
@@ -982,85 +1003,87 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
982
1003
|
}
|
|
983
1004
|
}
|
|
984
1005
|
const existingValue = getNodeValue(node);
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
},
|
|
1010
|
-
resetCache: () => {
|
|
1011
|
-
var _a3;
|
|
1012
|
-
modeBeforeReset = getParams.mode;
|
|
1013
|
-
getParams.mode = "set";
|
|
1014
|
-
return (_a3 = syncStateValue.resetPersistence) == null ? void 0 : _a3.call(syncStateValue);
|
|
1015
|
-
},
|
|
1016
|
-
cancel: false
|
|
1017
|
-
};
|
|
1018
|
-
(_a2 = syncOptions.onBeforeGet) == null ? void 0 : _a2.call(syncOptions, beforeGetParams);
|
|
1019
|
-
if (!beforeGetParams.cancel) {
|
|
1020
|
-
syncState$.assign({
|
|
1021
|
-
numPendingGets: (syncStateValue.numPendingGets || 0) + 1,
|
|
1022
|
-
isGetting: true
|
|
1023
|
-
});
|
|
1024
|
-
const got = runWithRetry(
|
|
1025
|
-
getParams,
|
|
1026
|
-
syncOptions.retry,
|
|
1027
|
-
(retryEvent) => {
|
|
1028
|
-
const params = getParams;
|
|
1029
|
-
params.cancelRetry = retryEvent.cancelRetry;
|
|
1030
|
-
params.retryNum = retryEvent.retryNum;
|
|
1031
|
-
return get(params);
|
|
1032
|
-
},
|
|
1033
|
-
onError
|
|
1034
|
-
);
|
|
1035
|
-
const numGets = node.numGets = (node.numGets || 0) + 1;
|
|
1036
|
-
const handle = (value) => {
|
|
1037
|
-
syncState$.numPendingGets.set((v) => v - 1);
|
|
1038
|
-
if (isWaitingForLoad) {
|
|
1039
|
-
isWaitingForLoad = false;
|
|
1040
|
-
syncStateValue.numPendingRemoteLoads--;
|
|
1041
|
-
}
|
|
1042
|
-
if (numGets >= (node.getNumResolved || 0)) {
|
|
1043
|
-
node.getNumResolved = node.numGets;
|
|
1044
|
-
onChange({
|
|
1045
|
-
value,
|
|
1046
|
-
lastSync: getParams.lastSync,
|
|
1047
|
-
mode: getParams.mode
|
|
1006
|
+
if (get) {
|
|
1007
|
+
const onError = (error) => onGetError(error, { getParams, source: "get" });
|
|
1008
|
+
const getParams = {
|
|
1009
|
+
node,
|
|
1010
|
+
value$: obs$,
|
|
1011
|
+
value: state.isFunction(existingValue) || (existingValue == null ? void 0 : existingValue[symbolLinked]) ? void 0 : existingValue,
|
|
1012
|
+
mode: syncOptions.mode,
|
|
1013
|
+
refresh: sync,
|
|
1014
|
+
options: syncOptions,
|
|
1015
|
+
lastSync,
|
|
1016
|
+
updateLastSync: (lastSync2) => getParams.lastSync = lastSync2,
|
|
1017
|
+
onError,
|
|
1018
|
+
retryNum: 0,
|
|
1019
|
+
cancelRetry: false
|
|
1020
|
+
};
|
|
1021
|
+
let modeBeforeReset = void 0;
|
|
1022
|
+
const beforeGetParams = {
|
|
1023
|
+
value: getParams.value,
|
|
1024
|
+
lastSync,
|
|
1025
|
+
pendingChanges: pending && !state.isEmpty(pending) ? pending : void 0,
|
|
1026
|
+
clearPendingChanges: async () => {
|
|
1027
|
+
localState.pendingChanges = {};
|
|
1028
|
+
await updateMetadataImmediate(obs$, localState, syncState$, syncOptions, {
|
|
1029
|
+
pending: localState.pendingChanges
|
|
1048
1030
|
});
|
|
1049
|
-
}
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
modeBeforeReset =
|
|
1053
|
-
|
|
1031
|
+
},
|
|
1032
|
+
resetCache: () => {
|
|
1033
|
+
var _a3;
|
|
1034
|
+
modeBeforeReset = getParams.mode;
|
|
1035
|
+
getParams.mode = "set";
|
|
1036
|
+
return (_a3 = syncStateValue.resetPersistence) == null ? void 0 : _a3.call(syncStateValue);
|
|
1037
|
+
},
|
|
1038
|
+
cancel: false
|
|
1039
|
+
};
|
|
1040
|
+
(_a2 = syncOptions.onBeforeGet) == null ? void 0 : _a2.call(syncOptions, beforeGetParams);
|
|
1041
|
+
if (!beforeGetParams.cancel) {
|
|
1054
1042
|
syncState$.assign({
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
isGetting: syncStateValue.numPendingGets > 0
|
|
1043
|
+
numPendingGets: (syncStateValue.numPendingGets || 0) + 1,
|
|
1044
|
+
isGetting: true
|
|
1058
1045
|
});
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1046
|
+
const got = runWithRetry(
|
|
1047
|
+
getParams,
|
|
1048
|
+
syncOptions.retry,
|
|
1049
|
+
(retryEvent) => {
|
|
1050
|
+
const params = getParams;
|
|
1051
|
+
params.cancelRetry = retryEvent.cancelRetry;
|
|
1052
|
+
params.retryNum = retryEvent.retryNum;
|
|
1053
|
+
return get(params);
|
|
1054
|
+
},
|
|
1055
|
+
onError
|
|
1056
|
+
);
|
|
1057
|
+
const numGets = node.numGets = (node.numGets || 0) + 1;
|
|
1058
|
+
const handle = (value) => {
|
|
1059
|
+
syncState$.numPendingGets.set((v) => v - 1);
|
|
1060
|
+
if (isWaitingForLoad) {
|
|
1061
|
+
isWaitingForLoad = false;
|
|
1062
|
+
syncStateValue.numPendingRemoteLoads--;
|
|
1063
|
+
}
|
|
1064
|
+
if (numGets >= (node.getNumResolved || 0)) {
|
|
1065
|
+
node.getNumResolved = node.numGets;
|
|
1066
|
+
onChange({
|
|
1067
|
+
value,
|
|
1068
|
+
lastSync: getParams.lastSync,
|
|
1069
|
+
mode: getParams.mode
|
|
1070
|
+
});
|
|
1071
|
+
}
|
|
1072
|
+
if (modeBeforeReset) {
|
|
1073
|
+
getParams.mode = modeBeforeReset;
|
|
1074
|
+
modeBeforeReset = void 0;
|
|
1075
|
+
}
|
|
1076
|
+
syncState$.assign({
|
|
1077
|
+
isLoaded: syncStateValue.numPendingRemoteLoads < 1,
|
|
1078
|
+
error: void 0,
|
|
1079
|
+
isGetting: syncStateValue.numPendingGets > 0
|
|
1080
|
+
});
|
|
1081
|
+
};
|
|
1082
|
+
if (state.isPromise(got)) {
|
|
1083
|
+
got.then(handle).catch(onError);
|
|
1084
|
+
} else {
|
|
1085
|
+
handle(got);
|
|
1086
|
+
}
|
|
1064
1087
|
}
|
|
1065
1088
|
}
|
|
1066
1089
|
};
|
|
@@ -1132,7 +1155,7 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
1132
1155
|
return true;
|
|
1133
1156
|
};
|
|
1134
1157
|
state.when(onAllPersistLoaded, function() {
|
|
1135
|
-
if (syncOptions.get && syncOptions.syncMode === "auto") {
|
|
1158
|
+
if ((syncOptions.get || syncOptions.subscribe) && syncOptions.syncMode === "auto") {
|
|
1136
1159
|
sync();
|
|
1137
1160
|
}
|
|
1138
1161
|
if ((syncOptions == null ? void 0 : syncOptions.set) || (syncOptions == null ? void 0 : syncOptions.persist)) {
|
package/sync.mjs
CHANGED
|
@@ -741,9 +741,20 @@ async function loadLocal(value$, syncOptions, syncState$, localState) {
|
|
|
741
741
|
await when(initialized$);
|
|
742
742
|
}
|
|
743
743
|
if (persistPlugin.loadTable) {
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
744
|
+
try {
|
|
745
|
+
const promise = persistPlugin.loadTable(table, config);
|
|
746
|
+
if (promise) {
|
|
747
|
+
await promise;
|
|
748
|
+
}
|
|
749
|
+
} catch (err) {
|
|
750
|
+
if (process.env.NODE_ENV === "development") {
|
|
751
|
+
console.error(
|
|
752
|
+
"[legend-state] Error loading local cache. This would be a crashing error in production.",
|
|
753
|
+
err
|
|
754
|
+
);
|
|
755
|
+
} else {
|
|
756
|
+
throw err;
|
|
757
|
+
}
|
|
747
758
|
}
|
|
748
759
|
}
|
|
749
760
|
const prevValue = getNodeValue(node);
|
|
@@ -846,7 +857,8 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
846
857
|
localState.isApplyingPending = false;
|
|
847
858
|
}
|
|
848
859
|
};
|
|
849
|
-
|
|
860
|
+
const { get, subscribe } = syncOptions;
|
|
861
|
+
if (get || subscribe) {
|
|
850
862
|
sync = async () => {
|
|
851
863
|
var _a;
|
|
852
864
|
if (isSynced && (!getNodeValue(getNode(syncState$)).isSyncEnabled || shouldIgnoreUnobserved(node, sync))) {
|
|
@@ -859,8 +871,7 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
859
871
|
}
|
|
860
872
|
const lastSync = (_a = metadatas.get(obs$)) == null ? void 0 : _a.lastSync;
|
|
861
873
|
const pending = localState.pendingChanges;
|
|
862
|
-
|
|
863
|
-
if (get) {
|
|
874
|
+
if (get || subscribe) {
|
|
864
875
|
const { waitFor } = syncOptions;
|
|
865
876
|
const runGet = () => {
|
|
866
877
|
var _a2;
|
|
@@ -953,7 +964,7 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
953
964
|
node.activationState.onChange = onChange;
|
|
954
965
|
}
|
|
955
966
|
if (!isSubscribed && syncOptions.subscribe) {
|
|
956
|
-
const
|
|
967
|
+
const subscribe2 = syncOptions.subscribe;
|
|
957
968
|
isSubscribed = true;
|
|
958
969
|
const doSubscribe = () => {
|
|
959
970
|
const subscribeParams = {
|
|
@@ -961,17 +972,27 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
961
972
|
value$: obs$,
|
|
962
973
|
lastSync,
|
|
963
974
|
update: (params) => {
|
|
964
|
-
when(
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
975
|
+
when(
|
|
976
|
+
() => !get || syncState$.isLoaded.get(),
|
|
977
|
+
() => {
|
|
978
|
+
when(waitFor || true, () => {
|
|
979
|
+
params.mode || (params.mode = syncOptions.mode || "merge");
|
|
980
|
+
onChange(params);
|
|
981
|
+
if (!syncState$.isLoaded.peek()) {
|
|
982
|
+
syncState$.assign({
|
|
983
|
+
isLoaded: syncStateValue.numPendingRemoteLoads < 1,
|
|
984
|
+
error: void 0,
|
|
985
|
+
isGetting: syncStateValue.numPendingGets > 0
|
|
986
|
+
});
|
|
987
|
+
}
|
|
988
|
+
});
|
|
989
|
+
}
|
|
990
|
+
);
|
|
970
991
|
},
|
|
971
992
|
refresh: () => when(syncState$.isLoaded, sync),
|
|
972
993
|
onError: (error) => onGetError(error, { source: "subscribe", subscribeParams })
|
|
973
994
|
};
|
|
974
|
-
unsubscribe =
|
|
995
|
+
unsubscribe = subscribe2(subscribeParams);
|
|
975
996
|
};
|
|
976
997
|
if (waitFor) {
|
|
977
998
|
whenReady(waitFor, doSubscribe);
|
|
@@ -980,85 +1001,87 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
980
1001
|
}
|
|
981
1002
|
}
|
|
982
1003
|
const existingValue = getNodeValue(node);
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
},
|
|
1008
|
-
resetCache: () => {
|
|
1009
|
-
var _a3;
|
|
1010
|
-
modeBeforeReset = getParams.mode;
|
|
1011
|
-
getParams.mode = "set";
|
|
1012
|
-
return (_a3 = syncStateValue.resetPersistence) == null ? void 0 : _a3.call(syncStateValue);
|
|
1013
|
-
},
|
|
1014
|
-
cancel: false
|
|
1015
|
-
};
|
|
1016
|
-
(_a2 = syncOptions.onBeforeGet) == null ? void 0 : _a2.call(syncOptions, beforeGetParams);
|
|
1017
|
-
if (!beforeGetParams.cancel) {
|
|
1018
|
-
syncState$.assign({
|
|
1019
|
-
numPendingGets: (syncStateValue.numPendingGets || 0) + 1,
|
|
1020
|
-
isGetting: true
|
|
1021
|
-
});
|
|
1022
|
-
const got = runWithRetry(
|
|
1023
|
-
getParams,
|
|
1024
|
-
syncOptions.retry,
|
|
1025
|
-
(retryEvent) => {
|
|
1026
|
-
const params = getParams;
|
|
1027
|
-
params.cancelRetry = retryEvent.cancelRetry;
|
|
1028
|
-
params.retryNum = retryEvent.retryNum;
|
|
1029
|
-
return get(params);
|
|
1030
|
-
},
|
|
1031
|
-
onError
|
|
1032
|
-
);
|
|
1033
|
-
const numGets = node.numGets = (node.numGets || 0) + 1;
|
|
1034
|
-
const handle = (value) => {
|
|
1035
|
-
syncState$.numPendingGets.set((v) => v - 1);
|
|
1036
|
-
if (isWaitingForLoad) {
|
|
1037
|
-
isWaitingForLoad = false;
|
|
1038
|
-
syncStateValue.numPendingRemoteLoads--;
|
|
1039
|
-
}
|
|
1040
|
-
if (numGets >= (node.getNumResolved || 0)) {
|
|
1041
|
-
node.getNumResolved = node.numGets;
|
|
1042
|
-
onChange({
|
|
1043
|
-
value,
|
|
1044
|
-
lastSync: getParams.lastSync,
|
|
1045
|
-
mode: getParams.mode
|
|
1004
|
+
if (get) {
|
|
1005
|
+
const onError = (error) => onGetError(error, { getParams, source: "get" });
|
|
1006
|
+
const getParams = {
|
|
1007
|
+
node,
|
|
1008
|
+
value$: obs$,
|
|
1009
|
+
value: isFunction(existingValue) || (existingValue == null ? void 0 : existingValue[symbolLinked]) ? void 0 : existingValue,
|
|
1010
|
+
mode: syncOptions.mode,
|
|
1011
|
+
refresh: sync,
|
|
1012
|
+
options: syncOptions,
|
|
1013
|
+
lastSync,
|
|
1014
|
+
updateLastSync: (lastSync2) => getParams.lastSync = lastSync2,
|
|
1015
|
+
onError,
|
|
1016
|
+
retryNum: 0,
|
|
1017
|
+
cancelRetry: false
|
|
1018
|
+
};
|
|
1019
|
+
let modeBeforeReset = void 0;
|
|
1020
|
+
const beforeGetParams = {
|
|
1021
|
+
value: getParams.value,
|
|
1022
|
+
lastSync,
|
|
1023
|
+
pendingChanges: pending && !isEmpty(pending) ? pending : void 0,
|
|
1024
|
+
clearPendingChanges: async () => {
|
|
1025
|
+
localState.pendingChanges = {};
|
|
1026
|
+
await updateMetadataImmediate(obs$, localState, syncState$, syncOptions, {
|
|
1027
|
+
pending: localState.pendingChanges
|
|
1046
1028
|
});
|
|
1047
|
-
}
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
modeBeforeReset =
|
|
1051
|
-
|
|
1029
|
+
},
|
|
1030
|
+
resetCache: () => {
|
|
1031
|
+
var _a3;
|
|
1032
|
+
modeBeforeReset = getParams.mode;
|
|
1033
|
+
getParams.mode = "set";
|
|
1034
|
+
return (_a3 = syncStateValue.resetPersistence) == null ? void 0 : _a3.call(syncStateValue);
|
|
1035
|
+
},
|
|
1036
|
+
cancel: false
|
|
1037
|
+
};
|
|
1038
|
+
(_a2 = syncOptions.onBeforeGet) == null ? void 0 : _a2.call(syncOptions, beforeGetParams);
|
|
1039
|
+
if (!beforeGetParams.cancel) {
|
|
1052
1040
|
syncState$.assign({
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
isGetting: syncStateValue.numPendingGets > 0
|
|
1041
|
+
numPendingGets: (syncStateValue.numPendingGets || 0) + 1,
|
|
1042
|
+
isGetting: true
|
|
1056
1043
|
});
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1044
|
+
const got = runWithRetry(
|
|
1045
|
+
getParams,
|
|
1046
|
+
syncOptions.retry,
|
|
1047
|
+
(retryEvent) => {
|
|
1048
|
+
const params = getParams;
|
|
1049
|
+
params.cancelRetry = retryEvent.cancelRetry;
|
|
1050
|
+
params.retryNum = retryEvent.retryNum;
|
|
1051
|
+
return get(params);
|
|
1052
|
+
},
|
|
1053
|
+
onError
|
|
1054
|
+
);
|
|
1055
|
+
const numGets = node.numGets = (node.numGets || 0) + 1;
|
|
1056
|
+
const handle = (value) => {
|
|
1057
|
+
syncState$.numPendingGets.set((v) => v - 1);
|
|
1058
|
+
if (isWaitingForLoad) {
|
|
1059
|
+
isWaitingForLoad = false;
|
|
1060
|
+
syncStateValue.numPendingRemoteLoads--;
|
|
1061
|
+
}
|
|
1062
|
+
if (numGets >= (node.getNumResolved || 0)) {
|
|
1063
|
+
node.getNumResolved = node.numGets;
|
|
1064
|
+
onChange({
|
|
1065
|
+
value,
|
|
1066
|
+
lastSync: getParams.lastSync,
|
|
1067
|
+
mode: getParams.mode
|
|
1068
|
+
});
|
|
1069
|
+
}
|
|
1070
|
+
if (modeBeforeReset) {
|
|
1071
|
+
getParams.mode = modeBeforeReset;
|
|
1072
|
+
modeBeforeReset = void 0;
|
|
1073
|
+
}
|
|
1074
|
+
syncState$.assign({
|
|
1075
|
+
isLoaded: syncStateValue.numPendingRemoteLoads < 1,
|
|
1076
|
+
error: void 0,
|
|
1077
|
+
isGetting: syncStateValue.numPendingGets > 0
|
|
1078
|
+
});
|
|
1079
|
+
};
|
|
1080
|
+
if (isPromise$1(got)) {
|
|
1081
|
+
got.then(handle).catch(onError);
|
|
1082
|
+
} else {
|
|
1083
|
+
handle(got);
|
|
1084
|
+
}
|
|
1062
1085
|
}
|
|
1063
1086
|
}
|
|
1064
1087
|
};
|
|
@@ -1130,7 +1153,7 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
1130
1153
|
return true;
|
|
1131
1154
|
};
|
|
1132
1155
|
when(onAllPersistLoaded, function() {
|
|
1133
|
-
if (syncOptions.get && syncOptions.syncMode === "auto") {
|
|
1156
|
+
if ((syncOptions.get || syncOptions.subscribe) && syncOptions.syncMode === "auto") {
|
|
1134
1157
|
sync();
|
|
1135
1158
|
}
|
|
1136
1159
|
if ((syncOptions == null ? void 0 : syncOptions.set) || (syncOptions == null ? void 0 : syncOptions.persist)) {
|
package/trace.js
CHANGED
|
@@ -19,13 +19,12 @@ function getNodePath(node) {
|
|
|
19
19
|
// src/trace/useTraceListeners.ts
|
|
20
20
|
var { optimized, tracking } = state.internal;
|
|
21
21
|
function useTraceListeners(name) {
|
|
22
|
-
if (process.env.NODE_ENV === "development" && tracking.current) {
|
|
22
|
+
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && tracking.current) {
|
|
23
23
|
tracking.current.traceListeners = traceNodes.bind(this, name);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
function traceNodes(name, nodes) {
|
|
27
|
-
if (process.env.NODE_ENV === "development" &&
|
|
28
|
-
tracking.current.traceListeners = void 0;
|
|
27
|
+
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && nodes.size) {
|
|
29
28
|
const arr = [];
|
|
30
29
|
if (nodes) {
|
|
31
30
|
for (const tracked of nodes.values()) {
|
|
@@ -45,7 +44,7 @@ ${arr.join("\n")}`
|
|
|
45
44
|
}
|
|
46
45
|
var { tracking: tracking2 } = state.internal;
|
|
47
46
|
function useTraceUpdates(name) {
|
|
48
|
-
if (process.env.NODE_ENV === "development" && tracking2.current) {
|
|
47
|
+
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && tracking2.current) {
|
|
49
48
|
tracking2.current.traceUpdates = replaceUpdateFn.bind(void 0, name);
|
|
50
49
|
}
|
|
51
50
|
}
|
|
@@ -54,13 +53,13 @@ function replaceUpdateFn(name, updateFn) {
|
|
|
54
53
|
}
|
|
55
54
|
function onChange(name, updateFn, params) {
|
|
56
55
|
const { changes } = params;
|
|
57
|
-
if (process.env.NODE_ENV === "development") {
|
|
56
|
+
if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") {
|
|
58
57
|
changes.forEach(({ path, valueAtPath, prevAtPath }) => {
|
|
59
58
|
console.log(`[legend-state] Rendering ${name ? name + " " : ""}because "${path}" changed:
|
|
60
59
|
from: ${JSON.stringify(prevAtPath)}
|
|
61
60
|
to: ${JSON.stringify(valueAtPath)}`);
|
|
62
61
|
});
|
|
63
|
-
return updateFn();
|
|
62
|
+
return updateFn(params);
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
65
|
var { optimized: optimized2, tracking: tracking3 } = state.internal;
|
package/trace.mjs
CHANGED
|
@@ -17,13 +17,12 @@ function getNodePath(node) {
|
|
|
17
17
|
// src/trace/useTraceListeners.ts
|
|
18
18
|
var { optimized, tracking } = internal;
|
|
19
19
|
function useTraceListeners(name) {
|
|
20
|
-
if (process.env.NODE_ENV === "development" && tracking.current) {
|
|
20
|
+
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && tracking.current) {
|
|
21
21
|
tracking.current.traceListeners = traceNodes.bind(this, name);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
function traceNodes(name, nodes) {
|
|
25
|
-
if (process.env.NODE_ENV === "development" &&
|
|
26
|
-
tracking.current.traceListeners = void 0;
|
|
25
|
+
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && nodes.size) {
|
|
27
26
|
const arr = [];
|
|
28
27
|
if (nodes) {
|
|
29
28
|
for (const tracked of nodes.values()) {
|
|
@@ -43,7 +42,7 @@ ${arr.join("\n")}`
|
|
|
43
42
|
}
|
|
44
43
|
var { tracking: tracking2 } = internal;
|
|
45
44
|
function useTraceUpdates(name) {
|
|
46
|
-
if (process.env.NODE_ENV === "development" && tracking2.current) {
|
|
45
|
+
if ((process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") && tracking2.current) {
|
|
47
46
|
tracking2.current.traceUpdates = replaceUpdateFn.bind(void 0, name);
|
|
48
47
|
}
|
|
49
48
|
}
|
|
@@ -52,13 +51,13 @@ function replaceUpdateFn(name, updateFn) {
|
|
|
52
51
|
}
|
|
53
52
|
function onChange(name, updateFn, params) {
|
|
54
53
|
const { changes } = params;
|
|
55
|
-
if (process.env.NODE_ENV === "development") {
|
|
54
|
+
if (process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test") {
|
|
56
55
|
changes.forEach(({ path, valueAtPath, prevAtPath }) => {
|
|
57
56
|
console.log(`[legend-state] Rendering ${name ? name + " " : ""}because "${path}" changed:
|
|
58
57
|
from: ${JSON.stringify(prevAtPath)}
|
|
59
58
|
to: ${JSON.stringify(valueAtPath)}`);
|
|
60
59
|
});
|
|
61
|
-
return updateFn();
|
|
60
|
+
return updateFn(params);
|
|
62
61
|
}
|
|
63
62
|
}
|
|
64
63
|
var { optimized: optimized2, tracking: tracking3 } = internal;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
2
|
+
import type { IReactive } from '@legendapp/state/react';
|
|
3
|
+
|
|
4
|
+
declare module '@legendapp/state/react' {
|
|
5
|
+
interface IReactive {
|
|
6
|
+
ActivityIndicator: FCReactive<ActivityIndicator, ActivityIndicatorProps>;
|
|
7
|
+
Button: FCReactive<Button, ButtonProps>;
|
|
8
|
+
FlatList: FCReactive<FlatList, FlatListProps<any>>;
|
|
9
|
+
Image: FCReactive<Image, ImageProps>;
|
|
10
|
+
Pressable: FCReactive<typeof Pressable, PressableProps>;
|
|
11
|
+
ScrollView: FCReactive<ScrollView, ScrollViewProps>;
|
|
12
|
+
SectionList: FCReactive<SectionList, SectionListProps<any>>;
|
|
13
|
+
Switch: FCReactive<Switch, SwitchProps>;
|
|
14
|
+
Text: FCReactive<Text, TextProps>;
|
|
15
|
+
TextInput: FCReactive<TextInput, TextInputProps>;
|
|
16
|
+
TouchableWithoutFeedback: FCReactive<TouchableWithoutFeedback, TouchableWithoutFeedbackProps>;
|
|
17
|
+
View: FCReactive<View, ViewProps>;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
2
|
+
import type { IReactive, FCReactiveObject } from '@legendapp/state/react';
|
|
3
|
+
|
|
4
|
+
declare module '@legendapp/state/react' {
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
6
|
+
interface IReactive extends FCReactiveObject<JSX.IntrinsicElements> {}
|
|
7
|
+
}
|