atom.io 0.16.3 → 0.17.0

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.
Files changed (60) hide show
  1. package/dist/index.cjs +35 -50
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.ts +2 -2
  4. package/dist/index.js +11 -26
  5. package/dist/index.js.map +1 -1
  6. package/internal/dist/index.cjs +48 -17
  7. package/internal/dist/index.cjs.map +1 -1
  8. package/internal/dist/index.d.ts +7 -3
  9. package/internal/dist/index.js +47 -18
  10. package/internal/dist/index.js.map +1 -1
  11. package/internal/src/atom/create-regular-atom.ts +2 -3
  12. package/internal/src/get-state/get-from-store.ts +14 -0
  13. package/internal/src/get-state/index.ts +2 -0
  14. package/internal/src/{read-or-compute-value.ts → get-state/read-or-compute-value.ts} +3 -3
  15. package/internal/src/index.ts +1 -1
  16. package/internal/src/ingest-updates/ingest-atom-update.ts +2 -2
  17. package/internal/src/mutable/create-mutable-atom.ts +3 -4
  18. package/internal/src/mutable/tracker.ts +18 -13
  19. package/internal/src/selector/register-selector.ts +1 -1
  20. package/internal/src/set-state/index.ts +1 -0
  21. package/internal/src/set-state/set-atom.ts +1 -1
  22. package/internal/src/set-state/set-into-store.ts +24 -0
  23. package/internal/src/subscribe/subscribe-to-root-atoms.ts +1 -1
  24. package/internal/src/transaction/build-transaction.ts +5 -3
  25. package/package.json +1 -1
  26. package/react/dist/index.cjs +3 -3
  27. package/react/dist/index.cjs.map +1 -1
  28. package/react/dist/index.js +5 -5
  29. package/react/dist/index.js.map +1 -1
  30. package/react/src/use-i.ts +2 -3
  31. package/react/src/use-o.ts +3 -4
  32. package/realtime-client/dist/index.cjs +24 -21
  33. package/realtime-client/dist/index.cjs.map +1 -1
  34. package/realtime-client/dist/index.js +24 -21
  35. package/realtime-client/dist/index.js.map +1 -1
  36. package/realtime-client/src/pull-family-member.ts +3 -3
  37. package/realtime-client/src/pull-mutable-family-member.ts +4 -4
  38. package/realtime-client/src/pull-mutable.ts +4 -4
  39. package/realtime-client/src/pull-state.ts +3 -3
  40. package/realtime-client/src/sync-server-action.ts +9 -6
  41. package/realtime-client/src/sync-state.ts +3 -3
  42. package/realtime-server/dist/index.cjs +32 -32
  43. package/realtime-server/dist/index.cjs.map +1 -1
  44. package/realtime-server/dist/index.js +24 -24
  45. package/realtime-server/dist/index.js.map +1 -1
  46. package/realtime-server/src/realtime-action-synchronizer.ts +15 -9
  47. package/realtime-server/src/realtime-family-provider.ts +10 -5
  48. package/realtime-server/src/realtime-mutable-family-provider.ts +6 -5
  49. package/realtime-server/src/realtime-mutable-provider.ts +3 -2
  50. package/realtime-server/src/realtime-state-provider.ts +3 -3
  51. package/realtime-server/src/realtime-state-receiver.ts +2 -2
  52. package/realtime-server/src/realtime-state-synchronizer.ts +3 -3
  53. package/realtime-testing/dist/index.cjs +2 -2
  54. package/realtime-testing/dist/index.cjs.map +1 -1
  55. package/realtime-testing/dist/index.js +2 -2
  56. package/realtime-testing/dist/index.js.map +1 -1
  57. package/realtime-testing/src/setup-realtime-test.tsx +2 -2
  58. package/src/get-state.ts +2 -11
  59. package/src/set-state.ts +1 -13
  60. package/src/silo.ts +7 -3
@@ -350,6 +350,10 @@ type EnvironmentData = {
350
350
  };
351
351
  declare function getEnvironmentData(store: Store): EnvironmentData;
352
352
 
353
+ declare function getFromStore<T>(token: ReadableToken<T>, store: Store): T;
354
+
355
+ declare const readOrComputeValue: <T>(state: ReadableState<T>, target: Store) => T;
356
+
353
357
  declare function ingestAtomUpdate(applying: `newValue` | `oldValue`, atomUpdate: KeyedStateUpdate<any>, store: Store): void;
354
358
 
355
359
  declare function ingestSelectorUpdate(applying: `newValue` | `oldValue`, selectorUpdate: TimelineSelectorUpdate<any>, store: Store): void;
@@ -390,8 +394,6 @@ declare class NotFoundError extends Error {
390
394
  constructor(token: AtomIOToken, store: Store);
391
395
  }
