@rocicorp/zero 0.26.1 → 0.26.2-canary.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 (1086) hide show
  1. package/out/_virtual/_@oxc-project_runtime@0.115.0/helpers/usingCtx.js +57 -0
  2. package/out/_virtual/_rolldown/runtime.js +27 -0
  3. package/out/analyze-query/src/bin-analyze.js +195 -283
  4. package/out/analyze-query/src/bin-analyze.js.map +1 -1
  5. package/out/analyze-query/src/bin-transform.js +35 -40
  6. package/out/analyze-query/src/bin-transform.js.map +1 -1
  7. package/out/analyze-query/src/explain-queries.js +11 -13
  8. package/out/analyze-query/src/explain-queries.js.map +1 -1
  9. package/out/analyze-query/src/run-ast.js +68 -103
  10. package/out/analyze-query/src/run-ast.js.map +1 -1
  11. package/out/ast-to-zql/src/ast-to-zql.js +105 -153
  12. package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
  13. package/out/ast-to-zql/src/bin.js +57 -62
  14. package/out/ast-to-zql/src/bin.js.map +1 -1
  15. package/out/ast-to-zql/src/format.js +14 -13
  16. package/out/ast-to-zql/src/format.js.map +1 -1
  17. package/out/datadog/src/datadog-log-sink.js +148 -213
  18. package/out/datadog/src/datadog-log-sink.js.map +1 -1
  19. package/out/otel/src/enabled.js +9 -11
  20. package/out/otel/src/enabled.js.map +1 -1
  21. package/out/otel/src/log-options.js +25 -35
  22. package/out/otel/src/log-options.js.map +1 -1
  23. package/out/otel/src/maybe-time.js +13 -14
  24. package/out/otel/src/maybe-time.js.map +1 -1
  25. package/out/otel/src/span.js +23 -26
  26. package/out/otel/src/span.js.map +1 -1
  27. package/out/otel/src/test-log-config.js +11 -10
  28. package/out/otel/src/test-log-config.js.map +1 -1
  29. package/out/otel/src/version.js +6 -5
  30. package/out/otel/src/version.js.map +1 -1
  31. package/out/replicache/src/async-iterable-to-array.js +8 -9
  32. package/out/replicache/src/async-iterable-to-array.js.map +1 -1
  33. package/out/replicache/src/bg-interval.js +28 -35
  34. package/out/replicache/src/bg-interval.js.map +1 -1
  35. package/out/replicache/src/btree/diff.js +6 -5
  36. package/out/replicache/src/btree/diff.js.map +1 -1
  37. package/out/replicache/src/btree/node.js +281 -372
  38. package/out/replicache/src/btree/node.js.map +1 -1
  39. package/out/replicache/src/btree/read.js +155 -256
  40. package/out/replicache/src/btree/read.js.map +1 -1
  41. package/out/replicache/src/btree/splice.js +60 -80
  42. package/out/replicache/src/btree/splice.js.map +1 -1
  43. package/out/replicache/src/btree/write.js +134 -158
  44. package/out/replicache/src/btree/write.js.map +1 -1
  45. package/out/replicache/src/call-default-fetch.js +28 -32
  46. package/out/replicache/src/call-default-fetch.js.map +1 -1
  47. package/out/replicache/src/config.js +2 -0
  48. package/out/replicache/src/connection-loop-delegates.js +31 -33
  49. package/out/replicache/src/connection-loop-delegates.js.map +1 -1
  50. package/out/replicache/src/connection-loop.js +174 -240
  51. package/out/replicache/src/connection-loop.js.map +1 -1
  52. package/out/replicache/src/cookies.js +22 -32
  53. package/out/replicache/src/cookies.js.map +1 -1
  54. package/out/replicache/src/dag/chunk.js +44 -50
  55. package/out/replicache/src/dag/chunk.js.map +1 -1
  56. package/out/replicache/src/dag/gc.js +94 -114
  57. package/out/replicache/src/dag/gc.js.map +1 -1
  58. package/out/replicache/src/dag/key.js +9 -11
  59. package/out/replicache/src/dag/key.js.map +1 -1
  60. package/out/replicache/src/dag/lazy-store.js +458 -510
  61. package/out/replicache/src/dag/lazy-store.js.map +1 -1
  62. package/out/replicache/src/dag/store-impl.js +147 -178
  63. package/out/replicache/src/dag/store-impl.js.map +1 -1
  64. package/out/replicache/src/dag/store.js +19 -22
  65. package/out/replicache/src/dag/store.js.map +1 -1
  66. package/out/replicache/src/dag/visitor.js +23 -21
  67. package/out/replicache/src/dag/visitor.js.map +1 -1
  68. package/out/replicache/src/db/commit.js +209 -283
  69. package/out/replicache/src/db/commit.js.map +1 -1
  70. package/out/replicache/src/db/index.js +79 -122
  71. package/out/replicache/src/db/index.js.map +1 -1
  72. package/out/replicache/src/db/read.js +44 -60
  73. package/out/replicache/src/db/read.js.map +1 -1
  74. package/out/replicache/src/db/rebase.js +22 -77
  75. package/out/replicache/src/db/rebase.js.map +1 -1
  76. package/out/replicache/src/db/write.js +162 -296
  77. package/out/replicache/src/db/write.js.map +1 -1
  78. package/out/replicache/src/deleted-clients.js +59 -87
  79. package/out/replicache/src/deleted-clients.js.map +1 -1
  80. package/out/replicache/src/error-responses.js +18 -26
  81. package/out/replicache/src/error-responses.js.map +1 -1
  82. package/out/replicache/src/expo-sqlite.js +2 -0
  83. package/out/replicache/src/frozen-json.js +74 -108
  84. package/out/replicache/src/frozen-json.js.map +1 -1
  85. package/out/replicache/src/get-default-puller.js +34 -46
  86. package/out/replicache/src/get-default-puller.js.map +1 -1
  87. package/out/replicache/src/get-default-pusher.js +25 -33
  88. package/out/replicache/src/get-default-pusher.js.map +1 -1
  89. package/out/replicache/src/get-kv-store-provider.js +18 -20
  90. package/out/replicache/src/get-kv-store-provider.js.map +1 -1
  91. package/out/replicache/src/hash.js +29 -29
  92. package/out/replicache/src/hash.js.map +1 -1
  93. package/out/replicache/src/http-request-info.js +9 -8
  94. package/out/replicache/src/http-request-info.js.map +1 -1
  95. package/out/replicache/src/impl.js +2 -0
  96. package/out/replicache/src/index-defs.js +17 -28
  97. package/out/replicache/src/index-defs.js.map +1 -1
  98. package/out/replicache/src/kv/expo-sqlite/store.js +52 -50
  99. package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
  100. package/out/replicache/src/kv/idb-store-with-mem-fallback.js +71 -68
  101. package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -1
  102. package/out/replicache/src/kv/idb-store.js +144 -168
  103. package/out/replicache/src/kv/idb-store.js.map +1 -1
  104. package/out/replicache/src/kv/mem-store.js +57 -45
  105. package/out/replicache/src/kv/mem-store.js.map +1 -1
  106. package/out/replicache/src/kv/op-sqlite/store.js +56 -62
  107. package/out/replicache/src/kv/op-sqlite/store.js.map +1 -1
  108. package/out/replicache/src/kv/op-sqlite/types.d.ts.map +1 -1
  109. package/out/replicache/src/kv/op-sqlite/types.js +7 -6
  110. package/out/replicache/src/kv/op-sqlite/types.js.map +1 -1
  111. package/out/replicache/src/kv/read-impl.js +26 -25
  112. package/out/replicache/src/kv/read-impl.js.map +1 -1
  113. package/out/replicache/src/kv/sqlite-store.js +194 -207
  114. package/out/replicache/src/kv/sqlite-store.js.map +1 -1
  115. package/out/replicache/src/kv/throw-if-closed.js +12 -19
  116. package/out/replicache/src/kv/throw-if-closed.js.map +1 -1
  117. package/out/replicache/src/kv/write-impl-base.js +44 -56
  118. package/out/replicache/src/kv/write-impl-base.js.map +1 -1
  119. package/out/replicache/src/kv/write-impl.js +22 -26
  120. package/out/replicache/src/kv/write-impl.js.map +1 -1
  121. package/out/replicache/src/lazy.js +10 -11
  122. package/out/replicache/src/lazy.js.map +1 -1
  123. package/out/replicache/src/log-options.js +14 -7
  124. package/out/replicache/src/log-options.js.map +1 -1
  125. package/out/replicache/src/make-idb-name.js +14 -9
  126. package/out/replicache/src/make-idb-name.js.map +1 -1
  127. package/out/replicache/src/mutation-recovery.js +12 -0
  128. package/out/replicache/src/mutation-recovery.js.map +1 -0
  129. package/out/replicache/src/new-client-channel.js +34 -42
  130. package/out/replicache/src/new-client-channel.js.map +1 -1
  131. package/out/replicache/src/on-persist-channel.js +26 -29
  132. package/out/replicache/src/on-persist-channel.js.map +1 -1
  133. package/out/replicache/src/op-sqlite.js +2 -0
  134. package/out/replicache/src/patch-operation.js +27 -36
  135. package/out/replicache/src/patch-operation.js.map +1 -1
  136. package/out/replicache/src/pending-mutations.js +14 -12
  137. package/out/replicache/src/pending-mutations.js.map +1 -1
  138. package/out/replicache/src/persist/client-gc.js +36 -51
  139. package/out/replicache/src/persist/client-gc.js.map +1 -1
  140. package/out/replicache/src/persist/client-group-gc.js +29 -36
  141. package/out/replicache/src/persist/client-group-gc.js.map +1 -1
  142. package/out/replicache/src/persist/client-groups.js +80 -154
  143. package/out/replicache/src/persist/client-groups.js.map +1 -1
  144. package/out/replicache/src/persist/clients.js +212 -307
  145. package/out/replicache/src/persist/clients.js.map +1 -1
  146. package/out/replicache/src/persist/collect-idb-databases.js +109 -171
  147. package/out/replicache/src/persist/collect-idb-databases.js.map +1 -1
  148. package/out/replicache/src/persist/gather-mem-only-visitor.js +23 -24
  149. package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -1
  150. package/out/replicache/src/persist/gather-not-cached-visitor.js +35 -33
  151. package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -1
  152. package/out/replicache/src/persist/heartbeat.js +31 -41
  153. package/out/replicache/src/persist/heartbeat.js.map +1 -1
  154. package/out/replicache/src/persist/idb-databases-store-db-name.js +9 -12
  155. package/out/replicache/src/persist/idb-databases-store-db-name.js.map +1 -1
  156. package/out/replicache/src/persist/idb-databases-store.js +78 -97
  157. package/out/replicache/src/persist/idb-databases-store.js.map +1 -1
  158. package/out/replicache/src/persist/make-client-id.js +13 -9
  159. package/out/replicache/src/persist/make-client-id.js.map +1 -1
  160. package/out/replicache/src/persist/persist.js +113 -174
  161. package/out/replicache/src/persist/persist.js.map +1 -1
  162. package/out/replicache/src/persist/refresh.js +94 -183
  163. package/out/replicache/src/persist/refresh.js.map +1 -1
  164. package/out/replicache/src/process-scheduler.js +122 -143
  165. package/out/replicache/src/process-scheduler.js.map +1 -1
  166. package/out/replicache/src/pusher.js +21 -26
  167. package/out/replicache/src/pusher.js.map +1 -1
  168. package/out/replicache/src/replicache-impl.js +844 -1184
  169. package/out/replicache/src/replicache-impl.js.map +1 -1
  170. package/out/replicache/src/report-error.js +9 -6
  171. package/out/replicache/src/report-error.js.map +1 -1
  172. package/out/replicache/src/request-idle.js +13 -11
  173. package/out/replicache/src/request-idle.js.map +1 -1
  174. package/out/replicache/src/scan-iterator.d.ts.map +1 -1
  175. package/out/replicache/src/scan-iterator.js +108 -135
  176. package/out/replicache/src/scan-iterator.js.map +1 -1
  177. package/out/replicache/src/scan-options.js +33 -39
  178. package/out/replicache/src/scan-options.js.map +1 -1
  179. package/out/replicache/src/set-interval-with-signal.js +11 -10
  180. package/out/replicache/src/set-interval-with-signal.js.map +1 -1
  181. package/out/replicache/src/sqlite.js +2 -0
  182. package/out/replicache/src/subscriptions.js +222 -338
  183. package/out/replicache/src/subscriptions.js.map +1 -1
  184. package/out/replicache/src/sync/diff.js +52 -65
  185. package/out/replicache/src/sync/diff.js.map +1 -1
  186. package/out/replicache/src/sync/ids.js +8 -9
  187. package/out/replicache/src/sync/ids.js.map +1 -1
  188. package/out/replicache/src/sync/patch.js +34 -45
  189. package/out/replicache/src/sync/patch.js.map +1 -1
  190. package/out/replicache/src/sync/pull-error.js +15 -15
  191. package/out/replicache/src/sync/pull-error.js.map +1 -1
  192. package/out/replicache/src/sync/pull.js +145 -283
  193. package/out/replicache/src/sync/pull.js.map +1 -1
  194. package/out/replicache/src/sync/push.js +64 -79
  195. package/out/replicache/src/sync/push.js.map +1 -1
  196. package/out/replicache/src/sync/request-id.js +23 -15
  197. package/out/replicache/src/sync/request-id.js.map +1 -1
  198. package/out/replicache/src/sync/sync-head-name.js +6 -5
  199. package/out/replicache/src/sync/sync-head-name.js.map +1 -1
  200. package/out/replicache/src/to-error.js +7 -8
  201. package/out/replicache/src/to-error.js.map +1 -1
  202. package/out/replicache/src/transaction-closed-error.js +15 -15
  203. package/out/replicache/src/transaction-closed-error.js.map +1 -1
  204. package/out/replicache/src/transactions.js +120 -140
  205. package/out/replicache/src/transactions.js.map +1 -1
  206. package/out/replicache/src/version.js +9 -5
  207. package/out/replicache/src/version.js.map +1 -1
  208. package/out/replicache/src/with-transactions.js +23 -20
  209. package/out/replicache/src/with-transactions.js.map +1 -1
  210. package/out/shared/src/abort-error.js +7 -6
  211. package/out/shared/src/abort-error.js.map +1 -1
  212. package/out/shared/src/arrays.js +35 -42
  213. package/out/shared/src/arrays.js.map +1 -1
  214. package/out/shared/src/asserts.js +21 -45
  215. package/out/shared/src/asserts.js.map +1 -1
  216. package/out/shared/src/bigint-json.js +42 -38
  217. package/out/shared/src/bigint-json.js.map +1 -1
  218. package/out/shared/src/binary-search.js +27 -18
  219. package/out/shared/src/binary-search.js.map +1 -1
  220. package/out/shared/src/broadcast-channel.js +20 -23
  221. package/out/shared/src/broadcast-channel.js.map +1 -1
  222. package/out/shared/src/browser-env.js +11 -17
  223. package/out/shared/src/browser-env.js.map +1 -1
  224. package/out/shared/src/btree-set.js +419 -481
  225. package/out/shared/src/btree-set.js.map +1 -1
  226. package/out/shared/src/cache.js +43 -36
  227. package/out/shared/src/cache.js.map +1 -1
  228. package/out/shared/src/centroid.js +24 -26
  229. package/out/shared/src/centroid.js.map +1 -1
  230. package/out/shared/src/config.js +6 -6
  231. package/out/shared/src/config.js.map +1 -1
  232. package/out/shared/src/custom-key-map.js +54 -58
  233. package/out/shared/src/custom-key-map.js.map +1 -1
  234. package/out/shared/src/custom-key-set.js +53 -51
  235. package/out/shared/src/custom-key-set.js.map +1 -1
  236. package/out/shared/src/deep-clone.js +30 -41
  237. package/out/shared/src/deep-clone.js.map +1 -1
  238. package/out/shared/src/deep-merge.js +25 -24
  239. package/out/shared/src/deep-merge.js.map +1 -1
  240. package/out/shared/src/document-visible.js +63 -70
  241. package/out/shared/src/document-visible.js.map +1 -1
  242. package/out/shared/src/dotenv.js +7 -3
  243. package/out/shared/src/dotenv.js.map +1 -1
  244. package/out/shared/src/error.js +43 -64
  245. package/out/shared/src/error.js.map +1 -1
  246. package/out/shared/src/has-own.js +6 -5
  247. package/out/shared/src/has-own.js.map +1 -1
  248. package/out/shared/src/hash.js +15 -14
  249. package/out/shared/src/hash.js.map +1 -1
  250. package/out/shared/src/iterables.js +34 -47
  251. package/out/shared/src/iterables.js.map +1 -1
  252. package/out/shared/src/json-schema.js +25 -30
  253. package/out/shared/src/json-schema.js.map +1 -1
  254. package/out/shared/src/json.js +90 -129
  255. package/out/shared/src/json.js.map +1 -1
  256. package/out/shared/src/logging-test-utils.js +9 -11
  257. package/out/shared/src/logging-test-utils.js.map +1 -1
  258. package/out/shared/src/logging.js +75 -95
  259. package/out/shared/src/logging.js.map +1 -1
  260. package/out/shared/src/must.js +7 -8
  261. package/out/shared/src/must.js.map +1 -1
  262. package/out/shared/src/navigator.js +6 -5
  263. package/out/shared/src/navigator.js.map +1 -1
  264. package/out/shared/src/object-traversal.js +23 -23
  265. package/out/shared/src/object-traversal.js.map +1 -1
  266. package/out/shared/src/objects.js +15 -18
  267. package/out/shared/src/objects.js.map +1 -1
  268. package/out/shared/src/options.js +225 -302
  269. package/out/shared/src/options.js.map +1 -1
  270. package/out/shared/src/parse-big-int.js +12 -11
  271. package/out/shared/src/parse-big-int.js.map +1 -1
  272. package/out/shared/src/promise-race.js +21 -17
  273. package/out/shared/src/promise-race.js.map +1 -1
  274. package/out/shared/src/queue.js +124 -124
  275. package/out/shared/src/queue.js.map +1 -1
  276. package/out/shared/src/rand.js +13 -7
  277. package/out/shared/src/rand.js.map +1 -1
  278. package/out/shared/src/random-uint64.js +8 -7
  279. package/out/shared/src/random-uint64.js.map +1 -1
  280. package/out/shared/src/random-values.js +8 -11
  281. package/out/shared/src/random-values.js.map +1 -1
  282. package/out/shared/src/record-proxy.js +68 -57
  283. package/out/shared/src/record-proxy.js.map +1 -1
  284. package/out/shared/src/resolved-promises.js +9 -11
  285. package/out/shared/src/resolved-promises.js.map +1 -1
  286. package/out/shared/src/sentinels.js +9 -12
  287. package/out/shared/src/sentinels.js.map +1 -1
  288. package/out/shared/src/set-utils.js +41 -63
  289. package/out/shared/src/set-utils.js.map +1 -1
  290. package/out/shared/src/size-of-value.js +55 -51
  291. package/out/shared/src/size-of-value.js.map +1 -1
  292. package/out/shared/src/sleep.js +50 -45
  293. package/out/shared/src/sleep.js.map +1 -1
  294. package/out/shared/src/string-compare.js +8 -11
  295. package/out/shared/src/string-compare.js.map +1 -1
  296. package/out/shared/src/subscribable.js +34 -33
  297. package/out/shared/src/subscribable.js.map +1 -1
  298. package/out/shared/src/tdigest-schema.js +11 -7
  299. package/out/shared/src/tdigest-schema.js.map +1 -1
  300. package/out/shared/src/tdigest.js +197 -270
  301. package/out/shared/src/tdigest.js.map +1 -1
  302. package/out/shared/src/valita.js +145 -174
  303. package/out/shared/src/valita.js.map +1 -1
  304. package/out/z2s/src/compiler.d.ts.map +1 -1
  305. package/out/z2s/src/compiler.js +238 -468
  306. package/out/z2s/src/compiler.js.map +1 -1
  307. package/out/z2s/src/sql.d.ts +0 -1
  308. package/out/z2s/src/sql.d.ts.map +1 -1
  309. package/out/z2s/src/sql.js +149 -194
  310. package/out/z2s/src/sql.js.map +1 -1
  311. package/out/zero/package.js +193 -0
  312. package/out/zero/package.js.map +1 -0
  313. package/out/zero/src/adapters/drizzle.js +1 -6
  314. package/out/zero/src/adapters/pg.js +1 -6
  315. package/out/zero/src/adapters/postgresjs.js +1 -6
  316. package/out/zero/src/adapters/prisma.js +1 -5
  317. package/out/zero/src/analyze-query.js +1 -1
  318. package/out/zero/src/ast-to-zql.js +1 -1
  319. package/out/zero/src/bindings.js +6 -21
  320. package/out/zero/src/build-schema.js +5 -1
  321. package/out/zero/src/build-schema.js.map +1 -1
  322. package/out/zero/src/change-protocol/v0.js +3 -5
  323. package/out/zero/src/cli.js +2 -2
  324. package/out/zero/src/deploy-permissions.js +1 -1
  325. package/out/zero/src/expo-sqlite.js +2 -4
  326. package/out/zero/src/op-sqlite.js +2 -4
  327. package/out/zero/src/pg.js +2 -20
  328. package/out/zero/src/react-native.js +16 -12
  329. package/out/zero/src/react-native.js.map +1 -1
  330. package/out/zero/src/react.js +3 -12
  331. package/out/zero/src/server/runner/main.js +2 -0
  332. package/out/zero/src/server.js +2 -17
  333. package/out/zero/src/solid.js +3 -12
  334. package/out/zero/src/sqlite.js +2 -6
  335. package/out/zero/src/transform-query.js +1 -1
  336. package/out/zero/src/zero-cache-dev.js +124 -151
  337. package/out/zero/src/zero-cache-dev.js.map +1 -1
  338. package/out/zero/src/zero-out.js +9 -6
  339. package/out/zero/src/zero-out.js.map +1 -1
  340. package/out/zero/src/zero.js +6 -55
  341. package/out/zero/src/zqlite.js +2 -7
  342. package/out/zero-cache/src/auth/auth.js +138 -172
  343. package/out/zero-cache/src/auth/auth.js.map +1 -1
  344. package/out/zero-cache/src/auth/jwt.js +25 -33
  345. package/out/zero-cache/src/auth/jwt.js.map +1 -1
  346. package/out/zero-cache/src/auth/load-permissions.js +54 -62
  347. package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
  348. package/out/zero-cache/src/auth/read-authorizer.js +70 -80
  349. package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
  350. package/out/zero-cache/src/auth/write-authorizer.js +284 -432
  351. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  352. package/out/zero-cache/src/config/network.js +31 -45
  353. package/out/zero-cache/src/config/network.js.map +1 -1
  354. package/out/zero-cache/src/config/normalize.js +81 -83
  355. package/out/zero-cache/src/config/normalize.js.map +1 -1
  356. package/out/zero-cache/src/config/server-context.js +32 -29
  357. package/out/zero-cache/src/config/server-context.js.map +1 -1
  358. package/out/zero-cache/src/config/zero-config.js +753 -833
  359. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  360. package/out/zero-cache/src/custom/fetch.js +183 -230
  361. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  362. package/out/zero-cache/src/custom-queries/transform-query.js +93 -99
  363. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  364. package/out/zero-cache/src/db/create.js +27 -29
  365. package/out/zero-cache/src/db/create.js.map +1 -1
  366. package/out/zero-cache/src/db/delete-lite-db.js +11 -7
  367. package/out/zero-cache/src/db/delete-lite-db.js.map +1 -1
  368. package/out/zero-cache/src/db/lite-tables.js +118 -158
  369. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  370. package/out/zero-cache/src/db/migration-lite.js +110 -178
  371. package/out/zero-cache/src/db/migration-lite.js.map +1 -1
  372. package/out/zero-cache/src/db/migration.js +82 -151
  373. package/out/zero-cache/src/db/migration.js.map +1 -1
  374. package/out/zero-cache/src/db/mode-enum.js +8 -9
  375. package/out/zero-cache/src/db/mode-enum.js.map +1 -1
  376. package/out/zero-cache/src/db/pg-copy.js +56 -54
  377. package/out/zero-cache/src/db/pg-copy.js.map +1 -1
  378. package/out/zero-cache/src/db/pg-to-lite.js +74 -110
  379. package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
  380. package/out/zero-cache/src/db/pg-type-parser.js +19 -36
  381. package/out/zero-cache/src/db/pg-type-parser.js.map +1 -1
  382. package/out/zero-cache/src/db/run-transaction.js +19 -20
  383. package/out/zero-cache/src/db/run-transaction.js.map +1 -1
  384. package/out/zero-cache/src/db/specs.js +42 -78
  385. package/out/zero-cache/src/db/specs.js.map +1 -1
  386. package/out/zero-cache/src/db/statements.js +52 -59
  387. package/out/zero-cache/src/db/statements.js.map +1 -1
  388. package/out/zero-cache/src/db/transaction-pool.js +376 -400
  389. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  390. package/out/zero-cache/src/db/warmup.js +13 -24
  391. package/out/zero-cache/src/db/warmup.js.map +1 -1
  392. package/out/zero-cache/src/observability/events.js +89 -99
  393. package/out/zero-cache/src/observability/events.js.map +1 -1
  394. package/out/zero-cache/src/observability/metrics.js +30 -54
  395. package/out/zero-cache/src/observability/metrics.js.map +1 -1
  396. package/out/zero-cache/src/scripts/decommission.js +42 -47
  397. package/out/zero-cache/src/scripts/decommission.js.map +1 -1
  398. package/out/zero-cache/src/scripts/deploy-permissions.js +106 -144
  399. package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
  400. package/out/zero-cache/src/scripts/permissions.js +86 -107
  401. package/out/zero-cache/src/scripts/permissions.js.map +1 -1
  402. package/out/zero-cache/src/server/anonymous-otel-start.js +306 -440
  403. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
  404. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  405. package/out/zero-cache/src/server/change-streamer.js +57 -130
  406. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  407. package/out/zero-cache/src/server/inspector-delegate.js +89 -100
  408. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  409. package/out/zero-cache/src/server/logging.js +18 -26
  410. package/out/zero-cache/src/server/logging.js.map +1 -1
  411. package/out/zero-cache/src/server/main.js +85 -142
  412. package/out/zero-cache/src/server/main.js.map +1 -1
  413. package/out/zero-cache/src/server/mutator.js +16 -13
  414. package/out/zero-cache/src/server/mutator.js.map +1 -1
  415. package/out/zero-cache/src/server/otel-diag-logger.js +42 -49
  416. package/out/zero-cache/src/server/otel-diag-logger.js.map +1 -1
  417. package/out/zero-cache/src/server/otel-log-sink.js +34 -44
  418. package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
  419. package/out/zero-cache/src/server/otel-start.js +43 -51
  420. package/out/zero-cache/src/server/otel-start.js.map +1 -1
  421. package/out/zero-cache/src/server/priority-op.js +27 -25
  422. package/out/zero-cache/src/server/priority-op.js.map +1 -1
  423. package/out/zero-cache/src/server/reaper.js +32 -43
  424. package/out/zero-cache/src/server/reaper.js.map +1 -1
  425. package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
  426. package/out/zero-cache/src/server/replicator.js +41 -57
  427. package/out/zero-cache/src/server/replicator.js.map +1 -1
  428. package/out/zero-cache/src/server/runner/main.js +7 -8
  429. package/out/zero-cache/src/server/runner/main.js.map +1 -1
  430. package/out/zero-cache/src/server/runner/run-worker.js +56 -52
  431. package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
  432. package/out/zero-cache/src/server/runner/runtime.js +26 -32
  433. package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
  434. package/out/zero-cache/src/server/runner/zero-dispatcher.js +22 -27
  435. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  436. package/out/zero-cache/src/server/syncer.js +79 -148
  437. package/out/zero-cache/src/server/syncer.js.map +1 -1
  438. package/out/zero-cache/src/server/worker-dispatcher.js +84 -113
  439. package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
  440. package/out/zero-cache/src/server/worker-urls.d.ts +2 -1
  441. package/out/zero-cache/src/server/worker-urls.d.ts.map +1 -1
  442. package/out/zero-cache/src/server/worker-urls.js +14 -18
  443. package/out/zero-cache/src/server/worker-urls.js.map +1 -1
  444. package/out/zero-cache/src/server/write-worker.js +2 -0
  445. package/out/zero-cache/src/services/analyze.js +61 -130
  446. package/out/zero-cache/src/services/analyze.js.map +1 -1
  447. package/out/zero-cache/src/services/change-source/common/backfill-manager.js +420 -419
  448. package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
  449. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js +111 -114
  450. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -1
  451. package/out/zero-cache/src/services/change-source/common/replica-schema.js +80 -148
  452. package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
  453. package/out/zero-cache/src/services/change-source/custom/change-source.js +154 -216
  454. package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
  455. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js +11 -14
  456. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +1 -1
  457. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +168 -212
  458. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
  459. package/out/zero-cache/src/services/change-source/pg/change-source.js +672 -892
  460. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  461. package/out/zero-cache/src/services/change-source/pg/decommission.js +19 -23
  462. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
  463. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +258 -411
  464. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  465. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js +59 -65
  466. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
  467. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js +218 -247
  468. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
  469. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +100 -142
  470. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
  471. package/out/zero-cache/src/services/change-source/pg/lsn.js +17 -19
  472. package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
  473. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +88 -98
  474. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  475. package/out/zero-cache/src/services/change-source/pg/schema/init.js +96 -177
  476. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  477. package/out/zero-cache/src/services/change-source/pg/schema/published.js +69 -107
  478. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
  479. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +151 -212
  480. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  481. package/out/zero-cache/src/services/change-source/pg/schema/validation.js +22 -53
  482. package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
  483. package/out/zero-cache/src/services/change-source/protocol/current/control.js +24 -12
  484. package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
  485. package/out/zero-cache/src/services/change-source/protocol/current/data.js +180 -290
  486. package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
  487. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js +21 -33
  488. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
  489. package/out/zero-cache/src/services/change-source/protocol/current/json.js +7 -18
  490. package/out/zero-cache/src/services/change-source/protocol/current/json.js.map +1 -1
  491. package/out/zero-cache/src/services/change-source/protocol/current/path.js +24 -5
  492. package/out/zero-cache/src/services/change-source/protocol/current/path.js.map +1 -1
  493. package/out/zero-cache/src/services/change-source/protocol/current/status.js +25 -19
  494. package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
  495. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js +24 -16
  496. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
  497. package/out/zero-cache/src/services/change-source/protocol/current.js +51 -46
  498. package/out/zero-cache/src/services/change-source/protocol/current.js.map +1 -1
  499. package/out/zero-cache/src/services/change-source/protocol/mod.js +2 -0
  500. package/out/zero-cache/src/services/change-streamer/backup-monitor.js +165 -171
  501. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  502. package/out/zero-cache/src/services/change-streamer/broadcast.js +163 -169
  503. package/out/zero-cache/src/services/change-streamer/broadcast.js.map +1 -1
  504. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +154 -221
  505. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  506. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  507. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +340 -299
  508. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  509. package/out/zero-cache/src/services/change-streamer/change-streamer.js +17 -24
  510. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  511. package/out/zero-cache/src/services/change-streamer/forwarder.js +84 -103
  512. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  513. package/out/zero-cache/src/services/change-streamer/replica-monitor.js +49 -43
  514. package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -1
  515. package/out/zero-cache/src/services/change-streamer/schema/init.js +61 -89
  516. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  517. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +20 -1
  518. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
  519. package/out/zero-cache/src/services/change-streamer/schema/tables.js +131 -109
  520. package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
  521. package/out/zero-cache/src/services/change-streamer/snapshot.js +26 -28
  522. package/out/zero-cache/src/services/change-streamer/snapshot.js.map +1 -1
  523. package/out/zero-cache/src/services/change-streamer/storer.js +434 -513
  524. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  525. package/out/zero-cache/src/services/change-streamer/subscriber.js +142 -155
  526. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  527. package/out/zero-cache/src/services/heapz.js +18 -20
  528. package/out/zero-cache/src/services/heapz.js.map +1 -1
  529. package/out/zero-cache/src/services/http-service.js +59 -57
  530. package/out/zero-cache/src/services/http-service.js.map +1 -1
  531. package/out/zero-cache/src/services/life-cycle.js +182 -214
  532. package/out/zero-cache/src/services/life-cycle.js.map +1 -1
  533. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +102 -81
  534. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
  535. package/out/zero-cache/src/services/litestream/commands.js +144 -205
  536. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  537. package/out/zero-cache/src/services/mutagen/error.js +10 -14
  538. package/out/zero-cache/src/services/mutagen/error.js.map +1 -1
  539. package/out/zero-cache/src/services/mutagen/mutagen.js +166 -264
  540. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  541. package/out/zero-cache/src/services/mutagen/pusher.js +372 -487
  542. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  543. package/out/zero-cache/src/services/replicator/change-processor.js +483 -592
  544. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  545. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +4 -2
  546. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  547. package/out/zero-cache/src/services/replicator/incremental-sync.js +118 -143
  548. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  549. package/out/zero-cache/src/services/replicator/notifier.js +52 -28
  550. package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
  551. package/out/zero-cache/src/services/replicator/replication-status.js +105 -128
  552. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  553. package/out/zero-cache/src/services/replicator/replicator.d.ts +2 -1
  554. package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
  555. package/out/zero-cache/src/services/replicator/replicator.js +32 -34
  556. package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
  557. package/out/zero-cache/src/services/replicator/schema/change-log.js +101 -133
  558. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  559. package/out/zero-cache/src/services/replicator/schema/column-metadata.js +145 -174
  560. package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -1
  561. package/out/zero-cache/src/services/replicator/schema/constants.js +11 -5
  562. package/out/zero-cache/src/services/replicator/schema/constants.js.map +1 -1
  563. package/out/zero-cache/src/services/replicator/schema/replication-state.js +56 -107
  564. package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
  565. package/out/zero-cache/src/services/replicator/schema/table-metadata.js +81 -66
  566. package/out/zero-cache/src/services/replicator/schema/table-metadata.js.map +1 -1
  567. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts +69 -0
  568. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts.map +1 -0
  569. package/out/zero-cache/src/services/replicator/write-worker-client.js +96 -0
  570. package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -0
  571. package/out/zero-cache/src/services/replicator/write-worker.js +68 -0
  572. package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -0
  573. package/out/zero-cache/src/services/run-ast.js +79 -120
  574. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  575. package/out/zero-cache/src/services/runner.js +39 -41
  576. package/out/zero-cache/src/services/runner.js.map +1 -1
  577. package/out/zero-cache/src/services/running-state.js +129 -134
  578. package/out/zero-cache/src/services/running-state.js.map +1 -1
  579. package/out/zero-cache/src/services/statz.js +139 -200
  580. package/out/zero-cache/src/services/statz.js.map +1 -1
  581. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +46 -49
  582. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
  583. package/out/zero-cache/src/services/view-syncer/client-handler.js +257 -299
  584. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  585. package/out/zero-cache/src/services/view-syncer/client-schema.js +52 -82
  586. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  587. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +85 -107
  588. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
  589. package/out/zero-cache/src/services/view-syncer/cvr-store.js +604 -757
  590. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  591. package/out/zero-cache/src/services/view-syncer/cvr.js +631 -739
  592. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  593. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +60 -40
  594. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  595. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +95 -178
  596. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  597. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  598. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +572 -722
  599. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  600. package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts.map +1 -1
  601. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +246 -257
  602. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  603. package/out/zero-cache/src/services/view-syncer/schema/cvr.js +59 -45
  604. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
  605. package/out/zero-cache/src/services/view-syncer/schema/init.js +121 -189
  606. package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
  607. package/out/zero-cache/src/services/view-syncer/schema/types.js +138 -263
  608. package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
  609. package/out/zero-cache/src/services/view-syncer/snapshotter.js +322 -335
  610. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  611. package/out/zero-cache/src/services/view-syncer/tracer.js +7 -6
  612. package/out/zero-cache/src/services/view-syncer/tracer.js.map +1 -1
  613. package/out/zero-cache/src/services/view-syncer/ttl-clock.js +9 -11
  614. package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
  615. package/out/zero-cache/src/services/view-syncer/view-syncer.js +1067 -1603
  616. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  617. package/out/zero-cache/src/types/error-with-level.js +19 -25
  618. package/out/zero-cache/src/types/error-with-level.js.map +1 -1
  619. package/out/zero-cache/src/types/http.js +17 -26
  620. package/out/zero-cache/src/types/http.js.map +1 -1
  621. package/out/zero-cache/src/types/lexi-version.js +28 -42
  622. package/out/zero-cache/src/types/lexi-version.js.map +1 -1
  623. package/out/zero-cache/src/types/lite.js +101 -121
  624. package/out/zero-cache/src/types/lite.js.map +1 -1
  625. package/out/zero-cache/src/types/names.js +6 -5
  626. package/out/zero-cache/src/types/names.js.map +1 -1
  627. package/out/zero-cache/src/types/pg-data-type.d.ts +1 -0
  628. package/out/zero-cache/src/types/pg-data-type.d.ts.map +1 -1
  629. package/out/zero-cache/src/types/pg-data-type.js +58 -73
  630. package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
  631. package/out/zero-cache/src/types/pg-types.js +12 -19
  632. package/out/zero-cache/src/types/pg-types.js.map +1 -1
  633. package/out/zero-cache/src/types/pg.js +144 -218
  634. package/out/zero-cache/src/types/pg.js.map +1 -1
  635. package/out/zero-cache/src/types/processes.js +95 -90
  636. package/out/zero-cache/src/types/processes.js.map +1 -1
  637. package/out/zero-cache/src/types/profiler.js +32 -27
  638. package/out/zero-cache/src/types/profiler.js.map +1 -1
  639. package/out/zero-cache/src/types/row-key.js +42 -30
  640. package/out/zero-cache/src/types/row-key.js.map +1 -1
  641. package/out/zero-cache/src/types/shards.js +36 -45
  642. package/out/zero-cache/src/types/shards.js.map +1 -1
  643. package/out/zero-cache/src/types/sql.js +20 -9
  644. package/out/zero-cache/src/types/sql.js.map +1 -1
  645. package/out/zero-cache/src/types/state-version.js +17 -23
  646. package/out/zero-cache/src/types/state-version.js.map +1 -1
  647. package/out/zero-cache/src/types/streams.js +234 -270
  648. package/out/zero-cache/src/types/streams.js.map +1 -1
  649. package/out/zero-cache/src/types/strings.js +10 -13
  650. package/out/zero-cache/src/types/strings.js.map +1 -1
  651. package/out/zero-cache/src/types/subscription.js +266 -226
  652. package/out/zero-cache/src/types/subscription.js.map +1 -1
  653. package/out/zero-cache/src/types/url-params.js +30 -39
  654. package/out/zero-cache/src/types/url-params.js.map +1 -1
  655. package/out/zero-cache/src/types/websocket-handoff.js +62 -75
  656. package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
  657. package/out/zero-cache/src/types/ws.js +43 -53
  658. package/out/zero-cache/src/types/ws.js.map +1 -1
  659. package/out/zero-cache/src/workers/connect-params.js +42 -43
  660. package/out/zero-cache/src/workers/connect-params.js.map +1 -1
  661. package/out/zero-cache/src/workers/connection.js +213 -282
  662. package/out/zero-cache/src/workers/connection.js.map +1 -1
  663. package/out/zero-cache/src/workers/mutator.js +22 -21
  664. package/out/zero-cache/src/workers/mutator.js.map +1 -1
  665. package/out/zero-cache/src/workers/replicator.d.ts +7 -0
  666. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  667. package/out/zero-cache/src/workers/replicator.js +92 -97
  668. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  669. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +121 -203
  670. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  671. package/out/zero-cache/src/workers/syncer.js +147 -201
  672. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  673. package/out/zero-client/src/client/active-clients-manager.js +178 -187
  674. package/out/zero-client/src/client/active-clients-manager.js.map +1 -1
  675. package/out/zero-client/src/client/bindings.js +11 -0
  676. package/out/zero-client/src/client/client-error-kind-enum.js +18 -29
  677. package/out/zero-client/src/client/client-error-kind-enum.js.map +1 -1
  678. package/out/zero-client/src/client/connection-manager.js +291 -346
  679. package/out/zero-client/src/client/connection-manager.js.map +1 -1
  680. package/out/zero-client/src/client/connection-status-enum.js +20 -15
  681. package/out/zero-client/src/client/connection-status-enum.js.map +1 -1
  682. package/out/zero-client/src/client/connection.js +92 -110
  683. package/out/zero-client/src/client/connection.js.map +1 -1
  684. package/out/zero-client/src/client/context.js +84 -100
  685. package/out/zero-client/src/client/context.js.map +1 -1
  686. package/out/zero-client/src/client/crud-impl.js +56 -88
  687. package/out/zero-client/src/client/crud-impl.js.map +1 -1
  688. package/out/zero-client/src/client/crud.js +127 -129
  689. package/out/zero-client/src/client/crud.js.map +1 -1
  690. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  691. package/out/zero-client/src/client/custom.js +50 -74
  692. package/out/zero-client/src/client/custom.js.map +1 -1
  693. package/out/zero-client/src/client/delete-clients-manager.js +72 -93
  694. package/out/zero-client/src/client/delete-clients-manager.js.map +1 -1
  695. package/out/zero-client/src/client/enable-analytics.js +8 -16
  696. package/out/zero-client/src/client/enable-analytics.js.map +1 -1
  697. package/out/zero-client/src/client/error.js +118 -133
  698. package/out/zero-client/src/client/error.js.map +1 -1
  699. package/out/zero-client/src/client/http-string.js +7 -7
  700. package/out/zero-client/src/client/http-string.js.map +1 -1
  701. package/out/zero-client/src/client/inspector/client-group.js +21 -26
  702. package/out/zero-client/src/client/inspector/client-group.js.map +1 -1
  703. package/out/zero-client/src/client/inspector/client.js +23 -26
  704. package/out/zero-client/src/client/inspector/client.js.map +1 -1
  705. package/out/zero-client/src/client/inspector/html-dialog-prompt.js +72 -73
  706. package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -1
  707. package/out/zero-client/src/client/inspector/inspector.js +46 -51
  708. package/out/zero-client/src/client/inspector/inspector.js.map +1 -1
  709. package/out/zero-client/src/client/inspector/lazy-inspector.js +132 -192
  710. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -1
  711. package/out/zero-client/src/client/inspector/query.js +72 -77
  712. package/out/zero-client/src/client/inspector/query.js.map +1 -1
  713. package/out/zero-client/src/client/ivm-branch.js +118 -145
  714. package/out/zero-client/src/client/ivm-branch.js.map +1 -1
  715. package/out/zero-client/src/client/keys.js +15 -31
  716. package/out/zero-client/src/client/keys.js.map +1 -1
  717. package/out/zero-client/src/client/log-options.js +43 -57
  718. package/out/zero-client/src/client/log-options.js.map +1 -1
  719. package/out/zero-client/src/client/make-mutate-property.js +46 -29
  720. package/out/zero-client/src/client/make-mutate-property.js.map +1 -1
  721. package/out/zero-client/src/client/make-replicache-mutators.js +80 -96
  722. package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
  723. package/out/zero-client/src/client/metric-name-enum.js +11 -15
  724. package/out/zero-client/src/client/metric-name-enum.js.map +1 -1
  725. package/out/zero-client/src/client/metrics.js +210 -237
  726. package/out/zero-client/src/client/metrics.js.map +1 -1
  727. package/out/zero-client/src/client/mutation-tracker.js +264 -354
  728. package/out/zero-client/src/client/mutation-tracker.js.map +1 -1
  729. package/out/zero-client/src/client/mutator-proxy.js +122 -151
  730. package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
  731. package/out/zero-client/src/client/options.js +7 -10
  732. package/out/zero-client/src/client/options.js.map +1 -1
  733. package/out/zero-client/src/client/query-manager.js +305 -373
  734. package/out/zero-client/src/client/query-manager.js.map +1 -1
  735. package/out/zero-client/src/client/reload-error-handler.js +80 -101
  736. package/out/zero-client/src/client/reload-error-handler.js.map +1 -1
  737. package/out/zero-client/src/client/server-option.js +30 -59
  738. package/out/zero-client/src/client/server-option.js.map +1 -1
  739. package/out/zero-client/src/client/update-needed-reason-type-enum.js +27 -9
  740. package/out/zero-client/src/client/update-needed-reason-type-enum.js.map +1 -1
  741. package/out/zero-client/src/client/version.js +9 -5
  742. package/out/zero-client/src/client/version.js.map +1 -1
  743. package/out/zero-client/src/client/zero-poke-handler.d.ts +1 -1
  744. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  745. package/out/zero-client/src/client/zero-poke-handler.js +205 -293
  746. package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
  747. package/out/zero-client/src/client/zero-rep.js +61 -68
  748. package/out/zero-client/src/client/zero-rep.js.map +1 -1
  749. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  750. package/out/zero-client/src/client/zero.js +1367 -1834
  751. package/out/zero-client/src/client/zero.js.map +1 -1
  752. package/out/zero-client/src/mod.js +21 -0
  753. package/out/zero-client/src/util/nanoid.js +13 -18
  754. package/out/zero-client/src/util/nanoid.js.map +1 -1
  755. package/out/zero-client/src/util/socket.js +6 -5
  756. package/out/zero-client/src/util/socket.js.map +1 -1
  757. package/out/zero-pg/src/mod.js +10 -0
  758. package/out/zero-protocol/src/analyze-query-result.js +108 -148
  759. package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
  760. package/out/zero-protocol/src/application-error.js +36 -34
  761. package/out/zero-protocol/src/application-error.js.map +1 -1
  762. package/out/zero-protocol/src/ast.js +236 -309
  763. package/out/zero-protocol/src/ast.js.map +1 -1
  764. package/out/zero-protocol/src/change-desired-queries.js +8 -13
  765. package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
  766. package/out/zero-protocol/src/client-schema.js +21 -42
  767. package/out/zero-protocol/src/client-schema.js.map +1 -1
  768. package/out/zero-protocol/src/close-connection.js +20 -12
  769. package/out/zero-protocol/src/close-connection.js.map +1 -1
  770. package/out/zero-protocol/src/connect.js +37 -52
  771. package/out/zero-protocol/src/connect.js.map +1 -1
  772. package/out/zero-protocol/src/custom-queries.js +34 -65
  773. package/out/zero-protocol/src/custom-queries.js.map +1 -1
  774. package/out/zero-protocol/src/data.js +6 -9
  775. package/out/zero-protocol/src/data.js.map +1 -1
  776. package/out/zero-protocol/src/delete-clients.js +11 -17
  777. package/out/zero-protocol/src/delete-clients.js.map +1 -1
  778. package/out/zero-protocol/src/down.js +11 -23
  779. package/out/zero-protocol/src/down.js.map +1 -1
  780. package/out/zero-protocol/src/error-kind-enum.js +24 -41
  781. package/out/zero-protocol/src/error-kind-enum.js.map +1 -1
  782. package/out/zero-protocol/src/error-origin-enum.js +8 -9
  783. package/out/zero-protocol/src/error-origin-enum.js.map +1 -1
  784. package/out/zero-protocol/src/error-reason-enum.js +12 -17
  785. package/out/zero-protocol/src/error-reason-enum.js.map +1 -1
  786. package/out/zero-protocol/src/error.js +76 -152
  787. package/out/zero-protocol/src/error.js.map +1 -1
  788. package/out/zero-protocol/src/inspect-down.js +51 -74
  789. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  790. package/out/zero-protocol/src/inspect-up.js +28 -46
  791. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  792. package/out/zero-protocol/src/mutation-id.js +9 -9
  793. package/out/zero-protocol/src/mutation-id.js.map +1 -1
  794. package/out/zero-protocol/src/mutation-type-enum.js +7 -7
  795. package/out/zero-protocol/src/mutation-type-enum.js.map +1 -1
  796. package/out/zero-protocol/src/mutations-patch.js +21 -16
  797. package/out/zero-protocol/src/mutations-patch.js.map +1 -1
  798. package/out/zero-protocol/src/ping.js +8 -9
  799. package/out/zero-protocol/src/ping.js.map +1 -1
  800. package/out/zero-protocol/src/poke.js +53 -59
  801. package/out/zero-protocol/src/poke.js.map +1 -1
  802. package/out/zero-protocol/src/pong.js +8 -9
  803. package/out/zero-protocol/src/pong.js.map +1 -1
  804. package/out/zero-protocol/src/primary-key.js +9 -19
  805. package/out/zero-protocol/src/primary-key.js.map +1 -1
  806. package/out/zero-protocol/src/protocol-version.js +5 -11
  807. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  808. package/out/zero-protocol/src/pull.js +16 -28
  809. package/out/zero-protocol/src/pull.js.map +1 -1
  810. package/out/zero-protocol/src/push.js +162 -209
  811. package/out/zero-protocol/src/push.js.map +1 -1
  812. package/out/zero-protocol/src/queries-patch.js +22 -30
  813. package/out/zero-protocol/src/queries-patch.js.map +1 -1
  814. package/out/zero-protocol/src/query-hash.js +14 -17
  815. package/out/zero-protocol/src/query-hash.js.map +1 -1
  816. package/out/zero-protocol/src/row-patch.js +23 -30
  817. package/out/zero-protocol/src/row-patch.js.map +1 -1
  818. package/out/zero-protocol/src/up.js +11 -22
  819. package/out/zero-protocol/src/up.js.map +1 -1
  820. package/out/zero-protocol/src/update-auth.js +8 -13
  821. package/out/zero-protocol/src/update-auth.js.map +1 -1
  822. package/out/zero-protocol/src/version.js +8 -9
  823. package/out/zero-protocol/src/version.js.map +1 -1
  824. package/out/zero-react/src/bindings.js +12 -0
  825. package/out/zero-react/src/mod.js +5 -0
  826. package/out/zero-react/src/use-connection-state.js +14 -11
  827. package/out/zero-react/src/use-connection-state.js.map +1 -1
  828. package/out/zero-react/src/use-query.js +283 -281
  829. package/out/zero-react/src/use-query.js.map +1 -1
  830. package/out/zero-react/src/use-zero-online.js +17 -11
  831. package/out/zero-react/src/use-zero-online.js.map +1 -1
  832. package/out/zero-react/src/zero-provider.js +53 -69
  833. package/out/zero-react/src/zero-provider.js.map +1 -1
  834. package/out/zero-react/src/zero.js +22 -0
  835. package/out/zero-schema/src/builder/relationship-builder.js +25 -21
  836. package/out/zero-schema/src/builder/relationship-builder.js.map +1 -1
  837. package/out/zero-schema/src/builder/schema-builder.js +51 -79
  838. package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
  839. package/out/zero-schema/src/builder/table-builder.js +99 -116
  840. package/out/zero-schema/src/builder/table-builder.js.map +1 -1
  841. package/out/zero-schema/src/compiled-permissions.js +21 -25
  842. package/out/zero-schema/src/compiled-permissions.js.map +1 -1
  843. package/out/zero-schema/src/name-mapper.js +31 -47
  844. package/out/zero-schema/src/name-mapper.js.map +1 -1
  845. package/out/zero-schema/src/permissions.js +94 -181
  846. package/out/zero-schema/src/permissions.js.map +1 -1
  847. package/out/zero-schema/src/schema-config.js +26 -32
  848. package/out/zero-schema/src/schema-config.js.map +1 -1
  849. package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -1
  850. package/out/zero-server/src/adapters/drizzle.js +79 -76
  851. package/out/zero-server/src/adapters/drizzle.js.map +1 -1
  852. package/out/zero-server/src/adapters/pg.d.ts.map +1 -1
  853. package/out/zero-server/src/adapters/pg.js +79 -55
  854. package/out/zero-server/src/adapters/pg.js.map +1 -1
  855. package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
  856. package/out/zero-server/src/adapters/postgresjs.js +66 -40
  857. package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
  858. package/out/zero-server/src/adapters/prisma.d.ts.map +1 -1
  859. package/out/zero-server/src/adapters/prisma.js +75 -55
  860. package/out/zero-server/src/adapters/prisma.js.map +1 -1
  861. package/out/zero-server/src/custom.d.ts.map +1 -1
  862. package/out/zero-server/src/custom.js +188 -265
  863. package/out/zero-server/src/custom.js.map +1 -1
  864. package/out/zero-server/src/logging.js +6 -5
  865. package/out/zero-server/src/logging.js.map +1 -1
  866. package/out/zero-server/src/mod.js +8 -0
  867. package/out/zero-server/src/pg-query-executor.js +14 -17
  868. package/out/zero-server/src/pg-query-executor.js.map +1 -1
  869. package/out/zero-server/src/process-mutations.js +293 -365
  870. package/out/zero-server/src/process-mutations.js.map +1 -1
  871. package/out/zero-server/src/push-processor.js +33 -49
  872. package/out/zero-server/src/push-processor.js.map +1 -1
  873. package/out/zero-server/src/queries/process-queries.js +106 -96
  874. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  875. package/out/zero-server/src/schema.js +98 -144
  876. package/out/zero-server/src/schema.js.map +1 -1
  877. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  878. package/out/zero-server/src/zql-database.js +54 -69
  879. package/out/zero-server/src/zql-database.js.map +1 -1
  880. package/out/zero-solid/src/bindings.js +12 -0
  881. package/out/zero-solid/src/mod.js +5 -0
  882. package/out/zero-solid/src/solid-view.js +135 -227
  883. package/out/zero-solid/src/solid-view.js.map +1 -1
  884. package/out/zero-solid/src/use-connection-state.js +18 -14
  885. package/out/zero-solid/src/use-connection-state.js.map +1 -1
  886. package/out/zero-solid/src/use-query.js +55 -100
  887. package/out/zero-solid/src/use-query.js.map +1 -1
  888. package/out/zero-solid/src/use-zero-online.js +18 -12
  889. package/out/zero-solid/src/use-zero-online.js.map +1 -1
  890. package/out/zero-solid/src/use-zero.js +65 -77
  891. package/out/zero-solid/src/use-zero.js.map +1 -1
  892. package/out/zero-solid/src/zero.js +22 -0
  893. package/out/zero-types/src/format.js +8 -7
  894. package/out/zero-types/src/format.js.map +1 -1
  895. package/out/zero-types/src/name-mapper.js +34 -47
  896. package/out/zero-types/src/name-mapper.js.map +1 -1
  897. package/out/zql/src/builder/builder.d.ts.map +1 -1
  898. package/out/zql/src/builder/builder.js +315 -476
  899. package/out/zql/src/builder/builder.js.map +1 -1
  900. package/out/zql/src/builder/debug-delegate.js +69 -74
  901. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  902. package/out/zql/src/builder/filter.js +116 -140
  903. package/out/zql/src/builder/filter.js.map +1 -1
  904. package/out/zql/src/builder/like.js +41 -46
  905. package/out/zql/src/builder/like.js.map +1 -1
  906. package/out/zql/src/error.js +10 -9
  907. package/out/zql/src/error.js.map +1 -1
  908. package/out/zql/src/ivm/array-view.js +89 -91
  909. package/out/zql/src/ivm/array-view.js.map +1 -1
  910. package/out/zql/src/ivm/constraint.js +65 -74
  911. package/out/zql/src/ivm/constraint.js.map +1 -1
  912. package/out/zql/src/ivm/data.js +61 -48
  913. package/out/zql/src/ivm/data.js.map +1 -1
  914. package/out/zql/src/ivm/exists.js +164 -213
  915. package/out/zql/src/ivm/exists.js.map +1 -1
  916. package/out/zql/src/ivm/fan-in.js +62 -59
  917. package/out/zql/src/ivm/fan-in.js.map +1 -1
  918. package/out/zql/src/ivm/fan-out.js +52 -61
  919. package/out/zql/src/ivm/fan-out.js.map +1 -1
  920. package/out/zql/src/ivm/filter-operators.js +91 -96
  921. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  922. package/out/zql/src/ivm/filter-push.js +22 -26
  923. package/out/zql/src/ivm/filter-push.js.map +1 -1
  924. package/out/zql/src/ivm/filter.js +41 -35
  925. package/out/zql/src/ivm/filter.js.map +1 -1
  926. package/out/zql/src/ivm/flipped-join.js +282 -391
  927. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  928. package/out/zql/src/ivm/join-utils.js +85 -115
  929. package/out/zql/src/ivm/join-utils.js.map +1 -1
  930. package/out/zql/src/ivm/join.js +162 -231
  931. package/out/zql/src/ivm/join.js.map +1 -1
  932. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +21 -25
  933. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
  934. package/out/zql/src/ivm/memory-source.js +364 -503
  935. package/out/zql/src/ivm/memory-source.js.map +1 -1
  936. package/out/zql/src/ivm/memory-storage.js +33 -34
  937. package/out/zql/src/ivm/memory-storage.js.map +1 -1
  938. package/out/zql/src/ivm/operator.js +13 -15
  939. package/out/zql/src/ivm/operator.js.map +1 -1
  940. package/out/zql/src/ivm/push-accumulated.js +267 -270
  941. package/out/zql/src/ivm/push-accumulated.js.map +1 -1
  942. package/out/zql/src/ivm/skip.js +91 -104
  943. package/out/zql/src/ivm/skip.js.map +1 -1
  944. package/out/zql/src/ivm/stream.js +10 -10
  945. package/out/zql/src/ivm/stream.js.map +1 -1
  946. package/out/zql/src/ivm/take.js +422 -569
  947. package/out/zql/src/ivm/take.js.map +1 -1
  948. package/out/zql/src/ivm/union-fan-in.js +157 -231
  949. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  950. package/out/zql/src/ivm/union-fan-out.js +38 -43
  951. package/out/zql/src/ivm/union-fan-out.js.map +1 -1
  952. package/out/zql/src/ivm/view-apply-change.js +166 -255
  953. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  954. package/out/zql/src/mutate/crud.js +35 -34
  955. package/out/zql/src/mutate/crud.js.map +1 -1
  956. package/out/zql/src/mutate/custom.d.ts.map +1 -1
  957. package/out/zql/src/mutate/custom.js +7 -11
  958. package/out/zql/src/mutate/custom.js.map +1 -1
  959. package/out/zql/src/mutate/mutator-registry.js +67 -71
  960. package/out/zql/src/mutate/mutator-registry.js.map +1 -1
  961. package/out/zql/src/mutate/mutator.js +26 -25
  962. package/out/zql/src/mutate/mutator.js.map +1 -1
  963. package/out/zql/src/planner/planner-builder.js +134 -239
  964. package/out/zql/src/planner/planner-builder.js.map +1 -1
  965. package/out/zql/src/planner/planner-connection.js +222 -212
  966. package/out/zql/src/planner/planner-connection.js.map +1 -1
  967. package/out/zql/src/planner/planner-constraint.js +15 -7
  968. package/out/zql/src/planner/planner-constraint.js.map +1 -1
  969. package/out/zql/src/planner/planner-debug.js +199 -224
  970. package/out/zql/src/planner/planner-debug.js.map +1 -1
  971. package/out/zql/src/planner/planner-fan-in.js +146 -162
  972. package/out/zql/src/planner/planner-fan-in.js.map +1 -1
  973. package/out/zql/src/planner/planner-fan-out.js +62 -74
  974. package/out/zql/src/planner/planner-fan-out.js.map +1 -1
  975. package/out/zql/src/planner/planner-graph.js +302 -334
  976. package/out/zql/src/planner/planner-graph.js.map +1 -1
  977. package/out/zql/src/planner/planner-join.js +255 -240
  978. package/out/zql/src/planner/planner-join.js.map +1 -1
  979. package/out/zql/src/planner/planner-node.js +10 -6
  980. package/out/zql/src/planner/planner-node.js.map +1 -1
  981. package/out/zql/src/planner/planner-source.js +15 -22
  982. package/out/zql/src/planner/planner-source.js.map +1 -1
  983. package/out/zql/src/planner/planner-terminus.js +28 -28
  984. package/out/zql/src/planner/planner-terminus.js.map +1 -1
  985. package/out/zql/src/query/complete-ordering.js +37 -61
  986. package/out/zql/src/query/complete-ordering.js.map +1 -1
  987. package/out/zql/src/query/create-builder.js +14 -22
  988. package/out/zql/src/query/create-builder.js.map +1 -1
  989. package/out/zql/src/query/error.js +10 -12
  990. package/out/zql/src/query/error.js.map +1 -1
  991. package/out/zql/src/query/escape-like.js +6 -5
  992. package/out/zql/src/query/escape-like.js.map +1 -1
  993. package/out/zql/src/query/expression.js +138 -157
  994. package/out/zql/src/query/expression.js.map +1 -1
  995. package/out/zql/src/query/measure-push-operator.js +35 -38
  996. package/out/zql/src/query/measure-push-operator.js.map +1 -1
  997. package/out/zql/src/query/metrics-delegate.js +7 -7
  998. package/out/zql/src/query/metrics-delegate.js.map +1 -1
  999. package/out/zql/src/query/named.js +52 -51
  1000. package/out/zql/src/query/named.js.map +1 -1
  1001. package/out/zql/src/query/query-delegate-base.js +190 -238
  1002. package/out/zql/src/query/query-delegate-base.js.map +1 -1
  1003. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  1004. package/out/zql/src/query/query-impl.js +271 -405
  1005. package/out/zql/src/query/query-impl.js.map +1 -1
  1006. package/out/zql/src/query/query-internals.js +16 -8
  1007. package/out/zql/src/query/query-internals.js.map +1 -1
  1008. package/out/zql/src/query/query-registry.js +83 -98
  1009. package/out/zql/src/query/query-registry.js.map +1 -1
  1010. package/out/zql/src/query/query.d.ts.map +1 -1
  1011. package/out/zql/src/query/query.js +2 -0
  1012. package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
  1013. package/out/zql/src/query/runnable-query-impl.js +30 -55
  1014. package/out/zql/src/query/runnable-query-impl.js.map +1 -1
  1015. package/out/zql/src/query/static-query.js +7 -14
  1016. package/out/zql/src/query/static-query.js.map +1 -1
  1017. package/out/zql/src/query/ttl.js +45 -67
  1018. package/out/zql/src/query/ttl.js.map +1 -1
  1019. package/out/zql/src/query/validate-input.js +23 -20
  1020. package/out/zql/src/query/validate-input.js.map +1 -1
  1021. package/out/zqlite/src/database-storage.js +99 -103
  1022. package/out/zqlite/src/database-storage.js.map +1 -1
  1023. package/out/zqlite/src/db.js +206 -249
  1024. package/out/zqlite/src/db.js.map +1 -1
  1025. package/out/zqlite/src/explain-queries.js +11 -13
  1026. package/out/zqlite/src/explain-queries.js.map +1 -1
  1027. package/out/zqlite/src/internal/sql-inline.js +54 -37
  1028. package/out/zqlite/src/internal/sql-inline.js.map +1 -1
  1029. package/out/zqlite/src/internal/sql.js +17 -15
  1030. package/out/zqlite/src/internal/sql.js.map +1 -1
  1031. package/out/zqlite/src/internal/statement-cache.js +117 -92
  1032. package/out/zqlite/src/internal/statement-cache.js.map +1 -1
  1033. package/out/zqlite/src/mod.js +5 -0
  1034. package/out/zqlite/src/query-builder.js +81 -172
  1035. package/out/zqlite/src/query-builder.js.map +1 -1
  1036. package/out/zqlite/src/query-delegate.js +45 -55
  1037. package/out/zqlite/src/query-delegate.js.map +1 -1
  1038. package/out/zqlite/src/resolve-scalar-subqueries.js +134 -124
  1039. package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
  1040. package/out/zqlite/src/sqlite-cost-model.js +92 -97
  1041. package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
  1042. package/out/zqlite/src/sqlite-stat-fanout.js +304 -286
  1043. package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
  1044. package/out/zqlite/src/table-source.js +281 -455
  1045. package/out/zqlite/src/table-source.js.map +1 -1
  1046. package/package.json +7 -7
  1047. package/out/replicache/src/db/index-operation-enum.js +0 -7
  1048. package/out/replicache/src/db/index-operation-enum.js.map +0 -1
  1049. package/out/replicache/src/db/meta-type-enum.js +0 -7
  1050. package/out/replicache/src/db/meta-type-enum.js.map +0 -1
  1051. package/out/replicache/src/format-version-enum.js +0 -11
  1052. package/out/replicache/src/format-version-enum.js.map +0 -1
  1053. package/out/replicache/src/http-status-unauthorized.js +0 -5
  1054. package/out/replicache/src/http-status-unauthorized.js.map +0 -1
  1055. package/out/replicache/src/invoke-kind-enum.js +0 -7
  1056. package/out/replicache/src/invoke-kind-enum.js.map +0 -1
  1057. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js +0 -9
  1058. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js.map +0 -1
  1059. package/out/zero/package.json.js +0 -9
  1060. package/out/zero/package.json.js.map +0 -1
  1061. package/out/zero/src/adapters/drizzle.js.map +0 -1
  1062. package/out/zero/src/adapters/pg.js.map +0 -1
  1063. package/out/zero/src/adapters/postgresjs.js.map +0 -1
  1064. package/out/zero/src/adapters/prisma.js.map +0 -1
  1065. package/out/zero/src/analyze-query.js.map +0 -1
  1066. package/out/zero/src/ast-to-zql.js.map +0 -1
  1067. package/out/zero/src/bindings.js.map +0 -1
  1068. package/out/zero/src/change-protocol/v0.js.map +0 -1
  1069. package/out/zero/src/cli.js.map +0 -1
  1070. package/out/zero/src/deploy-permissions.js.map +0 -1
  1071. package/out/zero/src/expo-sqlite.js.map +0 -1
  1072. package/out/zero/src/op-sqlite.js.map +0 -1
  1073. package/out/zero/src/pg.js.map +0 -1
  1074. package/out/zero/src/react.js.map +0 -1
  1075. package/out/zero/src/server.js.map +0 -1
  1076. package/out/zero/src/solid.js.map +0 -1
  1077. package/out/zero/src/sqlite.js.map +0 -1
  1078. package/out/zero/src/transform-query.js.map +0 -1
  1079. package/out/zero/src/zero.js.map +0 -1
  1080. package/out/zero/src/zqlite.js.map +0 -1
  1081. package/out/zero-cache/src/db/postgres-replica-identity-enum.js +0 -11
  1082. package/out/zero-cache/src/db/postgres-replica-identity-enum.js.map +0 -1
  1083. package/out/zero-cache/src/db/postgres-type-class-enum.js +0 -17
  1084. package/out/zero-cache/src/db/postgres-type-class-enum.js.map +0 -1
  1085. package/out/zero-cache/src/services/change-streamer/error-type-enum.js +0 -9
  1086. package/out/zero-cache/src/services/change-streamer/error-type-enum.js.map +0 -1
