@rocicorp/zero 0.25.0-canary.7 → 0.25.0-canary.8

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 (1332) hide show
  1. package/out/analyze-query/src/bin-analyze.js +258 -236
  2. package/out/analyze-query/src/bin-analyze.js.map +1 -1
  3. package/out/analyze-query/src/bin-transform.js +31 -23
  4. package/out/analyze-query/src/bin-transform.js.map +1 -1
  5. package/out/analyze-query/src/explain-queries.js +13 -16
  6. package/out/analyze-query/src/explain-queries.js.map +1 -1
  7. package/out/analyze-query/src/run-ast.d.ts +3 -2
  8. package/out/analyze-query/src/run-ast.d.ts.map +1 -1
  9. package/out/analyze-query/src/run-ast.js +79 -73
  10. package/out/analyze-query/src/run-ast.js.map +1 -1
  11. package/out/ast-to-zql/src/ast-to-zql.js +146 -180
  12. package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
  13. package/out/ast-to-zql/src/bin.js +51 -54
  14. package/out/ast-to-zql/src/bin.js.map +1 -1
  15. package/out/ast-to-zql/src/format.js +15 -14
  16. package/out/ast-to-zql/src/format.js.map +1 -1
  17. package/out/datadog/src/datadog-log-sink.js +223 -0
  18. package/out/datadog/src/datadog-log-sink.js.map +1 -0
  19. package/out/otel/src/enabled.js +15 -15
  20. package/out/otel/src/enabled.js.map +1 -1
  21. package/out/otel/src/log-options.js +36 -31
  22. package/out/otel/src/log-options.js.map +1 -1
  23. package/out/otel/src/maybe-time.js +14 -11
  24. package/out/otel/src/maybe-time.js.map +1 -1
  25. package/out/otel/src/span.js +30 -27
  26. package/out/otel/src/span.js.map +1 -1
  27. package/out/otel/src/test-log-config.js +10 -7
  28. package/out/otel/src/test-log-config.js.map +1 -1
  29. package/out/otel/src/version.js +5 -2
  30. package/out/otel/src/version.js.map +1 -1
  31. package/out/replicache/src/async-iterable-to-array.js +11 -0
  32. package/out/replicache/src/async-iterable-to-array.js.map +1 -0
  33. package/out/replicache/src/bg-interval.js +38 -0
  34. package/out/replicache/src/bg-interval.js.map +1 -0
  35. package/out/replicache/src/btree/diff.js +8 -0
  36. package/out/replicache/src/btree/diff.js.map +1 -0
  37. package/out/replicache/src/btree/node.js +400 -0
  38. package/out/replicache/src/btree/node.js.map +1 -0
  39. package/out/replicache/src/btree/read.d.ts +3 -2
  40. package/out/replicache/src/btree/read.d.ts.map +1 -1
  41. package/out/replicache/src/btree/read.js +266 -0
  42. package/out/replicache/src/btree/read.js.map +1 -0
  43. package/out/replicache/src/btree/splice.js +83 -0
  44. package/out/replicache/src/btree/splice.js.map +1 -0
  45. package/out/replicache/src/btree/write.d.ts +1 -1
  46. package/out/replicache/src/btree/write.d.ts.map +1 -1
  47. package/out/replicache/src/btree/write.js +163 -0
  48. package/out/replicache/src/btree/write.js.map +1 -0
  49. package/out/replicache/src/call-default-fetch.js +34 -0
  50. package/out/replicache/src/call-default-fetch.js.map +1 -0
  51. package/out/replicache/src/connection-loop-delegates.js +34 -0
  52. package/out/replicache/src/connection-loop-delegates.js.map +1 -0
  53. package/out/replicache/src/connection-loop.js +251 -0
  54. package/out/replicache/src/connection-loop.js.map +1 -0
  55. package/out/replicache/src/cookies.js +40 -0
  56. package/out/replicache/src/cookies.js.map +1 -0
  57. package/out/replicache/src/dag/chunk.js +59 -0
  58. package/out/replicache/src/dag/chunk.js.map +1 -0
  59. package/out/replicache/src/dag/gc.js +117 -0
  60. package/out/replicache/src/dag/gc.js.map +1 -0
  61. package/out/replicache/src/dag/key.js +20 -0
  62. package/out/replicache/src/dag/key.js.map +1 -0
  63. package/out/replicache/src/dag/lazy-store.d.ts +2 -1
  64. package/out/replicache/src/dag/lazy-store.d.ts.map +1 -1
  65. package/out/replicache/src/dag/lazy-store.js +515 -0
  66. package/out/replicache/src/dag/lazy-store.js.map +1 -0
  67. package/out/replicache/src/dag/store-impl.js +183 -0
  68. package/out/replicache/src/dag/store-impl.js.map +1 -0
  69. package/out/replicache/src/dag/store.js +27 -0
  70. package/out/replicache/src/dag/store.js.map +1 -0
  71. package/out/replicache/src/dag/visitor.js +22 -0
  72. package/out/replicache/src/dag/visitor.js.map +1 -0
  73. package/out/replicache/src/db/commit.js +358 -0
  74. package/out/replicache/src/db/commit.js.map +1 -0
  75. package/out/replicache/src/db/index-operation-enum.js +7 -0
  76. package/out/replicache/src/db/index-operation-enum.js.map +1 -0
  77. package/out/replicache/src/db/index.js +134 -0
  78. package/out/replicache/src/db/index.js.map +1 -0
  79. package/out/replicache/src/db/meta-type-enum.js +7 -0
  80. package/out/replicache/src/db/meta-type-enum.js.map +1 -0
  81. package/out/replicache/src/db/read.d.ts +3 -2
  82. package/out/replicache/src/db/read.d.ts.map +1 -1
  83. package/out/replicache/src/db/read.js +72 -0
  84. package/out/replicache/src/db/read.js.map +1 -0
  85. package/out/replicache/src/db/rebase.d.ts +2 -2
  86. package/out/replicache/src/db/rebase.d.ts.map +1 -1
  87. package/out/replicache/src/db/rebase.js +85 -0
  88. package/out/replicache/src/db/rebase.js.map +1 -0
  89. package/out/replicache/src/db/write.d.ts +2 -1
  90. package/out/replicache/src/db/write.d.ts.map +1 -1
  91. package/out/replicache/src/db/write.js +296 -0
  92. package/out/replicache/src/db/write.js.map +1 -0
  93. package/out/replicache/src/deleted-clients.js +104 -0
  94. package/out/replicache/src/deleted-clients.js.map +1 -0
  95. package/out/replicache/src/error-responses.js +34 -0
  96. package/out/replicache/src/error-responses.js.map +1 -0
  97. package/out/replicache/src/format-version-enum.js +11 -0
  98. package/out/replicache/src/format-version-enum.js.map +1 -0
  99. package/out/{chunk-EZM3XBAB.js → replicache/src/frozen-json.js} +8 -75
  100. package/out/replicache/src/frozen-json.js.map +1 -0
  101. package/out/replicache/src/get-default-puller.js +61 -0
  102. package/out/replicache/src/get-default-puller.js.map +1 -0
  103. package/out/replicache/src/get-default-pusher.js +39 -0
  104. package/out/replicache/src/get-default-pusher.js.map +1 -0
  105. package/out/replicache/src/get-kv-store-provider.js +23 -0
  106. package/out/replicache/src/get-kv-store-provider.js.map +1 -0
  107. package/out/replicache/src/hash.js +38 -0
  108. package/out/replicache/src/hash.js.map +1 -0
  109. package/out/replicache/src/http-request-info.js +10 -0
  110. package/out/replicache/src/http-request-info.js.map +1 -0
  111. package/out/replicache/src/http-status-unauthorized.js +5 -0
  112. package/out/replicache/src/http-status-unauthorized.js.map +1 -0
  113. package/out/replicache/src/index-defs.js +32 -0
  114. package/out/replicache/src/index-defs.js.map +1 -0
  115. package/out/replicache/src/invoke-kind-enum.js +7 -0
  116. package/out/replicache/src/invoke-kind-enum.js.map +1 -0
  117. package/out/{chunk-HCZQVP5R.js → replicache/src/kv/expo-sqlite/store.js} +8 -16
  118. package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -0
  119. package/out/replicache/src/kv/idb-store-with-mem-fallback.js +80 -0
  120. package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -0
  121. package/out/replicache/src/kv/idb-store.js +183 -0
  122. package/out/replicache/src/kv/idb-store.js.map +1 -0
  123. package/out/replicache/src/kv/mem-store.js +51 -0
  124. package/out/replicache/src/kv/mem-store.js.map +1 -0
  125. package/out/{op-sqlite.js → replicache/src/kv/op-sqlite/store.js} +7 -18
  126. package/out/replicache/src/kv/op-sqlite/store.js.map +1 -0
  127. package/out/replicache/src/kv/op-sqlite/types.js +6 -0
  128. package/out/replicache/src/kv/op-sqlite/types.js.map +1 -0
  129. package/out/replicache/src/kv/read-impl.js +27 -0
  130. package/out/replicache/src/kv/read-impl.js.map +1 -0
  131. package/out/{chunk-WPAQ4EPM.js → replicache/src/kv/sqlite-store.js} +15 -19
  132. package/out/replicache/src/kv/sqlite-store.js.map +1 -0
  133. package/out/{chunk-ASRS2LFV.js → replicache/src/kv/throw-if-closed.js} +4 -6
  134. package/out/replicache/src/kv/throw-if-closed.js.map +1 -0
  135. package/out/replicache/src/kv/write-impl-base.js +57 -0
  136. package/out/replicache/src/kv/write-impl-base.js.map +1 -0
  137. package/out/replicache/src/kv/write-impl.js +30 -0
  138. package/out/replicache/src/kv/write-impl.js.map +1 -0
  139. package/out/replicache/src/lazy.js +13 -0
  140. package/out/replicache/src/lazy.js.map +1 -0
  141. package/out/replicache/src/log-options.js +9 -0
  142. package/out/replicache/src/log-options.js.map +1 -0
  143. package/out/replicache/src/make-idb-name.js +13 -0
  144. package/out/replicache/src/make-idb-name.js.map +1 -0
  145. package/out/replicache/src/new-client-channel.js +51 -0
  146. package/out/replicache/src/new-client-channel.js.map +1 -0
  147. package/out/replicache/src/on-persist-channel.js +36 -0
  148. package/out/replicache/src/on-persist-channel.js.map +1 -0
  149. package/out/replicache/src/patch-operation.js +42 -0
  150. package/out/replicache/src/patch-operation.js.map +1 -0
  151. package/out/replicache/src/pending-mutations.js +16 -0
  152. package/out/replicache/src/pending-mutations.js.map +1 -0
  153. package/out/replicache/src/persist/client-gc.js +58 -0
  154. package/out/replicache/src/persist/client-gc.js.map +1 -0
  155. package/out/replicache/src/persist/client-group-gc.js +43 -0
  156. package/out/replicache/src/persist/client-group-gc.js.map +1 -0
  157. package/out/replicache/src/persist/client-groups.js +184 -0
  158. package/out/replicache/src/persist/client-groups.js.map +1 -0
  159. package/out/replicache/src/persist/clients.d.ts +3 -2
  160. package/out/replicache/src/persist/clients.d.ts.map +1 -1
  161. package/out/replicache/src/persist/clients.js +353 -0
  162. package/out/replicache/src/persist/clients.js.map +1 -0
  163. package/out/replicache/src/persist/collect-idb-databases.js +188 -0
  164. package/out/replicache/src/persist/collect-idb-databases.js.map +1 -0
  165. package/out/replicache/src/persist/gather-mem-only-visitor.js +27 -0
  166. package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -0
  167. package/out/replicache/src/persist/gather-not-cached-visitor.js +37 -0
  168. package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -0
  169. package/out/replicache/src/persist/heartbeat.js +48 -0
  170. package/out/replicache/src/persist/heartbeat.js.map +1 -0
  171. package/out/replicache/src/persist/idb-databases-store-db-name.js +14 -0
  172. package/out/replicache/src/persist/idb-databases-store-db-name.js.map +1 -0
  173. package/out/replicache/src/persist/idb-databases-store.js +92 -0
  174. package/out/replicache/src/persist/idb-databases-store.js.map +1 -0
  175. package/out/replicache/src/persist/make-client-id.js +12 -0
  176. package/out/replicache/src/persist/make-client-id.js.map +1 -0
  177. package/out/replicache/src/persist/persist.d.ts +2 -2
  178. package/out/replicache/src/persist/persist.d.ts.map +1 -1
  179. package/out/replicache/src/persist/persist.js +183 -0
  180. package/out/replicache/src/persist/persist.js.map +1 -0
  181. package/out/replicache/src/persist/refresh.d.ts +4 -3
  182. package/out/replicache/src/persist/refresh.d.ts.map +1 -1
  183. package/out/replicache/src/persist/refresh.js +198 -0
  184. package/out/replicache/src/persist/refresh.js.map +1 -0
  185. package/out/replicache/src/process-scheduler.js +96 -0
  186. package/out/replicache/src/process-scheduler.js.map +1 -0
  187. package/out/replicache/src/pusher.js +33 -0
  188. package/out/replicache/src/pusher.js.map +1 -0
  189. package/out/replicache/src/replicache-impl.d.ts +1 -1
  190. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  191. package/out/replicache/src/replicache-impl.js +1200 -0
  192. package/out/replicache/src/replicache-impl.js.map +1 -0
  193. package/out/replicache/src/report-error.js +6 -0
  194. package/out/replicache/src/report-error.js.map +1 -0
  195. package/out/replicache/src/request-idle.js +13 -0
  196. package/out/replicache/src/request-idle.js.map +1 -0
  197. package/out/replicache/src/scan-iterator.js +146 -0
  198. package/out/replicache/src/scan-iterator.js.map +1 -0
  199. package/out/replicache/src/scan-options.js +45 -0
  200. package/out/replicache/src/scan-options.js.map +1 -0
  201. package/out/replicache/src/set-interval-with-signal.js +12 -0
  202. package/out/replicache/src/set-interval-with-signal.js.map +1 -0
  203. package/out/replicache/src/subscriptions.js +355 -0
  204. package/out/replicache/src/subscriptions.js.map +1 -0
  205. package/out/replicache/src/sync/diff.d.ts +3 -2
  206. package/out/replicache/src/sync/diff.d.ts.map +1 -1
  207. package/out/replicache/src/sync/diff.js +72 -0
  208. package/out/replicache/src/sync/diff.js.map +1 -0
  209. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js +9 -0
  210. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js.map +1 -0
  211. package/out/replicache/src/sync/ids.js +9 -0
  212. package/out/replicache/src/sync/ids.js.map +1 -0
  213. package/out/replicache/src/sync/patch.js +49 -0
  214. package/out/replicache/src/sync/patch.js.map +1 -0
  215. package/out/replicache/src/sync/pull-error.js +16 -0
  216. package/out/replicache/src/sync/pull-error.js.map +1 -0
  217. package/out/replicache/src/sync/pull.d.ts +3 -2
  218. package/out/replicache/src/sync/pull.d.ts.map +1 -1
  219. package/out/replicache/src/sync/pull.js +301 -0
  220. package/out/replicache/src/sync/pull.js.map +1 -0
  221. package/out/replicache/src/sync/push.js +88 -0
  222. package/out/replicache/src/sync/push.js.map +1 -0
  223. package/out/replicache/src/sync/request-id.js +20 -0
  224. package/out/replicache/src/sync/request-id.js.map +1 -0
  225. package/out/replicache/src/sync/sync-head-name.js +5 -0
  226. package/out/replicache/src/sync/sync-head-name.js.map +1 -0
  227. package/out/replicache/src/to-error.js +10 -0
  228. package/out/replicache/src/to-error.js.map +1 -0
  229. package/out/replicache/src/transaction-closed-error.js +19 -0
  230. package/out/replicache/src/transaction-closed-error.js.map +1 -0
  231. package/out/replicache/src/transactions.js +152 -0
  232. package/out/replicache/src/transactions.js.map +1 -0
  233. package/out/replicache/src/version.js +5 -0
  234. package/out/replicache/src/version.js.map +1 -0
  235. package/out/replicache/src/with-transactions.js +28 -0
  236. package/out/replicache/src/with-transactions.js.map +1 -0
  237. package/out/shared/src/abort-error.js +6 -3
  238. package/out/shared/src/abort-error.js.map +1 -1
  239. package/out/shared/src/arrays.js +45 -43
  240. package/out/shared/src/arrays.js.map +1 -1
  241. package/out/shared/src/asserts.js +64 -68
  242. package/out/shared/src/asserts.js.map +1 -1
  243. package/out/shared/src/bigint-json.js +38 -42
  244. package/out/shared/src/bigint-json.js.map +1 -1
  245. package/out/shared/src/binary-search.js +18 -29
  246. package/out/shared/src/binary-search.js.map +1 -1
  247. package/out/shared/src/broadcast-channel.js +24 -0
  248. package/out/shared/src/broadcast-channel.js.map +1 -0
  249. package/out/shared/src/browser-env.js +25 -0
  250. package/out/shared/src/browser-env.js.map +1 -0
  251. package/out/shared/src/btree-set.js +464 -507
  252. package/out/shared/src/btree-set.js.map +1 -1
  253. package/out/shared/src/cache.js +34 -38
  254. package/out/shared/src/cache.js.map +1 -1
  255. package/out/shared/src/centroid.js +24 -24
  256. package/out/shared/src/centroid.js.map +1 -1
  257. package/out/shared/src/config.js +6 -3
  258. package/out/shared/src/config.js.map +1 -1
  259. package/out/shared/src/custom-key-map.js +58 -64
  260. package/out/shared/src/custom-key-map.js.map +1 -1
  261. package/out/shared/src/custom-key-set.js +51 -57
  262. package/out/shared/src/custom-key-set.js.map +1 -1
  263. package/out/shared/src/deep-clone.js +46 -0
  264. package/out/shared/src/deep-clone.js.map +1 -0
  265. package/out/shared/src/document-visible.js +74 -0
  266. package/out/shared/src/document-visible.js.map +1 -0
  267. package/out/shared/src/dotenv.js +5 -7
  268. package/out/shared/src/dotenv.js.map +1 -1
  269. package/out/shared/src/error.js +57 -56
  270. package/out/shared/src/error.js.map +1 -1
  271. package/out/shared/src/has-own.js +5 -3
  272. package/out/shared/src/has-own.js.map +1 -1
  273. package/out/shared/src/hash.js +15 -14
  274. package/out/shared/src/hash.js.map +1 -1
  275. package/out/shared/src/iterables.js +71 -73
  276. package/out/shared/src/iterables.js.map +1 -1
  277. package/out/shared/src/json-schema.js +30 -33
  278. package/out/shared/src/json-schema.js.map +1 -1
  279. package/out/shared/src/json.js +128 -143
  280. package/out/shared/src/json.js.map +1 -1
  281. package/out/shared/src/logging-test-utils.js +12 -19
  282. package/out/shared/src/logging-test-utils.js.map +1 -1
  283. package/out/shared/src/logging.js +83 -83
  284. package/out/shared/src/logging.js.map +1 -1
  285. package/out/shared/src/must.js +9 -7
  286. package/out/shared/src/must.js.map +1 -1
  287. package/out/shared/src/navigator.js +5 -0
  288. package/out/shared/src/navigator.js.map +1 -0
  289. package/out/shared/src/objects.js +21 -22
  290. package/out/shared/src/objects.js.map +1 -1
  291. package/out/shared/src/options.js +289 -322
  292. package/out/shared/src/options.js.map +1 -1
  293. package/out/shared/src/parse-big-int.js +12 -10
  294. package/out/shared/src/parse-big-int.js.map +1 -1
  295. package/out/shared/src/promise-race.js +20 -0
  296. package/out/shared/src/promise-race.js.map +1 -0
  297. package/out/shared/src/queue.js +119 -122
  298. package/out/shared/src/queue.js.map +1 -1
  299. package/out/shared/src/rand.js +8 -10
  300. package/out/shared/src/rand.js.map +1 -1
  301. package/out/shared/src/random-uint64.js +9 -0
  302. package/out/shared/src/random-uint64.js.map +1 -0
  303. package/out/shared/src/random-values.js +13 -0
  304. package/out/shared/src/random-values.js.map +1 -0
  305. package/out/shared/src/resolved-promises.js +12 -9
  306. package/out/shared/src/resolved-promises.js.map +1 -1
  307. package/out/shared/src/sentinels.js +13 -6
  308. package/out/shared/src/sentinels.js.map +1 -1
  309. package/out/shared/src/set-utils.js +63 -62
  310. package/out/shared/src/set-utils.js.map +1 -1
  311. package/out/shared/src/size-of-value.js +58 -0
  312. package/out/shared/src/size-of-value.js.map +1 -0
  313. package/out/shared/src/sleep.js +45 -53
  314. package/out/shared/src/sleep.js.map +1 -1
  315. package/out/shared/src/string-compare.js +12 -9
  316. package/out/shared/src/string-compare.js.map +1 -1
  317. package/out/shared/src/subscribable.js +34 -0
  318. package/out/shared/src/subscribable.js.map +1 -0
  319. package/out/shared/src/tdigest-schema.js +7 -7
  320. package/out/shared/src/tdigest-schema.js.map +1 -1
  321. package/out/shared/src/tdigest.js +247 -271
  322. package/out/shared/src/tdigest.js.map +1 -1
  323. package/out/shared/src/valita.js +195 -207
  324. package/out/shared/src/valita.js.map +1 -1
  325. package/out/z2s/src/compiler.d.ts.map +1 -1
  326. package/out/z2s/src/compiler.js +437 -310
  327. package/out/z2s/src/compiler.js.map +1 -1
  328. package/out/z2s/src/sql.js +186 -218
  329. package/out/z2s/src/sql.js.map +1 -1
  330. package/out/zero/package.json.js +9 -0
  331. package/out/zero/package.json.js.map +1 -0
  332. package/out/zero/src/adapters/drizzle.js +5 -2
  333. package/out/zero/src/adapters/drizzle.js.map +1 -1
  334. package/out/zero/src/adapters/pg.js +7 -2
  335. package/out/zero/src/adapters/pg.js.map +1 -1
  336. package/out/zero/src/adapters/postgresjs.js +7 -2
  337. package/out/zero/src/adapters/postgresjs.js.map +1 -1
  338. package/out/zero/src/analyze-query.js +1 -1
  339. package/out/zero/src/analyze-query.js.map +1 -1
  340. package/out/zero/src/ast-to-zql.js +1 -1
  341. package/out/zero/src/ast-to-zql.js.map +1 -1
  342. package/out/zero/src/build-schema.js +3 -5
  343. package/out/zero/src/build-schema.js.map +1 -1
  344. package/out/zero/src/change-protocol/v0.js +5 -3
  345. package/out/zero/src/change-protocol/v0.js.map +1 -1
  346. package/out/zero/src/cli.js +2 -2
  347. package/out/zero/src/cli.js.map +1 -1
  348. package/out/zero/src/deploy-permissions.js +1 -1
  349. package/out/zero/src/deploy-permissions.js.map +1 -1
  350. package/out/zero/src/expo-sqlite.js +5 -0
  351. package/out/zero/src/expo-sqlite.js.map +1 -0
  352. package/out/zero/src/op-sqlite.js +5 -0
  353. package/out/zero/src/op-sqlite.js.map +1 -0
  354. package/out/zero/src/pg.js +31 -3
  355. package/out/zero/src/pg.js.map +1 -1
  356. package/out/zero/src/react-native.js +13 -0
  357. package/out/zero/src/react-native.js.map +1 -0
  358. package/out/zero/src/react.js +17 -0
  359. package/out/zero/src/react.js.map +1 -0
  360. package/out/zero/src/server.js +27 -3
  361. package/out/zero/src/server.js.map +1 -1
  362. package/out/zero/src/solid.js +15 -0
  363. package/out/zero/src/solid.js.map +1 -0
  364. package/out/zero/src/sqlite.js +7 -0
  365. package/out/zero/src/sqlite.js.map +1 -0
  366. package/out/zero/src/transform-query.js +1 -1
  367. package/out/zero/src/transform-query.js.map +1 -1
  368. package/out/zero/src/zero-cache-dev.js +135 -126
  369. package/out/zero/src/zero-cache-dev.js.map +1 -1
  370. package/out/zero/src/zero-out.js +6 -6
  371. package/out/zero/src/zero-out.js.map +1 -1
  372. package/out/zero/src/zero.js +55 -0
  373. package/out/zero/src/zero.js.map +1 -0
  374. package/out/zero/src/zqlite.js +11 -3
  375. package/out/zero/src/zqlite.js.map +1 -1
  376. package/out/zero-cache/src/auth/jwt.js +33 -38
  377. package/out/zero-cache/src/auth/jwt.js.map +1 -1
  378. package/out/zero-cache/src/auth/load-permissions.js +61 -45
  379. package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
  380. package/out/zero-cache/src/auth/read-authorizer.js +79 -91
  381. package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
  382. package/out/zero-cache/src/auth/write-authorizer.d.ts +2 -2
  383. package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
  384. package/out/zero-cache/src/auth/write-authorizer.js +394 -349
  385. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  386. package/out/zero-cache/src/config/network.js +42 -45
  387. package/out/zero-cache/src/config/network.js.map +1 -1
  388. package/out/zero-cache/src/config/normalize.js +86 -83
  389. package/out/zero-cache/src/config/normalize.js.map +1 -1
  390. package/out/zero-cache/src/config/zero-config.js +676 -682
  391. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  392. package/out/zero-cache/src/custom/fetch.d.ts.map +1 -1
  393. package/out/zero-cache/src/custom/fetch.js +166 -162
  394. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  395. package/out/zero-cache/src/custom-queries/transform-query.d.ts +7 -0
  396. package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +1 -1
  397. package/out/zero-cache/src/custom-queries/transform-query.js +101 -106
  398. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  399. package/out/zero-cache/src/db/create.js +32 -36
  400. package/out/zero-cache/src/db/create.js.map +1 -1
  401. package/out/zero-cache/src/db/delete-lite-db.js +9 -6
  402. package/out/zero-cache/src/db/delete-lite-db.js.map +1 -1
  403. package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
  404. package/out/zero-cache/src/db/lite-tables.js +150 -174
  405. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  406. package/out/zero-cache/src/db/migration-lite.js +170 -165
  407. package/out/zero-cache/src/db/migration-lite.js.map +1 -1
  408. package/out/zero-cache/src/db/migration.js +157 -137
  409. package/out/zero-cache/src/db/migration.js.map +1 -1
  410. package/out/zero-cache/src/db/mode-enum.js +9 -4
  411. package/out/zero-cache/src/db/mode-enum.js.map +1 -1
  412. package/out/zero-cache/src/db/pg-copy.js +51 -90
  413. package/out/zero-cache/src/db/pg-copy.js.map +1 -1
  414. package/out/zero-cache/src/db/pg-to-lite.js +114 -109
  415. package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
  416. package/out/zero-cache/src/db/pg-type-parser.js +27 -39
  417. package/out/zero-cache/src/db/pg-type-parser.js.map +1 -1
  418. package/out/zero-cache/src/db/postgres-replica-identity-enum.js +11 -6
  419. package/out/zero-cache/src/db/postgres-replica-identity-enum.js.map +1 -1
  420. package/out/zero-cache/src/db/postgres-type-class-enum.js +17 -9
  421. package/out/zero-cache/src/db/postgres-type-class-enum.js.map +1 -1
  422. package/out/zero-cache/src/db/specs.d.ts +0 -6
  423. package/out/zero-cache/src/db/specs.d.ts.map +1 -1
  424. package/out/zero-cache/src/db/specs.js +66 -40
  425. package/out/zero-cache/src/db/specs.js.map +1 -1
  426. package/out/zero-cache/src/db/statements.d.ts +1 -1
  427. package/out/zero-cache/src/db/statements.d.ts.map +1 -1
  428. package/out/zero-cache/src/db/statements.js +59 -52
  429. package/out/zero-cache/src/db/statements.js.map +1 -1
  430. package/out/zero-cache/src/db/transaction-pool.d.ts +1 -1
  431. package/out/zero-cache/src/db/transaction-pool.d.ts.map +1 -1
  432. package/out/zero-cache/src/db/transaction-pool.js +375 -501
  433. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  434. package/out/zero-cache/src/db/warmup.js +25 -12
  435. package/out/zero-cache/src/db/warmup.js.map +1 -1
  436. package/out/zero-cache/src/observability/events.js +71 -82
  437. package/out/zero-cache/src/observability/events.js.map +1 -1
  438. package/out/zero-cache/src/observability/metrics.js +54 -32
  439. package/out/zero-cache/src/observability/metrics.js.map +1 -1
  440. package/out/zero-cache/src/scripts/decommission.js +47 -43
  441. package/out/zero-cache/src/scripts/decommission.js.map +1 -1
  442. package/out/zero-cache/src/scripts/deploy-permissions.js +128 -118
  443. package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
  444. package/out/zero-cache/src/scripts/permissions.js +107 -99
  445. package/out/zero-cache/src/scripts/permissions.js.map +1 -1
  446. package/out/zero-cache/src/server/anonymous-otel-start.js +410 -366
  447. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
  448. package/out/zero-cache/src/server/change-streamer.js +104 -60
  449. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  450. package/out/zero-cache/src/server/inspector-delegate.js +112 -109
  451. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  452. package/out/zero-cache/src/server/logging.d.ts +1 -1
  453. package/out/zero-cache/src/server/logging.d.ts.map +1 -1
  454. package/out/zero-cache/src/server/logging.js +26 -19
  455. package/out/zero-cache/src/server/logging.js.map +1 -1
  456. package/out/zero-cache/src/server/main.d.ts.map +1 -1
  457. package/out/zero-cache/src/server/main.js +137 -120
  458. package/out/zero-cache/src/server/main.js.map +1 -1
  459. package/out/zero-cache/src/server/mutator.js +19 -0
  460. package/out/zero-cache/src/server/mutator.js.map +1 -0
  461. package/out/zero-cache/src/server/otel-diag-logger.d.ts +1 -1
  462. package/out/zero-cache/src/server/otel-diag-logger.d.ts.map +1 -1
  463. package/out/zero-cache/src/server/otel-diag-logger.js +67 -70
  464. package/out/zero-cache/src/server/otel-diag-logger.js.map +1 -1
  465. package/out/zero-cache/src/server/otel-log-sink.js +40 -41
  466. package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
  467. package/out/zero-cache/src/server/otel-start.d.ts +1 -1
  468. package/out/zero-cache/src/server/otel-start.d.ts.map +1 -1
  469. package/out/zero-cache/src/server/otel-start.js +57 -68
  470. package/out/zero-cache/src/server/otel-start.js.map +1 -1
  471. package/out/zero-cache/src/server/reaper.js +34 -26
  472. package/out/zero-cache/src/server/reaper.js.map +1 -1
  473. package/out/zero-cache/src/server/replicator.js +53 -31
  474. package/out/zero-cache/src/server/replicator.js.map +1 -1
  475. package/out/zero-cache/src/server/runner/main.js +6 -4
  476. package/out/zero-cache/src/server/runner/main.js.map +1 -1
  477. package/out/zero-cache/src/server/runner/run-worker.d.ts.map +1 -1
  478. package/out/zero-cache/src/server/runner/run-worker.js +46 -50
  479. package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
  480. package/out/zero-cache/src/server/runner/runtime.js +33 -32
  481. package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
  482. package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts.map +1 -1
  483. package/out/zero-cache/src/server/runner/zero-dispatcher.js +28 -22
  484. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  485. package/out/zero-cache/src/server/syncer.js +112 -63
  486. package/out/zero-cache/src/server/syncer.js.map +1 -1
  487. package/out/zero-cache/src/server/worker-dispatcher.d.ts +1 -1
  488. package/out/zero-cache/src/server/worker-dispatcher.d.ts.map +1 -1
  489. package/out/zero-cache/src/server/worker-dispatcher.js +112 -106
  490. package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
  491. package/out/zero-cache/src/server/worker-urls.d.ts +7 -0
  492. package/out/zero-cache/src/server/worker-urls.d.ts.map +1 -0
  493. package/out/zero-cache/src/server/worker-urls.js +21 -0
  494. package/out/zero-cache/src/server/worker-urls.js.map +1 -0
  495. package/out/zero-cache/src/services/analyze.d.ts +3 -4
  496. package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
  497. package/out/zero-cache/src/services/analyze.js +96 -122
  498. package/out/zero-cache/src/services/analyze.js.map +1 -1
  499. package/out/zero-cache/src/services/change-source/column-metadata.js +152 -155
  500. package/out/zero-cache/src/services/change-source/column-metadata.js.map +1 -1
  501. package/out/zero-cache/src/services/change-source/custom/change-source.d.ts +1 -1
  502. package/out/zero-cache/src/services/change-source/custom/change-source.d.ts.map +1 -1
  503. package/out/zero-cache/src/services/change-source/custom/change-source.js +197 -171
  504. package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
  505. package/out/zero-cache/src/services/change-source/custom/sync-schema.js +11 -3
  506. package/out/zero-cache/src/services/change-source/custom/sync-schema.js.map +1 -1
  507. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +1 -1
  508. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  509. package/out/zero-cache/src/services/change-source/pg/change-source.js +601 -622
  510. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  511. package/out/zero-cache/src/services/change-source/pg/decommission.js +24 -23
  512. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
  513. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +1 -1
  514. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
  515. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +327 -284
  516. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  517. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js +61 -69
  518. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
  519. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js +247 -257
  520. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
  521. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +127 -119
  522. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
  523. package/out/zero-cache/src/services/change-source/pg/lsn.js +20 -19
  524. package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
  525. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +96 -119
  526. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  527. package/out/zero-cache/src/services/change-source/pg/schema/init.js +138 -117
  528. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  529. package/out/zero-cache/src/services/change-source/pg/schema/published.js +67 -74
  530. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
  531. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +199 -188
  532. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  533. package/out/zero-cache/src/services/change-source/pg/schema/validation.js +53 -38
  534. package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
  535. package/out/zero-cache/src/services/change-source/pg/sync-schema.js +11 -3
  536. package/out/zero-cache/src/services/change-source/pg/sync-schema.js.map +1 -1
  537. package/out/zero-cache/src/services/change-source/protocol/current/control.js +9 -19
  538. package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
  539. package/out/zero-cache/src/services/change-source/protocol/current/data.js +143 -116
  540. package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
  541. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js +29 -19
  542. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
  543. package/out/zero-cache/src/services/change-source/protocol/current/path.js +5 -20
  544. package/out/zero-cache/src/services/change-source/protocol/current/path.js.map +1 -1
  545. package/out/zero-cache/src/services/change-source/protocol/current/status.js +12 -13
  546. package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
  547. package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts +1 -1
  548. package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts.map +1 -1
  549. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js +5 -4
  550. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
  551. package/out/zero-cache/src/services/change-source/protocol/current.js +35 -7
  552. package/out/zero-cache/src/services/change-source/protocol/current.js.map +1 -1
  553. package/out/zero-cache/src/services/change-source/replica-schema.js +64 -47
  554. package/out/zero-cache/src/services/change-source/replica-schema.js.map +1 -1
  555. package/out/zero-cache/src/services/change-streamer/backup-monitor.js +139 -161
  556. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  557. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +2 -2
  558. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  559. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +178 -158
  560. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  561. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +1 -1
  562. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  563. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +234 -355
  564. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  565. package/out/zero-cache/src/services/change-streamer/change-streamer.js +24 -26
  566. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  567. package/out/zero-cache/src/services/change-streamer/error-type-enum.js +9 -4
  568. package/out/zero-cache/src/services/change-streamer/error-type-enum.js.map +1 -1
  569. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +1 -1
  570. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +1 -1
  571. package/out/zero-cache/src/services/change-streamer/forwarder.js +53 -57
  572. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  573. package/out/zero-cache/src/services/change-streamer/replica-monitor.js +40 -44
  574. package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -1
  575. package/out/zero-cache/src/services/change-streamer/schema/init.js +82 -68
  576. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  577. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +2 -2
  578. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
  579. package/out/zero-cache/src/services/change-streamer/schema/tables.js +93 -78
  580. package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
  581. package/out/zero-cache/src/services/change-streamer/snapshot.js +28 -37
  582. package/out/zero-cache/src/services/change-streamer/snapshot.js.map +1 -1
  583. package/out/zero-cache/src/services/change-streamer/storer.d.ts +2 -2
  584. package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
  585. package/out/zero-cache/src/services/change-streamer/storer.js +309 -372
  586. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  587. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +2 -1
  588. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
  589. package/out/zero-cache/src/services/change-streamer/subscriber.js +83 -90
  590. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  591. package/out/zero-cache/src/services/heapz.js +21 -25
  592. package/out/zero-cache/src/services/heapz.js.map +1 -1
  593. package/out/zero-cache/src/services/http-service.d.ts +1 -1
  594. package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
  595. package/out/zero-cache/src/services/http-service.js +56 -59
  596. package/out/zero-cache/src/services/http-service.js.map +1 -1
  597. package/out/zero-cache/src/services/life-cycle.d.ts +1 -1
  598. package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
  599. package/out/zero-cache/src/services/life-cycle.js +216 -255
  600. package/out/zero-cache/src/services/life-cycle.js.map +1 -1
  601. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +76 -130
  602. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
  603. package/out/zero-cache/src/services/litestream/commands.d.ts +1 -1
  604. package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
  605. package/out/zero-cache/src/services/litestream/commands.js +193 -178
  606. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  607. package/out/zero-cache/src/services/mutagen/error.js +11 -6
  608. package/out/zero-cache/src/services/mutagen/error.js.map +1 -1
  609. package/out/zero-cache/src/services/mutagen/mutagen.js +270 -267
  610. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  611. package/out/zero-cache/src/services/mutagen/pusher.js +351 -344
  612. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  613. package/out/zero-cache/src/services/replicator/change-processor.js +483 -530
  614. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  615. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +1 -1
  616. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  617. package/out/zero-cache/src/services/replicator/incremental-sync.js +97 -97
  618. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  619. package/out/zero-cache/src/services/replicator/notifier.js +28 -52
  620. package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
  621. package/out/zero-cache/src/services/replicator/replication-status.js +100 -83
  622. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  623. package/out/zero-cache/src/services/replicator/replicator.d.ts +1 -1
  624. package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
  625. package/out/zero-cache/src/services/replicator/replicator.js +33 -26
  626. package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
  627. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +1 -1
  628. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts.map +1 -1
  629. package/out/zero-cache/src/services/replicator/schema/change-log.js +74 -86
  630. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  631. package/out/zero-cache/src/services/replicator/schema/constants.js +5 -7
  632. package/out/zero-cache/src/services/replicator/schema/constants.js.map +1 -1
  633. package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts +2 -2
  634. package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts.map +1 -1
  635. package/out/zero-cache/src/services/replicator/schema/replication-state.js +70 -74
  636. package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
  637. package/out/zero-cache/src/services/run-ast.d.ts +5 -3
  638. package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
  639. package/out/zero-cache/src/services/run-ast.js +80 -79
  640. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  641. package/out/zero-cache/src/services/runner.d.ts +1 -1
  642. package/out/zero-cache/src/services/runner.d.ts.map +1 -1
  643. package/out/zero-cache/src/services/runner.js +40 -40
  644. package/out/zero-cache/src/services/runner.js.map +1 -1
  645. package/out/zero-cache/src/services/running-state.d.ts +1 -1
  646. package/out/zero-cache/src/services/running-state.d.ts.map +1 -1
  647. package/out/zero-cache/src/services/running-state.js +122 -119
  648. package/out/zero-cache/src/services/running-state.js.map +1 -1
  649. package/out/zero-cache/src/services/statz.js +184 -162
  650. package/out/zero-cache/src/services/statz.js.map +1 -1
  651. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +40 -39
  652. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
  653. package/out/zero-cache/src/services/view-syncer/client-handler.js +307 -298
  654. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  655. package/out/zero-cache/src/services/view-syncer/client-schema.d.ts.map +1 -1
  656. package/out/zero-cache/src/services/view-syncer/client-schema.js +80 -82
  657. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  658. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +83 -92
  659. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
  660. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +2 -4
  661. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
  662. package/out/zero-cache/src/services/view-syncer/cvr-store.js +628 -616
  663. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  664. package/out/zero-cache/src/services/view-syncer/cvr.d.ts +1 -1
  665. package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
  666. package/out/zero-cache/src/services/view-syncer/cvr.js +631 -694
  667. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  668. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +38 -60
  669. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  670. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts +2 -1
  671. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +1 -1
  672. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +168 -158
  673. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  674. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +14 -13
  675. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  676. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +529 -482
  677. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  678. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +229 -280
  679. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  680. package/out/zero-cache/src/services/view-syncer/schema/cvr.js +53 -120
  681. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
  682. package/out/zero-cache/src/services/view-syncer/schema/init.js +171 -150
  683. package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
  684. package/out/zero-cache/src/services/view-syncer/schema/types.js +265 -257
  685. package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
  686. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +3 -3
  687. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
  688. package/out/zero-cache/src/services/view-syncer/snapshotter.js +295 -338
  689. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  690. package/out/zero-cache/src/services/view-syncer/ttl-clock.js +13 -7
  691. package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
  692. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +3 -3
  693. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  694. package/out/zero-cache/src/services/view-syncer/view-syncer.js +1485 -1307
  695. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  696. package/out/zero-cache/src/types/error-with-level.d.ts.map +1 -1
  697. package/out/zero-cache/src/types/error-with-level.js +29 -25
  698. package/out/zero-cache/src/types/error-with-level.js.map +1 -1
  699. package/out/zero-cache/src/types/http.js +27 -14
  700. package/out/zero-cache/src/types/http.js.map +1 -1
  701. package/out/zero-cache/src/types/lexi-version.js +46 -31
  702. package/out/zero-cache/src/types/lexi-version.js.map +1 -1
  703. package/out/zero-cache/src/types/lite.js +118 -125
  704. package/out/zero-cache/src/types/lite.js.map +1 -1
  705. package/out/zero-cache/src/types/names.js +6 -3
  706. package/out/zero-cache/src/types/names.js.map +1 -1
  707. package/out/zero-cache/src/types/pg-data-type.js +74 -68
  708. package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
  709. package/out/zero-cache/src/types/pg-types.js +17 -72
  710. package/out/zero-cache/src/types/pg-types.js.map +1 -1
  711. package/out/zero-cache/src/types/pg.d.ts +1 -1
  712. package/out/zero-cache/src/types/pg.d.ts.map +1 -1
  713. package/out/zero-cache/src/types/pg.js +213 -233
  714. package/out/zero-cache/src/types/pg.js.map +1 -1
  715. package/out/zero-cache/src/types/processes.d.ts +2 -2
  716. package/out/zero-cache/src/types/processes.d.ts.map +1 -1
  717. package/out/zero-cache/src/types/processes.js +95 -143
  718. package/out/zero-cache/src/types/processes.js.map +1 -1
  719. package/out/zero-cache/src/types/profiler.js +29 -30
  720. package/out/zero-cache/src/types/profiler.js.map +1 -1
  721. package/out/zero-cache/src/types/row-key.js +30 -68
  722. package/out/zero-cache/src/types/row-key.js.map +1 -1
  723. package/out/zero-cache/src/types/schema-versions.js +25 -19
  724. package/out/zero-cache/src/types/schema-versions.js.map +1 -1
  725. package/out/zero-cache/src/types/shards.js +50 -36
  726. package/out/zero-cache/src/types/shards.js.map +1 -1
  727. package/out/zero-cache/src/types/sql.js +9 -13
  728. package/out/zero-cache/src/types/sql.js.map +1 -1
  729. package/out/zero-cache/src/types/streams.js +245 -254
  730. package/out/zero-cache/src/types/streams.js.map +1 -1
  731. package/out/zero-cache/src/types/strings.js +14 -11
  732. package/out/zero-cache/src/types/strings.js.map +1 -1
  733. package/out/zero-cache/src/types/subscription.js +200 -259
  734. package/out/zero-cache/src/types/subscription.js.map +1 -1
  735. package/out/zero-cache/src/types/url-params.js +35 -30
  736. package/out/zero-cache/src/types/url-params.js.map +1 -1
  737. package/out/zero-cache/src/types/websocket-handoff.d.ts +3 -2
  738. package/out/zero-cache/src/types/websocket-handoff.d.ts.map +1 -1
  739. package/out/zero-cache/src/types/websocket-handoff.js +68 -76
  740. package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
  741. package/out/zero-cache/src/types/ws.js +56 -59
  742. package/out/zero-cache/src/types/ws.js.map +1 -1
  743. package/out/zero-cache/src/workers/connect-params.js +44 -40
  744. package/out/zero-cache/src/workers/connect-params.js.map +1 -1
  745. package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
  746. package/out/zero-cache/src/workers/connection.js +277 -243
  747. package/out/zero-cache/src/workers/connection.js.map +1 -1
  748. package/out/zero-cache/src/workers/mutator.js +24 -0
  749. package/out/zero-cache/src/workers/mutator.js.map +1 -0
  750. package/out/zero-cache/src/workers/replicator.d.ts +1 -1
  751. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  752. package/out/zero-cache/src/workers/replicator.js +103 -106
  753. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  754. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +179 -147
  755. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  756. package/out/zero-cache/src/workers/syncer.d.ts +3 -3
  757. package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
  758. package/out/zero-cache/src/workers/syncer.js +192 -169
  759. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  760. package/out/zero-client/src/client/active-clients-manager.js +199 -0
  761. package/out/zero-client/src/client/active-clients-manager.js.map +1 -0
  762. package/out/zero-client/src/client/bindings.d.ts +8 -7
  763. package/out/zero-client/src/client/bindings.d.ts.map +1 -1
  764. package/out/zero-client/src/client/bindings.js +33 -0
  765. package/out/zero-client/src/client/bindings.js.map +1 -0
  766. package/out/zero-client/src/client/client-error-kind-enum.js +29 -0
  767. package/out/zero-client/src/client/client-error-kind-enum.js.map +1 -0
  768. package/out/zero-client/src/client/connection-manager.d.ts +12 -31
  769. package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
  770. package/out/zero-client/src/client/connection-manager.js +310 -0
  771. package/out/zero-client/src/client/connection-manager.js.map +1 -0
  772. package/out/zero-client/src/client/connection-status-enum.js +15 -0
  773. package/out/zero-client/src/client/connection-status-enum.js.map +1 -0
  774. package/out/zero-client/src/client/connection.d.ts +45 -2
  775. package/out/zero-client/src/client/connection.d.ts.map +1 -1
  776. package/out/zero-client/src/client/connection.js +103 -0
  777. package/out/zero-client/src/client/connection.js.map +1 -0
  778. package/out/zero-client/src/client/context.d.ts +3 -6
  779. package/out/zero-client/src/client/context.d.ts.map +1 -1
  780. package/out/zero-client/src/client/context.js +104 -0
  781. package/out/zero-client/src/client/context.js.map +1 -0
  782. package/out/zero-client/src/client/crud.js +225 -0
  783. package/out/zero-client/src/client/crud.js.map +1 -0
  784. package/out/zero-client/src/client/custom.d.ts +9 -12
  785. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  786. package/out/zero-client/src/client/custom.js +123 -0
  787. package/out/zero-client/src/client/custom.js.map +1 -0
  788. package/out/zero-client/src/client/delete-clients-manager.js +71 -0
  789. package/out/zero-client/src/client/delete-clients-manager.js.map +1 -0
  790. package/out/zero-client/src/client/enable-analytics.js +18 -0
  791. package/out/zero-client/src/client/enable-analytics.js.map +1 -0
  792. package/out/zero-client/src/client/error.d.ts +2 -1
  793. package/out/zero-client/src/client/error.d.ts.map +1 -1
  794. package/out/zero-client/src/client/error.js +148 -0
  795. package/out/zero-client/src/client/error.js.map +1 -0
  796. package/out/zero-client/src/client/http-string.js +11 -0
  797. package/out/zero-client/src/client/http-string.js.map +1 -0
  798. package/out/zero-client/src/client/inspector/client-group.js +27 -0
  799. package/out/zero-client/src/client/inspector/client-group.js.map +1 -0
  800. package/out/zero-client/src/client/inspector/client.js +28 -0
  801. package/out/zero-client/src/client/inspector/client.js.map +1 -0
  802. package/out/zero-client/src/client/inspector/html-dialog-prompt.js +77 -0
  803. package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -0
  804. package/out/zero-client/src/client/inspector/inspector.d.ts +1 -1
  805. package/out/zero-client/src/client/inspector/inspector.d.ts.map +1 -1
  806. package/out/zero-client/src/client/inspector/inspector.js +47 -0
  807. package/out/zero-client/src/client/inspector/inspector.js.map +1 -0
  808. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts +1 -1
  809. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts.map +1 -1
  810. package/out/zero-client/src/client/inspector/lazy-inspector.js +243 -0
  811. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -0
  812. package/out/zero-client/src/client/inspector/query.d.ts.map +1 -1
  813. package/out/zero-client/src/client/inspector/query.js +82 -0
  814. package/out/zero-client/src/client/inspector/query.js.map +1 -0
  815. package/out/zero-client/src/client/ivm-branch.d.ts +4 -4
  816. package/out/zero-client/src/client/ivm-branch.d.ts.map +1 -1
  817. package/out/zero-client/src/client/ivm-branch.js +149 -0
  818. package/out/zero-client/src/client/ivm-branch.js.map +1 -0
  819. package/out/zero-client/src/client/keys.js +45 -0
  820. package/out/zero-client/src/client/keys.js.map +1 -0
  821. package/out/zero-client/src/client/log-options.js +60 -0
  822. package/out/zero-client/src/client/log-options.js.map +1 -0
  823. package/out/zero-client/src/client/metric-name-enum.js +15 -0
  824. package/out/zero-client/src/client/metric-name-enum.js.map +1 -0
  825. package/out/zero-client/src/client/metrics.d.ts.map +1 -1
  826. package/out/zero-client/src/client/metrics.js +249 -0
  827. package/out/zero-client/src/client/metrics.js.map +1 -0
  828. package/out/zero-client/src/client/mutation-tracker.js +363 -0
  829. package/out/zero-client/src/client/mutation-tracker.js.map +1 -0
  830. package/out/zero-client/src/client/mutator-proxy.d.ts +1 -2
  831. package/out/zero-client/src/client/mutator-proxy.d.ts.map +1 -1
  832. package/out/zero-client/src/client/mutator-proxy.js +132 -0
  833. package/out/zero-client/src/client/mutator-proxy.js.map +1 -0
  834. package/out/zero-client/src/client/options.d.ts +36 -19
  835. package/out/zero-client/src/client/options.d.ts.map +1 -1
  836. package/out/zero-client/src/client/options.js +11 -0
  837. package/out/zero-client/src/client/options.js.map +1 -0
  838. package/out/zero-client/src/client/query-manager.d.ts +4 -4
  839. package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
  840. package/out/zero-client/src/client/query-manager.js +377 -0
  841. package/out/zero-client/src/client/query-manager.js.map +1 -0
  842. package/out/zero-client/src/client/reload-error-handler.d.ts +1 -1
  843. package/out/zero-client/src/client/reload-error-handler.d.ts.map +1 -1
  844. package/out/zero-client/src/client/reload-error-handler.js +114 -0
  845. package/out/zero-client/src/client/reload-error-handler.js.map +1 -0
  846. package/out/zero-client/src/client/server-option.js +64 -0
  847. package/out/zero-client/src/client/server-option.js.map +1 -0
  848. package/out/zero-client/src/client/update-needed-reason-type-enum.js +9 -0
  849. package/out/zero-client/src/client/update-needed-reason-type-enum.js.map +1 -0
  850. package/out/zero-client/src/client/version.js +5 -0
  851. package/out/zero-client/src/client/version.js.map +1 -0
  852. package/out/zero-client/src/client/zero-poke-handler.js +303 -0
  853. package/out/zero-client/src/client/zero-poke-handler.js.map +1 -0
  854. package/out/zero-client/src/client/zero-rep.d.ts +2 -2
  855. package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
  856. package/out/zero-client/src/client/zero-rep.js +72 -0
  857. package/out/zero-client/src/client/zero-rep.js.map +1 -0
  858. package/out/zero-client/src/client/zero.d.ts +26 -9
  859. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  860. package/out/zero-client/src/client/zero.js +1825 -0
  861. package/out/zero-client/src/client/zero.js.map +1 -0
  862. package/out/zero-client/src/mod.d.ts +4 -12
  863. package/out/zero-client/src/mod.d.ts.map +1 -1
  864. package/out/zero-client/src/util/nanoid.js +21 -0
  865. package/out/zero-client/src/util/nanoid.js.map +1 -0
  866. package/out/zero-client/src/util/socket.js +7 -0
  867. package/out/zero-client/src/util/socket.js.map +1 -0
  868. package/out/zero-protocol/src/analyze-query-result.js +32 -24
  869. package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
  870. package/out/zero-protocol/src/application-error.js +35 -37
  871. package/out/zero-protocol/src/application-error.js.map +1 -1
  872. package/out/zero-protocol/src/ast.d.ts +1 -1
  873. package/out/zero-protocol/src/ast.js +296 -277
  874. package/out/zero-protocol/src/ast.js.map +1 -1
  875. package/out/zero-protocol/src/change-desired-queries.d.ts +2 -2
  876. package/out/zero-protocol/src/change-desired-queries.js +11 -7
  877. package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
  878. package/out/zero-protocol/src/client-schema.d.ts +2 -2
  879. package/out/zero-protocol/src/client-schema.d.ts.map +1 -1
  880. package/out/zero-protocol/src/client-schema.js +40 -26
  881. package/out/zero-protocol/src/client-schema.js.map +1 -1
  882. package/out/zero-protocol/src/close-connection.js +11 -18
  883. package/out/zero-protocol/src/close-connection.js.map +1 -1
  884. package/out/zero-protocol/src/connect.d.ts +4 -4
  885. package/out/zero-protocol/src/connect.js +46 -51
  886. package/out/zero-protocol/src/connect.js.map +1 -1
  887. package/out/zero-protocol/src/custom-queries.d.ts +4 -4
  888. package/out/zero-protocol/src/custom-queries.js +61 -39
  889. package/out/zero-protocol/src/custom-queries.js.map +1 -1
  890. package/out/zero-protocol/src/data.js +9 -4
  891. package/out/zero-protocol/src/data.js.map +1 -1
  892. package/out/zero-protocol/src/delete-clients.js +16 -9
  893. package/out/zero-protocol/src/delete-clients.js.map +1 -1
  894. package/out/zero-protocol/src/down.d.ts +6 -6
  895. package/out/zero-protocol/src/down.js +20 -4
  896. package/out/zero-protocol/src/down.js.map +1 -1
  897. package/out/zero-protocol/src/error-kind-enum.js +41 -23
  898. package/out/zero-protocol/src/error-kind-enum.js.map +1 -1
  899. package/out/zero-protocol/src/error-origin-enum.js +9 -4
  900. package/out/zero-protocol/src/error-origin-enum.js.map +1 -1
  901. package/out/zero-protocol/src/error-reason-enum.js +17 -8
  902. package/out/zero-protocol/src/error-reason-enum.js.map +1 -1
  903. package/out/zero-protocol/src/error.d.ts +17 -17
  904. package/out/zero-protocol/src/error.js +151 -89
  905. package/out/zero-protocol/src/error.js.map +1 -1
  906. package/out/zero-protocol/src/inspect-down.d.ts +18 -18
  907. package/out/zero-protocol/src/inspect-down.js +72 -54
  908. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  909. package/out/zero-protocol/src/inspect-up.d.ts +6 -6
  910. package/out/zero-protocol/src/inspect-up.js +38 -26
  911. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  912. package/out/zero-protocol/src/mutation-id.js +9 -5
  913. package/out/zero-protocol/src/mutation-id.js.map +1 -1
  914. package/out/zero-protocol/src/mutation-type-enum.js +7 -3
  915. package/out/zero-protocol/src/mutation-type-enum.js.map +1 -1
  916. package/out/zero-protocol/src/mutations-patch.js +16 -17
  917. package/out/zero-protocol/src/mutations-patch.js.map +1 -1
  918. package/out/zero-protocol/src/ping.js +9 -4
  919. package/out/zero-protocol/src/ping.js.map +1 -1
  920. package/out/zero-protocol/src/poke.js +55 -72
  921. package/out/zero-protocol/src/poke.js.map +1 -1
  922. package/out/zero-protocol/src/pong.js +9 -4
  923. package/out/zero-protocol/src/pong.js.map +1 -1
  924. package/out/zero-protocol/src/primary-key.js +19 -5
  925. package/out/zero-protocol/src/primary-key.js.map +1 -1
  926. package/out/zero-protocol/src/protocol-version.d.ts +2 -2
  927. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  928. package/out/zero-protocol/src/protocol-version.js +7 -59
  929. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  930. package/out/zero-protocol/src/pull.js +26 -19
  931. package/out/zero-protocol/src/pull.js.map +1 -1
  932. package/out/zero-protocol/src/push.d.ts +4 -4
  933. package/out/zero-protocol/src/push.js +179 -176
  934. package/out/zero-protocol/src/push.js.map +1 -1
  935. package/out/zero-protocol/src/queries-patch.d.ts +3 -3
  936. package/out/zero-protocol/src/queries-patch.js +29 -22
  937. package/out/zero-protocol/src/queries-patch.js.map +1 -1
  938. package/out/zero-protocol/src/query-hash.js +18 -14
  939. package/out/zero-protocol/src/query-hash.js.map +1 -1
  940. package/out/zero-protocol/src/row-patch.js +29 -20
  941. package/out/zero-protocol/src/row-patch.js.map +1 -1
  942. package/out/zero-protocol/src/up.d.ts +5 -5
  943. package/out/zero-protocol/src/up.js +18 -4
  944. package/out/zero-protocol/src/up.js.map +1 -1
  945. package/out/zero-protocol/src/version.js +9 -4
  946. package/out/zero-protocol/src/version.js.map +1 -1
  947. package/out/{inspector-GP3CBZRU.js → zero-react/src/components/inspector.js} +4 -9
  948. package/out/zero-react/src/components/inspector.js.map +1 -0
  949. package/out/{chunk-VZOYWIRW.js → zero-react/src/components/mark-icon.js} +3 -5
  950. package/out/zero-react/src/components/mark-icon.js.map +1 -0
  951. package/out/zero-react/src/components/zero-inspector.js +44 -0
  952. package/out/zero-react/src/components/zero-inspector.js.map +1 -0
  953. package/out/zero-react/src/mod.d.ts +1 -3
  954. package/out/zero-react/src/mod.d.ts.map +1 -1
  955. package/out/zero-react/src/use-query.d.ts +4 -4
  956. package/out/zero-react/src/use-query.d.ts.map +1 -1
  957. package/out/{react.js → zero-react/src/use-query.js} +25 -217
  958. package/out/zero-react/src/use-query.js.map +1 -0
  959. package/out/zero-react/src/use-zero-connection-state.d.ts +1 -1
  960. package/out/zero-react/src/use-zero-connection-state.d.ts.map +1 -1
  961. package/out/zero-react/src/use-zero-connection-state.js +14 -0
  962. package/out/zero-react/src/use-zero-connection-state.js.map +1 -0
  963. package/out/zero-react/src/use-zero-online.js +14 -0
  964. package/out/zero-react/src/use-zero-online.js.map +1 -0
  965. package/out/zero-react/src/zero-provider.d.ts +7 -6
  966. package/out/zero-react/src/zero-provider.d.ts.map +1 -1
  967. package/out/zero-react/src/zero-provider.js +59 -0
  968. package/out/zero-react/src/zero-provider.js.map +1 -0
  969. package/out/zero-schema/src/builder/relationship-builder.js +27 -0
  970. package/out/zero-schema/src/builder/relationship-builder.js.map +1 -0
  971. package/out/zero-schema/src/builder/schema-builder.js +88 -0
  972. package/out/zero-schema/src/builder/schema-builder.js.map +1 -0
  973. package/out/zero-schema/src/builder/table-builder.js +129 -0
  974. package/out/zero-schema/src/builder/table-builder.js.map +1 -0
  975. package/out/zero-schema/src/compiled-permissions.js +23 -19
  976. package/out/zero-schema/src/compiled-permissions.js.map +1 -1
  977. package/out/zero-schema/src/name-mapper.js +43 -38
  978. package/out/zero-schema/src/name-mapper.js.map +1 -1
  979. package/out/zero-schema/src/permissions.d.ts.map +1 -1
  980. package/out/zero-schema/src/permissions.js +199 -0
  981. package/out/zero-schema/src/permissions.js.map +1 -0
  982. package/out/zero-schema/src/schema-config.js +35 -51
  983. package/out/zero-schema/src/schema-config.js.map +1 -1
  984. package/out/zero-server/src/adapters/drizzle.d.ts +1 -1
  985. package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -1
  986. package/out/zero-server/src/adapters/drizzle.js +83 -100
  987. package/out/zero-server/src/adapters/drizzle.js.map +1 -1
  988. package/out/zero-server/src/adapters/pg.d.ts +3 -2
  989. package/out/zero-server/src/adapters/pg.d.ts.map +1 -1
  990. package/out/zero-server/src/adapters/pg.js +53 -77
  991. package/out/zero-server/src/adapters/pg.js.map +1 -1
  992. package/out/zero-server/src/adapters/postgresjs.d.ts +1 -1
  993. package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
  994. package/out/zero-server/src/adapters/postgresjs.js +39 -57
  995. package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
  996. package/out/zero-server/src/custom.d.ts +6 -6
  997. package/out/zero-server/src/custom.d.ts.map +1 -1
  998. package/out/zero-server/src/custom.js +185 -117
  999. package/out/zero-server/src/custom.js.map +1 -1
  1000. package/out/zero-server/src/logging.js +7 -4
  1001. package/out/zero-server/src/logging.js.map +1 -1
  1002. package/out/zero-server/src/mod.d.ts +2 -0
  1003. package/out/zero-server/src/mod.d.ts.map +1 -1
  1004. package/out/zero-server/src/pg-query-executor.js +17 -14
  1005. package/out/zero-server/src/pg-query-executor.js.map +1 -1
  1006. package/out/zero-server/src/process-mutations.js +293 -274
  1007. package/out/zero-server/src/process-mutations.js.map +1 -1
  1008. package/out/zero-server/src/push-processor.js +55 -31
  1009. package/out/zero-server/src/push-processor.js.map +1 -1
  1010. package/out/zero-server/src/queries/process-queries.d.ts +63 -2
  1011. package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
  1012. package/out/zero-server/src/queries/process-queries.js +101 -95
  1013. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  1014. package/out/zero-server/src/query-registry.d.ts +10 -0
  1015. package/out/zero-server/src/query-registry.d.ts.map +1 -0
  1016. package/out/zero-server/src/query-registry.js +35 -0
  1017. package/out/zero-server/src/query-registry.js.map +1 -0
  1018. package/out/zero-server/src/schema.js +136 -124
  1019. package/out/zero-server/src/schema.js.map +1 -1
  1020. package/out/zero-server/src/zql-database.d.ts +4 -4
  1021. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  1022. package/out/zero-server/src/zql-database.js +66 -47
  1023. package/out/zero-server/src/zql-database.js.map +1 -1
  1024. package/out/zero-solid/src/mod.d.ts +1 -2
  1025. package/out/zero-solid/src/mod.d.ts.map +1 -1
  1026. package/out/zero-solid/src/solid-view.d.ts +1 -1
  1027. package/out/zero-solid/src/solid-view.d.ts.map +1 -1
  1028. package/out/{solid.js → zero-solid/src/solid-view.js} +42 -196
  1029. package/out/zero-solid/src/solid-view.js.map +1 -0
  1030. package/out/zero-solid/src/use-query.d.ts +1 -1
  1031. package/out/zero-solid/src/use-query.d.ts.map +1 -1
  1032. package/out/zero-solid/src/use-query.js +70 -0
  1033. package/out/zero-solid/src/use-query.js.map +1 -0
  1034. package/out/zero-solid/src/use-zero-connection-state.d.ts +1 -1
  1035. package/out/zero-solid/src/use-zero-connection-state.d.ts.map +1 -1
  1036. package/out/zero-solid/src/use-zero-connection-state.js +15 -0
  1037. package/out/zero-solid/src/use-zero-connection-state.js.map +1 -0
  1038. package/out/zero-solid/src/use-zero-online.js +13 -0
  1039. package/out/zero-solid/src/use-zero-online.js.map +1 -0
  1040. package/out/zero-solid/src/use-zero.d.ts +1 -1
  1041. package/out/zero-solid/src/use-zero.d.ts.map +1 -1
  1042. package/out/zero-solid/src/use-zero.js +74 -0
  1043. package/out/zero-solid/src/use-zero.js.map +1 -0
  1044. package/out/zero-types/src/format.js +7 -4
  1045. package/out/zero-types/src/format.js.map +1 -1
  1046. package/out/zero-types/src/name-mapper.js +43 -40
  1047. package/out/zero-types/src/name-mapper.js.map +1 -1
  1048. package/out/zql/src/builder/builder.d.ts +2 -1
  1049. package/out/zql/src/builder/builder.d.ts.map +1 -1
  1050. package/out/zql/src/builder/builder.js +486 -428
  1051. package/out/zql/src/builder/builder.js.map +1 -1
  1052. package/out/zql/src/builder/debug-delegate.js +68 -64
  1053. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  1054. package/out/zql/src/builder/filter.js +132 -138
  1055. package/out/zql/src/builder/filter.js.map +1 -1
  1056. package/out/zql/src/builder/like.js +44 -51
  1057. package/out/zql/src/builder/like.js.map +1 -1
  1058. package/out/zql/src/error.d.ts +5 -0
  1059. package/out/zql/src/error.d.ts.map +1 -1
  1060. package/out/zql/src/error.js +18 -6
  1061. package/out/zql/src/error.js.map +1 -1
  1062. package/out/zql/src/ivm/array-view.js +86 -92
  1063. package/out/zql/src/ivm/array-view.js.map +1 -1
  1064. package/out/zql/src/ivm/constraint.js +74 -127
  1065. package/out/zql/src/ivm/constraint.js.map +1 -1
  1066. package/out/zql/src/ivm/data.js +59 -85
  1067. package/out/zql/src/ivm/data.js.map +1 -1
  1068. package/out/zql/src/ivm/exists.js +236 -243
  1069. package/out/zql/src/ivm/exists.js.map +1 -1
  1070. package/out/zql/src/ivm/fan-in.js +50 -51
  1071. package/out/zql/src/ivm/fan-in.js.map +1 -1
  1072. package/out/zql/src/ivm/fan-out.js +48 -50
  1073. package/out/zql/src/ivm/fan-out.js.map +1 -1
  1074. package/out/zql/src/ivm/filter-operators.js +87 -87
  1075. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  1076. package/out/zql/src/ivm/filter-push.js +26 -23
  1077. package/out/zql/src/ivm/filter-push.js.map +1 -1
  1078. package/out/zql/src/ivm/filter.js +30 -32
  1079. package/out/zql/src/ivm/filter.js.map +1 -1
  1080. package/out/zql/src/ivm/flipped-join.js +343 -326
  1081. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  1082. package/out/zql/src/ivm/join-utils.js +85 -79
  1083. package/out/zql/src/ivm/join-utils.js.map +1 -1
  1084. package/out/zql/src/ivm/join.js +287 -207
  1085. package/out/zql/src/ivm/join.js.map +1 -1
  1086. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +26 -24
  1087. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
  1088. package/out/zql/src/ivm/memory-source.d.ts +2 -2
  1089. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  1090. package/out/zql/src/ivm/memory-source.js +471 -489
  1091. package/out/zql/src/ivm/memory-source.js.map +1 -1
  1092. package/out/zql/src/ivm/memory-storage.js +32 -31
  1093. package/out/zql/src/ivm/memory-storage.js.map +1 -1
  1094. package/out/zql/src/ivm/operator.js +8 -9
  1095. package/out/zql/src/ivm/operator.js.map +1 -1
  1096. package/out/zql/src/ivm/push-accumulated.js +236 -305
  1097. package/out/zql/src/ivm/push-accumulated.js.map +1 -1
  1098. package/out/zql/src/ivm/skip.js +92 -106
  1099. package/out/zql/src/ivm/skip.js.map +1 -1
  1100. package/out/zql/src/ivm/source.d.ts +3 -1
  1101. package/out/zql/src/ivm/source.d.ts.map +1 -1
  1102. package/out/zql/src/ivm/stream.js +20 -16
  1103. package/out/zql/src/ivm/stream.js.map +1 -1
  1104. package/out/zql/src/ivm/take.js +502 -456
  1105. package/out/zql/src/ivm/take.js.map +1 -1
  1106. package/out/zql/src/ivm/union-fan-in.js +156 -134
  1107. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  1108. package/out/zql/src/ivm/union-fan-out.js +46 -45
  1109. package/out/zql/src/ivm/union-fan-out.js.map +1 -1
  1110. package/out/zql/src/ivm/view-apply-change.js +246 -216
  1111. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  1112. package/out/zql/src/ivm/view.d.ts +2 -2
  1113. package/out/zql/src/ivm/view.d.ts.map +1 -1
  1114. package/out/zql/src/mutate/custom.d.ts +10 -10
  1115. package/out/zql/src/mutate/custom.d.ts.map +1 -1
  1116. package/out/zql/src/mutate/custom.js +15 -7
  1117. package/out/zql/src/mutate/custom.js.map +1 -1
  1118. package/out/zql/src/planner/planner-builder.js +238 -172
  1119. package/out/zql/src/planner/planner-builder.js.map +1 -1
  1120. package/out/zql/src/planner/planner-connection.js +202 -251
  1121. package/out/zql/src/planner/planner-connection.js.map +1 -1
  1122. package/out/zql/src/planner/planner-constraint.js +8 -11
  1123. package/out/zql/src/planner/planner-constraint.js.map +1 -1
  1124. package/out/zql/src/planner/planner-fan-in.js +154 -164
  1125. package/out/zql/src/planner/planner-fan-in.js.map +1 -1
  1126. package/out/zql/src/planner/planner-fan-out.js +71 -60
  1127. package/out/zql/src/planner/planner-fan-out.js.map +1 -1
  1128. package/out/zql/src/planner/planner-graph.d.ts +6 -6
  1129. package/out/zql/src/planner/planner-graph.d.ts.map +1 -1
  1130. package/out/zql/src/planner/planner-graph.js +315 -338
  1131. package/out/zql/src/planner/planner-graph.js.map +1 -1
  1132. package/out/zql/src/planner/planner-join.js +234 -342
  1133. package/out/zql/src/planner/planner-join.js.map +1 -1
  1134. package/out/zql/src/planner/planner-source.js +23 -12
  1135. package/out/zql/src/planner/planner-source.js.map +1 -1
  1136. package/out/zql/src/planner/planner-terminus.js +28 -27
  1137. package/out/zql/src/planner/planner-terminus.js.map +1 -1
  1138. package/out/zql/src/query/complete-ordering.d.ts +5 -0
  1139. package/out/zql/src/query/complete-ordering.d.ts.map +1 -0
  1140. package/out/zql/src/query/complete-ordering.js +71 -0
  1141. package/out/zql/src/query/complete-ordering.js.map +1 -0
  1142. package/out/zql/src/query/define-query.d.ts +47 -23
  1143. package/out/zql/src/query/define-query.d.ts.map +1 -1
  1144. package/out/zql/src/query/define-query.js +45 -51
  1145. package/out/zql/src/query/define-query.js.map +1 -1
  1146. package/out/zql/src/query/error.js +12 -8
  1147. package/out/zql/src/query/error.js.map +1 -1
  1148. package/out/zql/src/query/escape-like.js +7 -0
  1149. package/out/zql/src/query/escape-like.js.map +1 -0
  1150. package/out/zql/src/query/expression.js +153 -151
  1151. package/out/zql/src/query/expression.js.map +1 -1
  1152. package/out/zql/src/query/measure-push-operator.js +42 -35
  1153. package/out/zql/src/query/measure-push-operator.js.map +1 -1
  1154. package/out/zql/src/query/metrics-delegate.js +9 -5
  1155. package/out/zql/src/query/metrics-delegate.js.map +1 -1
  1156. package/out/zql/src/query/named.d.ts +9 -5
  1157. package/out/zql/src/query/named.d.ts.map +1 -1
  1158. package/out/zql/src/query/named.js +70 -85
  1159. package/out/zql/src/query/named.js.map +1 -1
  1160. package/out/zql/src/query/query-definitions.d.ts +32 -0
  1161. package/out/zql/src/query/query-definitions.d.ts.map +1 -0
  1162. package/out/zql/src/query/query-delegate-base.d.ts +6 -14
  1163. package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
  1164. package/out/zql/src/query/query-delegate-base.js +118 -134
  1165. package/out/zql/src/query/query-delegate-base.js.map +1 -1
  1166. package/out/zql/src/query/query-delegate.d.ts +6 -8
  1167. package/out/zql/src/query/query-delegate.d.ts.map +1 -1
  1168. package/out/zql/src/query/query-impl.d.ts +17 -18
  1169. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  1170. package/out/zql/src/query/query-impl.js +511 -433
  1171. package/out/zql/src/query/query-impl.js.map +1 -1
  1172. package/out/zql/src/query/query-internals.d.ts +11 -13
  1173. package/out/zql/src/query/query-internals.d.ts.map +1 -1
  1174. package/out/zql/src/query/query-internals.js +13 -19
  1175. package/out/zql/src/query/query-internals.js.map +1 -1
  1176. package/out/zql/src/query/query.d.ts +15 -16
  1177. package/out/zql/src/query/query.d.ts.map +1 -1
  1178. package/out/zql/src/query/static-query.d.ts +3 -3
  1179. package/out/zql/src/query/static-query.d.ts.map +1 -1
  1180. package/out/zql/src/query/static-query.js +41 -18
  1181. package/out/zql/src/query/static-query.js.map +1 -1
  1182. package/out/zql/src/query/ttl.js +69 -62
  1183. package/out/zql/src/query/ttl.js.map +1 -1
  1184. package/out/zql/src/query/validate-input.d.ts +15 -0
  1185. package/out/zql/src/query/validate-input.d.ts.map +1 -0
  1186. package/out/zql/src/query/validate-input.js +25 -0
  1187. package/out/zql/src/query/validate-input.js.map +1 -0
  1188. package/out/zqlite/src/database-storage.d.ts +1 -1
  1189. package/out/zqlite/src/database-storage.d.ts.map +1 -1
  1190. package/out/zqlite/src/database-storage.js +99 -102
  1191. package/out/zqlite/src/database-storage.js.map +1 -1
  1192. package/out/zqlite/src/db.js +241 -194
  1193. package/out/zqlite/src/db.js.map +1 -1
  1194. package/out/zqlite/src/explain-queries.js +13 -16
  1195. package/out/zqlite/src/explain-queries.js.map +1 -1
  1196. package/out/zqlite/src/internal/sql.js +15 -10
  1197. package/out/zqlite/src/internal/sql.js.map +1 -1
  1198. package/out/zqlite/src/internal/statement-cache.js +86 -110
  1199. package/out/zqlite/src/internal/statement-cache.js.map +1 -1
  1200. package/out/zqlite/src/query-builder.js +172 -143
  1201. package/out/zqlite/src/query-builder.js.map +1 -1
  1202. package/out/zqlite/src/query-delegate.d.ts +2 -2
  1203. package/out/zqlite/src/query-delegate.d.ts.map +1 -1
  1204. package/out/zqlite/src/query-delegate.js +53 -43
  1205. package/out/zqlite/src/query-delegate.js.map +1 -1
  1206. package/out/zqlite/src/sqlite-cost-model.js +94 -125
  1207. package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
  1208. package/out/zqlite/src/sqlite-stat-fanout.js +277 -353
  1209. package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
  1210. package/out/zqlite/src/table-source.d.ts +9 -4
  1211. package/out/zqlite/src/table-source.d.ts.map +1 -1
  1212. package/out/zqlite/src/table-source.js +424 -327
  1213. package/out/zqlite/src/table-source.js.map +1 -1
  1214. package/package.json +22 -25
  1215. package/out/chunk-424PT5DM.js +0 -23
  1216. package/out/chunk-424PT5DM.js.map +0 -7
  1217. package/out/chunk-AFADJQ2O.js +0 -1
  1218. package/out/chunk-AFADJQ2O.js.map +0 -7
  1219. package/out/chunk-ASRS2LFV.js.map +0 -7
  1220. package/out/chunk-EZM3XBAB.js.map +0 -7
  1221. package/out/chunk-FODUNUAD.js +0 -18850
  1222. package/out/chunk-FODUNUAD.js.map +0 -7
  1223. package/out/chunk-HCZQVP5R.js.map +0 -7
  1224. package/out/chunk-S633A55A.js +0 -495
  1225. package/out/chunk-S633A55A.js.map +0 -7
  1226. package/out/chunk-TAUDS4QP.js +0 -4129
  1227. package/out/chunk-TAUDS4QP.js.map +0 -7
  1228. package/out/chunk-VZOYWIRW.js.map +0 -7
  1229. package/out/chunk-WPAQ4EPM.js.map +0 -7
  1230. package/out/expo-sqlite.js +0 -11
  1231. package/out/expo-sqlite.js.map +0 -7
  1232. package/out/inspector-GP3CBZRU.js.map +0 -7
  1233. package/out/lazy-inspector-XLKVABX2.js +0 -575
  1234. package/out/lazy-inspector-XLKVABX2.js.map +0 -7
  1235. package/out/op-sqlite.js.map +0 -7
  1236. package/out/react-native.js +0 -25
  1237. package/out/react-native.js.map +0 -7
  1238. package/out/react.js.map +0 -7
  1239. package/out/shared/src/enum.js +0 -2
  1240. package/out/shared/src/enum.js.map +0 -1
  1241. package/out/shared/src/expand.js +0 -2
  1242. package/out/shared/src/expand.js.map +0 -1
  1243. package/out/shared/src/immutable.js +0 -2
  1244. package/out/shared/src/immutable.js.map +0 -1
  1245. package/out/shared/src/types.js +0 -2
  1246. package/out/shared/src/types.js.map +0 -1
  1247. package/out/shared/src/writable.js +0 -2
  1248. package/out/shared/src/writable.js.map +0 -1
  1249. package/out/solid.js.map +0 -7
  1250. package/out/sqlite.js +0 -15
  1251. package/out/sqlite.js.map +0 -7
  1252. package/out/zero/package.json +0 -195
  1253. package/out/zero/src/server/change-streamer.js +0 -2
  1254. package/out/zero/src/server/change-streamer.js.map +0 -1
  1255. package/out/zero/src/server/main.js +0 -2
  1256. package/out/zero/src/server/main.js.map +0 -1
  1257. package/out/zero/src/server/reaper.js +0 -2
  1258. package/out/zero/src/server/reaper.js.map +0 -1
  1259. package/out/zero/src/server/replicator.js +0 -2
  1260. package/out/zero/src/server/replicator.js.map +0 -1
  1261. package/out/zero/src/server/runner/main.js +0 -2
  1262. package/out/zero/src/server/runner/main.js.map +0 -1
  1263. package/out/zero/src/server/syncer.js +0 -2
  1264. package/out/zero/src/server/syncer.js.map +0 -1
  1265. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.js +0 -4
  1266. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.js.map +0 -1
  1267. package/out/zero-cache/src/services/change-source/protocol/mod.js +0 -5
  1268. package/out/zero-cache/src/services/change-source/protocol/mod.js.map +0 -1
  1269. package/out/zero-cache/src/services/service.js +0 -2
  1270. package/out/zero-cache/src/services/service.js.map +0 -1
  1271. package/out/zero-cache/src/services/view-syncer/key-columns.d.ts +0 -32
  1272. package/out/zero-cache/src/services/view-syncer/key-columns.d.ts.map +0 -1
  1273. package/out/zero-cache/src/services/view-syncer/key-columns.js +0 -75
  1274. package/out/zero-cache/src/services/view-syncer/key-columns.js.map +0 -1
  1275. package/out/zero-cache/src/types/satisfies.js +0 -2
  1276. package/out/zero-cache/src/types/satisfies.js.map +0 -1
  1277. package/out/zero-events/src/index.js +0 -2
  1278. package/out/zero-events/src/index.js.map +0 -1
  1279. package/out/zero-events/src/json.js +0 -2
  1280. package/out/zero-events/src/json.js.map +0 -1
  1281. package/out/zero-events/src/status.js +0 -3
  1282. package/out/zero-events/src/status.js.map +0 -1
  1283. package/out/zero-pg/src/mod.js +0 -6
  1284. package/out/zero-pg/src/mod.js.map +0 -1
  1285. package/out/zero-protocol/src/error-kind.js +0 -3
  1286. package/out/zero-protocol/src/error-kind.js.map +0 -1
  1287. package/out/zero-protocol/src/error-origin.js +0 -3
  1288. package/out/zero-protocol/src/error-origin.js.map +0 -1
  1289. package/out/zero-protocol/src/error-reason.js +0 -3
  1290. package/out/zero-protocol/src/error-reason.js.map +0 -1
  1291. package/out/zero-schema/src/table-schema.js +0 -7
  1292. package/out/zero-schema/src/table-schema.js.map +0 -1
  1293. package/out/zero-server/src/mod.js +0 -8
  1294. package/out/zero-server/src/mod.js.map +0 -1
  1295. package/out/zero-types/src/schema-value.js +0 -2
  1296. package/out/zero-types/src/schema-value.js.map +0 -1
  1297. package/out/zero-types/src/schema.js +0 -2
  1298. package/out/zero-types/src/schema.js.map +0 -1
  1299. package/out/zero-types/src/server-schema.js +0 -2
  1300. package/out/zero-types/src/server-schema.js.map +0 -1
  1301. package/out/zero.js +0 -95
  1302. package/out/zero.js.map +0 -7
  1303. package/out/zql/src/ivm/change.js +0 -2
  1304. package/out/zql/src/ivm/change.js.map +0 -1
  1305. package/out/zql/src/ivm/default-format.js +0 -2
  1306. package/out/zql/src/ivm/default-format.js.map +0 -1
  1307. package/out/zql/src/ivm/schema.js +0 -2
  1308. package/out/zql/src/ivm/schema.js.map +0 -1
  1309. package/out/zql/src/ivm/source.js +0 -2
  1310. package/out/zql/src/ivm/source.js.map +0 -1
  1311. package/out/zql/src/ivm/view.js +0 -2
  1312. package/out/zql/src/ivm/view.js.map +0 -1
  1313. package/out/zql/src/planner/planner-debug.js +0 -176
  1314. package/out/zql/src/planner/planner-debug.js.map +0 -1
  1315. package/out/zql/src/planner/planner-node.js +0 -2
  1316. package/out/zql/src/planner/planner-node.js.map +0 -1
  1317. package/out/zql/src/query/chained-query.d.ts +0 -35
  1318. package/out/zql/src/query/chained-query.d.ts.map +0 -1
  1319. package/out/zql/src/query/chained-query.js +0 -66
  1320. package/out/zql/src/query/chained-query.js.map +0 -1
  1321. package/out/zql/src/query/query-delegate.js +0 -2
  1322. package/out/zql/src/query/query-delegate.js.map +0 -1
  1323. package/out/zql/src/query/query.js +0 -8
  1324. package/out/zql/src/query/query.js.map +0 -1
  1325. package/out/zql/src/query/root-named-query.d.ts +0 -33
  1326. package/out/zql/src/query/root-named-query.d.ts.map +0 -1
  1327. package/out/zql/src/query/root-named-query.js +0 -95
  1328. package/out/zql/src/query/root-named-query.js.map +0 -1
  1329. package/out/zql/src/query/typed-view.js +0 -2
  1330. package/out/zql/src/query/typed-view.js.map +0 -1
  1331. package/out/zqlite/src/mod.js +0 -5
  1332. package/out/zqlite/src/mod.js.map +0 -1