392
396
 
393
- declare const readOrComputeValue: <T>(state: ReadableState<T>, target: Store) => T;
394
-
395
397
  declare const createReadonlySelector: <T>(options: ReadonlySelectorOptions<T>, family: FamilyMetadata | undefined, store: Store) => ReadonlySelectorToken<T>;
396
398
 
397
399
  declare function createStandaloneSelector<T>(options: WritableSelectorOptions<T>, store: Store): WritableSelectorToken<T>;
@@ -415,6 +417,8 @@ declare const become: <T>(nextVersionOfThing: T | Modify<T>) => (originalThing:
415
417
 
416
418
  declare const setAtomOrSelector: <T>(state: WritableState<T>, value: T | ((oldValue: T) => T), store: Store) => void;
417
419
 
420
+ declare function setIntoStore<T, New extends T>(token: WritableToken<T>, value: New | ((oldValue: T) => New), store: Store): void;
421
+
418
422
  declare const subscribeToRootAtoms: <T>(selector: Selector<T>, store: Store) => (() => void)[] | null;
419
423
 
420
424
  declare function subscribeToState<T>(token: ReadableToken<T>, handleUpdate: UpdateHandler<T>, key: string, store: Store): () => void;
@@ -456,4 +460,4 @@ type Selector<T> = ReadonlySelector<T> | WritableSelector<T>;
456
460
  type WritableState<T> = Atom<T> | WritableSelector<T>;
457
461
  type ReadableState<T> = Atom<T> | Selector<T>;
458
462
 
459
- export { type Atom, type AtomKey, type BaseStateData, type EnvironmentData, FamilyTracker, Future, IMPLICIT, LazyMap, type Lineage, type Modify, type MutableAtom, NotFoundError, type OperationProgress, type ReadableState, type ReadonlySelector, type ReadonlySelectorKey, type RegularAtom, type Selector, type SelectorKey, type Signal, type StateKey, StatefulSubject, Store, Subject, TRANSACTION_PHASES, type Timeline, type TimelineAtomUpdate, type TimelineSelectorUpdate, type TimelineTransactionUpdate, Tracker, type Transaction, type TransactionEpoch, type TransactionPhase, type TransactionProgress, type Transceiver, type TransceiverMode, type Withdrawable, type WritableSelector, type WritableState, abortTransaction, addAtomToTimeline, applyTransaction, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deleteAtom, deleteSelector, deposit, evictCachedValue, findInStore, getEnvironmentData, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateToken, ingestAtomUpdate, ingestSelectorUpdate, ingestTransactionUpdate, isAtomDefault, isAtomKey, isDone, isMutable, isReadonlySelectorKey, isSelectorKey, isStateKey, isTransceiver, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, setAtomOrSelector, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw, withdrawNewFamilyMember };
463
+ export { type Atom, type AtomKey, type BaseStateData, type EnvironmentData, FamilyTracker, Future, IMPLICIT, LazyMap, type Lineage, type Modify, type MutableAtom, NotFoundError, type OperationProgress, type ReadableState, type ReadonlySelector, type ReadonlySelectorKey, type RegularAtom, type Selector, type SelectorKey, type Signal, type StateKey, StatefulSubject, Store, Subject, TRANSACTION_PHASES, type Timeline, type TimelineAtomUpdate, type TimelineSelectorUpdate, type TimelineTransactionUpdate, Tracker, type Transaction, type TransactionEpoch, type TransactionPhase, type TransactionProgress, type Transceiver, type TransceiverMode, type Withdrawable, type WritableSelector, type WritableState, abortTransaction, addAtomToTimeline, applyTransaction, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deleteAtom, deleteSelector, deposit, evictCachedValue, findInStore, getEnvironmentData, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateToken, ingestAtomUpdate, ingestSelectorUpdate, ingestTransactionUpdate, isAtomDefault, isAtomKey, isDone, isMutable, isReadonlySelectorKey, isSelectorKey, isStateKey, isTransceiver, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, setAtomOrSelector, setIntoStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw, withdrawNewFamilyMember };
@@ -1,8 +1,8 @@
1
1
  import { Junction } from '../../dist/chunk-NYTGCPHB.js';
2
2
  import { isChildStore, isRootStore } from '../../dist/chunk-H4Q5FTPZ.js';
3
3
  import { __spreadValues, __spreadProps } from '../../dist/chunk-PZLG2HP3.js';
4
- import { AtomIOLogger, getState, setState, runTransaction } from 'atom.io';
5
4
  import { stringifyJson, selectJson, parseJson, selectJsonFamily } from 'atom.io/json';
5
+ import { AtomIOLogger, runTransaction } from 'atom.io';
6
6
  import { withdraw as withdraw$1 } from 'atom.io/internal';
7
7
 
8
8
  // internal/src/lineage.ts
@@ -317,7 +317,7 @@ var evictCachedValue = (key, target) => {
317
317
  target.logger.info(`\u{1F5D1}`, `state`, key, `evicted`);
318
318
  };
319
319
 
320
- // internal/src/read-or-compute-value.ts
320
+ // internal/src/get-state/read-or-compute-value.ts
321
321
  var readOrComputeValue = (state, target) => {
322
322
  if (target.valueMap.has(state.key)) {
323
323
  target.logger.info(`\u{1F4D6}`, state.type, state.key, `reading cached value`);
@@ -687,6 +687,21 @@ var setAtomOrSelector = (state, value, store) => {
687
687
  }
688
688
  };
689
689
 
690
+ // internal/src/set-state/set-into-store.ts
691
+ function setIntoStore(token, value, store) {
692
+ var _a;
693
+ const rejection = openOperation(token, store);
694
+ if (rejection) {
695
+ return;
696
+ }
697
+ const state = (_a = withdraw(token, store)) != null ? _a : withdrawNewFamilyMember(token, store);
698
+ if (state === void 0) {
699
+ throw new NotFoundError(token, store);
700
+ }
701
+ setAtomOrSelector(state, value, store);
702
+ closeOperation(store);
703
+ }
704
+
690
705
  // internal/src/keys.ts
691
706
  var isAtomKey = (key, store) => newest(store).atoms.has(key);
692
707
  var isSelectorKey = (key, store) => newest(store).selectors.has(key);
@@ -1065,6 +1080,8 @@ var subscribeToTransaction = (token, handleUpdate, key, store) => {
1065
1080
  unsubscribe();
1066
1081
  };
1067
1082
  };
1083
+
1084
+ // internal/src/mutable/tracker.ts
1068
1085
  var Tracker = class {
1069
1086
  initializeState(mutableState, store) {
1070
1087
  var _a;
@@ -1091,7 +1108,7 @@ var Tracker = class {
1091
1108
  }
1092
1109
  observeCore(mutableState, latestUpdateState, target) {
1093
1110
  const subscriptionKey = `tracker:${target.config.name}:${isChildStore(target) ? target.transactionMeta.update.key : `main`}:${mutableState.key}`;
1094
- const originalInnerValue = getState(mutableState, target);
1111
+ const originalInnerValue = getFromStore(mutableState, target);
1095
1112
  this.unsubscribeFromInnerValue = originalInnerValue.subscribe(
1096
1113
  subscriptionKey,
1097
1114
  (update) => {
@@ -1100,12 +1117,12 @@ var Tracker = class {
1100
1117
  subscriptionKey,
1101
1118
  () => {
1102
1119
  unsubscribe();
1103
- setState(latestUpdateState, update, target);
1120
+ setIntoStore(latestUpdateState, update, target);
1104
1121
  }
1105
1122
  );
1106
1123
  } else {
1107
- setState(mutableState, (current) => current, target);
1108
- setState(latestUpdateState, update, target);
1124
+ setIntoStore(mutableState, (current) => current, target);
1125
+ setIntoStore(latestUpdateState, update, target);
1109
1126
  }
1110
1127
  }
1111
1128
  );
@@ -1122,12 +1139,12 @@ var Tracker = class {
1122
1139
  subscriptionKey,
1123
1140
  () => {
1124
1141
  unsubscribe();
1125
- setState(latestUpdateState, update2, target);
1142
+ setIntoStore(latestUpdateState, update2, target);
1126
1143
  }
1127
1144
  );
1128
1145
  } else {
1129
- setState(mutableState, (current) => current, target);
1130
- setState(latestUpdateState, update2, target);
1146
+ setIntoStore(mutableState, (current) => current, target);
1147
+ setIntoStore(latestUpdateState, update2, target);
1131
1148
  }
1132
1149
  }
1133
1150
  );