@@ -1,613 +1,504 @@
1
- import { SqliteError } from "@rocicorp/zero-sqlite3";
2
- import { AbortError } from "../../../../shared/src/abort-error.js";
3
1
  import { assert, unreachable } from "../../../../shared/src/asserts.js";
4
- import { stringify } from "../../../../shared/src/bigint-json.js";
2
+ import { AbortError } from "../../../../shared/src/abort-error.js";
5
3
  import { must } from "../../../../shared/src/must.js";
6
- import { createLiteTableStatement, liteColumnDef, createLiteIndexStatement } from "../../db/create.js";
7
- import { computeZqlSpecs, listTables, listIndexes } from "../../db/lite-tables.js";
8
- import { mapPostgresToLite, mapPostgresToLiteColumn, mapPostgresToLiteIndex } from "../../db/pg-to-lite.js";
9
- import { JSON_PARSED, liteRow } from "../../types/lite.js";
4
+ import { stringify } from "../../../../shared/src/bigint-json.js";
5
+ import { ChangeLog } from "./schema/change-log.js";
6
+ import { ZERO_VERSION_COLUMN_NAME } from "./schema/constants.js";
7
+ import { liteRow } from "../../types/lite.js";
10
8
  import { liteTableName } from "../../types/names.js";
11
- import { id } from "../../types/sql.js";
12
- import { ChangeLog, DEL_OP, SET_OP } from "./schema/change-log.js";
9
+ import { mapPostgresToLite, mapPostgresToLiteColumn, mapPostgresToLiteIndex } from "../../db/pg-to-lite.js";
13
10
  import { ColumnMetadataStore } from "./schema/column-metadata.js";
