atom.io 0.33.4 → 0.33.6

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 (71) hide show
  1. package/dist/data/index.d.ts +2 -7
  2. package/dist/data/index.d.ts.map +1 -1
  3. package/dist/eslint-plugin/index.d.ts +0 -6
  4. package/dist/eslint-plugin/index.d.ts.map +1 -1
  5. package/dist/internal/index.d.ts +12 -100
  6. package/dist/internal/index.d.ts.map +1 -1
  7. package/dist/internal/index.js +35 -35
  8. package/dist/internal/index.js.map +1 -1
  9. package/dist/introspection/index.d.ts +0 -8
  10. package/dist/introspection/index.d.ts.map +1 -1
  11. package/dist/introspection/index.js +9 -9
  12. package/dist/introspection/index.js.map +1 -1
  13. package/dist/json/index.d.ts +1 -6
  14. package/dist/json/index.d.ts.map +1 -1
  15. package/dist/main/index.d.ts +3 -28
  16. package/dist/main/index.d.ts.map +1 -1
  17. package/dist/main/index.js +4 -6
  18. package/dist/main/index.js.map +1 -1
  19. package/dist/react/index.d.ts +0 -5
  20. package/dist/react/index.d.ts.map +1 -1
  21. package/dist/react/index.js +7 -11
  22. package/dist/react/index.js.map +1 -1
  23. package/dist/react-devtools/index.css +9 -7
  24. package/dist/react-devtools/index.css.map +1 -1
  25. package/dist/react-devtools/index.d.ts +1 -12
  26. package/dist/react-devtools/index.d.ts.map +1 -1
  27. package/dist/react-devtools/index.js +7 -4
  28. package/dist/react-devtools/index.js.map +1 -1
  29. package/dist/realtime/index.d.ts +0 -2
  30. package/dist/realtime/index.d.ts.map +1 -1
  31. package/dist/realtime/index.js.map +1 -1
  32. package/dist/realtime-client/index.d.ts +13 -38
  33. package/dist/realtime-client/index.d.ts.map +1 -1
  34. package/dist/realtime-client/index.js +4 -6
  35. package/dist/realtime-client/index.js.map +1 -1
  36. package/dist/realtime-react/index.d.ts +7 -25
  37. package/dist/realtime-react/index.d.ts.map +1 -1
  38. package/dist/realtime-react/index.js +23 -42
  39. package/dist/realtime-react/index.js.map +1 -1
  40. package/dist/realtime-server/index.d.ts +11 -31
  41. package/dist/realtime-server/index.d.ts.map +1 -1
  42. package/dist/realtime-server/index.js +6 -6
  43. package/dist/realtime-server/index.js.map +1 -1
  44. package/dist/realtime-testing/index.d.ts +0 -1
  45. package/dist/realtime-testing/index.js +1 -1
  46. package/dist/realtime-testing/index.js.map +1 -1
  47. package/dist/transceivers/set-rtx/index.d.ts +0 -1
  48. package/dist/web/index.d.ts +0 -1
  49. package/package.json +37 -28
  50. package/src/internal/families/dispose-from-store.ts +1 -1
  51. package/src/internal/mutable/create-mutable-atom.ts +2 -6
  52. package/src/internal/set-state/set-into-store.ts +1 -1
  53. package/src/internal/store/withdraw.ts +13 -13
  54. package/src/internal/timeline/time-travel.ts +0 -2
  55. package/src/introspection/attach-type-selectors.ts +1 -1
  56. package/src/main/index.ts +2 -8
  57. package/src/main/logger.ts +2 -2
  58. package/src/react-devtools/AtomIODevtools.tsx +2 -2
  59. package/src/react-devtools/StateEditor.tsx +1 -5
  60. package/src/react-devtools/Updates.tsx +3 -5
  61. package/src/react-devtools/devtools.css +9 -7
  62. package/src/react-devtools/elastic-input/NumberInput.tsx +1 -1
  63. package/src/react-devtools/error-boundary/ReactErrorBoundary.tsx +1 -1
  64. package/src/react-devtools/json-editor/developer-interface.tsx +1 -1
  65. package/src/react-devtools/json-editor/editors-by-type/utilities/cast-json.ts +1 -1
  66. package/src/realtime/shared-room-store.ts +0 -3
  67. package/src/realtime-react/use-pull-selector.ts +0 -1
  68. package/src/realtime-react/use-single-effect.ts +2 -0
  69. package/src/realtime-server/continuity/prepare-to-sync-realtime-continuity.ts +1 -1
  70. package/src/realtime-server/continuity/subscribe-to-continuity-actions.ts +0 -2
  71. package/src/realtime-server/ipc-sockets/parent-socket.ts +1 -1
@@ -1,17 +1,6 @@
1
- import * as Internal$1 from "atom.io/internal";
2
1
  import * as Internal from "atom.io/internal";
3
2
  import { Func, Store, Transceiver } from "atom.io/internal";
4
3
  import { Json } from "atom.io/json";
