atom.io 0.24.7 → 0.24.8

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.
@@ -792,21 +792,18 @@ var getSelectorDependencyKeys = (key, store) => {
792
792
  };
793
793
 
794
794
  // internal/src/selector/trace-selector-atoms.ts
795
- var traceSelectorAtoms = (selectorKey, directDependencyKey, store) => {
795
+ var traceSelectorAtoms = (directDependencyKey, covered, store) => {
796
796
  const rootKeys = [];
797
797
  const indirectDependencyKeys = getSelectorDependencyKeys(
798
798
  directDependencyKey,
799
799
  store
800
800
  );
801
- let depth = 0;
802
801
  while (indirectDependencyKeys.length > 0) {
803
802
  const indirectDependencyKey = indirectDependencyKeys.shift();
804
- ++depth;
805
- if (depth > 99999) {
806
- throw new Error(
807
- `Maximum selector dependency depth exceeded (> 99999) in selector "${selectorKey}". This is likely due to a circular dependency.`
808
- );
803
+ if (covered.has(indirectDependencyKey)) {
804
+ continue;
809
805
  }
806
+ covered.add(indirectDependencyKey);
810
807
  if (!isAtomKey(indirectDependencyKey, store)) {
811
808
  indirectDependencyKeys.push(
812
809
  ...getSelectorDependencyKeys(indirectDependencyKey, store)
@@ -820,13 +817,14 @@ var traceSelectorAtoms = (selectorKey, directDependencyKey, store) => {
820
817
  var traceAllSelectorAtoms = (selector, store) => {
821
818
  const selectorKey = selector.key;
822
819
  const directDependencyKeys = getSelectorDependencyKeys(selectorKey, store);
820
+ const covered = /* @__PURE__ */ new Set();
823
821
  return directDependencyKeys.flatMap(
824
- (depKey) => isAtomKey(depKey, store) ? depKey : traceSelectorAtoms(selectorKey, depKey, store)
822
+ (depKey) => isAtomKey(depKey, store) ? depKey : traceSelectorAtoms(depKey, covered, store)
825
823
  );
826
824
  };
827
825
 
828
826
  // internal/src/selector/update-selector-atoms.ts
829
- var updateSelectorAtoms = (selectorKey, dependency, store) => {
827
+ var updateSelectorAtoms = (selectorKey, dependency, covered, store) => {
830
828
  const target = newest(store);
831
829
  if (dependency.type === `atom` || dependency.type === `mutable_atom`) {
832
830
  target.selectorAtoms.set({
@@ -840,7 +838,7 @@ var updateSelectorAtoms = (selectorKey, dependency, store) => {
840
838
  `discovers root atom "${dependency.key}"`
841
839
  );
842
840
  } else {
843
- const rootKeys = traceSelectorAtoms(selectorKey, dependency.key, store);
841
+ const rootKeys = traceSelectorAtoms(dependency.key, covered, store);
844
842
  store.logger.info(
845
843
  `\u{1F50D}`,
846
844
  `selector`,
@@ -854,10 +852,11 @@ var updateSelectorAtoms = (selectorKey, dependency, store) => {
854
852
  });
855
853
  }
856
854
  }
855
+ covered.add(dependency.key);
857
856
  };
858
857
 
859
858
  // internal/src/selector/register-selector.ts
860
- var registerSelector = (selectorKey, store) => ({
859
+ var registerSelector = (selectorKey, covered, store) => ({
861
860
  get: (dependency) => {
862
861
  const target = newest(store);
863
862
  if (dependency.type === `molecule`) {
@@ -882,7 +881,7 @@ var registerSelector = (selectorKey, store) => ({
882
881
  source: dependency.key
883
882
  }
884
883
  );
885
- updateSelectorAtoms(selectorKey, dependency, store);
884
+ updateSelectorAtoms(selectorKey, dependency, covered, store);
886
885
  return dependencyValue;
887
886
  },
888
887
  set: (WritableToken, newValue) => {
@@ -899,10 +898,16 @@ var registerSelector = (selectorKey, store) => ({
899
898
  var createReadonlySelector = (options, family, store) => {
900
899
  const target = newest(store);
901
900
  const subject = new Subject();
902
- const { get, find, seek, json } = registerSelector(options.key, target);
901
+ const covered = /* @__PURE__ */ new Set();
902
+ const { get, find, seek, json } = registerSelector(
903
+ options.key,
904
+ covered,
905
+ target
906
+ );
903
907
  const getSelf = () => {
904
908
  const value = options.get({ get, find, seek, json });
905
909
  cacheValue(options.key, value, subject, newest(store));
910
+ covered.clear();
906
911
  return value;
907
912
  };
908
913
  const readonlySelector = __spreadValues(__spreadProps(__spreadValues({}, options), {
@@ -934,12 +939,14 @@ var createReadonlySelector = (options, family, store) => {
934
939
  var createWritableSelector = (options, family, store) => {
935
940
  const target = newest(store);
936
941
  const subject = new Subject();
937
- const transactors = registerSelector(options.key, target);
942
+ const covered = /* @__PURE__ */ new Set();
943
+ const transactors = registerSelector(options.key, covered, target);
938
944
  const { find, get, seek, json } = transactors;
939
945
  const readonlyTransactors = { find, get, seek, json };
940
946
  const getSelf = (innerTarget = newest(store)) => {
941
947
  const value = options.get(readonlyTransactors);
942
948
  cacheValue(options.key, value, subject, innerTarget);
949
+ covered.clear();
943
950
  return value;
944
951
  };
945
952
  const setSelf = (next) => {
@@ -523,12 +523,12 @@ declare function disposeSelector(selectorToken: ReadonlySelectorToken<unknown> |
523
523
 
524
524
  declare const getSelectorDependencyKeys: (key: string, store: Store) => (AtomKey<unknown> | ReadonlySelectorKey<unknown> | SelectorKey<unknown>)[];
525
525
 
526
- declare const registerSelector: (selectorKey: string, store: Store) => Transactors;
526
+ declare const registerSelector: (selectorKey: string, covered: Set<string>, store: Store) => Transactors;
527
527
 
528
- declare const traceSelectorAtoms: (selectorKey: string, directDependencyKey: StateKey<unknown>, store: Store) => AtomKey<unknown>[];
528
+ declare const traceSelectorAtoms: (directDependencyKey: StateKey<unknown>, covered: Set<string>, store: Store) => AtomKey<unknown>[];
529
529
  declare const traceAllSelectorAtoms: (selector: Selector<any>, store: Store) => AtomKey<unknown>[];
530
530
 
531
- declare const updateSelectorAtoms: (selectorKey: string, dependency: ReadonlySelectorToken<unknown> | WritableToken<unknown>, store: Store) => void;
531
+ declare const updateSelectorAtoms: (selectorKey: string, dependency: ReadonlySelectorToken<unknown> | WritableToken<unknown>, covered: Set<string>, store: Store) => void;
532
532
 
533
533
  type Modify<T> = (thing: T) => T;
534
534
  declare const become: <T>(nextVersionOfThing: Modify<T> | T) => (originalThing: T) => T;
@@ -517,21 +517,18 @@ var getSelectorDependencyKeys = (key, store) => {
517
517
  };
518
518
 
519
519
  // internal/src/selector/trace-selector-atoms.ts
520
- var traceSelectorAtoms = (selectorKey, directDependencyKey, store) => {
520
+ var traceSelectorAtoms = (directDependencyKey, covered, store) => {
521
521
  const rootKeys = [];
522
522
  const indirectDependencyKeys = getSelectorDependencyKeys(
523
523
  directDependencyKey,
524
524
  store
525
525
  );
526
- let depth = 0;
527
526
  while (indirectDependencyKeys.length > 0) {
528
527
  const indirectDependencyKey = indirectDependencyKeys.shift();
529
- ++depth;
530
- if (depth > 99999) {
531
- throw new Error(
532
- `Maximum selector dependency depth exceeded (> 99999) in selector "${selectorKey}". This is likely due to a circular dependency.`
533
- );
528
+ if (covered.has(indirectDependencyKey)) {
529
+ continue;
534
530
  }
531
+ covered.add(indirectDependencyKey);
535
532
  if (!isAtomKey(indirectDependencyKey, store)) {
536
533
  indirectDependencyKeys.push(
537
534
  ...getSelectorDependencyKeys(indirectDependencyKey, store)
@@ -545,13 +542,14 @@ var traceSelectorAtoms = (selectorKey, directDependencyKey, store) => {
545
542
  var traceAllSelectorAtoms = (selector, store) => {
546
543
  const selectorKey = selector.key;
547
544
  const directDependencyKeys = getSelectorDependencyKeys(selectorKey, store);
545
+ const covered = /* @__PURE__ */ new Set();
548
546
  return directDependencyKeys.flatMap(
549
- (depKey) => isAtomKey(depKey, store) ? depKey : traceSelectorAtoms(selectorKey, depKey, store)
547
+ (depKey) => isAtomKey(depKey, store) ? depKey : traceSelectorAtoms(depKey, covered, store)
550
548
  );
551
549
  };
552
550
 
553
551
  // internal/src/selector/update-selector-atoms.ts
554
- var updateSelectorAtoms = (selectorKey, dependency, store) => {
552
+ var updateSelectorAtoms = (selectorKey, dependency, covered, store) => {
555
553
  const target = newest(store);
556
554
  if (dependency.type === `atom` || dependency.type === `mutable_atom`) {
557
555
  target.selectorAtoms.set({
@@ -565,7 +563,7 @@ var updateSelectorAtoms = (selectorKey, dependency, store) => {
565
563
  `discovers root atom "${dependency.key}"`
566
564
  );
567
565
  } else {
568
- const rootKeys = traceSelectorAtoms(selectorKey, dependency.key, store);
566
+ const rootKeys = traceSelectorAtoms(dependency.key, covered, store);
569
567
  store.logger.info(
570
568
  `\u{1F50D}`,
571
569
  `selector`,
@@ -579,10 +577,11 @@ var updateSelectorAtoms = (selectorKey, dependency, store) => {
579
577
  });
580
578
  }
581
579
  }
580
+ covered.add(dependency.key);
582
581
  };
583
582
 
584
583
  // internal/src/selector/register-selector.ts
585
- var registerSelector = (selectorKey, store) => ({
584
+ var registerSelector = (selectorKey, covered, store) => ({
586
585
  get: (dependency) => {
587
586
  const target = newest(store);
588
587
  if (dependency.type === `molecule`) {
@@ -607,7 +606,7 @@ var registerSelector = (selectorKey, store) => ({
607
606
  source: dependency.key
608
607
  }
609
608
  );
610
- updateSelectorAtoms(selectorKey, dependency, store);
609
+ updateSelectorAtoms(selectorKey, dependency, covered, store);
611
610
  return dependencyValue;
612
611
  },
613
612
  set: (WritableToken, newValue) => {
@@ -624,10 +623,16 @@ var registerSelector = (selectorKey, store) => ({
624
623
  var createReadonlySelector = (options, family, store) => {
625
624
  const target = newest(store);
626
625
  const subject = new Subject();
627
- const { get, find, seek, json } = registerSelector(options.key, target);
626
+ const covered = /* @__PURE__ */ new Set();
627
+ const { get, find, seek, json } = registerSelector(
628
+ options.key,
629
+ covered,
630
+ target
631
+ );
628
632
  const getSelf = () => {
629
633
  const value = options.get({ get, find, seek, json });
630
634
  cacheValue(options.key, value, subject, newest(store));
635
+ covered.clear();
631
636
  return value;
632
637
  };
633
638
  const readonlySelector = __spreadValues(__spreadProps(__spreadValues({}, options), {
@@ -659,12 +664,14 @@ var createReadonlySelector = (options, family, store) => {
659
664
  var createWritableSelector = (options, family, store) => {
660
665
  const target = newest(store);
661
666
  const subject = new Subject();
662
- const transactors = registerSelector(options.key, target);
667
+ const covered = /* @__PURE__ */ new Set();
668
+ const transactors = registerSelector(options.key, covered, target);
663
669
  const { find, get, seek, json } = transactors;
664
670
  const readonlyTransactors = { find, get, seek, json };
665
671
  const getSelf = (innerTarget = newest(store)) => {
666
672
  const value = options.get(readonlyTransactors);
667
673
  cacheValue(options.key, value, subject, innerTarget);
674
+ covered.clear();
668
675
  return value;
669
676
  };
670
677
  const setSelf = (next) => {
@@ -18,11 +18,16 @@ export const createReadonlySelector = <T>(
18
18
  ): ReadonlySelectorToken<T> => {
19
19
  const target = newest(store)
20
20
  const subject = new Subject<{ newValue: T; oldValue: T }>()
21
-
22
- const { get, find, seek, json } = registerSelector(options.key, target)
21
+ const covered = new Set<string>()
22
+ const { get, find, seek, json } = registerSelector(
23
+ options.key,
24
+ covered,
25
+ target,
26
+ )
23
27
  const getSelf = () => {
24
28
  const value = options.get({ get, find, seek, json })
25
29
  cacheValue(options.key, value, subject, newest(store))
30
+ covered.clear()
26
31
  return value
27
32
  }
28
33
 
@@ -21,13 +21,15 @@ export const createWritableSelector = <T>(
21
21
  ): WritableSelectorToken<T> => {
22
22
  const target = newest(store)
23
23
  const subject = new Subject<{ newValue: T; oldValue: T }>()
24
- const transactors = registerSelector(options.key, target)
24
+ const covered = new Set<string>()
25
+ const transactors = registerSelector(options.key, covered, target)
25
26
  const { find, get, seek, json } = transactors
26
27
  const readonlyTransactors = { find, get, seek, json }
27
28
 
28
29
  const getSelf = (innerTarget = newest(store)): T => {
29
30
  const value = options.get(readonlyTransactors)
30
31
  cacheValue(options.key, value, subject, innerTarget)
32
+ covered.clear()
31
33
  return value
32
34
  }
33
35
 
@@ -19,6 +19,7 @@ import { updateSelectorAtoms } from "./update-selector-atoms"
19
19
 
20
20
  export const registerSelector = (
21
21
  selectorKey: string,
22
+ covered: Set<string>,
22
23
  store: Store,
23
24
  ): Transactors => ({
24
25
  get: (dependency: MoleculeToken<MoleculeConstructor> | ReadableToken<any>) => {
@@ -49,7 +50,7 @@ export const registerSelector = (
49
50
  source: dependency.key,
50
51
  },
51
52
  )
52
- updateSelectorAtoms(selectorKey, dependency, store)
53
+ updateSelectorAtoms(selectorKey, dependency, covered, store)
53
54
  return dependencyValue
54
55
  },
55
56
  set: (WritableToken, newValue) => {
@@ -4,8 +4,8 @@ import { isAtomKey } from "../keys"
4
4
  import { getSelectorDependencyKeys } from "./get-selector-dependency-keys"
5
5
 
6
6
  export const traceSelectorAtoms = (
7
- selectorKey: string,
8
7
  directDependencyKey: StateKey<unknown>,
8
+ covered: Set<string>,
9
9
  store: Store,
10
10
  ): AtomKey<unknown>[] => {
11
11
  const rootKeys: AtomKey<unknown>[] = []
@@ -14,16 +14,13 @@ export const traceSelectorAtoms = (
14
14
  directDependencyKey,
15
15
  store,
16
16
  )
17
- let depth = 0
18
17
  while (indirectDependencyKeys.length > 0) {
19
18
  // biome-ignore lint/style/noNonNullAssertion: just checked length ^^^
20
19
  const indirectDependencyKey = indirectDependencyKeys.shift()!
21
- ++depth
22
- if (depth > 99999) {
23
- throw new Error(
24
- `Maximum selector dependency depth exceeded (> 99999) in selector "${selectorKey}". This is likely due to a circular dependency.`,
25
- )
20
+ if (covered.has(indirectDependencyKey)) {
21
+ continue
26
22
  }
23
+ covered.add(indirectDependencyKey)
27
24
 
28
25
  if (!isAtomKey(indirectDependencyKey, store)) {
29
26
  indirectDependencyKeys.push(
@@ -43,9 +40,10 @@ export const traceAllSelectorAtoms = (
43
40
  ): AtomKey<unknown>[] => {
44
41
  const selectorKey = selector.key
45
42
  const directDependencyKeys = getSelectorDependencyKeys(selectorKey, store)
43
+ const covered = new Set<string>()
46
44
  return directDependencyKeys.flatMap((depKey) =>
47
45
  isAtomKey(depKey, store)
48
46
  ? depKey
49
- : traceSelectorAtoms(selectorKey, depKey, store),
47
+ : traceSelectorAtoms(depKey, covered, store),
50
48
  )
51
49
  }
@@ -7,6 +7,7 @@ import { traceSelectorAtoms } from "./trace-selector-atoms"
7
7
  export const updateSelectorAtoms = (
8
8
  selectorKey: string,
9
9
  dependency: ReadonlySelectorToken<unknown> | WritableToken<unknown>,
10
+ covered: Set<string>,
10
11
  store: Store,
11
12
  ): void => {
12
13
  const target = newest(store)
@@ -22,7 +23,7 @@ export const updateSelectorAtoms = (
22
23
  `discovers root atom "${dependency.key}"`,
23
24
  )
24
25
  } else {
25
- const rootKeys = traceSelectorAtoms(selectorKey, dependency.key, store)
26
+ const rootKeys = traceSelectorAtoms(dependency.key, covered, store)
26
27
  store.logger.info(
27
28
  `🔍`,
28
29
  `selector`,
@@ -38,4 +39,5 @@ export const updateSelectorAtoms = (
38
39
  })
39
40
  }
40
41
  }
42
+ covered.add(dependency.key)
41
43
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atom.io",
3
- "version": "0.24.7",
3
+ "version": "0.24.8",
4
4
  "description": "Composable and testable reactive data library.",
5
5
  "homepage": "https://atom.io.fyi",
6
6
  "sideEffects": false,
@@ -65,7 +65,7 @@
65
65
  "drizzle-orm": "0.31.2",
66
66
  "eslint": "npm:eslint@8.57.0",
67
67
  "eslint-v9": "npm:eslint@9.5.0",
68
- "framer-motion": "11.2.11",
68
+ "framer-motion": "11.2.12",
69
69
  "happy-dom": "14.12.3",
70
70
  "http-proxy": "1.18.1",
71
71
  "npmlog": "7.0.1",