atom.io 0.33.2 → 0.33.4

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 (116) hide show
  1. package/dist/data/index.d.ts +3 -3
  2. package/dist/data/index.d.ts.map +1 -1
  3. package/dist/data/index.js.map +1 -1
  4. package/dist/eslint-plugin/index.d.ts.map +1 -1
  5. package/dist/internal/index.d.ts +118 -54
  6. package/dist/internal/index.d.ts.map +1 -1
  7. package/dist/internal/index.js +381 -128
  8. package/dist/internal/index.js.map +1 -1
  9. package/dist/introspection/index.d.ts +11 -10
  10. package/dist/introspection/index.d.ts.map +1 -1
  11. package/dist/introspection/index.js +4 -4
  12. package/dist/introspection/index.js.map +1 -1
  13. package/dist/json/index.d.ts +3 -3
  14. package/dist/json/index.d.ts.map +1 -1
  15. package/dist/json/index.js +2 -2
  16. package/dist/json/index.js.map +1 -1
  17. package/dist/main/index.d.ts +157 -36
  18. package/dist/main/index.d.ts.map +1 -1
  19. package/dist/main/index.js +15 -3
  20. package/dist/main/index.js.map +1 -1
  21. package/dist/react/index.d.ts.map +1 -1
  22. package/dist/{devtools-Jyn42mZm.css → react-devtools/index.css} +1 -1
  23. package/dist/react-devtools/index.css.map +1 -0
  24. package/dist/react-devtools/index.d.ts +0 -1
  25. package/dist/react-devtools/index.d.ts.map +1 -1
  26. package/dist/react-devtools/index.js +8 -3
  27. package/dist/react-devtools/index.js.map +1 -1
  28. package/dist/realtime/index.d.ts +3 -2
  29. package/dist/realtime/index.d.ts.map +1 -1
  30. package/dist/realtime/index.js.map +1 -1
  31. package/dist/realtime-client/index.d.ts +4 -1
  32. package/dist/realtime-client/index.d.ts.map +1 -1
  33. package/dist/realtime-client/index.js.map +1 -1
  34. package/dist/realtime-react/index.d.ts.map +1 -1
  35. package/dist/realtime-react/index.js.map +1 -1
  36. package/dist/realtime-server/index.d.ts +27 -2
  37. package/dist/realtime-server/index.d.ts.map +1 -1
  38. package/dist/realtime-server/index.js.map +1 -1
  39. package/dist/realtime-testing/index.d.ts.map +1 -1
  40. package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
  41. package/dist/web/index.d.ts.map +1 -1
  42. package/package.json +21 -21
  43. package/src/data/dict.ts +5 -5
  44. package/src/data/struct-family.ts +2 -2
  45. package/src/data/struct.ts +1 -1
  46. package/src/internal/atom/create-regular-atom.ts +14 -17
  47. package/src/internal/caching.ts +1 -1
  48. package/src/internal/families/create-readonly-held-selector-family.ts +81 -0
  49. package/src/internal/families/{create-readonly-selector-family.ts → create-readonly-pure-selector-family.ts} +26 -23
  50. package/src/internal/families/create-selector-family.ts +39 -16
  51. package/src/internal/families/create-writable-held-selector-family.ts +80 -0
  52. package/src/internal/families/{create-writable-selector-family.ts → create-writable-pure-selector-family.ts} +26 -23
  53. package/src/internal/families/dispose-from-store.ts +4 -2
  54. package/src/internal/families/find-in-store.ts +8 -8
  55. package/src/internal/families/get-family-of-token.ts +8 -8
  56. package/src/internal/families/index.ts +3 -3
  57. package/src/internal/families/init-family-member.ts +12 -10
  58. package/src/internal/families/seek-in-store.ts +13 -11
  59. package/src/internal/get-state/get-from-store.ts +5 -2
  60. package/src/internal/get-state/read-or-compute-value.ts +4 -2
  61. package/src/internal/index.ts +97 -20
  62. package/src/internal/join/join-internal.ts +18 -18
  63. package/src/internal/keys.ts +1 -1
  64. package/src/internal/mutable/create-mutable-atom.ts +17 -15
  65. package/src/internal/mutable/get-json-family.ts +4 -4
  66. package/src/internal/mutable/get-json-token.ts +7 -7
  67. package/src/internal/selector/create-readonly-held-selector.ts +50 -0
  68. package/src/internal/selector/create-readonly-pure-selector.ts +51 -0
  69. package/src/internal/selector/create-standalone-selector.ts +48 -15
  70. package/src/internal/selector/create-writable-held-selector.ts +68 -0
  71. package/src/internal/selector/{create-writable-selector.ts → create-writable-pure-selector.ts} +18 -25
  72. package/src/internal/selector/dispose-selector.ts +37 -7
  73. package/src/internal/selector/get-selector-dependency-keys.ts +1 -1
  74. package/src/internal/selector/index.ts +4 -2
  75. package/src/internal/selector/register-selector.ts +17 -5
  76. package/src/internal/selector/trace-selector-atoms.ts +5 -5
  77. package/src/internal/selector/update-selector-atoms.ts +16 -10
  78. package/src/internal/set-state/emit-update.ts +4 -2
  79. package/src/internal/set-state/set-atom-or-selector.ts +2 -1
  80. package/src/internal/store/counterfeit.ts +13 -11
  81. package/src/internal/store/deposit.ts +18 -14
  82. package/src/internal/store/store.ts +9 -14
  83. package/src/internal/store/withdraw.ts +83 -7
  84. package/src/internal/subscribe/subscribe-in-store.ts +4 -2
  85. package/src/internal/subscribe/subscribe-to-state.ts +2 -1
  86. package/src/internal/timeline/create-timeline.ts +4 -2
  87. package/src/internal/transaction/build-transaction.ts +1 -1
  88. package/src/introspection/attach-atom-index.ts +2 -2
  89. package/src/introspection/attach-introspection-states.ts +9 -9
  90. package/src/introspection/attach-selector-index.ts +3 -3
  91. package/src/introspection/attach-timeline-family.ts +2 -2
  92. package/src/introspection/attach-timeline-index.ts +2 -2
  93. package/src/introspection/attach-transaction-index.ts +2 -2
  94. package/src/introspection/attach-transaction-logs.ts +2 -2
  95. package/src/introspection/attach-type-selectors.ts +5 -5
  96. package/src/introspection/auditor.ts +3 -3
  97. package/src/json/select-json-family.ts +5 -5
  98. package/src/json/select-json.ts +1 -1
  99. package/src/main/find-state.ts +8 -8
  100. package/src/main/index.ts +51 -6
  101. package/src/main/join.ts +13 -13
  102. package/src/main/logger.ts +32 -15
  103. package/src/main/selector.ts +164 -30
  104. package/src/main/transaction.ts +3 -3
  105. package/src/main/validators.ts +16 -12
  106. package/src/react-devtools/StateEditor.tsx +14 -4
  107. package/src/react-devtools/StateIndex.tsx +6 -4
  108. package/src/react-devtools/TimelineIndex.tsx +2 -2
  109. package/src/react-devtools/TransactionIndex.tsx +2 -2
  110. package/src/realtime/shared-room-store.ts +3 -3
  111. package/src/realtime-client/realtime-client-stores/client-main-store.ts +1 -1
  112. package/src/realtime-react/use-pull-selector-family-member.ts +1 -0
  113. package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +2 -2
  114. package/dist/devtools-CAg2k57t.js +0 -0
  115. package/dist/devtools-Jyn42mZm.css.map +0 -1
  116. package/src/internal/selector/create-readonly-selector.ts +0 -55
