atom.io 0.46.9 → 0.46.10
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/realtime-react/index.d.ts +2 -2
- package/dist/realtime-react/index.d.ts.map +1 -1
- package/dist/realtime-react/index.js +6 -5
- package/dist/realtime-react/index.js.map +1 -1
- package/package.json +8 -8
- package/src/realtime-react/use-pull-mutable-family-member.ts +0 -2
- package/src/realtime-react/use-realtime-rooms.ts +11 -8
|
@@ -45,13 +45,13 @@ declare function usePush<J extends Json.Serializable>(token: AtomIO.WritableToke
|
|
|
45
45
|
//#endregion
|
|
46
46
|
//#region src/realtime-react/use-realtime-rooms.d.ts
|
|
47
47
|
type RealtimeRoomsTools = {
|
|
48
|
-
|
|
48
|
+
roomSocket: Socket$1<{}, RoomSocketInterface<string>>;
|
|
49
49
|
myRoomKey: RoomKey | undefined;
|
|
50
50
|
myMutualsAtom: MutableAtomToken<UList<UserKey>>;
|
|
51
51
|
myOwnedRoomsAtom: MutableAtomToken<UList<RoomKey>>;
|
|
52
52
|
allRoomKeysAtom: MutableAtomToken<UList<RoomKey>>;
|
|
53
53
|
};
|
|
54
|
-
declare function useRealtimeRooms<RoomNames extends string>(
|
|
54
|
+
declare function useRealtimeRooms<RoomNames extends string>(): RealtimeRoomsTools;
|
|
55
55
|
//#endregion
|
|
56
56
|
//#region src/realtime-react/use-realtime-service.d.ts
|
|
57
57
|
declare function useRealtimeService(key: string, create: (socket: Socket$1) => () => void): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>"],"sources":["../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-realtime-rooms.ts","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;KAKY,sBAAA;;;;KAKA,kBAAA;UACH;YACE,YAAY;;AAPX,cAUCA,eAVD,EAUkB,KAAA,CAAM,OAVxB,CAUgC,kBAVhC,CAAA;AAKA,cAWCC,gBAXD,EAWmB,KAAA,CAAM,EAXzB,CAAA;EACH,QAAA,EAWE,KAAA,CAAM,SAXR;EACc,MAAA,EAWd,QAXc,GAAA,IAAA;CAAZ,CAAA;;;iBCJK,sBAAsB,IAAA,CAAK,qBACnC,MAAA,CAAO,iBAAiB,KAC7B,MAAA,CAAO,OAAO;;;iBCDD,kCACL,IAAA,CAAK,wBACL,mBAEF,MAAA,CAAO,uBAAuB,GAAG,YACjC,QAAQ,KACd,MAAA,CAAO,OAAO;;;iBCPD,yBAAyB,mCACjC,MAAA,CAAO,iBAAiB,KAC7B;;;iBCAa,yCACL,sCACA,wBACI,MAAA,CAAO,uBAAuB,GAAG,SAAS,QAAQ,KAAK;;;iBCLtD,0BAA0B,IAAA,CAAK,qBACvC,MAAA,CAAO,cAAc,KAC1B,MAAA,CAAO,OAAO;;;iBCDD,yCAAyC,wBAC3C,MAAA,CAAO,oBAAoB,GAAG,SACtC,QAAQ,KACX,MAAA,CAAO,OAAO;;;iBCHD,kBAAkB,IAAA,CAAK,qBAC/B,MAAA,CAAO,cAAc,mBACZ,SAAS,aAAa,MAAM;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>"],"sources":["../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-realtime-rooms.ts","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;KAKY,sBAAA;;;;KAKA,kBAAA;UACH;YACE,YAAY;;AAPX,cAUCA,eAVD,EAUkB,KAAA,CAAM,OAVxB,CAUgC,kBAVhC,CAAA;AAKA,cAWCC,gBAXD,EAWmB,KAAA,CAAM,EAXzB,CAAA;EACH,QAAA,EAWE,KAAA,CAAM,SAXR;EACc,MAAA,EAWd,QAXc,GAAA,IAAA;CAAZ,CAAA;;;iBCJK,sBAAsB,IAAA,CAAK,qBACnC,MAAA,CAAO,iBAAiB,KAC7B,MAAA,CAAO,OAAO;;;iBCDD,kCACL,IAAA,CAAK,wBACL,mBAEF,MAAA,CAAO,uBAAuB,GAAG,YACjC,QAAQ,KACd,MAAA,CAAO,OAAO;;;iBCPD,yBAAyB,mCACjC,MAAA,CAAO,iBAAiB,KAC7B;;;iBCAa,yCACL,sCACA,wBACI,MAAA,CAAO,uBAAuB,GAAG,SAAS,QAAQ,KAAK;;;iBCLtD,0BAA0B,IAAA,CAAK,qBACvC,MAAA,CAAO,cAAc,KAC1B,MAAA,CAAO,OAAO;;;iBCDD,yCAAyC,wBAC3C,MAAA,CAAO,oBAAoB,GAAG,SACtC,QAAQ,KACX,MAAA,CAAO,OAAO;;;iBCHD,kBAAkB,IAAA,CAAK,qBAC/B,MAAA,CAAO,cAAc,mBACZ,SAAS,aAAa,MAAM;;;KCIjC,kBAAA;cACC,aAAW;aACZ;iBACI,iBAAiB,MAAM;oBACpB,iBAAiB,MAAM;mBACxB,iBAAiB,MAAM;ARfzC,CAAA;AAKY,iBQYI,gBRZJ,CAAA,kBAAA,MAAA,CAAA,CAAA,CAAA,EQcP,kBRdO;;;iBSJI,kBAAA,+BAEE;;;iBCDF,iBAAA,QAAyB"}
|
|
@@ -5,7 +5,7 @@ import { StoreContext, useI, useO, useSingleEffect } from "atom.io/react";
|
|
|
5
5
|
import * as RT from "atom.io/realtime";
|
|
6
6
|
import { ownersOfRooms, roomKeysAtom, usersInRooms } from "atom.io/realtime";
|
|
7
7
|
import * as RTC from "atom.io/realtime-client";
|
|
8
|
-
import { syncContinuity } from "atom.io/realtime-client";
|
|
8
|
+
import { myUserKeyAtom, syncContinuity } from "atom.io/realtime-client";
|
|
9
9
|
|
|
10
10
|
//#region src/realtime-react/realtime-context.tsx
|
|
11
11
|
const RealtimeContext = React.createContext({
|
|
@@ -90,7 +90,6 @@ function usePullMutableAtomFamilyMember(familyToken, key) {
|
|
|
90
90
|
const store = React.useContext(StoreContext);
|
|
91
91
|
const token = findInStore(store, familyToken, key);
|
|
92
92
|
useRealtimeService(`pull:${token.key}`, (socket) => {
|
|
93
|
-
if (familyToken.key === `usersInRooms/relatedKeys`) {}
|
|
94
93
|
return RTC.pullMutableAtomFamilyMember(store, socket, familyToken, key);
|
|
95
94
|
});
|
|
96
95
|
return useO(token);
|
|
@@ -125,10 +124,11 @@ function usePush(token) {
|
|
|
125
124
|
|
|
126
125
|
//#endregion
|
|
127
126
|
//#region src/realtime-react/use-realtime-rooms.ts
|
|
128
|
-
function useRealtimeRooms(
|
|
127
|
+
function useRealtimeRooms() {
|
|
129
128
|
const store = React.useContext(StoreContext);
|
|
130
129
|
const { socket } = React.useContext(RealtimeContext);
|
|
131
130
|
usePullMutable(roomKeysAtom);
|
|
131
|
+
const userKey = usePullAtom(myUserKeyAtom) ?? `user::$_NONE_$`;
|
|
132
132
|
const [userKeysFamily, roomKeysFamily] = getInternalRelationsFromStore(store, usersInRooms, `split`);
|
|
133
133
|
usePullMutableAtomFamilyMember(roomKeysFamily, userKey);
|
|
134
134
|
const myJoinedRoomKeys = useO(roomKeysFamily, userKey);
|
|
@@ -140,11 +140,12 @@ function useRealtimeRooms(userKey) {
|
|
|
140
140
|
const roomKey = myRoomKey ?? `room::$_NONE_$`;
|
|
141
141
|
const myMutualsAtom = findInStore(store, userKeysFamily, roomKey);
|
|
142
142
|
usePullMutableAtomFamilyMember(userKeysFamily, roomKey);
|
|
143
|
-
const [ownedRoomsFamily] = getInternalRelationsFromStore(store, ownersOfRooms, `split`);
|
|
143
|
+
const [ownedRoomsFamily, roomOwnersFamily] = getInternalRelationsFromStore(store, ownersOfRooms, `split`);
|
|
144
144
|
const myOwnedRoomsAtom = findInStore(store, ownedRoomsFamily, userKey);
|
|
145
145
|
usePullMutableAtomFamilyMember(ownedRoomsFamily, userKey);
|
|
146
|
+
usePullMutableAtomFamilyMember(roomOwnersFamily, roomKey);
|
|
146
147
|
return {
|
|
147
|
-
socket,
|
|
148
|
+
roomSocket: socket,
|
|
148
149
|
myRoomKey,
|
|
149
150
|
allRoomKeysAtom: roomKeysAtom,
|
|
150
151
|
myMutualsAtom,
|
|
@@ -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}>","myRoomKey: RoomKey | undefined","roomKey"],"sources":["../../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-realtime-rooms.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 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","import { useSingleEffect } from \"atom.io/react\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { RealtimeContext } from \"./realtime-context\"\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): AtomIO.ViewOf<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>(\n\tfamily: AtomIO.RegularAtomFamilyToken<J, K>,\n\tsubKey: NoInfer<K>,\n): AtomIO.ViewOf<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\tif (familyToken.key === `usersInRooms/relatedKeys`) {\n\t\t}\n\t\treturn RTC.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): AtomIO.ViewOf<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): AtomIO.ViewOf<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\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 { MutableAtomToken } from \"atom.io\"\nimport { findInStore, getInternalRelationsFromStore } from \"atom.io/internal\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport type { RoomKey, RoomSocketInterface, UserKey } from \"atom.io/realtime\"\nimport { ownersOfRooms, roomKeysAtom, usersInRooms } from \"atom.io/realtime\"\nimport type { UList } from \"atom.io/transceivers/u-list\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { usePullMutable } from \"./use-pull-mutable-atom\"\nimport { usePullMutableAtomFamilyMember } from \"./use-pull-mutable-family-member\"\n\nexport type RealtimeRoomsTools = {\n\tsocket: Socket<{}, RoomSocketInterface<string>>\n\tmyRoomKey: RoomKey | undefined\n\tmyMutualsAtom: MutableAtomToken<UList<UserKey>>\n\tmyOwnedRoomsAtom: MutableAtomToken<UList<RoomKey>>\n\tallRoomKeysAtom: MutableAtomToken<UList<RoomKey>>\n}\nexport function useRealtimeRooms<RoomNames extends string>(\n\tuserKey: UserKey,\n): RealtimeRoomsTools {\n\tconst store = React.useContext(StoreContext)\n\tconst { socket } = React.useContext(RealtimeContext)\n\tusePullMutable(roomKeysAtom)\n\n\tconst [userKeysFamily, roomKeysFamily] = getInternalRelationsFromStore(\n\t\tstore,\n\t\tusersInRooms,\n\t\t`split`,\n\t)\n\n\tusePullMutableAtomFamilyMember(roomKeysFamily, userKey)\n\tconst myJoinedRoomKeys = useO(roomKeysFamily, userKey)\n\tlet myRoomKey: RoomKey | undefined\n\tfor (const roomKey of myJoinedRoomKeys) {\n\t\tmyRoomKey = roomKey\n\t\tbreak\n\t}\n\n\tconst roomKey = myRoomKey ?? `room::$_NONE_$`\n\tconst myMutualsAtom = findInStore(store, userKeysFamily, roomKey)\n\tusePullMutableAtomFamilyMember(userKeysFamily, roomKey)\n\n\tconst [ownedRoomsFamily] = getInternalRelationsFromStore(\n\t\tstore,\n\t\townersOfRooms,\n\t\t`split`,\n\t)\n\tconst myOwnedRoomsAtom = findInStore(store, ownedRoomsFamily, userKey)\n\tusePullMutableAtomFamilyMember(ownedRoomsFamily, userKey)\n\n\treturn {\n\t\tsocket: socket as Socket<{}, RoomSocketInterface<RoomNames>>,\n\t\tmyRoomKey,\n\t\tallRoomKeysAtom: roomKeysAtom,\n\t\tmyMutualsAtom,\n\t\tmyOwnedRoomsAtom,\n\t}\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}>","myRoomKey: RoomKey | undefined","roomKey"],"sources":["../../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-realtime-rooms.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 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","import { useSingleEffect } from \"atom.io/react\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { RealtimeContext } from \"./realtime-context\"\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): AtomIO.ViewOf<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>(\n\tfamily: AtomIO.RegularAtomFamilyToken<J, K>,\n\tsubKey: NoInfer<K>,\n): AtomIO.ViewOf<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\treturn RTC.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): AtomIO.ViewOf<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): AtomIO.ViewOf<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\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 { MutableAtomToken } from \"atom.io\"\nimport { findInStore, getInternalRelationsFromStore } from \"atom.io/internal\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport type { RoomKey, RoomSocketInterface, UserKey } from \"atom.io/realtime\"\nimport { ownersOfRooms, roomKeysAtom, usersInRooms } from \"atom.io/realtime\"\nimport { myUserKeyAtom } from \"atom.io/realtime-client\"\nimport type { UList } from \"atom.io/transceivers/u-list\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { usePullAtom } from \"./use-pull-atom\"\nimport { usePullMutable } from \"./use-pull-mutable-atom\"\nimport { usePullMutableAtomFamilyMember } from \"./use-pull-mutable-family-member\"\n\nexport type RealtimeRoomsTools = {\n\troomSocket: Socket<{}, RoomSocketInterface<string>>\n\tmyRoomKey: RoomKey | undefined\n\tmyMutualsAtom: MutableAtomToken<UList<UserKey>>\n\tmyOwnedRoomsAtom: MutableAtomToken<UList<RoomKey>>\n\tallRoomKeysAtom: MutableAtomToken<UList<RoomKey>>\n}\nexport function useRealtimeRooms<\n\tRoomNames extends string,\n>(): RealtimeRoomsTools {\n\tconst store = React.useContext(StoreContext)\n\tconst { socket } = React.useContext(RealtimeContext)\n\tusePullMutable(roomKeysAtom)\n\tconst userKey = usePullAtom(myUserKeyAtom) ?? `user::$_NONE_$`\n\n\tconst [userKeysFamily, roomKeysFamily] = getInternalRelationsFromStore(\n\t\tstore,\n\t\tusersInRooms,\n\t\t`split`,\n\t)\n\tusePullMutableAtomFamilyMember(roomKeysFamily, userKey)\n\n\tconst myJoinedRoomKeys = useO(roomKeysFamily, userKey)\n\tlet myRoomKey: RoomKey | undefined\n\tfor (const roomKey of myJoinedRoomKeys) {\n\t\tmyRoomKey = roomKey\n\t\tbreak\n\t}\n\tconst roomKey = myRoomKey ?? `room::$_NONE_$`\n\tconst myMutualsAtom = findInStore(store, userKeysFamily, roomKey)\n\tusePullMutableAtomFamilyMember(userKeysFamily, roomKey)\n\n\tconst [ownedRoomsFamily, roomOwnersFamily] = getInternalRelationsFromStore(\n\t\tstore,\n\t\townersOfRooms,\n\t\t`split`,\n\t)\n\tconst myOwnedRoomsAtom = findInStore(store, ownedRoomsFamily, userKey)\n\tusePullMutableAtomFamilyMember(ownedRoomsFamily, userKey)\n\tusePullMutableAtomFamilyMember(roomOwnersFamily, roomKey)\n\n\treturn {\n\t\troomSocket: socket as Socket<{}, RoomSocketInterface<RoomNames>>,\n\t\tmyRoomKey,\n\t\tallRoomKeysAtom: roomKeysAtom,\n\t\tmyMutualsAtom,\n\t\tmyOwnedRoomsAtom,\n\t}\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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "atom.io",
|
|
3
|
-
"version": "0.46.
|
|
3
|
+
"version": "0.46.10",
|
|
4
4
|
"description": "Composable and testable reactive data library.",
|
|
5
5
|
"homepage": "https://atom.io.fyi",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -70,10 +70,10 @@
|
|
|
70
70
|
"@types/node": "25.0.3",
|
|
71
71
|
"@types/react": "19.2.7",
|
|
72
72
|
"@types/tmp": "0.2.6",
|
|
73
|
-
"@typescript-eslint/parser": "8.50.
|
|
74
|
-
"@typescript-eslint/rule-tester": "8.50.
|
|
75
|
-
"@typescript-eslint/utils": "8.50.
|
|
76
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
73
|
+
"@typescript-eslint/parser": "8.50.1",
|
|
74
|
+
"@typescript-eslint/rule-tester": "8.50.1",
|
|
75
|
+
"@typescript-eslint/utils": "8.50.1",
|
|
76
|
+
"@typescript/native-preview": "7.0.0-dev.20251223.1",
|
|
77
77
|
"@vitest/coverage-v8": "4.0.16",
|
|
78
78
|
"@vitest/ui": "4.0.16",
|
|
79
79
|
"arktype": "2.1.29",
|
|
@@ -85,13 +85,13 @@
|
|
|
85
85
|
"http-proxy": "1.18.1",
|
|
86
86
|
"motion": "12.23.26",
|
|
87
87
|
"postgres": "3.4.7",
|
|
88
|
-
"preact": "10.28.
|
|
88
|
+
"preact": "10.28.1",
|
|
89
89
|
"react": "19.2.3",
|
|
90
90
|
"react-dom": "19.2.3",
|
|
91
91
|
"react-router-dom": "7.11.0",
|
|
92
92
|
"recoverage": "0.1.13",
|
|
93
|
-
"socket.io": "4.8.
|
|
94
|
-
"socket.io-client": "4.8.
|
|
93
|
+
"socket.io": "4.8.3",
|
|
94
|
+
"socket.io-client": "4.8.3",
|
|
95
95
|
"storybook": "10.1.10",
|
|
96
96
|
"tmp": "0.2.5",
|
|
97
97
|
"tsdown": "0.18.2",
|
|
@@ -15,8 +15,6 @@ export function usePullMutableAtomFamilyMember<
|
|
|
15
15
|
const store = React.useContext(StoreContext)
|
|
16
16
|
const token = findInStore(store, familyToken, key)
|
|
17
17
|
useRealtimeService(`pull:${token.key}`, (socket) => {
|
|
18
|
-
if (familyToken.key === `usersInRooms/relatedKeys`) {
|
|
19
|
-
}
|
|
20
18
|
return RTC.pullMutableAtomFamilyMember(store, socket, familyToken, key)
|
|
21
19
|
})
|
|
22
20
|
return useO(token)
|
|
@@ -3,56 +3,59 @@ import { findInStore, getInternalRelationsFromStore } from "atom.io/internal"
|
|
|
3
3
|
import { StoreContext, useO } from "atom.io/react"
|
|
4
4
|
import type { RoomKey, RoomSocketInterface, UserKey } from "atom.io/realtime"
|
|
5
5
|
import { ownersOfRooms, roomKeysAtom, usersInRooms } from "atom.io/realtime"
|
|
6
|
+
import { myUserKeyAtom } from "atom.io/realtime-client"
|
|
6
7
|
import type { UList } from "atom.io/transceivers/u-list"
|
|
7
8
|
import * as React from "react"
|
|
8
9
|
import type { Socket } from "socket.io-client"
|
|
9
10
|
|
|
10
11
|
import { RealtimeContext } from "./realtime-context"
|
|
12
|
+
import { usePullAtom } from "./use-pull-atom"
|
|
11
13
|
import { usePullMutable } from "./use-pull-mutable-atom"
|
|
12
14
|
import { usePullMutableAtomFamilyMember } from "./use-pull-mutable-family-member"
|
|
13
15
|
|
|
14
16
|
export type RealtimeRoomsTools = {
|
|
15
|
-
|
|
17
|
+
roomSocket: Socket<{}, RoomSocketInterface<string>>
|
|
16
18
|
myRoomKey: RoomKey | undefined
|
|
17
19
|
myMutualsAtom: MutableAtomToken<UList<UserKey>>
|
|
18
20
|
myOwnedRoomsAtom: MutableAtomToken<UList<RoomKey>>
|
|
19
21
|
allRoomKeysAtom: MutableAtomToken<UList<RoomKey>>
|
|
20
22
|
}
|
|
21
|
-
export function useRealtimeRooms<
|
|
22
|
-
|
|
23
|
-
): RealtimeRoomsTools {
|
|
23
|
+
export function useRealtimeRooms<
|
|
24
|
+
RoomNames extends string,
|
|
25
|
+
>(): RealtimeRoomsTools {
|
|
24
26
|
const store = React.useContext(StoreContext)
|
|
25
27
|
const { socket } = React.useContext(RealtimeContext)
|
|
26
28
|
usePullMutable(roomKeysAtom)
|
|
29
|
+
const userKey = usePullAtom(myUserKeyAtom) ?? `user::$_NONE_$`
|
|
27
30
|
|
|
28
31
|
const [userKeysFamily, roomKeysFamily] = getInternalRelationsFromStore(
|
|
29
32
|
store,
|
|
30
33
|
usersInRooms,
|
|
31
34
|
`split`,
|
|
32
35
|
)
|
|
33
|
-
|
|
34
36
|
usePullMutableAtomFamilyMember(roomKeysFamily, userKey)
|
|
37
|
+
|
|
35
38
|
const myJoinedRoomKeys = useO(roomKeysFamily, userKey)
|
|
36
39
|
let myRoomKey: RoomKey | undefined
|
|
37
40
|
for (const roomKey of myJoinedRoomKeys) {
|
|
38
41
|
myRoomKey = roomKey
|
|
39
42
|
break
|
|
40
43
|
}
|
|
41
|
-
|
|
42
44
|
const roomKey = myRoomKey ?? `room::$_NONE_$`
|
|
43
45
|
const myMutualsAtom = findInStore(store, userKeysFamily, roomKey)
|
|
44
46
|
usePullMutableAtomFamilyMember(userKeysFamily, roomKey)
|
|
45
47
|
|
|
46
|
-
const [ownedRoomsFamily] = getInternalRelationsFromStore(
|
|
48
|
+
const [ownedRoomsFamily, roomOwnersFamily] = getInternalRelationsFromStore(
|
|
47
49
|
store,
|
|
48
50
|
ownersOfRooms,
|
|
49
51
|
`split`,
|
|
50
52
|
)
|
|
51
53
|
const myOwnedRoomsAtom = findInStore(store, ownedRoomsFamily, userKey)
|
|
52
54
|
usePullMutableAtomFamilyMember(ownedRoomsFamily, userKey)
|
|
55
|
+
usePullMutableAtomFamilyMember(roomOwnersFamily, roomKey)
|
|
53
56
|
|
|
54
57
|
return {
|
|
55
|
-
|
|
58
|
+
roomSocket: socket as Socket<{}, RoomSocketInterface<RoomNames>>,
|
|
56
59
|
myRoomKey,
|
|
57
60
|
allRoomKeysAtom: roomKeysAtom,
|
|
58
61
|
myMutualsAtom,
|