atom.io 0.40.6 → 0.40.8

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 (186) hide show
  1. package/README.md +1 -1
  2. package/dist/data/index.d.ts +1 -1
  3. package/dist/data/index.js +1 -2
  4. package/dist/data/index.js.map +1 -1
  5. package/dist/employ-socket-D6wgByWh.js +12 -0
  6. package/dist/employ-socket-D6wgByWh.js.map +1 -0
  7. package/dist/eslint-plugin/index.js.map +1 -1
  8. package/dist/has-role-CMlaUlaf.js +1133 -0
  9. package/dist/has-role-CMlaUlaf.js.map +1 -0
  10. package/dist/internal/index.d.ts +248 -248
  11. package/dist/internal/index.d.ts.map +1 -1
  12. package/dist/internal/index.js +590 -1803
  13. package/dist/internal/index.js.map +1 -1
  14. package/dist/introspection/index.d.ts +1 -1
  15. package/dist/introspection/index.d.ts.map +1 -1
  16. package/dist/introspection/index.js +13 -32
  17. package/dist/introspection/index.js.map +1 -1
  18. package/dist/is-fn-DY1wZ-md.js +10 -0
  19. package/dist/is-fn-DY1wZ-md.js.map +1 -0
  20. package/dist/json/index.d.ts.map +1 -1
  21. package/dist/json/index.js.map +1 -1
  22. package/dist/main/index.d.ts +33 -33
  23. package/dist/main/index.d.ts.map +1 -1
  24. package/dist/main/index.js +3 -4
  25. package/dist/main/index.js.map +1 -1
  26. package/dist/mutex-store-CSvxY9i3.js +11 -0
  27. package/dist/mutex-store-CSvxY9i3.js.map +1 -0
  28. package/dist/react/index.d.ts +5 -5
  29. package/dist/react/index.d.ts.map +1 -1
  30. package/dist/react/index.js.map +1 -1
  31. package/dist/react-devtools/index.d.ts.map +1 -1
  32. package/dist/react-devtools/index.js +9 -11
  33. package/dist/react-devtools/index.js.map +1 -1
  34. package/dist/realtime/index.d.ts +7 -15
  35. package/dist/realtime/index.d.ts.map +1 -1
  36. package/dist/realtime/index.js +4 -35
  37. package/dist/realtime/index.js.map +1 -1
  38. package/dist/realtime-client/index.d.ts +6 -9
  39. package/dist/realtime-client/index.d.ts.map +1 -1
  40. package/dist/realtime-client/index.js +96 -88
  41. package/dist/realtime-client/index.js.map +1 -1
  42. package/dist/realtime-react/index.d.ts +17 -13
  43. package/dist/realtime-react/index.d.ts.map +1 -1
  44. package/dist/realtime-react/index.js +39 -50
  45. package/dist/realtime-react/index.js.map +1 -1
  46. package/dist/realtime-server/index.d.ts +83 -84
  47. package/dist/realtime-server/index.d.ts.map +1 -1
  48. package/dist/realtime-server/index.js +604 -543
  49. package/dist/realtime-server/index.js.map +1 -1
  50. package/dist/realtime-testing/index.d.ts +5 -4
  51. package/dist/realtime-testing/index.d.ts.map +1 -1
  52. package/dist/realtime-testing/index.js +35 -22
  53. package/dist/realtime-testing/index.js.map +1 -1
  54. package/dist/shared-room-store-BfW3nWif.js +31 -0
  55. package/dist/shared-room-store-BfW3nWif.js.map +1 -0
  56. package/dist/shared-room-store-D2o4ZLjC.d.ts +15 -0
  57. package/dist/shared-room-store-D2o4ZLjC.d.ts.map +1 -0
  58. package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
  59. package/dist/transceivers/set-rtx/index.js +4 -8
  60. package/dist/transceivers/set-rtx/index.js.map +1 -1
  61. package/dist/web/index.d.ts +3 -3
  62. package/dist/web/index.d.ts.map +1 -1
  63. package/dist/web/index.js +4 -3
  64. package/dist/web/index.js.map +1 -1
  65. package/package.json +13 -13
  66. package/src/internal/atom/create-regular-atom.ts +5 -4
  67. package/src/internal/atom/dispose-atom.ts +7 -2
  68. package/src/internal/atom/has-role.ts +3 -3
  69. package/src/internal/caching.ts +4 -2
  70. package/src/internal/families/create-readonly-held-selector-family.ts +2 -1
  71. package/src/internal/families/create-readonly-pure-selector-family.ts +5 -2
  72. package/src/internal/families/create-regular-atom-family.ts +2 -1
  73. package/src/internal/families/create-writable-held-selector-family.ts +2 -1
  74. package/src/internal/families/create-writable-pure-selector-family.ts +5 -2
  75. package/src/internal/families/dispose-from-store.ts +4 -4
  76. package/src/internal/families/find-in-store.ts +10 -10
  77. package/src/internal/families/get-family-of-token.ts +2 -2
  78. package/src/internal/families/index.ts +1 -0
  79. package/src/internal/families/mint-in-store.ts +54 -19
  80. package/src/internal/families/seek-in-store.ts +1 -1
  81. package/src/internal/get-state/get-fallback.ts +2 -2
  82. package/src/internal/get-state/get-from-store.ts +5 -5
  83. package/src/internal/get-state/read-or-compute-value.ts +1 -1
  84. package/src/internal/get-state/reduce-reference.ts +8 -6
  85. package/src/internal/index.ts +2 -220
  86. package/src/internal/molecule.ts +1 -2
  87. package/src/internal/mutable/create-mutable-atom-family.ts +3 -2
  88. package/src/internal/mutable/create-mutable-atom.ts +4 -2
  89. package/src/internal/mutable/get-json-family.ts +1 -1
  90. package/src/internal/mutable/get-update-family.ts +1 -1
  91. package/src/internal/mutable/tracker-family.ts +2 -1
  92. package/src/internal/mutable/tracker.ts +71 -59
  93. package/src/internal/safe-compute.ts +1 -1
  94. package/src/internal/selector/create-readonly-held-selector.ts +2 -1
  95. package/src/internal/selector/create-readonly-pure-selector.ts +2 -1
  96. package/src/internal/selector/create-writable-held-selector.ts +2 -1
  97. package/src/internal/selector/create-writable-pure-selector.ts +2 -1
  98. package/src/internal/selector/dispose-selector.ts +3 -2
  99. package/src/internal/selector/register-selector.ts +8 -5
  100. package/src/internal/selector/trace-selector-atoms.ts +2 -1
  101. package/src/internal/set-state/dispatch-state-update.ts +3 -2
  102. package/src/internal/set-state/evict-downstream.ts +1 -1
  103. package/src/internal/set-state/operate-on-store.ts +16 -22
  104. package/src/internal/set-state/reset-atom-or-selector.ts +5 -3
  105. package/src/internal/set-state/reset-in-store.ts +5 -5
  106. package/src/internal/set-state/set-atom-or-selector.ts +2 -2
  107. package/src/internal/set-state/set-atom.ts +4 -2
  108. package/src/internal/set-state/set-into-store.ts +21 -39
  109. package/src/internal/set-state/set-selector.ts +3 -2
  110. package/src/internal/state-types.ts +228 -0
  111. package/src/internal/store/deposit.ts +4 -4
  112. package/src/internal/store/index.ts +0 -1
  113. package/src/internal/store/store.ts +9 -9
  114. package/src/internal/store/withdraw.ts +4 -4
  115. package/src/internal/subscribe/recall-state.ts +1 -1
  116. package/src/internal/subscribe/subscribe-to-root-atoms.ts +1 -12
  117. package/src/internal/subscribe/subscribe-to-state.ts +9 -0
  118. package/src/internal/subscribe/subscribe-to-transaction.ts +3 -2
  119. package/src/internal/transaction/build-transaction.ts +3 -2
  120. package/src/internal/transaction/index.ts +1 -23
  121. package/src/internal/transaction/is-root-store.ts +4 -1
  122. package/src/internal/transaction/transaction-meta-progress.ts +22 -0
  123. package/src/main/atom.ts +1 -2
  124. package/src/main/find-state.ts +5 -5
  125. package/src/main/get-state.ts +4 -4
  126. package/src/main/realm.ts +2 -2
  127. package/src/main/set-state.ts +10 -10
  128. package/src/react/parse-state-overloads.ts +3 -3
  129. package/src/react/use-i.ts +6 -4
  130. package/src/react/use-loadable.ts +4 -10
  131. package/src/react/use-o.ts +6 -4
  132. package/src/react-devtools/store.ts +6 -6
  133. package/src/realtime/index.ts +1 -0
  134. package/src/realtime/mutex-store.ts +11 -0
  135. package/src/realtime/realtime-continuity.ts +1 -5
  136. package/src/realtime-client/index.ts +0 -1
  137. package/src/realtime-client/pull-atom-family-member.ts +14 -17
  138. package/src/realtime-client/pull-atom.ts +1 -1
  139. package/src/realtime-client/pull-mutable-atom-family-member.ts +16 -12
  140. package/src/realtime-client/pull-selector-family-member.ts +8 -35
  141. package/src/realtime-client/pull-selector-roots.ts +90 -0
  142. package/src/realtime-client/pull-selector.ts +2 -27
  143. package/src/realtime-client/push-state.ts +33 -5
  144. package/src/realtime-client/realtime-client-stores/client-main-store.ts +2 -5
  145. package/src/realtime-react/index.ts +2 -2
  146. package/src/realtime-react/realtime-context.tsx +9 -5
  147. package/src/realtime-react/use-pull-atom-family-member.ts +2 -3
  148. package/src/realtime-react/use-pull-mutable-family-member.ts +2 -3
  149. package/src/realtime-react/use-pull-selector-family-member.ts +5 -6
  150. package/src/realtime-react/use-push.ts +7 -3
  151. package/src/realtime-react/use-realtime-service.ts +11 -11
  152. package/src/realtime-react/use-single-effect.ts +11 -14
  153. package/src/realtime-server/{realtime-server-stores/server-sync-store.ts → continuity/continuity-store.ts} +2 -27
  154. package/src/realtime-server/continuity/provide-continuity.ts +50 -0
  155. package/src/realtime-server/continuity/{subscribe-to-continuity-actions.ts → provide-outcomes.ts} +15 -13
  156. package/src/realtime-server/continuity/{subscribe-to-continuity-perpectives.ts → provide-perspectives.ts} +10 -8
  157. package/src/realtime-server/continuity/{prepare-to-send-initial-payload.ts → provide-startup-payloads.ts} +6 -4
  158. package/src/realtime-server/continuity/receive-action-requests.ts +68 -0
  159. package/src/realtime-server/continuity/track-acknowledgements.ts +46 -0
  160. package/src/realtime-server/employ-socket.ts +14 -0
  161. package/src/realtime-server/index.ts +3 -22
  162. package/src/realtime-server/ipc-sockets/child-socket.ts +125 -66
  163. package/src/realtime-server/ipc-sockets/custom-socket.ts +16 -14
  164. package/src/realtime-server/ipc-sockets/parent-socket.ts +98 -69
  165. package/src/realtime-server/realtime-family-provider.ts +78 -29
  166. package/src/realtime-server/realtime-mutable-family-provider.ts +80 -31
  167. package/src/realtime-server/realtime-mutable-provider.ts +30 -22
  168. package/src/realtime-server/realtime-server-stores/index.ts +0 -2
  169. package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +77 -36
  170. package/src/realtime-server/realtime-server-stores/server-user-store.ts +12 -1
  171. package/src/realtime-server/realtime-state-provider.ts +30 -29
  172. package/src/realtime-server/realtime-state-receiver.ts +62 -16
  173. package/src/realtime-server/server-config.ts +8 -0
  174. package/src/realtime-server/socket-interface.ts +14 -0
  175. package/src/realtime-testing/setup-realtime-test.tsx +70 -31
  176. package/src/web/index.ts +1 -1
  177. package/src/web/{persist-sync.ts → storage-sync.ts} +5 -2
  178. package/src/internal/store/mint-or-counterfeit.ts +0 -108
  179. package/src/realtime-client/server-action.ts +0 -23
  180. package/src/realtime-react/on-mount.ts +0 -5
  181. package/src/realtime-react/use-server-action.ts +0 -19
  182. package/src/realtime-server/continuity/prepare-to-serve-transaction-request.ts +0 -59
  183. package/src/realtime-server/continuity/prepare-to-sync-realtime-continuity.ts +0 -145
  184. package/src/realtime-server/continuity/prepare-to-track-client-acknowledgement.ts +0 -41
  185. package/src/realtime-server/realtime-action-receiver.ts +0 -40
  186. package/src/realtime-server/realtime-server-stores/server-room-external-actions.ts +0 -79