14
- import { updateReplicationWatermark } from "./schema/replication-state.js";
15
11
  import { TableMetadataTracker } from "./schema/table-metadata.js";
16
- import { ZERO_VERSION_COLUMN_NAME } from "./schema/constants.js";
17
- class ChangeProcessor {
18
- #db;
19
- #changeLog;
20
- #tableMetadata;
21
- #mode;
22
- #failService;
23
- // The TransactionProcessor lazily loads table specs into this Map,
24
- // and reloads them after a schema change. It is cached here to avoid
25
- // reading them from the DB on every transaction.
26
- #tableSpecs = /* @__PURE__ */ new Map();
27
- #currentTx = null;
28
- #failure;
29
- constructor(db, mode, failService) {
30
- this.#db = db;
31
- this.#changeLog = new ChangeLog(db.db);
32
- this.#tableMetadata = new TableMetadataTracker(db.db);
33
- this.#mode = mode;
34
- this.#failService = failService;
35
- }
36
- #fail(lc, err) {
37
- if (!this.#failure) {
38
- this.#currentTx?.abort(lc);
39
- this.#failure = ensureError(err);
40
- if (!(err instanceof AbortError)) {
41
- lc.error?.("Message Processing failed:", this.#failure);
42
- this.#failService(lc, this.#failure);
43
- }
44
- }
45
- }
46
- abort(lc) {
47
- this.#fail(lc, new AbortError());
48
- }
49
- /** @return If a transaction was committed. */
50
- processMessage(lc, downstream) {
51
- const [type, message] = downstream;
52
- if (this.#failure) {
53
- lc.debug?.(`Dropping ${message.tag}`);
54
- return null;
55
- }
56
- try {
57
- const watermark = type === "begin" ? downstream[2].commitWatermark : type === "commit" ? downstream[2].watermark : void 0;
58
- return this.#processMessage(lc, message, watermark);
59
- } catch (e) {
60
- this.#fail(lc, e);
61
- }
62
- return null;
63
- }
64
- #beginTransaction(lc, commitVersion, jsonFormat) {
65
- const start = Date.now();
66
- for (let i = 0; ; i++) {
67
- try {
68
- return new TransactionProcessor(
69
- lc,
70
- this.#db,
71
- this.#mode,
72
- this.#changeLog,
73
- this.#tableMetadata,
74
- this.#tableSpecs,
75
- commitVersion,
76
- jsonFormat
77
- );
78
- } catch (e) {
79
- if (e instanceof SqliteError && e.code === "SQLITE_BUSY") {
80
- lc.warn?.(
81
- `SQLITE_BUSY for ${Date.now() - start} ms (attempt ${i + 1}). This is only expected if litestream is performing a large checkpoint.`,
82
- e
83
- );
84
- continue;
85
- }
86
- throw e;
87
- }
88
- }
89
- }
90
- /** @return If a transaction was committed. */
91
- #processMessage(lc, msg, watermark) {
92
- if (msg.tag === "begin") {
93
- if (this.#currentTx) {
94
- throw new Error(`Already in a transaction ${stringify(msg)}`);
95
- }
96
- this.#currentTx = this.#beginTransaction(
97
- lc,
98
- must(watermark),
99
- msg.json ?? JSON_PARSED
100
- );
101
- return null;
102
- }
103
- const tx = this.#currentTx;
104
- if (!tx) {
105
- throw new Error(
106
- `Received message outside of transaction: ${stringify(msg)}`
107
- );
108
- }
109
- if (msg.tag === "commit") {
110
- this.#currentTx = null;
111
- assert(watermark, "watermark is required for commit messages");
112
- return tx.processCommit(msg, watermark);
113
- }
114
- if (msg.tag === "rollback") {
115
- this.#currentTx?.abort(lc);
116
- this.#currentTx = null;
117
- return null;
118
- }
119
- switch (msg.tag) {
120
- case "insert":
121
- tx.processInsert(msg);
122
- break;
123
- case "update":
124
- tx.processUpdate(msg);
125
- break;
126
- case "delete":
127
- tx.processDelete(msg);
128
- break;
129
- case "truncate":
130
- tx.processTruncate(msg);
131
- break;
132
- case "create-table":
133
- tx.processCreateTable(msg);
134
- break;
135
- case "rename-table":
136
- tx.processRenameTable(msg);
137
- break;
138
- case "update-table-metadata":
139
- tx.processTableMetadata(msg);
140
- break;
141
- case "add-column":
142
- tx.processAddColumn(msg);
143
- break;
144
- case "update-column":
145
- tx.processUpdateColumn(msg);
146
- break;
147
- case "drop-column":
148
- tx.processDropColumn(msg);
149
- break;
150
- case "drop-table":
151
- tx.processDropTable(msg);
152
- break;
153
- case "create-index":
154
- tx.processCreateIndex(msg);
155
- break;
156
- case "drop-index":
157
- tx.processDropIndex(msg);
158
- break;
159
- case "backfill":
160
- tx.processBackfill(msg);
161
- break;
162
- case "backfill-completed":
163
- tx.processBackfillCompleted(msg);
164
- break;
165
- default:
166
- unreachable();
167
- }
168
- return null;
169
- }
170
- }
171
- class TransactionProcessor {
172
- #lc;
173
- #startMs;
174
- #db;
175
- #mode;
176
- #version;
177
- #changeLog;
178
- #tableMetadata;
179
- #tableSpecs;
180
- #jsonFormat;
181
- #columnMetadata;
182
- #pos = 0;
183
- #schemaChanged = false;
184
- #numChangeLogEntries = 0;
185
- constructor(lc, db, mode, changeLog, tableMetadata, tableSpecs, commitVersion, jsonFormat) {
186
- this.#startMs = Date.now();
187
- this.#mode = mode;
188
- this.#jsonFormat = jsonFormat;
189
- switch (mode) {
190
- case "serving":
191
- db.beginConcurrent();
192
- break;
193
- case "backup":
194
- db.beginImmediate();
195
- break;
196
- case "initial-sync":
197
- break;
198
- default:
199
- unreachable();
200
- }
201
- this.#db = db;
202
- this.#version = commitVersion;
203
- this.#lc = lc.withContext("version", commitVersion);
204
- this.#changeLog = changeLog;
205
- this.#tableMetadata = tableMetadata;
206
- this.#tableSpecs = tableSpecs;
207
- this.#columnMetadata = must(ColumnMetadataStore.getInstance(db.db));
208
- if (this.#tableSpecs.size === 0) {
209
- this.#reloadTableSpecs();
210
- }
211
- }
212
- #reloadTableSpecs() {
213
- this.#tableSpecs.clear();
214
- const zqlSpecs = computeZqlSpecs(this.#lc, this.#db.db, {
215
- includeBackfillingColumns: true
216
- });
217
- for (let spec of listTables(this.#db.db)) {
218
- if (!spec.primaryKey) {
219
- spec = {
220
- ...spec,
221
- primaryKey: [
222
- ...zqlSpecs.get(spec.name)?.tableSpec.primaryKey ?? []
223
- ]
224
- };
225
- }
226
- this.#tableSpecs.set(spec.name, spec);
227
- }
228
- }
229
- #tableSpec(name) {
230
- return must(this.#tableSpecs.get(name), `Unknown table ${name}`);
231
- }
232
- #getKey({ row, numCols }, { relation }) {
233
- const keyColumns = relation.rowKey.type !== "full" ? relation.rowKey.columns : this.#tableSpec(liteTableName(relation)).primaryKey;
234
- if (!keyColumns?.length) {
235
- throw new Error(
236
- `Cannot replicate table "${relation.name}" without a PRIMARY KEY or UNIQUE INDEX`
237
- );
238
- }
239
- if (numCols === keyColumns.length) {
240
- return row;
241
- }
242
- const key = {};
243
- for (const col of keyColumns) {
244
- key[col] = row[col];
245
- }
246
- return key;
247
- }
248
- processInsert(insert) {
249
- const table = liteTableName(insert.relation);
250
- const tableSpec = this.#tableSpec(table);
251
- const newRow = liteRow(insert.new, tableSpec, this.#jsonFormat);
252
- this.#upsert(table, {
253
- ...newRow.row,
254
- [ZERO_VERSION_COLUMN_NAME]: this.#version
255
- });
256
- if (insert.relation.rowKey.columns.length === 0) {
257
- return;
258
- }
259
- const key = this.#getKey(newRow, insert);
260
- this.#logSetOp(table, key, getBackfilledColumns(newRow.row, tableSpec));
261
- }
262
- #upsert(table, row) {
263
- const columns = Object.keys(row).map((c) => id(c));
264
- this.#db.run(
265
- `
12
+ import { updateReplicationWatermark } from "./schema/replication-state.js";
13
+ import { computeZqlSpecs, listIndexes, listTables } from "../../db/lite-tables.js";
14
+ import { id } from "../../types/sql.js";
15
+ import { createLiteIndexStatement, createLiteTableStatement, liteColumnDef } from "../../db/create.js";
16
+ import { SqliteError } from "@rocicorp/zero-sqlite3";
17
+ //#region ../zero-cache/src/services/replicator/change-processor.ts
18
+ /**
19
+ * The ChangeProcessor partitions the stream of messages into transactions
20
+ * by creating a {@link TransactionProcessor} when a transaction begins, and dispatching
21
+ * messages to it until the commit is received.
22
+ *
23
+ * From https://www.postgresql.org/docs/current/protocol-logical-replication.html#PROTOCOL-LOGICAL-MESSAGES-FLOW :
24
+ *
25
+ * "The logical replication protocol sends individual transactions one by one.
26
+ * This means that all messages between a pair of Begin and Commit messages
27
+ * belong to the same transaction."
28
+ */
29
+ var ChangeProcessor = class {
30
+ #db;
31
+ #changeLog;
32
+ #tableMetadata;
33
+ #mode;
34
+ #failService;
35
+ #tableSpecs = /* @__PURE__ */ new Map();
36
+ #currentTx = null;
37
+ #failure;
38
+ constructor(db, mode, failService) {
39
+ this.#db = db;
40
+ this.#changeLog = new ChangeLog(db.db);
41
+ this.#tableMetadata = new TableMetadataTracker(db.db);
42
+ this.#mode = mode;
43
+ this.#failService = failService;
44
+ }
45
+ #fail(lc, err) {
46
+ if (!this.#failure) {
47
+ this.#currentTx?.abort(lc);
48
+ this.#failure = ensureError(err);
49
+ if (!(err instanceof AbortError)) {
50
+ lc.error?.("Message Processing failed:", this.#failure);
51
+ this.#failService(lc, this.#failure);
52
+ }
53
+ }
54
+ }
55
+ abort(lc) {
56
+ this.#fail(lc, new AbortError());
57
+ }
58
+ /** @return If a transaction was committed. */
59
+ processMessage(lc, downstream) {
60
+ const [type, message] = downstream;
61
+ if (this.#failure) {
62
+ lc.debug?.(`Dropping ${message.tag}`);
63
+ return null;
64
+ }
65
+ try {
66
+ const watermark = type === "begin" ? downstream[2].commitWatermark : type === "commit" ? downstream[2].watermark : void 0;
67
+ return this.#processMessage(lc, message, watermark);
68
+ } catch (e) {
69
+ this.#fail(lc, e);
70
+ }
71
+ return null;
72
+ }
73
+ #beginTransaction(lc, commitVersion, jsonFormat) {
74
+ const start = Date.now();
75
+ for (let i = 0;; i++) try {
76
+ return new TransactionProcessor(lc, this.#db, this.#mode, this.#changeLog, this.#tableMetadata, this.#tableSpecs, commitVersion, jsonFormat);
77
+ } catch (e) {
78
+ if (e instanceof SqliteError && e.code === "SQLITE_BUSY") {
79
+ lc.warn?.(`SQLITE_BUSY for ${Date.now() - start} ms (attempt ${i + 1}). This is only expected if litestream is performing a large checkpoint.`, e);
80
+ continue;
81
+ }
82
+ throw e;
83
+ }
84
+ }
85
+ /** @return If a transaction was committed. */
86
+ #processMessage(lc, msg, watermark) {
87
+ if (msg.tag === "begin") {
88
+ if (this.#currentTx) throw new Error(`Already in a transaction ${stringify(msg)}`);
89
+ this.#currentTx = this.#beginTransaction(lc, must(watermark), msg.json ?? "p");
90
+ return null;
91
+ }
92
+ const tx = this.#currentTx;
93
+ if (!tx) throw new Error(`Received message outside of transaction: ${stringify(msg)}`);
94
+ if (msg.tag === "commit") {
95
+ this.#currentTx = null;
96
+ assert(watermark, "watermark is required for commit messages");
97
+ return tx.processCommit(msg, watermark);
98
+ }
99
+ if (msg.tag === "rollback") {
100
+ this.#currentTx?.abort(lc);
101
+ this.#currentTx = null;
102
+ return null;
103
+ }
104
+ switch (msg.tag) {
105
+ case "insert":
106
+ tx.processInsert(msg);
107
+ break;
108
+ case "update":
109
+ tx.processUpdate(msg);
110
+ break;
111
+ case "delete":
112
+ tx.processDelete(msg);
113
+ break;
114
+ case "truncate":
115
+ tx.processTruncate(msg);
116
+ break;
117
+ case "create-table":
118
+ tx.processCreateTable(msg);
119
+ break;
120
+ case "rename-table":
121
+ tx.processRenameTable(msg);
122
+ break;
123
+ case "update-table-metadata":
124
+ tx.processTableMetadata(msg);
125
+ break;
126
+ case "add-column":
127
+ tx.processAddColumn(msg);
128
+ break;
129
+ case "update-column":
130
+ tx.processUpdateColumn(msg);
131
+ break;
132
+ case "drop-column":
133
+ tx.processDropColumn(msg);
134
+ break;
135
+ case "drop-table":
136
+ tx.processDropTable(msg);
137
+ break;
138
+ case "create-index":
139
+ tx.processCreateIndex(msg);
140
+ break;
141
+ case "drop-index":
142
+ tx.processDropIndex(msg);
143
+ break;
144
+ case "backfill":
145
+ tx.processBackfill(msg);
146
+ break;
147
+ case "backfill-completed":
148
+ tx.processBackfillCompleted(msg);
149
+ break;
150
+ default: unreachable(msg);
151
+ }
152
+ return null;
153
+ }
154
+ };
155
+ /**
156
+ * The {@link TransactionProcessor} handles the sequence of messages from
157
+ * upstream, from `BEGIN` to `COMMIT` and executes the corresponding mutations
158
+ * on the {@link postgres.TransactionSql} on the replica.
159
+ *
160
+ * When applying row contents to the replica, the `_0_version` column is added / updated,
161
+ * and a corresponding entry in the `ChangeLog` is added. The version value is derived
162
+ * from the watermark of the preceding transaction (stored as the `nextStateVersion` in the
163
+ * `ReplicationState` table).
164
+ *
165
+ * Side note: For non-streaming Postgres transactions, the commitEndLsn (and thus
166
+ * commit watermark) is available in the `begin` message, so it could theoretically
167
+ * be used for the row version of changes within the transaction. However, the
168
+ * commitEndLsn is not available in the streaming (in-progress) transaction
169
+ * protocol, and may not be available for CDC streams of other upstream types.
170
+ * Therefore, the zero replication protocol is designed to not require the commit
171
+ * watermark when a transaction begins.
172
+ *
173
+ * Also of interest is the fact that all INSERT Messages are logically applied as
174
+ * UPSERTs. See {@link processInsert} for the underlying motivation.
175
+ */
176
+ var TransactionProcessor = class {
177
+ #lc;
178
+ #startMs;
179
+ #db;
180
+ #mode;
181
+ #version;
182
+ #changeLog;
183
+ #tableMetadata;
184
+ #tableSpecs;
185
+ #jsonFormat;
186
+ #columnMetadata;
187
+ #pos = 0;
188
+ #schemaChanged = false;
189
+ #numChangeLogEntries = 0;
190
+ constructor(lc, db, mode, changeLog, tableMetadata, tableSpecs, commitVersion, jsonFormat) {
191
+ this.#startMs = Date.now();
192
+ this.#mode = mode;
193
+ this.#jsonFormat = jsonFormat;
194
+ switch (mode) {
195
+ case "serving":
196
+ db.beginConcurrent();
197
+ break;
198
+ case "backup":
199
+ db.beginImmediate();
200
+ break;
201
+ case "initial-sync": break;
202
+ default: unreachable();
203
+ }
204
+ this.#db = db;
205
+ this.#version = commitVersion;
206
+ this.#lc = lc.withContext("version", commitVersion);
207
+ this.#changeLog = changeLog;
208
+ this.#tableMetadata = tableMetadata;
209
+ this.#tableSpecs = tableSpecs;
210
+ this.#columnMetadata = must(ColumnMetadataStore.getInstance(db.db));
211
+ if (this.#tableSpecs.size === 0) this.#reloadTableSpecs();
212
+ }
213
+ #reloadTableSpecs() {
214
+ this.#tableSpecs.clear();
215
+ const zqlSpecs = computeZqlSpecs(this.#lc, this.#db.db, { includeBackfillingColumns: true });
216
+ for (let spec of listTables(this.#db.db)) {
217
+ if (!spec.primaryKey) spec = {
218
+ ...spec,
219
+ primaryKey: [...zqlSpecs.get(spec.name)?.tableSpec.primaryKey ?? []]
220
+ };
221
+ this.#tableSpecs.set(spec.name, spec);
222
+ }
223
+ }
224
+ #tableSpec(name) {
225
+ return must(this.#tableSpecs.get(name), `Unknown table ${name}`);
226
+ }
227
+ #getKey({ row, numCols }, { relation }) {
228
+ const keyColumns = relation.rowKey.type !== "full" ? relation.rowKey.columns : this.#tableSpec(liteTableName(relation)).primaryKey;
229
+ if (!keyColumns?.length) throw new Error(`Cannot replicate table "${relation.name}" without a PRIMARY KEY or UNIQUE INDEX`);
230
+ if (numCols === keyColumns.length) return row;
231
+ const key = {};
232
+ for (const col of keyColumns) key[col] = row[col];
233
+ return key;
234
+ }
235
+ processInsert(insert) {
236
+ const table = liteTableName(insert.relation);
237
+ const tableSpec = this.#tableSpec(table);
238
+ const newRow = liteRow(insert.new, tableSpec, this.#jsonFormat);
239
+ this.#upsert(table, {
240
+ ...newRow.row,
241
+ [ZERO_VERSION_COLUMN_NAME]: this.#version
242
+ });
243
+ if (insert.relation.rowKey.columns.length === 0) return;
244
+ const key = this.#getKey(newRow, insert);
245
+ this.#logSetOp(table, key, getBackfilledColumns(newRow.row, tableSpec));
246
+ }
247
+ #upsert(table, row) {
248
+ const columns = Object.keys(row).map((c) => id(c));
249
+ this.#db.run(`
266
250
  INSERT OR REPLACE INTO ${id(table)} (${columns.join(",")})
