@rocicorp/zero 1.12.0-canary.1 → 1.12.0-canary.11

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 (1466) hide show
  1. package/out/_virtual/{_@oxc-project_runtime@0.130.0/helpers → _@oxc-project_runtime@0.154.0/helpers/esm}/usingCtx.js +2 -2
  2. package/out/analyze-query/src/analyze-cli.d.ts.map +1 -1
  3. package/out/analyze-query/src/analyze-cli.js +6 -4
  4. package/out/analyze-query/src/analyze-cli.js.map +1 -1
  5. package/out/analyze-query/src/bin-transform.js +4 -3
  6. package/out/analyze-query/src/bin-transform.js.map +1 -1
  7. package/out/analyze-query/src/zql-chain.d.ts +23 -0
  8. package/out/analyze-query/src/zql-chain.d.ts.map +1 -0
  9. package/out/analyze-query/src/zql-chain.js +170 -0
  10. package/out/analyze-query/src/zql-chain.js.map +1 -0
  11. package/out/ast-to-zql/src/ast-to-zql.d.ts.map +1 -1
  12. package/out/ast-to-zql/src/ast-to-zql.js +61 -20
  13. package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
  14. package/out/ast-to-zql/src/bin.js +4 -3
  15. package/out/ast-to-zql/src/bin.js.map +1 -1
  16. package/out/ast-to-zql/src/format.js.map +1 -1
  17. package/out/datadog/src/datadog-log-sink.js +5 -4
  18. package/out/datadog/src/datadog-log-sink.js.map +1 -1
  19. package/out/otel/src/log-options.js.map +1 -1
  20. package/out/replicache/src/btree/node.d.ts +0 -2
  21. package/out/replicache/src/btree/node.d.ts.map +1 -1
  22. package/out/replicache/src/btree/node.js +14 -12
  23. package/out/replicache/src/btree/node.js.map +1 -1
  24. package/out/replicache/src/btree/read.js +4 -2
  25. package/out/replicache/src/btree/read.js.map +1 -1
  26. package/out/replicache/src/btree/splice.js.map +1 -1
  27. package/out/replicache/src/btree/write.js +9 -5
  28. package/out/replicache/src/btree/write.js.map +1 -1
  29. package/out/replicache/src/config.js +1 -2
  30. package/out/replicache/src/connection-loop.d.ts.map +1 -1
  31. package/out/replicache/src/connection-loop.js +1 -1
  32. package/out/replicache/src/connection-loop.js.map +1 -1
  33. package/out/replicache/src/dag/chunk.js +1 -1
  34. package/out/replicache/src/dag/gc.js.map +1 -1
  35. package/out/replicache/src/dag/lazy-store.js +8 -7
  36. package/out/replicache/src/dag/lazy-store.js.map +1 -1
  37. package/out/replicache/src/dag/store-impl.js +1 -1
  38. package/out/replicache/src/dag/store-impl.js.map +1 -1
  39. package/out/replicache/src/dag/visitor.js.map +1 -1
  40. package/out/replicache/src/db/commit.d.ts +0 -1
  41. package/out/replicache/src/db/commit.d.ts.map +1 -1
  42. package/out/replicache/src/db/commit.js +5 -3
  43. package/out/replicache/src/db/commit.js.map +1 -1
  44. package/out/replicache/src/db/read.js +1 -1
  45. package/out/replicache/src/db/read.js.map +1 -1
  46. package/out/replicache/src/db/rebase.js.map +1 -1
  47. package/out/replicache/src/db/write.d.ts +0 -2
  48. package/out/replicache/src/db/write.d.ts.map +1 -1
  49. package/out/replicache/src/db/write.js +5 -2
  50. package/out/replicache/src/db/write.js.map +1 -1
  51. package/out/replicache/src/deleted-clients.d.ts +0 -2
  52. package/out/replicache/src/deleted-clients.d.ts.map +1 -1
  53. package/out/replicache/src/deleted-clients.js +5 -3
  54. package/out/replicache/src/deleted-clients.js.map +1 -1
  55. package/out/replicache/src/expo-sqlite.js +1 -2
  56. package/out/replicache/src/frozen-json.d.ts +0 -1
  57. package/out/replicache/src/frozen-json.d.ts.map +1 -1
  58. package/out/replicache/src/frozen-json.js +1 -1
  59. package/out/replicache/src/frozen-json.js.map +1 -1
  60. package/out/replicache/src/get-default-puller.js +1 -1
  61. package/out/replicache/src/hash.js +1 -1
  62. package/out/replicache/src/hash.js.map +1 -1
  63. package/out/replicache/src/impl.js +1 -2
  64. package/out/replicache/src/index-defs.d.ts +0 -2
  65. package/out/replicache/src/index-defs.d.ts.map +1 -1
  66. package/out/replicache/src/index-defs.js +5 -3
  67. package/out/replicache/src/index-defs.js.map +1 -1
  68. package/out/replicache/src/kv/expo-sqlite/store.d.ts +0 -1
  69. package/out/replicache/src/kv/expo-sqlite/store.d.ts.map +1 -1
  70. package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
  71. package/out/replicache/src/kv/idb-store.js +2 -2
  72. package/out/replicache/src/kv/idb-store.js.map +1 -1
  73. package/out/replicache/src/kv/mem-fallback-store.js +1 -1
  74. package/out/replicache/src/kv/mem-fallback-store.js.map +1 -1
  75. package/out/replicache/src/kv/mem-store.js.map +1 -1
  76. package/out/replicache/src/kv/op-sqlite/store.js.map +1 -1
  77. package/out/replicache/src/kv/op-sqlite/types.js.map +1 -1
  78. package/out/replicache/src/kv/read-impl.js.map +1 -1
  79. package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
  80. package/out/replicache/src/kv/sqlite-store.js +8 -4
  81. package/out/replicache/src/kv/sqlite-store.js.map +1 -1
  82. package/out/replicache/src/kv/throw-if-closed.d.ts +0 -3
  83. package/out/replicache/src/kv/throw-if-closed.d.ts.map +1 -1
  84. package/out/replicache/src/kv/throw-if-closed.js.map +1 -1
  85. package/out/replicache/src/kv/write-impl-base.js +4 -1
  86. package/out/replicache/src/kv/write-impl-base.js.map +1 -1
  87. package/out/replicache/src/kv/write-impl.js.map +1 -1
  88. package/out/replicache/src/log-options.js +2 -1
  89. package/out/replicache/src/log-options.js.map +1 -1
  90. package/out/replicache/src/make-idb-name.js +1 -1
  91. package/out/replicache/src/new-client-channel.js +9 -7
  92. package/out/replicache/src/new-client-channel.js.map +1 -1
  93. package/out/replicache/src/on-persist-channel.js +1 -1
  94. package/out/replicache/src/on-persist-channel.js.map +1 -1
  95. package/out/replicache/src/op-sqlite.js +1 -2
  96. package/out/replicache/src/pending-mutations.js +2 -1
  97. package/out/replicache/src/pending-mutations.js.map +1 -1
  98. package/out/replicache/src/persist/client-gc.js +2 -2
  99. package/out/replicache/src/persist/client-gc.js.map +1 -1
  100. package/out/replicache/src/persist/client-group-gc.d.ts +0 -7
  101. package/out/replicache/src/persist/client-group-gc.d.ts.map +1 -1
  102. package/out/replicache/src/persist/client-group-gc.js +1 -1
  103. package/out/replicache/src/persist/client-group-gc.js.map +1 -1
  104. package/out/replicache/src/persist/client-groups.js +1 -1
  105. package/out/replicache/src/persist/client-groups.js.map +1 -1
  106. package/out/replicache/src/persist/clients.js +1 -1
  107. package/out/replicache/src/persist/clients.js.map +1 -1
  108. package/out/replicache/src/persist/collect-idb-databases.js +5 -4
  109. package/out/replicache/src/persist/collect-idb-databases.js.map +1 -1
  110. package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -1
  111. package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -1
  112. package/out/replicache/src/persist/heartbeat.js +2 -2
  113. package/out/replicache/src/persist/heartbeat.js.map +1 -1
  114. package/out/replicache/src/persist/idb-databases-store.js +1 -1
  115. package/out/replicache/src/persist/idb-databases-store.js.map +1 -1
  116. package/out/replicache/src/persist/make-client-id.js +1 -1
  117. package/out/replicache/src/persist/make-client-id.js.map +1 -1
  118. package/out/replicache/src/persist/persist.js +3 -2
  119. package/out/replicache/src/persist/persist.js.map +1 -1
  120. package/out/replicache/src/persist/refresh.js +8 -5
  121. package/out/replicache/src/persist/refresh.js.map +1 -1
  122. package/out/replicache/src/process-scheduler.js +1 -1
  123. package/out/replicache/src/process-scheduler.js.map +1 -1
  124. package/out/replicache/src/replicache-impl.d.ts +2 -7
  125. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  126. package/out/replicache/src/replicache-impl.js +21 -18
  127. package/out/replicache/src/replicache-impl.js.map +1 -1
  128. package/out/replicache/src/scan-iterator.js.map +1 -1
  129. package/out/replicache/src/scan-options.js +7 -6
  130. package/out/replicache/src/scan-options.js.map +1 -1
  131. package/out/replicache/src/sqlite.js +1 -2
  132. package/out/replicache/src/subscriptions.js +1 -1
  133. package/out/replicache/src/subscriptions.js.map +1 -1
  134. package/out/replicache/src/sync/diff.js +3 -1
  135. package/out/replicache/src/sync/diff.js.map +1 -1
  136. package/out/replicache/src/sync/ids.js.map +1 -1
  137. package/out/replicache/src/sync/patch.d.ts +0 -5
  138. package/out/replicache/src/sync/patch.d.ts.map +1 -1
  139. package/out/replicache/src/sync/patch.js +2 -4
  140. package/out/replicache/src/sync/patch.js.map +1 -1
  141. package/out/replicache/src/sync/pull.d.ts +0 -1
  142. package/out/replicache/src/sync/pull.d.ts.map +1 -1
  143. package/out/replicache/src/sync/pull.js +3 -1
  144. package/out/replicache/src/sync/pull.js.map +1 -1
  145. package/out/replicache/src/sync/push.d.ts +2 -1
  146. package/out/replicache/src/sync/push.d.ts.map +1 -1
  147. package/out/replicache/src/sync/push.js.map +1 -1
  148. package/out/replicache/src/sync/request-id.js +1 -1
  149. package/out/replicache/src/sync/request-id.js.map +1 -1
  150. package/out/replicache/src/transactions.js +1 -1
  151. package/out/replicache/src/transactions.js.map +1 -1
  152. package/out/replicache/src/types.d.ts +2 -1
  153. package/out/replicache/src/types.d.ts.map +1 -1
  154. package/out/shared/src/arrays.js +4 -1
  155. package/out/shared/src/arrays.js.map +1 -1
  156. package/out/shared/src/asserts.d.ts +0 -5
  157. package/out/shared/src/asserts.d.ts.map +1 -1
  158. package/out/shared/src/asserts.js.map +1 -1
  159. package/out/shared/src/bigint-json.d.ts +9 -0
  160. package/out/shared/src/bigint-json.d.ts.map +1 -1
  161. package/out/shared/src/bigint-json.js +27 -2
  162. package/out/shared/src/bigint-json.js.map +1 -1
  163. package/out/shared/src/broadcast-channel.js +1 -1
  164. package/out/shared/src/browser-env.d.ts +0 -17
  165. package/out/shared/src/browser-env.d.ts.map +1 -1
  166. package/out/shared/src/browser-env.js.map +1 -1
  167. package/out/shared/src/btree-set.js +11 -8
  168. package/out/shared/src/btree-set.js.map +1 -1
  169. package/out/shared/src/cache.js.map +1 -1
  170. package/out/shared/src/config.js +1 -1
  171. package/out/shared/src/custom-key-map.js.map +1 -1
  172. package/out/shared/src/custom-key-set.js.map +1 -1
  173. package/out/shared/src/deep-clone.d.ts +0 -1
  174. package/out/shared/src/deep-clone.d.ts.map +1 -1
  175. package/out/shared/src/deep-clone.js.map +1 -1
  176. package/out/shared/src/document-visible.js +1 -1
  177. package/out/shared/src/document-visible.js.map +1 -1
  178. package/out/shared/src/dotenv.js.map +1 -1
  179. package/out/shared/src/error.js +1 -1
  180. package/out/shared/src/error.js.map +1 -1
  181. package/out/shared/src/expand.d.ts +0 -3
  182. package/out/shared/src/expand.d.ts.map +1 -1
  183. package/out/shared/src/hash.js +2 -2
  184. package/out/shared/src/hash.js.map +1 -1
  185. package/out/shared/src/immutable.d.ts +1 -1
  186. package/out/shared/src/immutable.d.ts.map +1 -1
  187. package/out/shared/src/iterables.d.ts +0 -1
  188. package/out/shared/src/iterables.d.ts.map +1 -1
  189. package/out/shared/src/iterables.js.map +1 -1
  190. package/out/shared/src/json-schema.js.map +1 -1
  191. package/out/shared/src/json.js.map +1 -1
  192. package/out/shared/src/logging-test-utils.js.map +1 -1
  193. package/out/shared/src/logging.js +1 -1
  194. package/out/shared/src/logging.js.map +1 -1
  195. package/out/shared/src/navigator.js +1 -1
  196. package/out/shared/src/options-types.d.ts +1 -1
  197. package/out/shared/src/options-types.d.ts.map +1 -1
  198. package/out/shared/src/options.d.ts +2 -3
  199. package/out/shared/src/options.d.ts.map +1 -1
  200. package/out/shared/src/options.js +8 -11
  201. package/out/shared/src/options.js.map +1 -1
  202. package/out/shared/src/promise-race.js +1 -1
  203. package/out/shared/src/promise-race.js.map +1 -1
  204. package/out/shared/src/queue.js +1 -1
  205. package/out/shared/src/queue.js.map +1 -1
  206. package/out/shared/src/record-proxy.js.map +1 -1
  207. package/out/shared/src/resolved-promises.d.ts +0 -4
  208. package/out/shared/src/resolved-promises.d.ts.map +1 -1
  209. package/out/shared/src/resolved-promises.js +0 -1
  210. package/out/shared/src/resolved-promises.js.map +1 -1
  211. package/out/shared/src/resolver.d.ts +9 -0
  212. package/out/shared/src/resolver.d.ts.map +1 -0
  213. package/out/shared/src/resolver.js +6 -0
  214. package/out/shared/src/resolver.js.map +1 -0
  215. package/out/shared/src/ring-buffer.js.map +1 -1
  216. package/out/shared/src/size-of-value.js +7 -10
  217. package/out/shared/src/size-of-value.js.map +1 -1
  218. package/out/shared/src/sleep.js +1 -1
  219. package/out/shared/src/sleep.js.map +1 -1
  220. package/out/shared/src/sorted-entries.js.map +1 -1
  221. package/out/shared/src/tdigest-schema.js.map +1 -1
  222. package/out/shared/src/tdigest.d.ts +0 -1
  223. package/out/shared/src/tdigest.d.ts.map +1 -1
  224. package/out/shared/src/tdigest.js.map +1 -1
  225. package/out/shared/src/valita.js +1 -1
  226. package/out/shared/src/valita.js.map +1 -1
  227. package/out/z2s/src/compiler.d.ts +1 -1
  228. package/out/z2s/src/compiler.d.ts.map +1 -1
  229. package/out/z2s/src/compiler.js +344 -9
  230. package/out/z2s/src/compiler.js.map +1 -1
  231. package/out/z2s/src/sql.d.ts +9 -5
  232. package/out/z2s/src/sql.d.ts.map +1 -1
  233. package/out/z2s/src/sql.js +58 -11
  234. package/out/z2s/src/sql.js.map +1 -1
  235. package/out/zero/package.js +210 -189
  236. package/out/zero/package.js.map +1 -1
  237. package/out/zero/src/adapters/drizzle.js +1 -2
  238. package/out/zero/src/adapters/kysely.js +1 -2
  239. package/out/zero/src/adapters/pg.js +1 -2
  240. package/out/zero/src/adapters/postgresjs.js +1 -2
  241. package/out/zero/src/adapters/prisma.js +1 -2
  242. package/out/zero/src/analyze.js +1 -2
  243. package/out/zero/src/bindings.js +4 -4
  244. package/out/zero/src/change-protocol/v0.js +1 -2
  245. package/out/zero/src/expo-sqlite.js +1 -2
  246. package/out/zero/src/op-sqlite.js +1 -2
  247. package/out/zero/src/react-native.js.map +1 -1
  248. package/out/zero/src/sqlite.js +1 -2
  249. package/out/zero/src/zero-cache-dev.js +11 -10
  250. package/out/zero/src/zero-cache-dev.js.map +1 -1
  251. package/out/zero/src/zero-out.js +2 -1
  252. package/out/zero/src/zero-out.js.map +1 -1
  253. package/out/zero-cache/src/auth/auth.js +1 -1
  254. package/out/zero-cache/src/auth/auth.js.map +1 -1
  255. package/out/zero-cache/src/auth/jwt.js +4 -1
  256. package/out/zero-cache/src/auth/jwt.js.map +1 -1
  257. package/out/zero-cache/src/auth/load-permissions.js +1 -1
  258. package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
  259. package/out/zero-cache/src/auth/read-authorizer.js +3 -2
  260. package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
  261. package/out/zero-cache/src/auth/write-authorizer.js +16 -20
  262. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  263. package/out/zero-cache/src/config/network.js +1 -1
  264. package/out/zero-cache/src/config/network.js.map +1 -1
  265. package/out/zero-cache/src/config/server-context.js.map +1 -1
  266. package/out/zero-cache/src/config/zero-config.d.ts +23 -11
  267. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  268. package/out/zero-cache/src/config/zero-config.js +51 -4
  269. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  270. package/out/zero-cache/src/custom/fetch.js +1 -1
  271. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  272. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  273. package/out/zero-cache/src/db/create.js +1 -1
  274. package/out/zero-cache/src/db/create.js.map +1 -1
  275. package/out/zero-cache/src/db/index-predicate.js.map +1 -1
  276. package/out/zero-cache/src/db/lite-tables.d.ts +2 -2
  277. package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
  278. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  279. package/out/zero-cache/src/db/migration-lite.js +1 -1
  280. package/out/zero-cache/src/db/migration-lite.js.map +1 -1
  281. package/out/zero-cache/src/db/migration.js +5 -3
  282. package/out/zero-cache/src/db/migration.js.map +1 -1
  283. package/out/zero-cache/src/db/pg-copy-binary.js +4 -3
  284. package/out/zero-cache/src/db/pg-copy-binary.js.map +1 -1
  285. package/out/zero-cache/src/db/pg-copy.js +0 -1
  286. package/out/zero-cache/src/db/pg-copy.js.map +1 -1
  287. package/out/zero-cache/src/db/pg-to-lite.js +1 -1
  288. package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
  289. package/out/zero-cache/src/db/pg-type-parser.js.map +1 -1
  290. package/out/zero-cache/src/db/run-transaction.js.map +1 -1
  291. package/out/zero-cache/src/db/specs.d.ts +3 -4
  292. package/out/zero-cache/src/db/specs.d.ts.map +1 -1
  293. package/out/zero-cache/src/db/specs.js +1 -1
  294. package/out/zero-cache/src/db/specs.js.map +1 -1
  295. package/out/zero-cache/src/db/sqlite-corruption.js.map +1 -1
  296. package/out/zero-cache/src/db/statements.d.ts.map +1 -1
  297. package/out/zero-cache/src/db/statements.js +9 -2
  298. package/out/zero-cache/src/db/statements.js.map +1 -1
  299. package/out/zero-cache/src/db/transaction-pool.js +6 -4
  300. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  301. package/out/zero-cache/src/db/warmup.js.map +1 -1
  302. package/out/zero-cache/src/observability/events.js +1 -1
  303. package/out/zero-cache/src/observability/events.js.map +1 -1
  304. package/out/zero-cache/src/observability/log-throttle.js.map +1 -1
  305. package/out/zero-cache/src/observability/metrics.js.map +1 -1
  306. package/out/zero-cache/src/scripts/deploy-permissions.js +5 -3
  307. package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
  308. package/out/zero-cache/src/scripts/permissions.js.map +1 -1
  309. package/out/zero-cache/src/server/anonymous-otel-start.js +2 -1
  310. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
  311. package/out/zero-cache/src/server/change-streamer.js +35 -11
  312. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  313. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  314. package/out/zero-cache/src/server/logging.js +1 -1
  315. package/out/zero-cache/src/server/logging.js.map +1 -1
  316. package/out/zero-cache/src/server/main.js +2 -2
  317. package/out/zero-cache/src/server/main.js.map +1 -1
  318. package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
  319. package/out/zero-cache/src/server/otel-start.js.map +1 -1
  320. package/out/zero-cache/src/server/reaper.js +2 -2
  321. package/out/zero-cache/src/server/reaper.js.map +1 -1
  322. package/out/zero-cache/src/server/replicator.js +1 -1
  323. package/out/zero-cache/src/server/replicator.js.map +1 -1
  324. package/out/zero-cache/src/server/runner/run-worker.d.ts.map +1 -1
  325. package/out/zero-cache/src/server/runner/run-worker.js +12 -8
  326. package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
  327. package/out/zero-cache/src/server/runner/runtime.js +2 -1
  328. package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
  329. package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts +9 -1
  330. package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts.map +1 -1
  331. package/out/zero-cache/src/server/runner/zero-dispatcher.js +29 -2
  332. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  333. package/out/zero-cache/src/server/shadow-syncer.js +1 -1
  334. package/out/zero-cache/src/server/shadow-syncer.js.map +1 -1
  335. package/out/zero-cache/src/server/slot-keeper.js.map +1 -1
  336. package/out/zero-cache/src/server/syncer-assigner.js.map +1 -1
  337. package/out/zero-cache/src/server/syncer.js +10 -5
  338. package/out/zero-cache/src/server/syncer.js.map +1 -1
  339. package/out/zero-cache/src/server/worker-dispatcher.js +1 -1
  340. package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
  341. package/out/zero-cache/src/server/worker-urls.js.map +1 -1
  342. package/out/zero-cache/src/services/analyze.js +2 -2
  343. package/out/zero-cache/src/services/analyze.js.map +1 -1
  344. package/out/zero-cache/src/services/change-source/common/backfill-manager.js +3 -3
  345. package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
  346. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js +1 -1
  347. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -1
  348. package/out/zero-cache/src/services/change-source/common/init-cleanup.js.map +1 -1
  349. package/out/zero-cache/src/services/change-source/common/replica-restore.js.map +1 -1
  350. package/out/zero-cache/src/services/change-source/common/replica-schema.js +4 -4
  351. package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
  352. package/out/zero-cache/src/services/change-source/custom/change-source.js +3 -3
  353. package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
  354. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +1 -1
  355. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +3 -3
  356. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
  357. package/out/zero-cache/src/services/change-source/pg/change-source-init.js +52 -27
  358. package/out/zero-cache/src/services/change-source/pg/change-source-init.js.map +1 -1
  359. package/out/zero-cache/src/services/change-source/pg/change-source.js +70 -15
  360. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  361. package/out/zero-cache/src/services/change-source/pg/decommission.js +2 -1
  362. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
  363. package/out/zero-cache/src/services/change-source/pg/fork-request.js +54 -0
  364. package/out/zero-cache/src/services/change-source/pg/fork-request.js.map +1 -0
  365. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +9 -7
  366. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  367. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
  368. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
  369. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +4 -3
  370. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
  371. package/out/zero-cache/src/services/change-source/pg/lsn.d.ts +0 -2
  372. package/out/zero-cache/src/services/change-source/pg/lsn.d.ts.map +1 -1
  373. package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
  374. package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.js +2 -2
  375. package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.js.map +1 -1
  376. package/out/zero-cache/src/services/change-source/pg/replication-slot-health.js +1 -1
  377. package/out/zero-cache/src/services/change-source/pg/replication-slot-health.js.map +1 -1
  378. package/out/zero-cache/src/services/change-source/pg/replication-slots.js +9 -3
  379. package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -1
  380. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +0 -12
  381. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts.map +1 -1
  382. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +5 -3
  383. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  384. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.d.ts +1 -1
  385. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.d.ts.map +1 -1
  386. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js +13 -12
  387. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js.map +1 -1
  388. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  389. package/out/zero-cache/src/services/change-source/pg/schema/published.js +2 -2
  390. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
  391. package/out/zero-cache/src/services/change-source/pg/schema/replica-stage-enum.js.map +1 -1
  392. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +9 -6
  393. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  394. package/out/zero-cache/src/services/change-source/pg/schema/validation.d.ts +0 -1
  395. package/out/zero-cache/src/services/change-source/pg/schema/validation.d.ts.map +1 -1
  396. package/out/zero-cache/src/services/change-source/pg/schema/validation.js +1 -1
  397. package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
  398. package/out/zero-cache/src/services/change-source/protocol/backfill-progress.js +1 -1
  399. package/out/zero-cache/src/services/change-source/protocol/backfill-progress.js.map +1 -1
  400. package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
  401. package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
  402. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +1 -0
  403. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
  404. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
  405. package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts +3 -0
  406. package/out/zero-cache/src/services/change-source/protocol/current/status.d.ts.map +1 -1
  407. package/out/zero-cache/src/services/change-source/protocol/current/status.js +2 -1
  408. package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
  409. package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts +1 -0
  410. package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts.map +1 -1
  411. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
  412. package/out/zero-cache/src/services/change-source/protocol/current.js +1 -1
  413. package/out/zero-cache/src/services/change-source/protocol/mod.js +1 -2
  414. package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.js.map +1 -1
  415. package/out/zero-cache/src/services/change-streamer/backfill-state.js +1 -1
  416. package/out/zero-cache/src/services/change-streamer/backfill-state.js.map +1 -1
  417. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js +6 -6
  418. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js.map +1 -1
  419. package/out/zero-cache/src/services/change-streamer/backup-monitor.js +56 -21
  420. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  421. package/out/zero-cache/src/services/change-streamer/broadcast.js +2 -2
  422. package/out/zero-cache/src/services/change-streamer/broadcast.js.map +1 -1
  423. package/out/zero-cache/src/services/change-streamer/change-log-codec.js +2 -3
  424. package/out/zero-cache/src/services/change-streamer/change-log-codec.js.map +1 -1
  425. package/out/zero-cache/src/services/change-streamer/change-log-initializer.js +3 -3
  426. package/out/zero-cache/src/services/change-streamer/change-log-initializer.js.map +1 -1
  427. package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.js.map +1 -1
  428. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +4 -2
  429. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  430. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +49 -30
  431. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  432. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  433. package/out/zero-cache/src/services/change-streamer/drain-tracker.js +1 -1
  434. package/out/zero-cache/src/services/change-streamer/drain-tracker.js.map +1 -1
  435. package/out/zero-cache/src/services/change-streamer/forwarder.js +11 -10
  436. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  437. package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js +81 -12
  438. package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js.map +1 -1
  439. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js +4 -4
  440. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js.map +1 -1
  441. package/out/zero-cache/src/services/change-streamer/replica-poller.js +2 -2
  442. package/out/zero-cache/src/services/change-streamer/replica-poller.js.map +1 -1
  443. package/out/zero-cache/src/services/change-streamer/restore-admission.js +12 -1
  444. package/out/zero-cache/src/services/change-streamer/restore-admission.js.map +1 -1
  445. package/out/zero-cache/src/services/change-streamer/schema/init.js +1 -1
  446. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  447. package/out/zero-cache/src/services/change-streamer/schema/tables.js +1 -1
  448. package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
  449. package/out/zero-cache/src/services/change-streamer/server-start-metrics.js +42 -0
  450. package/out/zero-cache/src/services/change-streamer/server-start-metrics.js.map +1 -0
  451. package/out/zero-cache/src/services/change-streamer/snapshot-message.js +1 -2
  452. package/out/zero-cache/src/services/change-streamer/snapshot-message.js.map +1 -1
  453. package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js.map +1 -1
  454. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js +2 -2
  455. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js.map +1 -1
  456. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.js +2 -2
  457. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.js.map +1 -1
  458. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.js.map +1 -1
  459. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.js.map +1 -1
  460. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js +4 -6
  461. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js.map +1 -1
  462. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js +3 -5
  463. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js.map +1 -1
  464. package/out/zero-cache/src/services/change-streamer/storer.js +4 -4
  465. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  466. package/out/zero-cache/src/services/change-streamer/subscribe.js.map +1 -1
  467. package/out/zero-cache/src/services/change-streamer/subscriber.js +8 -7
  468. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  469. package/out/zero-cache/src/services/change-streamer/upstream-acker.js +0 -1
  470. package/out/zero-cache/src/services/change-streamer/upstream-acker.js.map +1 -1
  471. package/out/zero-cache/src/services/heapz.js +2 -1
  472. package/out/zero-cache/src/services/heapz.js.map +1 -1
  473. package/out/zero-cache/src/services/http-service.d.ts +8 -2
  474. package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
  475. package/out/zero-cache/src/services/http-service.js +19 -5
  476. package/out/zero-cache/src/services/http-service.js.map +1 -1
  477. package/out/zero-cache/src/services/life-cycle.d.ts +19 -0
  478. package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
  479. package/out/zero-cache/src/services/life-cycle.js +55 -3
  480. package/out/zero-cache/src/services/life-cycle.js.map +1 -1
  481. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +4 -2
  482. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
  483. package/out/zero-cache/src/services/litestream/commands.js +4 -4
  484. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  485. package/out/zero-cache/src/services/litestream/litestream-checkpointer.js +2 -2
  486. package/out/zero-cache/src/services/litestream/litestream-checkpointer.js.map +1 -1
  487. package/out/zero-cache/src/services/litestream/litestream-controller.js.map +1 -1
  488. package/out/zero-cache/src/services/litestream/metrics.js.map +1 -1
  489. package/out/zero-cache/src/services/litestream/restore-progress.js.map +1 -1
  490. package/out/zero-cache/src/services/mutagen/mutagen.js +3 -4
  491. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  492. package/out/zero-cache/src/services/mutagen/pusher.js +61 -17
  493. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  494. package/out/zero-cache/src/services/plannerz.d.ts +4 -12
  495. package/out/zero-cache/src/services/plannerz.d.ts.map +1 -1
  496. package/out/zero-cache/src/services/plannerz.js +6 -7
  497. package/out/zero-cache/src/services/plannerz.js.map +1 -1
  498. package/out/zero-cache/src/services/profz.js +5 -3
  499. package/out/zero-cache/src/services/profz.js.map +1 -1
  500. package/out/zero-cache/src/services/replicator/change-log-cookies.js.map +1 -1
  501. package/out/zero-cache/src/services/replicator/change-log-db.js +4 -3
  502. package/out/zero-cache/src/services/replicator/change-log-db.js.map +1 -1
  503. package/out/zero-cache/src/services/replicator/change-log-stream-writer.js.map +1 -1
  504. package/out/zero-cache/src/services/replicator/change-processor.js +1 -1
  505. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  506. package/out/zero-cache/src/services/replicator/drain-handler.js +1 -1
  507. package/out/zero-cache/src/services/replicator/drain-handler.js.map +1 -1
  508. package/out/zero-cache/src/services/replicator/incremental-sync.js +4 -4
  509. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  510. package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
  511. package/out/zero-cache/src/services/replicator/replication-status.js +4 -3
  512. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  513. package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
  514. package/out/zero-cache/src/services/replicator/reporter/recorder.js +2 -2
  515. package/out/zero-cache/src/services/replicator/reporter/recorder.js.map +1 -1
  516. package/out/zero-cache/src/services/replicator/reporter/report-schema.d.ts +2 -11
  517. package/out/zero-cache/src/services/replicator/reporter/report-schema.d.ts.map +1 -1
  518. package/out/zero-cache/src/services/replicator/reporter/report-schema.js.map +1 -1
  519. package/out/zero-cache/src/services/replicator/schema/backfilling.js +2 -2
  520. package/out/zero-cache/src/services/replicator/schema/backfilling.js.map +1 -1
  521. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +19 -17
  522. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts.map +1 -1
  523. package/out/zero-cache/src/services/replicator/schema/change-log.js +31 -15
  524. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  525. package/out/zero-cache/src/services/replicator/schema/column-metadata.d.ts +0 -7
  526. package/out/zero-cache/src/services/replicator/schema/column-metadata.d.ts.map +1 -1
  527. package/out/zero-cache/src/services/replicator/schema/column-metadata.js +1 -1
  528. package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -1
  529. package/out/zero-cache/src/services/replicator/schema/replication-state.js +10 -7
  530. package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
  531. package/out/zero-cache/src/services/replicator/schema/table-metadata.js.map +1 -1
  532. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js +1 -1
  533. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js.map +1 -1
  534. package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.js +1 -1
  535. package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.js.map +1 -1
  536. package/out/zero-cache/src/services/replicator/write-worker-client.js +2 -2
  537. package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -1
  538. package/out/zero-cache/src/services/replicator/write-worker.js +3 -3
  539. package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -1
  540. package/out/zero-cache/src/services/run-ast.js +1 -1
  541. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  542. package/out/zero-cache/src/services/runner.js.map +1 -1
  543. package/out/zero-cache/src/services/running-state.js +1 -1
  544. package/out/zero-cache/src/services/running-state.js.map +1 -1
  545. package/out/zero-cache/src/services/shadow-sync/shadow-sync-service.js.map +1 -1
  546. package/out/zero-cache/src/services/statz.js +4 -3
  547. package/out/zero-cache/src/services/statz.js.map +1 -1
  548. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +2 -2
  549. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
  550. package/out/zero-cache/src/services/view-syncer/advancement-metrics.js.map +1 -1
  551. package/out/zero-cache/src/services/view-syncer/batch-pacer.js.map +1 -1
  552. package/out/zero-cache/src/services/view-syncer/client-handler.js +71 -24
  553. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  554. package/out/zero-cache/src/services/view-syncer/client-schema.js +46 -6
  555. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  556. package/out/zero-cache/src/services/view-syncer/connection-context-manager.js.map +1 -1
  557. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +2 -2
  558. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
  559. package/out/zero-cache/src/services/view-syncer/cvr-store.js +12 -7
  560. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  561. package/out/zero-cache/src/services/view-syncer/cvr.js +12 -4
  562. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  563. package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.js +1 -1
  564. package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.js.map +1 -1
  565. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +2 -2
  566. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  567. package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.js.map +1 -1
  568. package/out/zero-cache/src/services/view-syncer/hydration-budget.js.map +1 -1
  569. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js +2 -2
  570. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js.map +1 -1
  571. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +6 -4
  572. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  573. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +112 -21
  574. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  575. package/out/zero-cache/src/services/view-syncer/plan-warnings.js.map +1 -1
  576. package/out/zero-cache/src/services/view-syncer/push-cost.js.map +1 -1
  577. package/out/zero-cache/src/services/view-syncer/push-cutoff.js.map +1 -1
  578. package/out/zero-cache/src/services/view-syncer/query-covering.js +2 -2
  579. package/out/zero-cache/src/services/view-syncer/query-covering.js.map +1 -1
  580. package/out/zero-cache/src/services/view-syncer/query-shape.js.map +1 -1
  581. package/out/zero-cache/src/services/view-syncer/query-stats.js +1 -1
  582. package/out/zero-cache/src/services/view-syncer/query-stats.js.map +1 -1
  583. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +2 -2
  584. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  585. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
  586. package/out/zero-cache/src/services/view-syncer/schema/types.js +2 -16
  587. package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
  588. package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.js +7 -1
  589. package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.js.map +1 -1
  590. package/out/zero-cache/src/services/view-syncer/snapshotter.js +13 -9
  591. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  592. package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
  593. package/out/zero-cache/src/services/view-syncer/view-syncer.js +52 -28
  594. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  595. package/out/zero-cache/src/types/error-with-level.js.map +1 -1
  596. package/out/zero-cache/src/types/lexi-version.js.map +1 -1
  597. package/out/zero-cache/src/types/lite.d.ts +0 -1
  598. package/out/zero-cache/src/types/lite.d.ts.map +1 -1
  599. package/out/zero-cache/src/types/lite.js +1 -1
  600. package/out/zero-cache/src/types/lite.js.map +1 -1
  601. package/out/zero-cache/src/types/pg-data-type.js +1 -1
  602. package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
  603. package/out/zero-cache/src/types/pg-types.d.ts +0 -40
  604. package/out/zero-cache/src/types/pg-types.d.ts.map +1 -1
  605. package/out/zero-cache/src/types/pg-types.js.map +1 -1
  606. package/out/zero-cache/src/types/pg.js +6 -4
  607. package/out/zero-cache/src/types/pg.js.map +1 -1
  608. package/out/zero-cache/src/types/poke-chunk.d.ts +0 -1
  609. package/out/zero-cache/src/types/poke-chunk.d.ts.map +1 -1
  610. package/out/zero-cache/src/types/poke-chunk.js +1 -1
  611. package/out/zero-cache/src/types/poke-chunk.js.map +1 -1
  612. package/out/zero-cache/src/types/processes.js +5 -5
  613. package/out/zero-cache/src/types/processes.js.map +1 -1
  614. package/out/zero-cache/src/types/profiler.js +1 -1
  615. package/out/zero-cache/src/types/profiler.js.map +1 -1
  616. package/out/zero-cache/src/types/row-key.d.ts +0 -5
  617. package/out/zero-cache/src/types/row-key.d.ts.map +1 -1
  618. package/out/zero-cache/src/types/row-key.js +8 -1
  619. package/out/zero-cache/src/types/row-key.js.map +1 -1
  620. package/out/zero-cache/src/types/sql.js.map +1 -1
  621. package/out/zero-cache/src/types/streams.d.ts.map +1 -1
  622. package/out/zero-cache/src/types/streams.js +11 -10
  623. package/out/zero-cache/src/types/streams.js.map +1 -1
  624. package/out/zero-cache/src/types/strings.js.map +1 -1
  625. package/out/zero-cache/src/types/subscription.js +1 -1
  626. package/out/zero-cache/src/types/subscription.js.map +1 -1
  627. package/out/zero-cache/src/types/timeout.js +1 -1
  628. package/out/zero-cache/src/types/websocket-handoff.d.ts +4 -7
  629. package/out/zero-cache/src/types/websocket-handoff.d.ts.map +1 -1
  630. package/out/zero-cache/src/types/websocket-handoff.js +16 -2
  631. package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
  632. package/out/zero-cache/src/types/ws.d.ts +2 -1
  633. package/out/zero-cache/src/types/ws.d.ts.map +1 -1
  634. package/out/zero-cache/src/types/ws.js.map +1 -1
  635. package/out/zero-cache/src/workers/connection.d.ts +1 -2
  636. package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
  637. package/out/zero-cache/src/workers/connection.js +10 -8
  638. package/out/zero-cache/src/workers/connection.js.map +1 -1
  639. package/out/zero-cache/src/workers/mutator.js +1 -1
  640. package/out/zero-cache/src/workers/mutator.js.map +1 -1
  641. package/out/zero-cache/src/workers/rehome.d.ts +15 -0
  642. package/out/zero-cache/src/workers/rehome.d.ts.map +1 -0
  643. package/out/zero-cache/src/workers/rehome.js +36 -0
  644. package/out/zero-cache/src/workers/rehome.js.map +1 -0
  645. package/out/zero-cache/src/workers/replicator.js +5 -4
  646. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  647. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +9 -1
  648. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  649. package/out/zero-cache/src/workers/syncer.js +32 -7
  650. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  651. package/out/zero-client/src/client/active-clients-manager.d.ts.map +1 -1
  652. package/out/zero-client/src/client/active-clients-manager.js +2 -2
  653. package/out/zero-client/src/client/active-clients-manager.js.map +1 -1
  654. package/out/zero-client/src/client/bindings.d.ts +1 -1
  655. package/out/zero-client/src/client/bindings.d.ts.map +1 -1
  656. package/out/zero-client/src/client/bindings.js +11 -11
  657. package/out/zero-client/src/client/connection-manager.js +1 -1
  658. package/out/zero-client/src/client/connection-manager.js.map +1 -1
  659. package/out/zero-client/src/client/connection.js +1 -1
  660. package/out/zero-client/src/client/connection.js.map +1 -1
  661. package/out/zero-client/src/client/context.d.ts +7 -1
  662. package/out/zero-client/src/client/context.d.ts.map +1 -1
  663. package/out/zero-client/src/client/context.js +7 -0
  664. package/out/zero-client/src/client/context.js.map +1 -1
  665. package/out/zero-client/src/client/crud-impl.d.ts.map +1 -1
  666. package/out/zero-client/src/client/crud-impl.js +172 -3
  667. package/out/zero-client/src/client/crud-impl.js.map +1 -1
  668. package/out/zero-client/src/client/crud.d.ts +2 -8
  669. package/out/zero-client/src/client/crud.d.ts.map +1 -1
  670. package/out/zero-client/src/client/crud.js.map +1 -1
  671. package/out/zero-client/src/client/custom.d.ts +0 -2
  672. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  673. package/out/zero-client/src/client/custom.js +42 -3
  674. package/out/zero-client/src/client/custom.js.map +1 -1
  675. package/out/zero-client/src/client/delete-clients-manager.js.map +1 -1
  676. package/out/zero-client/src/client/enable-analytics.d.ts +0 -1
  677. package/out/zero-client/src/client/enable-analytics.d.ts.map +1 -1
  678. package/out/zero-client/src/client/enable-analytics.js +1 -0
  679. package/out/zero-client/src/client/enable-analytics.js.map +1 -1
  680. package/out/zero-client/src/client/error.d.ts +4 -5
  681. package/out/zero-client/src/client/error.d.ts.map +1 -1
  682. package/out/zero-client/src/client/error.js.map +1 -1
  683. package/out/zero-client/src/client/inspector/client-group.js.map +1 -1
  684. package/out/zero-client/src/client/inspector/client.js.map +1 -1
  685. package/out/zero-client/src/client/inspector/html-dialog-prompt.js +1 -1
  686. package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -1
  687. package/out/zero-client/src/client/inspector/inspector.js.map +1 -1
  688. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -1
  689. package/out/zero-client/src/client/inspector/query.js.map +1 -1
  690. package/out/zero-client/src/client/ivm-branch.d.ts +62 -2
  691. package/out/zero-client/src/client/ivm-branch.d.ts.map +1 -1
  692. package/out/zero-client/src/client/ivm-branch.js +153 -34
  693. package/out/zero-client/src/client/ivm-branch.js.map +1 -1
  694. package/out/zero-client/src/client/keys.d.ts +33 -1
  695. package/out/zero-client/src/client/keys.d.ts.map +1 -1
  696. package/out/zero-client/src/client/keys.js +49 -7
  697. package/out/zero-client/src/client/keys.js.map +1 -1
  698. package/out/zero-client/src/client/log-options.js.map +1 -1
  699. package/out/zero-client/src/client/make-replicache-mutators.js +5 -3
  700. package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
  701. package/out/zero-client/src/client/metrics.js +3 -5
  702. package/out/zero-client/src/client/metrics.js.map +1 -1
  703. package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
  704. package/out/zero-client/src/client/mutation-tracker.js +1 -1
  705. package/out/zero-client/src/client/mutation-tracker.js.map +1 -1
  706. package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
  707. package/out/zero-client/src/client/options.d.ts +0 -4
  708. package/out/zero-client/src/client/options.d.ts.map +1 -1
  709. package/out/zero-client/src/client/options.js.map +1 -1
  710. package/out/zero-client/src/client/query-manager.js +2 -2
  711. package/out/zero-client/src/client/query-manager.js.map +1 -1
  712. package/out/zero-client/src/client/reload-error-handler.js +4 -3
  713. package/out/zero-client/src/client/reload-error-handler.js.map +1 -1
  714. package/out/zero-client/src/client/replicache-types.d.ts +3 -2
  715. package/out/zero-client/src/client/replicache-types.d.ts.map +1 -1
  716. package/out/zero-client/src/client/version.js +1 -1
  717. package/out/zero-client/src/client/zero-poke-handler.d.ts +1 -2
  718. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  719. package/out/zero-client/src/client/zero-poke-handler.js +30 -2
  720. package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
  721. package/out/zero-client/src/client/zero-rep.d.ts +1 -1
  722. package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
  723. package/out/zero-client/src/client/zero-rep.js +2 -15
  724. package/out/zero-client/src/client/zero-rep.js.map +1 -1
  725. package/out/zero-client/src/client/zero.d.ts +1 -5
  726. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  727. package/out/zero-client/src/client/zero.js +21 -13
  728. package/out/zero-client/src/client/zero.js.map +1 -1
  729. package/out/zero-client/src/mod.d.ts +3 -3
  730. package/out/zero-client/src/mod.d.ts.map +1 -1
  731. package/out/zero-client/src/mod.js +23 -23
  732. package/out/zero-client/src/types/client-state.d.ts +0 -6
  733. package/out/zero-client/src/types/client-state.d.ts.map +1 -1
  734. package/out/zero-client/src/util/nanoid.js.map +1 -1
  735. package/out/zero-permissions/src/permissions.d.ts +1 -12
  736. package/out/zero-permissions/src/permissions.d.ts.map +1 -1
  737. package/out/zero-permissions/src/permissions.js +3 -3
  738. package/out/zero-permissions/src/permissions.js.map +1 -1
  739. package/out/zero-pg/src/mod.js +9 -9
  740. package/out/zero-protocol/src/aggregate-table.d.ts +15 -0
  741. package/out/zero-protocol/src/aggregate-table.d.ts.map +1 -0
  742. package/out/zero-protocol/src/aggregate-table.js +5 -0
  743. package/out/zero-protocol/src/aggregate-table.js.map +1 -0
  744. package/out/zero-protocol/src/analyze-query-result.js +1 -1
  745. package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
  746. package/out/zero-protocol/src/application-error.js.map +1 -1
  747. package/out/zero-protocol/src/ast.d.ts +140 -8
  748. package/out/zero-protocol/src/ast.d.ts.map +1 -1
  749. package/out/zero-protocol/src/ast.js +264 -28
  750. package/out/zero-protocol/src/ast.js.map +1 -1
  751. package/out/zero-protocol/src/change-desired-queries.d.ts +0 -20
  752. package/out/zero-protocol/src/change-desired-queries.d.ts.map +1 -1
  753. package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
  754. package/out/zero-protocol/src/client-schema.d.ts +2 -5
  755. package/out/zero-protocol/src/client-schema.d.ts.map +1 -1
  756. package/out/zero-protocol/src/client-schema.js.map +1 -1
  757. package/out/zero-protocol/src/close-connection.d.ts +0 -8
  758. package/out/zero-protocol/src/close-connection.d.ts.map +1 -1
  759. package/out/zero-protocol/src/close-connection.js.map +1 -1
  760. package/out/zero-protocol/src/connect.d.ts +0 -12
  761. package/out/zero-protocol/src/connect.d.ts.map +1 -1
  762. package/out/zero-protocol/src/connect.js.map +1 -1
  763. package/out/zero-protocol/src/custom-queries.d.ts +3 -17
  764. package/out/zero-protocol/src/custom-queries.d.ts.map +1 -1
  765. package/out/zero-protocol/src/custom-queries.js.map +1 -1
  766. package/out/zero-protocol/src/data.d.ts +0 -1
  767. package/out/zero-protocol/src/data.d.ts.map +1 -1
  768. package/out/zero-protocol/src/data.js +3 -1
  769. package/out/zero-protocol/src/data.js.map +1 -1
  770. package/out/zero-protocol/src/delete-clients.js.map +1 -1
  771. package/out/zero-protocol/src/down.d.ts +27 -27
  772. package/out/zero-protocol/src/down.js.map +1 -1
  773. package/out/zero-protocol/src/error.js.map +1 -1
  774. package/out/zero-protocol/src/inspect-down.d.ts +1 -3
  775. package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
  776. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  777. package/out/zero-protocol/src/inspect-up.d.ts +0 -28
  778. package/out/zero-protocol/src/inspect-up.d.ts.map +1 -1
  779. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  780. package/out/zero-protocol/src/mutate-server.d.ts +0 -21
  781. package/out/zero-protocol/src/mutate-server.d.ts.map +1 -1
  782. package/out/zero-protocol/src/mutate-server.js.map +1 -1
  783. package/out/zero-protocol/src/mutation-id.js.map +1 -1
  784. package/out/zero-protocol/src/mutation-type-enum.d.ts +0 -1
  785. package/out/zero-protocol/src/mutation-type-enum.d.ts.map +1 -1
  786. package/out/zero-protocol/src/mutation-type-enum.js.map +1 -1
  787. package/out/zero-protocol/src/mutation.d.ts +2 -4
  788. package/out/zero-protocol/src/mutation.d.ts.map +1 -1
  789. package/out/zero-protocol/src/mutation.js.map +1 -1
  790. package/out/zero-protocol/src/mutations-patch.d.ts +0 -33
  791. package/out/zero-protocol/src/mutations-patch.d.ts.map +1 -1
  792. package/out/zero-protocol/src/mutations-patch.js.map +1 -1
  793. package/out/zero-protocol/src/ping.d.ts +0 -2
  794. package/out/zero-protocol/src/ping.d.ts.map +1 -1
  795. package/out/zero-protocol/src/ping.js.map +1 -1
  796. package/out/zero-protocol/src/poke.d.ts +3 -2
  797. package/out/zero-protocol/src/poke.d.ts.map +1 -1
  798. package/out/zero-protocol/src/poke.js +1 -1
  799. package/out/zero-protocol/src/poke.js.map +1 -1
  800. package/out/zero-protocol/src/pong.d.ts +0 -2
  801. package/out/zero-protocol/src/pong.d.ts.map +1 -1
  802. package/out/zero-protocol/src/pong.js.map +1 -1
  803. package/out/zero-protocol/src/primary-key.js.map +1 -1
  804. package/out/zero-protocol/src/protocol-version.d.ts +1 -1
  805. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  806. package/out/zero-protocol/src/protocol-version.js +1 -0
  807. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  808. package/out/zero-protocol/src/pull.d.ts +2 -7
  809. package/out/zero-protocol/src/pull.d.ts.map +1 -1
  810. package/out/zero-protocol/src/pull.js.map +1 -1
  811. package/out/zero-protocol/src/push.d.ts +1 -3
  812. package/out/zero-protocol/src/push.d.ts.map +1 -1
  813. package/out/zero-protocol/src/push.js.map +1 -1
  814. package/out/zero-protocol/src/queries-patch.d.ts +0 -16
  815. package/out/zero-protocol/src/queries-patch.d.ts.map +1 -1
  816. package/out/zero-protocol/src/queries-patch.js +1 -1
  817. package/out/zero-protocol/src/queries-patch.js.map +1 -1
  818. package/out/zero-protocol/src/query-hash-visitor.d.ts.map +1 -1
  819. package/out/zero-protocol/src/query-hash-visitor.js +38 -0
  820. package/out/zero-protocol/src/query-hash-visitor.js.map +1 -1
  821. package/out/zero-protocol/src/query-hash.js +2 -2
  822. package/out/zero-protocol/src/query-server.d.ts +2 -41
  823. package/out/zero-protocol/src/query-server.d.ts.map +1 -1
  824. package/out/zero-protocol/src/query-server.js.map +1 -1
  825. package/out/zero-protocol/src/row-patch.js.map +1 -1
  826. package/out/zero-protocol/src/up.d.ts +60 -60
  827. package/out/zero-protocol/src/up.js +1 -1
  828. package/out/zero-protocol/src/up.js.map +1 -1
  829. package/out/zero-protocol/src/update-auth.js.map +1 -1
  830. package/out/zero-protocol/src/version.d.ts +0 -1
  831. package/out/zero-protocol/src/version.d.ts.map +1 -1
  832. package/out/zero-protocol/src/version.js.map +1 -1
  833. package/out/zero-react/src/bindings.js +11 -11
  834. package/out/zero-react/src/mod.js +5 -5
  835. package/out/zero-react/src/use-query.d.ts +3 -1
  836. package/out/zero-react/src/use-query.d.ts.map +1 -1
  837. package/out/zero-react/src/use-query.js +6 -4
  838. package/out/zero-react/src/use-query.js.map +1 -1
  839. package/out/zero-react/src/zero-provider.d.ts +1 -1
  840. package/out/zero-react/src/zero-provider.d.ts.map +1 -1
  841. package/out/zero-react/src/zero-provider.js +2 -1
  842. package/out/zero-react/src/zero-provider.js.map +1 -1
  843. package/out/zero-react/src/zero.js +23 -23
  844. package/out/zero-schema/src/builder/relationship-builder.d.ts +0 -2
  845. package/out/zero-schema/src/builder/relationship-builder.d.ts.map +1 -1
  846. package/out/zero-schema/src/builder/relationship-builder.js.map +1 -1
  847. package/out/zero-schema/src/builder/schema-builder.d.ts.map +1 -1
  848. package/out/zero-schema/src/builder/schema-builder.js +5 -2
  849. package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
  850. package/out/zero-schema/src/builder/table-builder.d.ts +1 -1
  851. package/out/zero-schema/src/builder/table-builder.d.ts.map +1 -1
  852. package/out/zero-schema/src/builder/table-builder.js +1 -1
  853. package/out/zero-schema/src/builder/table-builder.js.map +1 -1
  854. package/out/zero-schema/src/compiled-permissions.js.map +1 -1
  855. package/out/zero-schema/src/name-mapper.d.ts.map +1 -1
  856. package/out/zero-schema/src/name-mapper.js +14 -9
  857. package/out/zero-schema/src/name-mapper.js.map +1 -1
  858. package/out/zero-schema/src/schema-config.d.ts +0 -1
  859. package/out/zero-schema/src/schema-config.d.ts.map +1 -1
  860. package/out/zero-schema/src/schema-config.js +1 -1
  861. package/out/zero-schema/src/schema-config.js.map +1 -1
  862. package/out/zero-schema/src/table-schema.d.ts +3 -11
  863. package/out/zero-schema/src/table-schema.d.ts.map +1 -1
  864. package/out/zero-server/src/adapters/drizzle.js.map +1 -1
  865. package/out/zero-server/src/adapters/kysely.js.map +1 -1
  866. package/out/zero-server/src/adapters/pg.js.map +1 -1
  867. package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
  868. package/out/zero-server/src/adapters/prisma.js.map +1 -1
  869. package/out/zero-server/src/closable-db-transaction.js.map +1 -1
  870. package/out/zero-server/src/custom.js +2 -2
  871. package/out/zero-server/src/custom.js.map +1 -1
  872. package/out/zero-server/src/mod.js +8 -8
  873. package/out/zero-server/src/process-mutations.js.map +1 -1
  874. package/out/zero-server/src/push-processor.js.map +1 -1
  875. package/out/zero-server/src/queries/process-queries.d.ts +2 -4
  876. package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
  877. package/out/zero-server/src/queries/process-queries.js +2 -1
  878. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  879. package/out/zero-server/src/schema.d.ts.map +1 -1
  880. package/out/zero-server/src/schema.js +20 -9
  881. package/out/zero-server/src/schema.js.map +1 -1
  882. package/out/zero-server/src/zql-database.js.map +1 -1
  883. package/out/zero-solid/src/bindings.js +11 -11
  884. package/out/zero-solid/src/mod.js +5 -5
  885. package/out/zero-solid/src/solid-view.d.ts +0 -2
  886. package/out/zero-solid/src/solid-view.d.ts.map +1 -1
  887. package/out/zero-solid/src/solid-view.js +4 -4
  888. package/out/zero-solid/src/solid-view.js.map +1 -1
  889. package/out/zero-solid/src/use-connection-state.js +2 -1
  890. package/out/zero-solid/src/use-connection-state.js.map +1 -1
  891. package/out/zero-solid/src/use-query.js.map +1 -1
  892. package/out/zero-solid/src/use-zero-online.js +2 -1
  893. package/out/zero-solid/src/use-zero-online.js.map +1 -1
  894. package/out/zero-solid/src/use-zero.js +3 -2
  895. package/out/zero-solid/src/use-zero.js.map +1 -1
  896. package/out/zero-solid/src/zero.js +23 -23
  897. package/out/zero-types/src/format.d.ts +13 -0
  898. package/out/zero-types/src/format.d.ts.map +1 -1
  899. package/out/zero-types/src/format.js.map +1 -1
  900. package/out/zero-types/src/name-mapper.d.ts +16 -1
  901. package/out/zero-types/src/name-mapper.d.ts.map +1 -1
  902. package/out/zero-types/src/name-mapper.js +12 -0
  903. package/out/zero-types/src/name-mapper.js.map +1 -1
  904. package/out/zero-types/src/schema-value.d.ts +5 -2
  905. package/out/zero-types/src/schema-value.d.ts.map +1 -1
  906. package/out/zero-types/src/schema-value.js +15 -0
  907. package/out/zero-types/src/schema-value.js.map +1 -0
  908. package/out/zero-types/src/schema.d.ts +1 -1
  909. package/out/zero-types/src/schema.d.ts.map +1 -1
  910. package/out/zero-types/src/server-schema.d.ts +18 -0
  911. package/out/zero-types/src/server-schema.d.ts.map +1 -1
  912. package/out/zql/src/builder/builder.d.ts +124 -9
  913. package/out/zql/src/builder/builder.d.ts.map +1 -1
  914. package/out/zql/src/builder/builder.js +295 -23
  915. package/out/zql/src/builder/builder.js.map +1 -1
  916. package/out/zql/src/builder/correlated-predicate-pushdown.js.map +1 -1
  917. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  918. package/out/zql/src/builder/filter.d.ts +1 -2
  919. package/out/zql/src/builder/filter.d.ts.map +1 -1
  920. package/out/zql/src/builder/filter.js +41 -3
  921. package/out/zql/src/builder/filter.js.map +1 -1
  922. package/out/zql/src/builder/like.js +0 -1
  923. package/out/zql/src/builder/like.js.map +1 -1
  924. package/out/zql/src/error.d.ts +0 -5
  925. package/out/zql/src/error.d.ts.map +1 -1
  926. package/out/zql/src/error.js.map +1 -1
  927. package/out/zql/src/ivm/aggregate.d.ts +188 -0
  928. package/out/zql/src/ivm/aggregate.d.ts.map +1 -0
  929. package/out/zql/src/ivm/aggregate.js +470 -0
  930. package/out/zql/src/ivm/aggregate.js.map +1 -0
  931. package/out/zql/src/ivm/array-view.d.ts +1 -1
  932. package/out/zql/src/ivm/array-view.d.ts.map +1 -1
  933. package/out/zql/src/ivm/array-view.js +3 -3
  934. package/out/zql/src/ivm/array-view.js.map +1 -1
  935. package/out/zql/src/ivm/cap.d.ts +1 -1
  936. package/out/zql/src/ivm/cap.d.ts.map +1 -1
  937. package/out/zql/src/ivm/cap.js +14 -6
  938. package/out/zql/src/ivm/cap.js.map +1 -1
  939. package/out/zql/src/ivm/constraint.d.ts +0 -7
  940. package/out/zql/src/ivm/constraint.d.ts.map +1 -1
  941. package/out/zql/src/ivm/constraint.js +3 -2
  942. package/out/zql/src/ivm/constraint.js.map +1 -1
  943. package/out/zql/src/ivm/data.d.ts +15 -2
  944. package/out/zql/src/ivm/data.d.ts.map +1 -1
  945. package/out/zql/src/ivm/data.js +15 -1
  946. package/out/zql/src/ivm/data.js.map +1 -1
  947. package/out/zql/src/ivm/deferred-input.js +1 -1
  948. package/out/zql/src/ivm/deferred-input.js.map +1 -1
  949. package/out/zql/src/ivm/exists.d.ts.map +1 -1
  950. package/out/zql/src/ivm/exists.js +32 -22
  951. package/out/zql/src/ivm/exists.js.map +1 -1
  952. package/out/zql/src/ivm/fan-in.js +1 -1
  953. package/out/zql/src/ivm/fan-in.js.map +1 -1
  954. package/out/zql/src/ivm/fan-out.js.map +1 -1
  955. package/out/zql/src/ivm/filter-operators.d.ts +5 -0
  956. package/out/zql/src/ivm/filter-operators.d.ts.map +1 -1
  957. package/out/zql/src/ivm/filter-operators.js +1 -1
  958. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  959. package/out/zql/src/ivm/filter-push.js.map +1 -1
  960. package/out/zql/src/ivm/filter.js.map +1 -1
  961. package/out/zql/src/ivm/flipped-join.d.ts.map +1 -1
  962. package/out/zql/src/ivm/flipped-join.js +4 -5
  963. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  964. package/out/zql/src/ivm/group-by.d.ts +98 -0
  965. package/out/zql/src/ivm/group-by.d.ts.map +1 -0
  966. package/out/zql/src/ivm/group-by.js +384 -0
  967. package/out/zql/src/ivm/group-by.js.map +1 -0
  968. package/out/zql/src/ivm/join-index-tap.js.map +1 -1
  969. package/out/zql/src/ivm/join-index.d.ts.map +1 -1
  970. package/out/zql/src/ivm/join-index.js +2 -1
  971. package/out/zql/src/ivm/join-index.js.map +1 -1
  972. package/out/zql/src/ivm/join-utils.d.ts.map +1 -1
  973. package/out/zql/src/ivm/join-utils.js +13 -14
  974. package/out/zql/src/ivm/join-utils.js.map +1 -1
  975. package/out/zql/src/ivm/join.d.ts.map +1 -1
  976. package/out/zql/src/ivm/join.js +7 -4
  977. package/out/zql/src/ivm/join.js.map +1 -1
  978. package/out/zql/src/ivm/lift-field.d.ts +54 -0
  979. package/out/zql/src/ivm/lift-field.d.ts.map +1 -0
  980. package/out/zql/src/ivm/lift-field.js +168 -0
  981. package/out/zql/src/ivm/lift-field.js.map +1 -0
  982. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +1 -1
  983. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
  984. package/out/zql/src/ivm/memory-source.d.ts +3 -2
  985. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  986. package/out/zql/src/ivm/memory-source.js +36 -27
  987. package/out/zql/src/ivm/memory-source.js.map +1 -1
  988. package/out/zql/src/ivm/memory-storage.js.map +1 -1
  989. package/out/zql/src/ivm/operator.d.ts +6 -0
  990. package/out/zql/src/ivm/operator.d.ts.map +1 -1
  991. package/out/zql/src/ivm/operator.js +2 -2
  992. package/out/zql/src/ivm/operator.js.map +1 -1
  993. package/out/zql/src/ivm/push-accumulated.js +1 -2
  994. package/out/zql/src/ivm/push-accumulated.js.map +1 -1
  995. package/out/zql/src/ivm/schema.d.ts +1 -0
  996. package/out/zql/src/ivm/schema.d.ts.map +1 -1
  997. package/out/zql/src/ivm/skip-yields.js.map +1 -1
  998. package/out/zql/src/ivm/skip.js.map +1 -1
  999. package/out/zql/src/ivm/source.d.ts +21 -0
  1000. package/out/zql/src/ivm/source.d.ts.map +1 -1
  1001. package/out/zql/src/ivm/source.js.map +1 -1
  1002. package/out/zql/src/ivm/stream.d.ts +0 -1
  1003. package/out/zql/src/ivm/stream.d.ts.map +1 -1
  1004. package/out/zql/src/ivm/stream.js.map +1 -1
  1005. package/out/zql/src/ivm/take-gate.js.map +1 -1
  1006. package/out/zql/src/ivm/take.d.ts.map +1 -1
  1007. package/out/zql/src/ivm/take.js +8 -9
  1008. package/out/zql/src/ivm/take.js.map +1 -1
  1009. package/out/zql/src/ivm/union-fan-in.d.ts +0 -1
  1010. package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
  1011. package/out/zql/src/ivm/union-fan-in.js +1 -1
  1012. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  1013. package/out/zql/src/ivm/union-fan-out.js.map +1 -1
  1014. package/out/zql/src/ivm/view-apply-change.d.ts +8 -33
  1015. package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
  1016. package/out/zql/src/ivm/view-apply-change.js +23 -3
  1017. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  1018. package/out/zql/src/mutate/crud.d.ts +1 -3
  1019. package/out/zql/src/mutate/crud.d.ts.map +1 -1
  1020. package/out/zql/src/mutate/crud.js +2 -1
  1021. package/out/zql/src/mutate/crud.js.map +1 -1
  1022. package/out/zql/src/mutate/mutator-registry.d.ts +1 -1
  1023. package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -1
  1024. package/out/zql/src/mutate/mutator-registry.js.map +1 -1
  1025. package/out/zql/src/mutate/mutator.d.ts +1 -1
  1026. package/out/zql/src/mutate/mutator.d.ts.map +1 -1
  1027. package/out/zql/src/mutate/mutator.js.map +1 -1
  1028. package/out/zql/src/planner/planner-builder.js +1 -1
  1029. package/out/zql/src/planner/planner-builder.js.map +1 -1
  1030. package/out/zql/src/planner/planner-connection.js.map +1 -1
  1031. package/out/zql/src/planner/planner-debug.d.ts +11 -10
  1032. package/out/zql/src/planner/planner-debug.d.ts.map +1 -1
  1033. package/out/zql/src/planner/planner-debug.js +4 -0
  1034. package/out/zql/src/planner/planner-debug.js.map +1 -1
  1035. package/out/zql/src/planner/planner-fan-in.js.map +1 -1
  1036. package/out/zql/src/planner/planner-fan-out.js.map +1 -1
  1037. package/out/zql/src/planner/planner-filter.js.map +1 -1
  1038. package/out/zql/src/planner/planner-graph.js +1 -5
  1039. package/out/zql/src/planner/planner-graph.js.map +1 -1
  1040. package/out/zql/src/planner/planner-join.js +1 -1
  1041. package/out/zql/src/planner/planner-join.js.map +1 -1
  1042. package/out/zql/src/planner/planner-node.d.ts +0 -1
  1043. package/out/zql/src/planner/planner-node.d.ts.map +1 -1
  1044. package/out/zql/src/planner/planner-node.js.map +1 -1
  1045. package/out/zql/src/planner/planner-source.js.map +1 -1
  1046. package/out/zql/src/planner/planner-terminus.js.map +1 -1
  1047. package/out/zql/src/planner/planner-warnings.d.ts +3 -3
  1048. package/out/zql/src/planner/planner-warnings.d.ts.map +1 -1
  1049. package/out/zql/src/planner/planner-warnings.js.map +1 -1
  1050. package/out/zql/src/query/create-builder.js +2 -1
  1051. package/out/zql/src/query/create-builder.js.map +1 -1
  1052. package/out/zql/src/query/expression.d.ts +49 -24
  1053. package/out/zql/src/query/expression.d.ts.map +1 -1
  1054. package/out/zql/src/query/expression.js +62 -6
  1055. package/out/zql/src/query/expression.js.map +1 -1
  1056. package/out/zql/src/query/measure-push-operator.js +1 -1
  1057. package/out/zql/src/query/measure-push-operator.js.map +1 -1
  1058. package/out/zql/src/query/named.js +2 -1
  1059. package/out/zql/src/query/named.js.map +1 -1
  1060. package/out/zql/src/query/query-delegate-base.d.ts +8 -7
  1061. package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
  1062. package/out/zql/src/query/query-delegate-base.js +14 -6
  1063. package/out/zql/src/query/query-delegate-base.js.map +1 -1
  1064. package/out/zql/src/query/query-delegate.d.ts +1 -4
  1065. package/out/zql/src/query/query-delegate.d.ts.map +1 -1
  1066. package/out/zql/src/query/query-impl.d.ts +17 -3
  1067. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  1068. package/out/zql/src/query/query-impl.js +242 -9
  1069. package/out/zql/src/query/query-impl.js.map +1 -1
  1070. package/out/zql/src/query/query-internals.d.ts +0 -3
  1071. package/out/zql/src/query/query-internals.d.ts.map +1 -1
  1072. package/out/zql/src/query/query-internals.js.map +1 -1
  1073. package/out/zql/src/query/query-registry.d.ts +5 -5
  1074. package/out/zql/src/query/query-registry.d.ts.map +1 -1
  1075. package/out/zql/src/query/query-registry.js +1 -1
  1076. package/out/zql/src/query/query-registry.js.map +1 -1
  1077. package/out/zql/src/query/query-transitions.js +1 -1
  1078. package/out/zql/src/query/query-transitions.js.map +1 -1
  1079. package/out/zql/src/query/query.d.ts +321 -20
  1080. package/out/zql/src/query/query.d.ts.map +1 -1
  1081. package/out/zql/src/query/runnable-query-impl.d.ts +1 -19
  1082. package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
  1083. package/out/zql/src/query/runnable-query-impl.js +2 -1
  1084. package/out/zql/src/query/runnable-query-impl.js.map +1 -1
  1085. package/out/zql/src/query/static-query.js.map +1 -1
  1086. package/out/zql/src/query/ttl.d.ts +2 -3
  1087. package/out/zql/src/query/ttl.d.ts.map +1 -1
  1088. package/out/zql/src/query/ttl.js +8 -8
  1089. package/out/zql/src/query/ttl.js.map +1 -1
  1090. package/out/zql/src/query/validate-input.js.map +1 -1
  1091. package/out/zqlite/src/database-storage.js +195 -26
  1092. package/out/zqlite/src/database-storage.js.map +1 -1
  1093. package/out/zqlite/src/db.d.ts +47 -1
  1094. package/out/zqlite/src/db.d.ts.map +1 -1
  1095. package/out/zqlite/src/db.js +121 -21
  1096. package/out/zqlite/src/db.js.map +1 -1
  1097. package/out/zqlite/src/explain-queries.js.map +1 -1
  1098. package/out/zqlite/src/fetch-sql.d.ts +27 -0
  1099. package/out/zqlite/src/fetch-sql.d.ts.map +1 -0
  1100. package/out/zqlite/src/fetch-sql.js +112 -0
  1101. package/out/zqlite/src/fetch-sql.js.map +1 -0
  1102. package/out/zqlite/src/index-usage.js.map +1 -1
  1103. package/out/zqlite/src/internal/sql-inline.js.map +1 -1
  1104. package/out/zqlite/src/internal/sql.js.map +1 -1
  1105. package/out/zqlite/src/internal/statement-cache.d.ts +7 -0
  1106. package/out/zqlite/src/internal/statement-cache.d.ts.map +1 -1
  1107. package/out/zqlite/src/internal/statement-cache.js +11 -4
  1108. package/out/zqlite/src/internal/statement-cache.js.map +1 -1
  1109. package/out/zqlite/src/mod.js +5 -5
  1110. package/out/zqlite/src/pending-delta.d.ts.map +1 -1
  1111. package/out/zqlite/src/pending-delta.js +4 -3
  1112. package/out/zqlite/src/pending-delta.js.map +1 -1
  1113. package/out/zqlite/src/query-builder.d.ts +23 -4
  1114. package/out/zqlite/src/query-builder.d.ts.map +1 -1
  1115. package/out/zqlite/src/query-builder.js +135 -19
  1116. package/out/zqlite/src/query-builder.js.map +1 -1
  1117. package/out/zqlite/src/query-delegate.js.map +1 -1
  1118. package/out/zqlite/src/resolve-scalar-subqueries.js +2 -5
  1119. package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
  1120. package/out/zqlite/src/sqlite-cost-model.js +3 -2
  1121. package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
  1122. package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
  1123. package/out/zqlite/src/table-source.d.ts +20 -3
  1124. package/out/zqlite/src/table-source.d.ts.map +1 -1
  1125. package/out/zqlite/src/table-source.js +110 -42
  1126. package/out/zqlite/src/table-source.js.map +1 -1
  1127. package/package.json +39 -39
  1128. package/out/analyze-query/src/bin-analyze.d.ts +0 -2
  1129. package/out/analyze-query/src/bin-analyze.d.ts.map +0 -1
  1130. package/out/analyze-query/src/bin-analyze.js +0 -283
  1131. package/out/analyze-query/src/bin-analyze.js.map +0 -1
  1132. package/out/otel/src/maybe-time.d.ts +0 -3
  1133. package/out/otel/src/maybe-time.d.ts.map +0 -1
  1134. package/out/otel/src/maybe-time.js +0 -15
  1135. package/out/otel/src/maybe-time.js.map +0 -1
  1136. package/out/shared/src/cache.d.ts +0 -22
  1137. package/out/shared/src/cache.d.ts.map +0 -1
  1138. package/out/shared/src/custom-key-map.d.ts +0 -26
  1139. package/out/shared/src/custom-key-map.d.ts.map +0 -1
  1140. package/out/shared/src/custom-key-set.d.ts +0 -25
  1141. package/out/shared/src/custom-key-set.d.ts.map +0 -1
  1142. package/out/shared/src/logging-test-utils.d.ts +0 -12
  1143. package/out/shared/src/logging-test-utils.d.ts.map +0 -1
  1144. package/out/shared/src/sorted-entries.d.ts +0 -2
  1145. package/out/shared/src/sorted-entries.d.ts.map +0 -1
  1146. package/out/zero/src/analyze-query.d.ts +0 -3
  1147. package/out/zero/src/analyze-query.d.ts.map +0 -1
  1148. package/out/zero/src/analyze-query.js +0 -3
  1149. package/out/zero/src/server/change-streamer.d.ts +0 -2
  1150. package/out/zero/src/server/change-streamer.d.ts.map +0 -1
  1151. package/out/zero/src/server/main.d.ts +0 -2
  1152. package/out/zero/src/server/main.d.ts.map +0 -1
  1153. package/out/zero/src/server/reaper.d.ts +0 -2
  1154. package/out/zero/src/server/reaper.d.ts.map +0 -1
  1155. package/out/zero/src/server/replicator.d.ts +0 -2
  1156. package/out/zero/src/server/replicator.d.ts.map +0 -1
  1157. package/out/zero/src/server/syncer.d.ts +0 -2
  1158. package/out/zero/src/server/syncer.d.ts.map +0 -1
  1159. package/out/zero-cache/src/auth/jwt.d.ts +0 -12
  1160. package/out/zero-cache/src/auth/jwt.d.ts.map +0 -1
  1161. package/out/zero-cache/src/auth/load-permissions.d.ts +0 -17
  1162. package/out/zero-cache/src/auth/load-permissions.d.ts.map +0 -1
  1163. package/out/zero-cache/src/auth/write-authorizer.d.ts +0 -28
  1164. package/out/zero-cache/src/auth/write-authorizer.d.ts.map +0 -1
  1165. package/out/zero-cache/src/config/server-context.d.ts +0 -16
  1166. package/out/zero-cache/src/config/server-context.d.ts.map +0 -1
  1167. package/out/zero-cache/src/custom/fetch.d.ts +0 -38
  1168. package/out/zero-cache/src/custom/fetch.d.ts.map +0 -1
  1169. package/out/zero-cache/src/custom/metrics.d.ts +0 -31
  1170. package/out/zero-cache/src/custom/metrics.d.ts.map +0 -1
  1171. package/out/zero-cache/src/custom-queries/transform-query.d.ts +0 -68
  1172. package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +0 -1
  1173. package/out/zero-cache/src/db/create.d.ts +0 -12
  1174. package/out/zero-cache/src/db/create.d.ts.map +0 -1
  1175. package/out/zero-cache/src/db/delete-lite-db.d.ts +0 -2
  1176. package/out/zero-cache/src/db/delete-lite-db.d.ts.map +0 -1
  1177. package/out/zero-cache/src/db/index-predicate.d.ts +0 -4
  1178. package/out/zero-cache/src/db/index-predicate.d.ts.map +0 -1
  1179. package/out/zero-cache/src/db/migration-lite.d.ts +0 -78
  1180. package/out/zero-cache/src/db/migration-lite.d.ts.map +0 -1
  1181. package/out/zero-cache/src/db/migration.d.ts +0 -80
  1182. package/out/zero-cache/src/db/migration.d.ts.map +0 -1
  1183. package/out/zero-cache/src/db/pg-copy-binary.d.ts +0 -101
  1184. package/out/zero-cache/src/db/pg-copy-binary.d.ts.map +0 -1
  1185. package/out/zero-cache/src/db/pg-copy.d.ts +0 -30
  1186. package/out/zero-cache/src/db/pg-copy.d.ts.map +0 -1
  1187. package/out/zero-cache/src/db/pg-type-parser.d.ts +0 -15
  1188. package/out/zero-cache/src/db/pg-type-parser.d.ts.map +0 -1
  1189. package/out/zero-cache/src/db/transaction-pool.d.ts +0 -205
  1190. package/out/zero-cache/src/db/transaction-pool.d.ts.map +0 -1
  1191. package/out/zero-cache/src/db/warmup.d.ts +0 -4
  1192. package/out/zero-cache/src/db/warmup.d.ts.map +0 -1
  1193. package/out/zero-cache/src/observability/events.d.ts +0 -15
  1194. package/out/zero-cache/src/observability/events.d.ts.map +0 -1
  1195. package/out/zero-cache/src/observability/log-throttle.d.ts +0 -44
  1196. package/out/zero-cache/src/observability/log-throttle.d.ts.map +0 -1
  1197. package/out/zero-cache/src/server/anonymous-otel-start.d.ts +0 -21
  1198. package/out/zero-cache/src/server/anonymous-otel-start.d.ts.map +0 -1
  1199. package/out/zero-cache/src/server/change-streamer.d.ts +0 -3
  1200. package/out/zero-cache/src/server/change-streamer.d.ts.map +0 -1
  1201. package/out/zero-cache/src/server/inspector-delegate.d.ts +0 -71
  1202. package/out/zero-cache/src/server/inspector-delegate.d.ts.map +0 -1
  1203. package/out/zero-cache/src/server/main.d.ts +0 -3
  1204. package/out/zero-cache/src/server/main.d.ts.map +0 -1
  1205. package/out/zero-cache/src/server/otel-diag-logger.d.ts +0 -16
  1206. package/out/zero-cache/src/server/otel-diag-logger.d.ts.map +0 -1
  1207. package/out/zero-cache/src/server/otel-start.d.ts +0 -3
  1208. package/out/zero-cache/src/server/otel-start.d.ts.map +0 -1
  1209. package/out/zero-cache/src/server/priority-op.d.ts +0 -8
  1210. package/out/zero-cache/src/server/priority-op.d.ts.map +0 -1
  1211. package/out/zero-cache/src/server/reaper.d.ts +0 -3
  1212. package/out/zero-cache/src/server/reaper.d.ts.map +0 -1
  1213. package/out/zero-cache/src/server/replicator.d.ts +0 -10
  1214. package/out/zero-cache/src/server/replicator.d.ts.map +0 -1
  1215. package/out/zero-cache/src/server/slot-keeper.d.ts +0 -26
  1216. package/out/zero-cache/src/server/slot-keeper.d.ts.map +0 -1
  1217. package/out/zero-cache/src/server/syncer.d.ts +0 -3
  1218. package/out/zero-cache/src/server/syncer.d.ts.map +0 -1
  1219. package/out/zero-cache/src/services/analyze.d.ts +0 -9
  1220. package/out/zero-cache/src/services/analyze.d.ts.map +0 -1
  1221. package/out/zero-cache/src/services/change-source/change-source.d.ts +0 -32
  1222. package/out/zero-cache/src/services/change-source/change-source.d.ts.map +0 -1
  1223. package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts +0 -57
  1224. package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts.map +0 -1
  1225. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.d.ts +0 -55
  1226. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.d.ts.map +0 -1
  1227. package/out/zero-cache/src/services/change-source/common/init-cleanup.d.ts +0 -24
  1228. package/out/zero-cache/src/services/change-source/common/init-cleanup.d.ts.map +0 -1
  1229. package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts +0 -115
  1230. package/out/zero-cache/src/services/change-source/common/replica-restore.d.ts.map +0 -1
  1231. package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts +0 -14
  1232. package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts.map +0 -1
  1233. package/out/zero-cache/src/services/change-source/custom/change-source.d.ts +0 -25
  1234. package/out/zero-cache/src/services/change-source/custom/change-source.d.ts.map +0 -1
  1235. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.d.ts +0 -14
  1236. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.d.ts.map +0 -1
  1237. package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts +0 -36
  1238. package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts.map +0 -1
  1239. package/out/zero-cache/src/services/change-source/pg/change-source-init.d.ts +0 -65
  1240. package/out/zero-cache/src/services/change-source/pg/change-source-init.d.ts.map +0 -1
  1241. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +0 -115
  1242. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +0 -1
  1243. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +0 -155
  1244. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +0 -1
  1245. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts +0 -17
  1246. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts.map +0 -1
  1247. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.d.ts +0 -28
  1248. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.d.ts.map +0 -1
  1249. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.d.ts +0 -76
  1250. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.d.ts.map +0 -1
  1251. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts +0 -169
  1252. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts.map +0 -1
  1253. package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.d.ts +0 -16
  1254. package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.d.ts.map +0 -1
  1255. package/out/zero-cache/src/services/change-source/pg/replication-slot-health.d.ts +0 -15
  1256. package/out/zero-cache/src/services/change-source/pg/replication-slot-health.d.ts.map +0 -1
  1257. package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts +0 -127
  1258. package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts.map +0 -1
  1259. package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts +0 -9
  1260. package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +0 -1
  1261. package/out/zero-cache/src/services/change-source/protocol/backfill-progress.d.ts +0 -68
  1262. package/out/zero-cache/src/services/change-source/protocol/backfill-progress.d.ts.map +0 -1
  1263. package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.d.ts +0 -72
  1264. package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.d.ts.map +0 -1
  1265. package/out/zero-cache/src/services/change-streamer/backfill-state.d.ts +0 -50
  1266. package/out/zero-cache/src/services/change-streamer/backfill-state.d.ts.map +0 -1
  1267. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts +0 -14
  1268. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts.map +0 -1
  1269. package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts +0 -18
  1270. package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts.map +0 -1
  1271. package/out/zero-cache/src/services/change-streamer/broadcast.d.ts +0 -98
  1272. package/out/zero-cache/src/services/change-streamer/broadcast.d.ts.map +0 -1
  1273. package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts +0 -34
  1274. package/out/zero-cache/src/services/change-streamer/change-log-codec.d.ts.map +0 -1
  1275. package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.d.ts +0 -34
  1276. package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.d.ts.map +0 -1
  1277. package/out/zero-cache/src/services/change-streamer/change-log-initializer.d.ts +0 -158
  1278. package/out/zero-cache/src/services/change-streamer/change-log-initializer.d.ts.map +0 -1
  1279. package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.d.ts +0 -19
  1280. package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.d.ts.map +0 -1
  1281. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +0 -78
  1282. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +0 -1
  1283. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +0 -143
  1284. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +0 -1
  1285. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +0 -586
  1286. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +0 -1
  1287. package/out/zero-cache/src/services/change-streamer/drain-tracker.d.ts +0 -24
  1288. package/out/zero-cache/src/services/change-streamer/drain-tracker.d.ts.map +0 -1
  1289. package/out/zero-cache/src/services/change-streamer/error-type-enum.d.ts +0 -15
  1290. package/out/zero-cache/src/services/change-streamer/error-type-enum.d.ts.map +0 -1
  1291. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +0 -49
  1292. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +0 -1
  1293. package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.d.ts +0 -53
  1294. package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.d.ts.map +0 -1
  1295. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.d.ts +0 -88
  1296. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.d.ts.map +0 -1
  1297. package/out/zero-cache/src/services/change-streamer/replica-poller.d.ts +0 -15
  1298. package/out/zero-cache/src/services/change-streamer/replica-poller.d.ts.map +0 -1
  1299. package/out/zero-cache/src/services/change-streamer/restore-admission.d.ts +0 -243
  1300. package/out/zero-cache/src/services/change-streamer/restore-admission.d.ts.map +0 -1
  1301. package/out/zero-cache/src/services/change-streamer/schema/init.d.ts +0 -6
  1302. package/out/zero-cache/src/services/change-streamer/schema/init.d.ts.map +0 -1
  1303. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +0 -152
  1304. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +0 -1
  1305. package/out/zero-cache/src/services/change-streamer/shard-sampling.d.ts +0 -11
  1306. package/out/zero-cache/src/services/change-streamer/shard-sampling.d.ts.map +0 -1
  1307. package/out/zero-cache/src/services/change-streamer/snapshot-message.d.ts +0 -92
  1308. package/out/zero-cache/src/services/change-streamer/snapshot-message.d.ts.map +0 -1
  1309. package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts +0 -36
  1310. package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts.map +0 -1
  1311. package/out/zero-cache/src/services/change-streamer/snapshot.d.ts +0 -22
  1312. package/out/zero-cache/src/services/change-streamer/snapshot.d.ts.map +0 -1
  1313. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts +0 -99
  1314. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts.map +0 -1
  1315. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.d.ts +0 -83
  1316. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.d.ts.map +0 -1
  1317. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.d.ts +0 -121
  1318. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.d.ts.map +0 -1
  1319. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.d.ts +0 -73
  1320. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.d.ts.map +0 -1
  1321. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts +0 -62
  1322. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts.map +0 -1
  1323. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.d.ts +0 -114
  1324. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.d.ts.map +0 -1
  1325. package/out/zero-cache/src/services/change-streamer/storer.d.ts +0 -276
  1326. package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +0 -1
  1327. package/out/zero-cache/src/services/change-streamer/subscribe.d.ts +0 -485
  1328. package/out/zero-cache/src/services/change-streamer/subscribe.d.ts.map +0 -1
  1329. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +0 -194
  1330. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +0 -1
  1331. package/out/zero-cache/src/services/change-streamer/upstream-acker.d.ts +0 -52
  1332. package/out/zero-cache/src/services/change-streamer/upstream-acker.d.ts.map +0 -1
  1333. package/out/zero-cache/src/services/limiter/sliding-window-limiter.d.ts +0 -57
  1334. package/out/zero-cache/src/services/limiter/sliding-window-limiter.d.ts.map +0 -1
  1335. package/out/zero-cache/src/services/litestream/commands.d.ts +0 -77
  1336. package/out/zero-cache/src/services/litestream/commands.d.ts.map +0 -1
  1337. package/out/zero-cache/src/services/litestream/litestream-controller.d.ts +0 -78
  1338. package/out/zero-cache/src/services/litestream/litestream-controller.d.ts.map +0 -1
  1339. package/out/zero-cache/src/services/litestream/metrics.d.ts +0 -31
  1340. package/out/zero-cache/src/services/litestream/metrics.d.ts.map +0 -1
  1341. package/out/zero-cache/src/services/litestream/restore-progress.d.ts +0 -24
  1342. package/out/zero-cache/src/services/litestream/restore-progress.d.ts.map +0 -1
  1343. package/out/zero-cache/src/services/mutagen/mutagen.d.ts +0 -40
  1344. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +0 -1
  1345. package/out/zero-cache/src/services/mutagen/pusher.d.ts +0 -63
  1346. package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +0 -1
  1347. package/out/zero-cache/src/services/replicator/change-log-db.d.ts +0 -368
  1348. package/out/zero-cache/src/services/replicator/change-log-db.d.ts.map +0 -1
  1349. package/out/zero-cache/src/services/replicator/change-log-stream-writer.d.ts +0 -56
  1350. package/out/zero-cache/src/services/replicator/change-log-stream-writer.d.ts.map +0 -1
  1351. package/out/zero-cache/src/services/replicator/change-processor.d.ts +0 -37
  1352. package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +0 -1
  1353. package/out/zero-cache/src/services/replicator/drain-handler.d.ts +0 -82
  1354. package/out/zero-cache/src/services/replicator/drain-handler.d.ts.map +0 -1
  1355. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +0 -25
  1356. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +0 -1
  1357. package/out/zero-cache/src/services/replicator/notifier.d.ts +0 -9
  1358. package/out/zero-cache/src/services/replicator/notifier.d.ts.map +0 -1
  1359. package/out/zero-cache/src/services/replicator/replication-status.d.ts +0 -71
  1360. package/out/zero-cache/src/services/replicator/replication-status.d.ts.map +0 -1
  1361. package/out/zero-cache/src/services/replicator/replicator.d.ts +0 -86
  1362. package/out/zero-cache/src/services/replicator/replicator.d.ts.map +0 -1
  1363. package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts +0 -55
  1364. package/out/zero-cache/src/services/replicator/reporter/recorder.d.ts.map +0 -1
  1365. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts +0 -132
  1366. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts.map +0 -1
  1367. package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.d.ts +0 -120
  1368. package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.d.ts.map +0 -1
  1369. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts +0 -111
  1370. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts.map +0 -1
  1371. package/out/zero-cache/src/services/run-ast.d.ts +0 -39
  1372. package/out/zero-cache/src/services/run-ast.d.ts.map +0 -1
  1373. package/out/zero-cache/src/services/runner.d.ts +0 -19
  1374. package/out/zero-cache/src/services/runner.d.ts.map +0 -1
  1375. package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts +0 -17
  1376. package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts.map +0 -1
  1377. package/out/zero-cache/src/services/view-syncer/advancement-metrics.d.ts +0 -26
  1378. package/out/zero-cache/src/services/view-syncer/advancement-metrics.d.ts.map +0 -1
  1379. package/out/zero-cache/src/services/view-syncer/batch-pacer.d.ts +0 -79
  1380. package/out/zero-cache/src/services/view-syncer/batch-pacer.d.ts.map +0 -1
  1381. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +0 -79
  1382. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +0 -1
  1383. package/out/zero-cache/src/services/view-syncer/client-schema.d.ts +0 -5
  1384. package/out/zero-cache/src/services/view-syncer/client-schema.d.ts.map +0 -1
  1385. package/out/zero-cache/src/services/view-syncer/connection-context-manager.d.ts +0 -184
  1386. package/out/zero-cache/src/services/view-syncer/connection-context-manager.d.ts.map +0 -1
  1387. package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts +0 -22
  1388. package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +0 -1
  1389. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +0 -128
  1390. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +0 -1
  1391. package/out/zero-cache/src/services/view-syncer/cvr.d.ts +0 -294
  1392. package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +0 -1
  1393. package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.d.ts +0 -81
  1394. package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.d.ts.map +0 -1
  1395. package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts +0 -45
  1396. package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts.map +0 -1
  1397. package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.d.ts +0 -53
  1398. package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.d.ts.map +0 -1
  1399. package/out/zero-cache/src/services/view-syncer/hydration-budget.d.ts +0 -33
  1400. package/out/zero-cache/src/services/view-syncer/hydration-budget.d.ts.map +0 -1
  1401. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.d.ts +0 -51
  1402. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.d.ts.map +0 -1
  1403. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts +0 -34
  1404. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +0 -1
  1405. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +0 -296
  1406. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +0 -1
  1407. package/out/zero-cache/src/services/view-syncer/plan-warnings.d.ts +0 -7
  1408. package/out/zero-cache/src/services/view-syncer/plan-warnings.d.ts.map +0 -1
  1409. package/out/zero-cache/src/services/view-syncer/push-cost.d.ts +0 -132
  1410. package/out/zero-cache/src/services/view-syncer/push-cost.d.ts.map +0 -1
  1411. package/out/zero-cache/src/services/view-syncer/push-cutoff.d.ts +0 -55
  1412. package/out/zero-cache/src/services/view-syncer/push-cutoff.d.ts.map +0 -1
  1413. package/out/zero-cache/src/services/view-syncer/query-covering.d.ts +0 -28
  1414. package/out/zero-cache/src/services/view-syncer/query-covering.d.ts.map +0 -1
  1415. package/out/zero-cache/src/services/view-syncer/query-shape.d.ts +0 -25
  1416. package/out/zero-cache/src/services/view-syncer/query-shape.d.ts.map +0 -1
  1417. package/out/zero-cache/src/services/view-syncer/query-stats.d.ts +0 -89
  1418. package/out/zero-cache/src/services/view-syncer/query-stats.d.ts.map +0 -1
  1419. package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts +0 -90
  1420. package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts.map +0 -1
  1421. package/out/zero-cache/src/services/view-syncer/row-set-signature.d.ts +0 -17
  1422. package/out/zero-cache/src/services/view-syncer/row-set-signature.d.ts.map +0 -1
  1423. package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts +0 -86
  1424. package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +0 -1
  1425. package/out/zero-cache/src/services/view-syncer/schema/init.d.ts +0 -5
  1426. package/out/zero-cache/src/services/view-syncer/schema/init.d.ts.map +0 -1
  1427. package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +0 -563
  1428. package/out/zero-cache/src/services/view-syncer/schema/types.d.ts.map +0 -1
  1429. package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.d.ts +0 -95
  1430. package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.d.ts.map +0 -1
  1431. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +0 -412
  1432. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +0 -1
  1433. package/out/zero-cache/src/services/view-syncer/tracer.d.ts +0 -2
  1434. package/out/zero-cache/src/services/view-syncer/tracer.d.ts.map +0 -1
  1435. package/out/zero-cache/src/services/view-syncer/ttl-clock.d.ts +0 -10
  1436. package/out/zero-cache/src/services/view-syncer/ttl-clock.d.ts.map +0 -1
  1437. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +0 -133
  1438. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +0 -1
  1439. package/out/zero-cache/src/types/pg-patch.d.ts +0 -21
  1440. package/out/zero-cache/src/types/pg-patch.d.ts.map +0 -1
  1441. package/out/zero-cache/src/types/pg-versions.d.ts +0 -3
  1442. package/out/zero-cache/src/types/pg-versions.d.ts.map +0 -1
  1443. package/out/zero-cache/src/workers/replicator.d.ts +0 -57
  1444. package/out/zero-cache/src/workers/replicator.d.ts.map +0 -1
  1445. package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts +0 -14
  1446. package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +0 -1
  1447. package/out/zero-cache/src/workers/syncer.d.ts +0 -67
  1448. package/out/zero-cache/src/workers/syncer.d.ts.map +0 -1
  1449. package/out/zero-events/src/index.d.ts +0 -27
  1450. package/out/zero-events/src/index.d.ts.map +0 -1
  1451. package/out/zero-events/src/json.d.ts +0 -20
  1452. package/out/zero-events/src/json.d.ts.map +0 -1
  1453. package/out/zero-events/src/status.d.ts +0 -144
  1454. package/out/zero-events/src/status.d.ts.map +0 -1
  1455. package/out/zqlite/src/database-storage.d.ts +0 -24
  1456. package/out/zqlite/src/database-storage.d.ts.map +0 -1
  1457. package/out/zqlite/src/explain-queries.d.ts +0 -4
  1458. package/out/zqlite/src/explain-queries.d.ts.map +0 -1
  1459. package/out/zqlite/src/internal/sql-inline.d.ts +0 -13
  1460. package/out/zqlite/src/internal/sql-inline.d.ts.map +0 -1
  1461. package/out/zqlite/src/resolve-scalar-subqueries.d.ts +0 -72
  1462. package/out/zqlite/src/resolve-scalar-subqueries.d.ts.map +0 -1
  1463. package/out/zqlite/src/sqlite-cost-model.d.ts +0 -17
  1464. package/out/zqlite/src/sqlite-cost-model.d.ts.map +0 -1
  1465. package/out/zqlite/src/sqlite-stat-fanout.d.ts +0 -121
  1466. package/out/zqlite/src/sqlite-stat-fanout.d.ts.map +0 -1
