@legendapp/state 3.0.0-alpha.7 → 3.0.0-alpha.9
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/CHANGELOG.md +831 -1
- package/LICENSE +21 -1
- package/README.md +141 -1
- package/index.d.mts +1 -1
- package/index.d.ts +1 -1
- package/index.js +24 -22
- package/index.mjs +24 -22
- package/package.json +1 -1
- package/sync-plugins/crud.d.mts +0 -1
- package/sync-plugins/crud.d.ts +0 -1
- package/sync-plugins/crud.js +20 -31
- package/sync-plugins/crud.mjs +20 -31
- package/sync-plugins/keel.js +0 -1
- package/sync-plugins/keel.mjs +0 -1
- package/sync-plugins/supabase.js +0 -1
- package/sync-plugins/supabase.mjs +0 -1
- package/sync.js +36 -43
- package/sync.mjs +36 -43
- package/types/babel.d.ts +12 -1
- /package/config/{enable_GetSet.d.mts → enable$GetSet.d.mts} +0 -0
- /package/config/{enable_GetSet.d.ts → enable$GetSet.d.ts} +0 -0
package/sync.js
CHANGED
|
@@ -484,21 +484,24 @@ async function doChangeLocal(changeInfo) {
|
|
|
484
484
|
const { value$: obs, syncState, localState, syncOptions } = queuedChange;
|
|
485
485
|
const { pluginPersist } = localState;
|
|
486
486
|
const persist = syncOptions.persist;
|
|
487
|
-
const
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
if (changesLocal.length > 0) {
|
|
495
|
-
let promiseSet = pluginPersist.set(table, changesLocal, configLocal);
|
|
496
|
-
if (promiseSet) {
|
|
497
|
-
promiseSet = promiseSet.then(() => {
|
|
498
|
-
promisesLocalSaves.delete(promiseSet);
|
|
487
|
+
const saveLocal = !!(persist == null ? void 0 : persist.name);
|
|
488
|
+
if (saveLocal) {
|
|
489
|
+
const { table, config: configLocal } = parseLocalConfig(persist);
|
|
490
|
+
const shouldSaveMetadata = persist == null ? void 0 : persist.retrySync;
|
|
491
|
+
if (saveRemote && shouldSaveMetadata) {
|
|
492
|
+
await updateMetadataImmediate(obs, localState, syncState, syncOptions, {
|
|
493
|
+
pending: localState.pendingChanges
|
|
499
494
|
});
|
|
500
|
-
|
|
501
|
-
|
|
495
|
+
}
|
|
496
|
+
if (changesLocal.length > 0) {
|
|
497
|
+
let promiseSet = pluginPersist.set(table, changesLocal, configLocal);
|
|
498
|
+
if (promiseSet) {
|
|
499
|
+
promiseSet = promiseSet.then(() => {
|
|
500
|
+
promisesLocalSaves.delete(promiseSet);
|
|
501
|
+
});
|
|
502
|
+
promisesLocalSaves.add(promiseSet);
|
|
503
|
+
await promiseSet;
|
|
504
|
+
}
|
|
502
505
|
}
|
|
503
506
|
}
|
|
504
507
|
}
|
|
@@ -513,6 +516,7 @@ async function doChangeRemote(changeInfo) {
|
|
|
513
516
|
const { table, config: configLocal } = parseLocalConfig(persist);
|
|
514
517
|
const { allowSetIfGetError, onBeforeSet, onSetError, waitForSet, onAfterSet } = syncOptions || {};
|
|
515
518
|
const shouldSaveMetadata = persist == null ? void 0 : persist.retrySync;
|
|
519
|
+
const saveLocal = !!(persist == null ? void 0 : persist.name);
|
|
516
520
|
if (changesRemote.length > 0) {
|
|
517
521
|
await state.when(() => syncState.isLoaded.get() || allowSetIfGetError && syncState.error.get());
|
|
518
522
|
if (waitForSet) {
|
|
@@ -521,13 +525,12 @@ async function doChangeRemote(changeInfo) {
|
|
|
521
525
|
await state.when(waitFor);
|
|
522
526
|
}
|
|
523
527
|
}
|
|
524
|
-
let value = obs.peek();
|
|
528
|
+
let value = clone(obs.peek());
|
|
525
529
|
const transformSave = (_a = syncOptions == null ? void 0 : syncOptions.transform) == null ? void 0 : _a.save;
|
|
526
530
|
if (transformSave) {
|
|
527
|
-
value = transformSave(
|
|
531
|
+
value = transformSave(value);
|
|
528
532
|
}
|
|
529
533
|
onBeforeSet == null ? void 0 : onBeforeSet();
|
|
530
|
-
localState.numSavesOutstanding = (localState.numSavesOutstanding || 0) + 1;
|
|
531
534
|
let savedPromise = pluginSync.set({
|
|
532
535
|
value$: obs,
|
|
533
536
|
syncState,
|
|
@@ -540,14 +543,13 @@ async function doChangeRemote(changeInfo) {
|
|
|
540
543
|
savedPromise = savedPromise.catch((err) => onSetError == null ? void 0 : onSetError(err));
|
|
541
544
|
}
|
|
542
545
|
const saved = await savedPromise;
|
|
543
|
-
localState.numSavesOutstanding--;
|
|
544
546
|
if (saved !== void 0) {
|
|
545
547
|
const pathStrs = Array.from(new Set(changesRemote.map((change) => change.pathStr)));
|
|
546
548
|
const { changes, lastSync } = saved;
|
|
547
549
|
if (pathStrs.length > 0) {
|
|
548
550
|
let transformedChanges = void 0;
|
|
549
551
|
const metadata = {};
|
|
550
|
-
if (
|
|
552
|
+
if (saveLocal) {
|
|
551
553
|
const pendingMetadata = (_b = pluginPersist.getMetadata(table, configLocal)) == null ? void 0 : _b.pending;
|
|
552
554
|
const pending = localState.pendingChanges;
|
|
553
555
|
for (let i = 0; i < pathStrs.length; i++) {
|
|
@@ -567,29 +569,16 @@ async function doChangeRemote(changeInfo) {
|
|
|
567
569
|
if (changes && !state.isEmpty(changes)) {
|
|
568
570
|
transformedChanges = transformLoadData(changes, syncOptions, false, "set");
|
|
569
571
|
}
|
|
570
|
-
if (
|
|
571
|
-
if (transformedChanges) {
|
|
572
|
-
|
|
573
|
-
localState.pendingSaveResults = [];
|
|
574
|
-
}
|
|
575
|
-
localState.pendingSaveResults.push(transformedChanges);
|
|
576
|
-
}
|
|
577
|
-
} else {
|
|
578
|
-
let allChanges = [...localState.pendingSaveResults || [], transformedChanges].filter(
|
|
579
|
-
(v) => v !== void 0
|
|
580
|
-
);
|
|
581
|
-
if (allChanges.length > 0) {
|
|
582
|
-
if (allChanges.some((change) => state.isPromise(change))) {
|
|
583
|
-
allChanges = await Promise.all(allChanges);
|
|
584
|
-
}
|
|
585
|
-
onChangeRemote(() => state.mergeIntoObservable(obs, ...allChanges));
|
|
572
|
+
if (transformedChanges !== void 0) {
|
|
573
|
+
if (state.isPromise(transformedChanges)) {
|
|
574
|
+
transformedChanges = await transformedChanges;
|
|
586
575
|
}
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
576
|
+
onChangeRemote(() => state.mergeIntoObservable(obs, transformedChanges));
|
|
577
|
+
}
|
|
578
|
+
if (saveLocal) {
|
|
579
|
+
if (shouldSaveMetadata && !state.isEmpty(metadata)) {
|
|
580
|
+
updateMetadata(obs, localState, syncState, syncOptions, metadata);
|
|
591
581
|
}
|
|
592
|
-
localState.pendingSaveResults = [];
|
|
593
582
|
}
|
|
594
583
|
onAfterSet == null ? void 0 : onAfterSet();
|
|
595
584
|
}
|
|
@@ -618,10 +607,11 @@ function onObsChange(value$, syncState, localState, syncOptions, { changes, load
|
|
|
618
607
|
async function loadLocal(value$, syncOptions, syncState, localState) {
|
|
619
608
|
var _a, _b, _c;
|
|
620
609
|
const { persist } = syncOptions;
|
|
621
|
-
|
|
610
|
+
const node = getNode(value$);
|
|
611
|
+
const nodeValue = getNodeValue(getNode(node.state));
|
|
612
|
+
if (persist == null ? void 0 : persist.name) {
|
|
622
613
|
const PersistPlugin = persist.plugin || ((_a = observableSyncConfiguration.persist) == null ? void 0 : _a.plugin);
|
|
623
614
|
const { table, config } = parseLocalConfig(persist);
|
|
624
|
-
const node = getNode(value$);
|
|
625
615
|
if (!PersistPlugin) {
|
|
626
616
|
throw new Error("Local persist is not configured");
|
|
627
617
|
}
|
|
@@ -673,10 +663,13 @@ async function loadLocal(value$, syncOptions, syncState, localState) {
|
|
|
673
663
|
}
|
|
674
664
|
state.internal.globalState.isLoadingLocal = false;
|
|
675
665
|
}
|
|
676
|
-
|
|
666
|
+
nodeValue.clearPersist = () => Promise.all([
|
|
677
667
|
persistPlugin.deleteTable(table, config),
|
|
678
668
|
persistPlugin.deleteMetadata(table, config)
|
|
679
669
|
]);
|
|
670
|
+
} else {
|
|
671
|
+
nodeValue.clearPersist = () => {
|
|
672
|
+
};
|
|
680
673
|
}
|
|
681
674
|
syncState.isPersistLoaded.set(true);
|
|
682
675
|
}
|
package/sync.mjs
CHANGED
|
@@ -482,21 +482,24 @@ async function doChangeLocal(changeInfo) {
|
|
|
482
482
|
const { value$: obs, syncState, localState, syncOptions } = queuedChange;
|
|
483
483
|
const { pluginPersist } = localState;
|
|
484
484
|
const persist = syncOptions.persist;
|
|
485
|
-
const
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
if (changesLocal.length > 0) {
|
|
493
|
-
let promiseSet = pluginPersist.set(table, changesLocal, configLocal);
|
|
494
|
-
if (promiseSet) {
|
|
495
|
-
promiseSet = promiseSet.then(() => {
|
|
496
|
-
promisesLocalSaves.delete(promiseSet);
|
|
485
|
+
const saveLocal = !!(persist == null ? void 0 : persist.name);
|
|
486
|
+
if (saveLocal) {
|
|
487
|
+
const { table, config: configLocal } = parseLocalConfig(persist);
|
|
488
|
+
const shouldSaveMetadata = persist == null ? void 0 : persist.retrySync;
|
|
489
|
+
if (saveRemote && shouldSaveMetadata) {
|
|
490
|
+
await updateMetadataImmediate(obs, localState, syncState, syncOptions, {
|
|
491
|
+
pending: localState.pendingChanges
|
|
497
492
|
});
|
|
498
|
-
|
|
499
|
-
|
|
493
|
+
}
|
|
494
|
+
if (changesLocal.length > 0) {
|
|
495
|
+
let promiseSet = pluginPersist.set(table, changesLocal, configLocal);
|
|
496
|
+
if (promiseSet) {
|
|
497
|
+
promiseSet = promiseSet.then(() => {
|
|
498
|
+
promisesLocalSaves.delete(promiseSet);
|
|
499
|
+
});
|
|
500
|
+
promisesLocalSaves.add(promiseSet);
|
|
501
|
+
await promiseSet;
|
|
502
|
+
}
|
|
500
503
|
}
|
|
501
504
|
}
|
|
502
505
|
}
|
|
@@ -511,6 +514,7 @@ async function doChangeRemote(changeInfo) {
|
|
|
511
514
|
const { table, config: configLocal } = parseLocalConfig(persist);
|
|
512
515
|
const { allowSetIfGetError, onBeforeSet, onSetError, waitForSet, onAfterSet } = syncOptions || {};
|
|
513
516
|
const shouldSaveMetadata = persist == null ? void 0 : persist.retrySync;
|
|
517
|
+
const saveLocal = !!(persist == null ? void 0 : persist.name);
|
|
514
518
|
if (changesRemote.length > 0) {
|
|
515
519
|
await when(() => syncState.isLoaded.get() || allowSetIfGetError && syncState.error.get());
|
|
516
520
|
if (waitForSet) {
|
|
@@ -519,13 +523,12 @@ async function doChangeRemote(changeInfo) {
|
|
|
519
523
|
await when(waitFor);
|
|
520
524
|
}
|
|
521
525
|
}
|
|
522
|
-
let value = obs.peek();
|
|
526
|
+
let value = clone(obs.peek());
|
|
523
527
|
const transformSave = (_a = syncOptions == null ? void 0 : syncOptions.transform) == null ? void 0 : _a.save;
|
|
524
528
|
if (transformSave) {
|
|
525
|
-
value = transformSave(
|
|
529
|
+
value = transformSave(value);
|
|
526
530
|
}
|
|
527
531
|
onBeforeSet == null ? void 0 : onBeforeSet();
|
|
528
|
-
localState.numSavesOutstanding = (localState.numSavesOutstanding || 0) + 1;
|
|
529
532
|
let savedPromise = pluginSync.set({
|
|
530
533
|
value$: obs,
|
|
531
534
|
syncState,
|
|
@@ -538,14 +541,13 @@ async function doChangeRemote(changeInfo) {
|
|
|
538
541
|
savedPromise = savedPromise.catch((err) => onSetError == null ? void 0 : onSetError(err));
|
|
539
542
|
}
|
|
540
543
|
const saved = await savedPromise;
|
|
541
|
-
localState.numSavesOutstanding--;
|
|
542
544
|
if (saved !== void 0) {
|
|
543
545
|
const pathStrs = Array.from(new Set(changesRemote.map((change) => change.pathStr)));
|
|
544
546
|
const { changes, lastSync } = saved;
|
|
545
547
|
if (pathStrs.length > 0) {
|
|
546
548
|
let transformedChanges = void 0;
|
|
547
549
|
const metadata = {};
|
|
548
|
-
if (
|
|
550
|
+
if (saveLocal) {
|
|
549
551
|
const pendingMetadata = (_b = pluginPersist.getMetadata(table, configLocal)) == null ? void 0 : _b.pending;
|
|
550
552
|
const pending = localState.pendingChanges;
|
|
551
553
|
for (let i = 0; i < pathStrs.length; i++) {
|
|
@@ -565,29 +567,16 @@ async function doChangeRemote(changeInfo) {
|
|
|
565
567
|
if (changes && !isEmpty(changes)) {
|
|
566
568
|
transformedChanges = transformLoadData(changes, syncOptions, false, "set");
|
|
567
569
|
}
|
|
568
|
-
if (
|
|
569
|
-
if (transformedChanges) {
|
|
570
|
-
|
|
571
|
-
localState.pendingSaveResults = [];
|
|
572
|
-
}
|
|
573
|
-
localState.pendingSaveResults.push(transformedChanges);
|
|
574
|
-
}
|
|
575
|
-
} else {
|
|
576
|
-
let allChanges = [...localState.pendingSaveResults || [], transformedChanges].filter(
|
|
577
|
-
(v) => v !== void 0
|
|
578
|
-
);
|
|
579
|
-
if (allChanges.length > 0) {
|
|
580
|
-
if (allChanges.some((change) => isPromise(change))) {
|
|
581
|
-
allChanges = await Promise.all(allChanges);
|
|
582
|
-
}
|
|
583
|
-
onChangeRemote(() => mergeIntoObservable(obs, ...allChanges));
|
|
570
|
+
if (transformedChanges !== void 0) {
|
|
571
|
+
if (isPromise(transformedChanges)) {
|
|
572
|
+
transformedChanges = await transformedChanges;
|
|
584
573
|
}
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
574
|
+
onChangeRemote(() => mergeIntoObservable(obs, transformedChanges));
|
|
575
|
+
}
|
|
576
|
+
if (saveLocal) {
|
|
577
|
+
if (shouldSaveMetadata && !isEmpty(metadata)) {
|
|
578
|
+
updateMetadata(obs, localState, syncState, syncOptions, metadata);
|
|
589
579
|
}
|
|
590
|
-
localState.pendingSaveResults = [];
|
|
591
580
|
}
|
|
592
581
|
onAfterSet == null ? void 0 : onAfterSet();
|
|
593
582
|
}
|
|
@@ -616,10 +605,11 @@ function onObsChange(value$, syncState, localState, syncOptions, { changes, load
|
|
|
616
605
|
async function loadLocal(value$, syncOptions, syncState, localState) {
|
|
617
606
|
var _a, _b, _c;
|
|
618
607
|
const { persist } = syncOptions;
|
|
619
|
-
|
|
608
|
+
const node = getNode(value$);
|
|
609
|
+
const nodeValue = getNodeValue(getNode(node.state));
|
|
610
|
+
if (persist == null ? void 0 : persist.name) {
|
|
620
611
|
const PersistPlugin = persist.plugin || ((_a = observableSyncConfiguration.persist) == null ? void 0 : _a.plugin);
|
|
621
612
|
const { table, config } = parseLocalConfig(persist);
|
|
622
|
-
const node = getNode(value$);
|
|
623
613
|
if (!PersistPlugin) {
|
|
624
614
|
throw new Error("Local persist is not configured");
|
|
625
615
|
}
|
|
@@ -671,10 +661,13 @@ async function loadLocal(value$, syncOptions, syncState, localState) {
|
|
|
671
661
|
}
|
|
672
662
|
internal.globalState.isLoadingLocal = false;
|
|
673
663
|
}
|
|
674
|
-
|
|
664
|
+
nodeValue.clearPersist = () => Promise.all([
|
|
675
665
|
persistPlugin.deleteTable(table, config),
|
|
676
666
|
persistPlugin.deleteMetadata(table, config)
|
|
677
667
|
]);
|
|
668
|
+
} else {
|
|
669
|
+
nodeValue.clearPersist = () => {
|
|
670
|
+
};
|
|
678
671
|
}
|
|
679
672
|
syncState.isPersistLoaded.set(true);
|
|
680
673
|
}
|
package/types/babel.d.ts
CHANGED
|
@@ -1 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import type { ObservableParam } from '@legendapp/state';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4
|
+
import type { Computed, Memo } from '@legendapp/state/react';
|
|
5
|
+
declare module '@legendapp/state/react' {
|
|
6
|
+
export declare const Computed: (props: {
|
|
7
|
+
children: ObservableParam | (() => ReactNode) | ReactNode;
|
|
8
|
+
}) => React.ReactElement;
|
|
9
|
+
export declare const Memo: (props: {
|
|
10
|
+
children: ObservableParam | (() => ReactNode) | ReactNode;
|
|
11
|
+
}) => React.ReactElement;
|
|
12
|
+
}
|
|
File without changes
|
|
File without changes
|