@@ -1,745 +1,682 @@
1
1
  import { assert } from "../../../../shared/src/asserts.js";
2
- import { stringify, } from "../../../../shared/src/bigint-json.js";
2
+ import "../../../../shared/src/bigint-json.js";
3
3
  import { CustomKeyMap } from "../../../../shared/src/custom-key-map.js";
4
- import { deepEqual, } from "../../../../shared/src/json.js";
4
+ import { deepEqual } from "../../../../shared/src/json.js";
5
5
  import { must } from "../../../../shared/src/must.js";
6
- import { difference, intersection, union, } from "../../../../shared/src/set-utils.js";
6
+ import { union, intersection, difference } from "../../../../shared/src/set-utils.js";
7
7
  import { stringCompare } from "../../../../shared/src/string-compare.js";
8
- import { ErrorOrigin } from "../../../../zero-protocol/src/error-origin.js";
8
+ import { ZeroCache } from "../../../../zero-protocol/src/error-origin-enum.js";
9
9
  import { ProtocolError } from "../../../../zero-protocol/src/error.js";
10
- import { clampTTL, compareTTL, DEFAULT_TTL_MS, } from "../../../../zql/src/query/ttl.js";
10
+ import { DEFAULT_TTL_MS, compareTTL, clampTTL } from "../../../../zql/src/query/ttl.js";
11
11
  import { recordQuery } from "../../server/anonymous-otel-start.js";