@@ -1,9 +1,14 @@
1
- import type { NoIndexDiff } from '../../../replicache/src/btree/node.ts';
1
+ import type { InternalDiffOperation, NoIndexDiff } from '../../../replicache/src/btree/node.ts';
2
2
  import type { LazyStore } from '../../../replicache/src/dag/lazy-store.ts';
3
3
  import { type Store } from '../../../replicache/src/dag/store.ts';
4
4
  import type { Hash } from '../../../replicache/src/hash.ts';
5
5
  import type { ZeroReadOptions } from '../../../replicache/src/replicache-options.ts';
6
+ import type { AggregateFunction, CompoundKey } from '../../../zero-protocol/src/ast.ts';
7
+ import type { Row } from '../../../zero-protocol/src/data.ts';
8
+ import type { PrimaryKey } from '../../../zero-protocol/src/primary-key.ts';
6
9
  import type { TableSchema } from '../../../zero-schema/src/table-schema.ts';
10
+ import { type SchemaValue } from '../../../zero-types/src/schema-value.ts';
11
+ import { type AggregateOptimisticDelta } from '../../../zql/src/builder/builder.ts';
7
12
  import { MemorySource } from '../../../zql/src/ivm/memory-source.ts';
8
13
  /**
9
14
  * Replicache needs to rebase mutations onto different
@@ -21,11 +26,61 @@ import { MemorySource } from '../../../zql/src/ivm/memory-source.ts';
21
26
  * ever be a few outstanding diffs to apply given Zero is meant
22
27
  * to be run in a connected state.
23
28
  */