@@ -1,17 +1,18 @@
1
- import { Fn, Transceiver } from "atom.io/internal";
2
- import { Canonical, Json } from "atom.io/json";
1
+ import { Transceiver } from "atom.io/internal";
3
2
  import * as AtomIO from "atom.io";
3
+ import { Canonical, Json } from "atom.io/json";
4
4
  import * as React$1 from "react";
5
5
  import { ContinuityToken } from "atom.io/realtime";
6
6
  import { Socket } from "socket.io-client";
7
7
 
8
- //#region src/realtime-react/on-mount.d.ts
9
- declare function onMount(effect: () => (() => void) | undefined | void): void;
10
- //#endregion
11
8
  //#region src/realtime-react/realtime-context.d.ts
9
+ type RealtimeServiceCounter = {
10
+ consumerCount: number;
11
+ dispose: () => void;
12
+ };
12
13
  type RealtimeReactStore = {
13
14
  socket: Socket | null;
14
- services: Map<string, [consumerCount: number, dispose: (() => void) | undefined]> | null;
15
+ services: Map<string, RealtimeServiceCounter> | null;
15
16
  };
16
17
  declare const RealtimeContext: React$1.Context<RealtimeReactStore>;
17
18
  declare const RealtimeProvider: React$1.FC<{
@@ -23,28 +24,31 @@ declare const RealtimeProvider: React$1.FC<{
23
24
  declare function usePullAtom<J extends Json.Serializable>(token: AtomIO.RegularAtomToken<J>): J;
24
25
  //#endregion
25
26
  //#region src/realtime-react/use-pull-atom-family-member.d.ts
26
- declare function usePullAtomFamilyMember<J extends Json.Serializable, K extends Canonical, Key extends K>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: Key): J;
27
+ declare function usePullAtomFamilyMember<J extends Json.Serializable, K extends Canonical>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: NoInfer<K>): J;
27
28
  //#endregion
28
29
  //#region src/realtime-react/use-pull-mutable-atom.d.ts
29
30
  declare function usePullMutable<T extends Transceiver<any, any, any>>(token: AtomIO.MutableAtomToken<T>): T;
30
31
  //#endregion
31
32
  //#region src/realtime-react/use-pull-mutable-family-member.d.ts
32
- declare function usePullMutableAtomFamilyMember<T extends Transceiver<any, any, any>, K extends Canonical, Key extends K>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: Key): T;
33
+ declare function usePullMutableAtomFamilyMember<T extends Transceiver<any, any, any>, K extends Canonical>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: NoInfer<K>): T;
33
34
  //#endregion
34
35
  //#region src/realtime-react/use-pull-selector.d.ts
35
36
  declare function usePullSelector<J extends Json.Serializable>(token: AtomIO.SelectorToken<J>): J;
36
37
  //#endregion
37
38
  //#region src/realtime-react/use-pull-selector-family-member.d.ts
