@rocicorp/zero 0.26.1-canary.9 → 0.26.2-canary.1

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 (1113) hide show
  1. package/out/_virtual/_@oxc-project_runtime@0.115.0/helpers/usingCtx.js +57 -0
  2. package/out/_virtual/_rolldown/runtime.js +27 -0
  3. package/out/analyze-query/src/bin-analyze.js +195 -280
  4. package/out/analyze-query/src/bin-analyze.js.map +1 -1
  5. package/out/analyze-query/src/bin-transform.js +35 -40
  6. package/out/analyze-query/src/bin-transform.js.map +1 -1
  7. package/out/analyze-query/src/explain-queries.js +11 -13
  8. package/out/analyze-query/src/explain-queries.js.map +1 -1
  9. package/out/analyze-query/src/run-ast.d.ts.map +1 -1
  10. package/out/analyze-query/src/run-ast.js +68 -94
  11. package/out/analyze-query/src/run-ast.js.map +1 -1
  12. package/out/ast-to-zql/src/ast-to-zql.js +105 -153
  13. package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
  14. package/out/ast-to-zql/src/bin.js +57 -62
  15. package/out/ast-to-zql/src/bin.js.map +1 -1
  16. package/out/ast-to-zql/src/format.js +14 -13
  17. package/out/ast-to-zql/src/format.js.map +1 -1
  18. package/out/datadog/src/datadog-log-sink.js +148 -213
  19. package/out/datadog/src/datadog-log-sink.js.map +1 -1
  20. package/out/otel/src/enabled.js +9 -11
  21. package/out/otel/src/enabled.js.map +1 -1
  22. package/out/otel/src/log-options.js +25 -35
  23. package/out/otel/src/log-options.js.map +1 -1
  24. package/out/otel/src/maybe-time.js +13 -14
  25. package/out/otel/src/maybe-time.js.map +1 -1
  26. package/out/otel/src/span.js +23 -26
  27. package/out/otel/src/span.js.map +1 -1
  28. package/out/otel/src/test-log-config.js +11 -10
  29. package/out/otel/src/test-log-config.js.map +1 -1
  30. package/out/otel/src/version.js +6 -5
  31. package/out/otel/src/version.js.map +1 -1
  32. package/out/replicache/src/async-iterable-to-array.js +8 -9
  33. package/out/replicache/src/async-iterable-to-array.js.map +1 -1
  34. package/out/replicache/src/bg-interval.js +28 -35
  35. package/out/replicache/src/bg-interval.js.map +1 -1
  36. package/out/replicache/src/btree/diff.js +6 -5
  37. package/out/replicache/src/btree/diff.js.map +1 -1
  38. package/out/replicache/src/btree/node.js +281 -372
  39. package/out/replicache/src/btree/node.js.map +1 -1
  40. package/out/replicache/src/btree/read.js +155 -256
  41. package/out/replicache/src/btree/read.js.map +1 -1
  42. package/out/replicache/src/btree/splice.js +60 -80
  43. package/out/replicache/src/btree/splice.js.map +1 -1
  44. package/out/replicache/src/btree/write.js +134 -158
  45. package/out/replicache/src/btree/write.js.map +1 -1
  46. package/out/replicache/src/call-default-fetch.js +28 -32
  47. package/out/replicache/src/call-default-fetch.js.map +1 -1
  48. package/out/replicache/src/config.js +2 -0
  49. package/out/replicache/src/connection-loop-delegates.js +31 -33
  50. package/out/replicache/src/connection-loop-delegates.js.map +1 -1
  51. package/out/replicache/src/connection-loop.js +174 -240
  52. package/out/replicache/src/connection-loop.js.map +1 -1
  53. package/out/replicache/src/cookies.js +22 -32
  54. package/out/replicache/src/cookies.js.map +1 -1
  55. package/out/replicache/src/dag/chunk.js +44 -50
  56. package/out/replicache/src/dag/chunk.js.map +1 -1
  57. package/out/replicache/src/dag/gc.js +94 -114
  58. package/out/replicache/src/dag/gc.js.map +1 -1
  59. package/out/replicache/src/dag/key.js +9 -11
  60. package/out/replicache/src/dag/key.js.map +1 -1
  61. package/out/replicache/src/dag/lazy-store.js +458 -510
  62. package/out/replicache/src/dag/lazy-store.js.map +1 -1
  63. package/out/replicache/src/dag/store-impl.js +147 -178
  64. package/out/replicache/src/dag/store-impl.js.map +1 -1
  65. package/out/replicache/src/dag/store.js +19 -22
  66. package/out/replicache/src/dag/store.js.map +1 -1
  67. package/out/replicache/src/dag/visitor.js +23 -21
  68. package/out/replicache/src/dag/visitor.js.map +1 -1
  69. package/out/replicache/src/db/commit.js +209 -283
  70. package/out/replicache/src/db/commit.js.map +1 -1
  71. package/out/replicache/src/db/index.js +79 -122
  72. package/out/replicache/src/db/index.js.map +1 -1
  73. package/out/replicache/src/db/read.js +44 -60
  74. package/out/replicache/src/db/read.js.map +1 -1
  75. package/out/replicache/src/db/rebase.js +22 -77
  76. package/out/replicache/src/db/rebase.js.map +1 -1
  77. package/out/replicache/src/db/write.js +162 -296
  78. package/out/replicache/src/db/write.js.map +1 -1
  79. package/out/replicache/src/deleted-clients.js +59 -87
  80. package/out/replicache/src/deleted-clients.js.map +1 -1
  81. package/out/replicache/src/error-responses.js +18 -26
  82. package/out/replicache/src/error-responses.js.map +1 -1
  83. package/out/replicache/src/expo-sqlite.js +2 -0
  84. package/out/replicache/src/frozen-json.js +74 -108
  85. package/out/replicache/src/frozen-json.js.map +1 -1
  86. package/out/replicache/src/get-default-puller.js +34 -46
  87. package/out/replicache/src/get-default-puller.js.map +1 -1
  88. package/out/replicache/src/get-default-pusher.js +25 -33
  89. package/out/replicache/src/get-default-pusher.js.map +1 -1
  90. package/out/replicache/src/get-kv-store-provider.js +18 -20
  91. package/out/replicache/src/get-kv-store-provider.js.map +1 -1
  92. package/out/replicache/src/hash.js +29 -29
  93. package/out/replicache/src/hash.js.map +1 -1
  94. package/out/replicache/src/http-request-info.js +9 -8
  95. package/out/replicache/src/http-request-info.js.map +1 -1
  96. package/out/replicache/src/impl.js +2 -0
  97. package/out/replicache/src/index-defs.js +17 -28
  98. package/out/replicache/src/index-defs.js.map +1 -1
  99. package/out/replicache/src/kv/expo-sqlite/store.js +52 -50
  100. package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
  101. package/out/replicache/src/kv/idb-store-with-mem-fallback.js +71 -68
  102. package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -1
  103. package/out/replicache/src/kv/idb-store.js +144 -168
  104. package/out/replicache/src/kv/idb-store.js.map +1 -1
  105. package/out/replicache/src/kv/mem-store.js +57 -45
  106. package/out/replicache/src/kv/mem-store.js.map +1 -1
  107. package/out/replicache/src/kv/op-sqlite/store.js +56 -62
  108. package/out/replicache/src/kv/op-sqlite/store.js.map +1 -1
  109. package/out/replicache/src/kv/op-sqlite/types.d.ts.map +1 -1
  110. package/out/replicache/src/kv/op-sqlite/types.js +7 -6
  111. package/out/replicache/src/kv/op-sqlite/types.js.map +1 -1
  112. package/out/replicache/src/kv/read-impl.js +26 -25
  113. package/out/replicache/src/kv/read-impl.js.map +1 -1
  114. package/out/replicache/src/kv/sqlite-store.js +194 -207
  115. package/out/replicache/src/kv/sqlite-store.js.map +1 -1
  116. package/out/replicache/src/kv/throw-if-closed.js +12 -19
  117. package/out/replicache/src/kv/throw-if-closed.js.map +1 -1
  118. package/out/replicache/src/kv/write-impl-base.js +44 -56
  119. package/out/replicache/src/kv/write-impl-base.js.map +1 -1
  120. package/out/replicache/src/kv/write-impl.js +22 -26
  121. package/out/replicache/src/kv/write-impl.js.map +1 -1
  122. package/out/replicache/src/lazy.js +10 -11
  123. package/out/replicache/src/lazy.js.map +1 -1
  124. package/out/replicache/src/log-options.js +14 -7
  125. package/out/replicache/src/log-options.js.map +1 -1
  126. package/out/replicache/src/make-idb-name.js +14 -9
  127. package/out/replicache/src/make-idb-name.js.map +1 -1
  128. package/out/replicache/src/mutation-recovery.js +12 -0
  129. package/out/replicache/src/mutation-recovery.js.map +1 -0
  130. package/out/replicache/src/new-client-channel.js +34 -42
  131. package/out/replicache/src/new-client-channel.js.map +1 -1
  132. package/out/replicache/src/on-persist-channel.js +26 -29
  133. package/out/replicache/src/on-persist-channel.js.map +1 -1
  134. package/out/replicache/src/op-sqlite.js +2 -0
  135. package/out/replicache/src/patch-operation.js +27 -36
  136. package/out/replicache/src/patch-operation.js.map +1 -1
  137. package/out/replicache/src/pending-mutations.js +14 -12
  138. package/out/replicache/src/pending-mutations.js.map +1 -1
  139. package/out/replicache/src/persist/client-gc.js +36 -51
  140. package/out/replicache/src/persist/client-gc.js.map +1 -1
  141. package/out/replicache/src/persist/client-group-gc.js +29 -36
  142. package/out/replicache/src/persist/client-group-gc.js.map +1 -1
  143. package/out/replicache/src/persist/client-groups.js +80 -154
  144. package/out/replicache/src/persist/client-groups.js.map +1 -1
  145. package/out/replicache/src/persist/clients.js +212 -307
  146. package/out/replicache/src/persist/clients.js.map +1 -1
  147. package/out/replicache/src/persist/collect-idb-databases.js +109 -171
  148. package/out/replicache/src/persist/collect-idb-databases.js.map +1 -1
  149. package/out/replicache/src/persist/gather-mem-only-visitor.js +23 -24
  150. package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -1
  151. package/out/replicache/src/persist/gather-not-cached-visitor.js +35 -33
  152. package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -1
  153. package/out/replicache/src/persist/heartbeat.js +31 -41
  154. package/out/replicache/src/persist/heartbeat.js.map +1 -1
  155. package/out/replicache/src/persist/idb-databases-store-db-name.js +9 -12
  156. package/out/replicache/src/persist/idb-databases-store-db-name.js.map +1 -1
  157. package/out/replicache/src/persist/idb-databases-store.js +78 -97
  158. package/out/replicache/src/persist/idb-databases-store.js.map +1 -1
  159. package/out/replicache/src/persist/make-client-id.js +13 -9
  160. package/out/replicache/src/persist/make-client-id.js.map +1 -1
  161. package/out/replicache/src/persist/persist.js +113 -174
  162. package/out/replicache/src/persist/persist.js.map +1 -1
  163. package/out/replicache/src/persist/refresh.js +94 -183
  164. package/out/replicache/src/persist/refresh.js.map +1 -1
  165. package/out/replicache/src/process-scheduler.js +122 -143
  166. package/out/replicache/src/process-scheduler.js.map +1 -1
  167. package/out/replicache/src/pusher.js +21 -26
  168. package/out/replicache/src/pusher.js.map +1 -1
  169. package/out/replicache/src/replicache-impl.js +844 -1184
  170. package/out/replicache/src/replicache-impl.js.map +1 -1
  171. package/out/replicache/src/report-error.js +9 -6
  172. package/out/replicache/src/report-error.js.map +1 -1
  173. package/out/replicache/src/request-idle.js +13 -11
  174. package/out/replicache/src/request-idle.js.map +1 -1
  175. package/out/replicache/src/scan-iterator.d.ts.map +1 -1
  176. package/out/replicache/src/scan-iterator.js +108 -135
  177. package/out/replicache/src/scan-iterator.js.map +1 -1
  178. package/out/replicache/src/scan-options.js +33 -39
  179. package/out/replicache/src/scan-options.js.map +1 -1
  180. package/out/replicache/src/set-interval-with-signal.js +11 -10
  181. package/out/replicache/src/set-interval-with-signal.js.map +1 -1
  182. package/out/replicache/src/sqlite.js +2 -0
  183. package/out/replicache/src/subscriptions.js +222 -338
  184. package/out/replicache/src/subscriptions.js.map +1 -1
  185. package/out/replicache/src/sync/diff.js +52 -65
  186. package/out/replicache/src/sync/diff.js.map +1 -1
  187. package/out/replicache/src/sync/ids.js +8 -9
  188. package/out/replicache/src/sync/ids.js.map +1 -1
  189. package/out/replicache/src/sync/patch.js +34 -45
  190. package/out/replicache/src/sync/patch.js.map +1 -1
  191. package/out/replicache/src/sync/pull-error.js +15 -15
  192. package/out/replicache/src/sync/pull-error.js.map +1 -1
  193. package/out/replicache/src/sync/pull.js +145 -283
  194. package/out/replicache/src/sync/pull.js.map +1 -1
  195. package/out/replicache/src/sync/push.js +64 -79
  196. package/out/replicache/src/sync/push.js.map +1 -1
  197. package/out/replicache/src/sync/request-id.js +23 -15
  198. package/out/replicache/src/sync/request-id.js.map +1 -1
  199. package/out/replicache/src/sync/sync-head-name.js +6 -5
  200. package/out/replicache/src/sync/sync-head-name.js.map +1 -1
  201. package/out/replicache/src/to-error.js +7 -8
  202. package/out/replicache/src/to-error.js.map +1 -1
  203. package/out/replicache/src/transaction-closed-error.js +15 -15
  204. package/out/replicache/src/transaction-closed-error.js.map +1 -1
  205. package/out/replicache/src/transactions.js +120 -140
  206. package/out/replicache/src/transactions.js.map +1 -1
  207. package/out/replicache/src/version.js +9 -5
  208. package/out/replicache/src/version.js.map +1 -1
  209. package/out/replicache/src/with-transactions.js +23 -20
  210. package/out/replicache/src/with-transactions.js.map +1 -1
  211. package/out/shared/src/abort-error.js +7 -6
  212. package/out/shared/src/abort-error.js.map +1 -1
  213. package/out/shared/src/arrays.js +35 -42
  214. package/out/shared/src/arrays.js.map +1 -1
  215. package/out/shared/src/asserts.js +21 -45
  216. package/out/shared/src/asserts.js.map +1 -1
  217. package/out/shared/src/bigint-json.js +42 -38
  218. package/out/shared/src/bigint-json.js.map +1 -1
  219. package/out/shared/src/binary-search.js +27 -18
  220. package/out/shared/src/binary-search.js.map +1 -1
  221. package/out/shared/src/broadcast-channel.js +20 -23
  222. package/out/shared/src/broadcast-channel.js.map +1 -1
  223. package/out/shared/src/browser-env.js +11 -17
  224. package/out/shared/src/browser-env.js.map +1 -1
  225. package/out/shared/src/btree-set.js +419 -481
  226. package/out/shared/src/btree-set.js.map +1 -1
  227. package/out/shared/src/cache.js +43 -36
  228. package/out/shared/src/cache.js.map +1 -1
  229. package/out/shared/src/centroid.js +24 -26
  230. package/out/shared/src/centroid.js.map +1 -1
  231. package/out/shared/src/config.js +6 -6
  232. package/out/shared/src/config.js.map +1 -1
  233. package/out/shared/src/custom-key-map.js +54 -58
  234. package/out/shared/src/custom-key-map.js.map +1 -1
  235. package/out/shared/src/custom-key-set.js +53 -51
  236. package/out/shared/src/custom-key-set.js.map +1 -1
  237. package/out/shared/src/deep-clone.js +30 -41
  238. package/out/shared/src/deep-clone.js.map +1 -1
  239. package/out/shared/src/deep-merge.js +25 -24
  240. package/out/shared/src/deep-merge.js.map +1 -1
  241. package/out/shared/src/document-visible.js +63 -70
  242. package/out/shared/src/document-visible.js.map +1 -1
  243. package/out/shared/src/dotenv.js +7 -3
  244. package/out/shared/src/dotenv.js.map +1 -1
  245. package/out/shared/src/error.js +43 -64
  246. package/out/shared/src/error.js.map +1 -1
  247. package/out/shared/src/has-own.js +6 -5
  248. package/out/shared/src/has-own.js.map +1 -1
  249. package/out/shared/src/hash.js +15 -14
  250. package/out/shared/src/hash.js.map +1 -1
  251. package/out/shared/src/iterables.js +34 -47
  252. package/out/shared/src/iterables.js.map +1 -1
  253. package/out/shared/src/json-schema.js +25 -30
  254. package/out/shared/src/json-schema.js.map +1 -1
  255. package/out/shared/src/json.js +90 -129
  256. package/out/shared/src/json.js.map +1 -1
  257. package/out/shared/src/logging-test-utils.js +9 -11
  258. package/out/shared/src/logging-test-utils.js.map +1 -1
  259. package/out/shared/src/logging.js +75 -95
  260. package/out/shared/src/logging.js.map +1 -1
  261. package/out/shared/src/must.js +7 -8
  262. package/out/shared/src/must.js.map +1 -1
  263. package/out/shared/src/navigator.js +6 -5
  264. package/out/shared/src/navigator.js.map +1 -1
  265. package/out/shared/src/object-traversal.js +23 -23
  266. package/out/shared/src/object-traversal.js.map +1 -1
  267. package/out/shared/src/objects.js +15 -18
  268. package/out/shared/src/objects.js.map +1 -1
  269. package/out/shared/src/options.js +225 -302
  270. package/out/shared/src/options.js.map +1 -1
  271. package/out/shared/src/parse-big-int.js +12 -11
  272. package/out/shared/src/parse-big-int.js.map +1 -1
  273. package/out/shared/src/promise-race.js +21 -17
  274. package/out/shared/src/promise-race.js.map +1 -1
  275. package/out/shared/src/queue.js +124 -124
  276. package/out/shared/src/queue.js.map +1 -1
  277. package/out/shared/src/rand.js +13 -7
  278. package/out/shared/src/rand.js.map +1 -1
  279. package/out/shared/src/random-uint64.js +8 -7
  280. package/out/shared/src/random-uint64.js.map +1 -1
  281. package/out/shared/src/random-values.js +8 -11
  282. package/out/shared/src/random-values.js.map +1 -1
  283. package/out/shared/src/record-proxy.js +68 -57
  284. package/out/shared/src/record-proxy.js.map +1 -1
  285. package/out/shared/src/resolved-promises.js +9 -11
  286. package/out/shared/src/resolved-promises.js.map +1 -1
  287. package/out/shared/src/sentinels.js +9 -12
  288. package/out/shared/src/sentinels.js.map +1 -1
  289. package/out/shared/src/set-utils.js +41 -63
  290. package/out/shared/src/set-utils.js.map +1 -1
  291. package/out/shared/src/size-of-value.js +55 -51
  292. package/out/shared/src/size-of-value.js.map +1 -1
  293. package/out/shared/src/sleep.js +50 -45
  294. package/out/shared/src/sleep.js.map +1 -1
  295. package/out/shared/src/string-compare.js +8 -11
  296. package/out/shared/src/string-compare.js.map +1 -1
  297. package/out/shared/src/subscribable.js +34 -33
  298. package/out/shared/src/subscribable.js.map +1 -1
  299. package/out/shared/src/tdigest-schema.js +11 -7
  300. package/out/shared/src/tdigest-schema.js.map +1 -1
  301. package/out/shared/src/tdigest.js +197 -270
  302. package/out/shared/src/tdigest.js.map +1 -1
  303. package/out/shared/src/valita.js +145 -174
  304. package/out/shared/src/valita.js.map +1 -1
  305. package/out/z2s/src/compiler.d.ts.map +1 -1
  306. package/out/z2s/src/compiler.js +238 -468
  307. package/out/z2s/src/compiler.js.map +1 -1
  308. package/out/z2s/src/sql.d.ts +0 -1
  309. package/out/z2s/src/sql.d.ts.map +1 -1
  310. package/out/z2s/src/sql.js +149 -194
  311. package/out/z2s/src/sql.js.map +1 -1
  312. package/out/zero/package.js +193 -0
  313. package/out/zero/package.js.map +1 -0
  314. package/out/zero/src/adapters/drizzle.js +1 -6
  315. package/out/zero/src/adapters/pg.js +1 -6
  316. package/out/zero/src/adapters/postgresjs.js +1 -6
  317. package/out/zero/src/adapters/prisma.js +1 -5
  318. package/out/zero/src/analyze-query.js +1 -1
  319. package/out/zero/src/ast-to-zql.js +1 -1
  320. package/out/zero/src/bindings.js +6 -21
  321. package/out/zero/src/build-schema.js +5 -1
  322. package/out/zero/src/build-schema.js.map +1 -1
  323. package/out/zero/src/change-protocol/v0.js +3 -5
  324. package/out/zero/src/cli.js +2 -2
  325. package/out/zero/src/deploy-permissions.js +1 -1
  326. package/out/zero/src/expo-sqlite.js +2 -4
  327. package/out/zero/src/op-sqlite.js +2 -4
  328. package/out/zero/src/pg.js +2 -20
  329. package/out/zero/src/react-native.js +16 -12
  330. package/out/zero/src/react-native.js.map +1 -1
  331. package/out/zero/src/react.js +3 -12
  332. package/out/zero/src/server/runner/main.js +2 -0
  333. package/out/zero/src/server.js +2 -17
  334. package/out/zero/src/solid.js +3 -12
  335. package/out/zero/src/sqlite.js +2 -6
  336. package/out/zero/src/transform-query.js +1 -1
  337. package/out/zero/src/zero-cache-dev.js +124 -151
  338. package/out/zero/src/zero-cache-dev.js.map +1 -1
  339. package/out/zero/src/zero-out.js +9 -6
  340. package/out/zero/src/zero-out.js.map +1 -1
  341. package/out/zero/src/zero.js +6 -55
  342. package/out/zero/src/zqlite.js +2 -7
  343. package/out/zero-cache/src/auth/auth.js +138 -172
  344. package/out/zero-cache/src/auth/auth.js.map +1 -1
  345. package/out/zero-cache/src/auth/jwt.js +25 -33
  346. package/out/zero-cache/src/auth/jwt.js.map +1 -1
  347. package/out/zero-cache/src/auth/load-permissions.js +54 -62
  348. package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
  349. package/out/zero-cache/src/auth/read-authorizer.js +70 -80
  350. package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
  351. package/out/zero-cache/src/auth/write-authorizer.js +284 -432
  352. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  353. package/out/zero-cache/src/config/network.js +31 -45
  354. package/out/zero-cache/src/config/network.js.map +1 -1
  355. package/out/zero-cache/src/config/normalize.js +81 -83
  356. package/out/zero-cache/src/config/normalize.js.map +1 -1
  357. package/out/zero-cache/src/config/server-context.js +32 -29
  358. package/out/zero-cache/src/config/server-context.js.map +1 -1
  359. package/out/zero-cache/src/config/zero-config.d.ts +4 -0
  360. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  361. package/out/zero-cache/src/config/zero-config.js +753 -816
  362. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  363. package/out/zero-cache/src/custom/fetch.js +183 -230
  364. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  365. package/out/zero-cache/src/custom-queries/transform-query.js +93 -99
  366. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  367. package/out/zero-cache/src/db/create.js +27 -29
  368. package/out/zero-cache/src/db/create.js.map +1 -1
  369. package/out/zero-cache/src/db/delete-lite-db.js +11 -7
  370. package/out/zero-cache/src/db/delete-lite-db.js.map +1 -1
  371. package/out/zero-cache/src/db/lite-tables.d.ts +2 -1
  372. package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
  373. package/out/zero-cache/src/db/lite-tables.js +120 -156
  374. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  375. package/out/zero-cache/src/db/migration-lite.js +110 -178
  376. package/out/zero-cache/src/db/migration-lite.js.map +1 -1
  377. package/out/zero-cache/src/db/migration.js +82 -151
  378. package/out/zero-cache/src/db/migration.js.map +1 -1
  379. package/out/zero-cache/src/db/mode-enum.js +8 -9
  380. package/out/zero-cache/src/db/mode-enum.js.map +1 -1
  381. package/out/zero-cache/src/db/pg-copy.js +56 -54
  382. package/out/zero-cache/src/db/pg-copy.js.map +1 -1
  383. package/out/zero-cache/src/db/pg-to-lite.js +74 -110
  384. package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
  385. package/out/zero-cache/src/db/pg-type-parser.js +19 -36
  386. package/out/zero-cache/src/db/pg-type-parser.js.map +1 -1
  387. package/out/zero-cache/src/db/run-transaction.js +19 -20
  388. package/out/zero-cache/src/db/run-transaction.js.map +1 -1
  389. package/out/zero-cache/src/db/specs.d.ts +8 -2
  390. package/out/zero-cache/src/db/specs.d.ts.map +1 -1
  391. package/out/zero-cache/src/db/specs.js +42 -78
  392. package/out/zero-cache/src/db/specs.js.map +1 -1
  393. package/out/zero-cache/src/db/statements.js +52 -59
  394. package/out/zero-cache/src/db/statements.js.map +1 -1
  395. package/out/zero-cache/src/db/transaction-pool.js +376 -400
  396. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  397. package/out/zero-cache/src/db/warmup.js +13 -24
  398. package/out/zero-cache/src/db/warmup.js.map +1 -1
  399. package/out/zero-cache/src/observability/events.js +89 -99
  400. package/out/zero-cache/src/observability/events.js.map +1 -1
  401. package/out/zero-cache/src/observability/metrics.js +30 -54
  402. package/out/zero-cache/src/observability/metrics.js.map +1 -1
  403. package/out/zero-cache/src/scripts/decommission.js +42 -47
  404. package/out/zero-cache/src/scripts/decommission.js.map +1 -1
  405. package/out/zero-cache/src/scripts/deploy-permissions.js +106 -144
  406. package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
  407. package/out/zero-cache/src/scripts/permissions.js +86 -107
  408. package/out/zero-cache/src/scripts/permissions.js.map +1 -1
  409. package/out/zero-cache/src/server/anonymous-otel-start.js +306 -440
  410. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
  411. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  412. package/out/zero-cache/src/server/change-streamer.js +57 -128
  413. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  414. package/out/zero-cache/src/server/inspector-delegate.js +89 -100
  415. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  416. package/out/zero-cache/src/server/logging.js +18 -26
  417. package/out/zero-cache/src/server/logging.js.map +1 -1
  418. package/out/zero-cache/src/server/main.js +85 -142
  419. package/out/zero-cache/src/server/main.js.map +1 -1
  420. package/out/zero-cache/src/server/mutator.js +16 -13
  421. package/out/zero-cache/src/server/mutator.js.map +1 -1
  422. package/out/zero-cache/src/server/otel-diag-logger.js +42 -49
  423. package/out/zero-cache/src/server/otel-diag-logger.js.map +1 -1
  424. package/out/zero-cache/src/server/otel-log-sink.js +34 -44
  425. package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
  426. package/out/zero-cache/src/server/otel-start.js +43 -51
  427. package/out/zero-cache/src/server/otel-start.js.map +1 -1
  428. package/out/zero-cache/src/server/priority-op.js +27 -25
  429. package/out/zero-cache/src/server/priority-op.js.map +1 -1
  430. package/out/zero-cache/src/server/reaper.js +32 -43
  431. package/out/zero-cache/src/server/reaper.js.map +1 -1
  432. package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
  433. package/out/zero-cache/src/server/replicator.js +41 -57
  434. package/out/zero-cache/src/server/replicator.js.map +1 -1
  435. package/out/zero-cache/src/server/runner/main.js +7 -8
  436. package/out/zero-cache/src/server/runner/main.js.map +1 -1
  437. package/out/zero-cache/src/server/runner/run-worker.js +56 -52
  438. package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
  439. package/out/zero-cache/src/server/runner/runtime.js +26 -32
  440. package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
  441. package/out/zero-cache/src/server/runner/zero-dispatcher.js +22 -27
  442. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  443. package/out/zero-cache/src/server/syncer.js +79 -148
  444. package/out/zero-cache/src/server/syncer.js.map +1 -1
  445. package/out/zero-cache/src/server/worker-dispatcher.js +84 -113
  446. package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
  447. package/out/zero-cache/src/server/worker-urls.d.ts +2 -1
  448. package/out/zero-cache/src/server/worker-urls.d.ts.map +1 -1
  449. package/out/zero-cache/src/server/worker-urls.js +14 -18
  450. package/out/zero-cache/src/server/worker-urls.js.map +1 -1
  451. package/out/zero-cache/src/server/write-worker.js +2 -0
  452. package/out/zero-cache/src/services/analyze.js +61 -129
  453. package/out/zero-cache/src/services/analyze.js.map +1 -1
  454. package/out/zero-cache/src/services/change-source/common/backfill-manager.js +420 -419
  455. package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
  456. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js +111 -114
  457. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -1
  458. package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts +2 -0
  459. package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts.map +1 -1
  460. package/out/zero-cache/src/services/change-source/common/replica-schema.js +100 -115
  461. package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
  462. package/out/zero-cache/src/services/change-source/custom/change-source.js +154 -216
  463. package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
  464. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js +11 -14
  465. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +1 -1
  466. package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts.map +1 -1
  467. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +169 -209
  468. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
  469. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  470. package/out/zero-cache/src/services/change-source/pg/change-source.js +676 -835
  471. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  472. package/out/zero-cache/src/services/change-source/pg/decommission.js +19 -23
  473. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
  474. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +258 -411
  475. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  476. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js +59 -65
  477. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
  478. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js +218 -247
  479. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
  480. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +100 -142
  481. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
  482. package/out/zero-cache/src/services/change-source/pg/lsn.js +17 -19
  483. package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
  484. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +88 -98
  485. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  486. package/out/zero-cache/src/services/change-source/pg/schema/init.js +96 -177
  487. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  488. package/out/zero-cache/src/services/change-source/pg/schema/published.js +69 -107
  489. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
  490. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +151 -212
  491. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  492. package/out/zero-cache/src/services/change-source/pg/schema/validation.js +22 -53
  493. package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
  494. package/out/zero-cache/src/services/change-source/protocol/current/control.js +24 -12
  495. package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
  496. package/out/zero-cache/src/services/change-source/protocol/current/data.js +180 -290
  497. package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
  498. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js +21 -33
  499. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
  500. package/out/zero-cache/src/services/change-source/protocol/current/json.js +7 -18
  501. package/out/zero-cache/src/services/change-source/protocol/current/json.js.map +1 -1
  502. package/out/zero-cache/src/services/change-source/protocol/current/path.js +24 -5
  503. package/out/zero-cache/src/services/change-source/protocol/current/path.js.map +1 -1
  504. package/out/zero-cache/src/services/change-source/protocol/current/status.js +25 -19
  505. package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
  506. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js +24 -16
  507. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
  508. package/out/zero-cache/src/services/change-source/protocol/current.js +51 -46
  509. package/out/zero-cache/src/services/change-source/protocol/current.js.map +1 -1
  510. package/out/zero-cache/src/services/change-source/protocol/mod.js +2 -0
  511. package/out/zero-cache/src/services/change-streamer/backup-monitor.js +165 -171
  512. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  513. package/out/zero-cache/src/services/change-streamer/broadcast.d.ts +100 -0
  514. package/out/zero-cache/src/services/change-streamer/broadcast.d.ts.map +1 -0
  515. package/out/zero-cache/src/services/change-streamer/broadcast.js +165 -0
  516. package/out/zero-cache/src/services/change-streamer/broadcast.js.map +1 -0
  517. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +154 -221
  518. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  519. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +1 -1
  520. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  521. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +341 -293
  522. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  523. package/out/zero-cache/src/services/change-streamer/change-streamer.js +17 -24
  524. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  525. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +17 -1
  526. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +1 -1
  527. package/out/zero-cache/src/services/change-streamer/forwarder.js +85 -56
  528. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  529. package/out/zero-cache/src/services/change-streamer/replica-monitor.js +49 -43
  530. package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -1
  531. package/out/zero-cache/src/services/change-streamer/schema/init.js +61 -89
  532. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  533. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +20 -1
  534. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
  535. package/out/zero-cache/src/services/change-streamer/schema/tables.js +131 -109
  536. package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
  537. package/out/zero-cache/src/services/change-streamer/snapshot.js +26 -28
  538. package/out/zero-cache/src/services/change-streamer/snapshot.js.map +1 -1
  539. package/out/zero-cache/src/services/change-streamer/storer.js +434 -513
  540. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  541. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +18 -0
  542. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
  543. package/out/zero-cache/src/services/change-streamer/subscriber.js +143 -100
  544. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  545. package/out/zero-cache/src/services/heapz.js +18 -20
  546. package/out/zero-cache/src/services/heapz.js.map +1 -1
  547. package/out/zero-cache/src/services/http-service.js +59 -57
  548. package/out/zero-cache/src/services/http-service.js.map +1 -1
  549. package/out/zero-cache/src/services/life-cycle.js +182 -214
  550. package/out/zero-cache/src/services/life-cycle.js.map +1 -1
  551. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +102 -81
  552. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
  553. package/out/zero-cache/src/services/litestream/commands.js +144 -205
  554. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  555. package/out/zero-cache/src/services/mutagen/error.js +10 -14
  556. package/out/zero-cache/src/services/mutagen/error.js.map +1 -1
  557. package/out/zero-cache/src/services/mutagen/mutagen.js +166 -264
  558. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  559. package/out/zero-cache/src/services/mutagen/pusher.js +372 -487
  560. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  561. package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
  562. package/out/zero-cache/src/services/replicator/change-processor.js +483 -595
  563. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  564. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +4 -2
  565. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  566. package/out/zero-cache/src/services/replicator/incremental-sync.js +118 -143
  567. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  568. package/out/zero-cache/src/services/replicator/notifier.js +52 -28
  569. package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
  570. package/out/zero-cache/src/services/replicator/replication-status.js +105 -128
  571. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  572. package/out/zero-cache/src/services/replicator/replicator.d.ts +2 -1
  573. package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
  574. package/out/zero-cache/src/services/replicator/replicator.js +32 -34
  575. package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
  576. package/out/zero-cache/src/services/replicator/schema/change-log.js +101 -133
  577. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  578. package/out/zero-cache/src/services/replicator/schema/column-metadata.js +145 -174
  579. package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -1
  580. package/out/zero-cache/src/services/replicator/schema/constants.js +11 -5
  581. package/out/zero-cache/src/services/replicator/schema/constants.js.map +1 -1
  582. package/out/zero-cache/src/services/replicator/schema/replication-state.js +56 -107
  583. package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
  584. package/out/zero-cache/src/services/replicator/schema/table-metadata.d.ts +28 -7
  585. package/out/zero-cache/src/services/replicator/schema/table-metadata.d.ts.map +1 -1
  586. package/out/zero-cache/src/services/replicator/schema/table-metadata.js +96 -50
  587. package/out/zero-cache/src/services/replicator/schema/table-metadata.js.map +1 -1
  588. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts +69 -0
  589. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts.map +1 -0
  590. package/out/zero-cache/src/services/replicator/write-worker-client.js +96 -0
  591. package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -0
  592. package/out/zero-cache/src/services/replicator/write-worker.js +68 -0
  593. package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -0
  594. package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
  595. package/out/zero-cache/src/services/run-ast.js +79 -118
  596. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  597. package/out/zero-cache/src/services/runner.js +39 -41
  598. package/out/zero-cache/src/services/runner.js.map +1 -1
  599. package/out/zero-cache/src/services/running-state.js +129 -134
  600. package/out/zero-cache/src/services/running-state.js.map +1 -1
  601. package/out/zero-cache/src/services/statz.js +139 -200
  602. package/out/zero-cache/src/services/statz.js.map +1 -1
  603. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +46 -49
  604. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
  605. package/out/zero-cache/src/services/view-syncer/client-handler.js +257 -299
  606. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  607. package/out/zero-cache/src/services/view-syncer/client-schema.js +52 -82
  608. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  609. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +85 -107
  610. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
  611. package/out/zero-cache/src/services/view-syncer/cvr-store.js +604 -757
  612. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  613. package/out/zero-cache/src/services/view-syncer/cvr.js +631 -739
  614. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  615. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +60 -40
  616. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  617. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +95 -178
  618. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  619. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +3 -2
  620. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  621. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +574 -709
  622. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  623. package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts.map +1 -1
  624. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +246 -257
  625. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  626. package/out/zero-cache/src/services/view-syncer/schema/cvr.js +59 -45
  627. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
  628. package/out/zero-cache/src/services/view-syncer/schema/init.js +121 -189
  629. package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
  630. package/out/zero-cache/src/services/view-syncer/schema/types.js +138 -263
  631. package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
  632. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +3 -3
  633. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
  634. package/out/zero-cache/src/services/view-syncer/snapshotter.js +322 -331
  635. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  636. package/out/zero-cache/src/services/view-syncer/tracer.js +7 -6
  637. package/out/zero-cache/src/services/view-syncer/tracer.js.map +1 -1
  638. package/out/zero-cache/src/services/view-syncer/ttl-clock.js +9 -11
  639. package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
  640. package/out/zero-cache/src/services/view-syncer/view-syncer.js +1067 -1603
  641. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  642. package/out/zero-cache/src/types/error-with-level.js +19 -25
  643. package/out/zero-cache/src/types/error-with-level.js.map +1 -1
  644. package/out/zero-cache/src/types/http.js +17 -26
  645. package/out/zero-cache/src/types/http.js.map +1 -1
  646. package/out/zero-cache/src/types/lexi-version.js +28 -42
  647. package/out/zero-cache/src/types/lexi-version.js.map +1 -1
  648. package/out/zero-cache/src/types/lite.js +101 -121
  649. package/out/zero-cache/src/types/lite.js.map +1 -1
  650. package/out/zero-cache/src/types/names.js +6 -5
  651. package/out/zero-cache/src/types/names.js.map +1 -1
  652. package/out/zero-cache/src/types/pg-data-type.d.ts +1 -0
  653. package/out/zero-cache/src/types/pg-data-type.d.ts.map +1 -1
  654. package/out/zero-cache/src/types/pg-data-type.js +58 -73
  655. package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
  656. package/out/zero-cache/src/types/pg-types.js +12 -19
  657. package/out/zero-cache/src/types/pg-types.js.map +1 -1
  658. package/out/zero-cache/src/types/pg.js +144 -218
  659. package/out/zero-cache/src/types/pg.js.map +1 -1
  660. package/out/zero-cache/src/types/processes.js +95 -90
  661. package/out/zero-cache/src/types/processes.js.map +1 -1
  662. package/out/zero-cache/src/types/profiler.js +32 -27
  663. package/out/zero-cache/src/types/profiler.js.map +1 -1
  664. package/out/zero-cache/src/types/row-key.js +42 -30
  665. package/out/zero-cache/src/types/row-key.js.map +1 -1
  666. package/out/zero-cache/src/types/shards.js +36 -45
  667. package/out/zero-cache/src/types/shards.js.map +1 -1
  668. package/out/zero-cache/src/types/sql.js +20 -9
  669. package/out/zero-cache/src/types/sql.js.map +1 -1
  670. package/out/zero-cache/src/types/state-version.js +17 -23
  671. package/out/zero-cache/src/types/state-version.js.map +1 -1
  672. package/out/zero-cache/src/types/streams.js +234 -270
  673. package/out/zero-cache/src/types/streams.js.map +1 -1
  674. package/out/zero-cache/src/types/strings.js +10 -13
  675. package/out/zero-cache/src/types/strings.js.map +1 -1
  676. package/out/zero-cache/src/types/subscription.d.ts +3 -1
  677. package/out/zero-cache/src/types/subscription.d.ts.map +1 -1
  678. package/out/zero-cache/src/types/subscription.js +266 -214
  679. package/out/zero-cache/src/types/subscription.js.map +1 -1
  680. package/out/zero-cache/src/types/url-params.js +30 -39
  681. package/out/zero-cache/src/types/url-params.js.map +1 -1
  682. package/out/zero-cache/src/types/websocket-handoff.js +62 -75
  683. package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
  684. package/out/zero-cache/src/types/ws.js +43 -53
  685. package/out/zero-cache/src/types/ws.js.map +1 -1
  686. package/out/zero-cache/src/workers/connect-params.js +42 -43
  687. package/out/zero-cache/src/workers/connect-params.js.map +1 -1
  688. package/out/zero-cache/src/workers/connection.js +213 -282
  689. package/out/zero-cache/src/workers/connection.js.map +1 -1
  690. package/out/zero-cache/src/workers/mutator.js +22 -21
  691. package/out/zero-cache/src/workers/mutator.js.map +1 -1
  692. package/out/zero-cache/src/workers/replicator.d.ts +7 -0
  693. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  694. package/out/zero-cache/src/workers/replicator.js +92 -97
  695. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  696. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +121 -203
  697. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  698. package/out/zero-cache/src/workers/syncer.js +147 -201
  699. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  700. package/out/zero-client/src/client/active-clients-manager.js +178 -187
  701. package/out/zero-client/src/client/active-clients-manager.js.map +1 -1
  702. package/out/zero-client/src/client/bindings.js +11 -0
  703. package/out/zero-client/src/client/client-error-kind-enum.js +18 -29
  704. package/out/zero-client/src/client/client-error-kind-enum.js.map +1 -1
  705. package/out/zero-client/src/client/connection-manager.js +291 -346
  706. package/out/zero-client/src/client/connection-manager.js.map +1 -1
  707. package/out/zero-client/src/client/connection-status-enum.js +20 -15
  708. package/out/zero-client/src/client/connection-status-enum.js.map +1 -1
  709. package/out/zero-client/src/client/connection.js +92 -110
  710. package/out/zero-client/src/client/connection.js.map +1 -1
  711. package/out/zero-client/src/client/context.js +84 -100
  712. package/out/zero-client/src/client/context.js.map +1 -1
  713. package/out/zero-client/src/client/crud-impl.js +56 -88
  714. package/out/zero-client/src/client/crud-impl.js.map +1 -1
  715. package/out/zero-client/src/client/crud.js +127 -129
  716. package/out/zero-client/src/client/crud.js.map +1 -1
  717. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  718. package/out/zero-client/src/client/custom.js +50 -74
  719. package/out/zero-client/src/client/custom.js.map +1 -1
  720. package/out/zero-client/src/client/delete-clients-manager.js +72 -93
  721. package/out/zero-client/src/client/delete-clients-manager.js.map +1 -1
  722. package/out/zero-client/src/client/enable-analytics.js +8 -16
  723. package/out/zero-client/src/client/enable-analytics.js.map +1 -1
  724. package/out/zero-client/src/client/error.js +118 -133
  725. package/out/zero-client/src/client/error.js.map +1 -1
  726. package/out/zero-client/src/client/http-string.js +7 -7
  727. package/out/zero-client/src/client/http-string.js.map +1 -1
  728. package/out/zero-client/src/client/inspector/client-group.js +21 -26
  729. package/out/zero-client/src/client/inspector/client-group.js.map +1 -1
  730. package/out/zero-client/src/client/inspector/client.js +23 -26
  731. package/out/zero-client/src/client/inspector/client.js.map +1 -1
  732. package/out/zero-client/src/client/inspector/html-dialog-prompt.js +72 -73
  733. package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -1
  734. package/out/zero-client/src/client/inspector/inspector.js +46 -51
  735. package/out/zero-client/src/client/inspector/inspector.js.map +1 -1
  736. package/out/zero-client/src/client/inspector/lazy-inspector.js +132 -192
  737. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -1
  738. package/out/zero-client/src/client/inspector/query.js +72 -77
  739. package/out/zero-client/src/client/inspector/query.js.map +1 -1
  740. package/out/zero-client/src/client/ivm-branch.js +118 -145
  741. package/out/zero-client/src/client/ivm-branch.js.map +1 -1
  742. package/out/zero-client/src/client/keys.js +15 -31
  743. package/out/zero-client/src/client/keys.js.map +1 -1
  744. package/out/zero-client/src/client/log-options.js +43 -57
  745. package/out/zero-client/src/client/log-options.js.map +1 -1
  746. package/out/zero-client/src/client/make-mutate-property.js +46 -29
  747. package/out/zero-client/src/client/make-mutate-property.js.map +1 -1
  748. package/out/zero-client/src/client/make-replicache-mutators.js +80 -96
  749. package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
  750. package/out/zero-client/src/client/metric-name-enum.js +11 -15
  751. package/out/zero-client/src/client/metric-name-enum.js.map +1 -1
  752. package/out/zero-client/src/client/metrics.js +210 -237
  753. package/out/zero-client/src/client/metrics.js.map +1 -1
  754. package/out/zero-client/src/client/mutation-tracker.js +264 -354
  755. package/out/zero-client/src/client/mutation-tracker.js.map +1 -1
  756. package/out/zero-client/src/client/mutator-proxy.js +122 -151
  757. package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
  758. package/out/zero-client/src/client/options.js +7 -10
  759. package/out/zero-client/src/client/options.js.map +1 -1
  760. package/out/zero-client/src/client/query-manager.js +305 -373
  761. package/out/zero-client/src/client/query-manager.js.map +1 -1
  762. package/out/zero-client/src/client/reload-error-handler.js +80 -101
  763. package/out/zero-client/src/client/reload-error-handler.js.map +1 -1
  764. package/out/zero-client/src/client/server-option.js +30 -59
  765. package/out/zero-client/src/client/server-option.js.map +1 -1
  766. package/out/zero-client/src/client/update-needed-reason-type-enum.js +27 -9
  767. package/out/zero-client/src/client/update-needed-reason-type-enum.js.map +1 -1
  768. package/out/zero-client/src/client/version.js +9 -5
  769. package/out/zero-client/src/client/version.js.map +1 -1
  770. package/out/zero-client/src/client/zero-poke-handler.d.ts +1 -1
  771. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  772. package/out/zero-client/src/client/zero-poke-handler.js +205 -293
  773. package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
  774. package/out/zero-client/src/client/zero-rep.js +61 -68
  775. package/out/zero-client/src/client/zero-rep.js.map +1 -1
  776. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  777. package/out/zero-client/src/client/zero.js +1367 -1834
  778. package/out/zero-client/src/client/zero.js.map +1 -1
  779. package/out/zero-client/src/mod.js +21 -0
  780. package/out/zero-client/src/util/nanoid.js +13 -18
  781. package/out/zero-client/src/util/nanoid.js.map +1 -1
  782. package/out/zero-client/src/util/socket.js +6 -5
  783. package/out/zero-client/src/util/socket.js.map +1 -1
  784. package/out/zero-pg/src/mod.js +10 -0
  785. package/out/zero-protocol/src/analyze-query-result.js +108 -148
  786. package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
  787. package/out/zero-protocol/src/application-error.js +36 -34
  788. package/out/zero-protocol/src/application-error.js.map +1 -1
  789. package/out/zero-protocol/src/ast.js +236 -309
  790. package/out/zero-protocol/src/ast.js.map +1 -1
  791. package/out/zero-protocol/src/change-desired-queries.js +8 -13
  792. package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
  793. package/out/zero-protocol/src/client-schema.js +21 -42
  794. package/out/zero-protocol/src/client-schema.js.map +1 -1
  795. package/out/zero-protocol/src/close-connection.js +20 -12
  796. package/out/zero-protocol/src/close-connection.js.map +1 -1
  797. package/out/zero-protocol/src/connect.js +37 -52
  798. package/out/zero-protocol/src/connect.js.map +1 -1
  799. package/out/zero-protocol/src/custom-queries.js +34 -65
  800. package/out/zero-protocol/src/custom-queries.js.map +1 -1
  801. package/out/zero-protocol/src/data.js +6 -9
  802. package/out/zero-protocol/src/data.js.map +1 -1
  803. package/out/zero-protocol/src/delete-clients.js +11 -17
  804. package/out/zero-protocol/src/delete-clients.js.map +1 -1
  805. package/out/zero-protocol/src/down.js +11 -23
  806. package/out/zero-protocol/src/down.js.map +1 -1
  807. package/out/zero-protocol/src/error-kind-enum.js +24 -41
  808. package/out/zero-protocol/src/error-kind-enum.js.map +1 -1
  809. package/out/zero-protocol/src/error-origin-enum.js +8 -9
  810. package/out/zero-protocol/src/error-origin-enum.js.map +1 -1
  811. package/out/zero-protocol/src/error-reason-enum.js +12 -17
  812. package/out/zero-protocol/src/error-reason-enum.js.map +1 -1
  813. package/out/zero-protocol/src/error.js +76 -152
  814. package/out/zero-protocol/src/error.js.map +1 -1
  815. package/out/zero-protocol/src/inspect-down.js +51 -74
  816. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  817. package/out/zero-protocol/src/inspect-up.js +28 -46
  818. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  819. package/out/zero-protocol/src/mutation-id.js +9 -9
  820. package/out/zero-protocol/src/mutation-id.js.map +1 -1
  821. package/out/zero-protocol/src/mutation-type-enum.js +7 -7
  822. package/out/zero-protocol/src/mutation-type-enum.js.map +1 -1
  823. package/out/zero-protocol/src/mutations-patch.js +21 -16
  824. package/out/zero-protocol/src/mutations-patch.js.map +1 -1
  825. package/out/zero-protocol/src/ping.js +8 -9
  826. package/out/zero-protocol/src/ping.js.map +1 -1
  827. package/out/zero-protocol/src/poke.js +53 -59
  828. package/out/zero-protocol/src/poke.js.map +1 -1
  829. package/out/zero-protocol/src/pong.js +8 -9
  830. package/out/zero-protocol/src/pong.js.map +1 -1
  831. package/out/zero-protocol/src/primary-key.js +9 -19
  832. package/out/zero-protocol/src/primary-key.js.map +1 -1
  833. package/out/zero-protocol/src/protocol-version.js +5 -11
  834. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  835. package/out/zero-protocol/src/pull.js +16 -28
  836. package/out/zero-protocol/src/pull.js.map +1 -1
  837. package/out/zero-protocol/src/push.js +162 -209
  838. package/out/zero-protocol/src/push.js.map +1 -1
  839. package/out/zero-protocol/src/queries-patch.js +22 -30
  840. package/out/zero-protocol/src/queries-patch.js.map +1 -1
  841. package/out/zero-protocol/src/query-hash.js +14 -17
  842. package/out/zero-protocol/src/query-hash.js.map +1 -1
  843. package/out/zero-protocol/src/row-patch.js +23 -30
  844. package/out/zero-protocol/src/row-patch.js.map +1 -1
  845. package/out/zero-protocol/src/up.js +11 -22
  846. package/out/zero-protocol/src/up.js.map +1 -1
  847. package/out/zero-protocol/src/update-auth.js +8 -13
  848. package/out/zero-protocol/src/update-auth.js.map +1 -1
  849. package/out/zero-protocol/src/version.js +8 -9
  850. package/out/zero-protocol/src/version.js.map +1 -1
  851. package/out/zero-react/src/bindings.js +12 -0
  852. package/out/zero-react/src/mod.js +5 -0
  853. package/out/zero-react/src/use-connection-state.js +14 -11
  854. package/out/zero-react/src/use-connection-state.js.map +1 -1
  855. package/out/zero-react/src/use-query.js +283 -281
  856. package/out/zero-react/src/use-query.js.map +1 -1
  857. package/out/zero-react/src/use-zero-online.js +17 -11
  858. package/out/zero-react/src/use-zero-online.js.map +1 -1
  859. package/out/zero-react/src/zero-provider.js +53 -69
  860. package/out/zero-react/src/zero-provider.js.map +1 -1
  861. package/out/zero-react/src/zero.js +22 -0
  862. package/out/zero-schema/src/builder/relationship-builder.js +25 -21
  863. package/out/zero-schema/src/builder/relationship-builder.js.map +1 -1
  864. package/out/zero-schema/src/builder/schema-builder.js +51 -79
  865. package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
  866. package/out/zero-schema/src/builder/table-builder.js +99 -116
  867. package/out/zero-schema/src/builder/table-builder.js.map +1 -1
  868. package/out/zero-schema/src/compiled-permissions.js +21 -25
  869. package/out/zero-schema/src/compiled-permissions.js.map +1 -1
  870. package/out/zero-schema/src/name-mapper.js +31 -47
  871. package/out/zero-schema/src/name-mapper.js.map +1 -1
  872. package/out/zero-schema/src/permissions.js +94 -181
  873. package/out/zero-schema/src/permissions.js.map +1 -1
  874. package/out/zero-schema/src/schema-config.js +26 -32
  875. package/out/zero-schema/src/schema-config.js.map +1 -1
  876. package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -1
  877. package/out/zero-server/src/adapters/drizzle.js +79 -76
  878. package/out/zero-server/src/adapters/drizzle.js.map +1 -1
  879. package/out/zero-server/src/adapters/pg.d.ts.map +1 -1
  880. package/out/zero-server/src/adapters/pg.js +79 -55
  881. package/out/zero-server/src/adapters/pg.js.map +1 -1
  882. package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
  883. package/out/zero-server/src/adapters/postgresjs.js +66 -40
  884. package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
  885. package/out/zero-server/src/adapters/prisma.d.ts.map +1 -1
  886. package/out/zero-server/src/adapters/prisma.js +75 -55
  887. package/out/zero-server/src/adapters/prisma.js.map +1 -1
  888. package/out/zero-server/src/custom.d.ts.map +1 -1
  889. package/out/zero-server/src/custom.js +188 -265
  890. package/out/zero-server/src/custom.js.map +1 -1
  891. package/out/zero-server/src/logging.js +6 -5
  892. package/out/zero-server/src/logging.js.map +1 -1
  893. package/out/zero-server/src/mod.js +8 -0
  894. package/out/zero-server/src/pg-query-executor.js +14 -17
  895. package/out/zero-server/src/pg-query-executor.js.map +1 -1
  896. package/out/zero-server/src/process-mutations.js +293 -365
  897. package/out/zero-server/src/process-mutations.js.map +1 -1
  898. package/out/zero-server/src/push-processor.js +33 -49
  899. package/out/zero-server/src/push-processor.js.map +1 -1
  900. package/out/zero-server/src/queries/process-queries.js +106 -96
  901. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  902. package/out/zero-server/src/schema.js +98 -144
  903. package/out/zero-server/src/schema.js.map +1 -1
  904. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  905. package/out/zero-server/src/zql-database.js +54 -69
  906. package/out/zero-server/src/zql-database.js.map +1 -1
  907. package/out/zero-solid/src/bindings.js +12 -0
  908. package/out/zero-solid/src/mod.js +5 -0
  909. package/out/zero-solid/src/solid-view.js +135 -227
  910. package/out/zero-solid/src/solid-view.js.map +1 -1
  911. package/out/zero-solid/src/use-connection-state.js +18 -14
  912. package/out/zero-solid/src/use-connection-state.js.map +1 -1
  913. package/out/zero-solid/src/use-query.js +55 -100
  914. package/out/zero-solid/src/use-query.js.map +1 -1
  915. package/out/zero-solid/src/use-zero-online.js +18 -12
  916. package/out/zero-solid/src/use-zero-online.js.map +1 -1
  917. package/out/zero-solid/src/use-zero.js +65 -77
  918. package/out/zero-solid/src/use-zero.js.map +1 -1
  919. package/out/zero-solid/src/zero.js +22 -0
  920. package/out/zero-types/src/format.js +8 -7
  921. package/out/zero-types/src/format.js.map +1 -1
  922. package/out/zero-types/src/name-mapper.js +34 -47
  923. package/out/zero-types/src/name-mapper.js.map +1 -1
  924. package/out/zql/src/builder/builder.d.ts.map +1 -1
  925. package/out/zql/src/builder/builder.js +315 -476
  926. package/out/zql/src/builder/builder.js.map +1 -1
  927. package/out/zql/src/builder/debug-delegate.js +69 -74
  928. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  929. package/out/zql/src/builder/filter.js +116 -140
  930. package/out/zql/src/builder/filter.js.map +1 -1
  931. package/out/zql/src/builder/like.js +41 -46
  932. package/out/zql/src/builder/like.js.map +1 -1
  933. package/out/zql/src/error.js +10 -9
  934. package/out/zql/src/error.js.map +1 -1
  935. package/out/zql/src/ivm/array-view.js +89 -91
  936. package/out/zql/src/ivm/array-view.js.map +1 -1
  937. package/out/zql/src/ivm/constraint.js +65 -74
  938. package/out/zql/src/ivm/constraint.js.map +1 -1
  939. package/out/zql/src/ivm/data.js +61 -48
  940. package/out/zql/src/ivm/data.js.map +1 -1
  941. package/out/zql/src/ivm/exists.js +164 -213
  942. package/out/zql/src/ivm/exists.js.map +1 -1
  943. package/out/zql/src/ivm/fan-in.js +62 -59
  944. package/out/zql/src/ivm/fan-in.js.map +1 -1
  945. package/out/zql/src/ivm/fan-out.js +52 -61
  946. package/out/zql/src/ivm/fan-out.js.map +1 -1
  947. package/out/zql/src/ivm/filter-operators.js +91 -96
  948. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  949. package/out/zql/src/ivm/filter-push.js +22 -26
  950. package/out/zql/src/ivm/filter-push.js.map +1 -1
  951. package/out/zql/src/ivm/filter.js +41 -35
  952. package/out/zql/src/ivm/filter.js.map +1 -1
  953. package/out/zql/src/ivm/flipped-join.js +282 -391
  954. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  955. package/out/zql/src/ivm/join-utils.js +85 -115
  956. package/out/zql/src/ivm/join-utils.js.map +1 -1
  957. package/out/zql/src/ivm/join.js +162 -231
  958. package/out/zql/src/ivm/join.js.map +1 -1
  959. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +21 -25
  960. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
  961. package/out/zql/src/ivm/memory-source.js +364 -503
  962. package/out/zql/src/ivm/memory-source.js.map +1 -1
  963. package/out/zql/src/ivm/memory-storage.js +33 -34
  964. package/out/zql/src/ivm/memory-storage.js.map +1 -1
  965. package/out/zql/src/ivm/operator.js +13 -15
  966. package/out/zql/src/ivm/operator.js.map +1 -1
  967. package/out/zql/src/ivm/push-accumulated.js +267 -270
  968. package/out/zql/src/ivm/push-accumulated.js.map +1 -1
  969. package/out/zql/src/ivm/skip.js +91 -104
  970. package/out/zql/src/ivm/skip.js.map +1 -1
  971. package/out/zql/src/ivm/stream.js +10 -10
  972. package/out/zql/src/ivm/stream.js.map +1 -1
  973. package/out/zql/src/ivm/take.js +422 -569
  974. package/out/zql/src/ivm/take.js.map +1 -1
  975. package/out/zql/src/ivm/union-fan-in.js +157 -231
  976. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  977. package/out/zql/src/ivm/union-fan-out.js +38 -43
  978. package/out/zql/src/ivm/union-fan-out.js.map +1 -1
  979. package/out/zql/src/ivm/view-apply-change.js +166 -255
  980. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  981. package/out/zql/src/mutate/crud.js +35 -34
  982. package/out/zql/src/mutate/crud.js.map +1 -1
  983. package/out/zql/src/mutate/custom.d.ts.map +1 -1
  984. package/out/zql/src/mutate/custom.js +7 -11
  985. package/out/zql/src/mutate/custom.js.map +1 -1
  986. package/out/zql/src/mutate/mutator-registry.js +67 -71
  987. package/out/zql/src/mutate/mutator-registry.js.map +1 -1
  988. package/out/zql/src/mutate/mutator.js +26 -25
  989. package/out/zql/src/mutate/mutator.js.map +1 -1
  990. package/out/zql/src/planner/planner-builder.js +134 -239
  991. package/out/zql/src/planner/planner-builder.js.map +1 -1
  992. package/out/zql/src/planner/planner-connection.js +222 -212
  993. package/out/zql/src/planner/planner-connection.js.map +1 -1
  994. package/out/zql/src/planner/planner-constraint.js +15 -7
  995. package/out/zql/src/planner/planner-constraint.js.map +1 -1
  996. package/out/zql/src/planner/planner-debug.js +199 -224
  997. package/out/zql/src/planner/planner-debug.js.map +1 -1
  998. package/out/zql/src/planner/planner-fan-in.js +146 -162
  999. package/out/zql/src/planner/planner-fan-in.js.map +1 -1
  1000. package/out/zql/src/planner/planner-fan-out.js +62 -74
  1001. package/out/zql/src/planner/planner-fan-out.js.map +1 -1
  1002. package/out/zql/src/planner/planner-graph.js +302 -334
  1003. package/out/zql/src/planner/planner-graph.js.map +1 -1
  1004. package/out/zql/src/planner/planner-join.js +255 -240
  1005. package/out/zql/src/planner/planner-join.js.map +1 -1
  1006. package/out/zql/src/planner/planner-node.js +10 -6
  1007. package/out/zql/src/planner/planner-node.js.map +1 -1
  1008. package/out/zql/src/planner/planner-source.js +15 -22
  1009. package/out/zql/src/planner/planner-source.js.map +1 -1
  1010. package/out/zql/src/planner/planner-terminus.js +28 -28
  1011. package/out/zql/src/planner/planner-terminus.js.map +1 -1
  1012. package/out/zql/src/query/complete-ordering.js +37 -61
  1013. package/out/zql/src/query/complete-ordering.js.map +1 -1
  1014. package/out/zql/src/query/create-builder.js +14 -22
  1015. package/out/zql/src/query/create-builder.js.map +1 -1
  1016. package/out/zql/src/query/error.js +10 -12
  1017. package/out/zql/src/query/error.js.map +1 -1
  1018. package/out/zql/src/query/escape-like.js +6 -5
  1019. package/out/zql/src/query/escape-like.js.map +1 -1
  1020. package/out/zql/src/query/expression.js +138 -157
  1021. package/out/zql/src/query/expression.js.map +1 -1
  1022. package/out/zql/src/query/measure-push-operator.js +35 -38
  1023. package/out/zql/src/query/measure-push-operator.js.map +1 -1
  1024. package/out/zql/src/query/metrics-delegate.js +7 -7
  1025. package/out/zql/src/query/metrics-delegate.js.map +1 -1
  1026. package/out/zql/src/query/named.js +52 -51
  1027. package/out/zql/src/query/named.js.map +1 -1
  1028. package/out/zql/src/query/query-delegate-base.js +190 -238
  1029. package/out/zql/src/query/query-delegate-base.js.map +1 -1
  1030. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  1031. package/out/zql/src/query/query-impl.js +271 -405
  1032. package/out/zql/src/query/query-impl.js.map +1 -1
  1033. package/out/zql/src/query/query-internals.js +16 -8
  1034. package/out/zql/src/query/query-internals.js.map +1 -1
  1035. package/out/zql/src/query/query-registry.js +83 -98
  1036. package/out/zql/src/query/query-registry.js.map +1 -1
  1037. package/out/zql/src/query/query.d.ts.map +1 -1
  1038. package/out/zql/src/query/query.js +2 -0
  1039. package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
  1040. package/out/zql/src/query/runnable-query-impl.js +30 -55
  1041. package/out/zql/src/query/runnable-query-impl.js.map +1 -1
  1042. package/out/zql/src/query/static-query.js +7 -14
  1043. package/out/zql/src/query/static-query.js.map +1 -1
  1044. package/out/zql/src/query/ttl.js +45 -67
  1045. package/out/zql/src/query/ttl.js.map +1 -1
  1046. package/out/zql/src/query/validate-input.js +23 -20
  1047. package/out/zql/src/query/validate-input.js.map +1 -1
  1048. package/out/zqlite/src/database-storage.js +99 -103
  1049. package/out/zqlite/src/database-storage.js.map +1 -1
  1050. package/out/zqlite/src/db.js +206 -249
  1051. package/out/zqlite/src/db.js.map +1 -1
  1052. package/out/zqlite/src/explain-queries.js +11 -13
  1053. package/out/zqlite/src/explain-queries.js.map +1 -1
  1054. package/out/zqlite/src/internal/sql-inline.js +54 -37
  1055. package/out/zqlite/src/internal/sql-inline.js.map +1 -1
  1056. package/out/zqlite/src/internal/sql.js +17 -15
  1057. package/out/zqlite/src/internal/sql.js.map +1 -1
  1058. package/out/zqlite/src/internal/statement-cache.js +117 -92
  1059. package/out/zqlite/src/internal/statement-cache.js.map +1 -1
  1060. package/out/zqlite/src/mod.js +5 -0
  1061. package/out/zqlite/src/query-builder.js +81 -172
  1062. package/out/zqlite/src/query-builder.js.map +1 -1
  1063. package/out/zqlite/src/query-delegate.js +45 -55
  1064. package/out/zqlite/src/query-delegate.js.map +1 -1
  1065. package/out/zqlite/src/resolve-scalar-subqueries.js +134 -124
  1066. package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
  1067. package/out/zqlite/src/sqlite-cost-model.js +92 -97
  1068. package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
  1069. package/out/zqlite/src/sqlite-stat-fanout.js +304 -286
  1070. package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
  1071. package/out/zqlite/src/table-source.js +281 -455
  1072. package/out/zqlite/src/table-source.js.map +1 -1
  1073. package/package.json +8 -7
  1074. package/out/replicache/src/db/index-operation-enum.js +0 -7
  1075. package/out/replicache/src/db/index-operation-enum.js.map +0 -1
  1076. package/out/replicache/src/db/meta-type-enum.js +0 -7
  1077. package/out/replicache/src/db/meta-type-enum.js.map +0 -1
  1078. package/out/replicache/src/format-version-enum.js +0 -11
  1079. package/out/replicache/src/format-version-enum.js.map +0 -1
  1080. package/out/replicache/src/http-status-unauthorized.js +0 -5
  1081. package/out/replicache/src/http-status-unauthorized.js.map +0 -1
  1082. package/out/replicache/src/invoke-kind-enum.js +0 -7
  1083. package/out/replicache/src/invoke-kind-enum.js.map +0 -1
  1084. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js +0 -9
  1085. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js.map +0 -1
  1086. package/out/zero/package.json.js +0 -9
  1087. package/out/zero/package.json.js.map +0 -1
  1088. package/out/zero/src/adapters/drizzle.js.map +0 -1
  1089. package/out/zero/src/adapters/pg.js.map +0 -1
  1090. package/out/zero/src/adapters/postgresjs.js.map +0 -1
  1091. package/out/zero/src/adapters/prisma.js.map +0 -1
  1092. package/out/zero/src/analyze-query.js.map +0 -1
  1093. package/out/zero/src/ast-to-zql.js.map +0 -1
  1094. package/out/zero/src/bindings.js.map +0 -1
  1095. package/out/zero/src/change-protocol/v0.js.map +0 -1
  1096. package/out/zero/src/cli.js.map +0 -1
  1097. package/out/zero/src/deploy-permissions.js.map +0 -1
  1098. package/out/zero/src/expo-sqlite.js.map +0 -1
  1099. package/out/zero/src/op-sqlite.js.map +0 -1
  1100. package/out/zero/src/pg.js.map +0 -1
  1101. package/out/zero/src/react.js.map +0 -1
  1102. package/out/zero/src/server.js.map +0 -1
  1103. package/out/zero/src/solid.js.map +0 -1
  1104. package/out/zero/src/sqlite.js.map +0 -1
  1105. package/out/zero/src/transform-query.js.map +0 -1
  1106. package/out/zero/src/zero.js.map +0 -1
  1107. package/out/zero/src/zqlite.js.map +0 -1
  1108. package/out/zero-cache/src/db/postgres-replica-identity-enum.js +0 -11
  1109. package/out/zero-cache/src/db/postgres-replica-identity-enum.js.map +0 -1
  1110. package/out/zero-cache/src/db/postgres-type-class-enum.js +0 -17
  1111. package/out/zero-cache/src/db/postgres-type-class-enum.js.map +0 -1
  1112. package/out/zero-cache/src/services/change-streamer/error-type-enum.js +0 -9
  1113. package/out/zero-cache/src/services/change-streamer/error-type-enum.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sources":["../../../../../zql/src/builder/filter.ts"],"sourcesContent":["import {assert, unreachable} from '../../../shared/src/asserts.ts';\nimport type {\n Condition,\n SimpleCondition,\n SimpleOperator,\n} from '../../../zero-protocol/src/ast.ts';\nimport type {Row, Value} from '../../../zero-protocol/src/data.ts';\nimport {simplifyCondition} from '../query/expression.ts';\nimport {getLikePredicate} from './like.ts';\n\nexport type NonNullValue = Exclude<Value, null | undefined>;\nexport type SimplePredicate = (rhs: Value) => boolean;\nexport type SimplePredicateNoNull = (rhs: NonNullValue) => boolean;\n\nexport type NoSubqueryCondition =\n | SimpleCondition\n | {\n type: 'and';\n conditions: readonly NoSubqueryCondition[];\n }\n | {\n type: 'or';\n conditions: readonly NoSubqueryCondition[];\n };\n\nexport function createPredicate(\n condition: NoSubqueryCondition,\n): (row: Row) => boolean {\n if (condition.type !== 'simple') {\n const predicates = condition.conditions.map(c => createPredicate(c));\n return condition.type === 'and'\n ? (row: Row) => {\n // and\n for (const predicate of predicates) {\n if (!predicate(row)) {\n return false;\n }\n }\n return true;\n }\n : (row: Row) => {\n // or\n for (const predicate of predicates) {\n if (predicate(row)) {\n return true;\n }\n }\n return false;\n };\n }\n const {left} = condition;\n const {right} = condition;\n assert(\n right.type !== 'static',\n 'static values should be resolved before creating predicates',\n );\n assert(\n left.type !== 'static',\n 'static values should be resolved before creating predicates',\n );\n\n switch (condition.op) {\n case 'IS':\n case 'IS NOT': {\n const impl = createIsPredicate(right.value, condition.op);\n if (left.type === 'literal') {\n const result = impl(left.value);\n return () => result;\n }\n return (row: Row) => impl(row[left.name]);\n }\n }\n\n if (right.value === null || right.value === undefined) {\n return (_row: Row) => false;\n }\n\n const impl = createPredicateImpl(right.value, condition.op);\n if (left.type === 'literal') {\n if (left.value === null || left.value === undefined) {\n return (_row: Row) => false;\n }\n const result = impl(left.value);\n return () => result;\n }\n\n return (row: Row) => {\n const lhs = row[left.name];\n if (lhs === null || lhs === undefined) {\n return false;\n }\n return impl(lhs);\n };\n}\n\nfunction createIsPredicate(\n rhs: Value | readonly Value[],\n operator: 'IS' | 'IS NOT',\n): SimplePredicate {\n switch (operator) {\n case 'IS':\n return lhs => lhs === rhs;\n case 'IS NOT':\n return lhs => lhs !== rhs;\n }\n}\n\nfunction createPredicateImpl(\n rhs: NonNullValue | readonly NonNullValue[],\n operator: Exclude<SimpleOperator, 'IS' | 'IS NOT'>,\n): SimplePredicateNoNull {\n switch (operator) {\n case '=':\n return lhs => lhs === rhs;\n case '!=':\n return lhs => lhs !== rhs;\n case '<':\n return lhs => lhs < rhs;\n case '<=':\n return lhs => lhs <= rhs;\n case '>':\n return lhs => lhs > rhs;\n case '>=':\n return lhs => lhs >= rhs;\n case 'LIKE':\n return getLikePredicate(rhs, '');\n case 'NOT LIKE':\n return not(getLikePredicate(rhs, ''));\n case 'ILIKE':\n return getLikePredicate(rhs, 'i');\n case 'NOT ILIKE':\n return not(getLikePredicate(rhs, 'i'));\n case 'IN': {\n assert(Array.isArray(rhs), 'Expected rhs to be an array for IN operator');\n const set = new Set(rhs);\n return lhs => set.has(lhs);\n }\n case 'NOT IN': {\n assert(\n Array.isArray(rhs),\n 'Expected rhs to be an array for NOT IN operator',\n );\n const set = new Set(rhs);\n return lhs => !set.has(lhs);\n }\n default:\n operator satisfies never;\n throw new Error(`Unexpected operator: ${operator}`);\n }\n}\n\nfunction not<T>(f: (lhs: T) => boolean) {\n return (lhs: T) => !f(lhs);\n}\n\n/**\n * If the condition contains any CorrelatedSubqueryConditions, returns a\n * transformed condition which contains no CorrelatedSubqueryCondition(s) but\n * which will filter a subset of the rows that would be filtered by the original\n * condition, or undefined if no such transformation exists.\n *\n * If the condition does not contain any CorrelatedSubqueryConditions\n * returns the condition unmodified and `conditionsRemoved: false`.\n */\nexport function transformFilters(filters: Condition | undefined): {\n filters: NoSubqueryCondition | undefined;\n conditionsRemoved: boolean;\n} {\n if (!filters) {\n return {filters: undefined, conditionsRemoved: false};\n }\n switch (filters.type) {\n case 'simple':\n return {filters, conditionsRemoved: false};\n case 'correlatedSubquery':\n return {filters: undefined, conditionsRemoved: true};\n case 'and':\n case 'or': {\n const transformedConditions: NoSubqueryCondition[] = [];\n let conditionsRemoved = false;\n for (const cond of filters.conditions) {\n const transformed = transformFilters(cond);\n // If any branch of the OR ends up empty, the entire OR needs\n // to be removed.\n if (transformed.filters === undefined && filters.type === 'or') {\n return {filters: undefined, conditionsRemoved: true};\n }\n conditionsRemoved = conditionsRemoved || transformed.conditionsRemoved;\n if (transformed.filters) {\n transformedConditions.push(transformed.filters);\n }\n }\n return {\n filters: simplifyCondition({\n type: filters.type,\n conditions: transformedConditions,\n }) as NoSubqueryCondition,\n conditionsRemoved,\n };\n }\n default:\n unreachable(filters);\n }\n}\n"],"names":["impl"],"mappings":";;;AAyBO,SAAS,gBACd,WACuB;AACvB,MAAI,UAAU,SAAS,UAAU;AAC/B,UAAM,aAAa,UAAU,WAAW,IAAI,CAAA,MAAK,gBAAgB,CAAC,CAAC;AACnE,WAAO,UAAU,SAAS,QACtB,CAAC,QAAa;AAEZ,iBAAW,aAAa,YAAY;AAClC,YAAI,CAAC,UAAU,GAAG,GAAG;AACnB,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT,IACA,CAAC,QAAa;AAEZ,iBAAW,aAAa,YAAY;AAClC,YAAI,UAAU,GAAG,GAAG;AAClB,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACN;AACA,QAAM,EAAC,SAAQ;AACf,QAAM,EAAC,UAAS;AAChB;AAAA,IACE,MAAM,SAAS;AAAA,IACf;AAAA,EAAA;AAEF;AAAA,IACE,KAAK,SAAS;AAAA,IACd;AAAA,EAAA;AAGF,UAAQ,UAAU,IAAA;AAAA,IAChB,KAAK;AAAA,IACL,KAAK,UAAU;AACb,YAAMA,QAAO,kBAAkB,MAAM,OAAO,UAAU,EAAE;AACxD,UAAI,KAAK,SAAS,WAAW;AAC3B,cAAM,SAASA,MAAK,KAAK,KAAK;AAC9B,eAAO,MAAM;AAAA,MACf;AACA,aAAO,CAAC,QAAaA,MAAK,IAAI,KAAK,IAAI,CAAC;AAAA,IAC1C;AAAA,EAAA;AAGF,MAAI,MAAM,UAAU,QAAQ,MAAM,UAAU,QAAW;AACrD,WAAO,CAAC,SAAc;AAAA,EACxB;AAEA,QAAM,OAAO,oBAAoB,MAAM,OAAO,UAAU,EAAE;AAC1D,MAAI,KAAK,SAAS,WAAW;AAC3B,QAAI,KAAK,UAAU,QAAQ,KAAK,UAAU,QAAW;AACnD,aAAO,CAAC,SAAc;AAAA,IACxB;AACA,UAAM,SAAS,KAAK,KAAK,KAAK;AAC9B,WAAO,MAAM;AAAA,EACf;AAEA,SAAO,CAAC,QAAa;AACnB,UAAM,MAAM,IAAI,KAAK,IAAI;AACzB,QAAI,QAAQ,QAAQ,QAAQ,QAAW;AACrC,aAAO;AAAA,IACT;AACA,WAAO,KAAK,GAAG;AAAA,EACjB;AACF;AAEA,SAAS,kBACP,KACA,UACiB;AACjB,UAAQ,UAAA;AAAA,IACN,KAAK;AACH,aAAO,SAAO,QAAQ;AAAA,IACxB,KAAK;AACH,aAAO,SAAO,QAAQ;AAAA,EAAA;AAE5B;AAEA,SAAS,oBACP,KACA,UACuB;AACvB,UAAQ,UAAA;AAAA,IACN,KAAK;AACH,aAAO,SAAO,QAAQ;AAAA,IACxB,KAAK;AACH,aAAO,SAAO,QAAQ;AAAA,IACxB,KAAK;AACH,aAAO,SAAO,MAAM;AAAA,IACtB,KAAK;AACH,aAAO,SAAO,OAAO;AAAA,IACvB,KAAK;AACH,aAAO,SAAO,MAAM;AAAA,IACtB,KAAK;AACH,aAAO,SAAO,OAAO;AAAA,IACvB,KAAK;AACH,aAAO,iBAAiB,KAAK,EAAE;AAAA,IACjC,KAAK;AACH,aAAO,IAAI,iBAAiB,KAAK,EAAE,CAAC;AAAA,IACtC,KAAK;AACH,aAAO,iBAAiB,KAAK,GAAG;AAAA,IAClC,KAAK;AACH,aAAO,IAAI,iBAAiB,KAAK,GAAG,CAAC;AAAA,IACvC,KAAK,MAAM;AACT,aAAO,MAAM,QAAQ,GAAG,GAAG,6CAA6C;AACxE,YAAM,MAAM,IAAI,IAAI,GAAG;AACvB,aAAO,CAAA,QAAO,IAAI,IAAI,GAAG;AAAA,IAC3B;AAAA,IACA,KAAK,UAAU;AACb;AAAA,QACE,MAAM,QAAQ,GAAG;AAAA,QACjB;AAAA,MAAA;AAEF,YAAM,MAAM,IAAI,IAAI,GAAG;AACvB,aAAO,CAAA,QAAO,CAAC,IAAI,IAAI,GAAG;AAAA,IAC5B;AAAA,IACA;AAEE,YAAM,IAAI,MAAM,wBAAwB,QAAQ,EAAE;AAAA,EAAA;AAExD;AAEA,SAAS,IAAO,GAAwB;AACtC,SAAO,CAAC,QAAW,CAAC,EAAE,GAAG;AAC3B;AAWO,SAAS,iBAAiB,SAG/B;AACA,MAAI,CAAC,SAAS;AACZ,WAAO,EAAC,SAAS,QAAW,mBAAmB,MAAA;AAAA,EACjD;AACA,UAAQ,QAAQ,MAAA;AAAA,IACd,KAAK;AACH,aAAO,EAAC,SAAS,mBAAmB,MAAA;AAAA,IACtC,KAAK;AACH,aAAO,EAAC,SAAS,QAAW,mBAAmB,KAAA;AAAA,IACjD,KAAK;AAAA,IACL,KAAK,MAAM;AACT,YAAM,wBAA+C,CAAA;AACrD,UAAI,oBAAoB;AACxB,iBAAW,QAAQ,QAAQ,YAAY;AACrC,cAAM,cAAc,iBAAiB,IAAI;AAGzC,YAAI,YAAY,YAAY,UAAa,QAAQ,SAAS,MAAM;AAC9D,iBAAO,EAAC,SAAS,QAAW,mBAAmB,KAAA;AAAA,QACjD;AACA,4BAAoB,qBAAqB,YAAY;AACrD,YAAI,YAAY,SAAS;AACvB,gCAAsB,KAAK,YAAY,OAAO;AAAA,QAChD;AAAA,MACF;AACA,aAAO;AAAA,QACL,SAAS,kBAAkB;AAAA,UACzB,MAAM,QAAQ;AAAA,UACd,YAAY;AAAA,QAAA,CACb;AAAA,QACD;AAAA,MAAA;AAAA,IAEJ;AAAA,IACA;AACE,kBAAmB;AAAA,EAAA;AAEzB;"}
1
+ {"version":3,"file":"filter.js","names":[],"sources":["../../../../../zql/src/builder/filter.ts"],"sourcesContent":["import {assert, unreachable} from '../../../shared/src/asserts.ts';\nimport type {\n Condition,\n SimpleCondition,\n SimpleOperator,\n} from '../../../zero-protocol/src/ast.ts';\nimport type {Row, Value} from '../../../zero-protocol/src/data.ts';\nimport {simplifyCondition} from '../query/expression.ts';\nimport {getLikePredicate} from './like.ts';\n\nexport type NonNullValue = Exclude<Value, null | undefined>;\nexport type SimplePredicate = (rhs: Value) => boolean;\nexport type SimplePredicateNoNull = (rhs: NonNullValue) => boolean;\n\nexport type NoSubqueryCondition =\n | SimpleCondition\n | {\n type: 'and';\n conditions: readonly NoSubqueryCondition[];\n }\n | {\n type: 'or';\n conditions: readonly NoSubqueryCondition[];\n };\n\nexport function createPredicate(\n condition: NoSubqueryCondition,\n): (row: Row) => boolean {\n if (condition.type !== 'simple') {\n const predicates = condition.conditions.map(c => createPredicate(c));\n return condition.type === 'and'\n ? (row: Row) => {\n // and\n for (const predicate of predicates) {\n if (!predicate(row)) {\n return false;\n }\n }\n return true;\n }\n : (row: Row) => {\n // or\n for (const predicate of predicates) {\n if (predicate(row)) {\n return true;\n }\n }\n return false;\n };\n }\n const {left} = condition;\n const {right} = condition;\n assert(\n right.type !== 'static',\n 'static values should be resolved before creating predicates',\n );\n assert(\n left.type !== 'static',\n 'static values should be resolved before creating predicates',\n );\n\n switch (condition.op) {\n case 'IS':\n case 'IS NOT': {\n const impl = createIsPredicate(right.value, condition.op);\n if (left.type === 'literal') {\n const result = impl(left.value);\n return () => result;\n }\n return (row: Row) => impl(row[left.name]);\n }\n }\n\n if (right.value === null || right.value === undefined) {\n return (_row: Row) => false;\n }\n\n const impl = createPredicateImpl(right.value, condition.op);\n if (left.type === 'literal') {\n if (left.value === null || left.value === undefined) {\n return (_row: Row) => false;\n }\n const result = impl(left.value);\n return () => result;\n }\n\n return (row: Row) => {\n const lhs = row[left.name];\n if (lhs === null || lhs === undefined) {\n return false;\n }\n return impl(lhs);\n };\n}\n\nfunction createIsPredicate(\n rhs: Value | readonly Value[],\n operator: 'IS' | 'IS NOT',\n): SimplePredicate {\n switch (operator) {\n case 'IS':\n return lhs => lhs === rhs;\n case 'IS NOT':\n return lhs => lhs !== rhs;\n }\n}\n\nfunction createPredicateImpl(\n rhs: NonNullValue | readonly NonNullValue[],\n operator: Exclude<SimpleOperator, 'IS' | 'IS NOT'>,\n): SimplePredicateNoNull {\n switch (operator) {\n case '=':\n return lhs => lhs === rhs;\n case '!=':\n return lhs => lhs !== rhs;\n case '<':\n return lhs => lhs < rhs;\n case '<=':\n return lhs => lhs <= rhs;\n case '>':\n return lhs => lhs > rhs;\n case '>=':\n return lhs => lhs >= rhs;\n case 'LIKE':\n return getLikePredicate(rhs, '');\n case 'NOT LIKE':\n return not(getLikePredicate(rhs, ''));\n case 'ILIKE':\n return getLikePredicate(rhs, 'i');\n case 'NOT ILIKE':\n return not(getLikePredicate(rhs, 'i'));\n case 'IN': {\n assert(Array.isArray(rhs), 'Expected rhs to be an array for IN operator');\n const set = new Set(rhs);\n return lhs => set.has(lhs);\n }\n case 'NOT IN': {\n assert(\n Array.isArray(rhs),\n 'Expected rhs to be an array for NOT IN operator',\n );\n const set = new Set(rhs);\n return lhs => !set.has(lhs);\n }\n default:\n operator satisfies never;\n throw new Error(`Unexpected operator: ${operator}`);\n }\n}\n\nfunction not<T>(f: (lhs: T) => boolean) {\n return (lhs: T) => !f(lhs);\n}\n\n/**\n * If the condition contains any CorrelatedSubqueryConditions, returns a\n * transformed condition which contains no CorrelatedSubqueryCondition(s) but\n * which will filter a subset of the rows that would be filtered by the original\n * condition, or undefined if no such transformation exists.\n *\n * If the condition does not contain any CorrelatedSubqueryConditions\n * returns the condition unmodified and `conditionsRemoved: false`.\n */\nexport function transformFilters(filters: Condition | undefined): {\n filters: NoSubqueryCondition | undefined;\n conditionsRemoved: boolean;\n} {\n if (!filters) {\n return {filters: undefined, conditionsRemoved: false};\n }\n switch (filters.type) {\n case 'simple':\n return {filters, conditionsRemoved: false};\n case 'correlatedSubquery':\n return {filters: undefined, conditionsRemoved: true};\n case 'and':\n case 'or': {\n const transformedConditions: NoSubqueryCondition[] = [];\n let conditionsRemoved = false;\n for (const cond of filters.conditions) {\n const transformed = transformFilters(cond);\n // If any branch of the OR ends up empty, the entire OR needs\n // to be removed.\n if (transformed.filters === undefined && filters.type === 'or') {\n return {filters: undefined, conditionsRemoved: true};\n }\n conditionsRemoved = conditionsRemoved || transformed.conditionsRemoved;\n if (transformed.filters) {\n transformedConditions.push(transformed.filters);\n }\n }\n return {\n filters: simplifyCondition({\n type: filters.type,\n conditions: transformedConditions,\n }) as NoSubqueryCondition,\n conditionsRemoved,\n };\n }\n default:\n unreachable(filters);\n }\n}\n"],"mappings":";;;;AAyBA,SAAgB,gBACd,WACuB;AACvB,KAAI,UAAU,SAAS,UAAU;EAC/B,MAAM,aAAa,UAAU,WAAW,KAAI,MAAK,gBAAgB,EAAE,CAAC;AACpE,SAAO,UAAU,SAAS,SACrB,QAAa;AAEZ,QAAK,MAAM,aAAa,WACtB,KAAI,CAAC,UAAU,IAAI,CACjB,QAAO;AAGX,UAAO;OAER,QAAa;AAEZ,QAAK,MAAM,aAAa,WACtB,KAAI,UAAU,IAAI,CAChB,QAAO;AAGX,UAAO;;;CAGf,MAAM,EAAC,SAAQ;CACf,MAAM,EAAC,UAAS;AAChB,QACE,MAAM,SAAS,UACf,8DACD;AACD,QACE,KAAK,SAAS,UACd,8DACD;AAED,SAAQ,UAAU,IAAlB;EACE,KAAK;EACL,KAAK,UAAU;GACb,MAAM,OAAO,kBAAkB,MAAM,OAAO,UAAU,GAAG;AACzD,OAAI,KAAK,SAAS,WAAW;IAC3B,MAAM,SAAS,KAAK,KAAK,MAAM;AAC/B,iBAAa;;AAEf,WAAQ,QAAa,KAAK,IAAI,KAAK,MAAM;;;AAI7C,KAAI,MAAM,UAAU,QAAQ,MAAM,UAAU,KAAA,EAC1C,SAAQ,SAAc;CAGxB,MAAM,OAAO,oBAAoB,MAAM,OAAO,UAAU,GAAG;AAC3D,KAAI,KAAK,SAAS,WAAW;AAC3B,MAAI,KAAK,UAAU,QAAQ,KAAK,UAAU,KAAA,EACxC,SAAQ,SAAc;EAExB,MAAM,SAAS,KAAK,KAAK,MAAM;AAC/B,eAAa;;AAGf,SAAQ,QAAa;EACnB,MAAM,MAAM,IAAI,KAAK;AACrB,MAAI,QAAQ,QAAQ,QAAQ,KAAA,EAC1B,QAAO;AAET,SAAO,KAAK,IAAI;;;AAIpB,SAAS,kBACP,KACA,UACiB;AACjB,SAAQ,UAAR;EACE,KAAK,KACH,SAAO,QAAO,QAAQ;EACxB,KAAK,SACH,SAAO,QAAO,QAAQ;;;AAI5B,SAAS,oBACP,KACA,UACuB;AACvB,SAAQ,UAAR;EACE,KAAK,IACH,SAAO,QAAO,QAAQ;EACxB,KAAK,KACH,SAAO,QAAO,QAAQ;EACxB,KAAK,IACH,SAAO,QAAO,MAAM;EACtB,KAAK,KACH,SAAO,QAAO,OAAO;EACvB,KAAK,IACH,SAAO,QAAO,MAAM;EACtB,KAAK,KACH,SAAO,QAAO,OAAO;EACvB,KAAK,OACH,QAAO,iBAAiB,KAAK,GAAG;EAClC,KAAK,WACH,QAAO,IAAI,iBAAiB,KAAK,GAAG,CAAC;EACvC,KAAK,QACH,QAAO,iBAAiB,KAAK,IAAI;EACnC,KAAK,YACH,QAAO,IAAI,iBAAiB,KAAK,IAAI,CAAC;EACxC,KAAK,MAAM;AACT,UAAO,MAAM,QAAQ,IAAI,EAAE,8CAA8C;GACzE,MAAM,MAAM,IAAI,IAAI,IAAI;AACxB,WAAO,QAAO,IAAI,IAAI,IAAI;;EAE5B,KAAK,UAAU;AACb,UACE,MAAM,QAAQ,IAAI,EAClB,kDACD;GACD,MAAM,MAAM,IAAI,IAAI,IAAI;AACxB,WAAO,QAAO,CAAC,IAAI,IAAI,IAAI;;EAE7B,QAEE,OAAM,IAAI,MAAM,wBAAwB,WAAW;;;AAIzD,SAAS,IAAO,GAAwB;AACtC,SAAQ,QAAW,CAAC,EAAE,IAAI;;;;;;;;;;;AAY5B,SAAgB,iBAAiB,SAG/B;AACA,KAAI,CAAC,QACH,QAAO;EAAC,SAAS,KAAA;EAAW,mBAAmB;EAAM;AAEvD,SAAQ,QAAQ,MAAhB;EACE,KAAK,SACH,QAAO;GAAC;GAAS,mBAAmB;GAAM;EAC5C,KAAK,qBACH,QAAO;GAAC,SAAS,KAAA;GAAW,mBAAmB;GAAK;EACtD,KAAK;EACL,KAAK,MAAM;GACT,MAAM,wBAA+C,EAAE;GACvD,IAAI,oBAAoB;AACxB,QAAK,MAAM,QAAQ,QAAQ,YAAY;IACrC,MAAM,cAAc,iBAAiB,KAAK;AAG1C,QAAI,YAAY,YAAY,KAAA,KAAa,QAAQ,SAAS,KACxD,QAAO;KAAC,SAAS,KAAA;KAAW,mBAAmB;KAAK;AAEtD,wBAAoB,qBAAqB,YAAY;AACrD,QAAI,YAAY,QACd,uBAAsB,KAAK,YAAY,QAAQ;;AAGnD,UAAO;IACL,SAAS,kBAAkB;KACzB,MAAM,QAAQ;KACd,YAAY;KACb,CAAC;IACF;IACD;;EAEH,QACE,aAAY,QAAQ"}
@@ -1,53 +1,48 @@
1
1
  import { assertString } from "../../../shared/src/asserts.js";
2
+ //#region ../zql/src/builder/like.ts
2
3
  function getLikePredicate(pattern, flags) {
3
- const op = getLikeOp(String(pattern), flags);
4
- return (lhs) => {
5
- assertString(lhs);
6
- return op(String(lhs));
7
- };
4
+ const op = getLikeOp(String(pattern), flags);
5
+ return (lhs) => {
6
+ assertString(lhs);
7
+ return op(String(lhs));
8
+ };
8
9
  }
9
10
  function getLikeOp(pattern, flags) {
10
- if (!/_|%|\\/.test(pattern)) {
11
- if (flags === "i") {
12
- const rhsLower = pattern.toLowerCase();
13
- return (lhs) => lhs.toLowerCase() === rhsLower;
14
- }
15
- return (lhs) => lhs === pattern;
16
- }
17
- const re = patternToRegExp(pattern, flags);
18
- return (lhs) => re.test(lhs);
11
+ if (!/_|%|\\/.test(pattern)) {
12
+ if (flags === "i") {
13
+ const rhsLower = pattern.toLowerCase();
14
+ return (lhs) => lhs.toLowerCase() === rhsLower;
15
+ }
16
+ return (lhs) => lhs === pattern;
17
+ }
18
+ const re = patternToRegExp(pattern, flags);
19
+ return (lhs) => re.test(lhs);
19
20
  }
20
- const specialCharsRe = /[$()*+.?[\]\\^{|}]/;
21
+ var specialCharsRe = /[$()*+.?[\]\\^{|}]/;
21
22
  function patternToRegExp(source, flags = "") {
22
- let pattern = "^";
23
- for (let i = 0; i < source.length; i++) {
24
- let c = source[i];
25
- switch (c) {
26
- case "%":
27
- pattern += ".*";
28
- break;
29
- case "_":
30
- pattern += ".";
31
- break;
32
- // @ts-expect-error fallthrough
33
- case "\\":
34
- if (i === source.length - 1) {
35
- throw new Error("LIKE pattern must not end with escape character");
36
- }
37
- i++;
38
- c = source[i];
39
- // fall through
40
- default:
41
- if (specialCharsRe.test(c)) {
42
- pattern += "\\";
43
- }
44
- pattern += c;
45
- break;
46
- }
47
- }
48
- return new RegExp(pattern + "$", flags + "m");
23
+ let pattern = "^";
24
+ for (let i = 0; i < source.length; i++) {
25
+ let c = source[i];
26
+ switch (c) {
27
+ case "%":
28
+ pattern += ".*";
29
+ break;
30
+ case "_":
31
+ pattern += ".";
32
+ break;
33
+ case "\\":
34
+ if (i === source.length - 1) throw new Error("LIKE pattern must not end with escape character");
35
+ i++;
36
+ c = source[i];
37
+ default:
38
+ if (specialCharsRe.test(c)) pattern += "\\";
39
+ pattern += c;
40
+ break;
41
+ }
42
+ }
43
+ return new RegExp(pattern + "$", flags + "m");
49
44
  }
50
- export {
51
- getLikePredicate
52
- };
53
- //# sourceMappingURL=like.js.map
45
+ //#endregion
46
+ export { getLikePredicate };
47
+
48
+ //# sourceMappingURL=like.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"like.js","sources":["../../../../../zql/src/builder/like.ts"],"sourcesContent":["import {assertString} from '../../../shared/src/asserts.ts';\nimport type {NonNullValue, SimplePredicateNoNull} from './filter.ts';\n\nexport function getLikePredicate(\n pattern: NonNullValue,\n flags: 'i' | '',\n): SimplePredicateNoNull {\n const op = getLikeOp(String(pattern), flags);\n return (lhs: NonNullValue) => {\n assertString(lhs);\n return op(String(lhs));\n };\n}\n\nfunction getLikeOp(pattern: string, flags: 'i' | ''): (lhs: string) => boolean {\n // if lhs does not contain '%' or '_' then it is a simple string comparison.\n // if it does contain '%' or '_' then it is a regex comparison.\n // '%' is a wildcard for any number of characters\n // '_' is a wildcard for a single character\n // Postgres SQL allows escaping using `\\`.\n\n if (!/_|%|\\\\/.test(pattern)) {\n if (flags === 'i') {\n const rhsLower = pattern.toLowerCase();\n return (lhs: string) => lhs.toLowerCase() === rhsLower;\n }\n return (lhs: string) => lhs === pattern;\n }\n const re = patternToRegExp(pattern, flags);\n return (lhs: string) => re.test(lhs);\n}\n\nconst specialCharsRe = /[$()*+.?[\\]\\\\^{|}]/;\n\nfunction patternToRegExp(source: string, flags: '' | 'i' = ''): RegExp {\n // There are a few cases:\n // % => .*\n // _ => .\n // \\x => \\x for any x except special regexp chars\n // special regexp chars => \\special regexp chars\n let pattern = '^';\n for (let i = 0; i < source.length; i++) {\n let c = source[i];\n switch (c) {\n case '%':\n pattern += '.*';\n break;\n case '_':\n pattern += '.';\n break;\n\n // @ts-expect-error fallthrough\n case '\\\\':\n if (i === source.length - 1) {\n throw new Error('LIKE pattern must not end with escape character');\n }\n i++;\n c = source[i];\n\n // fall through\n default:\n if (specialCharsRe.test(c)) {\n pattern += '\\\\';\n }\n pattern += c;\n\n break;\n }\n }\n return new RegExp(pattern + '$', flags + 'm');\n}\n"],"names":[],"mappings":";AAGO,SAAS,iBACd,SACA,OACuB;AACvB,QAAM,KAAK,UAAU,OAAO,OAAO,GAAG,KAAK;AAC3C,SAAO,CAAC,QAAsB;AAC5B,iBAAa,GAAG;AAChB,WAAO,GAAG,OAAO,GAAG,CAAC;AAAA,EACvB;AACF;AAEA,SAAS,UAAU,SAAiB,OAA2C;AAO7E,MAAI,CAAC,SAAS,KAAK,OAAO,GAAG;AAC3B,QAAI,UAAU,KAAK;AACjB,YAAM,WAAW,QAAQ,YAAA;AACzB,aAAO,CAAC,QAAgB,IAAI,YAAA,MAAkB;AAAA,IAChD;AACA,WAAO,CAAC,QAAgB,QAAQ;AAAA,EAClC;AACA,QAAM,KAAK,gBAAgB,SAAS,KAAK;AACzC,SAAO,CAAC,QAAgB,GAAG,KAAK,GAAG;AACrC;AAEA,MAAM,iBAAiB;AAEvB,SAAS,gBAAgB,QAAgB,QAAkB,IAAY;AAMrE,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,QAAI,IAAI,OAAO,CAAC;AAChB,YAAQ,GAAA;AAAA,MACN,KAAK;AACH,mBAAW;AACX;AAAA,MACF,KAAK;AACH,mBAAW;AACX;AAAA;AAAA,MAGF,KAAK;AACH,YAAI,MAAM,OAAO,SAAS,GAAG;AAC3B,gBAAM,IAAI,MAAM,iDAAiD;AAAA,QACnE;AACA;AACA,YAAI,OAAO,CAAC;AAAA;AAAA,MAGd;AACE,YAAI,eAAe,KAAK,CAAC,GAAG;AAC1B,qBAAW;AAAA,QACb;AACA,mBAAW;AAEX;AAAA,IAAA;AAAA,EAEN;AACA,SAAO,IAAI,OAAO,UAAU,KAAK,QAAQ,GAAG;AAC9C;"}
1
+ {"version":3,"file":"like.js","names":[],"sources":["../../../../../zql/src/builder/like.ts"],"sourcesContent":["import {assertString} from '../../../shared/src/asserts.ts';\nimport type {NonNullValue, SimplePredicateNoNull} from './filter.ts';\n\nexport function getLikePredicate(\n pattern: NonNullValue,\n flags: 'i' | '',\n): SimplePredicateNoNull {\n const op = getLikeOp(String(pattern), flags);\n return (lhs: NonNullValue) => {\n assertString(lhs);\n return op(String(lhs));\n };\n}\n\nfunction getLikeOp(pattern: string, flags: 'i' | ''): (lhs: string) => boolean {\n // if lhs does not contain '%' or '_' then it is a simple string comparison.\n // if it does contain '%' or '_' then it is a regex comparison.\n // '%' is a wildcard for any number of characters\n // '_' is a wildcard for a single character\n // Postgres SQL allows escaping using `\\`.\n\n if (!/_|%|\\\\/.test(pattern)) {\n if (flags === 'i') {\n const rhsLower = pattern.toLowerCase();\n return (lhs: string) => lhs.toLowerCase() === rhsLower;\n }\n return (lhs: string) => lhs === pattern;\n }\n const re = patternToRegExp(pattern, flags);\n return (lhs: string) => re.test(lhs);\n}\n\nconst specialCharsRe = /[$()*+.?[\\]\\\\^{|}]/;\n\nfunction patternToRegExp(source: string, flags: '' | 'i' = ''): RegExp {\n // There are a few cases:\n // % => .*\n // _ => .\n // \\x => \\x for any x except special regexp chars\n // special regexp chars => \\special regexp chars\n let pattern = '^';\n for (let i = 0; i < source.length; i++) {\n let c = source[i];\n switch (c) {\n case '%':\n pattern += '.*';\n break;\n case '_':\n pattern += '.';\n break;\n\n // @ts-expect-error fallthrough\n case '\\\\':\n if (i === source.length - 1) {\n throw new Error('LIKE pattern must not end with escape character');\n }\n i++;\n c = source[i];\n\n // fall through\n default:\n if (specialCharsRe.test(c)) {\n pattern += '\\\\';\n }\n pattern += c;\n\n break;\n }\n }\n return new RegExp(pattern + '$', flags + 'm');\n}\n"],"mappings":";;AAGA,SAAgB,iBACd,SACA,OACuB;CACvB,MAAM,KAAK,UAAU,OAAO,QAAQ,EAAE,MAAM;AAC5C,SAAQ,QAAsB;AAC5B,eAAa,IAAI;AACjB,SAAO,GAAG,OAAO,IAAI,CAAC;;;AAI1B,SAAS,UAAU,SAAiB,OAA2C;AAO7E,KAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC3B,MAAI,UAAU,KAAK;GACjB,MAAM,WAAW,QAAQ,aAAa;AACtC,WAAQ,QAAgB,IAAI,aAAa,KAAK;;AAEhD,UAAQ,QAAgB,QAAQ;;CAElC,MAAM,KAAK,gBAAgB,SAAS,MAAM;AAC1C,SAAQ,QAAgB,GAAG,KAAK,IAAI;;AAGtC,IAAM,iBAAiB;AAEvB,SAAS,gBAAgB,QAAgB,QAAkB,IAAY;CAMrE,IAAI,UAAU;AACd,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACtC,IAAI,IAAI,OAAO;AACf,UAAQ,GAAR;GACE,KAAK;AACH,eAAW;AACX;GACF,KAAK;AACH,eAAW;AACX;GAGF,KAAK;AACH,QAAI,MAAM,OAAO,SAAS,EACxB,OAAM,IAAI,MAAM,kDAAkD;AAEpE;AACA,QAAI,OAAO;GAGb;AACE,QAAI,eAAe,KAAK,EAAE,CACxB,YAAW;AAEb,eAAW;AAEX;;;AAGN,QAAO,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI"}
@@ -1,10 +1,11 @@
1
- class NotImplementedError extends Error {
2
- constructor(message) {
3
- super(message);
4
- this.name = "NotImplementedError";
5
- }
6
- }
7
- export {
8
- NotImplementedError
1
+ //#region ../zql/src/error.ts
2
+ var NotImplementedError = class extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = "NotImplementedError";
6
+ }
9
7
  };
10
- //# sourceMappingURL=error.js.map
8
+ //#endregion
9
+ export { NotImplementedError };
10
+
11
+ //# sourceMappingURL=error.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sources":["../../../../zql/src/error.ts"],"sourcesContent":["export class NotImplementedError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NotImplementedError';\n }\n}\n\nexport type PlannerExceptionKind = 'max_flippable_joins';\n\nexport class PlannerException extends Error {\n readonly kind: PlannerExceptionKind;\n\n constructor(kind: PlannerExceptionKind, message: string) {\n super(message);\n this.name = 'PlannerException';\n this.kind = kind;\n }\n}\n"],"names":[],"mappings":"AAAO,MAAM,4BAA4B,MAAM;AAAA,EAC7C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;"}
1
+ {"version":3,"file":"error.js","names":[],"sources":["../../../../zql/src/error.ts"],"sourcesContent":["export class NotImplementedError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'NotImplementedError';\n }\n}\n\nexport type PlannerExceptionKind = 'max_flippable_joins';\n\nexport class PlannerException extends Error {\n readonly kind: PlannerExceptionKind;\n\n constructor(kind: PlannerExceptionKind, message: string) {\n super(message);\n this.name = 'PlannerException';\n this.kind = kind;\n }\n}\n"],"mappings":";AAAA,IAAa,sBAAb,cAAyC,MAAM;CAC7C,YAAY,SAAiB;AAC3B,QAAM,QAAQ;AACd,OAAK,OAAO"}
@@ -2,95 +2,93 @@ import { assert } from "../../../shared/src/asserts.js";
2
2
  import { emptyArray } from "../../../shared/src/sentinels.js";
3
3
  import { skipYields } from "./operator.js";
4
4
  import { applyChange } from "./view-apply-change.js";
5
- class ArrayView {
6
- #input;
7
- #listeners = /* @__PURE__ */ new Set();
8
- #schema;
9
- #format;
10
- // Synthetic "root" entry that has a single "" relationship, so that we can
11
- // treat all changes, including the root change, generically.
12
- #root;
13
- onDestroy;
14
- #dirty = false;
15
- #resultType = "unknown";
16
- #error;
17
- #updateTTL;
18
- constructor(input, format, queryComplete, updateTTL) {
19
- this.#input = input;
20
- this.#schema = input.getSchema();
21
- this.#format = format;
22
- this.#updateTTL = updateTTL;
23
- this.#root = { "": format.singular ? void 0 : [] };
24
- input.setOutput(this);
25
- if (queryComplete === true) {
26
- this.#resultType = "complete";
27
- } else if ("error" in queryComplete) {
28
- this.#resultType = "error";
29
- this.#error = queryComplete;
30
- } else {
31
- void queryComplete.then(() => {
32
- this.#resultType = "complete";
33
- this.#fireListeners();
34
- }).catch((e) => {
35
- this.#resultType = "error";
36
- this.#error = e;
37
- this.#fireListeners();
38
- });
39
- }
40
- this.#hydrate();
41
- }
42
- get data() {
43
- return this.#root[""];
44
- }
45
- addListener(listener) {
46
- assert(!this.#listeners.has(listener), "Listener already registered");
47
- this.#listeners.add(listener);
48
- this.#fireListener(listener);
49
- return () => {
50
- this.#listeners.delete(listener);
51
- };
52
- }
53
- #fireListeners() {
54
- for (const listener of this.#listeners) {
55
- this.#fireListener(listener);
56
- }
57
- }
58
- #fireListener(listener) {
59
- listener(this.data, this.#resultType, this.#error);
60
- }
61
- destroy() {
62
- this.onDestroy?.();
63
- }
64
- #hydrate() {
65
- this.#dirty = true;
66
- for (const node of skipYields(this.#input.fetch({}))) {
67
- applyChange(
68
- this.#root,
69
- { type: "add", node },
70
- this.#schema,
71
- "",
72
- this.#format
73
- );
74
- }
75
- this.flush();
76
- }
77
- push(change) {
78
- this.#dirty = true;
79
- applyChange(this.#root, change, this.#schema, "", this.#format);
80
- return emptyArray;
81
- }
82
- flush() {
83
- if (!this.#dirty) {
84
- return;
85
- }
86
- this.#dirty = false;
87
- this.#fireListeners();
88
- }
89
- updateTTL(ttl) {
90
- this.#updateTTL(ttl);
91
- }
92
- }
93
- export {
94
- ArrayView
5
+ //#region ../zql/src/ivm/array-view.ts
6
+ /**
7
+ * Implements a materialized view of the output of an operator.
8
+ *
9
+ * It might seem more efficient to use an immutable b-tree for the
10
+ * materialization, but it's not so clear. Inserts in the middle are
11
+ * asymptotically slower in an array, but can often be done with zero
12
+ * allocations, where changes to the b-tree will often require several allocs.
13
+ *
14
+ * Also the plain array view is more convenient for consumers since you can dump
15
+ * it into console to see what it is, rather than having to iterate it.
16
+ */
17
+ var ArrayView = class {
18
+ #input;
19
+ #listeners = /* @__PURE__ */ new Set();
20
+ #schema;
21
+ #format;
22
+ #root;
23
+ onDestroy;
24
+ #dirty = false;
25
+ #resultType = "unknown";
26
+ #error;
27
+ #updateTTL;
28
+ constructor(input, format, queryComplete, updateTTL) {
29
+ this.#input = input;
30
+ this.#schema = input.getSchema();
31
+ this.#format = format;
32
+ this.#updateTTL = updateTTL;
33
+ this.#root = { "": format.singular ? void 0 : [] };
34
+ input.setOutput(this);
35
+ if (queryComplete === true) this.#resultType = "complete";
36
+ else if ("error" in queryComplete) {
37
+ this.#resultType = "error";
38
+ this.#error = queryComplete;
39
+ } else queryComplete.then(() => {
40
+ this.#resultType = "complete";
41
+ this.#fireListeners();
42
+ }).catch((e) => {
43
+ this.#resultType = "error";
44
+ this.#error = e;
45
+ this.#fireListeners();
46
+ });
47
+ this.#hydrate();
48
+ }
49
+ get data() {
50
+ return this.#root[""];
51
+ }
52
+ addListener(listener) {
53
+ assert(!this.#listeners.has(listener), "Listener already registered");
54
+ this.#listeners.add(listener);
55
+ this.#fireListener(listener);
56
+ return () => {
57
+ this.#listeners.delete(listener);
58
+ };
59
+ }
60
+ #fireListeners() {
61
+ for (const listener of this.#listeners) this.#fireListener(listener);
62
+ }
63
+ #fireListener(listener) {
64
+ listener(this.data, this.#resultType, this.#error);
65
+ }
66
+ destroy() {
67
+ this.onDestroy?.();
68
+ }
69
+ #hydrate() {
70
+ this.#dirty = true;
71
+ for (const node of skipYields(this.#input.fetch({}))) applyChange(this.#root, {
72
+ type: "add",
73
+ node
74
+ }, this.#schema, "", this.#format);
75
+ this.flush();
76
+ }
77
+ push(change) {
78
+ this.#dirty = true;
79
+ applyChange(this.#root, change, this.#schema, "", this.#format);
80
+ return emptyArray;
81
+ }
82
+ flush() {
83
+ if (!this.#dirty) return;
84
+ this.#dirty = false;
85
+ this.#fireListeners();
86
+ }
87
+ updateTTL(ttl) {
88
+ this.#updateTTL(ttl);
89
+ }
95
90
  };
96
- //# sourceMappingURL=array-view.js.map
91
+ //#endregion
92
+ export { ArrayView };
93
+
94
+ //# sourceMappingURL=array-view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"array-view.js","sources":["../../../../../zql/src/ivm/array-view.ts"],"sourcesContent":["import {assert} from '../../../shared/src/asserts.ts';\nimport type {Immutable} from '../../../shared/src/immutable.ts';\nimport {emptyArray} from '../../../shared/src/sentinels.ts';\nimport type {ErroredQuery} from '../../../zero-protocol/src/custom-queries.ts';\nimport type {TTL} from '../query/ttl.ts';\nimport type {Listener, ResultType, TypedView} from '../query/typed-view.ts';\nimport type {Change} from './change.ts';\nimport {skipYields, type Input, type Output} from './operator.ts';\nimport type {SourceSchema} from './schema.ts';\nimport {applyChange} from './view-apply-change.ts';\nimport type {Entry, Format, View} from './view.ts';\n\n/**\n * Implements a materialized view of the output of an operator.\n *\n * It might seem more efficient to use an immutable b-tree for the\n * materialization, but it's not so clear. Inserts in the middle are\n * asymptotically slower in an array, but can often be done with zero\n * allocations, where changes to the b-tree will often require several allocs.\n *\n * Also the plain array view is more convenient for consumers since you can dump\n * it into console to see what it is, rather than having to iterate it.\n */\nexport class ArrayView<V extends View> implements Output, TypedView<V> {\n readonly #input: Input;\n readonly #listeners = new Set<Listener<V>>();\n readonly #schema: SourceSchema;\n readonly #format: Format;\n\n // Synthetic \"root\" entry that has a single \"\" relationship, so that we can\n // treat all changes, including the root change, generically.\n readonly #root: Entry;\n\n onDestroy: (() => void) | undefined;\n\n #dirty = false;\n #resultType: ResultType = 'unknown';\n #error: ErroredQuery | undefined;\n readonly #updateTTL: (ttl: TTL) => void;\n\n constructor(\n input: Input,\n format: Format,\n queryComplete: true | ErroredQuery | Promise<true>,\n updateTTL: (ttl: TTL) => void,\n ) {\n this.#input = input;\n this.#schema = input.getSchema();\n this.#format = format;\n this.#updateTTL = updateTTL;\n this.#root = {'': format.singular ? undefined : []};\n input.setOutput(this);\n\n if (queryComplete === true) {\n this.#resultType = 'complete';\n } else if ('error' in queryComplete) {\n this.#resultType = 'error';\n this.#error = queryComplete;\n } else {\n void queryComplete\n .then(() => {\n this.#resultType = 'complete';\n this.#fireListeners();\n })\n .catch(e => {\n this.#resultType = 'error';\n this.#error = e;\n this.#fireListeners();\n });\n }\n this.#hydrate();\n }\n\n get data() {\n return this.#root[''] as V;\n }\n\n addListener(listener: Listener<V>) {\n assert(!this.#listeners.has(listener), 'Listener already registered');\n this.#listeners.add(listener);\n\n this.#fireListener(listener);\n\n return () => {\n this.#listeners.delete(listener);\n };\n }\n\n #fireListeners() {\n for (const listener of this.#listeners) {\n this.#fireListener(listener);\n }\n }\n\n #fireListener(listener: Listener<V>) {\n listener(this.data as Immutable<V>, this.#resultType, this.#error);\n }\n\n destroy() {\n this.onDestroy?.();\n }\n\n #hydrate() {\n this.#dirty = true;\n for (const node of skipYields(this.#input.fetch({}))) {\n applyChange(\n this.#root,\n {type: 'add', node},\n this.#schema,\n '',\n this.#format,\n );\n }\n this.flush();\n }\n\n push(change: Change) {\n this.#dirty = true;\n applyChange(this.#root, change, this.#schema, '', this.#format);\n return emptyArray;\n }\n\n flush() {\n if (!this.#dirty) {\n return;\n }\n this.#dirty = false;\n this.#fireListeners();\n }\n\n updateTTL(ttl: TTL) {\n this.#updateTTL(ttl);\n }\n}\n"],"names":[],"mappings":";;;;AAuBO,MAAM,UAA0D;AAAA,EAC5D;AAAA,EACA,iCAAiB,IAAA;AAAA,EACjB;AAAA,EACA;AAAA;AAAA;AAAA,EAIA;AAAA,EAET;AAAA,EAEA,SAAS;AAAA,EACT,cAA0B;AAAA,EAC1B;AAAA,EACS;AAAA,EAET,YACE,OACA,QACA,eACA,WACA;AACA,SAAK,SAAS;AACd,SAAK,UAAU,MAAM,UAAA;AACrB,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,QAAQ,EAAC,IAAI,OAAO,WAAW,SAAY,GAAC;AACjD,UAAM,UAAU,IAAI;AAEpB,QAAI,kBAAkB,MAAM;AAC1B,WAAK,cAAc;AAAA,IACrB,WAAW,WAAW,eAAe;AACnC,WAAK,cAAc;AACnB,WAAK,SAAS;AAAA,IAChB,OAAO;AACL,WAAK,cACF,KAAK,MAAM;AACV,aAAK,cAAc;AACnB,aAAK,eAAA;AAAA,MACP,CAAC,EACA,MAAM,CAAA,MAAK;AACV,aAAK,cAAc;AACnB,aAAK,SAAS;AACd,aAAK,eAAA;AAAA,MACP,CAAC;AAAA,IACL;AACA,SAAK,SAAA;AAAA,EACP;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK,MAAM,EAAE;AAAA,EACtB;AAAA,EAEA,YAAY,UAAuB;AACjC,WAAO,CAAC,KAAK,WAAW,IAAI,QAAQ,GAAG,6BAA6B;AACpE,SAAK,WAAW,IAAI,QAAQ;AAE5B,SAAK,cAAc,QAAQ;AAE3B,WAAO,MAAM;AACX,WAAK,WAAW,OAAO,QAAQ;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,iBAAiB;AACf,eAAW,YAAY,KAAK,YAAY;AACtC,WAAK,cAAc,QAAQ;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,cAAc,UAAuB;AACnC,aAAS,KAAK,MAAsB,KAAK,aAAa,KAAK,MAAM;AAAA,EACnE;AAAA,EAEA,UAAU;AACR,SAAK,YAAA;AAAA,EACP;AAAA,EAEA,WAAW;AACT,SAAK,SAAS;AACd,eAAW,QAAQ,WAAW,KAAK,OAAO,MAAM,CAAA,CAAE,CAAC,GAAG;AACpD;AAAA,QACE,KAAK;AAAA,QACL,EAAC,MAAM,OAAO,KAAA;AAAA,QACd,KAAK;AAAA,QACL;AAAA,QACA,KAAK;AAAA,MAAA;AAAA,IAET;AACA,SAAK,MAAA;AAAA,EACP;AAAA,EAEA,KAAK,QAAgB;AACnB,SAAK,SAAS;AACd,gBAAY,KAAK,OAAO,QAAQ,KAAK,SAAS,IAAI,KAAK,OAAO;AAC9D,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AACN,QAAI,CAAC,KAAK,QAAQ;AAChB;AAAA,IACF;AACA,SAAK,SAAS;AACd,SAAK,eAAA;AAAA,EACP;AAAA,EAEA,UAAU,KAAU;AAClB,SAAK,WAAW,GAAG;AAAA,EACrB;AACF;"}
1
+ {"version":3,"file":"array-view.js","names":["#input","#listeners","#schema","#format","#root","#updateTTL","#resultType","#error","#fireListeners","#hydrate","#fireListener","#dirty"],"sources":["../../../../../zql/src/ivm/array-view.ts"],"sourcesContent":["import {assert} from '../../../shared/src/asserts.ts';\nimport type {Immutable} from '../../../shared/src/immutable.ts';\nimport {emptyArray} from '../../../shared/src/sentinels.ts';\nimport type {ErroredQuery} from '../../../zero-protocol/src/custom-queries.ts';\nimport type {TTL} from '../query/ttl.ts';\nimport type {Listener, ResultType, TypedView} from '../query/typed-view.ts';\nimport type {Change} from './change.ts';\nimport {skipYields, type Input, type Output} from './operator.ts';\nimport type {SourceSchema} from './schema.ts';\nimport {applyChange} from './view-apply-change.ts';\nimport type {Entry, Format, View} from './view.ts';\n\n/**\n * Implements a materialized view of the output of an operator.\n *\n * It might seem more efficient to use an immutable b-tree for the\n * materialization, but it's not so clear. Inserts in the middle are\n * asymptotically slower in an array, but can often be done with zero\n * allocations, where changes to the b-tree will often require several allocs.\n *\n * Also the plain array view is more convenient for consumers since you can dump\n * it into console to see what it is, rather than having to iterate it.\n */\nexport class ArrayView<V extends View> implements Output, TypedView<V> {\n readonly #input: Input;\n readonly #listeners = new Set<Listener<V>>();\n readonly #schema: SourceSchema;\n readonly #format: Format;\n\n // Synthetic \"root\" entry that has a single \"\" relationship, so that we can\n // treat all changes, including the root change, generically.\n readonly #root: Entry;\n\n onDestroy: (() => void) | undefined;\n\n #dirty = false;\n #resultType: ResultType = 'unknown';\n #error: ErroredQuery | undefined;\n readonly #updateTTL: (ttl: TTL) => void;\n\n constructor(\n input: Input,\n format: Format,\n queryComplete: true | ErroredQuery | Promise<true>,\n updateTTL: (ttl: TTL) => void,\n ) {\n this.#input = input;\n this.#schema = input.getSchema();\n this.#format = format;\n this.#updateTTL = updateTTL;\n this.#root = {'': format.singular ? undefined : []};\n input.setOutput(this);\n\n if (queryComplete === true) {\n this.#resultType = 'complete';\n } else if ('error' in queryComplete) {\n this.#resultType = 'error';\n this.#error = queryComplete;\n } else {\n void queryComplete\n .then(() => {\n this.#resultType = 'complete';\n this.#fireListeners();\n })\n .catch(e => {\n this.#resultType = 'error';\n this.#error = e;\n this.#fireListeners();\n });\n }\n this.#hydrate();\n }\n\n get data() {\n return this.#root[''] as V;\n }\n\n addListener(listener: Listener<V>) {\n assert(!this.#listeners.has(listener), 'Listener already registered');\n this.#listeners.add(listener);\n\n this.#fireListener(listener);\n\n return () => {\n this.#listeners.delete(listener);\n };\n }\n\n #fireListeners() {\n for (const listener of this.#listeners) {\n this.#fireListener(listener);\n }\n }\n\n #fireListener(listener: Listener<V>) {\n listener(this.data as Immutable<V>, this.#resultType, this.#error);\n }\n\n destroy() {\n this.onDestroy?.();\n }\n\n #hydrate() {\n this.#dirty = true;\n for (const node of skipYields(this.#input.fetch({}))) {\n applyChange(\n this.#root,\n {type: 'add', node},\n this.#schema,\n '',\n this.#format,\n );\n }\n this.flush();\n }\n\n push(change: Change) {\n this.#dirty = true;\n applyChange(this.#root, change, this.#schema, '', this.#format);\n return emptyArray;\n }\n\n flush() {\n if (!this.#dirty) {\n return;\n }\n this.#dirty = false;\n this.#fireListeners();\n }\n\n updateTTL(ttl: TTL) {\n this.#updateTTL(ttl);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAuBA,IAAa,YAAb,MAAuE;CACrE;CACA,6BAAsB,IAAI,KAAkB;CAC5C;CACA;CAIA;CAEA;CAEA,SAAS;CACT,cAA0B;CAC1B;CACA;CAEA,YACE,OACA,QACA,eACA,WACA;AACA,QAAA,QAAc;AACd,QAAA,SAAe,MAAM,WAAW;AAChC,QAAA,SAAe;AACf,QAAA,YAAkB;AAClB,QAAA,OAAa,EAAC,IAAI,OAAO,WAAW,KAAA,IAAY,EAAE,EAAC;AACnD,QAAM,UAAU,KAAK;AAErB,MAAI,kBAAkB,KACpB,OAAA,aAAmB;WACV,WAAW,eAAe;AACnC,SAAA,aAAmB;AACnB,SAAA,QAAc;QAET,eACF,WAAW;AACV,SAAA,aAAmB;AACnB,SAAA,eAAqB;IACrB,CACD,OAAM,MAAK;AACV,SAAA,aAAmB;AACnB,SAAA,QAAc;AACd,SAAA,eAAqB;IACrB;AAEN,QAAA,SAAe;;CAGjB,IAAI,OAAO;AACT,SAAO,MAAA,KAAW;;CAGpB,YAAY,UAAuB;AACjC,SAAO,CAAC,MAAA,UAAgB,IAAI,SAAS,EAAE,8BAA8B;AACrE,QAAA,UAAgB,IAAI,SAAS;AAE7B,QAAA,aAAmB,SAAS;AAE5B,eAAa;AACX,SAAA,UAAgB,OAAO,SAAS;;;CAIpC,iBAAiB;AACf,OAAK,MAAM,YAAY,MAAA,UACrB,OAAA,aAAmB,SAAS;;CAIhC,cAAc,UAAuB;AACnC,WAAS,KAAK,MAAsB,MAAA,YAAkB,MAAA,MAAY;;CAGpE,UAAU;AACR,OAAK,aAAa;;CAGpB,WAAW;AACT,QAAA,QAAc;AACd,OAAK,MAAM,QAAQ,WAAW,MAAA,MAAY,MAAM,EAAE,CAAC,CAAC,CAClD,aACE,MAAA,MACA;GAAC,MAAM;GAAO;GAAK,EACnB,MAAA,QACA,IACA,MAAA,OACD;AAEH,OAAK,OAAO;;CAGd,KAAK,QAAgB;AACnB,QAAA,QAAc;AACd,cAAY,MAAA,MAAY,QAAQ,MAAA,QAAc,IAAI,MAAA,OAAa;AAC/D,SAAO;;CAGT,QAAQ;AACN,MAAI,CAAC,MAAA,MACH;AAEF,QAAA,QAAc;AACd,QAAA,eAAqB;;CAGvB,UAAU,KAAU;AAClB,QAAA,UAAgB,IAAI"}
@@ -1,91 +1,82 @@
1
1
  import { assert } from "../../../shared/src/asserts.js";
2
2
  import { stringCompare } from "../../../shared/src/string-compare.js";
3
3
  import { valuesEqual } from "./data.js";
4
+ //#region ../zql/src/ivm/constraint.ts
4
5
  function constraintMatchesRow(constraint, row) {
5
- for (const key in constraint) {
6
- if (!valuesEqual(row[key], constraint[key])) {
7
- return false;
8
- }
9
- }
10
- return true;
6
+ for (const key in constraint) if (!valuesEqual(row[key], constraint[key])) return false;
7
+ return true;
11
8
  }
9
+ /**
10
+ * Constraints are compatible if:
11
+ * 1. They do not have any keys in common
12
+ * 2. They have keys in common, but the values for those keys are equal
13
+ */
12
14
  function constraintsAreCompatible(left, right) {
13
- for (const key in left) {
14
- if (key in right && !valuesEqual(left[key], right[key])) {
15
- return false;
16
- }
17
- }
18
- return true;
15
+ for (const key in left) if (key in right && !valuesEqual(left[key], right[key])) return false;
16
+ return true;
19
17
  }
20
18
  function constraintMatchesPrimaryKey(constraint, primary) {
21
- return keyMatchesPrimaryKey(Object.keys(constraint), primary);
19
+ return keyMatchesPrimaryKey(Object.keys(constraint), primary);
22
20
  }
23
21
  function keyMatchesPrimaryKey(key, primary) {
24
- const constraintKeys = [...key];
25
- if (constraintKeys.length !== primary.length) {
26
- return false;
27
- }
28
- constraintKeys.sort(stringCompare);
29
- for (let i = 0; i < constraintKeys.length; i++) {
30
- if (constraintKeys[i] !== primary[i]) {
31
- return false;
32
- }
33
- }
34
- return true;
22
+ const constraintKeys = [...key];
23
+ if (constraintKeys.length !== primary.length) return false;
24
+ constraintKeys.sort(stringCompare);
25
+ for (let i = 0; i < constraintKeys.length; i++) if (constraintKeys[i] !== primary[i]) return false;
26
+ return true;
35
27
  }
28
+ /**
29
+ * Pulls top level `and` components out of a condition tree.
30
+ * The resulting array of simple conditions would match a superset of
31
+ * values that the original condition would match.
32
+ *
33
+ * Examples:
34
+ * a AND b OR c
35
+ *
36
+ * In this case we cannot pull anything because the `or` is at the top level.
37
+ *
38
+ * a AND b AND c
39
+ * We can pull all three.
40
+ *
41
+ * a AND (b OR c)
42
+ * We can only pull `a`.
43
+ */
36
44
  function pullSimpleAndComponents(condition) {
37
- if (condition.type === "and") {
38
- return condition.conditions.flatMap(pullSimpleAndComponents);
39
- }
40
- if (condition.type === "simple") {
41
- return [condition];
42
- }
43
- if (condition.type === "or" && condition.conditions.length === 1) {
44
- return pullSimpleAndComponents(condition.conditions[0]);
45
- }
46
- return [];
45
+ if (condition.type === "and") return condition.conditions.flatMap(pullSimpleAndComponents);
46
+ if (condition.type === "simple") return [condition];
47
+ if (condition.type === "or" && condition.conditions.length === 1) return pullSimpleAndComponents(condition.conditions[0]);
48
+ return [];
47
49
  }
50
+ /**
51
+ * Checks if the supplied filters constitute a primary key lookup.
52
+ * If so, returns the constraint that would be used to look up the primary key.
53
+ * If not, returns undefined.
54
+ */
48
55
  function primaryKeyConstraintFromFilters(condition, primary) {
49
- if (condition === void 0) {
50
- return void 0;
51
- }
52
- const conditions = pullSimpleAndComponents(condition);
53
- if (conditions.length === 0) {
54
- return void 0;
55
- }
56
- const ret = {};
57
- for (const subCondition of conditions) {
58
- if (subCondition.op === "=") {
59
- const column = extractColumn(subCondition);
60
- if (column !== void 0) {
61
- if (!primary.includes(column.name)) {
62
- continue;
63
- }
64
- ret[column.name] = column.value;
65
- }
66
- }
67
- }
68
- if (Object.keys(ret).length !== primary.length) {
69
- return void 0;
70
- }
71
- return ret;
56
+ if (condition === void 0) return;
57
+ const conditions = pullSimpleAndComponents(condition);
58
+ if (conditions.length === 0) return;
59
+ const ret = {};
60
+ for (const subCondition of conditions) if (subCondition.op === "=") {
61
+ const column = extractColumn(subCondition);
62
+ if (column !== void 0) {
63
+ if (!primary.includes(column.name)) continue;
64
+ ret[column.name] = column.value;
65
+ }
66
+ }
67
+ if (Object.keys(ret).length !== primary.length) return;
68
+ return ret;
72
69
  }
73
70
  function extractColumn(condition) {
74
- if (condition.left.type === "column") {
75
- assert(
76
- condition.right.type === "literal",
77
- () => `extractColumn: expected right side to be literal, got ${condition.right.type}`
78
- );
79
- return { name: condition.left.name, value: condition.right.value };
80
- }
81
- return void 0;
71
+ if (condition.left.type === "column") {
72
+ assert(condition.right.type === "literal", () => `extractColumn: expected right side to be literal, got ${condition.right.type}`);
73
+ return {
74
+ name: condition.left.name,
75
+ value: condition.right.value
76
+ };
77
+ }
82
78
  }
83
- export {
84
- constraintMatchesPrimaryKey,
85
- constraintMatchesRow,
86
- constraintsAreCompatible,
87
- keyMatchesPrimaryKey,
88
- primaryKeyConstraintFromFilters,
89
- pullSimpleAndComponents
90
- };
91
- //# sourceMappingURL=constraint.js.map
79
+ //#endregion
80
+ export { constraintMatchesPrimaryKey, constraintMatchesRow, constraintsAreCompatible, primaryKeyConstraintFromFilters };
81
+
82
+ //# sourceMappingURL=constraint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constraint.js","sources":["../../../../../zql/src/ivm/constraint.ts"],"sourcesContent":["import {assert} from '../../../shared/src/asserts.ts';\nimport {stringCompare} from '../../../shared/src/string-compare.ts';\nimport type {Writable} from '../../../shared/src/writable.ts';\nimport type {\n Condition,\n SimpleCondition,\n} from '../../../zero-protocol/src/ast.ts';\nimport type {Row, Value} from '../../../zero-protocol/src/data.ts';\nimport type {PrimaryKey} from '../../../zero-protocol/src/primary-key.ts';\nimport {valuesEqual} from './data.ts';\n\nexport type Constraint = {\n readonly [key: string]: Value;\n};\n\nexport function constraintMatchesRow(\n constraint: Constraint,\n row: Row,\n): boolean {\n for (const key in constraint) {\n if (!valuesEqual(row[key], constraint[key])) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Constraints are compatible if:\n * 1. They do not have any keys in common\n * 2. They have keys in common, but the values for those keys are equal\n */\nexport function constraintsAreCompatible(\n left: Constraint,\n right: Constraint,\n): boolean {\n for (const key in left) {\n if (key in right && !valuesEqual(left[key], right[key])) {\n return false;\n }\n }\n return true;\n}\n\nexport function constraintMatchesPrimaryKey(\n constraint: Constraint,\n primary: PrimaryKey,\n): boolean {\n return keyMatchesPrimaryKey(Object.keys(constraint), primary);\n}\n\nexport function keyMatchesPrimaryKey(\n key: Iterable<string>,\n primary: PrimaryKey,\n): boolean {\n const constraintKeys = [...key];\n\n if (constraintKeys.length !== primary.length) {\n return false;\n }\n\n // Primary key is always sorted\n // Constraint does not have to be sorted\n constraintKeys.sort(stringCompare);\n\n for (let i = 0; i < constraintKeys.length; i++) {\n if (constraintKeys[i] !== primary[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Pulls top level `and` components out of a condition tree.\n * The resulting array of simple conditions would match a superset of\n * values that the original condition would match.\n *\n * Examples:\n * a AND b OR c\n *\n * In this case we cannot pull anything because the `or` is at the top level.\n *\n * a AND b AND c\n * We can pull all three.\n *\n * a AND (b OR c)\n * We can only pull `a`.\n */\nexport function pullSimpleAndComponents(\n condition: Condition,\n): SimpleCondition[] {\n if (condition.type === 'and') {\n return condition.conditions.flatMap(pullSimpleAndComponents);\n }\n\n if (condition.type === 'simple') {\n return [condition];\n }\n\n if (condition.type === 'or' && condition.conditions.length === 1) {\n return pullSimpleAndComponents(condition.conditions[0]);\n }\n\n return [];\n}\n\n/**\n * Checks if the supplied filters constitute a primary key lookup.\n * If so, returns the constraint that would be used to look up the primary key.\n * If not, returns undefined.\n */\nexport function primaryKeyConstraintFromFilters(\n condition: Condition | undefined,\n primary: PrimaryKey,\n): Constraint | undefined {\n if (condition === undefined) {\n return undefined;\n }\n\n const conditions = pullSimpleAndComponents(condition);\n if (conditions.length === 0) {\n return undefined;\n }\n\n const ret: Writable<Constraint> = {};\n for (const subCondition of conditions) {\n if (subCondition.op === '=') {\n const column = extractColumn(subCondition);\n if (column !== undefined) {\n if (!primary.includes(column.name)) {\n continue;\n }\n ret[column.name] = column.value;\n }\n }\n }\n\n if (Object.keys(ret).length !== primary.length) {\n return undefined;\n }\n\n return ret;\n}\n\nfunction extractColumn(\n condition: SimpleCondition,\n): {name: string; value: Value} | undefined {\n if (condition.left.type === 'column') {\n assert(\n condition.right.type === 'literal',\n () =>\n `extractColumn: expected right side to be literal, got ${condition.right.type}`,\n );\n return {name: condition.left.name, value: condition.right.value};\n }\n\n return undefined;\n}\n\ndeclare const TESTING: boolean;\n\nexport class SetOfConstraint {\n #data: Constraint[] = [];\n\n constructor() {\n // Only used in testing\n assert(TESTING, 'SetOfConstraint is only available in testing');\n }\n\n #indexOf(value: Constraint): number {\n return this.#data.findIndex(v => constraintEquals(v, value));\n }\n\n has(value: Constraint): boolean {\n return this.#indexOf(value) !== -1;\n }\n\n add(value: Constraint): this {\n if (!this.has(value)) {\n this.#data.push(value);\n }\n return this;\n }\n}\n\nfunction constraintEquals(a: Constraint, b: Constraint): boolean {\n const aEntries = Object.entries(a);\n const bEntries = Object.entries(b);\n if (aEntries.length !== bEntries.length) {\n return false;\n }\n for (let i = 0; i < aEntries.length; i++) {\n if (\n aEntries[i][0] !== bEntries[i][0] ||\n !valuesEqual(aEntries[i][1], bEntries[i][1])\n ) {\n return false;\n }\n }\n return true;\n}\n"],"names":[],"mappings":";;;AAeO,SAAS,qBACd,YACA,KACS;AACT,aAAW,OAAO,YAAY;AAC5B,QAAI,CAAC,YAAY,IAAI,GAAG,GAAG,WAAW,GAAG,CAAC,GAAG;AAC3C,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAOO,SAAS,yBACd,MACA,OACS;AACT,aAAW,OAAO,MAAM;AACtB,QAAI,OAAO,SAAS,CAAC,YAAY,KAAK,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG;AACvD,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,4BACd,YACA,SACS;AACT,SAAO,qBAAqB,OAAO,KAAK,UAAU,GAAG,OAAO;AAC9D;AAEO,SAAS,qBACd,KACA,SACS;AACT,QAAM,iBAAiB,CAAC,GAAG,GAAG;AAE9B,MAAI,eAAe,WAAW,QAAQ,QAAQ;AAC5C,WAAO;AAAA,EACT;AAIA,iBAAe,KAAK,aAAa;AAEjC,WAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC9C,QAAI,eAAe,CAAC,MAAM,QAAQ,CAAC,GAAG;AACpC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAkBO,SAAS,wBACd,WACmB;AACnB,MAAI,UAAU,SAAS,OAAO;AAC5B,WAAO,UAAU,WAAW,QAAQ,uBAAuB;AAAA,EAC7D;AAEA,MAAI,UAAU,SAAS,UAAU;AAC/B,WAAO,CAAC,SAAS;AAAA,EACnB;AAEA,MAAI,UAAU,SAAS,QAAQ,UAAU,WAAW,WAAW,GAAG;AAChE,WAAO,wBAAwB,UAAU,WAAW,CAAC,CAAC;AAAA,EACxD;AAEA,SAAO,CAAA;AACT;AAOO,SAAS,gCACd,WACA,SACwB;AACxB,MAAI,cAAc,QAAW;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,wBAAwB,SAAS;AACpD,MAAI,WAAW,WAAW,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,MAA4B,CAAA;AAClC,aAAW,gBAAgB,YAAY;AACrC,QAAI,aAAa,OAAO,KAAK;AAC3B,YAAM,SAAS,cAAc,YAAY;AACzC,UAAI,WAAW,QAAW;AACxB,YAAI,CAAC,QAAQ,SAAS,OAAO,IAAI,GAAG;AAClC;AAAA,QACF;AACA,YAAI,OAAO,IAAI,IAAI,OAAO;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,KAAK,GAAG,EAAE,WAAW,QAAQ,QAAQ;AAC9C,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,cACP,WAC0C;AAC1C,MAAI,UAAU,KAAK,SAAS,UAAU;AACpC;AAAA,MACE,UAAU,MAAM,SAAS;AAAA,MACzB,MACE,yDAAyD,UAAU,MAAM,IAAI;AAAA,IAAA;AAEjF,WAAO,EAAC,MAAM,UAAU,KAAK,MAAM,OAAO,UAAU,MAAM,MAAA;AAAA,EAC5D;AAEA,SAAO;AACT;"}
1
+ {"version":3,"file":"constraint.js","names":["#data","#indexOf"],"sources":["../../../../../zql/src/ivm/constraint.ts"],"sourcesContent":["import {assert} from '../../../shared/src/asserts.ts';\nimport {stringCompare} from '../../../shared/src/string-compare.ts';\nimport type {Writable} from '../../../shared/src/writable.ts';\nimport type {\n Condition,\n SimpleCondition,\n} from '../../../zero-protocol/src/ast.ts';\nimport type {Row, Value} from '../../../zero-protocol/src/data.ts';\nimport type {PrimaryKey} from '../../../zero-protocol/src/primary-key.ts';\nimport {valuesEqual} from './data.ts';\n\nexport type Constraint = {\n readonly [key: string]: Value;\n};\n\nexport function constraintMatchesRow(\n constraint: Constraint,\n row: Row,\n): boolean {\n for (const key in constraint) {\n if (!valuesEqual(row[key], constraint[key])) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Constraints are compatible if:\n * 1. They do not have any keys in common\n * 2. They have keys in common, but the values for those keys are equal\n */\nexport function constraintsAreCompatible(\n left: Constraint,\n right: Constraint,\n): boolean {\n for (const key in left) {\n if (key in right && !valuesEqual(left[key], right[key])) {\n return false;\n }\n }\n return true;\n}\n\nexport function constraintMatchesPrimaryKey(\n constraint: Constraint,\n primary: PrimaryKey,\n): boolean {\n return keyMatchesPrimaryKey(Object.keys(constraint), primary);\n}\n\nexport function keyMatchesPrimaryKey(\n key: Iterable<string>,\n primary: PrimaryKey,\n): boolean {\n const constraintKeys = [...key];\n\n if (constraintKeys.length !== primary.length) {\n return false;\n }\n\n // Primary key is always sorted\n // Constraint does not have to be sorted\n constraintKeys.sort(stringCompare);\n\n for (let i = 0; i < constraintKeys.length; i++) {\n if (constraintKeys[i] !== primary[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Pulls top level `and` components out of a condition tree.\n * The resulting array of simple conditions would match a superset of\n * values that the original condition would match.\n *\n * Examples:\n * a AND b OR c\n *\n * In this case we cannot pull anything because the `or` is at the top level.\n *\n * a AND b AND c\n * We can pull all three.\n *\n * a AND (b OR c)\n * We can only pull `a`.\n */\nexport function pullSimpleAndComponents(\n condition: Condition,\n): SimpleCondition[] {\n if (condition.type === 'and') {\n return condition.conditions.flatMap(pullSimpleAndComponents);\n }\n\n if (condition.type === 'simple') {\n return [condition];\n }\n\n if (condition.type === 'or' && condition.conditions.length === 1) {\n return pullSimpleAndComponents(condition.conditions[0]);\n }\n\n return [];\n}\n\n/**\n * Checks if the supplied filters constitute a primary key lookup.\n * If so, returns the constraint that would be used to look up the primary key.\n * If not, returns undefined.\n */\nexport function primaryKeyConstraintFromFilters(\n condition: Condition | undefined,\n primary: PrimaryKey,\n): Constraint | undefined {\n if (condition === undefined) {\n return undefined;\n }\n\n const conditions = pullSimpleAndComponents(condition);\n if (conditions.length === 0) {\n return undefined;\n }\n\n const ret: Writable<Constraint> = {};\n for (const subCondition of conditions) {\n if (subCondition.op === '=') {\n const column = extractColumn(subCondition);\n if (column !== undefined) {\n if (!primary.includes(column.name)) {\n continue;\n }\n ret[column.name] = column.value;\n }\n }\n }\n\n if (Object.keys(ret).length !== primary.length) {\n return undefined;\n }\n\n return ret;\n}\n\nfunction extractColumn(\n condition: SimpleCondition,\n): {name: string; value: Value} | undefined {\n if (condition.left.type === 'column') {\n assert(\n condition.right.type === 'literal',\n () =>\n `extractColumn: expected right side to be literal, got ${condition.right.type}`,\n );\n return {name: condition.left.name, value: condition.right.value};\n }\n\n return undefined;\n}\n\ndeclare const TESTING: boolean;\n\nexport class SetOfConstraint {\n #data: Constraint[] = [];\n\n constructor() {\n // Only used in testing\n assert(TESTING, 'SetOfConstraint is only available in testing');\n }\n\n #indexOf(value: Constraint): number {\n return this.#data.findIndex(v => constraintEquals(v, value));\n }\n\n has(value: Constraint): boolean {\n return this.#indexOf(value) !== -1;\n }\n\n add(value: Constraint): this {\n if (!this.has(value)) {\n this.#data.push(value);\n }\n return this;\n }\n}\n\nfunction constraintEquals(a: Constraint, b: Constraint): boolean {\n const aEntries = Object.entries(a);\n const bEntries = Object.entries(b);\n if (aEntries.length !== bEntries.length) {\n return false;\n }\n for (let i = 0; i < aEntries.length; i++) {\n if (\n aEntries[i][0] !== bEntries[i][0] ||\n !valuesEqual(aEntries[i][1], bEntries[i][1])\n ) {\n return false;\n }\n }\n return true;\n}\n"],"mappings":";;;;AAeA,SAAgB,qBACd,YACA,KACS;AACT,MAAK,MAAM,OAAO,WAChB,KAAI,CAAC,YAAY,IAAI,MAAM,WAAW,KAAK,CACzC,QAAO;AAGX,QAAO;;;;;;;AAQT,SAAgB,yBACd,MACA,OACS;AACT,MAAK,MAAM,OAAO,KAChB,KAAI,OAAO,SAAS,CAAC,YAAY,KAAK,MAAM,MAAM,KAAK,CACrD,QAAO;AAGX,QAAO;;AAGT,SAAgB,4BACd,YACA,SACS;AACT,QAAO,qBAAqB,OAAO,KAAK,WAAW,EAAE,QAAQ;;AAG/D,SAAgB,qBACd,KACA,SACS;CACT,MAAM,iBAAiB,CAAC,GAAG,IAAI;AAE/B,KAAI,eAAe,WAAW,QAAQ,OACpC,QAAO;AAKT,gBAAe,KAAK,cAAc;AAElC,MAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,IACzC,KAAI,eAAe,OAAO,QAAQ,GAChC,QAAO;AAGX,QAAO;;;;;;;;;;;;;;;;;;AAmBT,SAAgB,wBACd,WACmB;AACnB,KAAI,UAAU,SAAS,MACrB,QAAO,UAAU,WAAW,QAAQ,wBAAwB;AAG9D,KAAI,UAAU,SAAS,SACrB,QAAO,CAAC,UAAU;AAGpB,KAAI,UAAU,SAAS,QAAQ,UAAU,WAAW,WAAW,EAC7D,QAAO,wBAAwB,UAAU,WAAW,GAAG;AAGzD,QAAO,EAAE;;;;;;;AAQX,SAAgB,gCACd,WACA,SACwB;AACxB,KAAI,cAAc,KAAA,EAChB;CAGF,MAAM,aAAa,wBAAwB,UAAU;AACrD,KAAI,WAAW,WAAW,EACxB;CAGF,MAAM,MAA4B,EAAE;AACpC,MAAK,MAAM,gBAAgB,WACzB,KAAI,aAAa,OAAO,KAAK;EAC3B,MAAM,SAAS,cAAc,aAAa;AAC1C,MAAI,WAAW,KAAA,GAAW;AACxB,OAAI,CAAC,QAAQ,SAAS,OAAO,KAAK,CAChC;AAEF,OAAI,OAAO,QAAQ,OAAO;;;AAKhC,KAAI,OAAO,KAAK,IAAI,CAAC,WAAW,QAAQ,OACtC;AAGF,QAAO;;AAGT,SAAS,cACP,WAC0C;AAC1C,KAAI,UAAU,KAAK,SAAS,UAAU;AACpC,SACE,UAAU,MAAM,SAAS,iBAEvB,yDAAyD,UAAU,MAAM,OAC5E;AACD,SAAO;GAAC,MAAM,UAAU,KAAK;GAAM,OAAO,UAAU,MAAM;GAAM"}