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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1581) hide show
  1. package/out/analyze-query/src/bin-analyze.js +268 -257
  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 +76 -74
  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-ZZXMKAAG.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/replicache/src/kv/sqlite-store.d.ts.map +1 -1
  132. package/out/{chunk-ECUMGQGC.js → replicache/src/kv/sqlite-store.js} +27 -21
  133. package/out/replicache/src/kv/sqlite-store.js.map +1 -0
  134. package/out/{chunk-ASRS2LFV.js → replicache/src/kv/throw-if-closed.js} +4 -6
  135. package/out/replicache/src/kv/throw-if-closed.js.map +1 -0
  136. package/out/replicache/src/kv/write-impl-base.js +57 -0
  137. package/out/replicache/src/kv/write-impl-base.js.map +1 -0
  138. package/out/replicache/src/kv/write-impl.js +30 -0
  139. package/out/replicache/src/kv/write-impl.js.map +1 -0
  140. package/out/replicache/src/lazy.js +13 -0
  141. package/out/replicache/src/lazy.js.map +1 -0
  142. package/out/replicache/src/log-options.js +9 -0
  143. package/out/replicache/src/log-options.js.map +1 -0
  144. package/out/replicache/src/make-idb-name.js +13 -0
  145. package/out/replicache/src/make-idb-name.js.map +1 -0
  146. package/out/replicache/src/new-client-channel.js +51 -0
  147. package/out/replicache/src/new-client-channel.js.map +1 -0
  148. package/out/replicache/src/on-persist-channel.js +36 -0
  149. package/out/replicache/src/on-persist-channel.js.map +1 -0
  150. package/out/replicache/src/patch-operation.js +42 -0
  151. package/out/replicache/src/patch-operation.js.map +1 -0
  152. package/out/replicache/src/pending-mutations.js +16 -0
  153. package/out/replicache/src/pending-mutations.js.map +1 -0
  154. package/out/replicache/src/persist/client-gc.js +58 -0
  155. package/out/replicache/src/persist/client-gc.js.map +1 -0
  156. package/out/replicache/src/persist/client-group-gc.js +43 -0
  157. package/out/replicache/src/persist/client-group-gc.js.map +1 -0
  158. package/out/replicache/src/persist/client-groups.js +184 -0
  159. package/out/replicache/src/persist/client-groups.js.map +1 -0
  160. package/out/replicache/src/persist/clients.d.ts +3 -2
  161. package/out/replicache/src/persist/clients.d.ts.map +1 -1
  162. package/out/replicache/src/persist/clients.js +353 -0
  163. package/out/replicache/src/persist/clients.js.map +1 -0
  164. package/out/replicache/src/persist/collect-idb-databases.js +188 -0
  165. package/out/replicache/src/persist/collect-idb-databases.js.map +1 -0
  166. package/out/replicache/src/persist/gather-mem-only-visitor.js +27 -0
  167. package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -0
  168. package/out/replicache/src/persist/gather-not-cached-visitor.js +37 -0
  169. package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -0
  170. package/out/replicache/src/persist/heartbeat.js +48 -0
  171. package/out/replicache/src/persist/heartbeat.js.map +1 -0
  172. package/out/replicache/src/persist/idb-databases-store-db-name.js +14 -0
  173. package/out/replicache/src/persist/idb-databases-store-db-name.js.map +1 -0
  174. package/out/replicache/src/persist/idb-databases-store.d.ts +1 -0
  175. package/out/replicache/src/persist/idb-databases-store.d.ts.map +1 -1
  176. package/out/replicache/src/persist/idb-databases-store.js +103 -0
  177. package/out/replicache/src/persist/idb-databases-store.js.map +1 -0
  178. package/out/replicache/src/persist/make-client-id.js +12 -0
  179. package/out/replicache/src/persist/make-client-id.js.map +1 -0
  180. package/out/replicache/src/persist/persist.d.ts +2 -2
  181. package/out/replicache/src/persist/persist.d.ts.map +1 -1
  182. package/out/replicache/src/persist/persist.js +183 -0
  183. package/out/replicache/src/persist/persist.js.map +1 -0
  184. package/out/replicache/src/persist/refresh.d.ts +4 -3
  185. package/out/replicache/src/persist/refresh.d.ts.map +1 -1
  186. package/out/replicache/src/persist/refresh.js +198 -0
  187. package/out/replicache/src/persist/refresh.js.map +1 -0
  188. package/out/replicache/src/process-scheduler.js +96 -0
  189. package/out/replicache/src/process-scheduler.js.map +1 -0
  190. package/out/replicache/src/pusher.js +33 -0
  191. package/out/replicache/src/pusher.js.map +1 -0
  192. package/out/replicache/src/replicache-impl.d.ts +1 -1
  193. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  194. package/out/replicache/src/replicache-impl.js +1200 -0
  195. package/out/replicache/src/replicache-impl.js.map +1 -0
  196. package/out/replicache/src/replicache-options.d.ts +3 -2
  197. package/out/replicache/src/replicache-options.d.ts.map +1 -1
  198. package/out/replicache/src/report-error.js +6 -0
  199. package/out/replicache/src/report-error.js.map +1 -0
  200. package/out/replicache/src/request-idle.js +13 -0
  201. package/out/replicache/src/request-idle.js.map +1 -0
  202. package/out/replicache/src/scan-iterator.js +146 -0
  203. package/out/replicache/src/scan-iterator.js.map +1 -0
  204. package/out/replicache/src/scan-options.js +45 -0
  205. package/out/replicache/src/scan-options.js.map +1 -0
  206. package/out/replicache/src/set-interval-with-signal.js +12 -0
  207. package/out/replicache/src/set-interval-with-signal.js.map +1 -0
  208. package/out/replicache/src/subscriptions.js +355 -0
  209. package/out/replicache/src/subscriptions.js.map +1 -0
  210. package/out/replicache/src/sync/diff.d.ts +3 -2
  211. package/out/replicache/src/sync/diff.d.ts.map +1 -1
  212. package/out/replicache/src/sync/diff.js +72 -0
  213. package/out/replicache/src/sync/diff.js.map +1 -0
  214. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js +9 -0
  215. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js.map +1 -0
  216. package/out/replicache/src/sync/ids.js +9 -0
  217. package/out/replicache/src/sync/ids.js.map +1 -0
  218. package/out/replicache/src/sync/patch.js +49 -0
  219. package/out/replicache/src/sync/patch.js.map +1 -0
  220. package/out/replicache/src/sync/pull-error.js +16 -0
  221. package/out/replicache/src/sync/pull-error.js.map +1 -0
  222. package/out/replicache/src/sync/pull.d.ts +3 -2
  223. package/out/replicache/src/sync/pull.d.ts.map +1 -1
  224. package/out/replicache/src/sync/pull.js +301 -0
  225. package/out/replicache/src/sync/pull.js.map +1 -0
  226. package/out/replicache/src/sync/push.js +88 -0
  227. package/out/replicache/src/sync/push.js.map +1 -0
  228. package/out/replicache/src/sync/request-id.js +20 -0
  229. package/out/replicache/src/sync/request-id.js.map +1 -0
  230. package/out/replicache/src/sync/sync-head-name.js +5 -0
  231. package/out/replicache/src/sync/sync-head-name.js.map +1 -0
  232. package/out/replicache/src/to-error.js +10 -0
  233. package/out/replicache/src/to-error.js.map +1 -0
  234. package/out/replicache/src/transaction-closed-error.js +19 -0
  235. package/out/replicache/src/transaction-closed-error.js.map +1 -0
  236. package/out/replicache/src/transactions.js +152 -0
  237. package/out/replicache/src/transactions.js.map +1 -0
  238. package/out/replicache/src/version.js +5 -0
  239. package/out/replicache/src/version.js.map +1 -0
  240. package/out/replicache/src/with-transactions.js +28 -0
  241. package/out/replicache/src/with-transactions.js.map +1 -0
  242. package/out/shared/src/abort-error.js +6 -3
  243. package/out/shared/src/abort-error.js.map +1 -1
  244. package/out/shared/src/arrays.js +45 -43
  245. package/out/shared/src/arrays.js.map +1 -1
  246. package/out/shared/src/asserts.js +64 -68
  247. package/out/shared/src/asserts.js.map +1 -1
  248. package/out/shared/src/bigint-json.js +38 -42
  249. package/out/shared/src/bigint-json.js.map +1 -1
  250. package/out/shared/src/binary-search.js +18 -29
  251. package/out/shared/src/binary-search.js.map +1 -1
  252. package/out/shared/src/broadcast-channel.js +24 -0
  253. package/out/shared/src/broadcast-channel.js.map +1 -0
  254. package/out/shared/src/browser-env.js +25 -0
  255. package/out/shared/src/browser-env.js.map +1 -0
  256. package/out/shared/src/btree-set.js +464 -507
  257. package/out/shared/src/btree-set.js.map +1 -1
  258. package/out/shared/src/cache.js +34 -38
  259. package/out/shared/src/cache.js.map +1 -1
  260. package/out/shared/src/centroid.js +24 -24
  261. package/out/shared/src/centroid.js.map +1 -1
  262. package/out/shared/src/config.js +6 -3
  263. package/out/shared/src/config.js.map +1 -1
  264. package/out/shared/src/custom-key-map.js +58 -64
  265. package/out/shared/src/custom-key-map.js.map +1 -1
  266. package/out/shared/src/custom-key-set.js +51 -57
  267. package/out/shared/src/custom-key-set.js.map +1 -1
  268. package/out/shared/src/deep-clone.js +46 -0
  269. package/out/shared/src/deep-clone.js.map +1 -0
  270. package/out/shared/src/deep-merge.d.ts +26 -4
  271. package/out/shared/src/deep-merge.d.ts.map +1 -1
  272. package/out/shared/src/deep-merge.js +28 -0
  273. package/out/shared/src/deep-merge.js.map +1 -0
  274. package/out/shared/src/document-visible.js +74 -0
  275. package/out/shared/src/document-visible.js.map +1 -0
  276. package/out/shared/src/dotenv.js +5 -7
  277. package/out/shared/src/dotenv.js.map +1 -1
  278. package/out/shared/src/error.js +57 -56
  279. package/out/shared/src/error.js.map +1 -1
  280. package/out/shared/src/has-own.js +5 -3
  281. package/out/shared/src/has-own.js.map +1 -1
  282. package/out/shared/src/hash.js +15 -14
  283. package/out/shared/src/hash.js.map +1 -1
  284. package/out/shared/src/iterables.d.ts +0 -1
  285. package/out/shared/src/iterables.d.ts.map +1 -1
  286. package/out/shared/src/iterables.js +44 -80
  287. package/out/shared/src/iterables.js.map +1 -1
  288. package/out/shared/src/json-schema.js +30 -33
  289. package/out/shared/src/json-schema.js.map +1 -1
  290. package/out/shared/src/json.js +128 -143
  291. package/out/shared/src/json.js.map +1 -1
  292. package/out/shared/src/logging-test-utils.js +12 -19
  293. package/out/shared/src/logging-test-utils.js.map +1 -1
  294. package/out/shared/src/logging.d.ts.map +1 -1
  295. package/out/shared/src/logging.js +99 -83
  296. package/out/shared/src/logging.js.map +1 -1
  297. package/out/shared/src/must.js +9 -7
  298. package/out/shared/src/must.js.map +1 -1
  299. package/out/shared/src/navigator.js +5 -0
  300. package/out/shared/src/navigator.js.map +1 -0
  301. package/out/shared/src/object-traversal.d.ts +19 -0
  302. package/out/shared/src/object-traversal.d.ts.map +1 -0
  303. package/out/shared/src/object-traversal.js +27 -0
  304. package/out/shared/src/object-traversal.js.map +1 -0
  305. package/out/shared/src/objects.js +21 -22
  306. package/out/shared/src/objects.js.map +1 -1
  307. package/out/shared/src/options.d.ts +2 -0
  308. package/out/shared/src/options.d.ts.map +1 -1
  309. package/out/shared/src/options.js +289 -318
  310. package/out/shared/src/options.js.map +1 -1
  311. package/out/shared/src/parse-big-int.js +12 -10
  312. package/out/shared/src/parse-big-int.js.map +1 -1
  313. package/out/shared/src/promise-race.js +20 -0
  314. package/out/shared/src/promise-race.js.map +1 -0
  315. package/out/shared/src/queue.js +119 -122
  316. package/out/shared/src/queue.js.map +1 -1
  317. package/out/shared/src/rand.js +8 -10
  318. package/out/shared/src/rand.js.map +1 -1
  319. package/out/shared/src/random-uint64.js +9 -0
  320. package/out/shared/src/random-uint64.js.map +1 -0
  321. package/out/shared/src/random-values.js +13 -0
  322. package/out/shared/src/random-values.js.map +1 -0
  323. package/out/shared/src/record-proxy.d.ts +13 -0
  324. package/out/shared/src/record-proxy.d.ts.map +1 -0
  325. package/out/shared/src/record-proxy.js +59 -0
  326. package/out/shared/src/record-proxy.js.map +1 -0
  327. package/out/shared/src/resolved-promises.js +12 -9
  328. package/out/shared/src/resolved-promises.js.map +1 -1
  329. package/out/shared/src/sentinels.js +13 -6
  330. package/out/shared/src/sentinels.js.map +1 -1
  331. package/out/shared/src/set-utils.js +63 -62
  332. package/out/shared/src/set-utils.js.map +1 -1
  333. package/out/shared/src/size-of-value.js +58 -0
  334. package/out/shared/src/size-of-value.js.map +1 -0
  335. package/out/shared/src/sleep.js +45 -53
  336. package/out/shared/src/sleep.js.map +1 -1
  337. package/out/shared/src/string-compare.js +12 -9
  338. package/out/shared/src/string-compare.js.map +1 -1
  339. package/out/shared/src/subscribable.js +34 -0
  340. package/out/shared/src/subscribable.js.map +1 -0
  341. package/out/shared/src/tdigest-schema.js +7 -7
  342. package/out/shared/src/tdigest-schema.js.map +1 -1
  343. package/out/shared/src/tdigest.js +247 -271
  344. package/out/shared/src/tdigest.js.map +1 -1
  345. package/out/shared/src/valita.js +195 -207
  346. package/out/shared/src/valita.js.map +1 -1
  347. package/out/z2s/src/compiler.d.ts +2 -2
  348. package/out/z2s/src/compiler.d.ts.map +1 -1
  349. package/out/z2s/src/compiler.js +439 -310
  350. package/out/z2s/src/compiler.js.map +1 -1
  351. package/out/z2s/src/sql.d.ts +1 -1
  352. package/out/z2s/src/sql.d.ts.map +1 -1
  353. package/out/z2s/src/sql.js +186 -218
  354. package/out/z2s/src/sql.js.map +1 -1
  355. package/out/zero/package.json.js +9 -0
  356. package/out/zero/package.json.js.map +1 -0
  357. package/out/zero/src/adapters/drizzle.d.ts +1 -1
  358. package/out/zero/src/adapters/drizzle.d.ts.map +1 -1
  359. package/out/zero/src/adapters/drizzle.js +8 -2
  360. package/out/zero/src/adapters/drizzle.js.map +1 -1
  361. package/out/zero/src/adapters/pg.js +7 -2
  362. package/out/zero/src/adapters/pg.js.map +1 -1
  363. package/out/zero/src/adapters/postgresjs.js +7 -2
  364. package/out/zero/src/adapters/postgresjs.js.map +1 -1
  365. package/out/zero/src/analyze-query.js +1 -1
  366. package/out/zero/src/analyze-query.js.map +1 -1
  367. package/out/zero/src/ast-to-zql.js +1 -1
  368. package/out/zero/src/ast-to-zql.js.map +1 -1
  369. package/out/zero/src/bindings.d.ts +2 -0
  370. package/out/zero/src/bindings.d.ts.map +1 -0
  371. package/out/zero/src/bindings.js +27 -0
  372. package/out/zero/src/bindings.js.map +1 -0
  373. package/out/zero/src/build-schema.js +3 -5
  374. package/out/zero/src/build-schema.js.map +1 -1
  375. package/out/zero/src/change-protocol/v0.js +5 -3
  376. package/out/zero/src/change-protocol/v0.js.map +1 -1
  377. package/out/zero/src/cli.js +2 -2
  378. package/out/zero/src/cli.js.map +1 -1
  379. package/out/zero/src/deploy-permissions.js +1 -1
  380. package/out/zero/src/deploy-permissions.js.map +1 -1
  381. package/out/zero/src/expo-sqlite.js +5 -0
  382. package/out/zero/src/expo-sqlite.js.map +1 -0
  383. package/out/zero/src/op-sqlite.js +5 -0
  384. package/out/zero/src/op-sqlite.js.map +1 -0
  385. package/out/zero/src/pg.js +32 -3
  386. package/out/zero/src/pg.js.map +1 -1
  387. package/out/zero/src/react-native.js +13 -0
  388. package/out/zero/src/react-native.js.map +1 -0
  389. package/out/zero/src/react.js +15 -0
  390. package/out/zero/src/react.js.map +1 -0
  391. package/out/zero/src/server.js +28 -3
  392. package/out/zero/src/server.js.map +1 -1
  393. package/out/zero/src/solid.js +15 -0
  394. package/out/zero/src/solid.js.map +1 -0
  395. package/out/zero/src/sqlite.js +7 -0
  396. package/out/zero/src/sqlite.js.map +1 -0
  397. package/out/zero/src/transform-query.js +1 -1
  398. package/out/zero/src/transform-query.js.map +1 -1
  399. package/out/zero/src/zero-cache-dev.js +133 -105
  400. package/out/zero/src/zero-cache-dev.js.map +1 -1
  401. package/out/zero/src/zero-out.js +6 -6
  402. package/out/zero/src/zero-out.js.map +1 -1
  403. package/out/zero/src/zero.js +73 -0
  404. package/out/zero/src/zero.js.map +1 -0
  405. package/out/zero/src/zqlite.js +11 -3
  406. package/out/zero/src/zqlite.js.map +1 -1
  407. package/out/zero-cache/src/auth/jwt.d.ts +3 -0
  408. package/out/zero-cache/src/auth/jwt.d.ts.map +1 -1
  409. package/out/zero-cache/src/auth/jwt.js +33 -38
  410. package/out/zero-cache/src/auth/jwt.js.map +1 -1
  411. package/out/zero-cache/src/auth/load-permissions.d.ts +1 -1
  412. package/out/zero-cache/src/auth/load-permissions.d.ts.map +1 -1
  413. package/out/zero-cache/src/auth/load-permissions.js +61 -45
  414. package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
  415. package/out/zero-cache/src/auth/read-authorizer.d.ts +1 -1
  416. package/out/zero-cache/src/auth/read-authorizer.d.ts.map +1 -1
  417. package/out/zero-cache/src/auth/read-authorizer.js +79 -91
  418. package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
  419. package/out/zero-cache/src/auth/write-authorizer.d.ts +4 -3
  420. package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
  421. package/out/zero-cache/src/auth/write-authorizer.js +395 -328
  422. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  423. package/out/zero-cache/src/config/network.js +42 -45
  424. package/out/zero-cache/src/config/network.js.map +1 -1
  425. package/out/zero-cache/src/config/normalize.js +86 -83
  426. package/out/zero-cache/src/config/normalize.js.map +1 -1
  427. package/out/zero-cache/src/config/zero-config.d.ts +63 -0
  428. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  429. package/out/zero-cache/src/config/zero-config.js +741 -682
  430. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  431. package/out/zero-cache/src/custom/fetch.d.ts +5 -5
  432. package/out/zero-cache/src/custom/fetch.d.ts.map +1 -1
  433. package/out/zero-cache/src/custom/fetch.js +170 -162
  434. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  435. package/out/zero-cache/src/custom-queries/transform-query.d.ts +10 -3
  436. package/out/zero-cache/src/custom-queries/transform-query.d.ts.map +1 -1
  437. package/out/zero-cache/src/custom-queries/transform-query.js +101 -109
  438. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  439. package/out/zero-cache/src/db/create.js +32 -36
  440. package/out/zero-cache/src/db/create.js.map +1 -1
  441. package/out/zero-cache/src/db/delete-lite-db.js +9 -6
  442. package/out/zero-cache/src/db/delete-lite-db.js.map +1 -1
  443. package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
  444. package/out/zero-cache/src/db/lite-tables.js +150 -174
  445. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  446. package/out/zero-cache/src/db/migration-lite.js +170 -165
  447. package/out/zero-cache/src/db/migration-lite.js.map +1 -1
  448. package/out/zero-cache/src/db/migration.js +157 -137
  449. package/out/zero-cache/src/db/migration.js.map +1 -1
  450. package/out/zero-cache/src/db/mode-enum.d.ts +2 -0
  451. package/out/zero-cache/src/db/mode-enum.d.ts.map +1 -1
  452. package/out/zero-cache/src/db/mode-enum.js +9 -3
  453. package/out/zero-cache/src/db/mode-enum.js.map +1 -1
  454. package/out/zero-cache/src/db/pg-copy.js +51 -90
  455. package/out/zero-cache/src/db/pg-copy.js.map +1 -1
  456. package/out/zero-cache/src/db/pg-to-lite.d.ts +10 -0
  457. package/out/zero-cache/src/db/pg-to-lite.d.ts.map +1 -1
  458. package/out/zero-cache/src/db/pg-to-lite.js +116 -97
  459. package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
  460. package/out/zero-cache/src/db/pg-type-parser.js +27 -39
  461. package/out/zero-cache/src/db/pg-type-parser.js.map +1 -1
  462. package/out/zero-cache/src/db/postgres-replica-identity-enum.js +11 -6
  463. package/out/zero-cache/src/db/postgres-replica-identity-enum.js.map +1 -1
  464. package/out/zero-cache/src/db/postgres-type-class-enum.js +17 -9
  465. package/out/zero-cache/src/db/postgres-type-class-enum.js.map +1 -1
  466. package/out/zero-cache/src/db/specs.d.ts +1 -7
  467. package/out/zero-cache/src/db/specs.d.ts.map +1 -1
  468. package/out/zero-cache/src/db/specs.js +66 -40
  469. package/out/zero-cache/src/db/specs.js.map +1 -1
  470. package/out/zero-cache/src/db/statements.d.ts +1 -1
  471. package/out/zero-cache/src/db/statements.d.ts.map +1 -1
  472. package/out/zero-cache/src/db/statements.js +59 -52
  473. package/out/zero-cache/src/db/statements.js.map +1 -1
  474. package/out/zero-cache/src/db/transaction-pool.d.ts +1 -1
  475. package/out/zero-cache/src/db/transaction-pool.d.ts.map +1 -1
  476. package/out/zero-cache/src/db/transaction-pool.js +372 -501
  477. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  478. package/out/zero-cache/src/db/warmup.js +25 -12
  479. package/out/zero-cache/src/db/warmup.js.map +1 -1
  480. package/out/zero-cache/src/observability/events.js +71 -82
  481. package/out/zero-cache/src/observability/events.js.map +1 -1
  482. package/out/zero-cache/src/observability/metrics.js +54 -32
  483. package/out/zero-cache/src/observability/metrics.js.map +1 -1
  484. package/out/zero-cache/src/scripts/decommission.js +47 -43
  485. package/out/zero-cache/src/scripts/decommission.js.map +1 -1
  486. package/out/zero-cache/src/scripts/deploy-permissions.js +128 -118
  487. package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
  488. package/out/zero-cache/src/scripts/permissions.d.ts +1 -1
  489. package/out/zero-cache/src/scripts/permissions.d.ts.map +1 -1
  490. package/out/zero-cache/src/scripts/permissions.js +108 -100
  491. package/out/zero-cache/src/scripts/permissions.js.map +1 -1
  492. package/out/zero-cache/src/server/anonymous-otel-start.d.ts +10 -1
  493. package/out/zero-cache/src/server/anonymous-otel-start.d.ts.map +1 -1
  494. package/out/zero-cache/src/server/anonymous-otel-start.js +426 -366
  495. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
  496. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  497. package/out/zero-cache/src/server/change-streamer.js +99 -64
  498. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  499. package/out/zero-cache/src/server/inspector-delegate.js +112 -109
  500. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  501. package/out/zero-cache/src/server/logging.d.ts +1 -1
  502. package/out/zero-cache/src/server/logging.d.ts.map +1 -1
  503. package/out/zero-cache/src/server/logging.js +26 -19
  504. package/out/zero-cache/src/server/logging.js.map +1 -1
  505. package/out/zero-cache/src/server/main.d.ts.map +1 -1
  506. package/out/zero-cache/src/server/main.js +137 -120
  507. package/out/zero-cache/src/server/main.js.map +1 -1
  508. package/out/zero-cache/src/server/mutator.js +19 -0
  509. package/out/zero-cache/src/server/mutator.js.map +1 -0
  510. package/out/zero-cache/src/server/otel-diag-logger.d.ts +1 -1
  511. package/out/zero-cache/src/server/otel-diag-logger.d.ts.map +1 -1
  512. package/out/zero-cache/src/server/otel-diag-logger.js +48 -71
  513. package/out/zero-cache/src/server/otel-diag-logger.js.map +1 -1
  514. package/out/zero-cache/src/server/otel-log-sink.js +40 -41
  515. package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
  516. package/out/zero-cache/src/server/otel-start.d.ts +1 -1
  517. package/out/zero-cache/src/server/otel-start.d.ts.map +1 -1
  518. package/out/zero-cache/src/server/otel-start.js +53 -68
  519. package/out/zero-cache/src/server/otel-start.js.map +1 -1
  520. package/out/zero-cache/src/server/reaper.js +34 -26
  521. package/out/zero-cache/src/server/reaper.js.map +1 -1
  522. package/out/zero-cache/src/server/replicator.js +53 -31
  523. package/out/zero-cache/src/server/replicator.js.map +1 -1
  524. package/out/zero-cache/src/server/runner/main.js +6 -4
  525. package/out/zero-cache/src/server/runner/main.js.map +1 -1
  526. package/out/zero-cache/src/server/runner/run-worker.d.ts.map +1 -1
  527. package/out/zero-cache/src/server/runner/run-worker.js +46 -50
  528. package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
  529. package/out/zero-cache/src/server/runner/runtime.js +33 -32
  530. package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
  531. package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts.map +1 -1
  532. package/out/zero-cache/src/server/runner/zero-dispatcher.js +28 -22
  533. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  534. package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
  535. package/out/zero-cache/src/server/syncer.js +130 -63
  536. package/out/zero-cache/src/server/syncer.js.map +1 -1
  537. package/out/zero-cache/src/server/worker-dispatcher.d.ts +1 -1
  538. package/out/zero-cache/src/server/worker-dispatcher.d.ts.map +1 -1
  539. package/out/zero-cache/src/server/worker-dispatcher.js +112 -106
  540. package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
  541. package/out/zero-cache/src/server/worker-urls.d.ts +7 -0
  542. package/out/zero-cache/src/server/worker-urls.d.ts.map +1 -0
  543. package/out/zero-cache/src/server/worker-urls.js +21 -0
  544. package/out/zero-cache/src/server/worker-urls.js.map +1 -0
  545. package/out/zero-cache/src/services/analyze.d.ts +4 -9
  546. package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
  547. package/out/zero-cache/src/services/analyze.js +118 -121
  548. package/out/zero-cache/src/services/analyze.js.map +1 -1
  549. package/out/zero-cache/src/services/change-source/column-metadata.d.ts +10 -3
  550. package/out/zero-cache/src/services/change-source/column-metadata.d.ts.map +1 -1
  551. package/out/zero-cache/src/services/change-source/column-metadata.js +154 -144
  552. package/out/zero-cache/src/services/change-source/column-metadata.js.map +1 -1
  553. package/out/zero-cache/src/services/change-source/custom/change-source.d.ts +1 -1
  554. package/out/zero-cache/src/services/change-source/custom/change-source.d.ts.map +1 -1
  555. package/out/zero-cache/src/services/change-source/custom/change-source.js +197 -171
  556. package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
  557. package/out/zero-cache/src/services/change-source/custom/sync-schema.js +11 -3
  558. package/out/zero-cache/src/services/change-source/custom/sync-schema.js.map +1 -1
  559. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +1 -1
  560. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  561. package/out/zero-cache/src/services/change-source/pg/change-source.js +622 -623
  562. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  563. package/out/zero-cache/src/services/change-source/pg/decommission.js +24 -23
  564. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
  565. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +1 -1
  566. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
  567. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +327 -284
  568. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  569. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts +2 -3
  570. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.d.ts.map +1 -1
  571. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js +61 -69
  572. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
  573. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js +247 -257
  574. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
  575. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +127 -119
  576. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
  577. package/out/zero-cache/src/services/change-source/pg/lsn.js +20 -19
  578. package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
  579. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +5 -5
  580. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +96 -119
  581. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  582. package/out/zero-cache/src/services/change-source/pg/schema/init.js +138 -117
  583. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  584. package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts +2 -2
  585. package/out/zero-cache/src/services/change-source/pg/schema/published.js +67 -74
  586. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
  587. package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +1 -1
  588. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +199 -188
  589. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  590. package/out/zero-cache/src/services/change-source/pg/schema/validation.js +53 -38
  591. package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
  592. package/out/zero-cache/src/services/change-source/pg/sync-schema.js +11 -3
  593. package/out/zero-cache/src/services/change-source/pg/sync-schema.js.map +1 -1
  594. package/out/zero-cache/src/services/change-source/protocol/current/control.d.ts +1 -0
  595. package/out/zero-cache/src/services/change-source/protocol/current/control.d.ts.map +1 -1
  596. package/out/zero-cache/src/services/change-source/protocol/current/control.js +13 -19
  597. package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
  598. package/out/zero-cache/src/services/change-source/protocol/current/data.js +143 -116
  599. package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
  600. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +2 -0
  601. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
  602. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js +29 -19
  603. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
  604. package/out/zero-cache/src/services/change-source/protocol/current/json.d.ts +8 -0
  605. package/out/zero-cache/src/services/change-source/protocol/current/json.d.ts.map +1 -0
  606. package/out/zero-cache/src/services/change-source/protocol/current/json.js +19 -0
  607. package/out/zero-cache/src/services/change-source/protocol/current/json.js.map +1 -0
  608. package/out/zero-cache/src/services/change-source/protocol/current/path.js +5 -20
  609. package/out/zero-cache/src/services/change-source/protocol/current/path.js.map +1 -1
  610. package/out/zero-cache/src/services/change-source/protocol/current/status.js +12 -13
  611. package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
  612. package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts +1 -1
  613. package/out/zero-cache/src/services/change-source/protocol/current/upstream.d.ts.map +1 -1
  614. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js +5 -4
  615. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
  616. package/out/zero-cache/src/services/change-source/protocol/current.d.ts +1 -0
  617. package/out/zero-cache/src/services/change-source/protocol/current.d.ts.map +1 -1
  618. package/out/zero-cache/src/services/change-source/protocol/current.js +38 -7
  619. package/out/zero-cache/src/services/change-source/protocol/current.js.map +1 -1
  620. package/out/zero-cache/src/services/change-source/replica-schema.d.ts.map +1 -1
  621. package/out/zero-cache/src/services/change-source/replica-schema.js +67 -37
  622. package/out/zero-cache/src/services/change-source/replica-schema.js.map +1 -1
  623. package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts +1 -1
  624. package/out/zero-cache/src/services/change-streamer/backup-monitor.d.ts.map +1 -1
  625. package/out/zero-cache/src/services/change-streamer/backup-monitor.js +139 -157
  626. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  627. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +11 -4
  628. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  629. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +208 -157
  630. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  631. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +1 -1
  632. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  633. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +242 -349
  634. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  635. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +5 -1
  636. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
  637. package/out/zero-cache/src/services/change-streamer/change-streamer.js +24 -22
  638. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  639. package/out/zero-cache/src/services/change-streamer/error-type-enum.js +9 -4
  640. package/out/zero-cache/src/services/change-streamer/error-type-enum.js.map +1 -1
  641. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +1 -1
  642. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +1 -1
  643. package/out/zero-cache/src/services/change-streamer/forwarder.js +53 -57
  644. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  645. package/out/zero-cache/src/services/change-streamer/replica-monitor.d.ts +16 -0
  646. package/out/zero-cache/src/services/change-streamer/replica-monitor.d.ts.map +1 -0
  647. package/out/zero-cache/src/services/change-streamer/replica-monitor.js +48 -0
  648. package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -0
  649. package/out/zero-cache/src/services/change-streamer/schema/init.js +82 -68
  650. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  651. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +2 -2
  652. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
  653. package/out/zero-cache/src/services/change-streamer/schema/tables.js +93 -78
  654. package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
  655. package/out/zero-cache/src/services/change-streamer/snapshot.d.ts +58 -0
  656. package/out/zero-cache/src/services/change-streamer/snapshot.d.ts.map +1 -1
  657. package/out/zero-cache/src/services/change-streamer/snapshot.js +28 -18
  658. package/out/zero-cache/src/services/change-streamer/snapshot.js.map +1 -1
  659. package/out/zero-cache/src/services/change-streamer/storer.d.ts +3 -2
  660. package/out/zero-cache/src/services/change-streamer/storer.d.ts.map +1 -1
  661. package/out/zero-cache/src/services/change-streamer/storer.js +308 -353
  662. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  663. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +3 -2
  664. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
  665. package/out/zero-cache/src/services/change-streamer/subscriber.js +85 -87
  666. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  667. package/out/zero-cache/src/services/heapz.js +21 -25
  668. package/out/zero-cache/src/services/heapz.js.map +1 -1
  669. package/out/zero-cache/src/services/http-service.d.ts +5 -5
  670. package/out/zero-cache/src/services/http-service.d.ts.map +1 -1
  671. package/out/zero-cache/src/services/http-service.js +57 -59
  672. package/out/zero-cache/src/services/http-service.js.map +1 -1
  673. package/out/zero-cache/src/services/life-cycle.d.ts +1 -1
  674. package/out/zero-cache/src/services/life-cycle.d.ts.map +1 -1
  675. package/out/zero-cache/src/services/life-cycle.js +216 -255
  676. package/out/zero-cache/src/services/life-cycle.js.map +1 -1
  677. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +76 -130
  678. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
  679. package/out/zero-cache/src/services/litestream/commands.d.ts +1 -1
  680. package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
  681. package/out/zero-cache/src/services/litestream/commands.js +202 -154
  682. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  683. package/out/zero-cache/src/services/mutagen/error.js +11 -6
  684. package/out/zero-cache/src/services/mutagen/error.js.map +1 -1
  685. package/out/zero-cache/src/services/mutagen/mutagen.d.ts +2 -1
  686. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  687. package/out/zero-cache/src/services/mutagen/mutagen.js +271 -267
  688. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  689. package/out/zero-cache/src/services/mutagen/pusher.d.ts +202 -2
  690. package/out/zero-cache/src/services/mutagen/pusher.d.ts.map +1 -1
  691. package/out/zero-cache/src/services/mutagen/pusher.js +354 -348
  692. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  693. package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
  694. package/out/zero-cache/src/services/replicator/change-processor.js +483 -497
  695. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  696. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +1 -1
  697. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  698. package/out/zero-cache/src/services/replicator/incremental-sync.js +97 -97
  699. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  700. package/out/zero-cache/src/services/replicator/notifier.js +28 -52
  701. package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
  702. package/out/zero-cache/src/services/replicator/replication-status.d.ts +2 -0
  703. package/out/zero-cache/src/services/replicator/replication-status.d.ts.map +1 -1
  704. package/out/zero-cache/src/services/replicator/replication-status.js +113 -83
  705. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  706. package/out/zero-cache/src/services/replicator/replicator.d.ts +1 -1
  707. package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
  708. package/out/zero-cache/src/services/replicator/replicator.js +33 -26
  709. package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
  710. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts +1 -1
  711. package/out/zero-cache/src/services/replicator/schema/change-log.d.ts.map +1 -1
  712. package/out/zero-cache/src/services/replicator/schema/change-log.js +74 -86
  713. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  714. package/out/zero-cache/src/services/replicator/schema/constants.js +5 -7
  715. package/out/zero-cache/src/services/replicator/schema/constants.js.map +1 -1
  716. package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts +2 -2
  717. package/out/zero-cache/src/services/replicator/schema/replication-state.d.ts.map +1 -1
  718. package/out/zero-cache/src/services/replicator/schema/replication-state.js +70 -74
  719. package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
  720. package/out/zero-cache/src/services/run-ast.d.ts +9 -3
  721. package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
  722. package/out/zero-cache/src/services/run-ast.js +91 -78
  723. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  724. package/out/zero-cache/src/services/runner.d.ts +1 -1
  725. package/out/zero-cache/src/services/runner.d.ts.map +1 -1
  726. package/out/zero-cache/src/services/runner.js +40 -40
  727. package/out/zero-cache/src/services/runner.js.map +1 -1
  728. package/out/zero-cache/src/services/running-state.d.ts +1 -1
  729. package/out/zero-cache/src/services/running-state.d.ts.map +1 -1
  730. package/out/zero-cache/src/services/running-state.js +122 -119
  731. package/out/zero-cache/src/services/running-state.js.map +1 -1
  732. package/out/zero-cache/src/services/statz.js +184 -162
  733. package/out/zero-cache/src/services/statz.js.map +1 -1
  734. package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts +2 -1
  735. package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts.map +1 -1
  736. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +56 -42
  737. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
  738. package/out/zero-cache/src/services/view-syncer/client-handler.js +307 -298
  739. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  740. package/out/zero-cache/src/services/view-syncer/client-schema.d.ts.map +1 -1
  741. package/out/zero-cache/src/services/view-syncer/client-schema.js +80 -82
  742. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  743. package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts +1 -1
  744. package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +1 -1
  745. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +110 -96
  746. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
  747. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +6 -5
  748. package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
  749. package/out/zero-cache/src/services/view-syncer/cvr-store.js +676 -611
  750. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  751. package/out/zero-cache/src/services/view-syncer/cvr.d.ts +4 -1
  752. package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
  753. package/out/zero-cache/src/services/view-syncer/cvr.js +643 -694
  754. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  755. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +38 -60
  756. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  757. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts +2 -1
  758. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +1 -1
  759. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +175 -85
  760. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  761. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +23 -22
  762. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  763. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +584 -461
  764. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  765. package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts +1 -1
  766. package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts.map +1 -1
  767. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +229 -277
  768. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  769. package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts +1 -0
  770. package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +1 -1
  771. package/out/zero-cache/src/services/view-syncer/schema/cvr.js +79 -131
  772. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
  773. package/out/zero-cache/src/services/view-syncer/schema/init.d.ts.map +1 -1
  774. package/out/zero-cache/src/services/view-syncer/schema/init.js +207 -131
  775. package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
  776. package/out/zero-cache/src/services/view-syncer/schema/types.d.ts +4 -4
  777. package/out/zero-cache/src/services/view-syncer/schema/types.js +265 -257
  778. package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
  779. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +5 -5
  780. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
  781. package/out/zero-cache/src/services/view-syncer/snapshotter.js +309 -337
  782. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  783. package/out/zero-cache/src/services/view-syncer/ttl-clock.js +13 -7
  784. package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
  785. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +5 -4
  786. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  787. package/out/zero-cache/src/services/view-syncer/view-syncer.js +1514 -1311
  788. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  789. package/out/zero-cache/src/types/error-with-level.d.ts.map +1 -1
  790. package/out/zero-cache/src/types/error-with-level.js +30 -21
  791. package/out/zero-cache/src/types/error-with-level.js.map +1 -1
  792. package/out/zero-cache/src/types/http.js +27 -14
  793. package/out/zero-cache/src/types/http.js.map +1 -1
  794. package/out/zero-cache/src/types/lexi-version.js +46 -31
  795. package/out/zero-cache/src/types/lexi-version.js.map +1 -1
  796. package/out/zero-cache/src/types/lite.js +118 -125
  797. package/out/zero-cache/src/types/lite.js.map +1 -1
  798. package/out/zero-cache/src/types/names.js +6 -3
  799. package/out/zero-cache/src/types/names.js.map +1 -1
  800. package/out/zero-cache/src/types/pg-data-type.js +74 -68
  801. package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
  802. package/out/zero-cache/src/types/pg-types.js +17 -72
  803. package/out/zero-cache/src/types/pg-types.js.map +1 -1
  804. package/out/zero-cache/src/types/pg.d.ts +1 -1
  805. package/out/zero-cache/src/types/pg.d.ts.map +1 -1
  806. package/out/zero-cache/src/types/pg.js +213 -233
  807. package/out/zero-cache/src/types/pg.js.map +1 -1
  808. package/out/zero-cache/src/types/processes.d.ts +2 -2
  809. package/out/zero-cache/src/types/processes.d.ts.map +1 -1
  810. package/out/zero-cache/src/types/processes.js +95 -143
  811. package/out/zero-cache/src/types/processes.js.map +1 -1
  812. package/out/zero-cache/src/types/profiler.js +29 -30
  813. package/out/zero-cache/src/types/profiler.js.map +1 -1
  814. package/out/zero-cache/src/types/row-key.js +30 -68
  815. package/out/zero-cache/src/types/row-key.js.map +1 -1
  816. package/out/zero-cache/src/types/schema-versions.js +25 -19
  817. package/out/zero-cache/src/types/schema-versions.js.map +1 -1
  818. package/out/zero-cache/src/types/shards.js +50 -36
  819. package/out/zero-cache/src/types/shards.js.map +1 -1
  820. package/out/zero-cache/src/types/sql.js +9 -13
  821. package/out/zero-cache/src/types/sql.js.map +1 -1
  822. package/out/zero-cache/src/types/streams.js +245 -254
  823. package/out/zero-cache/src/types/streams.js.map +1 -1
  824. package/out/zero-cache/src/types/strings.js +14 -11
  825. package/out/zero-cache/src/types/strings.js.map +1 -1
  826. package/out/zero-cache/src/types/subscription.js +200 -259
  827. package/out/zero-cache/src/types/subscription.js.map +1 -1
  828. package/out/zero-cache/src/types/url-params.js +35 -30
  829. package/out/zero-cache/src/types/url-params.js.map +1 -1
  830. package/out/zero-cache/src/types/websocket-handoff.d.ts +5 -4
  831. package/out/zero-cache/src/types/websocket-handoff.d.ts.map +1 -1
  832. package/out/zero-cache/src/types/websocket-handoff.js +68 -76
  833. package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
  834. package/out/zero-cache/src/types/ws.js +56 -59
  835. package/out/zero-cache/src/types/ws.js.map +1 -1
  836. package/out/zero-cache/src/workers/connect-params.d.ts +1 -0
  837. package/out/zero-cache/src/workers/connect-params.d.ts.map +1 -1
  838. package/out/zero-cache/src/workers/connect-params.js +46 -40
  839. package/out/zero-cache/src/workers/connect-params.js.map +1 -1
  840. package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
  841. package/out/zero-cache/src/workers/connection.js +282 -243
  842. package/out/zero-cache/src/workers/connection.js.map +1 -1
  843. package/out/zero-cache/src/workers/mutator.js +24 -0
  844. package/out/zero-cache/src/workers/mutator.js.map +1 -0
  845. package/out/zero-cache/src/workers/replicator.d.ts +1 -1
  846. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  847. package/out/zero-cache/src/workers/replicator.js +103 -106
  848. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  849. package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +1 -1
  850. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +181 -147
  851. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  852. package/out/zero-cache/src/workers/syncer.d.ts +3 -3
  853. package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
  854. package/out/zero-cache/src/workers/syncer.js +192 -169
  855. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  856. package/out/zero-client/src/client/active-clients-manager.js +199 -0
  857. package/out/zero-client/src/client/active-clients-manager.js.map +1 -0
  858. package/out/zero-client/src/client/bindings.d.ts +13 -0
  859. package/out/zero-client/src/client/bindings.d.ts.map +1 -0
  860. package/out/zero-client/src/client/client-error-kind-enum.d.ts +12 -12
  861. package/out/zero-client/src/client/client-error-kind-enum.d.ts.map +1 -1
  862. package/out/zero-client/src/client/client-error-kind-enum.js +29 -0
  863. package/out/zero-client/src/client/client-error-kind-enum.js.map +1 -0
  864. package/out/zero-client/src/client/connection-manager.d.ts +20 -40
  865. package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
  866. package/out/zero-client/src/client/connection-manager.js +310 -0
  867. package/out/zero-client/src/client/connection-manager.js.map +1 -0
  868. package/out/zero-client/src/client/connection-status-enum.js +15 -0
  869. package/out/zero-client/src/client/connection-status-enum.js.map +1 -0
  870. package/out/zero-client/src/client/connection.d.ts +47 -4
  871. package/out/zero-client/src/client/connection.d.ts.map +1 -1
  872. package/out/zero-client/src/client/connection.js +110 -0
  873. package/out/zero-client/src/client/connection.js.map +1 -0
  874. package/out/zero-client/src/client/context.d.ts +9 -10
  875. package/out/zero-client/src/client/context.d.ts.map +1 -1
  876. package/out/zero-client/src/client/context.js +104 -0
  877. package/out/zero-client/src/client/context.js.map +1 -0
  878. package/out/zero-client/src/client/crud-impl.d.ts +11 -0
  879. package/out/zero-client/src/client/crud-impl.d.ts.map +1 -0
  880. package/out/zero-client/src/client/crud-impl.js +102 -0
  881. package/out/zero-client/src/client/crud-impl.js.map +1 -0
  882. package/out/zero-client/src/client/crud.d.ts +15 -46
  883. package/out/zero-client/src/client/crud.d.ts.map +1 -1
  884. package/out/zero-client/src/client/crud.js +139 -0
  885. package/out/zero-client/src/client/crud.js.map +1 -0
  886. package/out/zero-client/src/client/custom.d.ts +51 -25
  887. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  888. package/out/zero-client/src/client/custom.js +87 -0
  889. package/out/zero-client/src/client/custom.js.map +1 -0
  890. package/out/zero-client/src/client/delete-clients-manager.d.ts +2 -2
  891. package/out/zero-client/src/client/delete-clients-manager.d.ts.map +1 -1
  892. package/out/zero-client/src/client/delete-clients-manager.js +98 -0
  893. package/out/zero-client/src/client/delete-clients-manager.js.map +1 -0
  894. package/out/zero-client/src/client/enable-analytics.js +18 -0
  895. package/out/zero-client/src/client/enable-analytics.js.map +1 -0
  896. package/out/zero-client/src/client/error.d.ts +30 -12
  897. package/out/zero-client/src/client/error.d.ts.map +1 -1
  898. package/out/zero-client/src/client/error.js +148 -0
  899. package/out/zero-client/src/client/error.js.map +1 -0
  900. package/out/zero-client/src/client/http-string.js +11 -0
  901. package/out/zero-client/src/client/http-string.js.map +1 -0
  902. package/out/zero-client/src/client/inspector/client-group.js +27 -0
  903. package/out/zero-client/src/client/inspector/client-group.js.map +1 -0
  904. package/out/zero-client/src/client/inspector/client.js +28 -0
  905. package/out/zero-client/src/client/inspector/client.js.map +1 -0
  906. package/out/zero-client/src/client/inspector/html-dialog-prompt.d.ts.map +1 -1
  907. package/out/zero-client/src/client/inspector/html-dialog-prompt.js +77 -0
  908. package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -0
  909. package/out/zero-client/src/client/inspector/inspector.d.ts +8 -3
  910. package/out/zero-client/src/client/inspector/inspector.d.ts.map +1 -1
  911. package/out/zero-client/src/client/inspector/inspector.js +54 -0
  912. package/out/zero-client/src/client/inspector/inspector.js.map +1 -0
  913. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts +4 -1
  914. package/out/zero-client/src/client/inspector/lazy-inspector.d.ts.map +1 -1
  915. package/out/zero-client/src/client/inspector/lazy-inspector.js +243 -0
  916. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -0
  917. package/out/zero-client/src/client/inspector/query.d.ts.map +1 -1
  918. package/out/zero-client/src/client/inspector/query.js +82 -0
  919. package/out/zero-client/src/client/inspector/query.js.map +1 -0
  920. package/out/zero-client/src/client/ivm-branch.d.ts +4 -4
  921. package/out/zero-client/src/client/ivm-branch.d.ts.map +1 -1
  922. package/out/zero-client/src/client/ivm-branch.js +156 -0
  923. package/out/zero-client/src/client/ivm-branch.js.map +1 -0
  924. package/out/zero-client/src/client/keys.js +45 -0
  925. package/out/zero-client/src/client/keys.js.map +1 -0
  926. package/out/zero-client/src/client/log-options.js +60 -0
  927. package/out/zero-client/src/client/log-options.js.map +1 -0
  928. package/out/zero-client/src/client/make-mutate-property.d.ts +40 -0
  929. package/out/zero-client/src/client/make-mutate-property.d.ts.map +1 -0
  930. package/out/zero-client/src/client/make-mutate-property.js +33 -0
  931. package/out/zero-client/src/client/make-mutate-property.js.map +1 -0
  932. package/out/zero-client/src/client/make-replicache-mutators.d.ts +34 -0
  933. package/out/zero-client/src/client/make-replicache-mutators.d.ts.map +1 -0
  934. package/out/zero-client/src/client/make-replicache-mutators.js +108 -0
  935. package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -0
  936. package/out/zero-client/src/client/metric-name-enum.js +15 -0
  937. package/out/zero-client/src/client/metric-name-enum.js.map +1 -0
  938. package/out/zero-client/src/client/metrics.d.ts +2 -2
  939. package/out/zero-client/src/client/metrics.d.ts.map +1 -1
  940. package/out/zero-client/src/client/metrics.js +249 -0
  941. package/out/zero-client/src/client/metrics.js.map +1 -0
  942. package/out/zero-client/src/client/mutation-tracker.d.ts +12 -4
  943. package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
  944. package/out/zero-client/src/client/mutation-tracker.js +363 -0
  945. package/out/zero-client/src/client/mutation-tracker.js.map +1 -0
  946. package/out/zero-client/src/client/mutator-proxy.d.ts +16 -0
  947. package/out/zero-client/src/client/mutator-proxy.d.ts.map +1 -0
  948. package/out/zero-client/src/client/mutator-proxy.js +144 -0
  949. package/out/zero-client/src/client/mutator-proxy.js.map +1 -0
  950. package/out/zero-client/src/client/options.d.ts +70 -10
  951. package/out/zero-client/src/client/options.d.ts.map +1 -1
  952. package/out/zero-client/src/client/options.js +11 -0
  953. package/out/zero-client/src/client/options.js.map +1 -0
  954. package/out/zero-client/src/client/query-manager.d.ts +9 -2
  955. package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
  956. package/out/zero-client/src/client/query-manager.js +377 -0
  957. package/out/zero-client/src/client/query-manager.js.map +1 -0
  958. package/out/zero-client/src/client/reload-error-handler.d.ts +4 -4
  959. package/out/zero-client/src/client/reload-error-handler.d.ts.map +1 -1
  960. package/out/zero-client/src/client/reload-error-handler.js +114 -0
  961. package/out/zero-client/src/client/reload-error-handler.js.map +1 -0
  962. package/out/zero-client/src/client/server-option.js +64 -0
  963. package/out/zero-client/src/client/server-option.js.map +1 -0
  964. package/out/zero-client/src/client/update-needed-reason-type-enum.js +9 -0
  965. package/out/zero-client/src/client/update-needed-reason-type-enum.js.map +1 -0
  966. package/out/zero-client/src/client/version.js +5 -0
  967. package/out/zero-client/src/client/version.js.map +1 -0
  968. package/out/zero-client/src/client/zero-poke-handler.d.ts +4 -4
  969. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  970. package/out/zero-client/src/client/zero-poke-handler.js +303 -0
  971. package/out/zero-client/src/client/zero-poke-handler.js.map +1 -0
  972. package/out/zero-client/src/client/zero-rep.d.ts +3 -2
  973. package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
  974. package/out/zero-client/src/client/zero-rep.js +72 -0
  975. package/out/zero-client/src/client/zero-rep.js.map +1 -0
  976. package/out/zero-client/src/client/zero.d.ts +106 -26
  977. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  978. package/out/zero-client/src/client/zero.js +1787 -0
  979. package/out/zero-client/src/client/zero.js.map +1 -0
  980. package/out/zero-client/src/mod.d.ts +24 -20
  981. package/out/zero-client/src/mod.d.ts.map +1 -1
  982. package/out/zero-client/src/types/query-result.d.ts +5 -4
  983. package/out/zero-client/src/types/query-result.d.ts.map +1 -1
  984. package/out/zero-client/src/util/nanoid.js +21 -0
  985. package/out/zero-client/src/util/nanoid.js.map +1 -0
  986. package/out/zero-client/src/util/socket.js +7 -0
  987. package/out/zero-client/src/util/socket.js.map +1 -0
  988. package/out/zero-events/src/status.d.ts +1 -1
  989. package/out/zero-events/src/status.d.ts.map +1 -1
  990. package/out/zero-protocol/src/analyze-query-result.d.ts +238 -1
  991. package/out/zero-protocol/src/analyze-query-result.d.ts.map +1 -1
  992. package/out/zero-protocol/src/analyze-query-result.js +159 -24
  993. package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
  994. package/out/zero-protocol/src/application-error.d.ts +2 -8
  995. package/out/zero-protocol/src/application-error.d.ts.map +1 -1
  996. package/out/zero-protocol/src/application-error.js +35 -34
  997. package/out/zero-protocol/src/application-error.js.map +1 -1
  998. package/out/zero-protocol/src/ast.d.ts +2 -2
  999. package/out/zero-protocol/src/ast.js +296 -277
  1000. package/out/zero-protocol/src/ast.js.map +1 -1
  1001. package/out/zero-protocol/src/change-desired-queries.d.ts +2 -2
  1002. package/out/zero-protocol/src/change-desired-queries.js +11 -7
  1003. package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
  1004. package/out/zero-protocol/src/client-schema.d.ts +2 -2
  1005. package/out/zero-protocol/src/client-schema.d.ts.map +1 -1
  1006. package/out/zero-protocol/src/client-schema.js +40 -26
  1007. package/out/zero-protocol/src/client-schema.js.map +1 -1
  1008. package/out/zero-protocol/src/close-connection.js +11 -18
  1009. package/out/zero-protocol/src/close-connection.js.map +1 -1
  1010. package/out/zero-protocol/src/connect.d.ts +4 -4
  1011. package/out/zero-protocol/src/connect.d.ts.map +1 -1
  1012. package/out/zero-protocol/src/connect.js +50 -51
  1013. package/out/zero-protocol/src/connect.js.map +1 -1
  1014. package/out/zero-protocol/src/custom-queries.d.ts +4 -4
  1015. package/out/zero-protocol/src/custom-queries.js +61 -39
  1016. package/out/zero-protocol/src/custom-queries.js.map +1 -1
  1017. package/out/zero-protocol/src/data.js +9 -4
  1018. package/out/zero-protocol/src/data.js.map +1 -1
  1019. package/out/zero-protocol/src/delete-clients.js +16 -9
  1020. package/out/zero-protocol/src/delete-clients.js.map +1 -1
  1021. package/out/zero-protocol/src/down.d.ts +107 -7
  1022. package/out/zero-protocol/src/down.d.ts.map +1 -1
  1023. package/out/zero-protocol/src/down.js +20 -4
  1024. package/out/zero-protocol/src/down.js.map +1 -1
  1025. package/out/zero-protocol/src/error-kind-enum.js +41 -23
  1026. package/out/zero-protocol/src/error-kind-enum.js.map +1 -1
  1027. package/out/zero-protocol/src/error-origin-enum.js +9 -4
  1028. package/out/zero-protocol/src/error-origin-enum.js.map +1 -1
  1029. package/out/zero-protocol/src/error-reason-enum.js +17 -8
  1030. package/out/zero-protocol/src/error-reason-enum.js.map +1 -1
  1031. package/out/zero-protocol/src/error.d.ts +17 -17
  1032. package/out/zero-protocol/src/error.js +151 -89
  1033. package/out/zero-protocol/src/error.js.map +1 -1
  1034. package/out/zero-protocol/src/inspect-down.d.ts +321 -21
  1035. package/out/zero-protocol/src/inspect-down.d.ts.map +1 -1
  1036. package/out/zero-protocol/src/inspect-down.js +72 -54
  1037. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  1038. package/out/zero-protocol/src/inspect-up.d.ts +10 -6
  1039. package/out/zero-protocol/src/inspect-up.d.ts.map +1 -1
  1040. package/out/zero-protocol/src/inspect-up.js +39 -26
  1041. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  1042. package/out/zero-protocol/src/mutation-id.js +9 -5
  1043. package/out/zero-protocol/src/mutation-id.js.map +1 -1
  1044. package/out/zero-protocol/src/mutation-type-enum.js +7 -3
  1045. package/out/zero-protocol/src/mutation-type-enum.js.map +1 -1
  1046. package/out/zero-protocol/src/mutations-patch.js +16 -17
  1047. package/out/zero-protocol/src/mutations-patch.js.map +1 -1
  1048. package/out/zero-protocol/src/ping.js +9 -4
  1049. package/out/zero-protocol/src/ping.js.map +1 -1
  1050. package/out/zero-protocol/src/poke.js +55 -72
  1051. package/out/zero-protocol/src/poke.js.map +1 -1
  1052. package/out/zero-protocol/src/pong.js +9 -4
  1053. package/out/zero-protocol/src/pong.js.map +1 -1
  1054. package/out/zero-protocol/src/primary-key.js +19 -5
  1055. package/out/zero-protocol/src/primary-key.js.map +1 -1
  1056. package/out/zero-protocol/src/protocol-version.d.ts +2 -2
  1057. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  1058. package/out/zero-protocol/src/protocol-version.js +7 -58
  1059. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  1060. package/out/zero-protocol/src/pull.js +26 -19
  1061. package/out/zero-protocol/src/pull.js.map +1 -1
  1062. package/out/zero-protocol/src/push.d.ts +4 -4
  1063. package/out/zero-protocol/src/push.js +179 -176
  1064. package/out/zero-protocol/src/push.js.map +1 -1
  1065. package/out/zero-protocol/src/queries-patch.d.ts +3 -3
  1066. package/out/zero-protocol/src/queries-patch.js +29 -22
  1067. package/out/zero-protocol/src/queries-patch.js.map +1 -1
  1068. package/out/zero-protocol/src/query-hash.js +18 -14
  1069. package/out/zero-protocol/src/query-hash.js.map +1 -1
  1070. package/out/zero-protocol/src/row-patch.js +29 -20
  1071. package/out/zero-protocol/src/row-patch.js.map +1 -1
  1072. package/out/zero-protocol/src/up.d.ts +6 -5
  1073. package/out/zero-protocol/src/up.d.ts.map +1 -1
  1074. package/out/zero-protocol/src/up.js +18 -4
  1075. package/out/zero-protocol/src/up.js.map +1 -1
  1076. package/out/zero-protocol/src/version.js +9 -4
  1077. package/out/zero-protocol/src/version.js.map +1 -1
  1078. package/out/zero-react/src/bindings.d.ts +2 -0
  1079. package/out/zero-react/src/bindings.d.ts.map +1 -0
  1080. package/out/zero-react/src/mod.d.ts +2 -13
  1081. package/out/zero-react/src/mod.d.ts.map +1 -1
  1082. package/out/zero-react/src/use-connection-state.d.ts +9 -0
  1083. package/out/zero-react/src/use-connection-state.d.ts.map +1 -0
  1084. package/out/zero-react/src/use-connection-state.js +14 -0
  1085. package/out/zero-react/src/use-connection-state.js.map +1 -0
  1086. package/out/zero-react/src/use-query.d.ts +5 -9
  1087. package/out/zero-react/src/use-query.d.ts.map +1 -1
  1088. package/out/zero-react/src/use-query.js +289 -0
  1089. package/out/zero-react/src/use-query.js.map +1 -0
  1090. package/out/zero-react/src/use-zero-online.d.ts +1 -1
  1091. package/out/zero-react/src/use-zero-online.js +14 -0
  1092. package/out/zero-react/src/use-zero-online.js.map +1 -0
  1093. package/out/zero-react/src/zero-provider.d.ts +19 -10
  1094. package/out/zero-react/src/zero-provider.d.ts.map +1 -1
  1095. package/out/zero-react/src/zero-provider.js +77 -0
  1096. package/out/zero-react/src/zero-provider.js.map +1 -0
  1097. package/out/zero-react/src/zero.d.ts +2 -0
  1098. package/out/zero-react/src/zero.d.ts.map +1 -0
  1099. package/out/zero-schema/src/builder/relationship-builder.js +22 -19
  1100. package/out/zero-schema/src/builder/relationship-builder.js.map +1 -1
  1101. package/out/zero-schema/src/builder/schema-builder.d.ts +1 -3
  1102. package/out/zero-schema/src/builder/schema-builder.d.ts.map +1 -1
  1103. package/out/zero-schema/src/builder/schema-builder.js +81 -71
  1104. package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
  1105. package/out/zero-schema/src/builder/table-builder.js +117 -116
  1106. package/out/zero-schema/src/builder/table-builder.js.map +1 -1
  1107. package/out/zero-schema/src/compiled-permissions.js +23 -19
  1108. package/out/zero-schema/src/compiled-permissions.js.map +1 -1
  1109. package/out/zero-schema/src/name-mapper.js +43 -38
  1110. package/out/zero-schema/src/name-mapper.js.map +1 -1
  1111. package/out/zero-schema/src/permissions.d.ts +12 -9
  1112. package/out/zero-schema/src/permissions.d.ts.map +1 -1
  1113. package/out/zero-schema/src/permissions.js +193 -0
  1114. package/out/zero-schema/src/permissions.js.map +1 -0
  1115. package/out/zero-schema/src/schema-config.d.ts +1 -1
  1116. package/out/zero-schema/src/schema-config.d.ts.map +1 -1
  1117. package/out/zero-schema/src/schema-config.js +35 -51
  1118. package/out/zero-schema/src/schema-config.js.map +1 -1
  1119. package/out/zero-server/src/adapters/drizzle.d.ts +2 -2
  1120. package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -1
  1121. package/out/zero-server/src/adapters/drizzle.js +84 -97
  1122. package/out/zero-server/src/adapters/drizzle.js.map +1 -1
  1123. package/out/zero-server/src/adapters/pg.d.ts +8 -2
  1124. package/out/zero-server/src/adapters/pg.d.ts.map +1 -1
  1125. package/out/zero-server/src/adapters/pg.js +54 -74
  1126. package/out/zero-server/src/adapters/pg.js.map +1 -1
  1127. package/out/zero-server/src/adapters/postgresjs.d.ts +7 -2
  1128. package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
  1129. package/out/zero-server/src/adapters/postgresjs.js +40 -54
  1130. package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
  1131. package/out/zero-server/src/custom.d.ts +57 -19
  1132. package/out/zero-server/src/custom.d.ts.map +1 -1
  1133. package/out/zero-server/src/custom.js +289 -107
  1134. package/out/zero-server/src/custom.js.map +1 -1
  1135. package/out/zero-server/src/logging.js +7 -4
  1136. package/out/zero-server/src/logging.js.map +1 -1
  1137. package/out/zero-server/src/mod.d.ts +1 -1
  1138. package/out/zero-server/src/mod.d.ts.map +1 -1
  1139. package/out/zero-server/src/pg-query-executor.d.ts +11 -0
  1140. package/out/zero-server/src/pg-query-executor.d.ts.map +1 -0
  1141. package/out/zero-server/src/pg-query-executor.js +20 -0
  1142. package/out/zero-server/src/pg-query-executor.js.map +1 -0
  1143. package/out/zero-server/src/process-mutations.d.ts +13 -13
  1144. package/out/zero-server/src/process-mutations.d.ts.map +1 -1
  1145. package/out/zero-server/src/process-mutations.js +328 -272
  1146. package/out/zero-server/src/process-mutations.js.map +1 -1
  1147. package/out/zero-server/src/push-processor.d.ts +5 -3
  1148. package/out/zero-server/src/push-processor.d.ts.map +1 -1
  1149. package/out/zero-server/src/push-processor.js +50 -32
  1150. package/out/zero-server/src/push-processor.js.map +1 -1
  1151. package/out/zero-server/src/queries/process-queries.d.ts +76 -3
  1152. package/out/zero-server/src/queries/process-queries.d.ts.map +1 -1
  1153. package/out/zero-server/src/queries/process-queries.js +104 -93
  1154. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  1155. package/out/zero-server/src/schema.d.ts +2 -2
  1156. package/out/zero-server/src/schema.d.ts.map +1 -1
  1157. package/out/zero-server/src/schema.js +136 -124
  1158. package/out/zero-server/src/schema.js.map +1 -1
  1159. package/out/zero-server/src/zql-database.d.ts +9 -6
  1160. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  1161. package/out/zero-server/src/zql-database.js +56 -51
  1162. package/out/zero-server/src/zql-database.js.map +1 -1
  1163. package/out/zero-solid/src/bindings.d.ts +2 -0
  1164. package/out/zero-solid/src/bindings.d.ts.map +1 -0
  1165. package/out/zero-solid/src/mod.d.ts +1 -9
  1166. package/out/zero-solid/src/mod.d.ts.map +1 -1
  1167. package/out/zero-solid/src/solid-view.d.ts +3 -5
  1168. package/out/zero-solid/src/solid-view.d.ts.map +1 -1
  1169. package/out/{solid.js → zero-solid/src/solid-view.js} +47 -196
  1170. package/out/zero-solid/src/solid-view.js.map +1 -0
  1171. package/out/zero-solid/src/{use-zero-connection-state.d.ts → use-connection-state.d.ts} +3 -3
  1172. package/out/zero-solid/src/use-connection-state.d.ts.map +1 -0
  1173. package/out/zero-solid/src/use-connection-state.js +17 -0
  1174. package/out/zero-solid/src/use-connection-state.js.map +1 -0
  1175. package/out/zero-solid/src/use-query.d.ts +4 -7
  1176. package/out/zero-solid/src/use-query.d.ts.map +1 -1
  1177. package/out/zero-solid/src/use-query.js +92 -0
  1178. package/out/zero-solid/src/use-query.js.map +1 -0
  1179. package/out/zero-solid/src/use-zero-online.d.ts +1 -1
  1180. package/out/zero-solid/src/use-zero-online.d.ts.map +1 -1
  1181. package/out/zero-solid/src/use-zero-online.js +15 -0
  1182. package/out/zero-solid/src/use-zero-online.js.map +1 -0
  1183. package/out/zero-solid/src/use-zero.d.ts +22 -11
  1184. package/out/zero-solid/src/use-zero.d.ts.map +1 -1
  1185. package/out/zero-solid/src/use-zero.js +86 -0
  1186. package/out/zero-solid/src/use-zero.js.map +1 -0
  1187. package/out/zero-solid/src/zero.d.ts +2 -0
  1188. package/out/zero-solid/src/zero.d.ts.map +1 -0
  1189. package/out/zero-types/src/default-types.d.ts +38 -0
  1190. package/out/zero-types/src/default-types.d.ts.map +1 -0
  1191. package/out/zero-types/src/format.js +7 -4
  1192. package/out/zero-types/src/format.js.map +1 -1
  1193. package/out/zero-types/src/name-mapper.js +43 -40
  1194. package/out/zero-types/src/name-mapper.js.map +1 -1
  1195. package/out/zero-types/src/schema.d.ts +4 -4
  1196. package/out/zero-types/src/server-schema.d.ts.map +1 -0
  1197. package/out/zql/src/builder/builder.d.ts +10 -2
  1198. package/out/zql/src/builder/builder.d.ts.map +1 -1
  1199. package/out/zql/src/builder/builder.js +474 -427
  1200. package/out/zql/src/builder/builder.js.map +1 -1
  1201. package/out/zql/src/builder/debug-delegate.d.ts +4 -0
  1202. package/out/zql/src/builder/debug-delegate.d.ts.map +1 -1
  1203. package/out/zql/src/builder/debug-delegate.js +68 -47
  1204. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  1205. package/out/zql/src/builder/filter.js +132 -138
  1206. package/out/zql/src/builder/filter.js.map +1 -1
  1207. package/out/zql/src/builder/like.js +44 -51
  1208. package/out/zql/src/builder/like.js.map +1 -1
  1209. package/out/zql/src/error.d.ts +5 -0
  1210. package/out/zql/src/error.d.ts.map +1 -1
  1211. package/out/zql/src/error.js +9 -6
  1212. package/out/zql/src/error.js.map +1 -1
  1213. package/out/zql/src/ivm/array-view.d.ts +2 -2
  1214. package/out/zql/src/ivm/array-view.d.ts.map +1 -1
  1215. package/out/zql/src/ivm/array-view.js +89 -92
  1216. package/out/zql/src/ivm/array-view.js.map +1 -1
  1217. package/out/zql/src/ivm/constraint.js +74 -127
  1218. package/out/zql/src/ivm/constraint.js.map +1 -1
  1219. package/out/zql/src/ivm/data.d.ts +7 -2
  1220. package/out/zql/src/ivm/data.d.ts.map +1 -1
  1221. package/out/zql/src/ivm/data.js +53 -87
  1222. package/out/zql/src/ivm/data.js.map +1 -1
  1223. package/out/zql/src/ivm/exists.d.ts +6 -4
  1224. package/out/zql/src/ivm/exists.d.ts.map +1 -1
  1225. package/out/zql/src/ivm/exists.js +206 -244
  1226. package/out/zql/src/ivm/exists.js.map +1 -1
  1227. package/out/zql/src/ivm/fan-in.d.ts +5 -3
  1228. package/out/zql/src/ivm/fan-in.d.ts.map +1 -1
  1229. package/out/zql/src/ivm/fan-in.js +58 -52
  1230. package/out/zql/src/ivm/fan-in.js.map +1 -1
  1231. package/out/zql/src/ivm/fan-out.d.ts +4 -2
  1232. package/out/zql/src/ivm/fan-out.d.ts.map +1 -1
  1233. package/out/zql/src/ivm/fan-out.js +56 -48
  1234. package/out/zql/src/ivm/fan-out.js.map +1 -1
  1235. package/out/zql/src/ivm/filter-operators.d.ts +13 -11
  1236. package/out/zql/src/ivm/filter-operators.d.ts.map +1 -1
  1237. package/out/zql/src/ivm/filter-operators.js +91 -88
  1238. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  1239. package/out/zql/src/ivm/filter-push.d.ts +2 -1
  1240. package/out/zql/src/ivm/filter-push.d.ts.map +1 -1
  1241. package/out/zql/src/ivm/filter-push.js +27 -24
  1242. package/out/zql/src/ivm/filter-push.js.map +1 -1
  1243. package/out/zql/src/ivm/filter.d.ts +4 -2
  1244. package/out/zql/src/ivm/filter.d.ts.map +1 -1
  1245. package/out/zql/src/ivm/filter.js +36 -32
  1246. package/out/zql/src/ivm/filter.js.map +1 -1
  1247. package/out/zql/src/ivm/flipped-join.d.ts +1 -2
  1248. package/out/zql/src/ivm/flipped-join.d.ts.map +1 -1
  1249. package/out/zql/src/ivm/flipped-join.js +372 -325
  1250. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  1251. package/out/zql/src/ivm/join-utils.d.ts +9 -2
  1252. package/out/zql/src/ivm/join-utils.d.ts.map +1 -1
  1253. package/out/zql/src/ivm/join-utils.js +104 -78
  1254. package/out/zql/src/ivm/join-utils.js.map +1 -1
  1255. package/out/zql/src/ivm/join.d.ts +3 -16
  1256. package/out/zql/src/ivm/join.d.ts.map +1 -1
  1257. package/out/zql/src/ivm/join.js +225 -211
  1258. package/out/zql/src/ivm/join.js.map +1 -1
  1259. package/out/zql/src/ivm/maybe-split-and-push-edit-change.d.ts +1 -1
  1260. package/out/zql/src/ivm/maybe-split-and-push-edit-change.d.ts.map +1 -1
  1261. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +26 -24
  1262. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
  1263. package/out/zql/src/ivm/memory-source.d.ts +9 -8
  1264. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  1265. package/out/zql/src/ivm/memory-source.js +484 -491
  1266. package/out/zql/src/ivm/memory-source.js.map +1 -1
  1267. package/out/zql/src/ivm/memory-storage.js +32 -31
  1268. package/out/zql/src/ivm/memory-storage.js.map +1 -1
  1269. package/out/zql/src/ivm/operator.d.ts +15 -12
  1270. package/out/zql/src/ivm/operator.d.ts.map +1 -1
  1271. package/out/zql/src/ivm/operator.js +16 -9
  1272. package/out/zql/src/ivm/operator.js.map +1 -1
  1273. package/out/zql/src/ivm/push-accumulated.d.ts +2 -2
  1274. package/out/zql/src/ivm/push-accumulated.d.ts.map +1 -1
  1275. package/out/zql/src/ivm/push-accumulated.js +236 -305
  1276. package/out/zql/src/ivm/push-accumulated.js.map +1 -1
  1277. package/out/zql/src/ivm/skip.d.ts +2 -3
  1278. package/out/zql/src/ivm/skip.d.ts.map +1 -1
  1279. package/out/zql/src/ivm/skip.js +95 -106
  1280. package/out/zql/src/ivm/skip.js.map +1 -1
  1281. package/out/zql/src/ivm/source.d.ts +18 -8
  1282. package/out/zql/src/ivm/source.d.ts.map +1 -1
  1283. package/out/zql/src/ivm/stream.d.ts +2 -0
  1284. package/out/zql/src/ivm/stream.d.ts.map +1 -1
  1285. package/out/zql/src/ivm/stream.js +12 -17
  1286. package/out/zql/src/ivm/stream.js.map +1 -1
  1287. package/out/zql/src/ivm/take.d.ts +2 -3
  1288. package/out/zql/src/ivm/take.d.ts.map +1 -1
  1289. package/out/zql/src/ivm/take.js +525 -451
  1290. package/out/zql/src/ivm/take.js.map +1 -1
  1291. package/out/zql/src/ivm/union-fan-in.d.ts +4 -4
  1292. package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
  1293. package/out/zql/src/ivm/union-fan-in.js +213 -132
  1294. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  1295. package/out/zql/src/ivm/union-fan-out.d.ts +2 -3
  1296. package/out/zql/src/ivm/union-fan-out.d.ts.map +1 -1
  1297. package/out/zql/src/ivm/union-fan-out.js +43 -45
  1298. package/out/zql/src/ivm/union-fan-out.js.map +1 -1
  1299. package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
  1300. package/out/zql/src/ivm/view-apply-change.js +247 -217
  1301. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  1302. package/out/zql/src/ivm/view.d.ts +3 -2
  1303. package/out/zql/src/ivm/view.d.ts.map +1 -1
  1304. package/out/zql/src/mutate/crud.d.ts +139 -0
  1305. package/out/zql/src/mutate/crud.d.ts.map +1 -0
  1306. package/out/zql/src/mutate/crud.js +53 -0
  1307. package/out/zql/src/mutate/crud.js.map +1 -0
  1308. package/out/zql/src/mutate/custom.d.ts +40 -63
  1309. package/out/zql/src/mutate/custom.d.ts.map +1 -1
  1310. package/out/zql/src/mutate/custom.js +12 -8
  1311. package/out/zql/src/mutate/custom.js.map +1 -1
  1312. package/out/zql/src/mutate/mutator-registry.d.ts +112 -0
  1313. package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -0
  1314. package/out/zql/src/mutate/mutator-registry.js +88 -0
  1315. package/out/zql/src/mutate/mutator-registry.js.map +1 -0
  1316. package/out/zql/src/mutate/mutator.d.ts +94 -0
  1317. package/out/zql/src/mutate/mutator.d.ts.map +1 -0
  1318. package/out/zql/src/mutate/mutator.js +34 -0
  1319. package/out/zql/src/mutate/mutator.js.map +1 -0
  1320. package/out/zql/src/planner/planner-builder.d.ts +2 -1
  1321. package/out/zql/src/planner/planner-builder.d.ts.map +1 -1
  1322. package/out/zql/src/planner/planner-builder.js +239 -148
  1323. package/out/zql/src/planner/planner-builder.js.map +1 -1
  1324. package/out/zql/src/planner/planner-connection.d.ts +14 -15
  1325. package/out/zql/src/planner/planner-connection.d.ts.map +1 -1
  1326. package/out/zql/src/planner/planner-connection.js +205 -247
  1327. package/out/zql/src/planner/planner-connection.js.map +1 -1
  1328. package/out/zql/src/planner/planner-constraint.js +8 -11
  1329. package/out/zql/src/planner/planner-constraint.js.map +1 -1
  1330. package/out/zql/src/planner/planner-debug.d.ts +39 -44
  1331. package/out/zql/src/planner/planner-debug.d.ts.map +1 -1
  1332. package/out/zql/src/planner/planner-debug.js +227 -161
  1333. package/out/zql/src/planner/planner-debug.js.map +1 -1
  1334. package/out/zql/src/planner/planner-fan-in.d.ts.map +1 -1
  1335. package/out/zql/src/planner/planner-fan-in.js +157 -159
  1336. package/out/zql/src/planner/planner-fan-in.js.map +1 -1
  1337. package/out/zql/src/planner/planner-fan-out.d.ts.map +1 -1
  1338. package/out/zql/src/planner/planner-fan-out.js +73 -59
  1339. package/out/zql/src/planner/planner-fan-out.js.map +1 -1
  1340. package/out/zql/src/planner/planner-graph.d.ts +10 -9
  1341. package/out/zql/src/planner/planner-graph.d.ts.map +1 -1
  1342. package/out/zql/src/planner/planner-graph.js +323 -357
  1343. package/out/zql/src/planner/planner-graph.js.map +1 -1
  1344. package/out/zql/src/planner/planner-join.d.ts +7 -3
  1345. package/out/zql/src/planner/planner-join.d.ts.map +1 -1
  1346. package/out/zql/src/planner/planner-join.js +237 -322
  1347. package/out/zql/src/planner/planner-join.js.map +1 -1
  1348. package/out/zql/src/planner/planner-node.d.ts +6 -1
  1349. package/out/zql/src/planner/planner-node.d.ts.map +1 -1
  1350. package/out/zql/src/planner/planner-node.js +8 -2
  1351. package/out/zql/src/planner/planner-node.js.map +1 -1
  1352. package/out/zql/src/planner/planner-source.js +23 -12
  1353. package/out/zql/src/planner/planner-source.js.map +1 -1
  1354. package/out/zql/src/planner/planner-terminus.js +28 -27
  1355. package/out/zql/src/planner/planner-terminus.js.map +1 -1
  1356. package/out/zql/src/query/complete-ordering.d.ts +5 -0
  1357. package/out/zql/src/query/complete-ordering.d.ts.map +1 -0
  1358. package/out/zql/src/query/complete-ordering.js +71 -0
  1359. package/out/zql/src/query/complete-ordering.js.map +1 -0
  1360. package/out/zql/src/query/create-builder.d.ts +10 -0
  1361. package/out/zql/src/query/create-builder.d.ts.map +1 -0
  1362. package/out/zql/src/query/create-builder.js +32 -0
  1363. package/out/zql/src/query/create-builder.js.map +1 -0
  1364. package/out/zql/src/query/error.js +12 -8
  1365. package/out/zql/src/query/error.js.map +1 -1
  1366. package/out/zql/src/query/escape-like.js +7 -0
  1367. package/out/zql/src/query/escape-like.js.map +1 -0
  1368. package/out/zql/src/query/expression.d.ts +5 -5
  1369. package/out/zql/src/query/expression.d.ts.map +1 -1
  1370. package/out/zql/src/query/expression.js +153 -151
  1371. package/out/zql/src/query/expression.js.map +1 -1
  1372. package/out/zql/src/query/measure-push-operator.d.ts +2 -3
  1373. package/out/zql/src/query/measure-push-operator.d.ts.map +1 -1
  1374. package/out/zql/src/query/measure-push-operator.js +39 -35
  1375. package/out/zql/src/query/measure-push-operator.js.map +1 -1
  1376. package/out/zql/src/query/metrics-delegate.js +9 -5
  1377. package/out/zql/src/query/metrics-delegate.js.map +1 -1
  1378. package/out/zql/src/query/named.d.ts +21 -12
  1379. package/out/zql/src/query/named.d.ts.map +1 -1
  1380. package/out/zql/src/query/named.js +46 -64
  1381. package/out/zql/src/query/named.js.map +1 -1
  1382. package/out/zql/src/query/query-delegate-base.d.ts +120 -0
  1383. package/out/zql/src/query/query-delegate-base.d.ts.map +1 -0
  1384. package/out/zql/src/query/query-delegate-base.js +250 -0
  1385. package/out/zql/src/query/query-delegate-base.js.map +1 -0
  1386. package/out/zql/src/query/query-delegate.d.ts +27 -4
  1387. package/out/zql/src/query/query-delegate.d.ts.map +1 -1
  1388. package/out/zql/src/query/query-impl.d.ts +30 -52
  1389. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  1390. package/out/zql/src/query/query-impl.js +393 -459
  1391. package/out/zql/src/query/query-impl.js.map +1 -1
  1392. package/out/zql/src/query/query-internals.d.ts +68 -0
  1393. package/out/zql/src/query/query-internals.d.ts.map +1 -0
  1394. package/out/zql/src/query/query-internals.js +11 -0
  1395. package/out/zql/src/query/query-internals.js.map +1 -0
  1396. package/out/zql/src/query/query-registry.d.ts +239 -0
  1397. package/out/zql/src/query/query-registry.d.ts.map +1 -0
  1398. package/out/zql/src/query/query-registry.js +121 -0
  1399. package/out/zql/src/query/query-registry.js.map +1 -0
  1400. package/out/zql/src/query/query.d.ts +65 -242
  1401. package/out/zql/src/query/query.d.ts.map +1 -1
  1402. package/out/zql/src/query/runnable-query-impl.d.ts +22 -0
  1403. package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -0
  1404. package/out/zql/src/query/runnable-query-impl.js +60 -0
  1405. package/out/zql/src/query/runnable-query-impl.js.map +1 -0
  1406. package/out/zql/src/query/schema-query.d.ts +8 -0
  1407. package/out/zql/src/query/schema-query.d.ts.map +1 -0
  1408. package/out/zql/src/query/static-query.d.ts +3 -25
  1409. package/out/zql/src/query/static-query.d.ts.map +1 -1
  1410. package/out/zql/src/query/static-query.js +18 -32
  1411. package/out/zql/src/query/static-query.js.map +1 -1
  1412. package/out/zql/src/query/ttl.js +69 -62
  1413. package/out/zql/src/query/ttl.js.map +1 -1
  1414. package/out/zql/src/query/validate-input.d.ts +15 -0
  1415. package/out/zql/src/query/validate-input.d.ts.map +1 -0
  1416. package/out/zql/src/query/validate-input.js +24 -0
  1417. package/out/zql/src/query/validate-input.js.map +1 -0
  1418. package/out/zqlite/src/database-storage.d.ts +1 -1
  1419. package/out/zqlite/src/database-storage.d.ts.map +1 -1
  1420. package/out/zqlite/src/database-storage.js +99 -102
  1421. package/out/zqlite/src/database-storage.js.map +1 -1
  1422. package/out/zqlite/src/db.d.ts +2 -1
  1423. package/out/zqlite/src/db.d.ts.map +1 -1
  1424. package/out/zqlite/src/db.js +241 -192
  1425. package/out/zqlite/src/db.js.map +1 -1
  1426. package/out/zqlite/src/explain-queries.js +13 -16
  1427. package/out/zqlite/src/explain-queries.js.map +1 -1
  1428. package/out/zqlite/src/internal/sql-inline.d.ts +13 -0
  1429. package/out/zqlite/src/internal/sql-inline.d.ts.map +1 -0
  1430. package/out/zqlite/src/internal/sql-inline.js +45 -0
  1431. package/out/zqlite/src/internal/sql-inline.js.map +1 -0
  1432. package/out/zqlite/src/internal/sql.js +15 -10
  1433. package/out/zqlite/src/internal/sql.js.map +1 -1
  1434. package/out/zqlite/src/internal/statement-cache.js +86 -110
  1435. package/out/zqlite/src/internal/statement-cache.js.map +1 -1
  1436. package/out/zqlite/src/query-builder.js +172 -143
  1437. package/out/zqlite/src/query-builder.js.map +1 -1
  1438. package/out/zqlite/src/query-delegate.d.ts +5 -19
  1439. package/out/zqlite/src/query-delegate.d.ts.map +1 -1
  1440. package/out/zqlite/src/query-delegate.js +56 -70
  1441. package/out/zqlite/src/query-delegate.js.map +1 -1
  1442. package/out/zqlite/src/sqlite-cost-model.d.ts.map +1 -1
  1443. package/out/zqlite/src/sqlite-cost-model.js +97 -121
  1444. package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
  1445. package/out/zqlite/src/sqlite-stat-fanout.d.ts +121 -0
  1446. package/out/zqlite/src/sqlite-stat-fanout.d.ts.map +1 -0
  1447. package/out/zqlite/src/sqlite-stat-fanout.js +301 -0
  1448. package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -0
  1449. package/out/zqlite/src/table-source.d.ts +18 -6
  1450. package/out/zqlite/src/table-source.d.ts.map +1 -1
  1451. package/out/zqlite/src/table-source.js +443 -311
  1452. package/out/zqlite/src/table-source.js.map +1 -1
  1453. package/package.json +30 -27
  1454. package/out/chunk-424PT5DM.js +0 -23
  1455. package/out/chunk-424PT5DM.js.map +0 -7
  1456. package/out/chunk-AFADJQ2O.js +0 -1
  1457. package/out/chunk-AFADJQ2O.js.map +0 -7
  1458. package/out/chunk-ASRS2LFV.js.map +0 -7
  1459. package/out/chunk-COKJ5W7V.js +0 -18337
  1460. package/out/chunk-COKJ5W7V.js.map +0 -7
  1461. package/out/chunk-ECUMGQGC.js.map +0 -7
  1462. package/out/chunk-EZM3XBAB.js.map +0 -7
  1463. package/out/chunk-TJFNGO7E.js +0 -4126
  1464. package/out/chunk-TJFNGO7E.js.map +0 -7
  1465. package/out/chunk-VZOYWIRW.js +0 -30
  1466. package/out/chunk-VZOYWIRW.js.map +0 -7
  1467. package/out/chunk-YWU2DZ23.js +0 -372
  1468. package/out/chunk-YWU2DZ23.js.map +0 -7
  1469. package/out/chunk-ZZXMKAAG.js.map +0 -7
  1470. package/out/expo-sqlite.js +0 -11
  1471. package/out/expo-sqlite.js.map +0 -7
  1472. package/out/inspector-IU2HG74I.js +0 -43
  1473. package/out/inspector-IU2HG74I.js.map +0 -7
  1474. package/out/lazy-inspector-OXIFYSSQ.js +0 -574
  1475. package/out/lazy-inspector-OXIFYSSQ.js.map +0 -7
  1476. package/out/op-sqlite.js.map +0 -7
  1477. package/out/react-native.js +0 -25
  1478. package/out/react-native.js.map +0 -7
  1479. package/out/react.js +0 -479
  1480. package/out/react.js.map +0 -7
  1481. package/out/shared/src/enum.js +0 -2
  1482. package/out/shared/src/enum.js.map +0 -1
  1483. package/out/shared/src/expand.js +0 -2
  1484. package/out/shared/src/expand.js.map +0 -1
  1485. package/out/shared/src/immutable.js +0 -2
  1486. package/out/shared/src/immutable.js.map +0 -1
  1487. package/out/shared/src/types.js +0 -2
  1488. package/out/shared/src/types.js.map +0 -1
  1489. package/out/shared/src/writable.js +0 -2
  1490. package/out/shared/src/writable.js.map +0 -1
  1491. package/out/solid.js.map +0 -7
  1492. package/out/sqlite.js +0 -15
  1493. package/out/sqlite.js.map +0 -7
  1494. package/out/zero/package.json +0 -194
  1495. package/out/zero/src/server/change-streamer.js +0 -2
  1496. package/out/zero/src/server/change-streamer.js.map +0 -1
  1497. package/out/zero/src/server/main.js +0 -2
  1498. package/out/zero/src/server/main.js.map +0 -1
  1499. package/out/zero/src/server/reaper.js +0 -2
  1500. package/out/zero/src/server/reaper.js.map +0 -1
  1501. package/out/zero/src/server/replicator.js +0 -2
  1502. package/out/zero/src/server/replicator.js.map +0 -1
  1503. package/out/zero/src/server/runner/main.js +0 -2
  1504. package/out/zero/src/server/runner/main.js.map +0 -1
  1505. package/out/zero/src/server/syncer.js +0 -2
  1506. package/out/zero/src/server/syncer.js.map +0 -1
  1507. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.js +0 -4
  1508. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput.types.js.map +0 -1
  1509. package/out/zero-cache/src/services/change-source/protocol/mod.js +0 -5
  1510. package/out/zero-cache/src/services/change-source/protocol/mod.js.map +0 -1
  1511. package/out/zero-cache/src/services/service.js +0 -2
  1512. package/out/zero-cache/src/services/service.js.map +0 -1
  1513. package/out/zero-cache/src/services/view-syncer/key-columns.d.ts +0 -32
  1514. package/out/zero-cache/src/services/view-syncer/key-columns.d.ts.map +0 -1
  1515. package/out/zero-cache/src/services/view-syncer/key-columns.js +0 -75
  1516. package/out/zero-cache/src/services/view-syncer/key-columns.js.map +0 -1
  1517. package/out/zero-cache/src/types/satisfies.js +0 -2
  1518. package/out/zero-cache/src/types/satisfies.js.map +0 -1
  1519. package/out/zero-client/src/client/on-error.d.ts +0 -15
  1520. package/out/zero-client/src/client/on-error.d.ts.map +0 -1
  1521. package/out/zero-client/src/client/zero-log-context.d.ts +0 -7
  1522. package/out/zero-client/src/client/zero-log-context.d.ts.map +0 -1
  1523. package/out/zero-events/src/index.js +0 -2
  1524. package/out/zero-events/src/index.js.map +0 -1
  1525. package/out/zero-events/src/json.js +0 -2
  1526. package/out/zero-events/src/json.js.map +0 -1
  1527. package/out/zero-events/src/status.js +0 -3
  1528. package/out/zero-events/src/status.js.map +0 -1
  1529. package/out/zero-pg/src/mod.js +0 -6
  1530. package/out/zero-pg/src/mod.js.map +0 -1
  1531. package/out/zero-protocol/src/error-kind.js +0 -3
  1532. package/out/zero-protocol/src/error-kind.js.map +0 -1
  1533. package/out/zero-protocol/src/error-origin.js +0 -3
  1534. package/out/zero-protocol/src/error-origin.js.map +0 -1
  1535. package/out/zero-protocol/src/error-reason.js +0 -3
  1536. package/out/zero-protocol/src/error-reason.js.map +0 -1
  1537. package/out/zero-react/src/components/inspector.d.ts +0 -8
  1538. package/out/zero-react/src/components/inspector.d.ts.map +0 -1
  1539. package/out/zero-react/src/components/mark-icon.d.ts +0 -3
  1540. package/out/zero-react/src/components/mark-icon.d.ts.map +0 -1
  1541. package/out/zero-react/src/components/zero-inspector.d.ts +0 -7
  1542. package/out/zero-react/src/components/zero-inspector.d.ts.map +0 -1
  1543. package/out/zero-react/src/use-zero-connection-state.d.ts +0 -9
  1544. package/out/zero-react/src/use-zero-connection-state.d.ts.map +0 -1
  1545. package/out/zero-schema/src/server-schema.d.ts.map +0 -1
  1546. package/out/zero-schema/src/server-schema.js +0 -2
  1547. package/out/zero-schema/src/server-schema.js.map +0 -1
  1548. package/out/zero-schema/src/table-schema.js +0 -7
  1549. package/out/zero-schema/src/table-schema.js.map +0 -1
  1550. package/out/zero-server/src/mod.js +0 -9
  1551. package/out/zero-server/src/mod.js.map +0 -1
  1552. package/out/zero-server/src/query.d.ts +0 -22
  1553. package/out/zero-server/src/query.d.ts.map +0 -1
  1554. package/out/zero-server/src/query.js +0 -61
  1555. package/out/zero-server/src/query.js.map +0 -1
  1556. package/out/zero-solid/src/use-zero-connection-state.d.ts.map +0 -1
  1557. package/out/zero-types/src/schema-value.js +0 -2
  1558. package/out/zero-types/src/schema-value.js.map +0 -1
  1559. package/out/zero-types/src/schema.js +0 -2
  1560. package/out/zero-types/src/schema.js.map +0 -1
  1561. package/out/zero.js +0 -81
  1562. package/out/zero.js.map +0 -7
  1563. package/out/zql/src/ivm/change.js +0 -2
  1564. package/out/zql/src/ivm/change.js.map +0 -1
  1565. package/out/zql/src/ivm/default-format.js +0 -2
  1566. package/out/zql/src/ivm/default-format.js.map +0 -1
  1567. package/out/zql/src/ivm/schema.js +0 -2
  1568. package/out/zql/src/ivm/schema.js.map +0 -1
  1569. package/out/zql/src/ivm/source.js +0 -2
  1570. package/out/zql/src/ivm/source.js.map +0 -1
  1571. package/out/zql/src/ivm/view.js +0 -2
  1572. package/out/zql/src/ivm/view.js.map +0 -1
  1573. package/out/zql/src/query/query-delegate.js +0 -2
  1574. package/out/zql/src/query/query-delegate.js.map +0 -1
  1575. package/out/zql/src/query/query.js +0 -9
  1576. package/out/zql/src/query/query.js.map +0 -1
  1577. package/out/zql/src/query/typed-view.js +0 -2
  1578. package/out/zql/src/query/typed-view.js.map +0 -1
  1579. package/out/zqlite/src/mod.js +0 -5
  1580. package/out/zqlite/src/mod.js.map +0 -1
  1581. /package/out/{zero-schema → zero-types}/src/server-schema.d.ts +0 -0
