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

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 (384) hide show
  1. package/out/replicache/src/btree/read.d.ts +12 -1
  2. package/out/replicache/src/btree/read.d.ts.map +1 -1
  3. package/out/replicache/src/btree/read.js +24 -12
  4. package/out/replicache/src/btree/read.js.map +1 -1
  5. package/out/replicache/src/db/rebase.d.ts +14 -2
  6. package/out/replicache/src/db/rebase.d.ts.map +1 -1
  7. package/out/replicache/src/db/rebase.js +27 -5
  8. package/out/replicache/src/db/rebase.js.map +1 -1
  9. package/out/replicache/src/db/write.js.map +1 -1
  10. package/out/replicache/src/kv/expo-sqlite/store.d.ts.map +1 -1
  11. package/out/replicache/src/kv/expo-sqlite/store.js +27 -4
  12. package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
  13. package/out/replicache/src/kv/sqlite-store.d.ts +11 -0
  14. package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
  15. package/out/replicache/src/kv/sqlite-store.js +43 -3
  16. package/out/replicache/src/kv/sqlite-store.js.map +1 -1
  17. package/out/replicache/src/persist/persist.d.ts.map +1 -1
  18. package/out/replicache/src/persist/persist.js +12 -5
  19. package/out/replicache/src/persist/persist.js.map +1 -1
  20. package/out/replicache/src/persist/refresh.js +6 -2
  21. package/out/replicache/src/persist/refresh.js.map +1 -1
  22. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  23. package/out/replicache/src/replicache-impl.js +14 -2
  24. package/out/replicache/src/replicache-impl.js.map +1 -1
  25. package/out/replicache/src/replicache-options.d.ts +9 -0
  26. package/out/replicache/src/replicache-options.d.ts.map +1 -1
  27. package/out/replicache/src/transactions.d.ts.map +1 -1
  28. package/out/replicache/src/transactions.js +1 -1
  29. package/out/replicache/src/transactions.js.map +1 -1
  30. package/out/shared/src/error.d.ts +11 -0
  31. package/out/shared/src/error.d.ts.map +1 -1
  32. package/out/shared/src/error.js +35 -1
  33. package/out/shared/src/error.js.map +1 -1
  34. package/out/shared/src/hash.d.ts.map +1 -1
  35. package/out/shared/src/hash.js +105 -10
  36. package/out/shared/src/hash.js.map +1 -1
  37. package/out/shared/src/map.d.ts +7 -2
  38. package/out/shared/src/map.d.ts.map +1 -1
  39. package/out/shared/src/map.js.map +1 -1
  40. package/out/shared/src/promise-race.d.ts +14 -0
  41. package/out/shared/src/promise-race.d.ts.map +1 -1
  42. package/out/shared/src/promise-race.js +32 -1
  43. package/out/shared/src/promise-race.js.map +1 -1
  44. package/out/zero/package.js +2 -3
  45. package/out/zero/package.js.map +1 -1
  46. package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
  47. package/out/zero-cache/src/auth/write-authorizer.js +8 -1
  48. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  49. package/out/zero-cache/src/config/normalize.d.ts +5 -0
  50. package/out/zero-cache/src/config/normalize.d.ts.map +1 -1
  51. package/out/zero-cache/src/config/normalize.js +16 -3
  52. package/out/zero-cache/src/config/normalize.js.map +1 -1
  53. package/out/zero-cache/src/config/zero-config.d.ts +36 -7
  54. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  55. package/out/zero-cache/src/config/zero-config.js +121 -46
  56. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  57. package/out/zero-cache/src/db/create.d.ts.map +1 -1
  58. package/out/zero-cache/src/db/create.js +4 -1
  59. package/out/zero-cache/src/db/create.js.map +1 -1
  60. package/out/zero-cache/src/db/index-predicate.d.ts +4 -0
  61. package/out/zero-cache/src/db/index-predicate.d.ts.map +1 -0
  62. package/out/zero-cache/src/db/index-predicate.js +46 -0
  63. package/out/zero-cache/src/db/index-predicate.js.map +1 -0
  64. package/out/zero-cache/src/db/lite-tables.d.ts +10 -2
  65. package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
  66. package/out/zero-cache/src/db/lite-tables.js +8 -3
  67. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  68. package/out/zero-cache/src/db/migration-lite.d.ts.map +1 -1
  69. package/out/zero-cache/src/db/migration-lite.js +5 -3
  70. package/out/zero-cache/src/db/migration-lite.js.map +1 -1
  71. package/out/zero-cache/src/db/specs.d.ts +41 -0
  72. package/out/zero-cache/src/db/specs.d.ts.map +1 -1
  73. package/out/zero-cache/src/db/specs.js +30 -3
  74. package/out/zero-cache/src/db/specs.js.map +1 -1
  75. package/out/zero-cache/src/db/transaction-pool.d.ts +5 -15
  76. package/out/zero-cache/src/db/transaction-pool.d.ts.map +1 -1
  77. package/out/zero-cache/src/db/transaction-pool.js +39 -73
  78. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  79. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  80. package/out/zero-cache/src/server/change-streamer.js +27 -15
  81. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  82. package/out/zero-cache/src/server/main.d.ts.map +1 -1
  83. package/out/zero-cache/src/server/main.js +4 -4
  84. package/out/zero-cache/src/server/main.js.map +1 -1
  85. package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
  86. package/out/zero-cache/src/server/replicator.js +8 -4
  87. package/out/zero-cache/src/server/replicator.js.map +1 -1
  88. package/out/zero-cache/src/server/runner/run-worker.js +1 -1
  89. package/out/zero-cache/src/server/worker-urls.d.ts +0 -1
  90. package/out/zero-cache/src/server/worker-urls.d.ts.map +1 -1
  91. package/out/zero-cache/src/server/worker-urls.js +1 -2
  92. package/out/zero-cache/src/server/worker-urls.js.map +1 -1
  93. package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
  94. package/out/zero-cache/src/services/analyze.js +1 -0
  95. package/out/zero-cache/src/services/analyze.js.map +1 -1
  96. package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts +12 -2
  97. package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts.map +1 -1
  98. package/out/zero-cache/src/services/change-source/common/backfill-manager.js +14 -3
  99. package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
  100. package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts.map +1 -1
  101. package/out/zero-cache/src/services/change-source/common/replica-schema.js +10 -41
  102. package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
  103. package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts +3 -2
  104. package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts.map +1 -1
  105. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +42 -16
  106. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
  107. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +34 -2
  108. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  109. package/out/zero-cache/src/services/change-source/pg/change-source.js +47 -19
  110. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  111. package/out/zero-cache/src/services/change-source/pg/decommission.d.ts.map +1 -1
  112. package/out/zero-cache/src/services/change-source/pg/decommission.js +20 -11
  113. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
  114. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +1 -0
  115. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
  116. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +58 -80
  117. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  118. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts +20 -0
  119. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.d.ts.map +1 -1
  120. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +43 -3
  121. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
  122. package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts +24 -1
  123. package/out/zero-cache/src/services/change-source/pg/replication-slots.d.ts.map +1 -1
  124. package/out/zero-cache/src/services/change-source/pg/replication-slots.js +35 -5
  125. package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -1
  126. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +1513 -229
  127. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts.map +1 -1
  128. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +2 -2
  129. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  130. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.d.ts +19 -0
  131. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.d.ts.map +1 -0
  132. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js +581 -0
  133. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js.map +1 -0
  134. package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts +1 -1
  135. package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +1 -1
  136. package/out/zero-cache/src/services/change-source/pg/schema/init.js +15 -6
  137. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  138. package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts +137 -20
  139. package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts.map +1 -1
  140. package/out/zero-cache/src/services/change-source/pg/schema/published.js +82 -13
  141. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
  142. package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +128 -21
  143. package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts.map +1 -1
  144. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +5 -5
  145. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  146. package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts +2 -0
  147. package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts.map +1 -1
  148. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +3 -0
  149. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
  150. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts +1 -4
  151. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.d.ts.map +1 -1
  152. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js +11 -18
  153. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js.map +1 -1
  154. package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts.map +1 -1
  155. package/out/zero-cache/src/services/change-streamer/backup-monitor.js +8 -3
  156. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  157. package/out/zero-cache/src/services/change-streamer/broadcast.d.ts.map +1 -1
  158. package/out/zero-cache/src/services/change-streamer/broadcast.js +4 -1
  159. package/out/zero-cache/src/services/change-streamer/broadcast.js.map +1 -1
  160. package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.d.ts +34 -0
  161. package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.d.ts.map +1 -0
  162. package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.js +67 -0
  163. package/out/zero-cache/src/services/change-streamer/change-log-compare-digest.js.map +1 -0
  164. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +2 -4
  165. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  166. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +8 -2
  167. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  168. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +34 -13
  169. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  170. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +165 -36
  171. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  172. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +4 -9
  173. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
  174. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  175. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +1 -1
  176. package/out/zero-cache/src/services/change-streamer/forwarder.js +12 -3
  177. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  178. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.d.ts.map +1 -1
  179. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js +11 -5
  180. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js.map +1 -1
  181. package/out/zero-cache/src/services/change-streamer/shard-sampling.d.ts +11 -0
  182. package/out/zero-cache/src/services/change-streamer/shard-sampling.d.ts.map +1 -0
  183. package/out/zero-cache/src/services/change-streamer/shard-sampling.js +19 -0
  184. package/out/zero-cache/src/services/change-streamer/shard-sampling.js.map +1 -0
  185. package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts +11 -1
  186. package/out/zero-cache/src/services/change-streamer/snapshot-reservations.d.ts.map +1 -1
  187. package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js +38 -5
  188. package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js.map +1 -1
  189. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts +25 -1
  190. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.d.ts.map +1 -1
  191. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js +95 -12
  192. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js.map +1 -1
  193. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.d.ts +83 -0
  194. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.d.ts.map +1 -0
  195. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.js +417 -0
  196. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.js.map +1 -0
  197. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.d.ts +73 -0
  198. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.d.ts.map +1 -0
  199. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.js +157 -0
  200. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.js.map +1 -0
  201. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts +1 -1
  202. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.d.ts.map +1 -1
  203. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js +8 -3
  204. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js.map +1 -1
  205. package/out/zero-cache/src/services/change-streamer/storer.d.ts +63 -1
  206. package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
  207. package/out/zero-cache/src/services/change-streamer/storer.js +217 -49
  208. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  209. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +8 -1
  210. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
  211. package/out/zero-cache/src/services/change-streamer/subscriber.js +10 -1
  212. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  213. package/out/zero-cache/src/services/change-streamer/vfs-watermark-poller.d.ts +29 -0
  214. package/out/zero-cache/src/services/change-streamer/vfs-watermark-poller.d.ts.map +1 -0
  215. package/out/zero-cache/src/services/change-streamer/vfs-watermark-poller.js +154 -0
  216. package/out/zero-cache/src/services/change-streamer/vfs-watermark-poller.js.map +1 -0
  217. package/out/zero-cache/src/services/http-service.d.ts +1 -0
  218. package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
  219. package/out/zero-cache/src/services/http-service.js +7 -3
  220. package/out/zero-cache/src/services/http-service.js.map +1 -1
  221. package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
  222. package/out/zero-cache/src/services/litestream/commands.js +16 -7
  223. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  224. package/out/zero-cache/src/services/litestream/config-v5.yml +15 -1
  225. package/out/zero-cache/src/services/litestream/litestream-checkpointer.js +131 -0
  226. package/out/zero-cache/src/services/litestream/litestream-checkpointer.js.map +1 -0
  227. package/out/zero-cache/src/services/litestream/litestream-controller.d.ts +70 -0
  228. package/out/zero-cache/src/services/litestream/litestream-controller.d.ts.map +1 -0
  229. package/out/zero-cache/src/services/litestream/litestream-controller.js +101 -0
  230. package/out/zero-cache/src/services/litestream/litestream-controller.js.map +1 -0
  231. package/out/zero-cache/src/services/litestream/metrics.d.ts +1 -0
  232. package/out/zero-cache/src/services/litestream/metrics.d.ts.map +1 -1
  233. package/out/zero-cache/src/services/litestream/metrics.js +4 -1
  234. package/out/zero-cache/src/services/litestream/metrics.js.map +1 -1
  235. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  236. package/out/zero-cache/src/services/mutagen/mutagen.js +1 -1
  237. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  238. package/out/zero-cache/src/services/replicator/change-log-db.d.ts +10 -0
  239. package/out/zero-cache/src/services/replicator/change-log-db.d.ts.map +1 -1
  240. package/out/zero-cache/src/services/replicator/change-log-db.js +15 -1
  241. package/out/zero-cache/src/services/replicator/change-log-db.js.map +1 -1
  242. package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
  243. package/out/zero-cache/src/services/replicator/change-processor.js +18 -21
  244. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  245. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +1 -1
  246. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  247. package/out/zero-cache/src/services/replicator/incremental-sync.js +2 -6
  248. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  249. package/out/zero-cache/src/services/replicator/replicator.d.ts +1 -1
  250. package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
  251. package/out/zero-cache/src/services/replicator/replicator.js +2 -2
  252. package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
  253. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts +3 -2
  254. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.d.ts.map +1 -1
  255. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js +8 -6
  256. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js.map +1 -1
  257. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts +27 -2
  258. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts.map +1 -1
  259. package/out/zero-cache/src/services/replicator/write-worker-client.js +3 -2
  260. package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -1
  261. package/out/zero-cache/src/services/replicator/write-worker.js +24 -5
  262. package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -1
  263. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts +3 -2
  264. package/out/zero-cache/src/services/view-syncer/client-handler.d.ts.map +1 -1
  265. package/out/zero-cache/src/services/view-syncer/client-handler.js +25 -17
  266. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  267. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
  268. package/out/zero-cache/src/services/view-syncer/cvr-store.js +14 -1
  269. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  270. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +3 -3
  271. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  272. package/out/zero-cache/src/services/view-syncer/view-syncer.js +6 -2
  273. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  274. package/out/zero-cache/src/types/downstream.d.ts +11 -0
  275. package/out/zero-cache/src/types/downstream.d.ts.map +1 -0
  276. package/out/zero-cache/src/types/pg.d.ts +15 -2
  277. package/out/zero-cache/src/types/pg.d.ts.map +1 -1
  278. package/out/zero-cache/src/types/pg.js +21 -8
  279. package/out/zero-cache/src/types/pg.js.map +1 -1
  280. package/out/zero-cache/src/types/poke-chunk.d.ts +18 -0
  281. package/out/zero-cache/src/types/poke-chunk.d.ts.map +1 -0
  282. package/out/zero-cache/src/types/poke-chunk.js +57 -0
  283. package/out/zero-cache/src/types/poke-chunk.js.map +1 -0
  284. package/out/zero-cache/src/types/processes.js +1 -4
  285. package/out/zero-cache/src/types/processes.js.map +1 -1
  286. package/out/zero-cache/src/types/streams.d.ts +4 -9
  287. package/out/zero-cache/src/types/streams.d.ts.map +1 -1
  288. package/out/zero-cache/src/types/streams.js.map +1 -1
  289. package/out/zero-cache/src/types/subscription.d.ts +2 -11
  290. package/out/zero-cache/src/types/subscription.d.ts.map +1 -1
  291. package/out/zero-cache/src/types/subscription.js +4 -25
  292. package/out/zero-cache/src/types/subscription.js.map +1 -1
  293. package/out/zero-cache/src/workers/connection.d.ts +22 -4
  294. package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
  295. package/out/zero-cache/src/workers/connection.js +112 -14
  296. package/out/zero-cache/src/workers/connection.js.map +1 -1
  297. package/out/zero-cache/src/workers/replicator.d.ts +1 -0
  298. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  299. package/out/zero-cache/src/workers/replicator.js +4 -2
  300. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  301. package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
  302. package/out/zero-client/src/client/connection-manager.js +46 -0
  303. package/out/zero-client/src/client/connection-manager.js.map +1 -1
  304. package/out/zero-client/src/client/context.d.ts +15 -0
  305. package/out/zero-client/src/client/context.d.ts.map +1 -1
  306. package/out/zero-client/src/client/context.js +44 -0
  307. package/out/zero-client/src/client/context.js.map +1 -1
  308. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts.map +1 -1
  309. package/out/zero-client/src/client/inspector/lazy-inspector.js +19 -12
  310. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -1
  311. package/out/zero-client/src/client/ivm-branch.js.map +1 -1
  312. package/out/zero-client/src/client/version.js +1 -1
  313. package/out/zero-client/src/client/zero-poke-handler.d.ts +7 -2
  314. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  315. package/out/zero-client/src/client/zero-poke-handler.js +52 -2
  316. package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
  317. package/out/zero-client/src/client/zero-rep.d.ts +1 -0
  318. package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
  319. package/out/zero-client/src/client/zero-rep.js +9 -6
  320. package/out/zero-client/src/client/zero-rep.js.map +1 -1
  321. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  322. package/out/zero-client/src/client/zero.js +98 -25
  323. package/out/zero-client/src/client/zero.js.map +1 -1
  324. package/out/zero-protocol/src/custom-queries.d.ts +1 -1
  325. package/out/zero-protocol/src/down.d.ts +1 -1
  326. package/out/zero-protocol/src/error.d.ts +4 -4
  327. package/out/zero-protocol/src/inspect-down.js +1 -1
  328. package/out/zero-protocol/src/mutate-server.d.ts +2 -2
  329. package/out/zero-protocol/src/poke.d.ts +89 -7
  330. package/out/zero-protocol/src/poke.d.ts.map +1 -1
  331. package/out/zero-protocol/src/poke.js +16 -8
  332. package/out/zero-protocol/src/poke.js.map +1 -1
  333. package/out/zero-protocol/src/protocol-version.d.ts +12 -7
  334. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  335. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  336. package/out/zero-protocol/src/push.d.ts +1 -1
  337. package/out/zero-protocol/src/query-server.d.ts +2 -2
  338. package/out/zql/src/ivm/array-view.d.ts.map +1 -1
  339. package/out/zql/src/ivm/array-view.js +5 -3
  340. package/out/zql/src/ivm/array-view.js.map +1 -1
  341. package/out/zql/src/ivm/data.d.ts.map +1 -1
  342. package/out/zql/src/ivm/data.js +8 -3
  343. package/out/zql/src/ivm/data.js.map +1 -1
  344. package/out/zql/src/ivm/deferred-input.d.ts +44 -0
  345. package/out/zql/src/ivm/deferred-input.d.ts.map +1 -0
  346. package/out/zql/src/ivm/deferred-input.js +88 -0
  347. package/out/zql/src/ivm/deferred-input.js.map +1 -0
  348. package/out/zql/src/ivm/memory-source.d.ts +10 -2
  349. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  350. package/out/zql/src/ivm/memory-source.js +19 -16
  351. package/out/zql/src/ivm/memory-source.js.map +1 -1
  352. package/out/zql/src/ivm/stream.d.ts +0 -1
  353. package/out/zql/src/ivm/stream.d.ts.map +1 -1
  354. package/out/zql/src/ivm/stream.js +1 -7
  355. package/out/zql/src/ivm/stream.js.map +1 -1
  356. package/out/zql/src/ivm/union-fan-in.d.ts +1 -1
  357. package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
  358. package/out/zql/src/ivm/union-fan-in.js +11 -2
  359. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  360. package/out/zql/src/ivm/view-apply-change.js +6 -1
  361. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  362. package/out/zql/src/query/query-delegate-base.d.ts +6 -0
  363. package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
  364. package/out/zql/src/query/query-delegate-base.js +73 -10
  365. package/out/zql/src/query/query-delegate-base.js.map +1 -1
  366. package/out/zql/src/query/query-delegate.d.ts +22 -0
  367. package/out/zql/src/query/query-delegate.d.ts.map +1 -1
  368. package/out/zqlite/src/query-builder.d.ts.map +1 -1
  369. package/out/zqlite/src/query-builder.js +2 -1
  370. package/out/zqlite/src/query-builder.js.map +1 -1
  371. package/out/zqlite/src/sqlite-stat-fanout.d.ts.map +1 -1
  372. package/out/zqlite/src/sqlite-stat-fanout.js +1 -0
  373. package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
  374. package/out/zqlite/src/table-source.d.ts +1 -1
  375. package/out/zqlite/src/table-source.d.ts.map +1 -1
  376. package/out/zqlite/src/table-source.js +3 -2
  377. package/out/zqlite/src/table-source.js.map +1 -1
  378. package/package.json +2 -3
  379. package/out/zero-cache/src/server/backup-watermark-poller.js +0 -31
  380. package/out/zero-cache/src/server/backup-watermark-poller.js.map +0 -1
  381. package/out/zero-cache/src/services/litestream/vfs-watermark-poller.d.ts +0 -57
  382. package/out/zero-cache/src/services/litestream/vfs-watermark-poller.d.ts.map +0 -1
  383. package/out/zero-cache/src/services/litestream/vfs-watermark-poller.js +0 -137
  384. package/out/zero-cache/src/services/litestream/vfs-watermark-poller.js.map +0 -1
