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.
- package/data/dist/index.cjs +152 -63
- package/data/dist/index.d.ts +6 -0
- package/data/dist/index.js +3 -3
- package/data/src/join.ts +164 -51
- package/data/src/struct-family.ts +2 -2
- package/dist/chunk-6MLFYN32.js +18 -0
- package/dist/{chunk-HITX3MO4.js → chunk-7DT3PVS3.js} +151 -62
- package/dist/{chunk-RT43TVKP.js → chunk-GVHKIJ3G.js} +1 -1
- package/dist/chunk-OAYGID5B.js +27 -0
- package/dist/index.cjs +4 -18
- package/dist/index.d.ts +71 -28
- package/dist/index.js +6 -19
- package/ephemeral/dist/index.cjs +11 -0
- package/ephemeral/dist/index.js +9 -0
- package/ephemeral/package.json +16 -0
- package/ephemeral/src/index.ts +1 -0
- package/eslint-plugin/dist/index.cjs +155 -1
- package/eslint-plugin/dist/index.js +155 -1
- package/eslint-plugin/src/rules/index.ts +1 -0
- package/eslint-plugin/src/rules/lifespan.ts +203 -0
- package/eslint-plugin/src/rules/synchronous-selector-dependencies.ts +1 -65
- package/eslint-plugin/src/walk.ts +73 -0
- package/immortal/dist/index.cjs +260 -0
- package/immortal/dist/index.js +212 -0
- package/immortal/package.json +16 -0
- package/immortal/src/index.ts +3 -0
- package/immortal/src/make-molecule.ts +222 -0
- package/immortal/src/molecule.ts +167 -0
- package/immortal/src/seek-state.ts +73 -0
- package/internal/dist/index.cjs +1242 -837
- package/internal/dist/index.d.ts +135 -22
- package/internal/dist/index.js +1215 -838
- package/internal/src/atom/create-regular-atom.ts +0 -2
- package/internal/src/atom/create-standalone-atom.ts +6 -2
- package/internal/src/atom/dispose-atom.ts +26 -3
- package/internal/src/families/create-readonly-selector-family.ts +15 -10
- package/internal/src/families/create-regular-atom-family.ts +20 -21
- package/internal/src/families/create-writable-selector-family.ts +13 -9
- package/{src/dispose.ts → internal/src/families/dispose-from-store.ts} +7 -4
- package/internal/src/families/find-in-store.ts +11 -6
- package/internal/src/families/index.ts +3 -0
- package/internal/src/families/init-family-member.ts +112 -0
- package/internal/src/families/seek-in-store.ts +123 -0
- package/internal/src/get-state/get-from-store.ts +2 -2
- package/internal/src/ingest-updates/index.ts +1 -0
- package/internal/src/ingest-updates/ingest-creation-disposal.ts +104 -0
- package/internal/src/ingest-updates/ingest-transaction-update.ts +26 -4
- package/internal/src/mutable/create-mutable-atom-family.ts +22 -24
- package/internal/src/mutable/create-mutable-atom.ts +3 -3
- package/internal/src/mutable/get-json-family.ts +2 -2
- package/internal/src/mutable/get-json-token.ts +26 -12
- package/internal/src/mutable/tracker-family.ts +21 -19
- package/internal/src/not-found-error.ts +16 -3
- package/internal/src/selector/create-readonly-selector.ts +2 -3
- package/internal/src/selector/create-standalone-selector.ts +6 -2
- package/internal/src/selector/create-writable-selector.ts +2 -3
- package/internal/src/selector/dispose-selector.ts +68 -24
- package/internal/src/selector/register-selector.ts +10 -5
- package/internal/src/set-state/set-into-store.ts +2 -2
- package/internal/src/set-state/stow-update.ts +5 -1
- package/internal/src/store/deposit.ts +41 -7
- package/internal/src/store/index.ts +0 -1
- package/internal/src/store/store.ts +29 -5
- package/internal/src/store/withdraw.ts +28 -1
- package/internal/src/subscribe/subscribe-to-state.ts +2 -2
- package/internal/src/timeline/add-atom-to-timeline.ts +206 -182
- package/internal/src/timeline/create-timeline.ts +181 -60
- package/internal/src/timeline/time-travel.ts +20 -0
- package/internal/src/transaction/apply-transaction.ts +2 -12
- package/internal/src/transaction/build-transaction.ts +16 -2
- package/introspection/dist/index.cjs +40 -53
- package/introspection/dist/index.js +40 -53
- package/introspection/src/attach-atom-index.ts +38 -48
- package/introspection/src/attach-selector-index.ts +45 -50
- package/introspection/src/attach-timeline-family.ts +1 -0
- package/json/dist/index.cjs +40 -6
- package/json/dist/index.js +44 -9
- package/json/src/select-json-family.ts +47 -9
- package/package.json +30 -10
- package/react/dist/index.cjs +1 -1
- package/react/dist/index.js +1 -1
- package/react/src/use-json.ts +1 -1
- package/react-devtools/dist/index.cjs +69 -57
- package/react-devtools/dist/index.js +62 -49
- package/react-devtools/src/StateIndex.tsx +2 -1
- package/react-devtools/src/TimelineIndex.tsx +17 -14
- package/react-devtools/src/TransactionIndex.tsx +7 -7
- package/react-devtools/src/Updates.tsx +41 -32
- package/realtime-client/dist/index.cjs +3 -3
- package/realtime-client/dist/index.js +3 -3
- package/realtime-client/src/pull-mutable-atom-family-member.ts +1 -1
- package/realtime-client/src/pull-mutable-atom.ts +1 -1
- package/realtime-client/src/sync-continuity.ts +1 -2
- package/realtime-react/dist/index.cjs +1 -1
- package/realtime-react/dist/index.js +1 -1
- package/realtime-server/dist/index.cjs +39 -27
- package/realtime-server/dist/index.d.ts +1 -1
- package/realtime-server/dist/index.js +27 -16
- package/realtime-server/src/realtime-continuity-synchronizer.ts +5 -3
- package/realtime-server/src/realtime-mutable-family-provider.ts +2 -1
- package/realtime-server/src/realtime-mutable-provider.ts +1 -1
- package/realtime-server/src/realtime-server-stores/server-sync-store.ts +21 -11
- package/realtime-testing/dist/index.cjs +7 -2
- package/realtime-testing/dist/index.js +8 -5
- package/realtime-testing/src/setup-realtime-test.tsx +5 -2
- package/src/atom.ts +19 -7
- package/src/dispose-state.ts +10 -0
- package/src/index.ts +5 -2
- package/src/selector.ts +13 -7
- package/src/silo.ts +3 -3
- package/src/subscribe.ts +8 -4
- package/src/timeline.ts +18 -1
- package/src/transaction.ts +59 -4
- package/dist/chunk-BF4MVQF6.js +0 -44
- package/internal/src/store/withdraw-new-family-member.ts +0 -69
- /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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return
|
|
49
|
-
}
|
|
44
|
+
store.on.atomCreation.subscribe(`introspection`, (atomToken) => {
|
|
45
|
+
if (atomToken.key.includes(`👁🗨`)) {
|
|
46
|
+
return
|
|
47
|
+
}
|
|
50
48
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
|
|
66
|
-
} else {
|
|
67
|
-
self.set(atomToken.key, atomToken)
|
|
61
|
+
self.set(familyKey, familyNode)
|
|
68
62
|
}
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
(selectorToken)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
47
|
+
store.on.selectorCreation.subscribe(
|
|
48
|
+
`introspection`,
|
|
49
|
+
(selectorToken) => {
|
|
50
|
+
if (selectorToken.key.includes(`👁🗨`)) {
|
|
51
|
+
return
|
|
52
|
+
}
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
70
|
-
} else {
|
|
71
|
-
self.set(selectorToken.key, selectorToken)
|
|
66
|
+
self.set(familyKey, familyNode)
|
|
72
67
|
}
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
90
|
+
} else {
|
|
91
|
+
self.delete(selectorToken.key)
|
|
92
|
+
}
|
|
93
|
+
return self
|
|
94
|
+
})
|
|
95
|
+
},
|
|
96
|
+
)
|
|
102
97
|
},
|
|
103
98
|
],
|
|
104
99
|
},
|
package/json/dist/index.cjs
CHANGED
|
@@ -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 }) =>
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
(
|
|
32
|
-
if (token.family) {
|
|
33
|
-
jsonFamily
|
|
65
|
+
(event) => {
|
|
66
|
+
if (event.token.family) {
|
|
67
|
+
internal.seekInStore(jsonFamily, parseJson(event.token.family.subKey), store);
|
|
34
68
|
}
|
|
35
69
|
}
|
|
36
70
|
);
|
package/json/dist/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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 }) =>
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
(
|
|
32
|
-
if (token.family) {
|
|
33
|
-
jsonFamily
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
(
|
|
55
|
-
if (token.family) {
|
|
56
|
-
jsonFamily
|
|
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.
|
|
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.
|
|
57
|
+
"@types/react": "18.3.2",
|
|
58
58
|
"@types/tmp": "0.2.6",
|
|
59
|
-
"@typescript-eslint/parser": "7.
|
|
60
|
-
"@typescript-eslint/rule-tester": "7.
|
|
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.
|
|
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.
|
|
68
|
-
"framer-motion": "11.
|
|
69
|
-
"happy-dom": "14.
|
|
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.
|
|
73
|
+
"preact": "10.22.0",
|
|
74
74
|
"react": "18.3.1",
|
|
75
75
|
"react-dom": "18.3.1",
|
|
76
|
-
"react-router-dom": "6.23.
|
|
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",
|
package/react/dist/index.cjs
CHANGED
|
@@ -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) {
|
package/react/dist/index.js
CHANGED
|
@@ -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) {
|
package/react/src/use-json.ts
CHANGED