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

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 (1403) 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/deep-merge.d.ts +20 -3
  266. package/out/shared/src/deep-merge.d.ts.map +1 -1
  267. package/out/shared/src/deep-merge.js +27 -0
  268. package/out/shared/src/deep-merge.js.map +1 -0
  269. package/out/shared/src/document-visible.js +74 -0
  270. package/out/shared/src/document-visible.js.map +1 -0
  271. package/out/shared/src/dotenv.js +5 -7
  272. package/out/shared/src/dotenv.js.map +1 -1
  273. package/out/shared/src/error.js +57 -56
  274. package/out/shared/src/error.js.map +1 -1
  275. package/out/shared/src/has-own.js +5 -3
  276. package/out/shared/src/has-own.js.map +1 -1
  277. package/out/shared/src/hash.js +15 -14
  278. package/out/shared/src/hash.js.map +1 -1
  279. package/out/shared/src/iterables.js +71 -73
  280. package/out/shared/src/iterables.js.map +1 -1
  281. package/out/shared/src/json-schema.js +30 -33
  282. package/out/shared/src/json-schema.js.map +1 -1
  283. package/out/shared/src/json.js +128 -143
  284. package/out/shared/src/json.js.map +1 -1
  285. package/out/shared/src/logging-test-utils.js +12 -19
  286. package/out/shared/src/logging-test-utils.js.map +1 -1
  287. package/out/shared/src/logging.d.ts.map +1 -1
  288. package/out/shared/src/logging.js +99 -83
  289. package/out/shared/src/logging.js.map +1 -1
  290. package/out/shared/src/must.js +9 -7
  291. package/out/shared/src/must.js.map +1 -1
  292. package/out/shared/src/navigator.js +5 -0
  293. package/out/shared/src/navigator.js.map +1 -0
  294. package/out/shared/src/object-traversal.d.ts +19 -0
  295. package/out/shared/src/object-traversal.d.ts.map +1 -0
  296. package/out/shared/src/object-traversal.js +27 -0
  297. package/out/shared/src/object-traversal.js.map +1 -0
  298. package/out/shared/src/objects.js +21 -22
  299. package/out/shared/src/objects.js.map +1 -1
  300. package/out/shared/src/options.js +289 -322
  301. package/out/shared/src/options.js.map +1 -1
  302. package/out/shared/src/parse-big-int.js +12 -10
  303. package/out/shared/src/parse-big-int.js.map +1 -1
  304. package/out/shared/src/promise-race.js +20 -0
  305. package/out/shared/src/promise-race.js.map +1 -0
  306. package/out/shared/src/queue.js +119 -122
  307. package/out/shared/src/queue.js.map +1 -1
  308. package/out/shared/src/rand.js +8 -10
  309. package/out/shared/src/rand.js.map +1 -1
  310. package/out/shared/src/random-uint64.js +9 -0
  311. package/out/shared/src/random-uint64.js.map +1 -0
  312. package/out/shared/src/random-values.js +13 -0
  313. package/out/shared/src/random-values.js.map +1 -0
  314. package/out/shared/src/resolved-promises.js +12 -9
  315. package/out/shared/src/resolved-promises.js.map +1 -1
  316. package/out/shared/src/sentinels.js +13 -6
  317. package/out/shared/src/sentinels.js.map +1 -1
  318. package/out/shared/src/set-utils.js +63 -62
  319. package/out/shared/src/set-utils.js.map +1 -1
  320. package/out/shared/src/size-of-value.js +58 -0
  321. package/out/shared/src/size-of-value.js.map +1 -0
  322. package/out/shared/src/sleep.js +45 -53
  323. package/out/shared/src/sleep.js.map +1 -1
  324. package/out/shared/src/string-compare.js +12 -9
  325. package/out/shared/src/string-compare.js.map +1 -1
  326. package/out/shared/src/subscribable.js +34 -0
  327. package/out/shared/src/subscribable.js.map +1 -0
  328. package/out/shared/src/tdigest-schema.js +7 -7
  329. package/out/shared/src/tdigest-schema.js.map +1 -1
  330. package/out/shared/src/tdigest.js +247 -271
  331. package/out/shared/src/tdigest.js.map +1 -1
  332. package/out/shared/src/valita.js +195 -207
  333. package/out/shared/src/valita.js.map +1 -1
  334. package/out/z2s/src/compiler.d.ts.map +1 -1
  335. package/out/z2s/src/compiler.js +437 -310
  336. package/out/z2s/src/compiler.js.map +1 -1
  337. package/out/z2s/src/sql.js +186 -218
  338. package/out/z2s/src/sql.js.map +1 -1
  339. package/out/zero/package.json.js +9 -0
  340. package/out/zero/package.json.js.map +1 -0
  341. package/out/zero/src/adapters/drizzle.js +5 -2
  342. package/out/zero/src/adapters/drizzle.js.map +1 -1
  343. package/out/zero/src/adapters/pg.js +7 -2
  344. package/out/zero/src/adapters/pg.js.map +1 -1
  345. package/out/zero/src/adapters/postgresjs.js +7 -2
  346. package/out/zero/src/adapters/postgresjs.js.map +1 -1
  347. package/out/zero/src/analyze-query.js +1 -1
  348. package/out/zero/src/analyze-query.js.map +1 -1
  349. package/out/zero/src/ast-to-zql.js +1 -1
  350. package/out/zero/src/ast-to-zql.js.map +1 -1
  351. package/out/zero/src/build-schema.js +3 -5
  352. package/out/zero/src/build-schema.js.map +1 -1
  353. package/out/zero/src/change-protocol/v0.js +5 -3
  354. package/out/zero/src/change-protocol/v0.js.map +1 -1
  355. package/out/zero/src/cli.js +2 -2
  356. package/out/zero/src/cli.js.map +1 -1
  357. package/out/zero/src/deploy-permissions.js +1 -1
  358. package/out/zero/src/deploy-permissions.js.map +1 -1
  359. package/out/zero/src/expo-sqlite.js +5 -0
  360. package/out/zero/src/expo-sqlite.js.map +1 -0
  361. package/out/zero/src/op-sqlite.js +5 -0
  362. package/out/zero/src/op-sqlite.js.map +1 -0
  363. package/out/zero/src/pg.js +29 -3
  364. package/out/zero/src/pg.js.map +1 -1
  365. package/out/zero/src/react-native.js +13 -0
  366. package/out/zero/src/react-native.js.map +1 -0
  367. package/out/zero/src/react.js +17 -0
  368. package/out/zero/src/react.js.map +1 -0
  369. package/out/zero/src/server.js +25 -3
  370. package/out/zero/src/server.js.map +1 -1
  371. package/out/zero/src/solid.js +15 -0
  372. package/out/zero/src/solid.js.map +1 -0
  373. package/out/zero/src/sqlite.js +7 -0
  374. package/out/zero/src/sqlite.js.map +1 -0
  375. package/out/zero/src/transform-query.js +1 -1
  376. package/out/zero/src/transform-query.js.map +1 -1
  377. package/out/zero/src/zero-cache-dev.js +135 -126
  378. package/out/zero/src/zero-cache-dev.js.map +1 -1
  379. package/out/zero/src/zero-out.js +6 -6
  380. package/out/zero/src/zero-out.js.map +1 -1
  381. package/out/zero/src/zero.js +71 -0
  382. package/out/zero/src/zero.js.map +1 -0
  383. package/out/zero/src/zqlite.js +11 -3
  384. package/out/zero/src/zqlite.js.map +1 -1
  385. package/out/zero-cache/src/auth/jwt.d.ts +3 -0
  386. package/out/zero-cache/src/auth/jwt.d.ts.map +1 -1
  387. package/out/zero-cache/src/auth/jwt.js +33 -38
  388. package/out/zero-cache/src/auth/jwt.js.map +1 -1
  389. package/out/zero-cache/src/auth/load-permissions.js +61 -45
  390. package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
  391. package/out/zero-cache/src/auth/read-authorizer.js +79 -91
  392. package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
  393. package/out/zero-cache/src/auth/write-authorizer.d.ts +4 -3
  394. package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
  395. package/out/zero-cache/src/auth/write-authorizer.js +385 -350
  396. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  397. package/out/zero-cache/src/config/network.js +42 -45
  398. package/out/zero-cache/src/config/network.js.map +1 -1
  399. package/out/zero-cache/src/config/normalize.js +86 -83
  400. package/out/zero-cache/src/config/normalize.js.map +1 -1
  401. package/out/zero-cache/src/config/zero-config.d.ts +27 -0
  402. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  403. package/out/zero-cache/src/config/zero-config.js +704 -682
  404. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  405. package/out/zero-cache/src/custom/fetch.d.ts +5 -5
  406. package/out/zero-cache/src/custom/fetch.d.ts.map +1 -1
  407. package/out/zero-cache/src/custom/fetch.js +170 -163
  408. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  409. package/out/zero-cache/src/custom-queries/transform-query.d.ts +7 -0
  410. package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +1 -1
  411. package/out/zero-cache/src/custom-queries/transform-query.js +99 -106
  412. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  413. package/out/zero-cache/src/db/create.js +32 -36
  414. package/out/zero-cache/src/db/create.js.map +1 -1
  415. package/out/zero-cache/src/db/delete-lite-db.js +9 -6
  416. package/out/zero-cache/src/db/delete-lite-db.js.map +1 -1
  417. package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
  418. package/out/zero-cache/src/db/lite-tables.js +150 -174
  419. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  420. package/out/zero-cache/src/db/migration-lite.js +170 -165
  421. package/out/zero-cache/src/db/migration-lite.js.map +1 -1
  422. package/out/zero-cache/src/db/migration.js +157 -137
  423. package/out/zero-cache/src/db/migration.js.map +1 -1
  424. package/out/zero-cache/src/db/mode-enum.js +9 -4
  425. package/out/zero-cache/src/db/mode-enum.js.map +1 -1
  426. package/out/zero-cache/src/db/pg-copy.js +51 -90
  427. package/out/zero-cache/src/db/pg-copy.js.map +1 -1
  428. package/out/zero-cache/src/db/pg-to-lite.js +114 -109
  429. package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
  430. package/out/zero-cache/src/db/pg-type-parser.js +27 -39
  431. package/out/zero-cache/src/db/pg-type-parser.js.map +1 -1
  432. package/out/zero-cache/src/db/postgres-replica-identity-enum.js +11 -6
  433. package/out/zero-cache/src/db/postgres-replica-identity-enum.js.map +1 -1
  434. package/out/zero-cache/src/db/postgres-type-class-enum.js +17 -9
  435. package/out/zero-cache/src/db/postgres-type-class-enum.js.map +1 -1
  436. package/out/zero-cache/src/db/specs.d.ts +1 -7
  437. package/out/zero-cache/src/db/specs.d.ts.map +1 -1
  438. package/out/zero-cache/src/db/specs.js +66 -40
  439. package/out/zero-cache/src/db/specs.js.map +1 -1
  440. package/out/zero-cache/src/db/statements.d.ts +1 -1
  441. package/out/zero-cache/src/db/statements.d.ts.map +1 -1
  442. package/out/zero-cache/src/db/statements.js +59 -52
  443. package/out/zero-cache/src/db/statements.js.map +1 -1
  444. package/out/zero-cache/src/db/transaction-pool.d.ts +1 -1
  445. package/out/zero-cache/src/db/transaction-pool.d.ts.map +1 -1
  446. package/out/zero-cache/src/db/transaction-pool.js +375 -501
  447. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  448. package/out/zero-cache/src/db/warmup.js +25 -12
  449. package/out/zero-cache/src/db/warmup.js.map +1 -1
  450. package/out/zero-cache/src/observability/events.js +71 -82
  451. package/out/zero-cache/src/observability/events.js.map +1 -1
  452. package/out/zero-cache/src/observability/metrics.js +54 -32
  453. package/out/zero-cache/src/observability/metrics.js.map +1 -1
  454. package/out/zero-cache/src/scripts/decommission.js +47 -43
  455. package/out/zero-cache/src/scripts/decommission.js.map +1 -1
  456. package/out/zero-cache/src/scripts/deploy-permissions.js +128 -118
  457. package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
  458. package/out/zero-cache/src/scripts/permissions.js +107 -99
  459. package/out/zero-cache/src/scripts/permissions.js.map +1 -1
  460. package/out/zero-cache/src/server/anonymous-otel-start.js +410 -366
  461. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
  462. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  463. package/out/zero-cache/src/server/change-streamer.js +104 -60
  464. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  465. package/out/zero-cache/src/server/inspector-delegate.js +112 -109
  466. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  467. package/out/zero-cache/src/server/logging.d.ts +1 -1
  468. package/out/zero-cache/src/server/logging.d.ts.map +1 -1
  469. package/out/zero-cache/src/server/logging.js +26 -19
  470. package/out/zero-cache/src/server/logging.js.map +1 -1
  471. package/out/zero-cache/src/server/main.d.ts.map +1 -1
  472. package/out/zero-cache/src/server/main.js +137 -120
  473. package/out/zero-cache/src/server/main.js.map +1 -1
  474. package/out/zero-cache/src/server/mutator.js +19 -0
  475. package/out/zero-cache/src/server/mutator.js.map +1 -0
  476. package/out/zero-cache/src/server/otel-diag-logger.d.ts +1 -1
  477. package/out/zero-cache/src/server/otel-diag-logger.d.ts.map +1 -1
  478. package/out/zero-cache/src/server/otel-diag-logger.js +67 -70
  479. package/out/zero-cache/src/server/otel-diag-logger.js.map +1 -1
  480. package/out/zero-cache/src/server/otel-log-sink.js +40 -41
  481. package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
  482. package/out/zero-cache/src/server/otel-start.d.ts +1 -1
  483. package/out/zero-cache/src/server/otel-start.d.ts.map +1 -1
  484. package/out/zero-cache/src/server/otel-start.js +57 -68
  485. package/out/zero-cache/src/server/otel-start.js.map +1 -1
  486. package/out/zero-cache/src/server/reaper.js +34 -26
  487. package/out/zero-cache/src/server/reaper.js.map +1 -1
  488. package/out/zero-cache/src/server/replicator.js +53 -31
  489. package/out/zero-cache/src/server/replicator.js.map +1 -1
  490. package/out/zero-cache/src/server/runner/main.js +6 -4
  491. package/out/zero-cache/src/server/runner/main.js.map +1 -1
  492. package/out/zero-cache/src/server/runner/run-worker.d.ts.map +1 -1
  493. package/out/zero-cache/src/server/runner/run-worker.js +46 -50
  494. package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
  495. package/out/zero-cache/src/server/runner/runtime.js +33 -32
  496. package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
  497. package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts.map +1 -1
  498. package/out/zero-cache/src/server/runner/zero-dispatcher.js +28 -22
  499. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  500. package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
  501. package/out/zero-cache/src/server/syncer.js +124 -63
  502. package/out/zero-cache/src/server/syncer.js.map +1 -1
  503. package/out/zero-cache/src/server/worker-dispatcher.d.ts +1 -1
  504. package/out/zero-cache/src/server/worker-dispatcher.d.ts.map +1 -1
  505. package/out/zero-cache/src/server/worker-dispatcher.js +112 -106
  506. package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
  507. package/out/zero-cache/src/server/worker-urls.d.ts +7 -0
  508. package/out/zero-cache/src/server/worker-urls.d.ts.map +1 -0
  509. package/out/zero-cache/src/server/worker-urls.js +21 -0
  510. package/out/zero-cache/src/server/worker-urls.js.map +1 -0
  511. package/out/zero-cache/src/services/analyze.d.ts +3 -4
  512. package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
  513. package/out/zero-cache/src/services/analyze.js +104 -121
  514. package/out/zero-cache/src/services/analyze.js.map +1 -1
  515. package/out/zero-cache/src/services/change-source/column-metadata.js +152 -155
  516. package/out/zero-cache/src/services/change-source/column-metadata.js.map +1 -1
  517. package/out/zero-cache/src/services/change-source/custom/change-source.d.ts +1 -1
  518. package/out/zero-cache/src/services/change-source/custom/change-source.d.ts.map +1 -1
  519. package/out/zero-cache/src/services/change-source/custom/change-source.js +197 -171
  520. package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
  521. package/out/zero-cache/src/services/change-source/custom/sync-schema.js +11 -3
  522. package/out/zero-cache/src/services/change-source/custom/sync-schema.js.map +1 -1
  523. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +1 -1
  524. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  525. package/out/zero-cache/src/services/change-source/pg/change-source.js +601 -622
  526. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  527. package/out/zero-cache/src/services/change-source/pg/decommission.js +24 -23
  528. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
  529. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +1 -1
  530. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
  531. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +327 -284
  532. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  533. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js +61 -69
  534. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
  535. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js +247 -257
  536. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
  537. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +127 -119
  538. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
  539. package/out/zero-cache/src/services/change-source/pg/lsn.js +20 -19
  540. package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
  541. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +5 -5
  542. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +96 -119
  543. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  544. package/out/zero-cache/src/services/change-source/pg/schema/init.js +138 -117
  545. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  546. package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts +2 -2
  547. package/out/zero-cache/src/services/change-source/pg/schema/published.js +67 -74
  548. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
  549. package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +1 -1
  550. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +199 -188
  551. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  552. package/out/zero-cache/src/services/change-source/pg/schema/validation.js +53 -38
  553. package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
  554. package/out/zero-cache/src/services/change-source/pg/sync-schema.js +11 -3
  555. package/out/zero-cache/src/services/change-source/pg/sync-schema.js.map +1 -1
  556. package/out/zero-cache/src/services/change-source/protocol/current/control.js +9 -19
  557. package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
  558. package/out/zero-cache/src/services/change-source/protocol/current/data.js +143 -116
  559. package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
  560. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js +29 -19
  561. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
  562. package/out/zero-cache/src/services/change-source/protocol/current/path.js +5 -20
  563. package/out/zero-cache/src/services/change-source/protocol/current/path.js.map +1 -1
  564. package/out/zero-cache/src/services/change-source/protocol/current/status.js +12 -13
  565. package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
  566. package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts +1 -1
  567. package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts.map +1 -1
  568. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js +5 -4
  569. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
  570. package/out/zero-cache/src/services/change-source/protocol/current.js +35 -7
  571. package/out/zero-cache/src/services/change-source/protocol/current.js.map +1 -1
  572. package/out/zero-cache/src/services/change-source/replica-schema.js +64 -47
  573. package/out/zero-cache/src/services/change-source/replica-schema.js.map +1 -1
  574. package/out/zero-cache/src/services/change-streamer/backup-monitor.js +139 -161
  575. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  576. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +13 -4
  577. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  578. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +213 -157
  579. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  580. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +1 -1
  581. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  582. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +234 -355
  583. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  584. package/out/zero-cache/src/services/change-streamer/change-streamer.js +24 -26
  585. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  586. package/out/zero-cache/src/services/change-streamer/error-type-enum.js +9 -4
  587. package/out/zero-cache/src/services/change-streamer/error-type-enum.js.map +1 -1
  588. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +1 -1
  589. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +1 -1
  590. package/out/zero-cache/src/services/change-streamer/forwarder.js +53 -57
  591. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  592. package/out/zero-cache/src/services/change-streamer/replica-monitor.js +40 -44
  593. package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -1
  594. package/out/zero-cache/src/services/change-streamer/schema/init.js +82 -68
  595. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  596. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +2 -2
  597. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
  598. package/out/zero-cache/src/services/change-streamer/schema/tables.js +93 -78
  599. package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
  600. package/out/zero-cache/src/services/change-streamer/snapshot.js +28 -37
  601. package/out/zero-cache/src/services/change-streamer/snapshot.js.map +1 -1
  602. package/out/zero-cache/src/services/change-streamer/storer.d.ts +2 -2
  603. package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
  604. package/out/zero-cache/src/services/change-streamer/storer.js +309 -372
  605. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  606. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +2 -1
  607. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
  608. package/out/zero-cache/src/services/change-streamer/subscriber.js +83 -90
  609. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  610. package/out/zero-cache/src/services/heapz.js +21 -25
  611. package/out/zero-cache/src/services/heapz.js.map +1 -1
  612. package/out/zero-cache/src/services/http-service.d.ts +6 -5
  613. package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
  614. package/out/zero-cache/src/services/http-service.js +61 -59
  615. package/out/zero-cache/src/services/http-service.js.map +1 -1
  616. package/out/zero-cache/src/services/life-cycle.d.ts +1 -1
  617. package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
  618. package/out/zero-cache/src/services/life-cycle.js +216 -255
  619. package/out/zero-cache/src/services/life-cycle.js.map +1 -1
  620. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +76 -130
  621. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
  622. package/out/zero-cache/src/services/litestream/commands.d.ts +1 -1
  623. package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
  624. package/out/zero-cache/src/services/litestream/commands.js +193 -178
  625. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  626. package/out/zero-cache/src/services/mutagen/error.js +11 -6
  627. package/out/zero-cache/src/services/mutagen/error.js.map +1 -1
  628. package/out/zero-cache/src/services/mutagen/mutagen.d.ts +2 -1
  629. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  630. package/out/zero-cache/src/services/mutagen/mutagen.js +271 -267
  631. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  632. package/out/zero-cache/src/services/mutagen/pusher.d.ts +198 -0
  633. package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
  634. package/out/zero-cache/src/services/mutagen/pusher.js +351 -344
  635. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  636. package/out/zero-cache/src/services/replicator/change-processor.js +483 -530
  637. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  638. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +1 -1
  639. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  640. package/out/zero-cache/src/services/replicator/incremental-sync.js +97 -97
  641. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  642. package/out/zero-cache/src/services/replicator/notifier.js +28 -52
  643. package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
  644. package/out/zero-cache/src/services/replicator/replication-status.js +100 -83
  645. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  646. package/out/zero-cache/src/services/replicator/replicator.d.ts +1 -1
  647. package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
  648. package/out/zero-cache/src/services/replicator/replicator.js +33 -26
  649. package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
  650. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +1 -1
  651. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts.map +1 -1
  652. package/out/zero-cache/src/services/replicator/schema/change-log.js +74 -86
  653. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  654. package/out/zero-cache/src/services/replicator/schema/constants.js +5 -7
  655. package/out/zero-cache/src/services/replicator/schema/constants.js.map +1 -1
  656. package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts +2 -2
  657. package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts.map +1 -1
  658. package/out/zero-cache/src/services/replicator/schema/replication-state.js +70 -74
  659. package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
  660. package/out/zero-cache/src/services/run-ast.d.ts +9 -3
  661. package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
  662. package/out/zero-cache/src/services/run-ast.js +87 -79
  663. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  664. package/out/zero-cache/src/services/runner.d.ts +1 -1
  665. package/out/zero-cache/src/services/runner.d.ts.map +1 -1
  666. package/out/zero-cache/src/services/runner.js +40 -40
  667. package/out/zero-cache/src/services/runner.js.map +1 -1
  668. package/out/zero-cache/src/services/running-state.d.ts +1 -1
  669. package/out/zero-cache/src/services/running-state.d.ts.map +1 -1
  670. package/out/zero-cache/src/services/running-state.js +122 -119
  671. package/out/zero-cache/src/services/running-state.js.map +1 -1
  672. package/out/zero-cache/src/services/statz.js +184 -162
  673. package/out/zero-cache/src/services/statz.js.map +1 -1
  674. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +40 -39
  675. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
  676. package/out/zero-cache/src/services/view-syncer/client-handler.js +307 -298
  677. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  678. package/out/zero-cache/src/services/view-syncer/client-schema.d.ts.map +1 -1
  679. package/out/zero-cache/src/services/view-syncer/client-schema.js +80 -82
  680. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  681. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +83 -92
  682. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
  683. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +2 -4
  684. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
  685. package/out/zero-cache/src/services/view-syncer/cvr-store.js +628 -616
  686. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  687. package/out/zero-cache/src/services/view-syncer/cvr.d.ts +1 -1
  688. package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
  689. package/out/zero-cache/src/services/view-syncer/cvr.js +631 -694
  690. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  691. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +38 -60
  692. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  693. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts +2 -1
  694. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +1 -1
  695. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +169 -158
  696. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  697. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +14 -13
  698. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  699. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +534 -480
  700. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  701. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +229 -280
  702. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  703. package/out/zero-cache/src/services/view-syncer/schema/cvr.js +53 -120
  704. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
  705. package/out/zero-cache/src/services/view-syncer/schema/init.js +171 -150
  706. package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
  707. package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +4 -4
  708. package/out/zero-cache/src/services/view-syncer/schema/types.js +265 -257
  709. package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
  710. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +3 -3
  711. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
  712. package/out/zero-cache/src/services/view-syncer/snapshotter.js +295 -338
  713. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  714. package/out/zero-cache/src/services/view-syncer/ttl-clock.js +13 -7
  715. package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
  716. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +3 -3
  717. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  718. package/out/zero-cache/src/services/view-syncer/view-syncer.js +1508 -1307
  719. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  720. package/out/zero-cache/src/types/error-with-level.d.ts.map +1 -1
  721. package/out/zero-cache/src/types/error-with-level.js +29 -25
  722. package/out/zero-cache/src/types/error-with-level.js.map +1 -1
  723. package/out/zero-cache/src/types/http.js +27 -14
  724. package/out/zero-cache/src/types/http.js.map +1 -1
  725. package/out/zero-cache/src/types/lexi-version.js +46 -31
  726. package/out/zero-cache/src/types/lexi-version.js.map +1 -1
  727. package/out/zero-cache/src/types/lite.js +118 -125
  728. package/out/zero-cache/src/types/lite.js.map +1 -1
  729. package/out/zero-cache/src/types/names.js +6 -3
  730. package/out/zero-cache/src/types/names.js.map +1 -1
  731. package/out/zero-cache/src/types/pg-data-type.js +74 -68
  732. package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
  733. package/out/zero-cache/src/types/pg-types.js +17 -72
  734. package/out/zero-cache/src/types/pg-types.js.map +1 -1
  735. package/out/zero-cache/src/types/pg.d.ts +1 -1
  736. package/out/zero-cache/src/types/pg.d.ts.map +1 -1
  737. package/out/zero-cache/src/types/pg.js +213 -233
  738. package/out/zero-cache/src/types/pg.js.map +1 -1
  739. package/out/zero-cache/src/types/processes.d.ts +2 -2
  740. package/out/zero-cache/src/types/processes.d.ts.map +1 -1
  741. package/out/zero-cache/src/types/processes.js +95 -143
  742. package/out/zero-cache/src/types/processes.js.map +1 -1
  743. package/out/zero-cache/src/types/profiler.js +29 -30
  744. package/out/zero-cache/src/types/profiler.js.map +1 -1
  745. package/out/zero-cache/src/types/row-key.js +30 -68
  746. package/out/zero-cache/src/types/row-key.js.map +1 -1
  747. package/out/zero-cache/src/types/schema-versions.js +25 -19
  748. package/out/zero-cache/src/types/schema-versions.js.map +1 -1
  749. package/out/zero-cache/src/types/shards.js +50 -36
  750. package/out/zero-cache/src/types/shards.js.map +1 -1
  751. package/out/zero-cache/src/types/sql.js +9 -13
  752. package/out/zero-cache/src/types/sql.js.map +1 -1
  753. package/out/zero-cache/src/types/streams.js +245 -254
  754. package/out/zero-cache/src/types/streams.js.map +1 -1
  755. package/out/zero-cache/src/types/strings.js +14 -11
  756. package/out/zero-cache/src/types/strings.js.map +1 -1
  757. package/out/zero-cache/src/types/subscription.js +200 -259
  758. package/out/zero-cache/src/types/subscription.js.map +1 -1
  759. package/out/zero-cache/src/types/url-params.js +35 -30
  760. package/out/zero-cache/src/types/url-params.js.map +1 -1
  761. package/out/zero-cache/src/types/websocket-handoff.d.ts +3 -2
  762. package/out/zero-cache/src/types/websocket-handoff.d.ts.map +1 -1
  763. package/out/zero-cache/src/types/websocket-handoff.js +68 -76
  764. package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
  765. package/out/zero-cache/src/types/ws.js +56 -59
  766. package/out/zero-cache/src/types/ws.js.map +1 -1
  767. package/out/zero-cache/src/workers/connect-params.js +44 -40
  768. package/out/zero-cache/src/workers/connect-params.js.map +1 -1
  769. package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
  770. package/out/zero-cache/src/workers/connection.js +282 -243
  771. package/out/zero-cache/src/workers/connection.js.map +1 -1
  772. package/out/zero-cache/src/workers/mutator.js +24 -0
  773. package/out/zero-cache/src/workers/mutator.js.map +1 -0
  774. package/out/zero-cache/src/workers/replicator.d.ts +1 -1
  775. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  776. package/out/zero-cache/src/workers/replicator.js +103 -106
  777. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  778. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +179 -147
  779. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  780. package/out/zero-cache/src/workers/syncer.d.ts +3 -3
  781. package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
  782. package/out/zero-cache/src/workers/syncer.js +192 -169
  783. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  784. package/out/zero-client/src/client/active-clients-manager.js +199 -0
  785. package/out/zero-client/src/client/active-clients-manager.js.map +1 -0
  786. package/out/zero-client/src/client/bindings.d.ts +9 -8
  787. package/out/zero-client/src/client/bindings.d.ts.map +1 -1
  788. package/out/zero-client/src/client/bindings.js +33 -0
  789. package/out/zero-client/src/client/bindings.js.map +1 -0
  790. package/out/zero-client/src/client/client-error-kind-enum.js +29 -0
  791. package/out/zero-client/src/client/client-error-kind-enum.js.map +1 -0
  792. package/out/zero-client/src/client/connection-manager.d.ts +12 -31
  793. package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
  794. package/out/zero-client/src/client/connection-manager.js +310 -0
  795. package/out/zero-client/src/client/connection-manager.js.map +1 -0
  796. package/out/zero-client/src/client/connection-status-enum.js +15 -0
  797. package/out/zero-client/src/client/connection-status-enum.js.map +1 -0
  798. package/out/zero-client/src/client/connection.d.ts +45 -2
  799. package/out/zero-client/src/client/connection.d.ts.map +1 -1
  800. package/out/zero-client/src/client/connection.js +103 -0
  801. package/out/zero-client/src/client/connection.js.map +1 -0
  802. package/out/zero-client/src/client/context.d.ts +3 -6
  803. package/out/zero-client/src/client/context.d.ts.map +1 -1
  804. package/out/zero-client/src/client/context.js +104 -0
  805. package/out/zero-client/src/client/context.js.map +1 -0
  806. package/out/zero-client/src/client/crud.d.ts +7 -5
  807. package/out/zero-client/src/client/crud.d.ts.map +1 -1
  808. package/out/zero-client/src/client/crud.js +225 -0
  809. package/out/zero-client/src/client/crud.js.map +1 -0
  810. package/out/zero-client/src/client/custom.d.ts +14 -15
  811. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  812. package/out/zero-client/src/client/custom.js +128 -0
  813. package/out/zero-client/src/client/custom.js.map +1 -0
  814. package/out/zero-client/src/client/delete-clients-manager.js +71 -0
  815. package/out/zero-client/src/client/delete-clients-manager.js.map +1 -0
  816. package/out/zero-client/src/client/enable-analytics.js +18 -0
  817. package/out/zero-client/src/client/enable-analytics.js.map +1 -0
  818. package/out/zero-client/src/client/error.d.ts +2 -1
  819. package/out/zero-client/src/client/error.d.ts.map +1 -1
  820. package/out/zero-client/src/client/error.js +148 -0
  821. package/out/zero-client/src/client/error.js.map +1 -0
  822. package/out/zero-client/src/client/http-string.js +11 -0
  823. package/out/zero-client/src/client/http-string.js.map +1 -0
  824. package/out/zero-client/src/client/inspector/client-group.js +27 -0
  825. package/out/zero-client/src/client/inspector/client-group.js.map +1 -0
  826. package/out/zero-client/src/client/inspector/client.js +28 -0
  827. package/out/zero-client/src/client/inspector/client.js.map +1 -0
  828. package/out/zero-client/src/client/inspector/html-dialog-prompt.js +77 -0
  829. package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -0
  830. package/out/zero-client/src/client/inspector/inspector.d.ts +6 -2
  831. package/out/zero-client/src/client/inspector/inspector.d.ts.map +1 -1
  832. package/out/zero-client/src/client/inspector/inspector.js +54 -0
  833. package/out/zero-client/src/client/inspector/inspector.js.map +1 -0
  834. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts +1 -1
  835. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts.map +1 -1
  836. package/out/zero-client/src/client/inspector/lazy-inspector.js +243 -0
  837. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -0
  838. package/out/zero-client/src/client/inspector/query.d.ts.map +1 -1
  839. package/out/zero-client/src/client/inspector/query.js +82 -0
  840. package/out/zero-client/src/client/inspector/query.js.map +1 -0
  841. package/out/zero-client/src/client/ivm-branch.d.ts +4 -4
  842. package/out/zero-client/src/client/ivm-branch.d.ts.map +1 -1
  843. package/out/zero-client/src/client/ivm-branch.js +149 -0
  844. package/out/zero-client/src/client/ivm-branch.js.map +1 -0
  845. package/out/zero-client/src/client/keys.js +45 -0
  846. package/out/zero-client/src/client/keys.js.map +1 -0
  847. package/out/zero-client/src/client/log-options.js +60 -0
  848. package/out/zero-client/src/client/log-options.js.map +1 -0
  849. package/out/zero-client/src/client/make-mutate-property.d.ts +43 -0
  850. package/out/zero-client/src/client/make-mutate-property.d.ts.map +1 -0
  851. package/out/zero-client/src/client/make-mutate-property.js +38 -0
  852. package/out/zero-client/src/client/make-mutate-property.js.map +1 -0
  853. package/out/zero-client/src/client/make-replicache-mutators.d.ts +34 -0
  854. package/out/zero-client/src/client/make-replicache-mutators.d.ts.map +1 -0
  855. package/out/zero-client/src/client/make-replicache-mutators.js +103 -0
  856. package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -0
  857. package/out/zero-client/src/client/metric-name-enum.js +15 -0
  858. package/out/zero-client/src/client/metric-name-enum.js.map +1 -0
  859. package/out/zero-client/src/client/metrics.d.ts.map +1 -1
  860. package/out/zero-client/src/client/metrics.js +249 -0
  861. package/out/zero-client/src/client/metrics.js.map +1 -0
  862. package/out/zero-client/src/client/mutation-tracker.js +363 -0
  863. package/out/zero-client/src/client/mutation-tracker.js.map +1 -0
  864. package/out/zero-client/src/client/mutator-proxy.d.ts +1 -2
  865. package/out/zero-client/src/client/mutator-proxy.d.ts.map +1 -1
  866. package/out/zero-client/src/client/mutator-proxy.js +132 -0
  867. package/out/zero-client/src/client/mutator-proxy.js.map +1 -0
  868. package/out/zero-client/src/client/options.d.ts +49 -20
  869. package/out/zero-client/src/client/options.d.ts.map +1 -1
  870. package/out/zero-client/src/client/options.js +11 -0
  871. package/out/zero-client/src/client/options.js.map +1 -0
  872. package/out/zero-client/src/client/query-manager.d.ts +4 -4
  873. package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
  874. package/out/zero-client/src/client/query-manager.js +377 -0
  875. package/out/zero-client/src/client/query-manager.js.map +1 -0
  876. package/out/zero-client/src/client/reload-error-handler.d.ts +1 -1
  877. package/out/zero-client/src/client/reload-error-handler.d.ts.map +1 -1
  878. package/out/zero-client/src/client/reload-error-handler.js +114 -0
  879. package/out/zero-client/src/client/reload-error-handler.js.map +1 -0
  880. package/out/zero-client/src/client/server-option.js +64 -0
  881. package/out/zero-client/src/client/server-option.js.map +1 -0
  882. package/out/zero-client/src/client/update-needed-reason-type-enum.js +9 -0
  883. package/out/zero-client/src/client/update-needed-reason-type-enum.js.map +1 -0
  884. package/out/zero-client/src/client/version.js +5 -0
  885. package/out/zero-client/src/client/version.js.map +1 -0
  886. package/out/zero-client/src/client/zero-poke-handler.js +303 -0
  887. package/out/zero-client/src/client/zero-poke-handler.js.map +1 -0
  888. package/out/zero-client/src/client/zero-rep.d.ts +2 -2
  889. package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
  890. package/out/zero-client/src/client/zero-rep.js +72 -0
  891. package/out/zero-client/src/client/zero-rep.js.map +1 -0
  892. package/out/zero-client/src/client/zero.d.ts +25 -18
  893. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  894. package/out/zero-client/src/client/zero.js +1759 -0
  895. package/out/zero-client/src/client/zero.js.map +1 -0
  896. package/out/zero-client/src/mod.d.ts +13 -16
  897. package/out/zero-client/src/mod.d.ts.map +1 -1
  898. package/out/zero-client/src/util/nanoid.js +21 -0
  899. package/out/zero-client/src/util/nanoid.js.map +1 -0
  900. package/out/zero-client/src/util/socket.js +7 -0
  901. package/out/zero-client/src/util/socket.js.map +1 -0
  902. package/out/zero-protocol/src/analyze-query-result.d.ts +236 -0
  903. package/out/zero-protocol/src/analyze-query-result.d.ts.map +1 -1
  904. package/out/zero-protocol/src/analyze-query-result.js +159 -25
  905. package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
  906. package/out/zero-protocol/src/application-error.js +35 -37
  907. package/out/zero-protocol/src/application-error.js.map +1 -1
  908. package/out/zero-protocol/src/ast.d.ts +2 -2
  909. package/out/zero-protocol/src/ast.js +296 -277
  910. package/out/zero-protocol/src/ast.js.map +1 -1
  911. package/out/zero-protocol/src/change-desired-queries.d.ts +2 -2
  912. package/out/zero-protocol/src/change-desired-queries.js +11 -7
  913. package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
  914. package/out/zero-protocol/src/client-schema.d.ts +2 -2
  915. package/out/zero-protocol/src/client-schema.d.ts.map +1 -1
  916. package/out/zero-protocol/src/client-schema.js +40 -26
  917. package/out/zero-protocol/src/client-schema.js.map +1 -1
  918. package/out/zero-protocol/src/close-connection.js +11 -18
  919. package/out/zero-protocol/src/close-connection.js.map +1 -1
  920. package/out/zero-protocol/src/connect.d.ts +4 -4
  921. package/out/zero-protocol/src/connect.d.ts.map +1 -1
  922. package/out/zero-protocol/src/connect.js +50 -51
  923. package/out/zero-protocol/src/connect.js.map +1 -1
  924. package/out/zero-protocol/src/custom-queries.d.ts +4 -4
  925. package/out/zero-protocol/src/custom-queries.js +61 -39
  926. package/out/zero-protocol/src/custom-queries.js.map +1 -1
  927. package/out/zero-protocol/src/data.js +9 -4
  928. package/out/zero-protocol/src/data.js.map +1 -1
  929. package/out/zero-protocol/src/delete-clients.js +16 -9
  930. package/out/zero-protocol/src/delete-clients.js.map +1 -1
  931. package/out/zero-protocol/src/down.d.ts +105 -6
  932. package/out/zero-protocol/src/down.d.ts.map +1 -1
  933. package/out/zero-protocol/src/down.js +20 -4
  934. package/out/zero-protocol/src/down.js.map +1 -1
  935. package/out/zero-protocol/src/error-kind-enum.js +41 -23
  936. package/out/zero-protocol/src/error-kind-enum.js.map +1 -1
  937. package/out/zero-protocol/src/error-origin-enum.js +9 -4
  938. package/out/zero-protocol/src/error-origin-enum.js.map +1 -1
  939. package/out/zero-protocol/src/error-reason-enum.js +17 -8
  940. package/out/zero-protocol/src/error-reason-enum.js.map +1 -1
  941. package/out/zero-protocol/src/error.d.ts +17 -17
  942. package/out/zero-protocol/src/error.js +151 -89
  943. package/out/zero-protocol/src/error.js.map +1 -1
  944. package/out/zero-protocol/src/inspect-down.d.ts +315 -18
  945. package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
  946. package/out/zero-protocol/src/inspect-down.js +72 -54
  947. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  948. package/out/zero-protocol/src/inspect-up.d.ts +10 -6
  949. package/out/zero-protocol/src/inspect-up.d.ts.map +1 -1
  950. package/out/zero-protocol/src/inspect-up.js +39 -26
  951. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  952. package/out/zero-protocol/src/mutation-id.js +9 -5
  953. package/out/zero-protocol/src/mutation-id.js.map +1 -1
  954. package/out/zero-protocol/src/mutation-type-enum.js +7 -3
  955. package/out/zero-protocol/src/mutation-type-enum.js.map +1 -1
  956. package/out/zero-protocol/src/mutations-patch.js +16 -17
  957. package/out/zero-protocol/src/mutations-patch.js.map +1 -1
  958. package/out/zero-protocol/src/ping.js +9 -4
  959. package/out/zero-protocol/src/ping.js.map +1 -1
  960. package/out/zero-protocol/src/poke.js +55 -72
  961. package/out/zero-protocol/src/poke.js.map +1 -1
  962. package/out/zero-protocol/src/pong.js +9 -4
  963. package/out/zero-protocol/src/pong.js.map +1 -1
  964. package/out/zero-protocol/src/primary-key.js +19 -5
  965. package/out/zero-protocol/src/primary-key.js.map +1 -1
  966. package/out/zero-protocol/src/protocol-version.d.ts +2 -2
  967. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  968. package/out/zero-protocol/src/protocol-version.js +7 -59
  969. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  970. package/out/zero-protocol/src/pull.js +26 -19
  971. package/out/zero-protocol/src/pull.js.map +1 -1
  972. package/out/zero-protocol/src/push.d.ts +4 -4
  973. package/out/zero-protocol/src/push.js +179 -176
  974. package/out/zero-protocol/src/push.js.map +1 -1
  975. package/out/zero-protocol/src/queries-patch.d.ts +3 -3
  976. package/out/zero-protocol/src/queries-patch.js +29 -22
  977. package/out/zero-protocol/src/queries-patch.js.map +1 -1
  978. package/out/zero-protocol/src/query-hash.js +18 -14
  979. package/out/zero-protocol/src/query-hash.js.map +1 -1
  980. package/out/zero-protocol/src/row-patch.js +29 -20
  981. package/out/zero-protocol/src/row-patch.js.map +1 -1
  982. package/out/zero-protocol/src/up.d.ts +6 -5
  983. package/out/zero-protocol/src/up.d.ts.map +1 -1
  984. package/out/zero-protocol/src/up.js +18 -4
  985. package/out/zero-protocol/src/up.js.map +1 -1
  986. package/out/zero-protocol/src/version.js +9 -4
  987. package/out/zero-protocol/src/version.js.map +1 -1
  988. package/out/zero-react/src/components/inspector.d.ts +3 -2
  989. package/out/zero-react/src/components/inspector.d.ts.map +1 -1
  990. package/out/{inspector-GP3CBZRU.js → zero-react/src/components/inspector.js} +4 -9
  991. package/out/zero-react/src/components/inspector.js.map +1 -0
  992. package/out/{chunk-VZOYWIRW.js → zero-react/src/components/mark-icon.js} +3 -5
  993. package/out/zero-react/src/components/mark-icon.js.map +1 -0
  994. package/out/zero-react/src/components/zero-inspector.d.ts +3 -2
  995. package/out/zero-react/src/components/zero-inspector.d.ts.map +1 -1
  996. package/out/zero-react/src/components/zero-inspector.js +44 -0
  997. package/out/zero-react/src/components/zero-inspector.js.map +1 -0
  998. package/out/zero-react/src/mod.d.ts +1 -3
  999. package/out/zero-react/src/mod.d.ts.map +1 -1
  1000. package/out/zero-react/src/use-query.d.ts +6 -5
  1001. package/out/zero-react/src/use-query.d.ts.map +1 -1
  1002. package/out/{react.js → zero-react/src/use-query.js} +29 -220
  1003. package/out/zero-react/src/use-query.js.map +1 -0
  1004. package/out/zero-react/src/use-zero-connection-state.d.ts +1 -1
  1005. package/out/zero-react/src/use-zero-connection-state.d.ts.map +1 -1
  1006. package/out/zero-react/src/use-zero-connection-state.js +14 -0
  1007. package/out/zero-react/src/use-zero-connection-state.js.map +1 -0
  1008. package/out/zero-react/src/use-zero-online.js +14 -0
  1009. package/out/zero-react/src/use-zero-online.js.map +1 -0
  1010. package/out/zero-react/src/zero-provider.d.ts +5 -4
  1011. package/out/zero-react/src/zero-provider.d.ts.map +1 -1
  1012. package/out/zero-react/src/zero-provider.js +59 -0
  1013. package/out/zero-react/src/zero-provider.js.map +1 -0
  1014. package/out/zero-schema/src/builder/relationship-builder.js +27 -0
  1015. package/out/zero-schema/src/builder/relationship-builder.js.map +1 -0
  1016. package/out/zero-schema/src/builder/schema-builder.js +88 -0
  1017. package/out/zero-schema/src/builder/schema-builder.js.map +1 -0
  1018. package/out/zero-schema/src/builder/table-builder.js +129 -0
  1019. package/out/zero-schema/src/builder/table-builder.js.map +1 -0
  1020. package/out/zero-schema/src/compiled-permissions.js +23 -19
  1021. package/out/zero-schema/src/compiled-permissions.js.map +1 -1
  1022. package/out/zero-schema/src/name-mapper.js +43 -38
  1023. package/out/zero-schema/src/name-mapper.js.map +1 -1
  1024. package/out/zero-schema/src/permissions.d.ts.map +1 -1
  1025. package/out/zero-schema/src/permissions.js +199 -0
  1026. package/out/zero-schema/src/permissions.js.map +1 -0
  1027. package/out/zero-schema/src/schema-config.js +35 -51
  1028. package/out/zero-schema/src/schema-config.js.map +1 -1
  1029. package/out/zero-server/src/adapters/drizzle.d.ts +1 -1
  1030. package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -1
  1031. package/out/zero-server/src/adapters/drizzle.js +83 -100
  1032. package/out/zero-server/src/adapters/drizzle.js.map +1 -1
  1033. package/out/zero-server/src/adapters/pg.d.ts +3 -2
  1034. package/out/zero-server/src/adapters/pg.d.ts.map +1 -1
  1035. package/out/zero-server/src/adapters/pg.js +53 -77
  1036. package/out/zero-server/src/adapters/pg.js.map +1 -1
  1037. package/out/zero-server/src/adapters/postgresjs.d.ts +1 -1
  1038. package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
  1039. package/out/zero-server/src/adapters/postgresjs.js +39 -57
  1040. package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
  1041. package/out/zero-server/src/custom.d.ts +10 -11
  1042. package/out/zero-server/src/custom.d.ts.map +1 -1
  1043. package/out/zero-server/src/custom.js +185 -117
  1044. package/out/zero-server/src/custom.js.map +1 -1
  1045. package/out/zero-server/src/logging.js +7 -4
  1046. package/out/zero-server/src/logging.js.map +1 -1
  1047. package/out/zero-server/src/mod.d.ts +1 -0
  1048. package/out/zero-server/src/mod.d.ts.map +1 -1
  1049. package/out/zero-server/src/pg-query-executor.js +17 -14
  1050. package/out/zero-server/src/pg-query-executor.js.map +1 -1
  1051. package/out/zero-server/src/process-mutations.d.ts +9 -14
  1052. package/out/zero-server/src/process-mutations.d.ts.map +1 -1
  1053. package/out/zero-server/src/process-mutations.js +337 -272
  1054. package/out/zero-server/src/process-mutations.js.map +1 -1
  1055. package/out/zero-server/src/push-processor.d.ts +5 -3
  1056. package/out/zero-server/src/push-processor.d.ts.map +1 -1
  1057. package/out/zero-server/src/push-processor.js +48 -32
  1058. package/out/zero-server/src/push-processor.js.map +1 -1
  1059. package/out/zero-server/src/queries/process-queries.d.ts +63 -2
  1060. package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
  1061. package/out/zero-server/src/queries/process-queries.js +101 -95
  1062. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  1063. package/out/zero-server/src/schema.js +136 -124
  1064. package/out/zero-server/src/schema.js.map +1 -1
  1065. package/out/zero-server/src/zql-database.d.ts +4 -4
  1066. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  1067. package/out/zero-server/src/zql-database.js +67 -48
  1068. package/out/zero-server/src/zql-database.js.map +1 -1
  1069. package/out/zero-solid/src/mod.d.ts +1 -2
  1070. package/out/zero-solid/src/mod.d.ts.map +1 -1
  1071. package/out/zero-solid/src/solid-view.d.ts +1 -1
  1072. package/out/zero-solid/src/solid-view.d.ts.map +1 -1
  1073. package/out/{solid.js → zero-solid/src/solid-view.js} +42 -196
  1074. package/out/zero-solid/src/solid-view.js.map +1 -0
  1075. package/out/zero-solid/src/use-query.d.ts +3 -3
  1076. package/out/zero-solid/src/use-query.d.ts.map +1 -1
  1077. package/out/zero-solid/src/use-query.js +59 -0
  1078. package/out/zero-solid/src/use-query.js.map +1 -0
  1079. package/out/zero-solid/src/use-zero-connection-state.d.ts +1 -1
  1080. package/out/zero-solid/src/use-zero-connection-state.d.ts.map +1 -1
  1081. package/out/zero-solid/src/use-zero-connection-state.js +17 -0
  1082. package/out/zero-solid/src/use-zero-connection-state.js.map +1 -0
  1083. package/out/zero-solid/src/use-zero-online.d.ts.map +1 -1
  1084. package/out/zero-solid/src/use-zero-online.js +15 -0
  1085. package/out/zero-solid/src/use-zero-online.js.map +1 -0
  1086. package/out/zero-solid/src/use-zero.d.ts +6 -5
  1087. package/out/zero-solid/src/use-zero.d.ts.map +1 -1
  1088. package/out/zero-solid/src/use-zero.js +70 -0
  1089. package/out/zero-solid/src/use-zero.js.map +1 -0
  1090. package/out/zero-types/src/format.js +7 -4
  1091. package/out/zero-types/src/format.js.map +1 -1
  1092. package/out/zero-types/src/name-mapper.js +43 -40
  1093. package/out/zero-types/src/name-mapper.js.map +1 -1
  1094. package/out/zql/src/builder/builder.d.ts +3 -1
  1095. package/out/zql/src/builder/builder.d.ts.map +1 -1
  1096. package/out/zql/src/builder/builder.js +487 -428
  1097. package/out/zql/src/builder/builder.js.map +1 -1
  1098. package/out/zql/src/builder/debug-delegate.js +68 -64
  1099. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  1100. package/out/zql/src/builder/filter.js +132 -138
  1101. package/out/zql/src/builder/filter.js.map +1 -1
  1102. package/out/zql/src/builder/like.js +44 -51
  1103. package/out/zql/src/builder/like.js.map +1 -1
  1104. package/out/zql/src/error.d.ts +5 -0
  1105. package/out/zql/src/error.d.ts.map +1 -1
  1106. package/out/zql/src/error.js +18 -6
  1107. package/out/zql/src/error.js.map +1 -1
  1108. package/out/zql/src/ivm/array-view.js +86 -92
  1109. package/out/zql/src/ivm/array-view.js.map +1 -1
  1110. package/out/zql/src/ivm/constraint.js +74 -127
  1111. package/out/zql/src/ivm/constraint.js.map +1 -1
  1112. package/out/zql/src/ivm/data.js +59 -85
  1113. package/out/zql/src/ivm/data.js.map +1 -1
  1114. package/out/zql/src/ivm/exists.js +236 -243
  1115. package/out/zql/src/ivm/exists.js.map +1 -1
  1116. package/out/zql/src/ivm/fan-in.js +50 -51
  1117. package/out/zql/src/ivm/fan-in.js.map +1 -1
  1118. package/out/zql/src/ivm/fan-out.js +48 -50
  1119. package/out/zql/src/ivm/fan-out.js.map +1 -1
  1120. package/out/zql/src/ivm/filter-operators.js +87 -87
  1121. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  1122. package/out/zql/src/ivm/filter-push.js +26 -23
  1123. package/out/zql/src/ivm/filter-push.js.map +1 -1
  1124. package/out/zql/src/ivm/filter.js +30 -32
  1125. package/out/zql/src/ivm/filter.js.map +1 -1
  1126. package/out/zql/src/ivm/flipped-join.js +343 -326
  1127. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  1128. package/out/zql/src/ivm/join-utils.js +85 -79
  1129. package/out/zql/src/ivm/join-utils.js.map +1 -1
  1130. package/out/zql/src/ivm/join.js +287 -207
  1131. package/out/zql/src/ivm/join.js.map +1 -1
  1132. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +26 -24
  1133. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
  1134. package/out/zql/src/ivm/memory-source.d.ts +2 -2
  1135. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  1136. package/out/zql/src/ivm/memory-source.js +471 -489
  1137. package/out/zql/src/ivm/memory-source.js.map +1 -1
  1138. package/out/zql/src/ivm/memory-storage.js +32 -31
  1139. package/out/zql/src/ivm/memory-storage.js.map +1 -1
  1140. package/out/zql/src/ivm/operator.js +8 -9
  1141. package/out/zql/src/ivm/operator.js.map +1 -1
  1142. package/out/zql/src/ivm/push-accumulated.js +236 -305
  1143. package/out/zql/src/ivm/push-accumulated.js.map +1 -1
  1144. package/out/zql/src/ivm/skip.js +92 -106
  1145. package/out/zql/src/ivm/skip.js.map +1 -1
  1146. package/out/zql/src/ivm/source.d.ts +3 -1
  1147. package/out/zql/src/ivm/source.d.ts.map +1 -1
  1148. package/out/zql/src/ivm/stream.js +20 -16
  1149. package/out/zql/src/ivm/stream.js.map +1 -1
  1150. package/out/zql/src/ivm/take.js +502 -456
  1151. package/out/zql/src/ivm/take.js.map +1 -1
  1152. package/out/zql/src/ivm/union-fan-in.js +156 -134
  1153. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  1154. package/out/zql/src/ivm/union-fan-out.js +46 -45
  1155. package/out/zql/src/ivm/union-fan-out.js.map +1 -1
  1156. package/out/zql/src/ivm/view-apply-change.js +246 -216
  1157. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  1158. package/out/zql/src/ivm/view.d.ts +2 -2
  1159. package/out/zql/src/ivm/view.d.ts.map +1 -1
  1160. package/out/zql/src/mutate/custom.d.ts +21 -12
  1161. package/out/zql/src/mutate/custom.d.ts.map +1 -1
  1162. package/out/zql/src/mutate/custom.js +15 -7
  1163. package/out/zql/src/mutate/custom.js.map +1 -1
  1164. package/out/zql/src/mutate/mutator-registry.d.ts +142 -0
  1165. package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -0
  1166. package/out/zql/src/mutate/mutator-registry.js +97 -0
  1167. package/out/zql/src/mutate/mutator-registry.js.map +1 -0
  1168. package/out/zql/src/mutate/mutator.d.ts +98 -0
  1169. package/out/zql/src/mutate/mutator.d.ts.map +1 -0
  1170. package/out/zql/src/mutate/mutator.js +35 -0
  1171. package/out/zql/src/mutate/mutator.js.map +1 -0
  1172. package/out/zql/src/planner/planner-builder.js +238 -172
  1173. package/out/zql/src/planner/planner-builder.js.map +1 -1
  1174. package/out/zql/src/planner/planner-connection.d.ts +7 -15
  1175. package/out/zql/src/planner/planner-connection.d.ts.map +1 -1
  1176. package/out/zql/src/planner/planner-connection.js +205 -248
  1177. package/out/zql/src/planner/planner-connection.js.map +1 -1
  1178. package/out/zql/src/planner/planner-constraint.js +8 -11
  1179. package/out/zql/src/planner/planner-constraint.js.map +1 -1
  1180. package/out/zql/src/planner/planner-debug.d.ts +37 -43
  1181. package/out/zql/src/planner/planner-debug.d.ts.map +1 -1
  1182. package/out/zql/src/planner/planner-debug.js +227 -161
  1183. package/out/zql/src/planner/planner-debug.js.map +1 -1
  1184. package/out/zql/src/planner/planner-fan-in.d.ts.map +1 -1
  1185. package/out/zql/src/planner/planner-fan-in.js +157 -164
  1186. package/out/zql/src/planner/planner-fan-in.js.map +1 -1
  1187. package/out/zql/src/planner/planner-fan-out.d.ts.map +1 -1
  1188. package/out/zql/src/planner/planner-fan-out.js +73 -59
  1189. package/out/zql/src/planner/planner-fan-out.js.map +1 -1
  1190. package/out/zql/src/planner/planner-graph.d.ts +6 -6
  1191. package/out/zql/src/planner/planner-graph.d.ts.map +1 -1
  1192. package/out/zql/src/planner/planner-graph.js +322 -337
  1193. package/out/zql/src/planner/planner-graph.js.map +1 -1
  1194. package/out/zql/src/planner/planner-join.d.ts.map +1 -1
  1195. package/out/zql/src/planner/planner-join.js +237 -342
  1196. package/out/zql/src/planner/planner-join.js.map +1 -1
  1197. package/out/zql/src/planner/planner-node.d.ts +4 -0
  1198. package/out/zql/src/planner/planner-node.d.ts.map +1 -1
  1199. package/out/zql/src/planner/planner-node.js +8 -2
  1200. package/out/zql/src/planner/planner-node.js.map +1 -1
  1201. package/out/zql/src/planner/planner-source.js +23 -12
  1202. package/out/zql/src/planner/planner-source.js.map +1 -1
  1203. package/out/zql/src/planner/planner-terminus.js +28 -27
  1204. package/out/zql/src/planner/planner-terminus.js.map +1 -1
  1205. package/out/zql/src/query/complete-ordering.d.ts +5 -0
  1206. package/out/zql/src/query/complete-ordering.d.ts.map +1 -0
  1207. package/out/zql/src/query/complete-ordering.js +71 -0
  1208. package/out/zql/src/query/complete-ordering.js.map +1 -0
  1209. package/out/zql/src/query/create-builder.d.ts +7 -0
  1210. package/out/zql/src/query/create-builder.d.ts.map +1 -0
  1211. package/out/zql/src/query/create-builder.js +44 -0
  1212. package/out/zql/src/query/create-builder.js.map +1 -0
  1213. package/out/zql/src/query/error.js +12 -8
  1214. package/out/zql/src/query/error.js.map +1 -1
  1215. package/out/zql/src/query/escape-like.js +7 -0
  1216. package/out/zql/src/query/escape-like.js.map +1 -0
  1217. package/out/zql/src/query/expression.js +153 -151
  1218. package/out/zql/src/query/expression.js.map +1 -1
  1219. package/out/zql/src/query/measure-push-operator.js +42 -35
  1220. package/out/zql/src/query/measure-push-operator.js.map +1 -1
  1221. package/out/zql/src/query/metrics-delegate.js +9 -5
  1222. package/out/zql/src/query/metrics-delegate.js.map +1 -1
  1223. package/out/zql/src/query/named.d.ts +8 -10
  1224. package/out/zql/src/query/named.d.ts.map +1 -1
  1225. package/out/zql/src/query/named.js +52 -88
  1226. package/out/zql/src/query/named.js.map +1 -1
  1227. package/out/zql/src/query/query-delegate-base.d.ts +6 -14
  1228. package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
  1229. package/out/zql/src/query/query-delegate-base.js +118 -134
  1230. package/out/zql/src/query/query-delegate-base.js.map +1 -1
  1231. package/out/zql/src/query/query-delegate.d.ts +6 -8
  1232. package/out/zql/src/query/query-delegate.d.ts.map +1 -1
  1233. package/out/zql/src/query/query-impl.d.ts +19 -19
  1234. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  1235. package/out/zql/src/query/query-impl.js +514 -433
  1236. package/out/zql/src/query/query-impl.js.map +1 -1
  1237. package/out/zql/src/query/query-internals.d.ts +11 -13
  1238. package/out/zql/src/query/query-internals.d.ts.map +1 -1
  1239. package/out/zql/src/query/query-internals.js +9 -19
  1240. package/out/zql/src/query/query-internals.js.map +1 -1
  1241. package/out/zql/src/query/query-registry.d.ts +253 -0
  1242. package/out/zql/src/query/query-registry.d.ts.map +1 -0
  1243. package/out/zql/src/query/query-registry.js +131 -0
  1244. package/out/zql/src/query/query-registry.js.map +1 -0
  1245. package/out/zql/src/query/query.d.ts +30 -16
  1246. package/out/zql/src/query/query.d.ts.map +1 -1
  1247. package/out/zql/src/query/schema-query.d.ts +6 -0
  1248. package/out/zql/src/query/schema-query.d.ts.map +1 -0
  1249. package/out/zql/src/query/static-query.d.ts +3 -3
  1250. package/out/zql/src/query/static-query.d.ts.map +1 -1
  1251. package/out/zql/src/query/static-query.js +41 -18
  1252. package/out/zql/src/query/static-query.js.map +1 -1
  1253. package/out/zql/src/query/ttl.js +69 -62
  1254. package/out/zql/src/query/ttl.js.map +1 -1
  1255. package/out/zql/src/query/validate-input.d.ts +15 -0
  1256. package/out/zql/src/query/validate-input.d.ts.map +1 -0
  1257. package/out/zql/src/query/validate-input.js +24 -0
  1258. package/out/zql/src/query/validate-input.js.map +1 -0
  1259. package/out/zqlite/src/database-storage.d.ts +1 -1
  1260. package/out/zqlite/src/database-storage.d.ts.map +1 -1
  1261. package/out/zqlite/src/database-storage.js +99 -102
  1262. package/out/zqlite/src/database-storage.js.map +1 -1
  1263. package/out/zqlite/src/db.js +241 -194
  1264. package/out/zqlite/src/db.js.map +1 -1
  1265. package/out/zqlite/src/explain-queries.js +13 -16
  1266. package/out/zqlite/src/explain-queries.js.map +1 -1
  1267. package/out/zqlite/src/internal/sql.js +15 -10
  1268. package/out/zqlite/src/internal/sql.js.map +1 -1
  1269. package/out/zqlite/src/internal/statement-cache.js +86 -110
  1270. package/out/zqlite/src/internal/statement-cache.js.map +1 -1
  1271. package/out/zqlite/src/query-builder.js +172 -143
  1272. package/out/zqlite/src/query-builder.js.map +1 -1
  1273. package/out/zqlite/src/query-delegate.d.ts +2 -2
  1274. package/out/zqlite/src/query-delegate.d.ts.map +1 -1
  1275. package/out/zqlite/src/query-delegate.js +53 -43
  1276. package/out/zqlite/src/query-delegate.js.map +1 -1
  1277. package/out/zqlite/src/sqlite-cost-model.js +94 -125
  1278. package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
  1279. package/out/zqlite/src/sqlite-stat-fanout.js +277 -353
  1280. package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
  1281. package/out/zqlite/src/table-source.d.ts +9 -4
  1282. package/out/zqlite/src/table-source.d.ts.map +1 -1
  1283. package/out/zqlite/src/table-source.js +424 -327
  1284. package/out/zqlite/src/table-source.js.map +1 -1
  1285. package/package.json +23 -25
  1286. package/out/chunk-424PT5DM.js +0 -23
  1287. package/out/chunk-424PT5DM.js.map +0 -7
  1288. package/out/chunk-AFADJQ2O.js +0 -1
  1289. package/out/chunk-AFADJQ2O.js.map +0 -7
  1290. package/out/chunk-ASRS2LFV.js.map +0 -7
  1291. package/out/chunk-EZM3XBAB.js.map +0 -7
  1292. package/out/chunk-FODUNUAD.js +0 -18850
  1293. package/out/chunk-FODUNUAD.js.map +0 -7
  1294. package/out/chunk-HCZQVP5R.js.map +0 -7
  1295. package/out/chunk-S633A55A.js +0 -495
  1296. package/out/chunk-S633A55A.js.map +0 -7
  1297. package/out/chunk-TAUDS4QP.js +0 -4129
  1298. package/out/chunk-TAUDS4QP.js.map +0 -7
  1299. package/out/chunk-VZOYWIRW.js.map +0 -7
  1300. package/out/chunk-WPAQ4EPM.js.map +0 -7
  1301. package/out/expo-sqlite.js +0 -11
  1302. package/out/expo-sqlite.js.map +0 -7
  1303. package/out/inspector-GP3CBZRU.js.map +0 -7
  1304. package/out/lazy-inspector-XLKVABX2.js +0 -575
  1305. package/out/lazy-inspector-XLKVABX2.js.map +0 -7
  1306. package/out/op-sqlite.js.map +0 -7
  1307. package/out/react-native.js +0 -25
  1308. package/out/react-native.js.map +0 -7
  1309. package/out/react.js.map +0 -7
  1310. package/out/shared/src/enum.js +0 -2
  1311. package/out/shared/src/enum.js.map +0 -1
  1312. package/out/shared/src/expand.js +0 -2
  1313. package/out/shared/src/expand.js.map +0 -1
  1314. package/out/shared/src/immutable.js +0 -2
  1315. package/out/shared/src/immutable.js.map +0 -1
  1316. package/out/shared/src/types.js +0 -2
  1317. package/out/shared/src/types.js.map +0 -1
  1318. package/out/shared/src/writable.js +0 -2
  1319. package/out/shared/src/writable.js.map +0 -1
  1320. package/out/solid.js.map +0 -7
  1321. package/out/sqlite.js +0 -15
  1322. package/out/sqlite.js.map +0 -7
  1323. package/out/zero/package.json +0 -195
  1324. package/out/zero/src/server/change-streamer.js +0 -2
  1325. package/out/zero/src/server/change-streamer.js.map +0 -1
  1326. package/out/zero/src/server/main.js +0 -2
  1327. package/out/zero/src/server/main.js.map +0 -1
  1328. package/out/zero/src/server/reaper.js +0 -2
  1329. package/out/zero/src/server/reaper.js.map +0 -1
  1330. package/out/zero/src/server/replicator.js +0 -2
  1331. package/out/zero/src/server/replicator.js.map +0 -1
  1332. package/out/zero/src/server/runner/main.js +0 -2
  1333. package/out/zero/src/server/runner/main.js.map +0 -1
  1334. package/out/zero/src/server/syncer.js +0 -2
  1335. package/out/zero/src/server/syncer.js.map +0 -1
  1336. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.js +0 -4
  1337. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.js.map +0 -1
  1338. package/out/zero-cache/src/services/change-source/protocol/mod.js +0 -5
  1339. package/out/zero-cache/src/services/change-source/protocol/mod.js.map +0 -1
  1340. package/out/zero-cache/src/services/service.js +0 -2
  1341. package/out/zero-cache/src/services/service.js.map +0 -1
  1342. package/out/zero-cache/src/services/view-syncer/key-columns.d.ts +0 -32
  1343. package/out/zero-cache/src/services/view-syncer/key-columns.d.ts.map +0 -1
  1344. package/out/zero-cache/src/services/view-syncer/key-columns.js +0 -75
  1345. package/out/zero-cache/src/services/view-syncer/key-columns.js.map +0 -1
  1346. package/out/zero-cache/src/types/satisfies.js +0 -2
  1347. package/out/zero-cache/src/types/satisfies.js.map +0 -1
  1348. package/out/zero-events/src/index.js +0 -2
  1349. package/out/zero-events/src/index.js.map +0 -1
  1350. package/out/zero-events/src/json.js +0 -2
  1351. package/out/zero-events/src/json.js.map +0 -1
  1352. package/out/zero-events/src/status.js +0 -3
  1353. package/out/zero-events/src/status.js.map +0 -1
  1354. package/out/zero-pg/src/mod.js +0 -6
  1355. package/out/zero-pg/src/mod.js.map +0 -1
  1356. package/out/zero-protocol/src/error-kind.js +0 -3
  1357. package/out/zero-protocol/src/error-kind.js.map +0 -1
  1358. package/out/zero-protocol/src/error-origin.js +0 -3
  1359. package/out/zero-protocol/src/error-origin.js.map +0 -1
  1360. package/out/zero-protocol/src/error-reason.js +0 -3
  1361. package/out/zero-protocol/src/error-reason.js.map +0 -1
  1362. package/out/zero-schema/src/table-schema.js +0 -7
  1363. package/out/zero-schema/src/table-schema.js.map +0 -1
  1364. package/out/zero-server/src/mod.js +0 -8
  1365. package/out/zero-server/src/mod.js.map +0 -1
  1366. package/out/zero-types/src/schema-value.js +0 -2
  1367. package/out/zero-types/src/schema-value.js.map +0 -1
  1368. package/out/zero-types/src/schema.js +0 -2
  1369. package/out/zero-types/src/schema.js.map +0 -1
  1370. package/out/zero-types/src/server-schema.js +0 -2
  1371. package/out/zero-types/src/server-schema.js.map +0 -1
  1372. package/out/zero.js +0 -95
  1373. package/out/zero.js.map +0 -7
  1374. package/out/zql/src/ivm/change.js +0 -2
  1375. package/out/zql/src/ivm/change.js.map +0 -1
  1376. package/out/zql/src/ivm/default-format.js +0 -2
  1377. package/out/zql/src/ivm/default-format.js.map +0 -1
  1378. package/out/zql/src/ivm/schema.js +0 -2
  1379. package/out/zql/src/ivm/schema.js.map +0 -1
  1380. package/out/zql/src/ivm/source.js +0 -2
  1381. package/out/zql/src/ivm/source.js.map +0 -1
  1382. package/out/zql/src/ivm/view.js +0 -2
  1383. package/out/zql/src/ivm/view.js.map +0 -1
  1384. package/out/zql/src/query/chained-query.d.ts +0 -35
  1385. package/out/zql/src/query/chained-query.d.ts.map +0 -1
  1386. package/out/zql/src/query/chained-query.js +0 -66
  1387. package/out/zql/src/query/chained-query.js.map +0 -1
  1388. package/out/zql/src/query/define-query.d.ts +0 -51
  1389. package/out/zql/src/query/define-query.d.ts.map +0 -1
  1390. package/out/zql/src/query/define-query.js +0 -53
  1391. package/out/zql/src/query/define-query.js.map +0 -1
  1392. package/out/zql/src/query/query-delegate.js +0 -2
  1393. package/out/zql/src/query/query-delegate.js.map +0 -1
  1394. package/out/zql/src/query/query.js +0 -8
  1395. package/out/zql/src/query/query.js.map +0 -1
  1396. package/out/zql/src/query/root-named-query.d.ts +0 -33
  1397. package/out/zql/src/query/root-named-query.d.ts.map +0 -1
  1398. package/out/zql/src/query/root-named-query.js +0 -95
  1399. package/out/zql/src/query/root-named-query.js.map +0 -1
  1400. package/out/zql/src/query/typed-view.js +0 -2
  1401. package/out/zql/src/query/typed-view.js.map +0 -1
  1402. package/out/zqlite/src/mod.js +0 -5
  1403. 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