atom.io 0.33.13 → 0.33.15

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 (56) hide show
  1. package/dist/data/index.js.map +1 -1
  2. package/dist/eslint-plugin/index.js.map +1 -1
  3. package/dist/internal/index.d.ts +9 -7
  4. package/dist/internal/index.d.ts.map +1 -1
  5. package/dist/internal/index.js +98 -53
  6. package/dist/internal/index.js.map +1 -1
  7. package/dist/introspection/index.d.ts +7 -7
  8. package/dist/introspection/index.d.ts.map +1 -1
  9. package/dist/introspection/index.js +26 -38
  10. package/dist/introspection/index.js.map +1 -1
  11. package/dist/json/index.js.map +1 -1
  12. package/dist/main/index.d.ts +21 -1
  13. package/dist/main/index.d.ts.map +1 -1
  14. package/dist/main/index.js +24 -13
  15. package/dist/main/index.js.map +1 -1
  16. package/dist/react/index.js.map +1 -1
  17. package/dist/react-devtools/index.css +110 -56
  18. package/dist/react-devtools/index.css.map +1 -1
  19. package/dist/react-devtools/index.js +38 -14
  20. package/dist/react-devtools/index.js.map +1 -1
  21. package/dist/realtime/index.js.map +1 -1
  22. package/dist/realtime-client/index.js.map +1 -1
  23. package/dist/realtime-react/index.js.map +1 -1
  24. package/dist/realtime-server/index.js.map +1 -1
  25. package/dist/realtime-testing/index.js.map +1 -1
  26. package/dist/transceivers/set-rtx/index.js.map +1 -1
  27. package/dist/use-o-BrXc7Qro.js.map +1 -1
  28. package/dist/web/index.js.map +1 -1
  29. package/package.json +10 -10
  30. package/src/internal/atom/create-regular-atom.ts +0 -2
  31. package/src/internal/atom/index.ts +0 -1
  32. package/src/internal/mutable/create-mutable-atom.ts +0 -2
  33. package/src/internal/selector/trace-selector-atoms.ts +9 -7
  34. package/src/internal/set-state/index.ts +2 -0
  35. package/src/internal/set-state/reset-atom-or-selector.ts +32 -0
  36. package/src/internal/set-state/reset-in-store.ts +78 -0
  37. package/src/internal/set-state/set-atom.ts +0 -4
  38. package/src/internal/subscribe/subscribe-to-root-atoms.ts +2 -8
  39. package/src/internal/transaction/build-transaction.ts +11 -2
  40. package/src/internal/transaction/create-transaction.ts +9 -5
  41. package/src/introspection/attach-atom-index.ts +6 -15
  42. package/src/introspection/attach-introspection-states.ts +5 -5
  43. package/src/introspection/attach-selector-index.ts +78 -85
  44. package/src/introspection/attach-timeline-index.ts +5 -12
  45. package/src/introspection/attach-transaction-index.ts +18 -16
  46. package/src/introspection/auditor.ts +2 -3
  47. package/src/main/index.ts +1 -0
  48. package/src/main/reset-state.ts +35 -0
  49. package/src/main/silo.ts +6 -0
  50. package/src/main/transaction.ts +2 -0
  51. package/src/react-devtools/StateIndex.tsx +44 -20
  52. package/src/react-devtools/TimelineIndex.tsx +16 -12
  53. package/src/react-devtools/TransactionIndex.tsx +22 -18
  54. package/src/react-devtools/devtools.css +110 -56
  55. package/src/react-devtools/store.ts +1 -1
  56. package/src/internal/atom/is-default.ts +0 -18
