@rocicorp/zero 0.26.1 → 0.26.2-canary.4

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 +194 -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 +571 -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 +8 -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,304 +1,166 @@
1
1
  import { assert } from "../../../shared/src/asserts.js";
2
2
  import { deepEqual } from "../../../shared/src/json.js";
3
- import { diff } from "../btree/diff.js";
4
- import { BTreeRead } from "../btree/read.js";
5
3
  import { compareCookies } from "../cookies.js";
6
- import { DEFAULT_HEAD_NAME, baseSnapshotFromHash, assertSnapshotMetaDD31, commitFromHash, localMutations, commitIsLocalDD31, snapshotMetaParts } from "../db/commit.js";
7
- import { newWriteSnapshotDD31 } from "../db/write.js";
8
4
  import { isErrorResponse } from "../error-responses.js";
9
- import { deepFreeze } from "../frozen-json.js";
10
5
  import { assertPullerResultV1 } from "../get-default-puller.js";
6
+ import { deepFreeze } from "../frozen-json.js";
11
7
  import { emptyHash } from "../hash.js";
8
+ import { BTreeRead } from "../btree/read.js";
9
+ import { DEFAULT_HEAD_NAME, assertSnapshotMetaDD31, baseSnapshotFromHash, commitFromHash, commitIsLocalDD31, localMutations, snapshotMetaParts } from "../db/commit.js";
10
+ import { diff } from "../btree/diff.js";
11
+ import { DiffsMap, addDiffsForIndexes } from "./diff.js";
12
+ import { newWriteSnapshotDD31 } from "../db/write.js";
13
+ import { withRead, withWriteNoImplicitCommit } from "../with-transactions.js";
12
14
  import { ReportError } from "../report-error.js";
13
15
  import { toError } from "../to-error.js";
14
- import { withWriteNoImplicitCommit, withRead } from "../with-transactions.js";
15
- import { DiffsMap, addDiffsForIndexes } from "./diff.js";
16
- import { Applied, CookieMismatch, NoOp } from "./handle-pull-response-result-type-enum.js";
17
16
  import { apply } from "./patch.js";
18
17
  import { PullError } from "./pull-error.js";
19
18
  import { SYNC_HEAD_NAME } from "./sync-head-name.js";
20
- const PULL_VERSION_DD31 = 1;
21
19
  async function beginPullV1(profileID, clientID, clientGroupID, schemaVersion, puller, requestID, store, formatVersion, lc, createSyncBranch = true) {
22
- const baseCookie = await withRead(store, async (dagRead) => {
23
- const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);
24
- if (!mainHeadHash) {
25
- throw new Error("Internal no main head found");
26
- }
27
- const baseSnapshot = await baseSnapshotFromHash(mainHeadHash, dagRead);
28
- const baseSnapshotMeta = baseSnapshot.meta;
29
- assertSnapshotMetaDD31(baseSnapshotMeta);
30
- return baseSnapshotMeta.cookieJSON;
31
- });
32
- const pullReq = {
33
- profileID,
34
- clientGroupID,
35
- cookie: baseCookie,
36
- pullVersion: PULL_VERSION_DD31,
37
- schemaVersion
38
- };
39
- const { response, httpRequestInfo } = await callPuller(
40
- lc,
41
- puller,
42
- pullReq,
43
- requestID
44
- );
45
- if (!response) {
46
- return {
47
- httpRequestInfo,
48
- syncHead: emptyHash
49
- };
50
- }
51
- if (!createSyncBranch || isErrorResponse(response)) {
52
- return {
53
- httpRequestInfo,
54
- pullResponse: response,
55
- syncHead: emptyHash
56
- };
57
- }
58
- const result = await handlePullResponseV1(
59
- lc,
60
- store,
61
- baseCookie,
62
- response,
63
- clientID,
64
- formatVersion
65
- );
66
- return {
67
- httpRequestInfo,
68
- pullResponse: response,
69
- syncHead: result.type === Applied ? result.syncHead : emptyHash
70
- };
20
+ const baseCookie = await withRead(store, async (dagRead) => {
21
+ const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);
22
+ if (!mainHeadHash) throw new Error("Internal no main head found");
23
+ const baseSnapshotMeta = (await baseSnapshotFromHash(mainHeadHash, dagRead)).meta;
24
+ assertSnapshotMetaDD31(baseSnapshotMeta);
25
+ return baseSnapshotMeta.cookieJSON;
26
+ });
27
+ const { response, httpRequestInfo } = await callPuller(lc, puller, {
28
+ profileID,
29
+ clientGroupID,
30
+ cookie: baseCookie,
31
+ pullVersion: 1,
32
+ schemaVersion
33
+ }, requestID);
34
+ if (!response) return {
35
+ httpRequestInfo,
36
+ syncHead: emptyHash
37
+ };
38
+ if (!createSyncBranch || isErrorResponse(response)) return {
39
+ httpRequestInfo,
40
+ pullResponse: response,
41
+ syncHead: emptyHash
42
+ };
43
+ const result = await handlePullResponseV1(lc, store, baseCookie, response, clientID, formatVersion);
44
+ return {
45
+ httpRequestInfo,
46
+ pullResponse: response,
47
+ syncHead: result.type === 0 ? result.syncHead : emptyHash
48
+ };
71
49
  }
72
50
  async function callPuller(lc, puller, pullReq, requestID) {
73
- lc.debug?.("Starting pull...");
74
- const pullStart = Date.now();
75
- let pullerResult;
76
- try {
77
- pullerResult = await puller(pullReq, requestID);
78
- lc.debug?.(
79
- `...Pull ${pullerResult.response ? "complete" : "failed"} in `,
80
- Date.now() - pullStart,
81
- "ms"
82
- );
83
- } catch (e) {
84
- throw new PullError(toError(e));
85
- }
86
- try {
87
- assertPullerResultV1(pullerResult);
88
- return pullerResult;
89
- } catch (e) {
90
- throw new ReportError("Invalid puller result", toError(e));
91
- }
51
+ lc.debug?.("Starting pull...");
52
+ const pullStart = Date.now();
53
+ let pullerResult;
54
+ try {
55
+ pullerResult = await puller(pullReq, requestID);
56
+ lc.debug?.(`...Pull ${pullerResult.response ? "complete" : "failed"} in `, Date.now() - pullStart, "ms");
57
+ } catch (e) {
58
+ throw new PullError(toError(e));
59
+ }
60
+ try {
61
+ assertPullerResultV1(pullerResult);
62
+ return pullerResult;
63
+ } catch (e) {
64
+ throw new ReportError("Invalid puller result", toError(e));
65
+ }
92
66
  }
