atom.io 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/data/dist/index.cjs +62 -40
  2. package/data/dist/index.cjs.map +1 -1
  3. package/data/dist/index.d.ts +8 -2
  4. package/data/dist/index.js +64 -42
  5. package/data/dist/index.js.map +1 -1
  6. package/data/src/dict.ts +8 -4
  7. package/data/src/join.ts +74 -33
  8. package/data/src/struct-family.ts +18 -17
  9. package/dist/chunk-OEVFAUPE.js +289 -0
  10. package/dist/chunk-OEVFAUPE.js.map +1 -0
  11. package/dist/index.cjs +4 -10
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.d.ts +62 -51
  14. package/dist/index.js +5 -11
  15. package/dist/index.js.map +1 -1
  16. package/internal/dist/index.cjs +163 -64
  17. package/internal/dist/index.cjs.map +1 -1
  18. package/internal/dist/index.d.ts +94 -70
  19. package/internal/dist/index.js +155 -59
  20. package/internal/dist/index.js.map +1 -1
  21. package/internal/src/arbitrary.ts +3 -0
  22. package/internal/src/caching.ts +8 -6
  23. package/internal/src/families/find-in-store.ts +16 -0
  24. package/internal/src/get-environment-data.ts +4 -7
  25. package/internal/src/index.ts +6 -5
  26. package/internal/src/ingest-updates/ingest-transaction-update.ts +0 -1
  27. package/internal/src/selector/create-standalone-selector.ts +0 -2
  28. package/internal/src/set-state/set-atom.ts +14 -18
  29. package/internal/src/store/store.ts +14 -2
  30. package/internal/src/store/withdraw.ts +72 -2
  31. package/internal/src/subscribe/subscribe-to-timeline.ts +2 -2
  32. package/internal/src/subscribe/subscribe-to-transaction.ts +2 -2
  33. package/internal/src/timeline/create-timeline.ts +12 -1
  34. package/internal/src/transaction/act-upon-store.ts +19 -0
  35. package/internal/src/transaction/apply-transaction.ts +7 -1
  36. package/internal/src/transaction/assign-transaction-to-continuity.ts +18 -0
  37. package/internal/src/transaction/build-transaction.ts +7 -6
  38. package/internal/src/transaction/create-transaction.ts +1 -1
  39. package/internal/src/transaction/get-epoch-number.ts +40 -0
  40. package/internal/src/transaction/index.ts +10 -1
  41. package/internal/src/transaction/set-epoch-number.ts +31 -0
  42. package/introspection/dist/index.cjs.map +1 -1
  43. package/introspection/dist/index.d.ts +3 -3
  44. package/introspection/dist/index.js.map +1 -1
  45. package/introspection/src/attach-introspection-states.ts +6 -2
  46. package/introspection/src/attach-timeline-family.ts +5 -2
  47. package/introspection/src/attach-transaction-logs.ts +2 -2
  48. package/json/dist/index.d.ts +3 -1
  49. package/json/src/index.ts +6 -2
  50. package/package.json +24 -13
  51. package/react/dist/index.cjs.map +1 -1
  52. package/react/dist/index.d.ts +1 -1
  53. package/react/dist/index.js.map +1 -1
  54. package/react/src/use-json.ts +1 -1
  55. package/react-devtools/dist/index.cjs +131 -134
  56. package/react-devtools/dist/index.cjs.map +1 -1
  57. package/react-devtools/dist/index.css +2 -2
  58. package/react-devtools/dist/index.css.map +1 -1
  59. package/react-devtools/dist/index.d.ts +3 -3
  60. package/react-devtools/dist/index.js +103 -106
  61. package/react-devtools/dist/index.js.map +1 -1
  62. package/react-devtools/src/StateEditor.tsx +6 -6
  63. package/react-devtools/src/StateIndex.tsx +2 -5
  64. package/react-devtools/src/TimelineIndex.tsx +3 -3
  65. package/react-devtools/src/TransactionIndex.tsx +9 -8
  66. package/react-devtools/src/Updates.tsx +1 -1
  67. package/react-devtools/src/index.ts +4 -4
  68. package/realtime/dist/index.cjs +72 -0
  69. package/realtime/dist/index.cjs.map +1 -0
  70. package/realtime/dist/index.d.ts +39 -0
  71. package/realtime/dist/index.js +68 -0
  72. package/realtime/dist/index.js.map +1 -0
  73. package/realtime/package.json +16 -0
  74. package/realtime/src/index.ts +1 -0
  75. package/realtime/src/realtime-continuity.ts +152 -0
  76. package/realtime-client/dist/index.cjs +389 -48
  77. package/realtime-client/dist/index.cjs.map +1 -1
  78. package/realtime-client/dist/index.d.ts +16 -9
  79. package/realtime-client/dist/index.js +100 -37
  80. package/realtime-client/dist/index.js.map +1 -1
  81. package/realtime-client/src/index.ts +8 -5
  82. package/realtime-client/src/{pull-family-member.ts → pull-atom-family-member.ts} +2 -2
  83. package/realtime-client/src/{pull-state.ts → pull-atom.ts} +2 -2
  84. package/realtime-client/src/{pull-mutable-family-member.ts → pull-mutable-atom-family-member.ts} +1 -1
  85. package/realtime-client/src/{pull-mutable.ts → pull-mutable-atom.ts} +1 -1
  86. package/realtime-client/src/pull-selector-family-member.ts +42 -0
  87. package/realtime-client/src/pull-selector.ts +38 -0
  88. package/realtime-client/src/realtime-client-stores/client-main-store.ts +2 -2
  89. package/realtime-client/src/realtime-client-stores/client-sync-store.ts +7 -7
  90. package/realtime-client/src/sync-continuity.ts +321 -0
  91. package/realtime-client/src/sync-server-action.ts +18 -20
  92. package/realtime-react/dist/index.cjs +330 -15
  93. package/realtime-react/dist/index.cjs.map +1 -1
  94. package/realtime-react/dist/index.d.ts +26 -6
  95. package/realtime-react/dist/index.js +43 -12
  96. package/realtime-react/dist/index.js.map +1 -1
  97. package/realtime-react/src/index.ts +6 -3
  98. package/realtime-react/src/use-pull-atom-family-member.ts +21 -0
  99. package/realtime-react/src/{use-pull-family-member.ts → use-pull-atom.ts} +6 -5
  100. package/realtime-react/src/{use-pull-mutable.ts → use-pull-mutable-atom.ts} +4 -3
  101. package/realtime-react/src/use-pull-mutable-family-member.ts +9 -4
  102. package/realtime-react/src/use-pull-selector-family-member.ts +21 -0
  103. package/realtime-react/src/{use-pull.ts → use-pull-selector.ts} +7 -5
  104. package/realtime-react/src/use-push.ts +3 -2
  105. package/realtime-react/src/use-server-action.ts +3 -2
  106. package/realtime-react/src/use-sync-continuity.ts +12 -0
  107. package/realtime-react/src/use-sync-server-action.ts +3 -2
  108. package/realtime-server/dist/index.cjs +568 -242
  109. package/realtime-server/dist/index.cjs.map +1 -1
  110. package/realtime-server/dist/index.d.ts +124 -49
  111. package/realtime-server/dist/index.js +555 -238
  112. package/realtime-server/dist/index.js.map +1 -1
  113. package/realtime-server/src/index.ts +18 -2
  114. package/realtime-server/src/ipc-socket.ts +230 -0
  115. package/realtime-server/src/realtime-action-receiver.ts +8 -5
  116. package/realtime-server/src/realtime-action-synchronizer.ts +40 -28
  117. package/realtime-server/src/realtime-continuity-synchronizer.ts +247 -0
  118. package/realtime-server/src/realtime-family-provider.ts +30 -71
  119. package/realtime-server/src/realtime-mutable-family-provider.ts +24 -86
  120. package/realtime-server/src/realtime-server-stores/index.ts +3 -1
  121. package/realtime-server/src/realtime-server-stores/realtime-continuity-store.ts +90 -0
  122. package/realtime-server/src/realtime-server-stores/server-room-store.ts +97 -0
  123. package/realtime-server/src/realtime-server-stores/server-sync-store.ts +2 -72
  124. package/realtime-server/src/realtime-server-stores/server-user-store.ts +14 -29
  125. package/realtime-server/src/realtime-state-receiver.ts +0 -1
  126. package/realtime-testing/dist/index.cjs +28 -28
  127. package/realtime-testing/dist/index.cjs.map +1 -1
  128. package/realtime-testing/dist/index.js +28 -27
  129. package/realtime-testing/dist/index.js.map +1 -1
  130. package/realtime-testing/src/setup-realtime-test.tsx +38 -28
  131. package/src/atom.ts +49 -31
  132. package/src/logger.ts +10 -5
  133. package/src/selector.ts +44 -25
  134. package/src/subscribe.ts +2 -1
  135. package/src/timeline.ts +4 -4
  136. package/src/transaction.ts +13 -17
  137. package/src/validators.ts +15 -9
  138. package/dist/chunk-H4Q5FTPZ.js +0 -11
  139. package/dist/chunk-H4Q5FTPZ.js.map +0 -1
  140. package/internal/src/set-state/copy-mutable-in-transaction.ts +0 -19