5
- import * as AtomIO$10 from "atom.io";
6
- import * as AtomIO$9 from "atom.io";
7
- import * as AtomIO$8 from "atom.io";
8
- import * as AtomIO$7 from "atom.io";
9
- import * as AtomIO$6 from "atom.io";
10
- import * as AtomIO$5 from "atom.io";
11
- import * as AtomIO$4 from "atom.io";
12
- import * as AtomIO$3 from "atom.io";
13
- import * as AtomIO$2 from "atom.io";
14
- import * as AtomIO$1 from "atom.io";
15
4
  import * as AtomIO from "atom.io";
16
5
  import { AtomToken } from "atom.io";
17
6
  import { ContinuityToken } from "atom.io/realtime";
@@ -19,66 +8,52 @@ import { Socket } from "atom.io/realtime-server";
19
8
  import { Socket as Socket$1 } from "socket.io-client";
20
9
 
21
10
  //#region src/realtime-client/continuity/register-and-attempt-confirmed-update.d.ts
22
- declare const useRegisterAndAttemptConfirmedUpdate: (store: Store, continuityKey: string, socket: Socket, optimisticUpdates: AtomIO$10.TransactionUpdate<any>[], confirmedUpdates: AtomIO$10.TransactionUpdate<any>[]) => (confirmed: AtomIO$10.TransactionUpdate<Func>) => void;
23
-
11
+ declare const useRegisterAndAttemptConfirmedUpdate: (store: Store, continuityKey: string, socket: Socket, optimisticUpdates: AtomIO.TransactionUpdate<any>[], confirmedUpdates: AtomIO.TransactionUpdate<any>[]) => (confirmed: AtomIO.TransactionUpdate<Func>) => void;
24
12
  //#endregion
25
13
  //#region src/realtime-client/continuity/use-conceal-state.d.ts
26
14
  declare function useConcealState(store: Store): (concealed: AtomToken<unknown>[]) => void;
27
-
28
15
  //#endregion
29
16
  //#region src/realtime-client/continuity/use-reveal-state.d.ts
30
17
  declare function useRevealState(store: Store): (revealed: Json.Array) => void;
31
-
32
18
  //#endregion
33
19
  //#region src/realtime-client/pull-atom.d.ts
34
- declare function pullAtom<J extends Json.Serializable>(store: Store, socket: Socket$1, token: AtomIO$9.RegularAtomToken<J>): () => void;
35
-
20
+ declare function pullAtom<J extends Json.Serializable>(store: Store, socket: Socket$1, token: AtomIO.RegularAtomToken<J>): () => void;
36
21
  //#endregion
37
22
  //#region src/realtime-client/pull-atom-family-member.d.ts
38
23
  /* eslint-disable no-console */
39
- declare function pullAtomFamilyMember<J extends Json.Serializable>(store: Store, socket: Socket$1, token: AtomIO$8.RegularAtomToken<J>): () => void;
40
-
24
+ declare function pullAtomFamilyMember<J extends Json.Serializable>(store: Store, socket: Socket$1, token: AtomIO.RegularAtomToken<J>): () => void;
41
25
  //#endregion
42
26
  //#region src/realtime-client/pull-mutable-atom.d.ts
43
- declare function pullMutableAtom<T extends Transceiver<any>, J extends Json.Serializable>(store: Store, socket: Socket$1, token: AtomIO$7.MutableAtomToken<T, J>): () => void;
44
-
27
+ declare function pullMutableAtom<T extends Transceiver<any>, J extends Json.Serializable>(store: Store, socket: Socket$1, token: AtomIO.MutableAtomToken<T, J>): () => void;
45
28
  //#endregion
46
29
  //#region src/realtime-client/pull-mutable-atom-family-member.d.ts
47
30
  /* eslint-disable no-console */
48
- declare function pullMutableAtomFamilyMember<T extends Transceiver<any>, J extends Json.Serializable>(store: Store, socket: Socket$1, token: AtomIO$6.MutableAtomToken<T, J>): () => void;
49
-
31
+ declare function pullMutableAtomFamilyMember<T extends Transceiver<any>, J extends Json.Serializable>(store: Store, socket: Socket$1, token: AtomIO.MutableAtomToken<T, J>): () => void;
50
32
  //#endregion
51
33
  //#region src/realtime-client/pull-selector.d.ts
52
- declare function pullSelector<T>(store: Store, socket: Socket$1, token: AtomIO$5.SelectorToken<T>): () => void;
53
-
34
+ declare function pullSelector<T>(store: Store, socket: Socket$1, token: AtomIO.SelectorToken<T>): () => void;
54
35
  //#endregion
55
36
  //#region src/realtime-client/pull-selector-family-member.d.ts
56
37
  /* eslint-disable no-console */
57
- declare function pullSelectorFamilyMember<T>(store: Store, socket: Socket$1, token: AtomIO$4.SelectorToken<T>): () => void;
58
-
38
+ declare function pullSelectorFamilyMember<T>(store: Store, socket: Socket$1, token: AtomIO.SelectorToken<T>): () => void;
59
39
  //#endregion
60
40
  //#region src/realtime-client/push-state.d.ts
