@syncular/client 0.1.3 → 0.2.1

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 (233) hide show
  1. package/README.md +227 -709
  2. package/dist/apply.d.ts +80 -0
  3. package/dist/apply.js +301 -0
  4. package/dist/blob.d.ts +127 -0
  5. package/dist/blob.js +201 -0
  6. package/dist/bun-database.d.ts +22 -0
  7. package/dist/bun-database.js +61 -0
  8. package/dist/client.d.ts +320 -69
  9. package/dist/client.js +1627 -163
  10. package/dist/content-type.d.ts +2 -0
  11. package/dist/content-type.js +2 -0
  12. package/dist/database.d.ts +35 -80
  13. package/dist/database.js +32 -947
  14. package/dist/encryption.d.ts +47 -0
  15. package/dist/encryption.js +75 -0
  16. package/dist/errors.d.ts +8 -22
  17. package/dist/errors.js +10 -207
  18. package/dist/http.d.ts +32 -0
  19. package/dist/http.js +196 -0
  20. package/dist/index.d.ts +28 -16
  21. package/dist/index.js +25 -12
  22. package/dist/invalidation.d.ts +69 -0
  23. package/dist/invalidation.js +84 -0
  24. package/dist/leader-lock.d.ts +28 -0
  25. package/dist/leader-lock.js +38 -0
  26. package/dist/multi-tab.d.ts +134 -0
  27. package/dist/multi-tab.js +399 -0
  28. package/dist/node-database.d.ts +41 -0
  29. package/dist/node-database.js +133 -0
  30. package/dist/outbox.d.ts +56 -0
  31. package/dist/outbox.js +140 -0
  32. package/dist/schema.d.ts +107 -0
  33. package/dist/schema.js +267 -0
  34. package/dist/state.d.ts +40 -0
  35. package/dist/state.js +77 -0
  36. package/dist/transport.d.ts +44 -0
  37. package/dist/transport.js +7 -0
  38. package/dist/wasm-database.d.ts +30 -0
  39. package/dist/wasm-database.js +170 -0
  40. package/dist/window.d.ts +64 -0
  41. package/dist/window.js +0 -0
  42. package/dist/worker-entry.d.ts +16 -2
  43. package/dist/worker-entry.js +300 -456
  44. package/dist/worker-host.d.ts +174 -0
  45. package/dist/worker-host.js +536 -0
  46. package/dist/worker-protocol.d.ts +173 -61
  47. package/dist/worker-protocol.js +7 -16
  48. package/package.json +45 -112
  49. package/src/apply.ts +435 -0
  50. package/src/blob.ts +333 -0
  51. package/src/bun-database.ts +75 -0
  52. package/src/client.ts +2247 -277
  53. package/src/content-type.ts +2 -0
  54. package/src/database.ts +63 -1389
  55. package/src/encryption.ts +123 -0
  56. package/src/errors.ts +11 -265
  57. package/src/http.ts +254 -0
  58. package/src/index.ts +25 -20
  59. package/src/invalidation.ts +128 -0
  60. package/src/leader-lock.ts +68 -0
  61. package/src/multi-tab.ts +550 -0
  62. package/src/node-database.ts +180 -0
  63. package/src/outbox.ts +206 -0
  64. package/src/schema.ts +397 -0
  65. package/src/state.ts +126 -0
  66. package/src/transport.ts +52 -0
  67. package/src/wasm-database.ts +279 -0
  68. package/src/window.ts +0 -0
  69. package/src/worker-entry.ts +391 -545
  70. package/src/worker-host.ts +800 -0
  71. package/src/worker-protocol.ts +204 -99
  72. package/dist/auth-leases.d.ts +0 -11
  73. package/dist/auth-leases.d.ts.map +0 -1
  74. package/dist/auth-leases.js +0 -140
  75. package/dist/auth-leases.js.map +0 -1
  76. package/dist/blob-limits.d.ts +0 -15
  77. package/dist/blob-limits.d.ts.map +0 -1
  78. package/dist/blob-limits.js +0 -66
  79. package/dist/blob-limits.js.map +0 -1
  80. package/dist/bridge-client.d.ts +0 -69
  81. package/dist/bridge-client.d.ts.map +0 -1
  82. package/dist/bridge-client.js +0 -282
  83. package/dist/bridge-client.js.map +0 -1
  84. package/dist/client-config.d.ts +0 -6
  85. package/dist/client-config.d.ts.map +0 -1
  86. package/dist/client-config.js +0 -18
  87. package/dist/client-config.js.map +0 -1
  88. package/dist/client.d.ts.map +0 -1
  89. package/dist/client.js.map +0 -1
  90. package/dist/command-history.d.ts +0 -35
  91. package/dist/command-history.d.ts.map +0 -1
  92. package/dist/command-history.js +0 -378
  93. package/dist/command-history.js.map +0 -1
  94. package/dist/console-diagnostics.d.ts +0 -33
  95. package/dist/console-diagnostics.d.ts.map +0 -1
  96. package/dist/console-diagnostics.js +0 -496
  97. package/dist/console-diagnostics.js.map +0 -1
  98. package/dist/crdt-yjs/index.d.ts +0 -4
  99. package/dist/crdt-yjs/index.d.ts.map +0 -1
  100. package/dist/crdt-yjs/index.js +0 -4
  101. package/dist/crdt-yjs/index.js.map +0 -1
  102. package/dist/crdt-yjs/webview-host-facade.d.ts +0 -126
  103. package/dist/crdt-yjs/webview-host-facade.d.ts.map +0 -1
  104. package/dist/crdt-yjs/webview-host-facade.js +0 -284
  105. package/dist/crdt-yjs/webview-host-facade.js.map +0 -1
  106. package/dist/crdt-yjs/yjs-document-field-adapter.d.ts +0 -153
  107. package/dist/crdt-yjs/yjs-document-field-adapter.d.ts.map +0 -1
  108. package/dist/crdt-yjs/yjs-document-field-adapter.js +0 -406
  109. package/dist/crdt-yjs/yjs-document-field-adapter.js.map +0 -1
  110. package/dist/crdt-yjs/yjs-prosemirror-bridge.d.ts +0 -73
  111. package/dist/crdt-yjs/yjs-prosemirror-bridge.d.ts.map +0 -1
  112. package/dist/crdt-yjs/yjs-prosemirror-bridge.js +0 -169
  113. package/dist/crdt-yjs/yjs-prosemirror-bridge.js.map +0 -1
  114. package/dist/database.d.ts.map +0 -1
  115. package/dist/database.js.map +0 -1
  116. package/dist/diagnostics.d.ts +0 -10
  117. package/dist/diagnostics.d.ts.map +0 -1
  118. package/dist/diagnostics.js +0 -83
  119. package/dist/diagnostics.js.map +0 -1
  120. package/dist/errors.d.ts.map +0 -1
  121. package/dist/errors.js.map +0 -1
  122. package/dist/generated-bridge.d.ts +0 -365
  123. package/dist/generated-bridge.d.ts.map +0 -1
  124. package/dist/generated-bridge.js +0 -250
  125. package/dist/generated-bridge.js.map +0 -1
  126. package/dist/index.d.ts.map +0 -1
  127. package/dist/index.js.map +0 -1
  128. package/dist/mutations.d.ts +0 -72
  129. package/dist/mutations.d.ts.map +0 -1
  130. package/dist/mutations.js +0 -63
  131. package/dist/mutations.js.map +0 -1
  132. package/dist/network.d.ts +0 -3
  133. package/dist/network.d.ts.map +0 -1
  134. package/dist/network.js +0 -17
  135. package/dist/network.js.map +0 -1
  136. package/dist/react/index.d.ts +0 -169
  137. package/dist/react/index.d.ts.map +0 -1
  138. package/dist/react/index.js +0 -628
  139. package/dist/react/index.js.map +0 -1
  140. package/dist/react-native/index.d.ts +0 -35
  141. package/dist/react-native/index.d.ts.map +0 -1
  142. package/dist/react-native/index.js +0 -49
  143. package/dist/react-native/index.js.map +0 -1
  144. package/dist/runtime-contract.d.ts +0 -13
  145. package/dist/runtime-contract.d.ts.map +0 -1
  146. package/dist/runtime-contract.js +0 -24
  147. package/dist/runtime-contract.js.map +0 -1
  148. package/dist/rust-client.d.ts +0 -106
  149. package/dist/rust-client.d.ts.map +0 -1
  150. package/dist/rust-client.js +0 -938
  151. package/dist/rust-client.js.map +0 -1
  152. package/dist/sentry.d.ts +0 -35
  153. package/dist/sentry.d.ts.map +0 -1
  154. package/dist/sentry.js +0 -155
  155. package/dist/sentry.js.map +0 -1
  156. package/dist/sql-safety.d.ts +0 -3
  157. package/dist/sql-safety.d.ts.map +0 -1
  158. package/dist/sql-safety.js +0 -62
  159. package/dist/sql-safety.js.map +0 -1
  160. package/dist/syncular-runtime-artifacts.json +0 -61
  161. package/dist/tauri/index.d.ts +0 -35
  162. package/dist/tauri/index.d.ts.map +0 -1
  163. package/dist/tauri/index.js +0 -114
  164. package/dist/tauri/index.js.map +0 -1
  165. package/dist/types.d.ts +0 -1096
  166. package/dist/types.d.ts.map +0 -1
  167. package/dist/types.js +0 -2
  168. package/dist/types.js.map +0 -1
  169. package/dist/wasm/.syncular-wasm-profile +0 -1
  170. package/dist/wasm/syncular-runtime-artifact.json +0 -21
  171. package/dist/wasm/syncular.d.ts +0 -207
  172. package/dist/wasm/syncular.js +0 -2341
  173. package/dist/wasm/syncular_bg.wasm +0 -0
  174. package/dist/wasm/syncular_bg.wasm.d.ts +0 -97
  175. package/dist/wasm-bindings/runtime-contract.d.ts +0 -22
  176. package/dist/wasm-bindings/runtime-contract.d.ts.map +0 -1
  177. package/dist/wasm-bindings/runtime-contract.js +0 -112
  178. package/dist/wasm-bindings/runtime-contract.js.map +0 -1
  179. package/dist/wasm-core/.syncular-wasm-profile +0 -1
  180. package/dist/wasm-core/syncular-runtime-artifact.json +0 -17
  181. package/dist/wasm-core/syncular.d.ts +0 -162
  182. package/dist/wasm-core/syncular.js +0 -1847
  183. package/dist/wasm-core/syncular_bg.wasm +0 -0
  184. package/dist/wasm-core/syncular_bg.wasm.d.ts +0 -77
  185. package/dist/wasm-perf/.syncular-wasm-profile +0 -1
  186. package/dist/wasm-perf/syncular-runtime-artifact.json +0 -21
  187. package/dist/wasm-perf/syncular.d.ts +0 -207
  188. package/dist/wasm-perf/syncular.js +0 -2341
  189. package/dist/wasm-perf/syncular_bg.wasm +0 -0
  190. package/dist/wasm-perf/syncular_bg.wasm.d.ts +0 -97
  191. package/dist/wasm-runtime.d.ts +0 -23
  192. package/dist/wasm-runtime.d.ts.map +0 -1
  193. package/dist/wasm-runtime.js +0 -69
  194. package/dist/wasm-runtime.js.map +0 -1
  195. package/dist/worker-client.d.ts +0 -123
  196. package/dist/worker-client.d.ts.map +0 -1
  197. package/dist/worker-client.js +0 -1735
  198. package/dist/worker-client.js.map +0 -1
  199. package/dist/worker-entry.d.ts.map +0 -1
  200. package/dist/worker-entry.js.map +0 -1
  201. package/dist/worker-protocol.d.ts.map +0 -1
  202. package/dist/worker-protocol.js.map +0 -1
  203. package/dist/worker-realtime.d.ts +0 -39
  204. package/dist/worker-realtime.d.ts.map +0 -1
  205. package/dist/worker-realtime.js +0 -677
  206. package/dist/worker-realtime.js.map +0 -1
  207. package/src/auth-leases.ts +0 -251
  208. package/src/blob-limits.ts +0 -98
  209. package/src/bridge-client.ts +0 -512
  210. package/src/client-config.ts +0 -29
  211. package/src/command-history.ts +0 -623
  212. package/src/console-diagnostics.ts +0 -617
  213. package/src/crdt-yjs/index.ts +0 -3
  214. package/src/crdt-yjs/webview-host-facade.ts +0 -477
  215. package/src/crdt-yjs/yjs-document-field-adapter.ts +0 -733
  216. package/src/crdt-yjs/yjs-prosemirror-bridge.ts +0 -272
  217. package/src/diagnostics.ts +0 -116
  218. package/src/generated-bridge.ts +0 -741
  219. package/src/mutations.ts +0 -168
  220. package/src/network.ts +0 -32
  221. package/src/react/index.ts +0 -1036
  222. package/src/react-native/index.ts +0 -152
  223. package/src/runtime-contract.ts +0 -48
  224. package/src/rust-client.ts +0 -1491
  225. package/src/sentry.ts +0 -215
  226. package/src/sql-safety.ts +0 -61
  227. package/src/tauri/index.ts +0 -211
  228. package/src/types.ts +0 -1397
  229. package/src/wasm-bindings/generated-wasm-bindings.d.ts +0 -70
  230. package/src/wasm-bindings/runtime-contract.ts +0 -158
  231. package/src/wasm-runtime.ts +0 -145
  232. package/src/worker-client.ts +0 -2289
  233. package/src/worker-realtime.ts +0 -843
