atom.io 0.21.1 → 0.23.0

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/data/dist/index.cjs +152 -63
  2. package/data/dist/index.d.ts +6 -0
  3. package/data/dist/index.js +3 -3
  4. package/data/src/join.ts +164 -51
  5. package/data/src/struct-family.ts +2 -2
  6. package/dist/chunk-6MLFYN32.js +18 -0
  7. package/dist/{chunk-HITX3MO4.js → chunk-7DT3PVS3.js} +151 -62
  8. package/dist/{chunk-RT43TVKP.js → chunk-GVHKIJ3G.js} +1 -1
  9. package/dist/chunk-OAYGID5B.js +27 -0
  10. package/dist/index.cjs +4 -18
  11. package/dist/index.d.ts +71 -28
  12. package/dist/index.js +6 -19
  13. package/ephemeral/dist/index.cjs +11 -0
  14. package/ephemeral/dist/index.js +9 -0
  15. package/ephemeral/package.json +16 -0
  16. package/ephemeral/src/index.ts +1 -0
  17. package/eslint-plugin/dist/index.cjs +155 -1
  18. package/eslint-plugin/dist/index.js +155 -1
  19. package/eslint-plugin/src/rules/index.ts +1 -0
  20. package/eslint-plugin/src/rules/lifespan.ts +203 -0
  21. package/eslint-plugin/src/rules/synchronous-selector-dependencies.ts +1 -65
  22. package/eslint-plugin/src/walk.ts +73 -0
  23. package/immortal/dist/index.cjs +260 -0
  24. package/immortal/dist/index.js +212 -0
  25. package/immortal/package.json +16 -0
  26. package/immortal/src/index.ts +3 -0
  27. package/immortal/src/make-molecule.ts +222 -0
  28. package/immortal/src/molecule.ts +167 -0
  29. package/immortal/src/seek-state.ts +73 -0
  30. package/internal/dist/index.cjs +1242 -837
  31. package/internal/dist/index.d.ts +135 -22
  32. package/internal/dist/index.js +1215 -838
  33. package/internal/src/atom/create-regular-atom.ts +0 -2
  34. package/internal/src/atom/create-standalone-atom.ts +6 -2
  35. package/internal/src/atom/dispose-atom.ts +26 -3
  36. package/internal/src/families/create-readonly-selector-family.ts +15 -10
  37. package/internal/src/families/create-regular-atom-family.ts +20 -21
  38. package/internal/src/families/create-writable-selector-family.ts +13 -9
  39. package/{src/dispose.ts → internal/src/families/dispose-from-store.ts} +7 -4
  40. package/internal/src/families/find-in-store.ts +11 -6
  41. package/internal/src/families/index.ts +3 -0
  42. package/internal/src/families/init-family-member.ts +112 -0
  43. package/internal/src/families/seek-in-store.ts +123 -0
  44. package/internal/src/get-state/get-from-store.ts +2 -2
  45. package/internal/src/ingest-updates/index.ts +1 -0
  46. package/internal/src/ingest-updates/ingest-creation-disposal.ts +104 -0
  47. package/internal/src/ingest-updates/ingest-transaction-update.ts +26 -4
  48. package/internal/src/mutable/create-mutable-atom-family.ts +22 -24
  49. package/internal/src/mutable/create-mutable-atom.ts +3 -3
  50. package/internal/src/mutable/get-json-family.ts +2 -2
  51. package/internal/src/mutable/get-json-token.ts +26 -12
  52. package/internal/src/mutable/tracker-family.ts +21 -19
  53. package/internal/src/not-found-error.ts +16 -3
  54. package/internal/src/selector/create-readonly-selector.ts +2 -3
  55. package/internal/src/selector/create-standalone-selector.ts +6 -2
  56. package/internal/src/selector/create-writable-selector.ts +2 -3
  57. package/internal/src/selector/dispose-selector.ts +68 -24
  58. package/internal/src/selector/register-selector.ts +10 -5
  59. package/internal/src/set-state/set-into-store.ts +2 -2
  60. package/internal/src/set-state/stow-update.ts +5 -1
  61. package/internal/src/store/deposit.ts +41 -7
  62. package/internal/src/store/index.ts +0 -1
  63. package/internal/src/store/store.ts +29 -5
  64. package/internal/src/store/withdraw.ts +28 -1
  65. package/internal/src/subscribe/subscribe-to-state.ts +2 -2
  66. package/internal/src/timeline/add-atom-to-timeline.ts +206 -182
  67. package/internal/src/timeline/create-timeline.ts +181 -60
  68. package/internal/src/timeline/time-travel.ts +20 -0
  69. package/internal/src/transaction/apply-transaction.ts +2 -12
  70. package/internal/src/transaction/build-transaction.ts +16 -2
  71. package/introspection/dist/index.cjs +40 -53
  72. package/introspection/dist/index.js +40 -53
  73. package/introspection/src/attach-atom-index.ts +38 -48
  74. package/introspection/src/attach-selector-index.ts +45 -50
  75. package/introspection/src/attach-timeline-family.ts +1 -0
  76. package/json/dist/index.cjs +40 -6
  77. package/json/dist/index.js +44 -9
  78. package/json/src/select-json-family.ts +47 -9
  79. package/package.json +30 -10
  80. package/react/dist/index.cjs +1 -1
  81. package/react/dist/index.js +1 -1
  82. package/react/src/use-json.ts +1 -1
  83. package/react-devtools/dist/index.cjs +69 -57
  84. package/react-devtools/dist/index.js +62 -49
  85. package/react-devtools/src/StateIndex.tsx +2 -1
  86. package/react-devtools/src/TimelineIndex.tsx +17 -14
  87. package/react-devtools/src/TransactionIndex.tsx +7 -7
  88. package/react-devtools/src/Updates.tsx +41 -32
  89. package/realtime-client/dist/index.cjs +3 -3
  90. package/realtime-client/dist/index.js +3 -3
  91. package/realtime-client/src/pull-mutable-atom-family-member.ts +1 -1
  92. package/realtime-client/src/pull-mutable-atom.ts +1 -1
  93. package/realtime-client/src/sync-continuity.ts +1 -2
  94. package/realtime-react/dist/index.cjs +1 -1
  95. package/realtime-react/dist/index.js +1 -1
  96. package/realtime-server/dist/index.cjs +39 -27
  97. package/realtime-server/dist/index.d.ts +1 -1
  98. package/realtime-server/dist/index.js +27 -16
  99. package/realtime-server/src/realtime-continuity-synchronizer.ts +5 -3
  100. package/realtime-server/src/realtime-mutable-family-provider.ts +2 -1
  101. package/realtime-server/src/realtime-mutable-provider.ts +1 -1
  102. package/realtime-server/src/realtime-server-stores/server-sync-store.ts +21 -11
  103. package/realtime-testing/dist/index.cjs +7 -2
  104. package/realtime-testing/dist/index.js +8 -5
  105. package/realtime-testing/src/setup-realtime-test.tsx +5 -2
  106. package/src/atom.ts +19 -7
  107. package/src/dispose-state.ts +10 -0
  108. package/src/index.ts +5 -2
  109. package/src/selector.ts +13 -7
  110. package/src/silo.ts +3 -3
  111. package/src/subscribe.ts +8 -4
  112. package/src/timeline.ts +18 -1
  113. package/src/transaction.ts +59 -4
  114. package/dist/chunk-BF4MVQF6.js +0 -44
  115. package/internal/src/store/withdraw-new-family-member.ts +0 -69
  116. /package/{src → ephemeral/src}/find-state.ts +0 -0