267
251
  VALUES (${Array.from({ length: columns.length }).fill("?").join(",")})
268
- `,
269
- Object.values(row)
270
- );
271
- }
272
- // Updates by default are applied as UPDATE commands to support partial
273
- // row specifications from the change source. In particular, this is needed
274
- // to handle updates for which unchanged TOASTed values are not sent:
275
- //
276
- // https://www.postgresql.org/docs/current/protocol-logicalrep-message-formats.html#PROTOCOL-LOGICALREP-MESSAGE-FORMATS-TUPLEDATA
277
- //
278
- // However, in certain cases an UPDATE may be received for a row that
279
- // was not initially synced, such as when, an existing table is added
280
- // to the app's publication.
281
- //
282
- // In order to facilitate "resumptive" replication, the logic falls back to
283
- // an INSERT if the update did not change any rows.
284
- processUpdate(update) {
285
- const table = liteTableName(update.relation);
286
- const tableSpec = this.#tableSpec(table);
287
- const newRow = liteRow(update.new, tableSpec, this.#jsonFormat);
288
- const row = { ...newRow.row, [ZERO_VERSION_COLUMN_NAME]: this.#version };
289
- const oldKey = update.key ? this.#getKey(
290
- liteRow(update.key, this.#tableSpec(table), this.#jsonFormat),
291
- update
292
- ) : null;
293
- const newKey = this.#getKey(newRow, update);
294
- if (oldKey) {
295
- this.#logDeleteOp(table, oldKey, tableSpec.backfilling);
296
- }
297
- this.#logSetOp(table, newKey, getBackfilledColumns(newRow.row, tableSpec));
298
- const currKey = oldKey ?? newKey;
299
- const conds = Object.keys(currKey).map((col) => `${id(col)}=?`);
300
- const setExprs = Object.keys(row).map((col) => `${id(col)}=?`);
301
- const { changes } = this.#db.run(
302
- `
252
+ `, Object.values(row));
253
+ }
254
+ processUpdate(update) {
255
+ const table = liteTableName(update.relation);
256
+ const tableSpec = this.#tableSpec(table);
257
+ const newRow = liteRow(update.new, tableSpec, this.#jsonFormat);
258
+ const row = {
259
+ ...newRow.row,
260
+ [ZERO_VERSION_COLUMN_NAME]: this.#version
261
+ };
262
+ const oldKey = update.key ? this.#getKey(liteRow(update.key, this.#tableSpec(table), this.#jsonFormat), update) : null;
263
+ const newKey = this.#getKey(newRow, update);
264
+ if (oldKey) this.#logDeleteOp(table, oldKey, tableSpec.backfilling);
265
+ this.#logSetOp(table, newKey, getBackfilledColumns(newRow.row, tableSpec));
266
+ const currKey = oldKey ?? newKey;
267
+ const conds = Object.keys(currKey).map((col) => `${id(col)}=?`);
268
+ const setExprs = Object.keys(row).map((col) => `${id(col)}=?`);
269
+ const { changes } = this.#db.run(`
303
270
  UPDATE ${id(table)}
