@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 +1 @@
1
- {"version":3,"file":"planner-warnings.js","names":[],"sources":["../../../../../zql/src/planner/planner-warnings.ts"],"sourcesContent":["import type {Condition, Ordering} from '../../../zero-protocol/src/ast.ts';\nimport type {Plans} from './planner-builder.ts';\nimport type {\n AccessPlan,\n ConnectionAccess,\n PlannerConnection,\n} from './planner-connection.ts';\n\n/**\n * When the planner reports a {@link PlanWarning}. Each threshold is compared\n * against the cost model's estimates, and 0 disables the warnings it gates.\n */\nexport type PlanWarningThresholds = {\n /**\n * The number of rows a single read of a table must scan (for a\n * {@link MissingIndexWarning}) or sort (for a {@link FullSortWarning}).\n */\n readonly rows: number;\n\n /**\n * The number of rows the chosen plan must be estimated to process, for a\n * {@link HighCostWarning}.\n */\n readonly cost: number;\n};\n\ntype TableRead = {\n readonly table: string;\n\n /**\n * The aliases of the `related` subqueries leading to the read, starting\n * from the root query. Empty for the root query and its EXISTS subqueries.\n */\n readonly path: readonly string[];\n\n /**\n * Whether the read runs once per row of another table, because a join\n * binds some of its columns, rather than once per query.\n */\n readonly perRow: boolean;\n\n /**\n * An index that would let the source find the rows it reads and return\n * them in order: the columns the rows are found by, then the ordering.\n */\n readonly suggestedIndex: readonly string[];\n};\n\n/**\n * The rows of a table are found by columns that no index covers, so every\n * read scans the whole table. This is typically a relationship whose foreign\n * key is not indexed.\n */\nexport type MissingIndexWarning = TableRead & {\n readonly type: 'missing-index';\n /**\n * The columns the rows are found by: the columns a join binds and the\n * columns filtered for equality.\n */\n readonly columns: readonly string[];\n /** The rows each read scans. */\n readonly rows: number;\n};\n\n/**\n * No index returns the rows of a table in the requested order, so every read\n * sorts all of the matching rows before returning the first one. A limit does\n * not reduce the rows read.\n */\nexport type FullSortWarning = TableRead & {\n readonly type: 'full-sort';\n readonly orderBy: Ordering;\n /** The estimated number of rows each read sorts. */\n readonly rows: number;\n};\n\n/**\n * The best plan the planner found is still estimated to process a lot of\n * rows. Only reported when every table the query reads has statistics, since\n * the estimates are guesses otherwise.\n */\nexport type HighCostWarning = {\n readonly type: 'high-cost';\n readonly table: string;\n /** The estimated number of rows the plan processes. */\n readonly cost: number;\n};\n\nexport type PlanWarning =\n | MissingIndexWarning\n | FullSortWarning\n | HighCostWarning;\n\n/**\n * Warns about what the cost model reports the plans in `plans` will do\n * slowly. Call this after planning: it estimates each graph's current plan.\n *\n * @param table The table of the query that `plans` was built for.\n */\nexport function collectPlanWarnings(\n table: string,\n plans: Plans,\n thresholds: PlanWarningThresholds,\n): PlanWarning[] {\n const warnings = new Map<string, PlanWarning>();\n const state = {warnings, estimated: true};\n const cost = visit(plans, [], thresholds, state);\n const result = [...warnings.values()];\n if (state.estimated && thresholds.cost > 0 && cost >= thresholds.cost) {\n result.push({type: 'high-cost', table, cost: Math.round(cost)});\n }\n return result;\n}\n\ntype VisitState = {\n readonly warnings: Map<string, PlanWarning>;\n /** Whether every access read a table with statistics. */\n estimated: boolean;\n};\n\n/**\n * Collects the warnings for `plans` and its subplans, and returns the\n * estimated number of rows they process.\n */\nfunction visit(\n plans: Plans,\n path: readonly string[],\n thresholds: PlanWarningThresholds,\n state: VisitState,\n): number {\n const estimate = plans.plan.estimateCurrentPlan();\n for (const connection of plans.plan.connections) {\n for (const access of connection.accesses()) {\n if (access.plan?.tableRows === undefined) {\n state.estimated = false;\n } else if (thresholds.rows > 0) {\n for (const warning of accessWarnings(\n connection,\n access,\n access.plan,\n access.plan.tableRows,\n path,\n thresholds.rows,\n )) {\n state.warnings.set(JSON.stringify(warning), warning);\n }\n }\n }\n }\n\n // A `related` subquery runs once for each row of its parent.\n let subCost = 0;\n for (const [alias, subPlans] of Object.entries(plans.subPlans)) {\n subCost += visit(subPlans, [...path, alias], thresholds, state);\n }\n const rowsOut =\n estimate.limit === undefined\n ? estimate.returnedRows\n : Math.min(estimate.returnedRows, estimate.limit);\n return (\n estimate.startupCost + estimate.cost + estimate.scanEst + rowsOut * subCost\n );\n}\n\nfunction* accessWarnings(\n connection: PlannerConnection,\n access: ConnectionAccess,\n plan: AccessPlan,\n tableRows: number,\n path: readonly string[],\n minRows: number,\n): Iterable<MissingIndexWarning | FullSortWarning> {\n const constrained = Object.keys(access.constraint ?? {});\n const columns = unique([...constrained, ...equalityColumns(access.filters)]);\n const read: TableRead = {\n table: connection.table,\n path,\n perRow: constrained.length > 0,\n suggestedIndex: unique([\n ...columns,\n ...connection.sort.map(([column]) => column),\n ]),\n };\n\n // A scan that stops at a limit reads an unknown share of the table, unless\n // it runs per row: then even a limit of one (an EXISTS) scans the table\n // for every row that has no match.\n if (\n plan.access === 'scan' &&\n columns.length > 0 &&\n (read.perRow || connection.limit === undefined) &&\n tableRows >= minRows\n ) {\n yield {type: 'missing-index', ...read, columns, rows: tableRows};\n }\n\n if (plan.sort === 'full' && access.rows >= minRows) {\n yield {\n type: 'full-sort',\n ...read,\n orderBy: connection.sort,\n rows: Math.round(access.rows),\n };\n }\n}\n\n/**\n * The columns that the top-level conjuncts of `condition` compare for\n * equality with a value, which an index lookup can use.\n */\nfunction equalityColumns(condition: Condition | undefined): string[] {\n switch (condition?.type) {\n case 'simple': {\n const {left, op} = condition;\n return (op === '=' || op === 'IS' || op === 'IN') &&\n left.type === 'column'\n ? [left.name]\n : [];\n }\n case 'and':\n return condition.conditions.flatMap(equalityColumns);\n default:\n return [];\n }\n}\n\nfunction unique(values: string[]): string[] {\n return [...new Set(values)];\n}\n"],"mappings":";;;;;;;AAmGA,SAAgB,oBACd,OACA,OACA,YACe;CACf,MAAM,2BAAW,IAAI,IAAyB;CAC9C,MAAM,QAAQ;EAAC;EAAU,WAAW;CAAI;CACxC,MAAM,OAAO,MAAM,OAAO,CAAC,GAAG,YAAY,KAAK;CAC/C,MAAM,SAAS,CAAC,GAAG,SAAS,OAAO,CAAC;CACpC,IAAI,MAAM,aAAa,WAAW,OAAO,KAAK,QAAQ,WAAW,MAC/D,OAAO,KAAK;EAAC,MAAM;EAAa;EAAO,MAAM,KAAK,MAAM,IAAI;CAAC,CAAC;CAEhE,OAAO;AACT;;;;;AAYA,SAAS,MACP,OACA,MACA,YACA,OACQ;CACR,MAAM,WAAW,MAAM,KAAK,oBAAoB;CAChD,KAAK,MAAM,cAAc,MAAM,KAAK,aAClC,KAAK,MAAM,UAAU,WAAW,SAAS,GACvC,IAAI,OAAO,MAAM,cAAc,KAAA,GAC7B,MAAM,YAAY;MACb,IAAI,WAAW,OAAO,GAC3B,KAAK,MAAM,WAAW,eACpB,YACA,QACA,OAAO,MACP,OAAO,KAAK,WACZ,MACA,WAAW,IACb,GACE,MAAM,SAAS,IAAI,KAAK,UAAU,OAAO,GAAG,OAAO;CAO3D,IAAI,UAAU;CACd,KAAK,MAAM,CAAC,OAAO,aAAa,OAAO,QAAQ,MAAM,QAAQ,GAC3D,WAAW,MAAM,UAAU,CAAC,GAAG,MAAM,KAAK,GAAG,YAAY,KAAK;CAEhE,MAAM,UACJ,SAAS,UAAU,KAAA,IACf,SAAS,eACT,KAAK,IAAI,SAAS,cAAc,SAAS,KAAK;CACpD,OACE,SAAS,cAAc,SAAS,OAAO,SAAS,UAAU,UAAU;AAExE;AAEA,UAAU,eACR,YACA,QACA,MACA,WACA,MACA,SACiD;CACjD,MAAM,cAAc,OAAO,KAAK,OAAO,cAAc,CAAC,CAAC;CACvD,MAAM,UAAU,OAAO,CAAC,GAAG,aAAa,GAAG,gBAAgB,OAAO,OAAO,CAAC,CAAC;CAC3E,MAAM,OAAkB;EACtB,OAAO,WAAW;EAClB;EACA,QAAQ,YAAY,SAAS;EAC7B,gBAAgB,OAAO,CACrB,GAAG,SACH,GAAG,WAAW,KAAK,KAAK,CAAC,YAAY,MAAM,CAC7C,CAAC;CACH;CAKA,IACE,KAAK,WAAW,UAChB,QAAQ,SAAS,MAChB,KAAK,UAAU,WAAW,UAAU,KAAA,MACrC,aAAa,SAEb,MAAM;EAAC,MAAM;EAAiB,GAAG;EAAM;EAAS,MAAM;CAAS;CAGjE,IAAI,KAAK,SAAS,UAAU,OAAO,QAAQ,SACzC,MAAM;EACJ,MAAM;EACN,GAAG;EACH,SAAS,WAAW;EACpB,MAAM,KAAK,MAAM,OAAO,IAAI;CAC9B;AAEJ;;;;;AAMA,SAAS,gBAAgB,WAA4C;CACnE,QAAQ,WAAW,MAAnB;EACE,KAAK,UAAU;GACb,MAAM,EAAC,MAAM,OAAM;GACnB,QAAQ,OAAO,OAAO,OAAO,QAAQ,OAAO,SAC1C,KAAK,SAAS,WACZ,CAAC,KAAK,IAAI,IACV,CAAC;EACP;EACA,KAAK,OACH,OAAO,UAAU,WAAW,QAAQ,eAAe;EACrD,SACE,OAAO,CAAC;CACZ;AACF;AAEA,SAAS,OAAO,QAA4B;CAC1C,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC;AAC5B"}
1
+ {"version":3,"file":"planner-warnings.js","names":[],"sources":["../../../../../zql/src/planner/planner-warnings.ts"],"sourcesContent":["import type {Condition, Ordering} from '../../../zero-protocol/src/ast.ts';\nimport type {Plans} from './planner-builder.ts';\nimport type {\n AccessPlan,\n ConnectionAccess,\n PlannerConnection,\n} from './planner-connection.ts';\n\n/**\n * When the planner reports a {@link PlanWarning}. Each threshold is compared\n * against the cost model's estimates, and 0 disables the warnings it gates.\n */\nexport type PlanWarningThresholds = {\n /**\n * The number of rows a single read of a table must scan (for a\n * {@link MissingIndexWarning}) or sort (for a {@link FullSortWarning}).\n */\n readonly rows: number;\n\n /**\n * The number of rows the chosen plan must be estimated to process, for a\n * {@link HighCostWarning}.\n */\n readonly cost: number;\n};\n\ntype TableRead = {\n readonly table: string;\n\n /**\n * The aliases of the `related` subqueries leading to the read, starting\n * from the root query. Empty for the root query and its EXISTS subqueries.\n */\n readonly path: readonly string[];\n\n /**\n * Whether the read runs once per row of another table, because a join\n * binds some of its columns, rather than once per query.\n */\n readonly perRow: boolean;\n\n /**\n * An index that would let the source find the rows it reads and return\n * them in order: the columns the rows are found by, then the ordering.\n */\n readonly suggestedIndex: readonly string[];\n};\n\n/**\n * The rows of a table are found by columns that no index covers, so every\n * read scans the whole table. This is typically a relationship whose foreign\n * key is not indexed.\n */\ntype MissingIndexWarning = TableRead & {\n readonly type: 'missing-index';\n /**\n * The columns the rows are found by: the columns a join binds and the\n * columns filtered for equality.\n */\n readonly columns: readonly string[];\n /** The rows each read scans. */\n readonly rows: number;\n};\n\n/**\n * No index returns the rows of a table in the requested order, so every read\n * sorts all of the matching rows before returning the first one. A limit does\n * not reduce the rows read.\n */\ntype FullSortWarning = TableRead & {\n readonly type: 'full-sort';\n readonly orderBy: Ordering;\n /** The estimated number of rows each read sorts. */\n readonly rows: number;\n};\n\n/**\n * The best plan the planner found is still estimated to process a lot of\n * rows. Only reported when every table the query reads has statistics, since\n * the estimates are guesses otherwise.\n */\ntype HighCostWarning = {\n readonly type: 'high-cost';\n readonly table: string;\n /** The estimated number of rows the plan processes. */\n readonly cost: number;\n};\n\nexport type PlanWarning =\n | MissingIndexWarning\n | FullSortWarning\n | HighCostWarning;\n\n/**\n * Warns about what the cost model reports the plans in `plans` will do\n * slowly. Call this after planning: it estimates each graph's current plan.\n *\n * @param table The table of the query that `plans` was built for.\n */\nexport function collectPlanWarnings(\n table: string,\n plans: Plans,\n thresholds: PlanWarningThresholds,\n): PlanWarning[] {\n const warnings = new Map<string, PlanWarning>();\n const state = {warnings, estimated: true};\n const cost = visit(plans, [], thresholds, state);\n const result = [...warnings.values()];\n if (state.estimated && thresholds.cost > 0 && cost >= thresholds.cost) {\n result.push({type: 'high-cost', table, cost: Math.round(cost)});\n }\n return result;\n}\n\ntype VisitState = {\n readonly warnings: Map<string, PlanWarning>;\n /** Whether every access read a table with statistics. */\n estimated: boolean;\n};\n\n/**\n * Collects the warnings for `plans` and its subplans, and returns the\n * estimated number of rows they process.\n */\nfunction visit(\n plans: Plans,\n path: readonly string[],\n thresholds: PlanWarningThresholds,\n state: VisitState,\n): number {\n const estimate = plans.plan.estimateCurrentPlan();\n for (const connection of plans.plan.connections) {\n for (const access of connection.accesses()) {\n if (access.plan?.tableRows === undefined) {\n state.estimated = false;\n } else if (thresholds.rows > 0) {\n for (const warning of accessWarnings(\n connection,\n access,\n access.plan,\n access.plan.tableRows,\n path,\n thresholds.rows,\n )) {\n state.warnings.set(JSON.stringify(warning), warning);\n }\n }\n }\n }\n\n // A `related` subquery runs once for each row of its parent.\n let subCost = 0;\n for (const [alias, subPlans] of Object.entries(plans.subPlans)) {\n subCost += visit(subPlans, [...path, alias], thresholds, state);\n }\n const rowsOut =\n estimate.limit === undefined\n ? estimate.returnedRows\n : Math.min(estimate.returnedRows, estimate.limit);\n return (\n estimate.startupCost + estimate.cost + estimate.scanEst + rowsOut * subCost\n );\n}\n\nfunction* accessWarnings(\n connection: PlannerConnection,\n access: ConnectionAccess,\n plan: AccessPlan,\n tableRows: number,\n path: readonly string[],\n minRows: number,\n): Iterable<MissingIndexWarning | FullSortWarning> {\n const constrained = Object.keys(access.constraint ?? {});\n const columns = unique([...constrained, ...equalityColumns(access.filters)]);\n const read: TableRead = {\n table: connection.table,\n path,\n perRow: constrained.length > 0,\n suggestedIndex: unique([\n ...columns,\n ...connection.sort.map(([column]) => column),\n ]),\n };\n\n // A scan that stops at a limit reads an unknown share of the table, unless\n // it runs per row: then even a limit of one (an EXISTS) scans the table\n // for every row that has no match.\n if (\n plan.access === 'scan' &&\n columns.length > 0 &&\n (read.perRow || connection.limit === undefined) &&\n tableRows >= minRows\n ) {\n yield {type: 'missing-index', ...read, columns, rows: tableRows};\n }\n\n if (plan.sort === 'full' && access.rows >= minRows) {\n yield {\n type: 'full-sort',\n ...read,\n orderBy: connection.sort,\n rows: Math.round(access.rows),\n };\n }\n}\n\n/**\n * The columns that the top-level conjuncts of `condition` compare for\n * equality with a value, which an index lookup can use.\n */\nfunction equalityColumns(condition: Condition | undefined): string[] {\n switch (condition?.type) {\n case 'simple': {\n const {left, op} = condition;\n return (op === '=' || op === 'IS' || op === 'IN') &&\n left.type === 'column'\n ? [left.name]\n : [];\n }\n case 'and':\n return condition.conditions.flatMap(equalityColumns);\n default:\n return [];\n }\n}\n\nfunction unique(values: string[]): string[] {\n return [...new Set(values)];\n}\n"],"mappings":";;;;;;;AAmGA,SAAgB,oBACd,OACA,OACA,YACe;CACf,MAAM,2BAAW,IAAI,IAAyB;CAC9C,MAAM,QAAQ;EAAC;EAAU,WAAW;CAAI;CACxC,MAAM,OAAO,MAAM,OAAO,CAAC,GAAG,YAAY,KAAK;CAC/C,MAAM,SAAS,CAAC,GAAG,SAAS,OAAO,CAAC;CACpC,IAAI,MAAM,aAAa,WAAW,OAAO,KAAK,QAAQ,WAAW,MAC/D,OAAO,KAAK;EAAC,MAAM;EAAa;EAAO,MAAM,KAAK,MAAM,IAAI;CAAC,CAAC;CAEhE,OAAO;AACT;;;;;AAYA,SAAS,MACP,OACA,MACA,YACA,OACQ;CACR,MAAM,WAAW,MAAM,KAAK,oBAAoB;CAChD,KAAK,MAAM,cAAc,MAAM,KAAK,aAClC,KAAK,MAAM,UAAU,WAAW,SAAS,GACvC,IAAI,OAAO,MAAM,cAAc,KAAA,GAC7B,MAAM,YAAY;MACb,IAAI,WAAW,OAAO,GAC3B,KAAK,MAAM,WAAW,eACpB,YACA,QACA,OAAO,MACP,OAAO,KAAK,WACZ,MACA,WAAW,IACb,GACE,MAAM,SAAS,IAAI,KAAK,UAAU,OAAO,GAAG,OAAO;CAO3D,IAAI,UAAU;CACd,KAAK,MAAM,CAAC,OAAO,aAAa,OAAO,QAAQ,MAAM,QAAQ,GAC3D,WAAW,MAAM,UAAU,CAAC,GAAG,MAAM,KAAK,GAAG,YAAY,KAAK;CAEhE,MAAM,UACJ,SAAS,UAAU,KAAA,IACf,SAAS,eACT,KAAK,IAAI,SAAS,cAAc,SAAS,KAAK;CACpD,OACE,SAAS,cAAc,SAAS,OAAO,SAAS,UAAU,UAAU;AAExE;AAEA,UAAU,eACR,YACA,QACA,MACA,WACA,MACA,SACiD;CACjD,MAAM,cAAc,OAAO,KAAK,OAAO,cAAc,CAAC,CAAC;CACvD,MAAM,UAAU,OAAO,CAAC,GAAG,aAAa,GAAG,gBAAgB,OAAO,OAAO,CAAC,CAAC;CAC3E,MAAM,OAAkB;EACtB,OAAO,WAAW;EAClB;EACA,QAAQ,YAAY,SAAS;EAC7B,gBAAgB,OAAO,CACrB,GAAG,SACH,GAAG,WAAW,KAAK,KAAK,CAAC,YAAY,MAAM,CAC7C,CAAC;CACH;CAKA,IACE,KAAK,WAAW,UAChB,QAAQ,SAAS,MAChB,KAAK,UAAU,WAAW,UAAU,KAAA,MACrC,aAAa,SAEb,MAAM;EAAC,MAAM;EAAiB,GAAG;EAAM;EAAS,MAAM;CAAS;CAGjE,IAAI,KAAK,SAAS,UAAU,OAAO,QAAQ,SACzC,MAAM;EACJ,MAAM;EACN,GAAG;EACH,SAAS,WAAW;EACpB,MAAM,KAAK,MAAM,OAAO,IAAI;CAC9B;AAEJ;;;;;AAMA,SAAS,gBAAgB,WAA4C;CACnE,QAAQ,WAAW,MAAnB;EACE,KAAK,UAAU;GACb,MAAM,EAAC,MAAM,OAAM;GACnB,QAAQ,OAAO,OAAO,OAAO,QAAQ,OAAO,SAC1C,KAAK,SAAS,WACZ,CAAC,KAAK,IAAI,IACV,CAAC;EACP;EACA,KAAK,OACH,OAAO,UAAU,WAAW,QAAQ,eAAe;EACrD,SACE,OAAO,CAAC;CACZ;AACF;AAEA,SAAS,OAAO,QAA4B;CAC1C,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC;AAC5B"}
@@ -14,7 +14,8 @@ function createRunnableBuilder(delegate, schema) {
14
14
  return createBuilderWithQueryFactory(schema, (table) => newRunnableQuery(delegate, schema, table));
15
15
  }