29
+ /**
30
+ * Metadata for optimistically updating a synced aggregate when a child row is
31
+ * locally mutated. Registered when a relationship-aggregate query materializes.
32
+ */
33
+ export type OptimisticAggregate = {
34
+ /** The synthetic aggregate table, e.g. `aggregate:<queryID>:<alias>`. */
35
+ readonly aggTableName: string;
36
+ /** The correlation columns of a child row, as the client names them. */
37
+ readonly childField: readonly string[];
38
+ /**
39
+ * The same columns as the synced aggregate rows name them (server names), in
40
+ * the same order. An aggregate row's key is built from these.
41
+ */
42
+ readonly keyField: readonly string[];
43
+ /** The aggregate function (`count`/`sum`/`avg` are optimistically deltaed). */
44
+ readonly fn: AggregateFunction;
45
+ /** The aggregated field, for `sum`/`avg` (`undefined` for `count`). */
46
+ readonly field: string | undefined;
47
+ /** A JSON path into `field` (see `Aggregate.path`). */
48
+ readonly path: readonly (string | number)[] | undefined;
49
+ /**
50
+ * The aggregate's `where`, compiled to a per-row predicate. A child row
51
+ * contributes only when it returns true; `undefined` means no filter (every
52
+ * child contributes). Only set when the whole `where` is per-row evaluable —
53
+ * a correlated subquery in the `where` makes the aggregate
54
+ * server-authoritative (it is never registered for optimism at all).
55
+ */
56
+ readonly predicate: ((row: Row) => boolean) | undefined;
57
+ /** The rows are a grouped query's groups (see `AggregateOptimisticDelta`). */
58
+ readonly grouped: boolean;
59
+ };
24
60
  export declare class IVMSourceBranch {
25
61
  #private;
26
62
  hash: Hash | undefined;
27
- constructor(tables: Record<string, TableSchema>, hash?: Hash, sources?: Map<string, MemorySource | undefined>);
63
+ constructor(tables: Record<string, TableSchema>, hash?: Hash, sources?: Map<string, MemorySource | undefined>, aggregateOptimism?: Map<string, Map<string, OptimisticAggregate>>, isFork?: boolean);
28
64
  getSource(name: string): MemorySource | undefined;
65
+ /**
66
+ * Get-or-create the synthetic source for a *relationship* aggregate
67
+ * (`aggregate:<queryID>:<alias>`), whose shape (the correlation-key columns +
68
+ * value) cannot be derived from the name. The query builder supplies the
69
+ * schema when a query materializes; {@link applyDiffs} supplies an inferred
70
+ * one when persisted rows are replayed before the query re-materializes (e.g.
71
+ * on reload). Idempotent — the first caller wins.
72
+ */
73
+ getOrCreateAggregateSource(name: string, columns: Record<string, SchemaValue>, primaryKey: PrimaryKey, optimistic?: AggregateOptimisticDelta): MemorySource;
74
+ /**
75
+ * The server names of `columns` of `table`, in the same order. A column with
76
+ * no server name of its own, or of a table not in the schema, keeps its name.
77
+ */
78
+ serverColumnNames(table: string, columns: CompoundKey): CompoundKey;
79
+ /**
80
+ * The optimistic-aggregate registrations whose child rows live in `table`.
81
+ * An optimistic insert/delete of such a child row bumps these aggregates.
82
+ */
83
+ getOptimisticAggregates(table: string): Iterable<OptimisticAggregate>;
29
84
  clear(): void;
30
85
  /**
31
86
  * Mutates the current branch, advancing it to the new head
@@ -47,4 +102,9 @@ export declare class IVMSourceBranch {
47
102
  fork(): IVMSourceBranch;
48
103
  }
49
104
  export declare function initFromStore(branch: IVMSourceBranch, hash: Hash, store: Store): Promise<void>;
105
+ /**
106
+ * An `add` diff for each row at `hash` that the IVM sources hold: the table
107
+ * rows under `e/` and the aggregate rows under `a/`, in key order.
108
+ */
109
+ export declare function readRowDiffs(store: Store, hash: Hash): Promise<InternalDiffOperation[]>;
50
110
  //# sourceMappingURL=ivm-branch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ivm-branch.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/ivm-branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAY,KAAK,KAAK,EAAC,MAAM,sCAAsC,CAAC;AAG3E,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,iCAAiC,CAAC;AAC1D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,+CAA+C,CAAC;AASnF,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAC,YAAY,EAAC,MAAM,uCAAuC,CAAC;AAQnE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAe;;IAI1B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IAEvB,YACE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACnC,IAAI,CAAC,EAAE,IAAI,EACX,OAAO,GAAE,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAa,EAK3D;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAahD;IAED,KAAK,SAEJ;IAQD;;;OAGG;IACH,OAAO,CAAC,YAAY,EAAE,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,QAiBxE;IAED;;OAEG;IACG,UAAU,CACd,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,IAAI,EACjB,WAAW,CAAC,EAAE,eAAe,GAC5B,OAAO,CAAC,eAAe,CAAC,CAY1B;IAED;;;;;;;OAOG;IACH,IAAI,oBAaH;CACF;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,iBAkBb"}
1
+ {"version":3,"file":"ivm-branch.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/ivm-branch.ts"],"names":[],"mappings":"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"}
@@ -1,52 +1,119 @@
1
1
  import { assert } from "../../../shared/src/asserts.js";