304
271
  SET ${setExprs.join(",")}
305
272
  WHERE ${conds.join(" AND ")}
306
- `,
307
- [...Object.values(row), ...Object.values(currKey)]
308
- );
309
- if (changes === 0) {
310
- this.#upsert(table, row);
311
- }
312
- }
313
- processDelete(del) {
314
- const table = liteTableName(del.relation);
315
- const tableSpec = this.#tableSpec(table);
316
- const rowKey = this.#getKey(
317
- liteRow(del.key, tableSpec, this.#jsonFormat),
318
- del
319
- );
320
- this.#delete(table, rowKey);
321
- this.#logDeleteOp(table, rowKey, tableSpec.backfilling);
322
- }
323
- #delete(table, rowKey) {
324
- const conds = Object.keys(rowKey).map((col) => `${id(col)}=?`);
325
- this.#db.run(
326
- `DELETE FROM ${id(table)} WHERE ${conds.join(" AND ")}`,
327
- Object.values(rowKey)
328
- );
329
- }
330
- processTruncate(truncate) {
331
- for (const relation of truncate.relations) {
332
- const table = liteTableName(relation);
333
- this.#db.run(`DELETE FROM ${id(table)}`);
334
- this.#logTruncateOp(table);
335
- }
336
- }
337
- processCreateTable(create) {
338
- if (create.metadata) {
339
- this.#tableMetadata.setUpstreamMetadata(create.spec, create.metadata);
340
- }
341
- const table = mapPostgresToLite(create.spec);
342
- this.#db.db.exec(createLiteTableStatement(table));
343
- for (const [colName, colSpec] of Object.entries(create.spec.columns)) {
344
- this.#columnMetadata.insert(
345
- table.name,
346
- colName,
347
- colSpec,
348
- create.backfill?.[colName]
349
- );
350
- }
351
- if (Object.keys(create.backfill ?? {}).length === Object.keys(create.spec.columns).length) {
352
- this.#reloadTableSpecs();
353
- } else {
354
- this.#logResetOp(table.name);
355
- }
356
- this.#lc.info?.(create.tag, table.name);
357
- }
358
- processTableMetadata(msg) {
359
- this.#tableMetadata.setUpstreamMetadata(msg.table, msg.new);
360
- }
361
- processRenameTable(rename) {
362
- this.#tableMetadata.rename(rename.old, rename.new);
363
- const oldName = liteTableName(rename.old);
364
- const newName = liteTableName(rename.new);
365
- this.#db.db.exec(`ALTER TABLE ${id(oldName)} RENAME TO ${id(newName)}`);
366
- this.#columnMetadata.renameTable(oldName, newName);
367
- this.#bumpVersions(rename.new);
368
- this.#logResetOp(oldName);
369
- this.#lc.info?.(rename.tag, oldName, newName);
370
- }
371
- processAddColumn(msg) {
372
- if (msg.tableMetadata) {
373
- this.#tableMetadata.setUpstreamMetadata(msg.table, msg.tableMetadata);
374
- }
375
- const table = liteTableName(msg.table);
376
- const { name } = msg.column;
377
- const spec = mapPostgresToLiteColumn(table, msg.column);
378
- this.#db.db.exec(
379
- `ALTER TABLE ${id(table)} ADD ${id(name)} ${liteColumnDef(spec)}`
380
- );
381
- this.#columnMetadata.insert(table, name, msg.column.spec, msg.backfill);
382
- if (msg.backfill) {
383
- this.#reloadTableSpecs();
384
- } else {
385
- this.#bumpVersions(msg.table);
386
- }
387
- this.#lc.info?.(msg.tag, table, msg.column);
388
- }
389
- processUpdateColumn(msg) {
390
- const table = liteTableName(msg.table);
391
- let oldName = msg.old.name;
392
- const newName = msg.new.name;
393
- const oldSpec = mapPostgresToLiteColumn(table, msg.old, "ignore-default");
394
- const newSpec = mapPostgresToLiteColumn(table, msg.new, "ignore-default");
395
- if (oldName === newName && oldSpec.dataType === newSpec.dataType) {
396
- this.#lc.info?.(msg.tag, "no thing to update", oldSpec, newSpec);
397
- return;
398
- }
399
- if (oldSpec.dataType !== newSpec.dataType) {
400
- const indexes = listIndexes(this.#db.db).filter(
401
- (idx) => idx.tableName === table && oldName in idx.columns
402
- );
403
- const stmts = indexes.map((idx) => `DROP INDEX IF EXISTS ${id(idx.name)};`);
404
- const tmpName = `tmp.${newName}`;
405
- stmts.push(`
273
+ `, [...Object.values(row), ...Object.values(currKey)]);
274
+ if (changes === 0) this.#upsert(table, row);
275
+ }
276
+ processDelete(del) {
277
+ const table = liteTableName(del.relation);
278
+ const tableSpec = this.#tableSpec(table);
279
+ const rowKey = this.#getKey(liteRow(del.key, tableSpec, this.#jsonFormat), del);
280
+ this.#delete(table, rowKey);
281
+ this.#logDeleteOp(table, rowKey, tableSpec.backfilling);
282
+ }
283
+ #delete(table, rowKey) {
284
+ const conds = Object.keys(rowKey).map((col) => `${id(col)}=?`);
285
+ this.#db.run(`DELETE FROM ${id(table)} WHERE ${conds.join(" AND ")}`, Object.values(rowKey));
286
+ }
287
+ processTruncate(truncate) {
288
+ for (const relation of truncate.relations) {
289
+ const table = liteTableName(relation);
290
+ this.#db.run(`DELETE FROM ${id(table)}`);
291
+ this.#logTruncateOp(table);
292
+ }
293
+ }
294
+ processCreateTable(create) {
295
+ if (create.metadata) this.#tableMetadata.setUpstreamMetadata(create.spec, create.metadata);
296
+ const table = mapPostgresToLite(create.spec);
297
+ this.#db.db.exec(createLiteTableStatement(table));
298
+ for (const [colName, colSpec] of Object.entries(create.spec.columns)) this.#columnMetadata.insert(table.name, colName, colSpec, create.backfill?.[colName]);
299
+ if (Object.keys(create.backfill ?? {}).length === Object.keys(create.spec.columns).length) this.#reloadTableSpecs();
300
+ else this.#logResetOp(table.name);
301
+ this.#lc.info?.(create.tag, table.name);
302
+ }
303
+ processTableMetadata(msg) {
304
+ this.#tableMetadata.setUpstreamMetadata(msg.table, msg.new);
305
+ }
306
+ processRenameTable(rename) {
307
+ this.#tableMetadata.rename(rename.old, rename.new);
308
+ const oldName = liteTableName(rename.old);
309
+ const newName = liteTableName(rename.new);
310
+ this.#db.db.exec(`ALTER TABLE ${id(oldName)} RENAME TO ${id(newName)}`);
311
+ this.#columnMetadata.renameTable(oldName, newName);
312
+ this.#bumpVersions(rename.new);
313
+ this.#logResetOp(oldName);
314
+ this.#lc.info?.(rename.tag, oldName, newName);
315
+ }
316
+ processAddColumn(msg) {
317
+ if (msg.tableMetadata) this.#tableMetadata.setUpstreamMetadata(msg.table, msg.tableMetadata);
318
+ const table = liteTableName(msg.table);
319
+ const { name } = msg.column;
320
+ const spec = mapPostgresToLiteColumn(table, msg.column);
321
+ this.#db.db.exec(`ALTER TABLE ${id(table)} ADD ${id(name)} ${liteColumnDef(spec)}`);
322
+ this.#columnMetadata.insert(table, name, msg.column.spec, msg.backfill);
323
+ if (msg.backfill) this.#reloadTableSpecs();
324
+ else this.#bumpVersions(msg.table);
325
+ this.#lc.info?.(msg.tag, table, msg.column);
326
+ }
327
+ processUpdateColumn(msg) {
328
+ const table = liteTableName(msg.table);
329
+ let oldName = msg.old.name;
330
+ const newName = msg.new.name;
331
+ const oldSpec = mapPostgresToLiteColumn(table, msg.old, "ignore-default");
332
+ const newSpec = mapPostgresToLiteColumn(table, msg.new, "ignore-default");
333
+ if (oldName === newName && oldSpec.dataType === newSpec.dataType) {
334
+ this.#lc.info?.(msg.tag, "no thing to update", oldSpec, newSpec);
335
+ return;
336
+ }
337
+ if (oldSpec.dataType !== newSpec.dataType) {
338
+ const indexes = listIndexes(this.#db.db).filter((idx) => idx.tableName === table && oldName in idx.columns);
339
+ const stmts = indexes.map((idx) => `DROP INDEX IF EXISTS ${id(idx.name)};`);
340
+ const tmpName = `tmp.${newName}`;
341
+ stmts.push(`
406
342
  ALTER TABLE ${id(table)} ADD ${id(tmpName)} ${liteColumnDef(newSpec)};
