atom.io 0.36.0 → 0.36.2

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 (105) hide show
  1. package/dist/internal/index.d.ts +93 -73
  2. package/dist/internal/index.d.ts.map +1 -1
  3. package/dist/internal/index.js +233 -248
  4. package/dist/internal/index.js.map +1 -1
  5. package/dist/introspection/index.d.ts +5 -6
  6. package/dist/introspection/index.d.ts.map +1 -1
  7. package/dist/introspection/index.js +2 -3
  8. package/dist/introspection/index.js.map +1 -1
  9. package/dist/main/index.d.ts +29 -37
  10. package/dist/main/index.d.ts.map +1 -1
  11. package/dist/main/index.js +8 -9
  12. package/dist/main/index.js.map +1 -1
  13. package/dist/react/index.d.ts +2 -2
  14. package/dist/react/index.d.ts.map +1 -1
  15. package/dist/react/index.js.map +1 -1
  16. package/dist/react-devtools/index.d.ts.map +1 -1
  17. package/dist/react-devtools/index.js.map +1 -1
  18. package/dist/realtime-client/index.d.ts +7 -8
  19. package/dist/realtime-client/index.d.ts.map +1 -1
  20. package/dist/realtime-client/index.js +3 -4
  21. package/dist/realtime-client/index.js.map +1 -1
  22. package/dist/realtime-react/index.d.ts +4 -4
  23. package/dist/realtime-react/index.d.ts.map +1 -1
  24. package/dist/realtime-react/index.js.map +1 -1
  25. package/dist/realtime-server/index.d.ts +2 -2
  26. package/dist/realtime-server/index.d.ts.map +1 -1
  27. package/dist/realtime-server/index.js.map +1 -1
  28. package/dist/transceivers/set-rtx/index.d.ts +9 -2
  29. package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
  30. package/dist/transceivers/set-rtx/index.js +3 -0
  31. package/dist/transceivers/set-rtx/index.js.map +1 -1
  32. package/package.json +3 -3
  33. package/src/internal/atom/create-regular-atom.ts +5 -5
  34. package/src/internal/atom/has-role.ts +12 -0
  35. package/src/internal/atom/index.ts +1 -0
  36. package/src/internal/caching.ts +60 -41
  37. package/src/internal/families/find-in-store.ts +1 -1
  38. package/src/internal/families/get-family-of-token.ts +1 -1
  39. package/src/internal/families/init-family-member.ts +1 -1
  40. package/src/internal/families/seek-in-store.ts +1 -1
  41. package/src/internal/get-state/read-or-compute-value.ts +26 -21
  42. package/src/internal/index.ts +8 -8
  43. package/src/internal/join/create-join.ts +3 -2
  44. package/src/internal/join/join-internal.ts +7 -4
  45. package/src/internal/mutable/create-mutable-atom-family.ts +6 -5
  46. package/src/internal/mutable/create-mutable-atom.ts +1 -1
  47. package/src/internal/mutable/get-json-family.ts +1 -1
  48. package/src/internal/mutable/get-json-token.ts +1 -1
  49. package/src/internal/mutable/get-update-family.ts +1 -1
  50. package/src/internal/mutable/get-update-token.ts +1 -1
  51. package/src/internal/mutable/tracker-family.ts +27 -31
  52. package/src/internal/mutable/tracker.ts +29 -23
  53. package/src/internal/mutable/transceiver.ts +11 -10
  54. package/src/internal/selector/create-readonly-held-selector.ts +2 -2
  55. package/src/internal/selector/create-readonly-pure-selector.ts +2 -2
  56. package/src/internal/selector/create-writable-held-selector.ts +3 -4
  57. package/src/internal/selector/create-writable-pure-selector.ts +3 -3
  58. package/src/internal/set-state/evict-downstream.ts +17 -15
  59. package/src/internal/set-state/index.ts +1 -0
  60. package/src/internal/set-state/reset-in-store.ts +6 -50
  61. package/src/internal/set-state/set-atom.ts +17 -24
  62. package/src/internal/set-state/set-into-store.ts +29 -13
  63. package/src/internal/store/counterfeit.ts +1 -1
  64. package/src/internal/store/deposit.ts +7 -8
  65. package/src/internal/store/store.ts +6 -6
  66. package/src/internal/store/withdraw.ts +8 -8
  67. package/src/internal/subscribe/subscribe-in-store.ts +8 -8
  68. package/src/internal/subscribe/subscribe-to-timeline.ts +2 -2
  69. package/src/internal/subscribe/subscribe-to-transaction.ts +2 -2
  70. package/src/internal/timeline/create-timeline.ts +3 -3
  71. package/src/internal/transaction/act-upon-store.ts +2 -2
  72. package/src/internal/transaction/apply-transaction.ts +2 -2
  73. package/src/internal/transaction/build-transaction.ts +2 -2
  74. package/src/internal/transaction/create-transaction.ts +3 -3
  75. package/src/internal/transaction/index.ts +2 -2
  76. package/src/internal/transaction/is-root-store.ts +4 -2
  77. package/src/internal/utility-types.ts +1 -1
  78. package/src/introspection/attach-introspection-states.ts +3 -3
  79. package/src/introspection/attach-transaction-index.ts +4 -4
  80. package/src/introspection/attach-transaction-logs.ts +4 -4
  81. package/src/introspection/auditor.ts +3 -3
  82. package/src/main/atom.ts +4 -4
  83. package/src/main/dispose-state.ts +4 -3
  84. package/src/main/find-state.ts +1 -1
  85. package/src/main/get-state.ts +6 -5
  86. package/src/main/reset-state.ts +3 -3
  87. package/src/main/set-state.ts +3 -3
  88. package/src/main/subscribe.ts +3 -3
  89. package/src/main/tokens.ts +9 -18
  90. package/src/main/transaction.ts +13 -15
  91. package/src/react/use-json.ts +5 -5
  92. package/src/react-devtools/TransactionIndex.tsx +3 -3
  93. package/src/react-devtools/Updates.tsx +2 -2
  94. package/src/realtime-client/continuity/register-and-attempt-confirmed-update.ts +2 -2
  95. package/src/realtime-client/pull-mutable-atom-family-member.ts +8 -13
  96. package/src/realtime-client/pull-mutable-atom.ts +5 -8
  97. package/src/realtime-client/push-state.ts +6 -5
  98. package/src/realtime-client/server-action.ts +5 -4
  99. package/src/realtime-react/use-pull-mutable-atom.ts +1 -1
  100. package/src/realtime-react/use-pull-mutable-family-member.ts +1 -1
  101. package/src/realtime-react/use-server-action.ts +2 -2
  102. package/src/realtime-server/realtime-mutable-family-provider.ts +1 -1
  103. package/src/realtime-server/realtime-mutable-provider.ts +1 -1
  104. package/src/transceivers/set-rtx/set-rtx.ts +14 -1
  105. package/src/internal/set-state/copy-mutable-if-needed.ts +0 -29
