atom.io 0.40.6 → 0.40.7

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 (163) hide show
  1. package/README.md +1 -1
  2. package/dist/data/index.d.ts +1 -1
  3. package/dist/employ-socket-D6wgByWh.js +12 -0
  4. package/dist/employ-socket-D6wgByWh.js.map +1 -0
  5. package/dist/has-role-hv4-hJMw.js +1149 -0
  6. package/dist/has-role-hv4-hJMw.js.map +1 -0
  7. package/dist/internal/index.d.ts +248 -248
  8. package/dist/internal/index.d.ts.map +1 -1
  9. package/dist/internal/index.js +570 -1712
  10. package/dist/internal/index.js.map +1 -1
  11. package/dist/introspection/index.d.ts +1 -1
  12. package/dist/is-fn-DY1wZ-md.js +10 -0
  13. package/dist/is-fn-DY1wZ-md.js.map +1 -0
  14. package/dist/main/index.d.ts +33 -33
  15. package/dist/main/index.d.ts.map +1 -1
  16. package/dist/main/index.js +2 -2
  17. package/dist/main/index.js.map +1 -1
  18. package/dist/mutex-store-CSvxY9i3.js +11 -0
  19. package/dist/mutex-store-CSvxY9i3.js.map +1 -0
  20. package/dist/react/index.d.ts +5 -5
  21. package/dist/react/index.d.ts.map +1 -1
  22. package/dist/react/index.js.map +1 -1
  23. package/dist/react-devtools/index.js +7 -7
  24. package/dist/react-devtools/index.js.map +1 -1
  25. package/dist/realtime/index.d.ts +7 -15
  26. package/dist/realtime/index.d.ts.map +1 -1
  27. package/dist/realtime/index.js +3 -33
  28. package/dist/realtime/index.js.map +1 -1
  29. package/dist/realtime-client/index.d.ts +5 -5
  30. package/dist/realtime-client/index.d.ts.map +1 -1
  31. package/dist/realtime-client/index.js +92 -69
  32. package/dist/realtime-client/index.js.map +1 -1
  33. package/dist/realtime-react/index.d.ts +17 -10
  34. package/dist/realtime-react/index.d.ts.map +1 -1
  35. package/dist/realtime-react/index.js +41 -41
  36. package/dist/realtime-react/index.js.map +1 -1
  37. package/dist/realtime-server/index.d.ts +60 -53
  38. package/dist/realtime-server/index.d.ts.map +1 -1
  39. package/dist/realtime-server/index.js +592 -485
  40. package/dist/realtime-server/index.js.map +1 -1
  41. package/dist/realtime-testing/index.d.ts +1 -2
  42. package/dist/realtime-testing/index.d.ts.map +1 -1
  43. package/dist/realtime-testing/index.js +25 -18
  44. package/dist/realtime-testing/index.js.map +1 -1
  45. package/dist/shared-room-store-COGGKqes.js +32 -0
  46. package/dist/shared-room-store-COGGKqes.js.map +1 -0
  47. package/dist/shared-room-store-D2o4ZLjC.d.ts +15 -0
  48. package/dist/shared-room-store-D2o4ZLjC.d.ts.map +1 -0
  49. package/dist/web/index.d.ts +3 -3
  50. package/dist/web/index.d.ts.map +1 -1
  51. package/dist/web/index.js +4 -3
  52. package/dist/web/index.js.map +1 -1
  53. package/package.json +12 -12
  54. package/src/internal/atom/create-regular-atom.ts +5 -4
  55. package/src/internal/atom/dispose-atom.ts +7 -2
  56. package/src/internal/atom/has-role.ts +3 -3
  57. package/src/internal/caching.ts +4 -2
  58. package/src/internal/families/create-readonly-held-selector-family.ts +2 -1
  59. package/src/internal/families/create-readonly-pure-selector-family.ts +5 -2
  60. package/src/internal/families/create-regular-atom-family.ts +2 -1
  61. package/src/internal/families/create-writable-held-selector-family.ts +2 -1
  62. package/src/internal/families/create-writable-pure-selector-family.ts +5 -2
  63. package/src/internal/families/dispose-from-store.ts +4 -4
  64. package/src/internal/families/find-in-store.ts +10 -10
  65. package/src/internal/families/get-family-of-token.ts +2 -2
  66. package/src/internal/families/index.ts +1 -0
  67. package/src/internal/families/mint-in-store.ts +54 -19
  68. package/src/internal/families/seek-in-store.ts +1 -1
  69. package/src/internal/get-state/get-fallback.ts +2 -2
  70. package/src/internal/get-state/get-from-store.ts +5 -5
  71. package/src/internal/get-state/read-or-compute-value.ts +1 -1
  72. package/src/internal/get-state/reduce-reference.ts +8 -6
  73. package/src/internal/index.ts +2 -220
  74. package/src/internal/molecule.ts +1 -2
  75. package/src/internal/mutable/create-mutable-atom-family.ts +3 -2
  76. package/src/internal/mutable/create-mutable-atom.ts +4 -2
  77. package/src/internal/mutable/get-json-family.ts +1 -1
  78. package/src/internal/mutable/get-update-family.ts +1 -1
  79. package/src/internal/mutable/tracker-family.ts +2 -1
  80. package/src/internal/mutable/tracker.ts +5 -8
  81. package/src/internal/safe-compute.ts +1 -1
  82. package/src/internal/selector/create-readonly-held-selector.ts +2 -1
  83. package/src/internal/selector/create-readonly-pure-selector.ts +2 -1
  84. package/src/internal/selector/create-writable-held-selector.ts +2 -1
  85. package/src/internal/selector/create-writable-pure-selector.ts +2 -1
  86. package/src/internal/selector/dispose-selector.ts +3 -2
  87. package/src/internal/selector/register-selector.ts +8 -5
  88. package/src/internal/selector/trace-selector-atoms.ts +2 -1
  89. package/src/internal/set-state/dispatch-state-update.ts +3 -2
  90. package/src/internal/set-state/evict-downstream.ts +1 -1
  91. package/src/internal/set-state/operate-on-store.ts +16 -22
  92. package/src/internal/set-state/reset-atom-or-selector.ts +5 -3
  93. package/src/internal/set-state/reset-in-store.ts +5 -5
  94. package/src/internal/set-state/set-atom-or-selector.ts +2 -2
  95. package/src/internal/set-state/set-atom.ts +4 -2
  96. package/src/internal/set-state/set-into-store.ts +21 -39
  97. package/src/internal/set-state/set-selector.ts +3 -2
  98. package/src/internal/state-types.ts +228 -0
  99. package/src/internal/store/deposit.ts +4 -4
  100. package/src/internal/store/index.ts +0 -1
  101. package/src/internal/store/store.ts +9 -9
  102. package/src/internal/store/withdraw.ts +4 -4
  103. package/src/internal/subscribe/recall-state.ts +1 -1
  104. package/src/internal/subscribe/subscribe-to-root-atoms.ts +1 -12
  105. package/src/internal/subscribe/subscribe-to-transaction.ts +3 -2
  106. package/src/internal/transaction/build-transaction.ts +3 -2
  107. package/src/internal/transaction/index.ts +1 -23
  108. package/src/internal/transaction/is-root-store.ts +4 -1
  109. package/src/internal/transaction/transaction-meta-progress.ts +22 -0
  110. package/src/main/atom.ts +1 -2
  111. package/src/main/find-state.ts +5 -5
  112. package/src/main/get-state.ts +4 -4
  113. package/src/main/realm.ts +2 -2
  114. package/src/main/set-state.ts +10 -10
  115. package/src/react/parse-state-overloads.ts +3 -3
  116. package/src/react/use-i.ts +6 -4
  117. package/src/react/use-loadable.ts +4 -10
  118. package/src/react/use-o.ts +6 -4
  119. package/src/react-devtools/store.ts +6 -6
  120. package/src/realtime/index.ts +1 -0
  121. package/src/realtime/mutex-store.ts +11 -0
  122. package/src/realtime/realtime-continuity.ts +1 -5
  123. package/src/realtime-client/pull-atom-family-member.ts +14 -17
  124. package/src/realtime-client/pull-atom.ts +1 -1
  125. package/src/realtime-client/pull-mutable-atom-family-member.ts +16 -12
  126. package/src/realtime-client/pull-selector-family-member.ts +8 -35
  127. package/src/realtime-client/pull-selector-roots.ts +90 -0
  128. package/src/realtime-client/pull-selector.ts +2 -27
  129. package/src/realtime-client/push-state.ts +33 -5
  130. package/src/realtime-client/realtime-client-stores/client-main-store.ts +2 -5
  131. package/src/realtime-react/index.ts +2 -1
  132. package/src/realtime-react/realtime-context.tsx +9 -5
  133. package/src/realtime-react/use-pull-atom-family-member.ts +2 -3
  134. package/src/realtime-react/use-pull-mutable-family-member.ts +2 -3
  135. package/src/realtime-react/use-pull-selector-family-member.ts +5 -6
  136. package/src/realtime-react/use-push.ts +7 -3
  137. package/src/realtime-react/use-realtime-service.ts +11 -11
  138. package/src/realtime-react/use-single-effect.ts +11 -14
  139. package/src/realtime-server/{realtime-server-stores/server-sync-store.ts → continuity/continuity-store.ts} +1 -1
  140. package/src/realtime-server/continuity/prepare-to-sync-realtime-continuity.ts +1 -1
  141. package/src/realtime-server/continuity/prepare-to-track-client-acknowledgement.ts +3 -5
  142. package/src/realtime-server/continuity/subscribe-to-continuity-actions.ts +1 -1
  143. package/src/realtime-server/employ-socket.ts +14 -0
  144. package/src/realtime-server/index.ts +2 -20
  145. package/src/realtime-server/ipc-sockets/child-socket.ts +125 -66
  146. package/src/realtime-server/ipc-sockets/custom-socket.ts +16 -14
  147. package/src/realtime-server/ipc-sockets/parent-socket.ts +81 -58
  148. package/src/realtime-server/realtime-family-provider.ts +78 -29
  149. package/src/realtime-server/realtime-mutable-family-provider.ts +80 -31
  150. package/src/realtime-server/realtime-mutable-provider.ts +30 -22
  151. package/src/realtime-server/realtime-server-stores/index.ts +0 -2
  152. package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +77 -36
  153. package/src/realtime-server/realtime-server-stores/server-user-store.ts +12 -1
  154. package/src/realtime-server/realtime-state-provider.ts +30 -29
  155. package/src/realtime-server/realtime-state-receiver.ts +62 -16
  156. package/src/realtime-server/server-config.ts +9 -0
  157. package/src/realtime-server/socket-interface.ts +14 -0
  158. package/src/realtime-testing/setup-realtime-test.tsx +56 -23
  159. package/src/web/index.ts +1 -1
  160. package/src/web/{persist-sync.ts → storage-sync.ts} +5 -2
  161. package/src/internal/store/mint-or-counterfeit.ts +0 -108
  162. package/src/realtime-react/on-mount.ts +0 -5
  163. package/src/realtime-server/realtime-server-stores/server-room-external-actions.ts +0 -79
