atom.io 0.44.5 → 0.44.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/introspection/index.d.ts.map +1 -1
- package/dist/react-devtools/index.d.ts.map +1 -1
- package/dist/realtime/index.d.ts +4 -14
- package/dist/realtime/index.d.ts.map +1 -1
- package/dist/realtime/index.js +10 -8
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime-client/index.d.ts +6 -7
- package/dist/realtime-client/index.d.ts.map +1 -1
- package/dist/realtime-client/index.js +18 -22
- package/dist/realtime-client/index.js.map +1 -1
- package/dist/realtime-react/index.d.ts +3 -1
- package/dist/realtime-react/index.d.ts.map +1 -1
- package/dist/realtime-react/index.js +10 -6
- package/dist/realtime-react/index.js.map +1 -1
- package/dist/realtime-server/index.d.ts +40 -32
- package/dist/realtime-server/index.d.ts.map +1 -1
- package/dist/realtime-server/index.js +89 -59
- package/dist/realtime-server/index.js.map +1 -1
- package/dist/realtime-testing/index.d.ts +4 -4
- package/dist/realtime-testing/index.d.ts.map +1 -1
- package/dist/realtime-testing/index.js +5 -5
- package/dist/realtime-testing/index.js.map +1 -1
- package/dist/shared-room-store-zzjyXJv7.d.ts +28 -0
- package/dist/shared-room-store-zzjyXJv7.d.ts.map +1 -0
- package/package.json +8 -8
- package/src/realtime/index.ts +1 -0
- package/src/realtime/realtime-continuity.ts +2 -1
- package/src/realtime/realtime-key-types.ts +11 -0
- package/src/realtime/shared-room-store.ts +20 -13
- package/src/realtime-client/continuity/register-and-attempt-confirmed-update.ts +5 -5
- package/src/realtime-client/realtime-client-stores/client-main-store.ts +8 -12
- package/src/realtime-client/realtime-client-stores/client-sync-store.ts +4 -4
- package/src/realtime-client/sync-continuity.ts +6 -6
- package/src/realtime-react/realtime-context.tsx +14 -5
- package/src/realtime-server/continuity/continuity-store.ts +1 -2
- package/src/realtime-server/continuity/provide-continuity.ts +2 -2
- package/src/realtime-server/continuity/provide-outcomes.ts +1 -2
- package/src/realtime-server/continuity/provide-perspectives.ts +1 -3
- package/src/realtime-server/continuity/provide-startup-payloads.ts +1 -3
- package/src/realtime-server/continuity/track-acknowledgements.ts +1 -2
- package/src/realtime-server/ipc-sockets/parent-socket.ts +1 -1
- package/src/realtime-server/realtime-mutable-family-provider.ts +12 -9
- package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +127 -27
- package/src/realtime-server/realtime-server-stores/server-user-store.ts +11 -18
- package/src/realtime-testing/setup-realtime-test.tsx +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>"],"sources":["../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-single-effect.ts","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":["import { useI } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nexport type RealtimeServiceCounter = {\n\tconsumerCount: number\n\tdispose: () => void\n}\n\nexport type RealtimeReactStore = {\n\tsocket: Socket | null\n\tservices: Map<string, RealtimeServiceCounter> | null\n}\n\nexport const RealtimeContext: React.Context<RealtimeReactStore> =\n\tReact.createContext({\n\t\tsocket: null,\n\t\tservices: null,\n\t})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}> = ({ children, socket }) => {\n\tconst services = React.useRef(\n\t\tnew Map<string, RealtimeServiceCounter>(),\n\t).current\n\tconst setMyId = useI(RTC.myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsetMyId(socket?.id)\n\t\tsocket?.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket?.on(`disconnect`, () => {\n\t\t\tsetMyId(undefined)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket, services }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","/** biome-ignore-all lint/correctness/useHookAtTopLevel: intentional */\n\nimport { isFn } from \"atom.io/internal\"\nimport * as React from \"react\"\n\nexport function useSingleEffect(\n\teffect: () => (() => void) | undefined | void,\n\tdeps: unknown[],\n): void {\n\tconst globalEnv = (globalThis as unknown as { env: any })[`env`]\n\tconst isInDev = globalEnv?.NODE_ENV === `development`\n\tif (isInDev) {\n\t\tconst cleanupRef = React.useRef<boolean | (() => void)>(false)\n\t\tReact.useEffect(() => {\n\t\t\tlet cleanupFn = cleanupRef.current\n\t\t\tif (cleanupFn === false) {\n\t\t\t\tcleanupFn = effect() ?? true\n\t\t\t\tcleanupRef.current = cleanupFn\n\t\t\t} else {\n\t\t\t\treturn () => {\n\t\t\t\t\tif (isFn(cleanupFn)) cleanupFn()\n\t\t\t\t\tcleanupRef.current = false\n\t\t\t\t}\n\t\t\t}\n\t\t}, deps)\n\t} else {\n\t\tReact.useEffect(effect, deps)\n\t}\n}\n","import * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { useSingleEffect } from \"./use-single-effect\"\n\nexport function useRealtimeService(\n\tkey: string,\n\tcreate: (socket: Socket) => () => void,\n): void {\n\tconst { socket, services } = React.useContext(RealtimeContext)\n\tuseSingleEffect(() => {\n\t\tlet service = services?.get(key)\n\t\tif (service) {\n\t\t\t++service.consumerCount\n\t\t} else if (socket) {\n\t\t\tconst dispose = create(socket)\n\t\t\tservice = { consumerCount: 1, dispose }\n\t\t\tservices?.set(key, service)\n\t\t}\n\t\treturn () => {\n\t\t\tif (service) {\n\t\t\t\t--service.consumerCount\n\t\t\t\tif (service.consumerCount === 0) {\n\t\t\t\t\tservice.dispose?.()\n\t\t\t\t\tservices?.delete(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [socket, key])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtom<J extends Json.Serializable>(\n\ttoken: AtomIO.RegularAtomToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtomFamilyMember<\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: NoInfer<K>): J {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, family, subKey)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtomFamilyMember(store, socket, family, subKey),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutable<T extends Transceiver<any, any, any>>(\n\ttoken: AtomIO.MutableAtomToken<T>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutableAtomFamilyMember<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: NoInfer<K>): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtomFamilyMember(store, socket, familyToken, key),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelector<J extends Json.Serializable>(\n\ttoken: AtomIO.SelectorToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelector(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelectorFamilyMember<T, K extends Canonical>(\n\tfamilyToken: AtomIO.SelectorFamilyToken<T, K>,\n\tkey: NoInfer<K>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelectorFamilyMember(store, socket, familyToken, key),\n\t)\n\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useI, useO } from \"atom.io/react\"\nimport * as RT from \"atom.io/realtime\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): (<New extends J>(next: New | ((old: J) => New)) => void) | null {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`push:${token.key}`, (socket) =>\n\t\tRTC.pushState(store, socket, token),\n\t)\n\tconst mutex = useO(RT.mutexAtoms, token.key)\n\tconst setter = useI(token)\n\n\treturn mutex ? setter : null\n}\n","import { StoreContext } from \"atom.io/react\"\nimport type { ContinuityToken } from \"atom.io/realtime\"\nimport { syncContinuity } from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useSyncContinuity(token: ContinuityToken): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`tx-sync:${token.key}`, (socket) => {\n\t\treturn syncContinuity(store, socket, token)\n\t})\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>"],"sources":["../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-single-effect.ts","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":["import { useI } from \"atom.io/react\"\nimport type { RoomSocketInterface } from \"atom.io/realtime/shared-room-store\"\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 setMySocketKey = useI(RTC.mySocketKeyAtom)\n\tReact.useEffect(() => {\n\t\tsetMySocketKey(socket?.id ? `socket::${socket.id}` : undefined)\n\t\tsocket?.on(`connect`, () => {\n\t\t\tsetMySocketKey(socket?.id ? `socket::${socket.id}` : undefined)\n\t\t})\n\t\tsocket?.on(`disconnect`, () => {\n\t\t\tsetMySocketKey(undefined)\n\t\t})\n\t}, [socket, setMySocketKey])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket, services }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n\nexport function useRealtimeRooms<RoomNames extends string>(): Socket<\n\t{},\n\tRoomSocketInterface<RoomNames>\n> {\n\tconst { socket } = React.useContext(RealtimeContext)\n\treturn socket as Socket<{}, RoomSocketInterface<RoomNames>>\n}\n","/** biome-ignore-all lint/correctness/useHookAtTopLevel: intentional */\n\nimport { isFn } from \"atom.io/internal\"\nimport * as React from \"react\"\n\nexport function useSingleEffect(\n\teffect: () => (() => void) | undefined | void,\n\tdeps: unknown[],\n): void {\n\tconst globalEnv = (globalThis as unknown as { env: any })[`env`]\n\tconst isInDev = globalEnv?.NODE_ENV === `development`\n\tif (isInDev) {\n\t\tconst cleanupRef = React.useRef<boolean | (() => void)>(false)\n\t\tReact.useEffect(() => {\n\t\t\tlet cleanupFn = cleanupRef.current\n\t\t\tif (cleanupFn === false) {\n\t\t\t\tcleanupFn = effect() ?? true\n\t\t\t\tcleanupRef.current = cleanupFn\n\t\t\t} else {\n\t\t\t\treturn () => {\n\t\t\t\t\tif (isFn(cleanupFn)) cleanupFn()\n\t\t\t\t\tcleanupRef.current = false\n\t\t\t\t}\n\t\t\t}\n\t\t}, deps)\n\t} else {\n\t\tReact.useEffect(effect, deps)\n\t}\n}\n","import * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { useSingleEffect } from \"./use-single-effect\"\n\nexport function useRealtimeService(\n\tkey: string,\n\tcreate: (socket: Socket) => () => void,\n): void {\n\tconst { socket, services } = React.useContext(RealtimeContext)\n\tuseSingleEffect(() => {\n\t\tlet service = services?.get(key)\n\t\tif (service) {\n\t\t\t++service.consumerCount\n\t\t} else if (socket) {\n\t\t\tconst dispose = create(socket)\n\t\t\tservice = { consumerCount: 1, dispose }\n\t\t\tservices?.set(key, service)\n\t\t}\n\t\treturn () => {\n\t\t\tif (service) {\n\t\t\t\t--service.consumerCount\n\t\t\t\tif (service.consumerCount === 0) {\n\t\t\t\t\tservice.dispose?.()\n\t\t\t\t\tservices?.delete(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [socket, key])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtom<J extends Json.Serializable>(\n\ttoken: AtomIO.RegularAtomToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtomFamilyMember<\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: NoInfer<K>): J {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, family, subKey)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtomFamilyMember(store, socket, family, subKey),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutable<T extends Transceiver<any, any, any>>(\n\ttoken: AtomIO.MutableAtomToken<T>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutableAtomFamilyMember<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: NoInfer<K>): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtomFamilyMember(store, socket, familyToken, key),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelector<J extends Json.Serializable>(\n\ttoken: AtomIO.SelectorToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelector(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelectorFamilyMember<T, K extends Canonical>(\n\tfamilyToken: AtomIO.SelectorFamilyToken<T, K>,\n\tkey: NoInfer<K>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelectorFamilyMember(store, socket, familyToken, key),\n\t)\n\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useI, useO } from \"atom.io/react\"\nimport * as RT from \"atom.io/realtime\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): (<New extends J>(next: New | ((old: J) => New)) => void) | null {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`push:${token.key}`, (socket) =>\n\t\tRTC.pushState(store, socket, token),\n\t)\n\tconst mutex = useO(RT.mutexAtoms, token.key)\n\tconst setter = useI(token)\n\n\treturn mutex ? setter : null\n}\n","import { StoreContext } from \"atom.io/react\"\nimport type { ContinuityToken } from \"atom.io/realtime\"\nimport { syncContinuity } from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useSyncContinuity(token: ContinuityToken): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`tx-sync:${token.key}`, (socket) => {\n\t\treturn syncContinuity(store, socket, token)\n\t})\n}\n"],"mappings":";;;;;;;;;AAgBA,MAAaA,kBACZ,MAAM,cAAc;CACnB,QAAQ;CACR,UAAU;CACV,CAAC;AAEH,MAAaC,oBAGP,EAAE,UAAU,aAAa;CAC9B,MAAM,WAAW,MAAM,uBACtB,IAAI,KAAqC,CACzC,CAAC;CACF,MAAM,iBAAiB,KAAK,IAAI,gBAAgB;AAChD,OAAM,gBAAgB;AACrB,iBAAe,QAAQ,KAAK,WAAW,OAAO,OAAO,OAAU;AAC/D,UAAQ,GAAG,iBAAiB;AAC3B,kBAAe,QAAQ,KAAK,WAAW,OAAO,OAAO,OAAU;IAC9D;AACF,UAAQ,GAAG,oBAAoB;AAC9B,kBAAe,OAAU;IACxB;IACA,CAAC,QAAQ,eAAe,CAAC;AAC5B,QACC,oBAAC,gBAAgB;EAAS,OAAO;GAAE;GAAQ;GAAU;EACnD;GACyB;;AAI7B,SAAgB,mBAGd;CACD,MAAM,EAAE,WAAW,MAAM,WAAW,gBAAgB;AACpD,QAAO;;;;;;AC9CR,SAAgB,gBACf,QACA,MACO;AAGP,KAFmB,WAAuC,QAC/B,aAAa,eAC3B;EACZ,MAAM,aAAa,MAAM,OAA+B,MAAM;AAC9D,QAAM,gBAAgB;GACrB,IAAI,YAAY,WAAW;AAC3B,OAAI,cAAc,OAAO;AACxB,gBAAY,QAAQ,IAAI;AACxB,eAAW,UAAU;SAErB,cAAa;AACZ,QAAI,KAAK,UAAU,CAAE,YAAW;AAChC,eAAW,UAAU;;KAGrB,KAAK;OAER,OAAM,UAAU,QAAQ,KAAK;;;;;ACpB/B,SAAgB,mBACf,KACA,QACO;CACP,MAAM,EAAE,QAAQ,aAAa,MAAM,WAAW,gBAAgB;AAC9D,uBAAsB;EACrB,IAAI,UAAU,UAAU,IAAI,IAAI;AAChC,MAAI,QACH,GAAE,QAAQ;WACA,QAAQ;AAElB,aAAU;IAAE,eAAe;IAAG,SADd,OAAO,OAAO;IACS;AACvC,aAAU,IAAI,KAAK,QAAQ;;AAE5B,eAAa;AACZ,OAAI,SAAS;AACZ,MAAE,QAAQ;AACV,QAAI,QAAQ,kBAAkB,GAAG;AAChC,aAAQ,WAAW;AACnB,eAAU,OAAO,IAAI;;;;IAItB,CAAC,QAAQ,IAAI,CAAC;;;;;ACrBlB,SAAgB,YACf,OACI;CACJ,MAAM,QAAQ,MAAM,WAAW,aAAa;AAC5C,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,SAAS,OAAO,QAAQ,MAAM,CAClC;AACD,QAAO,KAAK,MAAM;;;;;ACNnB,SAAgB,wBAGd,QAA6C,QAAuB;CACrE,MAAM,QAAQ,MAAM,WAAW,aAAa;CAC5C,MAAM,QAAQ,YAAY,OAAO,QAAQ,OAAO;AAChD,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,qBAAqB,OAAO,QAAQ,QAAQ,OAAO,CACvD;AACD,QAAO,KAAK,MAAM;;;;;ACVnB,SAAgB,eACf,OACI;CACJ,MAAM,QAAQ,MAAM,WAAW,aAAa;AAC5C,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,gBAAgB,OAAO,QAAQ,MAAM,CACzC;AACD,QAAO,KAAK,MAAM;;;;;ACLnB,SAAgB,+BAGd,aAAkD,KAAoB;CACvE,MAAM,QAAQ,MAAM,WAAW,aAAa;CAC5C,MAAM,QAAQ,YAAY,OAAO,aAAa,IAAI;AAClD,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,4BAA4B,OAAO,QAAQ,aAAa,IAAI,CAChE;AACD,QAAO,KAAK,MAAM;;;;;ACXnB,SAAgB,gBACf,OACI;CACJ,MAAM,QAAQ,MAAM,WAAW,aAAa;AAC5C,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,aAAa,OAAO,QAAQ,MAAM,CACtC;AACD,QAAO,KAAK,MAAM;;;;;ACNnB,SAAgB,4BACf,aACA,KACI;CACJ,MAAM,QAAQ,MAAM,WAAW,aAAa;CAC5C,MAAM,QAAQ,YAAY,OAAO,aAAa,IAAI;AAClD,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,yBAAyB,OAAO,QAAQ,aAAa,IAAI,CAC7D;AAED,QAAO,KAAK,MAAM;;;;;ACVnB,SAAgB,QACf,OACkE;CAClE,MAAM,QAAQ,MAAM,WAAW,aAAa;AAC5C,oBAAmB,QAAQ,MAAM,QAAQ,WACxC,IAAI,UAAU,OAAO,QAAQ,MAAM,CACnC;CACD,MAAM,QAAQ,KAAK,GAAG,YAAY,MAAM,IAAI;CAC5C,MAAM,SAAS,KAAK,MAAM;AAE1B,QAAO,QAAQ,SAAS;;;;;ACZzB,SAAgB,kBAAkB,OAA8B;CAC/D,MAAM,QAAQ,MAAM,WAAW,aAAa;AAC5C,oBAAmB,WAAW,MAAM,QAAQ,WAAW;AACtD,SAAO,eAAe,OAAO,QAAQ,MAAM;GAC1C"}
|
|
@@ -3,7 +3,7 @@ import * as AtomIO from "atom.io";
|
|
|
3
3
|
import { Hierarchy, JoinToken, MutableAtomToken, PureSelectorFamilyToken, RegularAtomFamilyToken, WritableToken } from "atom.io";
|
|
4
4
|
import { Canonical, Json, stringified } from "atom.io/json";
|
|
5
5
|
import { UList } from "atom.io/transceivers/u-list";
|
|
6
|
-
import { ContinuityToken, Socket } from "atom.io/realtime";
|
|
6
|
+
import { ContinuityToken, RoomKey, Socket, SocketKey, UserKey } from "atom.io/realtime";
|
|
7
7
|
import { ChildProcessWithoutNullStreams } from "node:child_process";
|
|
8
8
|
import { Readable, Writable } from "node:stream";
|
|
9
9
|
|
|
@@ -54,30 +54,6 @@ declare class ChildSocket<I extends Events, O extends Events, P extends ChildPro
|
|
|
54
54
|
constructor(proc: P, key: string, logger?: Pick<Console, `error` | `info` | `warn`>);
|
|
55
55
|
}
|
|
56
56
|
//#endregion
|
|
57
|
-
//#region src/realtime-server/realtime-server-stores/server-room-external-store.d.ts
|
|
58
|
-
declare const ROOMS: Map<string, ChildSocket<any, any, ChildProcessWithoutNullStreams>>;
|
|
59
|
-
declare function spawnRoom(roomId: string, command: string, args: string[], store: Store): Promise<ChildSocket<any, any>>;
|
|
60
|
-
declare function joinRoom(roomId: string, userId: string, socket: Socket, store: Store): {
|
|
61
|
-
leave: () => void;
|
|
62
|
-
roomSocket: ChildSocket<any, any, ChildProcessWithoutNullStreams>;
|
|
63
|
-
} | null;
|
|
64
|
-
declare function leaveRoom(roomId: string, userId: string, store: Store): void;
|
|
65
|
-
declare function destroyRoom(roomId: string, store: Store): void;
|
|
66
|
-
//#endregion
|
|
67
|
-
//#region src/realtime-server/realtime-server-stores/server-user-store.d.ts
|
|
68
|
-
type SocketKey = `socket::${string}`;
|
|
69
|
-
type UserKey = `user::${string}`;
|
|
70
|
-
type RoomKey = `room::${string}`;
|
|
71
|
-
type SocketSystemHierarchy = Hierarchy<[{
|
|
72
|
-
above: `root`;
|
|
73
|
-
below: [UserKey, SocketKey, RoomKey];
|
|
74
|
-
}]>;
|
|
75
|
-
declare const socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>;
|
|
76
|
-
declare const socketIndex: MutableAtomToken<UList<SocketKey>>;
|
|
77
|
-
declare const userIndex: MutableAtomToken<UList<UserKey>>;
|
|
78
|
-
declare const usersOfSockets: JoinToken<`user`, UserKey, `socket`, SocketKey, `1:1`>;
|
|
79
|
-
declare const userMutualSituationalAwarenessIndexes: PureSelectorFamilyToken<UserKey[], UserKey>;
|
|
80
|
-
//#endregion
|
|
81
57
|
//#region src/realtime-server/ipc-sockets/parent-socket.d.ts
|
|
82
58
|
declare class SubjectSocket<I extends Events, O extends Events> extends CustomSocket<I, O> {
|
|
83
59
|
in: Subject<EventPayload<I>>;
|
|
@@ -135,6 +111,44 @@ declare function realtimeMutableProvider({
|
|
|
135
111
|
store
|
|
136
112
|
}: ServerConfig): <Core extends Transceiver<any, Json.Serializable, Json.Serializable>>(token: AtomIO.MutableAtomToken<Core>) => () => void;
|
|
137
113
|
//#endregion
|
|
114
|
+
//#region src/realtime-server/server-config.d.ts
|
|
115
|
+
type ServerConfig = {
|
|
116
|
+
socket: Socket;
|
|
117
|
+
store?: RootStore;
|
|
118
|
+
};
|
|
119
|
+
//#endregion
|
|
120
|
+
//#region src/realtime-server/realtime-server-stores/server-room-external-store.d.ts
|
|
121
|
+
type RoomMap = Map<string, ChildSocket<any, any, ChildProcessWithoutNullStreams>>;
|
|
122
|
+
declare global {
|
|
123
|
+
var ATOM_IO_REALTIME_SERVER_ROOMS: RoomMap;
|
|
124
|
+
}
|
|
125
|
+
declare const ROOMS: RoomMap;
|
|
126
|
+
declare const roomMeta: {
|
|
127
|
+
count: number;
|
|
128
|
+
};
|
|
129
|
+
declare function spawnRoom(store: Store, roomKey: RoomKey, command: string, args: string[]): Promise<ChildSocket<any, any>>;
|
|
130
|
+
declare function joinRoom(store: Store, roomKey: RoomKey, userKey: UserKey, socket: Socket): {
|
|
131
|
+
leave: () => void;
|
|
132
|
+
roomSocket: ChildSocket<any, any, ChildProcessWithoutNullStreams>;
|
|
133
|
+
} | null;
|
|
134
|
+
declare function leaveRoom(store: Store, roomKey: RoomKey, userKey: UserKey): void;
|
|
135
|
+
declare function destroyRoom(store: Store, roomKey: RoomKey): void;
|
|
136
|
+
declare function provideRooms<RoomNames extends string>({
|
|
137
|
+
store,
|
|
138
|
+
socket
|
|
139
|
+
}: ServerConfig, resolveRoomScript: (path: string) => [string, string[]]): void;
|
|
140
|
+
//#endregion
|
|
141
|
+
//#region src/realtime-server/realtime-server-stores/server-user-store.d.ts
|
|
142
|
+
type SocketSystemHierarchy = Hierarchy<[{
|
|
143
|
+
above: `root`;
|
|
144
|
+
below: [UserKey, SocketKey, RoomKey];
|
|
145
|
+
}]>;
|
|
146
|
+
declare const socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>;
|
|
147
|
+
declare const socketKeysAtom: MutableAtomToken<UList<SocketKey>>;
|
|
148
|
+
declare const userKeysAtom: MutableAtomToken<UList<UserKey>>;
|
|
149
|
+
declare const usersOfSockets: JoinToken<`user`, UserKey, `socket`, SocketKey, `1:1`>;
|
|
150
|
+
declare const selfListSelectors: PureSelectorFamilyToken<UserKey[], UserKey>;
|
|
151
|
+
//#endregion
|
|
138
152
|
//#region src/realtime-server/realtime-state-provider.d.ts
|
|
139
153
|
type StateProvider = ReturnType<typeof realtimeStateProvider>;
|
|
140
154
|
declare function realtimeStateProvider({
|
|
@@ -149,11 +163,5 @@ declare function realtimeStateReceiver({
|
|
|
149
163
|
store
|
|
150
164
|
}: ServerConfig): <S extends Json.Serializable, C extends S>(clientToken: WritableToken<C>, serverToken?: WritableToken<S>) => () => void;
|
|
151
165
|
//#endregion
|
|
152
|
-
|
|
153
|
-
type ServerConfig = {
|
|
154
|
-
socket: Socket;
|
|
155
|
-
store?: RootStore;
|
|
156
|
-
};
|
|
157
|
-
//#endregion
|
|
158
|
-
export { ChildProcess, ChildSocket, CustomSocket, EventBuffer, EventPayload, Events, FamilyProvider, MutableFamilyProvider, MutableProvider, ParentProcess, ParentSocket, ProvideContinuity, ROOMS, RoomKey, ServerConfig, SocketKey, SocketSystemHierarchy, StateProvider, StateReceiver, StderrLog, SubjectSocket, UserKey, destroyRoom, joinRoom, leaveRoom, prepareToProvideContinuity, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, socketAtoms, socketIndex, spawnRoom, userIndex, userMutualSituationalAwarenessIndexes, usersOfSockets };
|
|
166
|
+
export { ChildProcess, ChildSocket, CustomSocket, EventBuffer, EventPayload, Events, FamilyProvider, MutableFamilyProvider, MutableProvider, ParentProcess, ParentSocket, ProvideContinuity, ROOMS, RoomMap, ServerConfig, SocketSystemHierarchy, StateProvider, StateReceiver, StderrLog, SubjectSocket, destroyRoom, joinRoom, leaveRoom, prepareToProvideContinuity, provideRooms, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, roomMeta, selfListSelectors, socketAtoms, socketKeysAtom, spawnRoom, userKeysAtom, usersOfSockets };
|
|
159
167
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["ATOM_IO_REALTIME_SERVER_ROOMS: RoomMap","ROOMS: RoomMap","roomMeta: { count: number }","socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>","socketKeysAtom: MutableAtomToken<UList<SocketKey>>","userKeysAtom: MutableAtomToken<UList<UserKey>>","usersOfSockets: JoinToken<\n\t`user`,\n\tUserKey,\n\t`socket`,\n\tSocketKey,\n\t`1:1`\n>","selfListSelectors: PureSelectorFamilyToken<UserKey[], UserKey>"],"sources":["../../src/realtime-server/continuity/provide-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-family-provider.ts","../../src/realtime-server/realtime-mutable-family-provider.ts","../../src/realtime-server/realtime-mutable-provider.ts","../../src/realtime-server/server-config.ts","../../src/realtime-server/realtime-server-stores/server-room-external-store.ts","../../src/realtime-server/realtime-server-stores/server-user-store.ts","../../src/realtime-server/realtime-state-provider.ts","../../src/realtime-server/realtime-state-receiver.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { IMPLICIT, OWN_OP, Subject, actUponStore, editRelationsInStore, findInStore, getFromStore, getJsonToken, getUpdateToken, isRootStore, operateOnStore, setIntoStore, subscribeToState, subscribeToTransaction } from "atom.io/internal";
|
|
1
|
+
import { IMPLICIT, OWN_OP, Subject, actUponStore, editRelationsInStore, findInStore, findRelationsInStore, getFromStore, getInternalRelationsFromStore, getJsonToken, getUpdateToken, isRootStore, operateOnStore, setIntoStore, subscribeToState, subscribeToTransaction } from "atom.io/internal";
|
|
2
2
|
import { atomFamily, join, mutableAtom, selectorFamily } from "atom.io";
|
|
3
3
|
import { parseJson, stringifyJson } from "atom.io/json";
|
|
4
4
|
import { UList } from "atom.io/transceivers/u-list";
|
|
5
|
-
import { employSocket, mutexAtoms,
|
|
5
|
+
import { employSocket, isSocketKey, isUserKey, mutexAtoms, roomKeysAtom, usersInRooms } from "atom.io/realtime";
|
|
6
6
|
import { spawn } from "node:child_process";
|
|
7
7
|
|
|
8
8
|
//#region src/realtime-server/continuity/continuity-store.ts
|
|
@@ -559,13 +559,13 @@ function realtimeAtomFamilyProvider({ socket, store = IMPLICIT.STORE }) {
|
|
|
559
559
|
fillUnsubRequest(token.key);
|
|
560
560
|
}));
|
|
561
561
|
};
|
|
562
|
-
const isAvailable = (exposedSubKeys, subKey) => {
|
|
562
|
+
const isAvailable$1 = (exposedSubKeys, subKey) => {
|
|
563
563
|
for (const exposedSubKey of exposedSubKeys) if (stringifyJson(exposedSubKey) === stringifyJson(subKey)) return true;
|
|
564
564
|
return false;
|
|
565
565
|
};
|
|
566
566
|
const start = () => {
|
|
567
567
|
coreSubscriptions.add(employSocket(socket, `sub:${family.key}`, (subKey) => {
|
|
568
|
-
if (isAvailable(getFromStore(store, index), subKey)) exposeFamilyMembers(subKey);
|
|
568
|
+
if (isAvailable$1(getFromStore(store, index), subKey)) exposeFamilyMembers(subKey);
|
|
569
569
|
else {
|
|
570
570
|
familyMemberSubscriptionsWanted.add(stringifyJson(subKey));
|
|
571
571
|
socket.emit(`unavailable:${family.key}`, subKey);
|
|
@@ -585,6 +585,10 @@ function realtimeAtomFamilyProvider({ socket, store = IMPLICIT.STORE }) {
|
|
|
585
585
|
|
|
586
586
|
//#endregion
|
|
587
587
|
//#region src/realtime-server/realtime-mutable-family-provider.ts
|
|
588
|
+
const isAvailable = (exposedSubKeys, subKey) => {
|
|
589
|
+
for (const exposedSubKey of exposedSubKeys) if (stringifyJson(exposedSubKey) === stringifyJson(subKey)) return true;
|
|
590
|
+
return false;
|
|
591
|
+
};
|
|
588
592
|
function realtimeMutableFamilyProvider({ socket, store = IMPLICIT.STORE }) {
|
|
589
593
|
return function mutableFamilyProvider(family, index) {
|
|
590
594
|
const coreSubscriptions = /* @__PURE__ */ new Set();
|
|
@@ -623,10 +627,6 @@ function realtimeMutableFamilyProvider({ socket, store = IMPLICIT.STORE }) {
|
|
|
623
627
|
fillUnsubRequest(token.key);
|
|
624
628
|
}));
|
|
625
629
|
};
|
|
626
|
-
const isAvailable = (exposedSubKeys, subKey) => {
|
|
627
|
-
for (const exposedSubKey of exposedSubKeys) if (stringifyJson(exposedSubKey) === stringifyJson(subKey)) return true;
|
|
628
|
-
return false;
|
|
629
|
-
};
|
|
630
630
|
const start = () => {
|
|
631
631
|
coreSubscriptions.add(employSocket(socket, `sub:${family.key}`, (subKey) => {
|
|
632
632
|
if (isAvailable(getFromStore(store, index), subKey)) exposeFamilyMembers(subKey);
|
|
@@ -676,10 +676,37 @@ function realtimeMutableProvider({ socket, store = IMPLICIT.STORE }) {
|
|
|
676
676
|
};
|
|
677
677
|
}
|
|
678
678
|
|
|
679
|
+
//#endregion
|
|
680
|
+
//#region src/realtime-server/realtime-server-stores/server-user-store.ts
|
|
681
|
+
const socketAtoms = atomFamily({
|
|
682
|
+
key: `sockets`,
|
|
683
|
+
default: null
|
|
684
|
+
});
|
|
685
|
+
const socketKeysAtom = mutableAtom({
|
|
686
|
+
key: `socketsIndex`,
|
|
687
|
+
class: UList
|
|
688
|
+
});
|
|
689
|
+
const userKeysAtom = mutableAtom({
|
|
690
|
+
key: `usersIndex`,
|
|
691
|
+
class: UList
|
|
692
|
+
});
|
|
693
|
+
const usersOfSockets = join({
|
|
694
|
+
key: `usersOfSockets`,
|
|
695
|
+
between: [`user`, `socket`],
|
|
696
|
+
cardinality: `1:1`,
|
|
697
|
+
isAType: isUserKey,
|
|
698
|
+
isBType: isSocketKey
|
|
699
|
+
});
|
|
700
|
+
const selfListSelectors = selectorFamily({
|
|
701
|
+
key: `selfList`,
|
|
702
|
+
get: (userId) => () => [userId]
|
|
703
|
+
});
|
|
704
|
+
|
|
679
705
|
//#endregion
|
|
680
706
|
//#region src/realtime-server/realtime-server-stores/server-room-external-store.ts
|
|
681
|
-
const ROOMS = /* @__PURE__ */ new Map();
|
|
682
|
-
|
|
707
|
+
const ROOMS = globalThis.ATOM_IO_REALTIME_SERVER_ROOMS ?? (globalThis.ATOM_IO_REALTIME_SERVER_ROOMS = /* @__PURE__ */ new Map());
|
|
708
|
+
const roomMeta = { count: 0 };
|
|
709
|
+
async function spawnRoom(store, roomKey, command, args) {
|
|
683
710
|
const roomSocket = new ChildSocket(await new Promise((resolve) => {
|
|
684
711
|
const room = spawn(command, args, { env: process.env });
|
|
685
712
|
const resolver = (data) => {
|
|
@@ -689,15 +716,15 @@ async function spawnRoom(roomId, command, args, store) {
|
|
|
689
716
|
}
|
|
690
717
|
};
|
|
691
718
|
room.stdout.on(`data`, resolver);
|
|
692
|
-
}),
|
|
693
|
-
ROOMS.set(
|
|
694
|
-
setIntoStore(store,
|
|
719
|
+
}), roomKey);
|
|
720
|
+
ROOMS.set(roomKey, roomSocket);
|
|
721
|
+
setIntoStore(store, roomKeysAtom, (index) => (index.add(roomKey), index));
|
|
695
722
|
roomSocket.on(`close`, () => {
|
|
696
|
-
destroyRoom(
|
|
723
|
+
destroyRoom(store, roomKey);
|
|
697
724
|
});
|
|
698
725
|
return roomSocket;
|
|
699
726
|
}
|
|
700
|
-
function joinRoom(
|
|
727
|
+
function joinRoom(store, roomKey, userKey, socket) {
|
|
701
728
|
const roomQueue = [];
|
|
702
729
|
const pushToRoomQueue = (payload) => {
|
|
703
730
|
roomQueue.push(payload);
|
|
@@ -709,21 +736,21 @@ function joinRoom(roomId, userId, socket, store) {
|
|
|
709
736
|
socket.onAny(forward);
|
|
710
737
|
editRelationsInStore(usersInRooms, (relations) => {
|
|
711
738
|
relations.set({
|
|
712
|
-
room:
|
|
713
|
-
user:
|
|
739
|
+
room: roomKey,
|
|
740
|
+
user: userKey
|
|
714
741
|
});
|
|
715
742
|
}, store);
|
|
716
|
-
const roomSocket = ROOMS.get(
|
|
743
|
+
const roomSocket = ROOMS.get(roomKey);
|
|
717
744
|
if (!roomSocket) {
|
|
718
|
-
store.logger.error(`❌`, `unknown`,
|
|
745
|
+
store.logger.error(`❌`, `unknown`, roomKey, `no room found with this id`);
|
|
719
746
|
return null;
|
|
720
747
|
}
|
|
721
748
|
roomSocket.onAny((...payload) => {
|
|
722
749
|
socket.emit(...payload);
|
|
723
750
|
});
|
|
724
|
-
roomSocket.emit(`user-joins`,
|
|
751
|
+
roomSocket.emit(`user-joins`, userKey);
|
|
725
752
|
toRoom = (payload) => {
|
|
726
|
-
roomSocket.emit(`user::${
|
|
753
|
+
roomSocket.emit(`user::${userKey}`, ...payload);
|
|
727
754
|
};
|
|
728
755
|
while (roomQueue.length > 0) {
|
|
729
756
|
const payload = roomQueue.shift();
|
|
@@ -732,60 +759,63 @@ function joinRoom(roomId, userId, socket, store) {
|
|
|
732
759
|
const leave = () => {
|
|
733
760
|
socket.offAny(forward);
|
|
734
761
|
toRoom([`user-leaves`]);
|
|
735
|
-
leaveRoom(
|
|
762
|
+
leaveRoom(store, roomKey, userKey);
|
|
736
763
|
};
|
|
737
764
|
return {
|
|
738
765
|
leave,
|
|
739
766
|
roomSocket
|
|
740
767
|
};
|
|
741
768
|
}
|
|
742
|
-
function leaveRoom(
|
|
769
|
+
function leaveRoom(store, roomKey, userKey) {
|
|
743
770
|
editRelationsInStore(usersInRooms, (relations) => {
|
|
744
771
|
relations.delete({
|
|
745
|
-
room:
|
|
746
|
-
user:
|
|
772
|
+
room: roomKey,
|
|
773
|
+
user: userKey
|
|
747
774
|
});
|
|
748
775
|
}, store);
|
|
749
776
|
}
|
|
750
|
-
function destroyRoom(
|
|
777
|
+
function destroyRoom(store, roomKey) {
|
|
778
|
+
setIntoStore(store, roomKeysAtom, (s) => (s.delete(roomKey), s));
|
|
751
779
|
editRelationsInStore(usersInRooms, (relations) => {
|
|
752
|
-
relations.delete({ room:
|
|
780
|
+
relations.delete({ room: roomKey });
|
|
753
781
|
}, store);
|
|
754
|
-
|
|
755
|
-
const room = ROOMS.get(roomId);
|
|
782
|
+
const room = ROOMS.get(roomKey);
|
|
756
783
|
if (room) {
|
|
757
784
|
room.emit(`exit`);
|
|
758
|
-
ROOMS.delete(
|
|
785
|
+
ROOMS.delete(roomKey);
|
|
759
786
|
}
|
|
760
787
|
}
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
const
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
});
|
|
768
|
-
const
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
});
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
const
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
const
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
788
|
+
function provideRooms({ store = IMPLICIT.STORE, socket }, resolveRoomScript) {
|
|
789
|
+
const socketKey = `socket::${socket.id}`;
|
|
790
|
+
const userKey = getFromStore(store, findRelationsInStore(usersOfSockets, socketKey, store).userKeyOfSocket);
|
|
791
|
+
const exposeMutable = realtimeMutableProvider({
|
|
792
|
+
socket,
|
|
793
|
+
store
|
|
794
|
+
});
|
|
795
|
+
const exposeMutableFamily = realtimeMutableFamilyProvider({
|
|
796
|
+
socket,
|
|
797
|
+
store
|
|
798
|
+
});
|
|
799
|
+
exposeMutable(roomKeysAtom);
|
|
800
|
+
exposeMutableFamily(getInternalRelationsFromStore(usersInRooms, store), findInStore(store, selfListSelectors, userKey));
|
|
801
|
+
exposeMutableFamily(getInternalRelationsFromStore(usersOfSockets, store), socketKeysAtom);
|
|
802
|
+
socket.on(`createRoom`, async (roomName) => {
|
|
803
|
+
const roomId = `room::${roomMeta.count++}`;
|
|
804
|
+
await spawnRoom(store, roomId, ...resolveRoomScript(roomName));
|
|
805
|
+
socket.on(`deleteRoom:${roomId}`, () => {
|
|
806
|
+
destroyRoom(store, roomId);
|
|
807
|
+
});
|
|
808
|
+
});
|
|
809
|
+
socket.on(`joinRoom`, (roomKey) => {
|
|
810
|
+
const { leave } = joinRoom(store, roomKey, userKey, socket);
|
|
811
|
+
socket.on(`leaveRoom:${roomKey}`, leave);
|
|
812
|
+
});
|
|
813
|
+
socket.on(`disconnect`, () => {
|
|
814
|
+
editRelationsInStore(usersOfSockets, (relations) => relations.delete(socketKey), store);
|
|
815
|
+
if (userKey) setIntoStore(store, userKeysAtom, (index) => (index.delete(userKey), index));
|
|
816
|
+
setIntoStore(store, socketKeysAtom, (index) => (index.delete(socketKey), index));
|
|
817
|
+
});
|
|
818
|
+
}
|
|
789
819
|
|
|
790
820
|
//#endregion
|
|
791
821
|
//#region src/realtime-server/realtime-state-provider.ts
|
|
@@ -860,5 +890,5 @@ function realtimeStateReceiver({ socket, store = IMPLICIT.STORE }) {
|
|
|
860
890
|
}
|
|
861
891
|
|
|
862
892
|
//#endregion
|
|
863
|
-
export { ChildSocket, CustomSocket, ParentSocket, ROOMS, SubjectSocket, destroyRoom, joinRoom, leaveRoom, prepareToProvideContinuity, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, socketAtoms,
|
|
893
|
+
export { ChildSocket, CustomSocket, ParentSocket, ROOMS, SubjectSocket, destroyRoom, joinRoom, leaveRoom, prepareToProvideContinuity, provideRooms, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, roomMeta, selfListSelectors, socketAtoms, socketKeysAtom, spawnRoom, userKeysAtom, usersOfSockets };
|
|
864
894
|
//# sourceMappingURL=index.js.map
|