16
16
  function createBuilderWithQueryFactory(schema, queryFactory) {
17
- return recordProxy(Object.assign(Object.create(null), schema.tables), (_tableSchema, prop) => queryFactory(prop));
17
+ const target = Object.assign(Object.create(null), schema.tables);
18
+ return recordProxy(target, (_tableSchema, prop) => queryFactory(prop));
18
19
  }
19
20
  //#endregion
20
21
  export { createBuilder, createRunnableBuilder };
@@ -1 +1 @@
1
- {"version":3,"file":"create-builder.js","names":[],"sources":["../../../../../zql/src/query/create-builder.ts"],"sourcesContent":["import {recordProxy} from '../../../shared/src/record-proxy.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport type {QueryDelegate} from './query-delegate.ts';\nimport {newQuery} from './query-impl.ts';\nimport type {Query} from './query.ts';\nimport {newRunnableQuery} from './runnable-query-impl.ts';\nimport type {ConditionalSchemaQuery, SchemaQuery} from './schema-query.ts';\n\n/**\n * Returns a set of query builders for the given schema.\n */\nexport function createBuilder<S extends Schema>(schema: S): SchemaQuery<S> {\n return createBuilderWithQueryFactory(schema, table =>\n newQuery(schema, table),\n );\n}\n\n/** @deprecated Use {@link createBuilder} with `tx.run(zql.table.where(...))` instead. */\nexport function createRunnableBuilder<S extends Schema>(\n delegate: QueryDelegate,\n schema: S,\n): ConditionalSchemaQuery<S> {\n if (!schema.enableLegacyQueries) {\n return undefined as ConditionalSchemaQuery<S>;\n }\n\n return createBuilderWithQueryFactory(schema, table =>\n newRunnableQuery(delegate, schema, table),\n ) as ConditionalSchemaQuery<S>;\n}\n\nfunction createBuilderWithQueryFactory<S extends Schema>(\n schema: S,\n queryFactory: (table: keyof S['tables'] & string) => Query<string, S>,\n): SchemaQuery<S> {\n // Create a target with no prototype so accessing unknown properties returns\n // undefined instead of inherited Object.prototype methods (e.g., toString).\n // This fixes React 19 dev mode compatibility where accessing $$typeof should\n // return undefined rather than throwing.\n const target = Object.assign(Object.create(null), schema.tables) as Record<\n string,\n unknown\n >;\n\n // No onMissing handler needed - unknown properties return undefined due to\n // null prototype, which is the desired behavior for normal JS object semantics.\n return recordProxy(target, (_tableSchema, prop) =>\n queryFactory(prop),\n ) as SchemaQuery<S>;\n}\n"],"mappings":";;;;;;;AAWA,SAAgB,cAAgC,QAA2B;CACzE,OAAO,8BAA8B,SAAQ,UAC3C,SAAS,QAAQ,KAAK,CACxB;AACF;;AAGA,SAAgB,sBACd,UACA,QAC2B;CAC3B,IAAI,CAAC,OAAO,qBACV;CAGF,OAAO,8BAA8B,SAAQ,UAC3C,iBAAiB,UAAU,QAAQ,KAAK,CAC1C;AACF;AAEA,SAAS,8BACP,QACA,cACgB;CAYhB,OAAO,YAPQ,OAAO,OAAO,OAAO,OAAO,IAAI,GAAG,OAAO,MAOtC,IAAS,cAAc,SACxC,aAAa,IAAI,CACnB;AACF"}
1
+ {"version":3,"file":"create-builder.js","names":[],"sources":["../../../../../zql/src/query/create-builder.ts"],"sourcesContent":["import {recordProxy} from '../../../shared/src/record-proxy.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport type {QueryDelegate} from './query-delegate.ts';\nimport {newQuery} from './query-impl.ts';\nimport type {Query} from './query.ts';\nimport {newRunnableQuery} from './runnable-query-impl.ts';\nimport type {ConditionalSchemaQuery, SchemaQuery} from './schema-query.ts';\n\n/**\n * Returns a set of query builders for the given schema.\n */\nexport function createBuilder<S extends Schema>(schema: S): SchemaQuery<S> {\n return createBuilderWithQueryFactory(schema, table =>\n newQuery(schema, table),\n );\n}\n\n/** @deprecated Use {@link createBuilder} with `tx.run(zql.table.where(...))` instead. */\nexport function createRunnableBuilder<S extends Schema>(\n delegate: QueryDelegate,\n schema: S,\n): ConditionalSchemaQuery<S> {\n if (!schema.enableLegacyQueries) {\n return undefined as ConditionalSchemaQuery<S>;\n }\n\n return createBuilderWithQueryFactory(schema, table =>\n newRunnableQuery(delegate, schema, table),\n ) as ConditionalSchemaQuery<S>;\n}\n\nfunction createBuilderWithQueryFactory<S extends Schema>(\n schema: S,\n queryFactory: (table: keyof S['tables'] & string) => Query<string, S>,\n): SchemaQuery<S> {\n // Create a target with no prototype so accessing unknown properties returns\n // undefined instead of inherited Object.prototype methods (e.g., toString).\n // This fixes React 19 dev mode compatibility where accessing $$typeof should\n // return undefined rather than throwing.\n const target = Object.assign(Object.create(null), schema.tables) as Record<\n string,\n unknown\n >;\n\n // No onMissing handler needed - unknown properties return undefined due to\n // null prototype, which is the desired behavior for normal JS object semantics.\n return recordProxy(target, (_tableSchema, prop) =>\n queryFactory(prop),\n ) as SchemaQuery<S>;\n}\n"],"mappings":";;;;;;;AAWA,SAAgB,cAAgC,QAA2B;CACzE,OAAO,8BAA8B,SAAQ,UAC3C,SAAS,QAAQ,KAAK,CACxB;AACF;;AAGA,SAAgB,sBACd,UACA,QAC2B;CAC3B,IAAI,CAAC,OAAO,qBACV;CAGF,OAAO,8BAA8B,SAAQ,UAC3C,iBAAiB,UAAU,QAAQ,KAAK,CAC1C;AACF;AAEA,SAAS,8BACP,QACA,cACgB;CAKhB,MAAM,SAAS,OAAO,OAAO,OAAO,OAAO,IAAI,GAAG,OAAO,MAAM;CAO/D,OAAO,YAAY,SAAS,cAAc,SACxC,aAAa,IAAI,CACnB;AACF"}
@@ -1,9 +1,40 @@
1
- import { toStaticParam, type Condition, type LiteralValue, type Parameter, type SimpleOperator } from '../../../zero-protocol/src/ast.ts';
1
+ import { type Aggregate, type AggregateFunction, toStaticParam, type Condition, type JsonPathReference, type LiteralValue, type Parameter, type SimpleOperator } from '../../../zero-protocol/src/ast.ts';
2
+ import type { SchemaValueToTSType } from '../../../zero-types/src/schema-value.ts';
2
3
  import type { Schema as ZeroSchema } from '../../../zero-types/src/schema.ts';