@@ -41,59 +41,49 @@ export const attachAtomIndex = (
41
41
  },
42
42
  effects: [
43
43
  ({ setSelf }) => {
44
- const unsubscribeFromAtomCreation = store.on.atomCreation.subscribe(
45
- `introspection`,
46
- (atomToken) => {
47
- if (atomToken.key.includes(`👁‍🗨`)) {
48
- return
49
- }
44
+ store.on.atomCreation.subscribe(`introspection`, (atomToken) => {
45
+ if (atomToken.key.includes(`👁‍🗨`)) {
46
+ return
47
+ }
50
48
 
51
- setSelf((self) => {
52
- if (atomToken.family) {
53
- const { key: familyKey, subKey } = atomToken.family
54
- let familyNode = self.get(familyKey)
55
- if (
56
- familyNode === undefined ||
57
- !(`familyMembers` in familyNode)
58
- ) {
59
- familyNode = {
60
- key: familyKey,
61
- familyMembers: new Map(),
62
- }
63
- self.set(familyKey, familyNode)
49
+ setSelf((self) => {
50
+ if (atomToken.family) {
51
+ const { key: familyKey, subKey } = atomToken.family
52
+ let familyNode = self.get(familyKey)
53
+ if (
54
+ familyNode === undefined ||
55
+ !(`familyMembers` in familyNode)
56
+ ) {
57
+ familyNode = {
58
+ key: familyKey,
59
+ familyMembers: new Map(),
64
60
  }
65
- familyNode.familyMembers.set(subKey, atomToken)
66
- } else {
67
- self.set(atomToken.key, atomToken)
61
+ self.set(familyKey, familyNode)
68
62
  }
69
- return self
70
- })
71
- },
72
- )
73
- const unsubscribeFromAtomDisposal = store.on.atomDisposal.subscribe(
74
- `introspection`,
75
- (atomToken) => {
76
- setSelf((self) => {
77
- if (atomToken.family) {
78
- const { key: familyKey, subKey } = atomToken.family
79
- const familyNode = self.get(familyKey)
80
- if (familyNode && `familyMembers` in familyNode) {
81
- familyNode.familyMembers.delete(subKey)
82
- if (familyNode.familyMembers.size === 0) {
83
- self.delete(familyKey)
84
- }
63
+ familyNode.familyMembers.set(subKey, atomToken)
64
+ } else {
65
+ self.set(atomToken.key, atomToken)
66
+ }
67
+ return self
68
+ })
69
+ })
70
+ store.on.atomDisposal.subscribe(`introspection`, (atomToken) => {
71
+ setSelf((self) => {
72
+ if (atomToken.family) {
73
+ const { key: familyKey, subKey } = atomToken.family
74
+ const familyNode = self.get(familyKey)
75
+ if (familyNode && `familyMembers` in familyNode) {
76
+ familyNode.familyMembers.delete(subKey)
77
+ if (familyNode.familyMembers.size === 0) {
78
+ self.delete(familyKey)
85
79
  }
86
- } else {
87
- self.delete(atomToken.key)
88
80
  }
89
- return self
90
- })
91
- },
92
- )
93
- return () => {
94
- unsubscribeFromAtomCreation()
95
- unsubscribeFromAtomDisposal()
96
- }
81
+ } else {
82
+ self.delete(atomToken.key)
83
+ }
84
+ return self
85
+ })
86
+ })
97
87
  },
98
88
  ],
99
89
  },
@@ -44,61 +44,56 @@ export const attachSelectorIndex = (
44
44
  },
45
45
  effects: [
46
46
  ({ setSelf }) => {
47
- const unsubscribeFromSelectorCreation =
48
- store.on.selectorCreation.subscribe(
49
- `introspection`,
50
- (selectorToken) => {
51
- if (selectorToken.key.includes(`👁‍🗨`)) {
52
- return
53
- }
47
+ store.on.selectorCreation.subscribe(
48
+ `introspection`,
49
+ (selectorToken) => {
50
+ if (selectorToken.key.includes(`👁‍🗨`)) {
51
+ return
52
+ }
54
53
 
55
- setSelf((self) => {
56
- if (selectorToken.family) {
57
- const { key: familyKey, subKey } = selectorToken.family
58
- let familyNode = self.get(familyKey)
59
- if (
60
- familyNode === undefined ||
61
- !(`familyMembers` in familyNode)
62
- ) {
63
- familyNode = {
64
- key: familyKey,
65
- familyMembers: new Map(),
66
- }
67
- self.set(familyKey, familyNode)
54
+ setSelf((self) => {
55
+ if (selectorToken.family) {
56
+ const { key: familyKey, subKey } = selectorToken.family
57
+ let familyNode = self.get(familyKey)
58
+ if (
59
+ familyNode === undefined ||
60
+ !(`familyMembers` in familyNode)
61
+ ) {
62
+ familyNode = {
63
+ key: familyKey,
64
+ familyMembers: new Map(),
68
65
  }
69
- familyNode.familyMembers.set(subKey, selectorToken)
70
- } else {
71
- self.set(selectorToken.key, selectorToken)
66
+ self.set(familyKey, familyNode)
72
67
  }
73
- return self
74
- })
75
- },
76
- )
77
- const unsubscribeFromSelectorDisposal =
78
- store.on.selectorDisposal.subscribe(
79
- `introspection`,
80
- (selectorToken) => {
81
- setSelf((self) => {
82
- if (selectorToken.family) {
83
- const { key: familyKey, subKey } = selectorToken.family
84
- const familyNode = self.get(familyKey)
85
- if (familyNode && `familyMembers` in familyNode) {
86
- familyNode.familyMembers.delete(subKey)
87
- if (familyNode.familyMembers.size === 0) {
88
- self.delete(familyKey)
89
- }
68
+ familyNode.familyMembers.set(subKey, selectorToken)
69
+ } else {
70
+ self.set(selectorToken.key, selectorToken)
71
+ }
72
+ return self
73
+ })
74
+ },
75
+ )
76
+
77
+ store.on.selectorDisposal.subscribe(
78
+ `introspection`,
79
+ (selectorToken) => {
80
+ setSelf((self) => {
81
+ if (selectorToken.family) {
82
+ const { key: familyKey, subKey } = selectorToken.family
83
+ const familyNode = self.get(familyKey)
84
+ if (familyNode && `familyMembers` in familyNode) {
85
+ familyNode.familyMembers.delete(subKey)
86
+ if (familyNode.familyMembers.size === 0) {
87
+ self.delete(familyKey)
90
88
  }
91
- } else {
92
- self.delete(selectorToken.key)
93
89
  }
94
- return self
95
- })
96
- },
97
- )
98
- return () => {
99
- unsubscribeFromSelectorCreation()
100
- unsubscribeFromSelectorDisposal()
101
- }
90
+ } else {
91
+ self.delete(selectorToken.key)
92
+ }
93
+ return self
94
+ })
95
+ },
96
+ )
102
97
  },
103
98
  ],
104
99
  },
@@ -27,6 +27,7 @@ export const attachTimelineFamily = (
27
27
  transactionKey: null,
28
28
  install: () => {},
29
29
  subject: new Subject(),
30
+ subscriptions: new Map(),
30
31
  },
31
32
  effects: (key) => [
32
33
  ({ setSelf }) => {
@@ -19,18 +19,52 @@ function selectJsonFamily(family, transform, store = internal.IMPLICIT.STORE) {
19
19
  const jsonFamily = internal.createSelectorFamily(
20
20
  {
21
21
  key: `${family.key}:JSON`,
22
- get: (key) => ({ get }) => transform.toJson(get(family(key))),
23
- set: (key) => ({ set }, newValue) => {
24
- set(family(key), transform.fromJson(newValue));
22
+ get: (key) => ({ seek, get }) => {
23
+ const existingState = seek(family, key);
24
+ if (existingState) {
25
+ return transform.toJson(get(existingState));
26
+ }
27
+ const stringKey = stringifyJson(key);
28
+ const molecule = store.molecules.get(stringKey);
29
+ if (molecule) {
30
+ const atom = molecule.bond(family);
31
+ return transform.toJson(get(atom));
32
+ }
33
+ if (store.config.lifespan === `immortal`) {
34
+ throw new Error(`No molecule found for key "${stringKey}"`);
35
+ }
36
+ const newToken = internal.initFamilyMember(family, key, store);
37
+ return transform.toJson(get(newToken));
38
+ },
39
+ set: (key) => ({ seek, set }, newValue) => {
40
+ const existingState = seek(family, key);
41
+ if (existingState) {
42
+ set(existingState, transform.fromJson(newValue));
43
+ } else {
44
+ const stringKey = stringifyJson(key);
45
+ const molecule = store.molecules.get(stringKey);
46
+ if (molecule) {
47
+ const atom = molecule.bond(family);
48
+ set(atom, transform.fromJson(newValue));
49
+ } else {
50
+ if (store.config.lifespan === `immortal`) {
51
+ throw new Error(`No molecule found for key "${stringKey}"`);
52
+ }
53
+ set(
54
+ internal.initFamilyMember(family, key, store),
55
+ transform.fromJson(newValue)
56
+ );
57
+ }
58
+ }
25
59
  }
26
60
  },
27
61
  store
28
62
  );
29
63
  family.subject.subscribe(
30
64
  `store=${store.config.name}::json-selector-family`,
31
- (token) => {
32
- if (token.family) {
33
- jsonFamily(parseJson(token.family.subKey));
65
+ (event) => {
66
+ if (event.token.family) {
67
+ internal.seekInStore(jsonFamily, parseJson(event.token.family.subKey), store);
34
68
  }
35
69
  }
36
70
  );
@@ -1,7 +1,8 @@
1
- import { parseJson } from '../../dist/chunk-BF4MVQF6.js';
2
- export { JSON_DEFAULTS, JSON_TYPE_NAMES, isBoolean, isNull, isNumber, isPrimitive, isString, parseJson, stringSetJsonInterface, stringifyJson } from '../../dist/chunk-BF4MVQF6.js';
1
+ export { isBoolean, isNull, isNumber, isPrimitive, isString } from '../../dist/chunk-6MLFYN32.js';
2
+ import { stringifyJson, parseJson } from '../../dist/chunk-OAYGID5B.js';
3
+ export { JSON_DEFAULTS, JSON_TYPE_NAMES, parseJson, stringSetJsonInterface, stringifyJson } from '../../dist/chunk-OAYGID5B.js';
3
4
  import '../../dist/chunk-F2X4B4VY.js';
4
- import { createStandaloneSelector, IMPLICIT, createSelectorFamily } from 'atom.io/internal';
5
+ import { createStandaloneSelector, IMPLICIT, createSelectorFamily, initFamilyMember, seekInStore } from 'atom.io/internal';
5
6
 
6
7
  var selectJson = (atom, transform, store = IMPLICIT.STORE) => {
7
8
  return createStandaloneSelector(
@@ -19,18 +20,52 @@ function selectJsonFamily(family, transform, store = IMPLICIT.STORE) {
19
20
  const jsonFamily = createSelectorFamily(
20
21
  {
21
22
  key: `${family.key}:JSON`,
22
- get: (key) => ({ get }) => transform.toJson(get(family(key))),
23
- set: (key) => ({ set }, newValue) => {
24
- set(family(key), transform.fromJson(newValue));
23
+ get: (key) => ({ seek, get }) => {
24
+ const existingState = seek(family, key);
25
+ if (existingState) {
26
+ return transform.toJson(get(existingState));
27
+ }
28
+ const stringKey = stringifyJson(key);
29
+ const molecule = store.molecules.get(stringKey);
30
+ if (molecule) {
31
+ const atom = molecule.bond(family);
32
+ return transform.toJson(get(atom));
33
+ }
34
+ if (store.config.lifespan === `immortal`) {
35
+ throw new Error(`No molecule found for key "${stringKey}"`);
36
+ }
37
+ const newToken = initFamilyMember(family, key, store);
38
+ return transform.toJson(get(newToken));
39
+ },
40
+ set: (key) => ({ seek, set }, newValue) => {
41
+ const existingState = seek(family, key);
42
+ if (existingState) {
43
+ set(existingState, transform.fromJson(newValue));
44
+ } else {
45
+ const stringKey = stringifyJson(key);
46
+ const molecule = store.molecules.get(stringKey);
47
+ if (molecule) {
48
+ const atom = molecule.bond(family);
49
+ set(atom, transform.fromJson(newValue));
50
+ } else {
51
+ if (store.config.lifespan === `immortal`) {
52
+ throw new Error(`No molecule found for key "${stringKey}"`);
53
+ }
54
+ set(
55
+ initFamilyMember(family, key, store),
56
+ transform.fromJson(newValue)
57
+ );
58
+ }
59
+ }
25
60
  }
26
61
  },
27
62
  store
28
63
  );
29
64
  family.subject.subscribe(
30
65
  `store=${store.config.name}::json-selector-family`,
31
- (token) => {
32
- if (token.family) {
33
- jsonFamily(parseJson(token.family.subKey));
66
+ (event) => {
67
+ if (event.token.family) {
68
+ seekInStore(jsonFamily, parseJson(event.token.family.subKey), store);
34
69
  }
35
70
  }
36
71
  );
@@ -1,9 +1,14 @@
1
1
  import type * as AtomIO from "atom.io"
2
2
  import type { Store, Transceiver } from "atom.io/internal"
3
- import { createSelectorFamily, IMPLICIT } from "atom.io/internal"
3
+ import {
4
+ createSelectorFamily,
5
+ IMPLICIT,
6
+ initFamilyMember,
7
+ seekInStore,
8
+ } from "atom.io/internal"
4
9
 
5
10
  import type { Json, JsonInterface } from "."
6
- import { parseJson } from "."
11
+ import { parseJson, stringifyJson } from "."
7
12
 
8
13
  export function selectJsonFamily<
9
14
  T extends Transceiver<any>,
@@ -39,21 +44,54 @@ export function selectJsonFamily<
39
44
  key: `${family.key}:JSON`,
40
45
  get:
41
46
  (key) =>
42
- ({ get }) =>
43
- transform.toJson(get(family(key))),
47
+ ({ seek, get }) => {
48
+ const existingState = seek(family, key)
49
+ if (existingState) {
50
+ return transform.toJson(get(existingState))
51
+ }
52
+ const stringKey = stringifyJson(key)
53
+ const molecule = store.molecules.get(stringKey)
54
+ if (molecule) {
55
+ const atom = molecule.bond(family)
56
+ return transform.toJson(get(atom))
57
+ }
58
+ if (store.config.lifespan === `immortal`) {
59
+ throw new Error(`No molecule found for key "${stringKey}"`)
60
+ }
61
+ const newToken = initFamilyMember(family, key, store)
62
+ return transform.toJson(get(newToken))
63
+ },
44
64
  set:
45
65
  (key) =>
46
- ({ set }, newValue) => {
47
- set(family(key), transform.fromJson(newValue))
66
+ ({ seek, set }, newValue) => {
67
+ const existingState = seek(family, key)
68
+ if (existingState) {
69
+ set(existingState, transform.fromJson(newValue))
70
+ } else {
71
+ const stringKey = stringifyJson(key)
72
+ const molecule = store.molecules.get(stringKey)
73
+ if (molecule) {
74
+ const atom = molecule.bond(family)
75
+ set(atom, transform.fromJson(newValue))
76
+ } else {
77
+ if (store.config.lifespan === `immortal`) {
78
+ throw new Error(`No molecule found for key "${stringKey}"`)
79
+ }
80
+ set(
81
+ initFamilyMember(family, key, store),
82
+ transform.fromJson(newValue),
83
+ )
84
+ }
85
+ }
48
86
  },
49
87
  },
50
88
  store,
51
89
  )
52
90
  family.subject.subscribe(
53
91
  `store=${store.config.name}::json-selector-family`,
54
- (token) => {
55
- if (token.family) {
56
- jsonFamily(parseJson(token.family.subKey) as K)
92
+ (event) => {
93
+ if (event.token.family) {
94
+ seekInStore(jsonFamily, parseJson(event.token.family.subKey) as K, store)
57
95
  }
58
96
  },
59
97
  )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atom.io",
3
- "version": "0.21.1",
3
+ "version": "0.23.0",
4
4
  "description": "Composable and testable reactive data library.",
5
5
  "homepage": "https://atom.io.fyi",
6
6
  "sideEffects": false,
@@ -54,26 +54,26 @@
54
54
  "@types/estree": "1.0.5",
55
55
  "@types/http-proxy": "1.17.14",
56
56
  "@types/npmlog": "7.0.0",
57
- "@types/react": "18.3.1",
57
+ "@types/react": "18.3.2",
58
58
  "@types/tmp": "0.2.6",
59
- "@typescript-eslint/parser": "7.8.0",
60
- "@typescript-eslint/rule-tester": "7.8.0",
59
+ "@typescript-eslint/parser": "7.10.0",
60
+ "@typescript-eslint/rule-tester": "7.10.0",
61
61
  "@vitest/coverage-v8": "1.6.0",
62
62
  "@vitest/ui": "1.6.0",
63
63
  "concurrently": "8.2.2",
64
- "drizzle-kit": "0.20.18",
64
+ "drizzle-kit": "0.21.3",
65
65
  "drizzle-orm": "0.30.10",
66
66
  "eslint": "npm:eslint@8.57.0",
67
- "eslint-v9": "npm:eslint@9.2.0",
68
- "framer-motion": "11.1.9",
69
- "happy-dom": "14.10.1",
67
+ "eslint-v9": "npm:eslint@9.3.0",
68
+ "framer-motion": "11.2.6",
69
+ "happy-dom": "14.11.0",
70
70
  "http-proxy": "1.18.1",
71
71
  "npmlog": "7.0.1",
72
72
  "postgres": "3.4.4",
73
- "preact": "10.21.0",
73
+ "preact": "10.22.0",
74
74
  "react": "18.3.1",
75
75
  "react-dom": "18.3.1",
76
- "react-router-dom": "6.23.0",
76
+ "react-router-dom": "6.23.1",
77
77
  "socket.io": "4.7.5",
78
78
  "socket.io-client": "4.7.5",
79
79
  "tmp": "0.2.3",
@@ -92,9 +92,15 @@
92
92
  "data/dist",
93
93
  "data/package.json",
94
94
  "data/src",
95
+ "ephemeral/dist",
96
+ "ephemeral/package.json",
97
+ "ephemeral/src",
95
98
  "eslint-plugin/dist",
96
99
  "eslint-plugin/package.json",
97
100
  "eslint-plugin/src",
101
+ "immortal/dist",
102
+ "immortal/package.json",
103
+ "immortal/src",
98
104
  "internal/dist",
99
105
  "internal/package.json",
100
106
  "internal/src",
@@ -144,6 +150,13 @@
144
150
  "import": "./data/dist/index.js",
145
151
  "require": "./data/dist/index.cjs"
146
152
  },
153
+ "./ephemeral/package.json": "./ephemeral/package.json",
154
+ "./ephemeral": {
155
+ "types": "./ephemeral/dist/index.d.ts",
156
+ "browser": "./ephemeral/dist/index.js",
157
+ "import": "./ephemeral/dist/index.js",
158
+ "require": "./ephemeral/dist/index.cjs"
159
+ },
147
160
  "./eslint-plugin/package.json": "./eslint-plugin/package.json",
148
161
  "./eslint-plugin": {
149
162
  "types": "./eslint-plugin/dist/index.d.ts",
@@ -151,6 +164,13 @@
151
164
  "import": "./eslint-plugin/dist/index.js",
152
165
  "require": "./eslint-plugin/dist/index.cjs"
153
166
  },
167
+ "./immortal/package.json": "./immortal/package.json",
168
+ "./immortal": {
169
+ "types": "./immortal/dist/index.d.ts",
170
+ "browser": "./immortal/dist/index.js",
171
+ "import": "./immortal/dist/index.js",
172
+ "require": "./immortal/dist/index.cjs"
173
+ },
154
174
  "./internal/package.json": "./internal/package.json",
155
175
  "./internal": {
156
176
  "types": "./internal/dist/index.d.ts",
@@ -54,7 +54,7 @@ function useO(token, key) {
54
54
  function useJSON(token, key) {
55
55
  const store = React5__namespace.useContext(StoreContext);
56
56
  const stateToken = token.type === `mutable_atom_family` ? internal.findInStore(token, key, store) : token;
57
- const jsonToken = internal.getJsonToken(stateToken);
57
+ const jsonToken = internal.getJsonToken(stateToken, store);
58
58
  return useO(jsonToken);
59
59
  }
60
60
  function useTL(token) {
@@ -32,7 +32,7 @@ function useO(token, key) {
32
32
  function useJSON(token, key) {
33
33
  const store = React5.useContext(StoreContext);
34
34
  const stateToken = token.type === `mutable_atom_family` ? findInStore(token, key, store) : token;
35
- const jsonToken = getJsonToken(stateToken);
35
+ const jsonToken = getJsonToken(stateToken, store);
36
36
  return useO(jsonToken);
37
37
  }
38
38
  function useTL(token) {
@@ -33,6 +33,6 @@ export function useJSON<
33
33
  token.type === `mutable_atom_family`
34
34
  ? findInStore(token, key as Key, store)
35
35
  : token
36
- const jsonToken = getJsonToken(stateToken)
36
+ const jsonToken = getJsonToken(stateToken, store)
37
37
  return useO(jsonToken)
38
38
  }