93
67
  function badOrderMessage(name, receivedValue, lastSnapshotValue) {
94
- return `Received ${name} ${receivedValue} is < than last snapshot ${name} ${lastSnapshotValue}; ignoring client view`;
68
+ return `Received ${name} ${receivedValue} is < than last snapshot ${name} ${lastSnapshotValue}; ignoring client view`;
95
69
  }
96
70
  function handlePullResponseV1(lc, store, expectedBaseCookie, response, clientID, formatVersion) {
97
- return withWriteNoImplicitCommit(store, async (dagWrite) => {
98
- const dagRead = dagWrite;
99
- const mainHead = await dagRead.getHead(DEFAULT_HEAD_NAME);
100
- if (mainHead === void 0) {
101
- throw new Error("Main head disappeared");
102
- }
103
- const baseSnapshot = await baseSnapshotFromHash(mainHead, dagRead);
104
- const baseSnapshotMeta = baseSnapshot.meta;
105
- assertSnapshotMetaDD31(baseSnapshotMeta);
106
- const baseCookie = baseSnapshotMeta.cookieJSON;
107
- if (!deepEqual(expectedBaseCookie, baseCookie)) {
108
- lc.debug?.(
109
- "handlePullResponse: cookie mismatch, response is not applicable"
110
- );
111
- return {
112
- type: CookieMismatch
113
- };
114
- }
115
- for (const [clientID2, lmidChange] of Object.entries(
116
- response.lastMutationIDChanges
117
- )) {
118
- const lastMutationID = baseSnapshotMeta.lastMutationIDs[clientID2];
119
- if (lastMutationID !== void 0 && lmidChange < lastMutationID) {
120
- throw new Error(
121
- badOrderMessage(
122
- `${clientID2} lastMutationID`,
123
- String(lmidChange),
124
- String(lastMutationID)
125
- )
126
- );
127
- }
128
- }
129
- const frozenResponseCookie = deepFreeze(response.cookie);
130
- if (compareCookies(frozenResponseCookie, baseCookie) < 0) {
131
- throw new Error(
132
- badOrderMessage(
133
- "cookie",
134
- JSON.stringify(frozenResponseCookie),
135
- JSON.stringify(baseCookie)
136
- )
137
- );
138
- }
139
- if (deepEqual(frozenResponseCookie, baseCookie)) {
140
- if (response.patch.length > 0) {
141
- lc.error?.(
142
- `handlePullResponse: cookie ${JSON.stringify(
143
- baseCookie
144
- )} did not change, but patch is not empty`
145
- );
146
- }
147
- if (Object.keys(response.lastMutationIDChanges).length > 0) {
148
- lc.error?.(
149
- `handlePullResponse: cookie ${JSON.stringify(
150
- baseCookie
151
- )} did not change, but lastMutationIDChanges is not empty`
152
- );
153
- }
154
- return {
155
- type: NoOp
156
- };
157
- }
158
- const dbWrite = await newWriteSnapshotDD31(
159
- baseSnapshot.chunk.hash,
160
- { ...baseSnapshotMeta.lastMutationIDs, ...response.lastMutationIDChanges },
161
- frozenResponseCookie,
162
- dagWrite,
163
- clientID,
164
- formatVersion
165
- );
166
- await apply(lc, dbWrite, response.patch);
167
- return {
168
- type: Applied,
169
- syncHead: await dbWrite.commit(SYNC_HEAD_NAME)
170
- };
171
- });
71
+ return withWriteNoImplicitCommit(store, async (dagWrite) => {
72
+ const dagRead = dagWrite;
73
+ const mainHead = await dagRead.getHead(DEFAULT_HEAD_NAME);
74
+ if (mainHead === void 0) throw new Error("Main head disappeared");
75
+ const baseSnapshot = await baseSnapshotFromHash(mainHead, dagRead);
76
+ const baseSnapshotMeta = baseSnapshot.meta;
77
+ assertSnapshotMetaDD31(baseSnapshotMeta);
78
+ const baseCookie = baseSnapshotMeta.cookieJSON;
79
+ if (!deepEqual(expectedBaseCookie, baseCookie)) {
80
+ lc.debug?.("handlePullResponse: cookie mismatch, response is not applicable");
81
+ return { type: 2 };
82
+ }
83
+ for (const [clientID, lmidChange] of Object.entries(response.lastMutationIDChanges)) {
84
+ const lastMutationID = baseSnapshotMeta.lastMutationIDs[clientID];
85
+ if (lastMutationID !== void 0 && lmidChange < lastMutationID) throw new Error(badOrderMessage(`${clientID} lastMutationID`, String(lmidChange), String(lastMutationID)));
86
+ }
87
+ const frozenResponseCookie = deepFreeze(response.cookie);
88
+ if (compareCookies(frozenResponseCookie, baseCookie) < 0) throw new Error(badOrderMessage("cookie", JSON.stringify(frozenResponseCookie), JSON.stringify(baseCookie)));
89
+ if (deepEqual(frozenResponseCookie, baseCookie)) {
90
+ if (response.patch.length > 0) lc.error?.(`handlePullResponse: cookie ${JSON.stringify(baseCookie)} did not change, but patch is not empty`);
91
+ if (Object.keys(response.lastMutationIDChanges).length > 0) lc.error?.(`handlePullResponse: cookie ${JSON.stringify(baseCookie)} did not change, but lastMutationIDChanges is not empty`);
92
+ return { type: 1 };
93
+ }
94
+ const dbWrite = await newWriteSnapshotDD31(baseSnapshot.chunk.hash, {
95
+ ...baseSnapshotMeta.lastMutationIDs,
96
+ ...response.lastMutationIDChanges
97
+ }, frozenResponseCookie, dagWrite, clientID, formatVersion);
98
+ await apply(lc, dbWrite, response.patch);
99
+ return {
100
+ type: 0,
101
+ syncHead: await dbWrite.commit(SYNC_HEAD_NAME)
102
+ };
103
+ });
172
104
  }
