@rocicorp/zero 0.25.0-canary.6 → 0.25.0-canary.8

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 (1367) hide show
  1. package/out/analyze-query/src/bin-analyze.js +258 -236
  2. package/out/analyze-query/src/bin-analyze.js.map +1 -1
  3. package/out/analyze-query/src/bin-transform.js +31 -23
  4. package/out/analyze-query/src/bin-transform.js.map +1 -1
  5. package/out/analyze-query/src/explain-queries.js +13 -16
  6. package/out/analyze-query/src/explain-queries.js.map +1 -1
  7. package/out/analyze-query/src/run-ast.d.ts +3 -2
  8. package/out/analyze-query/src/run-ast.d.ts.map +1 -1
  9. package/out/analyze-query/src/run-ast.js +79 -73
  10. package/out/analyze-query/src/run-ast.js.map +1 -1
  11. package/out/ast-to-zql/src/ast-to-zql.js +146 -180
  12. package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
  13. package/out/ast-to-zql/src/bin.js +51 -54
  14. package/out/ast-to-zql/src/bin.js.map +1 -1
  15. package/out/ast-to-zql/src/format.js +15 -14
  16. package/out/ast-to-zql/src/format.js.map +1 -1
  17. package/out/datadog/src/datadog-log-sink.js +223 -0
  18. package/out/datadog/src/datadog-log-sink.js.map +1 -0
  19. package/out/otel/src/enabled.js +15 -15
  20. package/out/otel/src/enabled.js.map +1 -1
  21. package/out/otel/src/log-options.js +36 -31
  22. package/out/otel/src/log-options.js.map +1 -1
  23. package/out/otel/src/maybe-time.js +14 -11
  24. package/out/otel/src/maybe-time.js.map +1 -1
  25. package/out/otel/src/span.js +30 -27
  26. package/out/otel/src/span.js.map +1 -1
  27. package/out/otel/src/test-log-config.js +10 -7
  28. package/out/otel/src/test-log-config.js.map +1 -1
  29. package/out/otel/src/version.js +5 -2
  30. package/out/otel/src/version.js.map +1 -1
  31. package/out/replicache/src/async-iterable-to-array.js +11 -0
  32. package/out/replicache/src/async-iterable-to-array.js.map +1 -0
  33. package/out/replicache/src/bg-interval.js +38 -0
  34. package/out/replicache/src/bg-interval.js.map +1 -0
  35. package/out/replicache/src/btree/diff.js +8 -0
  36. package/out/replicache/src/btree/diff.js.map +1 -0
  37. package/out/replicache/src/btree/node.js +400 -0
  38. package/out/replicache/src/btree/node.js.map +1 -0
  39. package/out/replicache/src/btree/read.d.ts +3 -2
  40. package/out/replicache/src/btree/read.d.ts.map +1 -1
  41. package/out/replicache/src/btree/read.js +266 -0
  42. package/out/replicache/src/btree/read.js.map +1 -0
  43. package/out/replicache/src/btree/splice.js +83 -0
  44. package/out/replicache/src/btree/splice.js.map +1 -0
  45. package/out/replicache/src/btree/write.d.ts +1 -1
  46. package/out/replicache/src/btree/write.d.ts.map +1 -1
  47. package/out/replicache/src/btree/write.js +163 -0
  48. package/out/replicache/src/btree/write.js.map +1 -0
  49. package/out/replicache/src/call-default-fetch.js +34 -0
  50. package/out/replicache/src/call-default-fetch.js.map +1 -0
  51. package/out/replicache/src/connection-loop-delegates.js +34 -0
  52. package/out/replicache/src/connection-loop-delegates.js.map +1 -0
  53. package/out/replicache/src/connection-loop.js +251 -0
  54. package/out/replicache/src/connection-loop.js.map +1 -0
  55. package/out/replicache/src/cookies.js +40 -0
  56. package/out/replicache/src/cookies.js.map +1 -0
  57. package/out/replicache/src/dag/chunk.js +59 -0
  58. package/out/replicache/src/dag/chunk.js.map +1 -0
  59. package/out/replicache/src/dag/gc.js +117 -0
  60. package/out/replicache/src/dag/gc.js.map +1 -0
  61. package/out/replicache/src/dag/key.js +20 -0
  62. package/out/replicache/src/dag/key.js.map +1 -0
  63. package/out/replicache/src/dag/lazy-store.d.ts +2 -1
  64. package/out/replicache/src/dag/lazy-store.d.ts.map +1 -1
  65. package/out/replicache/src/dag/lazy-store.js +515 -0
  66. package/out/replicache/src/dag/lazy-store.js.map +1 -0
  67. package/out/replicache/src/dag/store-impl.js +183 -0
  68. package/out/replicache/src/dag/store-impl.js.map +1 -0
  69. package/out/replicache/src/dag/store.js +27 -0
  70. package/out/replicache/src/dag/store.js.map +1 -0
  71. package/out/replicache/src/dag/visitor.js +22 -0
  72. package/out/replicache/src/dag/visitor.js.map +1 -0
  73. package/out/replicache/src/db/commit.js +358 -0
  74. package/out/replicache/src/db/commit.js.map +1 -0
  75. package/out/replicache/src/db/index-operation-enum.js +7 -0
  76. package/out/replicache/src/db/index-operation-enum.js.map +1 -0
  77. package/out/replicache/src/db/index.js +134 -0
  78. package/out/replicache/src/db/index.js.map +1 -0
  79. package/out/replicache/src/db/meta-type-enum.js +7 -0
  80. package/out/replicache/src/db/meta-type-enum.js.map +1 -0
  81. package/out/replicache/src/db/read.d.ts +3 -2
  82. package/out/replicache/src/db/read.d.ts.map +1 -1
  83. package/out/replicache/src/db/read.js +72 -0
  84. package/out/replicache/src/db/read.js.map +1 -0
  85. package/out/replicache/src/db/rebase.d.ts +2 -2
  86. package/out/replicache/src/db/rebase.d.ts.map +1 -1
  87. package/out/replicache/src/db/rebase.js +85 -0
  88. package/out/replicache/src/db/rebase.js.map +1 -0
  89. package/out/replicache/src/db/write.d.ts +2 -1
  90. package/out/replicache/src/db/write.d.ts.map +1 -1
  91. package/out/replicache/src/db/write.js +296 -0
  92. package/out/replicache/src/db/write.js.map +1 -0
  93. package/out/replicache/src/deleted-clients.js +104 -0
  94. package/out/replicache/src/deleted-clients.js.map +1 -0
  95. package/out/replicache/src/error-responses.js +34 -0
  96. package/out/replicache/src/error-responses.js.map +1 -0
  97. package/out/replicache/src/format-version-enum.js +11 -0
  98. package/out/replicache/src/format-version-enum.js.map +1 -0
  99. package/out/{chunk-EZM3XBAB.js → replicache/src/frozen-json.js} +8 -75
  100. package/out/replicache/src/frozen-json.js.map +1 -0
  101. package/out/replicache/src/get-default-puller.js +61 -0
  102. package/out/replicache/src/get-default-puller.js.map +1 -0
  103. package/out/replicache/src/get-default-pusher.js +39 -0
  104. package/out/replicache/src/get-default-pusher.js.map +1 -0
  105. package/out/replicache/src/get-kv-store-provider.js +23 -0
  106. package/out/replicache/src/get-kv-store-provider.js.map +1 -0
  107. package/out/replicache/src/hash.js +38 -0
  108. package/out/replicache/src/hash.js.map +1 -0
  109. package/out/replicache/src/http-request-info.js +10 -0
  110. package/out/replicache/src/http-request-info.js.map +1 -0
  111. package/out/replicache/src/http-status-unauthorized.js +5 -0
  112. package/out/replicache/src/http-status-unauthorized.js.map +1 -0
  113. package/out/replicache/src/index-defs.js +32 -0
  114. package/out/replicache/src/index-defs.js.map +1 -0
  115. package/out/replicache/src/invoke-kind-enum.js +7 -0
  116. package/out/replicache/src/invoke-kind-enum.js.map +1 -0
  117. package/out/{chunk-HCZQVP5R.js → replicache/src/kv/expo-sqlite/store.js} +8 -16
  118. package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -0
  119. package/out/replicache/src/kv/idb-store-with-mem-fallback.js +80 -0
  120. package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -0
  121. package/out/replicache/src/kv/idb-store.js +183 -0
  122. package/out/replicache/src/kv/idb-store.js.map +1 -0
  123. package/out/replicache/src/kv/mem-store.js +51 -0
  124. package/out/replicache/src/kv/mem-store.js.map +1 -0
  125. package/out/{op-sqlite.js → replicache/src/kv/op-sqlite/store.js} +7 -18
  126. package/out/replicache/src/kv/op-sqlite/store.js.map +1 -0
  127. package/out/replicache/src/kv/op-sqlite/types.js +6 -0
  128. package/out/replicache/src/kv/op-sqlite/types.js.map +1 -0
  129. package/out/replicache/src/kv/read-impl.js +27 -0
  130. package/out/replicache/src/kv/read-impl.js.map +1 -0
  131. package/out/{chunk-WPAQ4EPM.js → replicache/src/kv/sqlite-store.js} +15 -19
  132. package/out/replicache/src/kv/sqlite-store.js.map +1 -0
  133. package/out/{chunk-ASRS2LFV.js → replicache/src/kv/throw-if-closed.js} +4 -6
  134. package/out/replicache/src/kv/throw-if-closed.js.map +1 -0
  135. package/out/replicache/src/kv/write-impl-base.js +57 -0
  136. package/out/replicache/src/kv/write-impl-base.js.map +1 -0
  137. package/out/replicache/src/kv/write-impl.js +30 -0
  138. package/out/replicache/src/kv/write-impl.js.map +1 -0
  139. package/out/replicache/src/lazy.js +13 -0
  140. package/out/replicache/src/lazy.js.map +1 -0
  141. package/out/replicache/src/log-options.js +9 -0
  142. package/out/replicache/src/log-options.js.map +1 -0
  143. package/out/replicache/src/make-idb-name.js +13 -0
  144. package/out/replicache/src/make-idb-name.js.map +1 -0
  145. package/out/replicache/src/new-client-channel.js +51 -0
  146. package/out/replicache/src/new-client-channel.js.map +1 -0
  147. package/out/replicache/src/on-persist-channel.js +36 -0
  148. package/out/replicache/src/on-persist-channel.js.map +1 -0
  149. package/out/replicache/src/patch-operation.js +42 -0
  150. package/out/replicache/src/patch-operation.js.map +1 -0
  151. package/out/replicache/src/pending-mutations.js +16 -0
  152. package/out/replicache/src/pending-mutations.js.map +1 -0
  153. package/out/replicache/src/persist/client-gc.js +58 -0
  154. package/out/replicache/src/persist/client-gc.js.map +1 -0
  155. package/out/replicache/src/persist/client-group-gc.js +43 -0
  156. package/out/replicache/src/persist/client-group-gc.js.map +1 -0
  157. package/out/replicache/src/persist/client-groups.js +184 -0
  158. package/out/replicache/src/persist/client-groups.js.map +1 -0
  159. package/out/replicache/src/persist/clients.d.ts +3 -2
  160. package/out/replicache/src/persist/clients.d.ts.map +1 -1
  161. package/out/replicache/src/persist/clients.js +353 -0
  162. package/out/replicache/src/persist/clients.js.map +1 -0
  163. package/out/replicache/src/persist/collect-idb-databases.js +188 -0
  164. package/out/replicache/src/persist/collect-idb-databases.js.map +1 -0
  165. package/out/replicache/src/persist/gather-mem-only-visitor.js +27 -0
  166. package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -0
  167. package/out/replicache/src/persist/gather-not-cached-visitor.js +37 -0
  168. package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -0
  169. package/out/replicache/src/persist/heartbeat.js +48 -0
  170. package/out/replicache/src/persist/heartbeat.js.map +1 -0
  171. package/out/replicache/src/persist/idb-databases-store-db-name.js +14 -0
  172. package/out/replicache/src/persist/idb-databases-store-db-name.js.map +1 -0
  173. package/out/replicache/src/persist/idb-databases-store.js +92 -0
  174. package/out/replicache/src/persist/idb-databases-store.js.map +1 -0
  175. package/out/replicache/src/persist/make-client-id.js +12 -0
  176. package/out/replicache/src/persist/make-client-id.js.map +1 -0
  177. package/out/replicache/src/persist/persist.d.ts +2 -2
  178. package/out/replicache/src/persist/persist.d.ts.map +1 -1
  179. package/out/replicache/src/persist/persist.js +183 -0
  180. package/out/replicache/src/persist/persist.js.map +1 -0
  181. package/out/replicache/src/persist/refresh.d.ts +4 -3
  182. package/out/replicache/src/persist/refresh.d.ts.map +1 -1
  183. package/out/replicache/src/persist/refresh.js +198 -0
  184. package/out/replicache/src/persist/refresh.js.map +1 -0
  185. package/out/replicache/src/process-scheduler.js +96 -0
  186. package/out/replicache/src/process-scheduler.js.map +1 -0
  187. package/out/replicache/src/pusher.js +33 -0
  188. package/out/replicache/src/pusher.js.map +1 -0
  189. package/out/replicache/src/replicache-impl.d.ts +1 -1
  190. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  191. package/out/replicache/src/replicache-impl.js +1200 -0
  192. package/out/replicache/src/replicache-impl.js.map +1 -0
  193. package/out/replicache/src/report-error.js +6 -0
  194. package/out/replicache/src/report-error.js.map +1 -0
  195. package/out/replicache/src/request-idle.js +13 -0
  196. package/out/replicache/src/request-idle.js.map +1 -0
  197. package/out/replicache/src/scan-iterator.js +146 -0
  198. package/out/replicache/src/scan-iterator.js.map +1 -0
  199. package/out/replicache/src/scan-options.js +45 -0
  200. package/out/replicache/src/scan-options.js.map +1 -0
  201. package/out/replicache/src/set-interval-with-signal.js +12 -0
  202. package/out/replicache/src/set-interval-with-signal.js.map +1 -0
  203. package/out/replicache/src/subscriptions.js +355 -0
  204. package/out/replicache/src/subscriptions.js.map +1 -0
  205. package/out/replicache/src/sync/diff.d.ts +3 -2
  206. package/out/replicache/src/sync/diff.d.ts.map +1 -1
  207. package/out/replicache/src/sync/diff.js +72 -0
  208. package/out/replicache/src/sync/diff.js.map +1 -0
  209. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js +9 -0
  210. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js.map +1 -0
  211. package/out/replicache/src/sync/ids.js +9 -0
  212. package/out/replicache/src/sync/ids.js.map +1 -0
  213. package/out/replicache/src/sync/patch.js +49 -0
  214. package/out/replicache/src/sync/patch.js.map +1 -0
  215. package/out/replicache/src/sync/pull-error.js +16 -0
  216. package/out/replicache/src/sync/pull-error.js.map +1 -0
  217. package/out/replicache/src/sync/pull.d.ts +3 -2
  218. package/out/replicache/src/sync/pull.d.ts.map +1 -1
  219. package/out/replicache/src/sync/pull.js +301 -0
  220. package/out/replicache/src/sync/pull.js.map +1 -0
  221. package/out/replicache/src/sync/push.js +88 -0
  222. package/out/replicache/src/sync/push.js.map +1 -0
  223. package/out/replicache/src/sync/request-id.js +20 -0
  224. package/out/replicache/src/sync/request-id.js.map +1 -0
  225. package/out/replicache/src/sync/sync-head-name.js +5 -0
  226. package/out/replicache/src/sync/sync-head-name.js.map +1 -0
  227. package/out/replicache/src/to-error.js +10 -0
  228. package/out/replicache/src/to-error.js.map +1 -0
  229. package/out/replicache/src/transaction-closed-error.js +19 -0
  230. package/out/replicache/src/transaction-closed-error.js.map +1 -0
  231. package/out/replicache/src/transactions.js +152 -0
  232. package/out/replicache/src/transactions.js.map +1 -0
  233. package/out/replicache/src/version.js +5 -0
  234. package/out/replicache/src/version.js.map +1 -0
  235. package/out/replicache/src/with-transactions.js +28 -0
  236. package/out/replicache/src/with-transactions.js.map +1 -0
  237. package/out/shared/src/abort-error.js +6 -3
  238. package/out/shared/src/abort-error.js.map +1 -1
  239. package/out/shared/src/arrays.js +45 -43
  240. package/out/shared/src/arrays.js.map +1 -1
  241. package/out/shared/src/asserts.js +64 -68
  242. package/out/shared/src/asserts.js.map +1 -1
  243. package/out/shared/src/bigint-json.js +38 -42
  244. package/out/shared/src/bigint-json.js.map +1 -1
  245. package/out/shared/src/binary-search.js +18 -29
  246. package/out/shared/src/binary-search.js.map +1 -1
  247. package/out/shared/src/broadcast-channel.js +24 -0
  248. package/out/shared/src/broadcast-channel.js.map +1 -0
  249. package/out/shared/src/browser-env.js +25 -0
  250. package/out/shared/src/browser-env.js.map +1 -0
  251. package/out/shared/src/btree-set.js +464 -507
  252. package/out/shared/src/btree-set.js.map +1 -1
  253. package/out/shared/src/cache.js +34 -38
  254. package/out/shared/src/cache.js.map +1 -1
  255. package/out/shared/src/centroid.js +24 -24
  256. package/out/shared/src/centroid.js.map +1 -1
  257. package/out/shared/src/config.js +6 -3
  258. package/out/shared/src/config.js.map +1 -1
  259. package/out/shared/src/custom-key-map.js +58 -64
  260. package/out/shared/src/custom-key-map.js.map +1 -1
  261. package/out/shared/src/custom-key-set.js +51 -57
  262. package/out/shared/src/custom-key-set.js.map +1 -1
  263. package/out/shared/src/deep-clone.js +46 -0
  264. package/out/shared/src/deep-clone.js.map +1 -0
  265. package/out/shared/src/document-visible.js +74 -0
  266. package/out/shared/src/document-visible.js.map +1 -0
  267. package/out/shared/src/dotenv.js +5 -7
  268. package/out/shared/src/dotenv.js.map +1 -1
  269. package/out/shared/src/error.js +57 -56
  270. package/out/shared/src/error.js.map +1 -1
  271. package/out/shared/src/has-own.js +5 -3
  272. package/out/shared/src/has-own.js.map +1 -1
  273. package/out/shared/src/hash.js +15 -14
  274. package/out/shared/src/hash.js.map +1 -1
  275. package/out/shared/src/iterables.js +71 -73
  276. package/out/shared/src/iterables.js.map +1 -1
  277. package/out/shared/src/json-schema.js +30 -33
  278. package/out/shared/src/json-schema.js.map +1 -1
  279. package/out/shared/src/json.js +128 -143
  280. package/out/shared/src/json.js.map +1 -1
  281. package/out/shared/src/logging-test-utils.js +12 -19
  282. package/out/shared/src/logging-test-utils.js.map +1 -1
  283. package/out/shared/src/logging.js +83 -83
  284. package/out/shared/src/logging.js.map +1 -1
  285. package/out/shared/src/must.js +9 -7
  286. package/out/shared/src/must.js.map +1 -1
  287. package/out/shared/src/navigator.js +5 -0
  288. package/out/shared/src/navigator.js.map +1 -0
  289. package/out/shared/src/objects.js +21 -22
  290. package/out/shared/src/objects.js.map +1 -1
  291. package/out/shared/src/options.d.ts +2 -0
  292. package/out/shared/src/options.d.ts.map +1 -1
  293. package/out/shared/src/options.js +289 -318
  294. package/out/shared/src/options.js.map +1 -1
  295. package/out/shared/src/parse-big-int.js +12 -10
  296. package/out/shared/src/parse-big-int.js.map +1 -1
  297. package/out/shared/src/promise-race.js +20 -0
  298. package/out/shared/src/promise-race.js.map +1 -0
  299. package/out/shared/src/queue.js +119 -122
  300. package/out/shared/src/queue.js.map +1 -1
  301. package/out/shared/src/rand.js +8 -10
  302. package/out/shared/src/rand.js.map +1 -1
  303. package/out/shared/src/random-uint64.js +9 -0
  304. package/out/shared/src/random-uint64.js.map +1 -0
  305. package/out/shared/src/random-values.js +13 -0
  306. package/out/shared/src/random-values.js.map +1 -0
  307. package/out/shared/src/resolved-promises.js +12 -9
  308. package/out/shared/src/resolved-promises.js.map +1 -1
  309. package/out/shared/src/sentinels.js +13 -6
  310. package/out/shared/src/sentinels.js.map +1 -1
  311. package/out/shared/src/set-utils.js +63 -62
  312. package/out/shared/src/set-utils.js.map +1 -1
  313. package/out/shared/src/size-of-value.js +58 -0
  314. package/out/shared/src/size-of-value.js.map +1 -0
  315. package/out/shared/src/sleep.js +45 -53
  316. package/out/shared/src/sleep.js.map +1 -1
  317. package/out/shared/src/string-compare.js +12 -9
  318. package/out/shared/src/string-compare.js.map +1 -1
  319. package/out/shared/src/subscribable.js +34 -0
  320. package/out/shared/src/subscribable.js.map +1 -0
  321. package/out/shared/src/tdigest-schema.js +7 -7
  322. package/out/shared/src/tdigest-schema.js.map +1 -1
  323. package/out/shared/src/tdigest.js +247 -271
  324. package/out/shared/src/tdigest.js.map +1 -1
  325. package/out/shared/src/valita.js +195 -207
  326. package/out/shared/src/valita.js.map +1 -1
  327. package/out/z2s/src/compiler.d.ts.map +1 -1
  328. package/out/z2s/src/compiler.js +437 -310
  329. package/out/z2s/src/compiler.js.map +1 -1
  330. package/out/z2s/src/sql.js +186 -218
  331. package/out/z2s/src/sql.js.map +1 -1
  332. package/out/zero/package.json.js +9 -0
  333. package/out/zero/package.json.js.map +1 -0
  334. package/out/zero/src/adapters/drizzle.js +5 -2
  335. package/out/zero/src/adapters/drizzle.js.map +1 -1
  336. package/out/zero/src/adapters/pg.js +7 -2
  337. package/out/zero/src/adapters/pg.js.map +1 -1
  338. package/out/zero/src/adapters/postgresjs.js +7 -2
  339. package/out/zero/src/adapters/postgresjs.js.map +1 -1
  340. package/out/zero/src/analyze-query.js +1 -1
  341. package/out/zero/src/analyze-query.js.map +1 -1
  342. package/out/zero/src/ast-to-zql.js +1 -1
  343. package/out/zero/src/ast-to-zql.js.map +1 -1
  344. package/out/zero/src/build-schema.js +3 -5
  345. package/out/zero/src/build-schema.js.map +1 -1
  346. package/out/zero/src/change-protocol/v0.js +5 -3
  347. package/out/zero/src/change-protocol/v0.js.map +1 -1
  348. package/out/zero/src/cli.js +2 -2
  349. package/out/zero/src/cli.js.map +1 -1
  350. package/out/zero/src/deploy-permissions.js +1 -1
  351. package/out/zero/src/deploy-permissions.js.map +1 -1
  352. package/out/zero/src/expo-sqlite.js +5 -0
  353. package/out/zero/src/expo-sqlite.js.map +1 -0
  354. package/out/zero/src/op-sqlite.js +5 -0
  355. package/out/zero/src/op-sqlite.js.map +1 -0
  356. package/out/zero/src/pg.js +31 -3
  357. package/out/zero/src/pg.js.map +1 -1
  358. package/out/zero/src/react-native.js +13 -0
  359. package/out/zero/src/react-native.js.map +1 -0
  360. package/out/zero/src/react.js +17 -0
  361. package/out/zero/src/react.js.map +1 -0
  362. package/out/zero/src/server.js +27 -3
  363. package/out/zero/src/server.js.map +1 -1
  364. package/out/zero/src/solid.js +15 -0
  365. package/out/zero/src/solid.js.map +1 -0
  366. package/out/zero/src/sqlite.js +7 -0
  367. package/out/zero/src/sqlite.js.map +1 -0
  368. package/out/zero/src/transform-query.js +1 -1
  369. package/out/zero/src/transform-query.js.map +1 -1
  370. package/out/zero/src/zero-cache-dev.js +135 -124
  371. package/out/zero/src/zero-cache-dev.js.map +1 -1
  372. package/out/zero/src/zero-out.js +6 -6
  373. package/out/zero/src/zero-out.js.map +1 -1
  374. package/out/zero/src/zero.js +55 -0
  375. package/out/zero/src/zero.js.map +1 -0
  376. package/out/zero/src/zqlite.js +11 -3
  377. package/out/zero/src/zqlite.js.map +1 -1
  378. package/out/zero-cache/src/auth/jwt.js +33 -38
  379. package/out/zero-cache/src/auth/jwt.js.map +1 -1
  380. package/out/zero-cache/src/auth/load-permissions.js +61 -45
  381. package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
  382. package/out/zero-cache/src/auth/read-authorizer.js +79 -91
  383. package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
  384. package/out/zero-cache/src/auth/write-authorizer.d.ts +2 -2
  385. package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
  386. package/out/zero-cache/src/auth/write-authorizer.js +394 -349
  387. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  388. package/out/zero-cache/src/config/network.js +42 -45
  389. package/out/zero-cache/src/config/network.js.map +1 -1
  390. package/out/zero-cache/src/config/normalize.js +86 -83
  391. package/out/zero-cache/src/config/normalize.js.map +1 -1
  392. package/out/zero-cache/src/config/zero-config.js +676 -682
  393. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  394. package/out/zero-cache/src/custom/fetch.d.ts.map +1 -1
  395. package/out/zero-cache/src/custom/fetch.js +166 -162
  396. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  397. package/out/zero-cache/src/custom-queries/transform-query.d.ts +7 -0
  398. package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +1 -1
  399. package/out/zero-cache/src/custom-queries/transform-query.js +101 -106
  400. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  401. package/out/zero-cache/src/db/create.js +32 -36
  402. package/out/zero-cache/src/db/create.js.map +1 -1
  403. package/out/zero-cache/src/db/delete-lite-db.js +9 -6
  404. package/out/zero-cache/src/db/delete-lite-db.js.map +1 -1
  405. package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
  406. package/out/zero-cache/src/db/lite-tables.js +150 -174
  407. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  408. package/out/zero-cache/src/db/migration-lite.js +170 -165
  409. package/out/zero-cache/src/db/migration-lite.js.map +1 -1
  410. package/out/zero-cache/src/db/migration.js +157 -137
  411. package/out/zero-cache/src/db/migration.js.map +1 -1
  412. package/out/zero-cache/src/db/mode-enum.d.ts +2 -0
  413. package/out/zero-cache/src/db/mode-enum.d.ts.map +1 -1
  414. package/out/zero-cache/src/db/mode-enum.js +9 -3
  415. package/out/zero-cache/src/db/mode-enum.js.map +1 -1
  416. package/out/zero-cache/src/db/pg-copy.js +51 -90
  417. package/out/zero-cache/src/db/pg-copy.js.map +1 -1
  418. package/out/zero-cache/src/db/pg-to-lite.js +114 -109
  419. package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
  420. package/out/zero-cache/src/db/pg-type-parser.js +27 -39
  421. package/out/zero-cache/src/db/pg-type-parser.js.map +1 -1
  422. package/out/zero-cache/src/db/postgres-replica-identity-enum.js +11 -6
  423. package/out/zero-cache/src/db/postgres-replica-identity-enum.js.map +1 -1
  424. package/out/zero-cache/src/db/postgres-type-class-enum.js +17 -9
  425. package/out/zero-cache/src/db/postgres-type-class-enum.js.map +1 -1
  426. package/out/zero-cache/src/db/specs.d.ts +0 -6
  427. package/out/zero-cache/src/db/specs.d.ts.map +1 -1
  428. package/out/zero-cache/src/db/specs.js +66 -40
  429. package/out/zero-cache/src/db/specs.js.map +1 -1
  430. package/out/zero-cache/src/db/statements.d.ts +1 -1
  431. package/out/zero-cache/src/db/statements.d.ts.map +1 -1
  432. package/out/zero-cache/src/db/statements.js +59 -52
  433. package/out/zero-cache/src/db/statements.js.map +1 -1
  434. package/out/zero-cache/src/db/transaction-pool.d.ts +1 -1
  435. package/out/zero-cache/src/db/transaction-pool.d.ts.map +1 -1
  436. package/out/zero-cache/src/db/transaction-pool.js +375 -501
  437. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  438. package/out/zero-cache/src/db/warmup.js +25 -12
  439. package/out/zero-cache/src/db/warmup.js.map +1 -1
  440. package/out/zero-cache/src/observability/events.js +71 -82
  441. package/out/zero-cache/src/observability/events.js.map +1 -1
  442. package/out/zero-cache/src/observability/metrics.js +54 -32
  443. package/out/zero-cache/src/observability/metrics.js.map +1 -1
  444. package/out/zero-cache/src/scripts/decommission.js +47 -43
  445. package/out/zero-cache/src/scripts/decommission.js.map +1 -1
  446. package/out/zero-cache/src/scripts/deploy-permissions.js +128 -118
  447. package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
  448. package/out/zero-cache/src/scripts/permissions.js +107 -99
  449. package/out/zero-cache/src/scripts/permissions.js.map +1 -1
  450. package/out/zero-cache/src/server/anonymous-otel-start.js +410 -366
  451. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
  452. package/out/zero-cache/src/server/change-streamer.js +104 -60
  453. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  454. package/out/zero-cache/src/server/inspector-delegate.js +112 -109
  455. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  456. package/out/zero-cache/src/server/logging.d.ts +1 -1
  457. package/out/zero-cache/src/server/logging.d.ts.map +1 -1
  458. package/out/zero-cache/src/server/logging.js +26 -19
  459. package/out/zero-cache/src/server/logging.js.map +1 -1
  460. package/out/zero-cache/src/server/main.d.ts.map +1 -1
  461. package/out/zero-cache/src/server/main.js +137 -120
  462. package/out/zero-cache/src/server/main.js.map +1 -1
  463. package/out/zero-cache/src/server/mutator.js +19 -0
  464. package/out/zero-cache/src/server/mutator.js.map +1 -0
  465. package/out/zero-cache/src/server/otel-diag-logger.d.ts +1 -1
  466. package/out/zero-cache/src/server/otel-diag-logger.d.ts.map +1 -1
  467. package/out/zero-cache/src/server/otel-diag-logger.js +67 -70
  468. package/out/zero-cache/src/server/otel-diag-logger.js.map +1 -1
  469. package/out/zero-cache/src/server/otel-log-sink.js +40 -41
  470. package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
  471. package/out/zero-cache/src/server/otel-start.d.ts +1 -1
  472. package/out/zero-cache/src/server/otel-start.d.ts.map +1 -1
  473. package/out/zero-cache/src/server/otel-start.js +57 -68
  474. package/out/zero-cache/src/server/otel-start.js.map +1 -1
  475. package/out/zero-cache/src/server/reaper.js +34 -26
  476. package/out/zero-cache/src/server/reaper.js.map +1 -1
  477. package/out/zero-cache/src/server/replicator.js +53 -31
  478. package/out/zero-cache/src/server/replicator.js.map +1 -1
  479. package/out/zero-cache/src/server/runner/main.js +6 -4
  480. package/out/zero-cache/src/server/runner/main.js.map +1 -1
  481. package/out/zero-cache/src/server/runner/run-worker.d.ts.map +1 -1
  482. package/out/zero-cache/src/server/runner/run-worker.js +46 -50
  483. package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
  484. package/out/zero-cache/src/server/runner/runtime.js +33 -32
  485. package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
  486. package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts.map +1 -1
  487. package/out/zero-cache/src/server/runner/zero-dispatcher.js +28 -22
  488. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  489. package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
  490. package/out/zero-cache/src/server/syncer.js +112 -63
  491. package/out/zero-cache/src/server/syncer.js.map +1 -1
  492. package/out/zero-cache/src/server/worker-dispatcher.d.ts +1 -1
  493. package/out/zero-cache/src/server/worker-dispatcher.d.ts.map +1 -1
  494. package/out/zero-cache/src/server/worker-dispatcher.js +112 -106
  495. package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
  496. package/out/zero-cache/src/server/worker-urls.d.ts +7 -0
  497. package/out/zero-cache/src/server/worker-urls.d.ts.map +1 -0
  498. package/out/zero-cache/src/server/worker-urls.js +21 -0
  499. package/out/zero-cache/src/server/worker-urls.js.map +1 -0
  500. package/out/zero-cache/src/services/analyze.d.ts +3 -4
  501. package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
  502. package/out/zero-cache/src/services/analyze.js +96 -122
  503. package/out/zero-cache/src/services/analyze.js.map +1 -1
  504. package/out/zero-cache/src/services/change-source/column-metadata.js +152 -155
  505. package/out/zero-cache/src/services/change-source/column-metadata.js.map +1 -1
  506. package/out/zero-cache/src/services/change-source/custom/change-source.d.ts +1 -1
  507. package/out/zero-cache/src/services/change-source/custom/change-source.d.ts.map +1 -1
  508. package/out/zero-cache/src/services/change-source/custom/change-source.js +197 -171
  509. package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
  510. package/out/zero-cache/src/services/change-source/custom/sync-schema.js +11 -3
  511. package/out/zero-cache/src/services/change-source/custom/sync-schema.js.map +1 -1
  512. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +1 -1
  513. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  514. package/out/zero-cache/src/services/change-source/pg/change-source.js +601 -622
  515. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  516. package/out/zero-cache/src/services/change-source/pg/decommission.js +24 -23
  517. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
  518. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +1 -1
  519. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
  520. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +327 -284
  521. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  522. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js +61 -69
  523. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
  524. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js +247 -257
  525. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
  526. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +127 -119
  527. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
  528. package/out/zero-cache/src/services/change-source/pg/lsn.js +20 -19
  529. package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
  530. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +96 -119
  531. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  532. package/out/zero-cache/src/services/change-source/pg/schema/init.js +138 -117
  533. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  534. package/out/zero-cache/src/services/change-source/pg/schema/published.js +67 -74
  535. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
  536. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +199 -188
  537. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  538. package/out/zero-cache/src/services/change-source/pg/schema/validation.js +53 -38
  539. package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
  540. package/out/zero-cache/src/services/change-source/pg/sync-schema.js +11 -3
  541. package/out/zero-cache/src/services/change-source/pg/sync-schema.js.map +1 -1
  542. package/out/zero-cache/src/services/change-source/protocol/current/control.js +9 -19
  543. package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
  544. package/out/zero-cache/src/services/change-source/protocol/current/data.js +143 -116
  545. package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
  546. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js +29 -19
  547. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
  548. package/out/zero-cache/src/services/change-source/protocol/current/path.js +5 -20
  549. package/out/zero-cache/src/services/change-source/protocol/current/path.js.map +1 -1
  550. package/out/zero-cache/src/services/change-source/protocol/current/status.js +12 -13
  551. package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
  552. package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts +1 -1
  553. package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts.map +1 -1
  554. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js +5 -4
  555. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
  556. package/out/zero-cache/src/services/change-source/protocol/current.js +35 -7
  557. package/out/zero-cache/src/services/change-source/protocol/current.js.map +1 -1
  558. package/out/zero-cache/src/services/change-source/replica-schema.js +64 -47
  559. package/out/zero-cache/src/services/change-source/replica-schema.js.map +1 -1
  560. package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts +1 -1
  561. package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts.map +1 -1
  562. package/out/zero-cache/src/services/change-streamer/backup-monitor.js +139 -157
  563. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  564. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +2 -2
  565. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  566. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +178 -158
  567. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  568. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +1 -1
  569. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  570. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +235 -349
  571. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  572. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +5 -1
  573. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
  574. package/out/zero-cache/src/services/change-streamer/change-streamer.js +24 -22
  575. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  576. package/out/zero-cache/src/services/change-streamer/error-type-enum.js +9 -4
  577. package/out/zero-cache/src/services/change-streamer/error-type-enum.js.map +1 -1
  578. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +1 -1
  579. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +1 -1
  580. package/out/zero-cache/src/services/change-streamer/forwarder.js +53 -57
  581. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  582. package/out/zero-cache/src/services/change-streamer/replica-monitor.js +40 -44
  583. package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -1
  584. package/out/zero-cache/src/services/change-streamer/schema/init.js +82 -68
  585. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  586. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +2 -2
  587. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
  588. package/out/zero-cache/src/services/change-streamer/schema/tables.js +93 -78
  589. package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
  590. package/out/zero-cache/src/services/change-streamer/snapshot.d.ts +58 -0
  591. package/out/zero-cache/src/services/change-streamer/snapshot.d.ts.map +1 -1
  592. package/out/zero-cache/src/services/change-streamer/snapshot.js +28 -18
  593. package/out/zero-cache/src/services/change-streamer/snapshot.js.map +1 -1
  594. package/out/zero-cache/src/services/change-streamer/storer.d.ts +3 -2
  595. package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
  596. package/out/zero-cache/src/services/change-streamer/storer.js +309 -367
  597. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  598. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +2 -1
  599. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
  600. package/out/zero-cache/src/services/change-streamer/subscriber.js +83 -90
  601. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  602. package/out/zero-cache/src/services/heapz.js +21 -25
  603. package/out/zero-cache/src/services/heapz.js.map +1 -1
  604. package/out/zero-cache/src/services/http-service.d.ts +1 -1
  605. package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
  606. package/out/zero-cache/src/services/http-service.js +56 -59
  607. package/out/zero-cache/src/services/http-service.js.map +1 -1
  608. package/out/zero-cache/src/services/life-cycle.d.ts +1 -1
  609. package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
  610. package/out/zero-cache/src/services/life-cycle.js +216 -255
  611. package/out/zero-cache/src/services/life-cycle.js.map +1 -1
  612. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +76 -130
  613. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
  614. package/out/zero-cache/src/services/litestream/commands.d.ts +1 -1
  615. package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
  616. package/out/zero-cache/src/services/litestream/commands.js +201 -154
  617. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  618. package/out/zero-cache/src/services/mutagen/error.js +11 -6
  619. package/out/zero-cache/src/services/mutagen/error.js.map +1 -1
  620. package/out/zero-cache/src/services/mutagen/mutagen.js +270 -267
  621. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  622. package/out/zero-cache/src/services/mutagen/pusher.js +351 -344
  623. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  624. package/out/zero-cache/src/services/replicator/change-processor.js +483 -530
  625. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  626. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +1 -1
  627. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  628. package/out/zero-cache/src/services/replicator/incremental-sync.js +97 -97
  629. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  630. package/out/zero-cache/src/services/replicator/notifier.js +28 -52
  631. package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
  632. package/out/zero-cache/src/services/replicator/replication-status.js +100 -83
  633. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  634. package/out/zero-cache/src/services/replicator/replicator.d.ts +1 -1
  635. package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
  636. package/out/zero-cache/src/services/replicator/replicator.js +33 -26
  637. package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
  638. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +1 -1
  639. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts.map +1 -1
  640. package/out/zero-cache/src/services/replicator/schema/change-log.js +74 -86
  641. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  642. package/out/zero-cache/src/services/replicator/schema/constants.js +5 -7
  643. package/out/zero-cache/src/services/replicator/schema/constants.js.map +1 -1
  644. package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts +2 -2
  645. package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts.map +1 -1
  646. package/out/zero-cache/src/services/replicator/schema/replication-state.js +70 -74
  647. package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
  648. package/out/zero-cache/src/services/run-ast.d.ts +5 -3
  649. package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
  650. package/out/zero-cache/src/services/run-ast.js +80 -79
  651. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  652. package/out/zero-cache/src/services/runner.d.ts +1 -1
  653. package/out/zero-cache/src/services/runner.d.ts.map +1 -1
  654. package/out/zero-cache/src/services/runner.js +40 -40
  655. package/out/zero-cache/src/services/runner.js.map +1 -1
  656. package/out/zero-cache/src/services/running-state.d.ts +1 -1
  657. package/out/zero-cache/src/services/running-state.d.ts.map +1 -1
  658. package/out/zero-cache/src/services/running-state.js +122 -119
  659. package/out/zero-cache/src/services/running-state.js.map +1 -1
  660. package/out/zero-cache/src/services/statz.js +184 -162
  661. package/out/zero-cache/src/services/statz.js.map +1 -1
  662. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +40 -39
  663. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
  664. package/out/zero-cache/src/services/view-syncer/client-handler.js +307 -298
  665. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  666. package/out/zero-cache/src/services/view-syncer/client-schema.d.ts.map +1 -1
  667. package/out/zero-cache/src/services/view-syncer/client-schema.js +80 -82
  668. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  669. package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +1 -1
  670. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +84 -94
  671. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
  672. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +2 -4
  673. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
  674. package/out/zero-cache/src/services/view-syncer/cvr-store.js +628 -612
  675. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  676. package/out/zero-cache/src/services/view-syncer/cvr.d.ts +1 -1
  677. package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
  678. package/out/zero-cache/src/services/view-syncer/cvr.js +631 -694
  679. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  680. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +38 -60
  681. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  682. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts +2 -1
  683. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +1 -1
  684. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +168 -158
  685. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  686. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +14 -13
  687. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  688. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +529 -467
  689. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  690. package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts +1 -1
  691. package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts.map +1 -1
  692. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +229 -277
  693. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  694. package/out/zero-cache/src/services/view-syncer/schema/cvr.js +53 -120
  695. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
  696. package/out/zero-cache/src/services/view-syncer/schema/init.js +171 -150
  697. package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
  698. package/out/zero-cache/src/services/view-syncer/schema/types.js +265 -257
  699. package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
  700. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +3 -3
  701. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
  702. package/out/zero-cache/src/services/view-syncer/snapshotter.js +295 -338
  703. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  704. package/out/zero-cache/src/services/view-syncer/ttl-clock.js +13 -7
  705. package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
  706. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +3 -3
  707. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  708. package/out/zero-cache/src/services/view-syncer/view-syncer.js +1485 -1307
  709. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  710. package/out/zero-cache/src/types/error-with-level.d.ts.map +1 -1
  711. package/out/zero-cache/src/types/error-with-level.js +29 -25
  712. package/out/zero-cache/src/types/error-with-level.js.map +1 -1
  713. package/out/zero-cache/src/types/http.js +27 -14
  714. package/out/zero-cache/src/types/http.js.map +1 -1
  715. package/out/zero-cache/src/types/lexi-version.js +46 -31
  716. package/out/zero-cache/src/types/lexi-version.js.map +1 -1
  717. package/out/zero-cache/src/types/lite.js +118 -125
  718. package/out/zero-cache/src/types/lite.js.map +1 -1
  719. package/out/zero-cache/src/types/names.js +6 -3
  720. package/out/zero-cache/src/types/names.js.map +1 -1
  721. package/out/zero-cache/src/types/pg-data-type.js +74 -68
  722. package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
  723. package/out/zero-cache/src/types/pg-types.js +17 -72
  724. package/out/zero-cache/src/types/pg-types.js.map +1 -1
  725. package/out/zero-cache/src/types/pg.d.ts +1 -1
  726. package/out/zero-cache/src/types/pg.d.ts.map +1 -1
  727. package/out/zero-cache/src/types/pg.js +213 -233
  728. package/out/zero-cache/src/types/pg.js.map +1 -1
  729. package/out/zero-cache/src/types/processes.d.ts +2 -2
  730. package/out/zero-cache/src/types/processes.d.ts.map +1 -1
  731. package/out/zero-cache/src/types/processes.js +95 -143
  732. package/out/zero-cache/src/types/processes.js.map +1 -1
  733. package/out/zero-cache/src/types/profiler.js +29 -30
  734. package/out/zero-cache/src/types/profiler.js.map +1 -1
  735. package/out/zero-cache/src/types/row-key.js +30 -68
  736. package/out/zero-cache/src/types/row-key.js.map +1 -1
  737. package/out/zero-cache/src/types/schema-versions.js +25 -19
  738. package/out/zero-cache/src/types/schema-versions.js.map +1 -1
  739. package/out/zero-cache/src/types/shards.js +50 -36
  740. package/out/zero-cache/src/types/shards.js.map +1 -1
  741. package/out/zero-cache/src/types/sql.js +9 -13
  742. package/out/zero-cache/src/types/sql.js.map +1 -1
  743. package/out/zero-cache/src/types/streams.js +245 -254
  744. package/out/zero-cache/src/types/streams.js.map +1 -1
  745. package/out/zero-cache/src/types/strings.js +14 -11
  746. package/out/zero-cache/src/types/strings.js.map +1 -1
  747. package/out/zero-cache/src/types/subscription.js +200 -259
  748. package/out/zero-cache/src/types/subscription.js.map +1 -1
  749. package/out/zero-cache/src/types/url-params.js +35 -30
  750. package/out/zero-cache/src/types/url-params.js.map +1 -1
  751. package/out/zero-cache/src/types/websocket-handoff.d.ts +5 -4
  752. package/out/zero-cache/src/types/websocket-handoff.d.ts.map +1 -1
  753. package/out/zero-cache/src/types/websocket-handoff.js +68 -76
  754. package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
  755. package/out/zero-cache/src/types/ws.js +56 -59
  756. package/out/zero-cache/src/types/ws.js.map +1 -1
  757. package/out/zero-cache/src/workers/connect-params.js +44 -40
  758. package/out/zero-cache/src/workers/connect-params.js.map +1 -1
  759. package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
  760. package/out/zero-cache/src/workers/connection.js +277 -243
  761. package/out/zero-cache/src/workers/connection.js.map +1 -1
  762. package/out/zero-cache/src/workers/mutator.js +24 -0
  763. package/out/zero-cache/src/workers/mutator.js.map +1 -0
  764. package/out/zero-cache/src/workers/replicator.d.ts +1 -1
  765. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  766. package/out/zero-cache/src/workers/replicator.js +103 -106
  767. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  768. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +179 -147
  769. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  770. package/out/zero-cache/src/workers/syncer.d.ts +3 -3
  771. package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
  772. package/out/zero-cache/src/workers/syncer.js +192 -169
  773. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  774. package/out/zero-client/src/client/active-clients-manager.js +199 -0
  775. package/out/zero-client/src/client/active-clients-manager.js.map +1 -0
  776. package/out/zero-client/src/client/bindings.d.ts +8 -7
  777. package/out/zero-client/src/client/bindings.d.ts.map +1 -1
  778. package/out/zero-client/src/client/bindings.js +33 -0
  779. package/out/zero-client/src/client/bindings.js.map +1 -0
  780. package/out/zero-client/src/client/client-error-kind-enum.js +29 -0
  781. package/out/zero-client/src/client/client-error-kind-enum.js.map +1 -0
  782. package/out/zero-client/src/client/connection-manager.d.ts +12 -31
  783. package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
  784. package/out/zero-client/src/client/connection-manager.js +310 -0
  785. package/out/zero-client/src/client/connection-manager.js.map +1 -0
  786. package/out/zero-client/src/client/connection-status-enum.js +15 -0
  787. package/out/zero-client/src/client/connection-status-enum.js.map +1 -0
  788. package/out/zero-client/src/client/connection.d.ts +47 -4
  789. package/out/zero-client/src/client/connection.d.ts.map +1 -1
  790. package/out/zero-client/src/client/connection.js +103 -0
  791. package/out/zero-client/src/client/connection.js.map +1 -0
  792. package/out/zero-client/src/client/context.d.ts +4 -7
  793. package/out/zero-client/src/client/context.d.ts.map +1 -1
  794. package/out/zero-client/src/client/context.js +104 -0
  795. package/out/zero-client/src/client/context.js.map +1 -0
  796. package/out/zero-client/src/client/crud.js +225 -0
  797. package/out/zero-client/src/client/crud.js.map +1 -0
  798. package/out/zero-client/src/client/custom.d.ts +12 -15
  799. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  800. package/out/zero-client/src/client/custom.js +123 -0
  801. package/out/zero-client/src/client/custom.js.map +1 -0
  802. package/out/zero-client/src/client/delete-clients-manager.d.ts +2 -2
  803. package/out/zero-client/src/client/delete-clients-manager.d.ts.map +1 -1
  804. package/out/zero-client/src/client/delete-clients-manager.js +71 -0
  805. package/out/zero-client/src/client/delete-clients-manager.js.map +1 -0
  806. package/out/zero-client/src/client/enable-analytics.js +18 -0
  807. package/out/zero-client/src/client/enable-analytics.js.map +1 -0
  808. package/out/zero-client/src/client/error.d.ts +2 -1
  809. package/out/zero-client/src/client/error.d.ts.map +1 -1
  810. package/out/zero-client/src/client/error.js +148 -0
  811. package/out/zero-client/src/client/error.js.map +1 -0
  812. package/out/zero-client/src/client/http-string.js +11 -0
  813. package/out/zero-client/src/client/http-string.js.map +1 -0
  814. package/out/zero-client/src/client/inspector/client-group.js +27 -0
  815. package/out/zero-client/src/client/inspector/client-group.js.map +1 -0
  816. package/out/zero-client/src/client/inspector/client.js +28 -0
  817. package/out/zero-client/src/client/inspector/client.js.map +1 -0
  818. package/out/zero-client/src/client/inspector/html-dialog-prompt.js +77 -0
  819. package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -0
  820. package/out/zero-client/src/client/inspector/inspector.d.ts +1 -1
  821. package/out/zero-client/src/client/inspector/inspector.d.ts.map +1 -1
  822. package/out/zero-client/src/client/inspector/inspector.js +47 -0
  823. package/out/zero-client/src/client/inspector/inspector.js.map +1 -0
  824. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts +1 -1
  825. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts.map +1 -1
  826. package/out/zero-client/src/client/inspector/lazy-inspector.js +243 -0
  827. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -0
  828. package/out/zero-client/src/client/inspector/query.d.ts.map +1 -1
  829. package/out/zero-client/src/client/inspector/query.js +82 -0
  830. package/out/zero-client/src/client/inspector/query.js.map +1 -0
  831. package/out/zero-client/src/client/ivm-branch.d.ts +4 -4
  832. package/out/zero-client/src/client/ivm-branch.d.ts.map +1 -1
  833. package/out/zero-client/src/client/ivm-branch.js +149 -0
  834. package/out/zero-client/src/client/ivm-branch.js.map +1 -0
  835. package/out/zero-client/src/client/keys.js +45 -0
  836. package/out/zero-client/src/client/keys.js.map +1 -0
  837. package/out/zero-client/src/client/log-options.js +60 -0
  838. package/out/zero-client/src/client/log-options.js.map +1 -0
  839. package/out/zero-client/src/client/metric-name-enum.js +15 -0
  840. package/out/zero-client/src/client/metric-name-enum.js.map +1 -0
  841. package/out/zero-client/src/client/metrics.d.ts +2 -2
  842. package/out/zero-client/src/client/metrics.d.ts.map +1 -1
  843. package/out/zero-client/src/client/metrics.js +249 -0
  844. package/out/zero-client/src/client/metrics.js.map +1 -0
  845. package/out/zero-client/src/client/mutation-tracker.d.ts +2 -2
  846. package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
  847. package/out/zero-client/src/client/mutation-tracker.js +363 -0
  848. package/out/zero-client/src/client/mutation-tracker.js.map +1 -0
  849. package/out/zero-client/src/client/mutator-proxy.d.ts +1 -2
  850. package/out/zero-client/src/client/mutator-proxy.d.ts.map +1 -1
  851. package/out/zero-client/src/client/mutator-proxy.js +132 -0
  852. package/out/zero-client/src/client/mutator-proxy.js.map +1 -0
  853. package/out/zero-client/src/client/options.d.ts +36 -19
  854. package/out/zero-client/src/client/options.d.ts.map +1 -1
  855. package/out/zero-client/src/client/options.js +11 -0
  856. package/out/zero-client/src/client/options.js.map +1 -0
  857. package/out/zero-client/src/client/query-manager.d.ts +5 -5
  858. package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
  859. package/out/zero-client/src/client/query-manager.js +377 -0
  860. package/out/zero-client/src/client/query-manager.js.map +1 -0
  861. package/out/zero-client/src/client/reload-error-handler.d.ts +4 -4
  862. package/out/zero-client/src/client/reload-error-handler.d.ts.map +1 -1
  863. package/out/zero-client/src/client/reload-error-handler.js +114 -0
  864. package/out/zero-client/src/client/reload-error-handler.js.map +1 -0
  865. package/out/zero-client/src/client/server-option.js +64 -0
  866. package/out/zero-client/src/client/server-option.js.map +1 -0
  867. package/out/zero-client/src/client/update-needed-reason-type-enum.js +9 -0
  868. package/out/zero-client/src/client/update-needed-reason-type-enum.js.map +1 -0
  869. package/out/zero-client/src/client/version.js +5 -0
  870. package/out/zero-client/src/client/version.js.map +1 -0
  871. package/out/zero-client/src/client/zero-poke-handler.d.ts +2 -2
  872. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  873. package/out/zero-client/src/client/zero-poke-handler.js +303 -0
  874. package/out/zero-client/src/client/zero-poke-handler.js.map +1 -0
  875. package/out/zero-client/src/client/zero-rep.d.ts +2 -2
  876. package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
  877. package/out/zero-client/src/client/zero-rep.js +72 -0
  878. package/out/zero-client/src/client/zero-rep.js.map +1 -0
  879. package/out/zero-client/src/client/zero.d.ts +28 -11
  880. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  881. package/out/zero-client/src/client/zero.js +1825 -0
  882. package/out/zero-client/src/client/zero.js.map +1 -0
  883. package/out/zero-client/src/mod.d.ts +4 -12
  884. package/out/zero-client/src/mod.d.ts.map +1 -1
  885. package/out/zero-client/src/util/nanoid.js +21 -0
  886. package/out/zero-client/src/util/nanoid.js.map +1 -0
  887. package/out/zero-client/src/util/socket.js +7 -0
  888. package/out/zero-client/src/util/socket.js.map +1 -0
  889. package/out/zero-protocol/src/analyze-query-result.js +32 -24
  890. package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
  891. package/out/zero-protocol/src/application-error.js +35 -37
  892. package/out/zero-protocol/src/application-error.js.map +1 -1
  893. package/out/zero-protocol/src/ast.d.ts +1 -1
  894. package/out/zero-protocol/src/ast.js +296 -277
  895. package/out/zero-protocol/src/ast.js.map +1 -1
  896. package/out/zero-protocol/src/change-desired-queries.d.ts +2 -2
  897. package/out/zero-protocol/src/change-desired-queries.js +11 -7
  898. package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
  899. package/out/zero-protocol/src/client-schema.d.ts +2 -2
  900. package/out/zero-protocol/src/client-schema.d.ts.map +1 -1
  901. package/out/zero-protocol/src/client-schema.js +40 -26
  902. package/out/zero-protocol/src/client-schema.js.map +1 -1
  903. package/out/zero-protocol/src/close-connection.js +11 -18
  904. package/out/zero-protocol/src/close-connection.js.map +1 -1
  905. package/out/zero-protocol/src/connect.d.ts +4 -4
  906. package/out/zero-protocol/src/connect.js +46 -51
  907. package/out/zero-protocol/src/connect.js.map +1 -1
  908. package/out/zero-protocol/src/custom-queries.d.ts +4 -4
  909. package/out/zero-protocol/src/custom-queries.js +61 -39
  910. package/out/zero-protocol/src/custom-queries.js.map +1 -1
  911. package/out/zero-protocol/src/data.js +9 -4
  912. package/out/zero-protocol/src/data.js.map +1 -1
  913. package/out/zero-protocol/src/delete-clients.js +16 -9
  914. package/out/zero-protocol/src/delete-clients.js.map +1 -1
  915. package/out/zero-protocol/src/down.d.ts +6 -6
  916. package/out/zero-protocol/src/down.js +20 -4
  917. package/out/zero-protocol/src/down.js.map +1 -1
  918. package/out/zero-protocol/src/error-kind-enum.js +41 -23
  919. package/out/zero-protocol/src/error-kind-enum.js.map +1 -1
  920. package/out/zero-protocol/src/error-origin-enum.js +9 -4
  921. package/out/zero-protocol/src/error-origin-enum.js.map +1 -1
  922. package/out/zero-protocol/src/error-reason-enum.js +17 -8
  923. package/out/zero-protocol/src/error-reason-enum.js.map +1 -1
  924. package/out/zero-protocol/src/error.d.ts +17 -17
  925. package/out/zero-protocol/src/error.js +151 -89
  926. package/out/zero-protocol/src/error.js.map +1 -1
  927. package/out/zero-protocol/src/inspect-down.d.ts +18 -18
  928. package/out/zero-protocol/src/inspect-down.js +72 -54
  929. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  930. package/out/zero-protocol/src/inspect-up.d.ts +6 -6
  931. package/out/zero-protocol/src/inspect-up.js +38 -26
  932. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  933. package/out/zero-protocol/src/mutation-id.js +9 -5
  934. package/out/zero-protocol/src/mutation-id.js.map +1 -1
  935. package/out/zero-protocol/src/mutation-type-enum.js +7 -3
  936. package/out/zero-protocol/src/mutation-type-enum.js.map +1 -1
  937. package/out/zero-protocol/src/mutations-patch.js +16 -17
  938. package/out/zero-protocol/src/mutations-patch.js.map +1 -1
  939. package/out/zero-protocol/src/ping.js +9 -4
  940. package/out/zero-protocol/src/ping.js.map +1 -1
  941. package/out/zero-protocol/src/poke.js +55 -72
  942. package/out/zero-protocol/src/poke.js.map +1 -1
  943. package/out/zero-protocol/src/pong.js +9 -4
  944. package/out/zero-protocol/src/pong.js.map +1 -1
  945. package/out/zero-protocol/src/primary-key.js +19 -5
  946. package/out/zero-protocol/src/primary-key.js.map +1 -1
  947. package/out/zero-protocol/src/protocol-version.d.ts +2 -2
  948. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  949. package/out/zero-protocol/src/protocol-version.js +7 -59
  950. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  951. package/out/zero-protocol/src/pull.js +26 -19
  952. package/out/zero-protocol/src/pull.js.map +1 -1
  953. package/out/zero-protocol/src/push.d.ts +4 -4
  954. package/out/zero-protocol/src/push.js +179 -176
  955. package/out/zero-protocol/src/push.js.map +1 -1
  956. package/out/zero-protocol/src/queries-patch.d.ts +3 -3
  957. package/out/zero-protocol/src/queries-patch.js +29 -22
  958. package/out/zero-protocol/src/queries-patch.js.map +1 -1
  959. package/out/zero-protocol/src/query-hash.js +18 -14
  960. package/out/zero-protocol/src/query-hash.js.map +1 -1
  961. package/out/zero-protocol/src/row-patch.js +29 -20
  962. package/out/zero-protocol/src/row-patch.js.map +1 -1
  963. package/out/zero-protocol/src/up.d.ts +5 -5
  964. package/out/zero-protocol/src/up.js +18 -4
  965. package/out/zero-protocol/src/up.js.map +1 -1
  966. package/out/zero-protocol/src/version.js +9 -4
  967. package/out/zero-protocol/src/version.js.map +1 -1
  968. package/out/{inspector-GP3CBZRU.js → zero-react/src/components/inspector.js} +4 -9
  969. package/out/zero-react/src/components/inspector.js.map +1 -0
  970. package/out/{chunk-VZOYWIRW.js → zero-react/src/components/mark-icon.js} +3 -5
  971. package/out/zero-react/src/components/mark-icon.js.map +1 -0
  972. package/out/zero-react/src/components/zero-inspector.js +44 -0
  973. package/out/zero-react/src/components/zero-inspector.js.map +1 -0
  974. package/out/zero-react/src/mod.d.ts +1 -3
  975. package/out/zero-react/src/mod.d.ts.map +1 -1
  976. package/out/zero-react/src/use-query.d.ts +4 -4
  977. package/out/zero-react/src/use-query.d.ts.map +1 -1
  978. package/out/{react.js → zero-react/src/use-query.js} +25 -217
  979. package/out/zero-react/src/use-query.js.map +1 -0
  980. package/out/zero-react/src/use-zero-connection-state.d.ts +1 -1
  981. package/out/zero-react/src/use-zero-connection-state.d.ts.map +1 -1
  982. package/out/zero-react/src/use-zero-connection-state.js +14 -0
  983. package/out/zero-react/src/use-zero-connection-state.js.map +1 -0
  984. package/out/zero-react/src/use-zero-online.js +14 -0
  985. package/out/zero-react/src/use-zero-online.js.map +1 -0
  986. package/out/zero-react/src/zero-provider.d.ts +7 -6
  987. package/out/zero-react/src/zero-provider.d.ts.map +1 -1
  988. package/out/zero-react/src/zero-provider.js +59 -0
  989. package/out/zero-react/src/zero-provider.js.map +1 -0
  990. package/out/zero-schema/src/builder/relationship-builder.js +27 -0
  991. package/out/zero-schema/src/builder/relationship-builder.js.map +1 -0
  992. package/out/zero-schema/src/builder/schema-builder.js +88 -0
  993. package/out/zero-schema/src/builder/schema-builder.js.map +1 -0
  994. package/out/zero-schema/src/builder/table-builder.js +129 -0
  995. package/out/zero-schema/src/builder/table-builder.js.map +1 -0
  996. package/out/zero-schema/src/compiled-permissions.js +23 -19
  997. package/out/zero-schema/src/compiled-permissions.js.map +1 -1
  998. package/out/zero-schema/src/name-mapper.js +43 -38
  999. package/out/zero-schema/src/name-mapper.js.map +1 -1
  1000. package/out/zero-schema/src/permissions.d.ts.map +1 -1
  1001. package/out/zero-schema/src/permissions.js +199 -0
  1002. package/out/zero-schema/src/permissions.js.map +1 -0
  1003. package/out/zero-schema/src/schema-config.js +35 -51
  1004. package/out/zero-schema/src/schema-config.js.map +1 -1
  1005. package/out/zero-server/src/adapters/drizzle.d.ts +1 -1
  1006. package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -1
  1007. package/out/zero-server/src/adapters/drizzle.js +83 -100
  1008. package/out/zero-server/src/adapters/drizzle.js.map +1 -1
  1009. package/out/zero-server/src/adapters/pg.d.ts +4 -3
  1010. package/out/zero-server/src/adapters/pg.d.ts.map +1 -1
  1011. package/out/zero-server/src/adapters/pg.js +53 -77
  1012. package/out/zero-server/src/adapters/pg.js.map +1 -1
  1013. package/out/zero-server/src/adapters/postgresjs.d.ts +2 -2
  1014. package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
  1015. package/out/zero-server/src/adapters/postgresjs.js +39 -57
  1016. package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
  1017. package/out/zero-server/src/custom.d.ts +6 -6
  1018. package/out/zero-server/src/custom.d.ts.map +1 -1
  1019. package/out/zero-server/src/custom.js +185 -117
  1020. package/out/zero-server/src/custom.js.map +1 -1
  1021. package/out/zero-server/src/logging.js +7 -4
  1022. package/out/zero-server/src/logging.js.map +1 -1
  1023. package/out/zero-server/src/mod.d.ts +2 -0
  1024. package/out/zero-server/src/mod.d.ts.map +1 -1
  1025. package/out/zero-server/src/pg-query-executor.js +17 -14
  1026. package/out/zero-server/src/pg-query-executor.js.map +1 -1
  1027. package/out/zero-server/src/process-mutations.js +293 -274
  1028. package/out/zero-server/src/process-mutations.js.map +1 -1
  1029. package/out/zero-server/src/push-processor.js +55 -31
  1030. package/out/zero-server/src/push-processor.js.map +1 -1
  1031. package/out/zero-server/src/queries/process-queries.d.ts +63 -2
  1032. package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
  1033. package/out/zero-server/src/queries/process-queries.js +101 -95
  1034. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  1035. package/out/zero-server/src/query-registry.d.ts +10 -0
  1036. package/out/zero-server/src/query-registry.d.ts.map +1 -0
  1037. package/out/zero-server/src/query-registry.js +35 -0
  1038. package/out/zero-server/src/query-registry.js.map +1 -0
  1039. package/out/zero-server/src/schema.js +136 -124
  1040. package/out/zero-server/src/schema.js.map +1 -1
  1041. package/out/zero-server/src/zql-database.d.ts +4 -4
  1042. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  1043. package/out/zero-server/src/zql-database.js +66 -47
  1044. package/out/zero-server/src/zql-database.js.map +1 -1
  1045. package/out/zero-solid/src/mod.d.ts +1 -2
  1046. package/out/zero-solid/src/mod.d.ts.map +1 -1
  1047. package/out/zero-solid/src/solid-view.d.ts +1 -1
  1048. package/out/zero-solid/src/solid-view.d.ts.map +1 -1
  1049. package/out/{solid.js → zero-solid/src/solid-view.js} +42 -196
  1050. package/out/zero-solid/src/solid-view.js.map +1 -0
  1051. package/out/zero-solid/src/use-query.d.ts +1 -1
  1052. package/out/zero-solid/src/use-query.d.ts.map +1 -1
  1053. package/out/zero-solid/src/use-query.js +70 -0
  1054. package/out/zero-solid/src/use-query.js.map +1 -0
  1055. package/out/zero-solid/src/use-zero-connection-state.d.ts +1 -1
  1056. package/out/zero-solid/src/use-zero-connection-state.d.ts.map +1 -1
  1057. package/out/zero-solid/src/use-zero-connection-state.js +15 -0
  1058. package/out/zero-solid/src/use-zero-connection-state.js.map +1 -0
  1059. package/out/zero-solid/src/use-zero-online.js +13 -0
  1060. package/out/zero-solid/src/use-zero-online.js.map +1 -0
  1061. package/out/zero-solid/src/use-zero.d.ts +1 -1
  1062. package/out/zero-solid/src/use-zero.d.ts.map +1 -1
  1063. package/out/zero-solid/src/use-zero.js +74 -0
  1064. package/out/zero-solid/src/use-zero.js.map +1 -0
  1065. package/out/zero-types/src/format.js +7 -4
  1066. package/out/zero-types/src/format.js.map +1 -1
  1067. package/out/zero-types/src/name-mapper.js +43 -40
  1068. package/out/zero-types/src/name-mapper.js.map +1 -1
  1069. package/out/zql/src/builder/builder.d.ts +2 -1
  1070. package/out/zql/src/builder/builder.d.ts.map +1 -1
  1071. package/out/zql/src/builder/builder.js +486 -428
  1072. package/out/zql/src/builder/builder.js.map +1 -1
  1073. package/out/zql/src/builder/debug-delegate.js +68 -64
  1074. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  1075. package/out/zql/src/builder/filter.js +132 -138
  1076. package/out/zql/src/builder/filter.js.map +1 -1
  1077. package/out/zql/src/builder/like.js +44 -51
  1078. package/out/zql/src/builder/like.js.map +1 -1
  1079. package/out/zql/src/error.d.ts +5 -0
  1080. package/out/zql/src/error.d.ts.map +1 -1
  1081. package/out/zql/src/error.js +18 -6
  1082. package/out/zql/src/error.js.map +1 -1
  1083. package/out/zql/src/ivm/array-view.js +86 -92
  1084. package/out/zql/src/ivm/array-view.js.map +1 -1
  1085. package/out/zql/src/ivm/constraint.js +74 -127
  1086. package/out/zql/src/ivm/constraint.js.map +1 -1
  1087. package/out/zql/src/ivm/data.js +59 -85
  1088. package/out/zql/src/ivm/data.js.map +1 -1
  1089. package/out/zql/src/ivm/exists.js +236 -243
  1090. package/out/zql/src/ivm/exists.js.map +1 -1
  1091. package/out/zql/src/ivm/fan-in.js +50 -51
  1092. package/out/zql/src/ivm/fan-in.js.map +1 -1
  1093. package/out/zql/src/ivm/fan-out.js +48 -50
  1094. package/out/zql/src/ivm/fan-out.js.map +1 -1
  1095. package/out/zql/src/ivm/filter-operators.js +87 -87
  1096. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  1097. package/out/zql/src/ivm/filter-push.js +26 -23
  1098. package/out/zql/src/ivm/filter-push.js.map +1 -1
  1099. package/out/zql/src/ivm/filter.js +30 -32
  1100. package/out/zql/src/ivm/filter.js.map +1 -1
  1101. package/out/zql/src/ivm/flipped-join.js +343 -326
  1102. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  1103. package/out/zql/src/ivm/join-utils.js +85 -79
  1104. package/out/zql/src/ivm/join-utils.js.map +1 -1
  1105. package/out/zql/src/ivm/join.js +287 -207
  1106. package/out/zql/src/ivm/join.js.map +1 -1
  1107. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +26 -24
  1108. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
  1109. package/out/zql/src/ivm/memory-source.d.ts +2 -2
  1110. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  1111. package/out/zql/src/ivm/memory-source.js +471 -489
  1112. package/out/zql/src/ivm/memory-source.js.map +1 -1
  1113. package/out/zql/src/ivm/memory-storage.js +32 -31
  1114. package/out/zql/src/ivm/memory-storage.js.map +1 -1
  1115. package/out/zql/src/ivm/operator.js +8 -9
  1116. package/out/zql/src/ivm/operator.js.map +1 -1
  1117. package/out/zql/src/ivm/push-accumulated.js +236 -305
  1118. package/out/zql/src/ivm/push-accumulated.js.map +1 -1
  1119. package/out/zql/src/ivm/skip.js +92 -106
  1120. package/out/zql/src/ivm/skip.js.map +1 -1
  1121. package/out/zql/src/ivm/source.d.ts +3 -1
  1122. package/out/zql/src/ivm/source.d.ts.map +1 -1
  1123. package/out/zql/src/ivm/stream.js +20 -16
  1124. package/out/zql/src/ivm/stream.js.map +1 -1
  1125. package/out/zql/src/ivm/take.js +502 -456
  1126. package/out/zql/src/ivm/take.js.map +1 -1
  1127. package/out/zql/src/ivm/union-fan-in.js +156 -134
  1128. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  1129. package/out/zql/src/ivm/union-fan-out.js +46 -45
  1130. package/out/zql/src/ivm/union-fan-out.js.map +1 -1
  1131. package/out/zql/src/ivm/view-apply-change.js +246 -216
  1132. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  1133. package/out/zql/src/ivm/view.d.ts +2 -2
  1134. package/out/zql/src/ivm/view.d.ts.map +1 -1
  1135. package/out/zql/src/mutate/custom.d.ts +11 -11
  1136. package/out/zql/src/mutate/custom.d.ts.map +1 -1
  1137. package/out/zql/src/mutate/custom.js +15 -7
  1138. package/out/zql/src/mutate/custom.js.map +1 -1
  1139. package/out/zql/src/planner/planner-builder.js +238 -172
  1140. package/out/zql/src/planner/planner-builder.js.map +1 -1
  1141. package/out/zql/src/planner/planner-connection.d.ts +7 -0
  1142. package/out/zql/src/planner/planner-connection.d.ts.map +1 -1
  1143. package/out/zql/src/planner/planner-connection.js +202 -250
  1144. package/out/zql/src/planner/planner-connection.js.map +1 -1
  1145. package/out/zql/src/planner/planner-constraint.js +8 -11
  1146. package/out/zql/src/planner/planner-constraint.js.map +1 -1
  1147. package/out/zql/src/planner/planner-debug.d.ts +2 -1
  1148. package/out/zql/src/planner/planner-debug.d.ts.map +1 -1
  1149. package/out/zql/src/planner/planner-fan-in.d.ts.map +1 -1
  1150. package/out/zql/src/planner/planner-fan-in.js +154 -159
  1151. package/out/zql/src/planner/planner-fan-in.js.map +1 -1
  1152. package/out/zql/src/planner/planner-fan-out.js +71 -60
  1153. package/out/zql/src/planner/planner-fan-out.js.map +1 -1
  1154. package/out/zql/src/planner/planner-graph.d.ts +7 -8
  1155. package/out/zql/src/planner/planner-graph.d.ts.map +1 -1
  1156. package/out/zql/src/planner/planner-graph.js +315 -357
  1157. package/out/zql/src/planner/planner-graph.js.map +1 -1
  1158. package/out/zql/src/planner/planner-join.d.ts +6 -2
  1159. package/out/zql/src/planner/planner-join.d.ts.map +1 -1
  1160. package/out/zql/src/planner/planner-join.js +234 -326
  1161. package/out/zql/src/planner/planner-join.js.map +1 -1
  1162. package/out/zql/src/planner/planner-node.d.ts +2 -1
  1163. package/out/zql/src/planner/planner-node.d.ts.map +1 -1
  1164. package/out/zql/src/planner/planner-source.js +23 -12
  1165. package/out/zql/src/planner/planner-source.js.map +1 -1
  1166. package/out/zql/src/planner/planner-terminus.js +28 -27
  1167. package/out/zql/src/planner/planner-terminus.js.map +1 -1
  1168. package/out/zql/src/query/complete-ordering.d.ts +5 -0
  1169. package/out/zql/src/query/complete-ordering.d.ts.map +1 -0
  1170. package/out/zql/src/query/complete-ordering.js +71 -0
  1171. package/out/zql/src/query/complete-ordering.js.map +1 -0
  1172. package/out/zql/src/query/define-query.d.ts +47 -23
  1173. package/out/zql/src/query/define-query.d.ts.map +1 -1
  1174. package/out/zql/src/query/define-query.js +45 -51
  1175. package/out/zql/src/query/define-query.js.map +1 -1
  1176. package/out/zql/src/query/error.js +12 -8
  1177. package/out/zql/src/query/error.js.map +1 -1
  1178. package/out/zql/src/query/escape-like.js +7 -0
  1179. package/out/zql/src/query/escape-like.js.map +1 -0
  1180. package/out/zql/src/query/expression.js +153 -151
  1181. package/out/zql/src/query/expression.js.map +1 -1
  1182. package/out/zql/src/query/measure-push-operator.js +42 -35
  1183. package/out/zql/src/query/measure-push-operator.js.map +1 -1
  1184. package/out/zql/src/query/metrics-delegate.js +9 -5
  1185. package/out/zql/src/query/metrics-delegate.js.map +1 -1
  1186. package/out/zql/src/query/named.d.ts +9 -5
  1187. package/out/zql/src/query/named.d.ts.map +1 -1
  1188. package/out/zql/src/query/named.js +70 -85
  1189. package/out/zql/src/query/named.js.map +1 -1
  1190. package/out/zql/src/query/query-definitions.d.ts +32 -0
  1191. package/out/zql/src/query/query-definitions.d.ts.map +1 -0
  1192. package/out/zql/src/query/query-delegate-base.d.ts +6 -14
  1193. package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
  1194. package/out/zql/src/query/query-delegate-base.js +118 -134
  1195. package/out/zql/src/query/query-delegate-base.js.map +1 -1
  1196. package/out/zql/src/query/query-delegate.d.ts +6 -8
  1197. package/out/zql/src/query/query-delegate.d.ts.map +1 -1
  1198. package/out/zql/src/query/query-impl.d.ts +17 -18
  1199. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  1200. package/out/zql/src/query/query-impl.js +511 -433
  1201. package/out/zql/src/query/query-impl.js.map +1 -1
  1202. package/out/zql/src/query/query-internals.d.ts +11 -13
  1203. package/out/zql/src/query/query-internals.d.ts.map +1 -1
  1204. package/out/zql/src/query/query-internals.js +13 -19
  1205. package/out/zql/src/query/query-internals.js.map +1 -1
  1206. package/out/zql/src/query/query.d.ts +15 -16
  1207. package/out/zql/src/query/query.d.ts.map +1 -1
  1208. package/out/zql/src/query/static-query.d.ts +3 -3
  1209. package/out/zql/src/query/static-query.d.ts.map +1 -1
  1210. package/out/zql/src/query/static-query.js +41 -18
  1211. package/out/zql/src/query/static-query.js.map +1 -1
  1212. package/out/zql/src/query/ttl.js +69 -62
  1213. package/out/zql/src/query/ttl.js.map +1 -1
  1214. package/out/zql/src/query/validate-input.d.ts +15 -0
  1215. package/out/zql/src/query/validate-input.d.ts.map +1 -0
  1216. package/out/zql/src/query/validate-input.js +25 -0
  1217. package/out/zql/src/query/validate-input.js.map +1 -0
  1218. package/out/zqlite/src/database-storage.d.ts +1 -1
  1219. package/out/zqlite/src/database-storage.d.ts.map +1 -1
  1220. package/out/zqlite/src/database-storage.js +99 -102
  1221. package/out/zqlite/src/database-storage.js.map +1 -1
  1222. package/out/zqlite/src/db.js +241 -194
  1223. package/out/zqlite/src/db.js.map +1 -1
  1224. package/out/zqlite/src/explain-queries.js +13 -16
  1225. package/out/zqlite/src/explain-queries.js.map +1 -1
  1226. package/out/zqlite/src/internal/sql.js +15 -10
  1227. package/out/zqlite/src/internal/sql.js.map +1 -1
  1228. package/out/zqlite/src/internal/statement-cache.js +86 -110
  1229. package/out/zqlite/src/internal/statement-cache.js.map +1 -1
  1230. package/out/zqlite/src/query-builder.js +172 -143
  1231. package/out/zqlite/src/query-builder.js.map +1 -1
  1232. package/out/zqlite/src/query-delegate.d.ts +2 -2
  1233. package/out/zqlite/src/query-delegate.d.ts.map +1 -1
  1234. package/out/zqlite/src/query-delegate.js +53 -43
  1235. package/out/zqlite/src/query-delegate.js.map +1 -1
  1236. package/out/zqlite/src/sqlite-cost-model.d.ts.map +1 -1
  1237. package/out/zqlite/src/sqlite-cost-model.js +96 -120
  1238. package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
  1239. package/out/zqlite/src/sqlite-stat-fanout.d.ts +121 -0
  1240. package/out/zqlite/src/sqlite-stat-fanout.d.ts.map +1 -0
  1241. package/out/zqlite/src/sqlite-stat-fanout.js +301 -0
  1242. package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -0
  1243. package/out/zqlite/src/table-source.d.ts +9 -4
  1244. package/out/zqlite/src/table-source.d.ts.map +1 -1
  1245. package/out/zqlite/src/table-source.js +424 -327
  1246. package/out/zqlite/src/table-source.js.map +1 -1
  1247. package/package.json +23 -26
  1248. package/out/chunk-424PT5DM.js +0 -23
  1249. package/out/chunk-424PT5DM.js.map +0 -7
  1250. package/out/chunk-AFADJQ2O.js +0 -1
  1251. package/out/chunk-AFADJQ2O.js.map +0 -7
  1252. package/out/chunk-ASRS2LFV.js.map +0 -7
  1253. package/out/chunk-EZM3XBAB.js.map +0 -7
  1254. package/out/chunk-HCZQVP5R.js.map +0 -7
  1255. package/out/chunk-PFM5IJC4.js +0 -495
  1256. package/out/chunk-PFM5IJC4.js.map +0 -7
  1257. package/out/chunk-TAUDS4QP.js +0 -4129
  1258. package/out/chunk-TAUDS4QP.js.map +0 -7
  1259. package/out/chunk-VZOYWIRW.js.map +0 -7
  1260. package/out/chunk-WPAQ4EPM.js.map +0 -7
  1261. package/out/chunk-WWNKZSEE.js +0 -18857
  1262. package/out/chunk-WWNKZSEE.js.map +0 -7
  1263. package/out/expo-sqlite.js +0 -11
  1264. package/out/expo-sqlite.js.map +0 -7
  1265. package/out/inspector-GP3CBZRU.js.map +0 -7
  1266. package/out/lazy-inspector-XLKVABX2.js +0 -575
  1267. package/out/lazy-inspector-XLKVABX2.js.map +0 -7
  1268. package/out/op-sqlite.js.map +0 -7
  1269. package/out/react-native.js +0 -25
  1270. package/out/react-native.js.map +0 -7
  1271. package/out/react.js.map +0 -7
  1272. package/out/shared/src/enum.js +0 -2
  1273. package/out/shared/src/enum.js.map +0 -1
  1274. package/out/shared/src/expand.js +0 -2
  1275. package/out/shared/src/expand.js.map +0 -1
  1276. package/out/shared/src/immutable.js +0 -2
  1277. package/out/shared/src/immutable.js.map +0 -1
  1278. package/out/shared/src/types.js +0 -2
  1279. package/out/shared/src/types.js.map +0 -1
  1280. package/out/shared/src/writable.js +0 -2
  1281. package/out/shared/src/writable.js.map +0 -1
  1282. package/out/solid.js.map +0 -7
  1283. package/out/sqlite.js +0 -15
  1284. package/out/sqlite.js.map +0 -7
  1285. package/out/zero/package.json +0 -195
  1286. package/out/zero/src/server/change-streamer.js +0 -2
  1287. package/out/zero/src/server/change-streamer.js.map +0 -1
  1288. package/out/zero/src/server/main.js +0 -2
  1289. package/out/zero/src/server/main.js.map +0 -1
  1290. package/out/zero/src/server/reaper.js +0 -2
  1291. package/out/zero/src/server/reaper.js.map +0 -1
  1292. package/out/zero/src/server/replicator.js +0 -2
  1293. package/out/zero/src/server/replicator.js.map +0 -1
  1294. package/out/zero/src/server/runner/main.js +0 -2
  1295. package/out/zero/src/server/runner/main.js.map +0 -1
  1296. package/out/zero/src/server/syncer.js +0 -2
  1297. package/out/zero/src/server/syncer.js.map +0 -1
  1298. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.js +0 -4
  1299. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.js.map +0 -1
  1300. package/out/zero-cache/src/services/change-source/protocol/mod.js +0 -5
  1301. package/out/zero-cache/src/services/change-source/protocol/mod.js.map +0 -1
  1302. package/out/zero-cache/src/services/service.js +0 -2
  1303. package/out/zero-cache/src/services/service.js.map +0 -1
  1304. package/out/zero-cache/src/services/view-syncer/key-columns.d.ts +0 -32
  1305. package/out/zero-cache/src/services/view-syncer/key-columns.d.ts.map +0 -1
  1306. package/out/zero-cache/src/services/view-syncer/key-columns.js +0 -75
  1307. package/out/zero-cache/src/services/view-syncer/key-columns.js.map +0 -1
  1308. package/out/zero-cache/src/types/satisfies.js +0 -2
  1309. package/out/zero-cache/src/types/satisfies.js.map +0 -1
  1310. package/out/zero-client/src/client/zero-log-context.d.ts +0 -7
  1311. package/out/zero-client/src/client/zero-log-context.d.ts.map +0 -1
  1312. package/out/zero-events/src/index.js +0 -2
  1313. package/out/zero-events/src/index.js.map +0 -1
  1314. package/out/zero-events/src/json.js +0 -2
  1315. package/out/zero-events/src/json.js.map +0 -1
  1316. package/out/zero-events/src/status.js +0 -3
  1317. package/out/zero-events/src/status.js.map +0 -1
  1318. package/out/zero-pg/src/mod.js +0 -6
  1319. package/out/zero-pg/src/mod.js.map +0 -1
  1320. package/out/zero-protocol/src/error-kind.js +0 -3
  1321. package/out/zero-protocol/src/error-kind.js.map +0 -1
  1322. package/out/zero-protocol/src/error-origin.js +0 -3
  1323. package/out/zero-protocol/src/error-origin.js.map +0 -1
  1324. package/out/zero-protocol/src/error-reason.js +0 -3
  1325. package/out/zero-protocol/src/error-reason.js.map +0 -1
  1326. package/out/zero-schema/src/table-schema.js +0 -7
  1327. package/out/zero-schema/src/table-schema.js.map +0 -1
  1328. package/out/zero-server/src/mod.js +0 -8
  1329. package/out/zero-server/src/mod.js.map +0 -1
  1330. package/out/zero-types/src/schema-value.js +0 -2
  1331. package/out/zero-types/src/schema-value.js.map +0 -1
  1332. package/out/zero-types/src/schema.js +0 -2
  1333. package/out/zero-types/src/schema.js.map +0 -1
  1334. package/out/zero-types/src/server-schema.js +0 -2
  1335. package/out/zero-types/src/server-schema.js.map +0 -1
  1336. package/out/zero.js +0 -95
  1337. package/out/zero.js.map +0 -7
  1338. package/out/zql/src/ivm/change.js +0 -2
  1339. package/out/zql/src/ivm/change.js.map +0 -1
  1340. package/out/zql/src/ivm/default-format.js +0 -2
  1341. package/out/zql/src/ivm/default-format.js.map +0 -1
  1342. package/out/zql/src/ivm/schema.js +0 -2
  1343. package/out/zql/src/ivm/schema.js.map +0 -1
  1344. package/out/zql/src/ivm/source.js +0 -2
  1345. package/out/zql/src/ivm/source.js.map +0 -1
  1346. package/out/zql/src/ivm/view.js +0 -2
  1347. package/out/zql/src/ivm/view.js.map +0 -1
  1348. package/out/zql/src/planner/planner-debug.js +0 -176
  1349. package/out/zql/src/planner/planner-debug.js.map +0 -1
  1350. package/out/zql/src/planner/planner-node.js +0 -2
  1351. package/out/zql/src/planner/planner-node.js.map +0 -1
  1352. package/out/zql/src/query/chained-query.d.ts +0 -35
  1353. package/out/zql/src/query/chained-query.d.ts.map +0 -1
  1354. package/out/zql/src/query/chained-query.js +0 -66
  1355. package/out/zql/src/query/chained-query.js.map +0 -1
  1356. package/out/zql/src/query/query-delegate.js +0 -2
  1357. package/out/zql/src/query/query-delegate.js.map +0 -1
  1358. package/out/zql/src/query/query.js +0 -8
  1359. package/out/zql/src/query/query.js.map +0 -1
  1360. package/out/zql/src/query/root-named-query.d.ts +0 -33
  1361. package/out/zql/src/query/root-named-query.d.ts.map +0 -1
  1362. package/out/zql/src/query/root-named-query.js +0 -95
  1363. package/out/zql/src/query/root-named-query.js.map +0 -1
  1364. package/out/zql/src/query/typed-view.js +0 -2
  1365. package/out/zql/src/query/typed-view.js.map +0 -1
  1366. package/out/zqlite/src/mod.js +0 -5
  1367. package/out/zqlite/src/mod.js.map +0 -1
