atom.io 0.27.4 → 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-JRENM6KL.js → chunk-6ABWLAGY.js} +177 -151
- package/dist/index.d.ts +3 -3
- 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 +80 -62
- 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 +20 -9
- package/internal/src/families/create-regular-atom-family.ts +15 -6
- package/internal/src/families/create-selector-family.ts +5 -5
- package/internal/src/families/create-writable-selector-family.ts +20 -10
- package/internal/src/families/dispose-from-store.ts +11 -14
- 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 -10
- package/internal/src/get-state/get-from-store.ts +32 -18
- 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 +2 -2
- package/internal/src/selector/register-selector.ts +9 -9
- package/internal/src/set-state/set-into-store.ts +8 -16
- package/internal/src/store/deposit.ts +53 -13
- package/internal/src/store/store.ts +1 -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 +6 -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 +1 -1
- 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/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
|
@@ -28,13 +28,13 @@ export function parseStateOverloads<T, K extends Canonical>(
|
|
|
28
28
|
const key = rest[1]
|
|
29
29
|
|
|
30
30
|
if (store.config.lifespan === `immortal`) {
|
|
31
|
-
const maybeToken = seekInStore(family, key
|
|
31
|
+
const maybeToken = seekInStore(store, family, key)
|
|
32
32
|
if (!maybeToken) {
|
|
33
33
|
throw new NotFoundError(family, key, store)
|
|
34
34
|
}
|
|
35
35
|
token = maybeToken
|
|
36
36
|
} else {
|
|
37
|
-
token = findInStore(family, key
|
|
37
|
+
token = findInStore(store, family, key)
|
|
38
38
|
}
|
|
39
39
|
} else {
|
|
40
40
|
token = rest[0]
|
package/react/src/use-i.ts
CHANGED
package/react/src/use-json.ts
CHANGED
|
@@ -31,8 +31,8 @@ export function useJSON<
|
|
|
31
31
|
const store = React.useContext(StoreContext)
|
|
32
32
|
const stateToken: ReadableToken<any> =
|
|
33
33
|
token.type === `mutable_atom_family`
|
|
34
|
-
? findInStore(token, key as Key
|
|
34
|
+
? findInStore(store, token, key as Key)
|
|
35
35
|
: token
|
|
36
|
-
const jsonToken = getJsonToken(
|
|
36
|
+
const jsonToken = getJsonToken(store, stateToken)
|
|
37
37
|
return useO(jsonToken)
|
|
38
38
|
}
|
package/react/src/use-o.ts
CHANGED
|
@@ -21,7 +21,7 @@ export function useO<T, K extends Canonical>(
|
|
|
21
21
|
const id = React.useId()
|
|
22
22
|
return React.useSyncExternalStore<T>(
|
|
23
23
|
(dispatch) => subscribeToState(token, dispatch, `use-o:${id}`, store),
|
|
24
|
-
() => getFromStore(
|
|
25
|
-
() => getFromStore(
|
|
24
|
+
() => getFromStore(store, token),
|
|
25
|
+
() => getFromStore(store, token),
|
|
26
26
|
)
|
|
27
27
|
}
|
|
@@ -8,7 +8,7 @@ import { optimisticUpdateQueue as optimisticUpdateQueue$1, confirmedUpdateQueue
|
|
|
8
8
|
|
|
9
9
|
function pullAtom(token, socket, store) {
|
|
10
10
|
const setServedValue = (data) => {
|
|
11
|
-
setIntoStore(token, data
|
|
11
|
+
setIntoStore(store, token, data);
|
|
12
12
|
};
|
|
13
13
|
socket.on(`serve:${token.key}`, setServedValue);
|
|
14
14
|
socket.emit(`sub:${token.key}`);
|
|
@@ -26,7 +26,7 @@ function pullAtomFamilyMember(token, socket, store) {
|
|
|
26
26
|
const { key: familyKey, subKey: serializedSubKey } = token.family;
|
|
27
27
|
const subKey = parseJson(serializedSubKey);
|
|
28
28
|
socket?.on(`serve:${token.key}`, (data) => {
|
|
29
|
-
setIntoStore(token, data
|
|
29
|
+
setIntoStore(store, token, data);
|
|
30
30
|
});
|
|
31
31
|
socket?.emit(`sub:${familyKey}`, subKey);
|
|
32
32
|
return () => {
|
|
@@ -35,15 +35,15 @@ function pullAtomFamilyMember(token, socket, store) {
|
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
function pullMutableAtom(token, socket, store) {
|
|
38
|
-
const jsonToken = getJsonToken(
|
|
38
|
+
const jsonToken = getJsonToken(store, token);
|
|
39
39
|
const updateToken = getUpdateToken(token);
|
|
40
40
|
socket.on(`init:${token.key}`, (data) => {
|
|
41
|
-
setIntoStore(jsonToken, data
|
|
41
|
+
setIntoStore(store, jsonToken, data);
|
|
42
42
|
});
|
|
43
43
|
socket.on(
|
|
44
44
|
`next:${token.key}`,
|
|
45
45
|
(data) => {
|
|
46
|
-
setIntoStore(updateToken, data
|
|
46
|
+
setIntoStore(store, updateToken, data);
|
|
47
47
|
}
|
|
48
48
|
);
|
|
49
49
|
socket.emit(`sub:${token.key}`);
|
|
@@ -62,14 +62,14 @@ function pullMutableAtomFamilyMember(token, socket, store) {
|
|
|
62
62
|
const { key: familyKey, subKey: serializedSubKey } = token.family;
|
|
63
63
|
const subKey = parseJson(serializedSubKey);
|
|
64
64
|
socket.on(`init:${token.key}`, (data) => {
|
|
65
|
-
const jsonToken = getJsonToken(
|
|
66
|
-
setIntoStore(jsonToken, data
|
|
65
|
+
const jsonToken = getJsonToken(store, token);
|
|
66
|
+
setIntoStore(store, jsonToken, data);
|
|
67
67
|
});
|
|
68
68
|
socket.on(
|
|
69
69
|
`next:${token.key}`,
|
|
70
70
|
(data) => {
|
|
71
71
|
const trackerToken = getUpdateToken(token);
|
|
72
|
-
setIntoStore(trackerToken, data
|
|
72
|
+
setIntoStore(store, trackerToken, data);
|
|
73
73
|
}
|
|
74
74
|
);
|
|
75
75
|
socket.emit(`sub:${familyKey}`, subKey);
|
|
@@ -195,8 +195,8 @@ function serverAction(token, socket, store) {
|
|
|
195
195
|
}
|
|
196
196
|
function syncContinuity(continuity, socket, store) {
|
|
197
197
|
const continuityKey = continuity.key;
|
|
198
|
-
const optimisticUpdates = getFromStore(optimisticUpdateQueue$1
|
|
199
|
-
const confirmedUpdates = getFromStore(confirmedUpdateQueue$1
|
|
198
|
+
const optimisticUpdates = getFromStore(store, optimisticUpdateQueue$1);
|
|
199
|
+
const confirmedUpdates = getFromStore(store, confirmedUpdateQueue$1);
|
|
200
200
|
const initializeContinuity = (epoch, payload) => {
|
|
201
201
|
socket.off(`continuity-init:${continuityKey}`, initializeContinuity);
|
|
202
202
|
let i = 0;
|
|
@@ -208,9 +208,9 @@ function syncContinuity(continuity, socket, store) {
|
|
|
208
208
|
} else {
|
|
209
209
|
v = x;
|
|
210
210
|
if (`type` in k && k.type === `mutable_atom`) {
|
|
211
|
-
k = getJsonToken(
|
|
211
|
+
k = getJsonToken(store, k);
|
|
212
212
|
}
|
|
213
|
-
setIntoStore(k, v
|
|
213
|
+
setIntoStore(store, k, v);
|
|
214
214
|
}
|
|
215
215
|
i++;
|
|
216
216
|
}
|
|
@@ -226,14 +226,10 @@ function syncContinuity(continuity, socket, store) {
|
|
|
226
226
|
continuityKey,
|
|
227
227
|
`reconciling updates`
|
|
228
228
|
);
|
|
229
|
-
setIntoStore(
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
return queue;
|
|
234
|
-
},
|
|
235
|
-
store
|
|
236
|
-
);
|
|
229
|
+
setIntoStore(store, optimisticUpdateQueue$1, (queue) => {
|
|
230
|
+
queue.shift();
|
|
231
|
+
return queue;
|
|
232
|
+
});
|
|
237
233
|
if (optimisticUpdate.id === confirmedUpdate.id) {
|
|
238
234
|
const clientResult = JSON.stringify(optimisticUpdate.updates);
|
|
239
235
|
const serverResult = JSON.stringify(confirmedUpdate.updates);
|
|
@@ -356,15 +352,11 @@ function syncContinuity(continuity, socket, store) {
|
|
|
356
352
|
`pushing confirmed update to queue`,
|
|
357
353
|
confirmed
|
|
358
354
|
);
|
|
359
|
-
setIntoStore(
|
|
360
|
-
|
|
361
|
-
(
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
return queue;
|
|
365
|
-
},
|
|
366
|
-
store
|
|
367
|
-
);
|
|
355
|
+
setIntoStore(store, confirmedUpdateQueue$1, (queue) => {
|
|
356
|
+
queue.push(confirmed);
|
|
357
|
+
queue.sort((a, b) => a.epoch - b.epoch);
|
|
358
|
+
return queue;
|
|
359
|
+
});
|
|
368
360
|
}
|
|
369
361
|
}
|
|
370
362
|
} else {
|
|
@@ -414,15 +406,11 @@ function syncContinuity(continuity, socket, store) {
|
|
|
414
406
|
continuityKey,
|
|
415
407
|
`pushing confirmed update #${confirmed.epoch} to queue`
|
|
416
408
|
);
|
|
417
|
-
setIntoStore(
|
|
418
|
-
|
|
419
|
-
(
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
return queue;
|
|
423
|
-
},
|
|
424
|
-
store
|
|
425
|
-
);
|
|
409
|
+
setIntoStore(store, confirmedUpdateQueue$1, (queue) => {
|
|
410
|
+
queue.push(confirmed);
|
|
411
|
+
queue.sort((a, b) => a.epoch - b.epoch);
|
|
412
|
+
return queue;
|
|
413
|
+
});
|
|
426
414
|
}
|
|
427
415
|
}
|
|
428
416
|
}
|
|
@@ -450,15 +438,11 @@ function syncContinuity(continuity, socket, store) {
|
|
|
450
438
|
continuityKey,
|
|
451
439
|
`enqueuing new optimistic update`
|
|
452
440
|
);
|
|
453
|
-
setIntoStore(
|
|
454
|
-
|
|
455
|
-
(
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
return queue;
|
|
459
|
-
},
|
|
460
|
-
store
|
|
461
|
-
);
|
|
441
|
+
setIntoStore(store, optimisticUpdateQueue$1, (queue) => {
|
|
442
|
+
queue.push(clientUpdate);
|
|
443
|
+
queue.sort((a, b) => a.epoch - b.epoch);
|
|
444
|
+
return queue;
|
|
445
|
+
});
|
|
462
446
|
} else {
|
|
463
447
|
store.logger.info(
|
|
464
448
|
`\u{1F91E}`,
|
|
@@ -466,14 +450,10 @@ function syncContinuity(continuity, socket, store) {
|
|
|
466
450
|
continuityKey,
|
|
467
451
|
`replacing existing optimistic update at index ${optimisticUpdateIndex}`
|
|
468
452
|
);
|
|
469
|
-
setIntoStore(
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
return queue;
|
|
474
|
-
},
|
|
475
|
-
store
|
|
476
|
-
);
|
|
453
|
+
setIntoStore(store, optimisticUpdateQueue$1, (queue) => {
|
|
454
|
+
queue[optimisticUpdateIndex] = clientUpdate;
|
|
455
|
+
return queue;
|
|
456
|
+
});
|
|
477
457
|
}
|
|
478
458
|
socket.emit(`tx-run:${continuityKey}`, {
|
|
479
459
|
id: clientUpdate.id,
|
|
@@ -16,7 +16,7 @@ export function pullAtomFamilyMember<J extends Json.Serializable>(
|
|
|
16
16
|
const { key: familyKey, subKey: serializedSubKey } = token.family
|
|
17
17
|
const subKey = parseJson(serializedSubKey)
|
|
18
18
|
socket?.on(`serve:${token.key}`, (data: J) => {
|
|
19
|
-
setIntoStore(token, data
|
|
19
|
+
setIntoStore(store, token, data)
|
|
20
20
|
})
|
|
21
21
|
socket?.emit(`sub:${familyKey}`, subKey)
|
|
22
22
|
return () => {
|
|
@@ -9,7 +9,7 @@ export function pullAtom<J extends Json.Serializable>(
|
|
|
9
9
|
store: Store,
|
|
10
10
|
): () => void {
|
|
11
11
|
const setServedValue = (data: J) => {
|
|
12
|
-
setIntoStore(token, data
|
|
12
|
+
setIntoStore(store, token, data)
|
|
13
13
|
}
|
|
14
14
|
socket.on(`serve:${token.key}`, setServedValue)
|
|
15
15
|
socket.emit(`sub:${token.key}`)
|
|
@@ -20,14 +20,14 @@ export function pullMutableAtomFamilyMember<
|
|
|
20
20
|
const { key: familyKey, subKey: serializedSubKey } = token.family
|
|
21
21
|
const subKey = parseJson(serializedSubKey)
|
|
22
22
|
socket.on(`init:${token.key}`, (data: J) => {
|
|
23
|
-
const jsonToken = getJsonToken(
|
|
24
|
-
setIntoStore(jsonToken, data
|
|
23
|
+
const jsonToken = getJsonToken(store, token)
|
|
24
|
+
setIntoStore(store, jsonToken, data)
|
|
25
25
|
})
|
|
26
26
|
socket.on(
|
|
27
27
|
`next:${token.key}`,
|
|
28
28
|
(data: T extends Transceiver<infer Signal> ? Signal : never) => {
|
|
29
29
|
const trackerToken = getUpdateToken(token)
|
|
30
|
-
setIntoStore(trackerToken, data
|
|
30
|
+
setIntoStore(store, trackerToken, data)
|
|
31
31
|
},
|
|
32
32
|
)
|
|
33
33
|
socket.emit(`sub:${familyKey}`, subKey)
|
|
@@ -12,15 +12,15 @@ export function pullMutableAtom<
|
|
|
12
12
|
socket: Socket,
|
|
13
13
|
store: Store,
|
|
14
14
|
): () => void {
|
|
15
|
-
const jsonToken = getJsonToken(
|
|
15
|
+
const jsonToken = getJsonToken(store, token)
|
|
16
16
|
const updateToken = getUpdateToken(token)
|
|
17
17
|
socket.on(`init:${token.key}`, (data: J) => {
|
|
18
|
-
setIntoStore(jsonToken, data
|
|
18
|
+
setIntoStore(store, jsonToken, data)
|
|
19
19
|
})
|
|
20
20
|
socket.on(
|
|
21
21
|
`next:${token.key}`,
|
|
22
22
|
(data: T extends Transceiver<infer Update> ? Update : never) => {
|
|
23
|
-
setIntoStore(updateToken, data
|
|
23
|
+
setIntoStore(store, updateToken, data)
|
|
24
24
|
},
|
|
25
25
|
)
|
|
26
26
|
socket.emit(`sub:${token.key}`)
|
|
@@ -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);
|