@@ -1,37 +1,12 @@
1
+ import { isFn } from "../is-fn-DY1wZ-md.js";
1
2
  import { actUponStore, arbitrary, 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,51 @@ 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
+ const globalEnv = globalThis[`env`];
40
+ const isInDev = globalEnv?.NODE_ENV === `development`;
41
+ if (isInDev) {
42
+ const cleanupRef = React$1.useRef(false);
43
+ React$1.useEffect(() => {
44
+ let cleanupFn = cleanupRef.current;
45
+ if (cleanupFn === false) {
46
+ cleanupFn = effect() ?? true;
47
+ cleanupRef.current = cleanupFn;
48
+ } else return () => {
49
+ if (isFn(cleanupFn)) cleanupFn();
50
+ cleanupRef.current = false;
51
+ };
52
+ }, deps);
53
+ } else React$1.useEffect(effect, deps);
54
+ }
55
+
61
56
  //#endregion
62
57
  //#region src/realtime-react/use-realtime-service.ts
63
58
  function useRealtimeService(key, create) {
64
59
  const { socket, services } = React$1.useContext(RealtimeContext);
65
- onMount(() => {
60
+ useSingleEffect(() => {
66
61
  let service = services?.get(key);
67
- if (service) service[0]++;
68
- else {
69
- const dispose = socket ? create(socket) : void 0;
70
- service = [1, dispose];
62
+ if (service) ++service.consumerCount;
63
+ else if (socket) {
64
+ const dispose = create(socket);
65
+ service = {
66
+ consumerCount: 1,
67
+ dispose
68
+ };
71
69
  services?.set(key, service);
72
70
  }
73
71
  return () => {
74
72
  if (service) {
75
- service[0]--;
76
- if (service[0] === 0) {
77
- service[1]?.();
73
+ --service.consumerCount;
74
+ if (service.consumerCount === 0) {
75
+ service.dispose?.();
78
76
  services?.delete(key);
79
77
  }
80
78
  }
81
79
  };
82
- });
80
+ }, [socket, key]);
83
81
  }
84
82
 
85
83
  //#endregion
@@ -95,7 +93,7 @@ function usePullAtom(token) {
95
93
  function usePullAtomFamilyMember(family, subKey) {
96
94
  const store = React$1.useContext(StoreContext);
97
95
  const token = findInStore(store, family, subKey);
98
- useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullAtomFamilyMember(store, socket, token));
96
+ useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullAtomFamilyMember(store, socket, family, subKey));
99
97
  return useO(token);
100
98
  }
101
99
 
@@ -112,7 +110,7 @@ function usePullMutable(token) {
112
110
  function usePullMutableAtomFamilyMember(familyToken, key) {
113
111
  const store = React$1.useContext(StoreContext);
114
112
  const token = findInStore(store, familyToken, key);
115
- useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullMutableAtomFamilyMember(store, socket, token));
113
+ useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullMutableAtomFamilyMember(store, socket, familyToken, key));
116
114
  return useO(token);
117
115
  }
