@syncular/client 0.0.6-95 → 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
package/dist/sync-loop.js DELETED
@@ -1,253 +0,0 @@
1
- /**
2
- * @syncular/client - High-level sync loops
3
- *
4
- * Helpers that run push/pull repeatedly until the client is caught up.
5
- */
6
- import { upsertConflictsForRejectedCommit } from './conflicts.js';
7
- import { getNextSendableOutboxCommit, markOutboxCommitAcked, markOutboxCommitFailed, markOutboxCommitPending, } from './outbox.js';
8
- import { applyPullResponse, buildPullRequest, createFollowupPullState, syncPullOnce, } from './pull-engine.js';
9
- import { syncPushOnce } from './push-engine.js';
10
- async function syncPushUntilSettled(db, transport, options) {
11
- const maxCommits = Math.max(1, Math.min(1000, options.maxCommits ?? 20));
12
- let pushedCount = 0;
13
- for (let i = 0; i < maxCommits; i++) {
14
- const res = await syncPushOnce(db, transport, {
15
- clientId: options.clientId,
16
- actorId: options.actorId,
17
- plugins: options.plugins,
18
- });
19
- if (!res.pushed)
20
- break;
21
- pushedCount += 1;
22
- }
23
- return { pushedCount };
24
- }
25
- function hasPushViaWs(transport) {
26
- return 'pushViaWs' in transport && typeof transport.pushViaWs === 'function';
27
- }
28
- function needsAnotherPull(res) {
29
- for (const sub of res.subscriptions ?? []) {
30
- if (sub.status !== 'active')
31
- continue;
32
- if (sub.bootstrap)
33
- return true;
34
- if ((sub.commits?.length ?? 0) > 0)
35
- return true;
36
- }
37
- return false;
38
- }
39
- function mergePullResponse(targetBySubId, res) {
40
- for (const sub of res.subscriptions ?? []) {
41
- const prev = targetBySubId.get(sub.id);
42
- if (!prev) {
43
- const merged = {
44
- ...sub,
45
- commits: [...(sub.commits ?? [])],
46
- snapshots: [...(sub.snapshots ?? [])],
47
- };
48
- targetBySubId.set(sub.id, merged);
49
- continue;
50
- }
51
- const merged = {
52
- ...prev,
53
- ...sub,
54
- commits: [...(prev.commits ?? []), ...(sub.commits ?? [])],
55
- snapshots: [...(prev.snapshots ?? []), ...(sub.snapshots ?? [])],
56
- };
57
- targetBySubId.set(sub.id, merged);
58
- }
59
- }
60
- async function syncPullUntilSettled(db, transport, handlers, options) {
61
- const maxRounds = Math.max(1, Math.min(1000, options.maxRounds ?? 20));
62
- const aggregatedBySubId = new Map();
63
- let pullState = options.initialPullState ?? (await buildPullRequest(db, options));
64
- let rounds = 0;
65
- for (let i = 0; i < maxRounds; i++) {
66
- rounds += 1;
67
- const res = await syncPullOnce(db, transport, handlers, options, pullState);
68
- mergePullResponse(aggregatedBySubId, res);
69
- if (!needsAnotherPull(res))
70
- break;
71
- pullState = createFollowupPullState(pullState, res);
72
- }
73
- return {
74
- // Return an aggregate response so callers can see what was applied across
75
- // all pull rounds (the last round is often empty by design).
76
- response: {
77
- ok: true,
78
- subscriptions: Array.from(aggregatedBySubId.values()),
79
- },
80
- rounds,
81
- };
82
- }
83
- /**
84
- * Sync once using a WS-first push strategy for the first outbox commit.
85
- *
86
- * - If transport supports `pushViaWs` and the commit succeeds over WS, this call
87
- * sends only an HTTP pull request.
88
- * - Otherwise it falls back to combined HTTP push+pull.
89
- *
90
- * Remaining outbox commits are then settled via `syncPushUntilSettled`.
91
- */
92
- async function syncOnceCombined(db, transport, handlers, options) {
93
- const pullOpts = {
94
- clientId: options.clientId,
95
- actorId: options.actorId,
96
- plugins: options.plugins,
97
- subscriptions: options.subscriptions,
98
- limitCommits: options.limitCommits,
99
- limitSnapshotRows: options.limitSnapshotRows,
100
- maxSnapshotPages: options.maxSnapshotPages,
101
- dedupeRows: options.dedupeRows,
102
- stateId: options.stateId,
103
- sha256: options.sha256,
104
- };
105
- // Build pull request (reads subscription state)
106
- const pullState = await buildPullRequest(db, pullOpts);
107
- const { clientId } = pullState.request;
108
- // Grab at most one outbox commit
109
- const outbox = await getNextSendableOutboxCommit(db);
110
- const plugins = options.plugins ?? [];
111
- const ctx = {
112
- actorId: options.actorId ?? 'unknown',
113
- clientId,
114
- };
115
- // Build push request, running beforePush plugins
116
- let pushRequest;
117
- if (outbox) {
118
- pushRequest = {
119
- clientId,
120
- clientCommitId: outbox.client_commit_id,
121
- operations: outbox.operations,
122
- schemaVersion: outbox.schema_version,
123
- };
124
- for (const plugin of plugins) {
125
- if (!plugin.beforePush)
126
- continue;
127
- pushRequest = await plugin.beforePush(ctx, pushRequest);
128
- }
129
- }
130
- // Try WS push first for the first outbox commit (if realtime transport supports it).
131
- // Fall back to HTTP push in the combined request when WS is unavailable or fails.
132
- let wsPushResponse = null;
133
- if (pushRequest && hasPushViaWs(transport)) {
134
- try {
135
- wsPushResponse = await transport.pushViaWs(pushRequest);
136
- }
137
- catch {
138
- wsPushResponse = null;
139
- }
140
- }
141
- const combined = await transport.sync({
142
- clientId,
143
- ...(pushRequest && !wsPushResponse
144
- ? {
145
- push: {
146
- clientCommitId: pushRequest.clientCommitId,
147
- operations: pushRequest.operations,
148
- schemaVersion: pushRequest.schemaVersion,
149
- },
150
- }
151
- : {}),
152
- pull: {
153
- limitCommits: pullState.request.limitCommits,
154
- limitSnapshotRows: pullState.request.limitSnapshotRows,
155
- maxSnapshotPages: pullState.request.maxSnapshotPages,
156
- dedupeRows: pullState.request.dedupeRows,
157
- subscriptions: pullState.request.subscriptions,
158
- },
159
- });
160
- // Process push response
161
- let pushedCommits = 0;
162
- if (outbox && pushRequest) {
163
- let pushRes = wsPushResponse ?? combined.push;
164
- if (!pushRes) {
165
- await markOutboxCommitPending(db, {
166
- id: outbox.id,
167
- error: 'MISSING_PUSH_RESPONSE',
168
- });
169
- throw new Error('Server returned no push response');
170
- }
171
- // Run afterPush plugins
172
- for (const plugin of plugins) {
173
- if (!plugin.afterPush)
174
- continue;
175
- pushRes = await plugin.afterPush(ctx, {
176
- request: pushRequest,
177
- response: pushRes,
178
- });
179
- }
180
- const responseJson = JSON.stringify(pushRes);
181
- if (pushRes.status === 'applied' || pushRes.status === 'cached') {
182
- await markOutboxCommitAcked(db, {
183
- id: outbox.id,
184
- commitSeq: pushRes.commitSeq ?? null,
185
- responseJson,
186
- });
187
- pushedCommits = 1;
188
- }
189
- else {
190
- // Check if all errors are retriable
191
- const errorResults = pushRes.results.filter((r) => r.status === 'error');
192
- const allRetriable = errorResults.length > 0 &&
193
- errorResults.every((r) => r.retriable === true);
194
- if (allRetriable) {
195
- await markOutboxCommitPending(db, {
196
- id: outbox.id,
197
- error: 'Retriable',
198
- responseJson,
199
- });
200
- pushedCommits = 1;
201
- }
202
- else {
203
- await upsertConflictsForRejectedCommit(db, {
204
- outboxCommitId: outbox.id,
205
- clientCommitId: outbox.client_commit_id,
206
- response: pushRes,
207
- });
208
- await markOutboxCommitFailed(db, {
209
- id: outbox.id,
210
- error: 'REJECTED',
211
- responseJson,
212
- });
213
- pushedCommits = 1;
214
- }
215
- }
216
- // Settle remaining outbox commits
217
- const remaining = await syncPushUntilSettled(db, transport, {
218
- clientId: options.clientId,
219
- actorId: options.actorId,
220
- plugins: options.plugins,
221
- maxCommits: (options.maxPushCommits ?? 20) - 1,
222
- });
223
- pushedCommits += remaining.pushedCount;
224
- }
225
- // Process pull response
226
- let pullResponse = { ok: true, subscriptions: [] };
227
- let pullRounds = 0;
228
- if (combined.pull) {
229
- pullResponse = await applyPullResponse(db, transport, handlers, pullOpts, pullState, combined.pull);
230
- pullRounds = 1;
231
- // Continue pulling if more data
232
- if (needsAnotherPull(pullResponse)) {
233
- const aggregatedBySubId = new Map();
234
- mergePullResponse(aggregatedBySubId, pullResponse);
235
- const more = await syncPullUntilSettled(db, transport, handlers, {
236
- ...pullOpts,
237
- maxRounds: (options.maxPullRounds ?? 20) - 1,
238
- initialPullState: createFollowupPullState(pullState, pullResponse),
239
- });
240
- pullRounds += more.rounds;
241
- mergePullResponse(aggregatedBySubId, more.response);
242
- pullResponse = {
243
- ok: true,
244
- subscriptions: Array.from(aggregatedBySubId.values()),
245
- };
246
- }
247
- }
248
- return { pushedCommits, pullRounds, pullResponse };
249
- }
250
- export async function syncOnce(db, transport, handlers, options) {
251
- return syncOnceCombined(db, transport, handlers, options);
252
- }
253
- //# sourceMappingURL=sync-loop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-loop.js","sourceRoot":"","sources":["../src/sync-loop.ts"],"names":[],"mappings":"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"}
package/dist/sync.d.ts DELETED
@@ -1,32 +0,0 @@
1
- import type { ColumnCodecDialect, ColumnCodecSource, ScopeDefinition, ScopeValuesFromPatterns, SyncSubscriptionRequest } from '@syncular/core';
2
- import { type CreateClientHandlerOptions } from './handlers/create-handler';
3
- import type { ClientTableHandler } from './handlers/types';
4
- import type { SyncClientDb } from './schema';
5
- type ClientSyncSubscription<ScopeDefs extends readonly ScopeDefinition[]> = Omit<SyncSubscriptionRequest, 'cursor' | 'table' | 'scopes'> & {
6
- table: string;
7
- scopes?: ScopeValuesFromPatterns<ScopeDefs>;
8
- };
9
- type SharedTableName<DB extends SyncClientDb> = keyof DB & string;
10
- export type ClientSyncHandlerOptionsForTable<DB extends SyncClientDb, TableName extends SharedTableName<DB>, ScopeDefs extends readonly ScopeDefinition[], Identity> = Omit<CreateClientHandlerOptions<DB, TableName, ScopeDefs>, 'codecs' | 'codecDialect' | 'subscribe'> & {
11
- codecs?: ColumnCodecSource;
12
- codecDialect?: ColumnCodecDialect;
13
- subscribe?: ClientSyncSubscription<ScopeDefs> | ClientSyncSubscription<ScopeDefs>[] | null | ((args: {
14
- identity: Identity;
15
- }) => ClientSyncSubscription<ScopeDefs> | ClientSyncSubscription<ScopeDefs>[] | null);
16
- };
17
- export interface ClientSyncConfig<DB extends SyncClientDb = SyncClientDb, Identity = {
18
- actorId: string;
19
- }> {
20
- handlers: ClientTableHandler<DB>[];
21
- subscriptions(identity: Identity): Array<Omit<SyncSubscriptionRequest, 'cursor'>>;
22
- }
23
- export interface DefineClientSyncOptions {
24
- codecs?: ColumnCodecSource;
25
- codecDialect?: ColumnCodecDialect;
26
- }
27
- export interface ClientSyncBuilder<DB extends SyncClientDb, ScopeDefs extends readonly ScopeDefinition[], Identity> extends ClientSyncConfig<DB, Identity> {
28
- addHandler<TableName extends SharedTableName<DB>>(options: ClientSyncHandlerOptionsForTable<DB, TableName, ScopeDefs, Identity>): this;
29
- }
30
- export declare function defineClientSync<DB extends SyncClientDb, ScopeDefs extends readonly ScopeDefinition[], Identity>(options: DefineClientSyncOptions): ClientSyncBuilder<DB, ScopeDefs, Identity>;
31
- export {};
32
- //# sourceMappingURL=sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EAEf,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,0BAA0B,EAEhC,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,KAAK,sBAAsB,CAAC,SAAS,SAAS,SAAS,eAAe,EAAE,IACtE,IAAI,CAAC,uBAAuB,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC,GAAG;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;CAC7C,CAAC;AAEJ,KAAK,eAAe,CAAC,EAAE,SAAS,YAAY,IAAI,MAAM,EAAE,GAAG,MAAM,CAAC;AAElE,MAAM,MAAM,gCAAgC,CAC1C,EAAE,SAAS,YAAY,EACvB,SAAS,SAAS,eAAe,CAAC,EAAE,CAAC,EACrC,SAAS,SAAS,SAAS,eAAe,EAAE,EAC5C,QAAQ,IACN,IAAI,CACN,0BAA0B,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,EACpD,QAAQ,GAAG,cAAc,GAAG,WAAW,CACxC,GAAG;IACF,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,SAAS,CAAC,EACN,sBAAsB,CAAC,SAAS,CAAC,GACjC,sBAAsB,CAAC,SAAS,CAAC,EAAE,GACnC,IAAI,GACJ,CAAC,CAAC,IAAI,EAAE;QACN,QAAQ,EAAE,QAAQ,CAAC;KACpB,KACG,sBAAsB,CAAC,SAAS,CAAC,GACjC,sBAAsB,CAAC,SAAS,CAAC,EAAE,GACnC,IAAI,CAAC,CAAC;CACf,CAAC;AAEF,MAAM,WAAW,gBAAgB,CAC/B,EAAE,SAAS,YAAY,GAAG,YAAY,EACtC,QAAQ,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;IAE9B,QAAQ,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;IACnC,aAAa,CACX,QAAQ,EAAE,QAAQ,GACjB,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB,CAChC,EAAE,SAAS,YAAY,EACvB,SAAS,SAAS,SAAS,eAAe,EAAE,EAC5C,QAAQ,CACR,SAAQ,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtC,UAAU,CAAC,SAAS,SAAS,eAAe,CAAC,EAAE,CAAC,EAC9C,OAAO,EAAE,gCAAgC,CACvC,EAAE,EACF,SAAS,EACT,SAAS,EACT,QAAQ,CACT,GACA,IAAI,CAAC;CACT;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,SAAS,YAAY,EACvB,SAAS,SAAS,SAAS,eAAe,EAAE,EAC5C,QAAQ,EAER,OAAO,EAAE,uBAAuB,GAC/B,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAuF5C"}
package/dist/sync.js DELETED
@@ -1,55 +0,0 @@
1
- import { createClientHandler, } from './handlers/create-handler.js';
2
- export function defineClientSync(options) {
3
- const handlers = [];
4
- const registeredTables = new Set();
5
- const subscriptionsByTable = new Map();
6
- const toScopeValues = (value) => {
7
- const result = {};
8
- for (const [key, scopeValue] of Object.entries((value ?? {}))) {
9
- if (scopeValue === undefined)
10
- continue;
11
- result[key] = scopeValue;
12
- }
13
- return result;
14
- };
15
- const sync = {
16
- handlers,
17
- addHandler(handlerOptions) {
18
- if (registeredTables.has(handlerOptions.table)) {
19
- throw new Error(`Client table handler already registered: ${handlerOptions.table}`);
20
- }
21
- handlers.push(createClientHandler({
22
- ...handlerOptions,
23
- subscribe: false,
24
- codecs: options.codecs,
25
- codecDialect: options.codecDialect,
26
- }));
27
- subscriptionsByTable.set(handlerOptions.table, handlerOptions.subscribe);
28
- registeredTables.add(handlerOptions.table);
29
- return sync;
30
- },
31
- subscriptions(identity) {
32
- const resolved = [];
33
- for (const [table, subscribe] of subscriptionsByTable.entries()) {
34
- if (!subscribe)
35
- continue;
36
- const value = typeof subscribe === 'function' ? subscribe({ identity }) : subscribe;
37
- if (!value)
38
- continue;
39
- const entries = Array.isArray(value) ? value : [value];
40
- for (const entry of entries) {
41
- resolved.push({
42
- id: entry.id,
43
- table: entry.table ?? table,
44
- scopes: toScopeValues(entry.scopes),
45
- params: entry.params,
46
- bootstrapState: entry.bootstrapState,
47
- });
48
- }
49
- }
50
- return resolved;
51
- },
52
- };
53
- return sync;
54
- }
55
- //# sourceMappingURL=sync.js.map
package/dist/sync.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AAiEnC,MAAM,UAAU,gBAAgB,CAK9B,OAAgC,EACY;IAC5C,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAQjC,CAAC;IAEJ,MAAM,aAAa,GAAG,CACpB,KAAqD,EACzB,EAAE,CAAC;QAC/B,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAC5C,CAAC,KAAK,IAAI,EAAE,CAA2C,CACxD,EAAE,CAAC;YACF,IAAI,UAAU,KAAK,SAAS;gBAAE,SAAS;YACvC,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC;IAAA,CACf,CAAC;IAEF,MAAM,IAAI,GAA+C;QACvD,QAAQ;QACR,UAAU,CACR,cAKC,EACD;YACA,IAAI,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CACb,4CAA4C,cAAc,CAAC,KAAK,EAAE,CACnE,CAAC;YACJ,CAAC;YAED,QAAQ,CAAC,IAAI,CACX,mBAAmB,CAAC;gBAClB,GAAG,cAAc;gBACjB,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC,CACH,CAAC;YACF,oBAAoB,CAAC,GAAG,CACtB,cAAc,CAAC,KAAK,EACpB,cAAc,CAAC,SAKD,CACf,CAAC;YACF,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;QAAA,CACb;QACD,aAAa,CACX,QAAkB,EAC8B;YAChD,MAAM,QAAQ,GAAmD,EAAE,CAAC;YACpE,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,oBAAoB,CAAC,OAAO,EAAE,EAAE,CAAC;gBAChE,IAAI,CAAC,SAAS;oBAAE,SAAS;gBACzB,MAAM,KAAK,GACT,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACxE,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACvD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,QAAQ,CAAC,IAAI,CAAC;wBACZ,EAAE,EAAE,KAAK,CAAC,EAAE;wBACZ,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK;wBAC3B,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;wBACnC,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,cAAc,EAAE,KAAK,CAAC,cAAc;qBACrC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,OAAO,QAAQ,CAAC;QAAA,CACjB;KACF,CAAC;IAEF,OAAO,IAAI,CAAC;AAAA,CACb"}
@@ -1,17 +0,0 @@
1
- /**
2
- * ID generation utilities
3
- */
4
- /**
5
- * Generate a random UUID v4
6
- */
7
- export declare function randomUUID(): string;
8
- /**
9
- * Build a stable state id from meaningful segments.
10
- * Empty/undefined segments are ignored.
11
- */
12
- export declare function buildStateId(...segments: Array<string | null | undefined>): string;
13
- /**
14
- * Create a deterministic fingerprint string for scope values.
15
- */
16
- export declare function createScopeFingerprint(scopes: Record<string, string | string[]>): string;
17
- //# sourceMappingURL=id.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAYnC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,GAAG,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAC5C,MAAM,CAOR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GACxC,MAAM,CAaR"}
package/dist/utils/id.js DELETED
@@ -1,46 +0,0 @@
1
- /**
2
- * ID generation utilities
3
- */
4
- /**
5
- * Generate a random UUID v4
6
- */
7
- export function randomUUID() {
8
- // Use crypto.randomUUID if available (modern browsers, Node, Bun)
9
- if (typeof crypto !== 'undefined' && crypto.randomUUID) {
10
- return crypto.randomUUID();
11
- }
12
- // Fallback implementation
13
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
14
- const r = (Math.random() * 16) | 0;
15
- const v = c === 'x' ? r : (r & 0x3) | 0x8;
16
- return v.toString(16);
17
- });
18
- }
19
- /**
20
- * Build a stable state id from meaningful segments.
21
- * Empty/undefined segments are ignored.
22
- */
23
- export function buildStateId(...segments) {
24
- const normalized = segments
25
- .map((segment) => segment?.trim())
26
- .filter((segment) => !!segment && segment.length > 0);
27
- if (normalized.length === 0)
28
- return 'default';
29
- return normalized.join(':');
30
- }
31
- /**
32
- * Create a deterministic fingerprint string for scope values.
33
- */
34
- export function createScopeFingerprint(scopes) {
35
- const entries = Object.entries(scopes)
36
- .map(([key, value]) => {
37
- const encodedValues = (Array.isArray(value) ? [...value] : [value])
38
- .map((item) => item.trim())
39
- .filter((item) => item.length > 0)
40
- .sort();
41
- return `${key}:${encodedValues.join('|')}`;
42
- })
43
- .sort();
44
- return entries.join(';');
45
- }
46
- //# sourceMappingURL=id.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,UAAU,GAAW;IACnC,kEAAkE;IAClE,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IAED,0BAA0B;IAC1B,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACpE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAAA,CACvB,CAAC,CAAC;AAAA,CACJ;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAG,QAA0C,EACrC;IACR,MAAM,UAAU,GAAG,QAAQ;SACxB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;SACjC,MAAM,CAAC,CAAC,OAAO,EAAqB,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE3E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAAA,CAC7B;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAyC,EACjC;IACR,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACnC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QACrB,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aAChE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACjC,IAAI,EAAE,CAAC;QAEV,OAAO,GAAG,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAAA,CAC5C,CAAC;SACD,IAAI,EAAE,CAAC;IAEV,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAAA,CAC1B"}
@@ -1,7 +0,0 @@
1
- /**
2
- * @syncular/client - Blob storage exports
3
- */
4
-
5
- export * from './manager';
6
- export * from './migrate';
7
- export * from './types';