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.
- package/data/dist/index.cjs +62 -40
- package/data/dist/index.cjs.map +1 -1
- package/data/dist/index.d.ts +8 -2
- package/data/dist/index.js +64 -42
- package/data/dist/index.js.map +1 -1
- package/data/src/dict.ts +8 -4
- package/data/src/join.ts +74 -33
- package/data/src/struct-family.ts +18 -17
- package/dist/chunk-OEVFAUPE.js +289 -0
- package/dist/chunk-OEVFAUPE.js.map +1 -0
- package/dist/index.cjs +4 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +62 -51
- package/dist/index.js +5 -11
- package/dist/index.js.map +1 -1
- package/internal/dist/index.cjs +163 -64
- package/internal/dist/index.cjs.map +1 -1
- package/internal/dist/index.d.ts +94 -70
- package/internal/dist/index.js +155 -59
- package/internal/dist/index.js.map +1 -1
- package/internal/src/arbitrary.ts +3 -0
- package/internal/src/caching.ts +8 -6
- package/internal/src/families/find-in-store.ts +16 -0
- package/internal/src/get-environment-data.ts +4 -7
- package/internal/src/index.ts +6 -5
- package/internal/src/ingest-updates/ingest-transaction-update.ts +0 -1
- package/internal/src/selector/create-standalone-selector.ts +0 -2
- package/internal/src/set-state/set-atom.ts +14 -18
- package/internal/src/store/store.ts +14 -2
- package/internal/src/store/withdraw.ts +72 -2
- package/internal/src/subscribe/subscribe-to-timeline.ts +2 -2
- package/internal/src/subscribe/subscribe-to-transaction.ts +2 -2
- package/internal/src/timeline/create-timeline.ts +12 -1
- package/internal/src/transaction/act-upon-store.ts +19 -0
- package/internal/src/transaction/apply-transaction.ts +7 -1
- package/internal/src/transaction/assign-transaction-to-continuity.ts +18 -0
- package/internal/src/transaction/build-transaction.ts +7 -6
- package/internal/src/transaction/create-transaction.ts +1 -1
- package/internal/src/transaction/get-epoch-number.ts +40 -0
- package/internal/src/transaction/index.ts +10 -1
- package/internal/src/transaction/set-epoch-number.ts +31 -0
- package/introspection/dist/index.cjs.map +1 -1
- package/introspection/dist/index.d.ts +3 -3
- package/introspection/dist/index.js.map +1 -1
- package/introspection/src/attach-introspection-states.ts +6 -2
- package/introspection/src/attach-timeline-family.ts +5 -2
- package/introspection/src/attach-transaction-logs.ts +2 -2
- package/json/dist/index.d.ts +3 -1
- package/json/src/index.ts +6 -2
- package/package.json +24 -13
- package/react/dist/index.cjs.map +1 -1
- package/react/dist/index.d.ts +1 -1
- package/react/dist/index.js.map +1 -1
- package/react/src/use-json.ts +1 -1
- package/react-devtools/dist/index.cjs +131 -134
- package/react-devtools/dist/index.cjs.map +1 -1
- package/react-devtools/dist/index.css +2 -2
- package/react-devtools/dist/index.css.map +1 -1
- package/react-devtools/dist/index.d.ts +3 -3
- package/react-devtools/dist/index.js +103 -106
- package/react-devtools/dist/index.js.map +1 -1
- package/react-devtools/src/StateEditor.tsx +6 -6
- package/react-devtools/src/StateIndex.tsx +2 -5
- package/react-devtools/src/TimelineIndex.tsx +3 -3
- package/react-devtools/src/TransactionIndex.tsx +9 -8
- package/react-devtools/src/Updates.tsx +1 -1
- package/react-devtools/src/index.ts +4 -4
- package/realtime/dist/index.cjs +72 -0
- package/realtime/dist/index.cjs.map +1 -0
- package/realtime/dist/index.d.ts +39 -0
- package/realtime/dist/index.js +68 -0
- package/realtime/dist/index.js.map +1 -0
- package/realtime/package.json +16 -0
- package/realtime/src/index.ts +1 -0
- package/realtime/src/realtime-continuity.ts +152 -0
- package/realtime-client/dist/index.cjs +389 -48
- package/realtime-client/dist/index.cjs.map +1 -1
- package/realtime-client/dist/index.d.ts +16 -9
- package/realtime-client/dist/index.js +100 -37
- package/realtime-client/dist/index.js.map +1 -1
- package/realtime-client/src/index.ts +8 -5
- package/realtime-client/src/{pull-family-member.ts → pull-atom-family-member.ts} +2 -2
- package/realtime-client/src/{pull-state.ts → pull-atom.ts} +2 -2
- package/realtime-client/src/{pull-mutable-family-member.ts → pull-mutable-atom-family-member.ts} +1 -1
- package/realtime-client/src/{pull-mutable.ts → pull-mutable-atom.ts} +1 -1
- package/realtime-client/src/pull-selector-family-member.ts +42 -0
- package/realtime-client/src/pull-selector.ts +38 -0
- package/realtime-client/src/realtime-client-stores/client-main-store.ts +2 -2
- package/realtime-client/src/realtime-client-stores/client-sync-store.ts +7 -7
- package/realtime-client/src/sync-continuity.ts +321 -0
- package/realtime-client/src/sync-server-action.ts +18 -20
- package/realtime-react/dist/index.cjs +330 -15
- package/realtime-react/dist/index.cjs.map +1 -1
- package/realtime-react/dist/index.d.ts +26 -6
- package/realtime-react/dist/index.js +43 -12
- package/realtime-react/dist/index.js.map +1 -1
- package/realtime-react/src/index.ts +6 -3
- package/realtime-react/src/use-pull-atom-family-member.ts +21 -0
- package/realtime-react/src/{use-pull-family-member.ts → use-pull-atom.ts} +6 -5
- package/realtime-react/src/{use-pull-mutable.ts → use-pull-mutable-atom.ts} +4 -3
- package/realtime-react/src/use-pull-mutable-family-member.ts +9 -4
- package/realtime-react/src/use-pull-selector-family-member.ts +21 -0
- package/realtime-react/src/{use-pull.ts → use-pull-selector.ts} +7 -5
- package/realtime-react/src/use-push.ts +3 -2
- package/realtime-react/src/use-server-action.ts +3 -2
- package/realtime-react/src/use-sync-continuity.ts +12 -0
- package/realtime-react/src/use-sync-server-action.ts +3 -2
- package/realtime-server/dist/index.cjs +568 -242
- package/realtime-server/dist/index.cjs.map +1 -1
- package/realtime-server/dist/index.d.ts +124 -49
- package/realtime-server/dist/index.js +555 -238
- package/realtime-server/dist/index.js.map +1 -1
- package/realtime-server/src/index.ts +18 -2
- package/realtime-server/src/ipc-socket.ts +230 -0
- package/realtime-server/src/realtime-action-receiver.ts +8 -5
- package/realtime-server/src/realtime-action-synchronizer.ts +40 -28
- package/realtime-server/src/realtime-continuity-synchronizer.ts +247 -0
- package/realtime-server/src/realtime-family-provider.ts +30 -71
- package/realtime-server/src/realtime-mutable-family-provider.ts +24 -86
- package/realtime-server/src/realtime-server-stores/index.ts +3 -1
- package/realtime-server/src/realtime-server-stores/realtime-continuity-store.ts +90 -0
- package/realtime-server/src/realtime-server-stores/server-room-store.ts +97 -0
- package/realtime-server/src/realtime-server-stores/server-sync-store.ts +2 -72
- package/realtime-server/src/realtime-server-stores/server-user-store.ts +14 -29
- package/realtime-server/src/realtime-state-receiver.ts +0 -1
- package/realtime-testing/dist/index.cjs +28 -28
- package/realtime-testing/dist/index.cjs.map +1 -1
- package/realtime-testing/dist/index.js +28 -27
- package/realtime-testing/dist/index.js.map +1 -1
- package/realtime-testing/src/setup-realtime-test.tsx +38 -28
- package/src/atom.ts +49 -31
- package/src/logger.ts +10 -5
- package/src/selector.ts +44 -25
- package/src/subscribe.ts +2 -1
- package/src/timeline.ts +4 -4
- package/src/transaction.ts +13 -17
- package/src/validators.ts +15 -9
- package/dist/chunk-H4Q5FTPZ.js +0 -11
- package/dist/chunk-H4Q5FTPZ.js.map +0 -1
- 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
|
|
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
|
|
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.
|
|
87
|
+
(socket) => RTC.pullAtom(token, socket, store)
|
|
87
88
|
);
|
|
89
|
+
return useO(token);
|
|
88
90
|
}
|
|
89
|
-
function
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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,
|
|
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":"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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 } 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
|
|
10
|
-
token: AtomIO.
|
|
11
|
-
):
|
|
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.
|
|
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>):
|
|
13
|
+
>(token: AtomIO.MutableAtomToken<T, J>): T {
|
|
14
14
|
const store = React.useContext(StoreContext)
|
|
15
15
|
useRealtimeService(`pull:${token.key}`, (socket) =>
|
|
16
|
-
RTC.
|
|
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
|
|
11
|
+
export function usePullMutableAtomFamilyMember<
|
|
11
12
|
T extends Transceiver<any>,
|
|
12
13
|
J extends Json.Serializable,
|
|
13
|
-
|
|
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.
|
|
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
|
|
10
|
-
token: AtomIO.
|
|
11
|
-
):
|
|
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.
|
|
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
|
|
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
|
|
16
|
+
return actUponStore(token, arbitrary(), store)
|
|
16
17
|
}
|