@@ -1,9 +1,10 @@
1
+ import { syncContinuity } from '../../dist/chunk-OEVFAUPE.js';
1
2
  import '../../dist/chunk-PZLG2HP3.js';
2
3
  import { useI, StoreContext, useO } from 'atom.io/react';
3
4
  import * as RTC from 'atom.io/realtime-client';
4
5
  import * as React from 'react';
5
6
  import { jsx } from 'react/jsx-runtime';
6
- import * as AtomIO from 'atom.io';
7
+ import { findInStore, actUponStore, arbitrary } from 'atom.io/internal';
7
8
 
8
9
  var RealtimeContext = React.createContext({
9
10
  socket: null,
@@ -78,34 +79,57 @@ function useRealtimeService(key, create) {
78
79
  });
79
80
  }
80
81
 
81
- // realtime-react/src/use-pull.ts
82
- function usePull(token) {
82
+ // realtime-react/src/use-pull-atom.ts
83
+ function usePullAtom(token) {
83
84
  const store = React.useContext(StoreContext);
84
85
  useRealtimeService(
85
86
  `pull:${token.key}`,
86
- (socket) => RTC.pullState(token, socket, store)
87
+ (socket) => RTC.pullAtom(token, socket, store)
87
88
  );
89
+ return useO(token);
88
90
  }
89
- function usePullFamilyMember(token) {
91
+ function usePullAtomFamilyMember(family, subKey) {
90
92
  const store = React.useContext(StoreContext);
93
+ const token = findInStore(family, subKey, store);
91
94
  useRealtimeService(
92
95
  `pull:${token.key}`,
93
- (socket) => RTC.pullFamilyMember(token, socket, store)
96
+ (socket) => RTC.pullAtomFamilyMember(token, socket, store)
94
97
  );
98
+ return useO(token);
95
99
  }
96
100
  function usePullMutable(token) {
97
101
  const store = React.useContext(StoreContext);
98
102
  useRealtimeService(
99
103
  `pull:${token.key}`,
100
- (socket) => RTC.pullMutableState(token, socket, store)
104
+ (socket) => RTC.pullMutableAtom(token, socket, store)
105
+ );
106
+ return useO(token);
107
+ }
108
+ function usePullMutableAtomFamilyMember(familyToken, key) {
109
+ const store = React.useContext(StoreContext);
110
+ const token = findInStore(familyToken, key, store);
111
+ useRealtimeService(
112
+ `pull:${token.key}`,
113
+ (socket) => RTC.pullMutableAtomFamilyMember(token, socket, store)
114
+ );
115
+ return useO(token);
116
+ }
117
+ function usePullSelector(token) {
118
+ const store = React.useContext(StoreContext);
119
+ useRealtimeService(
120
+ `pull:${token.key}`,
121
+ (socket) => RTC.pullSelector(token, socket, store)
101
122
  );
123
+ return useO(token);
102
124
  }
103
- function usePullMutableFamilyMember(token) {
125
+ function usePullSelectorFamilyMember(familyToken, key) {
104
126
  const store = React.useContext(StoreContext);
127
+ const token = findInStore(familyToken, key, store);
105
128
  useRealtimeService(
106
129
  `pull:${token.key}`,
107
- (socket) => RTC.pullMutableFamilyMember(token, socket, store)
130
+ (socket) => RTC.pullSelectorFamilyMember(token, socket, store)
108
131
  );
132
+ return useO(token);
109
133
  }
110
134
  function usePush(token) {
111
135
  const store = React.useContext(StoreContext);
@@ -113,6 +137,7 @@ function usePush(token) {
113
137
  `push:${token.key}`,
114
138
  (socket) => RTC.pushState(token, socket, store)
115
139
  );
140
+ return useI(token);
116
141
  }
117
142
  function useServerAction(token) {
118
143
  const store = React.useContext(StoreContext);
@@ -120,14 +145,20 @@ function useServerAction(token) {
120
145
  `tx:${token.key}`,
121
146
  (socket) => RTC.serverAction(token, socket, store)
122
147
  );
123
- return AtomIO.runTransaction(token, void 0, store);
148
+ return actUponStore(token, arbitrary(), store);
149
+ }
150
+ function useSyncContinuity(token) {
151
+ const store = React.useContext(StoreContext);
152
+ useRealtimeService(`tx-sync:${token.key}`, (socket) => {
153
+ return syncContinuity(token, socket, store);
154
+ });
124
155
  }
125
156
  function useSyncAction(token) {
126
157
  const store = React.useContext(StoreContext);
127
158
  useRealtimeService(`tx-sync:${token.key}`, (socket) => {
128
159
  return RTC.syncAction(token, socket, store);
129
160
  });
130
- return AtomIO.runTransaction(token, void 0, store);
161
+ return actUponStore(token, arbitrary(), store);
131
162
  }
132
163
  function useSync(token) {
133
164
  const store = React.useContext(StoreContext);
@@ -138,6 +169,6 @@ function useSync(token) {
138
169
  return useO(token);
139
170
  }
140
171
 
141
- export { RealtimeContext, RealtimeProvider, usePull, usePullFamilyMember, usePullMutable, usePullMutableFamilyMember, usePush, useServerAction, useSync, useSyncAction };
172
+ export { RealtimeContext, RealtimeProvider, usePullAtom, usePullAtomFamilyMember, usePullMutable, usePullMutableAtomFamilyMember, usePullSelector, usePullSelectorFamilyMember, usePush, useServerAction, useSync, useSyncAction, useSyncContinuity };
142
173
  //# sourceMappingURL=out.js.map
143
174
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/realtime-context.tsx","../src/use-pull.ts","../src/use-realtime-service.ts","../src/use-single-effect.ts","../src/on-mount.ts","../src/use-pull-family-member.ts","../src/use-pull-mutable.ts","../src/use-pull-mutable-family-member.ts","../src/use-push.ts","../src/use-server-action.ts","../src/use-sync-server-action.ts","../src/use-sync.ts"],"names":["RTC","React","StoreContext","AtomIO"],"mappings":";;;AAAA,SAAS,YAAY;AACrB,YAAY,SAAS;AACrB,YAAY,WAAW;AAgCrB;AArBK,IAAM,kBAAwB,oBAAkC;AAAA,EACtE,QAAQ;AAAA,EACR,UAAU;AACX,CAAC;AAEM,IAAM,mBAGR,CAAC,EAAE,UAAU,OAAO,MAAM;AAC9B,QAAM,WAAiB,aAAO,oBAAI,IAAkC,CAAC,EAAE;AACvE,QAAM,UAAU,KAAS,uBAAmB;AAC5C,EAAM,gBAAU,MAAM;AACrB,YAAQ,iCAAQ,EAAE;AAClB,qCAAQ,GAAG,WAAW,MAAM;AAC3B,cAAQ,OAAO,EAAE;AAAA,IAClB;AACA,qCAAQ,GAAG,cAAc,MAAM;AAC9B,cAAQ,MAAS;AAAA,IAClB;AAAA,EACD,GAAG,CAAC,QAAQ,OAAO,CAAC;AACpB,SACC,oBAAC,gBAAgB,UAAhB,EAAyB,OAAO,EAAE,QAAQ,SAAS,GAClD,UACF;AAEF;;;ACpCA,SAAS,oBAAoB;AAC7B,YAAYA,UAAS;AACrB,YAAYC,YAAW;;;ACJvB,YAAYA,YAAW;;;ACAvB,YAAYA,YAAW;AAEvB,IAAM,EAAE,SAAS,IAAI,QAAQ;AAC7B,IAAM,SAAS,aAAa,iBAAiB,aAAa;AAE1D,SAAS,OAAO;AAAC;AAEV,SAAS,gBACf,QACA,MACO;AACP,MAAI,QAAQ;AACX,UAAM,UAAgB,cAAmB,IAAI;AAC7C,IAAM,iBAAU,MAAM;AAbxB;AAcG,UAAI,UAAU,QAAQ;AACtB,UAAI,YAAY,MAAM;AACrB,mBAAU,YAAO,MAAP,YAAY;AACtB,gBAAQ,UAAU;AAAA,MACnB,OAAO;AACN,eAAO,MAAM;AACZ,kBAAQ;AACR,kBAAQ,UAAU;AAAA,QACnB;AAAA,MACD;AAAA,IACD,GAAG,IAAI;AAAA,EACR,OAAO;AACN,IAAM,iBAAU,QAAQ,IAAI;AAAA,EAC7B;AACD;;;AC1BO,SAAS,QAAQ,QAA8C;AACrE,kBAAgB,QAAQ,CAAC,CAAC;AAC3B;;;AFCO,SAAS,mBACf,KACA,QACO;AACP,QAAM,EAAE,QAAQ,SAAS,IAAU,kBAAW,eAAe;AAC7D,UAAQ,MAAM;AACb,QAAI,UAAU,qCAAU,IAAI;AAC5B,QAAI,SAAS;AACZ,cAAQ,CAAC;AAAA,IACV,OAAO;AACN,YAAM,UAAU,SAAS,OAAO,MAAM,IAAI;AAC1C,gBAAU,CAAC,GAAG,OAAO;AACrB,2CAAU,IAAI,KAAK;AAAA,IACpB;AACA,WAAO,MAAM;AAnBf;AAoBG,UAAI,SAAS;AACZ,gBAAQ,CAAC;AACT,YAAI,QAAQ,CAAC,MAAM,GAAG;AACrB,wBAAQ,OAAR;AACA,+CAAU,OAAO;AAAA,QAClB;AAAA,MACD;AAAA,IACD;AAAA,EACD,CAAC;AACF;;;ADrBO,SAAS,QACf,OACO;AACP,QAAM,QAAc,kBAAW,YAAY;AAC3C;AAAA,IAAmB,QAAQ,MAAM,GAAG;AAAA,IAAI,CAAC,WACpC,eAAU,OAAO,QAAQ,KAAK;AAAA,EACnC;AACD;;;AIbA,SAAS,gBAAAC,qBAAoB;AAC7B,YAAYF,UAAS;AACrB,YAAYC,YAAW;AAIhB,SAAS,oBACf,OACO;AACP,QAAM,QAAc,kBAAWC,aAAY;AAC3C;AAAA,IAAmB,QAAQ,MAAM,GAAG;AAAA,IAAI,CAAC,WACpC,sBAAiB,OAAO,QAAQ,KAAK;AAAA,EAC1C;AACD;;;ACZA,SAAS,gBAAAA,qBAAoB;AAC7B,YAAYF,UAAS;AACrB,YAAYC,YAAW;AAIhB,SAAS,eAGd,OAA4C;AAC7C,QAAM,QAAc,kBAAWC,aAAY;AAC3C;AAAA,IAAmB,QAAQ,MAAM,GAAG;AAAA,IAAI,CAAC,WACpC,sBAAiB,OAAO,QAAQ,KAAK;AAAA,EAC1C;AACD;;;ACdA,SAAS,gBAAAA,qBAAoB;AAC7B,YAAYF,UAAS;AACrB,YAAYC,YAAW;AAIhB,SAAS,2BAGd,OAA4C;AAC7C,QAAM,QAAc,kBAAWC,aAAY;AAC3C;AAAA,IAAmB,QAAQ,MAAM,GAAG;AAAA,IAAI,CAAC,WACpC,6BAAwB,OAAO,QAAQ,KAAK;AAAA,EACjD;AACD;;;ACfA,SAAS,gBAAAA,qBAAoB;AAC7B,YAAYF,UAAS;AACrB,YAAYC,YAAW;AAIhB,SAAS,QACf,OACO;AACP,QAAM,QAAc,kBAAWC,aAAY;AAC3C;AAAA,IAAmB,QAAQ,MAAM,GAAG;AAAA,IAAI,CAAC,WACpC,eAAU,OAAO,QAAQ,KAAK;AAAA,EACnC;AACD;;;ACfA,YAAY,YAAY;AACxB,SAAS,gBAAAA,qBAAoB;AAC7B,YAAYF,UAAS;AACrB,YAAYC,YAAW;AAIhB,SAAS,gBACf,OACkD;AAClD,QAAM,QAAc,kBAAWC,aAAY;AAE3C;AAAA,IAAmB,MAAM,MAAM,GAAG;AAAA,IAAI,CAAC,WAClC,kBAAa,OAAO,QAAQ,KAAK;AAAA,EACtC;AACA,SAAc,sBAAe,OAAO,QAAW,KAAK;AACrD;;;AChBA,YAAYC,aAAY;AACxB,SAAS,gBAAAD,qBAAoB;AAC7B,YAAYF,UAAS;AACrB,YAAYC,aAAW;AAIhB,SAAS,cACf,OACkD;AAClD,QAAM,QAAc,mBAAWC,aAAY;AAC3C,qBAAmB,WAAW,MAAM,GAAG,IAAI,CAAC,WAAW;AACtD,WAAW,gBAAW,OAAO,QAAQ,KAAK;AAAA,EAC3C,CAAC;AACD,SAAc,uBAAe,OAAO,QAAW,KAAK;AACrD;;;ACbA,SAAS,gBAAAA,eAAc,YAAY;AACnC,YAAYF,UAAS;AACrB,YAAYC,aAAW;AAIhB,SAAS,QACf,OACI;AACJ,QAAM,QAAc,mBAAWC,aAAY;AAC3C;AAAA,IAAmB,QAAQ,MAAM,GAAG;AAAA,IAAI,CAAC,WACpC,eAAU,OAAO,QAAQ,KAAK;AAAA,EACnC;AACA,SAAO,KAAK,KAAK;AAClB","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 RealtimeReactStore = {\n\tsocket: Socket | null\n\tservices: Map<\n\t\tstring,\n\t\t[consumerCount: number, dispose: (() => void) | undefined]\n\t> | null\n}\n\nexport const RealtimeContext = React.createContext<RealtimeReactStore>({\n\tsocket: null,\n\tservices: null,\n})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}> = ({ children, socket }) => {\n\tconst services = React.useRef(new Map<string, [number, () => void]>()).current\n\tconst setMyId = useI(RTC.myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsetMyId(socket?.id)\n\t\tsocket?.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket?.on(`disconnect`, () => {\n\t\t\tsetMyId(undefined)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket, services }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePull<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullState(token, socket, store),\n\t)\n}\n","import * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\nimport { onMount } from \"./on-mount\"\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function useRealtimeService(\n\tkey: string,\n\tcreate: (socket: Socket) => (() => void) | undefined,\n): void {\n\tconst { socket, services } = React.useContext(RealtimeContext)\n\tonMount(() => {\n\t\tlet service = services?.get(key)\n\t\tif (service) {\n\t\t\tservice[0]++\n\t\t} else {\n\t\t\tconst dispose = socket ? create(socket) : undefined\n\t\t\tservice = [1, dispose]\n\t\t\tservices?.set(key, service)\n\t\t}\n\t\treturn () => {\n\t\t\tif (service) {\n\t\t\t\tservice[0]--\n\t\t\t\tif (service[0] === 0) {\n\t\t\t\t\tservice[1]?.()\n\t\t\t\t\tservices?.delete(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n","import * as React from \"react\"\n\nconst { NODE_ENV } = process.env\nconst IN_DEV = NODE_ENV === `development` || NODE_ENV === `test`\n\nfunction noop() {}\n\nexport function useSingleEffect(\n\teffect: () => (() => void) | undefined,\n\tdeps: unknown[],\n): void {\n\tif (IN_DEV) {\n\t\tconst cleanup = React.useRef<() => void>(noop)\n\t\tReact.useEffect(() => {\n\t\t\tlet dispose = cleanup.current\n\t\t\tif (dispose === noop) {\n\t\t\t\tdispose = effect() ?? noop\n\t\t\t\tcleanup.current = dispose\n\t\t\t} else {\n\t\t\t\treturn () => {\n\t\t\t\t\tdispose()\n\t\t\t\t\tcleanup.current = noop\n\t\t\t\t}\n\t\t\t}\n\t\t}, deps)\n\t} else {\n\t\tReact.useEffect(effect, deps)\n\t}\n}\n","import { useSingleEffect } from \"./use-single-effect\"\n\nexport function onMount(effect: () => (() => void) | undefined): void {\n\tuseSingleEffect(effect, [])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullFamilyMember<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullFamilyMember(token, socket, store),\n\t)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutable<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n>(token: AtomIO.MutableAtomToken<T, J>): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableState(token, socket, store),\n\t)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutableFamilyMember<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n>(token: AtomIO.MutableAtomToken<T, J>): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableFamilyMember(token, socket, store),\n\t)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`push:${token.key}`, (socket) =>\n\t\tRTC.pushState(token, socket, store),\n\t)\n}\n","import * as AtomIO from \"atom.io\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useServerAction<ƒ extends AtomIO.ƒn>(\n\ttoken: AtomIO.TransactionToken<ƒ>,\n): (...parameters: Parameters<ƒ>) => ReturnType<ƒ> {\n\tconst store = React.useContext(StoreContext)\n\n\tuseRealtimeService(`tx:${token.key}`, (socket) =>\n\t\tRTC.serverAction(token, socket, store),\n\t)\n\treturn AtomIO.runTransaction(token, undefined, store)\n}\n","import * as AtomIO from \"atom.io\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useSyncAction<ƒ extends AtomIO.ƒn>(\n\ttoken: AtomIO.TransactionToken<ƒ>,\n): (...parameters: Parameters<ƒ>) => ReturnType<ƒ> {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`tx-sync:${token.key}`, (socket) => {\n\t\treturn RTC.syncAction(token, socket, store)\n\t})\n\treturn AtomIO.runTransaction(token, undefined, store)\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 useSync<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`sync:${token.key}`, (socket) =>\n\t\tRTC.syncState(token, socket, store),\n\t)\n\treturn useO(token)\n}\n"]}
1
+ {"version":3,"sources":["../src/realtime-context.tsx","../src/use-pull-atom.ts","../src/use-realtime-service.ts","../src/use-single-effect.ts","../src/on-mount.ts","../src/use-pull-atom-family-member.ts","../src/use-pull-mutable-atom.ts","../src/use-pull-mutable-family-member.ts","../src/use-pull-selector.ts","../src/use-pull-selector-family-member.ts","../src/use-push.ts","../src/use-server-action.ts","../src/use-sync-continuity.ts","../src/use-sync-server-action.ts","../src/use-sync.ts"],"names":["RTC","React","StoreContext","useO","findInStore","useI","actUponStore","arbitrary"],"mappings":"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","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 RealtimeReactStore = {\n\tsocket: Socket | null\n\tservices: Map<\n\t\tstring,\n\t\t[consumerCount: number, dispose: (() => void) | undefined]\n\t> | null\n}\n\nexport const RealtimeContext = React.createContext<RealtimeReactStore>({\n\tsocket: null,\n\tservices: null,\n})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}> = ({ children, socket }) => {\n\tconst services = React.useRef(new Map<string, [number, () => void]>()).current\n\tconst setMyId = useI(RTC.myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsetMyId(socket?.id)\n\t\tsocket?.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket?.on(`disconnect`, () => {\n\t\t\tsetMyId(undefined)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket, services }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","import 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(token, socket, store),\n\t)\n\treturn useO(token)\n}\n","import * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\nimport { onMount } from \"./on-mount\"\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function useRealtimeService(\n\tkey: string,\n\tcreate: (socket: Socket) => (() => void) | undefined,\n): void {\n\tconst { socket, services } = React.useContext(RealtimeContext)\n\tonMount(() => {\n\t\tlet service = services?.get(key)\n\t\tif (service) {\n\t\t\tservice[0]++\n\t\t} else {\n\t\t\tconst dispose = socket ? create(socket) : undefined\n\t\t\tservice = [1, dispose]\n\t\t\tservices?.set(key, service)\n\t\t}\n\t\treturn () => {\n\t\t\tif (service) {\n\t\t\t\tservice[0]--\n\t\t\t\tif (service[0] === 0) {\n\t\t\t\t\tservice[1]?.()\n\t\t\t\t\tservices?.delete(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n","import * as React from \"react\"\n\nconst { NODE_ENV } = process.env\nconst IN_DEV = NODE_ENV === `development` || NODE_ENV === `test`\n\nfunction noop() {}\n\nexport function useSingleEffect(\n\teffect: () => (() => void) | undefined,\n\tdeps: unknown[],\n): void {\n\tif (IN_DEV) {\n\t\tconst cleanup = React.useRef<() => void>(noop)\n\t\tReact.useEffect(() => {\n\t\t\tlet dispose = cleanup.current\n\t\t\tif (dispose === noop) {\n\t\t\t\tdispose = effect() ?? noop\n\t\t\t\tcleanup.current = dispose\n\t\t\t} else {\n\t\t\t\treturn () => {\n\t\t\t\t\tdispose()\n\t\t\t\t\tcleanup.current = noop\n\t\t\t\t}\n\t\t\t}\n\t\t}, deps)\n\t} else {\n\t\tReact.useEffect(effect, deps)\n\t}\n}\n","import { useSingleEffect } from \"./use-single-effect\"\n\nexport function onMount(effect: () => (() => void) | undefined): void {\n\tuseSingleEffect(effect, [])\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\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 usePullAtomFamilyMember<\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n\tKey extends K,\n>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: Key): J {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(family, subKey, store)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtomFamilyMember(token, socket, store),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\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 usePullMutable<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n>(token: AtomIO.MutableAtomToken<T, J>): T {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtom(token, socket, store),\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 { 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 usePullMutableAtomFamilyMember<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n\tKey extends K,\n>(familyToken: AtomIO.MutableAtomFamilyToken<T, J, K>, key: Key): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(familyToken, key, store)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtomFamilyMember(token, socket, store),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\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(token, socket, store),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\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 usePullSelectorFamilyMember<\n\tT,\n\tK extends Json.Serializable,\n\tKey extends K,\n>(familyToken: AtomIO.SelectorFamilyToken<T, K>, key: Key): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(familyToken, key, store)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelectorFamilyMember(token, socket, store),\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 } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): <New extends J>(next: New | ((old: J) => New)) => void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`push:${token.key}`, (socket) =>\n\t\tRTC.pushState(token, socket, store),\n\t)\n\treturn useI(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { actUponStore, arbitrary } from \"atom.io/internal\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useServerAction<ƒ extends AtomIO.ƒn>(\n\ttoken: AtomIO.TransactionToken<ƒ>,\n): (...parameters: Parameters<ƒ>) => ReturnType<ƒ> {\n\tconst store = React.useContext(StoreContext)\n\n\tuseRealtimeService(`tx:${token.key}`, (socket) =>\n\t\tRTC.serverAction(token, socket, store),\n\t)\n\treturn actUponStore(token, arbitrary(), store)\n}\n","import { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\nimport { syncContinuity } from \"../../realtime-client/src/sync-continuity\"\nimport type { ContinuityToken } from \"../../realtime/src/realtime-continuity\"\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(token, socket, store)\n\t})\n}\n","import type * as AtomIO from \"atom.io\"\nimport { actUponStore, arbitrary } from \"atom.io/internal\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useSyncAction<ƒ extends AtomIO.ƒn>(\n\ttoken: AtomIO.TransactionToken<ƒ>,\n): (...parameters: Parameters<ƒ>) => ReturnType<ƒ> {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`tx-sync:${token.key}`, (socket) => {\n\t\treturn RTC.syncAction(token, socket, store)\n\t})\n\treturn actUponStore(token, arbitrary(), store)\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 useSync<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`sync:${token.key}`, (socket) =>\n\t\tRTC.syncState(token, socket, store),\n\t)\n\treturn useO(token)\n}\n"]}
@@ -1,9 +1,12 @@
1
1
  export * from "./realtime-context"
2
- export * from "./use-pull"
3
- export * from "./use-pull-family-member"
4
- export * from "./use-pull-mutable"
2
+ export * from "./use-pull-atom"
3
+ export * from "./use-pull-atom-family-member"
4
+ export * from "./use-pull-mutable-atom"
5
5
  export * from "./use-pull-mutable-family-member"
6
+ export * from "./use-pull-selector"
7
+ export * from "./use-pull-selector-family-member"
6
8
  export * from "./use-push"
7
9
  export * from "./use-server-action"
10
+ export * from "./use-sync-continuity"
8
11
  export * from "./use-sync-server-action"
9
12
  export * from "./use-sync"
@@ -0,0 +1,21 @@
1
+ import type * as AtomIO from "atom.io"
2
+ import { findInStore } from "atom.io/internal"
3
+ import type { Json } from "atom.io/json"
4
+ import { StoreContext, useO } from "atom.io/react"
5
+ import * as RTC from "atom.io/realtime-client"
6
+ import * as React from "react"
7
+
8
+ import { useRealtimeService } from "./use-realtime-service"
9
+
10
+ export function usePullAtomFamilyMember<
11
+ J extends Json.Serializable,
12
+ K extends Json.Serializable,
13
+ Key extends K,
14
+ >(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: Key): J {
15
+ const store = React.useContext(StoreContext)
16
+ const token = findInStore(family, subKey, store)
17
+ useRealtimeService(`pull:${token.key}`, (socket) =>
18
+ RTC.pullAtomFamilyMember(token, socket, store),
19
+ )
20
+ return useO(token)
21
+ }
@@ -1,16 +1,17 @@
1
1
  import type * as AtomIO from "atom.io"
2
2
  import type { Json } from "atom.io/json"
3
- import { StoreContext } from "atom.io/react"
3
+ import { StoreContext, useO } from "atom.io/react"
4
4
  import * as RTC from "atom.io/realtime-client"
5
5
  import * as React from "react"
6
6
 
7
7
  import { useRealtimeService } from "./use-realtime-service"
8
8
 
9
- export function usePullFamilyMember<J extends Json.Serializable>(
10
- token: AtomIO.WritableToken<J>,
11
- ): void {
9
+ export function usePullAtom<J extends Json.Serializable>(
10
+ token: AtomIO.RegularAtomToken<J>,
11
+ ): J {
12
12
  const store = React.useContext(StoreContext)
13
13
  useRealtimeService(`pull:${token.key}`, (socket) =>
14
- RTC.pullFamilyMember(token, socket, store),
14
+ RTC.pullAtom(token, socket, store),
15
15
  )
16
+ return useO(token)
16
17
  }
@@ -1,7 +1,7 @@
1
1
  import type * as AtomIO from "atom.io"
2
2
  import type { Transceiver } from "atom.io/internal"
3
3
  import type { Json } from "atom.io/json"
4
- import { StoreContext } from "atom.io/react"
4
+ import { StoreContext, useO } from "atom.io/react"
5
5
  import * as RTC from "atom.io/realtime-client"
6
6
  import * as React from "react"
7
7
 
@@ -10,9 +10,10 @@ import { useRealtimeService } from "./use-realtime-service"
10
10
  export function usePullMutable<
11
11
  T extends Transceiver<any>,
12
12
  J extends Json.Serializable,
13
- >(token: AtomIO.MutableAtomToken<T, J>): void {
13
+ >(token: AtomIO.MutableAtomToken<T, J>): T {
14
14
  const store = React.useContext(StoreContext)
15
15
  useRealtimeService(`pull:${token.key}`, (socket) =>
16
- RTC.pullMutableState(token, socket, store),
16
+ RTC.pullMutableAtom(token, socket, store),
17
17
  )
18
+ return useO(token)
18
19
  }
@@ -1,18 +1,23 @@
1
1
  import type * as AtomIO from "atom.io"
2
2
  import type { Transceiver } from "atom.io/internal"
3
+ import { findInStore } from "atom.io/internal"
3
4
  import type { Json } from "atom.io/json"
4
- import { StoreContext } from "atom.io/react"
5
+ import { StoreContext, useO } from "atom.io/react"
5
6
  import * as RTC from "atom.io/realtime-client"
6
7
  import * as React from "react"
7
8
 
8
9
  import { useRealtimeService } from "./use-realtime-service"
9
10
 
10
- export function usePullMutableFamilyMember<
11
+ export function usePullMutableAtomFamilyMember<
11
12
  T extends Transceiver<any>,
12
13
  J extends Json.Serializable,
13
- >(token: AtomIO.MutableAtomToken<T, J>): void {
14
+ K extends Json.Serializable,
15
+ Key extends K,
16
+ >(familyToken: AtomIO.MutableAtomFamilyToken<T, J, K>, key: Key): T {
14
17
  const store = React.useContext(StoreContext)
18
+ const token = findInStore(familyToken, key, store)
15
19
  useRealtimeService(`pull:${token.key}`, (socket) =>
16
- RTC.pullMutableFamilyMember(token, socket, store),
20
+ RTC.pullMutableAtomFamilyMember(token, socket, store),
17
21
  )
22
+ return useO(token)
18
23
  }
@@ -0,0 +1,21 @@
1
+ import type * as AtomIO from "atom.io"
2
+ import { findInStore } from "atom.io/internal"
3
+ import type { Json } from "atom.io/json"
4
+ import { StoreContext, useO } from "atom.io/react"
5
+ import * as RTC from "atom.io/realtime-client"
6
+ import * as React from "react"
7
+
8
+ import { useRealtimeService } from "./use-realtime-service"
9
+
10
+ export function usePullSelectorFamilyMember<
11
+ T,
12
+ K extends Json.Serializable,
13
+ Key extends K,
14
+ >(familyToken: AtomIO.SelectorFamilyToken<T, K>, key: Key): T {
15
+ const store = React.useContext(StoreContext)
16
+ const token = findInStore(familyToken, key, store)
17
+ useRealtimeService(`pull:${token.key}`, (socket) =>
18
+ RTC.pullSelectorFamilyMember(token, socket, store),
19
+ )
20
+ return useO(token)
21
+ }
@@ -1,16 +1,18 @@
1
1
  import type * as AtomIO from "atom.io"
2
+ import { findInStore } from "atom.io/internal"
2
3
  import type { Json } from "atom.io/json"
3
- import { StoreContext } from "atom.io/react"
4
+ import { StoreContext, useO } from "atom.io/react"
4
5
  import * as RTC from "atom.io/realtime-client"
5
6
  import * as React from "react"
6
7
 
7
8
  import { useRealtimeService } from "./use-realtime-service"
8
9
 
9
- export function usePull<J extends Json.Serializable>(
10
- token: AtomIO.WritableToken<J>,
11
- ): void {
10
+ export function usePullSelector<J extends Json.Serializable>(
11
+ token: AtomIO.SelectorToken<J>,
12
+ ): J {
12
13
  const store = React.useContext(StoreContext)
13
14
  useRealtimeService(`pull:${token.key}`, (socket) =>
14
- RTC.pullState(token, socket, store),
15
+ RTC.pullSelector(token, socket, store),
15
16
  )
17
+ return useO(token)
16
18
  }
@@ -1,6 +1,6 @@
1
1
  import type * as AtomIO from "atom.io"
2
2
  import type { Json } from "atom.io/json"
3
- import { StoreContext } from "atom.io/react"
3
+ import { StoreContext, useI } from "atom.io/react"
4
4
  import * as RTC from "atom.io/realtime-client"
5
5
  import * as React from "react"
6
6
 
@@ -8,9 +8,10 @@ import { useRealtimeService } from "./use-realtime-service"
8
8
 
9
9
  export function usePush<J extends Json.Serializable>(
10
10
  token: AtomIO.WritableToken<J>,
11
- ): void {
11
+ ): <New extends J>(next: New | ((old: J) => New)) => void {
12
12
  const store = React.useContext(StoreContext)
13
13
  useRealtimeService(`push:${token.key}`, (socket) =>
14
14
  RTC.pushState(token, socket, store),
15
15
  )
16
+ return useI(token)
16
17
  }
@@ -1,4 +1,5 @@
1
- import * as AtomIO from "atom.io"
1
+ import type * as AtomIO from "atom.io"
2
+ import { actUponStore, arbitrary } from "atom.io/internal"
2
3
  import { StoreContext } from "atom.io/react"
3
4
  import * as RTC from "atom.io/realtime-client"
4
5
  import * as React from "react"
@@ -13,5 +14,5 @@ export function useServerAction<ƒ extends AtomIO.ƒn>(
13
14
  useRealtimeService(`tx:${token.key}`, (socket) =>
14
15
  RTC.serverAction(token, socket, store),
15
16
  )
16
- return AtomIO.runTransaction(token, undefined, store)
17
+ return actUponStore(token, arbitrary(), store)
17
18
  }
@@ -0,0 +1,12 @@
1
+ import { StoreContext } from "atom.io/react"
2
+ import * as React from "react"
3
+ import { syncContinuity } from "../../realtime-client/src/sync-continuity"
4
+ import type { ContinuityToken } from "../../realtime/src/realtime-continuity"
5
+ import { useRealtimeService } from "./use-realtime-service"
6
+
7
+ export function useSyncContinuity(token: ContinuityToken): void {
8
+ const store = React.useContext(StoreContext)
9
+ useRealtimeService(`tx-sync:${token.key}`, (socket) => {
10
+ return syncContinuity(token, socket, store)
11
+ })
12
+ }
@@ -1,4 +1,5 @@
1
- import * as AtomIO from "atom.io"
1
+ import type * as AtomIO from "atom.io"
2
+ import { actUponStore, arbitrary } from "atom.io/internal"
2
3
  import { StoreContext } from "atom.io/react"
3
4
  import * as RTC from "atom.io/realtime-client"
4
5
  import * as React from "react"
@@ -12,5 +13,5 @@ export function useSyncAction<ƒ extends AtomIO.ƒn>(
12
13
  useRealtimeService(`tx-sync:${token.key}`, (socket) => {
13
14
  return RTC.syncAction(token, socket, store)
14
15
  })
15
- return AtomIO.runTransaction(token, undefined, store)
16
+ return actUponStore(token, arbitrary(), store)
16
17
  }