@syncular/client 0.0.6-96 → 0.1.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 (356) hide show
  1. package/README.md +713 -11
  2. package/dist/auth-leases.d.ts +11 -0
  3. package/dist/auth-leases.d.ts.map +1 -0
  4. package/dist/auth-leases.js +140 -0
  5. package/dist/auth-leases.js.map +1 -0
  6. package/dist/blob-limits.d.ts +15 -0
  7. package/dist/blob-limits.d.ts.map +1 -0
  8. package/dist/blob-limits.js +66 -0
  9. package/dist/blob-limits.js.map +1 -0
  10. package/dist/bridge-client.d.ts +69 -0
  11. package/dist/bridge-client.d.ts.map +1 -0
  12. package/dist/bridge-client.js +282 -0
  13. package/dist/bridge-client.js.map +1 -0
  14. package/dist/client-config.d.ts +6 -0
  15. package/dist/client-config.d.ts.map +1 -0
  16. package/dist/client-config.js +18 -0
  17. package/dist/client-config.js.map +1 -0
  18. package/dist/client.d.ts +65 -397
  19. package/dist/client.d.ts.map +1 -1
  20. package/dist/client.js +150 -960
  21. package/dist/client.js.map +1 -1
  22. package/dist/command-history.d.ts +35 -0
  23. package/dist/command-history.d.ts.map +1 -0
  24. package/dist/command-history.js +378 -0
  25. package/dist/command-history.js.map +1 -0
  26. package/dist/console-diagnostics.d.ts +33 -0
  27. package/dist/console-diagnostics.d.ts.map +1 -0
  28. package/dist/console-diagnostics.js +496 -0
  29. package/dist/console-diagnostics.js.map +1 -0
  30. package/dist/crdt-yjs/index.d.ts +4 -0
  31. package/dist/crdt-yjs/index.d.ts.map +1 -0
  32. package/dist/crdt-yjs/index.js +4 -0
  33. package/dist/crdt-yjs/index.js.map +1 -0
  34. package/dist/crdt-yjs/webview-host-facade.d.ts +126 -0
  35. package/dist/crdt-yjs/webview-host-facade.d.ts.map +1 -0
  36. package/dist/crdt-yjs/webview-host-facade.js +284 -0
  37. package/dist/crdt-yjs/webview-host-facade.js.map +1 -0
  38. package/dist/crdt-yjs/yjs-document-field-adapter.d.ts +153 -0
  39. package/dist/crdt-yjs/yjs-document-field-adapter.d.ts.map +1 -0
  40. package/dist/crdt-yjs/yjs-document-field-adapter.js +406 -0
  41. package/dist/crdt-yjs/yjs-document-field-adapter.js.map +1 -0
  42. package/dist/crdt-yjs/yjs-prosemirror-bridge.d.ts +73 -0
  43. package/dist/crdt-yjs/yjs-prosemirror-bridge.d.ts.map +1 -0
  44. package/dist/crdt-yjs/yjs-prosemirror-bridge.js +169 -0
  45. package/dist/crdt-yjs/yjs-prosemirror-bridge.js.map +1 -0
  46. package/dist/database.d.ts +83 -0
  47. package/dist/database.d.ts.map +1 -0
  48. package/dist/database.js +916 -0
  49. package/dist/database.js.map +1 -0
  50. package/dist/diagnostics.d.ts +10 -0
  51. package/dist/diagnostics.d.ts.map +1 -0
  52. package/dist/diagnostics.js +83 -0
  53. package/dist/diagnostics.js.map +1 -0
  54. package/dist/errors.d.ts +24 -0
  55. package/dist/errors.d.ts.map +1 -0
  56. package/dist/errors.js +211 -0
  57. package/dist/errors.js.map +1 -0
  58. package/dist/generated-bridge.d.ts +365 -0
  59. package/dist/generated-bridge.d.ts.map +1 -0
  60. package/dist/generated-bridge.js +250 -0
  61. package/dist/generated-bridge.js.map +1 -0
  62. package/dist/index.d.ts +13 -23
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +14 -25
  65. package/dist/index.js.map +1 -1
  66. package/dist/mutations.d.ts +4 -72
  67. package/dist/mutations.d.ts.map +1 -1
  68. package/dist/mutations.js +2 -568
  69. package/dist/mutations.js.map +1 -1
  70. package/dist/network.d.ts +3 -0
  71. package/dist/network.d.ts.map +1 -0
  72. package/dist/network.js +17 -0
  73. package/dist/network.js.map +1 -0
  74. package/dist/react/index.d.ts +169 -0
  75. package/dist/react/index.d.ts.map +1 -0
  76. package/dist/react/index.js +628 -0
  77. package/dist/react/index.js.map +1 -0
  78. package/dist/react-native/index.d.ts +35 -0
  79. package/dist/react-native/index.d.ts.map +1 -0
  80. package/dist/react-native/index.js +49 -0
  81. package/dist/react-native/index.js.map +1 -0
  82. package/dist/runtime-contract.d.ts +13 -0
  83. package/dist/runtime-contract.d.ts.map +1 -0
  84. package/dist/runtime-contract.js +24 -0
  85. package/dist/runtime-contract.js.map +1 -0
  86. package/dist/rust-client.d.ts +106 -0
  87. package/dist/rust-client.d.ts.map +1 -0
  88. package/dist/rust-client.js +936 -0
  89. package/dist/rust-client.js.map +1 -0
  90. package/dist/sentry.d.ts +35 -0
  91. package/dist/sentry.d.ts.map +1 -0
  92. package/dist/sentry.js +155 -0
  93. package/dist/sentry.js.map +1 -0
  94. package/dist/sql-safety.d.ts +3 -0
  95. package/dist/sql-safety.d.ts.map +1 -0
  96. package/dist/sql-safety.js +62 -0
  97. package/dist/sql-safety.js.map +1 -0
  98. package/dist/syncular-runtime-artifacts.json +61 -0
  99. package/dist/tauri/index.d.ts +35 -0
  100. package/dist/tauri/index.d.ts.map +1 -0
  101. package/dist/tauri/index.js +114 -0
  102. package/dist/tauri/index.js.map +1 -0
  103. package/dist/types.d.ts +1059 -0
  104. package/dist/types.d.ts.map +1 -0
  105. package/dist/types.js +2 -0
  106. package/dist/types.js.map +1 -0
  107. package/dist/wasm/.syncular-wasm-profile +1 -0
  108. package/dist/wasm/syncular-runtime-artifact.json +21 -0
  109. package/dist/wasm/syncular.d.ts +207 -0
  110. package/dist/wasm/syncular.js +2341 -0
  111. package/dist/wasm/syncular_bg.wasm +0 -0
  112. package/dist/wasm/syncular_bg.wasm.d.ts +97 -0
  113. package/dist/wasm-bindings/runtime-contract.d.ts +22 -0
  114. package/dist/wasm-bindings/runtime-contract.d.ts.map +1 -0
  115. package/dist/wasm-bindings/runtime-contract.js +112 -0
  116. package/dist/wasm-bindings/runtime-contract.js.map +1 -0
  117. package/dist/wasm-core/.syncular-wasm-profile +1 -0
  118. package/dist/wasm-core/syncular-runtime-artifact.json +17 -0
  119. package/dist/wasm-core/syncular.d.ts +162 -0
  120. package/dist/wasm-core/syncular.js +1847 -0
  121. package/dist/wasm-core/syncular_bg.wasm +0 -0
  122. package/dist/wasm-core/syncular_bg.wasm.d.ts +77 -0
  123. package/dist/wasm-perf/.syncular-wasm-profile +1 -0
  124. package/dist/wasm-perf/syncular-runtime-artifact.json +21 -0
  125. package/dist/wasm-perf/syncular.d.ts +207 -0
  126. package/dist/wasm-perf/syncular.js +2341 -0
  127. package/dist/wasm-perf/syncular_bg.wasm +0 -0
  128. package/dist/wasm-perf/syncular_bg.wasm.d.ts +97 -0
  129. package/dist/wasm-runtime.d.ts +18 -0
  130. package/dist/wasm-runtime.d.ts.map +1 -0
  131. package/dist/wasm-runtime.js +28 -0
  132. package/dist/wasm-runtime.js.map +1 -0
  133. package/dist/worker-client.d.ts +123 -0
  134. package/dist/worker-client.d.ts.map +1 -0
  135. package/dist/worker-client.js +1686 -0
  136. package/dist/worker-client.js.map +1 -0
  137. package/dist/worker-entry.d.ts +2 -0
  138. package/dist/worker-entry.d.ts.map +1 -0
  139. package/dist/worker-entry.js +479 -0
  140. package/dist/worker-entry.js.map +1 -0
  141. package/dist/worker-protocol.d.ts +64 -0
  142. package/dist/worker-protocol.d.ts.map +1 -0
  143. package/dist/worker-protocol.js +16 -0
  144. package/dist/worker-protocol.js.map +1 -0
  145. package/dist/worker-realtime.d.ts +39 -0
  146. package/dist/worker-realtime.d.ts.map +1 -0
  147. package/dist/worker-realtime.js +677 -0
  148. package/dist/worker-realtime.js.map +1 -0
  149. package/package.json +124 -17
  150. package/src/auth-leases.ts +251 -0
  151. package/src/blob-limits.ts +98 -0
  152. package/src/bridge-client.ts +512 -0
  153. package/src/client-config.ts +29 -0
  154. package/src/client.ts +256 -1414
  155. package/src/command-history.ts +623 -0
  156. package/src/console-diagnostics.ts +617 -0
  157. package/src/crdt-yjs/index.ts +3 -0
  158. package/src/crdt-yjs/webview-host-facade.ts +477 -0
  159. package/src/crdt-yjs/yjs-document-field-adapter.ts +733 -0
  160. package/src/crdt-yjs/yjs-prosemirror-bridge.ts +272 -0
  161. package/src/database.ts +1342 -0
  162. package/src/diagnostics.ts +116 -0
  163. package/src/errors.ts +269 -0
  164. package/src/generated-bridge.ts +741 -0
  165. package/src/index.ts +21 -25
  166. package/src/mutations.ts +12 -821
  167. package/src/network.ts +32 -0
  168. package/src/react/index.ts +1036 -0
  169. package/src/react-native/index.ts +152 -0
  170. package/src/runtime-contract.ts +48 -0
  171. package/src/rust-client.ts +1488 -0
  172. package/src/sentry.ts +215 -0
  173. package/src/sql-safety.ts +61 -0
  174. package/src/tauri/index.ts +211 -0
  175. package/src/types.ts +1356 -0
  176. package/src/wasm-bindings/generated-wasm-bindings.d.ts +70 -0
  177. package/src/wasm-bindings/runtime-contract.ts +158 -0
  178. package/src/wasm-runtime.ts +76 -0
  179. package/src/worker-client.ts +2215 -0
  180. package/src/worker-entry.ts +584 -0
  181. package/src/worker-protocol.ts +109 -0
  182. package/src/worker-realtime.ts +843 -0
  183. package/dist/blobs/index.d.ts +0 -7
  184. package/dist/blobs/index.d.ts.map +0 -1
  185. package/dist/blobs/index.js +0 -7
  186. package/dist/blobs/index.js.map +0 -1
  187. package/dist/blobs/manager.d.ts +0 -345
  188. package/dist/blobs/manager.d.ts.map +0 -1
  189. package/dist/blobs/manager.js +0 -749
  190. package/dist/blobs/manager.js.map +0 -1
  191. package/dist/blobs/migrate.d.ts +0 -14
  192. package/dist/blobs/migrate.d.ts.map +0 -1
  193. package/dist/blobs/migrate.js +0 -59
  194. package/dist/blobs/migrate.js.map +0 -1
  195. package/dist/blobs/types.d.ts +0 -62
  196. package/dist/blobs/types.d.ts.map +0 -1
  197. package/dist/blobs/types.js +0 -5
  198. package/dist/blobs/types.js.map +0 -1
  199. package/dist/conflicts.d.ts +0 -31
  200. package/dist/conflicts.d.ts.map +0 -1
  201. package/dist/conflicts.js +0 -112
  202. package/dist/conflicts.js.map +0 -1
  203. package/dist/create-client.d.ts +0 -118
  204. package/dist/create-client.d.ts.map +0 -1
  205. package/dist/create-client.js +0 -178
  206. package/dist/create-client.js.map +0 -1
  207. package/dist/engine/SyncEngine.d.ts +0 -272
  208. package/dist/engine/SyncEngine.d.ts.map +0 -1
  209. package/dist/engine/SyncEngine.js +0 -1860
  210. package/dist/engine/SyncEngine.js.map +0 -1
  211. package/dist/engine/index.d.ts +0 -6
  212. package/dist/engine/index.d.ts.map +0 -1
  213. package/dist/engine/index.js +0 -6
  214. package/dist/engine/index.js.map +0 -1
  215. package/dist/engine/types.d.ts +0 -345
  216. package/dist/engine/types.d.ts.map +0 -1
  217. package/dist/engine/types.js +0 -7
  218. package/dist/engine/types.js.map +0 -1
  219. package/dist/handlers/collection.d.ts +0 -6
  220. package/dist/handlers/collection.d.ts.map +0 -1
  221. package/dist/handlers/collection.js +0 -21
  222. package/dist/handlers/collection.js.map +0 -1
  223. package/dist/handlers/create-handler.d.ts +0 -120
  224. package/dist/handlers/create-handler.d.ts.map +0 -1
  225. package/dist/handlers/create-handler.js +0 -145
  226. package/dist/handlers/create-handler.js.map +0 -1
  227. package/dist/handlers/types.d.ts +0 -83
  228. package/dist/handlers/types.d.ts.map +0 -1
  229. package/dist/handlers/types.js +0 -5
  230. package/dist/handlers/types.js.map +0 -1
  231. package/dist/migrate.d.ts +0 -19
  232. package/dist/migrate.d.ts.map +0 -1
  233. package/dist/migrate.js +0 -238
  234. package/dist/migrate.js.map +0 -1
  235. package/dist/outbox.d.ts +0 -112
  236. package/dist/outbox.d.ts.map +0 -1
  237. package/dist/outbox.js +0 -294
  238. package/dist/outbox.js.map +0 -1
  239. package/dist/plugins/incrementing-version.d.ts +0 -34
  240. package/dist/plugins/incrementing-version.d.ts.map +0 -1
  241. package/dist/plugins/incrementing-version.js +0 -83
  242. package/dist/plugins/incrementing-version.js.map +0 -1
  243. package/dist/plugins/index.d.ts +0 -3
  244. package/dist/plugins/index.d.ts.map +0 -1
  245. package/dist/plugins/index.js +0 -3
  246. package/dist/plugins/index.js.map +0 -1
  247. package/dist/plugins/types.d.ts +0 -49
  248. package/dist/plugins/types.d.ts.map +0 -1
  249. package/dist/plugins/types.js +0 -15
  250. package/dist/plugins/types.js.map +0 -1
  251. package/dist/proxy/connection.d.ts +0 -33
  252. package/dist/proxy/connection.d.ts.map +0 -1
  253. package/dist/proxy/connection.js +0 -153
  254. package/dist/proxy/connection.js.map +0 -1
  255. package/dist/proxy/dialect.d.ts +0 -46
  256. package/dist/proxy/dialect.d.ts.map +0 -1
  257. package/dist/proxy/dialect.js +0 -58
  258. package/dist/proxy/dialect.js.map +0 -1
  259. package/dist/proxy/driver.d.ts +0 -42
  260. package/dist/proxy/driver.d.ts.map +0 -1
  261. package/dist/proxy/driver.js +0 -78
  262. package/dist/proxy/driver.js.map +0 -1
  263. package/dist/proxy/index.d.ts +0 -10
  264. package/dist/proxy/index.d.ts.map +0 -1
  265. package/dist/proxy/index.js +0 -10
  266. package/dist/proxy/index.js.map +0 -1
  267. package/dist/proxy/mutations.d.ts +0 -9
  268. package/dist/proxy/mutations.d.ts.map +0 -1
  269. package/dist/proxy/mutations.js +0 -11
  270. package/dist/proxy/mutations.js.map +0 -1
  271. package/dist/pull-engine.d.ts +0 -48
  272. package/dist/pull-engine.d.ts.map +0 -1
  273. package/dist/pull-engine.js +0 -648
  274. package/dist/pull-engine.js.map +0 -1
  275. package/dist/push-engine.d.ts +0 -18
  276. package/dist/push-engine.d.ts.map +0 -1
  277. package/dist/push-engine.js +0 -167
  278. package/dist/push-engine.js.map +0 -1
  279. package/dist/query/FingerprintCollector.d.ts +0 -18
  280. package/dist/query/FingerprintCollector.d.ts.map +0 -1
  281. package/dist/query/FingerprintCollector.js +0 -28
  282. package/dist/query/FingerprintCollector.js.map +0 -1
  283. package/dist/query/QueryContext.d.ts +0 -33
  284. package/dist/query/QueryContext.d.ts.map +0 -1
  285. package/dist/query/QueryContext.js +0 -16
  286. package/dist/query/QueryContext.js.map +0 -1
  287. package/dist/query/fingerprint.d.ts +0 -61
  288. package/dist/query/fingerprint.d.ts.map +0 -1
  289. package/dist/query/fingerprint.js +0 -91
  290. package/dist/query/fingerprint.js.map +0 -1
  291. package/dist/query/index.d.ts +0 -7
  292. package/dist/query/index.d.ts.map +0 -1
  293. package/dist/query/index.js +0 -7
  294. package/dist/query/index.js.map +0 -1
  295. package/dist/query/tracked-select.d.ts +0 -18
  296. package/dist/query/tracked-select.d.ts.map +0 -1
  297. package/dist/query/tracked-select.js +0 -90
  298. package/dist/query/tracked-select.js.map +0 -1
  299. package/dist/schema.d.ts +0 -83
  300. package/dist/schema.d.ts.map +0 -1
  301. package/dist/schema.js +0 -7
  302. package/dist/schema.js.map +0 -1
  303. package/dist/subscription-state.d.ts +0 -46
  304. package/dist/subscription-state.d.ts.map +0 -1
  305. package/dist/subscription-state.js +0 -185
  306. package/dist/subscription-state.js.map +0 -1
  307. package/dist/sync-loop.d.ts +0 -34
  308. package/dist/sync-loop.d.ts.map +0 -1
  309. package/dist/sync-loop.js +0 -253
  310. package/dist/sync-loop.js.map +0 -1
  311. package/dist/sync.d.ts +0 -32
  312. package/dist/sync.d.ts.map +0 -1
  313. package/dist/sync.js +0 -55
  314. package/dist/sync.js.map +0 -1
  315. package/dist/utils/id.d.ts +0 -17
  316. package/dist/utils/id.d.ts.map +0 -1
  317. package/dist/utils/id.js +0 -46
  318. package/dist/utils/id.js.map +0 -1
  319. package/src/blobs/index.ts +0 -7
  320. package/src/blobs/manager.ts +0 -1027
  321. package/src/blobs/migrate.ts +0 -67
  322. package/src/blobs/types.ts +0 -84
  323. package/src/client.test.ts +0 -417
  324. package/src/conflicts.ts +0 -171
  325. package/src/create-client.test.ts +0 -83
  326. package/src/create-client.ts +0 -330
  327. package/src/engine/SyncEngine.test.ts +0 -254
  328. package/src/engine/SyncEngine.ts +0 -2375
  329. package/src/engine/index.ts +0 -6
  330. package/src/engine/types.ts +0 -419
  331. package/src/handlers/collection.ts +0 -36
  332. package/src/handlers/create-handler.ts +0 -330
  333. package/src/handlers/types.ts +0 -108
  334. package/src/migrate.ts +0 -318
  335. package/src/outbox.ts +0 -383
  336. package/src/plugins/incrementing-version.ts +0 -133
  337. package/src/plugins/index.ts +0 -2
  338. package/src/plugins/types.ts +0 -63
  339. package/src/proxy/connection.ts +0 -191
  340. package/src/proxy/dialect.ts +0 -76
  341. package/src/proxy/driver.ts +0 -126
  342. package/src/proxy/index.ts +0 -10
  343. package/src/proxy/mutations.ts +0 -18
  344. package/src/pull-engine.test.ts +0 -151
  345. package/src/pull-engine.ts +0 -855
  346. package/src/push-engine.ts +0 -216
  347. package/src/query/FingerprintCollector.ts +0 -29
  348. package/src/query/QueryContext.ts +0 -54
  349. package/src/query/fingerprint.ts +0 -109
  350. package/src/query/index.ts +0 -10
  351. package/src/query/tracked-select.ts +0 -139
  352. package/src/schema.ts +0 -94
  353. package/src/subscription-state.ts +0 -259
  354. package/src/sync-loop.ts +0 -379
  355. package/src/sync.ts +0 -170
  356. package/src/utils/id.ts +0 -55
@@ -0,0 +1,628 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}