38
- declare function usePullSelectorFamilyMember<T, K extends Canonical, Key extends K>(familyToken: AtomIO.SelectorFamilyToken<T, K>, key: Key): T;
39
+ declare function usePullSelectorFamilyMember<T, K extends Canonical>(familyToken: AtomIO.SelectorFamilyToken<T, K>, key: NoInfer<K>): T;
39
40
  //#endregion
40
41
  //#region src/realtime-react/use-push.d.ts
41
- declare function usePush<J extends Json.Serializable>(token: AtomIO.WritableToken<J>): <New extends J>(next: New | ((old: J) => New)) => void;
42
+ declare function usePush<J extends Json.Serializable>(token: AtomIO.WritableToken<J>): (<New extends J>(next: New | ((old: J) => New)) => void) | null;
43
+ //#endregion
44
+ //#region src/realtime-react/use-realtime-service.d.ts
45
+ declare function useRealtimeService(key: string, create: (socket: Socket) => () => void): void;
42
46
  //#endregion
43
- //#region src/realtime-react/use-server-action.d.ts
44
- declare function useServerAction<F extends Fn>(token: AtomIO.TransactionToken<F>): (...parameters: Parameters<F>) => ReturnType<F>;
47
+ //#region src/realtime-react/use-single-effect.d.ts
48
+ declare function useSingleEffect(effect: () => (() => void) | undefined | void, deps: unknown[]): void;
45
49
  //#endregion
46
50
  //#region src/realtime-react/use-sync-continuity.d.ts
47
51
  declare function useSyncContinuity(token: ContinuityToken): void;
48
52
  //#endregion
49
- export { RealtimeContext, RealtimeProvider, RealtimeReactStore, onMount, usePullAtom, usePullAtomFamilyMember, usePullMutable, usePullMutableAtomFamilyMember, usePullSelector, usePullSelectorFamilyMember, usePush, useServerAction, useSyncContinuity };
53
+ export { RealtimeContext, RealtimeProvider, RealtimeReactStore, RealtimeServiceCounter, usePullAtom, usePullAtomFamilyMember, usePullMutable, usePullMutableAtomFamilyMember, usePullSelector, usePullSelectorFamilyMember, usePush, useRealtimeService, useSingleEffect, useSyncContinuity };
50
54
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>"],"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;;cAMEA,iBAAiB,OAAA,CAAM,QAAQ;cAM/BC,kBAAkB,OAAA,CAAM;EDjBrC,QAAgB,ECkBL,OAAA,CAAM,SDlBD;UCmBP;;;;iBCbO,sBAAsB,IAAA,CAAK,qBACnC,MAAA,CAAO,iBAAiB,KAC7B;;;iBCDa,kCACL,IAAA,CAAK,wBACL,uBACE,WACH,MAAA,CAAO,uBAAuB,GAAG,YAAY,MAAM;;;iBCL7C,yBAAyB,mCACjC,MAAA,CAAO,iBAAiB,KAC7B;;;iBCAa,yCACL,sCACA,uBACE,gBACE,MAAA,CAAO,uBAAuB,GAAG,SAAS,MAAM;;;iBCN/C,0BAA0B,IAAA,CAAK,qBACvC,MAAA,CAAO,cAAc,KAC1B;;;iBCDa,yCAEL,uBACE,gBACE,MAAA,CAAO,oBAAoB,GAAG,SAAS,MAAM;;;iBCL5C,kBAAkB,IAAA,CAAK,qBAC/B,MAAA,CAAO,cAAc,kBACb,SAAS,aAAa,MAAM;;;iBCD5B,0BAA0B,WAClC,MAAA,CAAO,iBAAiB,qBACb,WAAW,OAAO,WAAW;;;iBCJhC,iBAAA,QAAyB"}
1
+ {"version":3,"file":"index.d.ts","names":["RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>"],"sources":["../../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-realtime-service.ts","../../src/realtime-react/use-single-effect.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":[],"mappings":";;;;;;;;KAKY,sBAAA;;;;KAKA,kBAAA;UACH;EANT,QAAY,EAOD,GAPC,CAAA,MAAA,EAOW,sBAPX,CAAA,GAAA,IAAA;AAKZ,CAAA;AAAY,cAKCA,eALD,EAKkB,OAAA,CAAM,OALxB,CAKgC,kBALhC,CAAA;AACH,cAUIC,gBAVJ,EAUsB,OAAA,CAAM,EAV5B,CAAA;UACc,EAUZ,OAAA,CAAM,SAVM;QAAZ,EAWF,MAXE,GAAA,IAAA;CAAA,CAAA;;;iBCJK,sBAAsB,IAAA,CAAK,qBACnC,MAAA,CAAO,iBAAiB,KAC7B;;;iBCDa,kCACL,IAAA,CAAK,wBACL,mBACD,MAAA,CAAO,uBAAuB,GAAG,YAAY,QAAQ,KAAK;;;iBCJpD,yBAAyB,mCACjC,MAAA,CAAO,iBAAiB,KAC7B;;;iBCAa,yCACL,sCACA,wBACI,MAAA,CAAO,uBAAuB,GAAG,SAAS,QAAQ,KAAK;;;iBCLtD,0BAA0B,IAAA,CAAK,qBACvC,MAAA,CAAO,cAAc,KAC1B;;;iBCDa,yCAAyC,wBAC3C,MAAA,CAAO,oBAAoB,GAAG,SACtC,QAAQ,KACX;;;iBCHa,kBAAkB,IAAA,CAAK,qBAC/B,MAAA,CAAO,cAAc,mBACZ,SAAS,aAAa,MAAM;;;iBCL7B,kBAAA,+BAEE;;;iBCHF,eAAA;;;iBCEA,iBAAA,QAAyB"}
@@ -1,37 +1,12 @@
1
- import { actUponStore, arbitrary, findInStore } from "atom.io/internal";
1
+ import { isFn } from "../is-fn-DY1wZ-md.js";
2
+ import { findInStore } from "atom.io/internal";
2
3
  import * as React$1 from "react";
3
4
  import { jsx } from "react/jsx-runtime";
4
5
  import { StoreContext, useI, useO } from "atom.io/react";
5
6
  import * as RTC from "atom.io/realtime-client";
6
7
  import { syncContinuity } from "atom.io/realtime-client";
8
+ import * as RT from "atom.io/realtime";
7
9
 
8
- //#region src/realtime-react/use-single-effect.ts
9
- const { NODE_ENV } = globalThis[`env`] ?? {};
10
- const IN_DEV = NODE_ENV === `development`;
11
- function noop() {}
12
- function useSingleEffect(effect, deps) {
13
- if (IN_DEV) {
14
- const cleanup = React$1.useRef(noop);
15
- React$1.useEffect(() => {
16
- let dispose = cleanup.current;
17
- if (dispose === noop) {
18
- dispose = effect() ?? noop;
19
- cleanup.current = dispose;
20
- } else return () => {
21
- dispose();
22
- cleanup.current = noop;
23
- };
24
- }, deps);
25
- } else React$1.useEffect(effect, deps);
26
- }
27
-
28
- //#endregion
29
- //#region src/realtime-react/on-mount.ts
30
- function onMount(effect) {
31
- useSingleEffect(effect, []);
32
- }
33
-
34
- //#endregion
35
10
  //#region src/realtime-react/realtime-context.tsx
36
11
  const RealtimeContext = React$1.createContext({
37
12
  socket: null,
@@ -58,28 +33,48 @@ const RealtimeProvider = ({ children, socket }) => {
58
33
  });
59
34
  };
60
35
 
36
+ //#endregion
37
+ //#region src/realtime-react/use-single-effect.ts
38
+ function useSingleEffect(effect, deps) {
39
+ if (globalThis[`env`]?.NODE_ENV === `development`) {
40
+ const cleanupRef = React$1.useRef(false);
41
+ React$1.useEffect(() => {
42
+ let cleanupFn = cleanupRef.current;
43
+ if (cleanupFn === false) {
44
+ cleanupFn = effect() ?? true;
45
+ cleanupRef.current = cleanupFn;
46
+ } else return () => {
47
+ if (isFn(cleanupFn)) cleanupFn();
48
+ cleanupRef.current = false;
49
+ };
50
+ }, deps);
51
+ } else React$1.useEffect(effect, deps);
52
+ }
53
+
61
54
  //#endregion
62
55
  //#region src/realtime-react/use-realtime-service.ts
63
56
  function useRealtimeService(key, create) {
64
57
  const { socket, services } = React$1.useContext(RealtimeContext);
65
- onMount(() => {
58
+ useSingleEffect(() => {
66
59
  let service = services?.get(key);
67
- if (service) service[0]++;
68
- else {
69
- const dispose = socket ? create(socket) : void 0;
70
- service = [1, dispose];
60
+ if (service) ++service.consumerCount;
61
+ else if (socket) {
62
+ service = {
63
+ consumerCount: 1,
64
+ dispose: create(socket)
65
+ };
71
66
  services?.set(key, service);
72
67
  }
73
68
  return () => {
74
69
  if (service) {
75
- service[0]--;
76
- if (service[0] === 0) {
77
- service[1]?.();
70
+ --service.consumerCount;
71
+ if (service.consumerCount === 0) {
72
+ service.dispose?.();
78
73
  services?.delete(key);
79
74
  }
80
75
  }
81
76
  };
82
- });
77
+ }, [socket, key]);
83
78
  }
84
79
 
85
80
  //#endregion
@@ -95,7 +90,7 @@ function usePullAtom(token) {
95
90
  function usePullAtomFamilyMember(family, subKey) {
96
91
  const store = React$1.useContext(StoreContext);
97
92
  const token = findInStore(store, family, subKey);
98
- useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullAtomFamilyMember(store, socket, token));
93
+ useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullAtomFamilyMember(store, socket, family, subKey));
99
94
  return useO(token);
100
95
  }
101
96
 
@@ -112,7 +107,7 @@ function usePullMutable(token) {
112
107
  function usePullMutableAtomFamilyMember(familyToken, key) {
113
108
  const store = React$1.useContext(StoreContext);
114
109
  const token = findInStore(store, familyToken, key);
115
- useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullMutableAtomFamilyMember(store, socket, token));
110
+ useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullMutableAtomFamilyMember(store, socket, familyToken, key));
116
111
  return useO(token);
117
112
  }
118
113
 
@@ -129,7 +124,7 @@ function usePullSelector(token) {
129
124
  function usePullSelectorFamilyMember(familyToken, key) {
130
125
  const store = React$1.useContext(StoreContext);
131
126
  const token = findInStore(store, familyToken, key);
132
- useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullSelectorFamilyMember(store, socket, token));
127
+ useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullSelectorFamilyMember(store, socket, familyToken, key));
133
128
  return useO(token);
134
129
  }