173
105
  function maybeEndPull(store, lc, expectedSyncHead, clientID, diffConfig, formatVersion) {
174
- return withWriteNoImplicitCommit(store, async (dagWrite) => {
175
- const dagRead = dagWrite;
176
- const syncHeadHash = await dagRead.getHead(SYNC_HEAD_NAME);
177
- if (syncHeadHash === void 0) {
178
- throw new Error("Missing sync head");
179
- }
180
- if (syncHeadHash !== expectedSyncHead) {
181
- lc.error?.(
182
- "maybeEndPull, Wrong sync head. Expecting:",
183
- expectedSyncHead,
184
- "got:",
185
- syncHeadHash
186
- );
187
- throw new Error("Wrong sync head");
188
- }
189
- const syncSnapshot = await baseSnapshotFromHash(syncHeadHash, dagRead);
190
- const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);
191
- if (mainHeadHash === void 0) {
192
- throw new Error("Missing main head");
193
- }
194
- const mainSnapshot = await baseSnapshotFromHash(mainHeadHash, dagRead);
195
- const { meta } = syncSnapshot;
196
- const syncSnapshotBasis = meta.basisHash;
197
- if (syncSnapshot === null) {
198
- throw new Error("Sync snapshot with no basis");
199
- }
200
- if (syncSnapshotBasis !== mainSnapshot.chunk.hash) {
201
- throw new Error("Overlapping syncs");
202
- }
203
- const syncHead = await commitFromHash(syncHeadHash, dagRead);
204
- const pending = [];
205
- const localMutations$1 = await localMutations(mainHeadHash, dagRead);
206
- for (const commit of localMutations$1) {
207
- let cid = clientID;
208
- assert(
209
- commitIsLocalDD31(commit),
210
- "Expected commit to be a local DD31 commit"
211
- );
212
- cid = commit.meta.clientID;
213
- if (await commit.getMutationID(cid, dagRead) > await syncHead.getMutationID(cid, dagRead)) {
214
- pending.push(commit);
215
- }
216
- }
217
- pending.reverse();
218
- const diffsMap = new DiffsMap();
219
- if (pending.length > 0) {
220
- return {
221
- syncHead: syncHeadHash,
222
- oldMainHead: mainHeadHash,
223
- mainHead: mainHeadHash,
224
- replayMutations: pending,
225
- // The changed keys are not reported when further replays are
226
- // needed. The diffs will be reported at the end when there
227
- // are no more mutations to be replay and then it will be reported
228
- // relative to DEFAULT_HEAD_NAME.
229
- diffs: diffsMap
230
- };
231
- }
232
- const mainHead = await commitFromHash(mainHeadHash, dagRead);
233
- if (diffConfig.shouldComputeDiffs()) {
234
- const mainHeadMap = new BTreeRead(
235
- dagRead,
236
- formatVersion,
237
- mainHead.valueHash
238
- );
239
- const syncHeadMap = new BTreeRead(
240
- dagRead,
241
- formatVersion,
242
- syncHead.valueHash
243
- );
244
- const valueDiff = await diff(mainHeadMap, syncHeadMap);
245
- diffsMap.set("", valueDiff);
246
- await addDiffsForIndexes(
247
- mainHead,
248
- syncHead,
249
- dagRead,
250
- diffsMap,
251
- diffConfig,
252
- formatVersion
253
- );
254
- }
255
- await Promise.all([
256
- dagWrite.setHead(DEFAULT_HEAD_NAME, syncHeadHash),
257
- dagWrite.removeHead(SYNC_HEAD_NAME)
258
- ]);
259
- await dagWrite.commit();
260
- const newMainHeadHash = syncHeadHash;
261
- if (lc.debug) {
262
- const [oldLastMutationID, oldCookie] = snapshotMetaParts(
263
- mainSnapshot,
264
- clientID
265
- );
266
- const [newLastMutationID, newCookie] = snapshotMetaParts(
267
- syncSnapshot,
268
- clientID
269
- );
270
- lc.debug(
271
- `Successfully pulled new snapshot with lastMutationID:`,
272
- newLastMutationID,
273
- `(prev:`,
274
- oldLastMutationID,
275
- `), cookie: `,
276
- newCookie,
277
- `(prev:`,
278
- oldCookie,
279
- `), sync head hash:`,
280
- syncHeadHash,
281
- ", main head hash:",
282
- mainHeadHash,
283
- `, valueHash:`,
284
- syncHead.valueHash,
285
- `(prev:`,
286
- mainSnapshot.valueHash
287
- );
288
- }
289
- return {
290
- syncHead: syncHeadHash,
291
- oldMainHead: mainHeadHash,
292
- mainHead: newMainHeadHash,
293
- replayMutations: [],
294
- diffs: diffsMap
295
- };
296
- });
106
+ return withWriteNoImplicitCommit(store, async (dagWrite) => {
107
+ const dagRead = dagWrite;
108
+ const syncHeadHash = await dagRead.getHead(SYNC_HEAD_NAME);
109
+ if (syncHeadHash === void 0) throw new Error("Missing sync head");
110
+ if (syncHeadHash !== expectedSyncHead) {
111
+ lc.error?.("maybeEndPull, Wrong sync head. Expecting:", expectedSyncHead, "got:", syncHeadHash);
112
+ throw new Error("Wrong sync head");
113
+ }
114
+ const syncSnapshot = await baseSnapshotFromHash(syncHeadHash, dagRead);
115
+ const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);
116
+ if (mainHeadHash === void 0) throw new Error("Missing main head");
117
+ const mainSnapshot = await baseSnapshotFromHash(mainHeadHash, dagRead);
118
+ const { meta } = syncSnapshot;
119
+ const syncSnapshotBasis = meta.basisHash;
120
+ if (syncSnapshot === null) throw new Error("Sync snapshot with no basis");
121
+ if (syncSnapshotBasis !== mainSnapshot.chunk.hash) throw new Error("Overlapping syncs");
122
+ const syncHead = await commitFromHash(syncHeadHash, dagRead);
123
+ const pending = [];
124
+ const localMutations$1 = await localMutations(mainHeadHash, dagRead);
125
+ for (const commit of localMutations$1) {
126
+ let cid = clientID;
127
+ assert(commitIsLocalDD31(commit), "Expected commit to be a local DD31 commit");
128
+ cid = commit.meta.clientID;
129
+ if (await commit.getMutationID(cid, dagRead) > await syncHead.getMutationID(cid, dagRead)) pending.push(commit);
130
+ }
131
+ pending.reverse();
132
+ const diffsMap = new DiffsMap();
133
+ if (pending.length > 0) return {
134
+ syncHead: syncHeadHash,
135
+ oldMainHead: mainHeadHash,
136
+ mainHead: mainHeadHash,
137
+ replayMutations: pending,
138
+ diffs: diffsMap
139
+ };
140
+ const mainHead = await commitFromHash(mainHeadHash, dagRead);
141
+ if (diffConfig.shouldComputeDiffs()) {
142
+ const valueDiff = await diff(new BTreeRead(dagRead, formatVersion, mainHead.valueHash), new BTreeRead(dagRead, formatVersion, syncHead.valueHash));
143
+ diffsMap.set("", valueDiff);
144
+ await addDiffsForIndexes(mainHead, syncHead, dagRead, diffsMap, diffConfig, formatVersion);
145
+ }
146
+ await Promise.all([dagWrite.setHead(DEFAULT_HEAD_NAME, syncHeadHash), dagWrite.removeHead(SYNC_HEAD_NAME)]);
147
+ await dagWrite.commit();
148
+ const newMainHeadHash = syncHeadHash;
149
+ if (lc.debug) {
150
+ const [oldLastMutationID, oldCookie] = snapshotMetaParts(mainSnapshot, clientID);
151
+ const [newLastMutationID, newCookie] = snapshotMetaParts(syncSnapshot, clientID);
152
+ lc.debug(`Successfully pulled new snapshot with lastMutationID:`, newLastMutationID, `(prev:`, oldLastMutationID, `), cookie: `, newCookie, `(prev:`, oldCookie, `), sync head hash:`, syncHeadHash, ", main head hash:", mainHeadHash, `, valueHash:`, syncHead.valueHash, `(prev:`, mainSnapshot.valueHash);
153
+ }
154
+ return {
155
+ syncHead: syncHeadHash,
156
+ oldMainHead: mainHeadHash,
157
+ mainHead: newMainHeadHash,
158
+ replayMutations: [],
159
+ diffs: diffsMap
160
+ };
161
+ });
297
162
  }
