@rocicorp/zero 1.10.0-canary.21 → 1.10.0-canary.23

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 (334) hide show
  1. package/out/analyze-query/src/bin-analyze.js +1 -1
  2. package/out/analyze-query/src/bin-analyze.js.map +1 -1
  3. package/out/replicache/src/dag/gc.d.ts.map +1 -1
  4. package/out/replicache/src/dag/gc.js +2 -1
  5. package/out/replicache/src/dag/gc.js.map +1 -1
  6. package/out/replicache/src/dag/invalid-ref-count-error.d.ts +12 -0
  7. package/out/replicache/src/dag/invalid-ref-count-error.d.ts.map +1 -0
  8. package/out/replicache/src/dag/invalid-ref-count-error.js +19 -0
  9. package/out/replicache/src/dag/invalid-ref-count-error.js.map +1 -0
  10. package/out/replicache/src/dag/store-impl.d.ts +12 -2
  11. package/out/replicache/src/dag/store-impl.d.ts.map +1 -1
  12. package/out/replicache/src/dag/store-impl.js +22 -8
  13. package/out/replicache/src/dag/store-impl.js.map +1 -1
  14. package/out/replicache/src/kv/expo-sqlite/store.d.ts.map +1 -1
  15. package/out/replicache/src/kv/expo-sqlite/store.js +1 -1
  16. package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
  17. package/out/replicache/src/kv/idb-store-with-mem-fallback.d.ts +15 -5
  18. package/out/replicache/src/kv/idb-store-with-mem-fallback.d.ts.map +1 -1
  19. package/out/replicache/src/kv/idb-store-with-mem-fallback.js +25 -25
  20. package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -1
  21. package/out/replicache/src/kv/idb-store.d.ts +9 -0
  22. package/out/replicache/src/kv/idb-store.d.ts.map +1 -1
  23. package/out/replicache/src/kv/idb-store.js +14 -2
  24. package/out/replicache/src/kv/idb-store.js.map +1 -1
  25. package/out/replicache/src/kv/mem-store.d.ts +1 -0
  26. package/out/replicache/src/kv/mem-store.d.ts.map +1 -1
  27. package/out/replicache/src/kv/mem-store.js +3 -0
  28. package/out/replicache/src/kv/mem-store.js.map +1 -1
  29. package/out/replicache/src/kv/op-sqlite/store.d.ts.map +1 -1
  30. package/out/replicache/src/kv/op-sqlite/store.js +1 -1
  31. package/out/replicache/src/kv/op-sqlite/store.js.map +1 -1
  32. package/out/replicache/src/kv/sqlite-store.d.ts +2 -1
  33. package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
  34. package/out/replicache/src/kv/sqlite-store.js +6 -1
  35. package/out/replicache/src/kv/sqlite-store.js.map +1 -1
  36. package/out/replicache/src/kv/store.d.ts +6 -0
  37. package/out/replicache/src/kv/store.d.ts.map +1 -1
  38. package/out/replicache/src/persist/collect-idb-databases.d.ts +10 -5
  39. package/out/replicache/src/persist/collect-idb-databases.d.ts.map +1 -1
  40. package/out/replicache/src/persist/collect-idb-databases.js +16 -9
  41. package/out/replicache/src/persist/collect-idb-databases.js.map +1 -1
  42. package/out/replicache/src/replicache-impl.d.ts +14 -3
  43. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  44. package/out/replicache/src/replicache-impl.js +104 -9
  45. package/out/replicache/src/replicache-impl.js.map +1 -1
  46. package/out/shared/src/arrays.js +1 -15
  47. package/out/shared/src/arrays.js.map +1 -1
  48. package/out/shared/src/hash.d.ts +1 -0
  49. package/out/shared/src/hash.d.ts.map +1 -1
  50. package/out/shared/src/hash.js +10 -28
  51. package/out/shared/src/hash.js.map +1 -1
  52. package/out/shared/src/iterables.d.ts +2 -0
  53. package/out/shared/src/iterables.d.ts.map +1 -1
  54. package/out/shared/src/iterables.js +18 -1
  55. package/out/shared/src/iterables.js.map +1 -1
  56. package/out/shared/src/json.d.ts.map +1 -1
  57. package/out/shared/src/json.js +2 -2
  58. package/out/shared/src/json.js.map +1 -1
  59. package/out/shared/src/ring-buffer.d.ts +8 -0
  60. package/out/shared/src/ring-buffer.d.ts.map +1 -1
  61. package/out/shared/src/ring-buffer.js +22 -1
  62. package/out/shared/src/ring-buffer.js.map +1 -1
  63. package/out/shared/src/xxhash32.d.ts +36 -0
  64. package/out/shared/src/xxhash32.d.ts.map +1 -0
  65. package/out/shared/src/xxhash32.js +51 -0
  66. package/out/shared/src/xxhash32.js.map +1 -0
  67. package/out/z2s/src/compiler.js +1 -1
  68. package/out/zero/package.js +1 -1
  69. package/out/zero/package.js.map +1 -1
  70. package/out/zero-cache/src/auth/read-authorizer.js +1 -1
  71. package/out/zero-cache/src/config/zero-config.d.ts +8 -0
  72. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  73. package/out/zero-cache/src/config/zero-config.js +28 -1
  74. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  75. package/out/zero-cache/src/custom-queries/transform-query.js +1 -1
  76. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  77. package/out/zero-cache/src/server/change-streamer.js +11 -3
  78. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  79. package/out/zero-cache/src/server/inspector-delegate.d.ts +18 -2
  80. package/out/zero-cache/src/server/inspector-delegate.d.ts.map +1 -1
  81. package/out/zero-cache/src/server/inspector-delegate.js +23 -9
  82. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  83. package/out/zero-cache/src/server/main.d.ts.map +1 -1
  84. package/out/zero-cache/src/server/main.js +8 -1
  85. package/out/zero-cache/src/server/main.js.map +1 -1
  86. package/out/zero-cache/src/server/mutator.js +2 -0
  87. package/out/zero-cache/src/server/mutator.js.map +1 -1
  88. package/out/zero-cache/src/server/reaper.d.ts.map +1 -1
  89. package/out/zero-cache/src/server/reaper.js +2 -0
  90. package/out/zero-cache/src/server/reaper.js.map +1 -1
  91. package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
  92. package/out/zero-cache/src/server/replicator.js +2 -0
  93. package/out/zero-cache/src/server/replicator.js.map +1 -1
  94. package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts.map +1 -1
  95. package/out/zero-cache/src/server/runner/zero-dispatcher.js +3 -0
  96. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  97. package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
  98. package/out/zero-cache/src/server/syncer.js +2 -0
  99. package/out/zero-cache/src/server/syncer.js.map +1 -1
  100. package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
  101. package/out/zero-cache/src/services/analyze.js +3 -2
  102. package/out/zero-cache/src/services/analyze.js.map +1 -1
  103. package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts.map +1 -1
  104. package/out/zero-cache/src/services/change-source/common/backfill-manager.js +14 -1
  105. package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
  106. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.d.ts.map +1 -1
  107. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js +15 -3
  108. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -1
  109. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +1 -1
  110. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +3 -0
  111. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  112. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +3 -1
  113. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  114. package/out/zero-cache/src/services/mutagen/mutagen.d.ts +5 -0
  115. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  116. package/out/zero-cache/src/services/mutagen/mutagen.js +7 -1
  117. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  118. package/out/zero-cache/src/services/mutagen/pusher.js +3 -2
  119. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  120. package/out/zero-cache/src/services/profz.d.ts +7 -0
  121. package/out/zero-cache/src/services/profz.d.ts.map +1 -0
  122. package/out/zero-cache/src/services/profz.js +103 -0
  123. package/out/zero-cache/src/services/profz.js.map +1 -0
  124. package/out/zero-cache/src/services/run-ast.d.ts +12 -0
  125. package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
  126. package/out/zero-cache/src/services/run-ast.js +27 -15
  127. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  128. package/out/zero-cache/src/services/runner.d.ts.map +1 -1
  129. package/out/zero-cache/src/services/runner.js +1 -1
  130. package/out/zero-cache/src/services/runner.js.map +1 -1
  131. package/out/zero-cache/src/services/view-syncer/cvr.d.ts +45 -0
  132. package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
  133. package/out/zero-cache/src/services/view-syncer/cvr.js +133 -1
  134. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  135. package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts +14 -1
  136. package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts.map +1 -1
  137. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +30 -4
  138. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  139. package/out/zero-cache/src/services/view-syncer/hydration-budget.d.ts +33 -0
  140. package/out/zero-cache/src/services/view-syncer/hydration-budget.d.ts.map +1 -0
  141. package/out/zero-cache/src/services/view-syncer/hydration-budget.js +62 -0
  142. package/out/zero-cache/src/services/view-syncer/hydration-budget.js.map +1 -0
  143. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.d.ts +51 -0
  144. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.d.ts.map +1 -0
  145. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js +78 -0
  146. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js.map +1 -0
  147. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts +1 -1
  148. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +1 -1
  149. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +2 -2
  150. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  151. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +2 -1
  152. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  153. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +33 -18
  154. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  155. package/out/zero-cache/src/services/view-syncer/query-covering.d.ts.map +1 -1
  156. package/out/zero-cache/src/services/view-syncer/query-covering.js.map +1 -1
  157. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +4 -1
  158. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
  159. package/out/zero-cache/src/services/view-syncer/snapshotter.js +9 -3
  160. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  161. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +11 -1
  162. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  163. package/out/zero-cache/src/services/view-syncer/view-syncer.js +470 -90
  164. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  165. package/out/zero-cache/src/types/processes.d.ts +32 -0
  166. package/out/zero-cache/src/types/processes.d.ts.map +1 -1
  167. package/out/zero-cache/src/types/processes.js +43 -4
  168. package/out/zero-cache/src/types/processes.js.map +1 -1
  169. package/out/zero-cache/src/types/profiler.d.ts +12 -0
  170. package/out/zero-cache/src/types/profiler.d.ts.map +1 -1
  171. package/out/zero-cache/src/types/profiler.js +46 -1
  172. package/out/zero-cache/src/types/profiler.js.map +1 -1
  173. package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +1 -1
  174. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +21 -16
  175. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  176. package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
  177. package/out/zero-cache/src/workers/syncer.js +10 -1
  178. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  179. package/out/zero-client/src/client/connection-manager.d.ts +20 -0
  180. package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
  181. package/out/zero-client/src/client/connection-manager.js +32 -14
  182. package/out/zero-client/src/client/connection-manager.js.map +1 -1
  183. package/out/zero-client/src/client/connection-status-enum.d.ts +2 -0
  184. package/out/zero-client/src/client/connection-status-enum.d.ts.map +1 -1
  185. package/out/zero-client/src/client/connection-status-enum.js +3 -1
  186. package/out/zero-client/src/client/connection-status-enum.js.map +1 -1
  187. package/out/zero-client/src/client/connection.d.ts +6 -0
  188. package/out/zero-client/src/client/connection.d.ts.map +1 -1
  189. package/out/zero-client/src/client/connection.js +2 -1
  190. package/out/zero-client/src/client/connection.js.map +1 -1
  191. package/out/zero-client/src/client/context.d.ts +22 -12
  192. package/out/zero-client/src/client/context.d.ts.map +1 -1
  193. package/out/zero-client/src/client/context.js +92 -25
  194. package/out/zero-client/src/client/context.js.map +1 -1
  195. package/out/zero-client/src/client/custom.js +2 -2
  196. package/out/zero-client/src/client/custom.js.map +1 -1
  197. package/out/zero-client/src/client/error.js +1 -1
  198. package/out/zero-client/src/client/ivm-branch.d.ts.map +1 -1
  199. package/out/zero-client/src/client/ivm-branch.js +20 -3
  200. package/out/zero-client/src/client/ivm-branch.js.map +1 -1
  201. package/out/zero-client/src/client/mutator-proxy.d.ts.map +1 -1
  202. package/out/zero-client/src/client/mutator-proxy.js +2 -1
  203. package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
  204. package/out/zero-client/src/client/options.d.ts +3 -0
  205. package/out/zero-client/src/client/options.d.ts.map +1 -1
  206. package/out/zero-client/src/client/options.js.map +1 -1
  207. package/out/zero-client/src/client/query-manager.d.ts +2 -0
  208. package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
  209. package/out/zero-client/src/client/query-manager.js +48 -9
  210. package/out/zero-client/src/client/query-manager.js.map +1 -1
  211. package/out/zero-client/src/client/version.js +1 -1
  212. package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
  213. package/out/zero-client/src/client/zero-rep.js +1 -1
  214. package/out/zero-client/src/client/zero-rep.js.map +1 -1
  215. package/out/zero-client/src/client/zero.d.ts +18 -3
  216. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  217. package/out/zero-client/src/client/zero.js +61 -14
  218. package/out/zero-client/src/client/zero.js.map +1 -1
  219. package/out/zero-client/src/types/query-result.d.ts +2 -0
  220. package/out/zero-client/src/types/query-result.d.ts.map +1 -1
  221. package/out/zero-protocol/src/ast.d.ts +64 -1
  222. package/out/zero-protocol/src/ast.d.ts.map +1 -1
  223. package/out/zero-protocol/src/ast.js +223 -51
  224. package/out/zero-protocol/src/ast.js.map +1 -1
  225. package/out/zero-protocol/src/error.d.ts +1 -1
  226. package/out/zero-protocol/src/query-hash-visitor.d.ts +81 -0
  227. package/out/zero-protocol/src/query-hash-visitor.d.ts.map +1 -0
  228. package/out/zero-protocol/src/query-hash-visitor.js +324 -0
  229. package/out/zero-protocol/src/query-hash-visitor.js.map +1 -0
  230. package/out/zero-protocol/src/query-hash.d.ts +7 -2
  231. package/out/zero-protocol/src/query-hash.d.ts.map +1 -1
  232. package/out/zero-protocol/src/query-hash.js +12 -9
  233. package/out/zero-protocol/src/query-hash.js.map +1 -1
  234. package/out/zero-react/src/use-query.d.ts +5 -4
  235. package/out/zero-react/src/use-query.d.ts.map +1 -1
  236. package/out/zero-react/src/use-query.js +86 -9
  237. package/out/zero-react/src/use-query.js.map +1 -1
  238. package/out/zero-solid/src/solid-view.d.ts +17 -0
  239. package/out/zero-solid/src/solid-view.d.ts.map +1 -1
  240. package/out/zero-solid/src/solid-view.js +39 -1
  241. package/out/zero-solid/src/solid-view.js.map +1 -1
  242. package/out/zero-solid/src/use-query.js +5 -3
  243. package/out/zero-solid/src/use-query.js.map +1 -1
  244. package/out/zql/src/builder/debug-delegate.d.ts +6 -1
  245. package/out/zql/src/builder/debug-delegate.d.ts.map +1 -1
  246. package/out/zql/src/builder/debug-delegate.js +14 -2
  247. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  248. package/out/zql/src/ivm/array-view.d.ts +29 -0
  249. package/out/zql/src/ivm/array-view.d.ts.map +1 -1
  250. package/out/zql/src/ivm/array-view.js +58 -9
  251. package/out/zql/src/ivm/array-view.js.map +1 -1
  252. package/out/zql/src/ivm/cap.d.ts.map +1 -1
  253. package/out/zql/src/ivm/cap.js +5 -3
  254. package/out/zql/src/ivm/cap.js.map +1 -1
  255. package/out/zql/src/ivm/deferred-input.d.ts.map +1 -1
  256. package/out/zql/src/ivm/deferred-input.js +3 -2
  257. package/out/zql/src/ivm/deferred-input.js.map +1 -1
  258. package/out/zql/src/ivm/exists.d.ts +1 -1
  259. package/out/zql/src/ivm/exists.d.ts.map +1 -1
  260. package/out/zql/src/ivm/exists.js +1 -1
  261. package/out/zql/src/ivm/exists.js.map +1 -1
  262. package/out/zql/src/ivm/fan-in.d.ts +2 -2
  263. package/out/zql/src/ivm/fan-in.d.ts.map +1 -1
  264. package/out/zql/src/ivm/fan-in.js +6 -5
  265. package/out/zql/src/ivm/fan-in.js.map +1 -1
  266. package/out/zql/src/ivm/fan-out.d.ts +2 -2
  267. package/out/zql/src/ivm/fan-out.d.ts.map +1 -1
  268. package/out/zql/src/ivm/fan-out.js.map +1 -1
  269. package/out/zql/src/ivm/filter-operators.d.ts +4 -4
  270. package/out/zql/src/ivm/filter-operators.d.ts.map +1 -1
  271. package/out/zql/src/ivm/filter-operators.js +10 -8
  272. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  273. package/out/zql/src/ivm/filter.d.ts +2 -2
  274. package/out/zql/src/ivm/filter.d.ts.map +1 -1
  275. package/out/zql/src/ivm/filter.js +7 -4
  276. package/out/zql/src/ivm/filter.js.map +1 -1
  277. package/out/zql/src/ivm/flipped-join.js +2 -2
  278. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  279. package/out/zql/src/ivm/maybe-split-and-push-edit-change.d.ts +1 -1
  280. package/out/zql/src/ivm/maybe-split-and-push-edit-change.d.ts.map +1 -1
  281. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +6 -4
  282. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
  283. package/out/zql/src/ivm/memory-source.d.ts +15 -3
  284. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  285. package/out/zql/src/ivm/memory-source.js +35 -9
  286. package/out/zql/src/ivm/memory-source.js.map +1 -1
  287. package/out/zql/src/ivm/take.d.ts.map +1 -1
  288. package/out/zql/src/ivm/take.js +3 -4
  289. package/out/zql/src/ivm/take.js.map +1 -1
  290. package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
  291. package/out/zql/src/ivm/union-fan-in.js +9 -7
  292. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  293. package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
  294. package/out/zql/src/ivm/view-apply-change.js +3 -3
  295. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  296. package/out/zql/src/ivm/view.d.ts +15 -0
  297. package/out/zql/src/ivm/view.d.ts.map +1 -1
  298. package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -1
  299. package/out/zql/src/mutate/mutator-registry.js +2 -2
  300. package/out/zql/src/mutate/mutator-registry.js.map +1 -1
  301. package/out/zql/src/query/query-delegate-base.d.ts +4 -2
  302. package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
  303. package/out/zql/src/query/query-delegate-base.js +69 -36
  304. package/out/zql/src/query/query-delegate-base.js.map +1 -1
  305. package/out/zql/src/query/query-delegate.d.ts +33 -6
  306. package/out/zql/src/query/query-delegate.d.ts.map +1 -1
  307. package/out/zql/src/query/query-impl.d.ts +25 -14
  308. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  309. package/out/zql/src/query/query-impl.js +414 -94
  310. package/out/zql/src/query/query-impl.js.map +1 -1
  311. package/out/zql/src/query/query-internals.d.ts +21 -11
  312. package/out/zql/src/query/query-internals.d.ts.map +1 -1
  313. package/out/zql/src/query/query-internals.js.map +1 -1
  314. package/out/zql/src/query/query-transitions.d.ts +171 -0
  315. package/out/zql/src/query/query-transitions.d.ts.map +1 -0
  316. package/out/zql/src/query/query-transitions.js +207 -0
  317. package/out/zql/src/query/query-transitions.js.map +1 -0
  318. package/out/zql/src/query/query.d.ts +11 -2
  319. package/out/zql/src/query/query.d.ts.map +1 -1
  320. package/out/zql/src/query/runnable-query-impl.d.ts +3 -2
  321. package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
  322. package/out/zql/src/query/runnable-query-impl.js +23 -2
  323. package/out/zql/src/query/runnable-query-impl.js.map +1 -1
  324. package/out/zql/src/query/typed-view.d.ts +1 -1
  325. package/out/zql/src/query/typed-view.d.ts.map +1 -1
  326. package/out/zqlite/src/db.d.ts +9 -1
  327. package/out/zqlite/src/db.d.ts.map +1 -1
  328. package/out/zqlite/src/db.js +8 -2
  329. package/out/zqlite/src/db.js.map +1 -1
  330. package/out/zqlite/src/table-source.d.ts +1 -0
  331. package/out/zqlite/src/table-source.d.ts.map +1 -1
  332. package/out/zqlite/src/table-source.js +10 -5
  333. package/out/zqlite/src/table-source.js.map +1 -1
  334. package/package.json +1 -1