3
- import type { DestTableName, ExistsOptions, GetFilterType, NoCompoundTypeSelector, PullTableSchema, Query } from './query.ts';
4
+ import type { DestTableName, ExistsOptions, GetFilterType, GetJsonLeafFilterType, JsonSelectors, NoCompoundTypeSelector, PullTableSchema, Query, ValidJsonPath, ValueAtPath } from './query.ts';
4
5
  export type ParameterReference = {
5
6
  [toStaticParam](): Parameter;
6
7
  };
8
+ declare const toColumnRef: unique symbol;
9
+ declare const columnRefBrand: unique symbol;
10
+ /**
11
+ * A reference to a value *inside* a `json()` column, produced by
12
+ * {@link ExpressionBuilder.json} and accepted by `cmp` in the left position.
13
+ *
14
+ * It carries, as phantom type parameters (never present at runtime), the json
15
+ * column's resolved TypeScript type (`TColumnType`), the path (`P`) and the
16
+ * table it was built for (`TTable`, so a reference built by one table's
17
+ * builder is rejected by another table's `cmp`). `json` resolves `TColumnType`
18
+ * from the schema at the (concrete) call site, so `cmp` walks the path over a
19
+ * *concrete* type rather than a deferred schema lookup. A deferred path-walk
20
+ * in `cmp`'s signature is too complex for TypeScript's structural comparison
21
+ * of `ExpressionBuilder` and breaks it wholesale.
22
+ */
23
+ export type ColumnRef<TColumnType = unknown, P extends readonly (string | number)[] = readonly (string | number)[], TTable extends string = string> = {
24
+ [toColumnRef](): JsonPathReference;
25
+ [columnRefBrand]?(brand: [TColumnType, P, TTable]): void;
26
+ };
27
+ /**
28
+ * The callback form of an aggregate's argument: picks a scalar leaf inside a
29
+ * `json()` column, e.g. `c.sum(({json}) => json('metadata', 'points'))`.
30
+ */
31
+ export type JsonAggregateSelector = (builder: any) => unknown;
32
+ /**
33
+ * Builds the AST aggregate for `fn` over `selector`: nothing for `count`, a
34
+ * column name, or a {@link JsonAggregateSelector} picking a leaf inside a
35
+ * `json()` column.
36
+ */
37
+ export declare function aggregateFromSelector(fn: AggregateFunction, selector: string | JsonAggregateSelector | undefined): Aggregate;
7
38
  /**
8
39
  * A factory function that creates a condition. This is used to create
9
40
  * complex conditions that can be passed to the `where` method of a query.
@@ -29,6 +60,21 @@ export declare class ExpressionBuilder<TTable extends keyof TSchema['tables'] &
29
60
  get eb(): this;
30
61
  cmp<TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>, TOperator extends SimpleOperator>(field: TSelector, op: TOperator, value: GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, TOperator> | ParameterReference | undefined): Condition;
31
62
  cmp<TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>>(field: TSelector, value: GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, '='> | ParameterReference | undefined): Condition;
63
+ cmp<TColumnType, const P extends readonly (string | number)[], TOperator extends SimpleOperator>(ref: ColumnRef<TColumnType, P, TTable>, op: TOperator, value: GetJsonLeafFilterType<ValueAtPath<TColumnType, P>, TOperator> | ParameterReference | undefined): Condition;
64
+ cmp<TColumnType, const P extends readonly (string | number)[]>(ref: ColumnRef<TColumnType, P, TTable>, value: GetJsonLeafFilterType<ValueAtPath<TColumnType, P>, '='> | ParameterReference | undefined): Condition;
65
+ /**
66
+ * References a value inside a `json()` column for use in `cmp`. Path
67
+ * segments are object keys or array indices, applied left-to-right; at least
68
+ * one segment is required, since a whole JSON column is never a comparison
69
+ * operand (only scalar leaves can be compared).
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * z.query.issue.where(({cmp, json}) =>
74
+ * cmp(json('metadata', 'priority'), '=', 'high'));
75
+ * ```
76
+ */
77
+ json<TColumn extends JsonSelectors<PullTableSchema<TTable, TSchema>> & string, const P extends readonly [string | number, ...(string | number)[]]>(column: TColumn, ...path: P & ValidJsonPath<SchemaValueToTSType<PullTableSchema<TTable, TSchema>['columns'][TColumn]>, P>): ColumnRef<SchemaValueToTSType<PullTableSchema<TTable, TSchema>['columns'][TColumn]>, P, TTable>;
32
78
  cmpLit(left: ParameterReference | LiteralValue | undefined, op: SimpleOperator, right: ParameterReference | LiteralValue | undefined): Condition;
33
79
  and: typeof and;
34
80
  or: typeof or;
@@ -38,28 +84,7 @@ export declare class ExpressionBuilder<TTable extends keyof TSchema['tables'] &
38
84
  export declare function and(...conditions: (Condition | undefined)[]): Condition;
39
85
  export declare function or(...conditions: (Condition | undefined)[]): Condition;
40
86
  export declare function not(expression: Condition): Condition;
41
- export declare function cmp(field: string, opOrValue: SimpleOperator | ParameterReference | LiteralValue | undefined, value?: ParameterReference | LiteralValue): Condition;
42
- export declare const TRUE: Condition;
87
+ export declare function cmp(field: string | ColumnRef, opOrValue: SimpleOperator | ParameterReference | LiteralValue | undefined, value?: ParameterReference | LiteralValue): Condition;
43
88
  export declare function simplifyCondition(c: Condition): Condition;
44
- export declare function flatten(type: 'and' | 'or', conditions: readonly Condition[]): Condition[];
45
- declare const negateOperatorMap: {
46
- readonly "=": '!=';
47
- readonly "!=": '=';
48
- readonly "<": '>=';
49
- readonly ">": '<=';
50
- readonly ">=": '<';
51
- readonly "<=": '>';
52
- readonly IN: 'NOT IN';
53
- readonly "NOT IN": 'IN';
54
- readonly LIKE: 'NOT LIKE';
55
- readonly "NOT LIKE": 'LIKE';
56
- readonly ILIKE: 'NOT ILIKE';
57
- readonly "NOT ILIKE": 'ILIKE';
58
- readonly IS: 'IS NOT';
59
- readonly "IS NOT": 'IS';
60
- readonly EXISTS: 'NOT EXISTS';
61
- readonly "NOT EXISTS": 'EXISTS';
62
- };
63
- export declare function negateOperator<OP extends keyof typeof negateOperatorMap>(op: OP): (typeof negateOperatorMap)[OP];
64
89
  export {};
65
90
  //# sourceMappingURL=expression.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/expression.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/expression.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,43 @@
1
1
  import { must } from "../../../shared/src/must.js";
2
- import { toStaticParam } from "../../../zero-protocol/src/ast.js";
2
+ import { MAX_JSON_PATH_INDEX, isHomogeneousList, isValidJsonPathIndex, toStaticParam } from "../../../zero-protocol/src/ast.js";
3
3
  //#region ../zql/src/query/expression.ts