298
- export {
299
- PULL_VERSION_DD31,
300
- beginPullV1,
301
- handlePullResponseV1,
302
- maybeEndPull
303
- };
304
- //# sourceMappingURL=pull.js.map
163
+ //#endregion
164
+ export { beginPullV1, handlePullResponseV1, maybeEndPull };
165
+
166
+ //# sourceMappingURL=pull.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sources":["../../../../../replicache/src/sync/pull.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport {deepEqual} from '../../../shared/src/json.ts';\nimport {diff} from '../btree/diff.ts';\nimport {BTreeRead} from '../btree/read.ts';\nimport {compareCookies, type Cookie} from '../cookies.ts';\nimport type {Store} from '../dag/store.ts';\nimport type {Commit} from '../db/commit.ts';\nimport {\n assertSnapshotMetaDD31,\n baseSnapshotFromHash,\n commitFromHash,\n commitIsLocalDD31,\n DEFAULT_HEAD_NAME,\n type LocalMeta,\n localMutations as localMutations_1,\n snapshotMetaParts,\n} from '../db/commit.ts';\nimport {newWriteSnapshotDD31} from '../db/write.ts';\nimport {isErrorResponse} from '../error-responses.ts';\nimport type * as FormatVersion from '../format-version-enum.ts';\nimport {deepFreeze, type FrozenJSONValue} from '../frozen-json.ts';\nimport {assertPullerResultV1} from '../get-default-puller.ts';\nimport {emptyHash, type Hash} from '../hash.ts';\nimport type {HTTPRequestInfo} from '../http-request-info.ts';\nimport type {\n Puller,\n PullerResult,\n PullResponseOKV1Internal,\n PullResponseV1,\n} from '../puller.ts';\nimport {ReportError} from '../report-error.ts';\nimport {toError} from '../to-error.ts';\nimport {withRead, withWriteNoImplicitCommit} from '../with-transactions.ts';\nimport {\n addDiffsForIndexes,\n type DiffComputationConfig,\n DiffsMap,\n} from './diff.ts';\nimport * as HandlePullResponseResultType from './handle-pull-response-result-type-enum.ts';\nimport type {ClientGroupID, ClientID} from './ids.ts';\nimport * as patch from './patch.ts';\nimport {PullError} from './pull-error.ts';\nimport {SYNC_HEAD_NAME} from './sync-head-name.ts';\n\ntype FormatVersion = (typeof FormatVersion)[keyof typeof FormatVersion];\n\nexport const PULL_VERSION_SDD = 0;\nexport const PULL_VERSION_DD31 = 1;\n\n/**\n * The JSON value used as the body when doing a POST to the [pull\n * endpoint](/reference/server-pull).\n */\nexport type PullRequest = PullRequestV1;\n\n/**\n * The JSON value used as the body when doing a POST to the [pull\n * endpoint](/reference/server-pull).\n */\nexport type PullRequestV1 = {\n pullVersion: 1;\n // schemaVersion can optionally be used by the customer's app\n // to indicate to the data layer what format of Client View the\n // app understands.\n schemaVersion: string;\n profileID: string;\n cookie: Cookie;\n\n clientGroupID: ClientGroupID;\n};\n\nexport function isPullRequestV1(pr: PullRequest): pr is PullRequestV1 {\n return pr.pullVersion === PULL_VERSION_DD31;\n}\n\nexport type BeginPullResponseV1 = {\n httpRequestInfo: HTTPRequestInfo;\n pullResponse?: PullResponseV1;\n syncHead: Hash;\n};\n\nexport async function beginPullV1(\n profileID: string,\n clientID: ClientID,\n clientGroupID: ClientGroupID,\n schemaVersion: string,\n puller: Puller,\n requestID: string,\n store: Store,\n formatVersion: FormatVersion,\n lc: LogContext,\n createSyncBranch = true,\n): Promise<BeginPullResponseV1> {\n const baseCookie = await withRead(store, async dagRead => {\n const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (!mainHeadHash) {\n throw new Error('Internal no main head found');\n }\n const baseSnapshot = await baseSnapshotFromHash(mainHeadHash, dagRead);\n const baseSnapshotMeta = baseSnapshot.meta;\n assertSnapshotMetaDD31(baseSnapshotMeta);\n return baseSnapshotMeta.cookieJSON;\n });\n\n const pullReq: PullRequestV1 = {\n profileID,\n clientGroupID,\n cookie: baseCookie,\n pullVersion: PULL_VERSION_DD31,\n schemaVersion,\n };\n\n const {response, httpRequestInfo} = await callPuller(\n lc,\n puller,\n pullReq,\n requestID,\n );\n\n // If Puller did not get a pull response we still want to return the HTTP\n // request info.\n if (!response) {\n return {\n httpRequestInfo,\n syncHead: emptyHash,\n };\n }\n\n if (!createSyncBranch || isErrorResponse(response)) {\n return {\n httpRequestInfo,\n pullResponse: response,\n syncHead: emptyHash,\n };\n }\n\n const result = await handlePullResponseV1(\n lc,\n store,\n baseCookie,\n response,\n clientID,\n formatVersion,\n );\n\n return {\n httpRequestInfo,\n pullResponse: response,\n syncHead:\n result.type === HandlePullResponseResultType.Applied\n ? result.syncHead\n : emptyHash,\n };\n}\n\nasync function callPuller(\n lc: LogContext,\n puller: Puller,\n pullReq: PullRequest,\n requestID: string,\n): Promise<PullerResult> {\n lc.debug?.('Starting pull...');\n const pullStart = Date.now();\n let pullerResult: PullerResult;\n try {\n pullerResult = await puller(pullReq, requestID);\n lc.debug?.(\n `...Pull ${pullerResult.response ? 'complete' : 'failed'} in `,\n Date.now() - pullStart,\n 'ms',\n );\n } catch (e) {\n throw new PullError(toError(e));\n }\n try {\n assertPullerResultV1(pullerResult);\n return pullerResult;\n } catch (e) {\n throw new ReportError('Invalid puller result', toError(e));\n }\n}\n\ntype HandlePullResponseResult =\n | {\n type: HandlePullResponseResultType.Applied;\n syncHead: Hash;\n }\n | {\n type:\n | HandlePullResponseResultType.NoOp\n | HandlePullResponseResultType.CookieMismatch;\n };\n\nfunction badOrderMessage(\n name: string,\n receivedValue: string,\n lastSnapshotValue: string,\n) {\n return `Received ${name} ${receivedValue} is < than last snapshot ${name} ${lastSnapshotValue}; ignoring client view`;\n}\n\nexport function handlePullResponseV1(\n lc: LogContext,\n store: Store,\n expectedBaseCookie: FrozenJSONValue,\n response: PullResponseOKV1Internal,\n clientID: ClientID,\n formatVersion: FormatVersion,\n): Promise<HandlePullResponseResult> {\n // It is possible that another sync completed while we were pulling. Ensure\n // that is not the case by re-checking the base snapshot.\n return withWriteNoImplicitCommit(store, async dagWrite => {\n const dagRead = dagWrite;\n const mainHead = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (mainHead === undefined) {\n throw new Error('Main head disappeared');\n }\n const baseSnapshot = await baseSnapshotFromHash(mainHead, dagRead);\n const baseSnapshotMeta = baseSnapshot.meta;\n assertSnapshotMetaDD31(baseSnapshotMeta);\n const baseCookie = baseSnapshotMeta.cookieJSON;\n\n // TODO(MP) Here we are using whether the cookie has changed as a proxy for whether\n // the base snapshot changed, which is the check we used to do. I don't think this\n // is quite right. We need to firm up under what conditions we will/not accept an\n // update from the server: https://github.com/rocicorp/replicache/issues/713.\n // In DD31 this is expected to happen if a refresh occurs during a pull.\n if (!deepEqual(expectedBaseCookie, baseCookie)) {\n lc.debug?.(\n 'handlePullResponse: cookie mismatch, response is not applicable',\n );\n return {\n type: HandlePullResponseResultType.CookieMismatch,\n };\n }\n\n // Check that the lastMutationIDs are not going backwards.\n for (const [clientID, lmidChange] of Object.entries(\n response.lastMutationIDChanges,\n )) {\n const lastMutationID = baseSnapshotMeta.lastMutationIDs[clientID];\n if (lastMutationID !== undefined && lmidChange < lastMutationID) {\n throw new Error(\n badOrderMessage(\n `${clientID} lastMutationID`,\n String(lmidChange),\n String(lastMutationID),\n ),\n );\n }\n }\n\n const frozenResponseCookie = deepFreeze(response.cookie);\n if (compareCookies(frozenResponseCookie, baseCookie) < 0) {\n throw new Error(\n badOrderMessage(\n 'cookie',\n JSON.stringify(frozenResponseCookie),\n JSON.stringify(baseCookie),\n ),\n );\n }\n\n if (deepEqual(frozenResponseCookie, baseCookie)) {\n if (response.patch.length > 0) {\n lc.error?.(\n `handlePullResponse: cookie ${JSON.stringify(\n baseCookie,\n )} did not change, but patch is not empty`,\n );\n }\n if (Object.keys(response.lastMutationIDChanges).length > 0) {\n lc.error?.(\n `handlePullResponse: cookie ${JSON.stringify(\n baseCookie,\n )} did not change, but lastMutationIDChanges is not empty`,\n );\n }\n // If the cookie doesn't change, it's a nop.\n return {\n type: HandlePullResponseResultType.NoOp,\n };\n }\n\n const dbWrite = await newWriteSnapshotDD31(\n baseSnapshot.chunk.hash,\n {...baseSnapshotMeta.lastMutationIDs, ...response.lastMutationIDChanges},\n frozenResponseCookie,\n dagWrite,\n clientID,\n formatVersion,\n );\n\n await patch.apply(lc, dbWrite, response.patch);\n\n return {\n type: HandlePullResponseResultType.Applied,\n syncHead: await dbWrite.commit(SYNC_HEAD_NAME),\n };\n });\n}\n\nexport function maybeEndPull<M extends LocalMeta>(\n store: Store,\n lc: LogContext,\n expectedSyncHead: Hash,\n clientID: ClientID,\n diffConfig: DiffComputationConfig,\n formatVersion: FormatVersion,\n): Promise<{\n syncHead: Hash;\n mainHead: Hash;\n oldMainHead: Hash;\n replayMutations: Commit<M>[];\n diffs: DiffsMap;\n}> {\n return withWriteNoImplicitCommit(store, async dagWrite => {\n const dagRead = dagWrite;\n // Ensure sync head is what the caller thinks it is.\n const syncHeadHash = await dagRead.getHead(SYNC_HEAD_NAME);\n if (syncHeadHash === undefined) {\n throw new Error('Missing sync head');\n }\n if (syncHeadHash !== expectedSyncHead) {\n lc.error?.(\n 'maybeEndPull, Wrong sync head. Expecting:',\n expectedSyncHead,\n 'got:',\n syncHeadHash,\n );\n throw new Error('Wrong sync head');\n }\n\n // Ensure another sync has not landed a new snapshot on the main chain.\n // TODO: In DD31, it is expected that a newer snapshot might have appeared\n // on the main chain. In that case, we just abort this pull.\n const syncSnapshot = await baseSnapshotFromHash(syncHeadHash, dagRead);\n const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (mainHeadHash === undefined) {\n throw new Error('Missing main head');\n }\n const mainSnapshot = await baseSnapshotFromHash(mainHeadHash, dagRead);\n\n const {meta} = syncSnapshot;\n const syncSnapshotBasis = meta.basisHash;\n if (syncSnapshot === null) {\n throw new Error('Sync snapshot with no basis');\n }\n if (syncSnapshotBasis !== mainSnapshot.chunk.hash) {\n throw new Error('Overlapping syncs');\n }\n\n // Collect pending commits from the main chain and determine which\n // of them if any need to be replayed.\n const syncHead = await commitFromHash(syncHeadHash, dagRead);\n const pending: Commit<M>[] = [];\n const localMutations = await localMutations_1(mainHeadHash, dagRead);\n for (const commit of localMutations) {\n let cid = clientID;\n assert(\n commitIsLocalDD31(commit),\n 'Expected commit to be a local DD31 commit',\n );\n cid = commit.meta.clientID;\n\n if (\n (await commit.getMutationID(cid, dagRead)) >\n (await syncHead.getMutationID(cid, dagRead))\n ) {\n // We know that the dag can only contain either LocalMetaSDD or LocalMetaDD31\n pending.push(commit as Commit<M>);\n }\n }\n // pending() gave us the pending mutations in sync-head-first order whereas\n // caller wants them in the order to replay (lower mutation ids first).\n pending.reverse();\n\n // We return the keys that changed due to this pull. This is used by\n // subscriptions in the JS API when there are no more pending mutations.\n const diffsMap = new DiffsMap();\n\n // Return replay commits if any.\n if (pending.length > 0) {\n return {\n syncHead: syncHeadHash,\n oldMainHead: mainHeadHash,\n mainHead: mainHeadHash,\n replayMutations: pending,\n // The changed keys are not reported when further replays are\n // needed. The diffs will be reported at the end when there\n // are no more mutations to be replay and then it will be reported\n // relative to DEFAULT_HEAD_NAME.\n diffs: diffsMap,\n };\n }\n\n // TODO check invariants\n\n // Compute diffs (changed keys) for value map and index maps.\n const mainHead = await commitFromHash(mainHeadHash, dagRead);\n if (diffConfig.shouldComputeDiffs()) {\n const mainHeadMap = new BTreeRead(\n dagRead,\n formatVersion,\n mainHead.valueHash,\n );\n const syncHeadMap = new BTreeRead(\n dagRead,\n formatVersion,\n syncHead.valueHash,\n );\n const valueDiff = await diff(mainHeadMap, syncHeadMap);\n diffsMap.set('', valueDiff);\n await addDiffsForIndexes(\n mainHead,\n syncHead,\n dagRead,\n diffsMap,\n diffConfig,\n formatVersion,\n );\n }\n\n // No mutations to replay so set the main head to the sync head and sync complete!\n await Promise.all([\n dagWrite.setHead(DEFAULT_HEAD_NAME, syncHeadHash),\n dagWrite.removeHead(SYNC_HEAD_NAME),\n ]);\n await dagWrite.commit();\n // main head was set to sync head\n const newMainHeadHash = syncHeadHash;\n\n if (lc.debug) {\n const [oldLastMutationID, oldCookie] = snapshotMetaParts(\n mainSnapshot,\n clientID,\n );\n const [newLastMutationID, newCookie] = snapshotMetaParts(\n syncSnapshot,\n clientID,\n );\n lc.debug(\n `Successfully pulled new snapshot with lastMutationID:`,\n newLastMutationID,\n `(prev:`,\n oldLastMutationID,\n `), cookie: `,\n newCookie,\n `(prev:`,\n oldCookie,\n `), sync head hash:`,\n syncHeadHash,\n ', main head hash:',\n mainHeadHash,\n `, valueHash:`,\n syncHead.valueHash,\n `(prev:`,\n mainSnapshot.valueHash,\n );\n }\n\n return {\n syncHead: syncHeadHash,\n oldMainHead: mainHeadHash,\n mainHead: newMainHeadHash,\n replayMutations: [],\n diffs: diffsMap,\n };\n });\n}\n"],"names":["HandlePullResponseResultType.Applied","HandlePullResponseResultType.CookieMismatch","clientID","HandlePullResponseResultType.NoOp","patch.apply","localMutations","localMutations_1"],"mappings":"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"}
1
+ {"version":3,"file":"pull.js","names":[],"sources":["../../../../../replicache/src/sync/pull.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport {deepEqual} from '../../../shared/src/json.ts';\nimport {diff} from '../btree/diff.ts';\nimport {BTreeRead} from '../btree/read.ts';\nimport {compareCookies, type Cookie} from '../cookies.ts';\nimport type {Store} from '../dag/store.ts';\nimport type {Commit} from '../db/commit.ts';\nimport {\n assertSnapshotMetaDD31,\n baseSnapshotFromHash,\n commitFromHash,\n commitIsLocalDD31,\n DEFAULT_HEAD_NAME,\n type LocalMeta,\n localMutations as localMutations_1,\n snapshotMetaParts,\n} from '../db/commit.ts';\nimport {newWriteSnapshotDD31} from '../db/write.ts';\nimport {isErrorResponse} from '../error-responses.ts';\nimport type * as FormatVersion from '../format-version-enum.ts';\nimport {deepFreeze, type FrozenJSONValue} from '../frozen-json.ts';\nimport {assertPullerResultV1} from '../get-default-puller.ts';\nimport {emptyHash, type Hash} from '../hash.ts';\nimport type {HTTPRequestInfo} from '../http-request-info.ts';\nimport type {\n Puller,\n PullerResult,\n PullResponseOKV1Internal,\n PullResponseV1,\n} from '../puller.ts';\nimport {ReportError} from '../report-error.ts';\nimport {toError} from '../to-error.ts';\nimport {withRead, withWriteNoImplicitCommit} from '../with-transactions.ts';\nimport {\n addDiffsForIndexes,\n type DiffComputationConfig,\n DiffsMap,\n} from './diff.ts';\nimport * as HandlePullResponseResultType from './handle-pull-response-result-type-enum.ts';\nimport type {ClientGroupID, ClientID} from './ids.ts';\nimport * as patch from './patch.ts';\nimport {PullError} from './pull-error.ts';\nimport {SYNC_HEAD_NAME} from './sync-head-name.ts';\n\ntype FormatVersion = (typeof FormatVersion)[keyof typeof FormatVersion];\n\nexport const PULL_VERSION_SDD = 0;\nexport const PULL_VERSION_DD31 = 1;\n\n/**\n * The JSON value used as the body when doing a POST to the [pull\n * endpoint](/reference/server-pull).\n */\nexport type PullRequest = PullRequestV1;\n\n/**\n * The JSON value used as the body when doing a POST to the [pull\n * endpoint](/reference/server-pull).\n */\nexport type PullRequestV1 = {\n pullVersion: 1;\n // schemaVersion can optionally be used by the customer's app\n // to indicate to the data layer what format of Client View the\n // app understands.\n schemaVersion: string;\n profileID: string;\n cookie: Cookie;\n\n clientGroupID: ClientGroupID;\n};\n\nexport function isPullRequestV1(pr: PullRequest): pr is PullRequestV1 {\n return pr.pullVersion === PULL_VERSION_DD31;\n}\n\nexport type BeginPullResponseV1 = {\n httpRequestInfo: HTTPRequestInfo;\n pullResponse?: PullResponseV1;\n syncHead: Hash;\n};\n\nexport async function beginPullV1(\n profileID: string,\n clientID: ClientID,\n clientGroupID: ClientGroupID,\n schemaVersion: string,\n puller: Puller,\n requestID: string,\n store: Store,\n formatVersion: FormatVersion,\n lc: LogContext,\n createSyncBranch = true,\n): Promise<BeginPullResponseV1> {\n const baseCookie = await withRead(store, async dagRead => {\n const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (!mainHeadHash) {\n throw new Error('Internal no main head found');\n }\n const baseSnapshot = await baseSnapshotFromHash(mainHeadHash, dagRead);\n const baseSnapshotMeta = baseSnapshot.meta;\n assertSnapshotMetaDD31(baseSnapshotMeta);\n return baseSnapshotMeta.cookieJSON;\n });\n\n const pullReq: PullRequestV1 = {\n profileID,\n clientGroupID,\n cookie: baseCookie,\n pullVersion: PULL_VERSION_DD31,\n schemaVersion,\n };\n\n const {response, httpRequestInfo} = await callPuller(\n lc,\n puller,\n pullReq,\n requestID,\n );\n\n // If Puller did not get a pull response we still want to return the HTTP\n // request info.\n if (!response) {\n return {\n httpRequestInfo,\n syncHead: emptyHash,\n };\n }\n\n if (!createSyncBranch || isErrorResponse(response)) {\n return {\n httpRequestInfo,\n pullResponse: response,\n syncHead: emptyHash,\n };\n }\n\n const result = await handlePullResponseV1(\n lc,\n store,\n baseCookie,\n response,\n clientID,\n formatVersion,\n );\n\n return {\n httpRequestInfo,\n pullResponse: response,\n syncHead:\n result.type === HandlePullResponseResultType.Applied\n ? result.syncHead\n : emptyHash,\n };\n}\n\nasync function callPuller(\n lc: LogContext,\n puller: Puller,\n pullReq: PullRequest,\n requestID: string,\n): Promise<PullerResult> {\n lc.debug?.('Starting pull...');\n const pullStart = Date.now();\n let pullerResult: PullerResult;\n try {\n pullerResult = await puller(pullReq, requestID);\n lc.debug?.(\n `...Pull ${pullerResult.response ? 'complete' : 'failed'} in `,\n Date.now() - pullStart,\n 'ms',\n );\n } catch (e) {\n throw new PullError(toError(e));\n }\n try {\n assertPullerResultV1(pullerResult);\n return pullerResult;\n } catch (e) {\n throw new ReportError('Invalid puller result', toError(e));\n }\n}\n\ntype HandlePullResponseResult =\n | {\n type: HandlePullResponseResultType.Applied;\n syncHead: Hash;\n }\n | {\n type:\n | HandlePullResponseResultType.NoOp\n | HandlePullResponseResultType.CookieMismatch;\n };\n\nfunction badOrderMessage(\n name: string,\n receivedValue: string,\n lastSnapshotValue: string,\n) {\n return `Received ${name} ${receivedValue} is < than last snapshot ${name} ${lastSnapshotValue}; ignoring client view`;\n}\n\nexport function handlePullResponseV1(\n lc: LogContext,\n store: Store,\n expectedBaseCookie: FrozenJSONValue,\n response: PullResponseOKV1Internal,\n clientID: ClientID,\n formatVersion: FormatVersion,\n): Promise<HandlePullResponseResult> {\n // It is possible that another sync completed while we were pulling. Ensure\n // that is not the case by re-checking the base snapshot.\n return withWriteNoImplicitCommit(store, async dagWrite => {\n const dagRead = dagWrite;\n const mainHead = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (mainHead === undefined) {\n throw new Error('Main head disappeared');\n }\n const baseSnapshot = await baseSnapshotFromHash(mainHead, dagRead);\n const baseSnapshotMeta = baseSnapshot.meta;\n assertSnapshotMetaDD31(baseSnapshotMeta);\n const baseCookie = baseSnapshotMeta.cookieJSON;\n\n // TODO(MP) Here we are using whether the cookie has changed as a proxy for whether\n // the base snapshot changed, which is the check we used to do. I don't think this\n // is quite right. We need to firm up under what conditions we will/not accept an\n // update from the server: https://github.com/rocicorp/replicache/issues/713.\n // In DD31 this is expected to happen if a refresh occurs during a pull.\n if (!deepEqual(expectedBaseCookie, baseCookie)) {\n lc.debug?.(\n 'handlePullResponse: cookie mismatch, response is not applicable',\n );\n return {\n type: HandlePullResponseResultType.CookieMismatch,\n };\n }\n\n // Check that the lastMutationIDs are not going backwards.\n for (const [clientID, lmidChange] of Object.entries(\n response.lastMutationIDChanges,\n )) {\n const lastMutationID = baseSnapshotMeta.lastMutationIDs[clientID];\n if (lastMutationID !== undefined && lmidChange < lastMutationID) {\n throw new Error(\n badOrderMessage(\n `${clientID} lastMutationID`,\n String(lmidChange),\n String(lastMutationID),\n ),\n );\n }\n }\n\n const frozenResponseCookie = deepFreeze(response.cookie);\n if (compareCookies(frozenResponseCookie, baseCookie) < 0) {\n throw new Error(\n badOrderMessage(\n 'cookie',\n JSON.stringify(frozenResponseCookie),\n JSON.stringify(baseCookie),\n ),\n );\n }\n\n if (deepEqual(frozenResponseCookie, baseCookie)) {\n if (response.patch.length > 0) {\n lc.error?.(\n `handlePullResponse: cookie ${JSON.stringify(\n baseCookie,\n )} did not change, but patch is not empty`,\n );\n }\n if (Object.keys(response.lastMutationIDChanges).length > 0) {\n lc.error?.(\n `handlePullResponse: cookie ${JSON.stringify(\n baseCookie,\n )} did not change, but lastMutationIDChanges is not empty`,\n );\n }\n // If the cookie doesn't change, it's a nop.\n return {\n type: HandlePullResponseResultType.NoOp,\n };\n }\n\n const dbWrite = await newWriteSnapshotDD31(\n baseSnapshot.chunk.hash,\n {...baseSnapshotMeta.lastMutationIDs, ...response.lastMutationIDChanges},\n frozenResponseCookie,\n dagWrite,\n clientID,\n formatVersion,\n );\n\n await patch.apply(lc, dbWrite, response.patch);\n\n return {\n type: HandlePullResponseResultType.Applied,\n syncHead: await dbWrite.commit(SYNC_HEAD_NAME),\n };\n });\n}\n\nexport function maybeEndPull<M extends LocalMeta>(\n store: Store,\n lc: LogContext,\n expectedSyncHead: Hash,\n clientID: ClientID,\n diffConfig: DiffComputationConfig,\n formatVersion: FormatVersion,\n): Promise<{\n syncHead: Hash;\n mainHead: Hash;\n oldMainHead: Hash;\n replayMutations: Commit<M>[];\n diffs: DiffsMap;\n}> {\n return withWriteNoImplicitCommit(store, async dagWrite => {\n const dagRead = dagWrite;\n // Ensure sync head is what the caller thinks it is.\n const syncHeadHash = await dagRead.getHead(SYNC_HEAD_NAME);\n if (syncHeadHash === undefined) {\n throw new Error('Missing sync head');\n }\n if (syncHeadHash !== expectedSyncHead) {\n lc.error?.(\n 'maybeEndPull, Wrong sync head. Expecting:',\n expectedSyncHead,\n 'got:',\n syncHeadHash,\n );\n throw new Error('Wrong sync head');\n }\n\n // Ensure another sync has not landed a new snapshot on the main chain.\n // TODO: In DD31, it is expected that a newer snapshot might have appeared\n // on the main chain. In that case, we just abort this pull.\n const syncSnapshot = await baseSnapshotFromHash(syncHeadHash, dagRead);\n const mainHeadHash = await dagRead.getHead(DEFAULT_HEAD_NAME);\n if (mainHeadHash === undefined) {\n throw new Error('Missing main head');\n }\n const mainSnapshot = await baseSnapshotFromHash(mainHeadHash, dagRead);\n\n const {meta} = syncSnapshot;\n const syncSnapshotBasis = meta.basisHash;\n if (syncSnapshot === null) {\n throw new Error('Sync snapshot with no basis');\n }\n if (syncSnapshotBasis !== mainSnapshot.chunk.hash) {\n throw new Error('Overlapping syncs');\n }\n\n // Collect pending commits from the main chain and determine which\n // of them if any need to be replayed.\n const syncHead = await commitFromHash(syncHeadHash, dagRead);\n const pending: Commit<M>[] = [];\n const localMutations = await localMutations_1(mainHeadHash, dagRead);\n for (const commit of localMutations) {\n let cid = clientID;\n assert(\n commitIsLocalDD31(commit),\n 'Expected commit to be a local DD31 commit',\n );\n cid = commit.meta.clientID;\n\n if (\n (await commit.getMutationID(cid, dagRead)) >\n (await syncHead.getMutationID(cid, dagRead))\n ) {\n // We know that the dag can only contain either LocalMetaSDD or LocalMetaDD31\n pending.push(commit as Commit<M>);\n }\n }\n // pending() gave us the pending mutations in sync-head-first order whereas\n // caller wants them in the order to replay (lower mutation ids first).\n pending.reverse();\n\n // We return the keys that changed due to this pull. This is used by\n // subscriptions in the JS API when there are no more pending mutations.\n const diffsMap = new DiffsMap();\n\n // Return replay commits if any.\n if (pending.length > 0) {\n return {\n syncHead: syncHeadHash,\n oldMainHead: mainHeadHash,\n mainHead: mainHeadHash,\n replayMutations: pending,\n // The changed keys are not reported when further replays are\n // needed. The diffs will be reported at the end when there\n // are no more mutations to be replay and then it will be reported\n // relative to DEFAULT_HEAD_NAME.\n diffs: diffsMap,\n };\n }\n\n // TODO check invariants\n\n // Compute diffs (changed keys) for value map and index maps.\n const mainHead = await commitFromHash(mainHeadHash, dagRead);\n if (diffConfig.shouldComputeDiffs()) {\n const mainHeadMap = new BTreeRead(\n dagRead,\n formatVersion,\n mainHead.valueHash,\n );\n const syncHeadMap = new BTreeRead(\n dagRead,\n formatVersion,\n syncHead.valueHash,\n );\n const valueDiff = await diff(mainHeadMap, syncHeadMap);\n diffsMap.set('', valueDiff);\n await addDiffsForIndexes(\n mainHead,\n syncHead,\n dagRead,\n diffsMap,\n diffConfig,\n formatVersion,\n );\n }\n\n // No mutations to replay so set the main head to the sync head and sync complete!\n await Promise.all([\n dagWrite.setHead(DEFAULT_HEAD_NAME, syncHeadHash),\n dagWrite.removeHead(SYNC_HEAD_NAME),\n ]);\n await dagWrite.commit();\n // main head was set to sync head\n const newMainHeadHash = syncHeadHash;\n\n if (lc.debug) {\n const [oldLastMutationID, oldCookie] = snapshotMetaParts(\n mainSnapshot,\n clientID,\n );\n const [newLastMutationID, newCookie] = snapshotMetaParts(\n syncSnapshot,\n clientID,\n );\n lc.debug(\n `Successfully pulled new snapshot with lastMutationID:`,\n newLastMutationID,\n `(prev:`,\n oldLastMutationID,\n `), cookie: `,\n newCookie,\n `(prev:`,\n oldCookie,\n `), sync head hash:`,\n syncHeadHash,\n ', main head hash:',\n mainHeadHash,\n `, valueHash:`,\n syncHead.valueHash,\n `(prev:`,\n mainSnapshot.valueHash,\n );\n }\n\n return {\n syncHead: syncHeadHash,\n oldMainHead: mainHeadHash,\n mainHead: newMainHeadHash,\n replayMutations: [],\n diffs: diffsMap,\n };\n });\n}\n"],"mappings":"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"}