@legendapp/state 3.0.0-alpha.12 → 3.0.0-alpha.13
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 +1 -2
- package/index.d.ts +1 -2
- package/index.js +21 -14
- package/index.mjs +21 -14
- package/package.json +1 -1
- package/persist-plugins/async-storage.d.mts +2 -2
- package/persist-plugins/async-storage.d.ts +2 -2
- package/sync-plugins/firebase.js +2 -2
- package/sync-plugins/firebase.mjs +3 -3
- package/sync-plugins/keel.d.mts +3 -1
- package/sync-plugins/keel.d.ts +3 -1
- package/sync-plugins/keel.js +2 -2
- package/sync-plugins/keel.mjs +2 -2
- package/sync-plugins/supabase.js +1 -1
- package/sync-plugins/supabase.mjs +2 -2
- package/sync.d.mts +5 -144
- package/sync.d.ts +5 -144
- package/sync.js +10 -10
- package/sync.mjs +10 -10
package/index.d.mts
CHANGED
|
@@ -5,7 +5,7 @@ type RemoveIndex<T> = {
|
|
|
5
5
|
};
|
|
6
6
|
type BuiltIns = String | Boolean | Number | Date | Error | RegExp | Array<any> | Function | Promise<any>;
|
|
7
7
|
type IsUserDefinedObject<T> = T extends Function | BuiltIns | any[] ? false : T extends object ? true : false;
|
|
8
|
-
type RemoveObservables<T> = T extends ImmutableObservableBase<infer t> ? t : IsUserDefinedObject<T> extends true ? {
|
|
8
|
+
type RemoveObservables<T> = T extends ImmutableObservableBase<infer t> ? t : T extends ImmutableObservableBase<infer t>[] ? t[] : IsUserDefinedObject<T> extends true ? {
|
|
9
9
|
[K in keyof T]: RemoveObservables<T[K]>;
|
|
10
10
|
} : T extends ImmutableObservableBase<infer TObs> ? TObs : T extends () => infer TRet ? RemoveObservables<TRet> & T : T extends (key: string) => infer TRet ? Record<string, RemoveObservables<TRet>> & T : T;
|
|
11
11
|
interface ObservableArray<T, U> extends ObservablePrimitive<T>, Pick<Array<Observable<U>>, ArrayOverrideFnNames>, Omit<RemoveIndex<Array<U>>, ArrayOverrideFnNames> {
|
|
@@ -380,7 +380,6 @@ declare const internal: {
|
|
|
380
380
|
getValueAtPath: typeof getValueAtPath;
|
|
381
381
|
globalState: {
|
|
382
382
|
isLoadingLocal: boolean;
|
|
383
|
-
isMerging: boolean;
|
|
384
383
|
isLoadingRemote: boolean;
|
|
385
384
|
activateSyncedNode: (node: NodeValue, newValue: any) => {
|
|
386
385
|
update: UpdateFn;
|
package/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ type RemoveIndex<T> = {
|
|
|
5
5
|
};
|
|
6
6
|
type BuiltIns = String | Boolean | Number | Date | Error | RegExp | Array<any> | Function | Promise<any>;
|
|
7
7
|
type IsUserDefinedObject<T> = T extends Function | BuiltIns | any[] ? false : T extends object ? true : false;
|
|
8
|
-
type RemoveObservables<T> = T extends ImmutableObservableBase<infer t> ? t : IsUserDefinedObject<T> extends true ? {
|
|
8
|
+
type RemoveObservables<T> = T extends ImmutableObservableBase<infer t> ? t : T extends ImmutableObservableBase<infer t>[] ? t[] : IsUserDefinedObject<T> extends true ? {
|
|
9
9
|
[K in keyof T]: RemoveObservables<T[K]>;
|
|
10
10
|
} : T extends ImmutableObservableBase<infer TObs> ? TObs : T extends () => infer TRet ? RemoveObservables<TRet> & T : T extends (key: string) => infer TRet ? Record<string, RemoveObservables<TRet>> & T : T;
|
|
11
11
|
interface ObservableArray<T, U> extends ObservablePrimitive<T>, Pick<Array<Observable<U>>, ArrayOverrideFnNames>, Omit<RemoveIndex<Array<U>>, ArrayOverrideFnNames> {
|
|
@@ -380,7 +380,6 @@ declare const internal: {
|
|
|
380
380
|
getValueAtPath: typeof getValueAtPath;
|
|
381
381
|
globalState: {
|
|
382
382
|
isLoadingLocal: boolean;
|
|
383
|
-
isMerging: boolean;
|
|
384
383
|
isLoadingRemote: boolean;
|
|
385
384
|
activateSyncedNode: (node: NodeValue, newValue: any) => {
|
|
386
385
|
update: UpdateFn;
|
package/index.js
CHANGED
|
@@ -70,7 +70,6 @@ var optimized = Symbol("optimized");
|
|
|
70
70
|
var symbolLinked = Symbol("linked");
|
|
71
71
|
var globalState = {
|
|
72
72
|
isLoadingLocal: false,
|
|
73
|
-
isMerging: false,
|
|
74
73
|
isLoadingRemote: false,
|
|
75
74
|
activateSyncedNode: void 0,
|
|
76
75
|
pendingNodes: /* @__PURE__ */ new Map(),
|
|
@@ -141,7 +140,7 @@ function isEvent(value$) {
|
|
|
141
140
|
return value$ && ((_a = value$[symbolGetNode]) == null ? void 0 : _a.isEvent);
|
|
142
141
|
}
|
|
143
142
|
function setNodeValue(node, newValue) {
|
|
144
|
-
var _a
|
|
143
|
+
var _a;
|
|
145
144
|
const parentNode = (_a = node.parent) != null ? _a : node;
|
|
146
145
|
const key = node.parent ? node.key : "_";
|
|
147
146
|
const isDelete = newValue === symbolDelete;
|
|
@@ -151,7 +150,7 @@ function setNodeValue(node, newValue) {
|
|
|
151
150
|
const prevValue = parentValue[key];
|
|
152
151
|
const isFunc = isFunction(newValue);
|
|
153
152
|
newValue = !parentNode.isAssigning && isFunc && !isFunction(prevValue) ? newValue(prevValue) : newValue;
|
|
154
|
-
if (newValue !== prevValue
|
|
153
|
+
if (newValue !== prevValue) {
|
|
155
154
|
try {
|
|
156
155
|
parentNode.isSetting = (parentNode.isSetting || 0) + 1;
|
|
157
156
|
const useMapFn = isMap(parentValue);
|
|
@@ -344,7 +343,6 @@ function setInObservableAtPath(value$, path, pathTypes, value, mode) {
|
|
|
344
343
|
}
|
|
345
344
|
function mergeIntoObservable(target, ...sources) {
|
|
346
345
|
beginBatch();
|
|
347
|
-
globalState.isMerging = true;
|
|
348
346
|
for (let i = 0; i < sources.length; i++) {
|
|
349
347
|
target = _mergeIntoObservable(
|
|
350
348
|
target,
|
|
@@ -353,7 +351,6 @@ function mergeIntoObservable(target, ...sources) {
|
|
|
353
351
|
i < sources.length - 1
|
|
354
352
|
);
|
|
355
353
|
}
|
|
356
|
-
globalState.isMerging = false;
|
|
357
354
|
endBatch();
|
|
358
355
|
return target;
|
|
359
356
|
}
|
|
@@ -1535,12 +1532,16 @@ function setKey(node, key, newValue, level) {
|
|
|
1535
1532
|
} else {
|
|
1536
1533
|
const { newValue: savedValue, prevValue } = setNodeValue(childNode, newValue);
|
|
1537
1534
|
const isPrim = isPrimitive(savedValue) || savedValue instanceof Date;
|
|
1535
|
+
if (!isPrim) {
|
|
1536
|
+
let parent = childNode;
|
|
1537
|
+
do {
|
|
1538
|
+
parent.needsExtract = true;
|
|
1539
|
+
parent.recursivelyAutoActivated = false;
|
|
1540
|
+
} while (parent = parent.parent);
|
|
1541
|
+
}
|
|
1538
1542
|
if (!equals(savedValue, prevValue)) {
|
|
1539
1543
|
updateNodesAndNotify(node, savedValue, prevValue, childNode, isPrim, isRoot, level);
|
|
1540
1544
|
}
|
|
1541
|
-
if (!isPrim) {
|
|
1542
|
-
childNode.needsExtract = true;
|
|
1543
|
-
}
|
|
1544
1545
|
extractFunctionOrComputed(node, key, savedValue);
|
|
1545
1546
|
}
|
|
1546
1547
|
}
|
|
@@ -1747,7 +1748,9 @@ function peekInternal(node, activateRecursive) {
|
|
|
1747
1748
|
}
|
|
1748
1749
|
isFlushing = false;
|
|
1749
1750
|
let value = getNodeValue(node);
|
|
1750
|
-
|
|
1751
|
+
if (!globalState.isLoadingLocal) {
|
|
1752
|
+
value = checkLazy(node, value, !!activateRecursive);
|
|
1753
|
+
}
|
|
1751
1754
|
return value;
|
|
1752
1755
|
}
|
|
1753
1756
|
function checkLazy(node, value, activateRecursive) {
|
|
@@ -1762,10 +1765,12 @@ function checkLazy(node, value, activateRecursive) {
|
|
|
1762
1765
|
} else {
|
|
1763
1766
|
if (node.parent) {
|
|
1764
1767
|
const parentValue = getNodeValue(node.parent);
|
|
1765
|
-
if (
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1768
|
+
if (isFunction(value)) {
|
|
1769
|
+
if (parentValue) {
|
|
1770
|
+
delete parentValue[node.key];
|
|
1771
|
+
} else {
|
|
1772
|
+
node.root._ = void 0;
|
|
1773
|
+
}
|
|
1769
1774
|
}
|
|
1770
1775
|
}
|
|
1771
1776
|
value = activateNodeFunction(node, lazyFn);
|
|
@@ -1854,7 +1859,9 @@ function activateNodeFunction(node, lazyFn) {
|
|
|
1854
1859
|
var _a, _b, _c, _d;
|
|
1855
1860
|
if (isFirst) {
|
|
1856
1861
|
isFirst = false;
|
|
1857
|
-
|
|
1862
|
+
if (isFunction(getNodeValue(node))) {
|
|
1863
|
+
setNodeValue(node, void 0);
|
|
1864
|
+
}
|
|
1858
1865
|
} else if (!isFlushing && refreshFn) {
|
|
1859
1866
|
if (shouldIgnoreUnobserved(node, refreshFn)) {
|
|
1860
1867
|
ignoreThisUpdate = true;
|
package/index.mjs
CHANGED
|
@@ -68,7 +68,6 @@ var optimized = Symbol("optimized");
|
|
|
68
68
|
var symbolLinked = Symbol("linked");
|
|
69
69
|
var globalState = {
|
|
70
70
|
isLoadingLocal: false,
|
|
71
|
-
isMerging: false,
|
|
72
71
|
isLoadingRemote: false,
|
|
73
72
|
activateSyncedNode: void 0,
|
|
74
73
|
pendingNodes: /* @__PURE__ */ new Map(),
|
|
@@ -139,7 +138,7 @@ function isEvent(value$) {
|
|
|
139
138
|
return value$ && ((_a = value$[symbolGetNode]) == null ? void 0 : _a.isEvent);
|
|
140
139
|
}
|
|
141
140
|
function setNodeValue(node, newValue) {
|
|
142
|
-
var _a
|
|
141
|
+
var _a;
|
|
143
142
|
const parentNode = (_a = node.parent) != null ? _a : node;
|
|
144
143
|
const key = node.parent ? node.key : "_";
|
|
145
144
|
const isDelete = newValue === symbolDelete;
|
|
@@ -149,7 +148,7 @@ function setNodeValue(node, newValue) {
|
|
|
149
148
|
const prevValue = parentValue[key];
|
|
150
149
|
const isFunc = isFunction(newValue);
|
|
151
150
|
newValue = !parentNode.isAssigning && isFunc && !isFunction(prevValue) ? newValue(prevValue) : newValue;
|
|
152
|
-
if (newValue !== prevValue
|
|
151
|
+
if (newValue !== prevValue) {
|
|
153
152
|
try {
|
|
154
153
|
parentNode.isSetting = (parentNode.isSetting || 0) + 1;
|
|
155
154
|
const useMapFn = isMap(parentValue);
|
|
@@ -342,7 +341,6 @@ function setInObservableAtPath(value$, path, pathTypes, value, mode) {
|
|
|
342
341
|
}
|
|
343
342
|
function mergeIntoObservable(target, ...sources) {
|
|
344
343
|
beginBatch();
|
|
345
|
-
globalState.isMerging = true;
|
|
346
344
|
for (let i = 0; i < sources.length; i++) {
|
|
347
345
|
target = _mergeIntoObservable(
|
|
348
346
|
target,
|
|
@@ -351,7 +349,6 @@ function mergeIntoObservable(target, ...sources) {
|
|
|
351
349
|
i < sources.length - 1
|
|
352
350
|
);
|
|
353
351
|
}
|
|
354
|
-
globalState.isMerging = false;
|
|
355
352
|
endBatch();
|
|
356
353
|
return target;
|
|
357
354
|
}
|
|
@@ -1533,12 +1530,16 @@ function setKey(node, key, newValue, level) {
|
|
|
1533
1530
|
} else {
|
|
1534
1531
|
const { newValue: savedValue, prevValue } = setNodeValue(childNode, newValue);
|
|
1535
1532
|
const isPrim = isPrimitive(savedValue) || savedValue instanceof Date;
|
|
1533
|
+
if (!isPrim) {
|
|
1534
|
+
let parent = childNode;
|
|
1535
|
+
do {
|
|
1536
|
+
parent.needsExtract = true;
|
|
1537
|
+
parent.recursivelyAutoActivated = false;
|
|
1538
|
+
} while (parent = parent.parent);
|
|
1539
|
+
}
|
|
1536
1540
|
if (!equals(savedValue, prevValue)) {
|
|
1537
1541
|
updateNodesAndNotify(node, savedValue, prevValue, childNode, isPrim, isRoot, level);
|
|
1538
1542
|
}
|
|
1539
|
-
if (!isPrim) {
|
|
1540
|
-
childNode.needsExtract = true;
|
|
1541
|
-
}
|
|
1542
1543
|
extractFunctionOrComputed(node, key, savedValue);
|
|
1543
1544
|
}
|
|
1544
1545
|
}
|
|
@@ -1745,7 +1746,9 @@ function peekInternal(node, activateRecursive) {
|
|
|
1745
1746
|
}
|
|
1746
1747
|
isFlushing = false;
|
|
1747
1748
|
let value = getNodeValue(node);
|
|
1748
|
-
|
|
1749
|
+
if (!globalState.isLoadingLocal) {
|
|
1750
|
+
value = checkLazy(node, value, !!activateRecursive);
|
|
1751
|
+
}
|
|
1749
1752
|
return value;
|
|
1750
1753
|
}
|
|
1751
1754
|
function checkLazy(node, value, activateRecursive) {
|
|
@@ -1760,10 +1763,12 @@ function checkLazy(node, value, activateRecursive) {
|
|
|
1760
1763
|
} else {
|
|
1761
1764
|
if (node.parent) {
|
|
1762
1765
|
const parentValue = getNodeValue(node.parent);
|
|
1763
|
-
if (
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1766
|
+
if (isFunction(value)) {
|
|
1767
|
+
if (parentValue) {
|
|
1768
|
+
delete parentValue[node.key];
|
|
1769
|
+
} else {
|
|
1770
|
+
node.root._ = void 0;
|
|
1771
|
+
}
|
|
1767
1772
|
}
|
|
1768
1773
|
}
|
|
1769
1774
|
value = activateNodeFunction(node, lazyFn);
|
|
@@ -1852,7 +1857,9 @@ function activateNodeFunction(node, lazyFn) {
|
|
|
1852
1857
|
var _a, _b, _c, _d;
|
|
1853
1858
|
if (isFirst) {
|
|
1854
1859
|
isFirst = false;
|
|
1855
|
-
|
|
1860
|
+
if (isFunction(getNodeValue(node))) {
|
|
1861
|
+
setNodeValue(node, void 0);
|
|
1862
|
+
}
|
|
1856
1863
|
} else if (!isFlushing && refreshFn) {
|
|
1857
1864
|
if (shouldIgnoreUnobserved(node, refreshFn)) {
|
|
1858
1865
|
ignoreThisUpdate = true;
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Change } from '@legendapp/state';
|
|
2
|
-
import { ObservablePersistPlugin,
|
|
2
|
+
import { ObservablePersistPlugin, ObservablePersistPluginOptions, PersistMetadata } from '@legendapp/state/sync';
|
|
3
3
|
|
|
4
4
|
declare class ObservablePersistAsyncStorage implements ObservablePersistPlugin {
|
|
5
5
|
private data;
|
|
6
|
-
initialize(config:
|
|
6
|
+
initialize(config: ObservablePersistPluginOptions): Promise<void>;
|
|
7
7
|
loadTable(table: string): void | Promise<void>;
|
|
8
8
|
getTable(table: string, init: object): any;
|
|
9
9
|
getMetadata(table: string): PersistMetadata;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Change } from '@legendapp/state';
|
|
2
|
-
import { ObservablePersistPlugin,
|
|
2
|
+
import { ObservablePersistPlugin, ObservablePersistPluginOptions, PersistMetadata } from '@legendapp/state/sync';
|
|
3
3
|
|
|
4
4
|
declare class ObservablePersistAsyncStorage implements ObservablePersistPlugin {
|
|
5
5
|
private data;
|
|
6
|
-
initialize(config:
|
|
6
|
+
initialize(config: ObservablePersistPluginOptions): Promise<void>;
|
|
7
7
|
loadTable(table: string): void | Promise<void>;
|
|
8
8
|
getTable(table: string, init: object): any;
|
|
9
9
|
getMetadata(table: string): PersistMetadata;
|
package/sync-plugins/firebase.js
CHANGED
|
@@ -158,7 +158,6 @@ function syncedFirebase(props) {
|
|
|
158
158
|
const {
|
|
159
159
|
refPath,
|
|
160
160
|
query,
|
|
161
|
-
as: asType,
|
|
162
161
|
fieldId,
|
|
163
162
|
realtime,
|
|
164
163
|
requireAuth,
|
|
@@ -170,6 +169,7 @@ function syncedFirebase(props) {
|
|
|
170
169
|
...rest
|
|
171
170
|
} = props;
|
|
172
171
|
const { fieldCreatedAt, changesSince } = props;
|
|
172
|
+
const asType = props.as || "value";
|
|
173
173
|
const fieldUpdatedAt = props.fieldUpdatedAt || "@";
|
|
174
174
|
const computeRef = (lastSync) => {
|
|
175
175
|
const pathFirebase = refPath(fns.getCurrentUser());
|
|
@@ -346,7 +346,7 @@ function syncedFirebase(props) {
|
|
|
346
346
|
update,
|
|
347
347
|
delete: deleteFn,
|
|
348
348
|
waitFor: () => isEnabled$.get() && (isAuthedIfRequired$ ? isAuthedIfRequired$.get() : true) && (waitFor ? state.computeSelector(waitFor) : true),
|
|
349
|
-
waitForSet: () => isEnabled$.get() && (isAuthedIfRequired$ ? isAuthedIfRequired$.get() : true) && (waitForSet ? state.
|
|
349
|
+
waitForSet: (params) => isEnabled$.get() && (isAuthedIfRequired$ ? isAuthedIfRequired$.get() : true) && (waitForSet ? state.isFunction(waitForSet) ? waitForSet(params) : waitForSet : true),
|
|
350
350
|
generateId: fns.generateId,
|
|
351
351
|
transform,
|
|
352
352
|
as: asType
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { observable, symbolDelete, isString, isArray, isObject, computeSelector, isNullOrUndefined, isPromise, isNumber, when } from '@legendapp/state';
|
|
1
|
+
import { observable, symbolDelete, isString, isArray, isObject, computeSelector, isFunction, isNullOrUndefined, isPromise, isNumber, when } from '@legendapp/state';
|
|
2
2
|
import { syncedCrud } from '@legendapp/state/sync-plugins/crud';
|
|
3
3
|
import { getAuth } from 'firebase/auth';
|
|
4
4
|
import { ref, getDatabase, query, orderByChild, startAt, update, onValue, onChildAdded, onChildChanged, onChildRemoved, serverTimestamp, remove, push } from 'firebase/database';
|
|
@@ -156,7 +156,6 @@ function syncedFirebase(props) {
|
|
|
156
156
|
const {
|
|
157
157
|
refPath,
|
|
158
158
|
query,
|
|
159
|
-
as: asType,
|
|
160
159
|
fieldId,
|
|
161
160
|
realtime,
|
|
162
161
|
requireAuth,
|
|
@@ -168,6 +167,7 @@ function syncedFirebase(props) {
|
|
|
168
167
|
...rest
|
|
169
168
|
} = props;
|
|
170
169
|
const { fieldCreatedAt, changesSince } = props;
|
|
170
|
+
const asType = props.as || "value";
|
|
171
171
|
const fieldUpdatedAt = props.fieldUpdatedAt || "@";
|
|
172
172
|
const computeRef = (lastSync) => {
|
|
173
173
|
const pathFirebase = refPath(fns.getCurrentUser());
|
|
@@ -344,7 +344,7 @@ function syncedFirebase(props) {
|
|
|
344
344
|
update,
|
|
345
345
|
delete: deleteFn,
|
|
346
346
|
waitFor: () => isEnabled$.get() && (isAuthedIfRequired$ ? isAuthedIfRequired$.get() : true) && (waitFor ? computeSelector(waitFor) : true),
|
|
347
|
-
waitForSet: () => isEnabled$.get() && (isAuthedIfRequired$ ? isAuthedIfRequired$.get() : true) && (waitForSet ?
|
|
347
|
+
waitForSet: (params) => isEnabled$.get() && (isAuthedIfRequired$ ? isAuthedIfRequired$.get() : true) && (waitForSet ? isFunction(waitForSet) ? waitForSet(params) : waitForSet : true),
|
|
348
348
|
generateId: fns.generateId,
|
|
349
349
|
transform,
|
|
350
350
|
as: asType
|
package/sync-plugins/keel.d.mts
CHANGED
|
@@ -102,7 +102,9 @@ interface SyncedKeelPropsBase<TRemote extends {
|
|
|
102
102
|
where: any;
|
|
103
103
|
values?: Partial<TRemote>;
|
|
104
104
|
}) => Promise<APIResult<TRemote>>;
|
|
105
|
-
delete?: (params:
|
|
105
|
+
delete?: (params: {
|
|
106
|
+
id: string;
|
|
107
|
+
}) => Promise<APIResult<string>>;
|
|
106
108
|
}
|
|
107
109
|
declare function getSyncedKeelConfiguration(): SyncedKeelConfiguration;
|
|
108
110
|
declare function configureSyncedKeel(config: SyncedKeelConfiguration): void;
|
package/sync-plugins/keel.d.ts
CHANGED
|
@@ -102,7 +102,9 @@ interface SyncedKeelPropsBase<TRemote extends {
|
|
|
102
102
|
where: any;
|
|
103
103
|
values?: Partial<TRemote>;
|
|
104
104
|
}) => Promise<APIResult<TRemote>>;
|
|
105
|
-
delete?: (params:
|
|
105
|
+
delete?: (params: {
|
|
106
|
+
id: string;
|
|
107
|
+
}) => Promise<APIResult<string>>;
|
|
106
108
|
}
|
|
107
109
|
declare function getSyncedKeelConfiguration(): SyncedKeelConfiguration;
|
|
108
110
|
declare function configureSyncedKeel(config: SyncedKeelConfiguration): void;
|
package/sync-plugins/keel.js
CHANGED
|
@@ -221,7 +221,7 @@ function syncedKeel(props) {
|
|
|
221
221
|
}
|
|
222
222
|
} : void 0;
|
|
223
223
|
const deleteFn = deleteParam ? async (value, params) => {
|
|
224
|
-
const { data, error } = await deleteParam(value);
|
|
224
|
+
const { data, error } = await deleteParam({ id: value.id });
|
|
225
225
|
if (error) {
|
|
226
226
|
handleSetError(error, params, false);
|
|
227
227
|
}
|
|
@@ -244,7 +244,7 @@ function syncedKeel(props) {
|
|
|
244
244
|
update,
|
|
245
245
|
delete: deleteFn,
|
|
246
246
|
waitFor: () => isEnabled$.get() && (waitFor ? state.computeSelector(waitFor) : true),
|
|
247
|
-
waitForSet: () => isEnabled$.get() && (waitForSet ? state.
|
|
247
|
+
waitForSet: (params) => isEnabled$.get() && (waitForSet ? state.isFunction(waitForSet) ? waitForSet(params) : waitForSet : true),
|
|
248
248
|
onSaved,
|
|
249
249
|
fieldCreatedAt,
|
|
250
250
|
fieldUpdatedAt,
|
package/sync-plugins/keel.mjs
CHANGED
|
@@ -215,7 +215,7 @@ function syncedKeel(props) {
|
|
|
215
215
|
}
|
|
216
216
|
} : void 0;
|
|
217
217
|
const deleteFn = deleteParam ? async (value, params) => {
|
|
218
|
-
const { data, error } = await deleteParam(value);
|
|
218
|
+
const { data, error } = await deleteParam({ id: value.id });
|
|
219
219
|
if (error) {
|
|
220
220
|
handleSetError(error, params, false);
|
|
221
221
|
}
|
|
@@ -238,7 +238,7 @@ function syncedKeel(props) {
|
|
|
238
238
|
update,
|
|
239
239
|
delete: deleteFn,
|
|
240
240
|
waitFor: () => isEnabled$.get() && (waitFor ? computeSelector(waitFor) : true),
|
|
241
|
-
waitForSet: () => isEnabled$.get() && (waitForSet ?
|
|
241
|
+
waitForSet: (params) => isEnabled$.get() && (waitForSet ? isFunction(waitForSet) ? waitForSet(params) : waitForSet : true),
|
|
242
242
|
onSaved,
|
|
243
243
|
fieldCreatedAt,
|
|
244
244
|
fieldUpdatedAt,
|
package/sync-plugins/supabase.js
CHANGED
|
@@ -135,7 +135,7 @@ function syncedSupabase(props) {
|
|
|
135
135
|
transform,
|
|
136
136
|
generateId,
|
|
137
137
|
waitFor: () => isEnabled$.get() && (waitFor ? state.computeSelector(waitFor) : true),
|
|
138
|
-
waitForSet: () => isEnabled$.get() && (waitForSet ? state.
|
|
138
|
+
waitForSet: (params) => isEnabled$.get() && (waitForSet ? state.isFunction(waitForSet) ? waitForSet(params) : waitForSet : true)
|
|
139
139
|
});
|
|
140
140
|
}
|
|
141
141
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { observable, computeSelector, isObject, symbolDelete } from '@legendapp/state';
|
|
1
|
+
import { observable, computeSelector, isFunction, isObject, symbolDelete } from '@legendapp/state';
|
|
2
2
|
import { removeNullUndefined, transformStringifyDates, combineTransforms } from '@legendapp/state/sync';
|
|
3
3
|
import { syncedCrud } from '@legendapp/state/sync-plugins/crud';
|
|
4
4
|
|
|
@@ -133,7 +133,7 @@ function syncedSupabase(props) {
|
|
|
133
133
|
transform,
|
|
134
134
|
generateId,
|
|
135
135
|
waitFor: () => isEnabled$.get() && (waitFor ? computeSelector(waitFor) : true),
|
|
136
|
-
waitForSet: () => isEnabled$.get() && (waitForSet ?
|
|
136
|
+
waitForSet: (params) => isEnabled$.get() && (waitForSet ? isFunction(waitForSet) ? waitForSet(params) : waitForSet : true)
|
|
137
137
|
});
|
|
138
138
|
}
|
|
139
139
|
|
package/sync.d.mts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { MMKVConfiguration } from 'react-native-mmkv';
|
|
2
2
|
import { AsyncStorageStatic } from '@react-native-async-storage/async-storage';
|
|
3
|
-
import { ClassConstructor, GetMode, SetParams, NodeValue, UpdateFn, ObservableParam, LinkedOptions, RetryOptions, Change, Observable, ObservableSyncState,
|
|
3
|
+
import { ClassConstructor, GetMode, SetParams, NodeValue, UpdateFn, ObservableParam, LinkedOptions, RetryOptions, Change, Observable, ObservableSyncState, RecordValue, ArrayValue } from '@legendapp/state';
|
|
4
4
|
import { SyncedOptionsGlobal as SyncedOptionsGlobal$1 } from '@legendapp/state/sync';
|
|
5
|
-
import { DatabaseReference, Query } from 'firebase/database';
|
|
6
5
|
|
|
7
6
|
interface PersistOptions<T = any> {
|
|
8
7
|
name: string;
|
|
@@ -55,12 +54,11 @@ interface SyncedOptions<TRemote = any, TLocal = TRemote> extends Omit<LinkedOpti
|
|
|
55
54
|
syncMode?: 'auto' | 'manual';
|
|
56
55
|
mode?: GetMode;
|
|
57
56
|
transform?: SyncTransform<TLocal, TRemote>;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
onSetError?: (error: Error) => void;
|
|
61
|
-
log?: (message?: any, ...optionalParams: any[]) => void;
|
|
57
|
+
onGetError?: (error: Error, getParams: SyncedGetParams | undefined, source: 'get' | 'subscribe') => void;
|
|
58
|
+
onSetError?: (error: Error, setParams: SyncedSetParams<TRemote>) => void;
|
|
62
59
|
onBeforeSet?: () => void;
|
|
63
60
|
onAfterSet?: () => void;
|
|
61
|
+
log?: (message?: any, ...optionalParams: any[]) => void;
|
|
64
62
|
}
|
|
65
63
|
interface SyncedOptionsGlobal<T = any> extends Omit<SyncedOptions<T>, 'get' | 'set' | 'persist' | 'initial' | 'waitForSet' | 'waitFor' | 'transform' | 'subscribe'> {
|
|
66
64
|
persist?: ObservablePersistPluginOptions & Omit<PersistOptions, 'name' | 'transform' | 'options'>;
|
|
@@ -123,143 +121,6 @@ type Synced<T> = T;
|
|
|
123
121
|
|
|
124
122
|
declare function configureObservableSync(options?: SyncedOptionsGlobal$1): void;
|
|
125
123
|
|
|
126
|
-
interface PersistTransform<TOrig = any, TSaved = TOrig> {
|
|
127
|
-
load?: (value: TSaved) => TOrig | Promise<TOrig>;
|
|
128
|
-
save?: (value: TOrig) => TSaved | Promise<TSaved>;
|
|
129
|
-
}
|
|
130
|
-
interface LegacyPersistOptionsLocal<T = any> {
|
|
131
|
-
name: string;
|
|
132
|
-
transform?: PersistTransform<T>;
|
|
133
|
-
fieldTransforms?: FieldTransforms<T>;
|
|
134
|
-
readonly?: boolean;
|
|
135
|
-
mmkv?: MMKVConfiguration;
|
|
136
|
-
indexedDB?: {
|
|
137
|
-
prefixID?: string;
|
|
138
|
-
itemID?: string;
|
|
139
|
-
};
|
|
140
|
-
options?: any;
|
|
141
|
-
}
|
|
142
|
-
type LegacyPersistOptionsRemote<T = any> = ObservablePersistenceConfigRemoteGlobalOptions & {
|
|
143
|
-
readonly?: boolean;
|
|
144
|
-
waitForGet?: Selector<any>;
|
|
145
|
-
waitForSet?: LinkedOptions['waitForSet'];
|
|
146
|
-
manual?: boolean;
|
|
147
|
-
fieldTransforms?: FieldTransforms<T>;
|
|
148
|
-
allowSetIfError?: boolean;
|
|
149
|
-
transform?: PersistTransform<T>;
|
|
150
|
-
firebase?: {
|
|
151
|
-
refPath: (uid: string | undefined) => string;
|
|
152
|
-
query?: (ref: DatabaseReference) => DatabaseReference | Query;
|
|
153
|
-
queryByModified?: QueryByModified<T>;
|
|
154
|
-
ignoreKeys?: string[];
|
|
155
|
-
requireAuth?: boolean;
|
|
156
|
-
mode?: 'once' | 'realtime';
|
|
157
|
-
};
|
|
158
|
-
offlineBehavior?: false | 'retry';
|
|
159
|
-
changeTimeout?: number;
|
|
160
|
-
metadataTimeout?: number;
|
|
161
|
-
retry?: RetryOptions;
|
|
162
|
-
onGetError?: (error: Error) => void;
|
|
163
|
-
onSetError?: (error: Error) => void;
|
|
164
|
-
log?: (message?: any, ...optionalParams: any[]) => void;
|
|
165
|
-
onBeforeSet?: () => void;
|
|
166
|
-
onSet?: () => void;
|
|
167
|
-
};
|
|
168
|
-
interface ObservablePersistenceConfigLocalGlobalOptions {
|
|
169
|
-
onGetError?: (error: Error) => void;
|
|
170
|
-
onSetError?: (error: Error) => void;
|
|
171
|
-
indexedDB?: {
|
|
172
|
-
databaseName: string;
|
|
173
|
-
version: number;
|
|
174
|
-
tableNames: string[];
|
|
175
|
-
};
|
|
176
|
-
asyncStorage?: {
|
|
177
|
-
AsyncStorage: AsyncStorageStatic;
|
|
178
|
-
preload?: boolean | string[];
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
interface ObservablePersistenceConfigRemoteGlobalOptions {
|
|
182
|
-
debounceSet?: number;
|
|
183
|
-
dateModifiedKey?: string;
|
|
184
|
-
offlineBehavior?: false | 'retry';
|
|
185
|
-
retry?: RetryOptions;
|
|
186
|
-
onGetError?: (error: Error) => void;
|
|
187
|
-
onSetError?: (error: Error) => void;
|
|
188
|
-
log?: (logLevel: 'verbose' | 'warning' | 'error', message: any, ...optionalParams: any[]) => void;
|
|
189
|
-
onBeforeSet?: () => void;
|
|
190
|
-
onAfterSet?: () => void;
|
|
191
|
-
}
|
|
192
|
-
interface ObservablePersistenceConfig {
|
|
193
|
-
pluginLocal?: ClassConstructor<ObservablePersistPlugin>;
|
|
194
|
-
pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions;
|
|
195
|
-
localOptions?: ObservablePersistenceConfigLocalGlobalOptions;
|
|
196
|
-
remoteOptions?: ObservablePersistenceConfigRemoteGlobalOptions;
|
|
197
|
-
}
|
|
198
|
-
interface LegacyPersistOptions<T = any> {
|
|
199
|
-
local?: string | LegacyPersistOptionsLocal<T>;
|
|
200
|
-
remote?: LegacyPersistOptionsRemote<T>;
|
|
201
|
-
pluginLocal?: ClassConstructor<ObservablePersistPlugin>;
|
|
202
|
-
pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions<T>;
|
|
203
|
-
}
|
|
204
|
-
interface ObservableOnChangeParams {
|
|
205
|
-
value: unknown;
|
|
206
|
-
path?: string[];
|
|
207
|
-
pathTypes?: TypeAtPath[];
|
|
208
|
-
mode?: GetMode;
|
|
209
|
-
dateModified?: number | undefined;
|
|
210
|
-
lastSync?: number | undefined;
|
|
211
|
-
}
|
|
212
|
-
interface ObservablePersistRemoteSetParams<T> {
|
|
213
|
-
syncState: Observable<ObservablePersistState>;
|
|
214
|
-
obs: ObservableParam<T>;
|
|
215
|
-
options: LegacyPersistOptions<T>;
|
|
216
|
-
changes: Change[];
|
|
217
|
-
value: T;
|
|
218
|
-
}
|
|
219
|
-
interface ObservablePersistRemoteGetParams<T> {
|
|
220
|
-
state: Observable<ObservablePersistState>;
|
|
221
|
-
obs: ObservableParam<T>;
|
|
222
|
-
options: LegacyPersistOptions<T>;
|
|
223
|
-
dateModified?: number;
|
|
224
|
-
lastSync?: number;
|
|
225
|
-
mode?: GetMode;
|
|
226
|
-
onGet: () => void;
|
|
227
|
-
onError: (error: Error) => void;
|
|
228
|
-
onChange: (params: ObservableOnChangeParams) => void | Promise<void>;
|
|
229
|
-
}
|
|
230
|
-
type ObservablePersistRemoteGetFnParams<T> = Omit<ObservablePersistRemoteGetParams<T>, 'onGet'>;
|
|
231
|
-
interface ObservablePersistRemoteClass {
|
|
232
|
-
get?<T>(params: ObservablePersistRemoteGetParams<T>): void;
|
|
233
|
-
set?<T>(params: ObservablePersistRemoteSetParams<T>): void | Promise<void | {
|
|
234
|
-
changes?: object;
|
|
235
|
-
dateModified?: number;
|
|
236
|
-
lastSync?: number;
|
|
237
|
-
pathStrs?: string[];
|
|
238
|
-
}>;
|
|
239
|
-
}
|
|
240
|
-
interface ObservablePersistRemoteFunctions<T = any> {
|
|
241
|
-
get?(params: ObservablePersistRemoteGetFnParams<T>): T | Promise<T>;
|
|
242
|
-
set?(params: ObservablePersistRemoteSetParams<T>): void | Promise<void | {
|
|
243
|
-
changes?: object | undefined;
|
|
244
|
-
dateModified?: number;
|
|
245
|
-
lastSync?: number;
|
|
246
|
-
}>;
|
|
247
|
-
}
|
|
248
|
-
interface ObservablePersistStateBase {
|
|
249
|
-
isLoadedLocal: boolean;
|
|
250
|
-
isEnabledLocal: boolean;
|
|
251
|
-
isEnabledRemote: boolean;
|
|
252
|
-
dateModified?: number;
|
|
253
|
-
lastSync?: number;
|
|
254
|
-
syncCount?: number;
|
|
255
|
-
clearLocal: () => Promise<void>;
|
|
256
|
-
sync: () => Promise<void>;
|
|
257
|
-
getPendingChanges: () => Record<string, {
|
|
258
|
-
p: any;
|
|
259
|
-
v?: any;
|
|
260
|
-
}> | undefined;
|
|
261
|
-
}
|
|
262
|
-
type ObservablePersistState = ObservableState & ObservablePersistStateBase;
|
|
263
124
|
declare type ObjectKeys<T> = Pick<T, {
|
|
264
125
|
[K in keyof T]-?: K extends string ? T[K] extends Record<string, any> ? T[K] extends any[] ? never : K : never : never;
|
|
265
126
|
}[keyof T]>;
|
|
@@ -331,4 +192,4 @@ declare const internal: {
|
|
|
331
192
|
observableSyncConfiguration: SyncedOptionsGlobal;
|
|
332
193
|
};
|
|
333
194
|
|
|
334
|
-
export { type FieldTransforms, type FieldTransformsInner, type
|
|
195
|
+
export { type FieldTransforms, type FieldTransformsInner, type ObservablePersistPlugin, type ObservablePersistPluginOptions, type ObservableSyncFunctions, type ObservableSyncSetParams, type PersistMetadata, type PersistOptions, type QueryByModified, type StringToDate, type SubscribeOptions, type SyncTransform, type SyncTransformMethod, type Synced, type SyncedGetParams, type SyncedOptions, type SyncedOptionsGlobal, type SyncedSetParams, type SyncedSubscribeParams, type TransformStringifyKeys, type TransformStringifyOptions, type TransformStringsToDates, combineTransforms, configureObservableSync, deepEqual, diffObjects, internal, mapSyncPlugins, onChangeRemote, removeNullUndefined, syncObservable, synced, transformStringifyDates, transformStringifyKeys };
|
package/sync.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { MMKVConfiguration } from 'react-native-mmkv';
|
|
2
2
|
import { AsyncStorageStatic } from '@react-native-async-storage/async-storage';
|
|
3
|
-
import { ClassConstructor, GetMode, SetParams, NodeValue, UpdateFn, ObservableParam, LinkedOptions, RetryOptions, Change, Observable, ObservableSyncState,
|
|
3
|
+
import { ClassConstructor, GetMode, SetParams, NodeValue, UpdateFn, ObservableParam, LinkedOptions, RetryOptions, Change, Observable, ObservableSyncState, RecordValue, ArrayValue } from '@legendapp/state';
|
|
4
4
|
import { SyncedOptionsGlobal as SyncedOptionsGlobal$1 } from '@legendapp/state/sync';
|
|
5
|
-
import { DatabaseReference, Query } from 'firebase/database';
|
|
6
5
|
|
|
7
6
|
interface PersistOptions<T = any> {
|
|
8
7
|
name: string;
|
|
@@ -55,12 +54,11 @@ interface SyncedOptions<TRemote = any, TLocal = TRemote> extends Omit<LinkedOpti
|
|
|
55
54
|
syncMode?: 'auto' | 'manual';
|
|
56
55
|
mode?: GetMode;
|
|
57
56
|
transform?: SyncTransform<TLocal, TRemote>;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
onSetError?: (error: Error) => void;
|
|
61
|
-
log?: (message?: any, ...optionalParams: any[]) => void;
|
|
57
|
+
onGetError?: (error: Error, getParams: SyncedGetParams | undefined, source: 'get' | 'subscribe') => void;
|
|
58
|
+
onSetError?: (error: Error, setParams: SyncedSetParams<TRemote>) => void;
|
|
62
59
|
onBeforeSet?: () => void;
|
|
63
60
|
onAfterSet?: () => void;
|
|
61
|
+
log?: (message?: any, ...optionalParams: any[]) => void;
|
|
64
62
|
}
|
|
65
63
|
interface SyncedOptionsGlobal<T = any> extends Omit<SyncedOptions<T>, 'get' | 'set' | 'persist' | 'initial' | 'waitForSet' | 'waitFor' | 'transform' | 'subscribe'> {
|
|
66
64
|
persist?: ObservablePersistPluginOptions & Omit<PersistOptions, 'name' | 'transform' | 'options'>;
|
|
@@ -123,143 +121,6 @@ type Synced<T> = T;
|
|
|
123
121
|
|
|
124
122
|
declare function configureObservableSync(options?: SyncedOptionsGlobal$1): void;
|
|
125
123
|
|
|
126
|
-
interface PersistTransform<TOrig = any, TSaved = TOrig> {
|
|
127
|
-
load?: (value: TSaved) => TOrig | Promise<TOrig>;
|
|
128
|
-
save?: (value: TOrig) => TSaved | Promise<TSaved>;
|
|
129
|
-
}
|
|
130
|
-
interface LegacyPersistOptionsLocal<T = any> {
|
|
131
|
-
name: string;
|
|
132
|
-
transform?: PersistTransform<T>;
|
|
133
|
-
fieldTransforms?: FieldTransforms<T>;
|
|
134
|
-
readonly?: boolean;
|
|
135
|
-
mmkv?: MMKVConfiguration;
|
|
136
|
-
indexedDB?: {
|
|
137
|
-
prefixID?: string;
|
|
138
|
-
itemID?: string;
|
|
139
|
-
};
|
|
140
|
-
options?: any;
|
|
141
|
-
}
|
|
142
|
-
type LegacyPersistOptionsRemote<T = any> = ObservablePersistenceConfigRemoteGlobalOptions & {
|
|
143
|
-
readonly?: boolean;
|
|
144
|
-
waitForGet?: Selector<any>;
|
|
145
|
-
waitForSet?: LinkedOptions['waitForSet'];
|
|
146
|
-
manual?: boolean;
|
|
147
|
-
fieldTransforms?: FieldTransforms<T>;
|
|
148
|
-
allowSetIfError?: boolean;
|
|
149
|
-
transform?: PersistTransform<T>;
|
|
150
|
-
firebase?: {
|
|
151
|
-
refPath: (uid: string | undefined) => string;
|
|
152
|
-
query?: (ref: DatabaseReference) => DatabaseReference | Query;
|
|
153
|
-
queryByModified?: QueryByModified<T>;
|
|
154
|
-
ignoreKeys?: string[];
|
|
155
|
-
requireAuth?: boolean;
|
|
156
|
-
mode?: 'once' | 'realtime';
|
|
157
|
-
};
|
|
158
|
-
offlineBehavior?: false | 'retry';
|
|
159
|
-
changeTimeout?: number;
|
|
160
|
-
metadataTimeout?: number;
|
|
161
|
-
retry?: RetryOptions;
|
|
162
|
-
onGetError?: (error: Error) => void;
|
|
163
|
-
onSetError?: (error: Error) => void;
|
|
164
|
-
log?: (message?: any, ...optionalParams: any[]) => void;
|
|
165
|
-
onBeforeSet?: () => void;
|
|
166
|
-
onSet?: () => void;
|
|
167
|
-
};
|
|
168
|
-
interface ObservablePersistenceConfigLocalGlobalOptions {
|
|
169
|
-
onGetError?: (error: Error) => void;
|
|
170
|
-
onSetError?: (error: Error) => void;
|
|
171
|
-
indexedDB?: {
|
|
172
|
-
databaseName: string;
|
|
173
|
-
version: number;
|
|
174
|
-
tableNames: string[];
|
|
175
|
-
};
|
|
176
|
-
asyncStorage?: {
|
|
177
|
-
AsyncStorage: AsyncStorageStatic;
|
|
178
|
-
preload?: boolean | string[];
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
interface ObservablePersistenceConfigRemoteGlobalOptions {
|
|
182
|
-
debounceSet?: number;
|
|
183
|
-
dateModifiedKey?: string;
|
|
184
|
-
offlineBehavior?: false | 'retry';
|
|
185
|
-
retry?: RetryOptions;
|
|
186
|
-
onGetError?: (error: Error) => void;
|
|
187
|
-
onSetError?: (error: Error) => void;
|
|
188
|
-
log?: (logLevel: 'verbose' | 'warning' | 'error', message: any, ...optionalParams: any[]) => void;
|
|
189
|
-
onBeforeSet?: () => void;
|
|
190
|
-
onAfterSet?: () => void;
|
|
191
|
-
}
|
|
192
|
-
interface ObservablePersistenceConfig {
|
|
193
|
-
pluginLocal?: ClassConstructor<ObservablePersistPlugin>;
|
|
194
|
-
pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions;
|
|
195
|
-
localOptions?: ObservablePersistenceConfigLocalGlobalOptions;
|
|
196
|
-
remoteOptions?: ObservablePersistenceConfigRemoteGlobalOptions;
|
|
197
|
-
}
|
|
198
|
-
interface LegacyPersistOptions<T = any> {
|
|
199
|
-
local?: string | LegacyPersistOptionsLocal<T>;
|
|
200
|
-
remote?: LegacyPersistOptionsRemote<T>;
|
|
201
|
-
pluginLocal?: ClassConstructor<ObservablePersistPlugin>;
|
|
202
|
-
pluginRemote?: ClassConstructor<ObservablePersistRemoteClass> | ObservablePersistRemoteFunctions<T>;
|
|
203
|
-
}
|
|
204
|
-
interface ObservableOnChangeParams {
|
|
205
|
-
value: unknown;
|
|
206
|
-
path?: string[];
|
|
207
|
-
pathTypes?: TypeAtPath[];
|
|
208
|
-
mode?: GetMode;
|
|
209
|
-
dateModified?: number | undefined;
|
|
210
|
-
lastSync?: number | undefined;
|
|
211
|
-
}
|
|
212
|
-
interface ObservablePersistRemoteSetParams<T> {
|
|
213
|
-
syncState: Observable<ObservablePersistState>;
|
|
214
|
-
obs: ObservableParam<T>;
|
|
215
|
-
options: LegacyPersistOptions<T>;
|
|
216
|
-
changes: Change[];
|
|
217
|
-
value: T;
|
|
218
|
-
}
|
|
219
|
-
interface ObservablePersistRemoteGetParams<T> {
|
|
220
|
-
state: Observable<ObservablePersistState>;
|
|
221
|
-
obs: ObservableParam<T>;
|
|
222
|
-
options: LegacyPersistOptions<T>;
|
|
223
|
-
dateModified?: number;
|
|
224
|
-
lastSync?: number;
|
|
225
|
-
mode?: GetMode;
|
|
226
|
-
onGet: () => void;
|
|
227
|
-
onError: (error: Error) => void;
|
|
228
|
-
onChange: (params: ObservableOnChangeParams) => void | Promise<void>;
|
|
229
|
-
}
|
|
230
|
-
type ObservablePersistRemoteGetFnParams<T> = Omit<ObservablePersistRemoteGetParams<T>, 'onGet'>;
|
|
231
|
-
interface ObservablePersistRemoteClass {
|
|
232
|
-
get?<T>(params: ObservablePersistRemoteGetParams<T>): void;
|
|
233
|
-
set?<T>(params: ObservablePersistRemoteSetParams<T>): void | Promise<void | {
|
|
234
|
-
changes?: object;
|
|
235
|
-
dateModified?: number;
|
|
236
|
-
lastSync?: number;
|
|
237
|
-
pathStrs?: string[];
|
|
238
|
-
}>;
|
|
239
|
-
}
|
|
240
|
-
interface ObservablePersistRemoteFunctions<T = any> {
|
|
241
|
-
get?(params: ObservablePersistRemoteGetFnParams<T>): T | Promise<T>;
|
|
242
|
-
set?(params: ObservablePersistRemoteSetParams<T>): void | Promise<void | {
|
|
243
|
-
changes?: object | undefined;
|
|
244
|
-
dateModified?: number;
|
|
245
|
-
lastSync?: number;
|
|
246
|
-
}>;
|
|
247
|
-
}
|
|
248
|
-
interface ObservablePersistStateBase {
|
|
249
|
-
isLoadedLocal: boolean;
|
|
250
|
-
isEnabledLocal: boolean;
|
|
251
|
-
isEnabledRemote: boolean;
|
|
252
|
-
dateModified?: number;
|
|
253
|
-
lastSync?: number;
|
|
254
|
-
syncCount?: number;
|
|
255
|
-
clearLocal: () => Promise<void>;
|
|
256
|
-
sync: () => Promise<void>;
|
|
257
|
-
getPendingChanges: () => Record<string, {
|
|
258
|
-
p: any;
|
|
259
|
-
v?: any;
|
|
260
|
-
}> | undefined;
|
|
261
|
-
}
|
|
262
|
-
type ObservablePersistState = ObservableState & ObservablePersistStateBase;
|
|
263
124
|
declare type ObjectKeys<T> = Pick<T, {
|
|
264
125
|
[K in keyof T]-?: K extends string ? T[K] extends Record<string, any> ? T[K] extends any[] ? never : K : never : never;
|
|
265
126
|
}[keyof T]>;
|
|
@@ -331,4 +192,4 @@ declare const internal: {
|
|
|
331
192
|
observableSyncConfiguration: SyncedOptionsGlobal;
|
|
332
193
|
};
|
|
333
194
|
|
|
334
|
-
export { type FieldTransforms, type FieldTransformsInner, type
|
|
195
|
+
export { type FieldTransforms, type FieldTransformsInner, type ObservablePersistPlugin, type ObservablePersistPluginOptions, type ObservableSyncFunctions, type ObservableSyncSetParams, type PersistMetadata, type PersistOptions, type QueryByModified, type StringToDate, type SubscribeOptions, type SyncTransform, type SyncTransformMethod, type Synced, type SyncedGetParams, type SyncedOptions, type SyncedOptionsGlobal, type SyncedSetParams, type SyncedSubscribeParams, type TransformStringifyKeys, type TransformStringifyOptions, type TransformStringsToDates, combineTransforms, configureObservableSync, deepEqual, diffObjects, internal, mapSyncPlugins, onChangeRemote, removeNullUndefined, syncObservable, synced, transformStringifyDates, transformStringifyKeys };
|
package/sync.js
CHANGED
|
@@ -139,6 +139,7 @@ function transformStringifyDates(...args) {
|
|
|
139
139
|
}
|
|
140
140
|
var { clone, getNode, getNodeValue, getValueAtPath, globalState, runWithRetry, symbolLinked, createPreviousHandler } = state.internal;
|
|
141
141
|
var mapSyncPlugins = /* @__PURE__ */ new WeakMap();
|
|
142
|
+
var allSyncStates = /* @__PURE__ */ new Map();
|
|
142
143
|
var metadatas = /* @__PURE__ */ new WeakMap();
|
|
143
144
|
var promisesLocalSaves = /* @__PURE__ */ new Set();
|
|
144
145
|
function parseLocalConfig(config) {
|
|
@@ -296,9 +297,8 @@ async function prepChangeLocal(queuedChange) {
|
|
|
296
297
|
const { syncState: syncState2, changes, syncOptions, inRemoteChange, isApplyingPending } = queuedChange;
|
|
297
298
|
const persist = syncOptions.persist;
|
|
298
299
|
const { config: configLocal } = parseLocalConfig(persist);
|
|
299
|
-
const configRemote = syncOptions;
|
|
300
300
|
const saveLocal = (persist == null ? void 0 : persist.name) && !configLocal.readonly && !isApplyingPending && syncState2.isPersistEnabled.peek();
|
|
301
|
-
const saveRemote = !!(!inRemoteChange && (syncOptions == null ? void 0 : syncOptions.set) &&
|
|
301
|
+
const saveRemote = !!(!inRemoteChange && (syncOptions == null ? void 0 : syncOptions.set) && syncState2.isSyncEnabled.peek());
|
|
302
302
|
if (saveLocal || saveRemote) {
|
|
303
303
|
if (saveLocal && !syncState2.isPersistLoaded.peek()) {
|
|
304
304
|
console.error(
|
|
@@ -365,9 +365,8 @@ async function prepChangeRemote(queuedChange) {
|
|
|
365
365
|
} = queuedChange;
|
|
366
366
|
const persist = syncOptions.persist;
|
|
367
367
|
const { config: configLocal } = parseLocalConfig(persist);
|
|
368
|
-
const configRemote = syncOptions;
|
|
369
368
|
const saveLocal = persist && !configLocal.readonly && !isApplyingPending && syncState2.isPersistEnabled.peek();
|
|
370
|
-
const saveRemote = !inRemoteChange && (syncOptions == null ? void 0 : syncOptions.set) &&
|
|
369
|
+
const saveRemote = !inRemoteChange && (syncOptions == null ? void 0 : syncOptions.set) && syncState2.isSyncEnabled.peek();
|
|
371
370
|
if (saveLocal || saveRemote) {
|
|
372
371
|
if (saveLocal && !syncState2.isPersistLoaded.peek()) {
|
|
373
372
|
console.error(
|
|
@@ -399,7 +398,7 @@ async function prepChangeRemote(queuedChange) {
|
|
|
399
398
|
valueAtPath,
|
|
400
399
|
path,
|
|
401
400
|
pathTypes,
|
|
402
|
-
|
|
401
|
+
syncOptions || {}
|
|
403
402
|
);
|
|
404
403
|
promisesTransform.push(
|
|
405
404
|
doInOrder(promiseTransformRemote, ({ value: valueTransformed, path: pathTransformed }) => {
|
|
@@ -515,7 +514,7 @@ async function doChangeRemote(changeInfo) {
|
|
|
515
514
|
const onError = (error) => {
|
|
516
515
|
var _a2;
|
|
517
516
|
state$.error.set(error);
|
|
518
|
-
(_a2 = syncOptions.onSetError) == null ? void 0 : _a2.call(syncOptions, error);
|
|
517
|
+
(_a2 = syncOptions.onSetError) == null ? void 0 : _a2.call(syncOptions, error, setParams);
|
|
519
518
|
};
|
|
520
519
|
const setParams = {
|
|
521
520
|
node,
|
|
@@ -718,14 +717,15 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
718
717
|
let sync;
|
|
719
718
|
let numOutstandingGets = 0;
|
|
720
719
|
const syncState$ = state.syncState(obs$);
|
|
720
|
+
allSyncStates.set(syncState$, node);
|
|
721
721
|
syncState$.assign({
|
|
722
722
|
isLoaded: !syncOptions.get,
|
|
723
723
|
getPendingChanges: () => localState.pendingChanges
|
|
724
724
|
});
|
|
725
|
-
const onError = (error) => {
|
|
725
|
+
const onError = (error, getParams, source) => {
|
|
726
726
|
var _a;
|
|
727
727
|
node.state.error.set(error);
|
|
728
|
-
(_a = syncOptions.onGetError) == null ? void 0 : _a.call(syncOptions, error);
|
|
728
|
+
(_a = syncOptions.onGetError) == null ? void 0 : _a.call(syncOptions, error, getParams, source);
|
|
729
729
|
};
|
|
730
730
|
loadLocal(obs$, syncOptions, syncState$, localState);
|
|
731
731
|
if (syncOptions.get) {
|
|
@@ -843,7 +843,7 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
843
843
|
});
|
|
844
844
|
},
|
|
845
845
|
refresh: () => state.when(node.state.isLoaded, sync),
|
|
846
|
-
onError
|
|
846
|
+
onError: (error) => onError(error, void 0, "subscribe")
|
|
847
847
|
});
|
|
848
848
|
}
|
|
849
849
|
const existingValue = getNodeValue(node);
|
|
@@ -854,7 +854,7 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
854
854
|
options: syncOptions,
|
|
855
855
|
lastSync,
|
|
856
856
|
updateLastSync: (lastSync2) => getParams.lastSync = lastSync2,
|
|
857
|
-
onError
|
|
857
|
+
onError: (error) => onError(error, getParams, "get")
|
|
858
858
|
};
|
|
859
859
|
numOutstandingGets++;
|
|
860
860
|
node.state.isGetting.set(true);
|
package/sync.mjs
CHANGED
|
@@ -137,6 +137,7 @@ function transformStringifyDates(...args) {
|
|
|
137
137
|
}
|
|
138
138
|
var { clone, getNode, getNodeValue, getValueAtPath, globalState, runWithRetry, symbolLinked, createPreviousHandler } = internal;
|
|
139
139
|
var mapSyncPlugins = /* @__PURE__ */ new WeakMap();
|
|
140
|
+
var allSyncStates = /* @__PURE__ */ new Map();
|
|
140
141
|
var metadatas = /* @__PURE__ */ new WeakMap();
|
|
141
142
|
var promisesLocalSaves = /* @__PURE__ */ new Set();
|
|
142
143
|
function parseLocalConfig(config) {
|
|
@@ -294,9 +295,8 @@ async function prepChangeLocal(queuedChange) {
|
|
|
294
295
|
const { syncState: syncState2, changes, syncOptions, inRemoteChange, isApplyingPending } = queuedChange;
|
|
295
296
|
const persist = syncOptions.persist;
|
|
296
297
|
const { config: configLocal } = parseLocalConfig(persist);
|
|
297
|
-
const configRemote = syncOptions;
|
|
298
298
|
const saveLocal = (persist == null ? void 0 : persist.name) && !configLocal.readonly && !isApplyingPending && syncState2.isPersistEnabled.peek();
|
|
299
|
-
const saveRemote = !!(!inRemoteChange && (syncOptions == null ? void 0 : syncOptions.set) &&
|
|
299
|
+
const saveRemote = !!(!inRemoteChange && (syncOptions == null ? void 0 : syncOptions.set) && syncState2.isSyncEnabled.peek());
|
|
300
300
|
if (saveLocal || saveRemote) {
|
|
301
301
|
if (saveLocal && !syncState2.isPersistLoaded.peek()) {
|
|
302
302
|
console.error(
|
|
@@ -363,9 +363,8 @@ async function prepChangeRemote(queuedChange) {
|
|
|
363
363
|
} = queuedChange;
|
|
364
364
|
const persist = syncOptions.persist;
|
|
365
365
|
const { config: configLocal } = parseLocalConfig(persist);
|
|
366
|
-
const configRemote = syncOptions;
|
|
367
366
|
const saveLocal = persist && !configLocal.readonly && !isApplyingPending && syncState2.isPersistEnabled.peek();
|
|
368
|
-
const saveRemote = !inRemoteChange && (syncOptions == null ? void 0 : syncOptions.set) &&
|
|
367
|
+
const saveRemote = !inRemoteChange && (syncOptions == null ? void 0 : syncOptions.set) && syncState2.isSyncEnabled.peek();
|
|
369
368
|
if (saveLocal || saveRemote) {
|
|
370
369
|
if (saveLocal && !syncState2.isPersistLoaded.peek()) {
|
|
371
370
|
console.error(
|
|
@@ -397,7 +396,7 @@ async function prepChangeRemote(queuedChange) {
|
|
|
397
396
|
valueAtPath,
|
|
398
397
|
path,
|
|
399
398
|
pathTypes,
|
|
400
|
-
|
|
399
|
+
syncOptions || {}
|
|
401
400
|
);
|
|
402
401
|
promisesTransform.push(
|
|
403
402
|
doInOrder(promiseTransformRemote, ({ value: valueTransformed, path: pathTransformed }) => {
|
|
@@ -513,7 +512,7 @@ async function doChangeRemote(changeInfo) {
|
|
|
513
512
|
const onError = (error) => {
|
|
514
513
|
var _a2;
|
|
515
514
|
state$.error.set(error);
|
|
516
|
-
(_a2 = syncOptions.onSetError) == null ? void 0 : _a2.call(syncOptions, error);
|
|
515
|
+
(_a2 = syncOptions.onSetError) == null ? void 0 : _a2.call(syncOptions, error, setParams);
|
|
517
516
|
};
|
|
518
517
|
const setParams = {
|
|
519
518
|
node,
|
|
@@ -716,14 +715,15 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
716
715
|
let sync;
|
|
717
716
|
let numOutstandingGets = 0;
|
|
718
717
|
const syncState$ = syncState(obs$);
|
|
718
|
+
allSyncStates.set(syncState$, node);
|
|
719
719
|
syncState$.assign({
|
|
720
720
|
isLoaded: !syncOptions.get,
|
|
721
721
|
getPendingChanges: () => localState.pendingChanges
|
|
722
722
|
});
|
|
723
|
-
const onError = (error) => {
|
|
723
|
+
const onError = (error, getParams, source) => {
|
|
724
724
|
var _a;
|
|
725
725
|
node.state.error.set(error);
|
|
726
|
-
(_a = syncOptions.onGetError) == null ? void 0 : _a.call(syncOptions, error);
|
|
726
|
+
(_a = syncOptions.onGetError) == null ? void 0 : _a.call(syncOptions, error, getParams, source);
|
|
727
727
|
};
|
|
728
728
|
loadLocal(obs$, syncOptions, syncState$, localState);
|
|
729
729
|
if (syncOptions.get) {
|
|
@@ -841,7 +841,7 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
841
841
|
});
|
|
842
842
|
},
|
|
843
843
|
refresh: () => when(node.state.isLoaded, sync),
|
|
844
|
-
onError
|
|
844
|
+
onError: (error) => onError(error, void 0, "subscribe")
|
|
845
845
|
});
|
|
846
846
|
}
|
|
847
847
|
const existingValue = getNodeValue(node);
|
|
@@ -852,7 +852,7 @@ function syncObservable(obs$, syncOptionsOrSynced) {
|
|
|
852
852
|
options: syncOptions,
|
|
853
853
|
lastSync,
|
|
854
854
|
updateLastSync: (lastSync2) => getParams.lastSync = lastSync2,
|
|
855
|
-
onError
|
|
855
|
+
onError: (error) => onError(error, getParams, "get")
|
|
856
856
|
};
|
|
857
857
|
numOutstandingGets++;
|
|
858
858
|
node.state.isGetting.set(true);
|