61
- declare function pushState<J extends Json.Serializable>(store: Internal$1.Store, socket: Socket$1, token: AtomIO$3.WritableToken<J>): () => void;
62
-
41
+ declare function pushState<J extends Json.Serializable>(store: Internal.Store, socket: Socket$1, token: AtomIO.WritableToken<J>): () => void;
63
42
  //#endregion
64
43
  //#region src/realtime-client/realtime-client-stores/client-main-store.d.ts
65
- declare const myIdState__INTERNAL: AtomIO$2.RegularAtomToken<string | undefined>;
66
- declare const myIdState: AtomIO$2.ReadonlyPureSelectorToken<string | undefined>;
67
- declare const myUsernameState: AtomIO$2.RegularAtomToken<string | null>;
68
-
44
+ declare const myIdState__INTERNAL: AtomIO.RegularAtomToken<string | undefined>;
45
+ declare const myIdState: AtomIO.ReadonlyPureSelectorToken<string | undefined>;
46
+ declare const myUsernameState: AtomIO.RegularAtomToken<string | null>;
69
47
  //#endregion
70
48
  //#region src/realtime-client/realtime-client-stores/client-sync-store.d.ts
71
- declare const optimisticUpdateQueue: AtomIO$1.RegularAtomToken<AtomIO$1.TransactionUpdate<any>[]>;
72
- declare const confirmedUpdateQueue: AtomIO$1.RegularAtomToken<AtomIO$1.TransactionUpdate<any>[]>;
73
-
49
+ declare const optimisticUpdateQueue: AtomIO.RegularAtomToken<AtomIO.TransactionUpdate<any>[]>;
50
+ declare const confirmedUpdateQueue: AtomIO.RegularAtomToken<AtomIO.TransactionUpdate<any>[]>;
74
51
  //#endregion
75
52
  //#region src/realtime-client/server-action.d.ts
76
53
  declare function serverAction<F extends Internal.Func>(store: Internal.Store, socket: Socket$1, token: AtomIO.TransactionToken<F>): () => void;
77
-
78
54
  //#endregion
79
55
  //#region src/realtime-client/sync-continuity.d.ts
80
56
  declare function syncContinuity(store: Store, socket: Socket$1, continuity: ContinuityToken): () => void;
81
-
82
57
  //#endregion
83
58
  export { confirmedUpdateQueue, myIdState, myIdState__INTERNAL, myUsernameState, optimisticUpdateQueue, pullAtom, pullAtomFamilyMember, pullMutableAtom, pullMutableAtomFamilyMember, pullSelector, pullSelectorFamilyMember, pushState, serverAction, syncContinuity, useConcealState, useRegisterAndAttemptConfirmedUpdate, useRevealState };