@@ -1152,7 +1169,7 @@ var Tracker = class {
1152
1169
  { key: timelineId, type: `timeline` },
1153
1170
  (update) => {
1154
1171
  unsubscribe2();
1155
- setState(
1172
+ setIntoStore(
1156
1173
  mutableState,
1157
1174
  (transceiver) => {
1158
1175
  if (update === `redo` && newValue) {
@@ -1175,11 +1192,11 @@ var Tracker = class {
1175
1192
  subscriptionKey,
1176
1193
  () => {
1177
1194
  unsubscribe();
1178
- const mutable = getState(mutableState, target);
1195
+ const mutable = getFromStore(mutableState, target);
1179
1196
  const updateNumber = newValue === null ? -1 : mutable.getUpdateNumber(newValue);
1180
1197
  const eventOffset = updateNumber - mutable.cacheUpdateNumber;
1181
1198
  if (newValue && eventOffset === 1) {
1182
- setState(
1199
+ setIntoStore(
1183
1200
  mutableState,
1184
1201
  (transceiver) => (transceiver.do(newValue), transceiver),
1185
1202
  target
@@ -1260,7 +1277,7 @@ function createMutableAtom(options, family, store) {
1260
1277
  const cleanupFunctions = [];
1261
1278
  for (const effect of options.effects) {
1262
1279
  const cleanup = effect({
1263
- setSelf: (next) => setState(token, next, store),
1280
+ setSelf: (next) => setIntoStore(token, next, store),
1264
1281
  onSet: (handle) => subscribeToState(token, handle, `effect[${effectIndex}]`, store)
1265
1282
  });
1266
1283
  if (cleanup) {
@@ -1467,7 +1484,7 @@ function createRegularAtom(options, family, store) {
1467
1484
  const cleanupFunctions = [];
1468
1485
  for (const effect of options.effects) {
1469
1486
  const cleanup = effect({
1470
- setSelf: (next) => setState(token, next, store),
1487
+ setSelf: (next) => setIntoStore(token, next, store),
1471
1488
  onSet: (handle) => subscribeToState(token, handle, `effect[${effectIndex}]`, store)
1472
1489
  });
1473
1490
  if (cleanup) {
@@ -1533,10 +1550,22 @@ function getEnvironmentData(store) {
1533
1550
  store
1534
1551
  };
1535
1552
  }
1553
+
1554
+ // internal/src/get-state/get-from-store.ts
1555
+ function getFromStore(token, store) {
1556
+ var _a;
1557
+ const state = (_a = withdraw(token, store)) != null ? _a : withdrawNewFamilyMember(token, store);
1558
+ if (state === void 0) {
1559
+ throw new NotFoundError(token, store);
1560
+ }
1561
+ return readOrComputeValue(state, store);
1562
+ }
1563
+
1564
+ // internal/src/ingest-updates/ingest-atom-update.ts
1536
1565
  function ingestAtomUpdate(applying, atomUpdate, store) {
1537
1566
  const { key, newValue, oldValue } = atomUpdate;
1538
1567
  const value = applying === `newValue` ? newValue : oldValue;
1539
- setState({ key, type: `atom` }, value, store);
1568
+ setIntoStore({ key, type: `atom` }, value, store);
1540
1569
  }
1541
1570
 
1542
1571
  // internal/src/ingest-updates/ingest-selector-update.ts
@@ -2069,8 +2098,8 @@ var buildTransaction = (key, params, store, id) => {
2069
2098
  output: void 0
2070
2099
  },
2071
2100
  transactors: {
2072
- get: (token) => getState(token, child),
2073
- set: (token, value) => setState(token, value, child),
2101
+ get: (token) => getFromStore(token, child),
2102
+ set: (token, value) => setIntoStore(token, value, child),
2074
2103
  run: (token, id2) => runTransaction(token, id2, child),
2075
2104
  find: (token, key2) => findInStore(token, key2, child),
2076
2105
  env: () => getEnvironmentData(child)
@@ -2122,6 +2151,6 @@ function createTransaction(options, store) {
2122
2151
  // internal/src/transaction/index.ts
2123
2152
  var TRANSACTION_PHASES = [`idle`, `building`, `applying`];
2124
2153
 
2125
- export { FamilyTracker, Future, IMPLICIT, LazyMap, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, addAtomToTimeline, applyTransaction, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deleteAtom, deleteSelector, deposit, evictCachedValue, findInStore, getEnvironmentData, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateToken, ingestAtomUpdate, ingestSelectorUpdate, ingestTransactionUpdate, isAtomDefault, isAtomKey, isDone, isMutable, isReadonlySelectorKey, isSelectorKey, isStateKey, isTransceiver, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, setAtomOrSelector, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw, withdrawNewFamilyMember };
2154
+ export { FamilyTracker, Future, IMPLICIT, LazyMap, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, addAtomToTimeline, applyTransaction, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deleteAtom, deleteSelector, deposit, evictCachedValue, findInStore, getEnvironmentData, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateToken, ingestAtomUpdate, ingestSelectorUpdate, ingestTransactionUpdate, isAtomDefault, isAtomKey, isDone, isMutable, isReadonlySelectorKey, isSelectorKey, isStateKey, isTransceiver, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, setAtomOrSelector, setIntoStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw, withdrawNewFamilyMember };
2126
2155
  //# sourceMappingURL=out.js.map
2127
2156
  //# sourceMappingURL=index.js.map