atom.io 0.27.3 → 0.27.5
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.js +57 -72
- package/data/src/dict.ts +9 -12
- package/data/src/join.ts +25 -26
- package/data/src/struct-family.ts +17 -23
- package/data/src/struct.ts +9 -12
- package/dist/{chunk-ETCFHO7J.js → chunk-6ABWLAGY.js} +246 -159
- package/dist/index.d.ts +4 -4
- package/dist/index.js +33 -53
- package/ephemeral/dist/index.js +1 -1
- package/ephemeral/src/find-state.ts +1 -1
- package/immortal/dist/index.js +2 -2
- package/immortal/src/seek-state.ts +2 -2
- package/internal/dist/index.d.ts +88 -73
- package/internal/dist/index.js +1 -1
- package/internal/src/atom/create-regular-atom.ts +3 -3
- package/internal/src/atom/create-standalone-atom.ts +7 -5
- package/internal/src/families/create-atom-family.ts +5 -5
- package/internal/src/families/create-readonly-selector-family.ts +35 -7
- package/internal/src/families/create-regular-atom-family.ts +16 -6
- package/internal/src/families/create-selector-family.ts +5 -5
- package/internal/src/families/create-writable-selector-family.ts +35 -8
- package/internal/src/families/dispose-from-store.ts +22 -16
- package/internal/src/families/find-in-store.ts +11 -11
- package/internal/src/families/init-family-member.ts +9 -9
- package/internal/src/families/seek-in-store.ts +10 -13
- package/internal/src/get-state/get-from-store.ts +58 -20
- package/internal/src/get-state/read-or-compute-value.ts +1 -1
- package/internal/src/index.ts +5 -3
- package/internal/src/ingest-updates/ingest-atom-update.ts +1 -1
- package/internal/src/ingest-updates/ingest-creation-disposal.ts +5 -5
- package/internal/src/molecule/create-molecule-family.ts +1 -1
- package/internal/src/molecule/dispose-molecule.ts +1 -1
- package/internal/src/molecule/grow-molecule-in-store.ts +1 -1
- package/internal/src/molecule/make-molecule-in-store.ts +5 -5
- package/internal/src/mutable/create-mutable-atom-family.ts +15 -6
- package/internal/src/mutable/create-mutable-atom.ts +3 -3
- package/internal/src/mutable/get-json-token.ts +2 -2
- package/internal/src/mutable/tracker-family.ts +3 -3
- package/internal/src/mutable/tracker.ts +14 -18
- package/internal/src/selector/create-readonly-selector.ts +2 -2
- package/internal/src/selector/create-standalone-selector.ts +5 -5
- package/internal/src/selector/create-writable-selector.ts +8 -8
- package/internal/src/selector/register-selector.ts +9 -9
- package/internal/src/set-state/set-into-store.ts +21 -18
- package/internal/src/store/deposit.ts +62 -21
- package/internal/src/store/store.ts +2 -1
- package/internal/src/subscribe/index.ts +2 -0
- package/internal/src/subscribe/subscribe-in-store.ts +62 -0
- package/internal/src/timeline/time-travel.ts +1 -1
- package/internal/src/transaction/build-transaction.ts +7 -6
- package/introspection/dist/index.js +66 -87
- package/introspection/src/attach-atom-index.ts +5 -8
- package/introspection/src/attach-selector-index.ts +6 -8
- package/introspection/src/attach-timeline-family.ts +25 -28
- package/introspection/src/attach-timeline-index.ts +5 -8
- package/introspection/src/attach-transaction-index.ts +5 -8
- package/introspection/src/attach-transaction-logs.ts +21 -27
- package/json/dist/index.js +12 -15
- package/json/src/select-json-family.ts +4 -4
- package/json/src/select-json.ts +6 -9
- package/package.json +4 -4
- package/react/dist/index.js +7 -7
- package/react/src/parse-state-overloads.ts +2 -2
- package/react/src/use-i.ts +1 -1
- package/react/src/use-json.ts +2 -2
- package/react/src/use-o.ts +2 -2
- package/realtime-client/dist/index.js +35 -55
- package/realtime-client/src/pull-atom-family-member.ts +1 -1
- package/realtime-client/src/pull-atom.ts +1 -1
- package/realtime-client/src/pull-mutable-atom-family-member.ts +3 -3
- package/realtime-client/src/pull-mutable-atom.ts +3 -3
- package/realtime-client/src/sync-continuity.ts +27 -47
- package/realtime-react/dist/index.js +3 -3
- package/realtime-react/src/use-pull-atom-family-member.ts +1 -1
- package/realtime-react/src/use-pull-mutable-family-member.ts +1 -1
- package/realtime-react/src/use-pull-selector-family-member.ts +1 -1
- package/realtime-server/dist/index.js +32 -32
- package/realtime-server/src/realtime-continuity-synchronizer.ts +16 -16
- package/realtime-server/src/realtime-family-provider.ts +3 -3
- package/realtime-server/src/realtime-mutable-family-provider.ts +5 -5
- package/realtime-server/src/realtime-mutable-provider.ts +2 -2
- package/realtime-server/src/realtime-state-provider.ts +1 -1
- package/realtime-server/src/realtime-state-receiver.ts +1 -1
- package/realtime-testing/dist/index.js +7 -7
- package/realtime-testing/src/setup-realtime-test.tsx +7 -7
- package/src/atom.ts +2 -2
- package/src/dispose-state.ts +2 -2
- package/src/get-state.ts +9 -13
- package/src/logger.ts +4 -0
- package/src/molecule.ts +1 -1
- package/src/selector.ts +2 -2
- package/src/set-state.ts +10 -7
- package/src/silo.ts +23 -53
- package/src/subscribe.ts +3 -23
- package/src/timeline.ts +2 -2
- package/internal/src/families/throw-in-case-of-conflicting-family.ts +0 -18
|
@@ -27,8 +27,8 @@ export function syncContinuity<F extends Func>(
|
|
|
27
27
|
store: Store,
|
|
28
28
|
): () => void {
|
|
29
29
|
const continuityKey = continuity.key
|
|
30
|
-
const optimisticUpdates = getFromStore(
|
|
31
|
-
const confirmedUpdates = getFromStore(
|
|
30
|
+
const optimisticUpdates = getFromStore(store, optimisticUpdateQueue)
|
|
31
|
+
const confirmedUpdates = getFromStore(store, confirmedUpdateQueue)
|
|
32
32
|
|
|
33
33
|
const initializeContinuity = (epoch: number, payload: Json.Array) => {
|
|
34
34
|
socket.off(`continuity-init:${continuityKey}`, initializeContinuity)
|
|
@@ -41,9 +41,9 @@ export function syncContinuity<F extends Func>(
|
|
|
41
41
|
} else {
|
|
42
42
|
v = x
|
|
43
43
|
if (`type` in k && k.type === `mutable_atom`) {
|
|
44
|
-
k = getJsonToken(
|
|
44
|
+
k = getJsonToken(store, k)
|
|
45
45
|
}
|
|
46
|
-
setIntoStore(k, v
|
|
46
|
+
setIntoStore(store, k, v)
|
|
47
47
|
}
|
|
48
48
|
i++
|
|
49
49
|
}
|
|
@@ -65,14 +65,10 @@ export function syncContinuity<F extends Func>(
|
|
|
65
65
|
continuityKey,
|
|
66
66
|
`reconciling updates`,
|
|
67
67
|
)
|
|
68
|
-
setIntoStore(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return queue
|
|
73
|
-
},
|
|
74
|
-
store,
|
|
75
|
-
)
|
|
68
|
+
setIntoStore(store, optimisticUpdateQueue, (queue) => {
|
|
69
|
+
queue.shift()
|
|
70
|
+
return queue
|
|
71
|
+
})
|
|
76
72
|
if (optimisticUpdate.id === confirmedUpdate.id) {
|
|
77
73
|
const clientResult = JSON.stringify(optimisticUpdate.updates)
|
|
78
74
|
const serverResult = JSON.stringify(confirmedUpdate.updates)
|
|
@@ -199,15 +195,11 @@ export function syncContinuity<F extends Func>(
|
|
|
199
195
|
`pushing confirmed update to queue`,
|
|
200
196
|
confirmed,
|
|
201
197
|
)
|
|
202
|
-
setIntoStore(
|
|
203
|
-
|
|
204
|
-
(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
return queue
|
|
208
|
-
},
|
|
209
|
-
store,
|
|
210
|
-
)
|
|
198
|
+
setIntoStore(store, confirmedUpdateQueue, (queue) => {
|
|
199
|
+
queue.push(confirmed)
|
|
200
|
+
queue.sort((a, b) => a.epoch - b.epoch)
|
|
201
|
+
return queue
|
|
202
|
+
})
|
|
211
203
|
}
|
|
212
204
|
}
|
|
213
205
|
} else {
|
|
@@ -260,15 +252,11 @@ export function syncContinuity<F extends Func>(
|
|
|
260
252
|
continuityKey,
|
|
261
253
|
`pushing confirmed update #${confirmed.epoch} to queue`,
|
|
262
254
|
)
|
|
263
|
-
setIntoStore(
|
|
264
|
-
|
|
265
|
-
(
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
return queue
|
|
269
|
-
},
|
|
270
|
-
store,
|
|
271
|
-
)
|
|
255
|
+
setIntoStore(store, confirmedUpdateQueue, (queue) => {
|
|
256
|
+
queue.push(confirmed)
|
|
257
|
+
queue.sort((a, b) => a.epoch - b.epoch)
|
|
258
|
+
return queue
|
|
259
|
+
})
|
|
272
260
|
}
|
|
273
261
|
}
|
|
274
262
|
}
|
|
@@ -297,15 +285,11 @@ export function syncContinuity<F extends Func>(
|
|
|
297
285
|
continuityKey,
|
|
298
286
|
`enqueuing new optimistic update`,
|
|
299
287
|
)
|
|
300
|
-
setIntoStore(
|
|
301
|
-
|
|
302
|
-
(
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
return queue
|
|
306
|
-
},
|
|
307
|
-
store,
|
|
308
|
-
)
|
|
288
|
+
setIntoStore(store, optimisticUpdateQueue, (queue) => {
|
|
289
|
+
queue.push(clientUpdate)
|
|
290
|
+
queue.sort((a, b) => a.epoch - b.epoch)
|
|
291
|
+
return queue
|
|
292
|
+
})
|
|
309
293
|
} else {
|
|
310
294
|
store.logger.info(
|
|
311
295
|
`🤞`,
|
|
@@ -313,14 +297,10 @@ export function syncContinuity<F extends Func>(
|
|
|
313
297
|
continuityKey,
|
|
314
298
|
`replacing existing optimistic update at index ${optimisticUpdateIndex}`,
|
|
315
299
|
)
|
|
316
|
-
setIntoStore(
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
return queue
|
|
321
|
-
},
|
|
322
|
-
store,
|
|
323
|
-
)
|
|
300
|
+
setIntoStore(store, optimisticUpdateQueue, (queue) => {
|
|
301
|
+
queue[optimisticUpdateIndex] = clientUpdate
|
|
302
|
+
return queue
|
|
303
|
+
})
|
|
324
304
|
}
|
|
325
305
|
socket.emit(`tx-run:${continuityKey}`, {
|
|
326
306
|
id: clientUpdate.id,
|
|
@@ -88,7 +88,7 @@ function usePullAtom(token) {
|
|
|
88
88
|
}
|
|
89
89
|
function usePullAtomFamilyMember(family, subKey) {
|
|
90
90
|
const store = React.useContext(StoreContext);
|
|
91
|
-
const token = findInStore(family, subKey
|
|
91
|
+
const token = findInStore(store, family, subKey);
|
|
92
92
|
useRealtimeService(
|
|
93
93
|
`pull:${token.key}`,
|
|
94
94
|
(socket) => RTC.pullAtomFamilyMember(token, socket, store)
|
|
@@ -105,7 +105,7 @@ function usePullMutable(token) {
|
|
|
105
105
|
}
|
|
106
106
|
function usePullMutableAtomFamilyMember(familyToken, key) {
|
|
107
107
|
const store = React.useContext(StoreContext);
|
|
108
|
-
const token = findInStore(familyToken, key
|
|
108
|
+
const token = findInStore(store, familyToken, key);
|
|
109
109
|
useRealtimeService(
|
|
110
110
|
`pull:${token.key}`,
|
|
111
111
|
(socket) => RTC.pullMutableAtomFamilyMember(token, socket, store)
|
|
@@ -122,7 +122,7 @@ function usePullSelector(token) {
|
|
|
122
122
|
}
|
|
123
123
|
function usePullSelectorFamilyMember(familyToken, key) {
|
|
124
124
|
const store = React.useContext(StoreContext);
|
|
125
|
-
const token = findInStore(familyToken, key
|
|
125
|
+
const token = findInStore(store, familyToken, key);
|
|
126
126
|
useRealtimeService(
|
|
127
127
|
`pull:${token.key}`,
|
|
128
128
|
(socket) => RTC.pullSelectorFamilyMember(token, socket, store)
|
|
@@ -13,7 +13,7 @@ export function usePullAtomFamilyMember<
|
|
|
13
13
|
Key extends K,
|
|
14
14
|
>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: Key): J {
|
|
15
15
|
const store = React.useContext(StoreContext)
|
|
16
|
-
const token = findInStore(family, subKey
|
|
16
|
+
const token = findInStore(store, family, subKey)
|
|
17
17
|
useRealtimeService(`pull:${token.key}`, (socket) =>
|
|
18
18
|
RTC.pullAtomFamilyMember(token, socket, store),
|
|
19
19
|
)
|
|
@@ -15,7 +15,7 @@ export function usePullMutableAtomFamilyMember<
|
|
|
15
15
|
Key extends K,
|
|
16
16
|
>(familyToken: AtomIO.MutableAtomFamilyToken<T, J, K>, key: Key): T {
|
|
17
17
|
const store = React.useContext(StoreContext)
|
|
18
|
-
const token = findInStore(familyToken, key
|
|
18
|
+
const token = findInStore(store, familyToken, key)
|
|
19
19
|
useRealtimeService(`pull:${token.key}`, (socket) =>
|
|
20
20
|
RTC.pullMutableAtomFamilyMember(token, socket, store),
|
|
21
21
|
)
|
|
@@ -13,7 +13,7 @@ export function usePullSelectorFamilyMember<
|
|
|
13
13
|
Key extends K,
|
|
14
14
|
>(familyToken: AtomIO.SelectorFamilyToken<T, K>, key: Key): T {
|
|
15
15
|
const store = React.useContext(StoreContext)
|
|
16
|
-
const token = findInStore(familyToken, key
|
|
16
|
+
const token = findInStore(store, familyToken, key)
|
|
17
17
|
useRealtimeService(`pull:${token.key}`, (socket) =>
|
|
18
18
|
RTC.pullSelectorFamilyMember(token, socket, store),
|
|
19
19
|
)
|
|
@@ -484,7 +484,7 @@ function realtimeContinuitySynchronizer({
|
|
|
484
484
|
socket.id,
|
|
485
485
|
store
|
|
486
486
|
).userKeyOfSocket;
|
|
487
|
-
const userKey = getFromStore(
|
|
487
|
+
const userKey = getFromStore(store, userKeyState);
|
|
488
488
|
if (!userKey) {
|
|
489
489
|
store.logger.error(
|
|
490
490
|
`\u274C`,
|
|
@@ -518,28 +518,28 @@ function realtimeContinuitySynchronizer({
|
|
|
518
518
|
);
|
|
519
519
|
return;
|
|
520
520
|
}
|
|
521
|
-
const newSocketState = findInStore(socketAtoms, newSocketKey
|
|
522
|
-
const newSocket = getFromStore(
|
|
521
|
+
const newSocketState = findInStore(store, socketAtoms, newSocketKey);
|
|
522
|
+
const newSocket = getFromStore(store, newSocketState);
|
|
523
523
|
socket = newSocket;
|
|
524
524
|
},
|
|
525
525
|
`sync-continuity:${continuityKey}:${userKey}`,
|
|
526
526
|
store
|
|
527
527
|
);
|
|
528
528
|
const userUnacknowledgedQueue = findInStore(
|
|
529
|
+
store,
|
|
529
530
|
userUnacknowledgedQueues,
|
|
530
|
-
userKey
|
|
531
|
-
store
|
|
531
|
+
userKey
|
|
532
532
|
);
|
|
533
533
|
getFromStore(
|
|
534
|
-
|
|
535
|
-
|
|
534
|
+
store,
|
|
535
|
+
userUnacknowledgedQueue
|
|
536
536
|
);
|
|
537
537
|
const unsubscribeFunctions = [];
|
|
538
538
|
const revealPerspectives = () => {
|
|
539
539
|
const unsubFns = [];
|
|
540
540
|
for (const perspective of continuity.perspectives) {
|
|
541
541
|
const { viewAtoms } = perspective;
|
|
542
|
-
const userViewState = findInStore(viewAtoms, userKey
|
|
542
|
+
const userViewState = findInStore(store, viewAtoms, userKey);
|
|
543
543
|
const unsubscribe = subscribeToState(
|
|
544
544
|
userViewState,
|
|
545
545
|
({ oldValue, newValue }) => {
|
|
@@ -549,8 +549,8 @@ function realtimeContinuitySynchronizer({
|
|
|
549
549
|
(token) => !newKeys.includes(token.key)
|
|
550
550
|
);
|
|
551
551
|
const revealed = newValue.filter((token) => !oldKeys.includes(token.key)).flatMap((token) => {
|
|
552
|
-
const resourceToken = token.type === `mutable_atom` ? getJsonToken(
|
|
553
|
-
const resource = getFromStore(
|
|
552
|
+
const resourceToken = token.type === `mutable_atom` ? getJsonToken(store, token) : token;
|
|
553
|
+
const resource = getFromStore(store, resourceToken);
|
|
554
554
|
return [resourceToken, resource];
|
|
555
555
|
});
|
|
556
556
|
store.logger.info(
|
|
@@ -580,21 +580,21 @@ function realtimeContinuitySynchronizer({
|
|
|
580
580
|
const sendInitialPayload = () => {
|
|
581
581
|
const initialPayload = [];
|
|
582
582
|
for (const atom2 of continuity.globals) {
|
|
583
|
-
const resourceToken = atom2.type === `mutable_atom` ? getJsonToken(
|
|
584
|
-
initialPayload.push(resourceToken, getFromStore(
|
|
583
|
+
const resourceToken = atom2.type === `mutable_atom` ? getJsonToken(store, atom2) : atom2;
|
|
584
|
+
initialPayload.push(resourceToken, getFromStore(store, atom2));
|
|
585
585
|
}
|
|
586
586
|
for (const perspective of continuity.perspectives) {
|
|
587
587
|
const { viewAtoms, resourceAtoms } = perspective;
|
|
588
|
-
const userViewState = findInStore(viewAtoms, userKey
|
|
589
|
-
const userView = getFromStore(
|
|
588
|
+
const userViewState = findInStore(store, viewAtoms, userKey);
|
|
589
|
+
const userView = getFromStore(store, userViewState);
|
|
590
590
|
store.logger.info(`\u{1F441}`, `atom`, resourceAtoms.key, `${userKey} can see`, {
|
|
591
591
|
viewAtoms,
|
|
592
592
|
resourceAtoms,
|
|
593
593
|
userView
|
|
594
594
|
});
|
|
595
595
|
for (const visibleToken of userView) {
|
|
596
|
-
const resourceToken = visibleToken.type === `mutable_atom` ? getJsonToken(
|
|
597
|
-
const resource = getFromStore(
|
|
596
|
+
const resourceToken = visibleToken.type === `mutable_atom` ? getJsonToken(store, visibleToken) : visibleToken;
|
|
597
|
+
const resource = getFromStore(store, resourceToken);
|
|
598
598
|
initialPayload.push(resourceToken, resource);
|
|
599
599
|
}
|
|
600
600
|
}
|
|
@@ -609,13 +609,13 @@ function realtimeContinuitySynchronizer({
|
|
|
609
609
|
continuity.perspectives.flatMap((perspective) => {
|
|
610
610
|
const { viewAtoms } = perspective;
|
|
611
611
|
const userPerspectiveTokenState = findInStore(
|
|
612
|
+
store,
|
|
612
613
|
viewAtoms,
|
|
613
|
-
userKey
|
|
614
|
-
store
|
|
614
|
+
userKey
|
|
615
615
|
);
|
|
616
616
|
const visibleTokens = getFromStore(
|
|
617
|
-
|
|
618
|
-
|
|
617
|
+
store,
|
|
618
|
+
userPerspectiveTokenState
|
|
619
619
|
);
|
|
620
620
|
return visibleTokens.map((token) => {
|
|
621
621
|
const key = token.type === `mutable_atom` ? `*` + token.key : token.key;
|
|
@@ -733,11 +733,11 @@ function realtimeAtomFamilyProvider({
|
|
|
733
733
|
}
|
|
734
734
|
};
|
|
735
735
|
const fillSubRequest = (subKey) => {
|
|
736
|
-
const exposedSubKeys = getFromStore(
|
|
736
|
+
const exposedSubKeys = getFromStore(store, index);
|
|
737
737
|
for (const exposedSubKey of exposedSubKeys) {
|
|
738
738
|
if (stringifyJson(exposedSubKey) === stringifyJson(subKey)) {
|
|
739
|
-
const token = findInStore(family, subKey
|
|
740
|
-
socket.emit(`serve:${token.key}`, getFromStore(
|
|
739
|
+
const token = findInStore(store, family, subKey);
|
|
740
|
+
socket.emit(`serve:${token.key}`, getFromStore(store, token));
|
|
741
741
|
const unsubscribe = subscribeToState(
|
|
742
742
|
token,
|
|
743
743
|
({ newValue }) => {
|
|
@@ -779,14 +779,14 @@ function realtimeMutableFamilyProvider({
|
|
|
779
779
|
}
|
|
780
780
|
};
|
|
781
781
|
const fillSubRequest = (subKey) => {
|
|
782
|
-
const exposedSubKeys = getFromStore(
|
|
782
|
+
const exposedSubKeys = getFromStore(store, index);
|
|
783
783
|
for (const exposedSubKey of exposedSubKeys) {
|
|
784
784
|
if (stringifyJson(exposedSubKey) === stringifyJson(subKey)) {
|
|
785
|
-
const token = findInStore(family, subKey
|
|
786
|
-
getFromStore(
|
|
787
|
-
const jsonToken = getJsonToken(
|
|
785
|
+
const token = findInStore(store, family, subKey);
|
|
786
|
+
getFromStore(store, token);
|
|
787
|
+
const jsonToken = getJsonToken(store, token);
|
|
788
788
|
const updateToken = getUpdateToken(token);
|
|
789
|
-
socket.emit(`init:${token.key}`, getFromStore(
|
|
789
|
+
socket.emit(`init:${token.key}`, getFromStore(store, jsonToken));
|
|
790
790
|
const unsubscribe = subscribeToState(
|
|
791
791
|
updateToken,
|
|
792
792
|
({ newValue }) => {
|
|
@@ -819,7 +819,7 @@ function realtimeMutableProvider({
|
|
|
819
819
|
}) {
|
|
820
820
|
return function mutableProvider(token) {
|
|
821
821
|
let unsubscribeFromStateUpdates = null;
|
|
822
|
-
const jsonToken = getJsonToken(
|
|
822
|
+
const jsonToken = getJsonToken(store, token);
|
|
823
823
|
const trackerToken = getUpdateToken(token);
|
|
824
824
|
const fillUnsubRequest = () => {
|
|
825
825
|
socket.off(`unsub:${token.key}`, fillUnsubRequest);
|
|
@@ -827,7 +827,7 @@ function realtimeMutableProvider({
|
|
|
827
827
|
unsubscribeFromStateUpdates = null;
|
|
828
828
|
};
|
|
829
829
|
const fillSubRequest = () => {
|
|
830
|
-
socket.emit(`init:${token.key}`, getFromStore(
|
|
830
|
+
socket.emit(`init:${token.key}`, getFromStore(store, jsonToken));
|
|
831
831
|
unsubscribeFromStateUpdates = subscribeToState(
|
|
832
832
|
trackerToken,
|
|
833
833
|
({ newValue }) => {
|
|
@@ -852,7 +852,7 @@ function realtimeStateProvider({
|
|
|
852
852
|
return function stateProvider(token) {
|
|
853
853
|
let unsubscribeFromStateUpdates;
|
|
854
854
|
const fillSubRequest = () => {
|
|
855
|
-
socket.emit(`serve:${token.key}`, getFromStore(
|
|
855
|
+
socket.emit(`serve:${token.key}`, getFromStore(store, token));
|
|
856
856
|
unsubscribeFromStateUpdates = subscribeToState(
|
|
857
857
|
token,
|
|
858
858
|
({ newValue }) => {
|
|
@@ -886,7 +886,7 @@ function realtimeStateReceiver({
|
|
|
886
886
|
}) {
|
|
887
887
|
return function stateReceiver(token) {
|
|
888
888
|
const publish = (newValue) => {
|
|
889
|
-
setIntoStore(token, newValue
|
|
889
|
+
setIntoStore(store, token, newValue);
|
|
890
890
|
};
|
|
891
891
|
const fillPubUnclaim = () => {
|
|
892
892
|
socket.off(`pub:${token.key}`, publish);
|
|
@@ -36,7 +36,7 @@ export function realtimeContinuitySynchronizer({
|
|
|
36
36
|
socket.id,
|
|
37
37
|
store,
|
|
38
38
|
).userKeyOfSocket
|
|
39
|
-
const userKey = getFromStore(
|
|
39
|
+
const userKey = getFromStore(store, userKeyState)
|
|
40
40
|
if (!userKey) {
|
|
41
41
|
store.logger.error(
|
|
42
42
|
`❌`,
|
|
@@ -70,8 +70,8 @@ export function realtimeContinuitySynchronizer({
|
|
|
70
70
|
)
|
|
71
71
|
return
|
|
72
72
|
}
|
|
73
|
-
const newSocketState = findInStore(socketAtoms, newSocketKey
|
|
74
|
-
const newSocket = getFromStore(
|
|
73
|
+
const newSocketState = findInStore(store, socketAtoms, newSocketKey)
|
|
74
|
+
const newSocket = getFromStore(store, newSocketState)
|
|
75
75
|
socket = newSocket
|
|
76
76
|
},
|
|
77
77
|
`sync-continuity:${continuityKey}:${userKey}`,
|
|
@@ -79,13 +79,13 @@ export function realtimeContinuitySynchronizer({
|
|
|
79
79
|
)
|
|
80
80
|
|
|
81
81
|
const userUnacknowledgedQueue = findInStore(
|
|
82
|
+
store,
|
|
82
83
|
userUnacknowledgedQueues,
|
|
83
84
|
userKey,
|
|
84
|
-
store,
|
|
85
85
|
)
|
|
86
86
|
const userUnacknowledgedUpdates = getFromStore(
|
|
87
|
-
userUnacknowledgedQueue,
|
|
88
87
|
store,
|
|
88
|
+
userUnacknowledgedQueue,
|
|
89
89
|
)
|
|
90
90
|
const unsubscribeFunctions: (() => void)[] = []
|
|
91
91
|
|
|
@@ -93,7 +93,7 @@ export function realtimeContinuitySynchronizer({
|
|
|
93
93
|
const unsubFns: (() => void)[] = []
|
|
94
94
|
for (const perspective of continuity.perspectives) {
|
|
95
95
|
const { viewAtoms } = perspective
|
|
96
|
-
const userViewState = findInStore(viewAtoms, userKey
|
|
96
|
+
const userViewState = findInStore(store, viewAtoms, userKey)
|
|
97
97
|
const unsubscribe = subscribeToState(
|
|
98
98
|
userViewState,
|
|
99
99
|
({ oldValue, newValue }) => {
|
|
@@ -107,9 +107,9 @@ export function realtimeContinuitySynchronizer({
|
|
|
107
107
|
.flatMap((token) => {
|
|
108
108
|
const resourceToken =
|
|
109
109
|
token.type === `mutable_atom`
|
|
110
|
-
? getJsonToken(
|
|
110
|
+
? getJsonToken(store, token)
|
|
111
111
|
: token
|
|
112
|
-
const resource = getFromStore(
|
|
112
|
+
const resource = getFromStore(store, resourceToken)
|
|
113
113
|
return [resourceToken, resource]
|
|
114
114
|
})
|
|
115
115
|
store.logger.info(
|
|
@@ -141,13 +141,13 @@ export function realtimeContinuitySynchronizer({
|
|
|
141
141
|
const initialPayload: Json.Serializable[] = []
|
|
142
142
|
for (const atom of continuity.globals) {
|
|
143
143
|
const resourceToken =
|
|
144
|
-
atom.type === `mutable_atom` ? getJsonToken(
|
|
145
|
-
initialPayload.push(resourceToken, getFromStore(
|
|
144
|
+
atom.type === `mutable_atom` ? getJsonToken(store, atom) : atom
|
|
145
|
+
initialPayload.push(resourceToken, getFromStore(store, atom))
|
|
146
146
|
}
|
|
147
147
|
for (const perspective of continuity.perspectives) {
|
|
148
148
|
const { viewAtoms, resourceAtoms } = perspective
|
|
149
|
-
const userViewState = findInStore(viewAtoms, userKey
|
|
150
|
-
const userView = getFromStore(
|
|
149
|
+
const userViewState = findInStore(store, viewAtoms, userKey)
|
|
150
|
+
const userView = getFromStore(store, userViewState)
|
|
151
151
|
store.logger.info(`👁`, `atom`, resourceAtoms.key, `${userKey} can see`, {
|
|
152
152
|
viewAtoms,
|
|
153
153
|
resourceAtoms,
|
|
@@ -156,9 +156,9 @@ export function realtimeContinuitySynchronizer({
|
|
|
156
156
|
for (const visibleToken of userView) {
|
|
157
157
|
const resourceToken =
|
|
158
158
|
visibleToken.type === `mutable_atom`
|
|
159
|
-
? getJsonToken(
|
|
159
|
+
? getJsonToken(store, visibleToken)
|
|
160
160
|
: visibleToken
|
|
161
|
-
const resource = getFromStore(
|
|
161
|
+
const resource = getFromStore(store, resourceToken)
|
|
162
162
|
|
|
163
163
|
initialPayload.push(resourceToken, resource)
|
|
164
164
|
}
|
|
@@ -181,13 +181,13 @@ export function realtimeContinuitySynchronizer({
|
|
|
181
181
|
continuity.perspectives.flatMap((perspective) => {
|
|
182
182
|
const { viewAtoms } = perspective
|
|
183
183
|
const userPerspectiveTokenState = findInStore(
|
|
184
|
+
store,
|
|
184
185
|
viewAtoms,
|
|
185
186
|
userKey,
|
|
186
|
-
store,
|
|
187
187
|
)
|
|
188
188
|
const visibleTokens = getFromStore(
|
|
189
|
-
userPerspectiveTokenState,
|
|
190
189
|
store,
|
|
190
|
+
userPerspectiveTokenState,
|
|
191
191
|
)
|
|
192
192
|
return visibleTokens.map((token) => {
|
|
193
193
|
const key =
|
|
@@ -34,11 +34,11 @@ export function realtimeAtomFamilyProvider({
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
const fillSubRequest = (subKey: K) => {
|
|
37
|
-
const exposedSubKeys = getFromStore(
|
|
37
|
+
const exposedSubKeys = getFromStore(store, index)
|
|
38
38
|
for (const exposedSubKey of exposedSubKeys) {
|
|
39
39
|
if (stringifyJson(exposedSubKey) === stringifyJson(subKey)) {
|
|
40
|
-
const token = findInStore(family, subKey
|
|
41
|
-
socket.emit(`serve:${token.key}`, getFromStore(
|
|
40
|
+
const token = findInStore(store, family, subKey)
|
|
41
|
+
socket.emit(`serve:${token.key}`, getFromStore(store, token))
|
|
42
42
|
const unsubscribe = subscribeToState(
|
|
43
43
|
token,
|
|
44
44
|
({ newValue }) => {
|
|
@@ -40,14 +40,14 @@ export function realtimeMutableFamilyProvider({
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
const fillSubRequest = (subKey: K) => {
|
|
43
|
-
const exposedSubKeys = getFromStore(
|
|
43
|
+
const exposedSubKeys = getFromStore(store, index)
|
|
44
44
|
for (const exposedSubKey of exposedSubKeys) {
|
|
45
45
|
if (stringifyJson(exposedSubKey) === stringifyJson(subKey)) {
|
|
46
|
-
const token = findInStore(family, subKey
|
|
47
|
-
getFromStore(
|
|
48
|
-
const jsonToken = getJsonToken(
|
|
46
|
+
const token = findInStore(store, family, subKey)
|
|
47
|
+
getFromStore(store, token)
|
|
48
|
+
const jsonToken = getJsonToken(store, token)
|
|
49
49
|
const updateToken = getUpdateToken(token)
|
|
50
|
-
socket.emit(`init:${token.key}`, getFromStore(
|
|
50
|
+
socket.emit(`init:${token.key}`, getFromStore(store, jsonToken))
|
|
51
51
|
const unsubscribe = subscribeToState(
|
|
52
52
|
updateToken,
|
|
53
53
|
({ newValue }) => {
|
|
@@ -22,7 +22,7 @@ export function realtimeMutableProvider({
|
|
|
22
22
|
>(token: AtomIO.MutableAtomToken<Core, SerializableCore>): () => void {
|
|
23
23
|
let unsubscribeFromStateUpdates: (() => void) | null = null
|
|
24
24
|
|
|
25
|
-
const jsonToken = getJsonToken(
|
|
25
|
+
const jsonToken = getJsonToken(store, token)
|
|
26
26
|
const trackerToken = getUpdateToken(token)
|
|
27
27
|
|
|
28
28
|
const fillUnsubRequest = () => {
|
|
@@ -32,7 +32,7 @@ export function realtimeMutableProvider({
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
const fillSubRequest = () => {
|
|
35
|
-
socket.emit(`init:${token.key}`, getFromStore(
|
|
35
|
+
socket.emit(`init:${token.key}`, getFromStore(store, jsonToken))
|
|
36
36
|
unsubscribeFromStateUpdates = subscribeToState(
|
|
37
37
|
trackerToken,
|
|
38
38
|
({ newValue }) => {
|
|
@@ -15,7 +15,7 @@ export function realtimeStateProvider({
|
|
|
15
15
|
let unsubscribeFromStateUpdates: (() => void) | undefined
|
|
16
16
|
|
|
17
17
|
const fillSubRequest = () => {
|
|
18
|
-
socket.emit(`serve:${token.key}`, getFromStore(
|
|
18
|
+
socket.emit(`serve:${token.key}`, getFromStore(store, token))
|
|
19
19
|
|
|
20
20
|
unsubscribeFromStateUpdates = subscribeToState(
|
|
21
21
|
token,
|
|
@@ -29,8 +29,8 @@ var setupRealtimeTestServer = (options) => {
|
|
|
29
29
|
const server = new SocketIO.Server(httpServer).use((socket, next) => {
|
|
30
30
|
const { token, username } = socket.handshake.auth;
|
|
31
31
|
if (token === `test` && socket.id) {
|
|
32
|
-
const socketState = findInStore(RTS.socketAtoms, socket.id
|
|
33
|
-
setIntoStore(socketState, socket
|
|
32
|
+
const socketState = findInStore(silo.store, RTS.socketAtoms, socket.id);
|
|
33
|
+
setIntoStore(silo.store, socketState, socket);
|
|
34
34
|
editRelationsInStore(
|
|
35
35
|
RTS.usersOfSockets,
|
|
36
36
|
(relations) => {
|
|
@@ -38,8 +38,8 @@ var setupRealtimeTestServer = (options) => {
|
|
|
38
38
|
},
|
|
39
39
|
silo.store
|
|
40
40
|
);
|
|
41
|
-
setIntoStore(RTS.userIndex, (index) => index.add(username)
|
|
42
|
-
setIntoStore(RTS.socketIndex, (index) => index.add(socket.id)
|
|
41
|
+
setIntoStore(silo.store, RTS.userIndex, (index) => index.add(username));
|
|
42
|
+
setIntoStore(silo.store, RTS.socketIndex, (index) => index.add(socket.id));
|
|
43
43
|
console.log(`${username} connected on ${socket.id}`);
|
|
44
44
|
next();
|
|
45
45
|
} else {
|
|
@@ -51,10 +51,10 @@ var setupRealtimeTestServer = (options) => {
|
|
|
51
51
|
});
|
|
52
52
|
const dispose = () => {
|
|
53
53
|
server.close();
|
|
54
|
-
const roomKeys = getFromStore(
|
|
54
|
+
const roomKeys = getFromStore(silo.store, RT.roomIndex);
|
|
55
55
|
for (const roomKey of roomKeys) {
|
|
56
|
-
const roomState = findInStore(RTS.roomSelectors, roomKey
|
|
57
|
-
const room = getFromStore(
|
|
56
|
+
const roomState = findInStore(silo.store, RTS.roomSelectors, roomKey);
|
|
57
|
+
const room = getFromStore(silo.store, roomState);
|
|
58
58
|
if (room && !(room instanceof Promise)) {
|
|
59
59
|
room.process.kill();
|
|
60
60
|
}
|
|
@@ -89,8 +89,8 @@ export const setupRealtimeTestServer = (
|
|
|
89
89
|
const server = new SocketIO.Server(httpServer).use((socket, next) => {
|
|
90
90
|
const { token, username } = socket.handshake.auth
|
|
91
91
|
if (token === `test` && socket.id) {
|
|
92
|
-
const socketState = findInStore(RTS.socketAtoms, socket.id
|
|
93
|
-
setIntoStore(socketState, socket
|
|
92
|
+
const socketState = findInStore(silo.store, RTS.socketAtoms, socket.id)
|
|
93
|
+
setIntoStore(silo.store, socketState, socket)
|
|
94
94
|
editRelationsInStore(
|
|
95
95
|
RTS.usersOfSockets,
|
|
96
96
|
(relations) => {
|
|
@@ -98,8 +98,8 @@ export const setupRealtimeTestServer = (
|
|
|
98
98
|
},
|
|
99
99
|
silo.store,
|
|
100
100
|
)
|
|
101
|
-
setIntoStore(RTS.userIndex, (index) => index.add(username)
|
|
102
|
-
setIntoStore(RTS.socketIndex, (index) => index.add(socket.id)
|
|
101
|
+
setIntoStore(silo.store, RTS.userIndex, (index) => index.add(username))
|
|
102
|
+
setIntoStore(silo.store, RTS.socketIndex, (index) => index.add(socket.id))
|
|
103
103
|
console.log(`${username} connected on ${socket.id}`)
|
|
104
104
|
next()
|
|
105
105
|
} else {
|
|
@@ -113,10 +113,10 @@ export const setupRealtimeTestServer = (
|
|
|
113
113
|
|
|
114
114
|
const dispose = () => {
|
|
115
115
|
server.close()
|
|
116
|
-
const roomKeys = getFromStore(
|
|
116
|
+
const roomKeys = getFromStore(silo.store, RT.roomIndex)
|
|
117
117
|
for (const roomKey of roomKeys) {
|
|
118
|
-
const roomState = findInStore(RTS.roomSelectors, roomKey
|
|
119
|
-
const room = getFromStore(
|
|
118
|
+
const roomState = findInStore(silo.store, RTS.roomSelectors, roomKey)
|
|
119
|
+
const room = getFromStore(silo.store, roomState)
|
|
120
120
|
if (room && !(room instanceof Promise)) {
|
|
121
121
|
room.process.kill()
|
|
122
122
|
}
|
package/src/atom.ts
CHANGED
|
@@ -53,7 +53,7 @@ export function atom<T>(options: RegularAtomOptions<T>): RegularAtomToken<T>
|
|
|
53
53
|
export function atom(
|
|
54
54
|
options: MutableAtomOptions<any, any> | RegularAtomOptions<any>,
|
|
55
55
|
): AtomToken<any> {
|
|
56
|
-
return createStandaloneAtom(
|
|
56
|
+
return createStandaloneAtom(IMPLICIT.STORE, options)
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
export type RegularAtomFamilyOptions<T, K extends Canonical> = {
|
|
@@ -112,5 +112,5 @@ export function atomFamily<T, K extends Canonical>(
|
|
|
112
112
|
| MutableAtomFamilyOptions<any, any, any>
|
|
113
113
|
| RegularAtomFamilyOptions<T, K>,
|
|
114
114
|
): MutableAtomFamilyToken<any, any, any> | RegularAtomFamilyToken<T, K> {
|
|
115
|
-
return createAtomFamily(
|
|
115
|
+
return createAtomFamily(IMPLICIT.STORE, options)
|
|
116
116
|
}
|
package/src/dispose-state.ts
CHANGED
|
@@ -32,8 +32,8 @@ export function disposeState(
|
|
|
32
32
|
key?: Json.Serializable,
|
|
33
33
|
): void {
|
|
34
34
|
if (key) {
|
|
35
|
-
Internal.disposeFromStore(token as any, key
|
|
35
|
+
Internal.disposeFromStore(Internal.IMPLICIT.STORE, token as any, key)
|
|
36
36
|
} else {
|
|
37
|
-
Internal.disposeFromStore(token as any
|
|
37
|
+
Internal.disposeFromStore(Internal.IMPLICIT.STORE, token as any)
|
|
38
38
|
}
|
|
39
39
|
}
|
package/src/get-state.ts
CHANGED
|
@@ -26,19 +26,15 @@ export function getState<M extends MoleculeConstructor>(
|
|
|
26
26
|
): InstanceType<M>
|
|
27
27
|
|
|
28
28
|
export function getState(
|
|
29
|
-
|
|
30
|
-
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
...params:
|
|
30
|
+
| [
|
|
31
|
+
token: MoleculeFamilyToken<any> | ReadableFamilyToken<any, any>,
|
|
32
|
+
key: Canonical,
|
|
33
|
+
]
|
|
34
|
+
| [token: MoleculeToken<any> | ReadableToken<any>]
|
|
35
35
|
): any {
|
|
36
|
-
if (
|
|
37
|
-
return Internal.getFromStore(
|
|
38
|
-
token as any,
|
|
39
|
-
key as any,
|
|
40
|
-
Internal.IMPLICIT.STORE,
|
|
41
|
-
)
|
|
36
|
+
if (params.length === 2) {
|
|
37
|
+
return Internal.getFromStore(Internal.IMPLICIT.STORE, ...params)
|
|
42
38
|
}
|
|
43
|
-
return Internal.getFromStore(
|
|
39
|
+
return Internal.getFromStore(Internal.IMPLICIT.STORE, ...params)
|
|
44
40
|
}
|