atom.io 0.36.0 → 0.36.2
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/dist/internal/index.d.ts +93 -73
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +233 -248
- package/dist/internal/index.js.map +1 -1
- package/dist/introspection/index.d.ts +5 -6
- package/dist/introspection/index.d.ts.map +1 -1
- package/dist/introspection/index.js +2 -3
- package/dist/introspection/index.js.map +1 -1
- package/dist/main/index.d.ts +29 -37
- package/dist/main/index.d.ts.map +1 -1
- package/dist/main/index.js +8 -9
- package/dist/main/index.js.map +1 -1
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-devtools/index.d.ts.map +1 -1
- package/dist/react-devtools/index.js.map +1 -1
- package/dist/realtime-client/index.d.ts +7 -8
- package/dist/realtime-client/index.d.ts.map +1 -1
- package/dist/realtime-client/index.js +3 -4
- package/dist/realtime-client/index.js.map +1 -1
- package/dist/realtime-react/index.d.ts +4 -4
- package/dist/realtime-react/index.d.ts.map +1 -1
- package/dist/realtime-react/index.js.map +1 -1
- package/dist/realtime-server/index.d.ts +2 -2
- package/dist/realtime-server/index.d.ts.map +1 -1
- package/dist/realtime-server/index.js.map +1 -1
- package/dist/transceivers/set-rtx/index.d.ts +9 -2
- package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
- package/dist/transceivers/set-rtx/index.js +3 -0
- package/dist/transceivers/set-rtx/index.js.map +1 -1
- package/package.json +3 -3
- package/src/internal/atom/create-regular-atom.ts +5 -5
- package/src/internal/atom/has-role.ts +12 -0
- package/src/internal/atom/index.ts +1 -0
- package/src/internal/caching.ts +60 -41
- package/src/internal/families/find-in-store.ts +1 -1
- package/src/internal/families/get-family-of-token.ts +1 -1
- package/src/internal/families/init-family-member.ts +1 -1
- package/src/internal/families/seek-in-store.ts +1 -1
- package/src/internal/get-state/read-or-compute-value.ts +26 -21
- package/src/internal/index.ts +8 -8
- package/src/internal/join/create-join.ts +3 -2
- package/src/internal/join/join-internal.ts +7 -4
- package/src/internal/mutable/create-mutable-atom-family.ts +6 -5
- package/src/internal/mutable/create-mutable-atom.ts +1 -1
- package/src/internal/mutable/get-json-family.ts +1 -1
- package/src/internal/mutable/get-json-token.ts +1 -1
- package/src/internal/mutable/get-update-family.ts +1 -1
- package/src/internal/mutable/get-update-token.ts +1 -1
- package/src/internal/mutable/tracker-family.ts +27 -31
- package/src/internal/mutable/tracker.ts +29 -23
- package/src/internal/mutable/transceiver.ts +11 -10
- package/src/internal/selector/create-readonly-held-selector.ts +2 -2
- package/src/internal/selector/create-readonly-pure-selector.ts +2 -2
- package/src/internal/selector/create-writable-held-selector.ts +3 -4
- package/src/internal/selector/create-writable-pure-selector.ts +3 -3
- package/src/internal/set-state/evict-downstream.ts +17 -15
- package/src/internal/set-state/index.ts +1 -0
- package/src/internal/set-state/reset-in-store.ts +6 -50
- package/src/internal/set-state/set-atom.ts +17 -24
- package/src/internal/set-state/set-into-store.ts +29 -13
- package/src/internal/store/counterfeit.ts +1 -1
- package/src/internal/store/deposit.ts +7 -8
- package/src/internal/store/store.ts +6 -6
- package/src/internal/store/withdraw.ts +8 -8
- package/src/internal/subscribe/subscribe-in-store.ts +8 -8
- package/src/internal/subscribe/subscribe-to-timeline.ts +2 -2
- package/src/internal/subscribe/subscribe-to-transaction.ts +2 -2
- package/src/internal/timeline/create-timeline.ts +3 -3
- package/src/internal/transaction/act-upon-store.ts +2 -2
- package/src/internal/transaction/apply-transaction.ts +2 -2
- package/src/internal/transaction/build-transaction.ts +2 -2
- package/src/internal/transaction/create-transaction.ts +3 -3
- package/src/internal/transaction/index.ts +2 -2
- package/src/internal/transaction/is-root-store.ts +4 -2
- package/src/internal/utility-types.ts +1 -1
- package/src/introspection/attach-introspection-states.ts +3 -3
- package/src/introspection/attach-transaction-index.ts +4 -4
- package/src/introspection/attach-transaction-logs.ts +4 -4
- package/src/introspection/auditor.ts +3 -3
- package/src/main/atom.ts +4 -4
- package/src/main/dispose-state.ts +4 -3
- package/src/main/find-state.ts +1 -1
- package/src/main/get-state.ts +6 -5
- package/src/main/reset-state.ts +3 -3
- package/src/main/set-state.ts +3 -3
- package/src/main/subscribe.ts +3 -3
- package/src/main/tokens.ts +9 -18
- package/src/main/transaction.ts +13 -15
- package/src/react/use-json.ts +5 -5
- package/src/react-devtools/TransactionIndex.tsx +3 -3
- package/src/react-devtools/Updates.tsx +2 -2
- package/src/realtime-client/continuity/register-and-attempt-confirmed-update.ts +2 -2
- package/src/realtime-client/pull-mutable-atom-family-member.ts +8 -13
- package/src/realtime-client/pull-mutable-atom.ts +5 -8
- package/src/realtime-client/push-state.ts +6 -5
- package/src/realtime-client/server-action.ts +5 -4
- package/src/realtime-react/use-pull-mutable-atom.ts +1 -1
- package/src/realtime-react/use-pull-mutable-family-member.ts +1 -1
- package/src/realtime-react/use-server-action.ts +2 -2
- package/src/realtime-server/realtime-mutable-family-provider.ts +1 -1
- package/src/realtime-server/realtime-mutable-provider.ts +1 -1
- package/src/transceivers/set-rtx/set-rtx.ts +14 -1
- package/src/internal/set-state/copy-mutable-if-needed.ts +0 -29
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Func, Store, Transceiver } from "atom.io/internal";
|
|
1
|
+
import { Fn, Store, Transceiver } from "atom.io/internal";
|
|
3
2
|
import { Json } from "atom.io/json";
|
|
4
3
|
import * as AtomIO from "atom.io";
|
|
5
|
-
import { AtomToken } from "atom.io";
|
|
4
|
+
import { AtomToken, WritableToken } from "atom.io";
|
|
6
5
|
import { ContinuityToken } from "atom.io/realtime";
|
|
7
6
|
import { Socket } from "atom.io/realtime-server";
|
|
8
7
|
import { Socket as Socket$1 } from "socket.io-client";
|
|
9
8
|
|
|
10
9
|
//#region src/realtime-client/continuity/register-and-attempt-confirmed-update.d.ts
|
|
11
|
-
declare const useRegisterAndAttemptConfirmedUpdate: (store: Store, continuityKey: string, socket: Socket, optimisticUpdates: AtomIO.TransactionUpdate<any>[], confirmedUpdates: AtomIO.TransactionUpdate<any>[]) => (confirmed: AtomIO.TransactionUpdate<
|
|
10
|
+
declare const useRegisterAndAttemptConfirmedUpdate: (store: Store, continuityKey: string, socket: Socket, optimisticUpdates: AtomIO.TransactionUpdate<any>[], confirmedUpdates: AtomIO.TransactionUpdate<any>[]) => (confirmed: AtomIO.TransactionUpdate<Fn>) => void;
|
|
12
11
|
//#endregion
|
|
13
12
|
//#region src/realtime-client/continuity/use-conceal-state.d.ts
|
|
14
13
|
declare function useConcealState(store: Store): (concealed: AtomToken<unknown>[]) => void;
|
|
@@ -23,10 +22,10 @@ declare function pullAtom<J extends Json.Serializable>(store: Store, socket: Soc
|
|
|
23
22
|
declare function pullAtomFamilyMember<J extends Json.Serializable>(store: Store, socket: Socket$1, token: AtomIO.RegularAtomToken<J>): () => void;
|
|
24
23
|
//#endregion
|
|
25
24
|
//#region src/realtime-client/pull-mutable-atom.d.ts
|
|
26
|
-
declare function pullMutableAtom<T extends Transceiver<any, any>>(store: Store, socket: Socket$1, token: AtomIO.MutableAtomToken<T>): () => void;
|
|
25
|
+
declare function pullMutableAtom<T extends Transceiver<any, any, any>>(store: Store, socket: Socket$1, token: AtomIO.MutableAtomToken<T>): () => void;
|
|
27
26
|
//#endregion
|
|
28
27
|
//#region src/realtime-client/pull-mutable-atom-family-member.d.ts
|
|
29
|
-
declare function pullMutableAtomFamilyMember<T extends Transceiver<any, any>>(store: Store, socket: Socket$1, token: AtomIO.MutableAtomToken<T>): () => void;
|
|
28
|
+
declare function pullMutableAtomFamilyMember<T extends Transceiver<any, any, any>>(store: Store, socket: Socket$1, token: AtomIO.MutableAtomToken<T>): () => void;
|
|
30
29
|
//#endregion
|
|
31
30
|
//#region src/realtime-client/pull-selector.d.ts
|
|
32
31
|
declare function pullSelector<T>(store: Store, socket: Socket$1, token: AtomIO.SelectorToken<T>): () => void;
|
|
@@ -35,7 +34,7 @@ declare function pullSelector<T>(store: Store, socket: Socket$1, token: AtomIO.S
|
|
|
35
34
|
declare function pullSelectorFamilyMember<T>(store: Store, socket: Socket$1, token: AtomIO.SelectorToken<T>): () => void;
|
|
36
35
|
//#endregion
|
|
37
36
|
//#region src/realtime-client/push-state.d.ts
|
|
38
|
-
declare function pushState<J extends Json.Serializable>(store:
|
|
37
|
+
declare function pushState<J extends Json.Serializable>(store: Store, socket: Socket$1, token: WritableToken<J>): () => void;
|
|
39
38
|
//#endregion
|
|
40
39
|
//#region src/realtime-client/realtime-client-stores/client-main-store.d.ts
|
|
41
40
|
declare const myIdState__INTERNAL: AtomIO.RegularAtomToken<string | undefined>;
|
|
@@ -47,7 +46,7 @@ declare const optimisticUpdateQueue: AtomIO.RegularAtomToken<AtomIO.TransactionU
|
|
|
47
46
|
declare const confirmedUpdateQueue: AtomIO.RegularAtomToken<AtomIO.TransactionUpdate<any>[]>;
|
|
48
47
|
//#endregion
|
|
49
48
|
//#region src/realtime-client/server-action.d.ts
|
|
50
|
-
declare function serverAction<F extends
|
|
49
|
+
declare function serverAction<F extends Fn>(store: Store, socket: Socket$1, token: AtomIO.TransactionToken<F>): () => void;
|
|
51
50
|
//#endregion
|
|
52
51
|
//#region src/realtime-client/sync-continuity.d.ts
|
|
53
52
|
declare function syncContinuity(store: Store, socket: Socket$1, continuity: ContinuityToken): () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["store: Store","continuityKey: string","socket: Socket","optimisticUpdates: AtomIO.TransactionUpdate<any>[]","confirmedUpdates: AtomIO.TransactionUpdate<any>[]","confirmed: AtomIO.TransactionUpdate<
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["store: Store","continuityKey: string","socket: Socket","optimisticUpdates: AtomIO.TransactionUpdate<any>[]","confirmedUpdates: AtomIO.TransactionUpdate<any>[]","confirmed: AtomIO.TransactionUpdate<Fn>","store: Store","concealed: AtomToken<unknown>[]","store: Store","revealed: Json.Array","store: Store","socket: Socket","token: AtomIO.RegularAtomToken<J>","store: Store","socket: Socket","token: AtomIO.RegularAtomToken<J>","store: Store","socket: Socket","token: AtomIO.MutableAtomToken<T>","store: Store","socket: Socket","token: AtomIO.MutableAtomToken<T>","store: Store","socket: Socket","token: AtomIO.SelectorToken<T>","store: Store","socket: Socket","token: AtomIO.SelectorToken<T>","store: Store","socket: Socket","token: WritableToken<J>","myIdState__INTERNAL: AtomIO.RegularAtomToken<string | undefined>","myIdState: AtomIO.ReadonlyPureSelectorToken<string | undefined>","myUsernameState: AtomIO.RegularAtomToken<string | null>","optimisticUpdateQueue: AtomIO.RegularAtomToken<\n\tAtomIO.TransactionUpdate<any>[]\n>","confirmedUpdateQueue: AtomIO.RegularAtomToken<\n\tAtomIO.TransactionUpdate<any>[]\n>","store: Store","socket: Socket","token: AtomIO.TransactionToken<F>","store: Store","socket: Socket","continuity: ContinuityToken"],"sources":["../../src/realtime-client/continuity/register-and-attempt-confirmed-update.ts","../../src/realtime-client/continuity/use-conceal-state.ts","../../src/realtime-client/continuity/use-reveal-state.ts","../../src/realtime-client/pull-atom.ts","../../src/realtime-client/pull-atom-family-member.ts","../../src/realtime-client/pull-mutable-atom.ts","../../src/realtime-client/pull-mutable-atom-family-member.ts","../../src/realtime-client/pull-selector.ts","../../src/realtime-client/pull-selector-family-member.ts","../../src/realtime-client/push-state.ts","../../src/realtime-client/realtime-client-stores/client-main-store.ts","../../src/realtime-client/realtime-client-stores/client-sync-store.ts","../../src/realtime-client/server-action.ts","../../src/realtime-client/sync-continuity.ts"],"sourcesContent":[],"mappings":";;;;;;;;;cAgBa,8CAEJ,sCAEC,2BACW,MAAA,CAAO,4CACR,MAAA,CAAO,yCAEd,MAAA,CAAO,kBAAkB;;;iBCpBtB,eAAA,QAAuB,oBACnB;;;iBCFJ,cAAA,QAAsB,mBACnB,IAAA,CAAK;;;iBCCR,mBAAmB,IAAA,CAAK,qBAChC,eACC,iBACD,MAAA,CAAO,iBAAiB;;;iBCAhB,+BAA+B,IAAA,CAAK,qBAC5C,eACC,iBACD,MAAA,CAAO,iBAAiB;;;iBCNhB,0BAA0B,mCAClC,eACC,iBACD,MAAA,CAAO,iBAAiB;;;iBCAhB,sCACL,mCACF,eAAe,iBAAe,MAAA,CAAO,iBAAiB;;;iBCH/C,uBACR,eACC,iBACD,MAAA,CAAO,cAAc;;;iBCDb,mCACR,eACC,iBACD,MAAA,CAAO,cAAc;;;iBCNb,oBAAoB,IAAA,CAAK,qBACjC,eACC,iBACD,cAAc;;;cCNT+B,qBAAqB,MAAA,CAAO;cAK5BC,WAAW,MAAA,CAAO;cAMlBC,iBAAiB,MAAA,CAAO;;;cCZxBC,uBAAuB,MAAA,CAAO,iBAC1C,MAAA,CAAO;cAMKC,sBAAsB,MAAA,CAAO,iBACzC,MAAA,CAAO;;;iBCLQ,uBAAuB,WAC/B,eACC,iBACD,MAAA,CAAO,iBAAiB;;;iBCahB,cAAA,QACR,eACC,sBACI"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { actUponStore, assignTransactionToContinuity, disposeAtom, getEpochNumberOfContinuity, getFromStore, getJsonToken, getUpdateToken, ingestTransactionUpdate, isRootStore, setEpochNumberOfContinuity, setIntoStore, subscribeToTransaction } from "atom.io/internal";
|
|
1
|
+
import { actUponStore, assignTransactionToContinuity, disposeAtom, getEpochNumberOfContinuity, getFromStore, getJsonToken, getUpdateToken, ingestTransactionUpdate, isRootStore, setEpochNumberOfContinuity, setIntoStore, subscribeToState, subscribeToTransaction } from "atom.io/internal";
|
|
3
2
|
import { parseJson } from "atom.io/json";
|
|
4
3
|
import * as AtomIO from "atom.io";
|
|
5
4
|
import { persistSync } from "atom.io/web";
|
|
@@ -252,7 +251,7 @@ function pullSelectorFamilyMember(store, socket, token) {
|
|
|
252
251
|
//#region src/realtime-client/push-state.ts
|
|
253
252
|
function pushState(store, socket, token) {
|
|
254
253
|
socket.emit(`claim:${token.key}`);
|
|
255
|
-
|
|
254
|
+
subscribeToState(store, token, `push`, ({ newValue }) => {
|
|
256
255
|
socket.emit(`pub:${token.key}`, newValue);
|
|
257
256
|
});
|
|
258
257
|
return () => {
|
|
@@ -291,7 +290,7 @@ const confirmedUpdateQueue = AtomIO.atom({
|
|
|
291
290
|
//#endregion
|
|
292
291
|
//#region src/realtime-client/server-action.ts
|
|
293
292
|
function serverAction(store, socket, token) {
|
|
294
|
-
const unsubscribeFromLocalUpdates =
|
|
293
|
+
const unsubscribeFromLocalUpdates = subscribeToTransaction(store, token, `tx-run:${token.key}:${socket.id}`, (clientUpdate) => {
|
|
295
294
|
socket.emit(`tx-run:${token.key}`, clientUpdate);
|
|
296
295
|
});
|
|
297
296
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["store: Store","continuityKey: string","socket: Socket","optimisticUpdates: AtomIO.TransactionUpdate<any>[]","confirmedUpdates: AtomIO.TransactionUpdate<any>[]","confirmed: AtomIO.TransactionUpdate<Func>","optimisticUpdate: AtomIO.TransactionUpdate<any>","confirmedUpdate: AtomIO.TransactionUpdate<any>","optimisticUpdateQueue","confirmedUpdateQueue","continuityEpoch: number | undefined","store: Store","concealed: AtomToken<unknown>[]","store: Store","revealed: Json.Array","k: any","v: any","store: Store","socket: Socket","token: AtomIO.RegularAtomToken<J>","data: J","store: Store","socket: Socket","token: AtomIO.RegularAtomToken<J>","data: J","store: Store","socket: Socket","token: AtomIO.MutableAtomToken<T>","data: AsJSON<T>","data: T extends Transceiver<infer Update, any> ? Update : never","store: Store","socket: Socket","token: AtomIO.MutableAtomToken<T>","data: AsJSON<T>","data: T extends Transceiver<infer Signal, any> ? Signal : never","store: Store","socket: Socket","token: AtomIO.SelectorToken<T>","unsubscribes: Array<() => void>","store: Store","socket: Socket","token: AtomIO.SelectorToken<T>","unsubscribes: Array<() => void>","store: Internal.Store","socket: Socket","token: AtomIO.WritableToken<J>","myIdState__INTERNAL: AtomIO.RegularAtomToken<string | undefined>","myIdState: AtomIO.ReadonlyPureSelectorToken<string | undefined>","myUsernameState: AtomIO.RegularAtomToken<string | null>","optimisticUpdateQueue: AtomIO.RegularAtomToken<\n\tAtomIO.TransactionUpdate<any>[]\n>","confirmedUpdateQueue: AtomIO.RegularAtomToken<\n\tAtomIO.TransactionUpdate<any>[]\n>","store: Internal.Store","socket: Socket","token: AtomIO.TransactionToken<F>","store: Store","socket: Socket","continuity: ContinuityToken","optimisticUpdateQueue","confirmedUpdateQueue","epoch: number","payload: Json.Array","k: any","v: any"],"sources":["../../src/realtime-client/continuity/register-and-attempt-confirmed-update.ts","../../src/realtime-client/continuity/use-conceal-state.ts","../../src/realtime-client/continuity/use-reveal-state.ts","../../src/realtime-client/pull-atom.ts","../../src/realtime-client/pull-atom-family-member.ts","../../src/realtime-client/pull-mutable-atom.ts","../../src/realtime-client/pull-mutable-atom-family-member.ts","../../src/realtime-client/pull-selector.ts","../../src/realtime-client/pull-selector-family-member.ts","../../src/realtime-client/push-state.ts","../../src/realtime-client/realtime-client-stores/client-main-store.ts","../../src/realtime-client/realtime-client-stores/client-sync-store.ts","../../src/realtime-client/server-action.ts","../../src/realtime-client/sync-continuity.ts"],"sourcesContent":["import type * as AtomIO from \"atom.io\"\nimport type { Func, Store } from \"atom.io/internal\"\nimport {\n\tactUponStore,\n\tgetEpochNumberOfContinuity,\n\tingestTransactionUpdate,\n\tisRootStore,\n\tsetEpochNumberOfContinuity,\n\tsetIntoStore,\n} from \"atom.io/internal\"\nimport {\n\tconfirmedUpdateQueue,\n\toptimisticUpdateQueue,\n} from \"atom.io/realtime-client\"\nimport type { Socket } from \"atom.io/realtime-server\"\n\nexport const useRegisterAndAttemptConfirmedUpdate =\n\t(\n\t\tstore: Store,\n\t\tcontinuityKey: string,\n\t\tsocket: Socket,\n\t\toptimisticUpdates: AtomIO.TransactionUpdate<any>[],\n\t\tconfirmedUpdates: AtomIO.TransactionUpdate<any>[],\n\t) =>\n\t(confirmed: AtomIO.TransactionUpdate<Func>): void => {\n\t\tfunction reconcileEpoch(\n\t\t\toptimisticUpdate: AtomIO.TransactionUpdate<any>,\n\t\t\tconfirmedUpdate: AtomIO.TransactionUpdate<any>,\n\t\t): void {\n\t\t\tstore.logger.info(\n\t\t\t\t`🧑⚖️`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`reconciling updates`,\n\t\t\t)\n\t\t\tsetIntoStore(store, optimisticUpdateQueue, (queue) => {\n\t\t\t\tqueue.shift()\n\t\t\t\treturn queue\n\t\t\t})\n\t\t\tif (optimisticUpdate.id === confirmedUpdate.id) {\n\t\t\t\tconst clientResult = JSON.stringify(optimisticUpdate.updates)\n\t\t\t\tconst serverResult = JSON.stringify(confirmedUpdate.updates)\n\t\t\t\tif (clientResult === serverResult) {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`✅`,\n\t\t\t\t\t\t`continuity`,\n\t\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t\t`results for ${optimisticUpdate.id} match between client and server`,\n\t\t\t\t\t)\n\t\t\t\t\tsocket.emit(`ack:${continuityKey}`, confirmedUpdate.epoch)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// id mismatch\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`❌`,\n\t\t\t\t\t`continuity`,\n\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t`thought update #${confirmedUpdate.epoch} was ${optimisticUpdate.key}:${optimisticUpdate.id}, but it was actually ${confirmedUpdate.key}:${confirmedUpdate.id}`,\n\t\t\t\t)\n\t\t\t}\n\t\t\tstore.logger.info(\n\t\t\t\t`🧑⚖️`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`updates do not match`,\n\t\t\t\toptimisticUpdate,\n\t\t\t\tconfirmedUpdate,\n\t\t\t)\n\t\t\tconst reversedOptimisticUpdates = optimisticUpdates.toReversed()\n\t\t\tfor (const subsequentOptimistic of reversedOptimisticUpdates) {\n\t\t\t\tingestTransactionUpdate(`oldValue`, subsequentOptimistic, store)\n\t\t\t}\n\t\t\tstore.logger.info(\n\t\t\t\t`⏪`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`undid optimistic updates:`,\n\t\t\t\treversedOptimisticUpdates,\n\t\t\t)\n\t\t\tingestTransactionUpdate(`oldValue`, optimisticUpdate, store)\n\t\t\tstore.logger.info(\n\t\t\t\t`⏪`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`undid zeroth optimistic update`,\n\t\t\t\toptimisticUpdate,\n\t\t\t)\n\t\t\tingestTransactionUpdate(`newValue`, confirmedUpdate, store)\n\t\t\tstore.logger.info(\n\t\t\t\t`⏩`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`applied confirmed update`,\n\t\t\t\tconfirmedUpdate,\n\t\t\t)\n\t\t\tsocket.emit(`ack:${continuityKey}`, confirmedUpdate.epoch)\n\n\t\t\tfor (const subsequentOptimistic of optimisticUpdates) {\n\t\t\t\tconst token = {\n\t\t\t\t\ttype: `transaction`,\n\t\t\t\t\tkey: subsequentOptimistic.key,\n\t\t\t\t} as const\n\t\t\t\tconst { id, params } = subsequentOptimistic\n\t\t\t\tactUponStore(store, token, id)(...params)\n\t\t\t}\n\t\t\tstore.logger.info(\n\t\t\t\t`⏩`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`reapplied subsequent optimistic updates:`,\n\t\t\t\toptimisticUpdates,\n\t\t\t)\n\t\t}\n\n\t\tstore.logger.info(\n\t\t\t`🧑⚖️`,\n\t\t\t`continuity`,\n\t\t\tcontinuityKey,\n\t\t\t`integrating confirmed update`,\n\t\t\t{ confirmedUpdate: confirmed, confirmedUpdates, optimisticUpdates },\n\t\t)\n\t\tconst zerothOptimisticUpdate = optimisticUpdates[0]\n\t\tif (zerothOptimisticUpdate) {\n\t\t\tstore.logger.info(\n\t\t\t\t`🧑⚖️`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`has optimistic updates to reconcile`,\n\t\t\t)\n\t\t\tif (confirmed.epoch === zerothOptimisticUpdate.epoch) {\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`🧑⚖️`,\n\t\t\t\t\t`continuity`,\n\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t`epoch of confirmed update #${confirmed.epoch} matches zeroth optimistic update`,\n\t\t\t\t)\n\t\t\t\treconcileEpoch(zerothOptimisticUpdate, confirmed)\n\t\t\t\tfor (const nextConfirmed of confirmedUpdates) {\n\t\t\t\t\tconst nextOptimistic = optimisticUpdates[0]\n\t\t\t\t\tif (nextConfirmed.epoch === nextOptimistic?.epoch) {\n\t\t\t\t\t\treconcileEpoch(nextOptimistic, nextConfirmed)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// epoch mismatch\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`🧑⚖️`,\n\t\t\t\t\t`continuity`,\n\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t`epoch of confirmed update #${confirmed.epoch} does not match zeroth optimistic update #${zerothOptimisticUpdate.epoch}`,\n\t\t\t\t)\n\t\t\t\tconst confirmedUpdateIsAlreadyEnqueued = confirmedUpdates.some(\n\t\t\t\t\t(update) => update.epoch === confirmed.epoch,\n\t\t\t\t)\n\t\t\t\tif (!confirmedUpdateIsAlreadyEnqueued) {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`👈`,\n\t\t\t\t\t\t`continuity`,\n\t\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t\t`pushing confirmed update to queue`,\n\t\t\t\t\t\tconfirmed,\n\t\t\t\t\t)\n\t\t\t\t\tsetIntoStore(store, confirmedUpdateQueue, (queue) => {\n\t\t\t\t\t\tqueue.push(confirmed)\n\t\t\t\t\t\tqueue.sort((a, b) => a.epoch - b.epoch)\n\t\t\t\t\t\treturn queue\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tstore.logger.info(\n\t\t\t\t`🧑⚖️`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`has no optimistic updates to deal with`,\n\t\t\t)\n\t\t\tconst isRoot = isRootStore(store)\n\t\t\tlet continuityEpoch: number | undefined\n\t\t\tif (isRoot) {\n\t\t\t\tcontinuityEpoch = getEpochNumberOfContinuity(store, continuityKey)\n\t\t\t}\n\n\t\t\tif (continuityEpoch === confirmed.epoch - 1) {\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`✅`,\n\t\t\t\t\t`continuity`,\n\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t`integrating update #${confirmed.epoch} (${confirmed.key} ${confirmed.id})`,\n\t\t\t\t)\n\t\t\t\tingestTransactionUpdate(`newValue`, confirmed, store)\n\t\t\t\tsocket.emit(`ack:${continuityKey}`, confirmed.epoch)\n\t\t\t\tsetEpochNumberOfContinuity(store, continuityKey, confirmed.epoch)\n\t\t\t} else if (isRoot && continuityEpoch !== undefined) {\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`🧑⚖️`,\n\t\t\t\t\t`continuity`,\n\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t`received update #${confirmed.epoch} but still waiting for update #${\n\t\t\t\t\t\tcontinuityEpoch + 1\n\t\t\t\t\t}`,\n\t\t\t\t\t{\n\t\t\t\t\t\tclientEpoch: continuityEpoch,\n\t\t\t\t\t\tserverEpoch: confirmed.epoch,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tconst confirmedUpdateIsAlreadyEnqueued = confirmedUpdates.some(\n\t\t\t\t\t(update) => update.epoch === confirmed.epoch,\n\t\t\t\t)\n\t\t\t\tif (confirmedUpdateIsAlreadyEnqueued) {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`👍`,\n\t\t\t\t\t\t`continuity`,\n\t\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t\t`confirmed update #${confirmed.epoch} is already enqueued`,\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`👈`,\n\t\t\t\t\t\t`continuity`,\n\t\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t\t`pushing confirmed update #${confirmed.epoch} to queue`,\n\t\t\t\t\t)\n\t\t\t\t\tsetIntoStore(store, confirmedUpdateQueue, (queue) => {\n\t\t\t\t\t\tqueue.push(confirmed)\n\t\t\t\t\t\tqueue.sort((a, b) => a.epoch - b.epoch)\n\t\t\t\t\t\treturn queue\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n","import type { AtomToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { disposeAtom } from \"atom.io/internal\"\n\nexport function useConcealState(store: Store) {\n\treturn (concealed: AtomToken<unknown>[]): void => {\n\t\tfor (const token of concealed) {\n\t\t\tdisposeAtom(store, token)\n\t\t}\n\t}\n}\n","import { setIntoStore, type Store } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nexport function useRevealState(store: Store) {\n\treturn (revealed: Json.Array): void => {\n\t\tlet i = 0\n\t\tlet k: any\n\t\tlet v: any\n\t\tfor (const x of revealed) {\n\t\t\tif (i % 2 === 0) {\n\t\t\t\tk = x\n\t\t\t} else {\n\t\t\t\tv = x\n\t\t\t\tsetIntoStore(store, k, v)\n\t\t\t}\n\t\t\ti++\n\t\t}\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport { setIntoStore, type Store } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pullAtom<J extends Json.Serializable>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.RegularAtomToken<J>,\n): () => void {\n\tconst setServedValue = (data: J) => {\n\t\tsetIntoStore(store, token, data)\n\t}\n\tsocket.on(`serve:${token.key}`, setServedValue)\n\tsocket.emit(`sub:${token.key}`)\n\treturn () => {\n\t\tsocket.off(`serve:${token.key}`, setServedValue)\n\t\tsocket.emit(`unsub:${token.key}`)\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport { setIntoStore, type Store } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport { parseJson } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\n/* eslint-disable no-console */\n\nexport function pullAtomFamilyMember<J extends Json.Serializable>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.RegularAtomToken<J>,\n): () => void {\n\tif (!(`family` in token)) {\n\t\tconsole.error(`Token is not a family member:`, token)\n\t\treturn () => {}\n\t}\n\tconst { key: familyKey, subKey: serializedSubKey } = token.family\n\tconst subKey = parseJson(serializedSubKey)\n\tsocket?.on(`serve:${token.key}`, (data: J) => {\n\t\tsetIntoStore(store, token, data)\n\t})\n\tsocket?.emit(`sub:${familyKey}`, subKey)\n\treturn () => {\n\t\tsocket?.off(`serve:${token.key}`)\n\t\tsocket?.emit(`unsub:${token.key}`)\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { AsJSON, Store, Transceiver } from \"atom.io/internal\"\nimport { getJsonToken, getUpdateToken, setIntoStore } from \"atom.io/internal\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pullMutableAtom<T extends Transceiver<any, any>>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.MutableAtomToken<T>,\n): () => void {\n\tconst jsonToken = getJsonToken(store, token)\n\tconst updateToken = getUpdateToken(token)\n\tsocket.on(`init:${token.key}`, (data: AsJSON<T>) => {\n\t\tsetIntoStore(store, jsonToken, data)\n\t})\n\tsocket.on(\n\t\t`next:${token.key}`,\n\t\t(data: T extends Transceiver<infer Update, any> ? Update : never) => {\n\t\t\tsetIntoStore(store, updateToken, data)\n\t\t},\n\t)\n\tsocket.emit(`sub:${token.key}`)\n\treturn () => {\n\t\tsocket.off(`init:${token.key}`)\n\t\tsocket.off(`next:${token.key}`)\n\t\tsocket.emit(`unsub:${token.key}`)\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { AsJSON, Store, Transceiver } from \"atom.io/internal\"\nimport { getJsonToken, getUpdateToken, setIntoStore } from \"atom.io/internal\"\nimport { parseJson } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\n/* eslint-disable no-console */\n\nexport function pullMutableAtomFamilyMember<T extends Transceiver<any, any>>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.MutableAtomToken<T>,\n): () => void {\n\tif (!(`family` in token)) {\n\t\tconsole.error(`Token is not a family member:`, token)\n\t\treturn () => {}\n\t}\n\tconst { key: familyKey, subKey: serializedSubKey } = token.family\n\tconst subKey = parseJson(serializedSubKey)\n\tsocket.on(`init:${token.key}`, (data: AsJSON<T>) => {\n\t\tconst jsonToken = getJsonToken(store, token)\n\t\tsetIntoStore(store, jsonToken, data)\n\t})\n\tsocket.on(\n\t\t`next:${token.key}`,\n\t\t(data: T extends Transceiver<infer Signal, any> ? Signal : never) => {\n\t\t\tconst trackerToken = getUpdateToken(token)\n\t\t\tsetIntoStore(store, trackerToken, data)\n\t\t},\n\t)\n\tsocket.emit(`sub:${familyKey}`, subKey)\n\treturn () => {\n\t\tsocket.off(`serve:${token.key}`)\n\t\tsocket.emit(`unsub:${token.key}`)\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { pullAtom } from \"./pull-atom\"\nimport { pullMutableAtom } from \"./pull-mutable-atom\"\n\nexport function pullSelector<T>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.SelectorToken<T>,\n): () => void {\n\tconst atomKeys = store.selectorAtoms.getRelatedKeys(token.key)\n\tconst unsubscribes: Array<() => void> = []\n\tif (atomKeys) {\n\t\tfor (const atomKey of atomKeys) {\n\t\t\tconst atom = store.atoms.get(atomKey)\n\t\t\tif (!atom) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tswitch (atom.type) {\n\t\t\t\tcase `atom`: {\n\t\t\t\t\tunsubscribes.push(pullAtom(store, socket, atom))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase `mutable_atom`: {\n\t\t\t\t\tunsubscribes.push(pullMutableAtom(store, socket, atom))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn () => {\n\t\tfor (const unsubscribe of unsubscribes) {\n\t\t\tunsubscribe()\n\t\t}\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { pullAtomFamilyMember } from \"./pull-atom-family-member\"\nimport { pullMutableAtomFamilyMember } from \"./pull-mutable-atom-family-member\"\n\n/* eslint-disable no-console */\n\nexport function pullSelectorFamilyMember<T>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.SelectorToken<T>,\n): () => void {\n\tif (!(`family` in token)) {\n\t\tconsole.error(`Token is not a family member:`, token)\n\t\treturn () => {}\n\t}\n\tconst atomKeys = store.selectorAtoms.getRelatedKeys(token.key)\n\tconst unsubscribes: Array<() => void> = []\n\tif (atomKeys) {\n\t\tfor (const atomKey of atomKeys) {\n\t\t\tconst atom = store.atoms.get(atomKey)\n\t\t\tif (!atom) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tswitch (atom.type) {\n\t\t\t\tcase `atom`: {\n\t\t\t\t\tunsubscribes.push(pullAtomFamilyMember(store, socket, atom))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase `mutable_atom`: {\n\t\t\t\t\tunsubscribes.push(pullMutableAtomFamilyMember(store, socket, atom))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn () => {\n\t\tfor (const unsubscribe of unsubscribes) {\n\t\t\tunsubscribe()\n\t\t}\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport * as Internal from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pushState<J extends Json.Serializable>(\n\tstore: Internal.Store,\n\tsocket: Socket,\n\ttoken: AtomIO.WritableToken<J>,\n): () => void {\n\tsocket.emit(`claim:${token.key}`)\n\tInternal.subscribeToState(store, token, `push`, ({ newValue }) => {\n\t\tsocket.emit(`pub:${token.key}`, newValue)\n\t})\n\treturn () => {\n\t\tsocket.off(`pub:${token.key}`)\n\t\tsocket.emit(`unclaim:${token.key}`)\n\t}\n}\n","import * as AtomIO from \"atom.io\"\nimport { persistSync } from \"atom.io/web\"\n\nexport const myIdState__INTERNAL: AtomIO.RegularAtomToken<string | undefined> =\n\tAtomIO.atom<string | undefined>({\n\t\tkey: `mySocketId__INTERNAL`,\n\t\tdefault: undefined,\n\t})\nexport const myIdState: AtomIO.ReadonlyPureSelectorToken<string | undefined> =\n\tAtomIO.selector<string | undefined>({\n\t\tkey: `mySocketId`,\n\t\tget: ({ get }) => get(myIdState__INTERNAL),\n\t})\n\nexport const myUsernameState: AtomIO.RegularAtomToken<string | null> =\n\tAtomIO.atom<string | null>({\n\t\tkey: `myName`,\n\t\tdefault: null,\n\t\teffects:\n\t\t\ttypeof window === `undefined`\n\t\t\t\t? []\n\t\t\t\t: [persistSync(window.localStorage, JSON, `myUsername`)],\n\t})\n","import * as AtomIO from \"atom.io\"\n\nexport const optimisticUpdateQueue: AtomIO.RegularAtomToken<\n\tAtomIO.TransactionUpdate<any>[]\n> = AtomIO.atom<AtomIO.TransactionUpdate<any>[]>({\n\tkey: `updateQueue`,\n\tdefault: () => [],\n})\n\nexport const confirmedUpdateQueue: AtomIO.RegularAtomToken<\n\tAtomIO.TransactionUpdate<any>[]\n> = AtomIO.atom<AtomIO.TransactionUpdate<any>[]>({\n\tkey: `serverConfirmedUpdateQueue`,\n\tdefault: () => [],\n})\n","import type * as AtomIO from \"atom.io\"\nimport * as Internal from \"atom.io/internal\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function serverAction<F extends Internal.Func>(\n\tstore: Internal.Store,\n\tsocket: Socket,\n\ttoken: AtomIO.TransactionToken<F>,\n): () => void {\n\tconst unsubscribeFromLocalUpdates = Internal.subscribeToTransaction(\n\t\tstore,\n\t\ttoken,\n\t\t`tx-run:${token.key}:${socket.id}`,\n\t\t(clientUpdate) => {\n\t\t\tsocket.emit(`tx-run:${token.key}`, clientUpdate)\n\t\t},\n\t)\n\n\treturn () => {\n\t\tunsubscribeFromLocalUpdates()\n\t}\n}\n","import type { Store } from \"atom.io/internal\"\nimport {\n\tassignTransactionToContinuity,\n\tgetFromStore,\n\tgetJsonToken,\n\tsetEpochNumberOfContinuity,\n\tsetIntoStore,\n\tsubscribeToTransaction,\n} from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport type { ContinuityToken } from \"atom.io/realtime\"\nimport {\n\tconfirmedUpdateQueue,\n\toptimisticUpdateQueue,\n} from \"atom.io/realtime-client\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { useRegisterAndAttemptConfirmedUpdate } from \"./continuity/register-and-attempt-confirmed-update\"\nimport { useConcealState } from \"./continuity/use-conceal-state\"\nimport { useRevealState } from \"./continuity/use-reveal-state\"\n\nexport function syncContinuity(\n\tstore: Store,\n\tsocket: Socket,\n\tcontinuity: ContinuityToken,\n): () => void {\n\tconst continuityKey = continuity.key\n\tconst optimisticUpdates = getFromStore(store, optimisticUpdateQueue)\n\tconst confirmedUpdates = getFromStore(store, confirmedUpdateQueue)\n\n\tconst initializeContinuity = (epoch: number, payload: Json.Array) => {\n\t\tsocket.off(`continuity-init:${continuityKey}`, initializeContinuity)\n\t\tlet i = 0\n\t\tlet k: any\n\t\tlet v: any\n\t\tfor (const x of payload) {\n\t\t\tif (i % 2 === 0) {\n\t\t\t\tk = x\n\t\t\t} else {\n\t\t\t\tv = x\n\t\t\t\tif (`type` in k && k.type === `mutable_atom`) {\n\t\t\t\t\tk = getJsonToken(store, k)\n\t\t\t\t}\n\t\t\t\tsetIntoStore(store, k, v)\n\t\t\t}\n\t\t\ti++\n\t\t}\n\t\tsetEpochNumberOfContinuity(store, continuityKey, epoch)\n\t}\n\tsocket.off(`continuity-init:${continuityKey}`)\n\tsocket.on(`continuity-init:${continuityKey}`, initializeContinuity)\n\n\tconst registerAndAttemptConfirmedUpdate = useRegisterAndAttemptConfirmedUpdate(\n\t\tstore,\n\t\tcontinuityKey,\n\t\tsocket,\n\t\toptimisticUpdates,\n\t\tconfirmedUpdates,\n\t)\n\tsocket.off(`tx-new:${continuityKey}`)\n\tsocket.on(`tx-new:${continuityKey}`, registerAndAttemptConfirmedUpdate)\n\n\tconst unsubscribeFunctions = continuity.actions.map((transaction) => {\n\t\tassignTransactionToContinuity(store, continuityKey, transaction.key)\n\t\tconst unsubscribeFromTransactionUpdates = subscribeToTransaction(\n\t\t\tstore,\n\t\t\ttransaction,\n\t\t\t`tx-run:${continuityKey}`,\n\t\t\t(clientUpdate) => {\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`🤞`,\n\t\t\t\t\t`continuity`,\n\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t`enqueuing optimistic update`,\n\t\t\t\t)\n\t\t\t\tconst optimisticUpdateIndex = optimisticUpdates.findIndex(\n\t\t\t\t\t(update) => update.id === clientUpdate.id,\n\t\t\t\t)\n\t\t\t\tif (optimisticUpdateIndex === -1) {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`🤞`,\n\t\t\t\t\t\t`continuity`,\n\t\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t\t`enqueuing new optimistic update`,\n\t\t\t\t\t)\n\t\t\t\t\tsetIntoStore(store, optimisticUpdateQueue, (queue) => {\n\t\t\t\t\t\tqueue.push(clientUpdate)\n\t\t\t\t\t\tqueue.sort((a, b) => a.epoch - b.epoch)\n\t\t\t\t\t\treturn queue\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`🤞`,\n\t\t\t\t\t\t`continuity`,\n\t\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t\t`replacing existing optimistic update at index ${optimisticUpdateIndex}`,\n\t\t\t\t\t)\n\t\t\t\t\tsetIntoStore(store, optimisticUpdateQueue, (queue) => {\n\t\t\t\t\t\tqueue[optimisticUpdateIndex] = clientUpdate\n\t\t\t\t\t\treturn queue\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tsocket.emit(`tx-run:${continuityKey}`, {\n\t\t\t\t\tid: clientUpdate.id,\n\t\t\t\t\tkey: transaction.key,\n\t\t\t\t\tparams: clientUpdate.params,\n\t\t\t\t})\n\t\t\t},\n\t\t)\n\t\treturn unsubscribeFromTransactionUpdates\n\t})\n\n\tconst revealState = useRevealState(store)\n\tconst concealState = useConcealState(store)\n\tsocket.on(`reveal:${continuityKey}`, revealState)\n\tsocket.on(`conceal:${continuityKey}`, concealState)\n\n\tsocket.emit(`get:${continuityKey}`)\n\treturn () => {\n\t\tsocket.off(`continuity-init:${continuityKey}`)\n\t\tsocket.off(`tx-new:${continuityKey}`)\n\t\tfor (const unsubscribe of unsubscribeFunctions) unsubscribe()\n\t\t// socket.emit(`unsub:${continuityKey}`)\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["store: Store","continuityKey: string","socket: Socket","optimisticUpdates: AtomIO.TransactionUpdate<any>[]","confirmedUpdates: AtomIO.TransactionUpdate<any>[]","confirmed: AtomIO.TransactionUpdate<Fn>","optimisticUpdate: AtomIO.TransactionUpdate<any>","confirmedUpdate: AtomIO.TransactionUpdate<any>","optimisticUpdateQueue","confirmedUpdateQueue","continuityEpoch: number | undefined","store: Store","concealed: AtomToken<unknown>[]","store: Store","revealed: Json.Array","k: any","v: any","store: Store","socket: Socket","token: AtomIO.RegularAtomToken<J>","data: J","store: Store","socket: Socket","token: AtomIO.RegularAtomToken<J>","data: J","store: Store","socket: Socket","token: AtomIO.MutableAtomToken<T>","data: AsJSON<T>","data: SignalFrom<T>","store: Store","socket: Socket","token: AtomIO.MutableAtomToken<T>","data: AsJSON<T>","data: SignalFrom<T>","store: Store","socket: Socket","token: AtomIO.SelectorToken<T>","unsubscribes: Array<() => void>","store: Store","socket: Socket","token: AtomIO.SelectorToken<T>","unsubscribes: Array<() => void>","store: Store","socket: Socket","token: WritableToken<J>","myIdState__INTERNAL: AtomIO.RegularAtomToken<string | undefined>","myIdState: AtomIO.ReadonlyPureSelectorToken<string | undefined>","myUsernameState: AtomIO.RegularAtomToken<string | null>","optimisticUpdateQueue: AtomIO.RegularAtomToken<\n\tAtomIO.TransactionUpdate<any>[]\n>","confirmedUpdateQueue: AtomIO.RegularAtomToken<\n\tAtomIO.TransactionUpdate<any>[]\n>","store: Store","socket: Socket","token: AtomIO.TransactionToken<F>","store: Store","socket: Socket","continuity: ContinuityToken","optimisticUpdateQueue","confirmedUpdateQueue","epoch: number","payload: Json.Array","k: any","v: any"],"sources":["../../src/realtime-client/continuity/register-and-attempt-confirmed-update.ts","../../src/realtime-client/continuity/use-conceal-state.ts","../../src/realtime-client/continuity/use-reveal-state.ts","../../src/realtime-client/pull-atom.ts","../../src/realtime-client/pull-atom-family-member.ts","../../src/realtime-client/pull-mutable-atom.ts","../../src/realtime-client/pull-mutable-atom-family-member.ts","../../src/realtime-client/pull-selector.ts","../../src/realtime-client/pull-selector-family-member.ts","../../src/realtime-client/push-state.ts","../../src/realtime-client/realtime-client-stores/client-main-store.ts","../../src/realtime-client/realtime-client-stores/client-sync-store.ts","../../src/realtime-client/server-action.ts","../../src/realtime-client/sync-continuity.ts"],"sourcesContent":["import type * as AtomIO from \"atom.io\"\nimport type { Fn, Store } from \"atom.io/internal\"\nimport {\n\tactUponStore,\n\tgetEpochNumberOfContinuity,\n\tingestTransactionUpdate,\n\tisRootStore,\n\tsetEpochNumberOfContinuity,\n\tsetIntoStore,\n} from \"atom.io/internal\"\nimport {\n\tconfirmedUpdateQueue,\n\toptimisticUpdateQueue,\n} from \"atom.io/realtime-client\"\nimport type { Socket } from \"atom.io/realtime-server\"\n\nexport const useRegisterAndAttemptConfirmedUpdate =\n\t(\n\t\tstore: Store,\n\t\tcontinuityKey: string,\n\t\tsocket: Socket,\n\t\toptimisticUpdates: AtomIO.TransactionUpdate<any>[],\n\t\tconfirmedUpdates: AtomIO.TransactionUpdate<any>[],\n\t) =>\n\t(confirmed: AtomIO.TransactionUpdate<Fn>): void => {\n\t\tfunction reconcileEpoch(\n\t\t\toptimisticUpdate: AtomIO.TransactionUpdate<any>,\n\t\t\tconfirmedUpdate: AtomIO.TransactionUpdate<any>,\n\t\t): void {\n\t\t\tstore.logger.info(\n\t\t\t\t`🧑⚖️`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`reconciling updates`,\n\t\t\t)\n\t\t\tsetIntoStore(store, optimisticUpdateQueue, (queue) => {\n\t\t\t\tqueue.shift()\n\t\t\t\treturn queue\n\t\t\t})\n\t\t\tif (optimisticUpdate.id === confirmedUpdate.id) {\n\t\t\t\tconst clientResult = JSON.stringify(optimisticUpdate.updates)\n\t\t\t\tconst serverResult = JSON.stringify(confirmedUpdate.updates)\n\t\t\t\tif (clientResult === serverResult) {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`✅`,\n\t\t\t\t\t\t`continuity`,\n\t\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t\t`results for ${optimisticUpdate.id} match between client and server`,\n\t\t\t\t\t)\n\t\t\t\t\tsocket.emit(`ack:${continuityKey}`, confirmedUpdate.epoch)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// id mismatch\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`❌`,\n\t\t\t\t\t`continuity`,\n\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t`thought update #${confirmedUpdate.epoch} was ${optimisticUpdate.key}:${optimisticUpdate.id}, but it was actually ${confirmedUpdate.key}:${confirmedUpdate.id}`,\n\t\t\t\t)\n\t\t\t}\n\t\t\tstore.logger.info(\n\t\t\t\t`🧑⚖️`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`updates do not match`,\n\t\t\t\toptimisticUpdate,\n\t\t\t\tconfirmedUpdate,\n\t\t\t)\n\t\t\tconst reversedOptimisticUpdates = optimisticUpdates.toReversed()\n\t\t\tfor (const subsequentOptimistic of reversedOptimisticUpdates) {\n\t\t\t\tingestTransactionUpdate(`oldValue`, subsequentOptimistic, store)\n\t\t\t}\n\t\t\tstore.logger.info(\n\t\t\t\t`⏪`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`undid optimistic updates:`,\n\t\t\t\treversedOptimisticUpdates,\n\t\t\t)\n\t\t\tingestTransactionUpdate(`oldValue`, optimisticUpdate, store)\n\t\t\tstore.logger.info(\n\t\t\t\t`⏪`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`undid zeroth optimistic update`,\n\t\t\t\toptimisticUpdate,\n\t\t\t)\n\t\t\tingestTransactionUpdate(`newValue`, confirmedUpdate, store)\n\t\t\tstore.logger.info(\n\t\t\t\t`⏩`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`applied confirmed update`,\n\t\t\t\tconfirmedUpdate,\n\t\t\t)\n\t\t\tsocket.emit(`ack:${continuityKey}`, confirmedUpdate.epoch)\n\n\t\t\tfor (const subsequentOptimistic of optimisticUpdates) {\n\t\t\t\tconst token = {\n\t\t\t\t\ttype: `transaction`,\n\t\t\t\t\tkey: subsequentOptimistic.key,\n\t\t\t\t} as const\n\t\t\t\tconst { id, params } = subsequentOptimistic\n\t\t\t\tactUponStore(store, token, id)(...params)\n\t\t\t}\n\t\t\tstore.logger.info(\n\t\t\t\t`⏩`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`reapplied subsequent optimistic updates:`,\n\t\t\t\toptimisticUpdates,\n\t\t\t)\n\t\t}\n\n\t\tstore.logger.info(\n\t\t\t`🧑⚖️`,\n\t\t\t`continuity`,\n\t\t\tcontinuityKey,\n\t\t\t`integrating confirmed update`,\n\t\t\t{ confirmedUpdate: confirmed, confirmedUpdates, optimisticUpdates },\n\t\t)\n\t\tconst zerothOptimisticUpdate = optimisticUpdates[0]\n\t\tif (zerothOptimisticUpdate) {\n\t\t\tstore.logger.info(\n\t\t\t\t`🧑⚖️`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`has optimistic updates to reconcile`,\n\t\t\t)\n\t\t\tif (confirmed.epoch === zerothOptimisticUpdate.epoch) {\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`🧑⚖️`,\n\t\t\t\t\t`continuity`,\n\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t`epoch of confirmed update #${confirmed.epoch} matches zeroth optimistic update`,\n\t\t\t\t)\n\t\t\t\treconcileEpoch(zerothOptimisticUpdate, confirmed)\n\t\t\t\tfor (const nextConfirmed of confirmedUpdates) {\n\t\t\t\t\tconst nextOptimistic = optimisticUpdates[0]\n\t\t\t\t\tif (nextConfirmed.epoch === nextOptimistic?.epoch) {\n\t\t\t\t\t\treconcileEpoch(nextOptimistic, nextConfirmed)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// epoch mismatch\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`🧑⚖️`,\n\t\t\t\t\t`continuity`,\n\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t`epoch of confirmed update #${confirmed.epoch} does not match zeroth optimistic update #${zerothOptimisticUpdate.epoch}`,\n\t\t\t\t)\n\t\t\t\tconst confirmedUpdateIsAlreadyEnqueued = confirmedUpdates.some(\n\t\t\t\t\t(update) => update.epoch === confirmed.epoch,\n\t\t\t\t)\n\t\t\t\tif (!confirmedUpdateIsAlreadyEnqueued) {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`👈`,\n\t\t\t\t\t\t`continuity`,\n\t\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t\t`pushing confirmed update to queue`,\n\t\t\t\t\t\tconfirmed,\n\t\t\t\t\t)\n\t\t\t\t\tsetIntoStore(store, confirmedUpdateQueue, (queue) => {\n\t\t\t\t\t\tqueue.push(confirmed)\n\t\t\t\t\t\tqueue.sort((a, b) => a.epoch - b.epoch)\n\t\t\t\t\t\treturn queue\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tstore.logger.info(\n\t\t\t\t`🧑⚖️`,\n\t\t\t\t`continuity`,\n\t\t\t\tcontinuityKey,\n\t\t\t\t`has no optimistic updates to deal with`,\n\t\t\t)\n\t\t\tconst isRoot = isRootStore(store)\n\t\t\tlet continuityEpoch: number | undefined\n\t\t\tif (isRoot) {\n\t\t\t\tcontinuityEpoch = getEpochNumberOfContinuity(store, continuityKey)\n\t\t\t}\n\n\t\t\tif (continuityEpoch === confirmed.epoch - 1) {\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`✅`,\n\t\t\t\t\t`continuity`,\n\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t`integrating update #${confirmed.epoch} (${confirmed.key} ${confirmed.id})`,\n\t\t\t\t)\n\t\t\t\tingestTransactionUpdate(`newValue`, confirmed, store)\n\t\t\t\tsocket.emit(`ack:${continuityKey}`, confirmed.epoch)\n\t\t\t\tsetEpochNumberOfContinuity(store, continuityKey, confirmed.epoch)\n\t\t\t} else if (isRoot && continuityEpoch !== undefined) {\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`🧑⚖️`,\n\t\t\t\t\t`continuity`,\n\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t`received update #${confirmed.epoch} but still waiting for update #${\n\t\t\t\t\t\tcontinuityEpoch + 1\n\t\t\t\t\t}`,\n\t\t\t\t\t{\n\t\t\t\t\t\tclientEpoch: continuityEpoch,\n\t\t\t\t\t\tserverEpoch: confirmed.epoch,\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tconst confirmedUpdateIsAlreadyEnqueued = confirmedUpdates.some(\n\t\t\t\t\t(update) => update.epoch === confirmed.epoch,\n\t\t\t\t)\n\t\t\t\tif (confirmedUpdateIsAlreadyEnqueued) {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`👍`,\n\t\t\t\t\t\t`continuity`,\n\t\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t\t`confirmed update #${confirmed.epoch} is already enqueued`,\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`👈`,\n\t\t\t\t\t\t`continuity`,\n\t\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t\t`pushing confirmed update #${confirmed.epoch} to queue`,\n\t\t\t\t\t)\n\t\t\t\t\tsetIntoStore(store, confirmedUpdateQueue, (queue) => {\n\t\t\t\t\t\tqueue.push(confirmed)\n\t\t\t\t\t\tqueue.sort((a, b) => a.epoch - b.epoch)\n\t\t\t\t\t\treturn queue\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n","import type { AtomToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { disposeAtom } from \"atom.io/internal\"\n\nexport function useConcealState(store: Store) {\n\treturn (concealed: AtomToken<unknown>[]): void => {\n\t\tfor (const token of concealed) {\n\t\t\tdisposeAtom(store, token)\n\t\t}\n\t}\n}\n","import { setIntoStore, type Store } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nexport function useRevealState(store: Store) {\n\treturn (revealed: Json.Array): void => {\n\t\tlet i = 0\n\t\tlet k: any\n\t\tlet v: any\n\t\tfor (const x of revealed) {\n\t\t\tif (i % 2 === 0) {\n\t\t\t\tk = x\n\t\t\t} else {\n\t\t\t\tv = x\n\t\t\t\tsetIntoStore(store, k, v)\n\t\t\t}\n\t\t\ti++\n\t\t}\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport { setIntoStore, type Store } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pullAtom<J extends Json.Serializable>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.RegularAtomToken<J>,\n): () => void {\n\tconst setServedValue = (data: J) => {\n\t\tsetIntoStore(store, token, data)\n\t}\n\tsocket.on(`serve:${token.key}`, setServedValue)\n\tsocket.emit(`sub:${token.key}`)\n\treturn () => {\n\t\tsocket.off(`serve:${token.key}`, setServedValue)\n\t\tsocket.emit(`unsub:${token.key}`)\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport { setIntoStore, type Store } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport { parseJson } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\n/* eslint-disable no-console */\n\nexport function pullAtomFamilyMember<J extends Json.Serializable>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.RegularAtomToken<J>,\n): () => void {\n\tif (!(`family` in token)) {\n\t\tconsole.error(`Token is not a family member:`, token)\n\t\treturn () => {}\n\t}\n\tconst { key: familyKey, subKey: serializedSubKey } = token.family\n\tconst subKey = parseJson(serializedSubKey)\n\tsocket?.on(`serve:${token.key}`, (data: J) => {\n\t\tsetIntoStore(store, token, data)\n\t})\n\tsocket?.emit(`sub:${familyKey}`, subKey)\n\treturn () => {\n\t\tsocket?.off(`serve:${token.key}`)\n\t\tsocket?.emit(`unsub:${token.key}`)\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { AsJSON, SignalFrom, Store, Transceiver } from \"atom.io/internal\"\nimport { getJsonToken, getUpdateToken, setIntoStore } from \"atom.io/internal\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pullMutableAtom<T extends Transceiver<any, any, any>>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.MutableAtomToken<T>,\n): () => void {\n\tconst jsonToken = getJsonToken(store, token)\n\tconst updateToken = getUpdateToken(token)\n\tsocket.on(`init:${token.key}`, (data: AsJSON<T>) => {\n\t\tsetIntoStore(store, jsonToken, data)\n\t})\n\tsocket.on(`next:${token.key}`, (data: SignalFrom<T>) => {\n\t\tsetIntoStore(store, updateToken, data)\n\t})\n\tsocket.emit(`sub:${token.key}`)\n\treturn () => {\n\t\tsocket.off(`init:${token.key}`)\n\t\tsocket.off(`next:${token.key}`)\n\t\tsocket.emit(`unsub:${token.key}`)\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { AsJSON, SignalFrom, Store, Transceiver } from \"atom.io/internal\"\nimport { getJsonToken, getUpdateToken, setIntoStore } from \"atom.io/internal\"\nimport { parseJson } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\n/* eslint-disable no-console */\n\nexport function pullMutableAtomFamilyMember<\n\tT extends Transceiver<any, any, any>,\n>(store: Store, socket: Socket, token: AtomIO.MutableAtomToken<T>): () => void {\n\tif (!(`family` in token)) {\n\t\tconsole.error(`Token is not a family member:`, token)\n\t\treturn () => {}\n\t}\n\tconst { key: familyKey, subKey: serializedSubKey } = token.family\n\tconst subKey = parseJson(serializedSubKey)\n\tsocket.on(`init:${token.key}`, (data: AsJSON<T>) => {\n\t\tconst jsonToken = getJsonToken(store, token)\n\t\tsetIntoStore(store, jsonToken, data)\n\t})\n\tsocket.on(`next:${token.key}`, (data: SignalFrom<T>) => {\n\t\tconst trackerToken = getUpdateToken(token)\n\t\tsetIntoStore(store, trackerToken, data)\n\t})\n\tsocket.emit(`sub:${familyKey}`, subKey)\n\treturn () => {\n\t\tsocket.off(`serve:${token.key}`)\n\t\tsocket.emit(`unsub:${token.key}`)\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { pullAtom } from \"./pull-atom\"\nimport { pullMutableAtom } from \"./pull-mutable-atom\"\n\nexport function pullSelector<T>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.SelectorToken<T>,\n): () => void {\n\tconst atomKeys = store.selectorAtoms.getRelatedKeys(token.key)\n\tconst unsubscribes: Array<() => void> = []\n\tif (atomKeys) {\n\t\tfor (const atomKey of atomKeys) {\n\t\t\tconst atom = store.atoms.get(atomKey)\n\t\t\tif (!atom) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tswitch (atom.type) {\n\t\t\t\tcase `atom`: {\n\t\t\t\t\tunsubscribes.push(pullAtom(store, socket, atom))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase `mutable_atom`: {\n\t\t\t\t\tunsubscribes.push(pullMutableAtom(store, socket, atom))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn () => {\n\t\tfor (const unsubscribe of unsubscribes) {\n\t\t\tunsubscribe()\n\t\t}\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { pullAtomFamilyMember } from \"./pull-atom-family-member\"\nimport { pullMutableAtomFamilyMember } from \"./pull-mutable-atom-family-member\"\n\n/* eslint-disable no-console */\n\nexport function pullSelectorFamilyMember<T>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.SelectorToken<T>,\n): () => void {\n\tif (!(`family` in token)) {\n\t\tconsole.error(`Token is not a family member:`, token)\n\t\treturn () => {}\n\t}\n\tconst atomKeys = store.selectorAtoms.getRelatedKeys(token.key)\n\tconst unsubscribes: Array<() => void> = []\n\tif (atomKeys) {\n\t\tfor (const atomKey of atomKeys) {\n\t\t\tconst atom = store.atoms.get(atomKey)\n\t\t\tif (!atom) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tswitch (atom.type) {\n\t\t\t\tcase `atom`: {\n\t\t\t\t\tunsubscribes.push(pullAtomFamilyMember(store, socket, atom))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase `mutable_atom`: {\n\t\t\t\t\tunsubscribes.push(pullMutableAtomFamilyMember(store, socket, atom))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn () => {\n\t\tfor (const unsubscribe of unsubscribes) {\n\t\t\tunsubscribe()\n\t\t}\n\t}\n}\n","import type { WritableToken } from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { subscribeToState } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pushState<J extends Json.Serializable>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: WritableToken<J>,\n): () => void {\n\tsocket.emit(`claim:${token.key}`)\n\tsubscribeToState(store, token, `push`, ({ newValue }) => {\n\t\tsocket.emit(`pub:${token.key}`, newValue)\n\t})\n\treturn () => {\n\t\tsocket.off(`pub:${token.key}`)\n\t\tsocket.emit(`unclaim:${token.key}`)\n\t}\n}\n","import * as AtomIO from \"atom.io\"\nimport { persistSync } from \"atom.io/web\"\n\nexport const myIdState__INTERNAL: AtomIO.RegularAtomToken<string | undefined> =\n\tAtomIO.atom<string | undefined>({\n\t\tkey: `mySocketId__INTERNAL`,\n\t\tdefault: undefined,\n\t})\nexport const myIdState: AtomIO.ReadonlyPureSelectorToken<string | undefined> =\n\tAtomIO.selector<string | undefined>({\n\t\tkey: `mySocketId`,\n\t\tget: ({ get }) => get(myIdState__INTERNAL),\n\t})\n\nexport const myUsernameState: AtomIO.RegularAtomToken<string | null> =\n\tAtomIO.atom<string | null>({\n\t\tkey: `myName`,\n\t\tdefault: null,\n\t\teffects:\n\t\t\ttypeof window === `undefined`\n\t\t\t\t? []\n\t\t\t\t: [persistSync(window.localStorage, JSON, `myUsername`)],\n\t})\n","import * as AtomIO from \"atom.io\"\n\nexport const optimisticUpdateQueue: AtomIO.RegularAtomToken<\n\tAtomIO.TransactionUpdate<any>[]\n> = AtomIO.atom<AtomIO.TransactionUpdate<any>[]>({\n\tkey: `updateQueue`,\n\tdefault: () => [],\n})\n\nexport const confirmedUpdateQueue: AtomIO.RegularAtomToken<\n\tAtomIO.TransactionUpdate<any>[]\n> = AtomIO.atom<AtomIO.TransactionUpdate<any>[]>({\n\tkey: `serverConfirmedUpdateQueue`,\n\tdefault: () => [],\n})\n","import type * as AtomIO from \"atom.io\"\nimport type { Fn, Store } from \"atom.io/internal\"\nimport { subscribeToTransaction } from \"atom.io/internal\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function serverAction<F extends Fn>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.TransactionToken<F>,\n): () => void {\n\tconst unsubscribeFromLocalUpdates = subscribeToTransaction(\n\t\tstore,\n\t\ttoken,\n\t\t`tx-run:${token.key}:${socket.id}`,\n\t\t(clientUpdate) => {\n\t\t\tsocket.emit(`tx-run:${token.key}`, clientUpdate)\n\t\t},\n\t)\n\n\treturn () => {\n\t\tunsubscribeFromLocalUpdates()\n\t}\n}\n","import type { Store } from \"atom.io/internal\"\nimport {\n\tassignTransactionToContinuity,\n\tgetFromStore,\n\tgetJsonToken,\n\tsetEpochNumberOfContinuity,\n\tsetIntoStore,\n\tsubscribeToTransaction,\n} from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport type { ContinuityToken } from \"atom.io/realtime\"\nimport {\n\tconfirmedUpdateQueue,\n\toptimisticUpdateQueue,\n} from \"atom.io/realtime-client\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { useRegisterAndAttemptConfirmedUpdate } from \"./continuity/register-and-attempt-confirmed-update\"\nimport { useConcealState } from \"./continuity/use-conceal-state\"\nimport { useRevealState } from \"./continuity/use-reveal-state\"\n\nexport function syncContinuity(\n\tstore: Store,\n\tsocket: Socket,\n\tcontinuity: ContinuityToken,\n): () => void {\n\tconst continuityKey = continuity.key\n\tconst optimisticUpdates = getFromStore(store, optimisticUpdateQueue)\n\tconst confirmedUpdates = getFromStore(store, confirmedUpdateQueue)\n\n\tconst initializeContinuity = (epoch: number, payload: Json.Array) => {\n\t\tsocket.off(`continuity-init:${continuityKey}`, initializeContinuity)\n\t\tlet i = 0\n\t\tlet k: any\n\t\tlet v: any\n\t\tfor (const x of payload) {\n\t\t\tif (i % 2 === 0) {\n\t\t\t\tk = x\n\t\t\t} else {\n\t\t\t\tv = x\n\t\t\t\tif (`type` in k && k.type === `mutable_atom`) {\n\t\t\t\t\tk = getJsonToken(store, k)\n\t\t\t\t}\n\t\t\t\tsetIntoStore(store, k, v)\n\t\t\t}\n\t\t\ti++\n\t\t}\n\t\tsetEpochNumberOfContinuity(store, continuityKey, epoch)\n\t}\n\tsocket.off(`continuity-init:${continuityKey}`)\n\tsocket.on(`continuity-init:${continuityKey}`, initializeContinuity)\n\n\tconst registerAndAttemptConfirmedUpdate = useRegisterAndAttemptConfirmedUpdate(\n\t\tstore,\n\t\tcontinuityKey,\n\t\tsocket,\n\t\toptimisticUpdates,\n\t\tconfirmedUpdates,\n\t)\n\tsocket.off(`tx-new:${continuityKey}`)\n\tsocket.on(`tx-new:${continuityKey}`, registerAndAttemptConfirmedUpdate)\n\n\tconst unsubscribeFunctions = continuity.actions.map((transaction) => {\n\t\tassignTransactionToContinuity(store, continuityKey, transaction.key)\n\t\tconst unsubscribeFromTransactionUpdates = subscribeToTransaction(\n\t\t\tstore,\n\t\t\ttransaction,\n\t\t\t`tx-run:${continuityKey}`,\n\t\t\t(clientUpdate) => {\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`🤞`,\n\t\t\t\t\t`continuity`,\n\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t`enqueuing optimistic update`,\n\t\t\t\t)\n\t\t\t\tconst optimisticUpdateIndex = optimisticUpdates.findIndex(\n\t\t\t\t\t(update) => update.id === clientUpdate.id,\n\t\t\t\t)\n\t\t\t\tif (optimisticUpdateIndex === -1) {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`🤞`,\n\t\t\t\t\t\t`continuity`,\n\t\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t\t`enqueuing new optimistic update`,\n\t\t\t\t\t)\n\t\t\t\t\tsetIntoStore(store, optimisticUpdateQueue, (queue) => {\n\t\t\t\t\t\tqueue.push(clientUpdate)\n\t\t\t\t\t\tqueue.sort((a, b) => a.epoch - b.epoch)\n\t\t\t\t\t\treturn queue\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`🤞`,\n\t\t\t\t\t\t`continuity`,\n\t\t\t\t\t\tcontinuityKey,\n\t\t\t\t\t\t`replacing existing optimistic update at index ${optimisticUpdateIndex}`,\n\t\t\t\t\t)\n\t\t\t\t\tsetIntoStore(store, optimisticUpdateQueue, (queue) => {\n\t\t\t\t\t\tqueue[optimisticUpdateIndex] = clientUpdate\n\t\t\t\t\t\treturn queue\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tsocket.emit(`tx-run:${continuityKey}`, {\n\t\t\t\t\tid: clientUpdate.id,\n\t\t\t\t\tkey: transaction.key,\n\t\t\t\t\tparams: clientUpdate.params,\n\t\t\t\t})\n\t\t\t},\n\t\t)\n\t\treturn unsubscribeFromTransactionUpdates\n\t})\n\n\tconst revealState = useRevealState(store)\n\tconst concealState = useConcealState(store)\n\tsocket.on(`reveal:${continuityKey}`, revealState)\n\tsocket.on(`conceal:${continuityKey}`, concealState)\n\n\tsocket.emit(`get:${continuityKey}`)\n\treturn () => {\n\t\tsocket.off(`continuity-init:${continuityKey}`)\n\t\tsocket.off(`tx-new:${continuityKey}`)\n\t\tfor (const unsubscribe of unsubscribeFunctions) unsubscribe()\n\t\t// socket.emit(`unsub:${continuityKey}`)\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fn, Transceiver } from "atom.io/internal";
|
|
2
2
|
import { Canonical, Json } from "atom.io/json";
|
|
3
3
|
import * as AtomIO from "atom.io";
|
|
4
4
|
import * as React$1 from "react";
|
|
@@ -26,10 +26,10 @@ declare function usePullAtom<J extends Json.Serializable>(token: AtomIO.RegularA
|
|
|
26
26
|
declare function usePullAtomFamilyMember<J extends Json.Serializable, K extends Canonical, Key extends K>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: Key): J;
|
|
27
27
|
//#endregion
|
|
28
28
|
//#region src/realtime-react/use-pull-mutable-atom.d.ts
|
|
29
|
-
declare function usePullMutable<T extends Transceiver<any, any>>(token: AtomIO.MutableAtomToken<T>): T;
|
|
29
|
+
declare function usePullMutable<T extends Transceiver<any, any, any>>(token: AtomIO.MutableAtomToken<T>): T;
|
|
30
30
|
//#endregion
|
|
31
31
|
//#region src/realtime-react/use-pull-mutable-family-member.d.ts
|
|
32
|
-
declare function usePullMutableAtomFamilyMember<T extends Transceiver<any, any>, K extends Canonical, Key extends K>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: Key): T;
|
|
32
|
+
declare function usePullMutableAtomFamilyMember<T extends Transceiver<any, any, any>, K extends Canonical, Key extends K>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: Key): T;
|
|
33
33
|
//#endregion
|
|
34
34
|
//#region src/realtime-react/use-pull-selector.d.ts
|
|
35
35
|
declare function usePullSelector<J extends Json.Serializable>(token: AtomIO.SelectorToken<J>): J;
|
|
@@ -41,7 +41,7 @@ declare function usePullSelectorFamilyMember<T, K extends Canonical, Key extends
|
|
|
41
41
|
declare function usePush<J extends Json.Serializable>(token: AtomIO.WritableToken<J>): <New extends J>(next: New | ((old: J) => New)) => void;
|
|
42
42
|
//#endregion
|
|
43
43
|
//#region src/realtime-react/use-server-action.d.ts
|
|
44
|
-
declare function useServerAction<F extends
|
|
44
|
+
declare function useServerAction<F extends Fn>(token: AtomIO.TransactionToken<F>): (...parameters: Parameters<F>) => ReturnType<F>;
|
|
45
45
|
//#endregion
|
|
46
46
|
//#region src/realtime-react/use-sync-continuity.d.ts
|
|
47
47
|
declare function useSyncContinuity(token: ContinuityToken): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["effect: () => (() => void) | undefined | void","RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>","token: AtomIO.RegularAtomToken<J>","family: AtomIO.RegularAtomFamilyToken<J, K>","subKey: Key","token: AtomIO.MutableAtomToken<T>","familyToken: AtomIO.MutableAtomFamilyToken<T, K>","key: Key","token: AtomIO.SelectorToken<J>","familyToken: AtomIO.SelectorFamilyToken<T, K>","key: Key","token: AtomIO.WritableToken<J>","next: New | ((old: J) => New)","old: J","token: AtomIO.TransactionToken<F>","token: ContinuityToken"],"sources":["../../src/realtime-react/on-mount.ts","../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-server-action.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":[],"mappings":";;;;;;;;iBAEgB,OAAA;;;KCGJ,kBAAA;UACH;YACE;;cAMEC,iBAAiB,OAAA,CAAM,QAAQ;cAM/BC,kBAAkB,OAAA,CAAM;EDjBrC,QAAgB,ECkBL,OAAA,CAAM,SDlBD;UCmBP;;;;iBCbO,sBAAsB,IAAA,CAAK,qBACnC,MAAA,CAAO,iBAAiB,KAC7B;;;iBCDa,kCACL,IAAA,CAAK,wBACL,uBACE,WACH,MAAA,CAAO,uBAAuB,GAAG,YAAY,MAAM;;;iBCL7C,yBAAyB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["effect: () => (() => void) | undefined | void","RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>","token: AtomIO.RegularAtomToken<J>","family: AtomIO.RegularAtomFamilyToken<J, K>","subKey: Key","token: AtomIO.MutableAtomToken<T>","familyToken: AtomIO.MutableAtomFamilyToken<T, K>","key: Key","token: AtomIO.SelectorToken<J>","familyToken: AtomIO.SelectorFamilyToken<T, K>","key: Key","token: AtomIO.WritableToken<J>","next: New | ((old: J) => New)","old: J","token: AtomIO.TransactionToken<F>","token: ContinuityToken"],"sources":["../../src/realtime-react/on-mount.ts","../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-server-action.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":[],"mappings":";;;;;;;;iBAEgB,OAAA;;;KCGJ,kBAAA;UACH;YACE;;cAMEC,iBAAiB,OAAA,CAAM,QAAQ;cAM/BC,kBAAkB,OAAA,CAAM;EDjBrC,QAAgB,ECkBL,OAAA,CAAM,SDlBD;UCmBP;;;;iBCbO,sBAAsB,IAAA,CAAK,qBACnC,MAAA,CAAO,iBAAiB,KAC7B;;;iBCDa,kCACL,IAAA,CAAK,wBACL,uBACE,WACH,MAAA,CAAO,uBAAuB,GAAG,YAAY,MAAM;;;iBCL7C,yBAAyB,mCACjC,MAAA,CAAO,iBAAiB,KAC7B;;;iBCAa,yCACL,sCACA,uBACE,gBACE,MAAA,CAAO,uBAAuB,GAAG,SAAS,MAAM;;;iBCN/C,0BAA0B,IAAA,CAAK,qBACvC,MAAA,CAAO,cAAc,KAC1B;;;iBCDa,yCAEL,uBACE,gBACE,MAAA,CAAO,oBAAoB,GAAG,SAAS,MAAM;;;iBCL5C,kBAAkB,IAAA,CAAK,qBAC/B,MAAA,CAAO,cAAc,kBACb,SAAS,aAAa,MAAM;;;iBCD5B,0BAA0B,WAClC,MAAA,CAAO,iBAAiB,qBACb,WAAW,OAAO,WAAW;;;iBCJhC,iBAAA,QAAyB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["effect: () => (() => void) | undefined | void","deps: unknown[]","React","effect: () => (() => void) | undefined | void","RealtimeContext: React.Context<RealtimeReactStore>","React","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>","key: string","create: (socket: Socket) => (() => void) | undefined","React","token: AtomIO.RegularAtomToken<J>","React","family: AtomIO.RegularAtomFamilyToken<J, K>","subKey: Key","React","token: AtomIO.MutableAtomToken<T>","React","familyToken: AtomIO.MutableAtomFamilyToken<T, K>","key: Key","React","token: AtomIO.SelectorToken<J>","React","familyToken: AtomIO.SelectorFamilyToken<T, K>","key: Key","React","token: AtomIO.WritableToken<J>","React","token: AtomIO.TransactionToken<F>","React","token: ContinuityToken","React"],"sources":["../../src/realtime-react/use-single-effect.ts","../../src/realtime-react/on-mount.ts","../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-server-action.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/useHookAtTopLevel: intentional */\n\nimport * as React from \"react\"\n\n// @ts-expect-error this is a safe way to check a property on the global object\nconst { NODE_ENV } = globalThis[`env`] ?? {}\nconst IN_DEV = NODE_ENV === `development`\n\nfunction noop() {}\n\nexport function useSingleEffect(\n\teffect: () => (() => void) | undefined | void,\n\tdeps: unknown[],\n): void {\n\tif (IN_DEV) {\n\t\tconst cleanup = React.useRef<() => void>(noop)\n\t\tReact.useEffect(() => {\n\t\t\tlet dispose = cleanup.current\n\t\t\tif (dispose === noop) {\n\t\t\t\tdispose = effect() ?? noop\n\t\t\t\tcleanup.current = dispose\n\t\t\t} else {\n\t\t\t\treturn () => {\n\t\t\t\t\tdispose()\n\t\t\t\t\tcleanup.current = noop\n\t\t\t\t}\n\t\t\t}\n\t\t}, deps)\n\t} else {\n\t\tReact.useEffect(effect, deps)\n\t}\n}\n","import { useSingleEffect } from \"./use-single-effect\"\n\nexport function onMount(effect: () => (() => void) | undefined | void): void {\n\tuseSingleEffect(effect, [])\n}\n","import { useI } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nexport type RealtimeReactStore = {\n\tsocket: Socket | null\n\tservices: Map<\n\t\tstring,\n\t\t[consumerCount: number, dispose: (() => void) | undefined]\n\t> | null\n}\n\nexport const RealtimeContext: React.Context<RealtimeReactStore> =\n\tReact.createContext({\n\t\tsocket: null,\n\t\tservices: null,\n\t})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}> = ({ children, socket }) => {\n\tconst services = React.useRef(new Map<string, [number, () => void]>()).current\n\tconst setMyId = useI(RTC.myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsetMyId(socket?.id)\n\t\tsocket?.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket?.on(`disconnect`, () => {\n\t\t\tsetMyId(undefined)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket, services }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","import * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { onMount } from \"./on-mount\"\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function useRealtimeService(\n\tkey: string,\n\tcreate: (socket: Socket) => (() => void) | undefined,\n): void {\n\tconst { socket, services } = React.useContext(RealtimeContext)\n\tonMount(() => {\n\t\tlet service = services?.get(key)\n\t\tif (service) {\n\t\t\tservice[0]++\n\t\t} else {\n\t\t\tconst dispose = socket ? create(socket) : undefined\n\t\t\tservice = [1, dispose]\n\t\t\tservices?.set(key, service)\n\t\t}\n\t\treturn () => {\n\t\t\tif (service) {\n\t\t\t\tservice[0]--\n\t\t\t\tif (service[0] === 0) {\n\t\t\t\t\tservice[1]?.()\n\t\t\t\t\tservices?.delete(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtom<J extends Json.Serializable>(\n\ttoken: AtomIO.RegularAtomToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtomFamilyMember<\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n\tKey extends K,\n>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: Key): J {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, family, subKey)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtomFamilyMember(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutable<T extends Transceiver<any, any>>(\n\ttoken: AtomIO.MutableAtomToken<T>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutableAtomFamilyMember<\n\tT extends Transceiver<any, any>,\n\tK extends Canonical,\n\tKey extends K,\n>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: Key): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtomFamilyMember(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelector<J extends Json.Serializable>(\n\ttoken: AtomIO.SelectorToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelector(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelectorFamilyMember<\n\tT,\n\tK extends Canonical,\n\tKey extends K,\n>(familyToken: AtomIO.SelectorFamilyToken<T, K>, key: Key): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelectorFamilyMember(store, socket, token),\n\t)\n\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useI } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): <New extends J>(next: New | ((old: J) => New)) => void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`push:${token.key}`, (socket) =>\n\t\tRTC.pushState(store, socket, token),\n\t)\n\treturn useI(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Func } from \"atom.io/internal\"\nimport { actUponStore, arbitrary } from \"atom.io/internal\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useServerAction<F extends Func>(\n\ttoken: AtomIO.TransactionToken<F>,\n): (...parameters: Parameters<F>) => ReturnType<F> {\n\tconst store = React.useContext(StoreContext)\n\n\tuseRealtimeService(`tx:${token.key}`, (socket) =>\n\t\tRTC.serverAction(store, socket, token),\n\t)\n\treturn actUponStore(store, token, arbitrary())\n}\n","import { StoreContext } from \"atom.io/react\"\nimport type { ContinuityToken } from \"atom.io/realtime\"\nimport { syncContinuity } from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useSyncContinuity(token: ContinuityToken): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`tx-sync:${token.key}`, (socket) => {\n\t\treturn syncContinuity(store, socket, token)\n\t})\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["effect: () => (() => void) | undefined | void","deps: unknown[]","React","effect: () => (() => void) | undefined | void","RealtimeContext: React.Context<RealtimeReactStore>","React","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>","key: string","create: (socket: Socket) => (() => void) | undefined","React","token: AtomIO.RegularAtomToken<J>","React","family: AtomIO.RegularAtomFamilyToken<J, K>","subKey: Key","React","token: AtomIO.MutableAtomToken<T>","React","familyToken: AtomIO.MutableAtomFamilyToken<T, K>","key: Key","React","token: AtomIO.SelectorToken<J>","React","familyToken: AtomIO.SelectorFamilyToken<T, K>","key: Key","React","token: AtomIO.WritableToken<J>","React","token: AtomIO.TransactionToken<F>","React","token: ContinuityToken","React"],"sources":["../../src/realtime-react/use-single-effect.ts","../../src/realtime-react/on-mount.ts","../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-server-action.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/useHookAtTopLevel: intentional */\n\nimport * as React from \"react\"\n\n// @ts-expect-error this is a safe way to check a property on the global object\nconst { NODE_ENV } = globalThis[`env`] ?? {}\nconst IN_DEV = NODE_ENV === `development`\n\nfunction noop() {}\n\nexport function useSingleEffect(\n\teffect: () => (() => void) | undefined | void,\n\tdeps: unknown[],\n): void {\n\tif (IN_DEV) {\n\t\tconst cleanup = React.useRef<() => void>(noop)\n\t\tReact.useEffect(() => {\n\t\t\tlet dispose = cleanup.current\n\t\t\tif (dispose === noop) {\n\t\t\t\tdispose = effect() ?? noop\n\t\t\t\tcleanup.current = dispose\n\t\t\t} else {\n\t\t\t\treturn () => {\n\t\t\t\t\tdispose()\n\t\t\t\t\tcleanup.current = noop\n\t\t\t\t}\n\t\t\t}\n\t\t}, deps)\n\t} else {\n\t\tReact.useEffect(effect, deps)\n\t}\n}\n","import { useSingleEffect } from \"./use-single-effect\"\n\nexport function onMount(effect: () => (() => void) | undefined | void): void {\n\tuseSingleEffect(effect, [])\n}\n","import { useI } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nexport type RealtimeReactStore = {\n\tsocket: Socket | null\n\tservices: Map<\n\t\tstring,\n\t\t[consumerCount: number, dispose: (() => void) | undefined]\n\t> | null\n}\n\nexport const RealtimeContext: React.Context<RealtimeReactStore> =\n\tReact.createContext({\n\t\tsocket: null,\n\t\tservices: null,\n\t})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}> = ({ children, socket }) => {\n\tconst services = React.useRef(new Map<string, [number, () => void]>()).current\n\tconst setMyId = useI(RTC.myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsetMyId(socket?.id)\n\t\tsocket?.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket?.on(`disconnect`, () => {\n\t\t\tsetMyId(undefined)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket, services }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","import * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { onMount } from \"./on-mount\"\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function useRealtimeService(\n\tkey: string,\n\tcreate: (socket: Socket) => (() => void) | undefined,\n): void {\n\tconst { socket, services } = React.useContext(RealtimeContext)\n\tonMount(() => {\n\t\tlet service = services?.get(key)\n\t\tif (service) {\n\t\t\tservice[0]++\n\t\t} else {\n\t\t\tconst dispose = socket ? create(socket) : undefined\n\t\t\tservice = [1, dispose]\n\t\t\tservices?.set(key, service)\n\t\t}\n\t\treturn () => {\n\t\t\tif (service) {\n\t\t\t\tservice[0]--\n\t\t\t\tif (service[0] === 0) {\n\t\t\t\t\tservice[1]?.()\n\t\t\t\t\tservices?.delete(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtom<J extends Json.Serializable>(\n\ttoken: AtomIO.RegularAtomToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtomFamilyMember<\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n\tKey extends K,\n>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: Key): J {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, family, subKey)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtomFamilyMember(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutable<T extends Transceiver<any, any, any>>(\n\ttoken: AtomIO.MutableAtomToken<T>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutableAtomFamilyMember<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n\tKey extends K,\n>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: Key): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtomFamilyMember(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelector<J extends Json.Serializable>(\n\ttoken: AtomIO.SelectorToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelector(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelectorFamilyMember<\n\tT,\n\tK extends Canonical,\n\tKey extends K,\n>(familyToken: AtomIO.SelectorFamilyToken<T, K>, key: Key): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelectorFamilyMember(store, socket, token),\n\t)\n\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useI } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): <New extends J>(next: New | ((old: J) => New)) => void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`push:${token.key}`, (socket) =>\n\t\tRTC.pushState(store, socket, token),\n\t)\n\treturn useI(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Fn } from \"atom.io/internal\"\nimport { actUponStore, arbitrary } from \"atom.io/internal\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useServerAction<F extends Fn>(\n\ttoken: AtomIO.TransactionToken<F>,\n): (...parameters: Parameters<F>) => ReturnType<F> {\n\tconst store = React.useContext(StoreContext)\n\n\tuseRealtimeService(`tx:${token.key}`, (socket) =>\n\t\tRTC.serverAction(store, socket, token),\n\t)\n\treturn actUponStore(store, token, arbitrary())\n}\n","import { StoreContext } from \"atom.io/react\"\nimport type { ContinuityToken } from \"atom.io/realtime\"\nimport { syncContinuity } from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useSyncContinuity(token: ContinuityToken): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`tx-sync:${token.key}`, (socket) => {\n\t\treturn syncContinuity(store, socket, token)\n\t})\n}\n"],"mappings":"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"}
|
|
@@ -94,14 +94,14 @@ type MutableFamilyProvider = ReturnType<typeof realtimeMutableFamilyProvider>;
|
|
|
94
94
|
declare function realtimeMutableFamilyProvider({
|
|
95
95
|
socket,
|
|
96
96
|
store
|
|
97
|
-
}: ServerConfig): <T extends Transceiver<any, any>, K extends Canonical>(family: AtomIO.MutableAtomFamilyToken<T, K>, index: AtomIO.ReadableToken<Iterable<K>>) => () => void;
|
|
97
|
+
}: ServerConfig): <T extends Transceiver<any, any, any>, K extends Canonical>(family: AtomIO.MutableAtomFamilyToken<T, K>, index: AtomIO.ReadableToken<Iterable<K>>) => () => void;
|
|
98
98
|
//#endregion
|
|
99
99
|
//#region src/realtime-server/realtime-mutable-provider.d.ts
|
|
100
100
|
type MutableProvider = ReturnType<typeof realtimeMutableProvider>;
|
|
101
101
|
declare function realtimeMutableProvider({
|
|
102
102
|
socket,
|
|
103
103
|
store
|
|
104
|
-
}: ServerConfig): <Core extends Transceiver<Json.Serializable, Json.Serializable>>(token: AtomIO.MutableAtomToken<Core>) => () => void;
|
|
104
|
+
}: ServerConfig): <Core extends Transceiver<any, Json.Serializable, Json.Serializable>>(token: AtomIO.MutableAtomToken<Core>) => () => void;
|
|
105
105
|
//#endregion
|
|
106
106
|
//#region src/realtime-server/realtime-server-stores/server-user-store.d.ts
|
|
107
107
|
type SocketKey = `socket::${string}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["continuity: ContinuityToken","event: string","event: Event","emit: <Event extends keyof I>(\n\t\t\tevent: Event,\n\t\t\t...args: I[Event]\n\t\t) => CustomSocket<I, O>","listener: (...args: O[Event]) => void","listener: (event: string, ...args: Json.Array) => void","listener?: (...args: O[Event]) => void","arg: Json.Serializable","process: ChildProcessWithoutNullStreams","key: string","logger?: Pick<Console, `error` | `info` | `warn`>","id: string","socket: SubjectSocket<any, any>","attachServices: (socket: SubjectSocket<any, any>) => (() => void) | void","tx: AtomIO.TransactionToken<F>","family: AtomIO.RegularAtomFamilyToken<J, K>","index: AtomIO.ReadableToken<Iterable<K>>","family: AtomIO.MutableAtomFamilyToken<T, K>","index: AtomIO.ReadableToken<Iterable<K>>","token: AtomIO.MutableAtomToken<Core>","socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>","socketIndex: MutableAtomToken<SetRTX<SocketKey>>","userIndex: MutableAtomToken<SetRTX<UserKey>>","usersOfSockets: JoinToken<\n\t`user`,\n\tUserKey,\n\t`socket`,\n\tSocketKey,\n\t`1:1`\n>","createRoomTX: AtomIO.TransactionToken<\n\t(\n\t\troomKey: RoomKey,\n\t\tscript: string,\n\t\toptions?: string[],\n\t) => Loadable<ChildSocket<any, any>>\n>","roomKey: RoomKey","script: string","options?: string[]","joinRoomTX: AtomIO.TransactionToken<\n\t(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta\n>","roomId: string","userId: string","enteredAtEpoch: number","leaveRoomTX: AtomIO.TransactionToken<\n\t(roomId: string, userId: string) => void\n>","destroyRoomTX: AtomIO.TransactionToken<(roomKey: RoomKey) => void>","roomArgumentsAtoms: RegularAtomFamilyToken<RoomArguments, string>","roomSelectors: ReadonlyPureSelectorFamilyToken<\n\tLoadable<ChildSocket<any, any>>,\n\tstring\n>","visibleStateKeys: string[]","updates: TransactionUpdateContent[]","redactorAtoms: RegularAtomFamilyToken<\n\t{\n\t\tocclude: (updates: TransactionUpdateContent[]) => TransactionUpdateContent[]\n\t},\n\tUserKey\n>","userUnacknowledgedQueues: RegularAtomFamilyToken<\n\tContinuitySyncTransactionUpdate[],\n\tUserKey\n>","token: AtomIO.WritableToken<J>","token: WritableToken<J>","event: string","listener: (...args: Json.Serializable[]) => void","listener: (event: string, ...args: Json.Serializable[]) => void"],"sources":["../../src/realtime-server/continuity/prepare-to-sync-realtime-continuity.ts","../../src/realtime-server/ipc-sockets/custom-socket.ts","../../src/realtime-server/ipc-sockets/child-socket.ts","../../src/realtime-server/ipc-sockets/parent-socket.ts","../../src/realtime-server/realtime-action-receiver.ts","../../src/realtime-server/realtime-family-provider.ts","../../src/realtime-server/realtime-mutable-family-provider.ts","../../src/realtime-server/realtime-mutable-provider.ts","../../src/realtime-server/realtime-server-stores/server-user-store.ts","../../src/realtime-server/realtime-server-stores/server-room-external-actions.ts","../../src/realtime-server/realtime-server-stores/server-room-external-store.ts","../../src/realtime-server/realtime-server-stores/server-sync-store.ts","../../src/realtime-server/realtime-state-provider.ts","../../src/realtime-server/realtime-state-receiver.ts","../../src/realtime-server/index.ts"],"sourcesContent":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["continuity: ContinuityToken","event: string","event: Event","emit: <Event extends keyof I>(\n\t\t\tevent: Event,\n\t\t\t...args: I[Event]\n\t\t) => CustomSocket<I, O>","listener: (...args: O[Event]) => void","listener: (event: string, ...args: Json.Array) => void","listener?: (...args: O[Event]) => void","arg: Json.Serializable","process: ChildProcessWithoutNullStreams","key: string","logger?: Pick<Console, `error` | `info` | `warn`>","id: string","socket: SubjectSocket<any, any>","attachServices: (socket: SubjectSocket<any, any>) => (() => void) | void","tx: AtomIO.TransactionToken<F>","family: AtomIO.RegularAtomFamilyToken<J, K>","index: AtomIO.ReadableToken<Iterable<K>>","family: AtomIO.MutableAtomFamilyToken<T, K>","index: AtomIO.ReadableToken<Iterable<K>>","token: AtomIO.MutableAtomToken<Core>","socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>","socketIndex: MutableAtomToken<SetRTX<SocketKey>>","userIndex: MutableAtomToken<SetRTX<UserKey>>","usersOfSockets: JoinToken<\n\t`user`,\n\tUserKey,\n\t`socket`,\n\tSocketKey,\n\t`1:1`\n>","createRoomTX: AtomIO.TransactionToken<\n\t(\n\t\troomKey: RoomKey,\n\t\tscript: string,\n\t\toptions?: string[],\n\t) => Loadable<ChildSocket<any, any>>\n>","roomKey: RoomKey","script: string","options?: string[]","joinRoomTX: AtomIO.TransactionToken<\n\t(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta\n>","roomId: string","userId: string","enteredAtEpoch: number","leaveRoomTX: AtomIO.TransactionToken<\n\t(roomId: string, userId: string) => void\n>","destroyRoomTX: AtomIO.TransactionToken<(roomKey: RoomKey) => void>","roomArgumentsAtoms: RegularAtomFamilyToken<RoomArguments, string>","roomSelectors: ReadonlyPureSelectorFamilyToken<\n\tLoadable<ChildSocket<any, any>>,\n\tstring\n>","visibleStateKeys: string[]","updates: TransactionUpdateContent[]","redactorAtoms: RegularAtomFamilyToken<\n\t{\n\t\tocclude: (updates: TransactionUpdateContent[]) => TransactionUpdateContent[]\n\t},\n\tUserKey\n>","userUnacknowledgedQueues: RegularAtomFamilyToken<\n\tContinuitySyncTransactionUpdate[],\n\tUserKey\n>","token: AtomIO.WritableToken<J>","token: WritableToken<J>","event: string","listener: (...args: Json.Serializable[]) => void","listener: (event: string, ...args: Json.Serializable[]) => void"],"sources":["../../src/realtime-server/continuity/prepare-to-sync-realtime-continuity.ts","../../src/realtime-server/ipc-sockets/custom-socket.ts","../../src/realtime-server/ipc-sockets/child-socket.ts","../../src/realtime-server/ipc-sockets/parent-socket.ts","../../src/realtime-server/realtime-action-receiver.ts","../../src/realtime-server/realtime-family-provider.ts","../../src/realtime-server/realtime-mutable-family-provider.ts","../../src/realtime-server/realtime-mutable-provider.ts","../../src/realtime-server/realtime-server-stores/server-user-store.ts","../../src/realtime-server/realtime-server-stores/server-room-external-actions.ts","../../src/realtime-server/realtime-server-stores/server-room-external-store.ts","../../src/realtime-server/realtime-server-stores/server-sync-store.ts","../../src/realtime-server/realtime-state-provider.ts","../../src/realtime-server/realtime-state-receiver.ts","../../src/realtime-server/index.ts"],"sourcesContent":[],"mappings":"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"}
|