118
116
 
@@ -129,7 +127,7 @@ function usePullSelector(token) {
129
127
  function usePullSelectorFamilyMember(familyToken, key) {
130
128
  const store = React$1.useContext(StoreContext);
131
129
  const token = findInStore(store, familyToken, key);
132
- useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullSelectorFamilyMember(store, socket, token));
130
+ useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullSelectorFamilyMember(store, socket, familyToken, key));
133
131
  return useO(token);
134
132
  }
135
133
 
@@ -138,7 +136,9 @@ function usePullSelectorFamilyMember(familyToken, key) {
138
136
  function usePush(token) {
139
137
  const store = React$1.useContext(StoreContext);
140
138
  useRealtimeService(`push:${token.key}`, (socket) => RTC.pushState(store, socket, token));
141
- return useI(token);
139
+ const mutex = useO(RT.mutexAtoms, token.key);
140
+ const setter = useI(token);
141
+ return mutex ? setter : null;
142
142
  }
143
143
 
144
144
  //#endregion
@@ -159,5 +159,5 @@ function useSyncContinuity(token) {
159
159
  }
160
160
 
161
161
  //#endregion
162
- export { RealtimeContext, RealtimeProvider, onMount, usePullAtom, usePullAtomFamilyMember, usePullMutable, usePullMutableAtomFamilyMember, usePullSelector, usePullSelectorFamilyMember, usePush, useServerAction, useSyncContinuity };
162
+ export { RealtimeContext, RealtimeProvider, usePullAtom, usePullAtomFamilyMember, usePullMutable, usePullMutableAtomFamilyMember, usePullSelector, usePullSelectorFamilyMember, usePush, useRealtimeService, useServerAction, useSingleEffect, useSyncContinuity };
163
163
  //# 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":"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"}
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","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-server-action.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 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":";;;;;;;;;;AAeA,MAAaA,kBACZC,QAAM,cAAc;CACnB,QAAQ;CACR,UAAU;;AAGZ,MAAaC,oBAGP,EAAE,UAAU,aAAa;CAC9B,MAAM,WAAWD,QAAM,uBACtB,IAAI,OACH;CACF,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;;;;;;ACnCJ,SAAgB,gBACf,QACA,MACO;CACP,MAAM,YAAa,WAAuC;CAC1D,MAAM,UAAU,WAAW,aAAa;AACxC,KAAI,SAAS;EACZ,MAAM,aAAaE,QAAM,OAA+B;AACxD,UAAM,gBAAgB;GACrB,IAAI,YAAY,WAAW;AAC3B,OAAI,cAAc,OAAO;AACxB,gBAAY,YAAY;AACxB,eAAW,UAAU;SAErB,cAAa;AACZ,QAAI,KAAK,WAAY;AACrB,eAAW,UAAU;;KAGrB;OAEH,SAAM,UAAU,QAAQ;;;;;ACpB1B,SAAgB,mBACf,KACA,QACO;CACP,MAAM,EAAE,QAAQ,aAAaC,QAAM,WAAW;AAC9C,uBAAsB;EACrB,IAAI,UAAU,UAAU,IAAI;AAC5B,MAAI,QACH,GAAE,QAAQ;WACA,QAAQ;GAClB,MAAM,UAAU,OAAO;AACvB,aAAU;IAAE,eAAe;IAAG;;AAC9B,aAAU,IAAI,KAAK;;AAEpB,eAAa;AACZ,OAAI,SAAS;AACZ,MAAE,QAAQ;AACV,QAAI,QAAQ,kBAAkB,GAAG;AAChC,aAAQ;AACR,eAAU,OAAO;;;;IAIlB,CAAC,QAAQ;;;;;ACrBb,SAAgB,YACf,OACI;CACJ,MAAM,QAAQC,QAAM,WAAW;AAC/B,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,SAAS,OAAO,QAAQ;AAE7B,QAAO,KAAK;;;;;ACNb,SAAgB,wBAGd,QAA6C,QAAuB;CACrE,MAAM,QAAQC,QAAM,WAAW;CAC/B,MAAM,QAAQ,YAAY,OAAO,QAAQ;AACzC,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,qBAAqB,OAAO,QAAQ,QAAQ;AAEjD,QAAO,KAAK;;;;;ACVb,SAAgB,eACf,OACI;CACJ,MAAM,QAAQC,QAAM,WAAW;AAC/B,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,gBAAgB,OAAO,QAAQ;AAEpC,QAAO,KAAK;;;;;ACLb,SAAgB,+BAGd,aAAkD,KAAoB;CACvE,MAAM,QAAQC,QAAM,WAAW;CAC/B,MAAM,QAAQ,YAAY,OAAO,aAAa;AAC9C,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,4BAA4B,OAAO,QAAQ,aAAa;AAE7D,QAAO,KAAK;;;;;ACXb,SAAgB,gBACf,OACI;CACJ,MAAM,QAAQC,QAAM,WAAW;AAC/B,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,aAAa,OAAO,QAAQ;AAEjC,QAAO,KAAK;;;;;ACNb,SAAgB,4BACf,aACA,KACI;CACJ,MAAM,QAAQC,QAAM,WAAW;CAC/B,MAAM,QAAQ,YAAY,OAAO,aAAa;AAC9C,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,yBAAyB,OAAO,QAAQ,aAAa;AAG1D,QAAO,KAAK;;;;;ACVb,SAAgB,QACf,OACkE;CAClE,MAAM,QAAQC,QAAM,WAAW;AAC/B,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,UAAU,OAAO,QAAQ;CAE9B,MAAM,QAAQ,KAAK,GAAG,YAAY,MAAM;CACxC,MAAM,SAAS,KAAK;AAEpB,QAAO,QAAQ,SAAS;;;;;ACVzB,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,10 +1,12 @@
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, JsonIO, 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
11
  //#region src/realtime-server/continuity/prepare-to-sync-realtime-continuity.d.ts
10
12
  type ExposeRealtimeContinuity = (continuity: ContinuityToken) => () => void;
@@ -13,16 +15,26 @@ declare function prepareToExposeRealtimeContinuity({
13
15
  store
14
16
  }: ServerConfig): ExposeRealtimeContinuity;
15
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
+ };
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<E extends Events, K extends string & keyof E = string & keyof E> = [string, ...E[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,45 +45,59 @@ 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
49
68
  //#region src/realtime-server/ipc-sockets/parent-socket.d.ts
50
69
  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[]]>;
70
+ in: Subject<EventPayload<I>>;
71
+ out: Subject<EventPayload<O>>;
53
72
  id: string;
54
73
  disposalFunctions: (() => void)[];
55
74
  constructor(id: string);
56
75
  dispose(): void;
57
76
  }
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[]] } & {
77
+ type ParentProcess = {
78
+ pid?: number | undefined;
79
+ stdin: Readable;
80
+ stdout: Writable;
81
+ stderr: Writable;
82
+ exit: (code?: number) => void;
83
+ };
84
+ 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[]] } & {
59
85
  "user-joins": [string];
60
86
  "user-leaves": [string];
61
- }> extends CustomSocket<I, O> {
87
+ }, P extends ParentProcess = ParentProcess> extends CustomSocket<I, O> {
62
88
  protected incompleteData: string;
63
89
  protected unprocessedEvents: string[];
64
90
  protected relays: Map<string, SubjectSocket<any, any>>;
65
91
  protected relayServices: ((socket: SubjectSocket<any, any>) => (() => void) | void)[];
66
- protected process: NodeJS.Process;
92
+ proc: P;
67
93
  id: string;
68
- protected log(...args: any[]): void;
94
+ protected log(...args: StderrLog): void;
69
95
  logger: {
70
- info: (...args: any[]) => void;
71
- warn: (...args: any[]) => void;
72
- error: (...args: any[]) => void;
96
+ info: (...args: Json.Array) => void;
97
+ warn: (...args: Json.Array) => void;
98
+ error: (...args: Json.Array) => void;
73
99
  };
74
- constructor();
100
+ constructor(proc: P);
75
101
  relay(attachServices: (socket: SubjectSocket<any, any>) => (() => void) | void): void;
76
102
  }
