atom.io 0.34.2 → 0.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/internal/index.d.ts +32 -41
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +106 -128
- package/dist/internal/index.js.map +1 -1
- package/dist/json/index.d.ts +7 -7
- package/dist/json/index.js +2 -2
- package/dist/json/index.js.map +1 -1
- package/dist/main/index.d.ts +779 -886
- package/dist/main/index.d.ts.map +1 -1
- package/dist/main/index.js +46 -14
- package/dist/main/index.js.map +1 -1
- package/dist/react-devtools/index.js +10 -10
- package/dist/react-devtools/index.js.map +1 -1
- package/dist/realtime/index.d.ts.map +1 -1
- package/dist/realtime/index.js +3 -5
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime-client/index.js +10 -10
- package/dist/realtime-client/index.js.map +1 -1
- package/dist/realtime-server/index.d.ts.map +1 -1
- package/dist/realtime-server/index.js +8 -10
- package/dist/realtime-server/index.js.map +1 -1
- package/package.json +4 -4
- package/src/internal/atom/create-regular-atom.ts +1 -0
- package/src/internal/atom/index.ts +0 -1
- package/src/internal/families/index.ts +0 -1
- package/src/internal/index.ts +111 -89
- package/src/internal/join/join-internal.ts +3 -4
- package/src/internal/mutable/create-mutable-atom-family.ts +0 -1
- package/src/internal/mutable/create-mutable-atom.ts +1 -1
- package/src/internal/selector/register-selector.ts +2 -2
- package/src/json/entries.ts +7 -7
- package/src/main/atom.ts +67 -114
- package/src/main/dispose-state.ts +0 -2
- package/src/main/find-state.ts +3 -9
- package/src/main/get-state.ts +0 -2
- package/src/main/index.ts +1 -176
- package/src/main/join.ts +0 -7
- package/src/main/reset-state.ts +0 -2
- package/src/main/selector.ts +5 -72
- package/src/main/set-state.ts +1 -4
- package/src/main/silo.ts +14 -5
- package/src/main/subscribe.ts +0 -7
- package/src/main/timeline.ts +1 -18
- package/src/main/tokens.ts +247 -0
- package/src/main/transaction.ts +17 -55
- package/src/main/validators.ts +1 -1
- package/src/react-devtools/store.ts +61 -45
- package/src/realtime/shared-room-store.ts +3 -5
- package/src/realtime-server/realtime-server-stores/server-user-store.ts +3 -5
- package/src/internal/atom/create-standalone-atom.ts +0 -39
- package/src/internal/families/create-atom-family.ts +0 -38
package/dist/realtime/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IMPLICIT, assignTransactionToContinuity, setEpochNumberOfContinuity } from "atom.io/internal";
|
|
2
|
-
import {
|
|
2
|
+
import { getInternalRelations, join, mutableAtom, selectorFamily } from "atom.io";
|
|
3
3
|
import { SetRTX } from "atom.io/transceivers/set-rtx";
|
|
4
4
|
|
|
5
5
|
//#region src/realtime/realtime-continuity.ts
|
|
@@ -77,17 +77,15 @@ function continuity(options) {
|
|
|
77
77
|
|
|
78
78
|
//#endregion
|
|
79
79
|
//#region src/realtime/shared-room-store.ts
|
|
80
|
-
const usersInThisRoomIndex =
|
|
80
|
+
const usersInThisRoomIndex = mutableAtom({
|
|
81
81
|
key: `usersInRoomIndex`,
|
|
82
|
-
mutable: true,
|
|
83
82
|
default: () => new SetRTX(),
|
|
84
83
|
toJson: (set) => set.toJSON(),
|
|
85
84
|
fromJson: (json) => SetRTX.fromJSON(json)
|
|
86
85
|
});
|
|
87
|
-
const roomIndex =
|
|
86
|
+
const roomIndex = mutableAtom({
|
|
88
87
|
key: `roomIndex`,
|
|
89
88
|
default: () => new SetRTX(),
|
|
90
|
-
mutable: true,
|
|
91
89
|
toJson: (set) => set.toJSON(),
|
|
92
90
|
fromJson: (json) => SetRTX.fromJSON(json)
|
|
93
91
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["key: K","value: V","key: string","builder: (group: SyncGroup) => SyncGroup","options: ContinuityOptions","usersInThisRoomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n>","roomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n>","DEFAULT_USER_IN_ROOM_META: UserInRoomMeta","usersInRooms: JoinToken<\n\t`room`,\n\tstring,\n\t`user`,\n\tstring,\n\t`1:n`,\n\tUserInRoomMeta\n>","usersInMyRoomView: ReadonlyPureSelectorFamilyToken<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n>"],"sources":["../../src/realtime/realtime-continuity.ts","../../src/realtime/shared-room-store.ts"],"sourcesContent":["import type {\n\tAtomFamilyToken,\n\tAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tTokenType,\n\tTransactionToken,\n} from \"atom.io\"\nimport {\n\tassignTransactionToContinuity,\n\tIMPLICIT,\n\tsetEpochNumberOfContinuity,\n} from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport type { UserKey } from \"atom.io/realtime-server\"\n\n/* eslint-disable no-console */\n\nexport class InvariantMap<K, V> extends Map<K, V> {\n\tpublic set(key: K, value: V): this {\n\t\tif (this.has(key)) {\n\t\t\tconsole.warn(`Tried to set a key that already exists in an InvariantMap`, {\n\t\t\t\tkey,\n\t\t\t\tvalue,\n\t\t\t})\n\t\t\treturn this\n\t\t}\n\t\treturn super.set(key, value)\n\t}\n\n\tpublic clear(): void {\n\t\tthrow new Error(`Cannot clear an InvariantMap`)\n\t}\n}\n\nexport type PerspectiveToken<F extends AtomFamilyToken<any>> = {\n\ttype: `realtime_perspective`\n\tresourceAtoms: F\n\tviewAtoms: ReadableFamilyToken<ReadableToken<TokenType<F>>[], UserKey>\n}\n\nexport type ContinuityToken = {\n\treadonly type: `continuity`\n\treadonly key: string\n\treadonly globals: AtomToken<any>[]\n\treadonly actions: TransactionToken<any>[]\n\treadonly perspectives: PerspectiveToken<AtomFamilyToken<any, Canonical>>[]\n}\n\nexport class SyncGroup {\n\tpublic type = `continuity` as const\n\n\tprotected globals: AtomToken<any>[] = []\n\tprotected actions: TransactionToken<any>[] = []\n\tprotected perspectives: PerspectiveToken<any>[] = []\n\tprotected readonly key: string\n\n\tprotected constructor(key: string) {\n\t\tthis.key = key\n\t}\n\n\tpublic static existing: InvariantMap<string, ContinuityToken> =\n\t\tnew InvariantMap()\n\tpublic static create(\n\t\tkey: string,\n\t\tbuilder: (group: SyncGroup) => SyncGroup,\n\t): ContinuityToken {\n\t\tconst group = new SyncGroup(key)\n\t\tconst { type, globals, actions, perspectives } = builder(group)\n\t\tconst token = { type, key, globals, actions, perspectives }\n\t\tSyncGroup.existing.set(key, token)\n\t\treturn token\n\t}\n\n\tpublic add(...atoms: AtomToken<any>[]): SyncGroup\n\tpublic add(...args: TransactionToken<any>[]): SyncGroup\n\tpublic add<\n\t\tF extends AtomFamilyToken<any>,\n\t\tT extends F extends AtomFamilyToken<infer U> ? U : never,\n\t>(\n\t\tfamily: AtomFamilyToken<T, any>,\n\t\tindex: ReadableFamilyToken<Iterable<AtomToken<T>>, string>,\n\t): SyncGroup\n\tpublic add(\n\t\t...args:\n\t\t\t| readonly AtomToken<any>[]\n\t\t\t| readonly TransactionToken<any>[]\n\t\t\t| [AtomFamilyToken<any, any>, ReadableFamilyToken<Iterable<any>, string>]\n\t): this {\n\t\tconst zeroth = args[0]\n\t\tswitch (zeroth.type) {\n\t\t\tcase `atom`:\n\t\t\tcase `mutable_atom`:\n\t\t\t\tthis.globals.push(...(args as AtomToken<any>[]))\n\t\t\t\tbreak\n\t\t\tcase `transaction`:\n\t\t\t\tthis.actions.push(...(args as TransactionToken<any>[]))\n\t\t\t\tbreak\n\t\t\tcase `atom_family`:\n\t\t\tcase `mutable_atom_family`:\n\t\t\t\t{\n\t\t\t\t\tconst [family, index] = args as [\n\t\t\t\t\t\tAtomFamilyToken<any, any>,\n\t\t\t\t\t\tReadableFamilyToken<ReadableToken<any>[], UserKey>,\n\t\t\t\t\t]\n\t\t\t\t\tthis.perspectives.push({\n\t\t\t\t\t\ttype: `realtime_perspective`,\n\t\t\t\t\t\tresourceAtoms: family,\n\t\t\t\t\t\tviewAtoms: index,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t}\n\n\t\treturn this\n\t}\n}\n\nexport type ContinuityOptions = {\n\tkey: string\n\tconfig: (group: SyncGroup) => SyncGroup\n}\n\nexport function continuity(options: ContinuityOptions): ContinuityToken {\n\tconst { key, config } = options\n\tconst token = SyncGroup.create(key, config)\n\tconst { actions } = token\n\tfor (const action of actions) {\n\t\tassignTransactionToContinuity(IMPLICIT.STORE, key, action.key)\n\t}\n\tsetEpochNumberOfContinuity(IMPLICIT.STORE, key, -1)\n\treturn token\n}\n\n// const counterStates = atomFamily<number, { c: string }>({\n// \tkey: `counter`,\n// \tdefault: 0,\n// })\n// const counterIndices = atomFamily<{ c: string }[], string>({\n// \tkey: `counterIndex`,\n// \tdefault: [],\n// })\n// const nameStates = atomFamily<number, { n: string }>({\n// \tkey: `name`,\n// \tdefault: 0,\n// })\n// const nameIndices = atomFamily<{ n: string }[], string>({\n// \tkey: `nameIndex`,\n// \tdefault: [],\n// })\n\n// const counterContinuity = continuity({\n// \tkey: `counter`,\n// \tconfig: (group) =>\n// \t\tgroup\n// \t\t\t.add(counterStates, counterIndices)\n// \t\t\t.add(nameStates, nameIndices)\n// \t\t\t.add(nameStates, nameIndices)\n// \t\t\t.add(nameStates, nameIndices),\n// })\n","import type {\n\tJoinToken,\n\tMutableAtomToken,\n\tReadonlyPureSelectorFamilyToken,\n} from \"atom.io\"\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","names":["key: K","value: V","key: string","builder: (group: SyncGroup) => SyncGroup","options: ContinuityOptions","usersInThisRoomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n>","roomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n>","DEFAULT_USER_IN_ROOM_META: UserInRoomMeta","usersInRooms: JoinToken<\n\t`room`,\n\tstring,\n\t`user`,\n\tstring,\n\t`1:n`,\n\tUserInRoomMeta\n>","usersInMyRoomView: ReadonlyPureSelectorFamilyToken<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n>"],"sources":["../../src/realtime/realtime-continuity.ts","../../src/realtime/shared-room-store.ts"],"sourcesContent":["import type {\n\tAtomFamilyToken,\n\tAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tTokenType,\n\tTransactionToken,\n} from \"atom.io\"\nimport {\n\tassignTransactionToContinuity,\n\tIMPLICIT,\n\tsetEpochNumberOfContinuity,\n} from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport type { UserKey } from \"atom.io/realtime-server\"\n\n/* eslint-disable no-console */\n\nexport class InvariantMap<K, V> extends Map<K, V> {\n\tpublic set(key: K, value: V): this {\n\t\tif (this.has(key)) {\n\t\t\tconsole.warn(`Tried to set a key that already exists in an InvariantMap`, {\n\t\t\t\tkey,\n\t\t\t\tvalue,\n\t\t\t})\n\t\t\treturn this\n\t\t}\n\t\treturn super.set(key, value)\n\t}\n\n\tpublic clear(): void {\n\t\tthrow new Error(`Cannot clear an InvariantMap`)\n\t}\n}\n\nexport type PerspectiveToken<F extends AtomFamilyToken<any>> = {\n\ttype: `realtime_perspective`\n\tresourceAtoms: F\n\tviewAtoms: ReadableFamilyToken<ReadableToken<TokenType<F>>[], UserKey>\n}\n\nexport type ContinuityToken = {\n\treadonly type: `continuity`\n\treadonly key: string\n\treadonly globals: AtomToken<any>[]\n\treadonly actions: TransactionToken<any>[]\n\treadonly perspectives: PerspectiveToken<AtomFamilyToken<any, Canonical>>[]\n}\n\nexport class SyncGroup {\n\tpublic type = `continuity` as const\n\n\tprotected globals: AtomToken<any>[] = []\n\tprotected actions: TransactionToken<any>[] = []\n\tprotected perspectives: PerspectiveToken<any>[] = []\n\tprotected readonly key: string\n\n\tprotected constructor(key: string) {\n\t\tthis.key = key\n\t}\n\n\tpublic static existing: InvariantMap<string, ContinuityToken> =\n\t\tnew InvariantMap()\n\tpublic static create(\n\t\tkey: string,\n\t\tbuilder: (group: SyncGroup) => SyncGroup,\n\t): ContinuityToken {\n\t\tconst group = new SyncGroup(key)\n\t\tconst { type, globals, actions, perspectives } = builder(group)\n\t\tconst token = { type, key, globals, actions, perspectives }\n\t\tSyncGroup.existing.set(key, token)\n\t\treturn token\n\t}\n\n\tpublic add(...atoms: AtomToken<any>[]): SyncGroup\n\tpublic add(...args: TransactionToken<any>[]): SyncGroup\n\tpublic add<\n\t\tF extends AtomFamilyToken<any>,\n\t\tT extends F extends AtomFamilyToken<infer U> ? U : never,\n\t>(\n\t\tfamily: AtomFamilyToken<T, any>,\n\t\tindex: ReadableFamilyToken<Iterable<AtomToken<T>>, string>,\n\t): SyncGroup\n\tpublic add(\n\t\t...args:\n\t\t\t| readonly AtomToken<any>[]\n\t\t\t| readonly TransactionToken<any>[]\n\t\t\t| [AtomFamilyToken<any, any>, ReadableFamilyToken<Iterable<any>, string>]\n\t): this {\n\t\tconst zeroth = args[0]\n\t\tswitch (zeroth.type) {\n\t\t\tcase `atom`:\n\t\t\tcase `mutable_atom`:\n\t\t\t\tthis.globals.push(...(args as AtomToken<any>[]))\n\t\t\t\tbreak\n\t\t\tcase `transaction`:\n\t\t\t\tthis.actions.push(...(args as TransactionToken<any>[]))\n\t\t\t\tbreak\n\t\t\tcase `atom_family`:\n\t\t\tcase `mutable_atom_family`:\n\t\t\t\t{\n\t\t\t\t\tconst [family, index] = args as [\n\t\t\t\t\t\tAtomFamilyToken<any, any>,\n\t\t\t\t\t\tReadableFamilyToken<ReadableToken<any>[], UserKey>,\n\t\t\t\t\t]\n\t\t\t\t\tthis.perspectives.push({\n\t\t\t\t\t\ttype: `realtime_perspective`,\n\t\t\t\t\t\tresourceAtoms: family,\n\t\t\t\t\t\tviewAtoms: index,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t}\n\n\t\treturn this\n\t}\n}\n\nexport type ContinuityOptions = {\n\tkey: string\n\tconfig: (group: SyncGroup) => SyncGroup\n}\n\nexport function continuity(options: ContinuityOptions): ContinuityToken {\n\tconst { key, config } = options\n\tconst token = SyncGroup.create(key, config)\n\tconst { actions } = token\n\tfor (const action of actions) {\n\t\tassignTransactionToContinuity(IMPLICIT.STORE, key, action.key)\n\t}\n\tsetEpochNumberOfContinuity(IMPLICIT.STORE, key, -1)\n\treturn token\n}\n\n// const counterStates = atomFamily<number, { c: string }>({\n// \tkey: `counter`,\n// \tdefault: 0,\n// })\n// const counterIndices = atomFamily<{ c: string }[], string>({\n// \tkey: `counterIndex`,\n// \tdefault: [],\n// })\n// const nameStates = atomFamily<number, { n: string }>({\n// \tkey: `name`,\n// \tdefault: 0,\n// })\n// const nameIndices = atomFamily<{ n: string }[], string>({\n// \tkey: `nameIndex`,\n// \tdefault: [],\n// })\n\n// const counterContinuity = continuity({\n// \tkey: `counter`,\n// \tconfig: (group) =>\n// \t\tgroup\n// \t\t\t.add(counterStates, counterIndices)\n// \t\t\t.add(nameStates, nameIndices)\n// \t\t\t.add(nameStates, nameIndices)\n// \t\t\t.add(nameStates, nameIndices),\n// })\n","import type {\n\tJoinToken,\n\tMutableAtomToken,\n\tReadonlyPureSelectorFamilyToken,\n} from \"atom.io\"\nimport { getInternalRelations, join, mutableAtom, selectorFamily } from \"atom.io\"\nimport type { SetRTXJson } from \"atom.io/transceivers/set-rtx\"\nimport { SetRTX } from \"atom.io/transceivers/set-rtx\"\n\nexport const usersInThisRoomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n> = mutableAtom<SetRTX<string>, SetRTXJson<string>>({\n\tkey: `usersInRoomIndex`,\n\tdefault: () => new SetRTX<string>(),\n\ttoJson: (set) => set.toJSON(),\n\tfromJson: (json) => SetRTX.fromJSON(json),\n})\n\nexport const roomIndex: MutableAtomToken<\n\tSetRTX<string>,\n\tSetRTXJson<string>\n> = mutableAtom<SetRTX<string>, SetRTXJson<string>>({\n\tkey: `roomIndex`,\n\tdefault: () => new SetRTX<string>(),\n\ttoJson: (set) => set.toJSON(),\n\tfromJson: (json) => SetRTX.fromJSON(json),\n})\n\nexport type UserInRoomMeta = {\n\tenteredAtEpoch: number\n}\nexport const DEFAULT_USER_IN_ROOM_META: UserInRoomMeta = {\n\tenteredAtEpoch: 0,\n}\nexport const usersInRooms: JoinToken<\n\t`room`,\n\tstring,\n\t`user`,\n\tstring,\n\t`1:n`,\n\tUserInRoomMeta\n> = join(\n\t{\n\t\tkey: `usersInRooms`,\n\t\tbetween: [`room`, `user`],\n\t\tcardinality: `1:n`,\n\t\tisAType: (input): input is string => typeof input === `string`,\n\t\tisBType: (input): input is string => typeof input === `string`,\n\t},\n\tDEFAULT_USER_IN_ROOM_META,\n)\n\nexport const usersInMyRoomView: ReadonlyPureSelectorFamilyToken<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n> = selectorFamily<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n>({\n\tkey: `usersInMyRoomView`,\n\tget:\n\t\t(myUsername) =>\n\t\t({ find }) => {\n\t\t\tconst usersInRoomsAtoms = getInternalRelations(usersInRooms)\n\t\t\tconst myRoomIndex = find(usersInRoomsAtoms, myUsername)\n\t\t\treturn [myRoomIndex]\n\t\t},\n})\n"],"mappings":"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"}
|
|
@@ -206,14 +206,14 @@ function pullSelector(store, socket, token) {
|
|
|
206
206
|
const atomKeys = store.selectorAtoms.getRelatedKeys(token.key);
|
|
207
207
|
const unsubscribes = [];
|
|
208
208
|
if (atomKeys) for (const atomKey of atomKeys) {
|
|
209
|
-
const atom
|
|
210
|
-
if (!atom
|
|
211
|
-
switch (atom
|
|
209
|
+
const atom = store.atoms.get(atomKey);
|
|
210
|
+
if (!atom) continue;
|
|
211
|
+
switch (atom.type) {
|
|
212
212
|
case `atom`:
|
|
213
|
-
unsubscribes.push(pullAtom(store, socket, atom
|
|
213
|
+
unsubscribes.push(pullAtom(store, socket, atom));
|
|
214
214
|
break;
|
|
215
215
|
case `mutable_atom`:
|
|
216
|
-
unsubscribes.push(pullMutableAtom(store, socket, atom
|
|
216
|
+
unsubscribes.push(pullMutableAtom(store, socket, atom));
|
|
217
217
|
break;
|
|
218
218
|
}
|
|
219
219
|
}
|
|
@@ -232,14 +232,14 @@ function pullSelectorFamilyMember(store, socket, token) {
|
|
|
232
232
|
const atomKeys = store.selectorAtoms.getRelatedKeys(token.key);
|
|
233
233
|
const unsubscribes = [];
|
|
234
234
|
if (atomKeys) for (const atomKey of atomKeys) {
|
|
235
|
-
const atom
|
|
236
|
-
if (!atom
|
|
237
|
-
switch (atom
|
|
235
|
+
const atom = store.atoms.get(atomKey);
|
|
236
|
+
if (!atom) continue;
|
|
237
|
+
switch (atom.type) {
|
|
238
238
|
case `atom`:
|
|
239
|
-
unsubscribes.push(pullAtomFamilyMember(store, socket, atom
|
|
239
|
+
unsubscribes.push(pullAtomFamilyMember(store, socket, atom));
|
|
240
240
|
break;
|
|
241
241
|
case `mutable_atom`:
|
|
242
|
-
unsubscribes.push(pullMutableAtomFamilyMember(store, socket, atom
|
|
242
|
+
unsubscribes.push(pullMutableAtomFamilyMember(store, socket, atom));
|
|
243
243
|
break;
|
|
244
244
|
}
|
|
245
245
|
}
|
|
@@ -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, J>","data: J","data: T extends Transceiver<infer Update> ? Update : never","store: Store","socket: Socket","token: AtomIO.MutableAtomToken<T, J>","data: J","data: T extends Transceiver<infer Signal> ? Signal : never","store: Store","socket: Socket","token: AtomIO.SelectorToken<T>","unsubscribes: Array<() => void>","atom","store: Store","socket: Socket","token: AtomIO.SelectorToken<T>","unsubscribes: Array<() => void>","atom","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 { Store, Transceiver } from \"atom.io/internal\"\nimport { getJsonToken, getUpdateToken, setIntoStore } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pullMutableAtom<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.MutableAtomToken<T, J>,\n): () => void {\n\tconst jsonToken = getJsonToken(store, token)\n\tconst updateToken = getUpdateToken(token)\n\tsocket.on(`init:${token.key}`, (data: J) => {\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> ? 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 { Store, Transceiver } from \"atom.io/internal\"\nimport { getJsonToken, getUpdateToken, setIntoStore } 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 pullMutableAtomFamilyMember<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.MutableAtomToken<T, 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(`init:${token.key}`, (data: J) => {\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> ? 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<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, J>","data: J","data: T extends Transceiver<infer Update> ? Update : never","store: Store","socket: Socket","token: AtomIO.MutableAtomToken<T, J>","data: J","data: T extends Transceiver<infer Signal> ? 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 { Store, Transceiver } from \"atom.io/internal\"\nimport { getJsonToken, getUpdateToken, setIntoStore } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pullMutableAtom<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.MutableAtomToken<T, J>,\n): () => void {\n\tconst jsonToken = getJsonToken(store, token)\n\tconst updateToken = getUpdateToken(token)\n\tsocket.on(`init:${token.key}`, (data: J) => {\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> ? 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 { Store, Transceiver } from \"atom.io/internal\"\nimport { getJsonToken, getUpdateToken, setIntoStore } 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 pullMutableAtomFamilyMember<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n>(\n\tstore: Store,\n\tsocket: Socket,\n\ttoken: AtomIO.MutableAtomToken<T, 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(`init:${token.key}`, (data: J) => {\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> ? 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 +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, J, K>","index: AtomIO.ReadableToken<Iterable<K>>","token: AtomIO.MutableAtomToken<Core, SerializableCore>","createRoomTX: AtomIO.TransactionToken<\n\t(\n\t\troomId: string,\n\t\tscript: string,\n\t\toptions?: string[],\n\t) => Loadable<ChildSocket<any, any>>\n>","roomId: string","script: string","options?: string[]","joinRoomTX: AtomIO.TransactionToken<\n\t(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta\n>","userId: string","enteredAtEpoch: number","leaveRoomTX: AtomIO.TransactionToken<\n\t(roomId: string, userId: string) => void\n>","destroyRoomTX: AtomIO.TransactionToken<(roomId: string) => void>","roomArgumentsAtoms: RegularAtomFamilyToken<RoomArguments, string>","roomSelectors: ReadonlyPureSelectorFamilyToken<\n\tLoadable<ChildSocket<any, any>>,\n\tstring\n>","socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>","socketIndex: MutableAtomToken<\n\tSetRTX<SocketKey>,\n\tSetRTXJson<SocketKey>\n>","userIndex: MutableAtomToken<\n\tSetRTX<UserKey>,\n\tSetRTXJson<UserKey>\n>","usersOfSockets: JoinToken<\n\t`user`,\n\tUserKey,\n\t`socket`,\n\tSocketKey,\n\t`1:1`\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-room-external-actions.ts","../../src/realtime-server/realtime-server-stores/server-room-external-store.ts","../../src/realtime-server/realtime-server-stores/server-user-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":";;;;;;;;;KAmBY,wBAAA,gBACC;iBAEG,iCAAA;UACP;;GAEN,eAAe;;;KCrBN,MAAA,GAAS,IAAA,CAAK,eAAe,IAAA,CAAK;KAElC,oDAEI,IAAA,CAAK,kBACjB,aAAa,QAAQ;UAER,gCDQjB,eCNgB,IAAA,CAAK,YDMT,EAAA,CAGZ,SCRU,MDQM,CAAA;EAAA,QAAA,EAAA,ECPH,gBDOG,CCPc,GDOd,ECPmB,MDOnB,CAAA;;AAEf,cCNY,YDMZ,CAAA,UCNmC,MDOjC,EAAA,UCPmD,MDOpC,CAAA,YCPuD,MDOvD,CAAA;uBCNI,UAAU,GAAG,cAAc,IAAA,CAAK;6BAC1B,6BAA6B,IAAA,CAAK;4CACnB,2BAEhC,EAAE;EAnBb,EAAA,EAAY,MAAA;EAAA,IAAA,EAAA,CAAA,cAAA,MAiCuB,CAjCvB,CAAA,CAAA,KAAA,EAkCH,KAlCG,EAAA,GAAA,IAAA,EAmCD,CAnCC,CAmCC,KAnCD,CAAA,EAAA,GAoCN,YApCM,CAoCO,CApCP,EAoCU,CApCV,CAAA;EAAA,WAAkC,CAAA,IAAA,EAAA,CAAA,cAAA,MAuCjB,CAvCiB,CAAA,CAAA,KAAA,EAwCpC,KAxCoC,EAAA,GAAA,IAAA,EAyClC,CAzCkC,CAyChC,KAzCgC,CAAA,EAAA,GA0CvC,YA1CuC,CA0C1B,CA1C0B,EA0CvB,CA1CuB,CAAA;EAAA,EAAA,CAAA,cAApB,MAiDK,CAjDL,CAAA,CAAA,KAAA,EAkDjB,KAlDiB,EAAA,QAAA,EAAA,CAAA,GAAA,IAAA,EAmDJ,CAnDI,CAmDF,KAnDE,CAAA,EAAA,GAAA,IAAA,CAAA,EAAA,IAAA;EAAA,KAAA,CAAA,QAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,IAAA,EA8DuB,IAAA,CAAK,KA9D5B,EAAA,GAAA,IAAA,CAAA,EAAA,IAAA;EAE1B,GAAY,CAAA,cAAA,MAiEoB,CAjEpB,CAAA,CAAA,KAAA,EAkEH,KAlEG,EAAA,QAAA,CAAA,EAAA,CAAA,GAAA,IAAA,EAmEW,CAnEX,CAmEa,KAnEb,CAAA,EAAA,GAAA,IAAA,CAAA,EAAA,IAAA;EAAA,MAAA,CAAA,QAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,GAAA,IAAA,EAgFsC,IAAA,CAAK,KAhF3C,EAAA,GAAA,IAAA,CAAA,EAAA,IAAA;;;;cCIC,sBACF,kBACA,gBACD,aAAa,GAAG;;EFM1B,UAAY,iBAAA,EAAA,MAAA,EAAA;EAGZ,UAAgB,aAAA,EAAA,MAAA;EAAA,UAAA,eAAA,EAAA,MAAA,EAAA;EAAA,EAAA,EAAA,MACP;EAAA,OACR,EEHgB,8BFGhB;EAAA,GAAA,EAAA,MACE;EAAA,MAAe,EEFF,IFEE,CEFG,OFEH,EAAA,OAAA,GAAA,MAAA,GAAA,MAAA,CAAA;EAAA,UAAA,SAAA,CAAA,GAAA,EEAQ,IAAA,CAAK,YFAb,CAAA,EAAA,IAAA;uBEoBP,sDAEA,KAAK;;;;cCvCH,wBACF,kBACA,gBACD,aAAa,GAAG;MACd,oBAAoB,IAAA,CAAK;EHOrC,GAAY,EGNC,OHMD,CAAA,CAAA,MAAA,EAAA,GGNqB,IAAA,CAAK,YHOzB,EAAA,CAAA,CAAA;EAEb,EAAA,EAAgB,MAAA;EAAA,iBAAA,EAAA,CAAA,GAAA,GAAA,IAAA,CAAA,EAAA;EAAA,WACP,CAAA,EAAA,EAAA,MAAA;EAAA,OACR,CAAA,CAAA,EAAA,IAAA;;AACiB,cGYL,YHZK,CAAA,UGaP,MHbO,GAAA,SAAA,MAAA,IAAA,SGcU,EHdV,EAAA,GAAA,CAAA,MAAA,EAAA,GGc6B,IAAA,CAAK,YHdlC,EAAA,CAAA,EAAA,YGgBP,oCACgB,mBAAmB,IAAA,CAAK;;;AFtCnD,CAAA,CAAY,SE6CF,YF7CE,CE6CW,CF7CX,EE6Cc,CF7Cd,CAAA,CAAA;EAAA,UAA6B,cAAK,EAAA,MAAA;EAAA,UAAzB,iBAAK,EAAA,MAAA,EAAA;EAAA,UAAA,MAAA,EEgDP,GFhDO,CAAA,MAAA,EEgDK,aFhDL,CAAA,GAAA,EAAA,GAAA,CAAA,CAAA;EAE1B,UAAY,aAAA,EAAA,CAAA,CAAA,MAAA,EEgDF,aFhDE,CAAA,GAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,GAAA,GAAA,IAAA,CAAA,GAAA,IAAA,CAAA,EAAA;EAAA,UAAA,OAAA,EEkDQ,MAAA,CAAO,OFlDf;EAAA,EAAA,EAAA,MAEI;EAAK,UACJ,GAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA;EAAA,MAAQ,EAAA;IAAA,IAAA,EAArB,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GAAA,IAAA;IAAA,IAAA,EAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GAAA,IAAA;IAEJ,KAAiB,EAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GAAA,IAAA;EAAA,CAAA;EAAA,WAEI,CAAA;EAAA,KAAA,CAES,cAAA,EAAA,CAAA,MAAA,EE2KH,aF3KG,CAAA,GAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,GAAA,GAAA,IAAA,CAAA,GAAA,IAAA,CAAA,EAAA,IAAA;;;;KGTlB,cAAA,GAAiB,kBAAkB;iBAC/B,sBAAA;;;GAGb,0BACuC,YACpC,MAAA,CAAO,iBAAiB;;;KCAlB,cAAA,GAAiB,kBAAkB;iBAC/B,0BAAA;;;GAGb,0BAES,IAAA,CAAK,wBACL,mBAEF,MAAA,CAAO,uBAAuB,GAAG,WAClC,MAAA,CAAO,cAAc,SAAS;;;KCP3B,qBAAA,GAAwB,kBAC5B;iBAEQ,6BAAA;;;GAGb,0BAES,4BACA,IAAA,CAAK,wBACL,UNNZ,CAAA,MAAY,EMQF,MAAA,CAAO,sBNRL,CMQ4B,CNR5B,EMQ+B,CNP9B,EMOiC,CNPjC,CAAA,EAAA,KAAA,EMQJ,MAAA,CAAO,aNRH,CMQiB,QNRjB,CMQ0B,CNR1B,CAAA,CAAA,EAAA,GAAA,GAAA,GAAA,IAAA;;;KOPD,eAAA,GAAkB,kBAAkB;iBAChC,uBAAA;;;GAGb,6BAEY,YAAY,IAAA,CAAK,wCACL,IAAA,CAAK,qBACtB,MAAA,CAAO,iBAAiB,MAAM;;;cCX3BoB,cAAc,MAAA,CAAO,yEAK5B,SAAS;KAaH,YAAA,GAAe,MAAA,CAAO,qBAAqB;cAE1CI,YAAY,MAAA,CAAO,6EAC6B;KAejD,UAAA,GAAa,MAAA,CAAO,qBAAqB;cAExCG,aAAa,MAAA,CAAO;AR7BrB,KQ2CA,WAAA,GAAc,MAAA,CAAO,aR1CpB,CAAA,OQ0CyC,WR1CzC,CAAA;AAEG,cQ0CHC,aR1CG,EQ0CY,MAAA,CAAO,gBR1CnB,CAAA,CAAA,MAAA,EAAA,MAAA,EAAA,GAAA,IAAA,CAAA;;;KSVJ,aAAA;cAICC,oBAAoB,uBAAuB;cAM3CC,eAAe,gCAC3B,SAAS;;;KCXE,SAAA;KACA,OAAA;KACA,OAAA;KAEA,qBAAA,GAAwB;;EVGpC,KAAY,EAAA,CUCD,OVDC,EUCQ,SVDR,EUCmB,OVDnB,CAAA;AAGZ,CAAA,CAAA,CAAA;AAAgB,cUGHC,WVHG,EUGU,sBVHV,CUGiC,MVHjC,GAAA,IAAA,EUGgD,SVHhD,CAAA;AACP,cUQIC,WVRJ,EUQiB,gBVRjB,CUSR,MVTQ,CUSD,SVTC,CAAA,EUUR,UVVQ,CUUG,SVVH,CAAA,CAAA;AACR,
|
|
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, J, K>","index: AtomIO.ReadableToken<Iterable<K>>","token: AtomIO.MutableAtomToken<Core, SerializableCore>","createRoomTX: AtomIO.TransactionToken<\n\t(\n\t\troomId: string,\n\t\tscript: string,\n\t\toptions?: string[],\n\t) => Loadable<ChildSocket<any, any>>\n>","roomId: string","script: string","options?: string[]","joinRoomTX: AtomIO.TransactionToken<\n\t(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta\n>","userId: string","enteredAtEpoch: number","leaveRoomTX: AtomIO.TransactionToken<\n\t(roomId: string, userId: string) => void\n>","destroyRoomTX: AtomIO.TransactionToken<(roomId: string) => void>","roomArgumentsAtoms: RegularAtomFamilyToken<RoomArguments, string>","roomSelectors: ReadonlyPureSelectorFamilyToken<\n\tLoadable<ChildSocket<any, any>>,\n\tstring\n>","socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>","socketIndex: MutableAtomToken<\n\tSetRTX<SocketKey>,\n\tSetRTXJson<SocketKey>\n>","userIndex: MutableAtomToken<\n\tSetRTX<UserKey>,\n\tSetRTXJson<UserKey>\n>","usersOfSockets: JoinToken<\n\t`user`,\n\tUserKey,\n\t`socket`,\n\tSocketKey,\n\t`1:1`\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-room-external-actions.ts","../../src/realtime-server/realtime-server-stores/server-room-external-store.ts","../../src/realtime-server/realtime-server-stores/server-user-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,7 +1,7 @@
|
|
|
1
1
|
import { IMPLICIT, Subject, actUponStore, editRelationsInStore, findInStore, findRelationsInStore, getFromStore, getJsonToken, getUpdateToken, isRootStore, setIntoStore, subscribeToState, subscribeToTransaction } from "atom.io/internal";
|
|
2
2
|
import { parseJson, stringifyJson } from "atom.io/json";
|
|
3
3
|
import * as AtomIO from "atom.io";
|
|
4
|
-
import {
|
|
4
|
+
import { atomFamily, join, mutableAtom, selectorFamily } from "atom.io";
|
|
5
5
|
import { SetRTX } from "atom.io/transceivers/set-rtx";
|
|
6
6
|
import { roomIndex, usersInRooms } from "atom.io/realtime";
|
|
7
7
|
import { spawn } from "node:child_process";
|
|
@@ -398,16 +398,14 @@ const socketAtoms = atomFamily({
|
|
|
398
398
|
key: `sockets`,
|
|
399
399
|
default: null
|
|
400
400
|
});
|
|
401
|
-
const socketIndex =
|
|
401
|
+
const socketIndex = mutableAtom({
|
|
402
402
|
key: `socketsIndex`,
|
|
403
|
-
mutable: true,
|
|
404
403
|
default: () => new SetRTX(),
|
|
405
404
|
toJson: (set) => set.toJSON(),
|
|
406
405
|
fromJson: (json) => SetRTX.fromJSON(json)
|
|
407
406
|
});
|
|
408
|
-
const userIndex =
|
|
407
|
+
const userIndex = mutableAtom({
|
|
409
408
|
key: `usersIndex`,
|
|
410
|
-
mutable: true,
|
|
411
409
|
default: () => new SetRTX(),
|
|
412
410
|
toJson: (set) => set.toJSON(),
|
|
413
411
|
fromJson: (json) => SetRTX.fromJSON(json)
|
|
@@ -426,8 +424,8 @@ function prepareToSendInitialPayload(store, continuity, userKey, socket) {
|
|
|
426
424
|
const continuityKey = continuity.key;
|
|
427
425
|
return function sendInitialPayload() {
|
|
428
426
|
const initialPayload = [];
|
|
429
|
-
for (const atom
|
|
430
|
-
const resourceToken = atom
|
|
427
|
+
for (const atom of continuity.globals) {
|
|
428
|
+
const resourceToken = atom.type === `mutable_atom` ? getJsonToken(store, atom) : atom;
|
|
431
429
|
const resource = getFromStore(store, resourceToken);
|
|
432
430
|
initialPayload.push(resourceToken, resource);
|
|
433
431
|
}
|
|
@@ -500,9 +498,9 @@ function subscribeToContinuityActions(store, continuity, userKey, socket) {
|
|
|
500
498
|
for (const transaction of continuity.actions) {
|
|
501
499
|
const unsubscribeFromTransaction = subscribeToTransaction(store, transaction, `sync-continuity:${continuityKey}:${userKey}`, (update) => {
|
|
502
500
|
try {
|
|
503
|
-
const visibleKeys = continuity.globals.map((atom
|
|
504
|
-
if (atom
|
|
505
|
-
return getUpdateToken(atom
|
|
501
|
+
const visibleKeys = continuity.globals.map((atom) => {
|
|
502
|
+
if (atom.type === `atom`) return atom.key;
|
|
503
|
+
return getUpdateToken(atom).key;
|
|
506
504
|
}).concat(continuity.perspectives.flatMap((perspective) => {
|
|
507
505
|
const { viewAtoms } = perspective;
|
|
508
506
|
const userPerspectiveTokenState = findInStore(store, viewAtoms, userKey);
|