407
343
  UPDATE ${id(table)} SET ${id(tmpName)} = ${id(oldName)};
408
344
  ALTER TABLE ${id(table)} DROP ${id(oldName)};
409
345
  `);
410
- for (const idx of indexes) {
411
- idx.columns[tmpName] = idx.columns[oldName];
412
- delete idx.columns[oldName];
413
- stmts.push(createLiteIndexStatement(idx));
414
- }
415
- this.#db.db.exec(stmts.join(""));
416
- oldName = tmpName;
417
- }
418
- if (oldName !== newName) {
419
- this.#db.db.exec(
420
- `ALTER TABLE ${id(table)} RENAME ${id(oldName)} TO ${id(newName)}`
421
- );
422
- }
423
- this.#columnMetadata.update(
424
- table,
425
- msg.old.name,
426
- msg.new.name,
427
- msg.new.spec
428
- );
429
- this.#bumpVersions(msg.table);
430
- this.#lc.info?.(msg.tag, table, msg.new);
431
- }
432
- processDropColumn(msg) {
433
- const table = liteTableName(msg.table);
434
- const { column } = msg;
435
- this.#db.db.exec(`ALTER TABLE ${id(table)} DROP ${id(column)}`);
436
- this.#columnMetadata.deleteColumn(table, column);
437
- this.#bumpVersions(msg.table);
438
- this.#lc.info?.(msg.tag, table, column);
439
- }
440
- processDropTable(drop) {
441
- this.#tableMetadata.drop(drop.id);
442
- const name = liteTableName(drop.id);
443
- this.#db.db.exec(`DROP TABLE IF EXISTS ${id(name)}`);
444
- this.#columnMetadata.deleteTable(name);
445
- this.#logResetOp(name);
446
- this.#lc.info?.(drop.tag, name);
447
- }
448
- processCreateIndex(create) {
449
- const index = mapPostgresToLiteIndex(create.spec);
450
- this.#db.db.exec(createLiteIndexStatement(index));
451
- const tableSpec = must(this.#tableSpecs.get(index.tableName));
452
- if ((tableSpec.backfilling ?? []).length === Object.entries(tableSpec.columns).length - 1) {
453
- this.#reloadTableSpecs();
454
- } else {
455
- this.#logResetOp(index.tableName);
456
- }
457
- this.#lc.info?.(create.tag, index.name);
458
- }
459
- processDropIndex(drop) {
460
- const name = liteTableName(drop.id);
461
- this.#db.db.exec(`DROP INDEX IF EXISTS ${id(name)}`);
462
- this.#lc.info?.(drop.tag, name);
463
- }
464
- #bumpVersions(table) {
465
- this.#tableMetadata.setMinRowVersion(table, this.#version);
466
- this.#logResetOp(liteTableName(table));
467
- }
468
- /**
469
- * @param backfilledColumns `backfilling` columns for which values were set
470
- */
471
- #logSetOp(table, key, backfilledColumns) {
472
- if (this.#mode === "serving" || backfilledColumns !== void 0) {
473
- this.#changeLog.logSetOp(
474
- this.#version,
475
- this.#pos++,
476
- table,
477
- key,
478
- backfilledColumns
479
- );
480
- this.#numChangeLogEntries++;
481
- }
482
- }
483
- #logDeleteOp(table, key, backfilling) {
484
- if (this.#mode === "serving" || backfilling?.length) {
485
- this.#changeLog.logDeleteOp(this.#version, this.#pos++, table, key);
486
- this.#numChangeLogEntries++;
487
- }
488
- }
489
- #logTruncateOp(table) {
490
- if (this.#mode === "serving") {
491
- this.#changeLog.logTruncateOp(this.#version, table);
492
- this.#numChangeLogEntries++;
493
- }
494
- }
495
- #logResetOp(table) {
496
- this.#schemaChanged = true;
497
- if (this.#mode === "serving") {
498
- this.#changeLog.logResetOp(this.#version, table);
499
- this.#numChangeLogEntries++;
500
- }
501
- this.#reloadTableSpecs();
502
- }
503
- processBackfill({ relation, watermark, columns, rowValues }) {
504
- const tableName = liteTableName(relation);
505
- const tableSpec = must(this.#tableSpecs.get(tableName));
506
- const rowKeyCols = relation.rowKey.columns;
507
- const cols = [...rowKeyCols, ...columns];
508
- const insertColsStr = [...cols, ZERO_VERSION_COLUMN_NAME].map(id).join(",");
509
- const qMarks = Array.from({ length: cols.length + 1 }, () => "?").join(",");
510
- const rowKeyColsStr = rowKeyCols.map(id).join(",");
511
- let backfilled = 0;
512
- let skipped = 0;
513
- for (const v of rowValues) {
514
- const row = liteRow(
515
- Object.fromEntries(cols.map((c, i) => [c, v[i]])),
516
- tableSpec,
517
- this.#jsonFormat
518
- );
519
- const rowKey = this.#getKey(row, { relation });
520
- const rowOp = this.#changeLog.getLatestRowOp(tableName, rowKey);
521
- if (rowOp?.op === DEL_OP && rowOp.stateVersion > watermark) {
522
- skipped++;
523
- continue;
524
- }
525
- const updates = rowOp?.op === SET_OP ? cols.filter(
526
- (c) => (rowOp.backfillingColumnVersions[c] ?? "") <= watermark
527
- ) : cols;
528
- if (updates.length === 0) {
529
- skipped++;
530
- continue;
531
- }
532
- const updateStmts = updates.map((col) => `${id(col)}=excluded.${id(col)}`);
533
- this.#db.run(
534
- /*sql*/
535
- `
346
+ for (const idx of indexes) {
347
+ idx.columns[tmpName] = idx.columns[oldName];
348
+ delete idx.columns[oldName];
349
+ stmts.push(createLiteIndexStatement(idx));
350
+ }
351
+ this.#db.db.exec(stmts.join(""));
352
+ oldName = tmpName;
353
+ }
354
+ if (oldName !== newName) this.#db.db.exec(`ALTER TABLE ${id(table)} RENAME ${id(oldName)} TO ${id(newName)}`);
355
+ this.#columnMetadata.update(table, msg.old.name, msg.new.name, msg.new.spec);
356
+ this.#bumpVersions(msg.table);
357
+ this.#lc.info?.(msg.tag, table, msg.new);
358
+ }
359
+ processDropColumn(msg) {
360
+ const table = liteTableName(msg.table);
361
+ const { column } = msg;
362
+ this.#db.db.exec(`ALTER TABLE ${id(table)} DROP ${id(column)}`);
363
+ this.#columnMetadata.deleteColumn(table, column);
364
+ this.#bumpVersions(msg.table);
365
+ this.#lc.info?.(msg.tag, table, column);
366
+ }
367
+ processDropTable(drop) {
368
+ this.#tableMetadata.drop(drop.id);
369
+ const name = liteTableName(drop.id);
370
+ this.#db.db.exec(`DROP TABLE IF EXISTS ${id(name)}`);
371
+ this.#columnMetadata.deleteTable(name);
372
+ this.#logResetOp(name);
373
+ this.#lc.info?.(drop.tag, name);
374
+ }
375
+ processCreateIndex(create) {
376
+ const index = mapPostgresToLiteIndex(create.spec);
377
+ this.#db.db.exec(createLiteIndexStatement(index));
378
+ const tableSpec = must(this.#tableSpecs.get(index.tableName));
379
+ if ((tableSpec.backfilling ?? []).length === Object.entries(tableSpec.columns).length - 1) this.#reloadTableSpecs();
380
+ else this.#logResetOp(index.tableName);
381
+ this.#lc.info?.(create.tag, index.name);
382
+ }
383
+ processDropIndex(drop) {
384
+ const name = liteTableName(drop.id);
385
+ this.#db.db.exec(`DROP INDEX IF EXISTS ${id(name)}`);
386
+ this.#lc.info?.(drop.tag, name);
387
+ }
388
+ #bumpVersions(table) {
389
+ this.#tableMetadata.setMinRowVersion(table, this.#version);
390
+ this.#logResetOp(liteTableName(table));
391
+ }
392
+ /**
393
+ * @param backfilledColumns `backfilling` columns for which values were set
394
+ */
395
+ #logSetOp(table, key, backfilledColumns) {
396
+ if (this.#mode === "serving" || backfilledColumns !== void 0) {
397
+ this.#changeLog.logSetOp(this.#version, this.#pos++, table, key, backfilledColumns);
398
+ this.#numChangeLogEntries++;
399
+ }
400
+ }
401
+ #logDeleteOp(table, key, backfilling) {
402
+ if (this.#mode === "serving" || backfilling?.length) {
403
+ this.#changeLog.logDeleteOp(this.#version, this.#pos++, table, key);
404
+ this.#numChangeLogEntries++;
405
+ }
406
+ }
407
+ #logTruncateOp(table) {
408
+ if (this.#mode === "serving") {
409
+ this.#changeLog.logTruncateOp(this.#version, table);
410
+ this.#numChangeLogEntries++;
411
+ }
412
+ }
413
+ #logResetOp(table) {
414
+ this.#schemaChanged = true;
415
+ if (this.#mode === "serving") {
416
+ this.#changeLog.logResetOp(this.#version, table);
417
+ this.#numChangeLogEntries++;
418
+ }
419
+ this.#reloadTableSpecs();
420
+ }
421
+ processBackfill({ relation, watermark, columns, rowValues }) {
422
+ const tableName = liteTableName(relation);
423
+ const tableSpec = must(this.#tableSpecs.get(tableName));
424
+ const rowKeyCols = relation.rowKey.columns;
425
+ const cols = [...rowKeyCols, ...columns];
426
+ const insertColsStr = [...cols, ZERO_VERSION_COLUMN_NAME].map(id).join(",");
427
+ const qMarks = Array.from({ length: cols.length + 1 }, () => "?").join(",");
428
+ const rowKeyColsStr = rowKeyCols.map(id).join(",");
429
+ let backfilled = 0;
430
+ let skipped = 0;
431
+ for (const v of rowValues) {
432
+ const row = liteRow(Object.fromEntries(cols.map((c, i) => [c, v[i]])), tableSpec, this.#jsonFormat);
433
+ const rowKey = this.#getKey(row, { relation });
434
+ const rowOp = this.#changeLog.getLatestRowOp(tableName, rowKey);
435
+ if (rowOp?.op === "d" && rowOp.stateVersion > watermark) {
436
+ skipped++;
437
+ continue;
438
+ }
439
+ const updates = rowOp?.op === "s" ? cols.filter((c) => (rowOp.backfillingColumnVersions[c] ?? "") <= watermark) : cols;
440
+ if (updates.length === 0) {
441
+ skipped++;
442
+ continue;
443
+ }
444
+ const updateStmts = updates.map((col) => `${id(col)}=excluded.${id(col)}`);
445
+ this.#db.run(`
536
446
  INSERT INTO ${id(tableName)} (${insertColsStr}) VALUES (${qMarks})
537
447
  ON CONFLICT (${rowKeyColsStr})
538
448
  DO UPDATE SET ${updateStmts.join(",")};
539
- `,
540
- ...Object.values(row.row),
541
- watermark
542
- // the _0_version for new rows (i.e. table backfill)
543
- );
544
- backfilled++;
545
- }
546
- this.#lc.debug?.(
547
- `backfilled ${backfilled} rows (skipped ${skipped}) into ${tableName}`
548
- );
549
- }
550
- #completedBackfill;
551
- processBackfillCompleted({ relation, columns, status }) {
552
- const tableName = liteTableName(relation);
553
- const rowKeyCols = relation.rowKey.columns;
554
- const cols = [...rowKeyCols, ...columns];
555
- const columnMetadata = must(ColumnMetadataStore.getInstance(this.#db.db));
556
- for (const col of cols) {
557
- columnMetadata.clearBackfilling(tableName, col);
558
- }
559
- this.#bumpVersions(relation);
560
- if (status) {
561
- this.#completedBackfill = { table: tableName, columns: cols, ...status };
562
- }
563
- this.#lc.info?.(`finished backfilling ${tableName}`);
564
- }
565
- processCommit(commit, watermark) {
566
- if (watermark !== this.#version) {
567
- throw new Error(
568
- `'commit' version ${watermark} does not match 'begin' version ${this.#version}: ${stringify(commit)}`
569
- );
570
- }
571
- updateReplicationWatermark(this.#db, watermark);
572
- if (this.#schemaChanged) {
573
- const start = Date.now();
574
- this.#db.db.pragma("optimize");
575
- this.#lc.info?.(
576
- `PRAGMA optimized after schema change (${Date.now() - start} ms)`
577
- );
578
- }
579
- if (this.#mode !== "initial-sync") {
580
- this.#db.commit();
581
- }
582
- const elapsedMs = Date.now() - this.#startMs;
583
- this.#lc.debug?.(`Committed tx@${this.#version} (${elapsedMs} ms)`);
584
- return {
585
- watermark,
586
- completedBackfill: this.#completedBackfill,
587
- schemaUpdated: this.#schemaChanged,
588
- changeLogUpdated: this.#numChangeLogEntries > 0
589
- };
590
- }
591
- abort(lc) {
592
- lc.info?.(`aborting transaction ${this.#version}`);
593
- this.#db.rollback();
594
- }
595
- }
449
+ `, ...Object.values(row.row), watermark);
450
+ backfilled++;
451
+ }
452
+ this.#lc.debug?.(`backfilled ${backfilled} rows (skipped ${skipped}) into ${tableName}`);
453
+ }
454
+ #completedBackfill;
455
+ processBackfillCompleted({ relation, columns, status }) {
456
+ const tableName = liteTableName(relation);
457
+ const cols = [...relation.rowKey.columns, ...columns];
458
+ const columnMetadata = must(ColumnMetadataStore.getInstance(this.#db.db));
459
+ for (const col of cols) columnMetadata.clearBackfilling(tableName, col);
460
+ this.#bumpVersions(relation);
461
+ if (status) this.#completedBackfill = {
462
+ table: tableName,
463
+ columns: cols,
464
+ ...status
465
+ };
466
+ this.#lc.info?.(`finished backfilling ${tableName}`);
467
+ }
468
+ processCommit(commit, watermark) {
469
+ if (watermark !== this.#version) throw new Error(`'commit' version ${watermark} does not match 'begin' version ${this.#version}: ${stringify(commit)}`);
470
+ updateReplicationWatermark(this.#db, watermark);
471
+ if (this.#schemaChanged) {
472
+ const start = Date.now();
473
+ this.#db.db.pragma("optimize");
474
+ this.#lc.info?.(`PRAGMA optimized after schema change (${Date.now() - start} ms)`);
475
+ }
476
+ if (this.#mode !== "initial-sync") this.#db.commit();
477
+ const elapsedMs = Date.now() - this.#startMs;
478
+ this.#lc.debug?.(`Committed tx@${this.#version} (${elapsedMs} ms)`);
479
+ return {
480
+ watermark,
481
+ completedBackfill: this.#completedBackfill,
482
+ schemaUpdated: this.#schemaChanged,
483
+ changeLogUpdated: this.#numChangeLogEntries > 0
484
+ };
485
+ }
486
+ abort(lc) {
487
+ lc.info?.(`aborting transaction ${this.#version}`);
488
+ this.#db.rollback();
489
+ }
490
+ };
596
491
  function getBackfilledColumns(row, { backfilling }) {
597
- if (!backfilling?.length) {
598
- return void 0;
599
- }
600
- return backfilling.filter((col) => col in row);
492
+ if (!backfilling?.length) return;
493
+ return backfilling.filter((col) => col in row);
601
494
  }
602
495
  function ensureError(err) {
603
- if (err instanceof Error) {
604
- return err;
605
- }
606
- const error = new Error();
607
- error.cause = err;
608
- return error;
496
+ if (err instanceof Error) return err;
497
+ const error = /* @__PURE__ */ new Error();
498
+ error.cause = err;
499
+ return error;
609
500
  }
610
- export {
611
- ChangeProcessor
612
- };
613
- //# sourceMappingURL=change-processor.js.map
501
+ //#endregion
502
+ export { ChangeProcessor };
503
+
504
+ //# sourceMappingURL=change-processor.js.map