@@ -102,10 +102,12 @@ var CircularBuffer = class CircularBuffer {
102
102
  //#region src/internal/store/counterfeit.ts
103
103
  const FAMILY_MEMBER_TOKEN_TYPES = {
104
104
  atom_family: `atom`,
105
+ molecule_family: `molecule`,
105
106
  mutable_atom_family: `mutable_atom`,
106
- selector_family: `selector`,
107
- readonly_selector_family: `readonly_selector`,
108
- molecule_family: `molecule`
107
+ readonly_held_selector_family: `readonly_held_selector`,
108
+ readonly_pure_selector_family: `readonly_pure_selector`,
109
+ writable_held_selector_family: `writable_held_selector`,
110
+ writable_pure_selector_family: `writable_pure_selector`
109
111
  };
110
112
  function counterfeit(token, key) {
111
113
  const subKey = stringifyJson(key);
@@ -492,8 +494,10 @@ const readOrComputeValue = (target, state) => {
492
494
  return readCachedValue(state, target);
493
495
  }
494
496
  switch (state.type) {
495
- case `selector`:
496
- case `readonly_selector`:
497
+ case `readonly_held_selector`:
498
+ case `readonly_pure_selector`:
499
+ case `writable_held_selector`:
500
+ case `writable_pure_selector`:
497
501
  target.logger.info(`🧮`, state.type, state.key, `computing value`);
498
502
  return state.get();
499
503
  case `atom`:
@@ -553,8 +557,10 @@ const emitUpdate = (store, state, update) => {
553
557
  store.logger.info(`📢`, state.type, state.key, `is now (`, update.newValue, `) subscribers:`, state.subject.subscribers);
554
558
  break;
555
559
  case `atom`:
556
- case `selector`:
557
- case `readonly_selector`: store.logger.info(`📢`, state.type, state.key, `went (`, update.oldValue, `->`, update.newValue, `) subscribers:`, state.subject.subscribers);
560
+ case `writable_pure_selector`:
561
+ case `readonly_pure_selector`:
562
+ case `writable_held_selector`:
563
+ case `readonly_held_selector`: store.logger.info(`📢`, state.type, state.key, `went (`, update.oldValue, `->`, update.newValue, `) subscribers:`, state.subject.subscribers);
558
564
  }
559
565
  state.subject.next(update);
560
566
  };
@@ -632,7 +638,8 @@ const setAtomOrSelector = (store, state, value) => {
632
638
  case `mutable_atom`:
633
639
  setAtom(store, state, value);
634
640
  break;
635
- case `selector`:
641
+ case `writable_pure_selector`:
642
+ case `writable_held_selector`:
636
643
  state.set(value);
637
644
  break;
638
645
  }
@@ -690,62 +697,63 @@ function createAtomFamily(store, options) {
690
697
  //#endregion
691
698
  //#region src/internal/keys.ts
692
699
  const isAtomKey = (store, key) => newest(store).atoms.has(key);
693
- const isSelectorKey = (store, key) => newest(store).selectors.has(key);
700
+ const isSelectorKey = (store, key) => newest(store).writableSelectors.has(key);
694
701
  const isReadonlySelectorKey = (store, key) => newest(store).readonlySelectors.has(key);
695
702
  const isStateKey = (store, key) => isAtomKey(store, key) || isSelectorKey(store, key) || isReadonlySelectorKey(store, key);
696
703
 
697
704
  //#endregion
698
705
  //#region src/internal/selector/get-selector-dependency-keys.ts
699
- const getSelectorDependencyKeys = (key, store) => {
706
+ const getSelectorDependencyKeys = (store, key) => {
700
707
  const sources = newest(store).selectorGraph.getRelationEntries({ downstreamSelectorKey: key }).filter(([_, { source }]) => source !== key).map(([_, { source }]) => source).filter((source) => isStateKey(store, source));
701
708
  return sources;
702
709
  };
703
710
 
704
711
  //#endregion
705
712
  //#region src/internal/selector/trace-selector-atoms.ts
706
- const traceSelectorAtoms = (directDependencyKey, covered, store) => {
713
+ const traceSelectorAtoms = (store, directDependencyKey, covered) => {
707
714
  const rootKeys = [];
708
- const indirectDependencyKeys = getSelectorDependencyKeys(directDependencyKey, store);
715
+ const indirectDependencyKeys = getSelectorDependencyKeys(store, directDependencyKey);
709
716
  while (indirectDependencyKeys.length > 0) {
710
717
  const indirectDependencyKey = indirectDependencyKeys.shift();
711
718
  if (covered.has(indirectDependencyKey)) continue;
712
719
  covered.add(indirectDependencyKey);
713
- if (!isAtomKey(store, indirectDependencyKey)) indirectDependencyKeys.push(...getSelectorDependencyKeys(indirectDependencyKey, store));
720
+ if (!isAtomKey(store, indirectDependencyKey)) indirectDependencyKeys.push(...getSelectorDependencyKeys(store, indirectDependencyKey));
714
721
  else if (!rootKeys.includes(indirectDependencyKey)) rootKeys.push(indirectDependencyKey);
715
722
  }
716
723
  return rootKeys;
717
724
  };
718
725
  const traceAllSelectorAtoms = (selector, store) => {
719
726
  const selectorKey = selector.key;
720
- const directDependencyKeys = getSelectorDependencyKeys(selectorKey, store);
727
+ const directDependencyKeys = getSelectorDependencyKeys(store, selectorKey);
721
728
  const covered = new Set();
722
- return directDependencyKeys.flatMap((depKey) => isAtomKey(store, depKey) ? depKey : traceSelectorAtoms(depKey, covered, store));
729
+ return directDependencyKeys.flatMap((depKey) => isAtomKey(store, depKey) ? depKey : traceSelectorAtoms(store, depKey, covered));
723
730
  };
724
731
 
725
732
  //#endregion
726
733
  //#region src/internal/selector/update-selector-atoms.ts
727
- const updateSelectorAtoms = (selectorKey, dependency, covered, store) => {
734
+ const updateSelectorAtoms = (store, selectorType, selectorKey, dependency, covered) => {
728
735
  const target = newest(store);
729
- if (dependency.type === `atom` || dependency.type === `mutable_atom`) {
736
+ const { type: dependencyType, key: dependencyKey } = dependency;
737
+ if (dependencyType === `atom` || dependencyType === `mutable_atom`) {
730
738
  target.selectorAtoms.set({
731
739
  selectorKey,
732
- atomKey: dependency.key
740
+ atomKey: dependencyKey
733
741
  });
734
- store.logger.info(`🔍`, `selector`, selectorKey, `discovers root atom "${dependency.key}"`);
742
+ store.logger.info(`🔍`, selectorType, selectorKey, `discovers root atom "${dependencyKey}"`);
735
743
  } else {
736
- const rootKeys = traceSelectorAtoms(dependency.key, covered, store);
737
- store.logger.info(`🔍`, `selector`, selectorKey, `discovers root atoms: [ ${rootKeys.map((key) => `"${key}"`).join(`, `)} ]`);
744
+ const rootKeys = traceSelectorAtoms(store, dependencyKey, covered);
745
+ store.logger.info(`🔍`, selectorType, selectorKey, `discovers root atoms: [ ${rootKeys.map((key) => `"${key}"`).join(`, `)} ]`);
738
746
  for (const atomKey of rootKeys) target.selectorAtoms = target.selectorAtoms.set({
739
747
  selectorKey,
740
748
  atomKey
741
749
  });
742
750
  }
743
- covered.add(dependency.key);
751
+ covered.add(dependencyKey);
744
752
  };
745
753
 
746
754
  //#endregion
747
755
  //#region src/internal/selector/register-selector.ts
748
- const registerSelector = (selectorKey, covered, store) => ({
756
+ const registerSelector = (store, selectorType, selectorKey, covered) => ({
749
757
  get: (...params) => {
750
758
  const target = newest(store);
751
759
  let dependency;
@@ -755,12 +763,13 @@ const registerSelector = (selectorKey, covered, store) => ({
755
763
  } else [dependency] = params;
756
764
  const dependencyState = withdraw(store, dependency);
757
765
  const dependencyValue = readOrComputeValue(store, dependencyState);
758
- store.logger.info(`🔌`, `selector`, selectorKey, `registers dependency ( "${dependency.key}" =`, dependencyValue, `)`);
766
+ const dependencyKey = dependency.key;
767
+ store.logger.info(`🔌`, selectorType, selectorKey, `registers dependency ( "${dependencyKey}" =`, dependencyValue, `)`);
759
768
  target.selectorGraph.set({
760
- upstreamSelectorKey: dependency.key,
769
+ upstreamSelectorKey: dependencyKey,
761
770
  downstreamSelectorKey: selectorKey
762
771
  }, { source: dependency.key });
763
- updateSelectorAtoms(selectorKey, dependency, covered, store);
772
+ updateSelectorAtoms(store, selectorType, selectorKey, dependency, covered);
764
773
  return dependencyValue;
765
774
  },
766
775
  set: (...params) => {
@@ -784,48 +793,143 @@ const registerSelector = (selectorKey, covered, store) => ({
784
793
  });
785
794
 
786
795
  //#endregion
787
- //#region src/internal/selector/create-readonly-selector.ts
788
- const createReadonlySelector = (store, options, family) => {
796
+ //#region src/internal/selector/create-readonly-held-selector.ts
797
+ const createReadonlyHeldSelector = (store, options, family) => {
789
798
  const target = newest(store);
790
799
  const subject = new Subject();
791
800
  const covered = new Set();
792
- const { get, find, json } = registerSelector(options.key, covered, target);
801
+ const { key, const: constant } = options;
802
+ const type = `readonly_held_selector`;
803
+ const { get, find, json } = registerSelector(target, type, key, covered);
804
+ const getSelf = () => {
805
+ options.get({
806
+ get,
807
+ find,
808
+ json
809
+ }, constant);
810
+ cacheValue(newest(store), key, constant, subject);
811
+ covered.clear();
812
+ return constant;
813
+ };
814
+ const readonlySelector = {
815
+ ...options,
816
+ type,
817
+ subject,
818
+ install: (s) => createReadonlyHeldSelector(s, options, family),
819
+ get: getSelf,
820
+ ...family && { family }
821
+ };
822
+ target.readonlySelectors.set(key, readonlySelector);
823
+ store.logger.info(`✨`, type, key, `=`, constant);
824
+ const token = {
825
+ key,
826
+ type
827
+ };
828
+ if (family) token.family = family;
829
+ return token;
830
+ };
831
+
832
+ //#endregion
833
+ //#region src/internal/selector/create-readonly-pure-selector.ts
834
+ const createReadonlyPureSelector = (store, options, family) => {
835
+ const target = newest(store);
836
+ const subject = new Subject();
837
+ const covered = new Set();
838
+ const key = options.key;
839
+ const type = `readonly_pure_selector`;
840
+ const { get, find, json } = registerSelector(target, type, key, covered);
793
841
  const getSelf = () => {
794
842
  const value = options.get({
795
843
  get,
796
844
  find,
797
845
  json
798
846
  });
799
- cacheValue(newest(store), options.key, value, subject);
847
+ cacheValue(newest(store), key, value, subject);
800
848
  covered.clear();
801
849
  return value;
802
850
  };
803
851
  const readonlySelector = {
804
852
  ...options,
853
+ type,
805
854
  subject,
806
- install: (s) => createReadonlySelector(s, options, family),
855
+ install: (s) => createReadonlyPureSelector(s, options, family),
807
856
  get: getSelf,
808
- type: `readonly_selector`,
809
857
  ...family && { family }
810
858
  };
811
- target.readonlySelectors.set(options.key, readonlySelector);
859
+ target.readonlySelectors.set(key, readonlySelector);
812
860
  const initialValue = getSelf();
813
- store.logger.info(`✨`, readonlySelector.type, readonlySelector.key, `=`, initialValue);
861
+ store.logger.info(`✨`, type, key, `=`, initialValue);
814
862
  const token = {
815
- key: options.key,
816
- type: `readonly_selector`
863
+ key,
864
+ type
865
+ };
866
+ if (family) token.family = family;
867
+ return token;
868
+ };
869
+
870
+ //#endregion
871
+ //#region src/internal/selector/create-writable-held-selector.ts
872
+ const createWritableHeldSelector = (store, options, family) => {
873
+ const target = newest(store);
874
+ const subject = new Subject();
875
+ const covered = new Set();
876
+ const { key, const: constant } = options;
877
+ const type = `writable_held_selector`;
878
+ const setterToolkit = registerSelector(target, type, key, covered);
879
+ const { find, get, json } = setterToolkit;
880
+ const getterToolkit = {
881
+ find,
882
+ get,
883
+ json
884
+ };
885
+ const getSelf = (getFn = options.get, innerTarget = newest(store)) => {
886
+ getFn(getterToolkit, constant);
887
+ cacheValue(innerTarget, key, constant, subject);
888
+ covered.clear();
889
+ return constant;
890
+ };
891
+ const setSelf = (next) => {
892
+ const innerTarget = newest(store);
893
+ const oldValue = getSelf(options.get, innerTarget);
894
+ const newValue = become(next)(oldValue);
895
+ store.logger.info(`📝`, type, key, `set (`, oldValue, `->`, newValue, `)`);
896
+ cacheValue(innerTarget, key, newValue, subject);
897
+ markDone(innerTarget, key);
898
+ if (isRootStore(innerTarget)) subject.next({
899
+ newValue,
900
+ oldValue
901
+ });
902
+ options.set(setterToolkit, newValue);
903
+ };
904
+ const mySelector = {
905
+ ...options,
906
+ type,
907
+ subject,
908
+ install: (s) => createWritableHeldSelector(s, options, family),
909
+ get: getSelf,
910
+ set: setSelf,
911
+ ...family && { family }
912
+ };
913
+ target.writableSelectors.set(key, mySelector);
914
+ const initialValue = getSelf();
915
+ store.logger.info(`✨`, type, key, `=`, initialValue);
916
+ const token = {
917
+ key,
918
+ type
817
919
  };
818
920
  if (family) token.family = family;
819
921
  return token;
820
922
  };
821
923
 
822
924
  //#endregion
823
- //#region src/internal/selector/create-writable-selector.ts
824
- const createWritableSelector = (store, options, family) => {
925
+ //#region src/internal/selector/create-writable-pure-selector.ts
926
+ const createWritablePureSelector = (store, options, family) => {
825
927
  const target = newest(store);
826
928
  const subject = new Subject();
827
929
  const covered = new Set();
828
- const setterToolkit = registerSelector(options.key, covered, target);
930
+ const key = options.key;
931
+ const type = `writable_pure_selector`;
932
+ const setterToolkit = registerSelector(target, type, key, covered);
829
933
  const { find, get, json } = setterToolkit;
830
934
  const getterToolkit = {
831
935
  find,
@@ -834,7 +938,7 @@ const createWritableSelector = (store, options, family) => {
834
938
  };
835
939
  const getSelf = (getFn = options.get, innerTarget = newest(store)) => {
836
940
  const value = getFn(getterToolkit);
837
- cacheValue(innerTarget, options.key, value, subject);
941
+ cacheValue(innerTarget, key, value, subject);
838
942
  covered.clear();
839
943
  return value;
840
944
  };
@@ -842,7 +946,7 @@ const createWritableSelector = (store, options, family) => {
842
946
  const innerTarget = newest(store);
843
947
  const oldValue = getSelf(options.get, innerTarget);
844
948
  const newValue = become(next)(oldValue);
845
- store.logger.info(`📝`, `selector`, options.key, `set (`, oldValue, `->`, newValue, `)`);
949
+ store.logger.info(`📝`, type, key, `set (`, oldValue, `->`, newValue, `)`);
846
950
  cacheValue(innerTarget, options.key, newValue, subject);
847
951
  markDone(innerTarget, options.key);
848
952
  if (isRootStore(innerTarget)) subject.next({
@@ -853,19 +957,19 @@ const createWritableSelector = (store, options, family) => {
853
957
  };
854
958
  const mySelector = {
855
959
  ...options,
960
+ type,
856
961
  subject,
857
- install: (s) => createWritableSelector(s, options, family),
962
+ install: (s) => createWritablePureSelector(s, options, family),
858
963
  get: getSelf,
859
964
  set: setSelf,
860
- type: `selector`,
861
965
  ...family && { family }
862
966
  };
863
- target.selectors.set(options.key, mySelector);
967
+ target.writableSelectors.set(key, mySelector);
864
968
  const initialValue = getSelf();
865
969
  store.logger.info(`✨`, mySelector.type, mySelector.key, `=`, initialValue);
866
970
  const token = {
867
- key: options.key,
868
- type: `selector`
971
+ key,
972
+ type
869
973
  };
870
974
  if (family) token.family = family;
871
975
  return token;
@@ -875,12 +979,23 @@ const createWritableSelector = (store, options, family) => {
875
979
  //#region src/internal/selector/create-standalone-selector.ts
876
980
  function createStandaloneSelector(store, options) {
877
981
  const isWritable = `set` in options;
982
+ const isHeld = `const` in options;
983
+ if (isHeld && isWritable) {
984
+ const state$1 = createWritableHeldSelector(store, options, void 0);
985
+ store.on.selectorCreation.next(state$1);
986
+ return state$1;
987
+ }
988
+ if (isHeld) {
989
+ const state$1 = createReadonlyHeldSelector(store, options, void 0);
990
+ store.on.selectorCreation.next(state$1);
991
+ return state$1;
992
+ }
878
993
  if (isWritable) {
879
- const state$1 = createWritableSelector(store, options, void 0);
994
+ const state$1 = createWritablePureSelector(store, options, void 0);
880
995
  store.on.selectorCreation.next(state$1);
881
996
  return state$1;
882
997
  }
883
- const state = createReadonlySelector(store, options, void 0);
998
+ const state = createReadonlyPureSelector(store, options, void 0);
884
999
  store.on.selectorCreation.next(state);
885
1000
  return state;
886
1001
  }
@@ -889,20 +1004,35 @@ function createStandaloneSelector(store, options) {
889
1004
  //#region src/internal/selector/dispose-selector.ts
890
1005
  function disposeSelector(store, selectorToken) {
891
1006
  const target = newest(store);
892
- const { key } = selectorToken;
1007
+ const { key, type } = selectorToken;
893
1008
  const selector = withdraw(target, selectorToken);
894
- if (!selector.family) store.logger.error(`❌`, `selector`, key, `Standalone selectors cannot be disposed.`);
1009
+ if (!selector.family) store.logger.error(`❌`, type, key, `Standalone selectors cannot be disposed.`);
895
1010
  else {
896
1011
  const molecule = target.molecules.get(selector.family.subKey);
897
1012
  if (molecule) target.moleculeData.delete(selector.family.subKey, selector.family.key);
898
1013
  let familyToken;
899
1014
  switch (selectorToken.type) {
900
- case `selector`:
1015
+ case `writable_held_selector`:
1016
+ {
1017
+ target.writableSelectors.delete(key);
1018
+ familyToken = {
1019
+ key: selector.family.key,
1020
+ type: `writable_held_selector_family`
1021
+ };
1022
+ const family = withdraw(store, familyToken);
1023
+ family.subject.next({
1024
+ type: `state_disposal`,
1025
+ subType: `selector`,
1026
+ token: selectorToken
1027
+ });
1028
+ }
1029
+ break;
1030
+ case `writable_pure_selector`:
901
1031
  {
902
- target.selectors.delete(key);
1032
+ target.writableSelectors.delete(key);
903
1033
  familyToken = {
904
1034
  key: selector.family.key,
905
- type: `selector_family`
1035
+ type: `writable_pure_selector_family`
906
1036
  };
907
1037
  const family = withdraw(store, familyToken);
908
1038
  family.subject.next({
@@ -912,12 +1042,27 @@ function disposeSelector(store, selectorToken) {
912
1042
  });
913
1043
  }
914
1044
  break;
915
- case `readonly_selector`:
1045
+ case `readonly_held_selector`:
916
1046
  {
917
1047
  target.readonlySelectors.delete(key);
918
1048
  familyToken = {
919
1049
  key: selector.family.key,
920
- type: `readonly_selector_family`
1050
+ type: `readonly_held_selector_family`
1051
+ };
1052
+ const family = withdraw(store, familyToken);
1053
+ family.subject.next({
1054
+ type: `state_disposal`,
1055
+ subType: `selector`,
1056
+ token: selectorToken
1057
+ });
1058
+ }
1059
+ break;
1060
+ case `readonly_pure_selector`:
1061
+ {
1062
+ target.readonlySelectors.delete(key);
1063
+ familyToken = {
1064
+ key: selector.family.key,
1065
+ type: `readonly_pure_selector_family`
921
1066
  };
922
1067
  const family = withdraw(store, familyToken);
923
1068
  family.subject.next({
@@ -942,24 +1087,26 @@ function disposeSelector(store, selectorToken) {
942
1087
  }
943
1088
 
944
1089
  //#endregion
945
- //#region src/internal/families/create-readonly-selector-family.ts
946
- function createReadonlySelectorFamily(store, options, internalRoles) {
1090
+ //#region src/internal/families/create-readonly-pure-selector-family.ts
1091
+ function createReadonlyPureSelectorFamily(store, options, internalRoles) {
1092
+ const familyKey = options.key;
1093
+ const type = `readonly_pure_selector_family`;
947
1094
  const familyToken = {
948
- key: options.key,
949
- type: `readonly_selector_family`
1095
+ key: familyKey,
1096
+ type
950
1097
  };
951
- const existing = store.families.get(options.key);
952
- if (existing) store.logger.error(`❗`, `readonly_selector_family`, options.key, `Overwriting an existing ${prettyPrintTokenType(existing)} "${existing.key}" in store "${store.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);
1098
+ const existing = store.families.get(familyKey);
1099
+ if (existing) store.logger.error(`❗`, type, familyKey, `Overwriting an existing ${prettyPrintTokenType(existing)} "${existing.key}" in store "${store.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);
953
1100
  const subject = new Subject();
954
1101
  const familyFunction = (key) => {
955
1102
  const subKey = stringifyJson(key);
956
1103
  const family = {
957
- key: options.key,
1104
+ key: familyKey,
958
1105
  subKey
959
1106
  };
960
- const fullKey = `${options.key}(${subKey})`;
1107
+ const fullKey = `${familyKey}(${subKey})`;
961
1108
  const target = newest(store);
962
- const token = createReadonlySelector(target, {
1109
+ const token = createReadonlyPureSelector(target, {
963
1110
  key: fullKey,
964
1111
  get: options.get(key)
965
1112
  }, family);
@@ -972,7 +1119,7 @@ function createReadonlySelectorFamily(store, options, internalRoles) {
972
1119
  const readonlySelectorFamily = Object.assign(familyFunction, familyToken, {
973
1120
  internalRoles,
974
1121
  subject,
975
- install: (s) => createReadonlySelectorFamily(s, options),
1122
+ install: (s) => createReadonlyPureSelectorFamily(s, options),
976
1123
  default: (key) => {
977
1124
  const getFn = options.get(key);
978
1125
  return getFn({
@@ -982,29 +1129,114 @@ function createReadonlySelectorFamily(store, options, internalRoles) {
982
1129
  });
983
1130
  }
984
1131
  });
985
- store.families.set(options.key, readonlySelectorFamily);
1132
+ store.families.set(familyKey, readonlySelectorFamily);
986
1133
  return familyToken;
987
1134
  }
988
1135
 
989
1136
  //#endregion
990
- //#region src/internal/families/create-writable-selector-family.ts
991
- function createWritableSelectorFamily(store, options, internalRoles) {
1137
+ //#region src/internal/families/create-readonly-held-selector-family.ts
1138
+ function createReadonlyHeldSelectorFamily(store, options, internalRoles) {
1139
+ const familyKey = options.key;
1140
+ const type = `readonly_held_selector_family`;
992
1141
  const familyToken = {
993
- key: options.key,
994
- type: `selector_family`
1142
+ key: familyKey,
1143
+ type
995
1144
  };
996
- const existing = store.families.get(options.key);
997
- if (existing) store.logger.error(`❗`, `selector_family`, options.key, `Overwriting an existing ${prettyPrintTokenType(existing)} "${existing.key}" in store "${store.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);
1145
+ const existing = store.families.get(familyKey);
1146
+ if (existing) store.logger.error(`❗`, type, familyKey, `Overwriting an existing ${prettyPrintTokenType(existing)} "${existing.key}" in store "${store.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);
998
1147
  const subject = new Subject();
999
1148
  const familyFunction = (key) => {
1000
1149
  const subKey = stringifyJson(key);
1001
1150
  const family = {
1002
- key: options.key,
1151
+ key: familyKey,
1003
1152
  subKey
1004
1153
  };
1005
- const fullKey = `${options.key}(${subKey})`;
1154
+ const fullKey = `${familyKey}(${subKey})`;
1155
+ const target = newest(store);
1156
+ const token = createReadonlyHeldSelector(target, {
1157
+ key: fullKey,
1158
+ const: options.const(key),
1159
+ get: options.get(key)
1160
+ }, family);
1161
+ subject.next({
1162
+ type: `state_creation`,
1163
+ token
1164
+ });
1165
+ return token;
1166
+ };
1167
+ const readonlySelectorFamily = Object.assign(familyFunction, familyToken, {
1168
+ internalRoles,
1169
+ subject,
1170
+ install: (s) => createReadonlyHeldSelectorFamily(s, options),
1171
+ default: options.const
1172
+ });
1173
+ store.families.set(familyKey, readonlySelectorFamily);
1174
+ return familyToken;
1175
+ }
1176
+
1177
+ //#endregion
1178
+ //#region src/internal/families/create-writable-held-selector-family.ts
1179
+ function createWritableHeldSelectorFamily(store, options, internalRoles) {
1180
+ const familyKey = options.key;
1181
+ const type = `writable_held_selector_family`;
1182
+ const familyToken = {
1183
+ key: familyKey,
1184
+ type
1185
+ };
1186
+ const existing = store.families.get(familyKey);
1187
+ if (existing) store.logger.error(`❗`, type, familyKey, `Overwriting an existing ${prettyPrintTokenType(existing)} "${existing.key}" in store "${store.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);
1188
+ const subject = new Subject();
1189
+ const familyFunction = (key) => {
1190
+ const subKey = stringifyJson(key);
1191
+ const family = {
1192
+ key: familyKey,
1193
+ subKey
1194
+ };
1195
+ const fullKey = `${familyKey}(${subKey})`;
1196
+ const target = newest(store);
1197
+ const token = createWritableHeldSelector(target, {
1198
+ key: fullKey,
1199
+ const: options.const(key),
1200
+ get: options.get(key),
1201
+ set: options.set(key)
1202
+ }, family);
1203
+ subject.next({
1204
+ type: `state_creation`,
1205
+ token
1206
+ });
1207
+ return token;
1208
+ };
1209
+ const selectorFamily$1 = Object.assign(familyFunction, familyToken, {
1210
+ internalRoles,
1211
+ subject,
1212
+ install: (s) => createWritableHeldSelectorFamily(s, options),
1213
+ default: options.const
1214
+ });
1215
+ store.families.set(familyKey, selectorFamily$1);
1216
+ return familyToken;
1217
+ }
1218
+
1219
+ //#endregion
1220
+ //#region src/internal/families/create-writable-pure-selector-family.ts
1221
+ function createWritablePureSelectorFamily(store, options, internalRoles) {
1222
+ const familyKey = options.key;
1223
+ const type = `writable_pure_selector_family`;
1224
+ const familyToken = {
1225
+ key: familyKey,
1226
+ type
1227
+ };
1228
+ const existing = store.families.get(familyKey);
1229
+ if (existing) store.logger.error(`❗`, type, familyKey, `Overwriting an existing ${prettyPrintTokenType(existing)} "${existing.key}" in store "${store.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);
1230
+ const subject = new Subject();
1231
+ const familyFunction = (key) => {
1232
+ const subKey = stringifyJson(key);
1233
+ const family = {
1234
+ key: familyKey,
1235
+ subKey
1236
+ };
1237
+ const fullKey = `${familyKey}(${subKey})`;
1006
1238
  const target = newest(store);
1007
- const token = createWritableSelector(target, {
1239
+ const token = createWritablePureSelector(target, {
1008
1240
  key: fullKey,
1009
1241
  get: options.get(key),
1010
1242
  set: options.set(key)
@@ -1018,7 +1250,7 @@ function createWritableSelectorFamily(store, options, internalRoles) {
1018
1250
  const selectorFamily$1 = Object.assign(familyFunction, familyToken, {
1019
1251
  internalRoles,
1020
1252
  subject,
1021
- install: (s) => createWritableSelectorFamily(s, options),
1253
+ install: (s) => createWritablePureSelectorFamily(s, options),
1022
1254
  default: (key) => {
1023
1255
  const getFn = options.get(key);
1024
1256
  return getFn({
@@ -1028,7 +1260,7 @@ function createWritableSelectorFamily(store, options, internalRoles) {
1028
1260
  });
1029
1261
  }
1030
1262
  });
1031
- store.families.set(options.key, selectorFamily$1);
1263
+ store.families.set(familyKey, selectorFamily$1);
1032
1264
  return familyToken;
1033
1265
  }
1034
1266
 
@@ -1036,8 +1268,11 @@ function createWritableSelectorFamily(store, options, internalRoles) {
1036
1268
  //#region src/internal/families/create-selector-family.ts
1037
1269
  function createSelectorFamily(store, options) {
1038
1270
  const isWritable = `set` in options;
1039
- if (isWritable) return createWritableSelectorFamily(store, options);
1040
- return createReadonlySelectorFamily(store, options);
1271
+ const isHeld = `const` in options;
1272
+ if (isHeld && isWritable) return createWritableHeldSelectorFamily(store, options, void 0);
1273
+ if (isHeld) return createReadonlyHeldSelectorFamily(store, options, void 0);
1274
+ if (isWritable) return createWritablePureSelectorFamily(store, options);
1275
+ return createReadonlyPureSelectorFamily(store, options);
1041
1276
  }
1042
1277
 
1043
1278
  //#endregion
@@ -1053,8 +1288,10 @@ function initFamilyMemberInStore(store, token, key) {
1053
1288
  case `mutable_atom`:
1054
1289
  store.on.atomCreation.next(state);
1055
1290
  break;
1056
- case `selector`:
1057
- case `readonly_selector`:
1291
+ case `writable_pure_selector`:
1292
+ case `readonly_pure_selector`:
1293
+ case `writable_held_selector`:
1294
+ case `readonly_held_selector`:
1058
1295
  store.on.selectorCreation.next(state);
1059
1296
  break;
1060
1297
  }
@@ -1078,10 +1315,12 @@ function seekInStore(store, token, key) {
1078
1315
  case `mutable_atom_family`:
1079
1316
  state = target.atoms.get(fullKey);
1080
1317
  break;
1081
- case `selector_family`:
1082
- state = target.selectors.get(fullKey);
1318
+ case `writable_held_selector_family`:
1319
+ case `writable_pure_selector_family`:
1320
+ state = target.writableSelectors.get(fullKey);
1083
1321
  break;
1084
- case `readonly_selector_family`:
1322
+ case `readonly_held_selector_family`:
1323
+ case `readonly_pure_selector_family`:
1085
1324
  state = target.readonlySelectors.get(fullKey);
1086
1325
  break;
1087
1326
  }
@@ -1131,8 +1370,10 @@ function disposeFromStore(store, ...params) {
1131
1370
  case `mutable_atom`:
1132
1371
  disposeAtom(store, token);
1133
1372
  break;
1134
- case `selector`:
1135
- case `readonly_selector`:
1373
+ case `writable_pure_selector`:
1374
+ case `readonly_pure_selector`:
1375
+ case `writable_held_selector`:
1376
+ case `readonly_held_selector`:
1136
1377
  disposeSelector(store, token);
1137
1378
  break;
1138
1379
  }
@@ -1561,8 +1802,10 @@ function getFromStore(store, ...params) {
1561
1802
  switch (family.type) {
1562
1803
  case `atom_family`:
1563
1804
  case `mutable_atom_family`: return store.defaults.get(family.key);
1564
- case `selector_family`:
1565
- case `readonly_selector_family`: {
1805
+ case `readonly_pure_selector_family`:
1806
+ case `writable_pure_selector_family`:
1807
+ case `readonly_held_selector_family`:
1808
+ case `writable_held_selector_family`: {
1566
1809
  if (store.defaults.has(family.key)) return store.defaults.get(token.family.key);
1567
1810
  const defaultValue = withdraw(store, family).default(subKey);
1568
1811
  store.defaults.set(family.key, defaultValue);
@@ -1630,7 +1873,7 @@ const buildTransaction = (store, key, params, id) => {
1630
1873
  transactions: new LazyMap(parent.transactions),
1631
1874
  selectorAtoms: new Junction(parent.selectorAtoms.toJSON()),
1632
1875
  selectorGraph: new Junction(parent.selectorGraph.toJSON(), { makeContentKey: (...keys) => keys.sort().join(`:`) }),
1633
- selectors: new LazyMap(parent.selectors),
1876
+ writableSelectors: new LazyMap(parent.writableSelectors),
1634
1877
  valueMap: new LazyMap(parent.valueMap),
1635
1878
  defaults: parent.defaults,
1636
1879
  disposalTraces: store.disposalTraces.copy(),
@@ -1718,7 +1961,7 @@ var Store = class {
1718
1961
  valueMap = new Map();
1719
1962
  defaults = new Map();
1720
1963
  atoms = new Map();
1721
- selectors = new Map();
1964
+ writableSelectors = new Map();
1722
1965
  readonlySelectors = new Map();
1723
1966
  atomsThatAreDefault = new Set();
1724
1967
  selectorAtoms = new Junction({
@@ -1817,7 +2060,7 @@ var Store = class {
1817
2060
  }
1818
2061
  }
1819
2062
  for (const [, selector] of store.readonlySelectors) selector.install(this);
1820
- for (const [, selector] of store.selectors) {
2063
+ for (const [, selector] of store.writableSelectors) {
1821
2064
  if (mutableHelpers.has(selector.key)) continue;
1822
2065
  selector.install(this);
1823
2066
  }
@@ -1851,16 +2094,20 @@ function withdraw(store, token) {
1851
2094
  case `mutable_atom`:
1852
2095
  withdrawn = target.atoms.get(token.key);
1853
2096
  break;
1854
- case `selector`:
1855
- withdrawn = target.selectors.get(token.key);
2097
+ case `writable_pure_selector`:
2098
+ case `writable_held_selector`:
2099
+ withdrawn = target.writableSelectors.get(token.key);
1856
2100
  break;
1857
- case `readonly_selector`:
2101
+ case `readonly_pure_selector`:
2102
+ case `readonly_held_selector`:
1858
2103
  withdrawn = target.readonlySelectors.get(token.key);
1859
2104
  break;
1860
2105
  case `atom_family`:
1861
2106
  case `mutable_atom_family`:
1862
- case `selector_family`:
1863
- case `readonly_selector_family`:
2107
+ case `writable_pure_selector_family`:
2108
+ case `readonly_pure_selector_family`:
2109
+ case `writable_held_selector_family`:
2110
+ case `readonly_held_selector_family`:
1864
2111
  withdrawn = target.families.get(token.key);
1865
2112
  break;
1866
2113
  case `timeline`:
@@ -1890,8 +2137,10 @@ function subscribeInStore(store, token, handleUpdate, key = arbitrary$1()) {
1890
2137
  switch (token.type) {
1891
2138
  case `atom`:
1892
2139
  case `mutable_atom`:
1893
- case `readonly_selector`:
1894
- case `selector`: return subscribeToState$1(store, token, key, handleUpdate);
2140
+ case `readonly_pure_selector`:
2141
+ case `readonly_held_selector`:
2142
+ case `writable_pure_selector`:
2143
+ case `writable_held_selector`: return subscribeToState$1(store, token, key, handleUpdate);
1895
2144
  case `transaction`: return subscribeToTransaction$1(store, token, key, handleUpdate);
1896
2145
  case `timeline`: return subscribeToTimeline$1(store, token, key, handleUpdate);
1897
2146
  }
@@ -1931,7 +2180,7 @@ function subscribeToState(store, token, key, handleUpdate) {
1931
2180
  }
1932
2181
  const state = withdraw(store, token);
1933
2182
  store.logger.info(`👀`, state.type, state.key, `Adding subscription "${key}"`);
1934
- const isSelector = state.type === `selector` || state.type === `readonly_selector`;
2183
+ const isSelector = state.type === `writable_pure_selector` || state.type === `readonly_pure_selector`;
1935
2184
  let dependencyUnsubFunctions = null;
1936
2185
  let updateHandler = safelyHandleUpdate;
1937
2186
  if (isSelector) {
@@ -2074,26 +2323,28 @@ var Tracker = class {
2074
2323
  function createMutableAtom(store, options, family) {
2075
2324
  store.logger.info(`🔨`, `atom`, options.key, `creating in store "${store.config.name}"`);
2076
2325
  const target = newest(store);
2077
- const existing = target.atoms.get(options.key);
2078
- if (existing && existing.type === `mutable_atom`) {
2079
- store.logger.error(`❌`, `atom`, options.key, `Tried to create atom, but it already exists in the store.`);
2326
+ const { key, default: def } = options;
2327
+ const existing = target.atoms.get(key);
2328
+ const type = `mutable_atom`;
2329
+ if (existing && existing.type === type) {
2330
+ store.logger.error(`❌`, type, key, `Tried to create atom, but it already exists in the store.`);
2080
2331
  return deposit(existing);
2081
2332
  }
2082
2333
  const subject = new Subject();
2083
2334
  const newAtom = {
2084
2335
  ...options,
2085
- type: `mutable_atom`,
2336
+ type,
2086
2337
  install: (s) => {
2087
- s.logger.info(`🛠️`, `atom`, options.key, `installing in store "${s.config.name}"`);
2338
+ s.logger.info(`🛠️`, `atom`, key, `installing in store "${s.config.name}"`);
2088
2339
  return createMutableAtom(s, options, family);
2089
2340
  },
2090
2341
  subject
2091
2342
  };
2092
2343
  if (family) newAtom.family = family;
2093
- const initialValue = options.default();
2344
+ const initialValue = def();
2094
2345
  target.atoms.set(newAtom.key, newAtom);
2095
- markAtomAsDefault(store, options.key);
2096
- cacheValue(target, options.key, initialValue, subject);
2346
+ markAtomAsDefault(store, key);
2347
+ cacheValue(target, key, initialValue, subject);
2097
2348
  const token = deposit(newAtom);
2098
2349
  if (options.effects) {
2099
2350
  let effectIndex = 0;
@@ -2216,7 +2467,7 @@ const getJsonToken = (store, mutableAtomToken) => {
2216
2467
  const jsonFamilyKey = `${mutableAtomToken.family.key}:JSON`;
2217
2468
  const jsonFamilyToken = {
2218
2469
  key: jsonFamilyKey,
2219
- type: `selector_family`
2470
+ type: `writable_pure_selector_family`
2220
2471
  };
2221
2472
  const family = withdraw(target, jsonFamilyToken);
2222
2473
  const subKey = JSON.parse(mutableAtomToken.family.subKey);
@@ -2224,7 +2475,7 @@ const getJsonToken = (store, mutableAtomToken) => {
2224
2475
  return jsonToken;
2225
2476
  }
2226
2477
  const token = {
2227
- type: `selector`,
2478
+ type: `writable_pure_selector`,
2228
2479
  key: `${mutableAtomToken.key}:JSON`
2229
2480
  };
2230
2481
  return token;
@@ -2313,7 +2564,7 @@ const evictCachedValue = (key, target) => {
2313
2564
  const currentValue = target.valueMap.get(key);
2314
2565
  if (currentValue instanceof Future) {
2315
2566
  const future = currentValue;
2316
- const selector = target.selectors.get(key) ?? target.readonlySelectors.get(key);
2567
+ const selector = target.writableSelectors.get(key) ?? target.readonlySelectors.get(key);
2317
2568
  if (selector) future.use(selector.get());
2318
2569
  return;
2319
2570
  }
@@ -2341,29 +2592,31 @@ const markAtomAsNotDefault = (store, key) => {
2341
2592
  //#endregion
2342
2593
  //#region src/internal/atom/create-regular-atom.ts
2343
2594
  function createRegularAtom(store, options, family) {
2344
- store.logger.info(`🔨`, `atom`, options.key, `creating in store "${store.config.name}"`);
2595
+ const type = `atom`;
2596
+ const { key, default: def } = options;
2597
+ store.logger.info(`🔨`, `atom`, key, `creating in store "${store.config.name}"`);
2345
2598
  const target = newest(store);
2346
- const existing = target.atoms.get(options.key);
2347
- if (existing && existing.type === `atom`) {
2348
- store.logger.error(`❌`, `atom`, options.key, `Tried to create atom, but it already exists in the store.`);
2599
+ const existing = target.atoms.get(key);
2600
+ if (existing && existing.type === type) {
2601
+ store.logger.error(`❌`, `atom`, key, `Tried to create atom, but it already exists in the store.`);
2349
2602
  return deposit(existing);
2350
2603
  }
2351
2604
  const subject = new Subject();
2352
2605
  const newAtom = {
2353
2606
  ...options,
2354
- type: `atom`,
2607
+ type,
2355
2608
  install: (s) => {
2356
- s.logger.info(`🛠️`, `atom`, options.key, `installing in store "${s.config.name}"`);
2609
+ s.logger.info(`🛠️`, type, key, `installing in store "${s.config.name}"`);
2357
2610
  return createRegularAtom(s, options, family);
2358
2611
  },
2359
2612
  subject
2360
2613
  };
2361
2614
  if (family) newAtom.family = family;
2362
- let initialValue = options.default;
2363
- if (options.default instanceof Function) initialValue = options.default();
2364
- target.atoms.set(newAtom.key, newAtom);
2365
- markAtomAsDefault(store, options.key);
2366
- cacheValue(target, options.key, initialValue, subject);
2615
+ let initialValue = def;
2616
+ if (def instanceof Function) initialValue = def();
2617
+ target.atoms.set(key, newAtom);
2618
+ markAtomAsDefault(store, key);
2619
+ cacheValue(target, key, initialValue, subject);
2367
2620
  const token = deposit(newAtom);
2368
2621
  if (options.effects) {
2369
2622
  let effectIndex = 0;
@@ -2649,7 +2902,7 @@ var Join = class {
2649
2902
  return compositeKey;
2650
2903
  }
2651
2904
  });
2652
- const createSingleKeySelectorFamily = () => createReadonlySelectorFamily(store, {
2905
+ const createSingleKeySelectorFamily = () => createReadonlyPureSelectorFamily(store, {
2653
2906
  key: `${options.key}/singleRelatedKey`,
2654
2907
  get: (key) => ({ get }) => {
2655
2908
  const relatedKeys = get(relatedKeysAtoms, key);
@@ -2658,7 +2911,7 @@ var Join = class {
2658
2911
  }
2659
2912
  }, [`join`, `keys`]);
2660
2913
  const getMultipleKeySelectorFamily = () => {
2661
- return createReadonlySelectorFamily(store, {
2914
+ return createReadonlyPureSelectorFamily(store, {
2662
2915
  key: `${options.key}/multipleRelatedKeys`,
2663
2916
  get: (key) => ({ get }) => {
2664
2917
  const jsonFamily = getJsonFamily(relatedKeysAtoms, store);
@@ -2667,7 +2920,7 @@ var Join = class {
2667
2920
  }
2668
2921
  }, [`join`, `keys`]);
2669
2922
  };
2670
- const createSingleEntrySelectorFamily = () => createReadonlySelectorFamily(store, {
2923
+ const createSingleEntrySelectorFamily = () => createReadonlyPureSelectorFamily(store, {
2671
2924
  key: `${options.key}/singleRelatedEntry`,
2672
2925
  get: (x) => ({ get }) => {
2673
2926
  const relatedKeys = get(relatedKeysAtoms, x);
@@ -2683,7 +2936,7 @@ var Join = class {
2683
2936
  return null;
2684
2937
  }
2685
2938
  }, [`join`, `entries`]);
2686
- const getMultipleEntrySelectorFamily = () => createReadonlySelectorFamily(store, {
2939
+ const getMultipleEntrySelectorFamily = () => createReadonlyPureSelectorFamily(store, {
2687
2940
  key: `${options.key}/multipleRelatedEntries`,
2688
2941
  get: (x) => ({ get }) => {
2689
2942
  const jsonFamily = getJsonFamily(relatedKeysAtoms, store);
@@ -2999,8 +3252,8 @@ function addAtomToTimeline(store, atomToken, tl) {
2999
3252
  }, { topicType: `atom` });
3000
3253
  tl.subscriptions.set(atom$1.key, atom$1.subject.subscribe(`timeline`, function timelineCapturesAtomUpdate(update) {
3001
3254
  const target = newest(store);
3002
- const currentSelectorKey = store.operation.open && store.operation.token.type === `selector` ? store.operation.token.key : null;
3003
- const currentSelectorTime = store.operation.open && store.operation.token.type === `selector` ? store.operation.time : null;
3255
+ const currentSelectorKey = store.operation.open && store.operation.token.type === `writable_pure_selector` ? store.operation.token.key : null;
3256
+ const currentSelectorTime = store.operation.open && store.operation.token.type === `writable_pure_selector` ? store.operation.time : null;
3004
3257
  const txUpdateInProgress = target.on.transactionApplying.state?.update;
3005
3258
  store.logger.info(`⏳`, `timeline`, tl.key, `atom`, atomToken.key, `went`, update.oldValue, `->`, update.newValue, txUpdateInProgress ? `in transaction "${txUpdateInProgress.key}"` : currentSelectorKey ? `in selector "${currentSelectorKey}"` : ``);
3006
3259
  if (tl.timeTraveling === null) if (txUpdateInProgress) joinTransaction(store, tl, txUpdateInProgress);
@@ -3209,5 +3462,5 @@ const timeTravel = (store, action, token) => {
3209
3462
  };
3210
3463
 
3211
3464
  //#endregion
3212
- 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, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, createWritableSelectorFamily, 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 };
3465
+ 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 };
3213
3466
  //# sourceMappingURL=index.js.map