@@ -0,0 +1,207 @@
1
+ import { deepEqual } from "../../../shared/src/json.js";
2
+ /** How large the weak map must get before its first sweep. */
3
+ var SWEEP_INITIAL = 64;
4
+ /** The transitions out of one node. */
5
+ var Transitions = class {
6
+ #firstKey;
7
+ #firstValue;
8
+ #firstDelta;
9
+ #first;
10
+ #bounded;
11
+ #rest;
12
+ #sweepAt = SWEEP_INITIAL;
13
+ #restSize = 0;
14
+ lookupBounded(key) {
15
+ return this.#bounded?.get(key);
16
+ }
17
+ /**
18
+ * Records a transition whose key space is finite and schema-derived — the base
19
+ * sub-query handed to a `related`/`exists` callback, keyed by relationship
20
+ * name.
21
+ *
22
+ * These are held strongly. Retention is bounded by the number of relationships
23
+ * on the table, so it cannot grow with what an app queries for, and in exchange
24
+ * a relationship traversal allocates no `WeakRef`. Anything keyed by a *value*
25
+ * — a row id, a search string, a limit — must not come through here.
26
+ */
27
+ storeBounded(key, value) {
28
+ (this.#bounded ??= /* @__PURE__ */ new Map()).set(key, value);
29
+ }
30
+ lookup(key, value, delta) {
31
+ if (this.#firstKey === key && this.#firstValue === value && deepEqual(this.#firstDelta, delta)) return this.#first;
32
+ const byValue = this.#rest?.get(key);
33
+ if (byValue === void 0) return;
34
+ const bucket = byValue.get(value);
35
+ if (bucket === void 0) return;
36
+ if (!(bucket instanceof Set)) {
37
+ const found = bucket.ref.deref();
38
+ if (found === void 0) {
39
+ byValue.delete(value);
40
+ this.#restSize--;
41
+ return;
42
+ }
43
+ return deepEqual(bucket.delta, delta) ? found : void 0;
44
+ }
45
+ for (const entry of bucket) {
46
+ const found = entry.ref.deref();
47
+ if (found === void 0) {
48
+ bucket.delete(entry);
49
+ this.#restSize--;
50
+ continue;
51
+ }
52
+ if (deepEqual(entry.delta, delta)) return found;
53
+ }
54
+ if (bucket.size === 0) byValue.delete(value);
55
+ }
56
+ store(key, value, delta, node) {
57
+ if (this.#firstKey === void 0) {
58
+ this.#firstKey = key;
59
+ this.#firstValue = value;
60
+ this.#firstDelta = delta;
61
+ this.#first = node;
62
+ return;
63
+ }
64
+ const rest = this.#rest ??= /* @__PURE__ */ new Map();
65
+ let byValue = rest.get(key);
66
+ if (byValue === void 0) {
67
+ byValue = /* @__PURE__ */ new Map();
68
+ rest.set(key, byValue);
69
+ }
70
+ const entry = {
71
+ delta,
72
+ ref: new WeakRef(node)
73
+ };
74
+ const bucket = byValue.get(value);
75
+ if (bucket === void 0) byValue.set(value, entry);
76
+ else if (!(bucket instanceof Set)) byValue.set(value, new Set([bucket, entry]));
77
+ else {
78
+ if (bucket.size >= 64) return;
79
+ bucket.add(entry);
80
+ }
81
+ this.#restSize++;
82
+ this.#maybeSweep(rest);
83
+ }
84
+ /**
85
+ * Re-points the transition that produced `from` at `to`, so the next lookup
86
+ * along that path yields `to` instead. This is how {@linkcode HashIndex}
87
+ * converges two paths on one node: `from` keeps its identity, since it has
88
+ * already been handed out, and its path is redirected for the rebuilds that
89
+ * follow.
90
+ *
91
+ * Scans rather than taking a key. This runs once per redirected path, so a
92
+ * walk here is cheaper than the fields every node would need to carry to
93
+ * name its own transition.
94
+ */
95
+ replace(from, to) {
96
+ if (this.#first === from) {
97
+ this.#first = to;
98
+ return true;
99
+ }
100
+ const rest = this.#rest;
101
+ if (rest === void 0) return false;
102
+ for (const byValue of rest.values()) for (const [value, bucket] of byValue) {
103
+ if (!(bucket instanceof Set)) {
104
+ if (bucket.ref.deref() === from) {
105
+ byValue.set(value, {
106
+ delta: bucket.delta,
107
+ ref: new WeakRef(to)
108
+ });
109
+ return true;
110
+ }
111
+ continue;
112
+ }
113
+ for (const entry of bucket) if (entry.ref.deref() === from) {
114
+ bucket.delete(entry);
115
+ bucket.add({
116
+ delta: entry.delta,
117
+ ref: new WeakRef(to)
118
+ });
119
+ return true;
120
+ }
121
+ }
122
+ return false;
123
+ }
124
+ /**
125
+ * Drops entries for collected values, if the map has grown enough to be worth
126
+ * walking.
127
+ *
128
+ * A lookup already prunes whatever it walks past, which covers every key that
129
+ * is asked for again. This is for the key that is not: a miss on a fresh key
130
+ * returns without touching any existing entry, so nothing would ever notice
131
+ * that those had died. Doubling the threshold off whatever survives keeps this
132
+ * amortized O(1) per insert whether or not there was anything to reclaim, and
133
+ * it is self-limiting — only a node that keeps taking inserts can keep
134
+ * accumulating, and taking inserts is what triggers the sweep.
135
+ */
136
+ #maybeSweep(rest) {
137
+ if (this.#restSize < this.#sweepAt) return;
138
+ let live = 0;
139
+ for (const [key, byValue] of rest) {
140
+ for (const [value, bucket] of byValue) {
141
+ if (!(bucket instanceof Set)) {
142
+ if (bucket.ref.deref() === void 0) byValue.delete(value);
143
+ else live++;
144
+ continue;
145
+ }
146
+ for (const entry of bucket) if (entry.ref.deref() === void 0) bucket.delete(entry);
147
+ else live++;
148
+ if (bucket.size === 0) byValue.delete(value);
149
+ }
150
+ if (byValue.size === 0) rest.delete(key);
151
+ }
152
+ this.#restSize = live;
153
+ this.#sweepAt = Math.max(SWEEP_INITIAL, live * 2);
154
+ }
155
+ };
156
+ /**
157
+ * The second level of interning: nodes keyed by *content* rather than by the
158
+ * path that built them.
159
+ *
160
+ * The transition tree cannot see that `q.where(a).where(b)` and
161
+ * `q.where(b).where(a)` are the same query. `normalizeAST` sorts conditions
162
+ * and `related` entries, so the two build byte-identical ASTs, but they are
163
+ * different paths and so different nodes. This index closes that gap, keyed by
164
+ * the query's hash.
165
+ *
166
+ * It is consulted when a query is *hashed*, not when it is built. Hashing on
167
+ * every tree miss would make a cold chain pay for a hash per node, where the
168
+ * uninterned code paid for one at the end, if at all -- and server-side queries
169
+ * are built cold, once, per request. The consumers that key by hash already
170
+ * hash the queries they care about, so doing the work there costs one map
171
+ * lookup on top of a hash that was being computed anyway, and nothing at all
172
+ * for a query nobody hashes.
173
+ *
174
+ * On a hit the query being hashed keeps its identity, since it has already
175
+ * been handed out. Its *transition* is re-pointed at the existing node instead
176
+ * (see {@linkcode Transitions.replace}), so the next rebuild along that path
177
+ * yields the shared instance. As with the tree this is a cache: the rebuild
178
+ * after a redirect is what converges, not the call that found the duplicate.
179
+ *
180
+ * One index per root, which is what scopes it. Two roots never share an index,
181
+ * so queries against different schemas or different delegates -- neither of
182
+ * which the hash covers -- can never be conflated. Entries are weak: a cleared
183
+ * one is dropped by the lookup that finds it, or by a sweep once the map has
184
+ * doubled since the last one.
185
+ */
186
+ var HashIndex = class {
187
+ #byHash = /* @__PURE__ */ new Map();
188
+ #sweepAt = SWEEP_INITIAL;
189
+ get(hash) {
190
+ const ref = this.#byHash.get(hash);
191
+ if (ref === void 0) return;
192
+ const node = ref.deref();
193
+ if (node === void 0) this.#byHash.delete(hash);
194
+ return node;
195
+ }
196
+ set(hash, node) {
197
+ const byHash = this.#byHash;
198
+ byHash.set(hash, new WeakRef(node));
199
+ if (byHash.size < this.#sweepAt) return;
200
+ for (const [h, ref] of byHash) if (ref.deref() === void 0) byHash.delete(h);
201
+ this.#sweepAt = Math.max(SWEEP_INITIAL, byHash.size * 2);
202
+ }
203
+ };
204
+ //#endregion
205
+ export { HashIndex, Transitions };
206
+
207
+ //# sourceMappingURL=query-transitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-transitions.js","names":["#bounded","#firstKey","#firstValue","#firstDelta","#first","#rest","#restSize","#maybeSweep","#sweepAt","#byHash"],"sources":["../../../../../zql/src/query/query-transitions.ts"],"sourcesContent":["import {deepEqual, type ReadonlyJSONValue} from '../../../shared/src/json.ts';\n\n/**\n * A transition tree for interning immutable builder objects, modelled on V8's\n * hidden-class transitions.\n *\n * Each node keeps a map from a *transition* (an operation plus its arguments) to\n * the node that operation produces. Applying the same operation to the same node\n * twice therefore yields the same object both times.\n *\n * ## Why not hash?\n *\n * Hashing the resulting AST would work but is far too expensive to do on every\n * builder call. Instead a transition is identified by three things, in\n * decreasing order of how cheap they are to compare:\n *\n * 1. `key` — a short string naming the operation. Callers are expected to hand\n * in a *stable* string rather than build one per call; see below.\n * 2. `value` — the operation's varying argument, when it is a primitive, used\n * directly as a `Map` key.\n * 3. `delta` — anything left over, compared with {@linkcode deepEqual}.\n *\n * Splitting 1 from 2 is what makes this fast. Folding the value into the key\n * instead means building a fresh string on every call, and a fresh string has to\n * be hashed from scratch before a `Map` can look it up: measured at ~148ns,\n * against ~10ns to look up the caller's own string, whose hash V8 has already\n * cached on the string object. That difference is larger than everything else a\n * transition does.\n *\n * Comparing only the delta is sound because the parent node is already canonical:\n * two children of the same parent are equal exactly when the operations that\n * produced them are equal. We never deep-compare a whole AST.\n *\n * ## Liveness\n *\n * Children point back at their parents strongly (see `QueryImpl`), so holding a\n * query holds its whole ancestor spine and re-deriving it from the root gives\n * the same object back. The other direction has to be weak, or an interned root\n * — which lives as long as its schema — would retain every query ever derived\n * from it.\n *\n * Weak is expensive, though: `new WeakRef` costs on the order of a hundred\n * nanoseconds, more than everything else a transition does put together, and it\n * adds GC work later. So the *first* transition out of a node is held strongly\n * instead, in fields on this object, with no `WeakRef` at all.\n *\n * That is safe because strong first-children form a path, not a tree: each node\n * pins at most one child, which pins at most one of its own. The retained set\n * per root is bounded by the depth of a builder chain — a handful of queries —\n * rather than by how many distinct queries an app builds. Everything past the\n * first child is weak, so the unbounded cases (a search box typing into\n * `where:title:=:s<text>`, a row id per list item) stay collectible.\n *\n * It is also where the wins are: a chain like `q.where(…).orderBy(…).limit(…)`\n * gives every node exactly one child, so building it allocates no `WeakRef`s and\n * looks up through a field compare rather than a hash lookup.\n *\n * What a collected child leaves behind is a cleared `WeakRef` and its map key. A\n * lookup drops those as it walks, which covers every key that is asked for\n * again. A key that is *never* asked for again is handled by the sweep.\n *\n * ## Best effort\n *\n * Interning is a cache, not a guarantee: a missed lookup only costs an extra\n * object. See {@linkcode MAX_SCAN} for the one case where we deliberately give\n * up.\n *\n * ## Identity vs. hash\n *\n * Identity implies an equal query hash, but the tree alone does not give the\n * converse. `normalizeAST` sorts `related` and `and`/`or` conditions, so\n * `q.where(a).where(b)` and `q.where(b).where(a)` hash the same while being\n * distinct paths, and so distinct nodes. {@linkcode HashIndex} is the second\n * level that folds those together once they have been hashed. Callers that\n * need the normalizing behavior for a query that may not have been must keep\n * using the hash.\n */\n\n/**\n * The delta identifying a transition, or `undefined` when the key already\n * determines the result on its own.\n */\nexport type Delta = ReadonlyJSONValue | undefined;\n\ntype Entry<T extends object> = {\n readonly delta: Delta;\n readonly ref: WeakRef<T>;\n};\n\n/**\n * A bucket holds a bare entry in the common single-entry case and is promoted to\n * a `Set` only on collision, so the usual transition allocates no container.\n *\n * A `Set` rather than an array: deleting during iteration is well defined, so a\n * lookup prunes collected entries and stops at its match in a single pass, and\n * removing an entry is O(1) rather than a scan.\n */\ntype Bucket<T extends object> = Entry<T> | Set<Entry<T>>;\n\n/** The varying argument of a transition, when it is one. */\nexport type TransitionValue = string | number | boolean | null | undefined;\n\n/**\n * The longest `deepEqual` scan we are willing to do on a lookup.\n *\n * This is a *latency* bound, not a memory bound — memory is already handled,\n * since entries are weak and are pruned both by the sweep and by any lookup that\n * walks past them, so a bucket only ever holds children that are still alive.\n *\n * Note what happens at the limit: we stop *storing*, we do not evict. Evicting\n * would de-intern objects that are still in use, and on a sequential sweep of a\n * live set larger than the limit it drives the hit rate to zero — each lookup\n * throws out the entry the next one needs. Refusing to store instead leaves\n * every already-shared sibling shared and degrades the surplus to the old\n * behavior of a fresh instance per call.\n *\n * Buckets should rarely get near this. Keys carry the discriminating value\n * wherever it is cheap to, and a key that carries it is *exact*, so it costs no\n * comparison at all: every simple comparison goes that way, and so does a\n * one-hop `exists`, via its sub-query's identity. What is left sharing a bucket\n * is two-hop `exists`, the `and`/`or` trees an expression factory builds, and\n * relationships whose callback varies.\n */\nexport const MAX_SCAN = 64;\n\n/** How large the weak map must get before its first sweep. */\nconst SWEEP_INITIAL = 64;\n\n/** The transitions out of one node. */\nexport class Transitions<T extends object> {\n // The first transition, held strongly and in place. See \"Liveness\" above.\n #firstKey: string | undefined;\n #firstValue: TransitionValue;\n #firstDelta: Delta;\n #first: T | undefined;\n\n // Transitions whose key space is finite and comes from the schema rather than\n // from user data, held strongly. See `storeBounded`.\n #bounded: Map<string, T> | undefined;\n\n // Everything else, weakly. Allocated only if there is a second. Nested so the\n // value stays a `Map` key of its own rather than part of the string.\n #rest: Map<string, Map<TransitionValue, Bucket<T>>> | undefined;\n #sweepAt = SWEEP_INITIAL;\n #restSize = 0;\n\n lookupBounded(key: string): T | undefined {\n return this.#bounded?.get(key);\n }\n\n /**\n * Records a transition whose key space is finite and schema-derived — the base\n * sub-query handed to a `related`/`exists` callback, keyed by relationship\n * name.\n *\n * These are held strongly. Retention is bounded by the number of relationships\n * on the table, so it cannot grow with what an app queries for, and in exchange\n * a relationship traversal allocates no `WeakRef`. Anything keyed by a *value*\n * — a row id, a search string, a limit — must not come through here.\n */\n storeBounded(key: string, value: T): void {\n (this.#bounded ??= new Map()).set(key, value);\n }\n\n lookup(key: string, value: TransitionValue, delta: Delta): T | undefined {\n if (\n this.#firstKey === key &&\n this.#firstValue === value &&\n deepEqual(this.#firstDelta, delta)\n ) {\n return this.#first;\n }\n const byValue = this.#rest?.get(key);\n if (byValue === undefined) {\n return undefined;\n }\n const bucket = byValue.get(value);\n if (bucket === undefined) {\n return undefined;\n }\n\n if (!(bucket instanceof Set)) {\n const found = bucket.ref.deref();\n if (found === undefined) {\n byValue.delete(value);\n this.#restSize--;\n return undefined;\n }\n // deepEqual short-circuits on reference equality, which is the fast path\n // we rely on for deltas built out of already-interned sub-queries.\n return deepEqual(bucket.delta, delta) ? found : undefined;\n }\n\n // One pass: drop what has been collected, stop at the match. Deleting from a\n // Set while iterating it is well defined — the iterator simply skips what is\n // gone — so this stays O(n) with no compaction step, and returns early on a\n // hit rather than walking the whole bucket first.\n for (const entry of bucket) {\n const found = entry.ref.deref();\n if (found === undefined) {\n bucket.delete(entry);\n this.#restSize--;\n continue;\n }\n if (deepEqual(entry.delta, delta)) {\n return found;\n }\n }\n if (bucket.size === 0) {\n byValue.delete(value);\n }\n return undefined;\n }\n\n store(key: string, value: TransitionValue, delta: Delta, node: T): void {\n if (this.#firstKey === undefined) {\n this.#firstKey = key;\n this.#firstValue = value;\n this.#firstDelta = delta;\n this.#first = node;\n return;\n }\n\n const rest = (this.#rest ??= new Map());\n let byValue = rest.get(key);\n if (byValue === undefined) {\n byValue = new Map();\n rest.set(key, byValue);\n }\n\n const entry: Entry<T> = {delta, ref: new WeakRef(node)};\n const bucket = byValue.get(value);\n\n if (bucket === undefined) {\n byValue.set(value, entry);\n } else if (!(bucket instanceof Set)) {\n byValue.set(value, new Set([bucket, entry]));\n } else {\n if (bucket.size >= MAX_SCAN) {\n // Leave the bucket alone; see MAX_SCAN. `node` is simply not shared.\n // A store only follows a failed lookup, which has just pruned, so this\n // is measured against entries that are actually still alive.\n return;\n }\n bucket.add(entry);\n }\n this.#restSize++;\n this.#maybeSweep(rest);\n }\n\n /**\n * Re-points the transition that produced `from` at `to`, so the next lookup\n * along that path yields `to` instead. This is how {@linkcode HashIndex}\n * converges two paths on one node: `from` keeps its identity, since it has\n * already been handed out, and its path is redirected for the rebuilds that\n * follow.\n *\n * Scans rather than taking a key. This runs once per redirected path, so a\n * walk here is cheaper than the fields every node would need to carry to\n * name its own transition.\n */\n replace(from: T, to: T): boolean {\n if (this.#first === from) {\n this.#first = to;\n return true;\n }\n const rest = this.#rest;\n if (rest === undefined) {\n return false;\n }\n for (const byValue of rest.values()) {\n for (const [value, bucket] of byValue) {\n if (!(bucket instanceof Set)) {\n if (bucket.ref.deref() === from) {\n byValue.set(value, {delta: bucket.delta, ref: new WeakRef(to)});\n return true;\n }\n continue;\n }\n for (const entry of bucket) {\n if (entry.ref.deref() === from) {\n bucket.delete(entry);\n bucket.add({delta: entry.delta, ref: new WeakRef(to)});\n return true;\n }\n }\n }\n }\n return false;\n }\n\n /**\n * Drops entries for collected values, if the map has grown enough to be worth\n * walking.\n *\n * A lookup already prunes whatever it walks past, which covers every key that\n * is asked for again. This is for the key that is not: a miss on a fresh key\n * returns without touching any existing entry, so nothing would ever notice\n * that those had died. Doubling the threshold off whatever survives keeps this\n * amortized O(1) per insert whether or not there was anything to reclaim, and\n * it is self-limiting — only a node that keeps taking inserts can keep\n * accumulating, and taking inserts is what triggers the sweep.\n */\n #maybeSweep(rest: Map<string, Map<TransitionValue, Bucket<T>>>): void {\n if (this.#restSize < this.#sweepAt) {\n return;\n }\n let live = 0;\n for (const [key, byValue] of rest) {\n for (const [value, bucket] of byValue) {\n if (!(bucket instanceof Set)) {\n if (bucket.ref.deref() === undefined) {\n byValue.delete(value);\n } else {\n live++;\n }\n continue;\n }\n for (const entry of bucket) {\n if (entry.ref.deref() === undefined) {\n bucket.delete(entry);\n } else {\n live++;\n }\n }\n if (bucket.size === 0) {\n byValue.delete(value);\n }\n }\n if (byValue.size === 0) {\n rest.delete(key);\n }\n }\n this.#restSize = live;\n this.#sweepAt = Math.max(SWEEP_INITIAL, live * 2);\n }\n}\n\n/**\n * The second level of interning: nodes keyed by *content* rather than by the\n * path that built them.\n *\n * The transition tree cannot see that `q.where(a).where(b)` and\n * `q.where(b).where(a)` are the same query. `normalizeAST` sorts conditions\n * and `related` entries, so the two build byte-identical ASTs, but they are\n * different paths and so different nodes. This index closes that gap, keyed by\n * the query's hash.\n *\n * It is consulted when a query is *hashed*, not when it is built. Hashing on\n * every tree miss would make a cold chain pay for a hash per node, where the\n * uninterned code paid for one at the end, if at all -- and server-side queries\n * are built cold, once, per request. The consumers that key by hash already\n * hash the queries they care about, so doing the work there costs one map\n * lookup on top of a hash that was being computed anyway, and nothing at all\n * for a query nobody hashes.\n *\n * On a hit the query being hashed keeps its identity, since it has already\n * been handed out. Its *transition* is re-pointed at the existing node instead\n * (see {@linkcode Transitions.replace}), so the next rebuild along that path\n * yields the shared instance. As with the tree this is a cache: the rebuild\n * after a redirect is what converges, not the call that found the duplicate.\n *\n * One index per root, which is what scopes it. Two roots never share an index,\n * so queries against different schemas or different delegates -- neither of\n * which the hash covers -- can never be conflated. Entries are weak: a cleared\n * one is dropped by the lookup that finds it, or by a sweep once the map has\n * doubled since the last one.\n */\nexport class HashIndex<T extends object> {\n readonly #byHash = new Map<string, WeakRef<T>>();\n #sweepAt = SWEEP_INITIAL;\n\n get(hash: string): T | undefined {\n const ref = this.#byHash.get(hash);\n if (ref === undefined) {\n return undefined;\n }\n const node = ref.deref();\n if (node === undefined) {\n this.#byHash.delete(hash);\n }\n return node;\n }\n\n set(hash: string, node: T): void {\n const byHash = this.#byHash;\n byHash.set(hash, new WeakRef(node));\n if (byHash.size < this.#sweepAt) {\n return;\n }\n for (const [h, ref] of byHash) {\n if (ref.deref() === undefined) {\n byHash.delete(h);\n }\n }\n this.#sweepAt = Math.max(SWEEP_INITIAL, byHash.size * 2);\n }\n}\n"],"mappings":"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"}
@@ -204,6 +204,7 @@ export interface Query<TTable extends keyof TSchema['tables'] & string, TSchema
204
204
  preload(options?: PreloadOptions): {
205
205
  cleanup: () => void;
206
206
  complete: Promise<void>;
207
+ cached: Promise<void>;
207
208
  };
208
209
  /**
209
210
  * @deprecated Use {@linkcode MaterializeOptions} with {@linkcode zero.materialize} instead.
@@ -234,7 +235,15 @@ export type HumanReadableRecursive<T> = undefined extends T ? ExpandRecursive<T>
234
235
  * The kind of results we want to wait for when using {@linkcode run} on {@linkcode Query}.
235
236
  *
236
237
  * `unknown` means we don't want to wait for the server to return results. The result is a
237
- * snapshot of the data at the time the query was run.
238
+ * snapshot of the data at the time the query was run. It never waits: while the client is
239
+ * still starting up (its local data is being loaded and the queries registered so far are
240
+ * being hydrated) that snapshot is empty, even when data from a previous session is stored
241
+ * locally. Use `cached` or `complete` when the call has to wait for data.
242
+ *
243
+ * `cached` means we want a result the server has confirmed, but one confirmed by a previous
244
+ * connection is fine: it resolves as soon as the result is `cached` or `complete`. Use it
245
+ * on the launch path when the client may be offline and the store holds last session's
246
+ * complete result for this query. If nothing is cached it waits like `complete`.
238
247
  *
239
248
  * `complete` means we want to ensure that we have the latest result from the server. The
240
249
  * result is a complete and up-to-date view of the data. In some cases this means that we
@@ -247,7 +256,7 @@ export type HumanReadableRecursive<T> = undefined extends T ? ExpandRecursive<T>
247
256
  * time to keep the rows associated with this query after the promise has resolved.
248
257
  */
249
258
  export type RunOptions = {
250
- type: 'unknown' | 'complete';
259
+ type: 'unknown' | 'cached' | 'complete';
251
260
  ttl?: TTL | undefined;
252
261
  };
253
262
  export declare const DEFAULT_RUN_OPTIONS_UNKNOWN: {
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/query.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AST, System } from '../../../zero-protocol/src/ast.ts';
1
+ import { type NormalizedAST, type System } from '../../../zero-protocol/src/ast.ts';
2
2
  import type { Schema } from '../../../zero-types/src/schema.ts';
3
3
  import type { Format, ViewFactory } from '../ivm/view.ts';
4
4
  import type { CustomQueryID } from './named.ts';
@@ -10,11 +10,12 @@ import type { TypedView } from './typed-view.ts';
10
10
  export declare function newRunnableQuery<TTable extends keyof TSchema['tables'] & string, TSchema extends Schema>(delegate: QueryDelegate, schema: TSchema, table: TTable): Query<TTable, TSchema>;
11
11
  export declare class RunnableQueryImpl<TTable extends keyof TSchema['tables'] & string, TSchema extends Schema, TReturn = PullRow<TTable, TSchema>> extends QueryImpl<TTable, TSchema, TReturn> implements Query<TTable, TSchema, TReturn> {
12
12
  #private;
13
- constructor(delegate: QueryDelegate, schema: TSchema, tableName: TTable, ast?: AST, format?: Format, system?: System, customQueryID?: CustomQueryID, currentJunction?: string);
13
+ constructor(delegate: QueryDelegate, schema: TSchema, tableName: TTable, ast?: NormalizedAST, format?: Format, system?: System, customQueryID?: CustomQueryID, currentJunction?: string);
14
14
  run(options?: RunOptions): Promise<HumanReadable<TReturn>>;
15
15
  preload(options?: PreloadOptions): {
16
16
  cleanup: () => void;
17
17
  complete: Promise<void>;
18
+ cached: Promise<void>;
18
19
  };
19
20
  materialize(ttl?: TTL): TypedView<HumanReadable<TReturn>>;
20
21
  materialize<T>(factory: ViewFactory<TTable, TSchema, TReturn, T>, ttl?: TTL): T;
@@ -1 +1 @@
1
- {"version":3,"file":"runnable-query-impl.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/runnable-query-impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,GAAG,EAAE,MAAM,EAAC,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAE9D,OAAO,KAAK,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EACV,aAAa,EAEb,cAAc,EACd,OAAO,EACP,KAAK,EACL,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE/C,wBAAgB,gBAAgB,CAC9B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,EAC/C,OAAO,SAAS,MAAM,EAEtB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CASxB;AAED,qBAAa,iBAAiB,CAC5B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,EAC/C,OAAO,SAAS,MAAM,EACtB,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAElC,SAAQ,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAC1C,YAAW,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;;gBAKxC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,GAAwB,EAC7B,MAAM,GAAE,MAAsB,EAC9B,MAAM,GAAE,MAAiB,EACzB,aAAa,CAAC,EAAE,aAAa,EAC7B,eAAe,CAAC,EAAE,MAAM;IAyBjB,GAAG,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAI1D,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG;QAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KACzB;IAIQ,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzD,WAAW,CAAC,CAAC,EACpB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EACjD,GAAG,CAAC,EAAE,GAAG,GACR,CAAC;CAkBL"}
1
+ {"version":3,"file":"runnable-query-impl.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/runnable-query-impl.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,MAAM,EACZ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAE9D,OAAO,KAAK,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EACV,aAAa,EAEb,cAAc,EACd,OAAO,EACP,KAAK,EACL,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAa/C,wBAAgB,gBAAgB,CAC9B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,EAC/C,OAAO,SAAS,MAAM,EAEtB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CA2BxB;AAED,qBAAa,iBAAiB,CAC5B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,EAC/C,OAAO,SAAS,MAAM,EACtB,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAElC,SAAQ,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAC1C,YAAW,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;;gBAKxC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,aAAmC,EACxC,MAAM,GAAE,MAAsB,EAC9B,MAAM,GAAE,MAAiB,EACzB,aAAa,CAAC,EAAE,aAAa,EAC7B,eAAe,CAAC,EAAE,MAAM;IAyBjB,GAAG,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAU1D,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG;QAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KACvB;IAIQ,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzD,WAAW,CAAC,CAAC,EACpB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EACjD,GAAG,CAAC,EAAE,GAAG,GACR,CAAC;CAsBL"}
@@ -1,12 +1,33 @@
1
+ import { tableAST } from "../../../zero-protocol/src/ast.js";
1
2
  import { defaultFormat } from "../../../zero-types/src/format.js";
2
3
  import { QueryImpl } from "./query-impl.js";
3
4
  //#region ../zql/src/query/runnable-query-impl.ts
5
+ /**
6
+ * Runnable roots are interned per delegate *and* schema -- a query is only
7
+ * interchangeable with another if it would run against the same delegate. See
8
+ * `query-transitions.ts` for why roots need to be shared at all.
9
+ */
10
+ var rootsByDelegate = /* @__PURE__ */ new WeakMap();
4
11
  function newRunnableQuery(delegate, schema, table) {
5
- return new RunnableQueryImpl(delegate, schema, table, { table }, defaultFormat, void 0);
12
+ let bySchema = rootsByDelegate.get(delegate);
13
+ if (!bySchema) {
14
+ bySchema = /* @__PURE__ */ new WeakMap();
15
+ rootsByDelegate.set(delegate, bySchema);
16
+ }
17
+ let roots = bySchema.get(schema);
18
+ if (!roots) {
19
+ roots = /* @__PURE__ */ new Map();
20
+ bySchema.set(schema, roots);
21
+ }
22
+ const existing = roots.get(table)?.deref();
23
+ if (existing) return existing;
24
+ const created = new RunnableQueryImpl(delegate, schema, table, tableAST(table), defaultFormat, void 0);
25
+ roots.set(table, new WeakRef(created));
26
+ return created;
6
27
  }
7
28
  var RunnableQueryImpl = class RunnableQueryImpl extends QueryImpl {
8
29
  #delegate;
9
- constructor(delegate, schema, tableName, ast = { table: tableName }, format = defaultFormat, system = "client", customQueryID, currentJunction) {
30
+ constructor(delegate, schema, tableName, ast = tableAST(tableName), format = defaultFormat, system = "client", customQueryID, currentJunction) {
10
31
  super(schema, tableName, ast, format, system, customQueryID, currentJunction, (tableName, ast, format, customQueryID, currentJunction) => new RunnableQueryImpl(delegate, schema, tableName, ast, format, system, customQueryID, currentJunction));
11
32
  this.#delegate = delegate;
12
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runnable-query-impl.js","names":["#delegate"],"sources":["../../../../../zql/src/query/runnable-query-impl.ts"],"sourcesContent":["import type {AST, System} from '../../../zero-protocol/src/ast.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {defaultFormat} from '../ivm/default-format.ts';\nimport type {Format, ViewFactory} from '../ivm/view.ts';\nimport type {CustomQueryID} from './named.ts';\nimport type {QueryDelegate} from './query-delegate.ts';\nimport {QueryImpl} from './query-impl.ts';\nimport type {\n HumanReadable,\n MaterializeOptions,\n PreloadOptions,\n PullRow,\n Query,\n RunOptions,\n} from './query.ts';\nimport type {TTL} from './ttl.ts';\nimport type {TypedView} from './typed-view.ts';\n\nexport function newRunnableQuery<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n>(\n delegate: QueryDelegate,\n schema: TSchema,\n table: TTable,\n): Query<TTable, TSchema> {\n return new RunnableQueryImpl(\n delegate,\n schema,\n table,\n {table},\n defaultFormat,\n undefined,\n );\n}\n\nexport class RunnableQueryImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn = PullRow<TTable, TSchema>,\n>\n extends QueryImpl<TTable, TSchema, TReturn>\n implements Query<TTable, TSchema, TReturn>\n{\n readonly #delegate: QueryDelegate;\n\n constructor(\n delegate: QueryDelegate,\n schema: TSchema,\n tableName: TTable,\n ast: AST = {table: tableName},\n format: Format = defaultFormat,\n system: System = 'client',\n customQueryID?: CustomQueryID,\n currentJunction?: string,\n ) {\n super(\n schema,\n tableName,\n ast,\n format,\n system,\n customQueryID,\n currentJunction,\n (tableName, ast, format, customQueryID, currentJunction) =>\n new RunnableQueryImpl(\n delegate,\n schema,\n tableName,\n ast,\n format,\n system,\n customQueryID,\n currentJunction,\n ),\n );\n this.#delegate = delegate;\n }\n\n override run(options?: RunOptions): Promise<HumanReadable<TReturn>> {\n return this.#delegate.run(this, options);\n }\n\n override preload(options?: PreloadOptions): {\n cleanup: () => void;\n complete: Promise<void>;\n } {\n return this.#delegate.preload(this, options);\n }\n\n override materialize(ttl?: TTL): TypedView<HumanReadable<TReturn>>;\n override materialize<T>(\n factory: ViewFactory<TTable, TSchema, TReturn, T>,\n ttl?: TTL,\n ): T;\n override materialize<T>(\n factory?: unknown,\n ttl?: unknown,\n ): T | TypedView<HumanReadable<TReturn>> {\n let actualFactory: ViewFactory<TTable, TSchema, TReturn, T> | undefined;\n let options: MaterializeOptions | undefined;\n\n if (typeof factory === 'function') {\n actualFactory = factory as ViewFactory<TTable, TSchema, TReturn, T>;\n options = {ttl: ttl as TTL | undefined};\n } else {\n actualFactory = undefined;\n options = {ttl: factory as TTL | undefined};\n }\n\n return this.#delegate.materialize(this, actualFactory, options);\n }\n}\n"],"mappings":";;;AAkBA,SAAgB,iBAId,UACA,QACA,OACwB;CACxB,OAAO,IAAI,kBACT,UACA,QACA,OACA,EAAC,MAAK,GACN,eACA,KAAA,CACF;AACF;AAEA,IAAa,oBAAb,MAAa,0BAKH,UAEV;CACE;CAEA,YACE,UACA,QACA,WACA,MAAW,EAAC,OAAO,UAAS,GAC5B,SAAiB,eACjB,SAAiB,UACjB,eACA,iBACA;EACA,MACE,QACA,WACA,KACA,QACA,QACA,eACA,kBACC,WAAW,KAAK,QAAQ,eAAe,oBACtC,IAAI,kBACF,UACA,QACA,WACA,KACA,QACA,QACA,eACA,eACF,CACJ;EACA,KAAKA,YAAY;CACnB;CAEA,IAAa,SAAuD;EAClE,OAAO,KAAKA,UAAU,IAAI,MAAM,OAAO;CACzC;CAEA,QAAiB,SAGf;EACA,OAAO,KAAKA,UAAU,QAAQ,MAAM,OAAO;CAC7C;CAOA,YACE,SACA,KACuC;EACvC,IAAI;EACJ,IAAI;EAEJ,IAAI,OAAO,YAAY,YAAY;GACjC,gBAAgB;GAChB,UAAU,EAAM,IAAsB;EACxC,OAAO;GACL,gBAAgB,KAAA;GAChB,UAAU,EAAC,KAAK,QAA0B;EAC5C;EAEA,OAAO,KAAKA,UAAU,YAAY,MAAM,eAAe,OAAO;CAChE;AACF"}
1
+ {"version":3,"file":"runnable-query-impl.js","names":["#delegate"],"sources":["../../../../../zql/src/query/runnable-query-impl.ts"],"sourcesContent":["import {\n tableAST,\n type NormalizedAST,\n type System,\n} from '../../../zero-protocol/src/ast.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {defaultFormat} from '../ivm/default-format.ts';\nimport type {Format, ViewFactory} from '../ivm/view.ts';\nimport type {CustomQueryID} from './named.ts';\nimport type {QueryDelegate} from './query-delegate.ts';\nimport {QueryImpl} from './query-impl.ts';\nimport type {\n HumanReadable,\n MaterializeOptions,\n PreloadOptions,\n PullRow,\n Query,\n RunOptions,\n} from './query.ts';\nimport type {TTL} from './ttl.ts';\nimport type {TypedView} from './typed-view.ts';\n\n/**\n * Runnable roots are interned per delegate *and* schema -- a query is only\n * interchangeable with another if it would run against the same delegate. See\n * `query-transitions.ts` for why roots need to be shared at all.\n */\nconst rootsByDelegate = new WeakMap<\n QueryDelegate,\n // oxlint-disable-next-line no-explicit-any\n WeakMap<Schema, Map<string, WeakRef<RunnableQueryImpl<any, any, any>>>>\n>();\n\nexport function newRunnableQuery<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n>(\n delegate: QueryDelegate,\n schema: TSchema,\n table: TTable,\n): Query<TTable, TSchema> {\n let bySchema = rootsByDelegate.get(delegate);\n if (!bySchema) {\n bySchema = new WeakMap();\n rootsByDelegate.set(delegate, bySchema);\n }\n let roots = bySchema.get(schema);\n if (!roots) {\n roots = new Map();\n bySchema.set(schema, roots);\n }\n\n const existing = roots.get(table)?.deref();\n if (existing) {\n return existing as RunnableQueryImpl<TTable, TSchema>;\n }\n\n const created = new RunnableQueryImpl<TTable, TSchema>(\n delegate,\n schema,\n table,\n tableAST(table),\n defaultFormat,\n undefined,\n );\n roots.set(table, new WeakRef(created));\n return created;\n}\n\nexport class RunnableQueryImpl<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn = PullRow<TTable, TSchema>,\n>\n extends QueryImpl<TTable, TSchema, TReturn>\n implements Query<TTable, TSchema, TReturn>\n{\n readonly #delegate: QueryDelegate;\n\n constructor(\n delegate: QueryDelegate,\n schema: TSchema,\n tableName: TTable,\n ast: NormalizedAST = tableAST(tableName),\n format: Format = defaultFormat,\n system: System = 'client',\n customQueryID?: CustomQueryID,\n currentJunction?: string,\n ) {\n super(\n schema,\n tableName,\n ast,\n format,\n system,\n customQueryID,\n currentJunction,\n (tableName, ast, format, customQueryID, currentJunction) =>\n new RunnableQueryImpl(\n delegate,\n schema,\n tableName,\n ast,\n format,\n system,\n customQueryID,\n currentJunction,\n ),\n );\n this.#delegate = delegate;\n }\n\n override run(options?: RunOptions): Promise<HumanReadable<TReturn>> {\n // The type arguments on the delegate calls in this class are written out\n // because tsc 7.0.2 fails to infer them in some program layouts (the\n // packages/zero declaration build, apps/zero-throughput): inference\n // collapses TSchema to its constraint and the call misreports as a\n // TS2345 assignability error. Explicit arguments are inert where\n // inference works and correct where it does not.\n return this.#delegate.run<TTable, TSchema, TReturn>(this, options);\n }\n\n override preload(options?: PreloadOptions): {\n cleanup: () => void;\n complete: Promise<void>;\n cached: Promise<void>;\n } {\n return this.#delegate.preload<TTable, TSchema, TReturn>(this, options);\n }\n\n override materialize(ttl?: TTL): TypedView<HumanReadable<TReturn>>;\n override materialize<T>(\n factory: ViewFactory<TTable, TSchema, TReturn, T>,\n ttl?: TTL,\n ): T;\n override materialize<T>(\n factory?: unknown,\n ttl?: unknown,\n ): T | TypedView<HumanReadable<TReturn>> {\n let actualFactory: ViewFactory<TTable, TSchema, TReturn, T> | undefined;\n let options: MaterializeOptions | undefined;\n\n if (typeof factory === 'function') {\n actualFactory = factory as ViewFactory<TTable, TSchema, TReturn, T>;\n options = {ttl: ttl as TTL | undefined};\n } else {\n actualFactory = undefined;\n options = {ttl: factory as TTL | undefined};\n }\n\n return this.#delegate.materialize<TTable, TSchema, TReturn, T>(\n this,\n actualFactory,\n options,\n );\n }\n}\n"],"mappings":";;;;;;;;;AA2BA,IAAM,kCAAkB,IAAI,QAI1B;AAEF,SAAgB,iBAId,UACA,QACA,OACwB;CACxB,IAAI,WAAW,gBAAgB,IAAI,QAAQ;CAC3C,IAAI,CAAC,UAAU;EACb,2BAAW,IAAI,QAAQ;EACvB,gBAAgB,IAAI,UAAU,QAAQ;CACxC;CACA,IAAI,QAAQ,SAAS,IAAI,MAAM;CAC/B,IAAI,CAAC,OAAO;EACV,wBAAQ,IAAI,IAAI;EAChB,SAAS,IAAI,QAAQ,KAAK;CAC5B;CAEA,MAAM,WAAW,MAAM,IAAI,KAAK,GAAG,MAAM;CACzC,IAAI,UACF,OAAO;CAGT,MAAM,UAAU,IAAI,kBAClB,UACA,QACA,OACA,SAAS,KAAK,GACd,eACA,KAAA,CACF;CACA,MAAM,IAAI,OAAO,IAAI,QAAQ,OAAO,CAAC;CACrC,OAAO;AACT;AAEA,IAAa,oBAAb,MAAa,0BAKH,UAEV;CACE;CAEA,YACE,UACA,QACA,WACA,MAAqB,SAAS,SAAS,GACvC,SAAiB,eACjB,SAAiB,UACjB,eACA,iBACA;EACA,MACE,QACA,WACA,KACA,QACA,QACA,eACA,kBACC,WAAW,KAAK,QAAQ,eAAe,oBACtC,IAAI,kBACF,UACA,QACA,WACA,KACA,QACA,QACA,eACA,eACF,CACJ;EACA,KAAKA,YAAY;CACnB;CAEA,IAAa,SAAuD;EAOlE,OAAO,KAAKA,UAAU,IAA8B,MAAM,OAAO;CACnE;CAEA,QAAiB,SAIf;EACA,OAAO,KAAKA,UAAU,QAAkC,MAAM,OAAO;CACvE;CAOA,YACE,SACA,KACuC;EACvC,IAAI;EACJ,IAAI;EAEJ,IAAI,OAAO,YAAY,YAAY;GACjC,gBAAgB;GAChB,UAAU,EAAM,IAAsB;EACxC,OAAO;GACL,gBAAgB,KAAA;GAChB,UAAU,EAAC,KAAK,QAA0B;EAC5C;EAEA,OAAO,KAAKA,UAAU,YACpB,MACA,eACA,OACF;CACF;AACF"}
@@ -1,7 +1,7 @@
1
1
  import type { Immutable } from '../../../shared/src/immutable.ts';
2
2
  import type { ErroredQuery } from '../../../zero-protocol/src/custom-queries.ts';
3
3
  import type { TTL } from './ttl.ts';
4
- export type ResultType = 'unknown' | 'complete' | 'error';
4
+ export type ResultType = 'unknown' | 'cached' | 'complete' | 'error';
5
5
  /**
6
6
  * Called when the view changes. The received data should be considered
7
7
  * immutable. Caller must not modify it. Passed data is valid until next
@@ -1 +1 @@
1
- {"version":3,"file":"typed-view.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/typed-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,kCAAkC,CAAC;AAChE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,8CAA8C,CAAC;AAC/E,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAElC,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1D;;;;GAIG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CACxB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAClB,UAAU,EAAE,UAAU,EACtB,KAAK,CAAC,EAAE,YAAY,KACjB,IAAI,CAAC;AAEV,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAC/C,OAAO,IAAI,IAAI,CAAC;IAChB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;CAClB,CAAC"}
1
+ {"version":3,"file":"typed-view.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/typed-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,kCAAkC,CAAC;AAChE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,8CAA8C,CAAC;AAC/E,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAElC,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAErE;;;;GAIG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CACxB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAClB,UAAU,EAAE,UAAU,EACtB,KAAK,CAAC,EAAE,YAAY,KACjB,IAAI,CAAC;AAEV,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAC/C,OAAO,IAAI,IAAI,CAAC;IAChB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;CAClB,CAAC"}
@@ -9,7 +9,15 @@ export declare class Database implements Disposable {
9
9
  pragma<T = unknown>(sql: string): T[];
10
10
  compact(freeableBytesThreshold: number): void;
11
11
  unsafeMode(unsafe: boolean): void;
12
- close(): void;
12
+ /**
13
+ * Closes the database. For writable connections, `PRAGMA optimize` is run
14
+ * first (as recommended by SQLite) unless `optimize` is `false`, which is
15
+ * appropriate for short-lived handles on a database whose statistics are
16
+ * maintained by a longer-lived writer.
17
+ */
18
+ close({ optimize }?: {
19
+ optimize?: boolean | undefined;
20
+ }): void;
13
21
  transaction<T>(fn: () => T): T;
14
22
  get name(): string;
15
23
  get inTransaction(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../../zqlite/src/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,eAAe,EAAE,EAEtB,KAAK,SAAS,EACd,KAAK,SAAS,IAAI,gBAAgB,EACnC,MAAM,wBAAwB,CAAC;AAehC,qBAAa,QAAS,YAAW,UAAU;;gBAOvC,EAAE,EAAE,UAAU,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,eAAe,CAAC,OAAO,EACjC,kBAAkB,SAAM;IAwB1B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IAc/B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE;IAQrC,OAAO,CAAC,sBAAsB,EAAE,MAAM;IAyCtC,UAAU,CAAC,MAAM,EAAE,OAAO;IAuB1B,KAAK,IAAI,IAAI;IAgBb,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAI9B,IAAI,IAAI,WAEP;IAED,IAAI,aAAa,YAEhB;IAED,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;CAGzB;AAED,qBAAa,SAAS;;IAKpB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACtD,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;gBAG5D,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM;IAUnB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAKtC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS;IAYpC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC;IAY/B,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE;IAYjC,OAAO,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC;CAQtD;AAkFD;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;CAAG"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../../zqlite/src/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,eAAe,EAAE,EAEtB,KAAK,SAAS,EACd,KAAK,SAAS,IAAI,gBAAgB,EACnC,MAAM,wBAAwB,CAAC;AAehC,qBAAa,QAAS,YAAW,UAAU;;gBAOvC,EAAE,EAAE,UAAU,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,eAAe,CAAC,OAAO,EACjC,kBAAkB,SAAM;IAwB1B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IAc/B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE;IAQrC,OAAO,CAAC,sBAAsB,EAAE,MAAM;IAyCtC,UAAU,CAAC,MAAM,EAAE,OAAO;IAuB1B;;;;;OAKG;IACH,KAAK,CAAC,EAAC,QAAe,EAAC,GAAE;QAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAM,GAAG,IAAI;IAgBrE,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAI9B,IAAI,IAAI,WAEP;IAED,IAAI,aAAa,YAEhB;IAED,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;CAGzB;AAED,qBAAa,SAAS;;IAKpB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACtD,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;gBAG5D,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM;IAUnB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAKtC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS;IAYpC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC;IAY/B,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE;IAYjC,OAAO,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC;CAQtD;AAkFD;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;CAAG"}
@@ -73,9 +73,15 @@ var Database = class {
73
73
  logIfSlow(this.#lc.withContext("method", method), performance.now() - start, { method }, this.#threshold);
74
74
  }
75
75
  }
76
- close() {
76
+ /**
77
+ * Closes the database. For writable connections, `PRAGMA optimize` is run
78
+ * first (as recommended by SQLite) unless `optimize` is `false`, which is
79
+ * appropriate for short-lived handles on a database whose statistics are
80
+ * maintained by a longer-lived writer.
81
+ */
82
+ close({ optimize = true } = {}) {
77
83
  const start = Date.now();
78
- if (!this.#db.readonly) try {
84
+ if (optimize && !this.#db.readonly) try {
79
85
  this.#db.pragma("optimize");
80
86
  const elapsed = Date.now() - start;
81
87
  if (elapsed > 2) this.#lc.debug?.(`PRAGMA optimized (${elapsed} ms)`);
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","names":["#db","#threshold","#lc","#pageSize","#run","#bytes","#stmt","#attrs","#it","#start","#sqliteRowTimeSum","#log"],"sources":["../../../../zqlite/src/db.ts"],"sourcesContent":["import {trace, type Attributes} from '@opentelemetry/api';\nimport type {LogContext} from '@rocicorp/logger';\nimport SQLite3Database, {\n SqliteError,\n type RunResult,\n type Statement as SQLite3Statement,\n} from '@rocicorp/zero-sqlite3';\nimport {manualSpan} from '../../otel/src/span.ts';\nimport {version} from '../../otel/src/version.ts';\n\nconst tracer = trace.getTracer('view-syncer', version);\n\n// https://www.sqlite.org/pragma.html#pragma_auto_vacuum\nconst AUTO_VACUUM_INCREMENTAL = 2;\n\nconst MB = 1024 * 1024;\n\nfunction mb(bytes: number): string {\n return (bytes / MB).toFixed(2);\n}\n\nexport class Database implements Disposable {\n readonly #db: SQLite3Database.Database;\n readonly #threshold: number;\n readonly #lc: LogContext;\n readonly #pageSize: number;\n\n constructor(\n lc: LogContext,\n path: string,\n options?: SQLite3Database.Options,\n slowQueryThreshold = 100,\n ) {\n try {\n this.#lc = lc.withContext('class', 'Database').withContext('path', path);\n this.#db = new SQLite3Database(path, options);\n this.#threshold = slowQueryThreshold;\n\n // Match Postgres LIKE/ILIKE semantics. Postgres LIKE is case-sensitive,\n // but SQLite's LIKE operator is case-insensitive by default; enable\n // case-sensitive LIKE so the bare operator matches Postgres. Case-\n // insensitive ILIKE is handled in query-builder.ts by lower()-ing both\n // operands (using the Unicode-aware lower() that @rocicorp/zero-sqlite3\n // provides via ICU).\n this.pragma('case_sensitive_like = ON');\n\n const [{page_size: pageSize}] = this.pragma<{page_size: number}>(\n 'page_size',\n );\n this.#pageSize = pageSize;\n } catch (cause) {\n throw new DatabaseInitError(String(cause), {cause});\n }\n }\n\n prepare(sql: string): Statement {\n return this.#run(\n 'prepare',\n sql,\n () =>\n new Statement(\n this.#lc.withContext('sql', sql),\n {class: 'Statement', sql},\n this.#db.prepare(sql),\n this.#threshold,\n ),\n );\n }\n\n exec(sql: string): void {\n this.#run('exec', sql, () => this.#db.exec(sql));\n }\n\n pragma<T = unknown>(sql: string): T[] {\n return this.#run<T[]>('pragma', sql, () => this.#db.pragma(sql) as T[]);\n }\n\n #bytes(pages: number) {\n return pages * this.#pageSize;\n }\n\n compact(freeableBytesThreshold: number) {\n const [{freelist_count: freelistCount}] = this.pragma<{\n freelist_count: number;\n }>('freelist_count');\n\n const freeable = this.#bytes(freelistCount);\n if (freeable < freeableBytesThreshold) {\n this.#lc.debug?.(\n `Not compacting ${this.#db.name}: ${mb(freeable)} freeable MB`,\n );\n return;\n }\n const [{auto_vacuum: autoVacuumMode}] = this.pragma<{auto_vacuum: number}>(\n 'auto_vacuum',\n );\n if (autoVacuumMode !== AUTO_VACUUM_INCREMENTAL) {\n this.#lc.warn?.(\n `Cannot compact ${mb(freeable)} MB of ` +\n `${this.#db.name} because AUTO_VACUUM mode is ${autoVacuumMode}.`,\n );\n return;\n }\n const start = Date.now();\n const [{page_count: pageCountBefore}] = this.pragma<{page_count: number}>(\n 'page_count',\n );\n\n this.pragma('incremental_vacuum');\n\n const [{page_count: pageCountAfter}] = this.pragma<{page_count: number}>(\n 'page_count',\n );\n\n this.#lc.info?.(\n `Compacted ${this.#db.name} from ` +\n `${mb(this.#bytes(pageCountBefore))} MB to ` +\n `${mb(this.#bytes(pageCountAfter))} MB ` +\n `(${Date.now() - start} ms)`,\n );\n }\n\n unsafeMode(unsafe: boolean) {\n this.#db.unsafeMode(unsafe);\n }\n\n #run<T>(method: string, sql: string, fn: () => T): T {\n const start = performance.now();\n try {\n return fn();\n } catch (e) {\n if (e instanceof SqliteError) {\n e.message += `: ${sql}`;\n }\n throw e;\n } finally {\n logIfSlow(\n this.#lc.withContext('method', method),\n performance.now() - start,\n {method},\n this.#threshold,\n );\n }\n }\n\n close(): void {\n const start = Date.now();\n if (!this.#db.readonly) {\n try {\n this.#db.pragma('optimize');\n const elapsed = Date.now() - start;\n if (elapsed > 2) {\n this.#lc.debug?.(`PRAGMA optimized (${elapsed} ms)`);\n }\n } catch (e) {\n this.#lc.warn?.('error running PRAGMA optimize', e);\n }\n }\n this.#db.close();\n }\n\n transaction<T>(fn: () => T): T {\n return this.#db.transaction(fn)();\n }\n\n get name() {\n return this.#db.name;\n }\n\n get inTransaction() {\n return this.#db.inTransaction;\n }\n\n [Symbol.dispose](): void {\n this.close();\n }\n}\n\nexport class Statement {\n readonly #stmt: SQLite3Statement;\n readonly #lc: LogContext;\n readonly #threshold: number;\n readonly #attrs: Attributes;\n readonly scanStatus: SQLite3Statement['scanStatusV2'];\n readonly scanStatusReset: SQLite3Statement['scanStatusReset'];\n\n constructor(\n lc: LogContext,\n attrs: Attributes,\n stmt: SQLite3Statement,\n threshold: number,\n ) {\n this.#lc = lc.withContext('class', 'Statement');\n this.#attrs = attrs;\n this.#stmt = stmt;\n this.#threshold = threshold;\n this.scanStatus = this.#stmt.scanStatusV2.bind(this.#stmt);\n this.scanStatusReset = this.#stmt.scanStatusReset.bind(this.#stmt);\n }\n\n safeIntegers(useBigInt: boolean): this {\n this.#stmt.safeIntegers(useBigInt);\n return this;\n }\n\n run(...params: unknown[]): RunResult {\n const start = performance.now();\n const ret = this.#stmt.run(...params);\n logIfSlow(\n this.#lc.withContext('method', 'run'),\n performance.now() - start,\n {...this.#attrs, method: 'run'},\n this.#threshold,\n );\n return ret;\n }\n\n get<T>(...params: unknown[]): T {\n const start = performance.now();\n const ret = this.#stmt.get(...params);\n logIfSlow(\n this.#lc.withContext('method', 'get'),\n performance.now() - start,\n {...this.#attrs, method: 'get'},\n this.#threshold,\n );\n return ret as T;\n }\n\n all<T>(...params: unknown[]): T[] {\n const start = performance.now();\n const ret = this.#stmt.all(...params);\n logIfSlow(\n this.#lc.withContext('method', 'all'),\n performance.now() - start,\n {...this.#attrs, method: 'all'},\n this.#threshold,\n );\n return ret as T[];\n }\n\n iterate<T>(...params: unknown[]): IterableIterator<T> {\n return new LoggingIterableIterator(\n this.#lc.withContext('method', 'iterate'),\n this.#attrs,\n this.#stmt.iterate(...params),\n this.#threshold,\n ) as IterableIterator<T>;\n }\n}\n\nclass LoggingIterableIterator<T> implements IterableIterator<T> {\n readonly #lc: LogContext;\n readonly #it: IterableIterator<T>;\n readonly #threshold: number;\n readonly #attrs: Attributes;\n #start: number;\n #sqliteRowTimeSum: number;\n\n constructor(\n lc: LogContext,\n attrs: Attributes,\n it: IterableIterator<T>,\n slowQueryThreshold: number,\n ) {\n this.#lc = lc;\n this.#attrs = attrs;\n this.#it = it;\n this.#start = performance.now();\n this.#threshold = slowQueryThreshold;\n this.#sqliteRowTimeSum = 0;\n }\n\n next(): IteratorResult<T> {\n const start = performance.now();\n const ret = this.#it.next();\n const elapsed = performance.now() - start;\n this.#sqliteRowTimeSum += elapsed;\n if (ret.done) {\n this.#log();\n }\n return ret;\n }\n\n #log() {\n logIfSlow(\n this.#lc.withContext('type', 'total'),\n performance.now() - this.#start,\n {...this.#attrs, type: 'total', method: 'iterate'},\n this.#threshold,\n );\n logIfSlow(\n this.#lc.withContext('type', 'sqlite'),\n this.#sqliteRowTimeSum,\n {...this.#attrs, type: 'sqlite', method: 'iterate'},\n this.#threshold,\n );\n }\n\n [Symbol.iterator](): IterableIterator<T> {\n return this;\n }\n\n return(): IteratorResult<T> {\n this.#log();\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n return this.#it.return?.() as any;\n }\n\n throw(e: unknown): IteratorResult<T> {\n this.#log();\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n return this.#it.throw?.(e) as any;\n }\n}\n\nfunction logIfSlow(\n lc: LogContext,\n elapsed: number,\n attrs: Attributes,\n threshold: number,\n): void {\n if (elapsed >= threshold) {\n for (const [key, value] of Object.entries(attrs)) {\n lc = lc.withContext(key, value);\n }\n lc.warn?.('Slow SQLite query', elapsed);\n manualSpan(tracer, 'db.slow-query', elapsed, attrs);\n }\n}\n\n/**\n * An error indicating that the Database failed to open. This essentially\n * wraps the TypeError thrown by the better-sqlite3 package with something\n * more specific.\n */\nexport class DatabaseInitError extends Error {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"db.js","names":["#db","#threshold","#lc","#pageSize","#run","#bytes","#stmt","#attrs","#it","#start","#sqliteRowTimeSum","#log"],"sources":["../../../../zqlite/src/db.ts"],"sourcesContent":["import {trace, type Attributes} from '@opentelemetry/api';\nimport type {LogContext} from '@rocicorp/logger';\nimport SQLite3Database, {\n SqliteError,\n type RunResult,\n type Statement as SQLite3Statement,\n} from '@rocicorp/zero-sqlite3';\nimport {manualSpan} from '../../otel/src/span.ts';\nimport {version} from '../../otel/src/version.ts';\n\nconst tracer = trace.getTracer('view-syncer', version);\n\n// https://www.sqlite.org/pragma.html#pragma_auto_vacuum\nconst AUTO_VACUUM_INCREMENTAL = 2;\n\nconst MB = 1024 * 1024;\n\nfunction mb(bytes: number): string {\n return (bytes / MB).toFixed(2);\n}\n\nexport class Database implements Disposable {\n readonly #db: SQLite3Database.Database;\n readonly #threshold: number;\n readonly #lc: LogContext;\n readonly #pageSize: number;\n\n constructor(\n lc: LogContext,\n path: string,\n options?: SQLite3Database.Options,\n slowQueryThreshold = 100,\n ) {\n try {\n this.#lc = lc.withContext('class', 'Database').withContext('path', path);\n this.#db = new SQLite3Database(path, options);\n this.#threshold = slowQueryThreshold;\n\n // Match Postgres LIKE/ILIKE semantics. Postgres LIKE is case-sensitive,\n // but SQLite's LIKE operator is case-insensitive by default; enable\n // case-sensitive LIKE so the bare operator matches Postgres. Case-\n // insensitive ILIKE is handled in query-builder.ts by lower()-ing both\n // operands (using the Unicode-aware lower() that @rocicorp/zero-sqlite3\n // provides via ICU).\n this.pragma('case_sensitive_like = ON');\n\n const [{page_size: pageSize}] = this.pragma<{page_size: number}>(\n 'page_size',\n );\n this.#pageSize = pageSize;\n } catch (cause) {\n throw new DatabaseInitError(String(cause), {cause});\n }\n }\n\n prepare(sql: string): Statement {\n return this.#run(\n 'prepare',\n sql,\n () =>\n new Statement(\n this.#lc.withContext('sql', sql),\n {class: 'Statement', sql},\n this.#db.prepare(sql),\n this.#threshold,\n ),\n );\n }\n\n exec(sql: string): void {\n this.#run('exec', sql, () => this.#db.exec(sql));\n }\n\n pragma<T = unknown>(sql: string): T[] {\n return this.#run<T[]>('pragma', sql, () => this.#db.pragma(sql) as T[]);\n }\n\n #bytes(pages: number) {\n return pages * this.#pageSize;\n }\n\n compact(freeableBytesThreshold: number) {\n const [{freelist_count: freelistCount}] = this.pragma<{\n freelist_count: number;\n }>('freelist_count');\n\n const freeable = this.#bytes(freelistCount);\n if (freeable < freeableBytesThreshold) {\n this.#lc.debug?.(\n `Not compacting ${this.#db.name}: ${mb(freeable)} freeable MB`,\n );\n return;\n }\n const [{auto_vacuum: autoVacuumMode}] = this.pragma<{auto_vacuum: number}>(\n 'auto_vacuum',\n );\n if (autoVacuumMode !== AUTO_VACUUM_INCREMENTAL) {\n this.#lc.warn?.(\n `Cannot compact ${mb(freeable)} MB of ` +\n `${this.#db.name} because AUTO_VACUUM mode is ${autoVacuumMode}.`,\n );\n return;\n }\n const start = Date.now();\n const [{page_count: pageCountBefore}] = this.pragma<{page_count: number}>(\n 'page_count',\n );\n\n this.pragma('incremental_vacuum');\n\n const [{page_count: pageCountAfter}] = this.pragma<{page_count: number}>(\n 'page_count',\n );\n\n this.#lc.info?.(\n `Compacted ${this.#db.name} from ` +\n `${mb(this.#bytes(pageCountBefore))} MB to ` +\n `${mb(this.#bytes(pageCountAfter))} MB ` +\n `(${Date.now() - start} ms)`,\n );\n }\n\n unsafeMode(unsafe: boolean) {\n this.#db.unsafeMode(unsafe);\n }\n\n #run<T>(method: string, sql: string, fn: () => T): T {\n const start = performance.now();\n try {\n return fn();\n } catch (e) {\n if (e instanceof SqliteError) {\n e.message += `: ${sql}`;\n }\n throw e;\n } finally {\n logIfSlow(\n this.#lc.withContext('method', method),\n performance.now() - start,\n {method},\n this.#threshold,\n );\n }\n }\n\n /**\n * Closes the database. For writable connections, `PRAGMA optimize` is run\n * first (as recommended by SQLite) unless `optimize` is `false`, which is\n * appropriate for short-lived handles on a database whose statistics are\n * maintained by a longer-lived writer.\n */\n close({optimize = true}: {optimize?: boolean | undefined} = {}): void {\n const start = Date.now();\n if (optimize && !this.#db.readonly) {\n try {\n this.#db.pragma('optimize');\n const elapsed = Date.now() - start;\n if (elapsed > 2) {\n this.#lc.debug?.(`PRAGMA optimized (${elapsed} ms)`);\n }\n } catch (e) {\n this.#lc.warn?.('error running PRAGMA optimize', e);\n }\n }\n this.#db.close();\n }\n\n transaction<T>(fn: () => T): T {\n return this.#db.transaction(fn)();\n }\n\n get name() {\n return this.#db.name;\n }\n\n get inTransaction() {\n return this.#db.inTransaction;\n }\n\n [Symbol.dispose](): void {\n this.close();\n }\n}\n\nexport class Statement {\n readonly #stmt: SQLite3Statement;\n readonly #lc: LogContext;\n readonly #threshold: number;\n readonly #attrs: Attributes;\n readonly scanStatus: SQLite3Statement['scanStatusV2'];\n readonly scanStatusReset: SQLite3Statement['scanStatusReset'];\n\n constructor(\n lc: LogContext,\n attrs: Attributes,\n stmt: SQLite3Statement,\n threshold: number,\n ) {\n this.#lc = lc.withContext('class', 'Statement');\n this.#attrs = attrs;\n this.#stmt = stmt;\n this.#threshold = threshold;\n this.scanStatus = this.#stmt.scanStatusV2.bind(this.#stmt);\n this.scanStatusReset = this.#stmt.scanStatusReset.bind(this.#stmt);\n }\n\n safeIntegers(useBigInt: boolean): this {\n this.#stmt.safeIntegers(useBigInt);\n return this;\n }\n\n run(...params: unknown[]): RunResult {\n const start = performance.now();\n const ret = this.#stmt.run(...params);\n logIfSlow(\n this.#lc.withContext('method', 'run'),\n performance.now() - start,\n {...this.#attrs, method: 'run'},\n this.#threshold,\n );\n return ret;\n }\n\n get<T>(...params: unknown[]): T {\n const start = performance.now();\n const ret = this.#stmt.get(...params);\n logIfSlow(\n this.#lc.withContext('method', 'get'),\n performance.now() - start,\n {...this.#attrs, method: 'get'},\n this.#threshold,\n );\n return ret as T;\n }\n\n all<T>(...params: unknown[]): T[] {\n const start = performance.now();\n const ret = this.#stmt.all(...params);\n logIfSlow(\n this.#lc.withContext('method', 'all'),\n performance.now() - start,\n {...this.#attrs, method: 'all'},\n this.#threshold,\n );\n return ret as T[];\n }\n\n iterate<T>(...params: unknown[]): IterableIterator<T> {\n return new LoggingIterableIterator(\n this.#lc.withContext('method', 'iterate'),\n this.#attrs,\n this.#stmt.iterate(...params),\n this.#threshold,\n ) as IterableIterator<T>;\n }\n}\n\nclass LoggingIterableIterator<T> implements IterableIterator<T> {\n readonly #lc: LogContext;\n readonly #it: IterableIterator<T>;\n readonly #threshold: number;\n readonly #attrs: Attributes;\n #start: number;\n #sqliteRowTimeSum: number;\n\n constructor(\n lc: LogContext,\n attrs: Attributes,\n it: IterableIterator<T>,\n slowQueryThreshold: number,\n ) {\n this.#lc = lc;\n this.#attrs = attrs;\n this.#it = it;\n this.#start = performance.now();\n this.#threshold = slowQueryThreshold;\n this.#sqliteRowTimeSum = 0;\n }\n\n next(): IteratorResult<T> {\n const start = performance.now();\n const ret = this.#it.next();\n const elapsed = performance.now() - start;\n this.#sqliteRowTimeSum += elapsed;\n if (ret.done) {\n this.#log();\n }\n return ret;\n }\n\n #log() {\n logIfSlow(\n this.#lc.withContext('type', 'total'),\n performance.now() - this.#start,\n {...this.#attrs, type: 'total', method: 'iterate'},\n this.#threshold,\n );\n logIfSlow(\n this.#lc.withContext('type', 'sqlite'),\n this.#sqliteRowTimeSum,\n {...this.#attrs, type: 'sqlite', method: 'iterate'},\n this.#threshold,\n );\n }\n\n [Symbol.iterator](): IterableIterator<T> {\n return this;\n }\n\n return(): IteratorResult<T> {\n this.#log();\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n return this.#it.return?.() as any;\n }\n\n throw(e: unknown): IteratorResult<T> {\n this.#log();\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n return this.#it.throw?.(e) as any;\n }\n}\n\nfunction logIfSlow(\n lc: LogContext,\n elapsed: number,\n attrs: Attributes,\n threshold: number,\n): void {\n if (elapsed >= threshold) {\n for (const [key, value] of Object.entries(attrs)) {\n lc = lc.withContext(key, value);\n }\n lc.warn?.('Slow SQLite query', elapsed);\n manualSpan(tracer, 'db.slow-query', elapsed, attrs);\n }\n}\n\n/**\n * An error indicating that the Database failed to open. This essentially\n * wraps the TypeError thrown by the better-sqlite3 package with something\n * more specific.\n */\nexport class DatabaseInitError extends Error {}\n"],"mappings":"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"}
@@ -41,6 +41,7 @@ export declare class TableSource implements Source {
41
41
  * algorithm for concurrent traversal of historic timelines.
42
42
  */
43
43
  setDB(db: Database): void;
44
+ hasConnections(): boolean;
44
45
  connect(sort: Ordering | undefined, filters?: Condition, splitEditKeys?: Set<string>, debug?: DebugDelegate): SourceInput;
45
46
  toSQLiteRow(row: Row): Row;
46
47
  push(change: SourceChange): Stream<'yield'>;
@@ -1 +1 @@
1
- {"version":3,"file":"table-source.d.ts","sourceRoot":"","sources":["../../../../zqlite/src/table-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,+BAA+B,CAAC;AAK7D,OAAO,KAAK,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAC,GAAG,EAAQ,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wCAAwC,CAAC;AACvE,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACV,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,yCAAyC,CAAC;AAkB3E,OAAO,EACL,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,6BAA6B,CAAC;AAExD,OAAO,KAAK,EAAC,QAAQ,EAAY,MAAM,SAAS,CAAC;AAoBjD;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAY,YAAW,MAAM;;IAexC;;;;;OAKG;gBAED,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,UAAU,EAAE,UAAU,EACtB,WAAW,gBAAc;IAiB3B,IAAI,WAAW;;;;MAMd;IAED;;;OAGG;IACH,KAAK,CAAC,EAAE,EAAE,QAAQ;IA4FlB,OAAO,CACL,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,OAAO,CAAC,EAAE,SAAS,EACnB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,KAAK,CAAC,EAAE,aAAa;IA8CvB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;IAqIzB,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;IAQ3C,OAAO,CAAC,MAAM,EAAE,YAAY;IAqG7B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,SAAS;CA+BrC;AA8BD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACvC,SAAS,OAAO,EAAE,CAEpB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,wCAa/C;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACvC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,MAAM,GAChB,GAAG,CAaL;AAwCD,qBAAa,qBAAsB,SAAQ,KAAK;CAAG"}
1
+ {"version":3,"file":"table-source.d.ts","sourceRoot":"","sources":["../../../../zqlite/src/table-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,+BAA+B,CAAC;AAK7D,OAAO,KAAK,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAC,GAAG,EAAQ,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wCAAwC,CAAC;AACvE,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACV,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,yCAAyC,CAAC;AAkB3E,OAAO,EACL,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,6BAA6B,CAAC;AAExD,OAAO,KAAK,EAAC,QAAQ,EAAY,MAAM,SAAS,CAAC;AAoBjD;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAY,YAAW,MAAM;;IAexC;;;;;OAKG;gBAED,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,UAAU,EAAE,UAAU,EACtB,WAAW,gBAAc;IAkB3B,IAAI,WAAW;;;;MAMd;IAED;;;OAGG;IACH,KAAK,CAAC,EAAE,EAAE,QAAQ;IA4FlB,cAAc,IAAI,OAAO;IAIzB,OAAO,CACL,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,OAAO,CAAC,EAAE,SAAS,EACnB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,KAAK,CAAC,EAAE,aAAa;IA8CvB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;IAqIzB,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;IAQ5C,OAAO,CAAC,MAAM,EAAE,YAAY;IAqG5B;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,SAAS;CA+BrC;AA8BD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACvC,SAAS,OAAO,EAAE,CAEpB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,wCAa/C;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACvC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,MAAM,GAChB,GAAG,CAaL;AAyCD,qBAAa,qBAAsB,SAAQ,KAAK;CAAG"}