@@ -0,0 +1,581 @@
1
+ //#region ../zero-cache/src/services/change-source/pg/schema/index-predicate.ts
2
+ var UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
3
+ var INTEGER_RE = /^[+-]?\d+$/;
4
+ var WHITESPACE_RE = /\s/;
5
+ var OPERATOR_TOKEN_RE = /^(?:::|<>|!=|<=|>=|=|<|>)/;
6
+ var UNSUPPORTED_OPERATOR_TOKEN_RE = /^(?:!~\*|!~|~\*|~)/;
7
+ var INTEGER_TOKEN_RE = /^[+-]?\d+/;
8
+ var WORD_TOKEN_RE = /^[A-Za-z_][A-Za-z0-9_$]*/;
9
+ var SIMPLE_ESCAPES = {
10
+ b: "\b",
11
+ f: "\f",
12
+ n: "\n",
13
+ r: "\r",
14
+ t: " ",
15
+ v: "\v"
16
+ };
17
+ var UnsupportedPredicateError = class extends Error {
18
+ reason;
19
+ constructor(reason) {
20
+ super(reason);
21
+ this.reason = reason;
22
+ }
23
+ };
24
+ function translatePostgresIndexPredicate(sql, table) {
25
+ try {
26
+ const parser = new Parser(tokenize(sql));
27
+ const expression = parser.parse();
28
+ parser.expect("EOF");
29
+ return {
30
+ supported: true,
31
+ predicate: normalize(expression, table)
32
+ };
33
+ } catch (error) {
34
+ return {
35
+ supported: false,
36
+ reason: error instanceof UnsupportedPredicateError ? error.reason : "unsupported-syntax"
37
+ };
38
+ }
39
+ }
40
+ var Parser = class {
41
+ #tokens;
42
+ #position = 0;
43
+ constructor(tokens) {
44
+ this.#tokens = tokens;
45
+ }
46
+ parse() {
47
+ return this.#parseOr();
48
+ }
49
+ #parseOr() {
50
+ const expressions = [this.#parseAnd()];
51
+ while (this.#take("OR")) expressions.push(this.#parseAnd());
52
+ return expressions.length === 1 ? expressions[0] : {
53
+ type: "or",
54
+ expressions
55
+ };
56
+ }
57
+ #parseAnd() {
58
+ const expressions = [this.#parseNot()];
59
+ while (this.#take("AND")) expressions.push(this.#parseNot());
60
+ return expressions.length === 1 ? expressions[0] : {
61
+ type: "and",
62
+ expressions
63
+ };
64
+ }
65
+ #parseNot() {
66
+ if (this.#take("NOT")) return {
67
+ type: "not",
68
+ expression: this.#parseNot()
69
+ };
70
+ return this.#parseComparison();
71
+ }
72
+ #parseComparison() {
73
+ const left = this.#parseOperand();
74
+ if (this.#take("IS")) {
75
+ const not = this.#take("NOT");
76
+ const token = this.#tokens[this.#position++];
77
+ if (token?.type !== "literal" || token.literalType !== "null") throw new UnsupportedPredicateError("unsupported-operator");
78
+ return {
79
+ type: "null-test",
80
+ expression: left,
81
+ not
82
+ };
83
+ }
84
+ if (this.#take("IN")) {
85
+ this.expect("(");
86
+ const values = this.#parseOperandList(")");
87
+ this.expect(")");
88
+ return comparisons(left, values);
89
+ }
90
+ const op = this.#tokens[this.#position]?.type;
91
+ if (isComparison(op)) {
92
+ this.#position++;
93
+ if (op === "=" && this.#takeIdentifier("ANY")) return comparisons(left, this.#parseLiteralArray());
94
+ return {
95
+ type: "comparison",
96
+ left,
97
+ op,
98
+ right: this.#parseOperand()
99
+ };
100
+ }
101
+ const next = this.#tokens[this.#position];
102
+ if (next?.type === "identifier" && next.value.toUpperCase() === "COLLATE") throw new UnsupportedPredicateError("non-deterministic-collation");
103
+ if (next?.type === "unsupported" && UNSUPPORTED_OPERATOR_TOKEN_RE.test(next.value)) throw new UnsupportedPredicateError("unsupported-operator");
104
+ if (next?.type === "identifier" && unsupportedOperatorWords.has(next.value.toUpperCase())) throw new UnsupportedPredicateError("unsupported-operator");
105
+ return left;
106
+ }
107
+ #parseLiteralArray() {
108
+ this.expect("(");
109
+ this.#expectIdentifier("ARRAY");
110
+ this.expect("[");
111
+ const values = this.#parseOperandList("]");
112
+ this.expect("]");
113
+ if (this.#take("::")) {
114
+ this.#parseCastName();
115
+ this.expect("[");
116
+ this.expect("]");
117
+ }
118
+ this.expect(")");
119
+ return values;
120
+ }
121
+ #parseOperandList(end) {
122
+ const values = [];
123
+ if (this.#tokens[this.#position]?.type === end) return values;
124
+ values.push(this.#parseOperand());
125
+ while (this.#take(",")) values.push(this.#parseOperand());
126
+ return values;
127
+ }
128
+ #parseOperand() {
129
+ let expression = this.#parsePrimary();
130
+ while (this.#take("::")) expression = {
131
+ type: "cast",
132
+ expression,
133
+ cast: this.#parseCastName()
134
+ };
135
+ return expression;
136
+ }
137
+ #parsePrimary() {
138
+ if (this.#take("(")) {
139
+ const expression = this.#parseOr();
140
+ this.expect(")");
141
+ return expression;
142
+ }
143
+ const token = this.#tokens[this.#position++];
144
+ if (token?.type === "literal") return {
145
+ type: "literal",
146
+ value: token.value,
147
+ literalType: token.literalType
148
+ };
149
+ if (token?.type === "identifier") {
150
+ if (this.#tokens[this.#position]?.type === "(") throw new UnsupportedPredicateError("unsupported-function");
151
+ if (this.#tokens[this.#position]?.type === ".") throw new UnsupportedPredicateError("unsupported-syntax");
152
+ if (token.value.toUpperCase() === "COLLATE") throw new UnsupportedPredicateError("non-deterministic-collation");
153
+ return {
154
+ type: "column",
155
+ name: token.value
156
+ };
157
+ }
158
+ throw new UnsupportedPredicateError("unsupported-syntax");
159
+ }
160
+ #parseCastName() {
161
+ const first = this.#expectIdentifier();
162
+ const parts = [first];
163
+ let separator = ".";
164
+ while (this.#take(".")) parts.push(this.#expectIdentifier());
165
+ const next = this.#tokens[this.#position];
166
+ if (first.toLowerCase() === "character" && next?.type === "identifier" && next.value.toLowerCase() === "varying") {
167
+ parts.push(this.#expectIdentifier());
168
+ separator = " ";
169
+ }
170
+ if (this.#tokens[this.#position]?.type === "(") throw new UnsupportedPredicateError("unsupported-cast");
171
+ return parts.join(separator);
172
+ }
173
+ #expectIdentifier(expected) {
174
+ const token = this.#tokens[this.#position++];
175
+ if (token?.type !== "identifier" || expected !== void 0 && token.value.toUpperCase() !== expected) throw new UnsupportedPredicateError("unsupported-cast");
176
+ return token.value;
177
+ }
178
+ #takeIdentifier(expected) {
179
+ const token = this.#tokens[this.#position];
180
+ if (token?.type !== "identifier" || token.value.toUpperCase() !== expected) return false;
181
+ this.#position++;
182
+ return true;
183
+ }
184
+ #take(type) {
185
+ if (this.#tokens[this.#position]?.type !== type) return false;
186
+ this.#position++;
187
+ return true;
188
+ }
189
+ expect(type) {
190
+ if (!this.#take(type)) throw new UnsupportedPredicateError("unsupported-syntax");
191
+ }
192
+ };
193
+ var unsupportedOperatorWords = new Set([
194
+ "ALL",
195
+ "BETWEEN",
196
+ "ILIKE",
197
+ "LIKE",
198
+ "SIMILAR"
199
+ ]);
200
+ function comparisons(left, values) {
201
+ if (values.length === 0) throw new UnsupportedPredicateError("unsupported-syntax");
202
+ const expressions = values.map((right) => ({
203
+ type: "comparison",
204
+ left,
205
+ op: "=",
206
+ right
207
+ }));
208
+ return expressions.length === 1 ? expressions[0] : {
209
+ type: "or",
210
+ expressions
211
+ };
212
+ }
213
+ function normalize(expression, table) {
214
+ switch (expression.type) {
215
+ case "and":
216
+ case "or": {
217
+ const conditions = expression.expressions.map((expr) => normalize(expr, table));
218
+ return {
219
+ type: expression.type,
220
+ conditions: conditions.flatMap((condition) => condition.type === expression.type ? condition.conditions : [condition])
221
+ };
222
+ }
223
+ case "not": {
224
+ const booleanColumn = resolveBareBooleanColumn(expression.expression, table);
225
+ if (booleanColumn) return booleanComparison(booleanColumn, false);
226
+ return {
227
+ type: "not",
228
+ condition: normalize(expression.expression, table)
229
+ };
230
+ }
231
+ case "column": {
232
+ const column = resolveColumn(expression, table);
233
+ if (column.category !== "boolean") throw new UnsupportedPredicateError("unsupported-type");
234
+ return booleanComparison(column.name, true);
235
+ }
236
+ case "cast": {
237
+ const column = resolveColumnOperand(expression, table);
238
+ if (column.category !== "boolean") throw new UnsupportedPredicateError("unsupported-type");
239
+ return booleanComparison(column.name, true);
240
+ }
241
+ case "null-test": return {
242
+ type: "null-test",
243
+ column: resolveNullTestColumn(expression.expression, table),
244
+ op: expression.not ? "IS NOT NULL" : "IS NULL"
245
+ };
246
+ case "comparison": return normalizeComparison(expression, table);
247
+ case "literal": throw new UnsupportedPredicateError("unsupported-syntax");
248
+ }
249
+ }
250
+ function resolveNullTestColumn(expression, table) {
251
+ if (expression.type === "cast") return resolveColumnOperand(expression, table).name;
252
+ if (expression.type === "column" && !table.columns[expression.name]) throw new UnsupportedPredicateError("unpublished-column");
253
+ if (expression.type === "column") return expression.name;
254
+ throw new UnsupportedPredicateError("unsupported-syntax");
255
+ }
256
+ function resolveBareBooleanColumn(expression, table) {
257
+ if (expression.type !== "column" && expression.type !== "cast") return;
258
+ const column = resolveColumnOperand(expression, table);
259
+ return column.category === "boolean" ? column.name : void 0;
260
+ }
261
+ function booleanComparison(column, value) {
262
+ return {
263
+ type: "comparison",
264
+ column,
265
+ op: "=",
266
+ value: {
267
+ type: "boolean",
268
+ value
269
+ }
270
+ };
271
+ }
272
+ function normalizeComparison(expression, table) {
273
+ const column = resolveColumnOperand(expression.left, table);
274
+ const op = expression.op === "!=" ? "<>" : expression.op;
275
+ if (column.category !== "integer" && op !== "=" && op !== "<>") throw new UnsupportedPredicateError("unsupported-operator");
276
+ const value = resolveLiteral(expression.right, column);
277
+ return {
278
+ type: "comparison",
279
+ column: column.name,
280
+ op,
281
+ value
282
+ };
283
+ }
284
+ function resolveColumnOperand(expression, table) {
285
+ if (expression.type === "column") return resolveColumn(expression, table);
286
+ if (expression.type !== "cast") throw new UnsupportedPredicateError("unsupported-syntax");
287
+ const column = resolveColumnOperand(expression.expression, table);
288
+ const cast = canonicalTypeName(expression.cast);
289
+ switch (column.category) {
290
+ case "integer": {
291
+ const rank = integerRank(cast);
292
+ if (rank === void 0 || rank < column.rank) throw new UnsupportedPredicateError("unsupported-cast");
293
+ return {
294
+ ...column,
295
+ rank
296
+ };
297
+ }
298
+ case "text":
299
+ if (cast !== "text" && cast !== "varchar") throw new UnsupportedPredicateError("unsupported-cast");
300
+ return column;
301
+ case "boolean":
302
+ if (cast !== "bool") throw new UnsupportedPredicateError("unsupported-cast");
303
+ return column;
304
+ case "uuid":
305
+ if (cast !== "uuid") throw new UnsupportedPredicateError("unsupported-cast");
306
+ return column;
307
+ case "enum":
308
+ if (lastTypeName(expression.cast) !== column.enumName.toLowerCase()) throw new UnsupportedPredicateError("unsupported-cast");
309
+ return column;
310
+ }
311
+ }
312
+ function resolveColumn(expression, table) {
313
+ const spec = table.columns[expression.name];
314
+ if (!spec) throw new UnsupportedPredicateError("unpublished-column");
315
+ const dataType = canonicalTypeName(spec.dataType);
316
+ if (dataType === "bool") return {
317
+ category: "boolean",
318
+ name: expression.name
319
+ };
320
+ const rank = integerRank(dataType);
321
+ if (rank !== void 0) return {
322
+ category: "integer",
323
+ name: expression.name,
324
+ rank
325
+ };
326
+ if (dataType === "text" || dataType === "varchar") {
327
+ if (spec.collationIsDeterministic === false) throw new UnsupportedPredicateError("non-deterministic-collation");
328
+ return {
329
+ category: "text",
330
+ name: expression.name
331
+ };
332
+ }
333
+ if (dataType === "uuid") return {
334
+ category: "uuid",
335
+ name: expression.name
336
+ };
337
+ if (spec.pgTypeClass === "e") return {
338
+ category: "enum",
339
+ name: expression.name,
340
+ enumName: spec.dataType.toLowerCase()
341
+ };
342
+ throw new UnsupportedPredicateError("unsupported-type");
343
+ }
344
+ function resolveLiteral(expression, column) {
345
+ let literal = expression;
346
+ let cast;
347
+ while (literal.type === "cast") {
348
+ cast = literal.cast;
349
+ literal = literal.expression;
350
+ }
351
+ if (literal.type !== "literal" || literal.value === null) throw new UnsupportedPredicateError("unsupported-syntax");
352
+ switch (column.category) {
353
+ case "boolean":
354
+ validateLiteralCast(cast, new Set(["bool"]));
355
+ if (literal.literalType !== "boolean") throw new UnsupportedPredicateError("unsupported-type");
356
+ return {
357
+ type: "boolean",
358
+ value: literal.value
359
+ };
360
+ case "integer":
361
+ if (cast !== void 0) {
362
+ const castRank = integerRank(canonicalTypeName(cast));
363
+ if (castRank === void 0 || castRank > column.rank) throw new UnsupportedPredicateError("unsupported-cast");
364
+ }
365
+ if (literal.literalType !== "integer" && !(literal.literalType === "string" && cast !== void 0)) throw new UnsupportedPredicateError("unsupported-type");
366
+ return {
367
+ type: "integer",
368
+ value: canonicalInteger(String(literal.value), column.rank)
369
+ };
370
+ case "text":
371
+ validateLiteralCast(cast, new Set(["text", "varchar"]));
372
+ if (literal.literalType !== "string") throw new UnsupportedPredicateError("unsupported-type");
373
+ return {
374
+ type: "string",
375
+ value: String(literal.value)
376
+ };
377
+ case "enum":
378
+ if (cast !== void 0 && lastTypeName(cast) !== column.enumName.toLowerCase()) throw new UnsupportedPredicateError("unsupported-cast");
379
+ if (literal.literalType !== "string") throw new UnsupportedPredicateError("unsupported-type");
380
+ return {
381
+ type: "string",
382
+ value: String(literal.value)
383
+ };
384
+ case "uuid": {
385
+ validateLiteralCast(cast, new Set(["uuid"]));
386
+ const value = String(literal.value).toLowerCase();
387
+ if (literal.literalType !== "string" || !UUID_RE.test(value)) throw new UnsupportedPredicateError("unsupported-type");
388
+ return {
389
+ type: "string",
390
+ value
391
+ };
392
+ }
393
+ }
394
+ }
395
+ function validateLiteralCast(cast, allowed) {
396
+ if (cast !== void 0 && !allowed.has(canonicalTypeName(cast))) throw new UnsupportedPredicateError("unsupported-cast");
397
+ }
398
+ function canonicalInteger(value, rank) {
399
+ if (!INTEGER_RE.test(value)) throw new UnsupportedPredicateError("unsupported-type");
400
+ let integer;
401
+ try {
402
+ integer = BigInt(value);
403
+ } catch {
404
+ throw new UnsupportedPredicateError("unsupported-type");
405
+ }
406
+ const bounds = [
407
+ [-32768n, 32767n],
408
+ [-2147483648n, 2147483647n],
409
+ [-9223372036854775808n, 9223372036854775807n]
410
+ ];
411
+ if (integer < bounds[rank][0] || integer > bounds[rank][1]) throw new UnsupportedPredicateError("unsupported-type");
412
+ return integer.toString();
413
+ }
414
+ function canonicalTypeName(type) {
415
+ const name = lastTypeName(type).replace(/\s+/g, " ");
416
+ switch (name) {
417
+ case "boolean": return "bool";
418
+ case "smallint": return "int2";
419
+ case "integer": return "int4";
420
+ case "bigint": return "int8";
421
+ case "character varying": return "varchar";
422
+ default: return name;
423
+ }
424
+ }
425
+ function lastTypeName(type) {
426
+ return type.split(".").at(-1)?.toLowerCase() ?? "";
427
+ }
428
+ function integerRank(type) {
429
+ switch (type) {
430
+ case "int2": return 0;
431
+ case "int4": return 1;
432
+ case "int8": return 2;
433
+ default: return;
434
+ }
435
+ }
436
+ function isComparison(type) {
437
+ return type === "=" || type === "<>" || type === "!=" || type === "<" || type === "<=" || type === ">" || type === ">=";
438
+ }
439
+ function tokenize(sql) {
440
+ const tokens = [];
441
+ for (let i = 0; i < sql.length;) {
442
+ const char = sql[i];
443
+ if (WHITESPACE_RE.test(char)) {
444
+ i++;
445
+ continue;
446
+ }
447
+ if (char === "\"") {
448
+ const result = readQuoted(sql, i, "\"", false);
449
+ tokens.push({
450
+ type: "identifier",
451
+ value: result.value
452
+ });
453
+ i = result.end;
454
+ continue;
455
+ }
456
+ const escapeString = (char === "E" || char === "e") && sql[i + 1] === "'";
457
+ if (char === "'" || escapeString) {
458
+ const result = readQuoted(sql, i + (escapeString ? 1 : 0), "'", escapeString);
459
+ tokens.push({
460
+ type: "literal",
461
+ literalType: "string",
462
+ value: result.value
463
+ });
464
+ i = result.end;
465
+ continue;
466
+ }
467
+ const operator = OPERATOR_TOKEN_RE.exec(sql.slice(i))?.[0];
468
+ if (operator) {
469
+ tokens.push({ type: operator });
470
+ i += operator.length;
471
+ continue;
472
+ }
473
+ const unsupportedOperator = UNSUPPORTED_OPERATOR_TOKEN_RE.exec(sql.slice(i))?.[0];
474
+ if (unsupportedOperator) {
475
+ tokens.push({
476
+ type: "unsupported",
477
+ value: unsupportedOperator
478
+ });
479
+ i += unsupportedOperator.length;
480
+ continue;
481
+ }
482
+ if (char === "(" || char === ")" || char === "[" || char === "]" || char === "," || char === ".") {
483
+ tokens.push({ type: char });
484
+ i++;
485
+ continue;
486
+ }
487
+ const integer = INTEGER_TOKEN_RE.exec(sql.slice(i))?.[0];
488
+ if (integer) {
489
+ tokens.push({
490
+ type: "literal",
491
+ literalType: "integer",
492
+ value: integer
493
+ });
494
+ i += integer.length;
495
+ continue;
496
+ }
497
+ const word = WORD_TOKEN_RE.exec(sql.slice(i))?.[0];
498
+ if (word) {
499
+ const keyword = word.toUpperCase();
500
+ if (unsupportedOperatorWords.has(keyword)) throw new UnsupportedPredicateError("unsupported-operator");
501
+ if (keyword === "TRUE" || keyword === "FALSE") tokens.push({
502
+ type: "literal",
503
+ literalType: "boolean",
504
+ value: keyword === "TRUE"
505
+ });
506
+ else if (keyword === "NULL") tokens.push({
507
+ type: "literal",
508
+ literalType: "null",
509
+ value: null
510
+ });
511
+ else if (keyword === "AND" || keyword === "OR" || keyword === "NOT" || keyword === "IN" || keyword === "IS") tokens.push({ type: keyword });
512
+ else tokens.push({
513
+ type: "identifier",
514
+ value: word.toLowerCase()
515
+ });
516
+ i += word.length;
517
+ continue;
518
+ }
519
+ tokens.push({
520
+ type: "unsupported",
521
+ value: char
522
+ });
523
+ i++;
524
+ }
525
+ tokens.push({ type: "EOF" });
526
+ return tokens;
527
+ }
528
+ function readQuoted(sql, start, quote, escapes) {
529
+ let value = "";
530
+ for (let i = start + 1; i < sql.length; i++) {
531
+ const char = sql[i];
532
+ if (char === quote) if (sql[i + 1] === quote) {
533
+ value += quote;
534
+ i++;
535
+ } else return {
536
+ value,
537
+ end: i + 1
538
+ };
539
+ else if (escapes && char === "\\") {
540
+ const escape = sql[++i];
541
+ if (escape === void 0) throw new UnsupportedPredicateError("unsupported-syntax");
542
+ if (escape === "x") {
543
+ const hex = readEscapeDigits(sql, i + 1, 2, 16, 1);
544
+ value += String.fromCharCode(hex.value);
545
+ i = hex.end - 1;
546
+ } else if (escape === "u" || escape === "U") {
547
+ const hex = readEscapeDigits(sql, i + 1, escape === "u" ? 4 : 8, 16);
548
+ try {
549
+ value += String.fromCodePoint(hex.value);
550
+ } catch {
551
+ throw new UnsupportedPredicateError("unsupported-syntax");
552
+ }
553
+ i = hex.end - 1;
554
+ } else if (escape >= "0" && escape <= "7") {
555
+ let octal = escape;
556
+ while (octal.length < 3 && sql[i + 1] !== void 0 && sql[i + 1] >= "0" && sql[i + 1] <= "7") octal += sql[++i];
557
+ value += String.fromCharCode(Number.parseInt(octal, 8));
558
+ } else if (escape === "\n") {} else if (escape === "\r" && sql[i + 1] === "\n") i++;
559
+ else value += SIMPLE_ESCAPES[escape] ?? escape;
560
+ } else value += char;
561
+ }
562
+ throw new UnsupportedPredicateError("unsupported-syntax");
563
+ }
564
+ function readEscapeDigits(sql, start, length, radix, minLength = length) {
565
+ let end = start;
566
+ while (end < start + length) {
567
+ const digit = sql[end];
568
+ if (digit === void 0 || !(digit >= "0" && digit <= "9" || digit.toLowerCase() >= "a" && digit.toLowerCase() <= "f")) break;
569
+ end++;
570
+ }
571
+ const digits = sql.slice(start, end);
572
+ if (digits.length < minLength) throw new UnsupportedPredicateError("unsupported-syntax");
573
+ return {
574
+ value: Number.parseInt(digits, radix),
575
+ end
576
+ };
577
+ }
578
+ //#endregion
579
+ export { translatePostgresIndexPredicate };
580
+
581
+ //# sourceMappingURL=index-predicate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-predicate.js","names":["#tokens","#parseOr","#parseAnd","#take","#parseNot","#parseComparison","#parseOperand","#position","#parseOperandList","#takeIdentifier","#parseLiteralArray","#expectIdentifier","#parseCastName","#parsePrimary"],"sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/index-predicate.ts"],"sourcesContent":["import * as PostgresTypeClass from '../../../../db/postgres-type-class-enum.ts';\nimport type {\n IndexPredicate,\n IndexPredicateValue,\n PublishedTableSpec,\n} from '../../../../db/specs.ts';\n\nconst UUID_RE =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\nconst INTEGER_RE = /^[+-]?\\d+$/;\nconst WHITESPACE_RE = /\\s/;\nconst OPERATOR_TOKEN_RE = /^(?:::|<>|!=|<=|>=|=|<|>)/;\nconst UNSUPPORTED_OPERATOR_TOKEN_RE = /^(?:!~\\*|!~|~\\*|~)/;\nconst INTEGER_TOKEN_RE = /^[+-]?\\d+/;\nconst WORD_TOKEN_RE = /^[A-Za-z_][A-Za-z0-9_$]*/;\nconst SIMPLE_ESCAPES: Readonly<Record<string, string>> = {\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t',\n v: '\\v',\n};\n\nexport const unsupportedPredicateReasons = [\n 'unpublished-column',\n 'unsupported-type',\n 'unsupported-operator',\n 'unsupported-function',\n 'unsupported-cast',\n 'unsupported-syntax',\n 'non-deterministic-collation',\n] as const;\n\nexport type UnsupportedPredicateReason =\n (typeof unsupportedPredicateReasons)[number];\n\nexport type PredicateTranslation =\n | {readonly supported: true; readonly predicate: IndexPredicate}\n | {readonly supported: false; readonly reason: UnsupportedPredicateReason};\n\ntype PredicateColumnSpec = PublishedTableSpec['columns'][string] & {\n readonly collationIsDeterministic?: boolean | null | undefined;\n};\n\ntype PredicateTableSpec = Omit<PublishedTableSpec, 'columns'> & {\n readonly columns: Readonly<Record<string, PredicateColumnSpec>>;\n};\n\ntype Expr =\n | {readonly type: 'column'; readonly name: string}\n | {\n readonly type: 'literal';\n readonly value: boolean | string | null;\n readonly literalType: 'boolean' | 'integer' | 'string' | 'null';\n }\n | {readonly type: 'cast'; readonly expression: Expr; readonly cast: string}\n | {readonly type: 'not'; readonly expression: Expr}\n | {\n readonly type: 'and' | 'or';\n readonly expressions: readonly Expr[];\n }\n | {\n readonly type: 'comparison';\n readonly left: Expr;\n readonly op: '=' | '<>' | '!=' | '<' | '<=' | '>' | '>=';\n readonly right: Expr;\n }\n | {\n readonly type: 'null-test';\n readonly expression: Expr;\n readonly not: boolean;\n };\n\ntype Token =\n | {readonly type: 'identifier'; readonly value: string}\n | {\n readonly type: 'literal';\n readonly value: boolean | string | null;\n readonly literalType: 'boolean' | 'integer' | 'string' | 'null';\n }\n | {\n readonly type:\n | '('\n | ')'\n | '['\n | ']'\n | ','\n | '.'\n | '::'\n | '='\n | '<>'\n | '!='\n | '<'\n | '<='\n | '>'\n | '>='\n | 'AND'\n | 'OR'\n | 'NOT'\n | 'IN'\n | 'IS'\n | 'EOF';\n }\n | {readonly type: 'unsupported'; readonly value: string};\n\nclass UnsupportedPredicateError extends Error {\n readonly reason: UnsupportedPredicateReason;\n\n constructor(reason: UnsupportedPredicateReason) {\n super(reason);\n this.reason = reason;\n }\n}\n\nexport function translatePostgresIndexPredicate(\n sql: string,\n table: PredicateTableSpec,\n): PredicateTranslation {\n try {\n const parser = new Parser(tokenize(sql));\n const expression = parser.parse();\n parser.expect('EOF');\n return {supported: true, predicate: normalize(expression, table)};\n } catch (error) {\n return {\n supported: false,\n reason:\n error instanceof UnsupportedPredicateError\n ? error.reason\n : 'unsupported-syntax',\n };\n }\n}\n\nclass Parser {\n readonly #tokens: readonly Token[];\n #position = 0;\n\n constructor(tokens: readonly Token[]) {\n this.#tokens = tokens;\n }\n\n parse(): Expr {\n return this.#parseOr();\n }\n\n #parseOr(): Expr {\n const expressions = [this.#parseAnd()];\n while (this.#take('OR')) expressions.push(this.#parseAnd());\n return expressions.length === 1\n ? expressions[0]\n : {type: 'or', expressions};\n }\n\n #parseAnd(): Expr {\n const expressions = [this.#parseNot()];\n while (this.#take('AND')) expressions.push(this.#parseNot());\n return expressions.length === 1\n ? expressions[0]\n : {type: 'and', expressions};\n }\n\n #parseNot(): Expr {\n if (this.#take('NOT')) {\n return {type: 'not', expression: this.#parseNot()};\n }\n return this.#parseComparison();\n }\n\n #parseComparison(): Expr {\n const left = this.#parseOperand();\n if (this.#take('IS')) {\n const not = this.#take('NOT');\n const token = this.#tokens[this.#position++];\n if (token?.type !== 'literal' || token.literalType !== 'null') {\n throw new UnsupportedPredicateError('unsupported-operator');\n }\n return {type: 'null-test', expression: left, not};\n }\n if (this.#take('IN')) {\n this.expect('(');\n const values = this.#parseOperandList(')');\n this.expect(')');\n return comparisons(left, values);\n }\n const op = this.#tokens[this.#position]?.type;\n if (isComparison(op)) {\n this.#position++;\n if (op === '=' && this.#takeIdentifier('ANY')) {\n return comparisons(left, this.#parseLiteralArray());\n }\n return {\n type: 'comparison',\n left,\n op,\n right: this.#parseOperand(),\n };\n }\n const next = this.#tokens[this.#position];\n if (next?.type === 'identifier' && next.value.toUpperCase() === 'COLLATE') {\n throw new UnsupportedPredicateError('non-deterministic-collation');\n }\n if (\n next?.type === 'unsupported' &&\n UNSUPPORTED_OPERATOR_TOKEN_RE.test(next.value)\n ) {\n throw new UnsupportedPredicateError('unsupported-operator');\n }\n if (\n next?.type === 'identifier' &&\n unsupportedOperatorWords.has(next.value.toUpperCase())\n ) {\n throw new UnsupportedPredicateError('unsupported-operator');\n }\n return left;\n }\n\n #parseLiteralArray(): readonly Expr[] {\n this.expect('(');\n this.#expectIdentifier('ARRAY');\n this.expect('[');\n const values = this.#parseOperandList(']');\n this.expect(']');\n if (this.#take('::')) {\n this.#parseCastName();\n this.expect('[');\n this.expect(']');\n }\n this.expect(')');\n return values;\n }\n\n #parseOperandList(end: ')' | ']'): readonly Expr[] {\n const values: Expr[] = [];\n if (this.#tokens[this.#position]?.type === end) return values;\n values.push(this.#parseOperand());\n while (this.#take(',')) values.push(this.#parseOperand());\n return values;\n }\n\n #parseOperand(): Expr {\n let expression = this.#parsePrimary();\n while (this.#take('::')) {\n expression = {\n type: 'cast',\n expression,\n cast: this.#parseCastName(),\n };\n }\n return expression;\n }\n\n #parsePrimary(): Expr {\n if (this.#take('(')) {\n const expression = this.#parseOr();\n this.expect(')');\n return expression;\n }\n const token = this.#tokens[this.#position++];\n if (token?.type === 'literal') {\n return {\n type: 'literal',\n value: token.value,\n literalType: token.literalType,\n };\n }\n if (token?.type === 'identifier') {\n if (this.#tokens[this.#position]?.type === '(') {\n throw new UnsupportedPredicateError('unsupported-function');\n }\n if (this.#tokens[this.#position]?.type === '.') {\n throw new UnsupportedPredicateError('unsupported-syntax');\n }\n if (token.value.toUpperCase() === 'COLLATE') {\n throw new UnsupportedPredicateError('non-deterministic-collation');\n }\n return {type: 'column', name: token.value};\n }\n throw new UnsupportedPredicateError('unsupported-syntax');\n }\n\n #parseCastName(): string {\n const first = this.#expectIdentifier();\n const parts = [first];\n let separator = '.';\n while (this.#take('.')) parts.push(this.#expectIdentifier());\n const next = this.#tokens[this.#position];\n if (\n first.toLowerCase() === 'character' &&\n next?.type === 'identifier' &&\n next.value.toLowerCase() === 'varying'\n ) {\n parts.push(this.#expectIdentifier());\n separator = ' ';\n }\n if (this.#tokens[this.#position]?.type === '(') {\n throw new UnsupportedPredicateError('unsupported-cast');\n }\n return parts.join(separator);\n }\n\n #expectIdentifier(expected?: string): string {\n const token = this.#tokens[this.#position++];\n if (\n token?.type !== 'identifier' ||\n (expected !== undefined && token.value.toUpperCase() !== expected)\n ) {\n throw new UnsupportedPredicateError('unsupported-cast');\n }\n return token.value;\n }\n\n #takeIdentifier(expected: string): boolean {\n const token = this.#tokens[this.#position];\n if (\n token?.type !== 'identifier' ||\n token.value.toUpperCase() !== expected\n ) {\n return false;\n }\n this.#position++;\n return true;\n }\n\n #take(type: Token['type']): boolean {\n if (this.#tokens[this.#position]?.type !== type) return false;\n this.#position++;\n return true;\n }\n\n expect(type: Token['type']): void {\n if (!this.#take(type)) {\n throw new UnsupportedPredicateError('unsupported-syntax');\n }\n }\n}\n\nconst unsupportedOperatorWords = new Set([\n 'ALL',\n 'BETWEEN',\n 'ILIKE',\n 'LIKE',\n 'SIMILAR',\n]);\n\nfunction comparisons(left: Expr, values: readonly Expr[]): Expr {\n if (values.length === 0) {\n throw new UnsupportedPredicateError('unsupported-syntax');\n }\n const expressions = values.map(\n right => ({type: 'comparison', left, op: '=', right}) as const,\n );\n return expressions.length === 1 ? expressions[0] : {type: 'or', expressions};\n}\n\nfunction normalize(\n expression: Expr,\n table: PredicateTableSpec,\n): IndexPredicate {\n switch (expression.type) {\n case 'and':\n case 'or': {\n const conditions = expression.expressions.map(expr =>\n normalize(expr, table),\n );\n return {\n type: expression.type,\n conditions: conditions.flatMap(condition =>\n condition.type === expression.type\n ? condition.conditions\n : [condition],\n ),\n };\n }\n case 'not': {\n const booleanColumn = resolveBareBooleanColumn(\n expression.expression,\n table,\n );\n if (booleanColumn) {\n return booleanComparison(booleanColumn, false);\n }\n return {type: 'not', condition: normalize(expression.expression, table)};\n }\n case 'column': {\n const column = resolveColumn(expression, table);\n if (column.category !== 'boolean') {\n throw new UnsupportedPredicateError('unsupported-type');\n }\n return booleanComparison(column.name, true);\n }\n case 'cast': {\n const column = resolveColumnOperand(expression, table);\n if (column.category !== 'boolean') {\n throw new UnsupportedPredicateError('unsupported-type');\n }\n return booleanComparison(column.name, true);\n }\n case 'null-test': {\n const column = resolveNullTestColumn(expression.expression, table);\n return {\n type: 'null-test',\n column,\n op: expression.not ? 'IS NOT NULL' : 'IS NULL',\n };\n }\n case 'comparison':\n return normalizeComparison(expression, table);\n case 'literal':\n throw new UnsupportedPredicateError('unsupported-syntax');\n }\n}\n\nfunction resolveNullTestColumn(\n expression: Expr,\n table: PredicateTableSpec,\n): string {\n if (expression.type === 'cast') {\n return resolveColumnOperand(expression, table).name;\n }\n if (expression.type === 'column' && !table.columns[expression.name]) {\n throw new UnsupportedPredicateError('unpublished-column');\n }\n if (expression.type === 'column') return expression.name;\n throw new UnsupportedPredicateError('unsupported-syntax');\n}\n\nfunction resolveBareBooleanColumn(\n expression: Expr,\n table: PredicateTableSpec,\n): string | undefined {\n if (expression.type !== 'column' && expression.type !== 'cast') {\n return undefined;\n }\n const column = resolveColumnOperand(expression, table);\n return column.category === 'boolean' ? column.name : undefined;\n}\n\nfunction booleanComparison(column: string, value: boolean): IndexPredicate {\n return {\n type: 'comparison',\n column,\n op: '=',\n value: {type: 'boolean', value},\n };\n}\n\ntype ColumnCategory =\n | {readonly category: 'boolean'; readonly name: string}\n | {\n readonly category: 'integer';\n readonly name: string;\n readonly rank: 0 | 1 | 2;\n }\n | {readonly category: 'text'; readonly name: string}\n | {\n readonly category: 'enum';\n readonly name: string;\n readonly enumName: string;\n }\n | {readonly category: 'uuid'; readonly name: string};\n\nfunction normalizeComparison(\n expression: Extract<Expr, {type: 'comparison'}>,\n table: PredicateTableSpec,\n): IndexPredicate {\n const column = resolveColumnOperand(expression.left, table);\n const op = expression.op === '!=' ? '<>' : expression.op;\n if (column.category !== 'integer' && op !== '=' && op !== '<>') {\n throw new UnsupportedPredicateError('unsupported-operator');\n }\n const value = resolveLiteral(expression.right, column);\n return {type: 'comparison', column: column.name, op, value};\n}\n\nfunction resolveColumnOperand(\n expression: Expr,\n table: PredicateTableSpec,\n): ColumnCategory {\n if (expression.type === 'column') return resolveColumn(expression, table);\n if (expression.type !== 'cast') {\n throw new UnsupportedPredicateError('unsupported-syntax');\n }\n const column = resolveColumnOperand(expression.expression, table);\n const cast = canonicalTypeName(expression.cast);\n switch (column.category) {\n case 'integer': {\n const rank = integerRank(cast);\n if (rank === undefined || rank < column.rank) {\n throw new UnsupportedPredicateError('unsupported-cast');\n }\n return {...column, rank};\n }\n case 'text':\n if (cast !== 'text' && cast !== 'varchar') {\n throw new UnsupportedPredicateError('unsupported-cast');\n }\n return column;\n case 'boolean':\n if (cast !== 'bool') {\n throw new UnsupportedPredicateError('unsupported-cast');\n }\n return column;\n case 'uuid':\n if (cast !== 'uuid') {\n throw new UnsupportedPredicateError('unsupported-cast');\n }\n return column;\n case 'enum':\n if (lastTypeName(expression.cast) !== column.enumName.toLowerCase()) {\n throw new UnsupportedPredicateError('unsupported-cast');\n }\n return column;\n }\n}\n\nfunction resolveColumn(\n expression: Extract<Expr, {type: 'column'}>,\n table: PredicateTableSpec,\n): ColumnCategory {\n const spec = table.columns[expression.name];\n if (!spec) throw new UnsupportedPredicateError('unpublished-column');\n const dataType = canonicalTypeName(spec.dataType);\n if (dataType === 'bool') return {category: 'boolean', name: expression.name};\n const rank = integerRank(dataType);\n if (rank !== undefined) {\n return {category: 'integer', name: expression.name, rank};\n }\n if (dataType === 'text' || dataType === 'varchar') {\n if (spec.collationIsDeterministic === false) {\n throw new UnsupportedPredicateError('non-deterministic-collation');\n }\n return {category: 'text', name: expression.name};\n }\n if (dataType === 'uuid') return {category: 'uuid', name: expression.name};\n if (spec.pgTypeClass === PostgresTypeClass.Enum) {\n return {\n category: 'enum',\n name: expression.name,\n enumName: spec.dataType.toLowerCase(),\n };\n }\n throw new UnsupportedPredicateError('unsupported-type');\n}\n\nfunction resolveLiteral(\n expression: Expr,\n column: ColumnCategory,\n): IndexPredicateValue {\n let literal = expression;\n let cast: string | undefined;\n while (literal.type === 'cast') {\n cast = literal.cast;\n literal = literal.expression;\n }\n if (literal.type !== 'literal' || literal.value === null) {\n throw new UnsupportedPredicateError('unsupported-syntax');\n }\n\n switch (column.category) {\n case 'boolean': {\n validateLiteralCast(cast, new Set(['bool']));\n if (literal.literalType !== 'boolean') {\n throw new UnsupportedPredicateError('unsupported-type');\n }\n return {type: 'boolean', value: literal.value as boolean};\n }\n case 'integer': {\n if (cast !== undefined) {\n const castRank = integerRank(canonicalTypeName(cast));\n if (castRank === undefined || castRank > column.rank) {\n throw new UnsupportedPredicateError('unsupported-cast');\n }\n }\n if (\n literal.literalType !== 'integer' &&\n !(literal.literalType === 'string' && cast !== undefined)\n ) {\n throw new UnsupportedPredicateError('unsupported-type');\n }\n return {\n type: 'integer',\n value: canonicalInteger(String(literal.value), column.rank),\n };\n }\n case 'text':\n validateLiteralCast(cast, new Set(['text', 'varchar']));\n if (literal.literalType !== 'string') {\n throw new UnsupportedPredicateError('unsupported-type');\n }\n return {type: 'string', value: String(literal.value)};\n case 'enum':\n if (\n cast !== undefined &&\n lastTypeName(cast) !== column.enumName.toLowerCase()\n ) {\n throw new UnsupportedPredicateError('unsupported-cast');\n }\n if (literal.literalType !== 'string') {\n throw new UnsupportedPredicateError('unsupported-type');\n }\n return {type: 'string', value: String(literal.value)};\n case 'uuid': {\n validateLiteralCast(cast, new Set(['uuid']));\n const value = String(literal.value).toLowerCase();\n if (literal.literalType !== 'string' || !UUID_RE.test(value)) {\n throw new UnsupportedPredicateError('unsupported-type');\n }\n return {type: 'string', value};\n }\n }\n}\n\nfunction validateLiteralCast(\n cast: string | undefined,\n allowed: ReadonlySet<string>,\n): void {\n if (cast !== undefined && !allowed.has(canonicalTypeName(cast))) {\n throw new UnsupportedPredicateError('unsupported-cast');\n }\n}\n\nfunction canonicalInteger(value: string, rank: 0 | 1 | 2): string {\n if (!INTEGER_RE.test(value)) {\n throw new UnsupportedPredicateError('unsupported-type');\n }\n let integer: bigint;\n try {\n integer = BigInt(value);\n } catch {\n throw new UnsupportedPredicateError('unsupported-type');\n }\n const bounds = [\n [-32768n, 32767n],\n [-2147483648n, 2147483647n],\n [-9223372036854775808n, 9223372036854775807n],\n ] as const;\n if (integer < bounds[rank][0] || integer > bounds[rank][1]) {\n throw new UnsupportedPredicateError('unsupported-type');\n }\n return integer.toString();\n}\n\nfunction canonicalTypeName(type: string): string {\n const name = lastTypeName(type).replace(/\\s+/g, ' ');\n switch (name) {\n case 'boolean':\n return 'bool';\n case 'smallint':\n return 'int2';\n case 'integer':\n return 'int4';\n case 'bigint':\n return 'int8';\n case 'character varying':\n return 'varchar';\n default:\n return name;\n }\n}\n\nfunction lastTypeName(type: string): string {\n return type.split('.').at(-1)?.toLowerCase() ?? '';\n}\n\nfunction integerRank(type: string): 0 | 1 | 2 | undefined {\n switch (type) {\n case 'int2':\n return 0;\n case 'int4':\n return 1;\n case 'int8':\n return 2;\n default:\n return undefined;\n }\n}\n\nfunction isComparison(\n type: Token['type'] | undefined,\n): type is '=' | '<>' | '!=' | '<' | '<=' | '>' | '>=' {\n return (\n type === '=' ||\n type === '<>' ||\n type === '!=' ||\n type === '<' ||\n type === '<=' ||\n type === '>' ||\n type === '>='\n );\n}\n\nfunction tokenize(sql: string): readonly Token[] {\n const tokens: Token[] = [];\n for (let i = 0; i < sql.length; ) {\n const char = sql[i];\n if (WHITESPACE_RE.test(char)) {\n i++;\n continue;\n }\n if (char === '\"') {\n const result = readQuoted(sql, i, '\"', false);\n tokens.push({type: 'identifier', value: result.value});\n i = result.end;\n continue;\n }\n const escapeString = (char === 'E' || char === 'e') && sql[i + 1] === \"'\";\n if (char === \"'\" || escapeString) {\n const result = readQuoted(\n sql,\n i + (escapeString ? 1 : 0),\n \"'\",\n escapeString,\n );\n tokens.push({\n type: 'literal',\n literalType: 'string',\n value: result.value,\n });\n i = result.end;\n continue;\n }\n const operator = OPERATOR_TOKEN_RE.exec(sql.slice(i))?.[0];\n if (operator) {\n tokens.push({\n type: operator as '::' | '=' | '<>' | '!=' | '<' | '<=' | '>' | '>=',\n });\n i += operator.length;\n continue;\n }\n const unsupportedOperator = UNSUPPORTED_OPERATOR_TOKEN_RE.exec(\n sql.slice(i),\n )?.[0];\n if (unsupportedOperator) {\n tokens.push({type: 'unsupported', value: unsupportedOperator});\n i += unsupportedOperator.length;\n continue;\n }\n if (\n char === '(' ||\n char === ')' ||\n char === '[' ||\n char === ']' ||\n char === ',' ||\n char === '.'\n ) {\n tokens.push({type: char});\n i++;\n continue;\n }\n const integer = INTEGER_TOKEN_RE.exec(sql.slice(i))?.[0];\n if (integer) {\n tokens.push({type: 'literal', literalType: 'integer', value: integer});\n i += integer.length;\n continue;\n }\n const word = WORD_TOKEN_RE.exec(sql.slice(i))?.[0];\n if (word) {\n const keyword = word.toUpperCase();\n if (unsupportedOperatorWords.has(keyword)) {\n throw new UnsupportedPredicateError('unsupported-operator');\n }\n if (keyword === 'TRUE' || keyword === 'FALSE') {\n tokens.push({\n type: 'literal',\n literalType: 'boolean',\n value: keyword === 'TRUE',\n });\n } else if (keyword === 'NULL') {\n tokens.push({type: 'literal', literalType: 'null', value: null});\n } else if (\n keyword === 'AND' ||\n keyword === 'OR' ||\n keyword === 'NOT' ||\n keyword === 'IN' ||\n keyword === 'IS'\n ) {\n tokens.push({type: keyword});\n } else {\n tokens.push({type: 'identifier', value: word.toLowerCase()});\n }\n i += word.length;\n continue;\n }\n tokens.push({type: 'unsupported', value: char});\n i++;\n }\n tokens.push({type: 'EOF'});\n return tokens;\n}\n\nfunction readQuoted(\n sql: string,\n start: number,\n quote: '\"' | \"'\",\n escapes: boolean,\n): {readonly value: string; readonly end: number} {\n let value = '';\n for (let i = start + 1; i < sql.length; i++) {\n const char = sql[i];\n if (char === quote) {\n if (sql[i + 1] === quote) {\n value += quote;\n i++;\n } else {\n return {value, end: i + 1};\n }\n } else if (escapes && char === '\\\\') {\n const escape = sql[++i];\n if (escape === undefined) {\n throw new UnsupportedPredicateError('unsupported-syntax');\n }\n if (escape === 'x') {\n const hex = readEscapeDigits(sql, i + 1, 2, 16, 1);\n value += String.fromCharCode(hex.value);\n i = hex.end - 1;\n } else if (escape === 'u' || escape === 'U') {\n const hex = readEscapeDigits(sql, i + 1, escape === 'u' ? 4 : 8, 16);\n try {\n value += String.fromCodePoint(hex.value);\n } catch {\n throw new UnsupportedPredicateError('unsupported-syntax');\n }\n i = hex.end - 1;\n } else if (escape >= '0' && escape <= '7') {\n let octal = escape;\n while (\n octal.length < 3 &&\n sql[i + 1] !== undefined &&\n sql[i + 1] >= '0' &&\n sql[i + 1] <= '7'\n ) {\n octal += sql[++i];\n }\n value += String.fromCharCode(Number.parseInt(octal, 8));\n } else if (escape === '\\n') {\n // A backslash-newline pair is a line continuation.\n } else if (escape === '\\r' && sql[i + 1] === '\\n') {\n i++;\n } else {\n value += SIMPLE_ESCAPES[escape] ?? escape;\n }\n } else {\n value += char;\n }\n }\n throw new UnsupportedPredicateError('unsupported-syntax');\n}\n\nfunction readEscapeDigits(\n sql: string,\n start: number,\n length: number,\n radix: 16,\n minLength = length,\n): {readonly value: number; readonly end: number} {\n let end = start;\n while (end < start + length) {\n const digit = sql[end];\n if (\n digit === undefined ||\n !(\n (digit >= '0' && digit <= '9') ||\n (digit.toLowerCase() >= 'a' && digit.toLowerCase() <= 'f')\n )\n ) {\n break;\n }\n end++;\n }\n const digits = sql.slice(start, end);\n if (digits.length < minLength) {\n throw new UnsupportedPredicateError('unsupported-syntax');\n }\n return {value: Number.parseInt(digits, radix), end};\n}\n"],"mappings":"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"}
@@ -4,6 +4,6 @@ import { type ShardConfig } from '../../../../types/shards.ts';
4
4
  /**
5
5
  * Ensures that a shard is set up for initial sync.
6
6
  */
7
- export declare function ensureShardSchema(lc: LogContext, db: PostgresDB, shard: ShardConfig): Promise<void>;
7
+ export declare function ensureShardSchema(lc: LogContext, db: PostgresDB, shard: ShardConfig, installPartialIndexTriggers?: boolean): Promise<void>;
8
8
  export declare const CURRENT_SCHEMA_VERSION: number;
9
9
  //# sourceMappingURL=init.d.ts.map