@@ -1,4 +1,3 @@
1
- import { Join as Join$1, arbitrary as arbitrary$1, subscribeToState as subscribeToState$1, subscribeToTimeline as subscribeToTimeline$1, subscribeToTransaction as subscribeToTransaction$1 } from "atom.io/internal";
2
1
  import { parseJson, stringifyJson } from "atom.io/json";
3
2
  import { Anarchy, AtomIOLogger } from "atom.io";
4
3
  import { SetRTX } from "atom.io/transceivers/set-rtx";
@@ -383,21 +382,6 @@ const recallState = (store, state) => {
383
382
  return target.valueMap.get(state.key);
384
383
  };
385
384
 
386
- //#endregion
387
- //#region src/internal/subscribe/subscribe-in-store.ts
388
- function subscribeInStore(store, token, handleUpdate, key = arbitrary$1()) {
389
- switch (token.type) {
390
- case `atom`:
391
- case `mutable_atom`:
392
- case `readonly_pure_selector`:
393
- case `readonly_held_selector`:
394
- case `writable_pure_selector`:
395
- case `writable_held_selector`: return subscribeToState$1(store, token, key, handleUpdate);
396
- case `transaction`: return subscribeToTransaction$1(store, token, key, handleUpdate);
397
- case `timeline`: return subscribeToTimeline$1(store, token, key, handleUpdate);
398
- }
399
- }
400
-
401
385
  //#endregion
402
386
  //#region src/internal/future.ts