84
59
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["store: Store","continuityKey: string","socket: Socket","optimisticUpdates: AtomIO.TransactionUpdate<any>[]","confirmedUpdates: AtomIO.TransactionUpdate<any>[]","confirmed: AtomIO.TransactionUpdate<Func>","store: Store","concealed: AtomToken<unknown>[]","store: Store","revealed: Json.Array","store: Store","socket: Socket","token: AtomIO.RegularAtomToken<J>","store: Store","socket: Socket","token: AtomIO.RegularAtomToken<J>","store: Store","socket: Socket","token: AtomIO.MutableAtomToken<T, J>","store: Store","socket: Socket","token: AtomIO.MutableAtomToken<T, J>","store: Store","socket: Socket","token: AtomIO.SelectorToken<T>","store: Store","socket: Socket","token: AtomIO.SelectorToken<T>","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"],"sources":["../../src/realtime-client/continuity/register-and-attempt-confirmed-update.ts","../../src/realtime-client/continuity/use-conceal-state.ts","../../src/realtime-client/continuity/use-reveal-state.ts","../../src/realtime-client/pull-atom.ts","../../src/realtime-client/pull-atom-family-member.ts","../../src/realtime-client/pull-mutable-atom.ts","../../src/realtime-client/pull-mutable-atom-family-member.ts","../../src/realtime-client/pull-selector.ts","../../src/realtime-client/pull-selector-family-member.ts","../../src/realtime-client/push-state.ts","../../src/realtime-client/realtime-client-stores/client-main-store.ts","../../src/realtime-client/realtime-client-stores/client-sync-store.ts","../../src/realtime-client/server-action.ts","../../src/realtime-client/sync-continuity.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;;;;;;;cAgBa,8CAEJ,sCAEC,2BACW,SAAA,CAAO,4CACR,SAAA,CAAO,yCAEd,SAAA,CAAO,kBAAkB;;;;iBCpBtB,eAAA,QAAuB,oBACnB;;;;iBCFJ,cAAA,QAAsB,mBACnB,IAAA,CAAK;;;;iBCCR,mBAAmB,IAAA,CAAK,qBAChC,eACC,iBACD,QAAA,CAAO,iBAAiB;;;;;iBCAhB,+BAA+B,IAAA,CAAK,qBAC5C,eACC,iBACD,QAAA,CAAO,iBAAiB;;;;iBCLhB,0BACL,4BACA,IAAA,CAAK,qBAER,eACC,iBACD,QAAA,CAAO,iBAAiB,GAAG;;;;;iBCHnB,sCACL,4BACA,IAAA,CAAK,qBAER,eACC,iBACD,QAAA,CAAO,iBAAiB,GAAG;;;;iBCRnB,uBACR,eACC,iBACD,QAAA,CAAO,cAAc;;;;;iBCDb,mCACR,eACC,iBACD,QAAA,CAAO,cAAc;;;;iBCPb,oBAAoB,IAAA,CAAK,qBACjC,UAAA,CAAS,eACR,iBACD,QAAA,CAAO,cAAc;;;;cCLhB+B,qBAAqB,QAAA,CAAO;cAK5BC,WAAW,QAAA,CAAO;cAMlBC,iBAAiB,QAAA,CAAO;;;;cCZxBC,uBAAuB,QAAA,CAAO,iBAC1C,QAAA,CAAO;cAMKC,sBAAsB,QAAA,CAAO,iBACzC,QAAA,CAAO;;;;iBCNQ,uBAAuB,QAAA,CAAS,aACxC,QAAA,CAAS,eACR,iBACD,MAAA,CAAO,iBAAiB;;;;iBCchB,cAAA,QACR,eACC,sBACI"}
1
+ {"version":3,"file":"index.d.ts","names":["store: Store","continuityKey: string","socket: Socket","optimisticUpdates: AtomIO.TransactionUpdate<any>[]","confirmedUpdates: AtomIO.TransactionUpdate<any>[]","confirmed: AtomIO.TransactionUpdate<Func>","store: Store","concealed: AtomToken<unknown>[]","store: Store","revealed: Json.Array","store: Store","socket: Socket","token: AtomIO.RegularAtomToken<J>","store: Store","socket: Socket","token: AtomIO.RegularAtomToken<J>","store: Store","socket: Socket","token: AtomIO.MutableAtomToken<T, J>","store: Store","socket: Socket","token: AtomIO.MutableAtomToken<T, J>","store: Store","socket: Socket","token: AtomIO.SelectorToken<T>","store: Store","socket: Socket","token: AtomIO.SelectorToken<T>","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"],"sources":["../../src/realtime-client/continuity/register-and-attempt-confirmed-update.ts","../../src/realtime-client/continuity/use-conceal-state.ts","../../src/realtime-client/continuity/use-reveal-state.ts","../../src/realtime-client/pull-atom.ts","../../src/realtime-client/pull-atom-family-member.ts","../../src/realtime-client/pull-mutable-atom.ts","../../src/realtime-client/pull-mutable-atom-family-member.ts","../../src/realtime-client/pull-selector.ts","../../src/realtime-client/pull-selector-family-member.ts","../../src/realtime-client/push-state.ts","../../src/realtime-client/realtime-client-stores/client-main-store.ts","../../src/realtime-client/realtime-client-stores/client-sync-store.ts","../../src/realtime-client/server-action.ts","../../src/realtime-client/sync-continuity.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAgBa,8CAEJ,sCAEC,2BACW,MAAA,CAAO,4CACR,MAAA,CAAO,yCAEd,MAAA,CAAO,kBAAkB;;;iBCpBtB,eAAA,QAAuB,oBACnB;;;iBCFJ,cAAA,QAAsB,mBACnB,IAAA,CAAK;;;iBCCR,mBAAmB,IAAA,CAAK,qBAChC,eACC,iBACD,MAAA,CAAO,iBAAiB;;;;iBCAhB,+BAA+B,IAAA,CAAK,qBAC5C,eACC,iBACD,MAAA,CAAO,iBAAiB;;;iBCLhB,0BACL,4BACA,IAAA,CAAK,qBAER,eACC,iBACD,MAAA,CAAO,iBAAiB,GAAG;;;;iBCHnB,sCACL,4BACA,IAAA,CAAK,qBAER,eACC,iBACD,MAAA,CAAO,iBAAiB,GAAG;;;iBCRnB,uBACR,eACC,iBACD,MAAA,CAAO,cAAc;;;;iBCDb,mCACR,eACC,iBACD,MAAA,CAAO,cAAc;;;iBCPb,oBAAoB,IAAA,CAAK,qBACjC,QAAA,CAAS,eACR,iBACD,MAAA,CAAO,cAAc;;;cCLhB+B,qBAAqB,MAAA,CAAO;cAK5BC,WAAW,MAAA,CAAO;cAMlBC,iBAAiB,MAAA,CAAO;;;cCZxBC,uBAAuB,MAAA,CAAO,iBAC1C,MAAA,CAAO;cAMKC,sBAAsB,MAAA,CAAO,iBACzC,MAAA,CAAO;;;iBCNQ,uBAAuB,QAAA,CAAS,aACxC,QAAA,CAAS,eACR,iBACD,MAAA,CAAO,iBAAiB;;;iBCchB,cAAA,QACR,eACC,sBACI"}
@@ -1,8 +1,6 @@
1
- import * as Internal$1 from "atom.io/internal";
2
1
  import * as Internal from "atom.io/internal";
3
2
  import { actUponStore, assignTransactionToContinuity, disposeAtom, getEpochNumberOfContinuity, getFromStore, getJsonToken, getUpdateToken, ingestTransactionUpdate, isRootStore, setEpochNumberOfContinuity, setIntoStore, subscribeToTransaction } from "atom.io/internal";
4
3
  import { parseJson } from "atom.io/json";
5
- import * as AtomIO$1 from "atom.io";
6
4
  import * as AtomIO from "atom.io";
7
5
  import { persistSync } from "atom.io/web";
8
6
  import { confirmedUpdateQueue as confirmedUpdateQueue$1, optimisticUpdateQueue as optimisticUpdateQueue$1 } from "atom.io/realtime-client";
@@ -258,7 +256,7 @@ function pullSelectorFamilyMember(store, socket, token) {
258
256
  //#region src/realtime-client/push-state.ts
259
257
  function pushState(store, socket, token) {
260
258
  socket.emit(`claim:${token.key}`);
261
- Internal$1.subscribeToState(store, token, `push`, ({ newValue }) => {
259
+ Internal.subscribeToState(store, token, `push`, ({ newValue }) => {
262
260
  socket.emit(`pub:${token.key}`, newValue);
263
261
  });
264
262
  return () => {
@@ -269,15 +267,15 @@ function pushState(store, socket, token) {
269
267
 
270
268
  //#endregion
271
269
  //#region src/realtime-client/realtime-client-stores/client-main-store.ts
272
- const myIdState__INTERNAL = AtomIO$1.atom({
270
+ const myIdState__INTERNAL = AtomIO.atom({
273
271
  key: `mySocketId__INTERNAL`,
274
272
  default: void 0
275
273
  });
276
- const myIdState = AtomIO$1.selector({
274
+ const myIdState = AtomIO.selector({
277
275
  key: `mySocketId`,
278
276
  get: ({ get }) => get(myIdState__INTERNAL)
279
277
  });
280
- const myUsernameState = AtomIO$1.atom({
278
+ const myUsernameState = AtomIO.atom({
281
279
  key: `myName`,
282
280
  default: null,
283
281
  effects: typeof window === `undefined` ? [] : [persistSync(window.localStorage, JSON, `myUsername`)]
@@ -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>","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,12 +1,5 @@
1
1
  import { Func, Transceiver } from "atom.io/internal";
2
2
  import { Canonical, Json } from "atom.io/json";
3
- import * as AtomIO$7 from "atom.io";
4
- import * as AtomIO$6 from "atom.io";
5
- import * as AtomIO$5 from "atom.io";
6
- import * as AtomIO$4 from "atom.io";
7
- import * as AtomIO$3 from "atom.io";
8
- import * as AtomIO$2 from "atom.io";
9
- import * as AtomIO$1 from "atom.io";
10
3
  import * as AtomIO from "atom.io";
11
4
  import * as React from "react";
12
5
  import { ContinuityToken } from "atom.io/realtime";
@@ -14,7 +7,6 @@ import { Socket } from "socket.io-client";
14
7
 
15
8
  //#region src/realtime-react/on-mount.d.ts
16
9
  declare function onMount(effect: () => (() => void) | undefined | void): void;
17
-
18
10
  //#endregion
19
11
  //#region src/realtime-react/realtime-context.d.ts
20
12
  type RealtimeReactStore = {
@@ -26,43 +18,33 @@ declare const RealtimeProvider: React.FC<{
26
18
  children: React.ReactNode;
27
19
  socket: Socket | null;
28
20
  }>;
29
-
30
21
  //#endregion
31
22
  //#region src/realtime-react/use-pull-atom.d.ts
32
- declare function usePullAtom<J extends Json.Serializable>(token: AtomIO$7.RegularAtomToken<J>): J;
33
-
23
+ declare function usePullAtom<J extends Json.Serializable>(token: AtomIO.RegularAtomToken<J>): J;
34
24
  //#endregion
35
25
  //#region src/realtime-react/use-pull-atom-family-member.d.ts
36
- declare function usePullAtomFamilyMember<J extends Json.Serializable, K extends Canonical, Key extends K>(family: AtomIO$6.RegularAtomFamilyToken<J, K>, subKey: Key): J;
37
-
26
+ declare function usePullAtomFamilyMember<J extends Json.Serializable, K extends Canonical, Key extends K>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: Key): J;
38
27
  //#endregion
39
28
  //#region src/realtime-react/use-pull-mutable-atom.d.ts
40
- declare function usePullMutable<T extends Transceiver<any>, J extends Json.Serializable>(token: AtomIO$5.MutableAtomToken<T, J>): T;
41
-
29
+ declare function usePullMutable<T extends Transceiver<any>, J extends Json.Serializable>(token: AtomIO.MutableAtomToken<T, J>): T;
42
30
  //#endregion
43
31
  //#region src/realtime-react/use-pull-mutable-family-member.d.ts
44
- declare function usePullMutableAtomFamilyMember<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical, Key extends K>(familyToken: AtomIO$4.MutableAtomFamilyToken<T, J, K>, key: Key): T;
45
-
32
+ declare function usePullMutableAtomFamilyMember<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical, Key extends K>(familyToken: AtomIO.MutableAtomFamilyToken<T, J, K>, key: Key): T;
46
33
  //#endregion
47
34
  //#region src/realtime-react/use-pull-selector.d.ts
48
- declare function usePullSelector<J extends Json.Serializable>(token: AtomIO$3.SelectorToken<J>): J;
49
-
35
+ declare function usePullSelector<J extends Json.Serializable>(token: AtomIO.SelectorToken<J>): J;
50
36
  //#endregion
51
37
  //#region src/realtime-react/use-pull-selector-family-member.d.ts
52
- declare function usePullSelectorFamilyMember<T, K extends Canonical, Key extends K>(familyToken: AtomIO$2.SelectorFamilyToken<T, K>, key: Key): T;
53
-
38
+ declare function usePullSelectorFamilyMember<T, K extends Canonical, Key extends K>(familyToken: AtomIO.SelectorFamilyToken<T, K>, key: Key): T;
54
39
  //#endregion
55
40
  //#region src/realtime-react/use-push.d.ts
56
- declare function usePush<J extends Json.Serializable>(token: AtomIO$1.WritableToken<J>): <New extends J>(next: New | ((old: J) => New)) => void;
57
-
41
+ declare function usePush<J extends Json.Serializable>(token: AtomIO.WritableToken<J>): <New extends J>(next: New | ((old: J) => New)) => void;
58
42
  //#endregion
59
43
  //#region src/realtime-react/use-server-action.d.ts
60
44
  declare function useServerAction<F extends Func>(token: AtomIO.TransactionToken<F>): (...parameters: Parameters<F>) => ReturnType<F>;
61
-
62
45
  //#endregion
63
46
  //#region src/realtime-react/use-sync-continuity.d.ts
64
47
  declare function useSyncContinuity(token: ContinuityToken): void;
65
-
66
48
  //#endregion
67
49
  export { RealtimeContext, RealtimeProvider, RealtimeReactStore, onMount, usePullAtom, usePullAtomFamilyMember, usePullMutable, usePullMutableAtomFamilyMember, usePullSelector, usePullSelectorFamilyMember, usePush, useServerAction, useSyncContinuity };
68
50
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["effect: () => (() => void) | undefined | void","RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>","token: AtomIO.RegularAtomToken<J>","family: AtomIO.RegularAtomFamilyToken<J, K>","subKey: Key","token: AtomIO.MutableAtomToken<T, J>","familyToken: AtomIO.MutableAtomFamilyToken<T, J, K>","key: Key","token: AtomIO.SelectorToken<J>","familyToken: AtomIO.SelectorFamilyToken<T, K>","key: Key","token: AtomIO.WritableToken<J>","next: New | ((old: J) => New)","old: J","token: AtomIO.TransactionToken<F>","token: ContinuityToken"],"sources":["../../src/realtime-react/on-mount.ts","../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-server-action.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;;iBAEgB,OAAA;;;;KCGJ,kBAAA;UACH;YACE;;cAMEC,iBAAiB,KAAA,CAAM,QAAQ;cAM/BC,kBAAkB,KAAA,CAAM;YAC1B,KAAA,CAAM;UACR;;;;;iBCbO,sBAAsB,IAAA,CAAK,qBACnC,QAAA,CAAO,iBAAiB,KAC7B;;;;iBCDa,kCACL,IAAA,CAAK,wBACL,uBACE,WACH,QAAA,CAAO,uBAAuB,GAAG,YAAY,MAAM;;;;iBCJ7C,yBACL,4BACA,IAAA,CAAK,qBACP,QAAA,CAAO,iBAAiB,GAAG,KAAK;;;;iBCFzB,yCACL,4BACA,IAAA,CAAK,wBACL,uBACE,gBACE,QAAA,CAAO,uBAAuB,GAAG,GAAG,SAAS,MAAM;;;;iBCNlD,0BAA0B,IAAA,CAAK,qBACvC,QAAA,CAAO,cAAc,KAC1B;;;;iBCFa,yCAEL,uBACE,gBACE,QAAA,CAAO,oBAAoB,GAAG,SAAS,MAAM;;;;iBCL5C,kBAAkB,IAAA,CAAK,qBAC/B,QAAA,CAAO,cAAc,kBACb,SAAS,aAAa,MAAM;;;;iBCD5B,0BAA0B,aAClC,MAAA,CAAO,iBAAiB,qBACb,WAAW,OAAO,WAAW;;;;iBCJhC,iBAAA,QAAyB"}
1
+ {"version":3,"file":"index.d.ts","names":["effect: () => (() => void) | undefined | void","RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>","token: AtomIO.RegularAtomToken<J>","family: AtomIO.RegularAtomFamilyToken<J, K>","subKey: Key","token: AtomIO.MutableAtomToken<T, J>","familyToken: AtomIO.MutableAtomFamilyToken<T, J, K>","key: Key","token: AtomIO.SelectorToken<J>","familyToken: AtomIO.SelectorFamilyToken<T, K>","key: Key","token: AtomIO.WritableToken<J>","next: New | ((old: J) => New)","old: J","token: AtomIO.TransactionToken<F>","token: ContinuityToken"],"sources":["../../src/realtime-react/on-mount.ts","../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-server-action.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":[],"mappings":";;;;;;;;iBAEgB,OAAA;;;KCGJ,kBAAA;UACH;YACE;;cAMEC,iBAAiB,KAAA,CAAM,QAAQ;cAM/BC,kBAAkB,KAAA,CAAM;EDjBrC,QAAgB,ECkBL,KAAA,CAAM,SDlBD;UCmBP;;;;iBCbO,sBAAsB,IAAA,CAAK,qBACnC,MAAA,CAAO,iBAAiB,KAC7B;;;iBCDa,kCACL,IAAA,CAAK,wBACL,uBACE,WACH,MAAA,CAAO,uBAAuB,GAAG,YAAY,MAAM;;;iBCJ7C,yBACL,4BACA,IAAA,CAAK,qBACP,MAAA,CAAO,iBAAiB,GAAG,KAAK;;;iBCFzB,yCACL,4BACA,IAAA,CAAK,wBACL,uBACE,ELZb,CAAA,WAAgB,EKaD,MAAA,CAAO,sBLbN,CKa6B,CLb7B,EKagC,CLbhC,EKamC,CLbnC,CAAA,EAAA,GAAA,EKa4C,GLb5C,CAAA,EKakD,CLblD;;;iBMMA,0BAA0B,IAAA,CAAK,qBACvC,MAAA,CAAO,cAAc,KAC1B;;;iBCDa,yCAEL,uBACE,gBACE,MAAA,CAAO,oBAAoB,GAAG,SAAS,MAAM;;;iBCL5C,kBAAkB,IAAA,CAAK,qBAC/B,MAAA,CAAO,cAAc,kBACb,SAAS,aAAa,MAAM;;;iBCD5B,0BAA0B,aAClC,MAAA,CAAO,iBAAiB,qBACb,WAAW,OAAO,WAAW;;;iBCJhC,iBAAA,QAAyB"}
@@ -1,26 +1,7 @@
1
1
  import { actUponStore, arbitrary, findInStore } from "atom.io/internal";
2
- import * as React$11 from "react";
3
- import * as React$10 from "react";
4
- import * as React$9 from "react";
5
- import * as React$8 from "react";
6
- import * as React$7 from "react";
7
- import * as React$6 from "react";
8
- import * as React$5 from "react";
9
- import * as React$4 from "react";
10
- import * as React$3 from "react";
11
- import * as React$2 from "react";
12
- import * as React$1 from "react";
13
2
  import * as React from "react";
14
3
  import { jsx } from "react/jsx-runtime";
15
4
  import { StoreContext, useI, useO } from "atom.io/react";
16
- import * as RTC$8 from "atom.io/realtime-client";
17
- import * as RTC$7 from "atom.io/realtime-client";
18
- import * as RTC$6 from "atom.io/realtime-client";
19
- import * as RTC$5 from "atom.io/realtime-client";
20
- import * as RTC$4 from "atom.io/realtime-client";
21
- import * as RTC$3 from "atom.io/realtime-client";
22
- import * as RTC$2 from "atom.io/realtime-client";
23
- import * as RTC$1 from "atom.io/realtime-client";
24
5
  import * as RTC from "atom.io/realtime-client";
25
6
  import { syncContinuity } from "atom.io/realtime-client";
26
7
 
@@ -30,8 +11,8 @@ const IN_DEV = NODE_ENV === `development`;
30
11
  function noop() {}
31
12
  function useSingleEffect(effect, deps) {
32
13
  if (IN_DEV) {
33
- const cleanup = React$11.useRef(noop);
34
- React$11.useEffect(() => {
14
+ const cleanup = React.useRef(noop);
15
+ React.useEffect(() => {
35
16
  let dispose = cleanup.current;
36
17
  if (dispose === noop) {
37
18
  dispose = effect() ?? noop;
@@ -41,7 +22,7 @@ function useSingleEffect(effect, deps) {
41
22
  cleanup.current = noop;
42
23
  };
43
24
  }, deps);
44
- } else React$11.useEffect(effect, deps);
25
+ } else React.useEffect(effect, deps);
45
26
  }
46
27
 
47
28
  //#endregion
@@ -52,14 +33,14 @@ function onMount(effect) {
52
33
 
53
34
  //#endregion
54
35
  //#region src/realtime-react/realtime-context.tsx
55
- const RealtimeContext = React$10.createContext({
36
+ const RealtimeContext = React.createContext({
56
37
  socket: null,
57
38
  services: null
58
39
  });
59
40
  const RealtimeProvider = ({ children, socket }) => {
60
- const services = React$10.useRef(new Map()).current;
61
- const setMyId = useI(RTC$8.myIdState__INTERNAL);
62
- React$10.useEffect(() => {
41
+ const services = React.useRef(/* @__PURE__ */ new Map()).current;
42
+ const setMyId = useI(RTC.myIdState__INTERNAL);
43
+ React.useEffect(() => {
63
44
  setMyId(socket?.id);
64
45
  socket?.on(`connect`, () => {
65
46
  setMyId(socket.id);
@@ -80,7 +61,7 @@ const RealtimeProvider = ({ children, socket }) => {
80
61
  //#endregion
81
62
  //#region src/realtime-react/use-realtime-service.ts
82
63
  function useRealtimeService(key, create) {
83
- const { socket, services } = React$9.useContext(RealtimeContext);
64
+ const { socket, services } = React.useContext(RealtimeContext);
84
65
  onMount(() => {
85
66
  let service = services?.get(key);
86
67
  if (service) service[0]++;
@@ -104,66 +85,66 @@ function useRealtimeService(key, create) {
104
85
  //#endregion
105
86
  //#region src/realtime-react/use-pull-atom.ts
106
87
  function usePullAtom(token) {
107
- const store = React$8.useContext(StoreContext);
108
- useRealtimeService(`pull:${token.key}`, (socket) => RTC$7.pullAtom(store, socket, token));
88
+ const store = React.useContext(StoreContext);
89
+ useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullAtom(store, socket, token));
109
90
  return useO(token);
110
91
  }
111
92
 
112
93
  //#endregion
113
94
  //#region src/realtime-react/use-pull-atom-family-member.ts
114
95
  function usePullAtomFamilyMember(family, subKey) {
115
- const store = React$7.useContext(StoreContext);
96
+ const store = React.useContext(StoreContext);
116
97
  const token = findInStore(store, family, subKey);
117
- useRealtimeService(`pull:${token.key}`, (socket) => RTC$6.pullAtomFamilyMember(store, socket, token));
98
+ useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullAtomFamilyMember(store, socket, token));
118
99
  return useO(token);
119
100
  }
120
101
 
121
102
  //#endregion
122
103
  //#region src/realtime-react/use-pull-mutable-atom.ts
123
104
  function usePullMutable(token) {
124
- const store = React$6.useContext(StoreContext);
125
- useRealtimeService(`pull:${token.key}`, (socket) => RTC$5.pullMutableAtom(store, socket, token));
105
+ const store = React.useContext(StoreContext);
106
+ useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullMutableAtom(store, socket, token));
126
107
  return useO(token);
127
108
  }
128
109
 
129
110
  //#endregion
130
111
  //#region src/realtime-react/use-pull-mutable-family-member.ts
131
112
  function usePullMutableAtomFamilyMember(familyToken, key) {
132
- const store = React$5.useContext(StoreContext);
113
+ const store = React.useContext(StoreContext);
133
114
  const token = findInStore(store, familyToken, key);
134
- useRealtimeService(`pull:${token.key}`, (socket) => RTC$4.pullMutableAtomFamilyMember(store, socket, token));
115
+ useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullMutableAtomFamilyMember(store, socket, token));
135
116
  return useO(token);
136
117
  }
137
118
 
138
119
  //#endregion
139
120
  //#region src/realtime-react/use-pull-selector.ts
140
121
  function usePullSelector(token) {
141
- const store = React$4.useContext(StoreContext);
142
- useRealtimeService(`pull:${token.key}`, (socket) => RTC$3.pullSelector(store, socket, token));
122
+ const store = React.useContext(StoreContext);
123
+ useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullSelector(store, socket, token));
143
124
  return useO(token);
144
125
  }
145
126
 
146
127
  //#endregion
147
128
  //#region src/realtime-react/use-pull-selector-family-member.ts
148
129
  function usePullSelectorFamilyMember(familyToken, key) {
149
- const store = React$3.useContext(StoreContext);
130
+ const store = React.useContext(StoreContext);
150
131
  const token = findInStore(store, familyToken, key);
151
- useRealtimeService(`pull:${token.key}`, (socket) => RTC$2.pullSelectorFamilyMember(store, socket, token));
132
+ useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullSelectorFamilyMember(store, socket, token));
152
133
  return useO(token);
153
134
  }
154
135
 
155
136
  //#endregion
156
137
  //#region src/realtime-react/use-push.ts
157
138
  function usePush(token) {
158
- const store = React$2.useContext(StoreContext);
159
- useRealtimeService(`push:${token.key}`, (socket) => RTC$1.pushState(store, socket, token));
139
+ const store = React.useContext(StoreContext);
140
+ useRealtimeService(`push:${token.key}`, (socket) => RTC.pushState(store, socket, token));
160
141
  return useI(token);
161
142
  }
162
143
 
163
144
  //#endregion
164
145
  //#region src/realtime-react/use-server-action.ts
165
146
  function useServerAction(token) {
166
- const store = React$1.useContext(StoreContext);
147
+ const store = React.useContext(StoreContext);
167
148
  useRealtimeService(`tx:${token.key}`, (socket) => RTC.serverAction(store, socket, token));
168
149
  return actUponStore(store, token, arbitrary());
169
150
  }