@@ -0,0 +1,353 @@
1
+ import { assert, assertObject } from "../../../shared/src/asserts.js";
2
+ import { hasOwn } from "../../../shared/src/has-own.js";
3
+ import { readonlyObject, readonlyArray, assert as assert$1 } from "../../../shared/src/valita.js";
4
+ import { emptyDataNode } from "../btree/node.js";
5
+ import { BTreeRead } from "../btree/read.js";
6
+ import { compareCookies } from "../cookies.js";
7
+ import { toRefs } from "../dag/chunk.js";
8
+ import { toChunkIndexDefinition, newSnapshotCommitDataDD31, getRefs, chunkIndexDefinitionEqualIgnoreName, baseSnapshotFromHash, assertSnapshotCommitDD31 } from "../db/commit.js";
9
+ import { createIndexBTree } from "../db/write.js";
10
+ import { deepFreeze } from "../frozen-json.js";
11
+ import { hashSchema } from "../hash.js";
12
+ import { indexDefinitionsEqual } from "../index-defs.js";
13
+ import { clientGroupIDSchema } from "../sync/ids.js";
14
+ import { withWrite } from "../with-transactions.js";
15
+ import { setClientGroup, getClientGroups, mutatorNamesEqual, getClientGroup } from "./client-groups.js";
16
+ import { makeClientID } from "./make-client-id.js";
17
+ import { number, union } from "@badrap/valita";
18
+ const clientV5Schema = readonlyObject({
19
+ heartbeatTimestampMs: number(),
20
+ headHash: hashSchema,
21
+ /**
22
+ * The hash of a commit we are in the middle of refreshing into this client's
23
+ * memdag.
24
+ */
25
+ tempRefreshHash: hashSchema.nullable(),
26
+ /**
27
+ * ID of this client's perdag client group. This needs to be sent in pull
28
+ * request (to enable syncing all last mutation ids in the client group).
29
+ */
30
+ clientGroupID: clientGroupIDSchema
31
+ });
32
+ const clientV6Schema = readonlyObject({
33
+ heartbeatTimestampMs: number(),
34
+ /**
35
+ * A set of hashes, which contains:
36
+ * 1. The hash of the last commit this client refreshed from its client group
37
+ * (this is the commit it bootstrapped from until it completes its first
38
+ * refresh).
39
+ * 2. One or more hashes that were added to retain chunks of a commit while it
40
+ * was being refreshed into this client's memdag. (This can be one or more
41
+ * because refresh's cleanup step is a separate transaction and can fail).
42
+ * Upon refresh completing and successfully running its clean up step, this
43
+ * set will contain a single hash: the hash of the last commit this client
44
+ * refreshed.
45
+ */
46
+ refreshHashes: readonlyArray(hashSchema),
47
+ /**
48
+ * The hash of the last snapshot commit persisted by this client to this
49
+ * client's client group, or null if has never persisted a snapshot.
50
+ */
51
+ persistHash: hashSchema.nullable(),
52
+ /**
53
+ * ID of this client's perdag client group. This needs to be sent in pull
54
+ * request (to enable syncing all last mutation ids in the client group).
55
+ */
56
+ clientGroupID: clientGroupIDSchema
57
+ });
58
+ function isClientV6(client) {
59
+ return client.refreshHashes !== void 0;
60
+ }
61
+ const CLIENTS_HEAD_NAME = "clients";
62
+ const clientSchema = union(clientV5Schema, clientV6Schema);
63
+ function assertClient(value) {
64
+ assert$1(value, clientSchema);
65
+ }
66
+ function assertClientV6(value) {
67
+ assert$1(value, clientV6Schema);
68
+ }
69
+ function chunkDataToClientMap(chunkData) {
70
+ assertObject(chunkData);
71
+ const clients = /* @__PURE__ */ new Map();
72
+ for (const key in chunkData) {
73
+ if (hasOwn(chunkData, key)) {
74
+ const value = chunkData[key];
75
+ if (value !== void 0) {
76
+ assertClient(value);
77
+ clients.set(key, value);
78
+ }
79
+ }
80
+ }
81
+ return clients;
82
+ }
83
+ function clientMapToChunkData(clients, dagWrite) {
84
+ for (const client of clients.values()) {
85
+ if (isClientV6(client)) {
86
+ client.refreshHashes.forEach(dagWrite.assertValidHash);
87
+ if (client.persistHash) {
88
+ dagWrite.assertValidHash(client.persistHash);
89
+ }
90
+ } else {
91
+ dagWrite.assertValidHash(client.headHash);
92
+ if (client.tempRefreshHash) {
93
+ dagWrite.assertValidHash(client.tempRefreshHash);
94
+ }
95
+ }
96
+ }
97
+ return deepFreeze(Object.fromEntries(clients));
98
+ }
99
+ async function getClients(dagRead) {
100
+ const hash = await dagRead.getHead(CLIENTS_HEAD_NAME);
101
+ return getClientsAtHash(hash, dagRead);
102
+ }
103
+ async function getClientsAtHash(hash, dagRead) {
104
+ if (!hash) {
105
+ return /* @__PURE__ */ new Map();
106
+ }
107
+ const chunk = await dagRead.getChunk(hash);
108
+ return chunkDataToClientMap(chunk?.data);
109
+ }
110
+ class ClientStateNotFoundError extends Error {
111
+ name = "ClientStateNotFoundError";
112
+ id;
113
+ constructor(id) {
114
+ super(`Client state not found, id: ${id}`);
115
+ this.id = id;
116
+ }
117
+ }
118
+ async function assertHasClientState(id, dagRead) {
119
+ if (!await hasClientState(id, dagRead)) {
120
+ throw new ClientStateNotFoundError(id);
121
+ }
122
+ }
123
+ async function hasClientState(id, dagRead) {
124
+ return !!await getClient(id, dagRead);
125
+ }
126
+ async function getClient(id, dagRead) {
127
+ const clients = await getClients(dagRead);
128
+ return clients.get(id);
129
+ }
130
+ async function mustGetClient(id, dagRead) {
131
+ const client = await getClient(id, dagRead);
132
+ if (!client) {
133
+ throw new ClientStateNotFoundError(id);
134
+ }
135
+ return client;
136
+ }
137
+ function initClientV6(newClientID, lc, perdag, mutatorNames, indexes, formatVersion, enableClientGroupForking) {
138
+ return withWrite(perdag, async (dagWrite) => {
139
+ async function setClientsAndClientGroupAndCommit(basisHash, cookieJSON, valueHash2, indexRecords2) {
140
+ const newSnapshotData = newSnapshotCommitDataDD31(
141
+ basisHash,
142
+ {},
143
+ cookieJSON,
144
+ valueHash2,
145
+ indexRecords2
146
+ );
147
+ const chunk = dagWrite.createChunk(
148
+ newSnapshotData,
149
+ getRefs(newSnapshotData)
150
+ );
151
+ const newClientGroupID = makeClientID();
152
+ const newClient = {
153
+ heartbeatTimestampMs: Date.now(),
154
+ refreshHashes: [chunk.hash],
155
+ persistHash: null,
156
+ clientGroupID: newClientGroupID
157
+ };
158
+ const newClients = new Map(clients).set(newClientID, newClient);
159
+ const clientGroup = {
160
+ headHash: chunk.hash,
161
+ mutatorNames,
162
+ indexes,
163
+ mutationIDs: {},
164
+ lastServerAckdMutationIDs: {},
165
+ disabled: false
166
+ };
167
+ await Promise.all([
168
+ dagWrite.putChunk(chunk),
169
+ setClients(newClients, dagWrite),
170
+ setClientGroup(newClientGroupID, clientGroup, dagWrite)
171
+ ]);
172
+ return [newClient, chunk.hash, newClients, true];
173
+ }
174
+ const clients = await getClients(dagWrite);
175
+ const res = await findMatchingClient(dagWrite, mutatorNames, indexes);
176
+ if (res.type === FIND_MATCHING_CLIENT_TYPE_HEAD) {
177
+ const { clientGroupID, headHash } = res;
178
+ const newClient = {
179
+ clientGroupID,
180
+ refreshHashes: [headHash],
181
+ heartbeatTimestampMs: Date.now(),
182
+ persistHash: null
183
+ };
184
+ const newClients = new Map(clients).set(newClientID, newClient);
185
+ await setClients(newClients, dagWrite);
186
+ return [newClient, headHash, newClients, false];
187
+ }
188
+ if (!enableClientGroupForking || res.type === FIND_MATCHING_CLIENT_TYPE_NEW) {
189
+ const emptyBTreeChunk = dagWrite.createChunk(emptyDataNode, []);
190
+ await dagWrite.putChunk(emptyBTreeChunk);
191
+ const indexRecords2 = [];
192
+ for (const [name, indexDefinition] of Object.entries(indexes)) {
193
+ const chunkIndexDefinition = toChunkIndexDefinition(
194
+ name,
195
+ indexDefinition
196
+ );
197
+ indexRecords2.push({
198
+ definition: chunkIndexDefinition,
199
+ valueHash: emptyBTreeChunk.hash
200
+ });
201
+ }
202
+ return setClientsAndClientGroupAndCommit(
203
+ null,
204
+ null,
205
+ emptyBTreeChunk.hash,
206
+ indexRecords2
207
+ );
208
+ }
209
+ assert(res.type === FIND_MATCHING_CLIENT_TYPE_FORK);
210
+ const { snapshot } = res;
211
+ const indexRecords = [];
212
+ const { valueHash, indexes: oldIndexes } = snapshot;
213
+ const map = new BTreeRead(dagWrite, formatVersion, valueHash);
214
+ for (const [name, indexDefinition] of Object.entries(indexes)) {
215
+ const { prefix = "", jsonPointer, allowEmpty = false } = indexDefinition;
216
+ const chunkIndexDefinition = {
217
+ name,
218
+ keyPrefix: prefix,
219
+ jsonPointer,
220
+ allowEmpty
221
+ };
222
+ const oldIndex = findMatchingOldIndex(oldIndexes, chunkIndexDefinition);
223
+ if (oldIndex) {
224
+ indexRecords.push({
225
+ definition: chunkIndexDefinition,
226
+ valueHash: oldIndex.valueHash
227
+ });
228
+ } else {
229
+ const indexBTree = await createIndexBTree(
230
+ lc,
231
+ dagWrite,
232
+ map,
233
+ prefix,
234
+ jsonPointer,
235
+ allowEmpty,
236
+ formatVersion
237
+ );
238
+ indexRecords.push({
239
+ definition: chunkIndexDefinition,
240
+ valueHash: await indexBTree.flush()
241
+ });
242
+ }
243
+ }
244
+ return setClientsAndClientGroupAndCommit(
245
+ snapshot.meta.basisHash,
246
+ snapshot.meta.cookieJSON,
247
+ snapshot.valueHash,
248
+ indexRecords
249
+ );
250
+ });
251
+ }
252
+ function findMatchingOldIndex(oldIndexes, chunkIndexDefinition) {
253
+ return oldIndexes.find(
254
+ (index) => chunkIndexDefinitionEqualIgnoreName(index.definition, chunkIndexDefinition)
255
+ );
256
+ }
257
+ const FIND_MATCHING_CLIENT_TYPE_NEW = 0;
258
+ const FIND_MATCHING_CLIENT_TYPE_FORK = 1;
259
+ const FIND_MATCHING_CLIENT_TYPE_HEAD = 2;
260
+ async function findMatchingClient(dagRead, mutatorNames, indexes) {
261
+ let newestCookie;
262
+ let bestSnapshot;
263
+ const mutatorNamesSet = new Set(mutatorNames);
264
+ const clientGroups = await getClientGroups(dagRead);
265
+ for (const [clientGroupID, clientGroup] of clientGroups) {
266
+ if (!clientGroup.disabled && mutatorNamesEqual(mutatorNamesSet, clientGroup.mutatorNames) && indexDefinitionsEqual(indexes, clientGroup.indexes)) {
267
+ return {
268
+ type: FIND_MATCHING_CLIENT_TYPE_HEAD,
269
+ clientGroupID,
270
+ headHash: clientGroup.headHash
271
+ };
272
+ }
273
+ const clientGroupSnapshotCommit = await baseSnapshotFromHash(
274
+ clientGroup.headHash,
275
+ dagRead
276
+ );
277
+ assertSnapshotCommitDD31(clientGroupSnapshotCommit);
278
+ const { cookieJSON } = clientGroupSnapshotCommit.meta;
279
+ if (newestCookie === void 0 || compareCookies(cookieJSON, newestCookie) > 0) {
280
+ newestCookie = cookieJSON;
281
+ bestSnapshot = clientGroupSnapshotCommit;
282
+ }
283
+ }
284
+ if (bestSnapshot) {
285
+ return {
286
+ type: FIND_MATCHING_CLIENT_TYPE_FORK,
287
+ snapshot: bestSnapshot
288
+ };
289
+ }
290
+ return { type: FIND_MATCHING_CLIENT_TYPE_NEW };
291
+ }
292
+ function getRefsForClients(clients) {
293
+ const refs = /* @__PURE__ */ new Set();
294
+ for (const client of clients.values()) {
295
+ if (isClientV6(client)) {
296
+ for (const hash of client.refreshHashes) {
297
+ refs.add(hash);
298
+ }
299
+ if (client.persistHash) {
300
+ refs.add(client.persistHash);
301
+ }
302
+ } else {
303
+ refs.add(client.headHash);
304
+ if (client.tempRefreshHash) {
305
+ refs.add(client.tempRefreshHash);
306
+ }
307
+ }
308
+ }
309
+ return toRefs(refs);
310
+ }
311
+ async function getClientGroupForClient(clientID, read) {
312
+ const clientGroupID = await getClientGroupIDForClient(clientID, read);
313
+ if (!clientGroupID) {
314
+ return void 0;
315
+ }
316
+ return getClientGroup(clientGroupID, read);
317
+ }
318
+ async function getClientGroupIDForClient(clientID, read) {
319
+ const client = await getClient(clientID, read);
320
+ return client?.clientGroupID;
321
+ }
322
+ async function setClient(clientID, client, dagWrite) {
323
+ const clients = await getClients(dagWrite);
324
+ const newClients = new Map(clients).set(clientID, client);
325
+ return setClients(newClients, dagWrite);
326
+ }
327
+ async function setClients(clients, dagWrite) {
328
+ const chunkData = clientMapToChunkData(clients, dagWrite);
329
+ const chunk = dagWrite.createChunk(chunkData, getRefsForClients(clients));
330
+ await dagWrite.putChunk(chunk);
331
+ await dagWrite.setHead(CLIENTS_HEAD_NAME, chunk.hash);
332
+ return chunk.hash;
333
+ }
334
+ export {
335
+ CLIENTS_HEAD_NAME,
336
+ ClientStateNotFoundError,
337
+ FIND_MATCHING_CLIENT_TYPE_FORK,
338
+ FIND_MATCHING_CLIENT_TYPE_HEAD,
339
+ FIND_MATCHING_CLIENT_TYPE_NEW,
340
+ assertClientV6,
341
+ assertHasClientState,
342
+ findMatchingClient,
343
+ getClient,
344
+ getClientGroupForClient,
345
+ getClientGroupIDForClient,
346
+ getClients,
347
+ hasClientState,
348
+ initClientV6,
349
+ mustGetClient,
350
+ setClient,
351
+ setClients
352
+ };
353
+ //# sourceMappingURL=clients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients.js","sources":["../../../../../replicache/src/persist/clients.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {assert, assertObject} from '../../../shared/src/asserts.ts';\nimport type {Enum} from '../../../shared/src/enum.ts';\nimport {hasOwn} from '../../../shared/src/has-own.ts';\nimport * as valita from '../../../shared/src/valita.ts';\nimport {emptyDataNode} from '../btree/node.ts';\nimport {BTreeRead} from '../btree/read.ts';\nimport {type FrozenCookie, compareCookies} from '../cookies.ts';\nimport {type Refs, toRefs} from '../dag/chunk.ts';\nimport type {Read, Store, Write} from '../dag/store.ts';\nimport type {Commit} from '../db/commit.ts';\nimport {\n type ChunkIndexDefinition,\n type IndexRecord,\n type SnapshotMetaDD31,\n assertSnapshotCommitDD31,\n baseSnapshotFromHash,\n chunkIndexDefinitionEqualIgnoreName,\n getRefs,\n newSnapshotCommitDataDD31,\n toChunkIndexDefinition,\n} from '../db/commit.ts';\nimport {createIndexBTree} from '../db/write.ts';\nimport type {DeletedClients} from '../deleted-clients.ts';\nimport type * as FormatVersion from '../format-version-enum.ts';\nimport {type FrozenJSONValue, deepFreeze} from '../frozen-json.ts';\nimport {type Hash, hashSchema} from '../hash.ts';\nimport {type IndexDefinitions, indexDefinitionsEqual} from '../index-defs.ts';\nimport {\n type ClientGroupID,\n type ClientID,\n clientGroupIDSchema,\n} from '../sync/ids.ts';\nimport {withWrite} from '../with-transactions.ts';\nimport {\n type ClientGroup,\n getClientGroup,\n getClientGroups,\n mutatorNamesEqual,\n setClientGroup,\n} from './client-groups.ts';\nimport {makeClientID} from './make-client-id.ts';\n\ntype FormatVersion = Enum<typeof FormatVersion>;\n\nexport type ClientMap = ReadonlyMap<ClientID, ClientV5 | ClientV6>;\n\nconst clientV5Schema = valita.readonlyObject({\n heartbeatTimestampMs: valita.number(),\n\n headHash: hashSchema,\n\n /**\n * The hash of a commit we are in the middle of refreshing into this client's\n * memdag.\n */\n tempRefreshHash: hashSchema.nullable(),\n\n /**\n * ID of this client's perdag client group. This needs to be sent in pull\n * request (to enable syncing all last mutation ids in the client group).\n */\n clientGroupID: clientGroupIDSchema,\n});\n\nexport type ClientV5 = valita.Infer<typeof clientV5Schema>;\n\nconst clientV6Schema = valita.readonlyObject({\n heartbeatTimestampMs: valita.number(),\n\n /**\n * A set of hashes, which contains:\n * 1. The hash of the last commit this client refreshed from its client group\n * (this is the commit it bootstrapped from until it completes its first\n * refresh).\n * 2. One or more hashes that were added to retain chunks of a commit while it\n * was being refreshed into this client's memdag. (This can be one or more\n * because refresh's cleanup step is a separate transaction and can fail).\n * Upon refresh completing and successfully running its clean up step, this\n * set will contain a single hash: the hash of the last commit this client\n * refreshed.\n */\n refreshHashes: valita.readonlyArray(hashSchema),\n\n /**\n * The hash of the last snapshot commit persisted by this client to this\n * client's client group, or null if has never persisted a snapshot.\n */\n persistHash: hashSchema.nullable(),\n\n /**\n * ID of this client's perdag client group. This needs to be sent in pull\n * request (to enable syncing all last mutation ids in the client group).\n */\n clientGroupID: clientGroupIDSchema,\n});\n\nexport type ClientV6 = valita.Infer<typeof clientV6Schema>;\n\nexport type Client = ClientV5 | ClientV6;\n\nfunction isClientV6(client: Client): client is ClientV6 {\n return (client as ClientV6).refreshHashes !== undefined;\n}\n\nexport const CLIENTS_HEAD_NAME = 'clients';\n\nconst clientSchema = valita.union(clientV5Schema, clientV6Schema);\n\nfunction assertClient(value: unknown): asserts value is Client {\n valita.assert(value, clientSchema);\n}\n\nexport function assertClientV6(value: unknown): asserts value is ClientV6 {\n valita.assert(value, clientV6Schema);\n}\n\nfunction chunkDataToClientMap(chunkData: unknown): ClientMap {\n assertObject(chunkData);\n const clients = new Map();\n for (const key in chunkData) {\n if (hasOwn(chunkData, key)) {\n const value = chunkData[key];\n if (value !== undefined) {\n assertClient(value);\n clients.set(key, value);\n }\n }\n }\n return clients;\n}\n\nfunction clientMapToChunkData(\n clients: ClientMap,\n dagWrite: Write,\n): FrozenJSONValue {\n for (const client of clients.values()) {\n if (isClientV6(client)) {\n client.refreshHashes.forEach(dagWrite.assertValidHash);\n if (client.persistHash) {\n dagWrite.assertValidHash(client.persistHash);\n }\n } else {\n dagWrite.assertValidHash(client.headHash);\n if (client.tempRefreshHash) {\n dagWrite.assertValidHash(client.tempRefreshHash);\n }\n }\n }\n return deepFreeze(Object.fromEntries(clients));\n}\n\nexport async function getClients(dagRead: Read): Promise<ClientMap> {\n const hash = await dagRead.getHead(CLIENTS_HEAD_NAME);\n return getClientsAtHash(hash, dagRead);\n}\n\nasync function getClientsAtHash(\n hash: Hash | undefined,\n dagRead: Read,\n): Promise<ClientMap> {\n if (!hash) {\n return new Map();\n }\n const chunk = await dagRead.getChunk(hash);\n return chunkDataToClientMap(chunk?.data);\n}\n\n/**\n * Used to signal that a client does not exist. Maybe it was garbage collected?\n */\nexport class ClientStateNotFoundError extends Error {\n name = 'ClientStateNotFoundError';\n readonly id: string;\n constructor(id: ClientID) {\n super(`Client state not found, id: ${id}`);\n this.id = id;\n }\n}\n\n/**\n * Throws a `ClientStateNotFoundError` if the client does not exist.\n */\nexport async function assertHasClientState(\n id: ClientID,\n dagRead: Read,\n): Promise<void> {\n if (!(await hasClientState(id, dagRead))) {\n throw new ClientStateNotFoundError(id);\n }\n}\n\nexport async function hasClientState(\n id: ClientID,\n dagRead: Read,\n): Promise<boolean> {\n return !!(await getClient(id, dagRead));\n}\n\nexport async function getClient(\n id: ClientID,\n dagRead: Read,\n): Promise<Client | undefined> {\n const clients = await getClients(dagRead);\n return clients.get(id);\n}\n\nexport async function mustGetClient(\n id: ClientID,\n dagRead: Read,\n): Promise<Client> {\n const client = await getClient(id, dagRead);\n if (!client) {\n throw new ClientStateNotFoundError(id);\n }\n return client;\n}\n\ntype InitClientV6Result = [\n client: ClientV6,\n hash: Hash,\n clientMap: ClientMap,\n newClientGroup: boolean,\n];\n\nexport function initClientV6(\n newClientID: ClientID,\n lc: LogContext,\n perdag: Store,\n mutatorNames: string[],\n indexes: IndexDefinitions,\n formatVersion: FormatVersion,\n enableClientGroupForking: boolean,\n): Promise<InitClientV6Result> {\n return withWrite(perdag, async dagWrite => {\n async function setClientsAndClientGroupAndCommit(\n basisHash: Hash | null,\n cookieJSON: FrozenCookie,\n valueHash: Hash,\n indexRecords: readonly IndexRecord[],\n ): Promise<InitClientV6Result> {\n const newSnapshotData = newSnapshotCommitDataDD31(\n basisHash,\n {},\n cookieJSON,\n valueHash,\n indexRecords,\n );\n const chunk = dagWrite.createChunk(\n newSnapshotData,\n getRefs(newSnapshotData),\n );\n\n const newClientGroupID = makeClientID();\n\n const newClient: ClientV6 = {\n heartbeatTimestampMs: Date.now(),\n refreshHashes: [chunk.hash],\n persistHash: null,\n clientGroupID: newClientGroupID,\n };\n\n const newClients = new Map(clients).set(newClientID, newClient);\n\n const clientGroup: ClientGroup = {\n headHash: chunk.hash,\n mutatorNames,\n indexes,\n mutationIDs: {},\n lastServerAckdMutationIDs: {},\n disabled: false,\n };\n\n await Promise.all([\n dagWrite.putChunk(chunk),\n setClients(newClients, dagWrite),\n setClientGroup(newClientGroupID, clientGroup, dagWrite),\n ]);\n\n return [newClient, chunk.hash, newClients, true];\n }\n\n const clients = await getClients(dagWrite);\n\n const res = await findMatchingClient(dagWrite, mutatorNames, indexes);\n if (res.type === FIND_MATCHING_CLIENT_TYPE_HEAD) {\n // We found a client group with matching mutators and indexes. We can\n // reuse it.\n const {clientGroupID, headHash} = res;\n\n const newClient: ClientV6 = {\n clientGroupID,\n refreshHashes: [headHash],\n heartbeatTimestampMs: Date.now(),\n persistHash: null,\n };\n const newClients = new Map(clients).set(newClientID, newClient);\n await setClients(newClients, dagWrite);\n\n return [newClient, headHash, newClients, false];\n }\n\n if (\n !enableClientGroupForking ||\n res.type === FIND_MATCHING_CLIENT_TYPE_NEW\n ) {\n // No client group to fork from. Create empty snapshot.\n const emptyBTreeChunk = dagWrite.createChunk(emptyDataNode, []);\n await dagWrite.putChunk(emptyBTreeChunk);\n\n // Create indexes\n const indexRecords: IndexRecord[] = [];\n\n // At this point the value of replicache is the empty tree so all index\n // maps will also be the empty tree.\n for (const [name, indexDefinition] of Object.entries(indexes)) {\n const chunkIndexDefinition = toChunkIndexDefinition(\n name,\n indexDefinition,\n );\n indexRecords.push({\n definition: chunkIndexDefinition,\n valueHash: emptyBTreeChunk.hash,\n });\n }\n\n return setClientsAndClientGroupAndCommit(\n null,\n null,\n emptyBTreeChunk.hash,\n indexRecords,\n );\n }\n\n // Now we create a new client and client group that we fork from the found\n // snapshot.\n assert(res.type === FIND_MATCHING_CLIENT_TYPE_FORK);\n\n const {snapshot} = res;\n\n // Create indexes\n const indexRecords: IndexRecord[] = [];\n const {valueHash, indexes: oldIndexes} = snapshot;\n const map = new BTreeRead(dagWrite, formatVersion, valueHash);\n\n for (const [name, indexDefinition] of Object.entries(indexes)) {\n const {prefix = '', jsonPointer, allowEmpty = false} = indexDefinition;\n const chunkIndexDefinition: ChunkIndexDefinition = {\n name,\n keyPrefix: prefix,\n jsonPointer,\n allowEmpty,\n };\n\n const oldIndex = findMatchingOldIndex(oldIndexes, chunkIndexDefinition);\n if (oldIndex) {\n indexRecords.push({\n definition: chunkIndexDefinition,\n valueHash: oldIndex.valueHash,\n });\n } else {\n const indexBTree = await createIndexBTree(\n lc,\n dagWrite,\n map,\n prefix,\n jsonPointer,\n allowEmpty,\n formatVersion,\n );\n indexRecords.push({\n definition: chunkIndexDefinition,\n valueHash: await indexBTree.flush(),\n });\n }\n }\n\n return setClientsAndClientGroupAndCommit(\n snapshot.meta.basisHash,\n snapshot.meta.cookieJSON,\n snapshot.valueHash,\n indexRecords,\n );\n });\n}\n\nfunction findMatchingOldIndex(\n oldIndexes: readonly IndexRecord[],\n chunkIndexDefinition: ChunkIndexDefinition,\n) {\n return oldIndexes.find(index =>\n chunkIndexDefinitionEqualIgnoreName(index.definition, chunkIndexDefinition),\n );\n}\n\nexport const FIND_MATCHING_CLIENT_TYPE_NEW = 0;\nexport const FIND_MATCHING_CLIENT_TYPE_FORK = 1;\nexport const FIND_MATCHING_CLIENT_TYPE_HEAD = 2;\n\nexport type FindMatchingClientResult =\n | {\n type: typeof FIND_MATCHING_CLIENT_TYPE_NEW;\n }\n | {\n type: typeof FIND_MATCHING_CLIENT_TYPE_FORK;\n snapshot: Commit<SnapshotMetaDD31>;\n }\n | {\n type: typeof FIND_MATCHING_CLIENT_TYPE_HEAD;\n clientGroupID: ClientGroupID;\n headHash: Hash;\n };\n\nexport async function findMatchingClient(\n dagRead: Read,\n mutatorNames: string[],\n indexes: IndexDefinitions,\n): Promise<FindMatchingClientResult> {\n let newestCookie: FrozenCookie | undefined;\n let bestSnapshot: Commit<SnapshotMetaDD31> | undefined;\n const mutatorNamesSet = new Set(mutatorNames);\n\n const clientGroups = await getClientGroups(dagRead);\n for (const [clientGroupID, clientGroup] of clientGroups) {\n if (\n !clientGroup.disabled &&\n mutatorNamesEqual(mutatorNamesSet, clientGroup.mutatorNames) &&\n indexDefinitionsEqual(indexes, clientGroup.indexes)\n ) {\n // exact match\n return {\n type: FIND_MATCHING_CLIENT_TYPE_HEAD,\n clientGroupID,\n headHash: clientGroup.headHash,\n };\n }\n\n const clientGroupSnapshotCommit = await baseSnapshotFromHash(\n clientGroup.headHash,\n dagRead,\n );\n assertSnapshotCommitDD31(clientGroupSnapshotCommit);\n\n const {cookieJSON} = clientGroupSnapshotCommit.meta;\n if (\n newestCookie === undefined ||\n compareCookies(cookieJSON, newestCookie) > 0\n ) {\n newestCookie = cookieJSON;\n bestSnapshot = clientGroupSnapshotCommit;\n }\n }\n\n if (bestSnapshot) {\n return {\n type: FIND_MATCHING_CLIENT_TYPE_FORK,\n snapshot: bestSnapshot,\n };\n }\n\n return {type: FIND_MATCHING_CLIENT_TYPE_NEW};\n}\n\nfunction getRefsForClients(clients: ClientMap): Refs {\n const refs: Set<Hash> = new Set();\n for (const client of clients.values()) {\n if (isClientV6(client)) {\n for (const hash of client.refreshHashes) {\n refs.add(hash);\n }\n if (client.persistHash) {\n refs.add(client.persistHash);\n }\n } else {\n refs.add(client.headHash);\n if (client.tempRefreshHash) {\n refs.add(client.tempRefreshHash);\n }\n }\n }\n return toRefs(refs);\n}\n\nexport async function getClientGroupForClient(\n clientID: ClientID,\n read: Read,\n): Promise<ClientGroup | undefined> {\n const clientGroupID = await getClientGroupIDForClient(clientID, read);\n if (!clientGroupID) {\n return undefined;\n }\n return getClientGroup(clientGroupID, read);\n}\n\nexport async function getClientGroupIDForClient(\n clientID: ClientID,\n read: Read,\n): Promise<ClientGroupID | undefined> {\n const client = await getClient(clientID, read);\n return client?.clientGroupID;\n}\n\n/**\n * Adds a Client to the ClientMap and updates the 'clients' head to point at\n * the updated clients.\n */\nexport async function setClient(\n clientID: ClientID,\n client: Client,\n dagWrite: Write,\n): Promise<Hash> {\n const clients = await getClients(dagWrite);\n const newClients = new Map(clients).set(clientID, client);\n return setClients(newClients, dagWrite);\n}\n\n/**\n * Sets the ClientMap and updates the 'clients' head top point at the new\n * clients.\n */\nexport async function setClients(\n clients: ClientMap,\n dagWrite: Write,\n): Promise<Hash> {\n const chunkData = clientMapToChunkData(clients, dagWrite);\n const chunk = dagWrite.createChunk(chunkData, getRefsForClients(clients));\n await dagWrite.putChunk(chunk);\n await dagWrite.setHead(CLIENTS_HEAD_NAME, chunk.hash);\n return chunk.hash;\n}\n\n/**\n * Callback function for when Replicache has deleted one or more clients.\n */\nexport type OnClientsDeleted = (\n deletedClients: DeletedClients,\n) => Promise<void>;\n"],"names":["valita.readonlyObject","valita.number","valita.readonlyArray","valita.union","valita.assert","valueHash","indexRecords"],"mappings":"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"}
@@ -0,0 +1,188 @@
1
+ import { assert } from "../../../shared/src/asserts.js";
2
+ import { initBgIntervalProcess } from "../bg-interval.js";
3
+ import { StoreImpl } from "../dag/store-impl.js";
4
+ import { addDeletedClients, mergeDeletedClients, normalizeDeletedClients, getDeletedClients } from "../deleted-clients.js";
5
+ import { Latest, DD31, V6, V7 } from "../format-version-enum.js";
6
+ import { getKVStoreProvider } from "../get-kv-store-provider.js";
7
+ import { newRandomHash, assertHash } from "../hash.js";
8
+ import { IDBStore } from "../kv/idb-store.js";
9
+ import { createLogContext } from "../log-options.js";
10
+ import { withWrite, withRead } from "../with-transactions.js";
11
+ import { getClientGroups, clientGroupHasPendingMutations } from "./client-groups.js";
12
+ import { getClients } from "./clients.js";
13
+ import { IDBDatabasesStore } from "./idb-databases-store.js";
14
+ const COLLECT_IDB_INTERVAL = 12 * 60 * 60 * 1e3;
15
+ const INITIAL_COLLECT_IDB_DELAY = 5 * 60 * 1e3;
16
+ function initCollectIDBDatabases(idbDatabasesStore, kvDropStore, collectInterval, initialCollectDelay, maxAge, enableMutationRecovery, onClientsDeleted, lc, signal) {
17
+ let initial = true;
18
+ initBgIntervalProcess(
19
+ "CollectIDBDatabases",
20
+ async () => {
21
+ await collectIDBDatabases(
22
+ idbDatabasesStore,
23
+ Date.now(),
24
+ maxAge,
25
+ kvDropStore,
26
+ enableMutationRecovery,
27
+ onClientsDeleted
28
+ );
29
+ },
30
+ () => {
31
+ if (initial) {
32
+ initial = false;
33
+ return initialCollectDelay;
34
+ }
35
+ return collectInterval;
36
+ },
37
+ lc,
38
+ signal
39
+ );
40
+ }
41
+ async function collectIDBDatabases(idbDatabasesStore, now, maxAge, kvDropStore, enableMutationRecovery, onClientsDeleted, newDagStore = defaultNewDagStore) {
42
+ const databases = await idbDatabasesStore.getDatabases();
43
+ const dbs = Object.values(databases);
44
+ const collectResults = await Promise.all(
45
+ dbs.map(
46
+ async (db) => [
47
+ db.name,
48
+ await gatherDatabaseInfoForCollect(
49
+ db,
50
+ now,
51
+ maxAge,
52
+ enableMutationRecovery,
53
+ newDagStore
54
+ )
55
+ ]
56
+ )
57
+ );
58
+ const dbNamesToRemove = [];
59
+ const dbNamesToKeep = [];
60
+ const deletedClientsToRemove = [];
61
+ for (const [dbName, [canCollect, deletedClients]] of collectResults) {
62
+ if (canCollect) {
63
+ dbNamesToRemove.push(dbName);
64
+ deletedClientsToRemove.push(...deletedClients);
65
+ } else {
66
+ dbNamesToKeep.push(dbName);
67
+ }
68
+ }
69
+ const { errors } = await dropDatabases(
70
+ idbDatabasesStore,
71
+ dbNamesToRemove,
72
+ kvDropStore
73
+ );
74
+ if (errors.length) {
75
+ throw errors[0];
76
+ }
77
+ if (deletedClientsToRemove.length > 0) {
78
+ let allDeletedClients = deletedClientsToRemove;
79
+ for (const name of dbNamesToKeep) {
80
+ await withWrite(newDagStore(name), async (dagWrite) => {
81
+ const newDeletedClients = await addDeletedClients(
82
+ dagWrite,
83
+ deletedClientsToRemove
84
+ );
85
+ allDeletedClients = mergeDeletedClients(
86
+ allDeletedClients,
87
+ newDeletedClients
88
+ );
89
+ });
90
+ }
91
+ const normalizedDeletedClients = normalizeDeletedClients(allDeletedClients);
92
+ await onClientsDeleted(normalizedDeletedClients);
93
+ }
94
+ }
95
+ async function dropDatabaseInternal(name, idbDatabasesStore, kvDropStore) {
96
+ await kvDropStore(name);
97
+ await idbDatabasesStore.deleteDatabases([name]);
98
+ }
99
+ async function dropDatabases(idbDatabasesStore, namesToRemove, kvDropStore) {
100
+ const dropStoreResults = await Promise.allSettled(
101
+ namesToRemove.map(async (name) => {
102
+ await dropDatabaseInternal(name, idbDatabasesStore, kvDropStore);
103
+ return name;
104
+ })
105
+ );
106
+ const dropped = [];
107
+ const errors = [];
108
+ for (const result of dropStoreResults) {
109
+ if (result.status === "fulfilled") {
110
+ dropped.push(result.value);
111
+ } else {
112
+ errors.push(result.reason);
113
+ }
114
+ }
115
+ return { dropped, errors };
116
+ }
117
+ function defaultNewDagStore(name) {
118
+ const perKvStore = new IDBStore(name);
119
+ return new StoreImpl(perKvStore, newRandomHash, assertHash);
120
+ }
121
+ function gatherDatabaseInfoForCollect(db, now, maxAge, enableMutationRecovery, newDagStore) {
122
+ if (db.replicacheFormatVersion > Latest) {
123
+ return [false];
124
+ }
125
+ assert(db.lastOpenedTimestampMS !== void 0);
126
+ if (now - db.lastOpenedTimestampMS < maxAge) {
127
+ return [false];
128
+ }
129
+ assert(
130
+ db.replicacheFormatVersion === DD31 || db.replicacheFormatVersion === V6 || db.replicacheFormatVersion === V7
131
+ );
132
+ return canDatabaseBeCollectedAndGetDeletedClientIDs(
133
+ enableMutationRecovery,
134
+ newDagStore(db.name)
135
+ );
136
+ }
137
+ async function dropDatabase(dbName, opts) {
138
+ const logContext = createLogContext(opts?.logLevel, opts?.logSinks, {
139
+ dropDatabase: void 0
140
+ });
141
+ const kvStoreProvider = getKVStoreProvider(logContext, opts?.kvStore);
142
+ await dropDatabaseInternal(
143
+ dbName,
144
+ new IDBDatabasesStore(kvStoreProvider.create),
145
+ kvStoreProvider.drop
146
+ );
147
+ }
148
+ async function dropAllDatabases(opts) {
149
+ const logContext = createLogContext(opts?.logLevel, opts?.logSinks, {
150
+ dropAllDatabases: void 0
151
+ });
152
+ const kvStoreProvider = getKVStoreProvider(logContext, opts?.kvStore);
153
+ const store = new IDBDatabasesStore(kvStoreProvider.create);
154
+ const databases = await store.getDatabases();
155
+ const dbNames = Object.values(databases).map((db) => db.name);
156
+ return dropDatabases(store, dbNames, kvStoreProvider.drop);
157
+ }
158
+ function canDatabaseBeCollectedAndGetDeletedClientIDs(enableMutationRecovery, perdag) {
159
+ return withRead(perdag, async (read) => {
160
+ if (enableMutationRecovery) {
161
+ const clientGroups = await getClientGroups(read);
162
+ for (const clientGroup of clientGroups.values()) {
163
+ if (clientGroupHasPendingMutations(clientGroup)) {
164
+ return [false];
165
+ }
166
+ }
167
+ }
168
+ const clients = await getClients(read);
169
+ const existingDeletedClients = await getDeletedClients(read);
170
+ const deletedClients = [...existingDeletedClients];
171
+ for (const [clientID, client] of clients) {
172
+ deletedClients.push({
173
+ clientID,
174
+ clientGroupID: client.clientGroupID
175
+ });
176
+ }
177
+ return [true, deletedClients];
178
+ });
179
+ }
180
+ export {
181
+ COLLECT_IDB_INTERVAL,
182
+ INITIAL_COLLECT_IDB_DELAY,
183
+ collectIDBDatabases,
184
+ dropAllDatabases,
185
+ dropDatabase,
186
+ initCollectIDBDatabases
187
+ };
188
+ //# sourceMappingURL=collect-idb-databases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-idb-databases.js","sources":["../../../../../replicache/src/persist/collect-idb-databases.ts"],"sourcesContent":["import type {LogContext, LogLevel, LogSink} from '@rocicorp/logger';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport type {MaybePromise} from '../../../shared/src/types.ts';\nimport {initBgIntervalProcess} from '../bg-interval.ts';\nimport {StoreImpl} from '../dag/store-impl.ts';\nimport type {Store} from '../dag/store.ts';\nimport {\n addDeletedClients,\n getDeletedClients,\n mergeDeletedClients,\n normalizeDeletedClients,\n type DeletedClients,\n type WritableDeletedClients,\n} from '../deleted-clients.ts';\nimport * as FormatVersion from '../format-version-enum.ts';\nimport {getKVStoreProvider} from '../get-kv-store-provider.ts';\nimport {assertHash, newRandomHash} from '../hash.ts';\nimport {IDBStore} from '../kv/idb-store.ts';\nimport type {DropStore, StoreProvider} from '../kv/store.ts';\nimport {createLogContext} from '../log-options.ts';\nimport {withRead, withWrite} from '../with-transactions.ts';\nimport {\n clientGroupHasPendingMutations,\n getClientGroups,\n} from './client-groups.ts';\nimport type {OnClientsDeleted} from './clients.ts';\nimport {getClients} from './clients.ts';\nimport type {IndexedDBDatabase} from './idb-databases-store.ts';\nimport {IDBDatabasesStore} from './idb-databases-store.ts';\n\n/**\n * How frequently to try to collect\n */\nexport const COLLECT_IDB_INTERVAL = 12 * 60 * 60 * 1000; // 12 hours\n\n/**\n * We delay the initial collection to prevent doing it at startup.\n */\nexport const INITIAL_COLLECT_IDB_DELAY = 5 * 60 * 1000; // 5 minutes\n\nexport function initCollectIDBDatabases(\n idbDatabasesStore: IDBDatabasesStore,\n kvDropStore: DropStore,\n collectInterval: number,\n initialCollectDelay: number,\n maxAge: number,\n enableMutationRecovery: boolean,\n onClientsDeleted: OnClientsDeleted,\n lc: LogContext,\n signal: AbortSignal,\n): void {\n let initial = true;\n initBgIntervalProcess(\n 'CollectIDBDatabases',\n async () => {\n await collectIDBDatabases(\n idbDatabasesStore,\n Date.now(),\n maxAge,\n kvDropStore,\n enableMutationRecovery,\n onClientsDeleted,\n );\n },\n () => {\n if (initial) {\n initial = false;\n return initialCollectDelay;\n }\n return collectInterval;\n },\n lc,\n signal,\n );\n}\n\n/**\n * Collects IDB databases that are no longer needed.\n */\nexport async function collectIDBDatabases(\n idbDatabasesStore: IDBDatabasesStore,\n now: number,\n maxAge: number,\n kvDropStore: DropStore,\n enableMutationRecovery: boolean,\n onClientsDeleted: OnClientsDeleted,\n newDagStore = defaultNewDagStore,\n): Promise<void> {\n const databases = await idbDatabasesStore.getDatabases();\n\n const dbs = Object.values(databases);\n const collectResults = await Promise.all(\n dbs.map(\n async db =>\n [\n db.name,\n await gatherDatabaseInfoForCollect(\n db,\n now,\n maxAge,\n enableMutationRecovery,\n newDagStore,\n ),\n ] as const,\n ),\n );\n\n const dbNamesToRemove: string[] = [];\n const dbNamesToKeep: string[] = [];\n const deletedClientsToRemove: WritableDeletedClients = [];\n for (const [dbName, [canCollect, deletedClients]] of collectResults) {\n if (canCollect) {\n dbNamesToRemove.push(dbName);\n deletedClientsToRemove.push(...deletedClients);\n } else {\n dbNamesToKeep.push(dbName);\n }\n }\n\n const {errors} = await dropDatabases(\n idbDatabasesStore,\n dbNamesToRemove,\n kvDropStore,\n );\n if (errors.length) {\n throw errors[0];\n }\n\n if (deletedClientsToRemove.length > 0) {\n // Add the deleted clients to all the dbs that survived the collection.\n let allDeletedClients: DeletedClients = deletedClientsToRemove;\n for (const name of dbNamesToKeep) {\n await withWrite(newDagStore(name), async dagWrite => {\n const newDeletedClients = await addDeletedClients(\n dagWrite,\n deletedClientsToRemove,\n );\n\n allDeletedClients = mergeDeletedClients(\n allDeletedClients,\n newDeletedClients,\n );\n });\n }\n // normalize and dedupe\n const normalizedDeletedClients = normalizeDeletedClients(allDeletedClients);\n\n // Call the callback with the normalized deleted clients\n await onClientsDeleted(normalizedDeletedClients);\n }\n}\n\nasync function dropDatabaseInternal(\n name: string,\n idbDatabasesStore: IDBDatabasesStore,\n kvDropStore: DropStore,\n) {\n await kvDropStore(name);\n await idbDatabasesStore.deleteDatabases([name]);\n}\n\nasync function dropDatabases(\n idbDatabasesStore: IDBDatabasesStore,\n namesToRemove: string[],\n kvDropStore: DropStore,\n): Promise<{dropped: string[]; errors: unknown[]}> {\n // Try to remove the databases in parallel. Don't let a single reject fail the\n // other ones. We will check for failures afterwards.\n const dropStoreResults = await Promise.allSettled(\n namesToRemove.map(async name => {\n await dropDatabaseInternal(name, idbDatabasesStore, kvDropStore);\n return name;\n }),\n );\n\n const dropped: string[] = [];\n const errors: unknown[] = [];\n for (const result of dropStoreResults) {\n if (result.status === 'fulfilled') {\n dropped.push(result.value);\n } else {\n errors.push(result.reason);\n }\n }\n\n return {dropped, errors};\n}\n\nfunction defaultNewDagStore(name: string): Store {\n const perKvStore = new IDBStore(name);\n return new StoreImpl(perKvStore, newRandomHash, assertHash);\n}\n\n/**\n * If the database is older than maxAge and there are no pending mutations we\n * return `true` and an array of the deleted clients in that db. If the database is\n * too new or there are pending mutations we return `[false]`.\n */\nfunction gatherDatabaseInfoForCollect(\n db: IndexedDBDatabase,\n now: number,\n maxAge: number,\n enableMutationRecovery: boolean,\n newDagStore: typeof defaultNewDagStore,\n): MaybePromise<\n [canCollect: false] | [canCollect: true, deletedClients: DeletedClients]\n> {\n if (db.replicacheFormatVersion > FormatVersion.Latest) {\n return [false];\n }\n\n // 0 is used in testing\n assert(db.lastOpenedTimestampMS !== undefined);\n\n // - For DD31 we can delete the database if it is older than maxAge and\n // there are no pending mutations.\n if (now - db.lastOpenedTimestampMS < maxAge) {\n return [false];\n }\n // If increase the format version we need to decide how to deal with this\n // logic.\n assert(\n db.replicacheFormatVersion === FormatVersion.DD31 ||\n db.replicacheFormatVersion === FormatVersion.V6 ||\n db.replicacheFormatVersion === FormatVersion.V7,\n );\n return canDatabaseBeCollectedAndGetDeletedClientIDs(\n enableMutationRecovery,\n newDagStore(db.name),\n );\n}\n\n/**\n * Options for `dropDatabase` and `dropAllDatabases`.\n */\nexport type DropDatabaseOptions = {\n /**\n * Allows providing a custom implementation of the underlying storage layer.\n * Default is `'idb'`.\n */\n kvStore?: 'idb' | 'mem' | StoreProvider | undefined;\n /**\n * Determines how much logging to do. When this is set to `'debug'`,\n * Replicache will also log `'info'` and `'error'` messages. When set to\n * `'info'` we log `'info'` and `'error'` but not `'debug'`. When set to\n * `'error'` we only log `'error'` messages.\n * Default is `'info'`.\n */\n logLevel?: LogLevel | undefined;\n /**\n * Enables custom handling of logs.\n *\n * By default logs are logged to the console. If you would like logs to be\n * sent elsewhere (e.g. to a cloud logging service like DataDog) you can\n * provide an array of {@link LogSink}s. Logs at or above\n * {@link DropDatabaseOptions.logLevel} are sent to each of these {@link LogSink}s.\n * If you would still like logs to go to the console, include\n * `consoleLogSink` in the array.\n *\n * ```ts\n * logSinks: [consoleLogSink, myCloudLogSink],\n * ```\n * Default is `[consoleLogSink]`.\n */\n logSinks?: LogSink[] | undefined;\n};\n\n/**\n * Drops the specified database.\n * @param dbName The name of the database to drop.\n * @param opts Options for dropping the database.\n */\nexport async function dropDatabase(dbName: string, opts?: DropDatabaseOptions) {\n const logContext = createLogContext(opts?.logLevel, opts?.logSinks, {\n dropDatabase: undefined,\n });\n const kvStoreProvider = getKVStoreProvider(logContext, opts?.kvStore);\n await dropDatabaseInternal(\n dbName,\n new IDBDatabasesStore(kvStoreProvider.create),\n kvStoreProvider.drop,\n );\n}\n\n/**\n * Deletes all IndexedDB data associated with Replicache.\n *\n * Returns an object with the names of the successfully dropped databases\n * and any errors encountered while dropping.\n */\nexport async function dropAllDatabases(opts?: DropDatabaseOptions): Promise<{\n dropped: string[];\n errors: unknown[];\n}> {\n const logContext = createLogContext(opts?.logLevel, opts?.logSinks, {\n dropAllDatabases: undefined,\n });\n const kvStoreProvider = getKVStoreProvider(logContext, opts?.kvStore);\n const store = new IDBDatabasesStore(kvStoreProvider.create);\n const databases = await store.getDatabases();\n const dbNames = Object.values(databases).map(db => db.name);\n return dropDatabases(store, dbNames, kvStoreProvider.drop);\n}\n\n/**\n * Deletes all IndexedDB data associated with Replicache.\n *\n * Returns an object with the names of the successfully dropped databases\n * and any errors encountered while dropping.\n *\n * @deprecated Use `dropAllDatabases` instead.\n */\nexport function deleteAllReplicacheData(opts?: DropDatabaseOptions) {\n return dropAllDatabases(opts);\n}\n\n/**\n * If there are pending mutations in any of the clients in this db we return\n * `[false]`. Otherwise we return `true` and an array of the deleted clients to\n * remove.\n */\nfunction canDatabaseBeCollectedAndGetDeletedClientIDs(\n enableMutationRecovery: boolean,\n perdag: Store,\n): Promise<\n [canCollect: false] | [canCollect: true, deletedClients: DeletedClients]\n> {\n return withRead(perdag, async read => {\n // If mutation recovery is disabled we do not care if there are pending\n // mutations when we decide if we can collect the database.\n if (enableMutationRecovery) {\n const clientGroups = await getClientGroups(read);\n for (const clientGroup of clientGroups.values()) {\n if (clientGroupHasPendingMutations(clientGroup)) {\n return [false];\n }\n }\n }\n\n const clients = await getClients(read);\n const existingDeletedClients = await getDeletedClients(read);\n const deletedClients: WritableDeletedClients = [...existingDeletedClients];\n\n // Add all current clients to the deleted clients list\n for (const [clientID, client] of clients) {\n deletedClients.push({\n clientID,\n clientGroupID: client.clientGroupID,\n });\n }\n\n // The normalization (deduping and sorting) will be done when storing\n return [true, deletedClients];\n });\n}\n"],"names":["FormatVersion.Latest","FormatVersion.DD31","FormatVersion.V6","FormatVersion.V7"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { promiseVoid } from "../../../shared/src/resolved-promises.js";
2
+ import { Visitor } from "../dag/visitor.js";
3
+ class GatherMemoryOnlyVisitor extends Visitor {
4
+ #gatheredChunks = /* @__PURE__ */ new Map();
5
+ #lazyRead;
6
+ constructor(dagRead) {
7
+ super(dagRead);
8
+ this.#lazyRead = dagRead;
9
+ }
10
+ get gatheredChunks() {
11
+ return this.#gatheredChunks;
12
+ }
13
+ visit(h) {
14
+ if (!this.#lazyRead.isMemOnlyChunkHash(h)) {
15
+ return promiseVoid;
16
+ }
17
+ return super.visit(h);
18
+ }
19
+ visitChunk(chunk) {
20
+ this.#gatheredChunks.set(chunk.hash, chunk);
21
+ return super.visitChunk(chunk);
22
+ }
23
+ }
24
+ export {
25
+ GatherMemoryOnlyVisitor
26
+ };
27
+ //# sourceMappingURL=gather-mem-only-visitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gather-mem-only-visitor.js","sources":["../../../../../replicache/src/persist/gather-mem-only-visitor.ts"],"sourcesContent":["import {promiseVoid} from '../../../shared/src/resolved-promises.ts';\nimport type {Chunk} from '../dag/chunk.ts';\nimport type {LazyRead} from '../dag/lazy-store.ts';\nimport {Visitor} from '../dag/visitor.ts';\nimport type {Hash} from '../hash.ts';\n\nexport class GatherMemoryOnlyVisitor extends Visitor {\n readonly #gatheredChunks: Map<Hash, Chunk> = new Map();\n readonly #lazyRead: LazyRead;\n\n constructor(dagRead: LazyRead) {\n super(dagRead);\n this.#lazyRead = dagRead;\n }\n\n get gatheredChunks(): ReadonlyMap<Hash, Chunk> {\n return this.#gatheredChunks;\n }\n\n override visit(h: Hash): Promise<void> {\n if (!this.#lazyRead.isMemOnlyChunkHash(h)) {\n // Not a memory-only hash, no need to visit anything else.\n return promiseVoid;\n }\n return super.visit(h);\n }\n\n override visitChunk(chunk: Chunk): Promise<void> {\n this.#gatheredChunks.set(chunk.hash, chunk);\n return super.visitChunk(chunk);\n }\n}\n"],"names":[],"mappings":";;AAMO,MAAM,gCAAgC,QAAQ;AAAA,EAC1C,sCAAwC,IAAA;AAAA,EACxC;AAAA,EAET,YAAY,SAAmB;AAC7B,UAAM,OAAO;AACb,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,IAAI,iBAA2C;AAC7C,WAAO,KAAK;AAAA,EACd;AAAA,EAES,MAAM,GAAwB;AACrC,QAAI,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAG;AAEzC,aAAO;AAAA,IACT;AACA,WAAO,MAAM,MAAM,CAAC;AAAA,EACtB;AAAA,EAES,WAAW,OAA6B;AAC/C,SAAK,gBAAgB,IAAI,MAAM,MAAM,KAAK;AAC1C,WAAO,MAAM,WAAW,KAAK;AAAA,EAC/B;AACF;"}