403
387
  /**
@@ -454,21 +438,6 @@ var Future = class extends Promise {
454
438
  }
455
439
  };
456
440
 
457
- //#endregion
458
- //#region src/internal/set-state/copy-mutable-if-needed.ts
459
- function copyMutableIfNeeded(target, atom, origin) {
460
- const originValue = origin.valueMap.get(atom.key);
461
- const targetValue = target.valueMap.get(atom.key);
462
- if (originValue !== targetValue) return targetValue;
463
- if (originValue === void 0) return new atom.class();
464
- origin.logger.info(`📃`, `atom`, atom.key, `copying`);
465
- const jsonValue = originValue.toJSON();
466
- const copiedValue = atom.class.fromJSON(jsonValue);
467
- target.valueMap.set(atom.key, copiedValue);
468
- new Tracker(atom, origin);
469
- return copiedValue;
470
- }
471
-
472
441
  //#endregion
473
442
  //#region src/internal/transaction/is-root-store.ts
474
443
  function isRootStore(store) {
@@ -517,32 +486,35 @@ const markDone = (store, key) => {
517
486
 
518
487
  //#endregion
519
488
  //#region src/internal/set-state/evict-downstream.ts
520
- function evictDownStream(store, atom) {
489
+ function evictDownstreamFromAtom(store, atom) {
521
490
  const target = newest(store);
522
- const downstreamKeys = target.selectorAtoms.getRelatedKeys(atom.key);
523
- target.logger.info(`🧹`, atom.type, atom.key, downstreamKeys ? `evicting ${downstreamKeys.size} states downstream:` : `no downstream states`, downstreamKeys ?? `to evict`);
491
+ const { key, type } = atom;
492
+ const downstreamKeys = target.selectorAtoms.getRelatedKeys(key);
493
+ target.logger.info(`🧹`, type, key, downstreamKeys ? `evicting ${downstreamKeys.size} states downstream:` : `no downstream states`, downstreamKeys ?? `to evict`);
524
494
  if (downstreamKeys) {
525
- if (target.operation.open) target.logger.info(`🧹`, atom.type, atom.key, `[ ${[...target.operation.done].join(`, `)} ] already done`);
526
- for (const key of downstreamKeys) {
527
- if (isDone(target, key)) continue;
528
- evictCachedValue(target, key);
529
- markDone(target, key);
495
+ if (target.operation.open) target.logger.info(`🧹`, type, key, `[ ${[...target.operation.done].join(`, `)} ] already done`);
496
+ for (const downstreamKey of downstreamKeys) {
497
+ if (isDone(target, downstreamKey)) continue;
498
+ evictCachedValue(target, downstreamKey);
499
+ markDone(target, downstreamKey);
530
500
  }
531
501
  }
532
502
  }
533
- function evictDownStreamFromSelector(store, selector) {
503
+ function evictDownstreamFromSelector(store, selectorKey) {
534
504
  const target = newest(store);
535
- const relationEntries = target.selectorGraph.getRelationEntries({ upstreamSelectorKey: selector.key }).filter(([_, { source }]) => source === selector.key);
505
+ const relationEntries = target.selectorGraph.getRelationEntries({ upstreamSelectorKey: selectorKey }).filter(([_, { source }]) => source === selectorKey);
536
506
  for (const [downstreamSelectorKey] of relationEntries) {
537
507
  if (isDone(target, downstreamSelectorKey)) continue;
538
508
  evictCachedValue(target, downstreamSelectorKey);
539
509
  markDone(target, downstreamSelectorKey);
510
+ evictDownstreamFromSelector(store, downstreamSelectorKey);
540
511
  }
541
512
  }
542
513
 
543
514
  //#endregion
544
515
  //#region src/internal/caching.ts
545
- function cacheValue(target, key, value, subject) {
516
+ function writeToCache(target, state, value) {
517
+ const { key, subject, type } = state;
546
518
  const currentValue = target.valueMap.get(key);
547
519
  if (currentValue instanceof Future && !currentValue.done) {
548
520
  const future = currentValue;
@@ -559,20 +531,21 @@ function cacheValue(target, key, value, subject) {
559
531
  future.then(function handleResolvedFuture(resolved) {
560
532
  const current = target.valueMap.get(key);
561
533
  if (current === future) {
562
- cacheValue(target, key, resolved, subject);
563
- const atom = target.atoms.get(key);
564
- if (atom) {
565
- openOperation(target, atom);
566
- evictDownStream(target, atom);
567
- closeOperation(target);
568
- } else {
569
- const selector = target.writableSelectors.get(key) ?? target.readonlySelectors.get(key);
570
- if (selector) {
571
- openOperation(target, selector);
572
- evictDownStreamFromSelector(target, selector);
573
- closeOperation(target);
574
- }
534
+ openOperation(target, state);
535
+ writeToCache(target, state, resolved);
536
+ switch (type) {
537
+ case `atom`:
538
+ case `mutable_atom`:
539
+ evictDownstreamFromAtom(target, state);
540
+ break;
541
+ case `readonly_held_selector`:
542
+ case `readonly_pure_selector`:
543
+ case `writable_held_selector`:
544
+ case `writable_pure_selector`:
545
+ evictDownstreamFromSelector(target, key);
546
+ break;
575
547
  }
548
+ closeOperation(target);
576
549
  subject.next({
577
550
  newValue: resolved,
578
551
  oldValue: future
@@ -586,17 +559,31 @@ function cacheValue(target, key, value, subject) {
586
559
  target.valueMap.set(key, value);
587
560
  return value;
588
561
  }
589
- const readCachedValue = (state, target) => {
562
+ /**
563
+ * @param target - the newest layer of the store
564
+ * @param state - the state to read from cache
565
+ * @param mut - whether the value is intended to be mutable
566
+ * @returns the state's current value
567
+ */
568
+ function readFromCache(target, state, mut) {
590
569
  target.logger.info(`📖`, state.type, state.key, `reading cached value`);
591
570
  let value = target.valueMap.get(state.key);
592
- if (state.type === `mutable_atom` && isChildStore(target)) {
571
+ const mayNeedToBeCopied = mut === `mut` && state.type === `mutable_atom` && isChildStore(target);
572
+ if (mayNeedToBeCopied) {
573
+ const mutableAtom$1 = state;
593
574
  const { parent } = target;
594
- const copiedValue = copyMutableIfNeeded(target, state, parent);
575
+ if (target.valueMap.hasOwn(mutableAtom$1.key)) return value;
576
+ const parentValue = parent.valueMap.get(mutableAtom$1.key);
577
+ target.logger.info(`📃`, `atom`, mutableAtom$1.key, `copying`);
578
+ const jsonValue = parentValue.toJSON();
579
+ const copiedValue = mutableAtom$1.class.fromJSON(jsonValue);
580
+ target.valueMap.set(mutableAtom$1.key, copiedValue);
581
+ new Tracker(mutableAtom$1, parent);
595
582
  value = copiedValue;
596
583
  }
597
584
  return value;
598
- };
599
- const evictCachedValue = (target, key) => {
585
+ }
586
+ function evictCachedValue(target, key) {
600
587
  const currentValue = target.valueMap.get(key);
601
588
  if (currentValue instanceof Future) {
602
589
  const selector = target.writableSelectors.get(key) ?? target.readonlySelectors.get(key);
@@ -606,57 +593,49 @@ const evictCachedValue = (target, key) => {
606
593
  if (target.operation.open) target.operation.prev.set(key, currentValue);
607
594
  target.valueMap.delete(key);
608
595
  target.logger.info(`🗑`, `state`, key, `evicted`);
609
- };
596
+ }
610
597
 
611
598
  //#endregion
612
599
  //#region src/internal/get-state/read-or-compute-value.ts
613
- const readOrComputeValue = (target, state) => {
614
- if (target.valueMap.has(state.key)) return readCachedValue(state, target);
600
+ function readOrComputeValue(target, state, mut) {
601
+ if (target.valueMap.has(state.key)) return readFromCache(target, state, mut);
602
+ const { key } = state;
615
603
  switch (state.type) {
616
604
  case `readonly_held_selector`:
617
605
  case `readonly_pure_selector`:
618
606
  case `writable_held_selector`:
619
607
  case `writable_pure_selector`:
620
- target.logger.info(`🧮`, state.type, state.key, `computing value`);
608
+ target.logger.info(`🧮`, state.type, key, `computing value`);
621
609
  return state.get();
622
610
  case `atom`: {
623
- const def = state.default;
624
- let defaultValue;
625
- if (def instanceof Function) defaultValue = def();
626
- else defaultValue = def;
627
- const cachedValue = cacheValue(target, state.key, defaultValue, state.subject);
628
- target.logger.info(`💁`, `atom`, state.key, `could not find cached value; using default`, defaultValue);
611
+ let def;
612
+ if (state.default instanceof Function) def = state.default();
613
+ else def = state.default;
614
+ const cachedValue = writeToCache(target, state, def);
615
+ target.logger.info(`💁`, `atom`, state.key, `could not find cached value; using default`, def);
629
616
  return cachedValue;
630
617
  }
631
618
  case `mutable_atom`: {
632
- const Ctor = state.class;
633
- const instance = new Ctor();
634
- const cachedValue = cacheValue(target, state.key, instance, state.subject);
619
+ const instance = new state.class();
620
+ const cachedValue = writeToCache(target, state, instance);
635
621
  target.logger.info(`💁`, `mutable_atom`, state.key, `could not find cached value; using default`, instance);
636
622
  return cachedValue;
637
623
  }
638
624
  }
639
- };
640
-
641
- //#endregion
642
- //#region src/internal/subscribe/subscribe-to-root-atoms.ts
643
- const subscribeToRootDependency = (target, selector, atom) => {
644
- return atom.subject.subscribe(`${selector.type}:${selector.key}`, (atomChange) => {
645
- target.logger.info(`📢`, selector.type, selector.key, `root`, atom.key, `went`, atomChange.oldValue, `->`, atomChange.newValue);
646
- const oldValue = recallState(target, selector);
647
- const newValue = readOrComputeValue(target, selector);
648
- target.logger.info(`✨`, selector.type, selector.key, `went`, oldValue, `->`, newValue);
649
- selector.subject.next({
650
- newValue,
651
- oldValue
652
- });
653
- });
654
- };
625
+ }
655
626
 
656
627
  //#endregion
657
628
  //#region src/internal/set-state/become.ts
658
629
  const become = (nextVersionOfThing) => (originalThing) => nextVersionOfThing instanceof Function ? nextVersionOfThing(originalThing) : nextVersionOfThing;
659
630
 
631
+ //#endregion
632
+ //#region src/internal/atom/has-role.ts
633
+ const INTERNAL_ROLES = [`tracker:signal`];
634
+ function hasRole(atom, role) {
635
+ if (`internalRoles` in atom === false) return false;
636
+ return atom.internalRoles.includes(role);
637
+ }
638
+
660
639
  //#endregion
661
640
  //#region src/internal/set-state/emit-update.ts
662
641
  const emitUpdate = (store, state, update) => {
@@ -676,18 +655,12 @@ const emitUpdate = (store, state, update) => {
676
655
  //#endregion
677
656
  //#region src/internal/set-state/set-atom.ts
678
657
  const setAtom = (target, atom, next) => {
679
- const oldValue = readOrComputeValue(target, atom);
680
- let newValue = oldValue;
681
- if (atom.type === `mutable_atom` && isChildStore(target)) {
682
- const { parent } = target;
683
- const copiedValue = copyMutableIfNeeded(target, atom, parent);
684
- newValue = copiedValue;
685
- }
686
- newValue = become(next)(newValue);
658
+ const oldValue = readOrComputeValue(target, atom, `mut`);
659
+ let newValue = become(next)(oldValue);
687
660
  target.logger.info(`📝`, `atom`, atom.key, `set to`, newValue);
688
- newValue = cacheValue(target, atom.key, newValue, atom.subject);
661
+ newValue = writeToCache(target, atom, newValue);
689
662
  markDone(target, atom.key);
690
- evictDownStream(target, atom);
663
+ evictDownstreamFromAtom(target, atom);
691
664
  const update = {
692
665
  oldValue,
693
666
  newValue
@@ -707,17 +680,12 @@ const setAtom = (target, atom, next) => {
707
680
  if (atom.family) atomUpdate.family = atom.family;
708
681
  target.transactionMeta.update.updates.push(atomUpdate);
709
682
  target.logger.info(`📁`, `atom`, key, `stowed (`, update.oldValue, `->`, update.newValue, `)`);
710
- } else if (atom.key.startsWith(`*`)) {
711
- const mutableKey = atom.key.slice(1);
712
- const mutableAtom$1 = target.atoms.get(mutableKey);
713
- let transceiver = target.valueMap.get(mutableKey);
714
- if (mutableAtom$1.type === `mutable_atom` && isChildStore(target)) {
715
- const { parent } = target;
716
- const copiedValue = copyMutableIfNeeded(target, mutableAtom$1, parent);
717
- transceiver = copiedValue;
718
- }
683
+ } else if (hasRole(atom, `tracker:signal`)) {
684
+ const key = atom.key.slice(1);
685
+ const mutable = target.atoms.get(key);
686
+ const transceiver = readOrComputeValue(target, mutable, `mut`);
719
687
  const accepted = transceiver.do(update.newValue) === null;
720
- if (accepted) evictDownStream(target, mutableAtom$1);
688
+ if (accepted === true) evictDownstreamFromAtom(target, mutable);
721
689
  }
722
690
  };
723
691
 
@@ -760,44 +728,6 @@ function getFamilyOfToken(store, token) {
760
728
  }
761
729
  }
762
730
 
763
- //#endregion
764
- //#region src/internal/set-state/reset-in-store.ts
765
- function resetInStore(store, ...params) {
766
- let token;
767
- let family;
768
- let key;
769
- if (params.length === 1) {
770
- token = params[0];
771
- family = getFamilyOfToken(store, token) ?? null;
772
- if (family) {
773
- key = token.family ? parseJson(token.family.subKey) : null;
774
- token = findInStore(store, family, key);
775
- }
776
- } else {
777
- family = params[0];
778
- key = params[1];
779
- token = findInStore(store, family, key);
780
- }
781
- if (`counterfeit` in token && `family` in token) {
782
- const subKey = token.family.subKey;
783
- const disposal = store.disposalTraces.buffer.find((item) => item?.key === subKey);
784
- 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.`);
785
- return;
786
- }
787
- const rejectionTime = openOperation(store, token);
788
- if (rejectionTime) {
789
- const unsubscribe = store.on.operationClose.subscribe(`waiting to reset "${token.key}" at T-${rejectionTime}`, () => {
790
- unsubscribe();
791
- store.logger.info(`🟢`, token.type, token.key, `resuming deferred resetState from T-${rejectionTime}`);
792
- resetInStore(store, token);
793
- });
794
- return;
795
- }
796
- const state = withdraw(store, token);
797
- resetAtomOrSelector(store, state);
798
- closeOperation(store);
799
- }
800
-
801
731
  //#endregion
802
732
  //#region src/internal/set-state/set-atom-or-selector.ts
803
733
  const setAtomOrSelector = (store, state, value) => {
@@ -823,9 +753,9 @@ function setIntoStore(store, ...params) {
823
753
  if (params.length === 2) {
824
754
  token = params[0];
825
755
  value = params[1];
826
- family = getFamilyOfToken(store, token) ?? null;
827
- if (family) {
828
- key = token.family ? parseJson(token.family.subKey) : null;
756
+ if (token.family) {
757
+ family = getFamilyOfToken(store, token);
758
+ key = parseJson(token.family.subKey);
829
759
  token = findInStore(store, family, key);
830
760
  }
831
761
  } else {
@@ -834,26 +764,45 @@ function setIntoStore(store, ...params) {
834
764
  value = params[2];
835
765
  token = findInStore(store, family, key);
836
766
  }
767
+ const action = value === RESET_STATE ? `reset` : `set`;
837
768
  if (`counterfeit` in token && `family` in token) {
838
769
  const subKey = token.family.subKey;
839
770
  const disposal = store.disposalTraces.buffer.find((item) => item?.key === subKey);
840
- store.logger.error(`❌`, token.type, token.key, `could not be set 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.`);
771
+ store.logger.error(`❌`, token.type, token.key, `could not be`, action, `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.`);
841
772
  return;
842
773
  }
843
774
  const rejectionTime = openOperation(store, token);
844
775
  if (rejectionTime) {
845
- const unsubscribe = store.on.operationClose.subscribe(`waiting to set "${token.key}" at T-${rejectionTime}`, () => {
776
+ const unsubscribe = store.on.operationClose.subscribe(`waiting to ${action} "${token.key}" at T-${rejectionTime}`, function waitUntilOperationCloseToSetState() {
846
777
  unsubscribe();
847
- store.logger.info(`🟢`, token.type, token.key, `resuming deferred setState from T-${rejectionTime}`);
778
+ store.logger.info(`🟢`, token.type, token.key, `resuming deferred`, action, `from T-${rejectionTime}`);
848
779
  setIntoStore(store, token, value);
849
780
  });
850
781
  return;
851
782
  }
852
783
  const state = withdraw(store, token);
853
- setAtomOrSelector(store, state, value);
784
+ if (value === RESET_STATE) resetAtomOrSelector(store, state);
785
+ else setAtomOrSelector(store, state, value);
854
786
  closeOperation(store);
855
787
  }
856
788
 
789
+ //#endregion
790
+ //#region src/internal/set-state/reset-in-store.ts
791
+ const RESET_STATE = Symbol(`RESET`);
792
+ function resetInStore(store, ...params) {
793
+ let token;
794
+ let family;
795
+ let key;
796
+ if (params.length === 1) {
797
+ token = params[0];
798
+ setIntoStore(store, token, RESET_STATE);
799
+ } else {
800
+ family = params[0];
801
+ key = params[1];
802
+ setIntoStore(store, family, key, RESET_STATE);
803
+ }
804
+ }
805
+
857
806
  //#endregion
858
807
  //#region src/internal/keys.ts
859
808
  const isAtomKey = (store, key) => newest(store).atoms.has(key);
@@ -967,7 +916,7 @@ const createReadonlyHeldSelector = (store, options, family) => {
967
916
  find,
968
917
  json
969
918
  }, constant);
970
- cacheValue(newest(store), key, constant, subject);
919
+ writeToCache(newest(store), readonlySelector, constant);
971
920
  covered.clear();
972
921
  return constant;
973
922
  };
@@ -1008,7 +957,7 @@ const createReadonlyPureSelector = (store, options, family) => {
1008
957
  find,
1009
958
  json
1010
959
  });
1011
- const cached = cacheValue(innerTarget, key, value, subject);
960
+ const cached = writeToCache(innerTarget, readonlySelector, value);
1012
961
  store.logger.info(`✨`, type, key, `=`, cached);
1013
962
  covered.clear();
1014
963
  return cached;
@@ -1586,7 +1535,7 @@ const createWritableHeldSelector = (store, options, family) => {
1586
1535
  for (const [downstreamSelectorKey, { source }] of upstreamStates) if (source !== key) innerTarget.selectorGraph.delete(downstreamSelectorKey, key);
1587
1536
  innerTarget.selectorAtoms.delete(key);
1588
1537
  getFn(getterToolkit, constant);
1589
- cacheValue(innerTarget, key, constant, subject);
1538
+ writeToCache(innerTarget, mySelector, constant);
1590
1539
  store.logger.info(`✨`, type, key, `=`, constant);
1591
1540
  covered.clear();
1592
1541
  return constant;
@@ -1596,7 +1545,7 @@ const createWritableHeldSelector = (store, options, family) => {
1596
1545
  const oldValue = getSelf(options.get, innerTarget);
1597
1546
  const newValue = become(next)(oldValue);
1598
1547
  store.logger.info(`📝`, type, key, `set (`, oldValue, `->`, newValue, `)`);
1599
- cacheValue(innerTarget, key, newValue, subject);
1548
+ writeToCache(innerTarget, mySelector, newValue);
1600
1549
  markDone(innerTarget, key);
1601
1550
  if (isRootStore(innerTarget)) subject.next({
1602
1551
  newValue,
@@ -1642,7 +1591,7 @@ const createWritablePureSelector = (store, options, family) => {
1642
1591
  for (const [downstreamSelectorKey, { source }] of upstreamStates) if (source !== key) innerTarget.selectorGraph.delete(downstreamSelectorKey, key);
1643
1592
  innerTarget.selectorAtoms.delete(key);
1644
1593
  const value = getFn(getterToolkit);
1645
- const cached = cacheValue(innerTarget, key, value, subject);
1594
+ const cached = writeToCache(innerTarget, mySelector, value);
1646
1595
  store.logger.info(`✨`, type, key, `=`, cached);
1647
1596
  covered.clear();
1648
1597
  return value;
@@ -1652,7 +1601,7 @@ const createWritablePureSelector = (store, options, family) => {
1652
1601
  const oldValue = getSelf(options.get, innerTarget);
1653
1602
  const newValue = become(next)(oldValue);
1654
1603
  store.logger.info(`📝`, type, key, `set (`, oldValue, `->`, newValue, `)`);
1655
- cacheValue(innerTarget, options.key, newValue, subject);
1604
+ writeToCache(innerTarget, mySelector, newValue);
1656
1605
  markDone(innerTarget, options.key);
1657
1606
  if (isRootStore(innerTarget)) subject.next({
1658
1607
  newValue,
@@ -2159,6 +2108,21 @@ function getFromStore(store, ...params) {
2159
2108
  return readOrComputeValue(store, withdraw(store, token));
2160
2109
  }
2161
2110
 
2111
+ //#endregion
2112
+ //#region src/internal/subscribe/subscribe-to-root-atoms.ts
2113
+ const subscribeToRootDependency = (target, selector, atom) => {
2114
+ return atom.subject.subscribe(`${selector.type}:${selector.key}`, (atomChange) => {
2115
+ target.logger.info(`📢`, selector.type, selector.key, `root`, atom.key, `went`, atomChange.oldValue, `->`, atomChange.newValue);
2116
+ const oldValue = recallState(target, selector);
2117
+ const newValue = readOrComputeValue(target, selector);
2118
+ target.logger.info(`✨`, selector.type, selector.key, `went`, oldValue, `->`, newValue);
2119
+ selector.subject.next({
2120
+ newValue,
2121
+ oldValue
2122
+ });
2123
+ });
2124
+ };
2125
+
2162
2126
  //#endregion
2163
2127
  //#region src/internal/subscribe/subscribe-to-state.ts
2164
2128
  function subscribeToState(store, token, key, handleUpdate) {
@@ -2201,6 +2165,46 @@ function subscribeToState(store, token, key, handleUpdate) {
2201
2165
  return unsubscribe;
2202
2166
  }
2203
2167
 
2168
+ //#endregion
2169
+ //#region src/internal/store/withdraw.ts
2170
+ function withdraw(store, token) {
2171
+ let withdrawn;
2172
+ let target = store;
2173
+ while (target !== null) {
2174
+ switch (token.type) {
2175
+ case `atom`:
2176
+ case `mutable_atom`:
2177
+ withdrawn = target.atoms.get(token.key);
2178
+ break;
2179
+ case `writable_pure_selector`:
2180
+ case `writable_held_selector`:
2181
+ withdrawn = target.writableSelectors.get(token.key);
2182
+ break;
2183
+ case `readonly_pure_selector`:
2184
+ case `readonly_held_selector`:
2185
+ withdrawn = target.readonlySelectors.get(token.key);
2186
+ break;
2187
+ case `atom_family`:
2188
+ case `mutable_atom_family`:
2189
+ case `writable_pure_selector_family`:
2190
+ case `readonly_pure_selector_family`:
2191
+ case `writable_held_selector_family`:
2192
+ case `readonly_held_selector_family`:
2193
+ withdrawn = target.families.get(token.key);
2194
+ break;
2195
+ case `timeline`:
2196
+ withdrawn = target.timelines.get(token.key);
2197
+ break;
2198
+ case `transaction`:
2199
+ withdrawn = target.transactions.get(token.key);
2200
+ break;
2201
+ }
2202
+ if (withdrawn) return withdrawn;
2203
+ target = target.child;
2204
+ }
2205
+ throw new NotFoundError(token, store);
2206
+ }
2207
+
2204
2208
  //#endregion
2205
2209
  //#region src/internal/subscribe/subscribe-to-timeline.ts
2206
2210
  const subscribeToTimeline = (store, token, key, handleUpdate) => {
@@ -2225,6 +2229,21 @@ const subscribeToTransaction = (store, token, key, handleUpdate) => {
2225
2229
  };
2226
2230
  };
2227
2231
 
2232
+ //#endregion
2233
+ //#region src/internal/subscribe/subscribe-in-store.ts
2234
+ function subscribeInStore(store, token, handleUpdate, key = arbitrary()) {
2235
+ switch (token.type) {
2236
+ case `atom`:
2237
+ case `mutable_atom`:
2238
+ case `readonly_pure_selector`:
2239
+ case `readonly_held_selector`:
2240
+ case `writable_pure_selector`:
2241
+ case `writable_held_selector`: return subscribeToState(store, token, key, handleUpdate);
2242
+ case `transaction`: return subscribeToTransaction(store, token, key, handleUpdate);
2243
+ case `timeline`: return subscribeToTimeline(store, token, key, handleUpdate);
2244
+ }
2245
+ }
2246
+
2228
2247
  //#endregion
2229
2248
  //#region src/internal/mutable/tracker.ts
2230
2249
  /**
@@ -2233,30 +2252,33 @@ const subscribeToTransaction = (store, token, key, handleUpdate) => {
2233
2252
  * the tracker will update its own state to reflect the change.
2234
2253
  */
2235
2254
  var Tracker = class {
2236
- initializeState(mutableState, store) {
2237
- const latestUpdateStateKey = `*${mutableState.key}`;
2238
- store.atoms.delete(latestUpdateStateKey);
2239
- store.valueMap.delete(latestUpdateStateKey);
2255
+ initializeSignalAtom(mutableState, store) {
2256
+ const latestSignalStateKey = `*${mutableState.key}`;
2257
+ store.atoms.delete(latestSignalStateKey);
2258
+ store.valueMap.delete(latestSignalStateKey);
2240
2259
  const familyMetaData = mutableState.family ? {
2241
2260
  key: `*${mutableState.family.key}`,
2242
2261
  subKey: mutableState.family.subKey
2243
2262
  } : void 0;
2244
- const latestUpdateState = createRegularAtom(store, {
2245
- key: latestUpdateStateKey,
2263
+ const latestSignalState = createRegularAtom(store, {
2264
+ key: latestSignalStateKey,
2246
2265
  default: null
2247
- }, familyMetaData);
2248
- if (store.parent?.valueMap.has(latestUpdateStateKey)) {
2249
- const parentValue = store.parent.valueMap.get(latestUpdateStateKey);
2250
- store.valueMap.set(latestUpdateStateKey, parentValue);
2266
+ }, familyMetaData, [`tracker:signal`]);
2267
+ if (store.parent?.valueMap.has(latestSignalStateKey)) {
2268
+ const parentValue = store.parent.valueMap.get(latestSignalStateKey);
2269
+ store.valueMap.set(latestSignalStateKey, parentValue);
2251
2270
  }
2252
- return latestUpdateState;
2271
+ return latestSignalState;
2253
2272
  }
2254
2273
  unsubscribeFromInnerValue;
2255
2274
  unsubscribeFromState;
2256
- captureSignalsFromCore(mutableState, latestUpdateState, target) {
2257
- const subscriptionKey = `tracker:${target.config.name}:${isChildStore(target) ? target.transactionMeta.update.key : `main`}:${mutableState.key}`;
2275
+ captureSignalsFromCore(mutableState, latestSignalState, target) {
2276
+ const stateKey = mutableState.key;
2277
+ const storeName = target.config.name;
2278
+ const storeStatus = isChildStore(target) ? target.transactionMeta.update.key : `main`;
2279
+ const subscriptionKey = `tracker:${storeName}:${storeStatus}:${stateKey}`;
2258
2280
  const trackerCapturesOutboundSignal = (update) => {
2259
- setIntoStore(target, latestUpdateState, update);
2281
+ setIntoStore(target, latestSignalState, update);
2260
2282
  };
2261
2283
  const originalInnerValue = getFromStore(target, mutableState);
2262
2284
  this.unsubscribeFromInnerValue = originalInnerValue.subscribe(subscriptionKey, trackerCapturesOutboundSignal);
@@ -2267,10 +2289,10 @@ var Tracker = class {
2267
2289
  }
2268
2290
  }.bind(this));
2269
2291
  }
2270
- supplySignalsToCore(mutableState, latestUpdateState, target) {
2292
+ supplySignalsToCore(mutableState, latestSignalState, target) {
2271
2293
  const subscriptionKey = `tracker:${target.config.name}:${isChildStore(target) ? target.transactionMeta.update.key : `main`}:${mutableState.key}`;
2272
- subscribeToState(target, latestUpdateState, subscriptionKey, function trackerCapturesInboundSignal({ newValue, oldValue }) {
2273
- const timelineId = target.timelineTopics.getRelatedKey(latestUpdateState.key);
2294
+ subscribeToState(target, latestSignalState, subscriptionKey, function trackerCapturesInboundSignal({ newValue, oldValue }) {
2295
+ const timelineId = target.timelineTopics.getRelatedKey(latestSignalState.key);
2274
2296
  if (timelineId && target.timelines.get(timelineId)?.timeTraveling) {
2275
2297
  const unsubscribe = subscribeToTimeline(target, {
2276
2298
  key: timelineId,
@@ -2289,7 +2311,10 @@ var Tracker = class {
2289
2311
  const updateNumber = mutable.getUpdateNumber(newValue);
2290
2312
  const eventOffset = updateNumber - mutable.cacheUpdateNumber;
2291
2313
  if (newValue && eventOffset === 1) setIntoStore(target, mutableState, (transceiver) => (transceiver.do(newValue), transceiver));
2292
- else target.logger.info(`❌`, `mutable_atom`, mutableState.key, `could not be updated. Expected update number ${mutable.cacheUpdateNumber + 1}, but got ${updateNumber}`);
2314
+ else {
2315
+ const expected = mutable.cacheUpdateNumber + 1;
2316
+ target.logger.info(`❌`, `mutable_atom`, mutableState.key, `could not be updated. Expected update number`, expected, `but got`, updateNumber);
2317
+ }
2293
2318
  });
2294
2319
  }
2295
2320
  mutableAtomToken;
@@ -2297,7 +2322,7 @@ var Tracker = class {
2297
2322
  [Symbol.dispose];
2298
2323
  constructor(mutableAtomToken, store) {
2299
2324
  const target = newest(store);
2300
- const latestSignalToken = this.initializeState(mutableAtomToken, target);
2325
+ const latestSignalToken = this.initializeSignalAtom(mutableAtomToken, target);
2301
2326
  this.mutableAtomToken = mutableAtomToken;
2302
2327
  this.latestSignalToken = latestSignalToken;
2303
2328
  this.captureSignalsFromCore(mutableAtomToken, latestSignalToken, target);
@@ -2372,16 +2397,16 @@ function createMutableAtom(store, options, family) {
2372
2397
  //#region src/internal/mutable/tracker-family.ts
2373
2398
  var FamilyTracker = class {
2374
2399
  trackers = /* @__PURE__ */ new Map();
2375
- latestUpdateAtoms;
2400
+ latestSignalAtoms;
2376
2401
  mutableAtoms;
2377
2402
  constructor(mutableAtoms, store) {
2378
- const updateAtoms = createRegularAtomFamily(store, {
2403
+ const latestSignalAtoms = createRegularAtomFamily(store, {
2379
2404
  key: `*${mutableAtoms.key}`,
2380
2405
  default: null
2381
2406
  }, [`mutable`, `updates`]);
2382
- this.latestUpdateAtoms = withdraw(store, updateAtoms);
2407
+ this.latestSignalAtoms = withdraw(store, latestSignalAtoms);
2383
2408
  this.mutableAtoms = mutableAtoms;
2384
- this.mutableAtoms.subject.subscribe(`store=${store.config.name}::tracker-atom-family`, (event) => {
2409
+ const trackerFamilyWatchesForCreationAndDisposalEvents = (event) => {
2385
2410
  const { type, token } = event;
2386
2411
  if (token.family) {
2387
2412
  const key = parseJson(token.family.subKey);
@@ -2389,18 +2414,17 @@ var FamilyTracker = class {
2389
2414
  case `state_creation`:
2390
2415
  this.trackers.set(key, new Tracker(token, store));
2391
2416
  break;
2392
- case `state_disposal`:
2393
- {
2394
- const tracker = this.trackers.get(key);
2395
- if (tracker) {
2396
- tracker[Symbol.dispose]();
2397
- this.trackers.delete(key);
2398
- }
2417
+ case `state_disposal`: {
2418
+ const tracker = this.trackers.get(key);
2419
+ if (tracker) {
2420
+ tracker[Symbol.dispose]();
2421
+ this.trackers.delete(key);
2399
2422
  }
2400
- break;
2423
+ }
2401
2424
  }
2402
2425
  }
2403
- });
2426
+ };
2427
+ this.mutableAtoms.subject.subscribe(`store=${store.config.name}::tracker-atom-family`, trackerFamilyWatchesForCreationAndDisposalEvents);
2404
2428
  }
2405
2429
  };
2406
2430
 
@@ -2641,49 +2665,9 @@ const clearStore = (store) => {
2641
2665
  store.config = config;
2642
2666
  };
2643
2667
 
2644
- //#endregion
2645
- //#region src/internal/store/withdraw.ts
2646
- function withdraw(store, token) {
2647
- let withdrawn;
2648
- let target = store;
2649
- while (target !== null) {
2650
- switch (token.type) {
2651
- case `atom`:
2652
- case `mutable_atom`:
2653
- withdrawn = target.atoms.get(token.key);
2654
- break;
2655
- case `writable_pure_selector`:
2656
- case `writable_held_selector`:
2657
- withdrawn = target.writableSelectors.get(token.key);
2658
- break;
2659
- case `readonly_pure_selector`:
2660
- case `readonly_held_selector`:
2661
- withdrawn = target.readonlySelectors.get(token.key);
2662
- break;
2663
- case `atom_family`:
2664
- case `mutable_atom_family`:
2665
- case `writable_pure_selector_family`:
2666
- case `readonly_pure_selector_family`:
2667
- case `writable_held_selector_family`:
2668
- case `readonly_held_selector_family`:
2669
- withdrawn = target.families.get(token.key);
2670
- break;
2671
- case `timeline`:
2672
- withdrawn = target.timelines.get(token.key);
2673
- break;
2674
- case `transaction`:
2675
- withdrawn = target.transactions.get(token.key);
2676
- break;
2677
- }
2678
- if (withdrawn) return withdrawn;
2679
- target = target.child;
2680
- }
2681
- throw new NotFoundError(token, store);
2682
- }
2683
-
2684
2668
  //#endregion
2685
2669
  //#region src/internal/atom/create-regular-atom.ts
2686
- function createRegularAtom(store, options, family) {
2670
+ function createRegularAtom(store, options, family, internalRoles) {
2687
2671
  const type = `atom`;
2688
2672
  const { key } = options;
2689
2673
  store.logger.info(`🔨`, `atom`, key, `creating in store "${store.config.name}"`);
@@ -2704,6 +2688,7 @@ function createRegularAtom(store, options, family) {
2704
2688
  subject
2705
2689
  };
2706
2690
  if (family) newAtom.family = family;
2691
+ if (internalRoles) newAtom.internalRoles = internalRoles;
2707
2692
  target.atoms.set(key, newAtom);
2708
2693
  const token = deposit(newAtom);
2709
2694
  if (options.effects) {
@@ -2800,20 +2785,6 @@ function installIntoStore(tokens, target, source) {
2800
2785
  }
2801
2786
  }
2802
2787
 
2803
- //#endregion
2804
- //#region src/internal/join/create-join.ts
2805
- function createJoin(store, options, defaultContent) {
2806
- store.joins.set(options.key, new Join$1(options, defaultContent, store));
2807
- const token = {
2808
- key: options.key,
2809
- type: `join`,
2810
- a: options.between[0],
2811
- b: options.between[1],
2812
- cardinality: options.cardinality
2813
- };
2814
- return token;
2815
- }
2816
-
2817
2788
  //#endregion
2818
2789
  //#region src/internal/join/join-internal.ts
2819
2790
  var Join = class {
@@ -3117,6 +3088,20 @@ var Join = class {
3117
3088
  }
3118
3089
  };
3119
3090
 
3091
+ //#endregion
3092
+ //#region src/internal/join/create-join.ts
3093
+ function createJoin(store, options, defaultContent) {
3094
+ store.joins.set(options.key, new Join(options, defaultContent, store));
3095
+ const token = {
3096
+ key: options.key,
3097
+ type: `join`,
3098
+ a: options.between[0],
3099
+ b: options.between[1],
3100
+ cardinality: options.cardinality
3101
+ };
3102
+ return token;
3103
+ }
3104
+
3120
3105
  //#endregion
3121
3106
  //#region src/internal/join/get-join.ts
3122
3107
  function getJoin(token, store) {
@@ -3547,5 +3532,5 @@ const timeTravel = (store, action, token) => {
3547
3532
  };
3548
3533
 
3549
3534
  //#endregion
3550
- 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, createJoin, createMutableAtom, createMutableAtomFamily, createReadonlyHeldSelector, createReadonlyPureSelector, createReadonlyPureSelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, 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, subscribeToRootDependency, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceRootSelectorAtoms, updateSelectorAtoms, withdraw };
3535
+ export { CircularBuffer, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, Future, IMPLICIT, INTERNAL_ROLES, Join, Junction, LazyMap, NotFoundError, RESET_STATE, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, allocateIntoStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, capitalize, claimWithinStore, clearStore, closeOperation, counterfeit, createJoin, createMutableAtom, createMutableAtomFamily, createReadonlyHeldSelector, createReadonlyPureSelector, createReadonlyPureSelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneSelector, createTimeline, createTransaction, createWritableHeldSelector, createWritablePureSelector, createWritablePureSelectorFamily, deallocateFromStore, deposit, disposeAtom, disposeFromStore, disposeSelector, editRelationsInStore, evictCachedValue, evictDownstreamFromAtom, evictDownstreamFromSelector, findInStore, findRelationsInStore, fuseWithinStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getInternalRelationsFromStore, getJoin, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getTrace, getUpdateFamily, getUpdateToken, hasRole, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestMoleculeTransferEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, installIntoStore, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isReservedIntrospectionKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeRootMoleculeInStore, markDone, newest, openOperation, prettyPrintTokenType, readFromCache, readOrComputeValue, recallState, registerSelector, resetAtomOrSelector, resetInStore, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeInStore, subscribeToRootDependency, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceRootSelectorAtoms, updateSelectorAtoms, withdraw, writeToCache };
3551
3536
  //# sourceMappingURL=index.js.map