2
2
  import { wrapIterable } from "../../../shared/src/iterables.js";
3
- import "../../../replicache/src/db/read.js";
3
+ import { readFromHash } from "../../../replicache/src/db/read.js";
4
4
  import { diff } from "../../../replicache/src/sync/diff.js";
5
5
  import { using, withRead } from "../../../replicache/src/with-transactions.js";
6
6
  import { must } from "../../../shared/src/must.js";
7
- import { diffBinarySearch } from "../../../replicache/src/subscriptions.js";
7
+ import { assignProperty } from "../../../shared/src/objects.js";
8
8
  import { consume } from "../../../zql/src/ivm/stream.js";
9
+ import { AGGREGATE_KEY_COLUMN, AGGREGATE_PAYLOAD_COLUMNS, AGGREGATE_VALUE_COLUMN } from "../../../zql/src/ivm/aggregate.js";
10
+ import { diffBinarySearch } from "../../../replicache/src/subscriptions.js";
9
11
  import { makeSourceChangeEdit, makeSourceChangeRemove } from "../../../zql/src/ivm/source.js";
10
12
  import { MemorySource } from "../../../zql/src/ivm/memory-source.js";
11
- import { sourceNameFromKey } from "./keys.js";
13
+ import { isAggregateTableName, isTopLevelAggregateTableName } from "../../../zql/src/builder/builder.js";
14
+ import { valueTypeOf } from "../../../zero-types/src/schema-value.js";
15
+ import { ROW_KEY_PREFIXES, aggregateRowKeyColumns, sourceNameFromKey } from "./keys.js";
12
16
  //#region ../zero-client/src/client/ivm-branch.ts
