atom.io 0.33.2 → 0.33.3

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 +111 -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 +10 -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 +155 -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 +2 -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 +1 -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 +2 -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 +19 -19
  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
@@ -0,0 +1,68 @@
1
+ import type {
2
+ FamilyMetadata,
3
+ WritableHeldSelectorOptions,
4
+ WritableHeldSelectorToken,
5
+ } from "atom.io"
6
+
7
+ import type { WritableHeldSelector } from ".."
8
+ import { cacheValue } from "../caching"
9
+ import { newest } from "../lineage"
10
+ import { markDone } from "../operation"
11
+ import { become } from "../set-state"
12
+ import type { Store } from "../store"
13
+ import { Subject } from "../subject"
14
+ import { isRootStore } from "../transaction"
15
+ import { registerSelector } from "./register-selector"
16
+
17
+ export const createWritableHeldSelector = <T extends object>(
18
+ store: Store,
19
+ options: WritableHeldSelectorOptions<T>,
20
+ family: FamilyMetadata | undefined,
21
+ ): WritableHeldSelectorToken<T> => {
22
+ const target = newest(store)
23
+ const subject = new Subject<{ newValue: T; oldValue: T }>()
24
+ const covered = new Set<string>()
25
+ const { key, const: constant } = options
26
+ const type = `writable_held_selector` as const
27
+ const setterToolkit = registerSelector(target, type, key, covered)
28
+ const { find, get, json } = setterToolkit
29
+ const getterToolkit = { find, get, json }
30
+
31
+ const getSelf = (getFn = options.get, innerTarget = newest(store)): T => {
32
+ getFn(getterToolkit, constant)
33
+ cacheValue(innerTarget, key, constant, subject)
34
+ covered.clear()
35
+ return constant
36
+ }
37
+
38
+ const setSelf = (next: T | ((oldValue: T) => T)): void => {
39
+ const innerTarget = newest(store)
40
+ const oldValue = getSelf(options.get, innerTarget)
41
+ const newValue = become(next)(oldValue)
42
+ store.logger.info(`📝`, type, key, `set (`, oldValue, `->`, newValue, `)`)
43
+ cacheValue(innerTarget, key, newValue, subject)
44
+ markDone(innerTarget, key)
45
+ if (isRootStore(innerTarget)) {
46
+ subject.next({ newValue, oldValue })
47
+ }
48
+ options.set(setterToolkit, newValue)
49
+ }
50
+ const mySelector: WritableHeldSelector<T> = {
51
+ ...options,
52
+ type,
53
+ subject,
54
+ install: (s: Store) => createWritableHeldSelector(s, options, family),
55
+ get: getSelf,
56
+ set: setSelf,
57
+ ...(family && { family }),
58
+ }
59
+ target.writableSelectors.set(key, mySelector)
60
+ const initialValue = getSelf()
61
+ store.logger.info(`✨`, type, key, `=`, initialValue)
62
+
63
+ const token: WritableHeldSelectorToken<T> = { key, type }
64
+ if (family) {
65
+ token.family = family
66
+ }
67
+ return token
68
+ }
@@ -1,10 +1,10 @@
1
1
  import type {
2
2
  FamilyMetadata,
3
- WritableSelectorOptions,
4
- WritableSelectorToken,
3
+ WritablePureSelectorOptions,
4
+ WritablePureSelectorToken,
5
5
  } from "atom.io"
6
6
 
7
- import type { WritableSelector } from ".."
7
+ import type { WritablePureSelector } from ".."
8
8
  import { cacheValue } from "../caching"
9
9
  import { newest } from "../lineage"
10
10
  import { markDone } from "../operation"
@@ -14,21 +14,23 @@ import { Subject } from "../subject"
14
14
  import { isRootStore } from "../transaction"
15
15
  import { registerSelector } from "./register-selector"
16
16
 