@@ -245,7 +245,7 @@ var Junction = class {
245
245
  this.replaceRelationsUnsafely = (a, bs) => {
246
246
  externalStore.replaceRelationsUnsafely(a, bs);
247
247
  };
248
- this.getRelatedKeys = (key) => externalStore.getRelatedKeys(key);
248
+ this.getRelatedKeys = ((key) => externalStore.getRelatedKeys(key));
249
249
  if (externalStore.getContent) {
250
250
  this.getContentInternal = (contentKey) => {
251
251
  return externalStore.getContent(contentKey);
@@ -603,7 +603,6 @@ const setAtom = (target, atom$1, next) => {
603
603
  newValue = become(next)(newValue);
604
604
  target.logger.info(`📝`, `atom`, atom$1.key, `set to`, newValue);
605
605
  newValue = cacheValue(target, atom$1.key, newValue, atom$1.subject);
606
- if (isAtomDefault(target, atom$1.key)) markAtomAsNotDefault(target, atom$1.key);
607
606
  markDone(target, atom$1.key);
608
607
  evictDownStream(target, atom$1);
609
608
  const update = {
@@ -640,19 +639,27 @@ const setAtom = (target, atom$1, next) => {
640
639
  };
641
640
 
642
641
  //#endregion
643
- //#region src/internal/set-state/set-atom-or-selector.ts
644
- const setAtomOrSelector = (store, state, value) => {
642
+ //#region src/internal/set-state/reset-atom-or-selector.ts
643
+ function resetAtom(store, state) {
644
+ let def = state.default;
645
+ if (def instanceof Function) def = def();
646
+ setAtom(store, state, def);
647
+ }
648
+ function resetAtomOrSelector(store, state) {
645
649
  switch (state.type) {
646
650
  case `atom`:
647
651
  case `mutable_atom`:
648
- setAtom(store, state, value);
652
+ resetAtom(store, state);
649
653
  break;
650
654
  case `writable_pure_selector`:
651
655
  case `writable_held_selector`:
652
- state.set(value);
656
+ {
657
+ const atoms = traceAllSelectorAtoms(state, store);
658
+ for (const atom$1 of atoms) resetAtom(store, atom$1);
659
+ }
653
660
  break;
654
661
  }
655
- };
662
+ }
656
663
 
657
664
  //#endregion
658
665
  //#region src/internal/families/create-regular-atom-family.ts
@@ -735,7 +742,7 @@ const traceAllSelectorAtoms = (selector, store) => {
735
742
  const selectorKey = selector.key;
736
743
  const directDependencyKeys = getSelectorDependencyKeys(store, selectorKey);
737
744
  const covered = /* @__PURE__ */ new Set();
738
- return directDependencyKeys.flatMap((depKey) => isAtomKey(store, depKey) ? depKey : traceSelectorAtoms(store, depKey, covered));
745
+ return directDependencyKeys.flatMap((depKey) => isAtomKey(store, depKey) ? depKey : traceSelectorAtoms(store, depKey, covered)).map((atomKey) => store.atoms.get(atomKey));
739
746
  };
740
747
 
741
748
  //#endregion
@@ -781,7 +788,7 @@ const registerSelector = (store, selectorType, selectorKey, covered) => ({
781
788
  updateSelectorAtoms(store, selectorType, selectorKey, dependency, covered);
782
789
  return dependencyValue;
783
790
  },
784
- set: (...params) => {
791
+ set: ((...params) => {
785
792
  let token;
786
793
  let value;
787
794
  if (params.length === 2) {
@@ -796,8 +803,8 @@ const registerSelector = (store, selectorType, selectorKey, covered) => ({
796
803
  const target = newest(store);
797
804
  const state = withdraw(target, token);
798
805
  setAtomOrSelector(target, state, value);
799
- },
800
- find: (...args) => findInStore(store, ...args),
806
+ }),
807
+ find: ((...args) => findInStore(store, ...args)),
801
808
  json: (token) => getJsonToken(store, token)
802
809
  });
803
810
 
@@ -1132,8 +1139,8 @@ function createReadonlyPureSelectorFamily(store, options, internalRoles) {
1132
1139
  default: (key) => {
1133
1140
  const getFn = options.get(key);
1134
1141
  return getFn({
1135
- get: (...args) => getFromStore(store, ...args),
1136
- find: (...args) => findInStore(store, ...args),
1142
+ get: ((...args) => getFromStore(store, ...args)),
1143
+ find: ((...args) => findInStore(store, ...args)),
1137
1144
  json: (token) => getJsonToken(store, token)
1138
1145
  });
1139
1146
  }
@@ -1263,8 +1270,8 @@ function createWritablePureSelectorFamily(store, options, internalRoles) {
1263
1270
  default: (key) => {
1264
1271
  const getFn = options.get(key);
1265
1272
  return getFn({
1266
- get: (...args) => getFromStore(store, ...args),
1267
- find: (...args) => findInStore(store, ...args),
1273
+ get: ((...args) => getFromStore(store, ...args)),
1274
+ find: ((...args) => findInStore(store, ...args)),
1268
1275
  json: (token) => getJsonToken(store, token)
1269
1276
  });
1270
1277
  }
@@ -1397,6 +1404,59 @@ function getFamilyOfToken(store, token) {
1397
1404
  }
1398
1405
  }
1399
1406
 
1407
+ //#endregion
1408
+ //#region src/internal/set-state/reset-in-store.ts
1409
+ function resetInStore(store, ...params) {
1410
+ let token;
1411
+ let family;
1412
+ let key;
1413
+ if (params.length === 1) {
1414
+ token = params[0];
1415
+ family = getFamilyOfToken(store, token) ?? null;
1416
+ if (family) {
1417
+ key = token.family ? parseJson(token.family.subKey) : null;
1418
+ token = findInStore(store, family, key);
1419
+ }
1420
+ } else {
1421
+ family = params[0];
1422
+ key = params[1];
1423
+ token = findInStore(store, family, key);
1424
+ }
1425
+ if (`counterfeit` in token && `family` in token) {
1426
+ const subKey = token.family.subKey;
1427
+ const disposal = store.disposalTraces.buffer.find((item) => item?.key === subKey);
1428
+ store.logger.error(`❌`, token.type, token.key, `could not be reset because it was not found in the store "${store.config.name}".`, disposal ? `This state was previously disposed:\n${disposal.trace}` : `No previous disposal trace was found.`);
1429
+ return;
1430
+ }
1431
+ const rejectionTime = openOperation(store, token);
1432
+ if (rejectionTime) {
1433
+ const unsubscribe = store.on.operationClose.subscribe(`waiting to reset "${token.key}" at T-${rejectionTime}`, () => {
1434
+ unsubscribe();
1435
+ store.logger.info(`🟢`, token.type, token.key, `resuming deferred resetState from T-${rejectionTime}`);
1436
+ resetInStore(store, token);
1437
+ });
1438
+ return;
1439
+ }
1440
+ const state = withdraw(store, token);
1441
+ resetAtomOrSelector(store, state);
1442
+ closeOperation(store);
1443
+ }
1444
+
1445
+ //#endregion
1446
+ //#region src/internal/set-state/set-atom-or-selector.ts
1447
+ const setAtomOrSelector = (store, state, value) => {
1448
+ switch (state.type) {
1449
+ case `atom`:
1450
+ case `mutable_atom`:
1451
+ setAtom(store, state, value);
1452
+ break;
1453
+ case `writable_pure_selector`:
1454
+ case `writable_held_selector`:
1455
+ state.set(value);
1456
+ break;
1457
+ }
1458
+ };
1459
+
1400
1460
  //#endregion
1401
1461
  //#region src/internal/set-state/set-into-store.ts
1402
1462
  function setIntoStore(store, ...params) {
@@ -1905,16 +1965,19 @@ const buildTransaction = (store, key, params, id) => {
1905
1965
  output: void 0
1906
1966
  },
1907
1967
  toolkit: {
1908
- get: (...ps) => getFromStore(child, ...ps),
1909
- set: (...ps) => {
1968
+ get: ((...ps) => getFromStore(child, ...ps)),
1969
+ set: ((...ps) => {
1910
1970
  setIntoStore(child, ...ps);
1911
- },
1971
+ }),
1972
+ reset: ((...ps) => {
1973
+ resetInStore(child, ...ps);
1974
+ }),
1912
1975
  run: (token, identifier = arbitrary()) => actUponStore(child, token, identifier),
1913
- find: (...ps) => findInStore(store, ...ps),
1976
+ find: ((...ps) => findInStore(store, ...ps)),
1914
1977
  json: (token) => getJsonToken(child, token),
1915
- dispose: (...ps) => {
1978
+ dispose: ((...ps) => {
1916
1979
  disposeFromStore(child, ...ps);
1917
- },
1980
+ }),
1918
1981
  env: () => getEnvironmentData(child)
1919
1982
  }
1920
1983
  };
@@ -1927,11 +1990,13 @@ const buildTransaction = (store, key, params, id) => {
1927
1990
  //#endregion
1928
1991
  //#region src/internal/transaction/create-transaction.ts
1929
1992
  function createTransaction(store, options) {
1993
+ const { key } = options;
1994
+ const transactionAlreadyExists = store.transactions.has(key);
1930
1995
  const newTransaction = {
1931
- key: options.key,
1996
+ key,
1932
1997
  type: `transaction`,
1933
1998
  run: (params, id) => {
1934
- const childStore = buildTransaction(store, options.key, params, id);
1999
+ const childStore = buildTransaction(store, key, params, id);
1935
2000
  try {
1936
2001
  const target$1 = newest(store);
1937
2002
  const { toolkit } = childStore.transactionMeta;
@@ -1940,7 +2005,7 @@ function createTransaction(store, options) {
1940
2005
  return output;
1941
2006
  } catch (thrown) {
1942
2007
  abortTransaction(target);
1943
- store.logger.warn(`💥`, `transaction`, options.key, `caught:`, thrown);
2008
+ store.logger.warn(`💥`, `transaction`, key, `caught:`, thrown);
1944
2009
  throw thrown;
1945
2010
  }
1946
2011
  },
@@ -1948,9 +2013,9 @@ function createTransaction(store, options) {
1948
2013
  subject: new Subject()
1949
2014
  };
1950
2015
  const target = newest(store);
1951
- target.transactions.set(newTransaction.key, newTransaction);
2016
+ target.transactions.set(key, newTransaction);
1952
2017
  const token = deposit(newTransaction);
1953
- store.on.transactionCreation.next(token);
2018
+ if (!transactionAlreadyExists) store.on.transactionCreation.next(token);
1954
2019
  return token;
1955
2020
  }
1956
2021
 
@@ -2159,11 +2224,9 @@ function subscribeInStore(store, token, handleUpdate, key = arbitrary$1()) {
2159
2224
  //#region src/internal/subscribe/subscribe-to-root-atoms.ts
2160
2225
  const subscribeToRootAtoms = (store, selector) => {
2161
2226
  const target = newest(store);
2162
- const dependencySubscriptions = traceAllSelectorAtoms(selector, store).map((atomKey) => {
2163
- const atom$1 = target.atoms.get(atomKey);
2164
- if (atom$1 === void 0) throw new Error(`Atom "${atomKey}", a dependency of selector "${selector.key}", not found in store "${store.config.name}".`);
2227
+ const dependencySubscriptions = traceAllSelectorAtoms(selector, store).map((atom$1) => {
2165
2228
  return atom$1.subject.subscribe(`${selector.type}:${selector.key}`, (atomChange) => {
2166
- store.logger.info(`📢`, selector.type, selector.key, `root`, atomKey, `went`, atomChange.oldValue, `->`, atomChange.newValue);
2229
+ store.logger.info(`📢`, selector.type, selector.key, `root`, atom$1.key, `went`, atomChange.oldValue, `->`, atomChange.newValue);
2167
2230
  const oldValue = recallState(target, selector);
2168
2231
  const newValue = readOrComputeValue(target, selector);
2169
2232
  store.logger.info(`✨`, selector.type, selector.key, `went`, oldValue, `->`, newValue);
@@ -2352,7 +2415,6 @@ function createMutableAtom(store, options, family) {
2352
2415
  if (family) newAtom.family = family;
2353
2416
  const initialValue = def();
2354
2417
  target.atoms.set(newAtom.key, newAtom);
2355
- markAtomAsDefault(store, key);
2356
2418
  cacheValue(target, key, initialValue, subject);
2357
2419
  const token = deposit(newAtom);
2358
2420
  if (options.effects) {
@@ -2600,22 +2662,6 @@ const evictCachedValue = (key, target) => {
2600
2662
  target.logger.info(`🗑`, `state`, key, `evicted`);
2601
2663
  };
2602
2664
 
2603
- //#endregion
2604
- //#region src/internal/atom/is-default.ts
2605
- const isAtomDefault = (store, key) => {
2606
- const core = newest(store);
2607
- return core.atomsThatAreDefault.has(key);
2608
- };
2609
- const markAtomAsDefault = (store, key) => {
2610
- const core = newest(store);
2611
- core.atomsThatAreDefault = new Set(core.atomsThatAreDefault).add(key);
2612
- };
2613
- const markAtomAsNotDefault = (store, key) => {
2614
- const core = newest(store);
2615
- core.atomsThatAreDefault = new Set(newest(store).atomsThatAreDefault);
2616
- core.atomsThatAreDefault.delete(key);
2617
- };
2618
-
2619
2665
  //#endregion
2620
2666
  //#region src/internal/atom/create-regular-atom.ts
2621
2667
  function createRegularAtom(store, options, family) {
@@ -2642,7 +2688,6 @@ function createRegularAtom(store, options, family) {
2642
2688
  let initialValue = def;
2643
2689
  if (def instanceof Function) initialValue = def();
2644
2690
  target.atoms.set(key, newAtom);
2645
- markAtomAsDefault(store, key);
2646
2691
  cacheValue(target, key, initialValue, subject);
2647
2692
  const token = deposit(newAtom);
2648
2693
  if (options.effects) {
@@ -2775,11 +2820,11 @@ var Join = class {
2775
2820
  this.store.miscResources.set(`join:${options.key}`, this);
2776
2821
  this.realm.allocate(`root`, options.key);
2777
2822
  this.toolkit = {
2778
- get: (...ps) => getFromStore(store, ...ps),
2779
- set: (...ps) => {
2823
+ get: ((...ps) => getFromStore(store, ...ps)),
2824
+ set: ((...ps) => {
2780
2825
  setIntoStore(store, ...ps);
2781
- },
2782
- find: (...ps) => findInStore(store, ...ps),
2826
+ }),
2827
+ find: ((...ps) => findInStore(store, ...ps)),
2783
2828
  json: (token) => getJsonToken(store, token)
2784
2829
  };
2785
2830
  const aSide = options.between[0];
@@ -3489,5 +3534,5 @@ const timeTravel = (store, action, token) => {
3489
3534
  };
3490
3535
 
3491
3536
  //#endregion
3492
- export { CircularBuffer, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, Future, IMPLICIT, Join, Junction, LazyMap, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, allocateIntoStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, capitalize, claimWithinStore, clearStore, closeOperation, counterfeit, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlyHeldSelector, createReadonlyPureSelector, createReadonlyPureSelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableHeldSelector, createWritablePureSelector, createWritablePureSelectorFamily, deallocateFromStore, deposit, disposeAtom, disposeFromStore, disposeSelector, editRelationsInStore, evictCachedValue, findInStore, findRelationsInStore, fuseWithinStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getInternalRelationsFromStore, getJoin, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getTrace, getUpdateFamily, getUpdateToken, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestMoleculeTransferEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, installIntoStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isReservedIntrospectionKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeRootMoleculeInStore, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, prettyPrintTokenType, readCachedValue, readOrComputeValue, recallState, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeInStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };
3537
+ export { CircularBuffer, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, Future, IMPLICIT, Join, Junction, LazyMap, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, allocateIntoStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, capitalize, claimWithinStore, clearStore, closeOperation, counterfeit, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlyHeldSelector, createReadonlyPureSelector, createReadonlyPureSelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableHeldSelector, createWritablePureSelector, createWritablePureSelectorFamily, deallocateFromStore, deposit, disposeAtom, disposeFromStore, disposeSelector, editRelationsInStore, evictCachedValue, findInStore, findRelationsInStore, fuseWithinStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getInternalRelationsFromStore, getJoin, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getTrace, getUpdateFamily, getUpdateToken, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestMoleculeTransferEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, installIntoStore, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isReservedIntrospectionKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeRootMoleculeInStore, markDone, newest, openOperation, prettyPrintTokenType, readCachedValue, readOrComputeValue, recallState, registerSelector, resetAtomOrSelector, resetInStore, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeInStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };
3493
3538
  //# sourceMappingURL=index.js.map