13
- /**
14
- * Replicache needs to rebase mutations onto different
15
- * commits of it's b-tree. These mutations can have reads
16
- * in them and those reads must be run against the IVM sources.
17
- *
18
- * To ensure the reads get the correct state, the IVM
19
- * sources need to reflect the state of the commit
20
- * being rebased onto. `IVMSourceBranch` allows us to:
21
- * 1. fork the IVM sources
22
- * 2. patch them up to match the desired head
23
- * 3. run the reads against the forked sources
24
- *
25
- * (2) is expected to be a cheap operation as there should only
26
- * ever be a few outstanding diffs to apply given Zero is meant
27
- * to be run in a connected state.
28
- */
29
17
  var IVMSourceBranch = class IVMSourceBranch {
30
18
  #sources;
31
19
  #tables;
20
+ #aggregateOptimism;
21
+ #isFork;
32
22
  #advanceError;
33
23
  hash;
34
- constructor(tables, hash, sources = /* @__PURE__ */ new Map()) {
24
+ constructor(tables, hash, sources = /* @__PURE__ */ new Map(), aggregateOptimism = /* @__PURE__ */ new Map(), isFork = false) {
35
25
  this.#tables = tables;
36
26
  this.#sources = sources;
27
+ this.#aggregateOptimism = aggregateOptimism;
28
+ this.#isFork = isFork;
37
29
  this.hash = hash;
38
30
  }
39
31
  getSource(name) {
40
32
  this.#throwIfInvalid();
41
33
  if (this.#sources.has(name)) return this.#sources.get(name);
42
34
  const schema = this.#tables[name];
43
- const source = schema ? new MemorySource(name, schema.columns, schema.primaryKey) : void 0;
35
+ let source;
36
+ if (schema) source = new MemorySource(name, schema.columns, schema.primaryKey);
37
+ else if (isTopLevelAggregateTableName(name)) {
38
+ const columns = { [AGGREGATE_KEY_COLUMN]: { type: "number" } };
39
+ for (const col of AGGREGATE_PAYLOAD_COLUMNS) columns[col] = {
40
+ type: "number",
41
+ optional: true
42
+ };
43
+ source = new MemorySource(name, columns, [AGGREGATE_KEY_COLUMN]);
44
+ } else source = void 0;
44
45
  this.#sources.set(name, source);
45
46
  return source;
46
47
  }
48
+ /**
49
+ * Get-or-create the synthetic source for a *relationship* aggregate
50
+ * (`aggregate:<queryID>:<alias>`), whose shape (the correlation-key columns +
51
+ * value) cannot be derived from the name. The query builder supplies the
52
+ * schema when a query materializes; {@link applyDiffs} supplies an inferred
53
+ * one when persisted rows are replayed before the query re-materializes (e.g.
54
+ * on reload). Idempotent — the first caller wins.
55
+ */
56
+ getOrCreateAggregateSource(name, columns, primaryKey, optimistic) {
57
+ if (optimistic && !this.#isFork) {
58
+ let byTable = this.#aggregateOptimism.get(optimistic.table);
59
+ if (!byTable) {
60
+ byTable = /* @__PURE__ */ new Map();
61
+ this.#aggregateOptimism.set(optimistic.table, byTable);
62
+ }
63
+ byTable.set(name, {
64
+ aggTableName: name,
65
+ childField: optimistic.childField,
66
+ keyField: optimistic.keyField,
67
+ fn: optimistic.fn,
68
+ field: optimistic.field,
69
+ path: optimistic.path,
70
+ predicate: optimistic.predicate,
71
+ grouped: optimistic.grouped ?? false
72
+ });
73
+ }
74
+ const existing = this.#sources.get(name);
75
+ if (existing) return existing;
76
+ const source = new MemorySource(name, columns, primaryKey);
77
+ this.#sources.set(name, source);
78
+ return source;
79
+ }
80
+ /**
81
+ * The server names of `columns` of `table`, in the same order. A column with
82
+ * no server name of its own, or of a table not in the schema, keeps its name.
83
+ */
84
+ serverColumnNames(table, columns) {
85
+ const tableColumns = this.#tables[table]?.columns;
86
+ return columns.map((c) => tableColumns?.[c]?.serverName ?? c);
87
+ }
88
+ /**
89
+ * The optimistic-aggregate registrations whose child rows live in `table`.
90
+ * An optimistic insert/delete of such a child row bumps these aggregates.
91
+ */
92
+ getOptimisticAggregates(table) {
93
+ return this.#aggregateOptimism.get(table)?.values() ?? [];
94
+ }
47
95
  clear() {
48
96
  this.#sources.clear();
49
97
  }
98
+ /**
99
+ * Drops the synthetic aggregate sources that are empty and that no view
100
+ * reads, with their optimistic registrations. The server deletes an
101
+ * aggregate's rows when its query is removed, so this is how the query's
102
+ * client state goes away. A later materialization recreates both.
103
+ *
104
+ * Every advance checks every aggregate source, not just the ones it emptied:
105
+ * the server can empty a source while a view still reads it, and a source
106
+ * can be destroyed without ever getting a row.
107
+ *
108
+ * Only the main branch does this: a fork's sources have no views, and the
109
+ * registrations are shared with the main branch.
110
+ */
111
+ #releaseAggregateSources() {
112
+ for (const [name, source] of this.#sources) if (source && isAggregateTableName(name) && source.data.size === 0 && !source.connected) {
113
+ this.#sources.delete(name);
114
+ for (const byTable of this.#aggregateOptimism.values()) byTable.delete(name);
115
+ }
116
+ }
50
117
  #throwIfInvalid() {
51
118
  if (this.#advanceError) throw this.#advanceError;
52
119
  }
@@ -59,6 +126,7 @@ var IVMSourceBranch = class IVMSourceBranch {
59
126
  assert(this.hash === expectedHead, () => `Expected head must match the main head. Got: ${this.hash}, expected: ${expectedHead}`);
60
127
  try {
61
128
  applyDiffs(diffs, this);
129
+ this.#releaseAggregateSources();
62
130
  this.hash = newHead;
63
131
  } catch (e) {
64
132
  this.#advanceError = e;
@@ -87,9 +155,28 @@ var IVMSourceBranch = class IVMSourceBranch {
87
155
  */
88
156
  fork() {
89
157
  this.#throwIfInvalid();
90
- return new IVMSourceBranch(this.#tables, this.hash, new Map(wrapIterable(this.#sources.entries()).map(([name, source]) => [name, source?.fork()])));
158
+ return new IVMSourceBranch(this.#tables, this.hash, new Map(wrapIterable(this.#sources.entries()).map(([name, source]) => [name, source?.fork()])), this.#aggregateOptimism, true);
91
159
  }
92
160
  };
161
+ /**
162
+ * An `add` diff for each row at `hash` that the IVM sources hold: the table
163
+ * rows under `e/` and the aggregate rows under `a/`, in key order.
164
+ */
165
+ async function readRowDiffs(store, hash) {
166
+ const diffs = [];
167
+ await withRead(store, async (dagRead) => {
168
+ const read = await readFromHash(hash, dagRead, 7);
169
+ for (const prefix of ROW_KEY_PREFIXES) for await (const entry of read.map.scan(prefix, true)) {
170
+ if (!entry[0].startsWith(prefix)) break;
171
+ diffs.push({
172
+ op: "add",
173
+ key: entry[0],
174
+ newValue: entry[1]
175
+ });
176
+ }
177
+ });
178
+ return diffs;
179
+ }
93
180
  async function patchBranch(desiredHead, store, fork, readOptions) {
94
181
  const diffs = await computeDiffs(must(fork.hash), desiredHead, store, readOptions);
95
182
  if (!diffs) return;
@@ -109,34 +196,42 @@ async function computeDiffs(startHash, endHash, store, readOptions) {
109
196
  return diffs.get("");
110
197
  }
111
198
  function applyDiffs(diffs, branch) {
112
- for (let i = diffBinarySearch(diffs, "e/", (diff) => diff.key); i < diffs.length; i++) {
199
+ for (const prefix of ROW_KEY_PREFIXES) applyRowDiffs(diffs, prefix, branch);
200
+ }
201
+ /** Applies the diffs of the rows under `prefix`, `e/` or `a/`. */
202
+ function applyRowDiffs(diffs, prefix, branch) {
203
+ for (let i = diffBinarySearch(diffs, prefix, (diff) => diff.key); i < diffs.length; i++) {
113
204
  const diff = diffs[i];
114
205
  const { key } = diff;
115
- if (!key.startsWith("e/")) break;
206
+ if (!key.startsWith(prefix)) break;
116
207
  const name = sourceNameFromKey(key);
117
- const source = must(branch.getSource(name));
208
+ let source = branch.getSource(name);
209
+ if (!source && isAggregateTableName(name)) {
210
+ const row = diff.op === "del" ? diff.oldValue : diff.newValue;
211
+ source = branch.getOrCreateAggregateSource(name, ...inferAggregateSchema(name, row));
212
+ }
213
+ source = must(source);
118
214
  switch (diff.op) {
119
215
  case "del":
120
216
  consume(source.push(makeSourceChangeRemove(diff.oldValue)));
121
217
  break;
122
218
  case "add": {
123
- const rows = takeAddsForSource(diffs, i, name);
219
+ const sourcePrefix = key.slice(0, key.indexOf("/", prefix.length) + 1);
220
+ const rows = takeAddsForSource(diffs, i, sourcePrefix);
124
221
  i += rows.length - 1;
125
222
  source.pushAdds(rows);
126
223
  break;
127
224
  }
128
- case "change":
129
- consume(source.push(makeSourceChangeEdit(diff.newValue, diff.oldValue)));
130
- break;
225
+ case "change": consume(source.push(makeSourceChangeEdit(diff.newValue, diff.oldValue)));
131
226
  }
132
227
  }
133
228
  }
134
229
  /**
135
- * Returns the rows of the run of `add` diffs for the source `name` that starts
136
- * at `start`. Diffs are ordered by key so a table's rows are contiguous.
230
+ * Returns the rows of the run of `add` diffs under `prefix` (a source's key
231
+ * prefix, e.g. `e/issue/`) that starts at `start`. Diffs are ordered by key so
232
+ * a table's rows are contiguous.
137
233
  */
138
- function takeAddsForSource(diffs, start, name) {
139
- const prefix = "e/" + name + "/";
234
+ function takeAddsForSource(diffs, start, prefix) {
140
235
  const rows = [];
141
236
  for (let i = start; i < diffs.length; i++) {
142
237
  const diff = diffs[i];
@@ -145,7 +240,31 @@ function takeAddsForSource(diffs, start, name) {
145
240
  }
146
241
  return rows;
147
242
  }
243
+ /**
244
+ * Infers a synthetic aggregate source's schema from one of its rows: the key
245
+ * columns are every column except the payload and the row-version, with types
246
+ * read off the actual values. Used only on the reload path, where a
247
+ * relationship aggregate's rows are replayed before its query (which would
248
+ * otherwise supply the exact schema) materializes.
249
+ */
250
+ function inferAggregateSchema(name, row) {
251
+ const columns = {};
252
+ for (const k of Object.keys(row)) {
253
+ if (k === "_0_version") continue;
254
+ if (AGGREGATE_PAYLOAD_COLUMNS.has(k)) assignProperty(columns, k, {
255
+ type: "number",
256
+ optional: true
257
+ });
258
+ else assignProperty(columns, k, { type: valueTypeOf(row[k]) });
259
+ }
260
+ const keyColumns = aggregateRowKeyColumns(name, row);
261
+ if (!("_0_value" in columns)) columns[AGGREGATE_VALUE_COLUMN] = {
262
+ type: "number",
263
+ optional: true
264
+ };
265
+ return [columns, keyColumns];
266
+ }
148
267
  //#endregion
149
- export { IVMSourceBranch };
268
+ export { IVMSourceBranch, readRowDiffs };
150
269
 
151
270
  //# sourceMappingURL=ivm-branch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ivm-branch.js","names":["#sources","#tables","#throwIfInvalid","#advanceError"],"sources":["../../../../../zero-client/src/client/ivm-branch.ts"],"sourcesContent":["import type {\n InternalDiff,\n InternalDiffOperation,\n NoIndexDiff,\n} from '../../../replicache/src/btree/node.ts';\nimport type {LazyStore} from '../../../replicache/src/dag/lazy-store.ts';\nimport {type Read, type Store} from '../../../replicache/src/dag/store.ts';\nimport {readFromHash} from '../../../replicache/src/db/read.ts';\nimport * as FormatVersion from '../../../replicache/src/format-version-enum.ts';\nimport type {Hash} from '../../../replicache/src/hash.ts';\nimport type {ZeroReadOptions} from '../../../replicache/src/replicache-options.ts';\nimport {diffBinarySearch} from '../../../replicache/src/subscriptions.ts';\nimport type {DiffsMap} from '../../../replicache/src/sync/diff.ts';\nimport {diff} from '../../../replicache/src/sync/diff.ts';\nimport {using, withRead} from '../../../replicache/src/with-transactions.ts';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport {wrapIterable} from '../../../shared/src/iterables.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport type {Row} from '../../../zero-protocol/src/data.ts';\nimport type {TableSchema} from '../../../zero-schema/src/table-schema.ts';\nimport {MemorySource} from '../../../zql/src/ivm/memory-source.ts';\nimport {consume} from '../../../zql/src/ivm/stream.ts';\nimport {ENTITIES_KEY_PREFIX, sourceNameFromKey} from './keys.ts';\n\nimport {\n makeSourceChangeEdit,\n makeSourceChangeRemove,\n} from '../../../zql/src/ivm/source.ts';\n/**\n * Replicache needs to rebase mutations onto different\n * commits of it's b-tree. These mutations can have reads\n * in them and those reads must be run against the IVM sources.\n *\n * To ensure the reads get the correct state, the IVM\n * sources need to reflect the state of the commit\n * being rebased onto. `IVMSourceBranch` allows us to:\n * 1. fork the IVM sources\n * 2. patch them up to match the desired head\n * 3. run the reads against the forked sources\n *\n * (2) is expected to be a cheap operation as there should only\n * ever be a few outstanding diffs to apply given Zero is meant\n * to be run in a connected state.\n */\nexport class IVMSourceBranch {\n readonly #sources: Map<string, MemorySource | undefined>;\n readonly #tables: Record<string, TableSchema>;\n #advanceError: unknown;\n hash: Hash | undefined;\n\n constructor(\n tables: Record<string, TableSchema>,\n hash?: Hash,\n sources: Map<string, MemorySource | undefined> = new Map(),\n ) {\n this.#tables = tables;\n this.#sources = sources;\n this.hash = hash;\n }\n\n getSource(name: string): MemorySource | undefined {\n this.#throwIfInvalid();\n\n if (this.#sources.has(name)) {\n return this.#sources.get(name);\n }\n\n const schema = this.#tables[name];\n const source = schema\n ? new MemorySource(name, schema.columns, schema.primaryKey)\n : undefined;\n this.#sources.set(name, source);\n return source;\n }\n\n clear() {\n this.#sources.clear();\n }\n\n #throwIfInvalid() {\n if (this.#advanceError) {\n throw this.#advanceError;\n }\n }\n\n /**\n * Mutates the current branch, advancing it to the new head\n * by applying the given diffs.\n */\n advance(expectedHead: Hash | undefined, newHead: Hash, diffs: NoIndexDiff) {\n this.#throwIfInvalid();\n\n assert(\n this.hash === expectedHead,\n () =>\n `Expected head must match the main head. Got: ${this.hash}, expected: ${expectedHead}`,\n );\n\n try {\n applyDiffs(diffs, this);\n this.hash = newHead;\n } catch (e) {\n this.#advanceError = e;\n this.clear();\n throw e;\n }\n }\n\n /**\n * Fork the branch and patch it up to match the desired head.\n */\n async forkToHead(\n store: LazyStore,\n desiredHead: Hash,\n readOptions?: ZeroReadOptions,\n ): Promise<IVMSourceBranch> {\n this.#throwIfInvalid();\n\n const fork = this.fork();\n\n if (fork.hash === desiredHead) {\n return fork;\n }\n\n await patchBranch(desiredHead, store, fork, readOptions);\n fork.hash = desiredHead;\n return fork;\n }\n\n /**\n * Creates a new IVMSourceBranch that is a copy of the current one.\n * This is a cheap operation since the b-trees are shared until a write is performed\n * and then only the modified nodes are copied.\n *\n * IVM branches are forked when we need to rebase mutations.\n * The mutations modify the fork rather than original branch.\n */\n fork() {\n this.#throwIfInvalid();\n\n return new IVMSourceBranch(\n this.#tables,\n this.hash,\n new Map(\n wrapIterable(this.#sources.entries()).map(([name, source]) => [\n name,\n source?.fork(),\n ]),\n ),\n );\n }\n}\n\nexport async function initFromStore(\n branch: IVMSourceBranch,\n hash: Hash,\n store: Store,\n) {\n const diffs: InternalDiffOperation[] = [];\n await withRead(store, async dagRead => {\n const read = await readFromHash(hash, dagRead, FormatVersion.Latest);\n for await (const entry of read.map.scan(ENTITIES_KEY_PREFIX, true)) {\n if (!entry[0].startsWith(ENTITIES_KEY_PREFIX)) {\n break;\n }\n diffs.push({\n op: 'add',\n key: entry[0],\n newValue: entry[1],\n });\n }\n });\n\n branch.advance(undefined, hash, diffs);\n}\n\nasync function patchBranch(\n desiredHead: Hash,\n store: LazyStore,\n fork: IVMSourceBranch,\n readOptions: ZeroReadOptions | undefined,\n) {\n const diffs = await computeDiffs(\n must(fork.hash),\n desiredHead,\n store,\n readOptions,\n );\n if (!diffs) {\n return;\n }\n applyDiffs(diffs, fork);\n}\n\nasync function computeDiffs(\n startHash: Hash,\n endHash: Hash,\n store: LazyStore,\n readOptions: ZeroReadOptions | undefined,\n): Promise<InternalDiff | undefined> {\n const readFn = (dagRead: Read) =>\n diff(\n startHash,\n endHash,\n dagRead,\n {\n shouldComputeDiffs: () => true,\n shouldComputeDiffsForIndex(_name) {\n return false;\n },\n },\n FormatVersion.Latest,\n );\n\n let diffs: DiffsMap;\n if (readOptions?.openLazySourceRead) {\n diffs = await using(store.read(readOptions.openLazySourceRead), readFn);\n } else if (readOptions?.openLazyRead) {\n diffs = await readFn(readOptions.openLazyRead);\n } else {\n diffs = await withRead(store, readFn);\n }\n\n return diffs.get('');\n}\n\nfunction applyDiffs(diffs: NoIndexDiff, branch: IVMSourceBranch) {\n for (\n let i = diffBinarySearch(diffs, ENTITIES_KEY_PREFIX, diff => diff.key);\n i < diffs.length;\n i++\n ) {\n const diff = diffs[i];\n const {key} = diff;\n if (!key.startsWith(ENTITIES_KEY_PREFIX)) {\n break;\n }\n const name = sourceNameFromKey(key);\n const source = must(branch.getSource(name));\n switch (diff.op) {\n case 'del':\n consume(source.push(makeSourceChangeRemove(diff.oldValue as Row)));\n break;\n case 'add': {\n const rows = takeAddsForSource(diffs, i, name);\n i += rows.length - 1;\n source.pushAdds(rows);\n break;\n }\n case 'change':\n consume(\n source.push(\n makeSourceChangeEdit(diff.newValue as Row, diff.oldValue as Row),\n ),\n );\n break;\n }\n }\n}\n\n/**\n * Returns the rows of the run of `add` diffs for the source `name` that starts\n * at `start`. Diffs are ordered by key so a table's rows are contiguous.\n */\nfunction takeAddsForSource(\n diffs: NoIndexDiff,\n start: number,\n name: string,\n): Row[] {\n const prefix = ENTITIES_KEY_PREFIX + name + '/';\n const rows: Row[] = [];\n for (let i = start; i < diffs.length; i++) {\n const diff = diffs[i];\n if (diff.op !== 'add' || !diff.key.startsWith(prefix)) {\n break;\n }\n rows.push(diff.newValue as Row);\n }\n return rows;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ivm-branch.js","names":[],"sources":["../../../../../zero-client/src/client/ivm-branch.ts"],"sourcesContent":["import type {\n InternalDiff,\n InternalDiffOperation,\n NoIndexDiff,\n} from '../../../replicache/src/btree/node.ts';\nimport type {LazyStore} from '../../../replicache/src/dag/lazy-store.ts';\nimport {type Read, type Store} from '../../../replicache/src/dag/store.ts';\nimport {readFromHash} from '../../../replicache/src/db/read.ts';\nimport * as FormatVersion from '../../../replicache/src/format-version-enum.ts';\nimport type {Hash} from '../../../replicache/src/hash.ts';\nimport type {ZeroReadOptions} from '../../../replicache/src/replicache-options.ts';\nimport {diffBinarySearch} from '../../../replicache/src/subscriptions.ts';\nimport type {DiffsMap} from '../../../replicache/src/sync/diff.ts';\nimport {diff} from '../../../replicache/src/sync/diff.ts';\nimport {using, withRead} from '../../../replicache/src/with-transactions.ts';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport {wrapIterable} from '../../../shared/src/iterables.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport {assignProperty} from '../../../shared/src/objects.ts';\nimport type {\n AggregateFunction,\n CompoundKey,\n} from '../../../zero-protocol/src/ast.ts';\nimport type {Row} from '../../../zero-protocol/src/data.ts';\nimport type {PrimaryKey} from '../../../zero-protocol/src/primary-key.ts';\nimport type {TableSchema} from '../../../zero-schema/src/table-schema.ts';\nimport {\n valueTypeOf,\n type SchemaValue,\n} from '../../../zero-types/src/schema-value.ts';\nimport {\n isAggregateTableName,\n isTopLevelAggregateTableName,\n type AggregateOptimisticDelta,\n} from '../../../zql/src/builder/builder.ts';\nimport {\n AGGREGATE_KEY_COLUMN,\n AGGREGATE_PAYLOAD_COLUMNS,\n AGGREGATE_VALUE_COLUMN,\n} from '../../../zql/src/ivm/aggregate.ts';\nimport {MemorySource} from '../../../zql/src/ivm/memory-source.ts';\nimport {consume} from '../../../zql/src/ivm/stream.ts';\nimport {\n aggregateRowKeyColumns,\n ROW_KEY_PREFIXES,\n ROW_VERSION_COLUMN,\n sourceNameFromKey,\n} from './keys.ts';\n\nimport {\n makeSourceChangeEdit,\n makeSourceChangeRemove,\n} from '../../../zql/src/ivm/source.ts';\n/**\n * Replicache needs to rebase mutations onto different\n * commits of it's b-tree. These mutations can have reads\n * in them and those reads must be run against the IVM sources.\n *\n * To ensure the reads get the correct state, the IVM\n * sources need to reflect the state of the commit\n * being rebased onto. `IVMSourceBranch` allows us to:\n * 1. fork the IVM sources\n * 2. patch them up to match the desired head\n * 3. run the reads against the forked sources\n *\n * (2) is expected to be a cheap operation as there should only\n * ever be a few outstanding diffs to apply given Zero is meant\n * to be run in a connected state.\n */\n/**\n * Metadata for optimistically updating a synced aggregate when a child row is\n * locally mutated. Registered when a relationship-aggregate query materializes.\n */\nexport type OptimisticAggregate = {\n /** The synthetic aggregate table, e.g. `aggregate:<queryID>:<alias>`. */\n readonly aggTableName: string;\n /** The correlation columns of a child row, as the client names them. */\n readonly childField: readonly string[];\n /**\n * The same columns as the synced aggregate rows name them (server names), in\n * the same order. An aggregate row's key is built from these.\n */\n readonly keyField: readonly string[];\n /** The aggregate function (`count`/`sum`/`avg` are optimistically deltaed). */\n readonly fn: AggregateFunction;\n /** The aggregated field, for `sum`/`avg` (`undefined` for `count`). */\n readonly field: string | undefined;\n /** A JSON path into `field` (see `Aggregate.path`). */\n readonly path: readonly (string | number)[] | undefined;\n /**\n * The aggregate's `where`, compiled to a per-row predicate. A child row\n * contributes only when it returns true; `undefined` means no filter (every\n * child contributes). Only set when the whole `where` is per-row evaluable —\n * a correlated subquery in the `where` makes the aggregate\n * server-authoritative (it is never registered for optimism at all).\n */\n readonly predicate: ((row: Row) => boolean) | undefined;\n /** The rows are a grouped query's groups (see `AggregateOptimisticDelta`). */\n readonly grouped: boolean;\n};\n\nexport class IVMSourceBranch {\n readonly #sources: Map<string, MemorySource | undefined>;\n readonly #tables: Record<string, TableSchema>;\n // Registry for optimistic aggregate deltas: child table name -> (synthetic\n // aggregate table name -> metadata). Lets an optimistic child mutation find\n // the aggregate rows it should bump. Shared by reference across forks (it is\n // query metadata, independent of branch row state).\n readonly #aggregateOptimism: Map<string, Map<string, OptimisticAggregate>>;\n // Only the main branch registers optimistic aggregates: see\n // getOrCreateAggregateSource.\n readonly #isFork: boolean;\n #advanceError: unknown;\n hash: Hash | undefined;\n\n constructor(\n tables: Record<string, TableSchema>,\n hash?: Hash,\n sources: Map<string, MemorySource | undefined> = new Map(),\n aggregateOptimism: Map<\n string,\n Map<string, OptimisticAggregate>\n > = new Map(),\n isFork = false,\n ) {\n this.#tables = tables;\n this.#sources = sources;\n this.#aggregateOptimism = aggregateOptimism;\n this.#isFork = isFork;\n this.hash = hash;\n }\n\n getSource(name: string): MemorySource | undefined {\n this.#throwIfInvalid();\n\n if (this.#sources.has(name)) {\n return this.#sources.get(name);\n }\n\n const schema = this.#tables[name];\n let source: MemorySource | undefined;\n if (schema) {\n source = new MemorySource(name, schema.columns, schema.primaryKey);\n } else if (isTopLevelAggregateTableName(name)) {\n // Synthetic source for a synced top-level aggregate (e.g. `count()`). It\n // is not in the static schema; its shape is fixed (the singleton key\n // column + the result value), so it can be provisioned from the name\n // alone — including at reload time, before the query re-materializes. The\n // server streams the precomputed value here; the underlying rows are never\n // synced. The payload is typed as `inferAggregateSchema` types it: the\n // value is null over no rows, and `sum`/`avg` add their components.\n const columns: Record<string, SchemaValue> = {\n [AGGREGATE_KEY_COLUMN]: {type: 'number'},\n };\n for (const col of AGGREGATE_PAYLOAD_COLUMNS) {\n columns[col] = {type: 'number', optional: true};\n }\n source = new MemorySource(name, columns, [AGGREGATE_KEY_COLUMN]);\n } else {\n source = undefined;\n }\n this.#sources.set(name, source);\n return source;\n }\n\n /**\n * Get-or-create the synthetic source for a *relationship* aggregate\n * (`aggregate:<queryID>:<alias>`), whose shape (the correlation-key columns +\n * value) cannot be derived from the name. The query builder supplies the\n * schema when a query materializes; {@link applyDiffs} supplies an inferred\n * one when persisted rows are replayed before the query re-materializes (e.g.\n * on reload). Idempotent — the first caller wins.\n */\n getOrCreateAggregateSource(\n name: string,\n columns: Record<string, SchemaValue>,\n primaryKey: PrimaryKey,\n optimistic?: AggregateOptimisticDelta,\n ): MemorySource {\n // A fork (a mutator's `tx.run`, or a rebase) shares the main branch's\n // registry, but only the main branch releases registrations, when the\n // server empties a source a view of it holds. A query materialized on a\n // fork is never synced, so its registration would never be released, and\n // a synced one is registered by the main branch already.\n if (optimistic && !this.#isFork) {\n let byTable = this.#aggregateOptimism.get(optimistic.table);\n if (!byTable) {\n byTable = new Map();\n this.#aggregateOptimism.set(optimistic.table, byTable);\n }\n // Keyed by aggregate table name so re-registering the same query is a\n // no-op (idempotent).\n byTable.set(name, {\n aggTableName: name,\n childField: optimistic.childField,\n keyField: optimistic.keyField,\n fn: optimistic.fn,\n field: optimistic.field,\n path: optimistic.path,\n predicate: optimistic.predicate,\n grouped: optimistic.grouped ?? false,\n });\n }\n const existing = this.#sources.get(name);\n if (existing) {\n return existing;\n }\n const source = new MemorySource(name, columns, primaryKey);\n this.#sources.set(name, source);\n return source;\n }\n\n /**\n * The server names of `columns` of `table`, in the same order. A column with\n * no server name of its own, or of a table not in the schema, keeps its name.\n */\n serverColumnNames(table: string, columns: CompoundKey): CompoundKey {\n const tableColumns = this.#tables[table]?.columns;\n return columns.map(\n c => tableColumns?.[c]?.serverName ?? c,\n ) as unknown as CompoundKey;\n }\n\n /**\n * The optimistic-aggregate registrations whose child rows live in `table`.\n * An optimistic insert/delete of such a child row bumps these aggregates.\n */\n getOptimisticAggregates(table: string): Iterable<OptimisticAggregate> {\n return this.#aggregateOptimism.get(table)?.values() ?? [];\n }\n\n clear() {\n this.#sources.clear();\n }\n\n /**\n * Drops the synthetic aggregate sources that are empty and that no view\n * reads, with their optimistic registrations. The server deletes an\n * aggregate's rows when its query is removed, so this is how the query's\n * client state goes away. A later materialization recreates both.\n *\n * Every advance checks every aggregate source, not just the ones it emptied:\n * the server can empty a source while a view still reads it, and a source\n * can be destroyed without ever getting a row.\n *\n * Only the main branch does this: a fork's sources have no views, and the\n * registrations are shared with the main branch.\n */\n #releaseAggregateSources() {\n for (const [name, source] of this.#sources) {\n if (\n source &&\n isAggregateTableName(name) &&\n source.data.size === 0 &&\n !source.connected\n ) {\n this.#sources.delete(name);\n for (const byTable of this.#aggregateOptimism.values()) {\n byTable.delete(name);\n }\n }\n }\n }\n\n #throwIfInvalid() {\n if (this.#advanceError) {\n throw this.#advanceError;\n }\n }\n\n /**\n * Mutates the current branch, advancing it to the new head\n * by applying the given diffs.\n */\n advance(expectedHead: Hash | undefined, newHead: Hash, diffs: NoIndexDiff) {\n this.#throwIfInvalid();\n\n assert(\n this.hash === expectedHead,\n () =>\n `Expected head must match the main head. Got: ${this.hash}, expected: ${expectedHead}`,\n );\n\n try {\n applyDiffs(diffs, this);\n this.#releaseAggregateSources();\n this.hash = newHead;\n } catch (e) {\n this.#advanceError = e;\n this.clear();\n throw e;\n }\n }\n\n /**\n * Fork the branch and patch it up to match the desired head.\n */\n async forkToHead(\n store: LazyStore,\n desiredHead: Hash,\n readOptions?: ZeroReadOptions,\n ): Promise<IVMSourceBranch> {\n this.#throwIfInvalid();\n\n const fork = this.fork();\n\n if (fork.hash === desiredHead) {\n return fork;\n }\n\n await patchBranch(desiredHead, store, fork, readOptions);\n fork.hash = desiredHead;\n return fork;\n }\n\n /**\n * Creates a new IVMSourceBranch that is a copy of the current one.\n * This is a cheap operation since the b-trees are shared until a write is performed\n * and then only the modified nodes are copied.\n *\n * IVM branches are forked when we need to rebase mutations.\n * The mutations modify the fork rather than original branch.\n */\n fork() {\n this.#throwIfInvalid();\n\n return new IVMSourceBranch(\n this.#tables,\n this.hash,\n new Map(\n wrapIterable(this.#sources.entries()).map(([name, source]) => [\n name,\n source?.fork(),\n ]),\n ),\n // Share the optimistic-aggregate registry by reference: it is query\n // metadata, the same for the fork as for the main branch.\n this.#aggregateOptimism,\n true,\n );\n }\n}\n\nexport async function initFromStore(\n branch: IVMSourceBranch,\n hash: Hash,\n store: Store,\n) {\n branch.advance(undefined, hash, await readRowDiffs(store, hash));\n}\n\n/**\n * An `add` diff for each row at `hash` that the IVM sources hold: the table\n * rows under `e/` and the aggregate rows under `a/`, in key order.\n */\nexport async function readRowDiffs(\n store: Store,\n hash: Hash,\n): Promise<InternalDiffOperation[]> {\n const diffs: InternalDiffOperation[] = [];\n await withRead(store, async dagRead => {\n const read = await readFromHash(hash, dagRead, FormatVersion.Latest);\n for (const prefix of ROW_KEY_PREFIXES) {\n for await (const entry of read.map.scan(prefix, true)) {\n if (!entry[0].startsWith(prefix)) {\n break;\n }\n diffs.push({\n op: 'add',\n key: entry[0],\n newValue: entry[1],\n });\n }\n }\n });\n return diffs;\n}\n\nasync function patchBranch(\n desiredHead: Hash,\n store: LazyStore,\n fork: IVMSourceBranch,\n readOptions: ZeroReadOptions | undefined,\n) {\n const diffs = await computeDiffs(\n must(fork.hash),\n desiredHead,\n store,\n readOptions,\n );\n if (!diffs) {\n return;\n }\n applyDiffs(diffs, fork);\n}\n\nasync function computeDiffs(\n startHash: Hash,\n endHash: Hash,\n store: LazyStore,\n readOptions: ZeroReadOptions | undefined,\n): Promise<InternalDiff | undefined> {\n const readFn = (dagRead: Read) =>\n diff(\n startHash,\n endHash,\n dagRead,\n {\n shouldComputeDiffs: () => true,\n shouldComputeDiffsForIndex(_name) {\n return false;\n },\n },\n FormatVersion.Latest,\n );\n\n let diffs: DiffsMap;\n if (readOptions?.openLazySourceRead) {\n diffs = await using(store.read(readOptions.openLazySourceRead), readFn);\n } else if (readOptions?.openLazyRead) {\n diffs = await readFn(readOptions.openLazyRead);\n } else {\n diffs = await withRead(store, readFn);\n }\n\n return diffs.get('');\n}\n\nfunction applyDiffs(diffs: NoIndexDiff, branch: IVMSourceBranch) {\n for (const prefix of ROW_KEY_PREFIXES) {\n applyRowDiffs(diffs, prefix, branch);\n }\n}\n\n/** Applies the diffs of the rows under `prefix`, `e/` or `a/`. */\nfunction applyRowDiffs(\n diffs: NoIndexDiff,\n prefix: string,\n branch: IVMSourceBranch,\n) {\n for (\n let i = diffBinarySearch(diffs, prefix, diff => diff.key);\n i < diffs.length;\n i++\n ) {\n const diff = diffs[i];\n const {key} = diff;\n if (!key.startsWith(prefix)) {\n break;\n }\n const name = sourceNameFromKey(key);\n let source = branch.getSource(name);\n if (!source && isAggregateTableName(name)) {\n // A relationship aggregate source isn't derivable from the name, so it\n // may not exist yet when persisted rows are replayed before the query\n // re-materializes (reload). Provision it from the row's own shape; the\n // builder will reuse this same source when the query materializes.\n const row = (diff.op === 'del' ? diff.oldValue : diff.newValue) as Row;\n source = branch.getOrCreateAggregateSource(\n name,\n ...inferAggregateSchema(name, row),\n );\n }\n source = must(source);\n switch (diff.op) {\n case 'del':\n consume(source.push(makeSourceChangeRemove(diff.oldValue as Row)));\n break;\n case 'add': {\n // The source's own prefix: the key up to the slash after its name.\n const sourcePrefix = key.slice(0, key.indexOf('/', prefix.length) + 1);\n const rows = takeAddsForSource(diffs, i, sourcePrefix);\n i += rows.length - 1;\n source.pushAdds(rows);\n break;\n }\n case 'change':\n consume(\n source.push(\n makeSourceChangeEdit(diff.newValue as Row, diff.oldValue as Row),\n ),\n );\n break;\n }\n }\n}\n\n/**\n * Returns the rows of the run of `add` diffs under `prefix` (a source's key\n * prefix, e.g. `e/issue/`) that starts at `start`. Diffs are ordered by key so\n * a table's rows are contiguous.\n */\nfunction takeAddsForSource(\n diffs: NoIndexDiff,\n start: number,\n prefix: string,\n): Row[] {\n const rows: Row[] = [];\n for (let i = start; i < diffs.length; i++) {\n const diff = diffs[i];\n if (diff.op !== 'add' || !diff.key.startsWith(prefix)) {\n break;\n }\n rows.push(diff.newValue as Row);\n }\n return rows;\n}\n\n/**\n * Infers a synthetic aggregate source's schema from one of its rows: the key\n * columns are every column except the payload and the row-version, with types\n * read off the actual values. Used only on the reload path, where a\n * relationship aggregate's rows are replayed before its query (which would\n * otherwise supply the exact schema) materializes.\n */\nfunction inferAggregateSchema(\n name: string,\n row: Row,\n): [columns: Record<string, SchemaValue>, primaryKey: PrimaryKey] {\n const columns: Record<string, SchemaValue> = {};\n for (const k of Object.keys(row)) {\n if (k === ROW_VERSION_COLUMN) {\n continue;\n }\n if (AGGREGATE_PAYLOAD_COLUMNS.has(k)) {\n // The result (and, for sum/avg, its components) — numeric payload, never part of the key.\n assignProperty(columns, k, {type: 'number', optional: true});\n } else {\n assignProperty(columns, k, {type: valueTypeOf(row[k])});\n }\n }\n const keyColumns = aggregateRowKeyColumns(name, row);\n // The result column is always present even if absent from this particular row.\n if (!(AGGREGATE_VALUE_COLUMN in columns)) {\n columns[AGGREGATE_VALUE_COLUMN] = {type: 'number', optional: true};\n }\n return [columns, keyColumns as unknown as PrimaryKey];\n}\n"],"mappings":"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"}
@@ -1,14 +1,46 @@
1
1
  import type { CompoundKey } from '../../../zero-protocol/src/ast.ts';
2
2
  import type { Row } from '../../../zero-protocol/src/data.ts';
3
3
  import type { MutationID } from '../../../zero-protocol/src/mutation-id.ts';
4
- export declare const DESIRED_QUERIES_KEY_PREFIX = "d/";
4
+ export declare const ROW_VERSION_COLUMN = "_0_version";
5
5
  export declare const GOT_QUERIES_KEY_PREFIX = "g/";
6
6
  export declare const ENTITIES_KEY_PREFIX = "e/";
7
+ /**
8
+ * Synced aggregate results live outside `e/`. A client from before them loads
9
+ * every `e/` row into a table of its schema and fails to open a database that
10
+ * has rows of an `aggregate:` table there, while it skips keys outside `e/`.
11
+ * Keeping them apart lets both versions share a database (STORAGE_VERSION).
12
+ */
13
+ export declare const AGGREGATES_KEY_PREFIX = "a/";
14
+ /** The prefixes of the rows the IVM sources hold, in key order. */
15
+ export declare const ROW_KEY_PREFIXES: readonly ["a/", "e/"];
7
16
  export declare const MUTATIONS_KEY_PREFIX = "m/";
8
17
  export declare function toDesiredQueriesKey(clientID: string, hash: string): string;
9
18
  export declare function desiredQueriesPrefixForClient(clientID: string): string;
10
19
  export declare function toGotQueriesKey(hash: string): string;
11
20
  export declare function toMutationResponseKey(mid: MutationID): string;
12
21
  export declare function toPrimaryKeyString(tableName: string, primaryKey: CompoundKey, value: Row): string;
22
+ /**
23
+ * The source (table) name of an `e/` or `a/` row key. An `a/` key leaves out
24
+ * the `aggregate:` every aggregate table name starts with.
25
+ */
13
26
  export declare function sourceNameFromKey(key: string): string;
27
+ /**
28
+ * The Replicache key for a synthetic aggregate row: `a/`, the table name
29
+ * without its `aggregate:`, and the row's key. The key columns
30
+ * are every column except the payload (`_0_value`, plus `_0_sum`/`_0_count`)
31
+ * and the row-version, sorted so a `put` (full
32
+ * row), a `del`/`update` (row key only), and an optimistic delta from a mutation
33
+ * all produce the same key. Works for both top-level (`{_0_key: 0, …}`) and
34
+ * relationship (`{…childFields, …}`) rows.
35
+ */
36
+ export declare function aggregateRowKey(tableName: string, row: Row): string;
37
+ /**
38
+ * The key columns of a row of the synthetic aggregate table `tableName`:
39
+ * `_0_key` for a top-level aggregate's or a grouped query's, which also
40
+ * carries the columns it encodes, and otherwise, for a relationship aggregate's,
41
+ * every column except the payload and the row-version, sorted. The table
42
+ * name decides, not the row, so a relationship aggregate's key is the same
43
+ * whatever its columns are named.
44
+ */
45
+ export declare function aggregateRowKeyColumns(tableName: string, row: Row): string[];
14
46
  //# sourceMappingURL=keys.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/keys.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,oCAAoC,CAAC;AAC5D,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,2CAA2C,CAAC;AAG1E,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAE7D;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,GAAG,GACT,MAAM,CAeR;AA0BD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGrD"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/keys.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,oCAAoC,CAAC;AAC5D,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,2CAA2C,CAAC;AAW1E,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAG/C,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,uBAGnB,CAAC;AACX,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAE7D;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,GAAG,GACT,MAAM,CAER;AAgDD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAQnE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,CAO5E"}
@@ -1,11 +1,19 @@
1
1
  import { parse } from "../../../shared/src/valita.js";
2
2
  import { h128 } from "../../../shared/src/hash.js";
3
+ import { AGGREGATE_KEY_COLUMN, AGGREGATE_PAYLOAD_COLUMNS } from "../../../zql/src/ivm/aggregate.js";
4
+ import { AGGREGATE_TABLE_PREFIX } from "../../../zero-protocol/src/aggregate-table.js";
3
5
  import { primaryKeyValueSchema } from "../../../zero-protocol/src/primary-key.js";
6
+ import { isKeyedAggregateTableName } from "../../../zql/src/builder/builder.js";
7
+ //#region ../zero-client/src/client/keys.ts
8
+ var ROW_VERSION_COLUMN = "_0_version";
9
+ var DESIRED_QUERIES_KEY_PREFIX = "d/";
10
+ /** The prefixes of the rows the IVM sources hold, in key order. */
11
+ var ROW_KEY_PREFIXES = ["a/", "e/"];
4
12
  function toDesiredQueriesKey(clientID, hash) {
5
- return "d/" + clientID + "/" + hash;
13
+ return DESIRED_QUERIES_KEY_PREFIX + clientID + "/" + hash;
6
14
  }
7
15
  function desiredQueriesPrefixForClient(clientID) {
8
- return "d/" + clientID + "/";
16
+ return DESIRED_QUERIES_KEY_PREFIX + clientID + "/";
9
17
  }
10
18
  function toGotQueriesKey(hash) {
11
19
  return "g/" + hash;
@@ -14,10 +22,14 @@ function toMutationResponseKey(mid) {
14
22
  return "m/" + mid.clientID + "/" + mid.id;
15
23
  }
16
24
  function toPrimaryKeyString(tableName, primaryKey, value) {
17
- if (primaryKey.length === 1) return "e/" + tableName + "/" + parse(value[primaryKey[0]], primaryKeyValueSchema);
25
+ return rowKey("e/", tableName, primaryKey, value);
26
+ }
27
+ function rowKey(prefix, tableName, primaryKey, value) {
28
+ if (primaryKey.length === 1) return prefix + tableName + "/" + parse(value[primaryKey[0]], primaryKeyValueSchema);
18
29
  const values = primaryKey.map((k) => parse(value[k], primaryKeyValueSchema));
19
- const idSegment = u128ToDecimal(h128(JSON.stringify(values)));
20
- return "e/" + tableName + "/" + idSegment;
30
+ const str = JSON.stringify(values);
31
+ const idSegment = u128ToDecimal(h128(str));
32
+ return prefix + tableName + "/" + idSegment;
21
33
  }
22
34
  var E19 = 10n ** 19n;
23
35
  /**
@@ -37,11 +49,41 @@ function u128ToDecimal(x) {
37
49
  if (t < E19) return String(t) + low;
38
50
  return String(t / E19) + String(t % E19).padStart(19, "0") + low;
39
51
  }
52
+ /**
53
+ * The source (table) name of an `e/` or `a/` row key. An `a/` key leaves out
54
+ * the `aggregate:` every aggregate table name starts with.
55
+ */
40
56
  function sourceNameFromKey(key) {
41
57
  const slash = key.indexOf("/", 2);
42
- return key.slice(2, slash);
58
+ const name = key.slice(2, slash);
59
+ return key.startsWith("a/") ? AGGREGATE_TABLE_PREFIX + name : name;
60
+ }
61
+ /**
62
+ * The Replicache key for a synthetic aggregate row: `a/`, the table name
63
+ * without its `aggregate:`, and the row's key. The key columns
64
+ * are every column except the payload (`_0_value`, plus `_0_sum`/`_0_count`)
65
+ * and the row-version, sorted so a `put` (full
66
+ * row), a `del`/`update` (row key only), and an optimistic delta from a mutation
67
+ * all produce the same key. Works for both top-level (`{_0_key: 0, …}`) and
68
+ * relationship (`{…childFields, …}`) rows.
69
+ */
70
+ function aggregateRowKey(tableName, row) {
71
+ const keyColumns = aggregateRowKeyColumns(tableName, row);
72
+ return rowKey("a/", tableName.slice(AGGREGATE_TABLE_PREFIX.length), keyColumns, row);
73
+ }
74
+ /**
75
+ * The key columns of a row of the synthetic aggregate table `tableName`:
76
+ * `_0_key` for a top-level aggregate's or a grouped query's, which also
77
+ * carries the columns it encodes, and otherwise, for a relationship aggregate's,
78
+ * every column except the payload and the row-version, sorted. The table
79
+ * name decides, not the row, so a relationship aggregate's key is the same
80
+ * whatever its columns are named.
81
+ */
82
+ function aggregateRowKeyColumns(tableName, row) {
83
+ if (isKeyedAggregateTableName(tableName)) return [AGGREGATE_KEY_COLUMN];
84
+ return Object.keys(row).filter((k) => !AGGREGATE_PAYLOAD_COLUMNS.has(k) && k !== "_0_version").sort();
43
85
  }
44
86
  //#endregion
45
- export { desiredQueriesPrefixForClient, sourceNameFromKey, toDesiredQueriesKey, toGotQueriesKey, toMutationResponseKey, toPrimaryKeyString };
87
+ export { ROW_KEY_PREFIXES, ROW_VERSION_COLUMN, aggregateRowKey, aggregateRowKeyColumns, desiredQueriesPrefixForClient, sourceNameFromKey, toDesiredQueriesKey, toGotQueriesKey, toMutationResponseKey, toPrimaryKeyString };
46
88
 
47
89
  //# sourceMappingURL=keys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","names":[],"sources":["../../../../../zero-client/src/client/keys.ts"],"sourcesContent":["import {h128} from '../../../shared/src/hash.ts';\nimport * as v from '../../../shared/src/valita.ts';\nimport type {CompoundKey} from '../../../zero-protocol/src/ast.ts';\nimport type {Row} from '../../../zero-protocol/src/data.ts';\nimport type {MutationID} from '../../../zero-protocol/src/mutation-id.ts';\nimport {primaryKeyValueSchema} from '../../../zero-protocol/src/primary-key.ts';\n\nexport const DESIRED_QUERIES_KEY_PREFIX = 'd/';\nexport const GOT_QUERIES_KEY_PREFIX = 'g/';\nexport const ENTITIES_KEY_PREFIX = 'e/';\nexport const MUTATIONS_KEY_PREFIX = 'm/';\n\nexport function toDesiredQueriesKey(clientID: string, hash: string): string {\n return DESIRED_QUERIES_KEY_PREFIX + clientID + '/' + hash;\n}\n\nexport function desiredQueriesPrefixForClient(clientID: string): string {\n return DESIRED_QUERIES_KEY_PREFIX + clientID + '/';\n}\n\nexport function toGotQueriesKey(hash: string): string {\n return GOT_QUERIES_KEY_PREFIX + hash;\n}\n\nexport function toMutationResponseKey(mid: MutationID): string {\n return MUTATIONS_KEY_PREFIX + mid.clientID + '/' + mid.id;\n}\n\nexport function toPrimaryKeyString(\n tableName: string,\n primaryKey: CompoundKey,\n value: Row,\n): string {\n if (primaryKey.length === 1) {\n return (\n ENTITIES_KEY_PREFIX +\n tableName +\n '/' +\n v.parse(value[primaryKey[0]], primaryKeyValueSchema)\n );\n }\n\n const values = primaryKey.map(k => v.parse(value[k], primaryKeyValueSchema));\n const str = JSON.stringify(values);\n\n const idSegment = u128ToDecimal(h128(str));\n return ENTITIES_KEY_PREFIX + tableName + '/' + idSegment;\n}\n\nconst E19 = 10n ** 19n;\n\n/**\n * `String(x)` for an unsigned 128-bit `x`: the decimal form entity keys have\n * always used for compound primary keys, so it must not change.\n *\n * Chromium 148 (V8 14.8) takes ~4us to stringify a bigint wider than 64 bits\n * in base 10, against ~100ns in node 24, Firefox and WebKit; bigints that fit\n * in 64 bits stay fast everywhere. Splitting `x` into base-10^19 pieces, each\n * under 2^64, keeps every conversion on that fast path: ~35x faster in\n * Chromium and within ~10% elsewhere.\n */\nfunction u128ToDecimal(x: bigint): string {\n if (x < E19) {\n return String(x);\n }\n const t = x / E19;\n const low = String(x % E19).padStart(19, '0');\n if (t < E19) {\n return String(t) + low;\n }\n return String(t / E19) + String(t % E19).padStart(19, '0') + low;\n}\n\nexport function sourceNameFromKey(key: string): string {\n const slash = key.indexOf('/', ENTITIES_KEY_PREFIX.length);\n return key.slice(ENTITIES_KEY_PREFIX.length, slash);\n}\n"],"mappings":";;;AAYA,SAAgB,oBAAoB,UAAkB,MAAsB;CAC1E,OAAA,OAAoC,WAAW,MAAM;AACvD;AAEA,SAAgB,8BAA8B,UAA0B;CACtE,OAAA,OAAoC,WAAW;AACjD;AAEA,SAAgB,gBAAgB,MAAsB;CACpD,OAAA,OAAgC;AAClC;AAEA,SAAgB,sBAAsB,KAAyB;CAC7D,OAAA,OAA8B,IAAI,WAAW,MAAM,IAAI;AACzD;AAEA,SAAgB,mBACd,WACA,YACA,OACQ;CACR,IAAI,WAAW,WAAW,GACxB,OAAA,OAEE,YACA,MACA,MAAQ,MAAM,WAAW,KAAK,qBAAqB;CAIvD,MAAM,SAAS,WAAW,KAAI,MAAK,MAAQ,MAAM,IAAI,qBAAqB,CAAC;CAG3E,MAAM,YAAY,cAAc,KAFpB,KAAK,UAAU,MAEU,CAAG,CAAC;CACzC,OAAA,OAA6B,YAAY,MAAM;AACjD;AAEA,IAAM,MAAM,OAAO;;;;;;;;;;;AAYnB,SAAS,cAAc,GAAmB;CACxC,IAAI,IAAI,KACN,OAAO,OAAO,CAAC;CAEjB,MAAM,IAAI,IAAI;CACd,MAAM,MAAM,OAAO,IAAI,GAAG,EAAE,SAAS,IAAI,GAAG;CAC5C,IAAI,IAAI,KACN,OAAO,OAAO,CAAC,IAAI;CAErB,OAAO,OAAO,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,EAAE,SAAS,IAAI,GAAG,IAAI;AAC/D;AAEA,SAAgB,kBAAkB,KAAqB;CACrD,MAAM,QAAQ,IAAI,QAAQ,KAAK,CAA0B;CACzD,OAAO,IAAI,MAAM,GAA4B,KAAK;AACpD"}
1
+ {"version":3,"file":"keys.js","names":["v.parse"],"sources":["../../../../../zero-client/src/client/keys.ts"],"sourcesContent":["import {h128} from '../../../shared/src/hash.ts';\nimport * as v from '../../../shared/src/valita.ts';\nimport {AGGREGATE_TABLE_PREFIX} from '../../../zero-protocol/src/aggregate-table.ts';\nimport type {CompoundKey} from '../../../zero-protocol/src/ast.ts';\nimport type {Row} from '../../../zero-protocol/src/data.ts';\nimport type {MutationID} from '../../../zero-protocol/src/mutation-id.ts';\nimport {primaryKeyValueSchema} from '../../../zero-protocol/src/primary-key.ts';\nimport {isKeyedAggregateTableName} from '../../../zql/src/builder/builder.ts';\nimport {\n AGGREGATE_KEY_COLUMN,\n AGGREGATE_PAYLOAD_COLUMNS,\n} from '../../../zql/src/ivm/aggregate.ts';\n\n// The replicated row-version column the server stamps on synced rows; not part\n// of an aggregate's key. (Mirrors zero-cache's ZERO_VERSION_COLUMN_NAME, which\n// is server-side; inlined here to avoid a server dependency.)\nexport const ROW_VERSION_COLUMN = '_0_version';\n\nconst DESIRED_QUERIES_KEY_PREFIX = 'd/';\nexport const GOT_QUERIES_KEY_PREFIX = 'g/';\nexport const ENTITIES_KEY_PREFIX = 'e/';\n/**\n * Synced aggregate results live outside `e/`. A client from before them loads\n * every `e/` row into a table of its schema and fails to open a database that\n * has rows of an `aggregate:` table there, while it skips keys outside `e/`.\n * Keeping them apart lets both versions share a database (STORAGE_VERSION).\n */\nexport const AGGREGATES_KEY_PREFIX = 'a/';\n/** The prefixes of the rows the IVM sources hold, in key order. */\nexport const ROW_KEY_PREFIXES = [\n AGGREGATES_KEY_PREFIX,\n ENTITIES_KEY_PREFIX,\n] as const;\nexport const MUTATIONS_KEY_PREFIX = 'm/';\n\nexport function toDesiredQueriesKey(clientID: string, hash: string): string {\n return DESIRED_QUERIES_KEY_PREFIX + clientID + '/' + hash;\n}\n\nexport function desiredQueriesPrefixForClient(clientID: string): string {\n return DESIRED_QUERIES_KEY_PREFIX + clientID + '/';\n}\n\nexport function toGotQueriesKey(hash: string): string {\n return GOT_QUERIES_KEY_PREFIX + hash;\n}\n\nexport function toMutationResponseKey(mid: MutationID): string {\n return MUTATIONS_KEY_PREFIX + mid.clientID + '/' + mid.id;\n}\n\nexport function toPrimaryKeyString(\n tableName: string,\n primaryKey: CompoundKey,\n value: Row,\n): string {\n return rowKey(ENTITIES_KEY_PREFIX, tableName, primaryKey, value);\n}\n\nfunction rowKey(\n prefix: string,\n tableName: string,\n primaryKey: CompoundKey,\n value: Row,\n): string {\n if (primaryKey.length === 1) {\n return (\n prefix +\n tableName +\n '/' +\n v.parse(value[primaryKey[0]], primaryKeyValueSchema)\n );\n }\n\n const values = primaryKey.map(k => v.parse(value[k], primaryKeyValueSchema));\n const str = JSON.stringify(values);\n\n const idSegment = u128ToDecimal(h128(str));\n return prefix + tableName + '/' + idSegment;\n}\n\nconst E19 = 10n ** 19n;\n\n/**\n * `String(x)` for an unsigned 128-bit `x`: the decimal form entity keys have\n * always used for compound primary keys, so it must not change.\n *\n * Chromium 148 (V8 14.8) takes ~4us to stringify a bigint wider than 64 bits\n * in base 10, against ~100ns in node 24, Firefox and WebKit; bigints that fit\n * in 64 bits stay fast everywhere. Splitting `x` into base-10^19 pieces, each\n * under 2^64, keeps every conversion on that fast path: ~35x faster in\n * Chromium and within ~10% elsewhere.\n */\nfunction u128ToDecimal(x: bigint): string {\n if (x < E19) {\n return String(x);\n }\n const t = x / E19;\n const low = String(x % E19).padStart(19, '0');\n if (t < E19) {\n return String(t) + low;\n }\n return String(t / E19) + String(t % E19).padStart(19, '0') + low;\n}\n\n/**\n * The source (table) name of an `e/` or `a/` row key. An `a/` key leaves out\n * the `aggregate:` every aggregate table name starts with.\n */\nexport function sourceNameFromKey(key: string): string {\n // Both prefixes are two characters long.\n const slash = key.indexOf('/', ENTITIES_KEY_PREFIX.length);\n const name = key.slice(ENTITIES_KEY_PREFIX.length, slash);\n return key.startsWith(AGGREGATES_KEY_PREFIX)\n ? AGGREGATE_TABLE_PREFIX + name\n : name;\n}\n\n/**\n * The Replicache key for a synthetic aggregate row: `a/`, the table name\n * without its `aggregate:`, and the row's key. The key columns\n * are every column except the payload (`_0_value`, plus `_0_sum`/`_0_count`)\n * and the row-version, sorted so a `put` (full\n * row), a `del`/`update` (row key only), and an optimistic delta from a mutation\n * all produce the same key. Works for both top-level (`{_0_key: 0, …}`) and\n * relationship (`{…childFields, …}`) rows.\n */\nexport function aggregateRowKey(tableName: string, row: Row): string {\n const keyColumns = aggregateRowKeyColumns(tableName, row);\n return rowKey(\n AGGREGATES_KEY_PREFIX,\n tableName.slice(AGGREGATE_TABLE_PREFIX.length),\n keyColumns as unknown as CompoundKey,\n row,\n );\n}\n\n/**\n * The key columns of a row of the synthetic aggregate table `tableName`:\n * `_0_key` for a top-level aggregate's or a grouped query's, which also\n * carries the columns it encodes, and otherwise, for a relationship aggregate's,\n * every column except the payload and the row-version, sorted. The table\n * name decides, not the row, so a relationship aggregate's key is the same\n * whatever its columns are named.\n */\nexport function aggregateRowKeyColumns(tableName: string, row: Row): string[] {\n if (isKeyedAggregateTableName(tableName)) {\n return [AGGREGATE_KEY_COLUMN];\n }\n return Object.keys(row)\n .filter(k => !AGGREGATE_PAYLOAD_COLUMNS.has(k) && k !== ROW_VERSION_COLUMN)\n .sort();\n}\n"],"mappings":";;;;;;;AAgBA,IAAa,qBAAqB;AAElC,IAAM,6BAA6B;;AAWnC,IAAa,mBAAmB,CAAA,MAAA,IAGhC;AAGA,SAAgB,oBAAoB,UAAkB,MAAsB;CAC1E,OAAO,6BAA6B,WAAW,MAAM;AACvD;AAEA,SAAgB,8BAA8B,UAA0B;CACtE,OAAO,6BAA6B,WAAW;AACjD;AAEA,SAAgB,gBAAgB,MAAsB;CACpD,OAAA,OAAgC;AAClC;AAEA,SAAgB,sBAAsB,KAAyB;CAC7D,OAAA,OAA8B,IAAI,WAAW,MAAM,IAAI;AACzD;AAEA,SAAgB,mBACd,WACA,YACA,OACQ;CACR,OAAO,OAAA,MAA4B,WAAW,YAAY,KAAK;AACjE;AAEA,SAAS,OACP,QACA,WACA,YACA,OACQ;CACR,IAAI,WAAW,WAAW,GACxB,OACE,SACA,YACA,MACAA,MAAQ,MAAM,WAAW,KAAK,qBAAqB;CAIvD,MAAM,SAAS,WAAW,KAAI,MAAKA,MAAQ,MAAM,IAAI,qBAAqB,CAAC;CAC3E,MAAM,MAAM,KAAK,UAAU,MAAM;CAEjC,MAAM,YAAY,cAAc,KAAK,GAAG,CAAC;CACzC,OAAO,SAAS,YAAY,MAAM;AACpC;AAEA,IAAM,MAAM,OAAO;;;;;;;;;;;AAYnB,SAAS,cAAc,GAAmB;CACxC,IAAI,IAAI,KACN,OAAO,OAAO,CAAC;CAEjB,MAAM,IAAI,IAAI;CACd,MAAM,MAAM,OAAO,IAAI,GAAG,CAAC,CAAC,SAAS,IAAI,GAAG;CAC5C,IAAI,IAAI,KACN,OAAO,OAAO,CAAC,IAAI;CAErB,OAAO,OAAO,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI;AAC/D;;;;;AAMA,SAAgB,kBAAkB,KAAqB;CAErD,MAAM,QAAQ,IAAI,QAAQ,KAAK,CAA0B;CACzD,MAAM,OAAO,IAAI,MAAM,GAA4B,KAAK;CACxD,OAAO,IAAI,WAAA,IAAgC,IACvC,yBAAyB,OACzB;AACN;;;;;;;;;;AAWA,SAAgB,gBAAgB,WAAmB,KAAkB;CACnE,MAAM,aAAa,uBAAuB,WAAW,GAAG;CACxD,OAAO,OAAA,MAEL,UAAU,MAAM,uBAAuB,MAAM,GAC7C,YACA,GACF;AACF;;;;;;;;;AAUA,SAAgB,uBAAuB,WAAmB,KAAoB;CAC5E,IAAI,0BAA0B,SAAS,GACrC,OAAO,CAAC,oBAAoB;CAE9B,OAAO,OAAO,KAAK,GAAG,CAAC,CACpB,QAAO,MAAK,CAAC,0BAA0B,IAAI,CAAC,KAAK,MAAA,YAAwB,CAAC,CAC1E,KAAK;AACV"}