@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/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 { 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
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
- promisesLocalSaves.add(promiseSet);
501
- await promiseSet;
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(clone(value));
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 (persist) {
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 (localState.numSavesOutstanding > 0) {
571
- if (transformedChanges) {
572
- if (!localState.pendingSaveResults) {
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
- if (persist) {
588
- if (shouldSaveMetadata && !state.isEmpty(metadata)) {
589
- updateMetadata(obs, localState, syncState, syncOptions, metadata);
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
- if (persist) {
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
- getNodeValue(getNode(node.state)).clearPersist = () => Promise.all([
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 { table, config: configLocal } = parseLocalConfig(persist);
486
- const shouldSaveMetadata = persist == null ? void 0 : persist.retrySync;
487
- if (saveRemote && shouldSaveMetadata) {
488
- await updateMetadataImmediate(obs, localState, syncState, syncOptions, {
489
- pending: localState.pendingChanges
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
- promisesLocalSaves.add(promiseSet);
499
- await promiseSet;
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(clone(value));
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 (persist) {
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 (localState.numSavesOutstanding > 0) {
569
- if (transformedChanges) {
570
- if (!localState.pendingSaveResults) {
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
- if (persist) {
586
- if (shouldSaveMetadata && !isEmpty(metadata)) {
587
- updateMetadata(obs, localState, syncState, syncOptions, metadata);
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
- if (persist) {
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
- getNodeValue(getNode(node.state)).clearPersist = () => Promise.all([
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
- src/types/babel.d.ts
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
+ }