@@ -1,628 +0,0 @@
1
- import { createSyncularDatabase, } from '@syncular/client';
2
- import { createContext, createElement, startTransition, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore, } from 'react';
3
- export function createSyncularReact() {
4
- const Context = createContext(null);
5
- function SyncProvider(props) {
6
- const { children, client: providedClient, closeOnUnmount, onClient, onError, options, optionsKey, } = props;
7
- const optionsRef = useLatest(options);
8
- const onClientRef = useLatest(onClient);
9
- const onErrorRef = useLatest(onError);
10
- const lifecycleKey = optionsKey;
11
- const [value, setValue] = useState({
12
- client: providedClient ?? null,
13
- status: providedClient ? 'ready' : options ? 'loading' : 'idle',
14
- error: null,
15
- });
16
- useEffect(() => {
17
- void lifecycleKey;
18
- let cancelled = false;
19
- let ownedClient = null;
20
- if (providedClient) {
21
- setValue({ client: providedClient, status: 'ready', error: null });
22
- onClientRef.current?.(providedClient);
23
- return () => {
24
- if (closeOnUnmount) {
25
- void providedClient.close().catch(() => undefined);
26
- }
27
- };
28
- }
29
- const currentOptions = optionsRef.current;
30
- if (!currentOptions) {
31
- setValue({ client: null, status: 'idle', error: null });
32
- return undefined;
33
- }
34
- setValue((previous) => ({
35
- client: previous.client,
36
- status: 'loading',
37
- error: null,
38
- }));
39
- void createSyncularDatabase(currentOptions)
40
- .then((client) => {
41
- if (cancelled) {
42
- void client.close().catch(() => undefined);
43
- return;
44
- }
45
- ownedClient = client;
46
- setValue({ client, status: 'ready', error: null });
47
- onClientRef.current?.(client);
48
- })
49
- .catch((error) => {
50
- if (cancelled)
51
- return;
52
- setValue({ client: null, status: 'error', error });
53
- onErrorRef.current?.(error);
54
- });
55
- return () => {
56
- cancelled = true;
57
- if (ownedClient)
58
- void ownedClient.close().catch(() => undefined);
59
- };
60
- }, [
61
- closeOnUnmount,
62
- lifecycleKey,
63
- onClientRef,
64
- onErrorRef,
65
- optionsRef,
66
- providedClient,
67
- ]);
68
- return createElement(Context.Provider, { value, children });
69
- }
70
- function useSyncContext() {
71
- const value = useContext(Context);
72
- if (!value)
73
- throw new Error('SyncProvider is required for Syncular hooks.');
74
- return { status: value.status, error: value.error };
75
- }
76
- function useClient() {
77
- const value = useContext(Context);
78
- if (!value)
79
- throw new Error('SyncProvider is required for Syncular hooks.');
80
- if (!value.client) {
81
- if (value.status === 'error')
82
- throw value.error;
83
- throw new Error('Syncular client is not ready yet.');
84
- }
85
- return value.client;
86
- }
87
- function useSyncStatus() {
88
- const client = useClient();
89
- const readStatus = useCallback(() => client.getStatus(), [client]);
90
- const getSnapshot = useStableSnapshot(readStatus);
91
- return useSyncExternalStore(useCallback((notify) => client.on('lifecycleChanged', () => notify()), [client]), getSnapshot, getSnapshot);
92
- }
93
- function useSyncConnection() {
94
- const client = useClient();
95
- const status = useSyncStatus();
96
- const state = status.connection;
97
- return {
98
- state,
99
- isConnected: status.isConnected,
100
- isReconnecting: state.realtime === 'connecting',
101
- reconnect: client.start,
102
- disconnect: client.stop,
103
- };
104
- }
105
- function useSyncEvent(event, listener, enabled = true) {
106
- const client = useClient();
107
- const listenerRef = useLatest(listener);
108
- useEffect(() => {
109
- if (!enabled)
110
- return undefined;
111
- return client.on(event, (payload) => listenerRef.current(payload));
112
- }, [client, enabled, event, listenerRef]);
113
- }
114
- function useRowsChanged(listener, options = {}) {
115
- const listenerRef = useLatest(listener);
116
- useSyncEvent('rowsChanged', (event) => {
117
- const tables = options.tables == null ? null : new Set(options.tables);
118
- if (tables && !event.changedTables.some((table) => tables.has(table))) {
119
- return;
120
- }
121
- listenerRef.current(event);
122
- }, options.enabled !== false);
123
- }
124
- function useSyncQuery(query, options = {}) {
125
- const client = useClient();
126
- const queryRef = useLatest(query);
127
- const optionsRef = useLatest(options);
128
- const enabled = options.enabled !== false;
129
- const deps = options.deps ?? [];
130
- const tables = options.watchTables ?? options.tables;
131
- const tablesRef = useLatest(tables);
132
- const tablesKey = stableStringListKey(tables);
133
- const watchedTables = useMemo(() => {
134
- void tablesKey;
135
- return tablesRef.current == null ? null : new Set(tablesRef.current);
136
- }, [tablesKey, tablesRef]);
137
- const [data, setData] = useState(undefined);
138
- const [isLoading, setIsLoading] = useState(enabled);
139
- const [error, setError] = useState(null);
140
- const [lastSyncAt, setLastSyncAt] = useState(null);
141
- const publishResult = useCallback((result) => {
142
- const publish = () => {
143
- setData((previous) => shareQueryResult(previous, result, optionsRef.current.keyField ?? 'id', optionsRef.current.structuralSharing !== false));
144
- setLastSyncAt(Date.now());
145
- setIsLoading(false);
146
- };
147
- if (optionsRef.current.transitionUpdates === false) {
148
- publish();
149
- }
150
- else {
151
- startTransition(publish);
152
- }
153
- }, [optionsRef]);
154
- const execute = useCallback(async () => {
155
- if (!enabled)
156
- return;
157
- if (optionsRef.current.loadingOnRefresh !== false)
158
- setIsLoading(true);
159
- setError(null);
160
- try {
161
- const result = await executeSyncQuery(client.db, queryRef.current);
162
- publishResult(result);
163
- }
164
- catch (caught) {
165
- setError(toError(caught));
166
- setIsLoading(false);
167
- }
168
- }, [client, enabled, optionsRef, publishResult, queryRef]);
169
- useEffect(() => {
170
- if (!enabled) {
171
- setIsLoading(false);
172
- return undefined;
173
- }
174
- void execute();
175
- if (!options.pollIntervalMs || options.pollIntervalMs <= 0) {
176
- return undefined;
177
- }
178
- const timer = setInterval(() => {
179
- void execute();
180
- }, options.pollIntervalMs);
181
- return () => clearInterval(timer);
182
- }, [enabled, execute, options.pollIntervalMs, ...deps]);
183
- useEffect(() => {
184
- if (!enabled || options.refreshOnDataChange === false)
185
- return undefined;
186
- let disposed = false;
187
- let fallbackUnsubscribe;
188
- let liveSubscription;
189
- const startFallback = () => {
190
- if (disposed || fallbackUnsubscribe)
191
- return;
192
- fallbackUnsubscribe = client.on('rowsChanged', (event) => {
193
- if (watchedTables &&
194
- !event.changedTables.some((table) => watchedTables.has(table))) {
195
- return;
196
- }
197
- void execute();
198
- });
199
- };
200
- const startLiveQuery = async () => {
201
- if (!hasLiveQueries(client)) {
202
- startFallback();
203
- return;
204
- }
205
- try {
206
- const queryResult = await Promise.resolve(queryRef.current({
207
- db: client.db,
208
- selectFrom: client.db.selectFrom.bind(client.db),
209
- }));
210
- if (!isCompilableExecutableQuery(queryResult)) {
211
- startFallback();
212
- return;
213
- }
214
- const liveTables = tablesRef.current;
215
- liveSubscription = await client.live(queryResult, {
216
- ...(liveTables == null ? {} : { tables: liveTables }),
217
- onChange: (rows) => {
218
- if (!disposed)
219
- publishResult(rows);
220
- },
221
- });
222
- }
223
- catch (caught) {
224
- if (!disposed) {
225
- setError(toError(caught));
226
- setIsLoading(false);
227
- }
228
- }
229
- };
230
- void startLiveQuery();
231
- return () => {
232
- disposed = true;
233
- fallbackUnsubscribe?.();
234
- liveSubscription?.unsubscribe();
235
- };
236
- }, [
237
- client,
238
- enabled,
239
- execute,
240
- options.refreshOnDataChange,
241
- publishResult,
242
- queryRef,
243
- tablesRef,
244
- watchedTables,
245
- ]);
246
- return {
247
- data,
248
- isLoading,
249
- error,
250
- isStale: options.staleAfterMs != null &&
251
- lastSyncAt != null &&
252
- Date.now() - lastSyncAt > options.staleAfterMs,
253
- lastSyncAt,
254
- refetch: execute,
255
- };
256
- }
257
- function useQuery(query, options = {}) {
258
- const result = useSyncQuery(query, {
259
- ...options,
260
- refreshOnDataChange: false,
261
- loadingOnRefresh: true,
262
- });
263
- return {
264
- data: result.data,
265
- isLoading: result.isLoading,
266
- error: result.error,
267
- refetch: result.refetch,
268
- };
269
- }
270
- function useMutation(options) {
271
- return useMutationFor('mutations', options);
272
- }
273
- function useLeasedMutation(options) {
274
- return useMutationFor('leasedMutations', options);
275
- }
276
- function useMutationFor(apiName, options) {
277
- const client = useClient();
278
- const optionsRef = useLatest(options);
279
- const [isPending, setIsPending] = useState(false);
280
- const [error, setError] = useState(null);
281
- const reset = useCallback(() => setError(null), []);
282
- const run = useCallback(async (operation) => {
283
- setIsPending(true);
284
- setError(null);
285
- try {
286
- const result = await operation();
287
- if (optionsRef.current.syncImmediately !== false) {
288
- await client.sync();
289
- }
290
- optionsRef.current.onSuccess?.(result);
291
- return result;
292
- }
293
- catch (caught) {
294
- const nextError = toError(caught);
295
- setError(nextError);
296
- optionsRef.current.onError?.(nextError);
297
- throw nextError;
298
- }
299
- finally {
300
- setIsPending(false);
301
- }
302
- }, [client, optionsRef]);
303
- const mutate = useMemo(() => {
304
- const table = client[apiName].$table(options.table);
305
- return {
306
- update: (rowId, payload, mutationOptions) => run(() => table.update(rowId, payload, mutationOptions)),
307
- upsert: (rowId, payload, mutationOptions) => run(() => table.upsert(rowId, payload, mutationOptions)),
308
- delete: (rowId, mutationOptions) => run(() => table.delete(rowId, mutationOptions)),
309
- };
310
- }, [apiName, client, options.table, run]);
311
- const mutateMany = useCallback((inputs) => run(async () => {
312
- const { commit } = await client[apiName].$commit(async (tx) => {
313
- const table = tx[optionsRef.current.table];
314
- for (const input of inputs) {
315
- if (input.op === 'delete') {
316
- await table.delete(input.rowId, {
317
- baseVersion: input.baseVersion,
318
- });
319
- }
320
- else {
321
- await table.upsert(input.rowId, input.payload ?? {}, {
322
- baseVersion: input.baseVersion,
323
- });
324
- }
325
- }
326
- });
327
- return commit;
328
- }), [apiName, client, optionsRef, run]);
329
- return { mutate, mutateMany, isPending, error, reset };
330
- }
331
- function useMutations(options = {}) {
332
- return useMutationsFor('mutations', options);
333
- }
334
- function useLeasedMutations(options = {}) {
335
- return useMutationsFor('leasedMutations', options);
336
- }
337
- function useMutationsFor(apiName, options = {}) {
338
- const client = useClient();
339
- const optionsRef = useLatest(options);
340
- const [isPending, setIsPending] = useState(false);
341
- const [error, setError] = useState(null);
342
- const reset = useCallback(() => setError(null), []);
343
- const run = useCallback(async (operation, opCount, syncOverride) => {
344
- setIsPending(true);
345
- setError(null);
346
- try {
347
- const result = await operation();
348
- const syncMode = syncOverride ?? optionsRef.current.sync ?? 'background';
349
- if (syncMode === 'await') {
350
- await client.sync();
351
- }
352
- else if (syncMode === 'background') {
353
- void client.sync().catch(() => undefined);
354
- }
355
- optionsRef.current.onSuccess?.({ ...result, opCount });
356
- return result;
357
- }
358
- catch (caught) {
359
- const nextError = toError(caught);
360
- setError(nextError);
361
- optionsRef.current.onError?.(nextError);
362
- throw nextError;
363
- }
364
- finally {
365
- setIsPending(false);
366
- }
367
- }, [client, optionsRef]);
368
- return useMemo(() => new Proxy({}, {
369
- get(_target, prop) {
370
- if (prop === 'then')
371
- return undefined;
372
- if (prop === '$isPending')
373
- return isPending;
374
- if (prop === '$error')
375
- return error;
376
- if (prop === '$reset')
377
- return reset;
378
- if (prop === '$table') {
379
- return (table) => wrapMutationsTable(client, apiName, table, run);
380
- }
381
- if (prop === '$commit') {
382
- return async (fn, commitOptions) => {
383
- let callbackResult;
384
- const commit = await run(async () => {
385
- const result = await client[apiName].$commit(fn);
386
- callbackResult = result.result;
387
- return result.commit;
388
- }, 0, commitOptions?.sync);
389
- return { result: callbackResult, commit };
390
- };
391
- }
392
- if (typeof prop !== 'string')
393
- return undefined;
394
- return wrapMutationsTable(client, apiName, prop, run);
395
- },
396
- }), [apiName, client, error, isPending, reset, run]);
397
- }
398
- function useOutboxStats() {
399
- const [stats, setStats] = useState(null);
400
- useSyncEvent('outboxChanged', setStats);
401
- return stats;
402
- }
403
- function useConflictStats() {
404
- const [stats, setStats] = useState(null);
405
- useSyncEvent('conflictsChanged', setStats);
406
- return stats;
407
- }
408
- function usePresence(scopeKey, options = {}) {
409
- const client = useClient();
410
- const enabled = options.enabled !== false;
411
- const [presence, setPresence] = useState([]);
412
- const [isLoading, setIsLoading] = useState(enabled);
413
- useEffect(() => {
414
- if (!enabled) {
415
- setPresence([]);
416
- setIsLoading(false);
417
- return undefined;
418
- }
419
- setPresence(client.presence.get(scopeKey));
420
- setIsLoading(false);
421
- return client.presence.onChange((event) => {
422
- if (event.scopeKey === scopeKey)
423
- setPresence(event.presence);
424
- });
425
- }, [client, enabled, scopeKey]);
426
- return { presence, isLoading };
427
- }
428
- function usePresenceWithJoin(scopeKey, options = {}) {
429
- const client = useClient();
430
- const metadataRef = useLatest(options.metadata);
431
- const enabled = options.enabled !== false;
432
- const base = usePresence(scopeKey, { enabled });
433
- const [isJoined, setIsJoined] = useState(false);
434
- const join = useCallback((metadata) => {
435
- client.presence.join(scopeKey, metadata);
436
- setIsJoined(true);
437
- }, [client, scopeKey]);
438
- const leave = useCallback(() => {
439
- client.presence.leave(scopeKey);
440
- setIsJoined(false);
441
- }, [client, scopeKey]);
442
- const updateMetadata = useCallback((metadata) => {
443
- client.presence.updateMetadata(scopeKey, metadata);
444
- }, [client, scopeKey]);
445
- useEffect(() => {
446
- if (!enabled || options.autoJoin === false)
447
- return undefined;
448
- join(metadataRef.current);
449
- return () => leave();
450
- }, [enabled, join, leave, metadataRef, options.autoJoin]);
451
- return { ...base, updateMetadata, join, leave, isJoined };
452
- }
453
- function useBlobUploadQueue() {
454
- const client = useClient();
455
- const [stats, setStats] = useState(null);
456
- const refresh = useCallback(async () => {
457
- setStats(await client.blobs.getUploadQueueStats());
458
- }, [client]);
459
- const process = useCallback(async () => {
460
- const result = await client.blobs.processUploadQueue();
461
- await refresh();
462
- return result;
463
- }, [client, refresh]);
464
- useEffect(() => {
465
- void refresh().catch(() => undefined);
466
- return client.on('blobUploadCompleted', () => {
467
- void refresh().catch(() => undefined);
468
- });
469
- }, [client, refresh]);
470
- return { stats, refresh, process };
471
- }
472
- function useBlob(ref) {
473
- const client = useClient();
474
- const [data, setData] = useState(null);
475
- useEffect(() => {
476
- let disposed = false;
477
- if (!ref) {
478
- setData(null);
479
- return undefined;
480
- }
481
- void client.blobs.retrieve(ref).then((next) => {
482
- if (!disposed)
483
- setData(next);
484
- });
485
- return () => {
486
- disposed = true;
487
- };
488
- }, [client, ref]);
489
- return data;
490
- }
491
- return {
492
- SyncProvider,
493
- useBlob,
494
- useBlobUploadQueue,
495
- useConflictStats,
496
- useLeasedMutation,
497
- useLeasedMutations,
498
- useMutation,
499
- useMutations,
500
- useOutboxStats,
501
- usePresence,
502
- usePresenceWithJoin,
503
- useQuery,
504
- useRowsChanged,
505
- useSyncConnection,
506
- useSyncContext,
507
- useSyncStatus,
508
- useSyncQuery,
509
- };
510
- }
511
- async function executeSyncQuery(db, query) {
512
- const ctx = {
513
- db,
514
- selectFrom: db.selectFrom.bind(db),
515
- };
516
- const result = await Promise.resolve(query(ctx));
517
- if (isExecutableQuery(result))
518
- return await result.execute();
519
- return result;
520
- }
521
- function isExecutableQuery(value) {
522
- return isRecord(value) && typeof value.execute === 'function';
523
- }
524
- function isCompilableExecutableQuery(value) {
525
- return (isExecutableQuery(value) && typeof value.compile === 'function');
526
- }
527
- function hasLiveQueries(client) {
528
- return typeof client.live === 'function';
529
- }
530
- function wrapMutationsTable(client, apiName, table, run) {
531
- const tableApi = client[apiName].$table(table);
532
- return {
533
- insert: (values) => run(() => tableApi.insert(values), 1),
534
- insertMany: (rows) => run(() => tableApi.insertMany(rows), rows.length),
535
- update: (id, patch, options) => run(() => tableApi.update(id, patch, options), 1),
536
- delete: (id, options) => run(() => tableApi.delete(id, options), 1),
537
- upsert: (id, patch, options) => run(() => tableApi.upsert(id, patch, options), 1),
538
- };
539
- }
540
- function useLatest(value) {
541
- const ref = useRef(value);
542
- ref.current = value;
543
- return ref;
544
- }
545
- function stableStringListKey(values) {
546
- return values == null ? '' : values.join('\u0001');
547
- }
548
- function useStableSnapshot(read) {
549
- const ref = useRef(null);
550
- return useCallback(() => {
551
- const value = read();
552
- const json = JSON.stringify(value);
553
- if (ref.current?.json === json)
554
- return ref.current.value;
555
- ref.current = { value, json };
556
- return value;
557
- }, [read]);
558
- }
559
- function isRecord(value) {
560
- return typeof value === 'object' && value !== null && !Array.isArray(value);
561
- }
562
- function toError(error) {
563
- return error instanceof Error ? error : new Error(String(error));
564
- }
565
- function shareQueryResult(previous, next, keyField, enabled) {
566
- if (!enabled || previous === undefined)
567
- return next;
568
- if (Array.isArray(previous) && Array.isArray(next)) {
569
- return shareArrayResult(previous, next, keyField);
570
- }
571
- if (isRecord(previous) &&
572
- isRecord(next) &&
573
- shallowEqualRecords(previous, next)) {
574
- return previous;
575
- }
576
- return next;
577
- }
578
- function shareArrayResult(previous, next, keyField) {
579
- if (previous.length === 0 || next.length === 0)
580
- return next;
581
- const previousByKey = new Map();
582
- for (const item of previous) {
583
- const key = keyedValue(item, keyField);
584
- if (key == null)
585
- return next;
586
- previousByKey.set(key, item);
587
- }
588
- let changed = previous.length !== next.length;
589
- const shared = next.map((item, index) => {
590
- const key = keyedValue(item, keyField);
591
- const previousItem = key == null ? undefined : previousByKey.get(key);
592
- if (previousItem !== undefined &&
593
- isRecord(previousItem) &&
594
- isRecord(item) &&
595
- shallowEqualRecords(previousItem, item)) {
596
- if (!Object.is(previousItem, previous[index]))
597
- changed = true;
598
- return previousItem;
599
- }
600
- if (!Object.is(item, previous[index]))
601
- changed = true;
602
- return item;
603
- });
604
- return changed ? shared : previous;
605
- }
606
- function keyedValue(value, keyField) {
607
- if (!isRecord(value))
608
- return null;
609
- const key = value[keyField];
610
- return key == null ? null : String(key);
611
- }
612
- function shallowEqualRecords(left, right) {
613
- if (left === right)
614
- return true;
615
- const leftKeys = Object.keys(left);
616
- const rightKeys = Object.keys(right);
617
- if (leftKeys.length !== rightKeys.length)
618
- return false;
619
- for (const key of leftKeys) {
620
- if (!(key in right) || !Object.is(left[key], right[key]))
621
- return false;
622
- }
623
- return true;
624
- }
625
- export function changedRowsForTable(event, table) {
626
- return event.changedRows.filter((row) => row.table === table);
627
- }
628
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}