77
103
  //#endregion
@@ -115,28 +141,16 @@ declare const socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>;
115
141
  declare const socketIndex: MutableAtomToken<SetRTX<SocketKey>>;
116
142
  declare const userIndex: MutableAtomToken<SetRTX<UserKey>>;
117
143
  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>;
144
+ declare const userMutualSituationalAwarenessIndexes: PureSelectorFamilyToken<UserKey[], UserKey>;
127
145
  //#endregion
128
146
  //#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>;
147
+ declare const ROOMS: Map<string, ChildSocket<any, any, ChildProcessWithoutNullStreams>>;
148
+ declare function spawnRoom(roomId: string, script: string, options: string[]): Promise<ChildSocket<any, any>>;
149
+ declare const joinRoomTX: TransactionToken<(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta>;
150
+ type JoinRoomIO = TransactionIO<typeof joinRoomTX>;
151
+ declare const leaveRoomTX: TransactionToken<(roomId: string, userId: string) => void>;
152
+ type LeaveRoomIO = TransactionIO<typeof leaveRoomTX>;
153
+ declare const destroyRoomTX: TransactionToken<(roomKey: RoomKey) => void>;
140
154
  //#endregion
141
155
  //#region src/realtime-server/realtime-state-provider.d.ts
142
156
  type StateProvider = ReturnType<typeof realtimeStateProvider>;
@@ -150,21 +164,14 @@ type StateReceiver = ReturnType<typeof realtimeStateReceiver>;
150
164
  declare function realtimeStateReceiver({
151
165
  socket,
152
166
  store
153
- }: ServerConfig): <J extends Json.Serializable>(token: WritableToken<J>) => () => void;
167
+ }: ServerConfig): <S extends Json.Serializable, C extends S>(clientToken: WritableToken<C>, serverToken?: WritableToken<S>) => () => void;
154
168
  //#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
- };
169
+ //#region src/realtime-server/server-config.d.ts
164
170
  type ServerConfig = {
165
171
  socket: Socket;
166
172
  store?: RootStore;
173
+ mutex?: Set<string>;
167
174
  };
168
175
  //#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 };
176
+ export { ActionReceiver, ChildProcess, ChildSocket, CustomSocket, EventBuffer, EventPayload, Events, ExposeRealtimeContinuity, FamilyProvider, JoinRoomIO, LeaveRoomIO, MutableFamilyProvider, MutableProvider, ParentProcess, ParentSocket, ROOMS, RoomKey, ServerConfig, Socket, SocketKey, SocketSystemHierarchy, StateProvider, StateReceiver, StderrLog, SubjectSocket, UserKey, destroyRoomTX, joinRoomTX, leaveRoomTX, prepareToExposeRealtimeContinuity, realtimeActionReceiver, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, socketAtoms, socketIndex, spawnRoom, userIndex, userMutualSituationalAwarenessIndexes, usersOfSockets };
170
177
  //# 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/prepare-to-sync-realtime-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/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-store.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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"}