4
+ var toColumnRef = Symbol();
5
+ function isColumnRef(v) {
6
+ return typeof v === "object" && v !== null && toColumnRef in v;
7
+ }
8
+ function makeColumnRef(name, path) {
9
+ if (path.length === 0) throw new Error(`json('${name}') requires at least one path segment`);
10
+ for (const seg of path) if (typeof seg === "number" && !isValidJsonPathIndex(seg)) throw new Error(`Invalid JSON path segment ${seg} in json('${name}', ...): a numeric segment is an array index and must be a non-negative integer no larger than ${MAX_JSON_PATH_INDEX}`);
11
+ const ref = {
12
+ type: "json",
13
+ value: {
14
+ type: "column",
15
+ name
16
+ },
17
+ path
18
+ };
19
+ return { [toColumnRef]: () => ref };
20
+ }
21
+ var jsonAggregateBuilder = { json: (column, ...path) => makeColumnRef(column, path) };
22
+ /**
23
+ * Builds the AST aggregate for `fn` over `selector`: nothing for `count`, a
24
+ * column name, or a {@link JsonAggregateSelector} picking a leaf inside a
25
+ * `json()` column.
26
+ */
27
+ function aggregateFromSelector(fn, selector) {
28
+ if (typeof selector !== "function") return {
29
+ fn,
30
+ field: selector
31
+ };
32
+ const ref = selector(jsonAggregateBuilder);
33
+ if (!isColumnRef(ref)) throw new Error(`${fn}() expects the callback to return json(...)`);
34
+ const { value, path } = ref[toColumnRef]();
35
+ return {
36
+ fn,
37
+ field: value.name,
38
+ path
39
+ };
40
+ }
4
41
  var ExpressionBuilder = class {
5
42
  #exists;
6
43
  constructor(exists) {
@@ -10,9 +47,24 @@ var ExpressionBuilder = class {
10
47
  get eb() {
11
48
  return this;
12
49
  }
13
- cmp(field, opOrValue, value) {
14
- if (arguments.length === 2) return cmp(field, opOrValue);
15
- return cmp(field, opOrValue, value);
50
+ cmp(field, ...args) {
51
+ if (args.length === 1) return cmp(field, args[0]);
52
+ return cmp(field, args[0], args[1]);
53
+ }
54
+ /**
55
+ * References a value inside a `json()` column for use in `cmp`. Path
56
+ * segments are object keys or array indices, applied left-to-right; at least
57
+ * one segment is required, since a whole JSON column is never a comparison
58
+ * operand (only scalar leaves can be compared).
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * z.query.issue.where(({cmp, json}) =>
63
+ * cmp(json('metadata', 'priority'), '=', 'high'));
64
+ * ```
65
+ */
66
+ json(column, ...path) {
67
+ return makeColumnRef(column, path);
16
68
  }
17
69
  cmpLit(left, op, right) {
18
70
  return {
@@ -86,9 +138,13 @@ function cmp(field, opOrValue, value) {
86
138
  op = opOrValue;
87
139
  actualValue = value;
88
140
  }
141
+ if (isColumnRef(actualValue)) throw new Error("A json() reference is only valid as the left operand of cmp()");
142
+ if (isColumnRef(field) && (op === "IN" || op === "NOT IN") && Array.isArray(actualValue)) {
143
+ if (!isHomogeneousList(actualValue)) throw new Error(`${op} against a JSON path requires a list of values of one type`);
144
+ }
89
145
  return {
90
146
  type: "simple",
91
- left: {
147
+ left: isColumnRef(field) ? field[toColumnRef]() : {
92
148
  type: "column",
93
149
  name: field
94
150
  },
@@ -164,6 +220,6 @@ function filterFalse(conditions) {
164
220
  return conditions.filter((c) => !isAlwaysFalse(c));
165
221
  }
166
222
  //#endregion
167
- export { ExpressionBuilder, and, cmp, simplifyCondition };
223
+ export { ExpressionBuilder, aggregateFromSelector, and, cmp, not, or, simplifyCondition };
168
224
 
169
225
  //# sourceMappingURL=expression.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"expression.js","names":["#exists"],"sources":["../../../../../zql/src/query/expression.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\nimport {must} from '../../../shared/src/must.ts';\nimport {\n toStaticParam,\n type Condition,\n type LiteralValue,\n type Parameter,\n type SimpleOperator,\n} from '../../../zero-protocol/src/ast.ts';\nimport type {Schema as ZeroSchema} from '../../../zero-types/src/schema.ts';\nimport type {\n DestTableName,\n ExistsOptions,\n GetFilterType,\n NoCompoundTypeSelector,\n PullTableSchema,\n Query,\n} from './query.ts';\n\nexport type ParameterReference = {\n [toStaticParam](): Parameter;\n};\n\n/**\n * A factory function that creates a condition. This is used to create\n * complex conditions that can be passed to the `where` method of a query.\n *\n * @example\n *\n * ```ts\n * const condition: ExpressionFactory<User> = ({and, cmp, or}) =>\n * and(\n * cmp('name', '=', 'Alice'),\n * or(cmp('age', '>', 18), cmp('isStudent', '=', true)),\n * );\n *\n * const query = z.query.user.where(condition);\n * ```\n */\nexport interface ExpressionFactory<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends ZeroSchema,\n> {\n (eb: ExpressionBuilder<TTable, TSchema>): Condition;\n}\n\nexport class ExpressionBuilder<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends ZeroSchema,\n> {\n readonly #exists: (\n relationship: string,\n cb?: (query: Query<TTable, TSchema>) => Query<TTable, TSchema, any>,\n options?: ExistsOptions,\n ) => Condition;\n\n constructor(\n exists: (\n relationship: string,\n cb?: (query: Query<TTable, TSchema>) => Query<TTable, TSchema, any>,\n options?: ExistsOptions,\n ) => Condition,\n ) {\n this.#exists = exists;\n this.exists = this.exists.bind(this);\n }\n\n get eb() {\n return this;\n }\n\n cmp<\n TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>,\n TOperator extends SimpleOperator,\n >(\n field: TSelector,\n op: TOperator,\n value:\n | GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, TOperator>\n | ParameterReference\n | undefined,\n ): Condition;\n cmp<\n TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>,\n >(\n field: TSelector,\n value:\n | GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, '='>\n | ParameterReference\n | undefined,\n ): Condition;\n cmp(\n field: string,\n opOrValue: SimpleOperator | ParameterReference | LiteralValue | undefined,\n value?: ParameterReference | LiteralValue,\n ): Condition {\n if (arguments.length === 2) {\n return cmp(field, opOrValue);\n }\n return cmp(field, opOrValue, value);\n }\n\n cmpLit(\n left: ParameterReference | LiteralValue | undefined,\n op: SimpleOperator,\n right: ParameterReference | LiteralValue | undefined,\n ): Condition {\n return {\n type: 'simple',\n left: isParameterReference(left)\n ? left[toStaticParam]()\n : {type: 'literal', value: left ?? null},\n right: isParameterReference(right)\n ? right[toStaticParam]()\n : {type: 'literal', value: right ?? null},\n op,\n };\n }\n\n and = and;\n or = or;\n not = not;\n\n // The relationship names are inline for the reason given on `Query.related`.\n exists = <\n TRelationship extends keyof TSchema['relationships'][TTable] & string,\n >(\n relationship: TRelationship,\n cb?: (\n query: Query<DestTableName<TTable, TSchema, TRelationship>, TSchema>,\n ) => Query<any, TSchema>,\n options?: ExistsOptions,\n ): Condition => this.#exists(relationship, cb, options);\n}\n\nexport function and(...conditions: (Condition | undefined)[]): Condition {\n const expressions = filterTrue(filterUndefined(conditions));\n\n if (expressions.length === 1) {\n return expressions[0];\n }\n\n if (expressions.some(isAlwaysFalse)) {\n return FALSE;\n }\n\n return {type: 'and', conditions: expressions};\n}\n\nexport function or(...conditions: (Condition | undefined)[]): Condition {\n const expressions = filterFalse(filterUndefined(conditions));\n\n if (expressions.length === 1) {\n return expressions[0];\n }\n\n if (expressions.some(isAlwaysTrue)) {\n return TRUE;\n }\n\n return {type: 'or', conditions: expressions};\n}\n\nexport function not(expression: Condition): Condition {\n switch (expression.type) {\n case 'and':\n return {\n type: 'or',\n conditions: expression.conditions.map(not),\n };\n case 'or':\n return {\n type: 'and',\n conditions: expression.conditions.map(not),\n };\n case 'correlatedSubquery':\n return {\n type: 'correlatedSubquery',\n related: expression.related,\n op: negateOperator(expression.op),\n ...(expression.flip !== undefined ? {flip: expression.flip} : {}),\n ...(expression.scalar !== undefined ? {scalar: expression.scalar} : {}),\n };\n case 'simple':\n return {\n type: 'simple',\n op: negateOperator(expression.op),\n left: expression.left,\n right: expression.right,\n };\n }\n}\n\nexport function cmp(\n field: string,\n opOrValue: SimpleOperator | ParameterReference | LiteralValue | undefined,\n value?: ParameterReference | LiteralValue,\n): Condition {\n let op: SimpleOperator;\n let actualValue: ParameterReference | LiteralValue | undefined;\n\n if (arguments.length === 2) {\n // 2-arg form: cmp(field, value) - defaults to '=' operator\n actualValue = opOrValue as ParameterReference | LiteralValue | undefined;\n op = '=';\n } else {\n // 3-arg form: cmp(field, op, value)\n op = opOrValue as SimpleOperator;\n actualValue = value;\n }\n\n return {\n type: 'simple',\n left: {type: 'column', name: field},\n right: isParameterReference(actualValue)\n ? actualValue[toStaticParam]()\n : {type: 'literal', value: actualValue ?? null},\n op,\n };\n}\n\nfunction isParameterReference(\n value: ParameterReference | LiteralValue | null | undefined,\n): value is ParameterReference {\n return (\n value !== null &&\n value !== undefined &&\n typeof value === 'object' &&\n (value as any)[toStaticParam]\n );\n}\n\nexport const TRUE: Condition = {\n type: 'and',\n conditions: [],\n};\n\nconst FALSE: Condition = {\n type: 'or',\n conditions: [],\n};\n\nfunction isAlwaysTrue(condition: Condition): boolean {\n return condition.type === 'and' && condition.conditions.length === 0;\n}\n\nfunction isAlwaysFalse(condition: Condition): boolean {\n return condition.type === 'or' && condition.conditions.length === 0;\n}\n\nexport function simplifyCondition(c: Condition): Condition {\n if (c.type === 'simple' || c.type === 'correlatedSubquery') {\n return c;\n }\n if (c.conditions.length === 1) {\n return simplifyCondition(c.conditions[0]);\n }\n const conditions = flatten(c.type, c.conditions.map(simplifyCondition));\n if (c.type === 'and' && conditions.some(isAlwaysFalse)) {\n return FALSE;\n }\n if (c.type === 'or' && conditions.some(isAlwaysTrue)) {\n return TRUE;\n }\n return {\n type: c.type,\n conditions,\n };\n}\n\nexport function flatten(\n type: 'and' | 'or',\n conditions: readonly Condition[],\n): Condition[] {\n const flattened: Condition[] = [];\n for (const c of conditions) {\n if (c.type === type) {\n flattened.push(...c.conditions);\n } else {\n flattened.push(c);\n }\n }\n\n return flattened;\n}\n\nconst negateSimpleOperatorMap = {\n ['=']: '!=',\n ['!=']: '=',\n ['<']: '>=',\n ['>']: '<=',\n ['>=']: '<',\n ['<=']: '>',\n ['IN']: 'NOT IN',\n ['NOT IN']: 'IN',\n ['LIKE']: 'NOT LIKE',\n ['NOT LIKE']: 'LIKE',\n ['ILIKE']: 'NOT ILIKE',\n ['NOT ILIKE']: 'ILIKE',\n ['IS']: 'IS NOT',\n ['IS NOT']: 'IS',\n} as const;\n\nconst negateOperatorMap = {\n ...negateSimpleOperatorMap,\n ['EXISTS']: 'NOT EXISTS',\n ['NOT EXISTS']: 'EXISTS',\n} as const;\n\nexport function negateOperator<OP extends keyof typeof negateOperatorMap>(\n op: OP,\n): (typeof negateOperatorMap)[OP] {\n return must(negateOperatorMap[op]);\n}\n\nfunction filterUndefined<T>(array: (T | undefined)[]): T[] {\n return array.filter(e => e !== undefined);\n}\n\nfunction filterTrue(conditions: Condition[]): Condition[] {\n return conditions.filter(c => !isAlwaysTrue(c));\n}\n\nfunction filterFalse(conditions: Condition[]): Condition[] {\n return conditions.filter(c => !isAlwaysFalse(c));\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"expression.js","names":[],"sources":["../../../../../zql/src/query/expression.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\nimport {must} from '../../../shared/src/must.ts';\nimport {\n type Aggregate,\n type AggregateFunction,\n isHomogeneousList,\n isValidJsonPathIndex,\n MAX_JSON_PATH_INDEX,\n toStaticParam,\n type ColumnReference,\n type Condition,\n type JsonPathReference,\n type LiteralValue,\n type Parameter,\n type SimpleOperator,\n} from '../../../zero-protocol/src/ast.ts';\nimport type {SchemaValueToTSType} from '../../../zero-types/src/schema-value.ts';\nimport type {Schema as ZeroSchema} from '../../../zero-types/src/schema.ts';\nimport type {\n DestTableName,\n ExistsOptions,\n GetFilterType,\n GetJsonLeafFilterType,\n JsonSelectors,\n NoCompoundTypeSelector,\n PullTableSchema,\n Query,\n ValidJsonPath,\n ValueAtPath,\n} from './query.ts';\n\nexport type ParameterReference = {\n [toStaticParam](): Parameter;\n};\n\nconst toColumnRef = Symbol();\ndeclare const columnRefBrand: unique symbol;\n\n/**\n * A reference to a value *inside* a `json()` column, produced by\n * {@link ExpressionBuilder.json} and accepted by `cmp` in the left position.\n *\n * It carries, as phantom type parameters (never present at runtime), the json\n * column's resolved TypeScript type (`TColumnType`), the path (`P`) and the\n * table it was built for (`TTable`, so a reference built by one table's\n * builder is rejected by another table's `cmp`). `json` resolves `TColumnType`\n * from the schema at the (concrete) call site, so `cmp` walks the path over a\n * *concrete* type rather than a deferred schema lookup. A deferred path-walk\n * in `cmp`'s signature is too complex for TypeScript's structural comparison\n * of `ExpressionBuilder` and breaks it wholesale.\n */\nexport type ColumnRef<\n TColumnType = unknown,\n P extends readonly (string | number)[] = readonly (string | number)[],\n TTable extends string = string,\n> = {\n [toColumnRef](): JsonPathReference;\n // Phantom brand. Declared as a *method* (not a property) so the type\n // parameters are bivariant: `json`'s return type embeds a schema-derived\n // `TColumnType`, and a covariant brand would make a concrete-schema\n // `ColumnRef` unassignable to a generic-schema one, breaking\n // `ExpressionBuilder` assignability across the query builder. `cmp` still\n // infers `TColumnType`/`P`/`TTable` from this position.\n [columnRefBrand]?(brand: [TColumnType, P, TTable]): void;\n};\n\nfunction isColumnRef(v: unknown): v is ColumnRef {\n return typeof v === 'object' && v !== null && toColumnRef in v;\n}\n\nfunction makeColumnRef(\n name: string,\n path: readonly (string | number)[],\n): ColumnRef {\n // `json()` requires at least one segment (enforced by its type): a whole JSON\n // column is never a comparison operand.\n if (path.length === 0) {\n throw new Error(`json('${name}') requires at least one path segment`);\n }\n for (const seg of path) {\n if (typeof seg === 'number' && !isValidJsonPathIndex(seg)) {\n throw new Error(\n `Invalid JSON path segment ${seg} in json('${name}', ...): a numeric ` +\n 'segment is an array index and must be a non-negative integer ' +\n `no larger than ${MAX_JSON_PATH_INDEX}`,\n );\n }\n }\n const column: ColumnReference = {type: 'column', name};\n const ref: JsonPathReference = {type: 'json', value: column, path};\n return {[toColumnRef]: () => ref};\n}\n\n/**\n * The callback form of an aggregate's argument: picks a scalar leaf inside a\n * `json()` column, e.g. `c.sum(({json}) => json('metadata', 'points'))`.\n */\n// Loosely typed: the public signatures (see `Query.sum`) type the builder and\n// the leaf; this is what the implementation accepts, checked at runtime.\nexport type JsonAggregateSelector = (builder: any) => unknown;\n\nconst jsonAggregateBuilder = {\n json: (column: string, ...path: (string | number)[]) =>\n makeColumnRef(column, path),\n};\n\n/**\n * Builds the AST aggregate for `fn` over `selector`: nothing for `count`, a\n * column name, or a {@link JsonAggregateSelector} picking a leaf inside a\n * `json()` column.\n */\nexport function aggregateFromSelector(\n fn: AggregateFunction,\n selector: string | JsonAggregateSelector | undefined,\n): Aggregate {\n if (typeof selector !== 'function') {\n return {fn, field: selector};\n }\n const ref = selector(jsonAggregateBuilder);\n if (!isColumnRef(ref)) {\n throw new Error(`${fn}() expects the callback to return json(...)`);\n }\n const {value, path} = ref[toColumnRef]();\n return {fn, field: value.name, path};\n}\n\n/**\n * A factory function that creates a condition. This is used to create\n * complex conditions that can be passed to the `where` method of a query.\n *\n * @example\n *\n * ```ts\n * const condition: ExpressionFactory<User> = ({and, cmp, or}) =>\n * and(\n * cmp('name', '=', 'Alice'),\n * or(cmp('age', '>', 18), cmp('isStudent', '=', true)),\n * );\n *\n * const query = z.query.user.where(condition);\n * ```\n */\nexport interface ExpressionFactory<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends ZeroSchema,\n> {\n (eb: ExpressionBuilder<TTable, TSchema>): Condition;\n}\n\nexport class ExpressionBuilder<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends ZeroSchema,\n> {\n readonly #exists: (\n relationship: string,\n cb?: (query: Query<TTable, TSchema>) => Query<TTable, TSchema, any>,\n options?: ExistsOptions,\n ) => Condition;\n\n constructor(\n exists: (\n relationship: string,\n cb?: (query: Query<TTable, TSchema>) => Query<TTable, TSchema, any>,\n options?: ExistsOptions,\n ) => Condition,\n ) {\n this.#exists = exists;\n this.exists = this.exists.bind(this);\n }\n\n get eb() {\n return this;\n }\n\n cmp<\n TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>,\n TOperator extends SimpleOperator,\n >(\n field: TSelector,\n op: TOperator,\n value:\n | GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, TOperator>\n | ParameterReference\n | undefined,\n ): Condition;\n cmp<\n TSelector extends NoCompoundTypeSelector<PullTableSchema<TTable, TSchema>>,\n >(\n field: TSelector,\n value:\n | GetFilterType<PullTableSchema<TTable, TSchema>, TSelector, '='>\n | ParameterReference\n | undefined,\n ): Condition;\n cmp<\n TColumnType,\n const P extends readonly (string | number)[],\n TOperator extends SimpleOperator,\n >(\n ref: ColumnRef<TColumnType, P, TTable>,\n op: TOperator,\n value:\n | GetJsonLeafFilterType<ValueAtPath<TColumnType, P>, TOperator>\n | ParameterReference\n | undefined,\n ): Condition;\n cmp<TColumnType, const P extends readonly (string | number)[]>(\n ref: ColumnRef<TColumnType, P, TTable>,\n value:\n | GetJsonLeafFilterType<ValueAtPath<TColumnType, P>, '='>\n | ParameterReference\n | undefined,\n ): Condition;\n // Implementation signature, intentionally loose. The typed contract is\n // defined by the overloads above; this only needs to subsume them.\n cmp(field: string | ColumnRef, ...args: any[]): Condition {\n if (args.length === 1) {\n return cmp(field, args[0]);\n }\n return cmp(field, args[0], args[1]);\n }\n\n /**\n * References a value inside a `json()` column for use in `cmp`. Path\n * segments are object keys or array indices, applied left-to-right; at least\n * one segment is required, since a whole JSON column is never a comparison\n * operand (only scalar leaves can be compared).\n *\n * @example\n * ```ts\n * z.query.issue.where(({cmp, json}) =>\n * cmp(json('metadata', 'priority'), '=', 'high'));\n * ```\n */\n json<\n TColumn extends JsonSelectors<PullTableSchema<TTable, TSchema>> & string,\n const P extends readonly [string | number, ...(string | number)[]],\n >(\n column: TColumn,\n // `P` is inferred from the args; intersecting with `ValidJsonPath` rejects\n // an out-of-shape segment at its position (and drives autocomplete).\n ...path: P &\n ValidJsonPath<\n SchemaValueToTSType<\n PullTableSchema<TTable, TSchema>['columns'][TColumn]\n >,\n P\n >\n ): ColumnRef<\n SchemaValueToTSType<PullTableSchema<TTable, TSchema>['columns'][TColumn]>,\n P,\n TTable\n > {\n return makeColumnRef(column, path) as ColumnRef<\n SchemaValueToTSType<PullTableSchema<TTable, TSchema>['columns'][TColumn]>,\n P,\n TTable\n >;\n }\n\n cmpLit(\n left: ParameterReference | LiteralValue | undefined,\n op: SimpleOperator,\n right: ParameterReference | LiteralValue | undefined,\n ): Condition {\n return {\n type: 'simple',\n left: isParameterReference(left)\n ? left[toStaticParam]()\n : {type: 'literal', value: left ?? null},\n right: isParameterReference(right)\n ? right[toStaticParam]()\n : {type: 'literal', value: right ?? null},\n op,\n };\n }\n\n and = and;\n or = or;\n not = not;\n\n // The relationship names are inline for the reason given on `Query.related`.\n exists = <\n TRelationship extends keyof TSchema['relationships'][TTable] & string,\n >(\n relationship: TRelationship,\n cb?: (\n query: Query<DestTableName<TTable, TSchema, TRelationship>, TSchema>,\n ) => Query<any, TSchema>,\n options?: ExistsOptions,\n ): Condition => this.#exists(relationship, cb, options);\n}\n\nexport function and(...conditions: (Condition | undefined)[]): Condition {\n const expressions = filterTrue(filterUndefined(conditions));\n\n if (expressions.length === 1) {\n return expressions[0];\n }\n\n if (expressions.some(isAlwaysFalse)) {\n return FALSE;\n }\n\n return {type: 'and', conditions: expressions};\n}\n\nexport function or(...conditions: (Condition | undefined)[]): Condition {\n const expressions = filterFalse(filterUndefined(conditions));\n\n if (expressions.length === 1) {\n return expressions[0];\n }\n\n if (expressions.some(isAlwaysTrue)) {\n return TRUE;\n }\n\n return {type: 'or', conditions: expressions};\n}\n\nexport function not(expression: Condition): Condition {\n switch (expression.type) {\n case 'and':\n return {\n type: 'or',\n conditions: expression.conditions.map(not),\n };\n case 'or':\n return {\n type: 'and',\n conditions: expression.conditions.map(not),\n };\n case 'correlatedSubquery':\n return {\n type: 'correlatedSubquery',\n related: expression.related,\n op: negateOperator(expression.op),\n ...(expression.flip !== undefined ? {flip: expression.flip} : {}),\n ...(expression.scalar !== undefined ? {scalar: expression.scalar} : {}),\n };\n case 'simple':\n return {\n type: 'simple',\n op: negateOperator(expression.op),\n left: expression.left,\n right: expression.right,\n };\n }\n}\n\nexport function cmp(\n field: string | ColumnRef,\n opOrValue: SimpleOperator | ParameterReference | LiteralValue | undefined,\n value?: ParameterReference | LiteralValue,\n): Condition {\n let op: SimpleOperator;\n let actualValue: ParameterReference | LiteralValue | undefined;\n\n if (arguments.length === 2) {\n // 2-arg form: cmp(field, value) - defaults to '=' operator\n actualValue = opOrValue as ParameterReference | LiteralValue | undefined;\n op = '=';\n } else {\n // 3-arg form: cmp(field, op, value)\n op = opOrValue as SimpleOperator;\n actualValue = value;\n }\n\n if (isColumnRef(actualValue)) {\n // Without this the reference would be wrapped as a literal `{}`: an\n // always-false predicate on the client and a wire rejection on the server.\n throw new Error(\n 'A json() reference is only valid as the left operand of cmp()',\n );\n }\n if (\n isColumnRef(field) &&\n (op === 'IN' || op === 'NOT IN') &&\n Array.isArray(actualValue)\n ) {\n // The engines compare a JSON leaf against the type of the list's first\n // element (see jsonLiteralType); a mixed list has no consistent meaning.\n if (!isHomogeneousList(actualValue)) {\n throw new Error(\n `${op} against a JSON path requires a list of values of one type`,\n );\n }\n }\n\n return {\n type: 'simple',\n left: isColumnRef(field)\n ? field[toColumnRef]()\n : {type: 'column', name: field},\n right: isParameterReference(actualValue)\n ? actualValue[toStaticParam]()\n : {type: 'literal', value: actualValue ?? null},\n op,\n };\n}\n\nfunction isParameterReference(\n value: ParameterReference | LiteralValue | null | undefined,\n): value is ParameterReference {\n return (\n value !== null &&\n value !== undefined &&\n typeof value === 'object' &&\n (value as any)[toStaticParam]\n );\n}\n\nconst TRUE: Condition = {\n type: 'and',\n conditions: [],\n};\n\nconst FALSE: Condition = {\n type: 'or',\n conditions: [],\n};\n\nfunction isAlwaysTrue(condition: Condition): boolean {\n return condition.type === 'and' && condition.conditions.length === 0;\n}\n\nfunction isAlwaysFalse(condition: Condition): boolean {\n return condition.type === 'or' && condition.conditions.length === 0;\n}\n\nexport function simplifyCondition(c: Condition): Condition {\n if (c.type === 'simple' || c.type === 'correlatedSubquery') {\n return c;\n }\n if (c.conditions.length === 1) {\n return simplifyCondition(c.conditions[0]);\n }\n const conditions = flatten(c.type, c.conditions.map(simplifyCondition));\n if (c.type === 'and' && conditions.some(isAlwaysFalse)) {\n return FALSE;\n }\n if (c.type === 'or' && conditions.some(isAlwaysTrue)) {\n return TRUE;\n }\n return {\n type: c.type,\n conditions,\n };\n}\n\nfunction flatten(\n type: 'and' | 'or',\n conditions: readonly Condition[],\n): Condition[] {\n const flattened: Condition[] = [];\n for (const c of conditions) {\n if (c.type === type) {\n flattened.push(...c.conditions);\n } else {\n flattened.push(c);\n }\n }\n\n return flattened;\n}\n\nconst negateSimpleOperatorMap = {\n ['=']: '!=',\n ['!=']: '=',\n ['<']: '>=',\n ['>']: '<=',\n ['>=']: '<',\n ['<=']: '>',\n ['IN']: 'NOT IN',\n ['NOT IN']: 'IN',\n ['LIKE']: 'NOT LIKE',\n ['NOT LIKE']: 'LIKE',\n ['ILIKE']: 'NOT ILIKE',\n ['NOT ILIKE']: 'ILIKE',\n ['IS']: 'IS NOT',\n ['IS NOT']: 'IS',\n} as const;\n\nconst negateOperatorMap = {\n ...negateSimpleOperatorMap,\n ['EXISTS']: 'NOT EXISTS',\n ['NOT EXISTS']: 'EXISTS',\n} as const;\n\nfunction negateOperator<OP extends keyof typeof negateOperatorMap>(\n op: OP,\n): (typeof negateOperatorMap)[OP] {\n return must(negateOperatorMap[op]);\n}\n\nfunction filterUndefined<T>(array: (T | undefined)[]): T[] {\n return array.filter(e => e !== undefined);\n}\n\nfunction filterTrue(conditions: Condition[]): Condition[] {\n return conditions.filter(c => !isAlwaysTrue(c));\n}\n\nfunction filterFalse(conditions: Condition[]): Condition[] {\n return conditions.filter(c => !isAlwaysFalse(c));\n}\n"],"mappings":";;;AAmCA,IAAM,cAAc,OAAO;AA+B3B,SAAS,YAAY,GAA4B;CAC/C,OAAO,OAAO,MAAM,YAAY,MAAM,QAAQ,eAAe;AAC/D;AAEA,SAAS,cACP,MACA,MACW;CAGX,IAAI,KAAK,WAAW,GAClB,MAAM,IAAI,MAAM,SAAS,KAAK,sCAAsC;CAEtE,KAAK,MAAM,OAAO,MAChB,IAAI,OAAO,QAAQ,YAAY,CAAC,qBAAqB,GAAG,GACtD,MAAM,IAAI,MACR,6BAA6B,IAAI,YAAY,KAAK,iGAE9B,qBACtB;CAIJ,MAAM,MAAyB;EAAC,MAAM;EAAQ,OAAO;GADpB,MAAM;GAAU;EACI;EAAQ;CAAI;CACjE,OAAO,GAAE,oBAAoB,IAAG;AAClC;AAUA,IAAM,uBAAuB,EAC3B,OAAO,QAAgB,GAAG,SACxB,cAAc,QAAQ,IAAI,EAC9B;;;;;;AAOA,SAAgB,sBACd,IACA,UACW;CACX,IAAI,OAAO,aAAa,YACtB,OAAO;EAAC;EAAI,OAAO;CAAQ;CAE7B,MAAM,MAAM,SAAS,oBAAoB;CACzC,IAAI,CAAC,YAAY,GAAG,GAClB,MAAM,IAAI,MAAM,GAAG,GAAG,4CAA4C;CAEpE,MAAM,EAAC,OAAO,SAAQ,IAAI,YAAY,CAAC;CACvC,OAAO;EAAC;EAAI,OAAO,MAAM;EAAM;CAAI;AACrC;AAyBA,IAAa,oBAAb,MAGE;CACA;CAMA,YACE,QAKA;EACA,KAAK,UAAU;EACf,KAAK,SAAS,KAAK,OAAO,KAAK,IAAI;CACrC;CAEA,IAAI,KAAK;EACP,OAAO;CACT;CA2CA,IAAI,OAA2B,GAAG,MAAwB;EACxD,IAAI,KAAK,WAAW,GAClB,OAAO,IAAI,OAAO,KAAK,EAAE;EAE3B,OAAO,IAAI,OAAO,KAAK,IAAI,KAAK,EAAE;CACpC;;;;;;;;;;;;;CAcA,KAIE,QAGA,GAAG,MAWH;EACA,OAAO,cAAc,QAAQ,IAAI;CAKnC;CAEA,OACE,MACA,IACA,OACW;EACX,OAAO;GACL,MAAM;GACN,MAAM,qBAAqB,IAAI,IAC3B,KAAK,cAAc,CAAC,IACpB;IAAC,MAAM;IAAW,OAAO,QAAQ;GAAI;GACzC,OAAO,qBAAqB,KAAK,IAC7B,MAAM,cAAc,CAAC,IACrB;IAAC,MAAM;IAAW,OAAO,SAAS;GAAI;GAC1C;EACF;CACF;CAEA,MAAM;CACN,KAAK;CACL,MAAM;CAGN,UAGE,cACA,IAGA,YACc,KAAK,QAAQ,cAAc,IAAI,OAAO;AACxD;AAEA,SAAgB,IAAI,GAAG,YAAkD;CACvE,MAAM,cAAc,WAAW,gBAAgB,UAAU,CAAC;CAE1D,IAAI,YAAY,WAAW,GACzB,OAAO,YAAY;CAGrB,IAAI,YAAY,KAAK,aAAa,GAChC,OAAO;CAGT,OAAO;EAAC,MAAM;EAAO,YAAY;CAAW;AAC9C;AAEA,SAAgB,GAAG,GAAG,YAAkD;CACtE,MAAM,cAAc,YAAY,gBAAgB,UAAU,CAAC;CAE3D,IAAI,YAAY,WAAW,GACzB,OAAO,YAAY;CAGrB,IAAI,YAAY,KAAK,YAAY,GAC/B,OAAO;CAGT,OAAO;EAAC,MAAM;EAAM,YAAY;CAAW;AAC7C;AAEA,SAAgB,IAAI,YAAkC;CACpD,QAAQ,WAAW,MAAnB;EACE,KAAK,OACH,OAAO;GACL,MAAM;GACN,YAAY,WAAW,WAAW,IAAI,GAAG;EAC3C;EACF,KAAK,MACH,OAAO;GACL,MAAM;GACN,YAAY,WAAW,WAAW,IAAI,GAAG;EAC3C;EACF,KAAK,sBACH,OAAO;GACL,MAAM;GACN,SAAS,WAAW;GACpB,IAAI,eAAe,WAAW,EAAE;GAChC,GAAI,WAAW,SAAS,KAAA,IAAY,EAAC,MAAM,WAAW,KAAI,IAAI,CAAC;GAC/D,GAAI,WAAW,WAAW,KAAA,IAAY,EAAC,QAAQ,WAAW,OAAM,IAAI,CAAC;EACvE;EACF,KAAK,UACH,OAAO;GACL,MAAM;GACN,IAAI,eAAe,WAAW,EAAE;GAChC,MAAM,WAAW;GACjB,OAAO,WAAW;EACpB;CACJ;AACF;AAEA,SAAgB,IACd,OACA,WACA,OACW;CACX,IAAI;CACJ,IAAI;CAEJ,IAAI,UAAU,WAAW,GAAG;EAE1B,cAAc;EACd,KAAK;CACP,OAAO;EAEL,KAAK;EACL,cAAc;CAChB;CAEA,IAAI,YAAY,WAAW,GAGzB,MAAM,IAAI,MACR,+DACF;CAEF,IACE,YAAY,KAAK,MAChB,OAAO,QAAQ,OAAO,aACvB,MAAM,QAAQ,WAAW,GAIrB;MAAA,CAAC,kBAAkB,WAAW,GAChC,MAAM,IAAI,MACR,GAAG,GAAG,2DACR;CAAA;CAIJ,OAAO;EACL,MAAM;EACN,MAAM,YAAY,KAAK,IACnB,MAAM,YAAY,CAAC,IACnB;GAAC,MAAM;GAAU,MAAM;EAAK;EAChC,OAAO,qBAAqB,WAAW,IACnC,YAAY,cAAc,CAAC,IAC3B;GAAC,MAAM;GAAW,OAAO,eAAe;EAAI;EAChD;CACF;AACF;AAEA,SAAS,qBACP,OAC6B;CAC7B,OACE,UAAU,QACV,UAAU,KAAA,KACV,OAAO,UAAU,YAChB,MAAc;AAEnB;AAEA,IAAM,OAAkB;CACtB,MAAM;CACN,YAAY,CAAC;AACf;AAEA,IAAM,QAAmB;CACvB,MAAM;CACN,YAAY,CAAC;AACf;AAEA,SAAS,aAAa,WAA+B;CACnD,OAAO,UAAU,SAAS,SAAS,UAAU,WAAW,WAAW;AACrE;AAEA,SAAS,cAAc,WAA+B;CACpD,OAAO,UAAU,SAAS,QAAQ,UAAU,WAAW,WAAW;AACpE;AAEA,SAAgB,kBAAkB,GAAyB;CACzD,IAAI,EAAE,SAAS,YAAY,EAAE,SAAS,sBACpC,OAAO;CAET,IAAI,EAAE,WAAW,WAAW,GAC1B,OAAO,kBAAkB,EAAE,WAAW,EAAE;CAE1C,MAAM,aAAa,QAAQ,EAAE,MAAM,EAAE,WAAW,IAAI,iBAAiB,CAAC;CACtE,IAAI,EAAE,SAAS,SAAS,WAAW,KAAK,aAAa,GACnD,OAAO;CAET,IAAI,EAAE,SAAS,QAAQ,WAAW,KAAK,YAAY,GACjD,OAAO;CAET,OAAO;EACL,MAAM,EAAE;EACR;CACF;AACF;AAEA,SAAS,QACP,MACA,YACa;CACb,MAAM,YAAyB,CAAC;CAChC,KAAK,MAAM,KAAK,YACd,IAAI,EAAE,SAAS,MACb,UAAU,KAAK,GAAG,EAAE,UAAU;MAE9B,UAAU,KAAK,CAAC;CAIpB,OAAO;AACT;AAmBA,IAAM,oBAAoB;EAhBvB,MAAM;EACN,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACP,OAAO;EACP,OAAO;EACP,WAAW;EACX,SAAS;EACT,aAAa;EACb,UAAU;EACV,cAAc;EACd,OAAO;EACP,WAAW;EAKX,WAAW;EACX,eAAe;AAClB;AAEA,SAAS,eACP,IACgC;CAChC,OAAO,KAAK,kBAAkB,GAAG;AACnC;AAEA,SAAS,gBAAmB,OAA+B;CACzD,OAAO,MAAM,QAAO,MAAK,MAAM,KAAA,CAAS;AAC1C;AAEA,SAAS,WAAW,YAAsC;CACxD,OAAO,WAAW,QAAO,MAAK,CAAC,aAAa,CAAC,CAAC;AAChD;AAEA,SAAS,YAAY,YAAsC;CACzD,OAAO,WAAW,QAAO,MAAK,CAAC,cAAc,CAAC,CAAC;AACjD"}
@@ -1,5 +1,5 @@
1
- import { emptyArray } from "../../../shared/src/sentinels.js";
2
1
  import { throwOutput } from "../ivm/operator.js";
2
+ import { emptyArray } from "../../../shared/src/sentinels.js";
3
3
  //#region ../zql/src/query/measure-push-operator.ts
4
4
  var MeasurePushOperator = class {
5
5
  #input;
@@ -1 +1 @@
1
- {"version":3,"file":"measure-push-operator.js","names":["#input","#queryID","#metricsDelegate","#sampleRate","#metricName","#output","#sample","#measure","#count"],"sources":["../../../../../zql/src/query/measure-push-operator.ts"],"sourcesContent":["import {emptyArray} from '../../../shared/src/sentinels.ts';\nimport type {Change} from '../ivm/change.ts';\nimport type {Node} from '../ivm/data.ts';\nimport {\n throwOutput,\n type FetchRequest,\n type Input,\n type InputBase,\n type Operator,\n type Output,\n} from '../ivm/operator.ts';\nimport type {SourceSchema} from '../ivm/schema.ts';\nimport type {Stream} from '../ivm/stream.ts';\nimport type {MetricsDelegate} from './metrics-delegate.ts';\n\ntype MetricName = 'query-update-client' | 'query-update-server';\n\nexport class MeasurePushOperator implements Operator {\n readonly #input: Input;\n readonly #queryID: string;\n readonly #metricsDelegate: MetricsDelegate;\n readonly #sampleRate: number;\n /** Pushes and reconciles so far, sampled or not. */\n #count = 0;\n\n #output: Output = throwOutput;\n readonly #metricName: MetricName;\n\n /**\n * With a `sampleRate` of n, only the first of every n pushes (and\n * reconciles) is timed and reported. The others go straight to the output,\n * without a timer or the generator that measuring needs. The metrics\n * delegate should weight each reported time by n.\n */\n constructor(\n input: Input,\n queryID: string,\n metricsDelegate: MetricsDelegate,\n metricName: MetricName,\n sampleRate = 1,\n ) {\n this.#input = input;\n this.#queryID = queryID;\n this.#metricsDelegate = metricsDelegate;\n this.#metricName = metricName;\n this.#sampleRate = sampleRate;\n input.setOutput(this);\n }\n\n setOutput(output: Output): void {\n this.#output = output;\n }\n\n fetch(req: FetchRequest): Stream<Node | 'yield'> {\n return this.#input.fetch(req);\n }\n\n getSchema(): SourceSchema {\n return this.#input.getSchema();\n }\n\n destroy(): void {\n this.#input.destroy();\n }\n\n push(change: Change): Stream<'yield'> {\n if (!this.#sample()) {\n return this.#output.push(change, this);\n }\n return this.#measure(() => this.#output.push(change, this));\n }\n\n reconcile(_pusher: InputBase): Stream<'yield'> {\n const output = this.#output;\n if (output.reconcile === undefined) {\n return emptyArray;\n }\n if (!this.#sample()) {\n return output.reconcile(this);\n }\n const reconcile = output.reconcile.bind(output);\n return this.#measure(() => reconcile(this));\n }\n\n #sample(): boolean {\n return this.#count++ % this.#sampleRate === 0;\n }\n\n /**\n * Runs the stream returned by `run` and records the time spent running it.\n *\n * The time the stream spends suspended at a `yield` is not counted: the\n * caller yields the thread there, and whatever else runs in the meantime\n * is not this query's work.\n *\n * The time is recorded even if the stream throws or is abandoned, so that\n * a push aborted for taking too long is accounted to its query.\n */\n *#measure(run: () => Stream<'yield'>): Stream<'yield'> {\n let elapsed = 0;\n let start = performance.now();\n let running = true;\n try {\n for (const result of run()) {\n elapsed += performance.now() - start;\n running = false;\n yield result;\n running = true;\n start = performance.now();\n }\n } finally {\n if (running) {\n elapsed += performance.now() - start;\n }\n this.#metricsDelegate.addMetric(this.#metricName, elapsed, this.#queryID);\n }\n }\n}\n"],"mappings":";;;AAiBA,IAAa,sBAAb,MAAqD;CACnD;CACA;CACA;CACA;;CAEA,SAAS;CAET,UAAkB;CAClB;;;;;;;CAQA,YACE,OACA,SACA,iBACA,YACA,aAAa,GACb;EACA,KAAKA,SAAS;EACd,KAAKC,WAAW;EAChB,KAAKC,mBAAmB;EACxB,KAAKE,cAAc;EACnB,KAAKD,cAAc;EACnB,MAAM,UAAU,IAAI;CACtB;CAEA,UAAU,QAAsB;EAC9B,KAAKE,UAAU;CACjB;CAEA,MAAM,KAA2C;EAC/C,OAAO,KAAKL,OAAO,MAAM,GAAG;CAC9B;CAEA,YAA0B;EACxB,OAAO,KAAKA,OAAO,UAAU;CAC/B;CAEA,UAAgB;EACd,KAAKA,OAAO,QAAQ;CACtB;CAEA,KAAK,QAAiC;EACpC,IAAI,CAAC,KAAKM,QAAQ,GAChB,OAAO,KAAKD,QAAQ,KAAK,QAAQ,IAAI;EAEvC,OAAO,KAAKE,eAAe,KAAKF,QAAQ,KAAK,QAAQ,IAAI,CAAC;CAC5D;CAEA,UAAU,SAAqC;EAC7C,MAAM,SAAS,KAAKA;EACpB,IAAI,OAAO,cAAc,KAAA,GACvB,OAAO;EAET,IAAI,CAAC,KAAKC,QAAQ,GAChB,OAAO,OAAO,UAAU,IAAI;EAE9B,MAAM,YAAY,OAAO,UAAU,KAAK,MAAM;EAC9C,OAAO,KAAKC,eAAe,UAAU,IAAI,CAAC;CAC5C;CAEA,UAAmB;EACjB,OAAO,KAAKC,WAAW,KAAKL,gBAAgB;CAC9C;;;;;;;;;;;CAYA,CAACI,SAAS,KAA6C;EACrD,IAAI,UAAU;EACd,IAAI,QAAQ,YAAY,IAAI;EAC5B,IAAI,UAAU;EACd,IAAI;GACF,KAAK,MAAM,UAAU,IAAI,GAAG;IAC1B,WAAW,YAAY,IAAI,IAAI;IAC/B,UAAU;IACV,MAAM;IACN,UAAU;IACV,QAAQ,YAAY,IAAI;GAC1B;EACF,UAAU;GACR,IAAI,SACF,WAAW,YAAY,IAAI,IAAI;GAEjC,KAAKL,iBAAiB,UAAU,KAAKE,aAAa,SAAS,KAAKH,QAAQ;EAC1E;CACF;AACF"}
1
+ {"version":3,"file":"measure-push-operator.js","names":[],"sources":["../../../../../zql/src/query/measure-push-operator.ts"],"sourcesContent":["import {emptyArray} from '../../../shared/src/sentinels.ts';\nimport type {Change} from '../ivm/change.ts';\nimport type {Node} from '../ivm/data.ts';\nimport {\n throwOutput,\n type FetchRequest,\n type Input,\n type InputBase,\n type Operator,\n type Output,\n} from '../ivm/operator.ts';\nimport type {SourceSchema} from '../ivm/schema.ts';\nimport type {Stream} from '../ivm/stream.ts';\nimport type {MetricsDelegate} from './metrics-delegate.ts';\n\ntype MetricName = 'query-update-client' | 'query-update-server';\n\nexport class MeasurePushOperator implements Operator {\n readonly #input: Input;\n readonly #queryID: string;\n readonly #metricsDelegate: MetricsDelegate;\n readonly #sampleRate: number;\n /** Pushes and reconciles so far, sampled or not. */\n #count = 0;\n\n #output: Output = throwOutput;\n readonly #metricName: MetricName;\n\n /**\n * With a `sampleRate` of n, only the first of every n pushes (and\n * reconciles) is timed and reported. The others go straight to the output,\n * without a timer or the generator that measuring needs. The metrics\n * delegate should weight each reported time by n.\n */\n constructor(\n input: Input,\n queryID: string,\n metricsDelegate: MetricsDelegate,\n metricName: MetricName,\n sampleRate = 1,\n ) {\n this.#input = input;\n this.#queryID = queryID;\n this.#metricsDelegate = metricsDelegate;\n this.#metricName = metricName;\n this.#sampleRate = sampleRate;\n input.setOutput(this);\n }\n\n setOutput(output: Output): void {\n this.#output = output;\n }\n\n fetch(req: FetchRequest): Stream<Node | 'yield'> {\n return this.#input.fetch(req);\n }\n\n getSchema(): SourceSchema {\n return this.#input.getSchema();\n }\n\n destroy(): void {\n this.#input.destroy();\n }\n\n push(change: Change): Stream<'yield'> {\n if (!this.#sample()) {\n return this.#output.push(change, this);\n }\n return this.#measure(() => this.#output.push(change, this));\n }\n\n reconcile(_pusher: InputBase): Stream<'yield'> {\n const output = this.#output;\n if (output.reconcile === undefined) {\n return emptyArray;\n }\n if (!this.#sample()) {\n return output.reconcile(this);\n }\n const reconcile = output.reconcile.bind(output);\n return this.#measure(() => reconcile(this));\n }\n\n #sample(): boolean {\n return this.#count++ % this.#sampleRate === 0;\n }\n\n /**\n * Runs the stream returned by `run` and records the time spent running it.\n *\n * The time the stream spends suspended at a `yield` is not counted: the\n * caller yields the thread there, and whatever else runs in the meantime\n * is not this query's work.\n *\n * The time is recorded even if the stream throws or is abandoned, so that\n * a push aborted for taking too long is accounted to its query.\n */\n *#measure(run: () => Stream<'yield'>): Stream<'yield'> {\n let elapsed = 0;\n let start = performance.now();\n let running = true;\n try {\n for (const result of run()) {\n elapsed += performance.now() - start;\n running = false;\n yield result;\n running = true;\n start = performance.now();\n }\n } finally {\n if (running) {\n elapsed += performance.now() - start;\n }\n this.#metricsDelegate.addMetric(this.#metricName, elapsed, this.#queryID);\n }\n }\n}\n"],"mappings":";;;AAiBA,IAAa,sBAAb,MAAqD;CACnD;CACA;CACA;CACA;;CAEA,SAAS;CAET,UAAkB;CAClB;;;;;;;CAQA,YACE,OACA,SACA,iBACA,YACA,aAAa,GACb;EACA,KAAK,SAAS;EACd,KAAK,WAAW;EAChB,KAAK,mBAAmB;EACxB,KAAK,cAAc;EACnB,KAAK,cAAc;EACnB,MAAM,UAAU,IAAI;CACtB;CAEA,UAAU,QAAsB;EAC9B,KAAK,UAAU;CACjB;CAEA,MAAM,KAA2C;EAC/C,OAAO,KAAK,OAAO,MAAM,GAAG;CAC9B;CAEA,YAA0B;EACxB,OAAO,KAAK,OAAO,UAAU;CAC/B;CAEA,UAAgB;EACd,KAAK,OAAO,QAAQ;CACtB;CAEA,KAAK,QAAiC;EACpC,IAAI,CAAC,KAAK,QAAQ,GAChB,OAAO,KAAK,QAAQ,KAAK,QAAQ,IAAI;EAEvC,OAAO,KAAK,eAAe,KAAK,QAAQ,KAAK,QAAQ,IAAI,CAAC;CAC5D;CAEA,UAAU,SAAqC;EAC7C,MAAM,SAAS,KAAK;EACpB,IAAI,OAAO,cAAc,KAAA,GACvB,OAAO;EAET,IAAI,CAAC,KAAK,QAAQ,GAChB,OAAO,OAAO,UAAU,IAAI;EAE9B,MAAM,YAAY,OAAO,UAAU,KAAK,MAAM;EAC9C,OAAO,KAAK,eAAe,UAAU,IAAI,CAAC;CAC5C;CAEA,UAAmB;EACjB,OAAO,KAAK,WAAW,KAAK,gBAAgB;CAC9C;;;;;;;;;;;CAYA,CAAC,SAAS,KAA6C;EACrD,IAAI,UAAU;EACd,IAAI,QAAQ,YAAY,IAAI;EAC5B,IAAI,UAAU;EACd,IAAI;GACF,KAAK,MAAM,UAAU,IAAI,GAAG;IAC1B,WAAW,YAAY,IAAI,IAAI;IAC/B,UAAU;IACV,MAAM;IACN,UAAU;IACV,QAAQ,YAAY,IAAI;GAC1B;EACF,UAAU;GACR,IAAI,SACF,WAAW,YAAY,IAAI,IAAI;GAEjC,KAAK,iBAAiB,UAAU,KAAK,aAAa,SAAS,KAAK,QAAQ;EAC1E;CACF;AACF"}
@@ -33,7 +33,8 @@ function syncedQueryWithContext(name, parser, fn) {
33
33
  /** @deprecated */
34
34
  function syncedQueryImpl(name, fn, takesContext) {
35
35
  return (context, args) => {
36
- return asQueryInternals(takesContext ? fn(context, ...args) : fn(...args)).nameAndArgs(name, args);
36
+ const q = takesContext ? fn(context, ...args) : fn(...args);
37
+ return asQueryInternals(q).nameAndArgs(name, args);
37
38
  };
38
39
  }
39
40
  /** @deprecated */
@@ -1 +1 @@
1
- {"version":3,"file":"named.js","names":[],"sources":["../../../../../zql/src/query/named.ts"],"sourcesContent":["import type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {QueryParseError} from './error.ts';\nimport {asQueryInternals} from './query-internals.ts';\nimport {type AnyQuery} from './query.ts';\n\n/** @deprecated */\nexport type QueryFn<\n TContext,\n TTakesContext extends boolean,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends AnyQuery,\n> = TTakesContext extends false\n ? {(...args: TArg): TReturnQuery}\n : {(context: TContext, ...args: TArg): TReturnQuery};\n\n/** @deprecated */\nexport type SyncedQuery<\n TName extends string,\n TContext,\n TTakesContext extends boolean,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends AnyQuery,\n> = QueryFn<TContext, TTakesContext, TArg, TReturnQuery> & {\n queryName: TName;\n parse: ParseFn<TArg> | undefined;\n takesContext: TTakesContext;\n};\n\nfunction normalizeParser<T extends ReadonlyJSONValue[]>(\n parser: ParseFn<T> | HasParseFn<T> | undefined,\n): ParseFn<T> | undefined {\n if (parser) {\n if ('parse' in parser) {\n return parser.parse.bind(parser);\n }\n return parser;\n }\n return undefined;\n}\n\n/**\n * @deprecated Use {@link defineQuery} instead.\n */\nexport function syncedQuery<\n TName extends string,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends AnyQuery,\n>(\n name: TName,\n parser: ParseFn<TArg> | HasParseFn<TArg> | undefined,\n fn: QueryFn<unknown, false, TArg, TReturnQuery>,\n): SyncedQuery<TName, unknown, false, TArg, TReturnQuery> {\n const impl = syncedQueryImpl(name, fn, false);\n // oxlint-disable-next-line no-explicit-any\n const ret: any = (...args: TArg) => impl(undefined, args);\n ret.queryName = name;\n ret.parse = normalizeParser(parser);\n ret.takesContext = false;\n return ret;\n}\n\n/**\n * @deprecated Use {@link defineQuery} instead.\n */\nexport function syncedQueryWithContext<\n TName extends string,\n TContext,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends AnyQuery,\n>(\n name: TName,\n parser: ParseFn<TArg> | HasParseFn<TArg> | undefined,\n fn: QueryFn<TContext, true, TArg, TReturnQuery>,\n): SyncedQuery<TName, TContext, true, TArg, TReturnQuery> {\n const impl = syncedQueryImpl(name, fn, true);\n // oxlint-disable-next-line no-explicit-any\n const ret: any = (context: TContext, ...args: TArg) => impl(context, args);\n ret.queryName = name;\n ret.parse = normalizeParser(parser);\n ret.takesContext = true;\n return ret;\n}\n\n/** @deprecated */\nfunction syncedQueryImpl<\n TName extends string,\n TContext,\n TArg extends ReadonlyJSONValue[],\n // oxlint-disable-next-line no-explicit-any\n>(name: TName, fn: any, takesContext: boolean) {\n return (context: TContext, args: TArg) => {\n const q = takesContext ? fn(context, ...args) : fn(...args);\n return asQueryInternals(q).nameAndArgs(name, args);\n };\n}\n\n/** @deprecated */\n\n// oxlint-disable-next-line no-explicit-any\ntype AnySyncedQuery = SyncedQuery<any, any, any, any, any>;\n\n/** @deprecated */\nexport function withValidation<F extends AnySyncedQuery>(\n fn: F,\n // oxlint-disable-next-line no-explicit-any\n): F extends SyncedQuery<infer N, infer C, any, any, infer R>\n ? SyncedQuery<N, C, true, ReadonlyJSONValue[], R>\n : F {\n // If we have a parse function this is a SyncedQuery\n if ('parse' in fn) {\n const {parse} = fn;\n if (!parse) {\n throw new Error('ret does not have a parse function defined');\n }\n // oxlint-disable-next-line no-explicit-any\n const ret: any = (context: unknown, ...args: unknown[]) => {\n let parsed;\n try {\n parsed = parse(args);\n } catch (error) {\n throw new QueryParseError({cause: error});\n }\n // oxlint-disable-next-line no-explicit-any\n return fn.takesContext ? fn(context, ...parsed) : (fn as any)(...parsed);\n };\n ret.queryName = fn.queryName;\n ret.parse = fn.parse;\n ret.takesContext = true;\n\n return ret;\n }\n\n // If we don't have a parse function, return the function as-is\n // (this shouldn't happen in practice)\n // oxlint-disable-next-line no-explicit-any\n return fn as any;\n}\n\n/** @deprecated */\nexport type ParseFn<T extends ReadonlyJSONValue[]> = (args: unknown[]) => T;\n\n/** @deprecated */\nexport type HasParseFn<T extends ReadonlyJSONValue[]> = {\n parse: ParseFn<T>;\n};\n\n/** @deprecated */\nexport type Parser<T extends ReadonlyJSONValue[]> = ParseFn<T> | HasParseFn<T>;\n\nexport type CustomQueryID = {\n name: string;\n args: ReadonlyArray<ReadonlyJSONValue>;\n};\n"],"mappings":";;;;AA4BA,SAAS,gBACP,QACwB;CACxB,IAAI,QAAQ;EACV,IAAI,WAAW,QACb,OAAO,OAAO,MAAM,KAAK,MAAM;EAEjC,OAAO;CACT;AAEF;;;;AAKA,SAAgB,YAKd,MACA,QACA,IACwD;CACxD,MAAM,OAAO,gBAAgB,MAAM,IAAI,KAAK;CAE5C,MAAM,OAAY,GAAG,SAAe,KAAK,KAAA,GAAW,IAAI;CACxD,IAAI,YAAY;CAChB,IAAI,QAAQ,gBAAgB,MAAM;CAClC,IAAI,eAAe;CACnB,OAAO;AACT;;;;AAKA,SAAgB,uBAMd,MACA,QACA,IACwD;CACxD,MAAM,OAAO,gBAAgB,MAAM,IAAI,IAAI;CAE3C,MAAM,OAAY,SAAmB,GAAG,SAAe,KAAK,SAAS,IAAI;CACzE,IAAI,YAAY;CAChB,IAAI,QAAQ,gBAAgB,MAAM;CAClC,IAAI,eAAe;CACnB,OAAO;AACT;;AAGA,SAAS,gBAKP,MAAa,IAAS,cAAuB;CAC7C,QAAQ,SAAmB,SAAe;EAExC,OAAO,iBADG,eAAe,GAAG,SAAS,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,CACjC,EAAE,YAAY,MAAM,IAAI;CACnD;AACF;;AAQA,SAAgB,eACd,IAII;CAEJ,IAAI,WAAW,IAAI;EACjB,MAAM,EAAC,UAAS;EAChB,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,4CAA4C;EAG9D,MAAM,OAAY,SAAkB,GAAG,SAAoB;GACzD,IAAI;GACJ,IAAI;IACF,SAAS,MAAM,IAAI;GACrB,SAAS,OAAO;IACd,MAAM,IAAI,gBAAgB,EAAC,OAAO,MAAK,CAAC;GAC1C;GAEA,OAAO,GAAG,eAAe,GAAG,SAAS,GAAG,MAAM,IAAK,GAAW,GAAG,MAAM;EACzE;EACA,IAAI,YAAY,GAAG;EACnB,IAAI,QAAQ,GAAG;EACf,IAAI,eAAe;EAEnB,OAAO;CACT;CAKA,OAAO;AACT"}
1
+ {"version":3,"file":"named.js","names":[],"sources":["../../../../../zql/src/query/named.ts"],"sourcesContent":["import type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {QueryParseError} from './error.ts';\nimport {asQueryInternals} from './query-internals.ts';\nimport {type AnyQuery} from './query.ts';\n\n/** @deprecated */\nexport type QueryFn<\n TContext,\n TTakesContext extends boolean,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends AnyQuery,\n> = TTakesContext extends false\n ? {(...args: TArg): TReturnQuery}\n : {(context: TContext, ...args: TArg): TReturnQuery};\n\n/** @deprecated */\nexport type SyncedQuery<\n TName extends string,\n TContext,\n TTakesContext extends boolean,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends AnyQuery,\n> = QueryFn<TContext, TTakesContext, TArg, TReturnQuery> & {\n queryName: TName;\n parse: ParseFn<TArg> | undefined;\n takesContext: TTakesContext;\n};\n\nfunction normalizeParser<T extends ReadonlyJSONValue[]>(\n parser: ParseFn<T> | HasParseFn<T> | undefined,\n): ParseFn<T> | undefined {\n if (parser) {\n if ('parse' in parser) {\n return parser.parse.bind(parser);\n }\n return parser;\n }\n return undefined;\n}\n\n/**\n * @deprecated Use {@link defineQuery} instead.\n */\nexport function syncedQuery<\n TName extends string,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends AnyQuery,\n>(\n name: TName,\n parser: ParseFn<TArg> | HasParseFn<TArg> | undefined,\n fn: QueryFn<unknown, false, TArg, TReturnQuery>,\n): SyncedQuery<TName, unknown, false, TArg, TReturnQuery> {\n const impl = syncedQueryImpl(name, fn, false);\n // oxlint-disable-next-line no-explicit-any\n const ret: any = (...args: TArg) => impl(undefined, args);\n ret.queryName = name;\n ret.parse = normalizeParser(parser);\n ret.takesContext = false;\n return ret;\n}\n\n/**\n * @deprecated Use {@link defineQuery} instead.\n */\nexport function syncedQueryWithContext<\n TName extends string,\n TContext,\n TArg extends ReadonlyJSONValue[],\n TReturnQuery extends AnyQuery,\n>(\n name: TName,\n parser: ParseFn<TArg> | HasParseFn<TArg> | undefined,\n fn: QueryFn<TContext, true, TArg, TReturnQuery>,\n): SyncedQuery<TName, TContext, true, TArg, TReturnQuery> {\n const impl = syncedQueryImpl(name, fn, true);\n // oxlint-disable-next-line no-explicit-any\n const ret: any = (context: TContext, ...args: TArg) => impl(context, args);\n ret.queryName = name;\n ret.parse = normalizeParser(parser);\n ret.takesContext = true;\n return ret;\n}\n\n/** @deprecated */\nfunction syncedQueryImpl<\n TName extends string,\n TContext,\n TArg extends ReadonlyJSONValue[],\n // oxlint-disable-next-line no-explicit-any\n>(name: TName, fn: any, takesContext: boolean) {\n return (context: TContext, args: TArg) => {\n const q = takesContext ? fn(context, ...args) : fn(...args);\n return asQueryInternals(q).nameAndArgs(name, args);\n };\n}\n\n/** @deprecated */\n\n// oxlint-disable-next-line no-explicit-any\ntype AnySyncedQuery = SyncedQuery<any, any, any, any, any>;\n\n/** @deprecated */\nexport function withValidation<F extends AnySyncedQuery>(\n fn: F,\n // oxlint-disable-next-line no-explicit-any\n): F extends SyncedQuery<infer N, infer C, any, any, infer R>\n ? SyncedQuery<N, C, true, ReadonlyJSONValue[], R>\n : F {\n // If we have a parse function this is a SyncedQuery\n if ('parse' in fn) {\n const {parse} = fn;\n if (!parse) {\n throw new Error('ret does not have a parse function defined');\n }\n // oxlint-disable-next-line no-explicit-any\n const ret: any = (context: unknown, ...args: unknown[]) => {\n let parsed;\n try {\n parsed = parse(args);\n } catch (error) {\n throw new QueryParseError({cause: error});\n }\n // oxlint-disable-next-line no-explicit-any\n return fn.takesContext ? fn(context, ...parsed) : (fn as any)(...parsed);\n };\n ret.queryName = fn.queryName;\n ret.parse = fn.parse;\n ret.takesContext = true;\n\n return ret;\n }\n\n // If we don't have a parse function, return the function as-is\n // (this shouldn't happen in practice)\n // oxlint-disable-next-line no-explicit-any\n return fn as any;\n}\n\n/** @deprecated */\nexport type ParseFn<T extends ReadonlyJSONValue[]> = (args: unknown[]) => T;\n\n/** @deprecated */\nexport type HasParseFn<T extends ReadonlyJSONValue[]> = {\n parse: ParseFn<T>;\n};\n\n/** @deprecated */\nexport type Parser<T extends ReadonlyJSONValue[]> = ParseFn<T> | HasParseFn<T>;\n\nexport type CustomQueryID = {\n name: string;\n args: ReadonlyArray<ReadonlyJSONValue>;\n};\n"],"mappings":";;;;AA4BA,SAAS,gBACP,QACwB;CACxB,IAAI,QAAQ;EACV,IAAI,WAAW,QACb,OAAO,OAAO,MAAM,KAAK,MAAM;EAEjC,OAAO;CACT;AAEF;;;;AAKA,SAAgB,YAKd,MACA,QACA,IACwD;CACxD,MAAM,OAAO,gBAAgB,MAAM,IAAI,KAAK;CAE5C,MAAM,OAAY,GAAG,SAAe,KAAK,KAAA,GAAW,IAAI;CACxD,IAAI,YAAY;CAChB,IAAI,QAAQ,gBAAgB,MAAM;CAClC,IAAI,eAAe;CACnB,OAAO;AACT;;;;AAKA,SAAgB,uBAMd,MACA,QACA,IACwD;CACxD,MAAM,OAAO,gBAAgB,MAAM,IAAI,IAAI;CAE3C,MAAM,OAAY,SAAmB,GAAG,SAAe,KAAK,SAAS,IAAI;CACzE,IAAI,YAAY;CAChB,IAAI,QAAQ,gBAAgB,MAAM;CAClC,IAAI,eAAe;CACnB,OAAO;AACT;;AAGA,SAAS,gBAKP,MAAa,IAAS,cAAuB;CAC7C,QAAQ,SAAmB,SAAe;EACxC,MAAM,IAAI,eAAe,GAAG,SAAS,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI;EAC1D,OAAO,iBAAiB,CAAC,CAAC,CAAC,YAAY,MAAM,IAAI;CACnD;AACF;;AAQA,SAAgB,eACd,IAII;CAEJ,IAAI,WAAW,IAAI;EACjB,MAAM,EAAC,UAAS;EAChB,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,4CAA4C;EAG9D,MAAM,OAAY,SAAkB,GAAG,SAAoB;GACzD,IAAI;GACJ,IAAI;IACF,SAAS,MAAM,IAAI;GACrB,SAAS,OAAO;IACd,MAAM,IAAI,gBAAgB,EAAC,OAAO,MAAK,CAAC;GAC1C;GAEA,OAAO,GAAG,eAAe,GAAG,SAAS,GAAG,MAAM,IAAK,GAAW,GAAG,MAAM;EACzE;EACA,IAAI,YAAY,GAAG;EACnB,IAAI,QAAQ,GAAG;EACf,IAAI,eAAe;EAEnB,OAAO;CACT;CAKA,OAAO;AACT"}
@@ -118,11 +118,12 @@ export declare abstract class QueryDelegateBase implements QueryDelegate {
118
118
  onPipelinesReady(_attach: AttachPipeline): () => void;
119
119
  abstract getSource(name: string): Source | undefined;
120
120
  }
121
- export declare function runImpl<TTable extends keyof TSchema['tables'] & string, TSchema extends Schema, TReturn>(query: Query<TTable, TSchema, TReturn>, delegate: QueryDelegate, options?: RunOptions): Promise<HumanReadable<TReturn>>;
122
- export declare function preloadImpl<TTable extends keyof TSchema['tables'] & string, TSchema extends Schema, TReturn>(query: Query<TTable, TSchema, TReturn>, delegate: QueryDelegate, options?: PreloadOptions): {
123
- cleanup: () => void;
124
- complete: Promise<void>;
125
- cached: Promise<void>;
126
- };
127
- export declare function materializeImpl<TTable extends keyof TSchema['tables'] & string, TSchema extends Schema, TReturn, T>(query: Query<TTable, TSchema, TReturn>, delegate: QueryDelegate, factory?: ViewFactory<TTable, TSchema, TReturn, T>, options?: MaterializeOptions): T;
121
+ /**
122
+ * The ID a materialized query is registered with the server under: the hash of
123
+ * its name and args for a named query, of its AST otherwise.
124
+ */
125
+ export declare function queryIDOf({ ast, customQueryID, }: {
126
+ readonly ast: AST;
127
+ readonly customQueryID: CustomQueryID | undefined;
128
+ }): string;
128
129
  //# sourceMappingURL=query-delegate-base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-delegate-base.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/query-delegate-base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-delegate-base.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/query-delegate-base.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
+ import { resolver } from "../../../shared/src/resolver.js";
1
2
  import { hashNameAndArgs } from "../../../zero-protocol/src/query-hash-visitor.js";
2
3
  import { asQueryInternals } from "./query-internals.js";
3
4
  import { hashOfAST } from "../../../zero-protocol/src/query-hash.js";
4
- import { buildPipeline } from "../builder/builder.js";
5
+ import { buildPipeline, groupViewInput } from "../builder/builder.js";
5
6
  import { ArrayView } from "../ivm/array-view.js";
6
7
  import { DeferredInput } from "../ivm/deferred-input.js";
7
8
  import { MemoryStorage } from "../ivm/memory-storage.js";
8
9
  import "./ttl.js";
9
- import { resolver } from "@rocicorp/resolver";
10
10
  //#region ../zql/src/query/query-delegate-base.ts
11
11
  /**
12
12
  * Base class that provides default implementations for common QueryDelegate methods.
@@ -181,11 +181,18 @@ function preloadImpl(query, delegate, options) {
181
181
  cached
182
182
  };
183
183
  }
184
+ /**
185
+ * The ID a materialized query is registered with the server under: the hash of
186
+ * its name and args for a named query, of its AST otherwise.
187
+ */
188
+ function queryIDOf({ ast, customQueryID }) {
189
+ return customQueryID ? hashNameAndArgs(customQueryID.name, customQueryID.args) : hashOfAST(ast);
190
+ }
184
191
  function materializeImpl(query, delegate, factory = arrayViewFactory, options) {
185
192
  let ttl = options?.ttl ?? 3e5;
186
193
  const qi = asQueryInternals(query);
187
194
  const { ast, format, customQueryID } = qi;
188
- const queryID = customQueryID ? hashNameAndArgs(customQueryID.name, customQueryID.args) : hashOfAST(qi.ast);
195
+ const queryID = queryIDOf(qi);
189
196
  const queryCompleteResolver = resolver();
190
197
  const deferPipeline = !delegate.pipelinesReady;
191
198
  let attached = !deferPipeline;
@@ -222,7 +229,7 @@ function materializeImpl(query, delegate, factory = arrayViewFactory, options) {
222
229
  destroyed = true;
223
230
  removePendingAttach?.();
224
231
  removePendingAttach = void 0;
225
- input.destroy();
232
+ viewInput.destroy();
226
233
  removeCommitObserver?.();
227
234
  removeAddedQuery();
228
235
  };
@@ -230,7 +237,8 @@ function materializeImpl(query, delegate, factory = arrayViewFactory, options) {
230
237
  const removeAddedQuery = customQueryID ? delegate.addCustomQuery(ast, customQueryID, ttl, gotCallback) : delegate.addServerQuery(ast, ttl, gotCallback);
231
238
  const deferred = deferPipeline ? newDeferredInput(ast, delegate, queryID) : void 0;
232
239
  const input = deferred ?? buildPipeline(ast, delegate, queryID);
233
- const view = delegate.batchViewUpdates(() => (factory ?? arrayViewFactory)(query, input, format, onDestroy, (cb) => {
240
+ const viewInput = ast.groupBy ? groupViewInput(input, ast, delegate) : input;
241
+ const view = delegate.batchViewUpdates(() => (factory ?? arrayViewFactory)(query, viewInput, format, onDestroy, (cb) => {
234
242
  removeCommitObserver = delegate.onTransactionCommit(cb);
235
243
  }, queryComplete || queryCompleteResolver.promise, updateTTL));
236
244
  if (!deferred) delegate.addMetric("query-materialization-client", performance.now() - t0, queryID);
@@ -295,6 +303,6 @@ function arrayViewFactory(_query, input, format, onDestroy, onTransactionCommit,
295
303
  return v;
296
304
  }
297
305
  //#endregion
298
- export { QueryDelegateBase };
306
+ export { QueryDelegateBase, queryIDOf };
299
307
 
300
308
  //# sourceMappingURL=query-delegate-base.js.map