12
12
  import { rowIDString } from "../../types/row-key.js";
13
13
  import { upstreamSchema } from "../../types/shards.js";
14
- import {} from "./cvr-store.js";
15
- import { KeyColumns } from "./key-columns.js";
16
- import { cmpVersions, maxVersion, oneAfter, } from "./schema/types.js";
14
+ import "./cvr-store.js";
15
+ import { cmpVersions, maxVersion, oneAfter } from "./schema/types.js";
17
16
  import { ttlClockAsNumber } from "./ttl-clock.js";
18
- const CLIENT_LMID_QUERY_ID = 'lmids';
19
- const CLIENT_MUTATION_RESULTS_QUERY_ID = 'mutationResults';
17
+ const CLIENT_LMID_QUERY_ID = "lmids";
18
+ const CLIENT_MUTATION_RESULTS_QUERY_ID = "mutationResults";
20
19
  function assertNotInternal(query) {
21
- if (query.type === 'internal') {
22
- // This should never happen for behaving clients, as query ids should be hashes.
23
- throw new Error(`Query ID ${query.id} is reserved for internal use`);
24
- }
20
+ if (query.type === "internal") {
21
+ throw new Error(`Query ID ${query.id} is reserved for internal use`);
22
+ }
25
23
  }
26
- export function getMutationResultsQuery(upstreamSchema, clientGroupID) {
27
- return {
28
- id: CLIENT_MUTATION_RESULTS_QUERY_ID,
29
- type: 'internal',
30
- ast: {
31
- schema: '',
32
- table: `${upstreamSchema}.mutations`,
33
- where: {
34
- type: 'and',
35
- conditions: [
36
- {
37
- type: 'simple',
38
- left: {
39
- type: 'column',
40
- name: 'clientGroupID',
41
- },
42
- op: '=',
43
- right: {
44
- type: 'literal',
45
- value: clientGroupID,
46
- },
47
- },
48
- ],
24
+ function getMutationResultsQuery(upstreamSchema2, clientGroupID) {
25
+ return {
26
+ id: CLIENT_MUTATION_RESULTS_QUERY_ID,
27
+ type: "internal",
28
+ ast: {
29
+ schema: "",
30
+ table: `${upstreamSchema2}.mutations`,
31
+ where: {
32
+ type: "and",
33
+ conditions: [
34
+ {
35
+ type: "simple",
36
+ left: {
37
+ type: "column",
38
+ name: "clientGroupID"
49
39
  },
50
- orderBy: [
51
- ['clientGroupID', 'asc'],
52
- ['clientID', 'asc'],
53
- ['mutationID', 'asc'],
54
- ],
55
- },
56
- };
57
- }
58
- /**
59
- * The base CVRUpdater contains logic common to the {@link CVRConfigDrivenUpdater} and
60
- * {@link CVRQueryDrivenUpdater}. The CVRUpdater class itself is exported for updating
61
- * the `lastActive` time of the CVR in the absence of any changes to the CVR contents.
62
- * Although activity is automatically tracked when the CVR contents change, there may be
63
- * edge cases in which a client actively connects to a CVR that doesn't itself change.
64
- * Calling `new CVRUpdater(...).flush()` will explicitly update the active index and
65
- * prevent the CVR from being garbage collected.
66
- */
67
- export class CVRUpdater {
68
- _orig;
69
- _cvr;
70
- _cvrStore;
71
- /**
72
- * @param cvrStore The CVRStore to use for storage
73
- * @param cvr The current CVR
74
- */
75
- constructor(cvrStore, cvr, replicaVersion) {
76
- this._cvrStore = cvrStore;
77
- this._orig = cvr;
78
- this._cvr = structuredClone(cvr); // mutable deep copy
79
- this._cvr.replicaVersion = replicaVersion;
80
- }
81
- _setVersion(version) {
82
- assert(cmpVersions(this._cvr.version, version) < 0);
83
- this._cvr.version = version;
84
- return version;
85
- }
86
- /**
87
- * Ensures that the new CVR has a higher version than the original.
88
- * This method is idempotent in that it will always return the same
89
- * (possibly bumped) version.
90
- */
91
- _ensureNewVersion() {
92
- if (cmpVersions(this._orig.version, this._cvr.version) === 0) {
93
- this._setVersion(oneAfter(this._cvr.version));
94
- }
95
- return this._cvr.version;
96
- }
97
- async flush(lc, lastConnectTime, lastActive, ttlClock) {
98
- this._cvr.ttlClock = ttlClock;
99
- this._cvr.lastActive = lastActive;
100
- const flushed = await this._cvrStore.flush(lc, this._orig.version, this._cvr, lastConnectTime);
101
- if (!flushed) {
102
- return { cvr: this._orig, flushed: false };
103
- }
104
- return { cvr: this._cvr, flushed };
40
+ op: "=",
41
+ right: {
42
+ type: "literal",
43
+ value: clientGroupID
44
+ }
45
+ }
46
+ ]
47
+ },
48
+ orderBy: [
49
+ ["clientGroupID", "asc"],
50
+ ["clientID", "asc"],
51
+ ["mutationID", "asc"]
52
+ ]
105
53
  }
54
+ };
106
55
  }
107
- /**
108
- * A {@link CVRConfigDrivenUpdater} is used for updating a CVR with config-driven
109
- * changes. Note that this may result in row deletion (e.g. if queries get dropped),
110
- * but the `stateVersion` of the CVR does not change.
111
- */
112
- export class CVRConfigDrivenUpdater extends CVRUpdater {
113
- #shard;
114
- constructor(cvrStore, cvr, shard) {
115
- super(cvrStore, cvr, cvr.replicaVersion);
116
- this.#shard = shard;
56
+ class CVRUpdater {
57
+ _orig;
58
+ _cvr;
59
+ _cvrStore;
60
+ /**
61
+ * @param cvrStore The CVRStore to use for storage
62
+ * @param cvr The current CVR
63
+ */
64
+ constructor(cvrStore, cvr, replicaVersion) {
65
+ this._cvrStore = cvrStore;
66
+ this._orig = cvr;
67
+ this._cvr = structuredClone(cvr);
68
+ this._cvr.replicaVersion = replicaVersion;
69
+ }
70
+ _setVersion(version) {
71
+ assert(cmpVersions(this._cvr.version, version) < 0);
72
+ this._cvr.version = version;
73
+ return version;
74
+ }
75
+ /**
76
+ * Ensures that the new CVR has a higher version than the original.
77
+ * This method is idempotent in that it will always return the same
78
+ * (possibly bumped) version.
79
+ */
80
+ _ensureNewVersion() {
81
+ if (cmpVersions(this._orig.version, this._cvr.version) === 0) {
82
+ this._setVersion(oneAfter(this._cvr.version));
117
83
  }
118
- ensureClient(id) {
119
- let client = this._cvr.clients[id];
120
- if (client) {
121
- return client;
122
- }
123
- // Add the ClientRecord and PutPatch
124
- client = { id, desiredQueryIDs: [] };
125
- this._cvr.clients[id] = client;
126
- this._ensureNewVersion();
127
- this._cvrStore.insertClient(client);
128
- if (!this._cvr.queries[CLIENT_LMID_QUERY_ID]) {
129
- const lmidsQuery = {
130
- id: CLIENT_LMID_QUERY_ID,
131
- ast: {
132
- schema: '',
133
- table: `${upstreamSchema(this.#shard)}.clients`,
134
- where: {
135
- type: 'simple',
136
- left: {
137
- type: 'column',
138
- name: 'clientGroupID',
139
- },
140
- op: '=',
141
- right: {
142
- type: 'literal',
143
- value: this._cvr.id,
144
- },
145
- },
146
- orderBy: [
147
- ['clientGroupID', 'asc'],
148
- ['clientID', 'asc'],
149
- ],
150
- },
151
- type: 'internal',
152
- };
153
- this._cvr.queries[CLIENT_LMID_QUERY_ID] = lmidsQuery;
154
- this._cvrStore.putQuery(lmidsQuery);
155
- }
156
- if (!this._cvr.queries[CLIENT_MUTATION_RESULTS_QUERY_ID]) {
157
- const mutationResultsQuery = getMutationResultsQuery(upstreamSchema(this.#shard), this._cvr.id);
158
- this._cvr.queries[CLIENT_MUTATION_RESULTS_QUERY_ID] =
159
- mutationResultsQuery;
160
- this._cvrStore.putQuery(mutationResultsQuery);
161
- }
162
- return client;
84
+ return this._cvr.version;
85
+ }
86
+ async flush(lc, lastConnectTime, lastActive, ttlClock) {
87
+ this._cvr.ttlClock = ttlClock;
88
+ this._cvr.lastActive = lastActive;
89
+ const flushed = await this._cvrStore.flush(
90
+ lc,
91
+ this._orig.version,
92
+ this._cvr,
93
+ lastConnectTime
94
+ );
95
+ if (!flushed) {
96
+ return { cvr: this._orig, flushed: false };
163
97
  }
164
- setClientSchema(lc, clientSchema) {
165
- if (this._cvr.clientSchema === null) {
166
- this._cvr.clientSchema = clientSchema;
167
- this._cvrStore.putInstance(this._cvr);
168
- }
169
- else if (!deepEqual(this._cvr.clientSchema, clientSchema)) {
170
- // This should not be possible with a correct Zero client, as clients
171
- // of a CVR should all have the same schema (given that the schema hash
172
- // is part of the idb key). In fact, clients joining an existing group
173
- // (i.e. non-empty baseCookie) do not send the clientSchema message.
174
- lc.warn?.(`New schema ${JSON.stringify(clientSchema)} does not match existing schema ${JSON.stringify(this._cvr.clientSchema)}`);
175
- throw new ProtocolError({
176
- kind: 'InvalidConnectionRequest',
177
- message: `Provided schema does not match previous schema`,
178
- origin: ErrorOrigin.ZeroCache,
179
- });
180
- }
98
+ return { cvr: this._cvr, flushed };
99
+ }
100
+ }
101
+ class CVRConfigDrivenUpdater extends CVRUpdater {
102
+ #shard;
103
+ constructor(cvrStore, cvr, shard) {
104
+ super(cvrStore, cvr, cvr.replicaVersion);
105
+ this.#shard = shard;
106
+ }
107
+ ensureClient(id) {
108
+ let client = this._cvr.clients[id];
109
+ if (client) {
110
+ return client;
181
111
  }
182
- putDesiredQueries(clientID, queries) {
183
- const patches = [];
184
- const client = this.ensureClient(clientID);
185
- const current = new Set(client.desiredQueryIDs);
186
- // Find the new/changed desired queries.
187
- const needed = new Set();
188
- const recordQueryForTelemetry = (q) => {
189
- const { ast, name, args } = q;
190
- if (ast) {
191
- recordQuery('crud');
192
- }
193
- else if (name && args) {
194
- recordQuery('custom');
195
- }
196
- };
197
- for (const q of queries) {
198
- const { hash, ttl = DEFAULT_TTL_MS } = q;
199
- const query = this._cvr.queries[hash];
200
- if (!query) {
201
- // New query - record for telemetry
202
- recordQueryForTelemetry(q);
203
- needed.add(hash);
204
- continue;
205
- }
206
- if (query.type === 'internal') {
207
- continue;
208
- }
209
- const oldClientState = query.clientState[clientID];
210
- // Old query was inactivated or never desired by this client.
211
- if (!oldClientState || oldClientState.inactivatedAt !== undefined) {
212
- // Reactivated query - record for telemetry
213
- recordQueryForTelemetry(q);
214
- needed.add(hash);
215
- continue;
216
- }
217
- if (compareTTL(ttl, oldClientState.ttl) > 0) {
218
- // TTL update only - don't record for telemetry
219
- needed.add(hash);
112
+ client = { id, desiredQueryIDs: [] };
113
+ this._cvr.clients[id] = client;
114
+ this._ensureNewVersion();
115
+ this._cvrStore.insertClient(client);
116
+ if (!this._cvr.queries[CLIENT_LMID_QUERY_ID]) {
117
+ const lmidsQuery = {
118
+ id: CLIENT_LMID_QUERY_ID,
119
+ ast: {
120
+ schema: "",
121
+ table: `${upstreamSchema(this.#shard)}.clients`,
122
+ where: {
123
+ type: "simple",
124
+ left: {
125
+ type: "column",
126
+ name: "clientGroupID"
127
+ },
128
+ op: "=",
129
+ right: {
130
+ type: "literal",
131
+ value: this._cvr.id
220
132
  }
221
- }
222
- if (needed.size === 0) {
223
- return patches;
224
- }
225
- const newVersion = this._ensureNewVersion();
226
- client.desiredQueryIDs = [...union(current, needed)].sort(stringCompare);
227
- for (const id of needed) {
228
- const q = must(queries.find(({ hash }) => hash === id));
229
- const { ast, name, args } = q;
230
- const ttl = clampTTL(q.ttl ?? DEFAULT_TTL_MS);
231
- const query = this._cvr.queries[id] ?? newQueryRecord(id, ast, name, args);
232
- assertNotInternal(query);
233
- const inactivatedAt = undefined;
234
- query.clientState[clientID] = {
235
- inactivatedAt,
236
- ttl,
237
- version: newVersion,
238
- };
239
- this._cvr.queries[id] = query;
240
- patches.push({
241
- toVersion: newVersion,
242
- patch: { type: 'query', op: 'put', id, clientID },
243
- });
244
- this._cvrStore.putQuery(query);
245
- this._cvrStore.putDesiredQuery(newVersion, query, client, false, inactivatedAt, ttl);
246
- }
247
- return patches;
248
- }
249
- markDesiredQueriesAsInactive(clientID, queryHashes, ttlClock) {
250
- return this.#deleteQueries(clientID, queryHashes, ttlClock);
133
+ },
134
+ orderBy: [
135
+ ["clientGroupID", "asc"],
136
+ ["clientID", "asc"]
137
+ ]
138
+ },
139
+ type: "internal"
140
+ };
141
+ this._cvr.queries[CLIENT_LMID_QUERY_ID] = lmidsQuery;
142
+ this._cvrStore.putQuery(lmidsQuery);
251
143
  }
252
- deleteDesiredQueries(clientID, queryHashes) {
253
- return this.#deleteQueries(clientID, queryHashes, undefined);
144
+ if (!this._cvr.queries[CLIENT_MUTATION_RESULTS_QUERY_ID]) {
145
+ const mutationResultsQuery = getMutationResultsQuery(
146
+ upstreamSchema(this.#shard),
147
+ this._cvr.id
148
+ );
149
+ this._cvr.queries[CLIENT_MUTATION_RESULTS_QUERY_ID] = mutationResultsQuery;
150
+ this._cvrStore.putQuery(mutationResultsQuery);
254
151
  }
255
- #deleteQueries(clientID, queryHashes, inactivatedAt) {
256
- const patches = [];
257
- const client = this.ensureClient(clientID);
258
- const current = new Set(client.desiredQueryIDs);
259
- const unwanted = new Set(queryHashes);
260
- const remove = intersection(unwanted, current);
261
- if (remove.size === 0) {
262
- return patches;
263
- }
264
- const newVersion = this._ensureNewVersion();
265
- client.desiredQueryIDs = [...difference(current, remove)].sort(stringCompare);
266
- for (const id of remove) {
267
- const query = this._cvr.queries[id];
268
- if (!query) {
269
- continue; // Query itself has already been removed. Should not happen?
270
- }
271
- assertNotInternal(query);
272
- let ttl = DEFAULT_TTL_MS;
273
- if (inactivatedAt === undefined) {
274
- delete query.clientState[clientID];
275
- }
276
- else {
277
- // client state can be missing if the query never transformed so we never
278
- // recorded it.
279
- const clientState = query.clientState[clientID];
280
- if (clientState !== undefined) {
281
- assert(clientState.inactivatedAt === undefined, `Query ${id} is already inactivated`);
282
- // Clamp TTL to ensure we don't propagate historical unclamped values.
283
- ttl = clampTTL(clientState.ttl);
284
- query.clientState[clientID] = {
285
- inactivatedAt,
286
- ttl,
287
- version: newVersion,
288
- };
289
- }
290
- }
291
- this._cvrStore.putQuery(query);
292
- this._cvrStore.putDesiredQuery(newVersion, query, client, true, inactivatedAt, ttl);
293
- patches.push({
294
- toVersion: newVersion,
295
- patch: { type: 'query', op: 'del', id, clientID },
296
- });
297
- }
298
- return patches;
299
- }
300
- clearDesiredQueries(clientID) {
301
- const client = this.ensureClient(clientID);
302
- return this.#deleteQueries(clientID, client.desiredQueryIDs, undefined);
152
+ return client;
153
+ }
154
+ setClientSchema(lc, clientSchema) {
155
+ if (this._cvr.clientSchema === null) {
156
+ this._cvr.clientSchema = clientSchema;
157
+ this._cvrStore.putInstance(this._cvr);
158
+ } else if (!deepEqual(this._cvr.clientSchema, clientSchema)) {
159
+ lc.warn?.(
160
+ `New schema ${JSON.stringify(
161
+ clientSchema
162
+ )} does not match existing schema ${JSON.stringify(
163
+ this._cvr.clientSchema
164
+ )}`
165
+ );
166
+ throw new ProtocolError({
167
+ kind: "InvalidConnectionRequest",
168
+ message: `Provided schema does not match previous schema`,
169
+ origin: ZeroCache
170
+ });
303
171
  }
304
- deleteClient(clientID, ttlClock) {
305
- // clientID might not be part of this client group but if it is, this delete
306
- // may generate changes to the desired queries.
307
- const client = this._cvr.clients[clientID];
308
- if (!client) {
309
- // Clients in different client groups are no longer deleted, leaving
310
- // cleanup to inactive CVR purging logic.
311
- return [];
312
- }
313
- // When a client is deleted we mark all of its desired queries as inactive.
314
- // They will then be removed when the queries expire.
315
- const patches = this.markDesiredQueriesAsInactive(clientID, client.desiredQueryIDs, ttlClock);
316
- delete this._cvr.clients[clientID];
317
- this._cvrStore.deleteClient(clientID);
318
- return patches;
172
+ }
173
+ putDesiredQueries(clientID, queries) {
174
+ const patches = [];
175
+ const client = this.ensureClient(clientID);
176
+ const current = new Set(client.desiredQueryIDs);
177
+ const needed = /* @__PURE__ */ new Set();
178
+ const recordQueryForTelemetry = (q) => {
179
+ const { ast, name, args } = q;
180
+ if (ast) {
181
+ recordQuery("crud");
182
+ } else if (name && args) {
183
+ recordQuery("custom");
184
+ }
185
+ };
186
+ for (const q of queries) {
187
+ const { hash, ttl = DEFAULT_TTL_MS } = q;
188
+ const query = this._cvr.queries[hash];
189
+ if (!query) {
190
+ recordQueryForTelemetry(q);
191
+ needed.add(hash);
192
+ continue;
193
+ }
194
+ if (query.type === "internal") {
195
+ continue;
196
+ }
197
+ const oldClientState = query.clientState[clientID];
198
+ if (!oldClientState || oldClientState.inactivatedAt !== void 0) {
199
+ recordQueryForTelemetry(q);
200
+ needed.add(hash);
201
+ continue;
202
+ }
203
+ if (compareTTL(ttl, oldClientState.ttl) > 0) {
204
+ needed.add(hash);
205
+ }
319
206
  }
320
- }
321
- /**
322
- * A {@link CVRQueryDrivenUpdater} is used for updating a CVR after making queries.
323
- * The caller should invoke:
324
- *
325
- * * {@link trackQueries} for queries that are being executed or removed.
326
- * * {@link received} for all rows received from the executed queries
327
- * * {@link deleteUnreferencedRows} to remove any rows that have
328
- * fallen out of the query result view.
329
- * * {@link flush}
330
- *
331
- * After flushing, the caller should perform any necessary catchup of
332
- * config and row patches for clients that are behind. See
333
- * {@link CVRStore.catchupConfigPatches} and {@link CVRStore.catchupRowPatches}.
334
- */
335
- export class CVRQueryDrivenUpdater extends CVRUpdater {
336
- #removedOrExecutedQueryIDs = new Set();
337
- #receivedRows = new CustomKeyMap(rowIDString);
338
- #replacedRows = new CustomKeyMap(rowIDString);
339
- #lastPatches = new CustomKeyMap(rowIDString);
340
- #existingRows = undefined;
341
- /**
342
- * @param stateVersion The `stateVersion` at which the queries were executed.
343
- */
344
- constructor(cvrStore, cvr, stateVersion, replicaVersion) {
345
- super(cvrStore, cvr, replicaVersion);
346
- assert(
347
- // We should either be setting the cvr.replicaVersion for the first time, or it should
348
- // be something newer than the current cvr.replicaVersion. Otherwise, the CVR should
349
- // have been rejected by the ViewSyncer.
350
- (cvr.replicaVersion ?? replicaVersion) <= replicaVersion, `Cannot sync from an older replicaVersion: CVR=${cvr.replicaVersion}, DB=${replicaVersion}`);
351
- assert(stateVersion >= cvr.version.stateVersion);
352
- if (stateVersion > cvr.version.stateVersion) {
353
- this._setVersion({ stateVersion });
354
- }
207
+ if (needed.size === 0) {
208
+ return patches;
355
209
  }
356
- /**
357
- * Initiates the tracking of the specified `executed` and `removed` queries.
358
- * This kicks of a lookup of existing {@link RowRecord}s currently associated
359
- * with those queries, which will be used to reconcile the rows to keep
360
- * after all rows have been {@link received()}.
361
- *
362
- * "transformed" queries are queries that are currently
363
- * gotten and running in the pipeline driver but
364
- * received a new transformation hash due to an auth token
365
- * update.
366
- *
367
- * @returns The new CVRVersion to be used when all changes are committed.
368
- */
369
- trackQueries(lc, executed, removed) {
370
- assert(this.#existingRows === undefined, `trackQueries already called`);
371
- const queryPatches = [
372
- executed.map(q => this.#trackExecuted(q.id, q.transformationHash)),
373
- removed.map(q => this.#trackRemoved(q.id)),
374
- ].flat(2);
375
- this.#existingRows = this.#lookupRowsForExecutedAndRemovedQueries(lc);
376
- return {
377
- newVersion: this._cvr.version,
378
- queryPatches: queryPatches.map(patch => ({
379
- patch,
380
- toVersion: this._cvr.version,
381
- })),
382
- };
210
+ const newVersion = this._ensureNewVersion();
211
+ client.desiredQueryIDs = [...union(current, needed)].sort(stringCompare);
212
+ for (const id of needed) {
213
+ const q = must(queries.find(({ hash }) => hash === id));
214
+ const { ast, name, args } = q;
215
+ const ttl = clampTTL(q.ttl ?? DEFAULT_TTL_MS);
216
+ const query = this._cvr.queries[id] ?? newQueryRecord(id, ast, name, args);
217
+ assertNotInternal(query);
218
+ const inactivatedAt = void 0;
219
+ query.clientState[clientID] = {
220
+ inactivatedAt,
221
+ ttl,
222
+ version: newVersion
223
+ };
224
+ this._cvr.queries[id] = query;
225
+ patches.push({
226
+ toVersion: newVersion,
227
+ patch: { type: "query", op: "put", id, clientID }
228
+ });
229
+ this._cvrStore.putQuery(query);
230
+ this._cvrStore.putDesiredQuery(
231
+ newVersion,
232
+ query,
233
+ client,
234
+ false,
235
+ inactivatedAt,
236
+ ttl
237
+ );
383
238
  }
384
- async #lookupRowsForExecutedAndRemovedQueries(lc) {
385
- const results = new CustomKeyMap(rowIDString);
386
- if (this.#removedOrExecutedQueryIDs.size === 0) {
387
- // Query-less update. This can happen for config only changes.
388
- return [];
389
- }
390
- // Utilizes the in-memory RowCache.
391
- const allRowRecords = (await this._cvrStore.getRowRecords()).values();
392
- let total = 0;
393
- for (const existing of allRowRecords) {
394
- total++;
395
- assert(existing.refCounts !== null); // allRowRecords does not include null.
396
- for (const id of Object.keys(existing.refCounts)) {
397
- if (this.#removedOrExecutedQueryIDs.has(id)) {
398
- results.set(existing.id, existing);
399
- break;
400
- }
401
- }
402
- }
403
- lc.debug?.(`found ${results.size} (of ${total}) rows for executed / removed queries ${[
404
- ...this.#removedOrExecutedQueryIDs,
405
- ]}`);
406
- return results.values();
239
+ return patches;
240
+ }
241
+ markDesiredQueriesAsInactive(clientID, queryHashes, ttlClock) {
242
+ return this.#deleteQueries(clientID, queryHashes, ttlClock);
243
+ }
244
+ deleteDesiredQueries(clientID, queryHashes) {
245
+ return this.#deleteQueries(clientID, queryHashes, void 0);
246
+ }
247
+ #deleteQueries(clientID, queryHashes, inactivatedAt) {
248
+ const patches = [];
249
+ const client = this.ensureClient(clientID);
250
+ const current = new Set(client.desiredQueryIDs);
251
+ const unwanted = new Set(queryHashes);
252
+ const remove = intersection(unwanted, current);
253
+ if (remove.size === 0) {
254
+ return patches;
407
255
  }
408
- /**
409
- * Tracks an executed query, ensures that it is marked as "gotten",
410
- * updating the CVR and creating put patches if necessary.
411
- *
412
- * This must be called for all executed queries.
413
- */
414
- #trackExecuted(queryID, transformationHash) {
415
- assert(!this.#removedOrExecutedQueryIDs.has(queryID));
416
- this.#removedOrExecutedQueryIDs.add(queryID);
417
- let gotQueryPatch;
418
- const query = this._cvr.queries[queryID];
419
- if (query.transformationHash !== transformationHash) {
420
- const transformationVersion = this._ensureNewVersion();
421
- if (query.type !== 'internal' && query.patchVersion === undefined) {
422
- // client query: desired -> gotten
423
- query.patchVersion = transformationVersion;
424
- gotQueryPatch = {
425
- type: 'query',
426
- op: 'put',
427
- id: query.id,
428
- };
429
- }
430
- query.transformationHash = transformationHash;
431
- query.transformationVersion = transformationVersion;
432
- this._cvrStore.updateQuery(query);
256
+ const newVersion = this._ensureNewVersion();
257
+ client.desiredQueryIDs = [...difference(current, remove)].sort(
258
+ stringCompare
259
+ );
260
+ for (const id of remove) {
261
+ const query = this._cvr.queries[id];
262
+ if (!query) {
263
+ continue;
264
+ }
265
+ assertNotInternal(query);
266
+ let ttl = DEFAULT_TTL_MS;
267
+ if (inactivatedAt === void 0) {
268
+ delete query.clientState[clientID];
269
+ } else {
270
+ const clientState = query.clientState[clientID];
271
+ if (clientState !== void 0) {
272
+ assert(
273
+ clientState.inactivatedAt === void 0,
274
+ `Query ${id} is already inactivated`
275
+ );
276
+ ttl = clampTTL(clientState.ttl);
277
+ query.clientState[clientID] = {
278
+ inactivatedAt,
279
+ ttl,
280
+ version: newVersion
281
+ };
433
282
  }
434
- return gotQueryPatch ? [gotQueryPatch] : [];
283
+ }
284
+ this._cvrStore.putQuery(query);
285
+ this._cvrStore.putDesiredQuery(
286
+ newVersion,
287
+ query,
288
+ client,
289
+ true,
290
+ inactivatedAt,
291
+ ttl
292
+ );
293
+ patches.push({
294
+ toVersion: newVersion,
295
+ patch: { type: "query", op: "del", id, clientID }
296
+ });
435
297
  }
436
- /**
437
- * Tracks a query removed from the "gotten" set. In addition to producing the
438
- * appropriate patches for deleting the query, the removed query is taken into
439
- * account when computing the final row records in
440
- * {@link deleteUnreferencedRows}.
441
- * Namely, any rows with columns that are no longer referenced by a
442
- * query are deleted.
443
- *
444
- * This must only be called on queries that are not "desired" by any client.
445
- */
446
- #trackRemoved(queryID) {
447
- const query = this._cvr.queries[queryID];
448
- assertNotInternal(query);
449
- assert(!this.#removedOrExecutedQueryIDs.has(queryID));
450
- this.#removedOrExecutedQueryIDs.add(queryID);
451
- delete this._cvr.queries[queryID];
452
- const newVersion = this._ensureNewVersion();
453
- const queryPatch = { type: 'query', op: 'del', id: queryID };
454
- this._cvrStore.markQueryAsDeleted(newVersion, queryPatch);
455
- return [queryPatch];
298
+ return patches;
299
+ }
300
+ clearDesiredQueries(clientID) {
301
+ const client = this.ensureClient(clientID);
302
+ return this.#deleteQueries(clientID, client.desiredQueryIDs, void 0);
303
+ }
304
+ deleteClient(clientID, ttlClock) {
305
+ const client = this._cvr.clients[clientID];
306
+ if (!client) {
307
+ return [];
456
308
  }
457
- /**
458
- * Asserts that a new version has already been set.
459
- *
460
- * After {@link #executed} and {@link #removed} are called, we must have properly
461
- * decided on the final CVR version because the poke-start message declares the
462
- * final cookie (i.e. version), and that must be sent before any poke parts
463
- * generated from {@link received} are sent.
464
- */
465
- #assertNewVersion() {
466
- assert(cmpVersions(this._orig.version, this._cvr.version) < 0);
467
- return this._cvr.version;
309
+ const patches = this.markDesiredQueriesAsInactive(
310
+ clientID,
311
+ client.desiredQueryIDs,
312
+ ttlClock
313
+ );
314
+ delete this._cvr.clients[clientID];
315
+ this._cvrStore.deleteClient(clientID);
316
+ return patches;
317
+ }
318
+ }
319
+ class CVRQueryDrivenUpdater extends CVRUpdater {
320
+ #removedOrExecutedQueryIDs = /* @__PURE__ */ new Set();
321
+ #receivedRows = new CustomKeyMap(
322
+ rowIDString
323
+ );
324
+ #lastPatches = new CustomKeyMap(rowIDString);
325
+ #existingRows = void 0;
326
+ /**
327
+ * @param stateVersion The `stateVersion` at which the queries were executed.
328
+ */
329
+ constructor(cvrStore, cvr, stateVersion, replicaVersion) {
330
+ super(cvrStore, cvr, replicaVersion);
331
+ assert(
332
+ // We should either be setting the cvr.replicaVersion for the first time, or it should
333
+ // be something newer than the current cvr.replicaVersion. Otherwise, the CVR should
334
+ // have been rejected by the ViewSyncer.
335
+ (cvr.replicaVersion ?? replicaVersion) <= replicaVersion,
336
+ `Cannot sync from an older replicaVersion: CVR=${cvr.replicaVersion}, DB=${replicaVersion}`
337
+ );
338
+ assert(stateVersion >= cvr.version.stateVersion);
339
+ if (stateVersion > cvr.version.stateVersion) {
340
+ this._setVersion({ stateVersion });
468
341
  }
469
- updatedVersion() {
470
- return this._cvr.version;
342
+ }
343
+ /**
344
+ * Initiates the tracking of the specified `executed` and `removed` queries.
345
+ * This kicks of a lookup of existing {@link RowRecord}s currently associated
346
+ * with those queries, which will be used to reconcile the rows to keep
347
+ * after all rows have been {@link received()}.
348
+ *
349
+ * "transformed" queries are queries that are currently
350
+ * gotten and running in the pipeline driver but
351
+ * received a new transformation hash due to an auth token
352
+ * update.
353
+ *
354
+ * @returns The new CVRVersion to be used when all changes are committed.
355
+ */
356
+ trackQueries(lc, executed, removed) {
357
+ assert(this.#existingRows === void 0, `trackQueries already called`);
358
+ const queryPatches = [
359
+ executed.map((q) => this.#trackExecuted(q.id, q.transformationHash)),
360
+ removed.map((q) => this.#trackRemoved(q.id))
361
+ ].flat(2);
362
+ this.#existingRows = this.#lookupRowsForExecutedAndRemovedQueries(lc);
363
+ return {
364
+ newVersion: this._cvr.version,
365
+ queryPatches: queryPatches.map((patch) => ({
366
+ patch,
367
+ toVersion: this._cvr.version
368
+ }))
369
+ };
370
+ }
371
+ async #lookupRowsForExecutedAndRemovedQueries(lc) {
372
+ const results = new CustomKeyMap(rowIDString);
373
+ if (this.#removedOrExecutedQueryIDs.size === 0) {
374
+ return [];
471
375
  }
472
- #keyColumns;
473
- /**
474
- * Tracks rows received from executing queries. This will update row records
475
- * and row patches if the received rows have a new version. The method also
476
- * returns (put) patches to be returned to update their state, versioned by
477
- * patchVersion so that only the patches new to the clients are sent.
478
- */
479
- async received(lc, rows) {
480
- const patches = [];
481
- const existingRows = await this._cvrStore.getRowRecords();
482
- this.#keyColumns ??= new KeyColumns(existingRows.values());
483
- for (const [id, update] of rows.entries()) {
484
- const { contents, version, refCounts } = update;
485
- let existing = existingRows.get(id);
486
- if (!existing && contents) {
487
- // See if the row being put is referenced in the CVR using a different ID.
488
- const oldID = this.#keyColumns.getOldRowID(id, contents);
489
- if (oldID) {
490
- existing = existingRows.get(oldID);
491
- if (existing && !this.#replacedRows.get(oldID)) {
492
- lc.debug?.(`replacing ${stringify(oldID)} with ${stringify(id)}`);
493
- this.#replacedRows.set(oldID, true);
494
- this._cvrStore.delRowRecord(oldID);
495
- // Force the updates for these rows to happen, even if they look like
496
- // no-ops on their own.
497
- this._cvrStore.forceUpdates(oldID, id);
498
- }
499
- }
500
- }
501
- // Accumulate all received refCounts to determine which rows to prune.
502
- const previouslyReceived = this.#receivedRows.get(id);
503
- const merged = previouslyReceived !== undefined
504
- ? mergeRefCounts(previouslyReceived, refCounts)
505
- : mergeRefCounts(existing?.refCounts, refCounts, this.#removedOrExecutedQueryIDs);
506
- this.#receivedRows.set(id, merged);
507
- const newRowVersion = merged === null ? undefined : version;
508
- const patchVersion = existing && existing.rowVersion === newRowVersion
509
- ? existing.patchVersion // existing row is unchanged
510
- : this.#assertNewVersion();
511
- // Note: for determining what to commit to the CVR store, use the
512
- // `version` of the update even if `merged` is null (i.e. don't
513
- // use `newRowVersion`). This will be deduped by the cvr-store flush
514
- // if it is redundant. In rare cases--namely, if the row key has
515
- // changed--we _do_ want to add row-put for the new row key with
516
- // `refCounts: null` in order to correctly record a delete patch
517
- // for that row, as the row with the old key will be removed.
518
- const rowVersion = version ?? existing?.rowVersion;
519
- if (rowVersion) {
520
- this._cvrStore.putRowRecord({
521
- id,
522
- rowVersion,
523
- patchVersion,
524
- refCounts: merged,
525
- });
526
- }
527
- else {
528
- // This means that a row that was not in the CVR was added during
529
- // this update, and then subsequently removed. Since there's no
530
- // corresponding row in the CVR itself, cancel the previous put.
531
- // Note that we still send a 'del' patch to the client in order to
532
- // cancel the previous 'put' patch.
533
- this._cvrStore.delRowRecord(id);
534
- }
535
- // Dedupe against the lastPatch sent for the row, and ensure that
536
- // toVersion never backtracks (lest it be undesirably filtered).
537
- const lastPatch = this.#lastPatches.get(id);
538
- const toVersion = maxVersion(patchVersion, lastPatch?.toVersion);
539
- if (merged === null) {
540
- // All refCounts have gone to zero, if row was previously synced
541
- // delete it.
542
- if (existing || previouslyReceived) {
543
- // dedupe
544
- if (lastPatch?.rowVersion !== null) {
545
- patches.push({
546
- patch: {
547
- type: 'row',
548
- op: 'del',
549
- id,
550
- },
551
- toVersion,
552
- });
553
- this.#lastPatches.set(id, { rowVersion: null, toVersion });
554
- }
555
- }
556
- }
557
- else if (contents) {
558
- assert(rowVersion);
559
- // dedupe
560
- if (!lastPatch?.rowVersion || lastPatch.rowVersion < rowVersion) {
561
- patches.push({
562
- patch: {
563
- type: 'row',
564
- op: 'put',
565
- id,
566
- contents,
567
- },
568
- toVersion,
569
- });
570
- this.#lastPatches.set(id, { rowVersion, toVersion });
571
- }
572
- }
376
+ const allRowRecords = (await this._cvrStore.getRowRecords()).values();
377
+ let total = 0;
378
+ for (const existing of allRowRecords) {
379
+ total++;
380
+ assert(existing.refCounts !== null);
381
+ for (const id of Object.keys(existing.refCounts)) {
382
+ if (this.#removedOrExecutedQueryIDs.has(id)) {
383
+ results.set(existing.id, existing);
384
+ break;
573
385
  }
574
- return patches;
386
+ }
575
387
  }
576
- /**
577
- * Computes and updates the row records based on:
578
- * * The {@link #executed} queries
579
- * * The {@link #removed} queries
580
- * * The {@link received} rows
581
- *
582
- * Returns the final delete and patch ops that must be sent to the client
583
- * to delete rows that are no longer referenced by any query.
584
- *
585
- * This is Step [5] of the
586
- * [CVR Sync Algorithm](https://www.notion.so/replicache/Sync-and-Client-View-Records-CVR-a18e02ec3ec543449ea22070855ff33d?pvs=4#7874f9b80a514be2b8cd5cf538b88d37).
587
- */
588
- async deleteUnreferencedRows(lc) {
589
- if (this.#removedOrExecutedQueryIDs.size === 0) {
590
- // Query-less update. This can happen for config-only changes.
591
- assert(this.#receivedRows.size === 0);
592
- return [];
593
- }
594
- // patches to send to the client.
595
- const patches = [];
596
- const start = Date.now();
597
- assert(this.#existingRows, `trackQueries() was not called`);
598
- for (const existing of await this.#existingRows) {
599
- const deletedID = this.#deleteUnreferencedRow(existing);
600
- if (deletedID === null) {
601
- continue;
602
- }
388
+ lc.debug?.(
389
+ `found ${results.size} (of ${total}) rows for executed / removed queries ${[
390
+ ...this.#removedOrExecutedQueryIDs
391
+ ]}`
392
+ );
393
+ return results.values();
394
+ }
395
+ /**
396
+ * Tracks an executed query, ensures that it is marked as "gotten",
397
+ * updating the CVR and creating put patches if necessary.
398
+ *
399
+ * This must be called for all executed queries.
400
+ */
401
+ #trackExecuted(queryID, transformationHash) {
402
+ assert(!this.#removedOrExecutedQueryIDs.has(queryID));
403
+ this.#removedOrExecutedQueryIDs.add(queryID);
404
+ let gotQueryPatch;
405
+ const query = this._cvr.queries[queryID];
406
+ if (query.transformationHash !== transformationHash) {
407
+ const transformationVersion = this._ensureNewVersion();
408
+ if (query.type !== "internal" && query.patchVersion === void 0) {
409
+ query.patchVersion = transformationVersion;
410
+ gotQueryPatch = {
411
+ type: "query",
412
+ op: "put",
413
+ id: query.id
414
+ };
415
+ }
416
+ query.transformationHash = transformationHash;
417
+ query.transformationVersion = transformationVersion;
418
+ this._cvrStore.updateQuery(query);
419
+ }
420
+ return gotQueryPatch ? [gotQueryPatch] : [];
421
+ }
422
+ /**
423
+ * Tracks a query removed from the "gotten" set. In addition to producing the
424
+ * appropriate patches for deleting the query, the removed query is taken into
425
+ * account when computing the final row records in
426
+ * {@link deleteUnreferencedRows}.
427
+ * Namely, any rows with columns that are no longer referenced by a
428
+ * query are deleted.
429
+ *
430
+ * This must only be called on queries that are not "desired" by any client.
431
+ */
432
+ #trackRemoved(queryID) {
433
+ const query = this._cvr.queries[queryID];
434
+ assertNotInternal(query);
435
+ assert(!this.#removedOrExecutedQueryIDs.has(queryID));
436
+ this.#removedOrExecutedQueryIDs.add(queryID);
437
+ delete this._cvr.queries[queryID];
438
+ const newVersion = this._ensureNewVersion();
439
+ const queryPatch = { type: "query", op: "del", id: queryID };
440
+ this._cvrStore.markQueryAsDeleted(newVersion, queryPatch);
441
+ return [queryPatch];
442
+ }
443
+ /**
444
+ * Asserts that a new version has already been set.
445
+ *
446
+ * After {@link #executed} and {@link #removed} are called, we must have properly
447
+ * decided on the final CVR version because the poke-start message declares the
448
+ * final cookie (i.e. version), and that must be sent before any poke parts
449
+ * generated from {@link received} are sent.
450
+ */
451
+ #assertNewVersion() {
452
+ assert(cmpVersions(this._orig.version, this._cvr.version) < 0);
453
+ return this._cvr.version;
454
+ }
455
+ updatedVersion() {
456
+ return this._cvr.version;
457
+ }
458
+ /**
459
+ * Tracks rows received from executing queries. This will update row records
460
+ * and row patches if the received rows have a new version. The method also
461
+ * returns (put) patches to be returned to update their state, versioned by
462
+ * patchVersion so that only the patches new to the clients are sent.
463
+ */
464
+ async received(_lc, rows) {
465
+ const patches = [];
466
+ const existingRows = await this._cvrStore.getRowRecords();
467
+ for (const [id, update] of rows.entries()) {
468
+ const { contents, version, refCounts } = update;
469
+ let existing = existingRows.get(id);
470
+ const previouslyReceived = this.#receivedRows.get(id);
471
+ const merged = previouslyReceived !== void 0 ? mergeRefCounts(previouslyReceived, refCounts) : mergeRefCounts(
472
+ existing?.refCounts,
473
+ refCounts,
474
+ this.#removedOrExecutedQueryIDs
475
+ );
476
+ this.#receivedRows.set(id, merged);
477
+ const newRowVersion = merged === null ? void 0 : version;
478
+ const patchVersion = existing && existing.rowVersion === newRowVersion ? existing.patchVersion : this.#assertNewVersion();
479
+ const rowVersion = version ?? existing?.rowVersion;
480
+ if (rowVersion) {
481
+ this._cvrStore.putRowRecord({
482
+ id,
483
+ rowVersion,
484
+ patchVersion,
485
+ refCounts: merged
486
+ });
487
+ } else {
488
+ this._cvrStore.delRowRecord(id);
489
+ }
490
+ const lastPatch = this.#lastPatches.get(id);
491
+ const toVersion = maxVersion(patchVersion, lastPatch?.toVersion);
492
+ if (merged === null) {
493
+ if (existing || previouslyReceived) {
494
+ if (lastPatch?.rowVersion !== null) {
603
495
  patches.push({
604
- toVersion: this._cvr.version,
605
- patch: { type: 'row', op: 'del', id: deletedID },
496
+ patch: {
497
+ type: "row",
498
+ op: "del",
499
+ id
500
+ },
501
+ toVersion
606
502
  });
503
+ this.#lastPatches.set(id, { rowVersion: null, toVersion });
504
+ }
607
505
  }
608
- lc?.debug?.(`computed ${patches.length} delete patches (${Date.now() - start} ms)`);
609
- return patches;
610
- }
611
- #deleteUnreferencedRow(existing) {
612
- if (this.#receivedRows.get(existing.id) ||
613
- this.#replacedRows.get(existing.id)) {
614
- return null;
506
+ } else if (contents) {
507
+ assert(rowVersion);
508
+ if (!lastPatch?.rowVersion || lastPatch.rowVersion < rowVersion) {
509
+ patches.push({
510
+ patch: {
511
+ type: "row",
512
+ op: "put",
513
+ id,
514
+ contents
515
+ },
516
+ toVersion
517
+ });
518
+ this.#lastPatches.set(id, { rowVersion, toVersion });
615
519
  }
616
- const newRefCounts = mergeRefCounts(existing.refCounts, undefined, this.#removedOrExecutedQueryIDs);
617
- // If a row is still referenced, we update the refCounts but not the
618
- // patchVersion (as the existence and contents of the row have not
619
- // changed from the clients' perspective). If the row is deleted, it
620
- // gets a new patchVersion (and corresponding poke).
621
- const patchVersion = newRefCounts
622
- ? existing.patchVersion
623
- : this.#assertNewVersion();
624
- const rowRecord = {
625
- ...existing,
626
- patchVersion,
627
- refCounts: newRefCounts,
628
- };
629
- this._cvrStore.putRowRecord(rowRecord);
630
- // Return the id to delete if no longer referenced.
631
- return newRefCounts ? null : existing.id;
520
+ }
632
521
  }
633
- }
634
- function mergeRefCounts(existing, received, removeHashes) {
635
- let merged = {};
636
- if (!existing) {
637
- merged = received ?? {};
522
+ return patches;
523
+ }
524
+ /**
525
+ * Computes and updates the row records based on:
526
+ * * The {@link #executed} queries
527
+ * * The {@link #removed} queries
528
+ * * The {@link received} rows
529
+ *
530
+ * Returns the final delete and patch ops that must be sent to the client
531
+ * to delete rows that are no longer referenced by any query.
532
+ *
533
+ * This is Step [5] of the
534
+ * [CVR Sync Algorithm](https://www.notion.so/replicache/Sync-and-Client-View-Records-CVR-a18e02ec3ec543449ea22070855ff33d?pvs=4#7874f9b80a514be2b8cd5cf538b88d37).
535
+ */
536
+ async deleteUnreferencedRows(lc) {
537
+ if (this.#removedOrExecutedQueryIDs.size === 0) {
538
+ assert(this.#receivedRows.size === 0);
539
+ return [];
638
540
  }
639
- else {
640
- [existing, received].forEach((refCounts, i) => {
641
- if (!refCounts) {
642
- return;
643
- }
644
- for (const [hash, count] of Object.entries(refCounts)) {
645
- if (i === 0 /* existing */ && removeHashes?.has(hash)) {
646
- continue; // removeHashes from existing row.
647
- }
648
- merged[hash] = (merged[hash] ?? 0) + count;
649
- if (merged[hash] === 0) {
650
- delete merged[hash];
651
- }
652
- }
653
- return merged;
654
- });
541
+ const patches = [];
542
+ const start = Date.now();
543
+ assert(this.#existingRows, `trackQueries() was not called`);
544
+ for (const existing of await this.#existingRows) {
545
+ const deletedID = this.#deleteUnreferencedRow(existing);
546
+ if (deletedID === null) {
547
+ continue;
548
+ }
549
+ patches.push({
550
+ toVersion: this._cvr.version,
551
+ patch: { type: "row", op: "del", id: deletedID }
552
+ });
655
553
  }
656
- return Object.values(merged).some(v => v > 0) ? merged : null;
554
+ lc?.debug?.(
555
+ `computed ${patches.length} delete patches (${Date.now() - start} ms)`
556
+ );
557
+ return patches;
558
+ }
559
+ #deleteUnreferencedRow(existing) {
560
+ if (this.#receivedRows.get(existing.id)) {
561
+ return null;
562
+ }
563
+ const newRefCounts = mergeRefCounts(
564
+ existing.refCounts,
565
+ void 0,
566
+ this.#removedOrExecutedQueryIDs
567
+ );
568
+ const patchVersion = newRefCounts ? existing.patchVersion : this.#assertNewVersion();
569
+ const rowRecord = {
570
+ ...existing,
571
+ patchVersion,
572
+ refCounts: newRefCounts
573
+ };
574
+ this._cvrStore.putRowRecord(rowRecord);
575
+ return newRefCounts ? null : existing.id;
576
+ }
657
577
  }
658
- /**
659
- * The query must be inactive for all clients to be considered inactive.
660
- * This is because expiration is defined that way: a query is expired for a client group
661
- * only if it is expired for all clients in the group.
662
- *
663
- * If all clients have inactivated the query, we return
664
- * the one with the expiration furthest in the future.
665
- */
666
- export function getInactiveQueries(cvr) {
667
- // We no longer support a TTL larger than 10 minutes.
668
- const inactive = new Map();
669
- for (const [queryID, query] of Object.entries(cvr.queries)) {
670
- if (query.type === 'internal') {
671
- continue;
672
- }
673
- for (const clientState of Object.values(query.clientState)) {
674
- // 1. Take the longest TTL
675
- // 2. If the query is not inactivated (for any client), do not return it
676
- const { inactivatedAt, ttl } = clientState;
677
- const existing = inactive.get(queryID);
678
- if (inactivatedAt === undefined) {
679
- if (existing) {
680
- inactive.delete(queryID);
681
- }
682
- break;
683
- }
684
- const clampedTTL = clampTTL(ttl);
685
- if (existing) {
686
- // The stored one might be too large because from a previous version of
687
- // zero
688
- const existingTTL = clampTTL(existing.ttl);
689
- // Use the last eviction time.
690
- if (existingTTL + ttlClockAsNumber(existing.inactivatedAt) <
691
- ttlClockAsNumber(inactivatedAt) + clampedTTL) {
692
- existing.ttl = clampedTTL;
693
- existing.inactivatedAt = inactivatedAt;
694
- }
695
- }
696
- else {
697
- inactive.set(queryID, {
698
- hash: queryID,
699
- inactivatedAt,
700
- ttl: clampedTTL,
701
- });
702
- }
578
+ function mergeRefCounts(existing, received, removeHashes) {
579
+ let merged = {};
580
+ if (!existing) {
581
+ merged = received ?? {};
582
+ } else {
583
+ [existing, received].forEach((refCounts, i) => {
584
+ if (!refCounts) {
585
+ return;
586
+ }
587
+ for (const [hash, count] of Object.entries(refCounts)) {
588
+ if (i === 0 && removeHashes?.has(hash)) {
589
+ continue;
703
590
  }
704
- }
705
- // First sort all the queries that have TTL. Oldest first.
706
- return [...inactive.values()].sort((a, b) => {
707
- if (a.ttl === b.ttl) {
708
- return (ttlClockAsNumber(a.inactivatedAt) - ttlClockAsNumber(b.inactivatedAt));
591
+ merged[hash] = (merged[hash] ?? 0) + count;
592
+ if (merged[hash] === 0) {
593
+ delete merged[hash];
709
594
  }
710
- return (ttlClockAsNumber(a.inactivatedAt) +
711
- a.ttl -
712
- ttlClockAsNumber(b.inactivatedAt) -
713
- b.ttl);
595
+ }
596
+ return merged;
714
597
  });
598
+ }
599
+ return Object.values(merged).some((v) => v > 0) ? merged : null;
715
600
  }
716
- export function nextEvictionTime(cvr) {
717
- let next;
718
- for (const { inactivatedAt, ttl } of getInactiveQueries(cvr)) {
719
- const expire = ttlClockAsNumber(inactivatedAt) + ttl;
720
- if (next === undefined || expire < next) {
721
- next = expire;
601
+ function getInactiveQueries(cvr) {
602
+ const inactive = /* @__PURE__ */ new Map();
603
+ for (const [queryID, query] of Object.entries(cvr.queries)) {
604
+ if (query.type === "internal") {
605
+ continue;
606
+ }
607
+ for (const clientState of Object.values(query.clientState)) {
608
+ const { inactivatedAt, ttl } = clientState;
609
+ const existing = inactive.get(queryID);
610
+ if (inactivatedAt === void 0) {
611
+ if (existing) {
612
+ inactive.delete(queryID);
613
+ }
614
+ break;
615
+ }
616
+ const clampedTTL = clampTTL(ttl);
617
+ if (existing) {
618
+ const existingTTL = clampTTL(existing.ttl);
619
+ if (existingTTL + ttlClockAsNumber(existing.inactivatedAt) < ttlClockAsNumber(inactivatedAt) + clampedTTL) {
620
+ existing.ttl = clampedTTL;
621
+ existing.inactivatedAt = inactivatedAt;
722
622
  }
623
+ } else {
624
+ inactive.set(queryID, {
625
+ hash: queryID,
626
+ inactivatedAt,
627
+ ttl: clampedTTL
628
+ });
629
+ }
723
630
  }
724
- return next;
631
+ }
632
+ return [...inactive.values()].sort((a, b) => {
633
+ if (a.ttl === b.ttl) {
634
+ return ttlClockAsNumber(a.inactivatedAt) - ttlClockAsNumber(b.inactivatedAt);
635
+ }
636
+ return ttlClockAsNumber(a.inactivatedAt) + a.ttl - ttlClockAsNumber(b.inactivatedAt) - b.ttl;
637
+ });
725
638
  }
726
- function newQueryRecord(id, ast, name, args) {
727
- if (ast !== undefined) {
728
- assert(name === undefined && args === undefined, 'Cannot provide name or args with ast');
729
- return {
730
- id,
731
- type: 'client',
732
- ast,
733
- clientState: {},
734
- };
639
+ function nextEvictionTime(cvr) {
640
+ let next;
641
+ for (const { inactivatedAt, ttl } of getInactiveQueries(cvr)) {
642
+ const expire = ttlClockAsNumber(inactivatedAt) + ttl;
643
+ if (next === void 0 || expire < next) {
644
+ next = expire;
735
645
  }
736
- assert(name !== undefined && args !== undefined, 'Must provide name and args');
646
+ }
647
+ return next;
648
+ }
649
+ function newQueryRecord(id, ast, name, args) {
650
+ if (ast !== void 0) {
651
+ assert(
652
+ name === void 0 && args === void 0,
653
+ "Cannot provide name or args with ast"
654
+ );
737
655
  return {
738
- id,
739
- type: 'custom',
740
- name,
741
- args,
742
- clientState: {},
656
+ id,
657
+ type: "client",
658
+ ast,
659
+ clientState: {}
743
660
  };
661
+ }
662
+ assert(
663
+ name !== void 0 && args !== void 0,
664
+ "Must provide name and args"
665
+ );
666
+ return {
667
+ id,
668
+ type: "custom",
669
+ name,
670
+ args,
671
+ clientState: {}
672
+ };
744
673
  }
745
- //# sourceMappingURL=cvr.js.map
674
+ export {
675
+ CVRConfigDrivenUpdater,
676
+ CVRQueryDrivenUpdater,
677
+ CVRUpdater,
678
+ getInactiveQueries,
679
+ getMutationResultsQuery,
680
+ nextEvictionTime
681
+ };
682
+ //# sourceMappingURL=cvr.js.map