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.
Files changed (51) hide show
  1. package/dist/internal/index.d.ts +32 -41
  2. package/dist/internal/index.d.ts.map +1 -1
  3. package/dist/internal/index.js +106 -128
  4. package/dist/internal/index.js.map +1 -1
  5. package/dist/json/index.d.ts +7 -7
  6. package/dist/json/index.js +2 -2
  7. package/dist/json/index.js.map +1 -1
  8. package/dist/main/index.d.ts +779 -886
  9. package/dist/main/index.d.ts.map +1 -1
  10. package/dist/main/index.js +46 -14
  11. package/dist/main/index.js.map +1 -1
  12. package/dist/react-devtools/index.js +10 -10
  13. package/dist/react-devtools/index.js.map +1 -1
  14. package/dist/realtime/index.d.ts.map +1 -1
  15. package/dist/realtime/index.js +3 -5
  16. package/dist/realtime/index.js.map +1 -1
  17. package/dist/realtime-client/index.js +10 -10
  18. package/dist/realtime-client/index.js.map +1 -1
  19. package/dist/realtime-server/index.d.ts.map +1 -1
  20. package/dist/realtime-server/index.js +8 -10
  21. package/dist/realtime-server/index.js.map +1 -1
  22. package/package.json +4 -4
  23. package/src/internal/atom/create-regular-atom.ts +1 -0
  24. package/src/internal/atom/index.ts +0 -1
  25. package/src/internal/families/index.ts +0 -1
  26. package/src/internal/index.ts +111 -89
  27. package/src/internal/join/join-internal.ts +3 -4
  28. package/src/internal/mutable/create-mutable-atom-family.ts +0 -1
  29. package/src/internal/mutable/create-mutable-atom.ts +1 -1
  30. package/src/internal/selector/register-selector.ts +2 -2
  31. package/src/json/entries.ts +7 -7
  32. package/src/main/atom.ts +67 -114
  33. package/src/main/dispose-state.ts +0 -2
  34. package/src/main/find-state.ts +3 -9
  35. package/src/main/get-state.ts +0 -2
  36. package/src/main/index.ts +1 -176
  37. package/src/main/join.ts +0 -7
  38. package/src/main/reset-state.ts +0 -2
  39. package/src/main/selector.ts +5 -72
  40. package/src/main/set-state.ts +1 -4
  41. package/src/main/silo.ts +14 -5
  42. package/src/main/subscribe.ts +0 -7
  43. package/src/main/timeline.ts +1 -18
  44. package/src/main/tokens.ts +247 -0
  45. package/src/main/transaction.ts +17 -55
  46. package/src/main/validators.ts +1 -1
  47. package/src/react-devtools/store.ts +61 -45
  48. package/src/realtime/shared-room-store.ts +3 -5
  49. package/src/realtime-server/realtime-server-stores/server-user-store.ts +3 -5
  50. package/src/internal/atom/create-standalone-atom.ts +0 -39
  51. package/src/internal/families/create-atom-family.ts +0 -38
@@ -1,5 +1,5 @@
1
1
  import { IMPLICIT, assignTransactionToContinuity, setEpochNumberOfContinuity } from "atom.io/internal";
2
- import { atom, getInternalRelations, join, selectorFamily } from "atom.io";
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 = atom({
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 = atom({
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 { atom, getInternalRelations, join, 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> = atom<SetRTX<string>, SetRTXJson<string>>({\n\tkey: `usersInRoomIndex`,\n\tmutable: true,\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> = atom<SetRTX<string>, SetRTXJson<string>>({\n\tkey: `roomIndex`,\n\tdefault: () => new SetRTX<string>(),\n\tmutable: true,\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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"}
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$1 = store.atoms.get(atomKey);
210
- if (!atom$1) continue;
211
- switch (atom$1.type) {
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$1));
213
+ unsubscribes.push(pullAtom(store, socket, atom));
214
214
  break;
215
215
  case `mutable_atom`:
216
- unsubscribes.push(pullMutableAtom(store, socket, atom$1));
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$1 = store.atoms.get(atomKey);
236
- if (!atom$1) continue;
237
- switch (atom$1.type) {
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$1));
239
+ unsubscribes.push(pullAtomFamilyMember(store, socket, atom));
240
240
  break;
241
241
  case `mutable_atom`:
242
- unsubscribes.push(pullMutableAtomFamilyMember(store, socket, atom$1));
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":"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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, 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 { atom, atomFamily, join, selectorFamily } from "atom.io";
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 = atom({
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 = atom({
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$1 of continuity.globals) {
430
- const resourceToken = atom$1.type === `mutable_atom` ? getJsonToken(store, atom$1) : atom$1;
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$1) => {
504
- if (atom$1.type === `atom`) return atom$1.key;
505
- return getUpdateToken(atom$1).key;
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);