135
130
 
@@ -138,15 +133,9 @@ function usePullSelectorFamilyMember(familyToken, key) {
138
133
  function usePush(token) {
139
134
  const store = React$1.useContext(StoreContext);
140
135
  useRealtimeService(`push:${token.key}`, (socket) => RTC.pushState(store, socket, token));
141
- return useI(token);
142
- }
143
-
144
- //#endregion
145
- //#region src/realtime-react/use-server-action.ts
146
- function useServerAction(token) {
147
- const store = React$1.useContext(StoreContext);
148
- useRealtimeService(`tx:${token.key}`, (socket) => RTC.serverAction(store, socket, token));
149
- return actUponStore(store, token, arbitrary());
136
+ const mutex = useO(RT.mutexAtoms, token.key);
137
+ const setter = useI(token);
138
+ return mutex ? setter : null;
150
139
  }
151
140
 
152
141
  //#endregion
@@ -159,5 +148,5 @@ function useSyncContinuity(token) {
159
148
  }
160
149
 
161
150
  //#endregion
162
- export { RealtimeContext, RealtimeProvider, onMount, usePullAtom, usePullAtomFamilyMember, usePullMutable, usePullMutableAtomFamilyMember, usePullSelector, usePullSelectorFamilyMember, usePush, useServerAction, useSyncContinuity };
151
+ export { RealtimeContext, RealtimeProvider, usePullAtom, usePullAtomFamilyMember, usePullMutable, usePullMutableAtomFamilyMember, usePullSelector, usePullSelectorFamilyMember, usePush, useRealtimeService, useSingleEffect, useSyncContinuity };
163
152
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","RealtimeContext: React.Context<RealtimeReactStore>","React","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>","React","React","React","React","React","React","React","React","React","React"],"sources":["../../src/realtime-react/use-single-effect.ts","../../src/realtime-react/on-mount.ts","../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-server-action.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/useHookAtTopLevel: intentional */\n\nimport * as React from \"react\"\n\n// @ts-expect-error this is a safe way to check a property on the global object\nconst { NODE_ENV } = globalThis[`env`] ?? {}\nconst IN_DEV = NODE_ENV === `development`\n\nfunction noop() {}\n\nexport function useSingleEffect(\n\teffect: () => (() => void) | undefined | void,\n\tdeps: unknown[],\n): void {\n\tif (IN_DEV) {\n\t\tconst cleanup = React.useRef<() => void>(noop)\n\t\tReact.useEffect(() => {\n\t\t\tlet dispose = cleanup.current\n\t\t\tif (dispose === noop) {\n\t\t\t\tdispose = effect() ?? noop\n\t\t\t\tcleanup.current = dispose\n\t\t\t} else {\n\t\t\t\treturn () => {\n\t\t\t\t\tdispose()\n\t\t\t\t\tcleanup.current = noop\n\t\t\t\t}\n\t\t\t}\n\t\t}, deps)\n\t} else {\n\t\tReact.useEffect(effect, deps)\n\t}\n}\n","import { useSingleEffect } from \"./use-single-effect\"\n\nexport function onMount(effect: () => (() => void) | undefined | void): void {\n\tuseSingleEffect(effect, [])\n}\n","import { useI } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nexport type RealtimeReactStore = {\n\tsocket: Socket | null\n\tservices: Map<\n\t\tstring,\n\t\t[consumerCount: number, dispose: (() => void) | undefined]\n\t> | null\n}\n\nexport const RealtimeContext: React.Context<RealtimeReactStore> =\n\tReact.createContext({\n\t\tsocket: null,\n\t\tservices: null,\n\t})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}> = ({ children, socket }) => {\n\tconst services = React.useRef(new Map<string, [number, () => void]>()).current\n\tconst setMyId = useI(RTC.myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsetMyId(socket?.id)\n\t\tsocket?.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket?.on(`disconnect`, () => {\n\t\t\tsetMyId(undefined)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket, services }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","import * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { onMount } from \"./on-mount\"\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function useRealtimeService(\n\tkey: string,\n\tcreate: (socket: Socket) => (() => void) | undefined,\n): void {\n\tconst { socket, services } = React.useContext(RealtimeContext)\n\tonMount(() => {\n\t\tlet service = services?.get(key)\n\t\tif (service) {\n\t\t\tservice[0]++\n\t\t} else {\n\t\t\tconst dispose = socket ? create(socket) : undefined\n\t\t\tservice = [1, dispose]\n\t\t\tservices?.set(key, service)\n\t\t}\n\t\treturn () => {\n\t\t\tif (service) {\n\t\t\t\tservice[0]--\n\t\t\t\tif (service[0] === 0) {\n\t\t\t\t\tservice[1]?.()\n\t\t\t\t\tservices?.delete(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtom<J extends Json.Serializable>(\n\ttoken: AtomIO.RegularAtomToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtomFamilyMember<\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n\tKey extends K,\n>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: Key): J {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, family, subKey)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtomFamilyMember(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutable<T extends Transceiver<any, any, any>>(\n\ttoken: AtomIO.MutableAtomToken<T>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutableAtomFamilyMember<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n\tKey extends K,\n>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: Key): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtomFamilyMember(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelector<J extends Json.Serializable>(\n\ttoken: AtomIO.SelectorToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelector(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelectorFamilyMember<\n\tT,\n\tK extends Canonical,\n\tKey extends K,\n>(familyToken: AtomIO.SelectorFamilyToken<T, K>, key: Key): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelectorFamilyMember(store, socket, token),\n\t)\n\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useI } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): <New extends J>(next: New | ((old: J) => New)) => void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`push:${token.key}`, (socket) =>\n\t\tRTC.pushState(store, socket, token),\n\t)\n\treturn useI(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Fn } from \"atom.io/internal\"\nimport { actUponStore, arbitrary } from \"atom.io/internal\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useServerAction<F extends Fn>(\n\ttoken: AtomIO.TransactionToken<F>,\n): (...parameters: Parameters<F>) => ReturnType<F> {\n\tconst store = React.useContext(StoreContext)\n\n\tuseRealtimeService(`tx:${token.key}`, (socket) =>\n\t\tRTC.serverAction(store, socket, token),\n\t)\n\treturn actUponStore(store, token, arbitrary())\n}\n","import { StoreContext } from \"atom.io/react\"\nimport type { ContinuityToken } from \"atom.io/realtime\"\nimport { syncContinuity } from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useSyncContinuity(token: ContinuityToken): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`tx-sync:${token.key}`, (socket) => {\n\t\treturn syncContinuity(store, socket, token)\n\t})\n}\n"],"mappings":";;;;;;;;AAKA,MAAM,EAAE,aAAa,WAAW,UAAU;AAC1C,MAAM,SAAS,aAAa;AAE5B,SAAS,OAAO;AAEhB,SAAgB,gBACf,QACA,MACO;AACP,KAAI,QAAQ;EACX,MAAM,UAAUA,QAAM,OAAmB;AACzC,UAAM,gBAAgB;GACrB,IAAI,UAAU,QAAQ;AACtB,OAAI,YAAY,MAAM;AACrB,cAAU,YAAY;AACtB,YAAQ,UAAU;SAElB,cAAa;AACZ;AACA,YAAQ,UAAU;;KAGlB;OAEH,SAAM,UAAU,QAAQ;;;;;AC3B1B,SAAgB,QAAQ,QAAqD;AAC5E,iBAAgB,QAAQ;;;;;ACUzB,MAAaC,kBACZC,QAAM,cAAc;CACnB,QAAQ;CACR,UAAU;;AAGZ,MAAaC,oBAGP,EAAE,UAAU,aAAa;CAC9B,MAAM,WAAWD,QAAM,uBAAO,IAAI,OAAqC;CACvE,MAAM,UAAU,KAAK,IAAI;AACzB,SAAM,gBAAgB;AACrB,UAAQ,QAAQ;AAChB,UAAQ,GAAG,iBAAiB;AAC3B,WAAQ,OAAO;;AAEhB,UAAQ,GAAG,oBAAoB;AAC9B,WAAQ;;IAEP,CAAC,QAAQ;AACZ,QACC,oBAAC,gBAAgB;EAAS,OAAO;GAAE;GAAQ;;EACzC;;;;;;AC9BJ,SAAgB,mBACf,KACA,QACO;CACP,MAAM,EAAE,QAAQ,aAAaE,QAAM,WAAW;AAC9C,eAAc;EACb,IAAI,UAAU,UAAU,IAAI;AAC5B,MAAI,QACH,SAAQ;OACF;GACN,MAAM,UAAU,SAAS,OAAO,UAAU;AAC1C,aAAU,CAAC,GAAG;AACd,aAAU,IAAI,KAAK;;AAEpB,eAAa;AACZ,OAAI,SAAS;AACZ,YAAQ;AACR,QAAI,QAAQ,OAAO,GAAG;AACrB,aAAQ;AACR,eAAU,OAAO;;;;;;;;;ACjBtB,SAAgB,YACf,OACI;CACJ,MAAM,QAAQC,QAAM,WAAW;AAC/B,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,SAAS,OAAO,QAAQ;AAE7B,QAAO,KAAK;;;;;ACNb,SAAgB,wBAId,QAA6C,QAAgB;CAC9D,MAAM,QAAQC,QAAM,WAAW;CAC/B,MAAM,QAAQ,YAAY,OAAO,QAAQ;AACzC,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,qBAAqB,OAAO,QAAQ;AAEzC,QAAO,KAAK;;;;;ACXb,SAAgB,eACf,OACI;CACJ,MAAM,QAAQC,QAAM,WAAW;AAC/B,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,gBAAgB,OAAO,QAAQ;AAEpC,QAAO,KAAK;;;;;ACLb,SAAgB,+BAId,aAAkD,KAAa;CAChE,MAAM,QAAQC,QAAM,WAAW;CAC/B,MAAM,QAAQ,YAAY,OAAO,aAAa;AAC9C,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,4BAA4B,OAAO,QAAQ;AAEhD,QAAO,KAAK;;;;;ACZb,SAAgB,gBACf,OACI;CACJ,MAAM,QAAQC,QAAM,WAAW;AAC/B,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,aAAa,OAAO,QAAQ;AAEjC,QAAO,KAAK;;;;;ACNb,SAAgB,4BAId,aAA+C,KAAa;CAC7D,MAAM,QAAQC,QAAM,WAAW;CAC/B,MAAM,QAAQ,YAAY,OAAO,aAAa;AAC9C,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,yBAAyB,OAAO,QAAQ;AAG7C,QAAO,KAAK;;;;;ACZb,SAAgB,QACf,OACyD;CACzD,MAAM,QAAQC,QAAM,WAAW;AAC/B,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,UAAU,OAAO,QAAQ;AAE9B,QAAO,KAAK;;;;;ACNb,SAAgB,gBACf,OACkD;CAClD,MAAM,QAAQC,QAAM,WAAW;AAE/B,oBAAmB,MAAM,MAAM,QAAQ,WACtC,IAAI,aAAa,OAAO,QAAQ;AAEjC,QAAO,aAAa,OAAO,OAAO;;;;;ACVnC,SAAgB,kBAAkB,OAA8B;CAC/D,MAAM,QAAQC,QAAM,WAAW;AAC/B,oBAAmB,WAAW,MAAM,QAAQ,WAAW;AACtD,SAAO,eAAe,OAAO,QAAQ"}
1
+ {"version":3,"file":"index.js","names":["RealtimeContext: React.Context<RealtimeReactStore>","React","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>","React","React","React","React","React","React","React","React","React","React"],"sources":["../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-single-effect.ts","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":["import { useI } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nexport type RealtimeServiceCounter = {\n\tconsumerCount: number\n\tdispose: () => void\n}\n\nexport type RealtimeReactStore = {\n\tsocket: Socket | null\n\tservices: Map<string, RealtimeServiceCounter> | null\n}\n\nexport const RealtimeContext: React.Context<RealtimeReactStore> =\n\tReact.createContext({\n\t\tsocket: null,\n\t\tservices: null,\n\t})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}> = ({ children, socket }) => {\n\tconst services = React.useRef(\n\t\tnew Map<string, RealtimeServiceCounter>(),\n\t).current\n\tconst setMyId = useI(RTC.myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsetMyId(socket?.id)\n\t\tsocket?.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket?.on(`disconnect`, () => {\n\t\t\tsetMyId(undefined)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket, services }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","/** biome-ignore-all lint/correctness/useHookAtTopLevel: intentional */\n\nimport { isFn } from \"atom.io/internal/is-fn\"\nimport * as React from \"react\"\n\nexport function useSingleEffect(\n\teffect: () => (() => void) | undefined | void,\n\tdeps: unknown[],\n): void {\n\tconst globalEnv = (globalThis as unknown as { env: any })[`env`]\n\tconst isInDev = globalEnv?.NODE_ENV === `development`\n\tif (isInDev) {\n\t\tconst cleanupRef = React.useRef<boolean | (() => void)>(false)\n\t\tReact.useEffect(() => {\n\t\t\tlet cleanupFn = cleanupRef.current\n\t\t\tif (cleanupFn === false) {\n\t\t\t\tcleanupFn = effect() ?? true\n\t\t\t\tcleanupRef.current = cleanupFn\n\t\t\t} else {\n\t\t\t\treturn () => {\n\t\t\t\t\tif (isFn(cleanupFn)) cleanupFn()\n\t\t\t\t\tcleanupRef.current = false\n\t\t\t\t}\n\t\t\t}\n\t\t}, deps)\n\t} else {\n\t\tReact.useEffect(effect, deps)\n\t}\n}\n","import * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { useSingleEffect } from \"./use-single-effect\"\n\nexport function useRealtimeService(\n\tkey: string,\n\tcreate: (socket: Socket) => () => void,\n): void {\n\tconst { socket, services } = React.useContext(RealtimeContext)\n\tuseSingleEffect(() => {\n\t\tlet service = services?.get(key)\n\t\tif (service) {\n\t\t\t++service.consumerCount\n\t\t} else if (socket) {\n\t\t\tconst dispose = create(socket)\n\t\t\tservice = { consumerCount: 1, dispose }\n\t\t\tservices?.set(key, service)\n\t\t}\n\t\treturn () => {\n\t\t\tif (service) {\n\t\t\t\t--service.consumerCount\n\t\t\t\tif (service.consumerCount === 0) {\n\t\t\t\t\tservice.dispose?.()\n\t\t\t\t\tservices?.delete(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [socket, key])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtom<J extends Json.Serializable>(\n\ttoken: AtomIO.RegularAtomToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtomFamilyMember<\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: NoInfer<K>): J {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, family, subKey)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtomFamilyMember(store, socket, family, subKey),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutable<T extends Transceiver<any, any, any>>(\n\ttoken: AtomIO.MutableAtomToken<T>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutableAtomFamilyMember<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: NoInfer<K>): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtomFamilyMember(store, socket, familyToken, key),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelector<J extends Json.Serializable>(\n\ttoken: AtomIO.SelectorToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelector(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelectorFamilyMember<T, K extends Canonical>(\n\tfamilyToken: AtomIO.SelectorFamilyToken<T, K>,\n\tkey: NoInfer<K>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelectorFamilyMember(store, socket, familyToken, key),\n\t)\n\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useI, useO } from \"atom.io/react\"\nimport * as RT from \"atom.io/realtime\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): (<New extends J>(next: New | ((old: J) => New)) => void) | null {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`push:${token.key}`, (socket) =>\n\t\tRTC.pushState(store, socket, token),\n\t)\n\tconst mutex = useO(RT.mutexAtoms, token.key)\n\tconst setter = useI(token)\n\n\treturn mutex ? setter : null\n}\n","import { StoreContext } from \"atom.io/react\"\nimport type { ContinuityToken } from \"atom.io/realtime\"\nimport { syncContinuity } from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useSyncContinuity(token: ContinuityToken): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`tx-sync:${token.key}`, (socket) => {\n\t\treturn syncContinuity(store, socket, token)\n\t})\n}\n"],"mappings":"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"}
@@ -1,28 +1,40 @@
1
+ import { UserInRoomMeta } from "../shared-room-store-D2o4ZLjC.js";
1
2
  import { RootStore, Subject, Transceiver } from "atom.io/internal";
2
- import { Canonical, Json, JsonIO, stringified } from "atom.io/json";
3
3
  import * as AtomIO from "atom.io";
4
- import { Hierarchy, JoinToken, Loadable, MutableAtomToken, ReadonlyPureSelectorFamilyToken, RegularAtomFamilyToken, TransactionOutcomeEvent, TransactionSubEvent, TransactionToken, WritableToken } from "atom.io";
4
+ import { Hierarchy, JoinToken, MutableAtomToken, PureSelectorFamilyToken, RegularAtomFamilyToken, TransactionIO, TransactionToken, WritableToken } from "atom.io";
5
+ import { Canonical, Json, stringified } from "atom.io/json";
5
6
  import { SetRTX } from "atom.io/transceivers/set-rtx";
6
- import { ContinuityToken, UserInRoomMeta } from "atom.io/realtime";
7
+ import { ContinuityToken } from "atom.io/realtime";
7
8
  import { ChildProcessWithoutNullStreams } from "node:child_process";
9
+ import { Readable, Writable } from "node:stream";
8
10
 
9
- //#region src/realtime-server/continuity/prepare-to-sync-realtime-continuity.d.ts
10
- type ExposeRealtimeContinuity = (continuity: ContinuityToken) => () => void;
11
- declare function prepareToExposeRealtimeContinuity({
12
- socket: initialSocket,
11
+ //#region src/realtime-server/continuity/provide-continuity.d.ts
12
+ type ProvideContinuity = (continuity: ContinuityToken, userKey: UserKey) => () => void;
13
+ declare function prepareToProvideContinuity({
14
+ socket,
13
15
  store
14
- }: ServerConfig): ExposeRealtimeContinuity;
16
+ }: ServerConfig): ProvideContinuity;
17
+ //#endregion
18
+ //#region src/realtime-server/socket-interface.d.ts
19
+ type Socket = {
20
+ id: string | undefined;
21
+ on: (event: string, listener: (...args: Json.Serializable[]) => void) => void;
22
+ onAny: (listener: (event: string, ...args: Json.Serializable[]) => void) => void;
23
+ off: (event: string, listener: (...args: Json.Serializable[]) => void) => void;
24
+ offAny: (listener: (event: string, ...args: Json.Serializable[]) => void) => void;
25
+ emit: (event: string, ...args: Json.Serializable[]) => void;
26
+ };
15
27
  //#endregion
16
28
  //#region src/realtime-server/ipc-sockets/custom-socket.d.ts
17
29
  type Events = Json.Object<string, Json.Serializable[]>;
18
- type StringifiedEvent<Key extends string, Params extends Json.Serializable[]> = stringified<[Key, ...Params]>;
19
- interface EventBuffer<Key extends string, Params extends Json.Serializable[]> extends Buffer {
20
- toString(): StringifiedEvent<Key, Params>;
30
+ type EventPayload<receiveRelay extends Events, K extends string & keyof receiveRelay = string & keyof receiveRelay> = [string, ...receiveRelay[K]];
31
+ interface EventBuffer<E extends Events, K extends string & keyof E = string & keyof E> extends Buffer {
32
+ toString(): stringified<EventPayload<E, K>>;
21
33
  }
22
- declare class CustomSocket<I extends Events, O extends Events> implements Socket {
34
+ declare abstract class CustomSocket<I extends Events, O extends Events> implements Socket {
23
35
  protected listeners: Map<keyof O, Set<(...args: Json.Array) => void>>;
24
36
  protected globalListeners: Set<(event: string, ...args: Json.Array) => void>;
25
- protected handleEvent<Event extends keyof I>(event: string, ...args: I[Event]): void;
37
+ protected handleEvent<K extends string & keyof I>(...args: EventPayload<I, K>): void;
26
38
  id: string;
27
39
  emit: <Event extends keyof I>(event: Event, ...args: I[Event]) => CustomSocket<I, O>;
28
40
  constructor(emit: <Event extends keyof I>(event: Event, ...args: I[Event]) => CustomSocket<I, O>);
@@ -33,55 +45,85 @@ declare class CustomSocket<I extends Events, O extends Events> implements Socket
33
45
  }
34
46
  //#endregion
35
47
  //#region src/realtime-server/ipc-sockets/child-socket.d.ts
36
- declare class ChildSocket<I extends Events, O extends Events> extends CustomSocket<I, O> {
48
+ type ChildProcess = {
49
+ pid?: number | undefined;
50
+ stdin: Writable;
51
+ stdout: Readable;
52
+ stderr: Readable;
53
+ };
54
+ type StderrLog = [`e` | `i` | `w`, ...Json.Array];
55
+ declare class ChildSocket<I extends Events, O extends Events, P extends ChildProcess = ChildProcess> extends CustomSocket<I, O> {
37
56
  protected incompleteData: string;
38
57
  protected unprocessedEvents: string[];
39
58
  protected incompleteLog: string;
40
59
  protected unprocessedLogs: string[];
41
60
  id: string;
42
- process: ChildProcessWithoutNullStreams;
61
+ proc: P;
43
62
  key: string;
44
63
  logger: Pick<Console, `error` | `info` | `warn`>;
45
- protected handleLog(arg: Json.Serializable): void;
46
- constructor(process: ChildProcessWithoutNullStreams, key: string, logger?: Pick<Console, `error` | `info` | `warn`>);
64
+ protected handleLog(log: StderrLog): void;
65
+ constructor(proc: P, key: string, logger?: Pick<Console, `error` | `info` | `warn`>);
47
66
  }
48
67
  //#endregion
68
+ //#region src/realtime-server/realtime-server-stores/server-user-store.d.ts
69
+ type SocketKey = `socket::${string}`;
70
+ type UserKey = `user::${string}`;
71
+ type RoomKey = `room::${string}`;
72
+ type SocketSystemHierarchy = Hierarchy<[{
73
+ above: `root`;
74
+ below: [UserKey, SocketKey, RoomKey];
75
+ }]>;
76
+ declare const socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>;
77
+ declare const socketIndex: MutableAtomToken<SetRTX<SocketKey>>;
78
+ declare const userIndex: MutableAtomToken<SetRTX<UserKey>>;
79
+ declare const usersOfSockets: JoinToken<`user`, UserKey, `socket`, SocketKey, `1:1`>;
80
+ declare const userMutualSituationalAwarenessIndexes: PureSelectorFamilyToken<UserKey[], UserKey>;
81
+ //#endregion
82
+ //#region src/realtime-server/realtime-server-stores/server-room-external-store.d.ts
83
+ declare const ROOMS: Map<string, ChildSocket<any, any, ChildProcessWithoutNullStreams>>;
84
+ declare function spawnRoom(roomId: string, script: string, options: string[]): Promise<ChildSocket<any, any>>;
85
+ declare const joinRoomTX: TransactionToken<(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta>;
86
+ type JoinRoomIO = TransactionIO<typeof joinRoomTX>;
87
+ declare const leaveRoomTX: TransactionToken<(roomId: string, userId: string) => void>;
88
+ type LeaveRoomIO = TransactionIO<typeof leaveRoomTX>;
89
+ declare const destroyRoomTX: TransactionToken<(roomKey: RoomKey) => void>;
90
+ //#endregion
49
91
  //#region src/realtime-server/ipc-sockets/parent-socket.d.ts
50
92
  declare class SubjectSocket<I extends Events, O extends Events> extends CustomSocket<I, O> {
51
- in: Subject<[string, ...Json.Serializable[]]>;
52
- out: Subject<[string, ...Json.Serializable[]]>;
93
+ in: Subject<EventPayload<I>>;
94
+ out: Subject<EventPayload<O>>;
53
95
  id: string;
54
96
  disposalFunctions: (() => void)[];
55
97
  constructor(id: string);
56
98
  dispose(): void;
57
99
  }
58
- declare class ParentSocket<I extends Events & { [id in string as `relay:${id}`]: [string, ...Json.Serializable[]] }, O extends Events & { [id in string as `user:${id}`]: [string, ...Json.Serializable[]] } & {
59
- "user-joins": [string];
60
- "user-leaves": [string];
61
- }> extends CustomSocket<I, O> {
100
+ type ParentProcess = {
101
+ pid?: number | undefined;
102
+ stdin: Readable;
103
+ stdout: Writable;
104
+ stderr: Writable;
105
+ exit: (code?: number) => void;
106
+ };
107
+ declare class ParentSocket<I extends Events & { [id in string as `relay::${id}`]: [string, ...Json.Array[]] }, O extends Events & { [id in string as `user::${id}`]: [string, ...Json.Array[]] } & {
108
+ "user-joins": [key: UserKey];
109
+ "user-leaves": [key: UserKey];
110
+ }, P extends ParentProcess = ParentProcess> extends CustomSocket<I, O> {
62
111
  protected incompleteData: string;
63
112
  protected unprocessedEvents: string[];
64
113
  protected relays: Map<string, SubjectSocket<any, any>>;
65
- protected relayServices: ((socket: SubjectSocket<any, any>) => (() => void) | void)[];
66
- protected process: NodeJS.Process;
114
+ protected relayServices: ((socket: SubjectSocket<any, any>, userKey: UserKey) => (() => void) | void)[];
115
+ proc: P;
67
116
  id: string;
68
- protected log(...args: any[]): void;
117
+ protected log(...args: StderrLog): void;
69
118
  logger: {
70
- info: (...args: any[]) => void;
71
- warn: (...args: any[]) => void;
72
- error: (...args: any[]) => void;
119
+ info: (...args: Json.Array) => void;
120
+ warn: (...args: Json.Array) => void;
121
+ error: (...args: Json.Array) => void;
73
122
  };
74
- constructor();
75
- relay(attachServices: (socket: SubjectSocket<any, any>) => (() => void) | void): void;
123
+ constructor(proc: P);
124
+ receiveRelay(attachServices: (socket: SubjectSocket<any, any>, userKey: UserKey) => (() => void) | void): void;
76
125
  }
77
126
  //#endregion
78
- //#region src/realtime-server/realtime-action-receiver.d.ts
79
- type ActionReceiver = ReturnType<typeof realtimeActionReceiver>;
80
- declare function realtimeActionReceiver({
81
- socket,
82
- store
83
- }: ServerConfig): <F extends JsonIO>(tx: TransactionToken<F>) => () => void;
84
- //#endregion
85
127
  //#region src/realtime-server/realtime-family-provider.d.ts
86
128
  type FamilyProvider = ReturnType<typeof realtimeAtomFamilyProvider>;
87
129
  declare function realtimeAtomFamilyProvider({
@@ -103,41 +145,6 @@ declare function realtimeMutableProvider({
103
145
  store
104
146
  }: ServerConfig): <Core extends Transceiver<any, Json.Serializable, Json.Serializable>>(token: AtomIO.MutableAtomToken<Core>) => () => void;
105
147
  //#endregion
106
- //#region src/realtime-server/realtime-server-stores/server-user-store.d.ts
107
- type SocketKey = `socket::${string}`;
108
- type UserKey = `user::${string}`;
109
- type RoomKey = `room::${string}`;
110
- type SocketSystemHierarchy = Hierarchy<[{
111
- above: `root`;
112
- below: [UserKey, SocketKey, RoomKey];
113
- }]>;
114
- declare const socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>;
115
- declare const socketIndex: MutableAtomToken<SetRTX<SocketKey>>;
116
- declare const userIndex: MutableAtomToken<SetRTX<UserKey>>;
117
- declare const usersOfSockets: JoinToken<`user`, UserKey, `socket`, SocketKey, `1:1`>;
118
- //#endregion
119
- //#region src/realtime-server/realtime-server-stores/server-room-external-actions.d.ts
120
- declare const createRoomTX: AtomIO.TransactionToken<(roomKey: RoomKey, script: string, options?: string[]) => Loadable<ChildSocket<any, any>>>;
121
- type CreateRoomIO = AtomIO.TransactionIO<typeof createRoomTX>;
122
- declare const joinRoomTX: AtomIO.TransactionToken<(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta>;
123
- type JoinRoomIO = AtomIO.TransactionIO<typeof joinRoomTX>;
124
- declare const leaveRoomTX: AtomIO.TransactionToken<(roomId: string, userId: string) => void>;
125
- type LeaveRoomIO = AtomIO.TransactionIO<typeof leaveRoomTX>;
126
- declare const destroyRoomTX: AtomIO.TransactionToken<(roomKey: RoomKey) => void>;
127
- //#endregion
128
- //#region src/realtime-server/realtime-server-stores/server-room-external-store.d.ts
129
- type RoomArguments = [script: string, options: string[]] | [script: string];
130
- declare const roomArgumentsAtoms: RegularAtomFamilyToken<RoomArguments, string>;
131
- declare const roomSelectors: ReadonlyPureSelectorFamilyToken<Loadable<ChildSocket<any, any>>, string>;
132
- //#endregion
133
- //#region src/realtime-server/realtime-server-stores/server-sync-store.d.ts
134
- declare function redactTransactionUpdateContent(visibleStateKeys: string[], updates: TransactionSubEvent[]): TransactionSubEvent[];
135
- declare const redactorAtoms: RegularAtomFamilyToken<{
136
- occlude: (updates: TransactionSubEvent[]) => TransactionSubEvent[];
137
- }, UserKey>;
138
- type ContinuitySyncTransactionUpdate = Pick<TransactionOutcomeEvent<any>, `epoch` | `id` | `output` | `subEvents` | `token`>;
139
- declare const userUnacknowledgedQueues: RegularAtomFamilyToken<ContinuitySyncTransactionUpdate[], UserKey>;
140
- //#endregion
141
148
  //#region src/realtime-server/realtime-state-provider.d.ts
142
149
  type StateProvider = ReturnType<typeof realtimeStateProvider>;
143
150
  declare function realtimeStateProvider({
@@ -150,21 +157,13 @@ type StateReceiver = ReturnType<typeof realtimeStateReceiver>;
150
157
  declare function realtimeStateReceiver({
151
158
  socket,
152
159
  store
153
- }: ServerConfig): <J extends Json.Serializable>(token: WritableToken<J>) => () => void;
160
+ }: ServerConfig): <S extends Json.Serializable, C extends S>(clientToken: WritableToken<C>, serverToken?: WritableToken<S>) => () => void;
154
161
  //#endregion
155
- //#region src/realtime-server/index.d.ts
156
- type Socket = {
157
- id: string | undefined;
158
- on: (event: string, listener: (...args: Json.Serializable[]) => void) => void;
159
- onAny: (listener: (event: string, ...args: Json.Serializable[]) => void) => void;
160
- off: (event: string, listener: (...args: Json.Serializable[]) => void) => void;
161
- offAny: (listener: (event: string, ...args: Json.Serializable[]) => void) => void;
162
- emit: (event: string, ...args: Json.Serializable[]) => void;
163
- };
162
+ //#region src/realtime-server/server-config.d.ts
164
163
  type ServerConfig = {
165
164
  socket: Socket;
166
165
  store?: RootStore;
167
166
  };
168
167
  //#endregion
169
- export { ActionReceiver, ChildSocket, ContinuitySyncTransactionUpdate, CreateRoomIO, CustomSocket, EventBuffer, Events, ExposeRealtimeContinuity, FamilyProvider, JoinRoomIO, LeaveRoomIO, MutableFamilyProvider, MutableProvider, ParentSocket, RoomArguments, RoomKey, ServerConfig, Socket, SocketKey, SocketSystemHierarchy, StateProvider, StateReceiver, StringifiedEvent, SubjectSocket, UserKey, createRoomTX, destroyRoomTX, joinRoomTX, leaveRoomTX, prepareToExposeRealtimeContinuity, realtimeActionReceiver, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, redactTransactionUpdateContent, redactorAtoms, roomArgumentsAtoms, roomSelectors, socketAtoms, socketIndex, userIndex, userUnacknowledgedQueues, usersOfSockets };
168
+ export { ChildProcess, ChildSocket, CustomSocket, EventBuffer, EventPayload, Events, FamilyProvider, JoinRoomIO, LeaveRoomIO, MutableFamilyProvider, MutableProvider, ParentProcess, ParentSocket, ProvideContinuity, ROOMS, RoomKey, ServerConfig, Socket, SocketKey, SocketSystemHierarchy, StateProvider, StateReceiver, StderrLog, SubjectSocket, UserKey, destroyRoomTX, joinRoomTX, leaveRoomTX, prepareToProvideContinuity, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, socketAtoms, socketIndex, spawnRoom, userIndex, userMutualSituationalAwarenessIndexes, usersOfSockets };
170
169
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>","socketIndex: MutableAtomToken<SetRTX<SocketKey>>","userIndex: MutableAtomToken<SetRTX<UserKey>>","usersOfSockets: JoinToken<\n\t`user`,\n\tUserKey,\n\t`socket`,\n\tSocketKey,\n\t`1:1`\n>","createRoomTX: AtomIO.TransactionToken<\n\t(\n\t\troomKey: RoomKey,\n\t\tscript: string,\n\t\toptions?: string[],\n\t) => Loadable<ChildSocket<any, any>>\n>","joinRoomTX: AtomIO.TransactionToken<\n\t(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta\n>","leaveRoomTX: AtomIO.TransactionToken<\n\t(roomId: string, userId: string) => void\n>","destroyRoomTX: AtomIO.TransactionToken<(roomKey: RoomKey) => void>","roomArgumentsAtoms: RegularAtomFamilyToken<RoomArguments, string>","roomSelectors: ReadonlyPureSelectorFamilyToken<\n\tLoadable<ChildSocket<any, any>>,\n\tstring\n>","redactorAtoms: RegularAtomFamilyToken<\n\t{\n\t\tocclude: (updates: TransactionSubEvent[]) => TransactionSubEvent[]\n\t},\n\tUserKey\n>","userUnacknowledgedQueues: RegularAtomFamilyToken<\n\tContinuitySyncTransactionUpdate[],\n\tUserKey\n>"],"sources":["../../src/realtime-server/continuity/prepare-to-sync-realtime-continuity.ts","../../src/realtime-server/ipc-sockets/custom-socket.ts","../../src/realtime-server/ipc-sockets/child-socket.ts","../../src/realtime-server/ipc-sockets/parent-socket.ts","../../src/realtime-server/realtime-action-receiver.ts","../../src/realtime-server/realtime-family-provider.ts","../../src/realtime-server/realtime-mutable-family-provider.ts","../../src/realtime-server/realtime-mutable-provider.ts","../../src/realtime-server/realtime-server-stores/server-user-store.ts","../../src/realtime-server/realtime-server-stores/server-room-external-actions.ts","../../src/realtime-server/realtime-server-stores/server-room-external-store.ts","../../src/realtime-server/realtime-server-stores/server-sync-store.ts","../../src/realtime-server/realtime-state-provider.ts","../../src/realtime-server/realtime-state-receiver.ts","../../src/realtime-server/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":["socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>","socketIndex: MutableAtomToken<SetRTX<SocketKey>>","userIndex: MutableAtomToken<SetRTX<UserKey>>","usersOfSockets: JoinToken<\n\t`user`,\n\tUserKey,\n\t`socket`,\n\tSocketKey,\n\t`1:1`\n>","userMutualSituationalAwarenessIndexes: PureSelectorFamilyToken<\n\tUserKey[],\n\tUserKey\n>","ROOMS: Map<\n\tstring,\n\tChildSocket<any, any, ChildProcessWithoutNullStreams>\n>","joinRoomTX: TransactionToken<\n\t(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta\n>","leaveRoomTX: TransactionToken<\n\t(roomId: string, userId: string) => void\n>","destroyRoomTX: TransactionToken<(roomKey: RoomKey) => void>"],"sources":["../../src/realtime-server/continuity/provide-continuity.ts","../../src/realtime-server/socket-interface.ts","../../src/realtime-server/ipc-sockets/custom-socket.ts","../../src/realtime-server/ipc-sockets/child-socket.ts","../../src/realtime-server/realtime-server-stores/server-user-store.ts","../../src/realtime-server/realtime-server-stores/server-room-external-store.ts","../../src/realtime-server/ipc-sockets/parent-socket.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-state-provider.ts","../../src/realtime-server/realtime-state-receiver.ts","../../src/realtime-server/server-config.ts"],"sourcesContent":[],"mappings":"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"}