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.
- package/README.md +1 -1
- package/dist/data/index.d.ts +1 -1
- package/dist/employ-socket-D6wgByWh.js +12 -0
- package/dist/employ-socket-D6wgByWh.js.map +1 -0
- package/dist/has-role-hv4-hJMw.js +1149 -0
- package/dist/has-role-hv4-hJMw.js.map +1 -0
- package/dist/internal/index.d.ts +248 -248
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +570 -1712
- package/dist/internal/index.js.map +1 -1
- package/dist/introspection/index.d.ts +1 -1
- package/dist/is-fn-DY1wZ-md.js +10 -0
- package/dist/is-fn-DY1wZ-md.js.map +1 -0
- package/dist/main/index.d.ts +33 -33
- package/dist/main/index.d.ts.map +1 -1
- package/dist/main/index.js +2 -2
- package/dist/main/index.js.map +1 -1
- package/dist/mutex-store-CSvxY9i3.js +11 -0
- package/dist/mutex-store-CSvxY9i3.js.map +1 -0
- package/dist/react/index.d.ts +5 -5
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-devtools/index.js +7 -7
- package/dist/react-devtools/index.js.map +1 -1
- package/dist/realtime/index.d.ts +7 -15
- package/dist/realtime/index.d.ts.map +1 -1
- package/dist/realtime/index.js +3 -33
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime-client/index.d.ts +5 -5
- package/dist/realtime-client/index.d.ts.map +1 -1
- package/dist/realtime-client/index.js +92 -69
- package/dist/realtime-client/index.js.map +1 -1
- package/dist/realtime-react/index.d.ts +17 -10
- package/dist/realtime-react/index.d.ts.map +1 -1
- package/dist/realtime-react/index.js +41 -41
- package/dist/realtime-react/index.js.map +1 -1
- package/dist/realtime-server/index.d.ts +60 -53
- package/dist/realtime-server/index.d.ts.map +1 -1
- package/dist/realtime-server/index.js +592 -485
- package/dist/realtime-server/index.js.map +1 -1
- package/dist/realtime-testing/index.d.ts +1 -2
- package/dist/realtime-testing/index.d.ts.map +1 -1
- package/dist/realtime-testing/index.js +25 -18
- package/dist/realtime-testing/index.js.map +1 -1
- package/dist/shared-room-store-COGGKqes.js +32 -0
- package/dist/shared-room-store-COGGKqes.js.map +1 -0
- package/dist/shared-room-store-D2o4ZLjC.d.ts +15 -0
- package/dist/shared-room-store-D2o4ZLjC.d.ts.map +1 -0
- package/dist/web/index.d.ts +3 -3
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +4 -3
- package/dist/web/index.js.map +1 -1
- package/package.json +12 -12
- package/src/internal/atom/create-regular-atom.ts +5 -4
- package/src/internal/atom/dispose-atom.ts +7 -2
- package/src/internal/atom/has-role.ts +3 -3
- package/src/internal/caching.ts +4 -2
- package/src/internal/families/create-readonly-held-selector-family.ts +2 -1
- package/src/internal/families/create-readonly-pure-selector-family.ts +5 -2
- package/src/internal/families/create-regular-atom-family.ts +2 -1
- package/src/internal/families/create-writable-held-selector-family.ts +2 -1
- package/src/internal/families/create-writable-pure-selector-family.ts +5 -2
- package/src/internal/families/dispose-from-store.ts +4 -4
- package/src/internal/families/find-in-store.ts +10 -10
- package/src/internal/families/get-family-of-token.ts +2 -2
- package/src/internal/families/index.ts +1 -0
- package/src/internal/families/mint-in-store.ts +54 -19
- package/src/internal/families/seek-in-store.ts +1 -1
- package/src/internal/get-state/get-fallback.ts +2 -2
- package/src/internal/get-state/get-from-store.ts +5 -5
- package/src/internal/get-state/read-or-compute-value.ts +1 -1
- package/src/internal/get-state/reduce-reference.ts +8 -6
- package/src/internal/index.ts +2 -220
- package/src/internal/molecule.ts +1 -2
- package/src/internal/mutable/create-mutable-atom-family.ts +3 -2
- package/src/internal/mutable/create-mutable-atom.ts +4 -2
- package/src/internal/mutable/get-json-family.ts +1 -1
- package/src/internal/mutable/get-update-family.ts +1 -1
- package/src/internal/mutable/tracker-family.ts +2 -1
- package/src/internal/mutable/tracker.ts +5 -8
- package/src/internal/safe-compute.ts +1 -1
- package/src/internal/selector/create-readonly-held-selector.ts +2 -1
- package/src/internal/selector/create-readonly-pure-selector.ts +2 -1
- package/src/internal/selector/create-writable-held-selector.ts +2 -1
- package/src/internal/selector/create-writable-pure-selector.ts +2 -1
- package/src/internal/selector/dispose-selector.ts +3 -2
- package/src/internal/selector/register-selector.ts +8 -5
- package/src/internal/selector/trace-selector-atoms.ts +2 -1
- package/src/internal/set-state/dispatch-state-update.ts +3 -2
- package/src/internal/set-state/evict-downstream.ts +1 -1
- package/src/internal/set-state/operate-on-store.ts +16 -22
- package/src/internal/set-state/reset-atom-or-selector.ts +5 -3
- package/src/internal/set-state/reset-in-store.ts +5 -5
- package/src/internal/set-state/set-atom-or-selector.ts +2 -2
- package/src/internal/set-state/set-atom.ts +4 -2
- package/src/internal/set-state/set-into-store.ts +21 -39
- package/src/internal/set-state/set-selector.ts +3 -2
- package/src/internal/state-types.ts +228 -0
- package/src/internal/store/deposit.ts +4 -4
- package/src/internal/store/index.ts +0 -1
- package/src/internal/store/store.ts +9 -9
- package/src/internal/store/withdraw.ts +4 -4
- package/src/internal/subscribe/recall-state.ts +1 -1
- package/src/internal/subscribe/subscribe-to-root-atoms.ts +1 -12
- package/src/internal/subscribe/subscribe-to-transaction.ts +3 -2
- package/src/internal/transaction/build-transaction.ts +3 -2
- package/src/internal/transaction/index.ts +1 -23
- package/src/internal/transaction/is-root-store.ts +4 -1
- package/src/internal/transaction/transaction-meta-progress.ts +22 -0
- package/src/main/atom.ts +1 -2
- package/src/main/find-state.ts +5 -5
- package/src/main/get-state.ts +4 -4
- package/src/main/realm.ts +2 -2
- package/src/main/set-state.ts +10 -10
- package/src/react/parse-state-overloads.ts +3 -3
- package/src/react/use-i.ts +6 -4
- package/src/react/use-loadable.ts +4 -10
- package/src/react/use-o.ts +6 -4
- package/src/react-devtools/store.ts +6 -6
- package/src/realtime/index.ts +1 -0
- package/src/realtime/mutex-store.ts +11 -0
- package/src/realtime/realtime-continuity.ts +1 -5
- package/src/realtime-client/pull-atom-family-member.ts +14 -17
- package/src/realtime-client/pull-atom.ts +1 -1
- package/src/realtime-client/pull-mutable-atom-family-member.ts +16 -12
- package/src/realtime-client/pull-selector-family-member.ts +8 -35
- package/src/realtime-client/pull-selector-roots.ts +90 -0
- package/src/realtime-client/pull-selector.ts +2 -27
- package/src/realtime-client/push-state.ts +33 -5
- package/src/realtime-client/realtime-client-stores/client-main-store.ts +2 -5
- package/src/realtime-react/index.ts +2 -1
- package/src/realtime-react/realtime-context.tsx +9 -5
- package/src/realtime-react/use-pull-atom-family-member.ts +2 -3
- package/src/realtime-react/use-pull-mutable-family-member.ts +2 -3
- package/src/realtime-react/use-pull-selector-family-member.ts +5 -6
- package/src/realtime-react/use-push.ts +7 -3
- package/src/realtime-react/use-realtime-service.ts +11 -11
- package/src/realtime-react/use-single-effect.ts +11 -14
- package/src/realtime-server/{realtime-server-stores/server-sync-store.ts → continuity/continuity-store.ts} +1 -1
- package/src/realtime-server/continuity/prepare-to-sync-realtime-continuity.ts +1 -1
- package/src/realtime-server/continuity/prepare-to-track-client-acknowledgement.ts +3 -5
- package/src/realtime-server/continuity/subscribe-to-continuity-actions.ts +1 -1
- package/src/realtime-server/employ-socket.ts +14 -0
- package/src/realtime-server/index.ts +2 -20
- package/src/realtime-server/ipc-sockets/child-socket.ts +125 -66
- package/src/realtime-server/ipc-sockets/custom-socket.ts +16 -14
- package/src/realtime-server/ipc-sockets/parent-socket.ts +81 -58
- package/src/realtime-server/realtime-family-provider.ts +78 -29
- package/src/realtime-server/realtime-mutable-family-provider.ts +80 -31
- package/src/realtime-server/realtime-mutable-provider.ts +30 -22
- package/src/realtime-server/realtime-server-stores/index.ts +0 -2
- package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +77 -36
- package/src/realtime-server/realtime-server-stores/server-user-store.ts +12 -1
- package/src/realtime-server/realtime-state-provider.ts +30 -29
- package/src/realtime-server/realtime-state-receiver.ts +62 -16
- package/src/realtime-server/server-config.ts +9 -0
- package/src/realtime-server/socket-interface.ts +14 -0
- package/src/realtime-testing/setup-realtime-test.tsx +56 -23
- package/src/web/index.ts +1 -1
- package/src/web/{persist-sync.ts → storage-sync.ts} +5 -2
- package/src/internal/store/mint-or-counterfeit.ts +0 -108
- package/src/realtime-react/on-mount.ts +0 -5
- 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
|
-
|
|
60
|
+
useSingleEffect(() => {
|
|
66
61
|
let service = services?.get(key);
|
|
67
|
-
if (service) service
|
|
68
|
-
else {
|
|
69
|
-
const dispose =
|
|
70
|
-
service =
|
|
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
|
|
76
|
-
if (service
|
|
77
|
-
service
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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":"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"}
|
|
@@ -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,
|
|
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
|
|
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
|
|
19
|
-
interface EventBuffer<
|
|
20
|
-
toString():
|
|
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<
|
|
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
|
-
|
|
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
|
-
|
|
61
|
+
proc: P;
|
|
43
62
|
key: string;
|
|
44
63
|
logger: Pick<Console, `error` | `info` | `warn`>;
|
|
45
|
-
protected handleLog(
|
|
46
|
-
constructor(
|
|
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<
|
|
52
|
-
out: Subject<
|
|
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
|
-
|
|
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
|
-
|
|
92
|
+
proc: P;
|
|
67
93
|
id: string;
|
|
68
|
-
protected log(...args:
|
|
94
|
+
protected log(...args: StderrLog): void;
|
|
69
95
|
logger: {
|
|
70
|
-
info: (...args:
|
|
71
|
-
warn: (...args:
|
|
72
|
-
error: (...args:
|
|
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
|
-
|
|
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
|
-
|
|
130
|
-
declare
|
|
131
|
-
declare const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
declare const
|
|
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): <
|
|
167
|
+
}: ServerConfig): <S extends Json.Serializable, C extends S>(clientToken: WritableToken<C>, serverToken?: WritableToken<S>) => () => void;
|
|
154
168
|
//#endregion
|
|
155
|
-
//#region src/realtime-server/
|
|
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,
|
|
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>","
|
|
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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"}
|