17
- export const createWritableSelector = <T>(
17
+ export const createWritablePureSelector = <T>(
18
18
  store: Store,
19
- options: WritableSelectorOptions<T>,
19
+ options: WritablePureSelectorOptions<T>,
20
20
  family: FamilyMetadata | undefined,
21
- ): WritableSelectorToken<T> => {
21
+ ): WritablePureSelectorToken<T> => {
22
22
  const target = newest(store)
23
23
  const subject = new Subject<{ newValue: T; oldValue: T }>()
24
24
  const covered = new Set<string>()
25
- const setterToolkit = registerSelector(options.key, covered, target)
25
+ const key = options.key
26
+ const type = `writable_pure_selector` as const
27
+ const setterToolkit = registerSelector(target, type, key, covered)
26
28
  const { find, get, json } = setterToolkit
27
29
  const getterToolkit = { find, get, json }
28
30
 
29
31
  const getSelf = (getFn = options.get, innerTarget = newest(store)): T => {
30
32
  const value = getFn(getterToolkit)
31
- cacheValue(innerTarget, options.key, value, subject)
33
+ cacheValue(innerTarget, key, value, subject)
32
34
  covered.clear()
33
35
  return value
34
36
  }
@@ -37,16 +39,7 @@ export const createWritableSelector = <T>(
37
39
  const innerTarget = newest(store)
38
40
  const oldValue = getSelf(options.get, innerTarget)
39
41
  const newValue = become(next)(oldValue)
40
- store.logger.info(
41
- `📝`,
42
- `selector`,
43
- options.key,
44
- `set (`,
45
- oldValue,
46
- `->`,
47
- newValue,
48
- `)`,
49
- )
42
+ store.logger.info(`📝`, type, key, `set (`, oldValue, `->`, newValue, `)`)
50
43
  cacheValue(innerTarget, options.key, newValue, subject)
51
44
  markDone(innerTarget, options.key)
52
45
  if (isRootStore(innerTarget)) {
@@ -54,21 +47,21 @@ export const createWritableSelector = <T>(
54
47
  }
55
48
  options.set(setterToolkit, newValue)
56
49
  }
57
- const mySelector: WritableSelector<T> = {
50
+ const mySelector: WritablePureSelector<T> = {
58
51
  ...options,
52
+ type,
59
53
  subject,
60
- install: (s: Store) => createWritableSelector(s, options, family),
54
+ install: (s: Store) => createWritablePureSelector(s, options, family),
61
55
  get: getSelf,
62
56
  set: setSelf,
63
- type: `selector`,
64
57
  ...(family && { family }),
65
58
  }
66
- target.selectors.set(options.key, mySelector)
59
+ target.writableSelectors.set(key, mySelector)
67
60
  const initialValue = getSelf()
68
61
  store.logger.info(`✨`, mySelector.type, mySelector.key, `=`, initialValue)
69
- const token: WritableSelectorToken<T> = {
70
- key: options.key,
71
- type: `selector`,
62
+ const token: WritablePureSelectorToken<T> = {
63
+ key,
64
+ type,
72
65
  }
73
66
  if (family) {
74
67
  token.family = family
@@ -8,12 +8,12 @@ export function disposeSelector(
8
8
  selectorToken: SelectorToken<unknown>,
9
9
  ): void {
10
10
  const target = newest(store)
11
- const { key } = selectorToken
11
+ const { key, type } = selectorToken
12
12
  const selector = withdraw(target, selectorToken)
13
13
  if (!selector.family) {
14
14
  store.logger.error(
15
15
  `❌`,
16
- `selector`,
16
+ type,
17
17
  key,
18
18
  `Standalone selectors cannot be disposed.`,
19
19
  )
@@ -24,12 +24,12 @@ export function disposeSelector(
24
24
  }
25
25
  let familyToken: SelectorFamilyToken<any, any>
26
26
  switch (selectorToken.type) {
27
- case `selector`:
27
+ case `writable_held_selector`:
28
28
  {
29
- target.selectors.delete(key)
29
+ target.writableSelectors.delete(key)
30
30
  familyToken = {
31
31
  key: selector.family.key,
32
- type: `selector_family`,
32
+ type: `writable_held_selector_family`,
33
33
  }
34
34
  const family = withdraw(store, familyToken)
35
35
  family.subject.next({
@@ -39,12 +39,42 @@ export function disposeSelector(
39
39
  })
40
40
  }
41
41
  break
42
- case `readonly_selector`:
42
+ case `writable_pure_selector`:
43
+ {
44
+ target.writableSelectors.delete(key)
45
+ familyToken = {
46
+ key: selector.family.key,
47
+ type: `writable_pure_selector_family`,
48
+ }
49
+ const family = withdraw(store, familyToken)
50
+ family.subject.next({
51
+ type: `state_disposal`,
52
+ subType: `selector`,
53
+ token: selectorToken,
54
+ })
55
+ }
56
+ break
57
+ case `readonly_held_selector`:
58
+ {
59
+ target.readonlySelectors.delete(key)
60
+ familyToken = {
61
+ key: selector.family.key,
62
+ type: `readonly_held_selector_family`,
63
+ }
64
+ const family = withdraw(store, familyToken)
65
+ family.subject.next({
66
+ type: `state_disposal`,
67
+ subType: `selector`,
68
+ token: selectorToken,
69
+ })
70
+ }
71
+ break
72
+ case `readonly_pure_selector`:
43
73
  {
44
74
  target.readonlySelectors.delete(key)
45
75
  familyToken = {
46
76
  key: selector.family.key,
47
- type: `readonly_selector_family`,
77
+ type: `readonly_pure_selector_family`,
48
78
  }
49
79
  const family = withdraw(store, familyToken)
50
80
  family.subject.next({
@@ -4,8 +4,8 @@ import { newest } from "../lineage"
4
4
  import type { Store } from "../store"
5
5
 
6
6
  export const getSelectorDependencyKeys = (
7
- key: string,
8
7
  store: Store,
8
+ key: string,
9
9
  ): (
10
10
  | AtomKey<unknown>
11
11
  | ReadonlySelectorKey<unknown>
@@ -1,6 +1,8 @@
1
- export * from "./create-readonly-selector"
1
+ export * from "./create-readonly-held-selector"
2
+ export * from "./create-readonly-pure-selector"
2
3
  export * from "./create-standalone-selector"
3
- export * from "./create-writable-selector"
4
+ export * from "./create-writable-held-selector"
5
+ export * from "./create-writable-pure-selector"
4
6
  export * from "./dispose-selector"
5
7
  export * from "./get-selector-dependency-keys"
6
8
  export * from "./register-selector"
@@ -19,9 +19,14 @@ import { withdraw } from "../store"
19
19
  import { updateSelectorAtoms } from "./update-selector-atoms"
20
20
 
21
21
  export const registerSelector = (
22
+ store: Store,
23
+ selectorType:
24
+ | `readonly_held_selector`
25
+ | `readonly_pure_selector`
26
+ | `writable_held_selector`
27
+ | `writable_pure_selector`,
22
28
  selectorKey: string,
23
29
  covered: Set<string>,
24
- store: Store,
25
30
  ): SetterToolkit => ({
26
31
  get: (
27
32
  ...params:
@@ -40,26 +45,33 @@ export const registerSelector = (
40
45
 
41
46
  const dependencyState = withdraw(store, dependency)
42
47
  const dependencyValue = readOrComputeValue(store, dependencyState)
48
+ const dependencyKey = dependency.key
43
49
 
44
50
  store.logger.info(
45
51
  `🔌`,
46
- `selector`,
52
+ selectorType,
47
53
  selectorKey,
48
- `registers dependency ( "${dependency.key}" =`,
54
+ `registers dependency ( "${dependencyKey}" =`,
49
55
  dependencyValue,
50
56
  `)`,
51
57
  )
52
58
 
53
59
  target.selectorGraph.set(
54
60
  {
55
- upstreamSelectorKey: dependency.key,
61
+ upstreamSelectorKey: dependencyKey,
56
62
  downstreamSelectorKey: selectorKey,
57
63
  },
58
64
  {
59
65
  source: dependency.key,
60
66
  },
61
67
  )
62
- updateSelectorAtoms(selectorKey, dependency as any, covered, store)
68
+ updateSelectorAtoms(
69
+ store,
70
+ selectorType,
71
+ selectorKey,
72
+ dependency as any,
73
+ covered,
74
+ )
63
75
  return dependencyValue
64
76
  },
65
77
  set: (<T, New extends T>(
@@ -4,15 +4,15 @@ import { isAtomKey } from "../keys"
4
4
  import { getSelectorDependencyKeys } from "./get-selector-dependency-keys"
5
5
 
6
6
  export const traceSelectorAtoms = (
7
+ store: Store,
7
8
  directDependencyKey: StateKey<unknown>,
8
9
  covered: Set<string>,
9
- store: Store,
10
10
  ): AtomKey<unknown>[] => {
11
11
  const rootKeys: AtomKey<unknown>[] = []
12
12
 
13
13
  const indirectDependencyKeys = getSelectorDependencyKeys(
14
- directDependencyKey,
15
14
  store,
15
+ directDependencyKey,
16
16
  )
17
17
  while (indirectDependencyKeys.length > 0) {
18
18
  // biome-ignore lint/style/noNonNullAssertion: just checked length ^^^
@@ -24,7 +24,7 @@ export const traceSelectorAtoms = (
24
24
 
25
25
  if (!isAtomKey(store, indirectDependencyKey)) {
26
26
  indirectDependencyKeys.push(
27
- ...getSelectorDependencyKeys(indirectDependencyKey, store),
27
+ ...getSelectorDependencyKeys(store, indirectDependencyKey),
28
28
  )
29
29
  } else if (!rootKeys.includes(indirectDependencyKey)) {
30
30
  rootKeys.push(indirectDependencyKey)
@@ -39,11 +39,11 @@ export const traceAllSelectorAtoms = (
39
39
  store: Store,
40
40
  ): AtomKey<unknown>[] => {
41
41
  const selectorKey = selector.key
42
- const directDependencyKeys = getSelectorDependencyKeys(selectorKey, store)
42
+ const directDependencyKeys = getSelectorDependencyKeys(store, selectorKey)
43
43
  const covered = new Set<string>()
44
44
  return directDependencyKeys.flatMap((depKey) =>
45
45
  isAtomKey(store, depKey)
46
46
  ? depKey
47
- : traceSelectorAtoms(depKey, covered, store),
47
+ : traceSelectorAtoms(store, depKey, covered),
48
48
  )
49
49
  }
@@ -1,32 +1,38 @@
1
- import type { ReadonlySelectorToken, WritableToken } from "atom.io"
1
+ import type { ReadonlyPureSelectorToken, WritableToken } from "atom.io"
2
2
 
3
3
  import { newest } from "../lineage"
4
4
  import type { Store } from "../store"
5
5
  import { traceSelectorAtoms } from "./trace-selector-atoms"
6
6
 
7
7
  export const updateSelectorAtoms = (
8
+ store: Store,
9
+ selectorType:
10
+ | `readonly_held_selector`
11
+ | `readonly_pure_selector`
12
+ | `writable_held_selector`
13
+ | `writable_pure_selector`,
8
14
  selectorKey: string,
9
- dependency: ReadonlySelectorToken<unknown> | WritableToken<unknown>,
15
+ dependency: ReadonlyPureSelectorToken<unknown> | WritableToken<unknown>,
10
16
  covered: Set<string>,
11
- store: Store,
12
17
  ): void => {
13
18
  const target = newest(store)
14
- if (dependency.type === `atom` || dependency.type === `mutable_atom`) {
19
+ const { type: dependencyType, key: dependencyKey } = dependency
20
+ if (dependencyType === `atom` || dependencyType === `mutable_atom`) {
15
21
  target.selectorAtoms.set({
16
22
  selectorKey,
17
- atomKey: dependency.key,
23
+ atomKey: dependencyKey,
18
24
  })
19
25
  store.logger.info(
20
26
  `🔍`,
21
- `selector`,
27
+ selectorType,
22
28
  selectorKey,
23
- `discovers root atom "${dependency.key}"`,
29
+ `discovers root atom "${dependencyKey}"`,
24
30
  )
25
31
  } else {
26
- const rootKeys = traceSelectorAtoms(dependency.key, covered, store)
32
+ const rootKeys = traceSelectorAtoms(store, dependencyKey, covered)
27
33
  store.logger.info(
28
34
  `🔍`,
29
- `selector`,
35
+ selectorType,
30
36
  selectorKey,
31
37
  `discovers root atoms: [ ${rootKeys
32
38
  .map((key) => `"${key}"`)
@@ -39,5 +45,5 @@ export const updateSelectorAtoms = (
39
45
  })
40
46
  }
41
47
  }
42
- covered.add(dependency.key)
48
+ covered.add(dependencyKey)
43
49
  }
@@ -20,8 +20,10 @@ export const emitUpdate = <T>(
20
20
  )
21
21
  break
22
22
  case `atom`:
23
- case `selector`:
24
- case `readonly_selector`:
23
+ case `writable_pure_selector`:
24
+ case `readonly_pure_selector`:
25
+ case `writable_held_selector`:
26
+ case `readonly_held_selector`:
25
27
  store.logger.info(
26
28
  `📢`,
27
29
  state.type,
@@ -12,7 +12,8 @@ export const setAtomOrSelector = <T>(
12
12
  case `mutable_atom`:
13
13
  setAtom(store, state, value)
14
14
  break
15
- case `selector`:
15
+ case `writable_pure_selector`:
16
+ case `writable_held_selector`:
16
17
  state.set(value)
17
18
  break
18
19
  }
@@ -5,15 +5,15 @@ import type {
5
5
  MutableAtomToken,
6
6
  ReadableFamilyToken,
7
7
  ReadableToken,
8
- ReadonlySelectorFamilyToken,
9
- ReadonlySelectorToken,
8
+ ReadonlyPureSelectorFamilyToken,
9
+ ReadonlyPureSelectorToken,
10
10
  RegularAtomFamilyToken,
11
11
  RegularAtomToken,
12
12
  SelectorFamilyToken,
13
13
  SelectorToken,
14
14
  WritableFamilyToken,
15
- WritableSelectorFamilyToken,
16
- WritableSelectorToken,
15
+ WritablePureSelectorFamilyToken,
16
+ WritablePureSelectorToken,
17
17
  WritableToken,
18
18
  } from "atom.io"
19
19
  import type { Canonical, Json } from "atom.io/json"
@@ -23,10 +23,12 @@ import type { Transceiver } from "../mutable"
23
23
 
24
24
  export const FAMILY_MEMBER_TOKEN_TYPES = {
25
25
  atom_family: `atom`,
26
- mutable_atom_family: `mutable_atom`,
27
- selector_family: `selector`,
28
- readonly_selector_family: `readonly_selector`,
29
26
  molecule_family: `molecule`,
27
+ mutable_atom_family: `mutable_atom`,
28
+ readonly_held_selector_family: `readonly_held_selector`,
29
+ readonly_pure_selector_family: `readonly_pure_selector`,
30
+ writable_held_selector_family: `writable_held_selector`,
31
+ writable_pure_selector_family: `writable_pure_selector`,
30
32
  } as const
31
33
 
32
34
  export function counterfeit<
@@ -47,14 +49,14 @@ export function counterfeit<T, K extends Canonical, Key extends K>(
47
49
  ): AtomToken<T>
48
50
 
49
51
  export function counterfeit<T, K extends Canonical, Key extends K>(
50
- token: WritableSelectorFamilyToken<T, K>,
52
+ token: WritablePureSelectorFamilyToken<T, K>,
51
53
  key: Key,
52
- ): WritableSelectorToken<T>
54
+ ): WritablePureSelectorToken<T>
53
55
 
54
56
  export function counterfeit<T, K extends Canonical, Key extends K>(
55
- token: ReadonlySelectorFamilyToken<T, K>,
57
+ token: ReadonlyPureSelectorFamilyToken<T, K>,
56
58
  key: Key,
57
- ): ReadonlySelectorToken<T>
59
+ ): ReadonlyPureSelectorToken<T>
58
60
 
59
61
  export function counterfeit<T, K extends Canonical, Key extends K>(
60
62
  token: SelectorFamilyToken<T, K>,
@@ -6,8 +6,8 @@ import type {
6
6
  MutableAtomToken,
7
7
  ReadableFamilyToken,
8
8
  ReadableToken,
9
- ReadonlySelectorFamilyToken,
10
- ReadonlySelectorToken,
9
+ ReadonlyPureSelectorFamilyToken,
10
+ ReadonlyPureSelectorToken,
11
11
  RegularAtomFamilyToken,
12
12
  RegularAtomToken,
13
13
  SelectorFamilyToken,
@@ -16,8 +16,8 @@ import type {
16
16
  TimelineToken,
17
17
  TransactionToken,
18
18
  WritableFamilyToken,
19
- WritableSelectorFamilyToken,
20
- WritableSelectorToken,
19
+ WritablePureSelectorFamilyToken,
20
+ WritablePureSelectorToken,
21
21
  WritableToken,
22
22
  } from "atom.io"
23
23
  import type { Canonical, Json } from "atom.io/json"
@@ -31,8 +31,8 @@ import type {
31
31
  MutableAtomFamily,
32
32
  ReadableFamily,
33
33
  ReadableState,
34
- ReadonlySelector,
35
- ReadonlySelectorFamily,
34
+ ReadonlyPureSelector,
35
+ ReadonlyPureSelectorFamily,
36
36
  RegularAtom,
37
37
  RegularAtomFamily,
38
38
  Selector,
@@ -40,8 +40,8 @@ import type {
40
40
  Timeline,
41
41
  Transceiver,
42
42
  WritableFamily,
43
- WritableSelector,
44
- WritableSelectorFamily,
43
+ WritablePureSelector,
44
+ WritablePureSelectorFamily,
45
45
  WritableState,
46
46
  } from ".."
47
47
  import type { Transaction } from "../transaction"
@@ -51,8 +51,12 @@ export function deposit<T extends Transceiver<any>>(
51
51
  state: MutableAtom<T, any>,
52
52
  ): MutableAtomToken<T, any>
53
53
  export function deposit<T>(state: Atom<T>): AtomToken<T>
54
- export function deposit<T>(state: WritableSelector<T>): WritableSelectorToken<T>
55
- export function deposit<T>(state: ReadonlySelector<T>): ReadonlySelectorToken<T>
54
+ export function deposit<T>(
55
+ state: WritablePureSelector<T>,
56
+ ): WritablePureSelectorToken<T>
57
+ export function deposit<T>(
58
+ state: ReadonlyPureSelector<T>,
59
+ ): ReadonlyPureSelectorToken<T>
56
60
  export function deposit<T>(state: Selector<T>): SelectorToken<T>
57
61
  export function deposit<T>(state: WritableState<T>): WritableToken<T>
58
62
  export function deposit<T>(state: ReadableState<T>): ReadableToken<T>
@@ -67,11 +71,11 @@ export function deposit<
67
71
  >(state: MutableAtomFamily<T, J, K>): MutableAtomFamilyToken<T, J, K>
68
72
  export function deposit<T>(state: AtomFamily<T, any>): AtomFamilyToken<T, any>
69
73
  export function deposit<T>(
70
- state: WritableSelectorFamily<T, any>,
71
- ): WritableSelectorFamilyToken<T, any>
74
+ state: WritablePureSelectorFamily<T, any>,
75
+ ): WritablePureSelectorFamilyToken<T, any>
72
76
  export function deposit<T>(
73
- state: ReadonlySelectorFamily<T, any>,
74
- ): ReadonlySelectorFamilyToken<T, any>
77
+ state: ReadonlyPureSelectorFamily<T, any>,
78
+ ): ReadonlyPureSelectorFamilyToken<T, any>
75
79
  export function deposit<T>(
76
80
  state: SelectorFamily<T, any>,
77
81
  ): SelectorFamilyToken<T, any>
@@ -3,22 +3,21 @@ import type {
3
3
  Logger,
4
4
  MoleculeCreation,
5
5
  MoleculeDisposal,
6
- ReadonlySelectorToken,
6
+ SelectorToken,
7
7
  TimelineToken,
8
8
  TransactionToken,
9
- WritableSelectorToken,
10
9
  } from "atom.io"
11
10
  import { AtomIOLogger } from "atom.io"
12
11
  import type { Canonical, stringified } from "atom.io/json"
13
12
 
14
13
  import type {
15
14
  Atom,
15
+ HeldSelectorFamily,
16
16
  MutableAtomFamily,
17
+ PureSelectorFamily,
17
18
  ReadonlySelector,
18
- ReadonlySelectorFamily,
19
19
  RegularAtomFamily,
20
20
  WritableSelector,
21
- WritableSelectorFamily,
22
21
  } from ".."
23
22
  import { isReservedIntrospectionKey } from ".."
24
23
  import type { Join } from "../join"
@@ -47,7 +46,7 @@ export class Store implements Lineage {
47
46
  public defaults: Map<string, any> = new Map()
48
47
 
49
48
  public atoms: Map<string, Atom<any>> = new Map()
50
- public selectors: Map<string, WritableSelector<any>> = new Map()
49
+ public writableSelectors: Map<string, WritableSelector<any>> = new Map()
51
50
  public readonlySelectors: Map<string, ReadonlySelector<any>> = new Map()
52
51
 
53
52
  public atomsThatAreDefault: Set<string> = new Set()
@@ -74,10 +73,10 @@ export class Store implements Lineage {
74
73
  public trackers: Map<string, Tracker<Transceiver<any>>> = new Map()
75
74
  public families: Map<
76
75
  string,
76
+ | HeldSelectorFamily<any, any>
77
77
  | MutableAtomFamily<any, any, any>
78
- | ReadonlySelectorFamily<any, any>
78
+ | PureSelectorFamily<any, any>
79
79
  | RegularAtomFamily<any, any>
80
- | WritableSelectorFamily<any, any>
81
80
  > = new Map()
82
81
  public joins: Map<string, Join<any, any, any, any, any, any>> = new Map()
83
82
 
@@ -230,7 +229,7 @@ export class Store implements Lineage {
230
229
  for (const [, selector] of store.readonlySelectors) {
231
230
  selector.install(this)
232
231
  }
233
- for (const [, selector] of store.selectors) {
232
+ for (const [, selector] of store.writableSelectors) {
234
233
  if (mutableHelpers.has(selector.key)) {
235
234
  continue
236
235
  }
@@ -249,12 +248,8 @@ export class Store implements Lineage {
249
248
  export type StoreEventCarrier = {
250
249
  atomCreation: Subject<AtomToken<unknown>>
251
250
  atomDisposal: Subject<AtomToken<unknown>>
252
- selectorCreation: Subject<
253
- ReadonlySelectorToken<unknown> | WritableSelectorToken<unknown>
254
- >
255
- selectorDisposal: Subject<
256
- ReadonlySelectorToken<unknown> | WritableSelectorToken<unknown>
257
- >
251
+ selectorCreation: Subject<SelectorToken<unknown>>
252
+ selectorDisposal: Subject<SelectorToken<unknown>>
258
253
  timelineCreation: Subject<TimelineToken<unknown>>
259
254
  transactionCreation: Subject<TransactionToken<Func>>
260
255
  transactionApplying: StatefulSubject<TransactionProgress<Func> | null>