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.
@@ -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
- socket: Socket$1<{}, RoomSocketInterface<string>>;
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>(userKey: UserKey): RealtimeRoomsTools;
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;;;KCEjC,kBAAA;UACH,aAAW;aACR;iBACI,iBAAiB,MAAM;oBACpB,iBAAiB,MAAM;mBACxB,iBAAiB,MAAM;ARbzC,CAAA;AAKY,iBQUI,gBRVJ,CAAA,kBAAA,MAAA,CAAA,CAAA,OAAA,EQWF,ORXE,CAAA,EQYT,kBRZS;;;iBSJI,kBAAA,+BAEE;;;iBCDF,iBAAA,QAAyB"}
1
+ {"version":3,"file":"index.d.ts","names":["RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>"],"sources":["../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-realtime-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(userKey) {
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.9",
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.0",
74
- "@typescript-eslint/rule-tester": "8.50.0",
75
- "@typescript-eslint/utils": "8.50.0",
76
- "@typescript/native-preview": "7.0.0-dev.20251221.1",
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.0",
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.1",
94
- "socket.io-client": "4.8.1",
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
- socket: Socket<{}, RoomSocketInterface<string>>
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<RoomNames extends string>(
22
- userKey: UserKey,
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
- socket: socket as Socket<{}, RoomSocketInterface<RoomNames>>,
58
+ roomSocket: socket as Socket<{}, RoomSocketInterface<RoomNames>>,
56
59
  myRoomKey,
57
60
  allRoomKeysAtom: roomKeysAtom,
58
61
  myMutualsAtom,