@@ -1,46 +1,42 @@
1
- import { PG_INSUFFICIENT_PRIVILEGE } from '@drdgvhbh/postgres-error-codes';
2
- import { literal } from 'pg-format';
3
- import postgres from 'postgres';
1
+ import { PG_INSUFFICIENT_PRIVILEGE } from "@drdgvhbh/postgres-error-codes";
2
+ import { literal } from "pg-format";
3
+ import postgres from "postgres";
4
4
  import { assert } from "../../../../../../shared/src/asserts.js";
5
- import * as v from "../../../../../../shared/src/valita.js";
5
+ import { parse } from "../../../../../../shared/src/valita.js";
6
6
  import { Default } from "../../../../db/postgres-replica-identity-enum.js";
7
- import { appSchema, check, upstreamSchema } from "../../../../types/shards.js";
7
+ import { appSchema, upstreamSchema, check } from "../../../../types/shards.js";
8
8
  import { id } from "../../../../types/sql.js";
9
9
  import { createEventTriggerStatements } from "./ddl.js";
10
- import { getPublicationInfo, publishedSchema, } from "./published.js";
10
+ import { publishedSchema, getPublicationInfo } from "./published.js";
11
11
  import { validate } from "./validation.js";
12
- export function internalPublicationPrefix({ appID }) {
13
- return `_${appID}_`;
12
+ import { object, boolean, array, string } from "@badrap/valita";
13
+ function internalPublicationPrefix({ appID }) {
14
+ return `_${appID}_`;
14
15
  }
15
- export function legacyReplicationSlot({ appID, shardNum }) {
16
- return `${appID}_${shardNum}`;
16
+ function legacyReplicationSlot({ appID, shardNum }) {
17
+ return `${appID}_${shardNum}`;
17
18
  }
18
- export function replicationSlotPrefix(shard) {
19
- const { appID, shardNum } = check(shard);
20
- return `${appID}_${shardNum}_`;
19
+ function replicationSlotPrefix(shard) {
20
+ const { appID, shardNum } = check(shard);
21
+ return `${appID}_${shardNum}_`;
21
22
  }
22
- /**
23
- * An expression used to match replication slots in the shard
24
- * in a Postgres `LIKE` operator.
25
- */
26
- export function replicationSlotExpression(shard) {
27
- // Underscores have a special meaning in LIKE values
28
- // so they have to be escaped.
29
- return `${replicationSlotPrefix(shard)}%`.replaceAll('_', '\\_');
23
+ function replicationSlotExpression(shard) {
24
+ return `${replicationSlotPrefix(shard)}%`.replaceAll("_", "\\_");
30
25
  }
31
- export function newReplicationSlot(shard) {
32
- return replicationSlotPrefix(shard) + Date.now();
26
+ function newReplicationSlot(shard) {
27
+ return replicationSlotPrefix(shard) + Date.now();
33
28
  }
34
29
  function defaultPublicationName(appID, shardID) {
35
- return `_${appID}_public_${shardID}`;
30
+ return `_${appID}_public_${shardID}`;
36
31
  }
37
- export function metadataPublicationName(appID, shardID) {
38
- return `_${appID}_metadata_${shardID}`;
32
+ function metadataPublicationName(appID, shardID) {
33
+ return `_${appID}_metadata_${shardID}`;
39
34
  }
40
- // The GLOBAL_SETUP must be idempotent as it can be run multiple times for different shards.
41
35
  function globalSetup(appID) {
42
- const app = id(appSchema(appID));
43
- return /*sql*/ `
36
+ const app = id(appSchema(appID));
37
+ return (
38
+ /*sql*/
39
+ `
44
40
  CREATE SCHEMA IF NOT EXISTS ${app};
45
41
 
46
42
  CREATE TABLE IF NOT EXISTS ${app}."schemaVersions" (
@@ -80,46 +76,47 @@ function globalSetup(appID) {
80
76
  EXECUTE FUNCTION ${app}.set_permissions_hash();
81
77
 
82
78
  INSERT INTO ${app}.permissions (permissions) VALUES (NULL) ON CONFLICT DO NOTHING;
83
- `;
79
+ `
80
+ );
84
81
  }
85
- export async function ensureGlobalTables(db, appID) {
86
- await db.unsafe(globalSetup(appID));
82
+ async function ensureGlobalTables(db, appID) {
83
+ await db.unsafe(globalSetup(appID));
87
84
  }
88
- export function getClientsTableDefinition(schema) {
89
- return /*sql*/ `
85
+ function getClientsTableDefinition(schema) {
86
+ return (
87
+ /*sql*/
88
+ `
90
89
  CREATE TABLE ${schema}."clients" (
91
90
  "clientGroupID" TEXT NOT NULL,
92
91
  "clientID" TEXT NOT NULL,
93
92
  "lastMutationID" BIGINT NOT NULL,
94
93
  "userID" TEXT,
95
94
  PRIMARY KEY("clientGroupID", "clientID")
96
- );`;
95
+ );`
96
+ );
97
97
  }
98
- /**
99
- * Tracks the results of mutations.
100
- * 1. It is an error for the same mutation ID to be used twice.
101
- * 2. The result is JSONB to allow for arbitrary results.
102
- *
103
- * The tables must be cleaned up as the clients
104
- * receive the mutation responses and as clients are removed.
105
- */
106
- export function getMutationsTableDefinition(schema) {
107
- return /*sql*/ `
98
+ function getMutationsTableDefinition(schema) {
99
+ return (
100
+ /*sql*/
101
+ `
108
102
  CREATE TABLE ${schema}."mutations" (
109
103
  "clientGroupID" TEXT NOT NULL,
110
104
  "clientID" TEXT NOT NULL,
111
105
  "mutationID" BIGINT NOT NULL,
112
106
  "result" JSON NOT NULL,
113
107
  PRIMARY KEY("clientGroupID", "clientID", "mutationID")
114
- );`;
108
+ );`
109
+ );
115
110
  }
116
- export const SHARD_CONFIG_TABLE = 'shardConfig';
117
- export function shardSetup(shardConfig, metadataPublication) {
118
- const app = id(appSchema(shardConfig));
119
- const shard = id(upstreamSchema(shardConfig));
120
- const pubs = [...shardConfig.publications].sort();
121
- assert(pubs.includes(metadataPublication));
122
- return /*sql*/ `
111
+ const SHARD_CONFIG_TABLE = "shardConfig";
112
+ function shardSetup(shardConfig, metadataPublication) {
113
+ const app = id(appSchema(shardConfig));
114
+ const shard = id(upstreamSchema(shardConfig));
115
+ const pubs = [...shardConfig.publications].sort();
116
+ assert(pubs.includes(metadataPublication));
117
+ return (
118
+ /*sql*/
119
+ `
123
120
  CREATE SCHEMA IF NOT EXISTS ${shard};
124
121
 
125
122
  ${getClientsTableDefinition(shard)}
@@ -150,175 +147,189 @@ export function shardSetup(shardConfig, metadataPublication) {
150
147
  "version" TEXT NOT NULL,
151
148
  "initialSchema" JSON NOT NULL
152
149
  );
153
- `;
150
+ `
151
+ );
154
152
  }
155
- export function dropShard(appID, shardID) {
156
- const schema = `${appID}_${shardID}`;
157
- const metadataPublication = metadataPublicationName(appID, shardID);
158
- const defaultPublication = defaultPublicationName(appID, shardID);
159
- // DROP SCHEMA ... CASCADE does not drop dependent PUBLICATIONS,
160
- // so PUBLICATIONs must be dropped explicitly.
161
- return /*sql*/ `
153
+ function dropShard(appID, shardID) {
154
+ const schema = `${appID}_${shardID}`;
155
+ const metadataPublication = metadataPublicationName(appID, shardID);
156
+ const defaultPublication = defaultPublicationName(appID, shardID);
157
+ return (
158
+ /*sql*/
159
+ `
162
160
  DROP PUBLICATION IF EXISTS ${id(defaultPublication)};
163
161
  DROP PUBLICATION IF EXISTS ${id(metadataPublication)};
164
162
  DROP SCHEMA IF EXISTS ${id(schema)} CASCADE;
165
- `;
163
+ `
164
+ );
166
165
  }
167
- const internalShardConfigSchema = v.object({
168
- publications: v.array(v.string()),
169
- ddlDetection: v.boolean(),
166
+ const internalShardConfigSchema = object({
167
+ publications: array(string()),
168
+ ddlDetection: boolean()
170
169
  });
171
170
  const replicaSchema = internalShardConfigSchema.extend({
172
- slot: v.string(),
173
- version: v.string(),
174
- initialSchema: publishedSchema,
171
+ slot: string(),
172
+ version: string(),
173
+ initialSchema: publishedSchema
175
174
  });
176
- // triggerSetup is run separately in a sub-transaction (i.e. SAVEPOINT) so
177
- // that a failure (e.g. due to lack of superuser permissions) can be handled
178
- // by continuing in a degraded mode (ddlDetection = false).
179
175
  function triggerSetup(shard) {
180
- const schema = id(upstreamSchema(shard));
181
- return (createEventTriggerStatements(shard) +
182
- /*sql*/ `UPDATE ${schema}."shardConfig" SET "ddlDetection" = true;`);
176
+ const schema = id(upstreamSchema(shard));
177
+ return createEventTriggerStatements(shard) + /*sql*/
178
+ `UPDATE ${schema}."shardConfig" SET "ddlDetection" = true;`;
183
179
  }
184
- // Called in initial-sync to store the exact schema that was initially synced.
185
- export async function addReplica(sql, shard, slot, replicaVersion, { tables, indexes }) {
186
- const schema = upstreamSchema(shard);
187
- const synced = { tables, indexes };
188
- await sql `
180
+ async function addReplica(sql, shard, slot, replicaVersion, { tables, indexes }) {
181
+ const schema = upstreamSchema(shard);
182
+ const synced = { tables, indexes };
183
+ await sql`
189
184
  INSERT INTO ${sql(schema)}.replicas ("slot", "version", "initialSchema")
190
185
  VALUES (${slot}, ${replicaVersion}, ${synced})`;
191
186
  }
192
- export async function getReplicaAtVersion(lc, sql, shard, replicaVersion) {
193
- const schema = sql(upstreamSchema(shard));
194
- const result = await sql `
187
+ async function getReplicaAtVersion(lc, sql, shard, replicaVersion) {
188
+ const schema = sql(upstreamSchema(shard));
189
+ const result = await sql`
195
190
  SELECT * FROM ${schema}.replicas JOIN ${schema}."shardConfig" ON true
196
191
  WHERE version = ${replicaVersion};
197
192
  `;
198
- if (result.length === 0) {
199
- // log out all the replicas and the joined shardConfig
200
- const allReplicas = await sql `
193
+ if (result.length === 0) {
194
+ const allReplicas = await sql`
201
195
  SELECT * FROM ${schema}.replicas JOIN ${schema}."shardConfig" ON true`;
202
- lc.debug?.(`Replica not found in: ${JSON.stringify(allReplicas)}`);
203
- return null;
204
- }
205
- return v.parse(result[0], replicaSchema, 'passthrough');
196
+ lc.debug?.(`Replica not found in: ${JSON.stringify(allReplicas)}`);
197
+ return null;
198
+ }
199
+ return parse(result[0], replicaSchema, "passthrough");
206
200
  }
207
- export async function getInternalShardConfig(sql, shard) {
208
- const result = await sql `
201
+ async function getInternalShardConfig(sql, shard) {
202
+ const result = await sql`
209
203
  SELECT "publications", "ddlDetection"
210
204
  FROM ${sql(upstreamSchema(shard))}."shardConfig";
211
205
  `;
212
- assert(result.length === 1);
213
- return v.parse(result[0], internalShardConfigSchema, 'passthrough');
206
+ assert(result.length === 1);
207
+ return parse(result[0], internalShardConfigSchema, "passthrough");
214
208
  }
215
- /**
216
- * Sets up and returns all publications (including internal ones) for
217
- * the given shard.
218
- */
219
- export async function setupTablesAndReplication(lc, sql, requested) {
220
- const { publications } = requested;
221
- // Validate requested publications.
222
- for (const pub of publications) {
223
- if (pub.startsWith('_')) {
224
- throw new Error(`Publication names starting with "_" are reserved for internal use.\n` +
225
- `Please use a different name for publication "${pub}".`);
226
- }
209
+ async function setupTablesAndReplication(lc, sql, requested) {
210
+ const { publications } = requested;
211
+ for (const pub of publications) {
212
+ if (pub.startsWith("_")) {
213
+ throw new Error(
214
+ `Publication names starting with "_" are reserved for internal use.
215
+ Please use a different name for publication "${pub}".`
216
+ );
227
217
  }
228
- const allPublications = [];
229
- // Setup application publications.
230
- if (publications.length) {
231
- const results = await sql `
232
- SELECT pubname from pg_publication WHERE pubname IN ${sql(publications)}`.values();
233
- if (results.length !== publications.length) {
234
- throw new Error(`Unknown or invalid publications. Specified: [${publications}]. Found: [${results.flat()}]`);
235
- }
236
- allPublications.push(...publications);
218
+ }
219
+ const allPublications = [];
220
+ if (publications.length) {
221
+ const results = await sql`
222
+ SELECT pubname from pg_publication WHERE pubname IN ${sql(
223
+ publications
224
+ )}`.values();
225
+ if (results.length !== publications.length) {
226
+ throw new Error(
227
+ `Unknown or invalid publications. Specified: [${publications}]. Found: [${results.flat()}]`
228
+ );
237
229
  }
238
- else {
239
- const defaultPublication = defaultPublicationName(requested.appID, requested.shardNum);
240
- await sql `
230
+ allPublications.push(...publications);
231
+ } else {
232
+ const defaultPublication = defaultPublicationName(
233
+ requested.appID,
234
+ requested.shardNum
235
+ );
236
+ await sql`
241
237
  DROP PUBLICATION IF EXISTS ${sql(defaultPublication)}`;
242
- await sql `
238
+ await sql`
243
239
  CREATE PUBLICATION ${sql(defaultPublication)}
244
240
  FOR TABLES IN SCHEMA public
245
241
  WITH (publish_via_partition_root = true)`;
246
- allPublications.push(defaultPublication);
247
- }
248
- const metadataPublication = metadataPublicationName(requested.appID, requested.shardNum);
249
- allPublications.push(metadataPublication);
250
- const shard = { ...requested, publications: allPublications };
251
- // Setup the global tables and shard tables / publications.
252
- await sql.unsafe(globalSetup(shard) + shardSetup(shard, metadataPublication));
253
- const pubs = await getPublicationInfo(sql, allPublications);
254
- await replicaIdentitiesForTablesWithoutPrimaryKeys(pubs)?.apply(lc, sql);
255
- await setupTriggers(lc, sql, shard);
242
+ allPublications.push(defaultPublication);
243
+ }
244
+ const metadataPublication = metadataPublicationName(
245
+ requested.appID,
246
+ requested.shardNum
247
+ );
248
+ allPublications.push(metadataPublication);
249
+ const shard = { ...requested, publications: allPublications };
250
+ await sql.unsafe(globalSetup(shard) + shardSetup(shard, metadataPublication));
251
+ const pubs = await getPublicationInfo(sql, allPublications);
252
+ await replicaIdentitiesForTablesWithoutPrimaryKeys(pubs)?.apply(lc, sql);
253
+ await setupTriggers(lc, sql, shard);
256
254
  }
257
- export async function setupTriggers(lc, tx, shard) {
258
- try {
259
- await tx.savepoint(sub => sub.unsafe(triggerSetup(shard)));
260
- }
261
- catch (e) {
262
- if (!(e instanceof postgres.PostgresError &&
263
- e.code === PG_INSUFFICIENT_PRIVILEGE)) {
264
- throw e;
265
- }
266
- // If triggerSetup() fails, replication continues in ddlDetection=false mode.
267
- lc.warn?.(`Unable to create event triggers for schema change detection:\n\n` +
268
- `"${e.hint ?? e.message}"\n\n` +
269
- `Proceeding in degraded mode: schema changes will halt replication,\n` +
270
- `requiring the replica to be reset (manually or with --auto-reset).`);
255
+ async function setupTriggers(lc, tx, shard) {
256
+ try {
257
+ await tx.savepoint((sub) => sub.unsafe(triggerSetup(shard)));
258
+ } catch (e) {
259
+ if (!(e instanceof postgres.PostgresError && e.code === PG_INSUFFICIENT_PRIVILEGE)) {
260
+ throw e;
271
261
  }
262
+ lc.warn?.(
263
+ `Unable to create event triggers for schema change detection:
264
+
265
+ "${e.hint ?? e.message}"
266
+
267
+ Proceeding in degraded mode: schema changes will halt replication,
268
+ requiring the replica to be reset (manually or with --auto-reset).`
269
+ );
270
+ }
272
271
  }
273
- export function validatePublications(lc, published) {
274
- // Verify that all publications export the proper events.
275
- published.publications.forEach(pub => {
276
- if (!pub.pubinsert ||
277
- !pub.pubtruncate ||
278
- !pub.pubdelete ||
279
- !pub.pubtruncate) {
280
- // TODO: Make APIError?
281
- throw new Error(`PUBLICATION ${pub.pubname} must publish insert, update, delete, and truncate`);
282
- }
283
- });
284
- published.tables.forEach(table => validate(lc, table, published.indexes));
272
+ function validatePublications(lc, published) {
273
+ published.publications.forEach((pub) => {
274
+ if (!pub.pubinsert || !pub.pubtruncate || !pub.pubdelete || !pub.pubtruncate) {
275
+ throw new Error(
276
+ `PUBLICATION ${pub.pubname} must publish insert, update, delete, and truncate`
277
+ );
278
+ }
279
+ });
280
+ published.tables.forEach((table) => validate(lc, table, published.indexes));
285
281
  }
286
- export function replicaIdentitiesForTablesWithoutPrimaryKeys(pubs) {
287
- const replicaIdentities = [];
288
- for (const table of pubs.tables) {
289
- if (!table.primaryKey?.length && table.replicaIdentity === Default) {
290
- // Look for an index that can serve as the REPLICA IDENTITY USING INDEX. It must be:
291
- // - UNIQUE
292
- // - NOT NULL columns
293
- // - not deferrable (i.e. isImmediate)
294
- // - not partial (are already filtered out)
295
- //
296
- // https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-REPLICA-IDENTITY
297
- const { schema, name: tableName } = table;
298
- for (const { columns, name: indexName } of pubs.indexes.filter(idx => idx.schema === schema &&
299
- idx.tableName === tableName &&
300
- idx.unique &&
301
- idx.isImmediate)) {
302
- if (Object.keys(columns).some(col => !table.columns[col].notNull)) {
303
- continue; // Only indexes with all NOT NULL columns are suitable.
304
- }
305
- replicaIdentities.push({ schema, tableName, indexName });
306
- break;
307
- }
282
+ function replicaIdentitiesForTablesWithoutPrimaryKeys(pubs) {
283
+ const replicaIdentities = [];
284
+ for (const table of pubs.tables) {
285
+ if (!table.primaryKey?.length && table.replicaIdentity === Default) {
286
+ const { schema, name: tableName } = table;
287
+ for (const { columns, name: indexName } of pubs.indexes.filter(
288
+ (idx) => idx.schema === schema && idx.tableName === tableName && idx.unique && idx.isImmediate
289
+ )) {
290
+ if (Object.keys(columns).some((col) => !table.columns[col].notNull)) {
291
+ continue;
308
292
  }
293
+ replicaIdentities.push({ schema, tableName, indexName });
294
+ break;
295
+ }
309
296
  }
310
- if (replicaIdentities.length === 0) {
311
- return undefined;
312
- }
313
- return {
314
- apply: async (lc, sql) => {
315
- for (const { schema, tableName, indexName } of replicaIdentities) {
316
- lc.info?.(`setting "${indexName}" as the REPLICA IDENTITY for "${tableName}"`);
317
- await sql `
297
+ }
298
+ if (replicaIdentities.length === 0) {
299
+ return void 0;
300
+ }
301
+ return {
302
+ apply: async (lc, sql) => {
303
+ for (const { schema, tableName, indexName } of replicaIdentities) {
304
+ lc.info?.(
305
+ `setting "${indexName}" as the REPLICA IDENTITY for "${tableName}"`
306
+ );
307
+ await sql`
318
308
  ALTER TABLE ${sql(schema)}.${sql(tableName)}
319
309
  REPLICA IDENTITY USING INDEX ${sql(indexName)}`;
320
- }
321
- },
322
- };
310
+ }
311
+ }
312
+ };
323
313
  }
324
- //# sourceMappingURL=shard.js.map
314
+ export {
315
+ SHARD_CONFIG_TABLE,
316
+ addReplica,
317
+ dropShard,
318
+ ensureGlobalTables,
319
+ getClientsTableDefinition,
320
+ getInternalShardConfig,
321
+ getMutationsTableDefinition,
322
+ getReplicaAtVersion,
323
+ internalPublicationPrefix,
324
+ legacyReplicationSlot,
325
+ metadataPublicationName,
326
+ newReplicationSlot,
327
+ replicaIdentitiesForTablesWithoutPrimaryKeys,
328
+ replicationSlotExpression,
329
+ replicationSlotPrefix,
330
+ setupTablesAndReplication,
331
+ setupTriggers,
332
+ shardSetup,
333
+ validatePublications
334
+ };
335
+ //# sourceMappingURL=shard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shard.js","sourceRoot":"","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/shard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shard.js","sources":["../../../../../../../../zero-cache/src/services/change-source/pg/schema/shard.ts"],"sourcesContent":["import {PG_INSUFFICIENT_PRIVILEGE} from '@drdgvhbh/postgres-error-codes';\nimport type {LogContext} from '@rocicorp/logger';\nimport {literal} from 'pg-format';\nimport postgres from 'postgres';\nimport {assert} from '../../../../../../shared/src/asserts.ts';\nimport * as v from '../../../../../../shared/src/valita.ts';\nimport {Default} from '../../../../db/postgres-replica-identity-enum.ts';\nimport type {PostgresDB, PostgresTransaction} from '../../../../types/pg.ts';\nimport type {AppID, ShardConfig, ShardID} from '../../../../types/shards.ts';\nimport {appSchema, check, upstreamSchema} from '../../../../types/shards.ts';\nimport {id} from '../../../../types/sql.ts';\nimport {createEventTriggerStatements} from './ddl.ts';\nimport {\n getPublicationInfo,\n publishedSchema,\n type PublicationInfo,\n type PublishedSchema,\n} from './published.ts';\nimport {validate} from './validation.ts';\n\nexport function internalPublicationPrefix({appID}: AppID) {\n return `_${appID}_`;\n}\n\nexport function legacyReplicationSlot({appID, shardNum}: ShardID) {\n return `${appID}_${shardNum}`;\n}\n\nexport function replicationSlotPrefix(shard: ShardID) {\n const {appID, shardNum} = check(shard);\n return `${appID}_${shardNum}_`;\n}\n\n/**\n * An expression used to match replication slots in the shard\n * in a Postgres `LIKE` operator.\n */\nexport function replicationSlotExpression(shard: ShardID) {\n // Underscores have a special meaning in LIKE values\n // so they have to be escaped.\n return `${replicationSlotPrefix(shard)}%`.replaceAll('_', '\\\\_');\n}\n\nexport function newReplicationSlot(shard: ShardID) {\n return replicationSlotPrefix(shard) + Date.now();\n}\n\nfunction defaultPublicationName(appID: string, shardID: string | number) {\n return `_${appID}_public_${shardID}`;\n}\n\nexport function metadataPublicationName(\n appID: string,\n shardID: string | number,\n) {\n return `_${appID}_metadata_${shardID}`;\n}\n\n// The GLOBAL_SETUP must be idempotent as it can be run multiple times for different shards.\nfunction globalSetup(appID: AppID): string {\n const app = id(appSchema(appID));\n\n return /*sql*/ `\n CREATE SCHEMA IF NOT EXISTS ${app};\n\n CREATE TABLE IF NOT EXISTS ${app}.\"schemaVersions\" (\n \"minSupportedVersion\" INT4,\n \"maxSupportedVersion\" INT4,\n\n -- Ensure that there is only a single row in the table.\n -- Application code can be agnostic to this column, and\n -- simply invoke UPDATE statements on the version columns.\n \"lock\" BOOL PRIMARY KEY DEFAULT true CHECK (lock)\n );\n\n INSERT INTO ${app}.\"schemaVersions\" (\"lock\", \"minSupportedVersion\", \"maxSupportedVersion\")\n VALUES (true, 1, 1) ON CONFLICT DO NOTHING;\n\n CREATE TABLE IF NOT EXISTS ${app}.permissions (\n \"permissions\" JSONB,\n \"hash\" TEXT,\n\n -- Ensure that there is only a single row in the table.\n -- Application code can be agnostic to this column, and\n -- simply invoke UPDATE statements on the version columns.\n \"lock\" BOOL PRIMARY KEY DEFAULT true CHECK (lock)\n );\n\n CREATE OR REPLACE FUNCTION ${app}.set_permissions_hash()\n RETURNS TRIGGER AS $$\n BEGIN\n NEW.hash = md5(NEW.permissions::text);\n RETURN NEW;\n END;\n $$ LANGUAGE plpgsql;\n\n CREATE OR REPLACE TRIGGER on_set_permissions \n BEFORE INSERT OR UPDATE ON ${app}.permissions\n FOR EACH ROW\n EXECUTE FUNCTION ${app}.set_permissions_hash();\n\n INSERT INTO ${app}.permissions (permissions) VALUES (NULL) ON CONFLICT DO NOTHING;\n`;\n}\n\nexport async function ensureGlobalTables(db: PostgresDB, appID: AppID) {\n await db.unsafe(globalSetup(appID));\n}\n\nexport function getClientsTableDefinition(schema: string) {\n return /*sql*/ `\n CREATE TABLE ${schema}.\"clients\" (\n \"clientGroupID\" TEXT NOT NULL,\n \"clientID\" TEXT NOT NULL,\n \"lastMutationID\" BIGINT NOT NULL,\n \"userID\" TEXT,\n PRIMARY KEY(\"clientGroupID\", \"clientID\")\n );`;\n}\n\n/**\n * Tracks the results of mutations.\n * 1. It is an error for the same mutation ID to be used twice.\n * 2. The result is JSONB to allow for arbitrary results.\n *\n * The tables must be cleaned up as the clients\n * receive the mutation responses and as clients are removed.\n */\nexport function getMutationsTableDefinition(schema: string) {\n return /*sql*/ `\n CREATE TABLE ${schema}.\"mutations\" (\n \"clientGroupID\" TEXT NOT NULL,\n \"clientID\" TEXT NOT NULL,\n \"mutationID\" BIGINT NOT NULL,\n \"result\" JSON NOT NULL,\n PRIMARY KEY(\"clientGroupID\", \"clientID\", \"mutationID\")\n );`;\n}\n\nexport const SHARD_CONFIG_TABLE = 'shardConfig';\n\nexport function shardSetup(\n shardConfig: ShardConfig,\n metadataPublication: string,\n): string {\n const app = id(appSchema(shardConfig));\n const shard = id(upstreamSchema(shardConfig));\n\n const pubs = [...shardConfig.publications].sort();\n assert(pubs.includes(metadataPublication));\n\n return /*sql*/ `\n CREATE SCHEMA IF NOT EXISTS ${shard};\n\n ${getClientsTableDefinition(shard)}\n ${getMutationsTableDefinition(shard)}\n\n DROP PUBLICATION IF EXISTS ${id(metadataPublication)};\n CREATE PUBLICATION ${id(metadataPublication)}\n FOR TABLE ${app}.\"schemaVersions\", ${app}.\"permissions\", TABLE ${shard}.\"clients\", ${shard}.\"mutations\";\n\n CREATE TABLE ${shard}.\"${SHARD_CONFIG_TABLE}\" (\n \"publications\" TEXT[] NOT NULL,\n \"ddlDetection\" BOOL NOT NULL,\n\n -- Ensure that there is only a single row in the table.\n \"lock\" BOOL PRIMARY KEY DEFAULT true CHECK (lock)\n );\n\n INSERT INTO ${shard}.\"${SHARD_CONFIG_TABLE}\" (\n \"publications\",\n \"ddlDetection\" \n ) VALUES (\n ARRAY[${literal(pubs)}], \n false -- set in SAVEPOINT with triggerSetup() statements\n );\n\n CREATE TABLE ${shard}.replicas (\n \"slot\" TEXT PRIMARY KEY,\n \"version\" TEXT NOT NULL,\n \"initialSchema\" JSON NOT NULL\n );\n `;\n}\n\nexport function dropShard(appID: string, shardID: string | number): string {\n const schema = `${appID}_${shardID}`;\n const metadataPublication = metadataPublicationName(appID, shardID);\n const defaultPublication = defaultPublicationName(appID, shardID);\n\n // DROP SCHEMA ... CASCADE does not drop dependent PUBLICATIONS,\n // so PUBLICATIONs must be dropped explicitly.\n return /*sql*/ `\n DROP PUBLICATION IF EXISTS ${id(defaultPublication)};\n DROP PUBLICATION IF EXISTS ${id(metadataPublication)};\n DROP SCHEMA IF EXISTS ${id(schema)} CASCADE;\n `;\n}\n\nconst internalShardConfigSchema = v.object({\n publications: v.array(v.string()),\n ddlDetection: v.boolean(),\n});\n\nexport type InternalShardConfig = v.Infer<typeof internalShardConfigSchema>;\n\nconst replicaSchema = internalShardConfigSchema.extend({\n slot: v.string(),\n version: v.string(),\n initialSchema: publishedSchema,\n});\n\nexport type Replica = v.Infer<typeof replicaSchema>;\n\n// triggerSetup is run separately in a sub-transaction (i.e. SAVEPOINT) so\n// that a failure (e.g. due to lack of superuser permissions) can be handled\n// by continuing in a degraded mode (ddlDetection = false).\nfunction triggerSetup(shard: ShardConfig): string {\n const schema = id(upstreamSchema(shard));\n return (\n createEventTriggerStatements(shard) +\n /*sql*/ `UPDATE ${schema}.\"shardConfig\" SET \"ddlDetection\" = true;`\n );\n}\n\n// Called in initial-sync to store the exact schema that was initially synced.\nexport async function addReplica(\n sql: PostgresDB,\n shard: ShardID,\n slot: string,\n replicaVersion: string,\n {tables, indexes}: PublishedSchema,\n) {\n const schema = upstreamSchema(shard);\n const synced: PublishedSchema = {tables, indexes};\n await sql`\n INSERT INTO ${sql(schema)}.replicas (\"slot\", \"version\", \"initialSchema\")\n VALUES (${slot}, ${replicaVersion}, ${synced})`;\n}\n\nexport async function getReplicaAtVersion(\n lc: LogContext,\n sql: PostgresDB,\n shard: ShardID,\n replicaVersion: string,\n): Promise<Replica | null> {\n const schema = sql(upstreamSchema(shard));\n const result = await sql`\n SELECT * FROM ${schema}.replicas JOIN ${schema}.\"shardConfig\" ON true\n WHERE version = ${replicaVersion};\n `;\n if (result.length === 0) {\n // log out all the replicas and the joined shardConfig\n const allReplicas = await sql`\n SELECT * FROM ${schema}.replicas JOIN ${schema}.\"shardConfig\" ON true`;\n lc.debug?.(`Replica not found in: ${JSON.stringify(allReplicas)}`);\n return null;\n }\n return v.parse(result[0], replicaSchema, 'passthrough');\n}\n\nexport async function getInternalShardConfig(\n sql: PostgresDB,\n shard: ShardID,\n): Promise<InternalShardConfig> {\n const result = await sql`\n SELECT \"publications\", \"ddlDetection\"\n FROM ${sql(upstreamSchema(shard))}.\"shardConfig\";\n `;\n assert(result.length === 1);\n return v.parse(result[0], internalShardConfigSchema, 'passthrough');\n}\n\n/**\n * Sets up and returns all publications (including internal ones) for\n * the given shard.\n */\nexport async function setupTablesAndReplication(\n lc: LogContext,\n sql: PostgresTransaction,\n requested: ShardConfig,\n) {\n const {publications} = requested;\n // Validate requested publications.\n for (const pub of publications) {\n if (pub.startsWith('_')) {\n throw new Error(\n `Publication names starting with \"_\" are reserved for internal use.\\n` +\n `Please use a different name for publication \"${pub}\".`,\n );\n }\n }\n const allPublications: string[] = [];\n\n // Setup application publications.\n if (publications.length) {\n const results = await sql<{pubname: string}[]>`\n SELECT pubname from pg_publication WHERE pubname IN ${sql(\n publications,\n )}`.values();\n\n if (results.length !== publications.length) {\n throw new Error(\n `Unknown or invalid publications. Specified: [${publications}]. Found: [${results.flat()}]`,\n );\n }\n allPublications.push(...publications);\n } else {\n const defaultPublication = defaultPublicationName(\n requested.appID,\n requested.shardNum,\n );\n await sql`\n DROP PUBLICATION IF EXISTS ${sql(defaultPublication)}`;\n await sql`\n CREATE PUBLICATION ${sql(defaultPublication)} \n FOR TABLES IN SCHEMA public\n WITH (publish_via_partition_root = true)`;\n allPublications.push(defaultPublication);\n }\n\n const metadataPublication = metadataPublicationName(\n requested.appID,\n requested.shardNum,\n );\n allPublications.push(metadataPublication);\n\n const shard = {...requested, publications: allPublications};\n\n // Setup the global tables and shard tables / publications.\n await sql.unsafe(globalSetup(shard) + shardSetup(shard, metadataPublication));\n\n const pubs = await getPublicationInfo(sql, allPublications);\n await replicaIdentitiesForTablesWithoutPrimaryKeys(pubs)?.apply(lc, sql);\n\n await setupTriggers(lc, sql, shard);\n}\n\nexport async function setupTriggers(\n lc: LogContext,\n tx: PostgresTransaction,\n shard: ShardConfig,\n) {\n try {\n await tx.savepoint(sub => sub.unsafe(triggerSetup(shard)));\n } catch (e) {\n if (\n !(\n e instanceof postgres.PostgresError &&\n e.code === PG_INSUFFICIENT_PRIVILEGE\n )\n ) {\n throw e;\n }\n // If triggerSetup() fails, replication continues in ddlDetection=false mode.\n lc.warn?.(\n `Unable to create event triggers for schema change detection:\\n\\n` +\n `\"${e.hint ?? e.message}\"\\n\\n` +\n `Proceeding in degraded mode: schema changes will halt replication,\\n` +\n `requiring the replica to be reset (manually or with --auto-reset).`,\n );\n }\n}\n\nexport function validatePublications(\n lc: LogContext,\n published: PublicationInfo,\n) {\n // Verify that all publications export the proper events.\n published.publications.forEach(pub => {\n if (\n !pub.pubinsert ||\n !pub.pubtruncate ||\n !pub.pubdelete ||\n !pub.pubtruncate\n ) {\n // TODO: Make APIError?\n throw new Error(\n `PUBLICATION ${pub.pubname} must publish insert, update, delete, and truncate`,\n );\n }\n });\n\n published.tables.forEach(table => validate(lc, table, published.indexes));\n}\n\ntype ReplicaIdentities = {\n apply(lc: LogContext, db: PostgresDB): Promise<void>;\n};\n\nexport function replicaIdentitiesForTablesWithoutPrimaryKeys(\n pubs: PublishedSchema,\n): ReplicaIdentities | undefined {\n const replicaIdentities: {\n schema: string;\n tableName: string;\n indexName: string;\n }[] = [];\n for (const table of pubs.tables) {\n if (!table.primaryKey?.length && table.replicaIdentity === Default) {\n // Look for an index that can serve as the REPLICA IDENTITY USING INDEX. It must be:\n // - UNIQUE\n // - NOT NULL columns\n // - not deferrable (i.e. isImmediate)\n // - not partial (are already filtered out)\n //\n // https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-REPLICA-IDENTITY\n const {schema, name: tableName} = table;\n for (const {columns, name: indexName} of pubs.indexes.filter(\n idx =>\n idx.schema === schema &&\n idx.tableName === tableName &&\n idx.unique &&\n idx.isImmediate,\n )) {\n if (Object.keys(columns).some(col => !table.columns[col].notNull)) {\n continue; // Only indexes with all NOT NULL columns are suitable.\n }\n replicaIdentities.push({schema, tableName, indexName});\n break;\n }\n }\n }\n\n if (replicaIdentities.length === 0) {\n return undefined;\n }\n return {\n apply: async (lc: LogContext, sql: PostgresDB) => {\n for (const {schema, tableName, indexName} of replicaIdentities) {\n lc.info?.(\n `setting \"${indexName}\" as the REPLICA IDENTITY for \"${tableName}\"`,\n );\n await sql`\n ALTER TABLE ${sql(schema)}.${sql(tableName)} \n REPLICA IDENTITY USING INDEX ${sql(indexName)}`;\n }\n },\n };\n}\n"],"names":["v.object","v.array","v.string","v.boolean","v.parse"],"mappings":"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"}
@@ -1,44 +1,59 @@
1
- import { mapPostgresToLite, warnIfDataTypeSupported, } from "../../../../db/pg-to-lite.js";
2
- import { Default, Index, Nothing, } from "../../../../db/postgres-replica-identity-enum.js";
1
+ import { mapPostgresToLite, warnIfDataTypeSupported } from "../../../../db/pg-to-lite.js";
2
+ import { Default, Nothing, Index } from "../../../../db/postgres-replica-identity-enum.js";
3
3
  import { ZERO_VERSION_COLUMN_NAME } from "../../../replicator/schema/constants.js";
4
- export const ALLOWED_APP_ID_CHARACTERS = /^[a-z0-9_]+$/;
5
4
  const ALLOWED_TABLE_CHARS = /^[A-Za-z_]+[A-Za-z0-9_-]*$/;
6
- // Dots are allowed in column names since there is no need for
7
- // a schema/table delimiter when mapped to SQLite names.
8
5
  const ALLOWED_COLUMN_CHARS = /^[A-Za-z_]+[.A-Za-z0-9_-]*$/;
9
- export function validate(lc, table, indexes) {
10
- if (ZERO_VERSION_COLUMN_NAME in table.columns) {
11
- throw new UnsupportedTableSchemaError(`Table "${table.name}" uses reserved column name "${ZERO_VERSION_COLUMN_NAME}"`);
12
- }
13
- if (!table.primaryKey?.length && table.replicaIdentity === Default) {
14
- lc.warn?.(`\n\n\n` +
15
- `Table "${table.name}" needs a primary key in order to be synced to clients. ` +
16
- `Add one with 'ALTER TABLE "${table.name}" ADD PRIMARY KEY (...)'.` +
17
- `\n\n\n`);
18
- }
19
- if (table.replicaIdentity === Nothing) {
20
- throw new UnsupportedTableSchemaError(`Table "${table.name}" with REPLICA IDENTITY NOTHING cannot be replicated`);
21
- }
22
- if (table.replicaIdentity === Index &&
23
- !indexes.some(idx => idx.schema === table.schema &&
24
- idx.tableName === table.name &&
25
- idx.isReplicaIdentity)) {
26
- throw new UnsupportedTableSchemaError(`Table "${table.name}" is missing its REPLICA IDENTITY INDEX`);
27
- }
28
- if (!ALLOWED_TABLE_CHARS.test(table.name)) {
29
- throw new UnsupportedTableSchemaError(`Table "${table.name}" has invalid characters.`);
30
- }
31
- for (const [col, spec] of Object.entries(mapPostgresToLite(table).columns)) {
32
- if (!ALLOWED_COLUMN_CHARS.test(col)) {
33
- throw new UnsupportedTableSchemaError(`Column "${col}" in table "${table.name}" has invalid characters.`);
34
- }
35
- warnIfDataTypeSupported(lc, spec.dataType, table.name, col);
6
+ function validate(lc, table, indexes) {
7
+ if (ZERO_VERSION_COLUMN_NAME in table.columns) {
8
+ throw new UnsupportedTableSchemaError(
9
+ `Table "${table.name}" uses reserved column name "${ZERO_VERSION_COLUMN_NAME}"`
10
+ );
11
+ }
12
+ if (!table.primaryKey?.length && table.replicaIdentity === Default) {
13
+ lc.warn?.(
14
+ `
15
+
16
+
17
+ Table "${table.name}" needs a primary key in order to be synced to clients. Add one with 'ALTER TABLE "${table.name}" ADD PRIMARY KEY (...)'.
18
+
19
+
20
+ `
21
+ );
22
+ }
23
+ if (table.replicaIdentity === Nothing) {
24
+ throw new UnsupportedTableSchemaError(
25
+ `Table "${table.name}" with REPLICA IDENTITY NOTHING cannot be replicated`
26
+ );
27
+ }
28
+ if (table.replicaIdentity === Index && !indexes.some(
29
+ (idx) => idx.schema === table.schema && idx.tableName === table.name && idx.isReplicaIdentity
30
+ )) {
31
+ throw new UnsupportedTableSchemaError(
32
+ `Table "${table.name}" is missing its REPLICA IDENTITY INDEX`
33
+ );
34
+ }
35
+ if (!ALLOWED_TABLE_CHARS.test(table.name)) {
36
+ throw new UnsupportedTableSchemaError(
37
+ `Table "${table.name}" has invalid characters.`
38
+ );
39
+ }
40
+ for (const [col, spec] of Object.entries(mapPostgresToLite(table).columns)) {
41
+ if (!ALLOWED_COLUMN_CHARS.test(col)) {
42
+ throw new UnsupportedTableSchemaError(
43
+ `Column "${col}" in table "${table.name}" has invalid characters.`
44
+ );
36
45
  }
46
+ warnIfDataTypeSupported(lc, spec.dataType, table.name, col);
47
+ }
37
48
  }
38
- export class UnsupportedTableSchemaError extends Error {
39
- name = 'UnsupportedTableSchemaError';
40
- constructor(msg) {
41
- super(msg);
42
- }
49
+ class UnsupportedTableSchemaError extends Error {
50
+ name = "UnsupportedTableSchemaError";
51
+ constructor(msg) {
52
+ super(msg);
53
+ }
43
54
  }
44
- //# sourceMappingURL=validation.js.map
55
+ export {
56
+ UnsupportedTableSchemaError,
57
+ validate
58
+ };
59
+ //# sourceMappingURL=validation.js.map