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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1113) hide show
  1. package/out/_virtual/_@oxc-project_runtime@0.115.0/helpers/usingCtx.js +57 -0
  2. package/out/_virtual/_rolldown/runtime.js +27 -0
  3. package/out/analyze-query/src/bin-analyze.js +195 -280
  4. package/out/analyze-query/src/bin-analyze.js.map +1 -1
  5. package/out/analyze-query/src/bin-transform.js +35 -40
  6. package/out/analyze-query/src/bin-transform.js.map +1 -1
  7. package/out/analyze-query/src/explain-queries.js +11 -13
  8. package/out/analyze-query/src/explain-queries.js.map +1 -1
  9. package/out/analyze-query/src/run-ast.d.ts.map +1 -1
  10. package/out/analyze-query/src/run-ast.js +68 -94
  11. package/out/analyze-query/src/run-ast.js.map +1 -1
  12. package/out/ast-to-zql/src/ast-to-zql.js +105 -153
  13. package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
  14. package/out/ast-to-zql/src/bin.js +57 -62
  15. package/out/ast-to-zql/src/bin.js.map +1 -1
  16. package/out/ast-to-zql/src/format.js +14 -13
  17. package/out/ast-to-zql/src/format.js.map +1 -1
  18. package/out/datadog/src/datadog-log-sink.js +148 -213
  19. package/out/datadog/src/datadog-log-sink.js.map +1 -1
  20. package/out/otel/src/enabled.js +9 -11
  21. package/out/otel/src/enabled.js.map +1 -1
  22. package/out/otel/src/log-options.js +25 -35
  23. package/out/otel/src/log-options.js.map +1 -1
  24. package/out/otel/src/maybe-time.js +13 -14
  25. package/out/otel/src/maybe-time.js.map +1 -1
  26. package/out/otel/src/span.js +23 -26
  27. package/out/otel/src/span.js.map +1 -1
  28. package/out/otel/src/test-log-config.js +11 -10
  29. package/out/otel/src/test-log-config.js.map +1 -1
  30. package/out/otel/src/version.js +6 -5
  31. package/out/otel/src/version.js.map +1 -1
  32. package/out/replicache/src/async-iterable-to-array.js +8 -9
  33. package/out/replicache/src/async-iterable-to-array.js.map +1 -1
  34. package/out/replicache/src/bg-interval.js +28 -35
  35. package/out/replicache/src/bg-interval.js.map +1 -1
  36. package/out/replicache/src/btree/diff.js +6 -5
  37. package/out/replicache/src/btree/diff.js.map +1 -1
  38. package/out/replicache/src/btree/node.js +281 -372
  39. package/out/replicache/src/btree/node.js.map +1 -1
  40. package/out/replicache/src/btree/read.js +155 -256
  41. package/out/replicache/src/btree/read.js.map +1 -1
  42. package/out/replicache/src/btree/splice.js +60 -80
  43. package/out/replicache/src/btree/splice.js.map +1 -1
  44. package/out/replicache/src/btree/write.js +134 -158
  45. package/out/replicache/src/btree/write.js.map +1 -1
  46. package/out/replicache/src/call-default-fetch.js +28 -32
  47. package/out/replicache/src/call-default-fetch.js.map +1 -1
  48. package/out/replicache/src/config.js +2 -0
  49. package/out/replicache/src/connection-loop-delegates.js +31 -33
  50. package/out/replicache/src/connection-loop-delegates.js.map +1 -1
  51. package/out/replicache/src/connection-loop.js +174 -240
  52. package/out/replicache/src/connection-loop.js.map +1 -1
  53. package/out/replicache/src/cookies.js +22 -32
  54. package/out/replicache/src/cookies.js.map +1 -1
  55. package/out/replicache/src/dag/chunk.js +44 -50
  56. package/out/replicache/src/dag/chunk.js.map +1 -1
  57. package/out/replicache/src/dag/gc.js +94 -114
  58. package/out/replicache/src/dag/gc.js.map +1 -1
  59. package/out/replicache/src/dag/key.js +9 -11
  60. package/out/replicache/src/dag/key.js.map +1 -1
  61. package/out/replicache/src/dag/lazy-store.js +458 -510
  62. package/out/replicache/src/dag/lazy-store.js.map +1 -1
  63. package/out/replicache/src/dag/store-impl.js +147 -178
  64. package/out/replicache/src/dag/store-impl.js.map +1 -1
  65. package/out/replicache/src/dag/store.js +19 -22
  66. package/out/replicache/src/dag/store.js.map +1 -1
  67. package/out/replicache/src/dag/visitor.js +23 -21
  68. package/out/replicache/src/dag/visitor.js.map +1 -1
  69. package/out/replicache/src/db/commit.js +209 -283
  70. package/out/replicache/src/db/commit.js.map +1 -1
  71. package/out/replicache/src/db/index.js +79 -122
  72. package/out/replicache/src/db/index.js.map +1 -1
  73. package/out/replicache/src/db/read.js +44 -60
  74. package/out/replicache/src/db/read.js.map +1 -1
  75. package/out/replicache/src/db/rebase.js +22 -77
  76. package/out/replicache/src/db/rebase.js.map +1 -1
  77. package/out/replicache/src/db/write.js +162 -296
  78. package/out/replicache/src/db/write.js.map +1 -1
  79. package/out/replicache/src/deleted-clients.js +59 -87
  80. package/out/replicache/src/deleted-clients.js.map +1 -1
  81. package/out/replicache/src/error-responses.js +18 -26
  82. package/out/replicache/src/error-responses.js.map +1 -1
  83. package/out/replicache/src/expo-sqlite.js +2 -0
  84. package/out/replicache/src/frozen-json.js +74 -108
  85. package/out/replicache/src/frozen-json.js.map +1 -1
  86. package/out/replicache/src/get-default-puller.js +34 -46
  87. package/out/replicache/src/get-default-puller.js.map +1 -1
  88. package/out/replicache/src/get-default-pusher.js +25 -33
  89. package/out/replicache/src/get-default-pusher.js.map +1 -1
  90. package/out/replicache/src/get-kv-store-provider.js +18 -20
  91. package/out/replicache/src/get-kv-store-provider.js.map +1 -1
  92. package/out/replicache/src/hash.js +29 -29
  93. package/out/replicache/src/hash.js.map +1 -1
  94. package/out/replicache/src/http-request-info.js +9 -8
  95. package/out/replicache/src/http-request-info.js.map +1 -1
  96. package/out/replicache/src/impl.js +2 -0
  97. package/out/replicache/src/index-defs.js +17 -28
  98. package/out/replicache/src/index-defs.js.map +1 -1
  99. package/out/replicache/src/kv/expo-sqlite/store.js +52 -50
  100. package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
  101. package/out/replicache/src/kv/idb-store-with-mem-fallback.js +71 -68
  102. package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -1
  103. package/out/replicache/src/kv/idb-store.js +144 -168
  104. package/out/replicache/src/kv/idb-store.js.map +1 -1
  105. package/out/replicache/src/kv/mem-store.js +57 -45
  106. package/out/replicache/src/kv/mem-store.js.map +1 -1
  107. package/out/replicache/src/kv/op-sqlite/store.js +56 -62
  108. package/out/replicache/src/kv/op-sqlite/store.js.map +1 -1
  109. package/out/replicache/src/kv/op-sqlite/types.d.ts.map +1 -1
  110. package/out/replicache/src/kv/op-sqlite/types.js +7 -6
  111. package/out/replicache/src/kv/op-sqlite/types.js.map +1 -1
  112. package/out/replicache/src/kv/read-impl.js +26 -25
  113. package/out/replicache/src/kv/read-impl.js.map +1 -1
  114. package/out/replicache/src/kv/sqlite-store.js +194 -207
  115. package/out/replicache/src/kv/sqlite-store.js.map +1 -1
  116. package/out/replicache/src/kv/throw-if-closed.js +12 -19
  117. package/out/replicache/src/kv/throw-if-closed.js.map +1 -1
  118. package/out/replicache/src/kv/write-impl-base.js +44 -56
  119. package/out/replicache/src/kv/write-impl-base.js.map +1 -1
  120. package/out/replicache/src/kv/write-impl.js +22 -26
  121. package/out/replicache/src/kv/write-impl.js.map +1 -1
  122. package/out/replicache/src/lazy.js +10 -11
  123. package/out/replicache/src/lazy.js.map +1 -1
  124. package/out/replicache/src/log-options.js +14 -7
  125. package/out/replicache/src/log-options.js.map +1 -1
  126. package/out/replicache/src/make-idb-name.js +14 -9
  127. package/out/replicache/src/make-idb-name.js.map +1 -1
  128. package/out/replicache/src/mutation-recovery.js +12 -0
  129. package/out/replicache/src/mutation-recovery.js.map +1 -0
  130. package/out/replicache/src/new-client-channel.js +34 -42
  131. package/out/replicache/src/new-client-channel.js.map +1 -1
  132. package/out/replicache/src/on-persist-channel.js +26 -29
  133. package/out/replicache/src/on-persist-channel.js.map +1 -1
  134. package/out/replicache/src/op-sqlite.js +2 -0
  135. package/out/replicache/src/patch-operation.js +27 -36
  136. package/out/replicache/src/patch-operation.js.map +1 -1
  137. package/out/replicache/src/pending-mutations.js +14 -12
  138. package/out/replicache/src/pending-mutations.js.map +1 -1
  139. package/out/replicache/src/persist/client-gc.js +36 -51
  140. package/out/replicache/src/persist/client-gc.js.map +1 -1
  141. package/out/replicache/src/persist/client-group-gc.js +29 -36
  142. package/out/replicache/src/persist/client-group-gc.js.map +1 -1
  143. package/out/replicache/src/persist/client-groups.js +80 -154
  144. package/out/replicache/src/persist/client-groups.js.map +1 -1
  145. package/out/replicache/src/persist/clients.js +212 -307
  146. package/out/replicache/src/persist/clients.js.map +1 -1
  147. package/out/replicache/src/persist/collect-idb-databases.js +109 -171
  148. package/out/replicache/src/persist/collect-idb-databases.js.map +1 -1
  149. package/out/replicache/src/persist/gather-mem-only-visitor.js +23 -24
  150. package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -1
  151. package/out/replicache/src/persist/gather-not-cached-visitor.js +35 -33
  152. package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -1
  153. package/out/replicache/src/persist/heartbeat.js +31 -41
  154. package/out/replicache/src/persist/heartbeat.js.map +1 -1
  155. package/out/replicache/src/persist/idb-databases-store-db-name.js +9 -12
  156. package/out/replicache/src/persist/idb-databases-store-db-name.js.map +1 -1
  157. package/out/replicache/src/persist/idb-databases-store.js +78 -97
  158. package/out/replicache/src/persist/idb-databases-store.js.map +1 -1
  159. package/out/replicache/src/persist/make-client-id.js +13 -9
  160. package/out/replicache/src/persist/make-client-id.js.map +1 -1
  161. package/out/replicache/src/persist/persist.js +113 -174
  162. package/out/replicache/src/persist/persist.js.map +1 -1
  163. package/out/replicache/src/persist/refresh.js +94 -183
  164. package/out/replicache/src/persist/refresh.js.map +1 -1
  165. package/out/replicache/src/process-scheduler.js +122 -143
  166. package/out/replicache/src/process-scheduler.js.map +1 -1
  167. package/out/replicache/src/pusher.js +21 -26
  168. package/out/replicache/src/pusher.js.map +1 -1
  169. package/out/replicache/src/replicache-impl.js +844 -1184
  170. package/out/replicache/src/replicache-impl.js.map +1 -1
  171. package/out/replicache/src/report-error.js +9 -6
  172. package/out/replicache/src/report-error.js.map +1 -1
  173. package/out/replicache/src/request-idle.js +13 -11
  174. package/out/replicache/src/request-idle.js.map +1 -1
  175. package/out/replicache/src/scan-iterator.d.ts.map +1 -1
  176. package/out/replicache/src/scan-iterator.js +108 -135
  177. package/out/replicache/src/scan-iterator.js.map +1 -1
  178. package/out/replicache/src/scan-options.js +33 -39
  179. package/out/replicache/src/scan-options.js.map +1 -1
  180. package/out/replicache/src/set-interval-with-signal.js +11 -10
  181. package/out/replicache/src/set-interval-with-signal.js.map +1 -1
  182. package/out/replicache/src/sqlite.js +2 -0
  183. package/out/replicache/src/subscriptions.js +222 -338
  184. package/out/replicache/src/subscriptions.js.map +1 -1
  185. package/out/replicache/src/sync/diff.js +52 -65
  186. package/out/replicache/src/sync/diff.js.map +1 -1
  187. package/out/replicache/src/sync/ids.js +8 -9
  188. package/out/replicache/src/sync/ids.js.map +1 -1
  189. package/out/replicache/src/sync/patch.js +34 -45
  190. package/out/replicache/src/sync/patch.js.map +1 -1
  191. package/out/replicache/src/sync/pull-error.js +15 -15
  192. package/out/replicache/src/sync/pull-error.js.map +1 -1
  193. package/out/replicache/src/sync/pull.js +145 -283
  194. package/out/replicache/src/sync/pull.js.map +1 -1
  195. package/out/replicache/src/sync/push.js +64 -79
  196. package/out/replicache/src/sync/push.js.map +1 -1
  197. package/out/replicache/src/sync/request-id.js +23 -15
  198. package/out/replicache/src/sync/request-id.js.map +1 -1
  199. package/out/replicache/src/sync/sync-head-name.js +6 -5
  200. package/out/replicache/src/sync/sync-head-name.js.map +1 -1
  201. package/out/replicache/src/to-error.js +7 -8
  202. package/out/replicache/src/to-error.js.map +1 -1
  203. package/out/replicache/src/transaction-closed-error.js +15 -15
  204. package/out/replicache/src/transaction-closed-error.js.map +1 -1
  205. package/out/replicache/src/transactions.js +120 -140
  206. package/out/replicache/src/transactions.js.map +1 -1
  207. package/out/replicache/src/version.js +9 -5
  208. package/out/replicache/src/version.js.map +1 -1
  209. package/out/replicache/src/with-transactions.js +23 -20
  210. package/out/replicache/src/with-transactions.js.map +1 -1
  211. package/out/shared/src/abort-error.js +7 -6
  212. package/out/shared/src/abort-error.js.map +1 -1
  213. package/out/shared/src/arrays.js +35 -42
  214. package/out/shared/src/arrays.js.map +1 -1
  215. package/out/shared/src/asserts.js +21 -45
  216. package/out/shared/src/asserts.js.map +1 -1
  217. package/out/shared/src/bigint-json.js +42 -38
  218. package/out/shared/src/bigint-json.js.map +1 -1
  219. package/out/shared/src/binary-search.js +27 -18
  220. package/out/shared/src/binary-search.js.map +1 -1
  221. package/out/shared/src/broadcast-channel.js +20 -23
  222. package/out/shared/src/broadcast-channel.js.map +1 -1
  223. package/out/shared/src/browser-env.js +11 -17
  224. package/out/shared/src/browser-env.js.map +1 -1
  225. package/out/shared/src/btree-set.js +419 -481
  226. package/out/shared/src/btree-set.js.map +1 -1
  227. package/out/shared/src/cache.js +43 -36
  228. package/out/shared/src/cache.js.map +1 -1
  229. package/out/shared/src/centroid.js +24 -26
  230. package/out/shared/src/centroid.js.map +1 -1
  231. package/out/shared/src/config.js +6 -6
  232. package/out/shared/src/config.js.map +1 -1
  233. package/out/shared/src/custom-key-map.js +54 -58
  234. package/out/shared/src/custom-key-map.js.map +1 -1
  235. package/out/shared/src/custom-key-set.js +53 -51
  236. package/out/shared/src/custom-key-set.js.map +1 -1
  237. package/out/shared/src/deep-clone.js +30 -41
  238. package/out/shared/src/deep-clone.js.map +1 -1
  239. package/out/shared/src/deep-merge.js +25 -24
  240. package/out/shared/src/deep-merge.js.map +1 -1
  241. package/out/shared/src/document-visible.js +63 -70
  242. package/out/shared/src/document-visible.js.map +1 -1
  243. package/out/shared/src/dotenv.js +7 -3
  244. package/out/shared/src/dotenv.js.map +1 -1
  245. package/out/shared/src/error.js +43 -64
  246. package/out/shared/src/error.js.map +1 -1
  247. package/out/shared/src/has-own.js +6 -5
  248. package/out/shared/src/has-own.js.map +1 -1
  249. package/out/shared/src/hash.js +15 -14
  250. package/out/shared/src/hash.js.map +1 -1
  251. package/out/shared/src/iterables.js +34 -47
  252. package/out/shared/src/iterables.js.map +1 -1
  253. package/out/shared/src/json-schema.js +25 -30
  254. package/out/shared/src/json-schema.js.map +1 -1
  255. package/out/shared/src/json.js +90 -129
  256. package/out/shared/src/json.js.map +1 -1
  257. package/out/shared/src/logging-test-utils.js +9 -11
  258. package/out/shared/src/logging-test-utils.js.map +1 -1
  259. package/out/shared/src/logging.js +75 -95
  260. package/out/shared/src/logging.js.map +1 -1
  261. package/out/shared/src/must.js +7 -8
  262. package/out/shared/src/must.js.map +1 -1
  263. package/out/shared/src/navigator.js +6 -5
  264. package/out/shared/src/navigator.js.map +1 -1
  265. package/out/shared/src/object-traversal.js +23 -23
  266. package/out/shared/src/object-traversal.js.map +1 -1
  267. package/out/shared/src/objects.js +15 -18
  268. package/out/shared/src/objects.js.map +1 -1
  269. package/out/shared/src/options.js +225 -302
  270. package/out/shared/src/options.js.map +1 -1
  271. package/out/shared/src/parse-big-int.js +12 -11
  272. package/out/shared/src/parse-big-int.js.map +1 -1
  273. package/out/shared/src/promise-race.js +21 -17
  274. package/out/shared/src/promise-race.js.map +1 -1
  275. package/out/shared/src/queue.js +124 -124
  276. package/out/shared/src/queue.js.map +1 -1
  277. package/out/shared/src/rand.js +13 -7
  278. package/out/shared/src/rand.js.map +1 -1
  279. package/out/shared/src/random-uint64.js +8 -7
  280. package/out/shared/src/random-uint64.js.map +1 -1
  281. package/out/shared/src/random-values.js +8 -11
  282. package/out/shared/src/random-values.js.map +1 -1
  283. package/out/shared/src/record-proxy.js +68 -57
  284. package/out/shared/src/record-proxy.js.map +1 -1
  285. package/out/shared/src/resolved-promises.js +9 -11
  286. package/out/shared/src/resolved-promises.js.map +1 -1
  287. package/out/shared/src/sentinels.js +9 -12
  288. package/out/shared/src/sentinels.js.map +1 -1
  289. package/out/shared/src/set-utils.js +41 -63
  290. package/out/shared/src/set-utils.js.map +1 -1
  291. package/out/shared/src/size-of-value.js +55 -51
  292. package/out/shared/src/size-of-value.js.map +1 -1
  293. package/out/shared/src/sleep.js +50 -45
  294. package/out/shared/src/sleep.js.map +1 -1
  295. package/out/shared/src/string-compare.js +8 -11
  296. package/out/shared/src/string-compare.js.map +1 -1
  297. package/out/shared/src/subscribable.js +34 -33
  298. package/out/shared/src/subscribable.js.map +1 -1
  299. package/out/shared/src/tdigest-schema.js +11 -7
  300. package/out/shared/src/tdigest-schema.js.map +1 -1
  301. package/out/shared/src/tdigest.js +197 -270
  302. package/out/shared/src/tdigest.js.map +1 -1
  303. package/out/shared/src/valita.js +145 -174
  304. package/out/shared/src/valita.js.map +1 -1
  305. package/out/z2s/src/compiler.d.ts.map +1 -1
  306. package/out/z2s/src/compiler.js +238 -468
  307. package/out/z2s/src/compiler.js.map +1 -1
  308. package/out/z2s/src/sql.d.ts +0 -1
  309. package/out/z2s/src/sql.d.ts.map +1 -1
  310. package/out/z2s/src/sql.js +149 -194
  311. package/out/z2s/src/sql.js.map +1 -1
  312. package/out/zero/package.js +193 -0
  313. package/out/zero/package.js.map +1 -0
  314. package/out/zero/src/adapters/drizzle.js +1 -6
  315. package/out/zero/src/adapters/pg.js +1 -6
  316. package/out/zero/src/adapters/postgresjs.js +1 -6
  317. package/out/zero/src/adapters/prisma.js +1 -5
  318. package/out/zero/src/analyze-query.js +1 -1
  319. package/out/zero/src/ast-to-zql.js +1 -1
  320. package/out/zero/src/bindings.js +6 -21
  321. package/out/zero/src/build-schema.js +5 -1
  322. package/out/zero/src/build-schema.js.map +1 -1
  323. package/out/zero/src/change-protocol/v0.js +3 -5
  324. package/out/zero/src/cli.js +2 -2
  325. package/out/zero/src/deploy-permissions.js +1 -1
  326. package/out/zero/src/expo-sqlite.js +2 -4
  327. package/out/zero/src/op-sqlite.js +2 -4
  328. package/out/zero/src/pg.js +2 -20
  329. package/out/zero/src/react-native.js +16 -12
  330. package/out/zero/src/react-native.js.map +1 -1
  331. package/out/zero/src/react.js +3 -12
  332. package/out/zero/src/server/runner/main.js +2 -0
  333. package/out/zero/src/server.js +2 -17
  334. package/out/zero/src/solid.js +3 -12
  335. package/out/zero/src/sqlite.js +2 -6
  336. package/out/zero/src/transform-query.js +1 -1
  337. package/out/zero/src/zero-cache-dev.js +124 -151
  338. package/out/zero/src/zero-cache-dev.js.map +1 -1
  339. package/out/zero/src/zero-out.js +9 -6
  340. package/out/zero/src/zero-out.js.map +1 -1
  341. package/out/zero/src/zero.js +6 -55
  342. package/out/zero/src/zqlite.js +2 -7
  343. package/out/zero-cache/src/auth/auth.js +138 -172
  344. package/out/zero-cache/src/auth/auth.js.map +1 -1
  345. package/out/zero-cache/src/auth/jwt.js +25 -33
  346. package/out/zero-cache/src/auth/jwt.js.map +1 -1
  347. package/out/zero-cache/src/auth/load-permissions.js +54 -62
  348. package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
  349. package/out/zero-cache/src/auth/read-authorizer.js +70 -80
  350. package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
  351. package/out/zero-cache/src/auth/write-authorizer.js +284 -432
  352. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  353. package/out/zero-cache/src/config/network.js +31 -45
  354. package/out/zero-cache/src/config/network.js.map +1 -1
  355. package/out/zero-cache/src/config/normalize.js +81 -83
  356. package/out/zero-cache/src/config/normalize.js.map +1 -1
  357. package/out/zero-cache/src/config/server-context.js +32 -29
  358. package/out/zero-cache/src/config/server-context.js.map +1 -1
  359. package/out/zero-cache/src/config/zero-config.d.ts +4 -0
  360. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  361. package/out/zero-cache/src/config/zero-config.js +753 -816
  362. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  363. package/out/zero-cache/src/custom/fetch.js +183 -230
  364. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  365. package/out/zero-cache/src/custom-queries/transform-query.js +93 -99
  366. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  367. package/out/zero-cache/src/db/create.js +27 -29
  368. package/out/zero-cache/src/db/create.js.map +1 -1
  369. package/out/zero-cache/src/db/delete-lite-db.js +11 -7
  370. package/out/zero-cache/src/db/delete-lite-db.js.map +1 -1
  371. package/out/zero-cache/src/db/lite-tables.d.ts +2 -1
  372. package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
  373. package/out/zero-cache/src/db/lite-tables.js +120 -156
  374. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  375. package/out/zero-cache/src/db/migration-lite.js +110 -178
  376. package/out/zero-cache/src/db/migration-lite.js.map +1 -1
  377. package/out/zero-cache/src/db/migration.js +82 -151
  378. package/out/zero-cache/src/db/migration.js.map +1 -1
  379. package/out/zero-cache/src/db/mode-enum.js +8 -9
  380. package/out/zero-cache/src/db/mode-enum.js.map +1 -1
  381. package/out/zero-cache/src/db/pg-copy.js +56 -54
  382. package/out/zero-cache/src/db/pg-copy.js.map +1 -1
  383. package/out/zero-cache/src/db/pg-to-lite.js +74 -110
  384. package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
  385. package/out/zero-cache/src/db/pg-type-parser.js +19 -36
  386. package/out/zero-cache/src/db/pg-type-parser.js.map +1 -1
  387. package/out/zero-cache/src/db/run-transaction.js +19 -20
  388. package/out/zero-cache/src/db/run-transaction.js.map +1 -1
  389. package/out/zero-cache/src/db/specs.d.ts +8 -2
  390. package/out/zero-cache/src/db/specs.d.ts.map +1 -1
  391. package/out/zero-cache/src/db/specs.js +42 -78
  392. package/out/zero-cache/src/db/specs.js.map +1 -1
  393. package/out/zero-cache/src/db/statements.js +52 -59
  394. package/out/zero-cache/src/db/statements.js.map +1 -1
  395. package/out/zero-cache/src/db/transaction-pool.js +376 -400
  396. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  397. package/out/zero-cache/src/db/warmup.js +13 -24
  398. package/out/zero-cache/src/db/warmup.js.map +1 -1
  399. package/out/zero-cache/src/observability/events.js +89 -99
  400. package/out/zero-cache/src/observability/events.js.map +1 -1
  401. package/out/zero-cache/src/observability/metrics.js +30 -54
  402. package/out/zero-cache/src/observability/metrics.js.map +1 -1
  403. package/out/zero-cache/src/scripts/decommission.js +42 -47
  404. package/out/zero-cache/src/scripts/decommission.js.map +1 -1
  405. package/out/zero-cache/src/scripts/deploy-permissions.js +106 -144
  406. package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
  407. package/out/zero-cache/src/scripts/permissions.js +86 -107
  408. package/out/zero-cache/src/scripts/permissions.js.map +1 -1
  409. package/out/zero-cache/src/server/anonymous-otel-start.js +306 -440
  410. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
  411. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  412. package/out/zero-cache/src/server/change-streamer.js +57 -128
  413. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  414. package/out/zero-cache/src/server/inspector-delegate.js +89 -100
  415. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  416. package/out/zero-cache/src/server/logging.js +18 -26
  417. package/out/zero-cache/src/server/logging.js.map +1 -1
  418. package/out/zero-cache/src/server/main.js +85 -142
  419. package/out/zero-cache/src/server/main.js.map +1 -1
  420. package/out/zero-cache/src/server/mutator.js +16 -13
  421. package/out/zero-cache/src/server/mutator.js.map +1 -1
  422. package/out/zero-cache/src/server/otel-diag-logger.js +42 -49
  423. package/out/zero-cache/src/server/otel-diag-logger.js.map +1 -1
  424. package/out/zero-cache/src/server/otel-log-sink.js +34 -44
  425. package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
  426. package/out/zero-cache/src/server/otel-start.js +43 -51
  427. package/out/zero-cache/src/server/otel-start.js.map +1 -1
  428. package/out/zero-cache/src/server/priority-op.js +27 -25
  429. package/out/zero-cache/src/server/priority-op.js.map +1 -1
  430. package/out/zero-cache/src/server/reaper.js +32 -43
  431. package/out/zero-cache/src/server/reaper.js.map +1 -1
  432. package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
  433. package/out/zero-cache/src/server/replicator.js +41 -57
  434. package/out/zero-cache/src/server/replicator.js.map +1 -1
  435. package/out/zero-cache/src/server/runner/main.js +7 -8
  436. package/out/zero-cache/src/server/runner/main.js.map +1 -1
  437. package/out/zero-cache/src/server/runner/run-worker.js +56 -52
  438. package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
  439. package/out/zero-cache/src/server/runner/runtime.js +26 -32
  440. package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
  441. package/out/zero-cache/src/server/runner/zero-dispatcher.js +22 -27
  442. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  443. package/out/zero-cache/src/server/syncer.js +79 -148
  444. package/out/zero-cache/src/server/syncer.js.map +1 -1
  445. package/out/zero-cache/src/server/worker-dispatcher.js +84 -113
  446. package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
  447. package/out/zero-cache/src/server/worker-urls.d.ts +2 -1
  448. package/out/zero-cache/src/server/worker-urls.d.ts.map +1 -1
  449. package/out/zero-cache/src/server/worker-urls.js +14 -18
  450. package/out/zero-cache/src/server/worker-urls.js.map +1 -1
  451. package/out/zero-cache/src/server/write-worker.js +2 -0
  452. package/out/zero-cache/src/services/analyze.js +61 -129
  453. package/out/zero-cache/src/services/analyze.js.map +1 -1
  454. package/out/zero-cache/src/services/change-source/common/backfill-manager.js +420 -419
  455. package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
  456. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js +111 -114
  457. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -1
  458. package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts +2 -0
  459. package/out/zero-cache/src/services/change-source/common/replica-schema.d.ts.map +1 -1
  460. package/out/zero-cache/src/services/change-source/common/replica-schema.js +100 -115
  461. package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
  462. package/out/zero-cache/src/services/change-source/custom/change-source.js +154 -216
  463. package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
  464. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js +11 -14
  465. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +1 -1
  466. package/out/zero-cache/src/services/change-source/pg/backfill-stream.d.ts.map +1 -1
  467. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +169 -209
  468. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
  469. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  470. package/out/zero-cache/src/services/change-source/pg/change-source.js +676 -835
  471. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  472. package/out/zero-cache/src/services/change-source/pg/decommission.js +19 -23
  473. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
  474. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +258 -411
  475. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  476. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js +59 -65
  477. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
  478. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js +218 -247
  479. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
  480. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +100 -142
  481. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
  482. package/out/zero-cache/src/services/change-source/pg/lsn.js +17 -19
  483. package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
  484. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +88 -98
  485. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  486. package/out/zero-cache/src/services/change-source/pg/schema/init.js +96 -177
  487. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  488. package/out/zero-cache/src/services/change-source/pg/schema/published.js +69 -107
  489. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
  490. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +151 -212
  491. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  492. package/out/zero-cache/src/services/change-source/pg/schema/validation.js +22 -53
  493. package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
  494. package/out/zero-cache/src/services/change-source/protocol/current/control.js +24 -12
  495. package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
  496. package/out/zero-cache/src/services/change-source/protocol/current/data.js +180 -290
  497. package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
  498. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js +21 -33
  499. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
  500. package/out/zero-cache/src/services/change-source/protocol/current/json.js +7 -18
  501. package/out/zero-cache/src/services/change-source/protocol/current/json.js.map +1 -1
  502. package/out/zero-cache/src/services/change-source/protocol/current/path.js +24 -5
  503. package/out/zero-cache/src/services/change-source/protocol/current/path.js.map +1 -1
  504. package/out/zero-cache/src/services/change-source/protocol/current/status.js +25 -19
  505. package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
  506. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js +24 -16
  507. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
  508. package/out/zero-cache/src/services/change-source/protocol/current.js +51 -46
  509. package/out/zero-cache/src/services/change-source/protocol/current.js.map +1 -1
  510. package/out/zero-cache/src/services/change-source/protocol/mod.js +2 -0
  511. package/out/zero-cache/src/services/change-streamer/backup-monitor.js +165 -171
  512. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  513. package/out/zero-cache/src/services/change-streamer/broadcast.d.ts +100 -0
  514. package/out/zero-cache/src/services/change-streamer/broadcast.d.ts.map +1 -0
  515. package/out/zero-cache/src/services/change-streamer/broadcast.js +165 -0
  516. package/out/zero-cache/src/services/change-streamer/broadcast.js.map +1 -0
  517. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +154 -221
  518. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  519. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts +1 -1
  520. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  521. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +341 -293
  522. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  523. package/out/zero-cache/src/services/change-streamer/change-streamer.js +17 -24
  524. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  525. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts +17 -1
  526. package/out/zero-cache/src/services/change-streamer/forwarder.d.ts.map +1 -1
  527. package/out/zero-cache/src/services/change-streamer/forwarder.js +85 -56
  528. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  529. package/out/zero-cache/src/services/change-streamer/replica-monitor.js +49 -43
  530. package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -1
  531. package/out/zero-cache/src/services/change-streamer/schema/init.js +61 -89
  532. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  533. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +20 -1
  534. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
  535. package/out/zero-cache/src/services/change-streamer/schema/tables.js +131 -109
  536. package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
  537. package/out/zero-cache/src/services/change-streamer/snapshot.js +26 -28
  538. package/out/zero-cache/src/services/change-streamer/snapshot.js.map +1 -1
  539. package/out/zero-cache/src/services/change-streamer/storer.js +434 -513
  540. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  541. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts +18 -0
  542. package/out/zero-cache/src/services/change-streamer/subscriber.d.ts.map +1 -1
  543. package/out/zero-cache/src/services/change-streamer/subscriber.js +143 -100
  544. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  545. package/out/zero-cache/src/services/heapz.js +18 -20
  546. package/out/zero-cache/src/services/heapz.js.map +1 -1
  547. package/out/zero-cache/src/services/http-service.js +59 -57
  548. package/out/zero-cache/src/services/http-service.js.map +1 -1
  549. package/out/zero-cache/src/services/life-cycle.js +182 -214
  550. package/out/zero-cache/src/services/life-cycle.js.map +1 -1
  551. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +102 -81
  552. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
  553. package/out/zero-cache/src/services/litestream/commands.js +144 -205
  554. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  555. package/out/zero-cache/src/services/mutagen/error.js +10 -14
  556. package/out/zero-cache/src/services/mutagen/error.js.map +1 -1
  557. package/out/zero-cache/src/services/mutagen/mutagen.js +166 -264
  558. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  559. package/out/zero-cache/src/services/mutagen/pusher.js +372 -487
  560. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  561. package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
  562. package/out/zero-cache/src/services/replicator/change-processor.js +483 -595
  563. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  564. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +4 -2
  565. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  566. package/out/zero-cache/src/services/replicator/incremental-sync.js +118 -143
  567. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  568. package/out/zero-cache/src/services/replicator/notifier.js +52 -28
  569. package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
  570. package/out/zero-cache/src/services/replicator/replication-status.js +105 -128
  571. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  572. package/out/zero-cache/src/services/replicator/replicator.d.ts +2 -1
  573. package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
  574. package/out/zero-cache/src/services/replicator/replicator.js +32 -34
  575. package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
  576. package/out/zero-cache/src/services/replicator/schema/change-log.js +101 -133
  577. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  578. package/out/zero-cache/src/services/replicator/schema/column-metadata.js +145 -174
  579. package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -1
  580. package/out/zero-cache/src/services/replicator/schema/constants.js +11 -5
  581. package/out/zero-cache/src/services/replicator/schema/constants.js.map +1 -1
  582. package/out/zero-cache/src/services/replicator/schema/replication-state.js +56 -107
  583. package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
  584. package/out/zero-cache/src/services/replicator/schema/table-metadata.d.ts +28 -7
  585. package/out/zero-cache/src/services/replicator/schema/table-metadata.d.ts.map +1 -1
  586. package/out/zero-cache/src/services/replicator/schema/table-metadata.js +96 -50
  587. package/out/zero-cache/src/services/replicator/schema/table-metadata.js.map +1 -1
  588. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts +69 -0
  589. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts.map +1 -0
  590. package/out/zero-cache/src/services/replicator/write-worker-client.js +96 -0
  591. package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -0
  592. package/out/zero-cache/src/services/replicator/write-worker.js +68 -0
  593. package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -0
  594. package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
  595. package/out/zero-cache/src/services/run-ast.js +79 -118
  596. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  597. package/out/zero-cache/src/services/runner.js +39 -41
  598. package/out/zero-cache/src/services/runner.js.map +1 -1
  599. package/out/zero-cache/src/services/running-state.js +129 -134
  600. package/out/zero-cache/src/services/running-state.js.map +1 -1
  601. package/out/zero-cache/src/services/statz.js +139 -200
  602. package/out/zero-cache/src/services/statz.js.map +1 -1
  603. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +46 -49
  604. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
  605. package/out/zero-cache/src/services/view-syncer/client-handler.js +257 -299
  606. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  607. package/out/zero-cache/src/services/view-syncer/client-schema.js +52 -82
  608. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  609. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +85 -107
  610. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
  611. package/out/zero-cache/src/services/view-syncer/cvr-store.js +604 -757
  612. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  613. package/out/zero-cache/src/services/view-syncer/cvr.js +631 -739
  614. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  615. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +60 -40
  616. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  617. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +95 -178
  618. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  619. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +3 -2
  620. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  621. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +574 -709
  622. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  623. package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts.map +1 -1
  624. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +246 -257
  625. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  626. package/out/zero-cache/src/services/view-syncer/schema/cvr.js +59 -45
  627. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
  628. package/out/zero-cache/src/services/view-syncer/schema/init.js +121 -189
  629. package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
  630. package/out/zero-cache/src/services/view-syncer/schema/types.js +138 -263
  631. package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
  632. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +3 -3
  633. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
  634. package/out/zero-cache/src/services/view-syncer/snapshotter.js +322 -331
  635. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  636. package/out/zero-cache/src/services/view-syncer/tracer.js +7 -6
  637. package/out/zero-cache/src/services/view-syncer/tracer.js.map +1 -1
  638. package/out/zero-cache/src/services/view-syncer/ttl-clock.js +9 -11
  639. package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
  640. package/out/zero-cache/src/services/view-syncer/view-syncer.js +1067 -1603
  641. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  642. package/out/zero-cache/src/types/error-with-level.js +19 -25
  643. package/out/zero-cache/src/types/error-with-level.js.map +1 -1
  644. package/out/zero-cache/src/types/http.js +17 -26
  645. package/out/zero-cache/src/types/http.js.map +1 -1
  646. package/out/zero-cache/src/types/lexi-version.js +28 -42
  647. package/out/zero-cache/src/types/lexi-version.js.map +1 -1
  648. package/out/zero-cache/src/types/lite.js +101 -121
  649. package/out/zero-cache/src/types/lite.js.map +1 -1
  650. package/out/zero-cache/src/types/names.js +6 -5
  651. package/out/zero-cache/src/types/names.js.map +1 -1
  652. package/out/zero-cache/src/types/pg-data-type.d.ts +1 -0
  653. package/out/zero-cache/src/types/pg-data-type.d.ts.map +1 -1
  654. package/out/zero-cache/src/types/pg-data-type.js +58 -73
  655. package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
  656. package/out/zero-cache/src/types/pg-types.js +12 -19
  657. package/out/zero-cache/src/types/pg-types.js.map +1 -1
  658. package/out/zero-cache/src/types/pg.js +144 -218
  659. package/out/zero-cache/src/types/pg.js.map +1 -1
  660. package/out/zero-cache/src/types/processes.js +95 -90
  661. package/out/zero-cache/src/types/processes.js.map +1 -1
  662. package/out/zero-cache/src/types/profiler.js +32 -27
  663. package/out/zero-cache/src/types/profiler.js.map +1 -1
  664. package/out/zero-cache/src/types/row-key.js +42 -30
  665. package/out/zero-cache/src/types/row-key.js.map +1 -1
  666. package/out/zero-cache/src/types/shards.js +36 -45
  667. package/out/zero-cache/src/types/shards.js.map +1 -1
  668. package/out/zero-cache/src/types/sql.js +20 -9
  669. package/out/zero-cache/src/types/sql.js.map +1 -1
  670. package/out/zero-cache/src/types/state-version.js +17 -23
  671. package/out/zero-cache/src/types/state-version.js.map +1 -1
  672. package/out/zero-cache/src/types/streams.js +234 -270
  673. package/out/zero-cache/src/types/streams.js.map +1 -1
  674. package/out/zero-cache/src/types/strings.js +10 -13
  675. package/out/zero-cache/src/types/strings.js.map +1 -1
  676. package/out/zero-cache/src/types/subscription.d.ts +3 -1
  677. package/out/zero-cache/src/types/subscription.d.ts.map +1 -1
  678. package/out/zero-cache/src/types/subscription.js +266 -214
  679. package/out/zero-cache/src/types/subscription.js.map +1 -1
  680. package/out/zero-cache/src/types/url-params.js +30 -39
  681. package/out/zero-cache/src/types/url-params.js.map +1 -1
  682. package/out/zero-cache/src/types/websocket-handoff.js +62 -75
  683. package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
  684. package/out/zero-cache/src/types/ws.js +43 -53
  685. package/out/zero-cache/src/types/ws.js.map +1 -1
  686. package/out/zero-cache/src/workers/connect-params.js +42 -43
  687. package/out/zero-cache/src/workers/connect-params.js.map +1 -1
  688. package/out/zero-cache/src/workers/connection.js +213 -282
  689. package/out/zero-cache/src/workers/connection.js.map +1 -1
  690. package/out/zero-cache/src/workers/mutator.js +22 -21
  691. package/out/zero-cache/src/workers/mutator.js.map +1 -1
  692. package/out/zero-cache/src/workers/replicator.d.ts +7 -0
  693. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  694. package/out/zero-cache/src/workers/replicator.js +92 -97
  695. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  696. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +121 -203
  697. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  698. package/out/zero-cache/src/workers/syncer.js +147 -201
  699. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  700. package/out/zero-client/src/client/active-clients-manager.js +178 -187
  701. package/out/zero-client/src/client/active-clients-manager.js.map +1 -1
  702. package/out/zero-client/src/client/bindings.js +11 -0
  703. package/out/zero-client/src/client/client-error-kind-enum.js +18 -29
  704. package/out/zero-client/src/client/client-error-kind-enum.js.map +1 -1
  705. package/out/zero-client/src/client/connection-manager.js +291 -346
  706. package/out/zero-client/src/client/connection-manager.js.map +1 -1
  707. package/out/zero-client/src/client/connection-status-enum.js +20 -15
  708. package/out/zero-client/src/client/connection-status-enum.js.map +1 -1
  709. package/out/zero-client/src/client/connection.js +92 -110
  710. package/out/zero-client/src/client/connection.js.map +1 -1
  711. package/out/zero-client/src/client/context.js +84 -100
  712. package/out/zero-client/src/client/context.js.map +1 -1
  713. package/out/zero-client/src/client/crud-impl.js +56 -88
  714. package/out/zero-client/src/client/crud-impl.js.map +1 -1
  715. package/out/zero-client/src/client/crud.js +127 -129
  716. package/out/zero-client/src/client/crud.js.map +1 -1
  717. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  718. package/out/zero-client/src/client/custom.js +50 -74
  719. package/out/zero-client/src/client/custom.js.map +1 -1
  720. package/out/zero-client/src/client/delete-clients-manager.js +72 -93
  721. package/out/zero-client/src/client/delete-clients-manager.js.map +1 -1
  722. package/out/zero-client/src/client/enable-analytics.js +8 -16
  723. package/out/zero-client/src/client/enable-analytics.js.map +1 -1
  724. package/out/zero-client/src/client/error.js +118 -133
  725. package/out/zero-client/src/client/error.js.map +1 -1
  726. package/out/zero-client/src/client/http-string.js +7 -7
  727. package/out/zero-client/src/client/http-string.js.map +1 -1
  728. package/out/zero-client/src/client/inspector/client-group.js +21 -26
  729. package/out/zero-client/src/client/inspector/client-group.js.map +1 -1
  730. package/out/zero-client/src/client/inspector/client.js +23 -26
  731. package/out/zero-client/src/client/inspector/client.js.map +1 -1
  732. package/out/zero-client/src/client/inspector/html-dialog-prompt.js +72 -73
  733. package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -1
  734. package/out/zero-client/src/client/inspector/inspector.js +46 -51
  735. package/out/zero-client/src/client/inspector/inspector.js.map +1 -1
  736. package/out/zero-client/src/client/inspector/lazy-inspector.js +132 -192
  737. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -1
  738. package/out/zero-client/src/client/inspector/query.js +72 -77
  739. package/out/zero-client/src/client/inspector/query.js.map +1 -1
  740. package/out/zero-client/src/client/ivm-branch.js +118 -145
  741. package/out/zero-client/src/client/ivm-branch.js.map +1 -1
  742. package/out/zero-client/src/client/keys.js +15 -31
  743. package/out/zero-client/src/client/keys.js.map +1 -1
  744. package/out/zero-client/src/client/log-options.js +43 -57
  745. package/out/zero-client/src/client/log-options.js.map +1 -1
  746. package/out/zero-client/src/client/make-mutate-property.js +46 -29
  747. package/out/zero-client/src/client/make-mutate-property.js.map +1 -1
  748. package/out/zero-client/src/client/make-replicache-mutators.js +80 -96
  749. package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
  750. package/out/zero-client/src/client/metric-name-enum.js +11 -15
  751. package/out/zero-client/src/client/metric-name-enum.js.map +1 -1
  752. package/out/zero-client/src/client/metrics.js +210 -237
  753. package/out/zero-client/src/client/metrics.js.map +1 -1
  754. package/out/zero-client/src/client/mutation-tracker.js +264 -354
  755. package/out/zero-client/src/client/mutation-tracker.js.map +1 -1
  756. package/out/zero-client/src/client/mutator-proxy.js +122 -151
  757. package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
  758. package/out/zero-client/src/client/options.js +7 -10
  759. package/out/zero-client/src/client/options.js.map +1 -1
  760. package/out/zero-client/src/client/query-manager.js +305 -373
  761. package/out/zero-client/src/client/query-manager.js.map +1 -1
  762. package/out/zero-client/src/client/reload-error-handler.js +80 -101
  763. package/out/zero-client/src/client/reload-error-handler.js.map +1 -1
  764. package/out/zero-client/src/client/server-option.js +30 -59
  765. package/out/zero-client/src/client/server-option.js.map +1 -1
  766. package/out/zero-client/src/client/update-needed-reason-type-enum.js +27 -9
  767. package/out/zero-client/src/client/update-needed-reason-type-enum.js.map +1 -1
  768. package/out/zero-client/src/client/version.js +9 -5
  769. package/out/zero-client/src/client/version.js.map +1 -1
  770. package/out/zero-client/src/client/zero-poke-handler.d.ts +1 -1
  771. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  772. package/out/zero-client/src/client/zero-poke-handler.js +205 -293
  773. package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
  774. package/out/zero-client/src/client/zero-rep.js +61 -68
  775. package/out/zero-client/src/client/zero-rep.js.map +1 -1
  776. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  777. package/out/zero-client/src/client/zero.js +1367 -1834
  778. package/out/zero-client/src/client/zero.js.map +1 -1
  779. package/out/zero-client/src/mod.js +21 -0
  780. package/out/zero-client/src/util/nanoid.js +13 -18
  781. package/out/zero-client/src/util/nanoid.js.map +1 -1
  782. package/out/zero-client/src/util/socket.js +6 -5
  783. package/out/zero-client/src/util/socket.js.map +1 -1
  784. package/out/zero-pg/src/mod.js +10 -0
  785. package/out/zero-protocol/src/analyze-query-result.js +108 -148
  786. package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
  787. package/out/zero-protocol/src/application-error.js +36 -34
  788. package/out/zero-protocol/src/application-error.js.map +1 -1
  789. package/out/zero-protocol/src/ast.js +236 -309
  790. package/out/zero-protocol/src/ast.js.map +1 -1
  791. package/out/zero-protocol/src/change-desired-queries.js +8 -13
  792. package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
  793. package/out/zero-protocol/src/client-schema.js +21 -42
  794. package/out/zero-protocol/src/client-schema.js.map +1 -1
  795. package/out/zero-protocol/src/close-connection.js +20 -12
  796. package/out/zero-protocol/src/close-connection.js.map +1 -1
  797. package/out/zero-protocol/src/connect.js +37 -52
  798. package/out/zero-protocol/src/connect.js.map +1 -1
  799. package/out/zero-protocol/src/custom-queries.js +34 -65
  800. package/out/zero-protocol/src/custom-queries.js.map +1 -1
  801. package/out/zero-protocol/src/data.js +6 -9
  802. package/out/zero-protocol/src/data.js.map +1 -1
  803. package/out/zero-protocol/src/delete-clients.js +11 -17
  804. package/out/zero-protocol/src/delete-clients.js.map +1 -1
  805. package/out/zero-protocol/src/down.js +11 -23
  806. package/out/zero-protocol/src/down.js.map +1 -1
  807. package/out/zero-protocol/src/error-kind-enum.js +24 -41
  808. package/out/zero-protocol/src/error-kind-enum.js.map +1 -1
  809. package/out/zero-protocol/src/error-origin-enum.js +8 -9
  810. package/out/zero-protocol/src/error-origin-enum.js.map +1 -1
  811. package/out/zero-protocol/src/error-reason-enum.js +12 -17
  812. package/out/zero-protocol/src/error-reason-enum.js.map +1 -1
  813. package/out/zero-protocol/src/error.js +76 -152
  814. package/out/zero-protocol/src/error.js.map +1 -1
  815. package/out/zero-protocol/src/inspect-down.js +51 -74
  816. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  817. package/out/zero-protocol/src/inspect-up.js +28 -46
  818. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  819. package/out/zero-protocol/src/mutation-id.js +9 -9
  820. package/out/zero-protocol/src/mutation-id.js.map +1 -1
  821. package/out/zero-protocol/src/mutation-type-enum.js +7 -7
  822. package/out/zero-protocol/src/mutation-type-enum.js.map +1 -1
  823. package/out/zero-protocol/src/mutations-patch.js +21 -16
  824. package/out/zero-protocol/src/mutations-patch.js.map +1 -1
  825. package/out/zero-protocol/src/ping.js +8 -9
  826. package/out/zero-protocol/src/ping.js.map +1 -1
  827. package/out/zero-protocol/src/poke.js +53 -59
  828. package/out/zero-protocol/src/poke.js.map +1 -1
  829. package/out/zero-protocol/src/pong.js +8 -9
  830. package/out/zero-protocol/src/pong.js.map +1 -1
  831. package/out/zero-protocol/src/primary-key.js +9 -19
  832. package/out/zero-protocol/src/primary-key.js.map +1 -1
  833. package/out/zero-protocol/src/protocol-version.js +5 -11
  834. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  835. package/out/zero-protocol/src/pull.js +16 -28
  836. package/out/zero-protocol/src/pull.js.map +1 -1
  837. package/out/zero-protocol/src/push.js +162 -209
  838. package/out/zero-protocol/src/push.js.map +1 -1
  839. package/out/zero-protocol/src/queries-patch.js +22 -30
  840. package/out/zero-protocol/src/queries-patch.js.map +1 -1
  841. package/out/zero-protocol/src/query-hash.js +14 -17
  842. package/out/zero-protocol/src/query-hash.js.map +1 -1
  843. package/out/zero-protocol/src/row-patch.js +23 -30
  844. package/out/zero-protocol/src/row-patch.js.map +1 -1
  845. package/out/zero-protocol/src/up.js +11 -22
  846. package/out/zero-protocol/src/up.js.map +1 -1
  847. package/out/zero-protocol/src/update-auth.js +8 -13
  848. package/out/zero-protocol/src/update-auth.js.map +1 -1
  849. package/out/zero-protocol/src/version.js +8 -9
  850. package/out/zero-protocol/src/version.js.map +1 -1
  851. package/out/zero-react/src/bindings.js +12 -0
  852. package/out/zero-react/src/mod.js +5 -0
  853. package/out/zero-react/src/use-connection-state.js +14 -11
  854. package/out/zero-react/src/use-connection-state.js.map +1 -1
  855. package/out/zero-react/src/use-query.js +283 -281
  856. package/out/zero-react/src/use-query.js.map +1 -1
  857. package/out/zero-react/src/use-zero-online.js +17 -11
  858. package/out/zero-react/src/use-zero-online.js.map +1 -1
  859. package/out/zero-react/src/zero-provider.js +53 -69
  860. package/out/zero-react/src/zero-provider.js.map +1 -1
  861. package/out/zero-react/src/zero.js +22 -0
  862. package/out/zero-schema/src/builder/relationship-builder.js +25 -21
  863. package/out/zero-schema/src/builder/relationship-builder.js.map +1 -1
  864. package/out/zero-schema/src/builder/schema-builder.js +51 -79
  865. package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
  866. package/out/zero-schema/src/builder/table-builder.js +99 -116
  867. package/out/zero-schema/src/builder/table-builder.js.map +1 -1
  868. package/out/zero-schema/src/compiled-permissions.js +21 -25
  869. package/out/zero-schema/src/compiled-permissions.js.map +1 -1
  870. package/out/zero-schema/src/name-mapper.js +31 -47
  871. package/out/zero-schema/src/name-mapper.js.map +1 -1
  872. package/out/zero-schema/src/permissions.js +94 -181
  873. package/out/zero-schema/src/permissions.js.map +1 -1
  874. package/out/zero-schema/src/schema-config.js +26 -32
  875. package/out/zero-schema/src/schema-config.js.map +1 -1
  876. package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -1
  877. package/out/zero-server/src/adapters/drizzle.js +79 -76
  878. package/out/zero-server/src/adapters/drizzle.js.map +1 -1
  879. package/out/zero-server/src/adapters/pg.d.ts.map +1 -1
  880. package/out/zero-server/src/adapters/pg.js +79 -55
  881. package/out/zero-server/src/adapters/pg.js.map +1 -1
  882. package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
  883. package/out/zero-server/src/adapters/postgresjs.js +66 -40
  884. package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
  885. package/out/zero-server/src/adapters/prisma.d.ts.map +1 -1
  886. package/out/zero-server/src/adapters/prisma.js +75 -55
  887. package/out/zero-server/src/adapters/prisma.js.map +1 -1
  888. package/out/zero-server/src/custom.d.ts.map +1 -1
  889. package/out/zero-server/src/custom.js +188 -265
  890. package/out/zero-server/src/custom.js.map +1 -1
  891. package/out/zero-server/src/logging.js +6 -5
  892. package/out/zero-server/src/logging.js.map +1 -1
  893. package/out/zero-server/src/mod.js +8 -0
  894. package/out/zero-server/src/pg-query-executor.js +14 -17
  895. package/out/zero-server/src/pg-query-executor.js.map +1 -1
  896. package/out/zero-server/src/process-mutations.js +293 -365
  897. package/out/zero-server/src/process-mutations.js.map +1 -1
  898. package/out/zero-server/src/push-processor.js +33 -49
  899. package/out/zero-server/src/push-processor.js.map +1 -1
  900. package/out/zero-server/src/queries/process-queries.js +106 -96
  901. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  902. package/out/zero-server/src/schema.js +98 -144
  903. package/out/zero-server/src/schema.js.map +1 -1
  904. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  905. package/out/zero-server/src/zql-database.js +54 -69
  906. package/out/zero-server/src/zql-database.js.map +1 -1
  907. package/out/zero-solid/src/bindings.js +12 -0
  908. package/out/zero-solid/src/mod.js +5 -0
  909. package/out/zero-solid/src/solid-view.js +135 -227
  910. package/out/zero-solid/src/solid-view.js.map +1 -1
  911. package/out/zero-solid/src/use-connection-state.js +18 -14
  912. package/out/zero-solid/src/use-connection-state.js.map +1 -1
  913. package/out/zero-solid/src/use-query.js +55 -100
  914. package/out/zero-solid/src/use-query.js.map +1 -1
  915. package/out/zero-solid/src/use-zero-online.js +18 -12
  916. package/out/zero-solid/src/use-zero-online.js.map +1 -1
  917. package/out/zero-solid/src/use-zero.js +65 -77
  918. package/out/zero-solid/src/use-zero.js.map +1 -1
  919. package/out/zero-solid/src/zero.js +22 -0
  920. package/out/zero-types/src/format.js +8 -7
  921. package/out/zero-types/src/format.js.map +1 -1
  922. package/out/zero-types/src/name-mapper.js +34 -47
  923. package/out/zero-types/src/name-mapper.js.map +1 -1
  924. package/out/zql/src/builder/builder.d.ts.map +1 -1
  925. package/out/zql/src/builder/builder.js +315 -476
  926. package/out/zql/src/builder/builder.js.map +1 -1
  927. package/out/zql/src/builder/debug-delegate.js +69 -74
  928. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  929. package/out/zql/src/builder/filter.js +116 -140
  930. package/out/zql/src/builder/filter.js.map +1 -1
  931. package/out/zql/src/builder/like.js +41 -46
  932. package/out/zql/src/builder/like.js.map +1 -1
  933. package/out/zql/src/error.js +10 -9
  934. package/out/zql/src/error.js.map +1 -1
  935. package/out/zql/src/ivm/array-view.js +89 -91
  936. package/out/zql/src/ivm/array-view.js.map +1 -1
  937. package/out/zql/src/ivm/constraint.js +65 -74
  938. package/out/zql/src/ivm/constraint.js.map +1 -1
  939. package/out/zql/src/ivm/data.js +61 -48
  940. package/out/zql/src/ivm/data.js.map +1 -1
  941. package/out/zql/src/ivm/exists.js +164 -213
  942. package/out/zql/src/ivm/exists.js.map +1 -1
  943. package/out/zql/src/ivm/fan-in.js +62 -59
  944. package/out/zql/src/ivm/fan-in.js.map +1 -1
  945. package/out/zql/src/ivm/fan-out.js +52 -61
  946. package/out/zql/src/ivm/fan-out.js.map +1 -1
  947. package/out/zql/src/ivm/filter-operators.js +91 -96
  948. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  949. package/out/zql/src/ivm/filter-push.js +22 -26
  950. package/out/zql/src/ivm/filter-push.js.map +1 -1
  951. package/out/zql/src/ivm/filter.js +41 -35
  952. package/out/zql/src/ivm/filter.js.map +1 -1
  953. package/out/zql/src/ivm/flipped-join.js +282 -391
  954. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  955. package/out/zql/src/ivm/join-utils.js +85 -115
  956. package/out/zql/src/ivm/join-utils.js.map +1 -1
  957. package/out/zql/src/ivm/join.js +162 -231
  958. package/out/zql/src/ivm/join.js.map +1 -1
  959. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +21 -25
  960. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
  961. package/out/zql/src/ivm/memory-source.js +364 -503
  962. package/out/zql/src/ivm/memory-source.js.map +1 -1
  963. package/out/zql/src/ivm/memory-storage.js +33 -34
  964. package/out/zql/src/ivm/memory-storage.js.map +1 -1
  965. package/out/zql/src/ivm/operator.js +13 -15
  966. package/out/zql/src/ivm/operator.js.map +1 -1
  967. package/out/zql/src/ivm/push-accumulated.js +267 -270
  968. package/out/zql/src/ivm/push-accumulated.js.map +1 -1
  969. package/out/zql/src/ivm/skip.js +91 -104
  970. package/out/zql/src/ivm/skip.js.map +1 -1
  971. package/out/zql/src/ivm/stream.js +10 -10
  972. package/out/zql/src/ivm/stream.js.map +1 -1
  973. package/out/zql/src/ivm/take.js +422 -569
  974. package/out/zql/src/ivm/take.js.map +1 -1
  975. package/out/zql/src/ivm/union-fan-in.js +157 -231
  976. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  977. package/out/zql/src/ivm/union-fan-out.js +38 -43
  978. package/out/zql/src/ivm/union-fan-out.js.map +1 -1
  979. package/out/zql/src/ivm/view-apply-change.js +166 -255
  980. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  981. package/out/zql/src/mutate/crud.js +35 -34
  982. package/out/zql/src/mutate/crud.js.map +1 -1
  983. package/out/zql/src/mutate/custom.d.ts.map +1 -1
  984. package/out/zql/src/mutate/custom.js +7 -11
  985. package/out/zql/src/mutate/custom.js.map +1 -1
  986. package/out/zql/src/mutate/mutator-registry.js +67 -71
  987. package/out/zql/src/mutate/mutator-registry.js.map +1 -1
  988. package/out/zql/src/mutate/mutator.js +26 -25
  989. package/out/zql/src/mutate/mutator.js.map +1 -1
  990. package/out/zql/src/planner/planner-builder.js +134 -239
  991. package/out/zql/src/planner/planner-builder.js.map +1 -1
  992. package/out/zql/src/planner/planner-connection.js +222 -212
  993. package/out/zql/src/planner/planner-connection.js.map +1 -1
  994. package/out/zql/src/planner/planner-constraint.js +15 -7
  995. package/out/zql/src/planner/planner-constraint.js.map +1 -1
  996. package/out/zql/src/planner/planner-debug.js +199 -224
  997. package/out/zql/src/planner/planner-debug.js.map +1 -1
  998. package/out/zql/src/planner/planner-fan-in.js +146 -162
  999. package/out/zql/src/planner/planner-fan-in.js.map +1 -1
  1000. package/out/zql/src/planner/planner-fan-out.js +62 -74
  1001. package/out/zql/src/planner/planner-fan-out.js.map +1 -1
  1002. package/out/zql/src/planner/planner-graph.js +302 -334
  1003. package/out/zql/src/planner/planner-graph.js.map +1 -1
  1004. package/out/zql/src/planner/planner-join.js +255 -240
  1005. package/out/zql/src/planner/planner-join.js.map +1 -1
  1006. package/out/zql/src/planner/planner-node.js +10 -6
  1007. package/out/zql/src/planner/planner-node.js.map +1 -1
  1008. package/out/zql/src/planner/planner-source.js +15 -22
  1009. package/out/zql/src/planner/planner-source.js.map +1 -1
  1010. package/out/zql/src/planner/planner-terminus.js +28 -28
  1011. package/out/zql/src/planner/planner-terminus.js.map +1 -1
  1012. package/out/zql/src/query/complete-ordering.js +37 -61
  1013. package/out/zql/src/query/complete-ordering.js.map +1 -1
  1014. package/out/zql/src/query/create-builder.js +14 -22
  1015. package/out/zql/src/query/create-builder.js.map +1 -1
  1016. package/out/zql/src/query/error.js +10 -12
  1017. package/out/zql/src/query/error.js.map +1 -1
  1018. package/out/zql/src/query/escape-like.js +6 -5
  1019. package/out/zql/src/query/escape-like.js.map +1 -1
  1020. package/out/zql/src/query/expression.js +138 -157
  1021. package/out/zql/src/query/expression.js.map +1 -1
  1022. package/out/zql/src/query/measure-push-operator.js +35 -38
  1023. package/out/zql/src/query/measure-push-operator.js.map +1 -1
  1024. package/out/zql/src/query/metrics-delegate.js +7 -7
  1025. package/out/zql/src/query/metrics-delegate.js.map +1 -1
  1026. package/out/zql/src/query/named.js +52 -51
  1027. package/out/zql/src/query/named.js.map +1 -1
  1028. package/out/zql/src/query/query-delegate-base.js +190 -238
  1029. package/out/zql/src/query/query-delegate-base.js.map +1 -1
  1030. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  1031. package/out/zql/src/query/query-impl.js +271 -405
  1032. package/out/zql/src/query/query-impl.js.map +1 -1
  1033. package/out/zql/src/query/query-internals.js +16 -8
  1034. package/out/zql/src/query/query-internals.js.map +1 -1
  1035. package/out/zql/src/query/query-registry.js +83 -98
  1036. package/out/zql/src/query/query-registry.js.map +1 -1
  1037. package/out/zql/src/query/query.d.ts.map +1 -1
  1038. package/out/zql/src/query/query.js +2 -0
  1039. package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
  1040. package/out/zql/src/query/runnable-query-impl.js +30 -55
  1041. package/out/zql/src/query/runnable-query-impl.js.map +1 -1
  1042. package/out/zql/src/query/static-query.js +7 -14
  1043. package/out/zql/src/query/static-query.js.map +1 -1
  1044. package/out/zql/src/query/ttl.js +45 -67
  1045. package/out/zql/src/query/ttl.js.map +1 -1
  1046. package/out/zql/src/query/validate-input.js +23 -20
  1047. package/out/zql/src/query/validate-input.js.map +1 -1
  1048. package/out/zqlite/src/database-storage.js +99 -103
  1049. package/out/zqlite/src/database-storage.js.map +1 -1
  1050. package/out/zqlite/src/db.js +206 -249
  1051. package/out/zqlite/src/db.js.map +1 -1
  1052. package/out/zqlite/src/explain-queries.js +11 -13
  1053. package/out/zqlite/src/explain-queries.js.map +1 -1
  1054. package/out/zqlite/src/internal/sql-inline.js +54 -37
  1055. package/out/zqlite/src/internal/sql-inline.js.map +1 -1
  1056. package/out/zqlite/src/internal/sql.js +17 -15
  1057. package/out/zqlite/src/internal/sql.js.map +1 -1
  1058. package/out/zqlite/src/internal/statement-cache.js +117 -92
  1059. package/out/zqlite/src/internal/statement-cache.js.map +1 -1
  1060. package/out/zqlite/src/mod.js +5 -0
  1061. package/out/zqlite/src/query-builder.js +81 -172
  1062. package/out/zqlite/src/query-builder.js.map +1 -1
  1063. package/out/zqlite/src/query-delegate.js +45 -55
  1064. package/out/zqlite/src/query-delegate.js.map +1 -1
  1065. package/out/zqlite/src/resolve-scalar-subqueries.js +134 -124
  1066. package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
  1067. package/out/zqlite/src/sqlite-cost-model.js +92 -97
  1068. package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
  1069. package/out/zqlite/src/sqlite-stat-fanout.js +304 -286
  1070. package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
  1071. package/out/zqlite/src/table-source.js +281 -455
  1072. package/out/zqlite/src/table-source.js.map +1 -1
  1073. package/package.json +8 -7
  1074. package/out/replicache/src/db/index-operation-enum.js +0 -7
  1075. package/out/replicache/src/db/index-operation-enum.js.map +0 -1
  1076. package/out/replicache/src/db/meta-type-enum.js +0 -7
  1077. package/out/replicache/src/db/meta-type-enum.js.map +0 -1
  1078. package/out/replicache/src/format-version-enum.js +0 -11
  1079. package/out/replicache/src/format-version-enum.js.map +0 -1
  1080. package/out/replicache/src/http-status-unauthorized.js +0 -5
  1081. package/out/replicache/src/http-status-unauthorized.js.map +0 -1
  1082. package/out/replicache/src/invoke-kind-enum.js +0 -7
  1083. package/out/replicache/src/invoke-kind-enum.js.map +0 -1
  1084. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js +0 -9
  1085. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js.map +0 -1
  1086. package/out/zero/package.json.js +0 -9
  1087. package/out/zero/package.json.js.map +0 -1
  1088. package/out/zero/src/adapters/drizzle.js.map +0 -1
  1089. package/out/zero/src/adapters/pg.js.map +0 -1
  1090. package/out/zero/src/adapters/postgresjs.js.map +0 -1
  1091. package/out/zero/src/adapters/prisma.js.map +0 -1
  1092. package/out/zero/src/analyze-query.js.map +0 -1
  1093. package/out/zero/src/ast-to-zql.js.map +0 -1
  1094. package/out/zero/src/bindings.js.map +0 -1
  1095. package/out/zero/src/change-protocol/v0.js.map +0 -1
  1096. package/out/zero/src/cli.js.map +0 -1
  1097. package/out/zero/src/deploy-permissions.js.map +0 -1
  1098. package/out/zero/src/expo-sqlite.js.map +0 -1
  1099. package/out/zero/src/op-sqlite.js.map +0 -1
  1100. package/out/zero/src/pg.js.map +0 -1
  1101. package/out/zero/src/react.js.map +0 -1
  1102. package/out/zero/src/server.js.map +0 -1
  1103. package/out/zero/src/solid.js.map +0 -1
  1104. package/out/zero/src/sqlite.js.map +0 -1
  1105. package/out/zero/src/transform-query.js.map +0 -1
  1106. package/out/zero/src/zero.js.map +0 -1
  1107. package/out/zero/src/zqlite.js.map +0 -1
  1108. package/out/zero-cache/src/db/postgres-replica-identity-enum.js +0 -11
  1109. package/out/zero-cache/src/db/postgres-replica-identity-enum.js.map +0 -1
  1110. package/out/zero-cache/src/db/postgres-type-class-enum.js +0 -17
  1111. package/out/zero-cache/src/db/postgres-type-class-enum.js.map +0 -1
  1112. package/out/zero-cache/src/services/change-streamer/error-type-enum.js +0 -9
  1113. package/out/zero-cache/src/services/change-streamer/error-type-enum.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"query-manager.js","sources":["../../../../../zero-client/src/client/query-manager.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport type {ReplicacheImpl} from '../../../replicache/src/replicache-impl.ts';\nimport type {ClientID} from '../../../replicache/src/sync/ids.ts';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport {difference} from '../../../shared/src/set-utils.ts';\nimport {TDigest} from '../../../shared/src/tdigest.ts';\nimport {\n mapAST,\n normalizeAST,\n type AST,\n} from '../../../zero-protocol/src/ast.ts';\nimport type {ChangeDesiredQueriesMessage} from '../../../zero-protocol/src/change-desired-queries.ts';\nimport type {ErroredQuery} from '../../../zero-protocol/src/custom-queries.ts';\nimport {ErrorKind} from '../../../zero-protocol/src/error-kind.ts';\nimport {ErrorOrigin} from '../../../zero-protocol/src/error-origin.ts';\nimport {ErrorReason} from '../../../zero-protocol/src/error-reason.ts';\nimport {ProtocolError} from '../../../zero-protocol/src/error.ts';\nimport type {UpQueriesPatchOp} from '../../../zero-protocol/src/queries-patch.ts';\nimport {\n hashOfAST,\n hashOfNameAndArgs,\n} from '../../../zero-protocol/src/query-hash.ts';\nimport {\n clientToServer,\n serverToClient,\n type NameMapper,\n} from '../../../zero-schema/src/name-mapper.ts';\nimport type {TableSchema} from '../../../zero-schema/src/table-schema.ts';\nimport type {ClientMetricMap} from '../../../zql/src/query/metrics-delegate.ts';\nimport type {CustomQueryID} from '../../../zql/src/query/named.ts';\nimport type {GotCallback} from '../../../zql/src/query/query-delegate.ts';\nimport {clampTTL, compareTTL, type TTL} from '../../../zql/src/query/ttl.ts';\nimport type {ClientErrorKind} from './client-error-kind.ts';\nimport type {ClientError} from './error.ts';\nimport {type ZeroError} from './error.ts';\nimport type {InspectorDelegate} from './inspector/inspector.ts';\nimport {desiredQueriesPrefixForClient, GOT_QUERIES_KEY_PREFIX} from './keys.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\nimport type {ReadTransaction} from './replicache-types.ts';\n\ntype QueryHash = string;\n\ntype Entry = {\n // We keep track of the AST so we can use it in the inspector.\n normalized: AST;\n name: string | undefined;\n args: readonly ReadonlyJSONValue[] | undefined;\n count: number;\n gotCallbacks: GotCallback[];\n ttl: TTL;\n};\n\ntype ClientMetric = {\n [K in keyof ClientMetricMap]: TDigest;\n};\n\n/**\n * Tracks what queries the client is currently subscribed to on the server.\n * Sends `changeDesiredQueries` message to server when this changes.\n * Deduplicates requests so that we only listen to a given unique query once.\n */\nexport class QueryManager implements InspectorDelegate {\n readonly #clientID: ClientID;\n readonly #clientToServer: NameMapper;\n readonly #serverToClient: NameMapper;\n readonly #send: (change: ChangeDesiredQueriesMessage) => void;\n readonly #onFatalError: (error: ZeroError) => void;\n readonly #queries: Map<QueryHash, Entry> = new Map();\n readonly #recentQueriesMaxSize: number;\n readonly #recentQueries: Set<string> = new Set();\n readonly #gotQueries: Set<string> = new Set();\n readonly #mutationTracker: MutationTracker;\n readonly #pendingQueryChanges: UpQueriesPatchOp[] = [];\n readonly #queryChangeThrottleMs: number;\n #pendingRemovals: Array<() => void> = [];\n #batchTimer: ReturnType<typeof setTimeout> | undefined;\n readonly #lc: LogContext;\n readonly #metrics: ClientMetric = newMetrics();\n readonly #queryMetrics: Map<string, ClientMetric> = new Map();\n readonly #slowMaterializeThreshold: number;\n #closedError: ZeroError | undefined;\n\n constructor(\n lc: LogContext,\n mutationTracker: MutationTracker,\n clientID: ClientID,\n tables: Record<string, TableSchema>,\n send: (change: ChangeDesiredQueriesMessage) => void,\n experimentalWatch: ReplicacheImpl['experimentalWatch'],\n recentQueriesMaxSize: number,\n queryChangeThrottleMs: number,\n slowMaterializeThreshold: number,\n onFatalError: (error: ZeroError) => void,\n ) {\n this.#lc = lc.withContext('QueryManager');\n this.#clientID = clientID;\n this.#clientToServer = clientToServer(tables);\n this.#serverToClient = serverToClient(tables);\n this.#recentQueriesMaxSize = recentQueriesMaxSize;\n this.#send = send;\n this.#mutationTracker = mutationTracker;\n this.#queryChangeThrottleMs = queryChangeThrottleMs;\n this.#slowMaterializeThreshold = slowMaterializeThreshold;\n this.#onFatalError = onFatalError;\n this.#mutationTracker.onAllMutationsApplied(() => {\n if (this.#pendingRemovals.length === 0) {\n return;\n }\n const pendingRemovals = this.#pendingRemovals;\n this.#pendingRemovals = [];\n for (const removal of pendingRemovals) {\n removal();\n }\n });\n\n experimentalWatch(\n diff => {\n for (const diffOp of diff) {\n const queryHash = diffOp.key.substring(GOT_QUERIES_KEY_PREFIX.length);\n switch (diffOp.op) {\n case 'add':\n this.#gotQueries.add(queryHash);\n this.#fireGotCallbacks(queryHash, true);\n break;\n case 'del':\n this.#gotQueries.delete(queryHash);\n this.#fireGotCallbacks(queryHash, false);\n break;\n }\n }\n },\n {\n prefix: GOT_QUERIES_KEY_PREFIX,\n initialValuesInFirstDiff: true,\n },\n );\n }\n\n getAST(queryID: string): AST | undefined {\n const ast = this.#queries.get(queryID)?.normalized;\n return ast && mapAST(ast, this.#serverToClient);\n }\n\n mapClientASTToServer(ast: AST): AST {\n return mapAST(ast, this.#clientToServer);\n }\n\n #fireGotCallbacks(queryHash: string, got: boolean) {\n const gotCallbacks = this.#queries.get(queryHash)?.gotCallbacks ?? [];\n for (const gotCallback of gotCallbacks) {\n gotCallback(got);\n }\n }\n\n /**\n * Get the queries that need to be registered with the server.\n *\n * An optional `lastPatch` can be provided. This is the last patch that was\n * sent to the server and may not yet have been acked. If `lastPatch` is provided,\n * this method will return a patch that does not include any events sent in `lastPatch`.\n *\n * This diffing of last patch and current patch is needed since we send\n * a set of queries to the server when we first connect inside of the `sec-protocol` as\n * the `initConnectionMessage`.\n *\n * While we're waiting for the `connected` response to come back from the server,\n * the client may have registered more queries. We need to diff the `initConnectionMessage`\n * queries with the current set of queries to understand what those were.\n */\n async getQueriesPatch(\n tx: ReadTransaction,\n lastPatch?: Map<string, UpQueriesPatchOp>,\n ): Promise<Map<string, UpQueriesPatchOp>> {\n const existingQueryHashes = new Set<string>();\n const prefix = desiredQueriesPrefixForClient(this.#clientID);\n for await (const key of tx.scan({prefix}).keys()) {\n existingQueryHashes.add(key.substring(prefix.length, key.length));\n }\n const patch: Map<string, UpQueriesPatchOp> = new Map();\n for (const hash of existingQueryHashes) {\n if (!this.#queries.has(hash)) {\n patch.set(hash, {op: 'del', hash});\n }\n }\n\n for (const [hash, {normalized, ttl, name, args}] of this.#queries) {\n if (!existingQueryHashes.has(hash)) {\n patch.set(hash, {\n op: 'put',\n hash,\n ast: name === undefined ? normalized : undefined,\n name,\n args,\n // We get TTL out of the DagStore so it is possible that the TTL was written\n // with a too high TTL.\n ttl: clampTTL(ttl), // no lc here since no need to log here\n });\n }\n }\n\n if (lastPatch) {\n // if there are any `puts` in `lastPatch` that are not in `patch` then we need to\n // send a `del` event in `patch`.\n for (const [hash, {op}] of lastPatch) {\n if (op === 'put' && !patch.has(hash)) {\n patch.set(hash, {op: 'del', hash});\n }\n }\n // Remove everything from `patch` that was already sent in `lastPatch`.\n for (const [hash, {op}] of patch) {\n const lastPatchOp = lastPatch.get(hash);\n if (lastPatchOp && lastPatchOp.op === op) {\n patch.delete(hash);\n }\n }\n }\n\n return patch;\n }\n\n handleTransformErrors(errors: ErroredQuery[]) {\n for (const error of errors) {\n const queryId = error.id;\n const entry = this.#queries.get(queryId);\n\n // if we don't have the query registered, continue\n if (!entry) {\n continue;\n }\n\n if (error.error === 'app' || error.error === 'parse') {\n entry.gotCallbacks.forEach(callback => callback(false, error));\n }\n // this code path is not possible technically since errors were never implemented in the legacy query transform error\n // but is included for backwards compatibility and we have a test case for it\n else {\n this.#onFatalError(\n new ProtocolError({\n kind: ErrorKind.TransformFailed,\n origin: ErrorOrigin.ZeroCache,\n reason: ErrorReason.Internal,\n message: `Unknown error transforming queries: ${JSON.stringify(error)}`,\n queryIDs: [],\n }),\n );\n // unreachable(error); TODO(0xcadams): this should eventually be unreachable\n }\n }\n }\n\n handleClosed(\n reason: ClientError<{kind: ClientErrorKind.ClientClosed; message: string}>,\n ) {\n if (this.#closedError) {\n return;\n }\n this.#closedError = reason;\n for (const [queryId, entry] of this.#queries) {\n const erroredQuery: ErroredQuery = {\n error: 'app',\n id: queryId,\n name: entry.name ?? 'legacy',\n message: reason.message,\n details: {kind: reason.kind},\n };\n for (const gotCallback of entry.gotCallbacks) {\n gotCallback(false, erroredQuery);\n }\n }\n }\n\n addCustom(\n ast: AST,\n {name, args}: CustomQueryID,\n ttl: TTL,\n gotCallback?: GotCallback,\n ): () => void {\n const normalized = normalizeAST(ast);\n const queryId = hashOfNameAndArgs(name, args);\n return this.#add(queryId, normalized, name, args, ttl, gotCallback);\n }\n\n addLegacy(ast: AST, ttl: TTL, gotCallback?: GotCallback): () => void {\n const normalized = normalizeAST(ast);\n const astHash = hashOfAST(normalized);\n return this.#add(\n astHash,\n normalized,\n undefined, // name is undefined for legacy queries\n undefined, // args are undefined for legacy queries\n ttl,\n gotCallback,\n );\n }\n\n #add(\n queryId: string,\n normalized: AST,\n name: string | undefined,\n args: readonly ReadonlyJSONValue[] | undefined,\n ttl: TTL,\n gotCallback?: GotCallback,\n ) {\n assert(\n (name === undefined) === (args === undefined),\n 'If name is defined, args must be defined',\n );\n ttl = clampTTL(ttl, this.#lc);\n let entry = this.#queries.get(queryId);\n this.#recentQueries.delete(queryId);\n if (!entry) {\n normalized = mapAST(normalized, this.#clientToServer);\n\n entry = {\n normalized,\n name,\n args,\n count: 1,\n gotCallbacks: gotCallback ? [gotCallback] : [],\n ttl,\n };\n this.#queries.set(queryId, entry);\n this.#queueQueryChange({\n op: 'put',\n hash: queryId,\n ast: name === undefined ? normalized : undefined,\n name,\n args,\n ttl,\n });\n } else {\n ++entry.count;\n this.#updateEntry(entry, queryId, ttl);\n\n if (gotCallback) {\n entry.gotCallbacks.push(gotCallback);\n }\n }\n\n if (gotCallback) {\n gotCallback(this.#gotQueries.has(queryId));\n }\n\n let removed = false;\n const cleanupCb = () => {\n if (removed) {\n return;\n }\n removed = true;\n\n // We cannot remove queries while mutations are pending\n // as that could take data out of scope that is needed in a rebase\n if (this.#mutationTracker.size > 0) {\n this.#pendingRemovals.push(() =>\n this.#remove(entry, queryId, gotCallback),\n );\n return;\n }\n\n this.#remove(entry, queryId, gotCallback);\n };\n return cleanupCb;\n }\n\n updateCustom({name, args}: CustomQueryID, ttl: TTL) {\n const queryID = hashOfNameAndArgs(name, args);\n const entry = must(this.#queries.get(queryID));\n this.#updateEntry(entry, queryID, ttl);\n }\n\n updateLegacy(ast: AST, ttl: TTL) {\n const normalized = normalizeAST(ast);\n const queryID = hashOfAST(normalized);\n const entry = must(this.#queries.get(queryID));\n this.#updateEntry(entry, queryID, ttl);\n }\n\n #updateEntry(entry: Entry, queryID: string, ttl: TTL): void {\n // If the query already exists and the new ttl is larger than the old one\n // we send a changeDesiredQueries message to the server to update the ttl.\n ttl = clampTTL(ttl, this.#lc);\n if (compareTTL(ttl, entry.ttl) > 0) {\n entry.ttl = ttl;\n this.#queueQueryChange({\n op: 'put',\n hash: queryID,\n ast: entry.name === undefined ? entry.normalized : undefined,\n name: entry.name,\n args: entry.args,\n ttl,\n });\n }\n }\n\n #queueQueryChange(op: UpQueriesPatchOp) {\n this.#pendingQueryChanges.push(op);\n this.#scheduleBatch();\n }\n\n #scheduleBatch() {\n if (this.#batchTimer === undefined) {\n this.#batchTimer = setTimeout(\n () => this.flushBatch(),\n this.#queryChangeThrottleMs,\n );\n }\n }\n\n flushBatch() {\n if (this.#batchTimer !== undefined) {\n clearTimeout(this.#batchTimer);\n this.#batchTimer = undefined;\n }\n if (this.#pendingQueryChanges.length > 0) {\n this.#send([\n 'changeDesiredQueries',\n {\n desiredQueriesPatch: [...this.#pendingQueryChanges],\n },\n ]);\n this.#pendingQueryChanges.length = 0;\n }\n }\n\n #remove(entry: Entry, astHash: string, gotCallback: GotCallback | undefined) {\n if (gotCallback) {\n const index = entry.gotCallbacks.indexOf(gotCallback);\n entry.gotCallbacks.splice(index, 1);\n }\n --entry.count;\n if (entry.count === 0) {\n this.#recentQueries.add(astHash);\n if (this.#recentQueries.size > this.#recentQueriesMaxSize) {\n const lruQueryID = this.#recentQueries.values().next().value;\n assert(lruQueryID, 'Expected LRU query ID to exist');\n this.#queries.delete(lruQueryID);\n this.#recentQueries.delete(lruQueryID);\n this.#queryMetrics.delete(lruQueryID);\n this.#queueQueryChange({op: 'del', hash: lruQueryID});\n }\n }\n }\n\n /**\n * Gets the aggregated metrics for all queries managed by this QueryManager.\n */\n get metrics(): ClientMetric {\n return this.#metrics;\n }\n\n addMetric<K extends keyof ClientMetricMap>(\n metric: K,\n value: number,\n ...args: ClientMetricMap[K]\n ): void {\n // Only query metrics are tracked at this point.\n // If this check fails then we need to add a runtime check.\n metric satisfies `query-${string}`;\n\n // We track all materializations of queries as well as per\n // query materializations.\n this.#metrics[metric].add(value);\n\n const queryID = args[0];\n\n // Handle slow query logging for end-to-end materialization\n if (metric === 'query-materialization-end-to-end') {\n const ast = args[1];\n\n if (\n this.#slowMaterializeThreshold !== undefined &&\n value > this.#slowMaterializeThreshold\n ) {\n this.#lc.warn?.(\n 'Slow query materialization (including server/network)',\n queryID,\n ast,\n value,\n );\n } else {\n this.#lc.debug?.(\n 'Materialized query (including server/network)',\n queryID,\n ast,\n value,\n );\n }\n }\n\n // The query manager manages metrics that are per query.\n let existing = this.#queryMetrics.get(queryID);\n if (!existing) {\n existing = newMetrics();\n this.#queryMetrics.set(queryID, existing);\n }\n existing[metric].add(value);\n }\n\n getQueryMetrics(queryID: string): ClientMetric | undefined {\n return this.#queryMetrics.get(queryID);\n }\n\n /**\n * For testing only: returns all query hashes currently registered.\n */\n getAllNonGotQueryHashes(): Iterable<string> {\n return difference(this.#queries, this.#gotQueries);\n }\n}\n\nfunction newMetrics(): ClientMetric {\n return {\n 'query-materialization-client': new TDigest(),\n 'query-materialization-end-to-end': new TDigest(),\n 'query-update-client': new TDigest(),\n };\n}\n"],"names":["ErrorKind.TransformFailed","ErrorOrigin.ZeroCache","ErrorReason.Internal"],"mappings":"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"}
1
+ {"version":3,"file":"query-manager.js","names":["#clientID","#clientToServer","#serverToClient","#send","#onFatalError","#queries","#recentQueriesMaxSize","#recentQueries","#gotQueries","#mutationTracker","#pendingQueryChanges","#queryChangeThrottleMs","#lc","#metrics","#queryMetrics","#slowMaterializeThreshold","#pendingRemovals","#fireGotCallbacks","#closedError","#add","#queueQueryChange","#updateEntry","#remove","#scheduleBatch","#batchTimer"],"sources":["../../../../../zero-client/src/client/query-manager.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport type {ReplicacheImpl} from '../../../replicache/src/replicache-impl.ts';\nimport type {ClientID} from '../../../replicache/src/sync/ids.ts';\nimport {assert} from '../../../shared/src/asserts.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport {difference} from '../../../shared/src/set-utils.ts';\nimport {TDigest} from '../../../shared/src/tdigest.ts';\nimport {\n mapAST,\n normalizeAST,\n type AST,\n} from '../../../zero-protocol/src/ast.ts';\nimport type {ChangeDesiredQueriesMessage} from '../../../zero-protocol/src/change-desired-queries.ts';\nimport type {ErroredQuery} from '../../../zero-protocol/src/custom-queries.ts';\nimport {ErrorKind} from '../../../zero-protocol/src/error-kind.ts';\nimport {ErrorOrigin} from '../../../zero-protocol/src/error-origin.ts';\nimport {ErrorReason} from '../../../zero-protocol/src/error-reason.ts';\nimport {ProtocolError} from '../../../zero-protocol/src/error.ts';\nimport type {UpQueriesPatchOp} from '../../../zero-protocol/src/queries-patch.ts';\nimport {\n hashOfAST,\n hashOfNameAndArgs,\n} from '../../../zero-protocol/src/query-hash.ts';\nimport {\n clientToServer,\n serverToClient,\n type NameMapper,\n} from '../../../zero-schema/src/name-mapper.ts';\nimport type {TableSchema} from '../../../zero-schema/src/table-schema.ts';\nimport type {ClientMetricMap} from '../../../zql/src/query/metrics-delegate.ts';\nimport type {CustomQueryID} from '../../../zql/src/query/named.ts';\nimport type {GotCallback} from '../../../zql/src/query/query-delegate.ts';\nimport {clampTTL, compareTTL, type TTL} from '../../../zql/src/query/ttl.ts';\nimport type {ClientErrorKind} from './client-error-kind.ts';\nimport type {ClientError} from './error.ts';\nimport {type ZeroError} from './error.ts';\nimport type {InspectorDelegate} from './inspector/inspector.ts';\nimport {desiredQueriesPrefixForClient, GOT_QUERIES_KEY_PREFIX} from './keys.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\nimport type {ReadTransaction} from './replicache-types.ts';\n\ntype QueryHash = string;\n\ntype Entry = {\n // We keep track of the AST so we can use it in the inspector.\n normalized: AST;\n name: string | undefined;\n args: readonly ReadonlyJSONValue[] | undefined;\n count: number;\n gotCallbacks: GotCallback[];\n ttl: TTL;\n};\n\ntype ClientMetric = {\n [K in keyof ClientMetricMap]: TDigest;\n};\n\n/**\n * Tracks what queries the client is currently subscribed to on the server.\n * Sends `changeDesiredQueries` message to server when this changes.\n * Deduplicates requests so that we only listen to a given unique query once.\n */\nexport class QueryManager implements InspectorDelegate {\n readonly #clientID: ClientID;\n readonly #clientToServer: NameMapper;\n readonly #serverToClient: NameMapper;\n readonly #send: (change: ChangeDesiredQueriesMessage) => void;\n readonly #onFatalError: (error: ZeroError) => void;\n readonly #queries: Map<QueryHash, Entry> = new Map();\n readonly #recentQueriesMaxSize: number;\n readonly #recentQueries: Set<string> = new Set();\n readonly #gotQueries: Set<string> = new Set();\n readonly #mutationTracker: MutationTracker;\n readonly #pendingQueryChanges: UpQueriesPatchOp[] = [];\n readonly #queryChangeThrottleMs: number;\n #pendingRemovals: Array<() => void> = [];\n #batchTimer: ReturnType<typeof setTimeout> | undefined;\n readonly #lc: LogContext;\n readonly #metrics: ClientMetric = newMetrics();\n readonly #queryMetrics: Map<string, ClientMetric> = new Map();\n readonly #slowMaterializeThreshold: number;\n #closedError: ZeroError | undefined;\n\n constructor(\n lc: LogContext,\n mutationTracker: MutationTracker,\n clientID: ClientID,\n tables: Record<string, TableSchema>,\n send: (change: ChangeDesiredQueriesMessage) => void,\n experimentalWatch: ReplicacheImpl['experimentalWatch'],\n recentQueriesMaxSize: number,\n queryChangeThrottleMs: number,\n slowMaterializeThreshold: number,\n onFatalError: (error: ZeroError) => void,\n ) {\n this.#lc = lc.withContext('QueryManager');\n this.#clientID = clientID;\n this.#clientToServer = clientToServer(tables);\n this.#serverToClient = serverToClient(tables);\n this.#recentQueriesMaxSize = recentQueriesMaxSize;\n this.#send = send;\n this.#mutationTracker = mutationTracker;\n this.#queryChangeThrottleMs = queryChangeThrottleMs;\n this.#slowMaterializeThreshold = slowMaterializeThreshold;\n this.#onFatalError = onFatalError;\n this.#mutationTracker.onAllMutationsApplied(() => {\n if (this.#pendingRemovals.length === 0) {\n return;\n }\n const pendingRemovals = this.#pendingRemovals;\n this.#pendingRemovals = [];\n for (const removal of pendingRemovals) {\n removal();\n }\n });\n\n experimentalWatch(\n diff => {\n for (const diffOp of diff) {\n const queryHash = diffOp.key.substring(GOT_QUERIES_KEY_PREFIX.length);\n switch (diffOp.op) {\n case 'add':\n this.#gotQueries.add(queryHash);\n this.#fireGotCallbacks(queryHash, true);\n break;\n case 'del':\n this.#gotQueries.delete(queryHash);\n this.#fireGotCallbacks(queryHash, false);\n break;\n }\n }\n },\n {\n prefix: GOT_QUERIES_KEY_PREFIX,\n initialValuesInFirstDiff: true,\n },\n );\n }\n\n getAST(queryID: string): AST | undefined {\n const ast = this.#queries.get(queryID)?.normalized;\n return ast && mapAST(ast, this.#serverToClient);\n }\n\n mapClientASTToServer(ast: AST): AST {\n return mapAST(ast, this.#clientToServer);\n }\n\n #fireGotCallbacks(queryHash: string, got: boolean) {\n const gotCallbacks = this.#queries.get(queryHash)?.gotCallbacks ?? [];\n for (const gotCallback of gotCallbacks) {\n gotCallback(got);\n }\n }\n\n /**\n * Get the queries that need to be registered with the server.\n *\n * An optional `lastPatch` can be provided. This is the last patch that was\n * sent to the server and may not yet have been acked. If `lastPatch` is provided,\n * this method will return a patch that does not include any events sent in `lastPatch`.\n *\n * This diffing of last patch and current patch is needed since we send\n * a set of queries to the server when we first connect inside of the `sec-protocol` as\n * the `initConnectionMessage`.\n *\n * While we're waiting for the `connected` response to come back from the server,\n * the client may have registered more queries. We need to diff the `initConnectionMessage`\n * queries with the current set of queries to understand what those were.\n */\n async getQueriesPatch(\n tx: ReadTransaction,\n lastPatch?: Map<string, UpQueriesPatchOp>,\n ): Promise<Map<string, UpQueriesPatchOp>> {\n const existingQueryHashes = new Set<string>();\n const prefix = desiredQueriesPrefixForClient(this.#clientID);\n for await (const key of tx.scan({prefix}).keys()) {\n existingQueryHashes.add(key.substring(prefix.length, key.length));\n }\n const patch: Map<string, UpQueriesPatchOp> = new Map();\n for (const hash of existingQueryHashes) {\n if (!this.#queries.has(hash)) {\n patch.set(hash, {op: 'del', hash});\n }\n }\n\n for (const [hash, {normalized, ttl, name, args}] of this.#queries) {\n if (!existingQueryHashes.has(hash)) {\n patch.set(hash, {\n op: 'put',\n hash,\n ast: name === undefined ? normalized : undefined,\n name,\n args,\n // We get TTL out of the DagStore so it is possible that the TTL was written\n // with a too high TTL.\n ttl: clampTTL(ttl), // no lc here since no need to log here\n });\n }\n }\n\n if (lastPatch) {\n // if there are any `puts` in `lastPatch` that are not in `patch` then we need to\n // send a `del` event in `patch`.\n for (const [hash, {op}] of lastPatch) {\n if (op === 'put' && !patch.has(hash)) {\n patch.set(hash, {op: 'del', hash});\n }\n }\n // Remove everything from `patch` that was already sent in `lastPatch`.\n for (const [hash, {op}] of patch) {\n const lastPatchOp = lastPatch.get(hash);\n if (lastPatchOp && lastPatchOp.op === op) {\n patch.delete(hash);\n }\n }\n }\n\n return patch;\n }\n\n handleTransformErrors(errors: ErroredQuery[]) {\n for (const error of errors) {\n const queryId = error.id;\n const entry = this.#queries.get(queryId);\n\n // if we don't have the query registered, continue\n if (!entry) {\n continue;\n }\n\n if (error.error === 'app' || error.error === 'parse') {\n entry.gotCallbacks.forEach(callback => callback(false, error));\n }\n // this code path is not possible technically since errors were never implemented in the legacy query transform error\n // but is included for backwards compatibility and we have a test case for it\n else {\n this.#onFatalError(\n new ProtocolError({\n kind: ErrorKind.TransformFailed,\n origin: ErrorOrigin.ZeroCache,\n reason: ErrorReason.Internal,\n message: `Unknown error transforming queries: ${JSON.stringify(error)}`,\n queryIDs: [],\n }),\n );\n // unreachable(error); TODO(0xcadams): this should eventually be unreachable\n }\n }\n }\n\n handleClosed(\n reason: ClientError<{kind: ClientErrorKind.ClientClosed; message: string}>,\n ) {\n if (this.#closedError) {\n return;\n }\n this.#closedError = reason;\n for (const [queryId, entry] of this.#queries) {\n const erroredQuery: ErroredQuery = {\n error: 'app',\n id: queryId,\n name: entry.name ?? 'legacy',\n message: reason.message,\n details: {kind: reason.kind},\n };\n for (const gotCallback of entry.gotCallbacks) {\n gotCallback(false, erroredQuery);\n }\n }\n }\n\n addCustom(\n ast: AST,\n {name, args}: CustomQueryID,\n ttl: TTL,\n gotCallback?: GotCallback,\n ): () => void {\n const normalized = normalizeAST(ast);\n const queryId = hashOfNameAndArgs(name, args);\n return this.#add(queryId, normalized, name, args, ttl, gotCallback);\n }\n\n addLegacy(ast: AST, ttl: TTL, gotCallback?: GotCallback): () => void {\n const normalized = normalizeAST(ast);\n const astHash = hashOfAST(normalized);\n return this.#add(\n astHash,\n normalized,\n undefined, // name is undefined for legacy queries\n undefined, // args are undefined for legacy queries\n ttl,\n gotCallback,\n );\n }\n\n #add(\n queryId: string,\n normalized: AST,\n name: string | undefined,\n args: readonly ReadonlyJSONValue[] | undefined,\n ttl: TTL,\n gotCallback?: GotCallback,\n ) {\n assert(\n (name === undefined) === (args === undefined),\n 'If name is defined, args must be defined',\n );\n ttl = clampTTL(ttl, this.#lc);\n let entry = this.#queries.get(queryId);\n this.#recentQueries.delete(queryId);\n if (!entry) {\n normalized = mapAST(normalized, this.#clientToServer);\n\n entry = {\n normalized,\n name,\n args,\n count: 1,\n gotCallbacks: gotCallback ? [gotCallback] : [],\n ttl,\n };\n this.#queries.set(queryId, entry);\n this.#queueQueryChange({\n op: 'put',\n hash: queryId,\n ast: name === undefined ? normalized : undefined,\n name,\n args,\n ttl,\n });\n } else {\n ++entry.count;\n this.#updateEntry(entry, queryId, ttl);\n\n if (gotCallback) {\n entry.gotCallbacks.push(gotCallback);\n }\n }\n\n if (gotCallback) {\n gotCallback(this.#gotQueries.has(queryId));\n }\n\n let removed = false;\n const cleanupCb = () => {\n if (removed) {\n return;\n }\n removed = true;\n\n // We cannot remove queries while mutations are pending\n // as that could take data out of scope that is needed in a rebase\n if (this.#mutationTracker.size > 0) {\n this.#pendingRemovals.push(() =>\n this.#remove(entry, queryId, gotCallback),\n );\n return;\n }\n\n this.#remove(entry, queryId, gotCallback);\n };\n return cleanupCb;\n }\n\n updateCustom({name, args}: CustomQueryID, ttl: TTL) {\n const queryID = hashOfNameAndArgs(name, args);\n const entry = must(this.#queries.get(queryID));\n this.#updateEntry(entry, queryID, ttl);\n }\n\n updateLegacy(ast: AST, ttl: TTL) {\n const normalized = normalizeAST(ast);\n const queryID = hashOfAST(normalized);\n const entry = must(this.#queries.get(queryID));\n this.#updateEntry(entry, queryID, ttl);\n }\n\n #updateEntry(entry: Entry, queryID: string, ttl: TTL): void {\n // If the query already exists and the new ttl is larger than the old one\n // we send a changeDesiredQueries message to the server to update the ttl.\n ttl = clampTTL(ttl, this.#lc);\n if (compareTTL(ttl, entry.ttl) > 0) {\n entry.ttl = ttl;\n this.#queueQueryChange({\n op: 'put',\n hash: queryID,\n ast: entry.name === undefined ? entry.normalized : undefined,\n name: entry.name,\n args: entry.args,\n ttl,\n });\n }\n }\n\n #queueQueryChange(op: UpQueriesPatchOp) {\n this.#pendingQueryChanges.push(op);\n this.#scheduleBatch();\n }\n\n #scheduleBatch() {\n if (this.#batchTimer === undefined) {\n this.#batchTimer = setTimeout(\n () => this.flushBatch(),\n this.#queryChangeThrottleMs,\n );\n }\n }\n\n flushBatch() {\n if (this.#batchTimer !== undefined) {\n clearTimeout(this.#batchTimer);\n this.#batchTimer = undefined;\n }\n if (this.#pendingQueryChanges.length > 0) {\n this.#send([\n 'changeDesiredQueries',\n {\n desiredQueriesPatch: [...this.#pendingQueryChanges],\n },\n ]);\n this.#pendingQueryChanges.length = 0;\n }\n }\n\n #remove(entry: Entry, astHash: string, gotCallback: GotCallback | undefined) {\n if (gotCallback) {\n const index = entry.gotCallbacks.indexOf(gotCallback);\n entry.gotCallbacks.splice(index, 1);\n }\n --entry.count;\n if (entry.count === 0) {\n this.#recentQueries.add(astHash);\n if (this.#recentQueries.size > this.#recentQueriesMaxSize) {\n const lruQueryID = this.#recentQueries.values().next().value;\n assert(lruQueryID, 'Expected LRU query ID to exist');\n this.#queries.delete(lruQueryID);\n this.#recentQueries.delete(lruQueryID);\n this.#queryMetrics.delete(lruQueryID);\n this.#queueQueryChange({op: 'del', hash: lruQueryID});\n }\n }\n }\n\n /**\n * Gets the aggregated metrics for all queries managed by this QueryManager.\n */\n get metrics(): ClientMetric {\n return this.#metrics;\n }\n\n addMetric<K extends keyof ClientMetricMap>(\n metric: K,\n value: number,\n ...args: ClientMetricMap[K]\n ): void {\n // Only query metrics are tracked at this point.\n // If this check fails then we need to add a runtime check.\n metric satisfies `query-${string}`;\n\n // We track all materializations of queries as well as per\n // query materializations.\n this.#metrics[metric].add(value);\n\n const queryID = args[0];\n\n // Handle slow query logging for end-to-end materialization\n if (metric === 'query-materialization-end-to-end') {\n const ast = args[1];\n\n if (\n this.#slowMaterializeThreshold !== undefined &&\n value > this.#slowMaterializeThreshold\n ) {\n this.#lc.warn?.(\n 'Slow query materialization (including server/network)',\n queryID,\n ast,\n value,\n );\n } else {\n this.#lc.debug?.(\n 'Materialized query (including server/network)',\n queryID,\n ast,\n value,\n );\n }\n }\n\n // The query manager manages metrics that are per query.\n let existing = this.#queryMetrics.get(queryID);\n if (!existing) {\n existing = newMetrics();\n this.#queryMetrics.set(queryID, existing);\n }\n existing[metric].add(value);\n }\n\n getQueryMetrics(queryID: string): ClientMetric | undefined {\n return this.#queryMetrics.get(queryID);\n }\n\n /**\n * For testing only: returns all query hashes currently registered.\n */\n getAllNonGotQueryHashes(): Iterable<string> {\n return difference(this.#queries, this.#gotQueries);\n }\n}\n\nfunction newMetrics(): ClientMetric {\n return {\n 'query-materialization-client': new TDigest(),\n 'query-materialization-end-to-end': new TDigest(),\n 'query-update-client': new TDigest(),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA+DA,IAAa,eAAb,MAAuD;CACrD;CACA;CACA;CACA;CACA;CACA,2BAA2C,IAAI,KAAK;CACpD;CACA,iCAAuC,IAAI,KAAK;CAChD,8BAAoC,IAAI,KAAK;CAC7C;CACA,uBAAoD,EAAE;CACtD;CACA,mBAAsC,EAAE;CACxC;CACA;CACA,WAAkC,YAAY;CAC9C,gCAAoD,IAAI,KAAK;CAC7D;CACA;CAEA,YACE,IACA,iBACA,UACA,QACA,MACA,mBACA,sBACA,uBACA,0BACA,cACA;AACA,QAAA,KAAW,GAAG,YAAY,eAAe;AACzC,QAAA,WAAiB;AACjB,QAAA,iBAAuB,eAAe,OAAO;AAC7C,QAAA,iBAAuB,eAAe,OAAO;AAC7C,QAAA,uBAA6B;AAC7B,QAAA,OAAa;AACb,QAAA,kBAAwB;AACxB,QAAA,wBAA8B;AAC9B,QAAA,2BAAiC;AACjC,QAAA,eAAqB;AACrB,QAAA,gBAAsB,4BAA4B;AAChD,OAAI,MAAA,gBAAsB,WAAW,EACnC;GAEF,MAAM,kBAAkB,MAAA;AACxB,SAAA,kBAAwB,EAAE;AAC1B,QAAK,MAAM,WAAW,gBACpB,UAAS;IAEX;AAEF,qBACE,SAAQ;AACN,QAAK,MAAM,UAAU,MAAM;IACzB,MAAM,YAAY,OAAO,IAAI,UAAA,EAAwC;AACrE,YAAQ,OAAO,IAAf;KACE,KAAK;AACH,YAAA,WAAiB,IAAI,UAAU;AAC/B,YAAA,iBAAuB,WAAW,KAAK;AACvC;KACF,KAAK;AACH,YAAA,WAAiB,OAAO,UAAU;AAClC,YAAA,iBAAuB,WAAW,MAAM;AACxC;;;KAIR;GACE,QAAA;GACA,0BAA0B;GAC3B,CACF;;CAGH,OAAO,SAAkC;EACvC,MAAM,MAAM,MAAA,QAAc,IAAI,QAAQ,EAAE;AACxC,SAAO,OAAO,OAAO,KAAK,MAAA,eAAqB;;CAGjD,qBAAqB,KAAe;AAClC,SAAO,OAAO,KAAK,MAAA,eAAqB;;CAG1C,kBAAkB,WAAmB,KAAc;EACjD,MAAM,eAAe,MAAA,QAAc,IAAI,UAAU,EAAE,gBAAgB,EAAE;AACrE,OAAK,MAAM,eAAe,aACxB,aAAY,IAAI;;;;;;;;;;;;;;;;;CAmBpB,MAAM,gBACJ,IACA,WACwC;EACxC,MAAM,sCAAsB,IAAI,KAAa;EAC7C,MAAM,SAAS,8BAA8B,MAAA,SAAe;AAC5D,aAAW,MAAM,OAAO,GAAG,KAAK,EAAC,QAAO,CAAC,CAAC,MAAM,CAC9C,qBAAoB,IAAI,IAAI,UAAU,OAAO,QAAQ,IAAI,OAAO,CAAC;EAEnE,MAAM,wBAAuC,IAAI,KAAK;AACtD,OAAK,MAAM,QAAQ,oBACjB,KAAI,CAAC,MAAA,QAAc,IAAI,KAAK,CAC1B,OAAM,IAAI,MAAM;GAAC,IAAI;GAAO;GAAK,CAAC;AAItC,OAAK,MAAM,CAAC,MAAM,EAAC,YAAY,KAAK,MAAM,WAAU,MAAA,QAClD,KAAI,CAAC,oBAAoB,IAAI,KAAK,CAChC,OAAM,IAAI,MAAM;GACd,IAAI;GACJ;GACA,KAAK,SAAS,KAAA,IAAY,aAAa,KAAA;GACvC;GACA;GAGA,KAAK,SAAS,IAAI;GACnB,CAAC;AAIN,MAAI,WAAW;AAGb,QAAK,MAAM,CAAC,MAAM,EAAC,SAAQ,UACzB,KAAI,OAAO,SAAS,CAAC,MAAM,IAAI,KAAK,CAClC,OAAM,IAAI,MAAM;IAAC,IAAI;IAAO;IAAK,CAAC;AAItC,QAAK,MAAM,CAAC,MAAM,EAAC,SAAQ,OAAO;IAChC,MAAM,cAAc,UAAU,IAAI,KAAK;AACvC,QAAI,eAAe,YAAY,OAAO,GACpC,OAAM,OAAO,KAAK;;;AAKxB,SAAO;;CAGT,sBAAsB,QAAwB;AAC5C,OAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,UAAU,MAAM;GACtB,MAAM,QAAQ,MAAA,QAAc,IAAI,QAAQ;AAGxC,OAAI,CAAC,MACH;AAGF,OAAI,MAAM,UAAU,SAAS,MAAM,UAAU,QAC3C,OAAM,aAAa,SAAQ,aAAY,SAAS,OAAO,MAAM,CAAC;OAK9D,OAAA,aACE,IAAI,cAAc;IAChB,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,SAAS,uCAAuC,KAAK,UAAU,MAAM;IACrE,UAAU,EAAE;IACb,CAAC,CACH;;;CAMP,aACE,QACA;AACA,MAAI,MAAA,YACF;AAEF,QAAA,cAAoB;AACpB,OAAK,MAAM,CAAC,SAAS,UAAU,MAAA,SAAe;GAC5C,MAAM,eAA6B;IACjC,OAAO;IACP,IAAI;IACJ,MAAM,MAAM,QAAQ;IACpB,SAAS,OAAO;IAChB,SAAS,EAAC,MAAM,OAAO,MAAK;IAC7B;AACD,QAAK,MAAM,eAAe,MAAM,aAC9B,aAAY,OAAO,aAAa;;;CAKtC,UACE,KACA,EAAC,MAAM,QACP,KACA,aACY;EACZ,MAAM,aAAa,aAAa,IAAI;EACpC,MAAM,UAAU,kBAAkB,MAAM,KAAK;AAC7C,SAAO,MAAA,IAAU,SAAS,YAAY,MAAM,MAAM,KAAK,YAAY;;CAGrE,UAAU,KAAU,KAAU,aAAuC;EACnE,MAAM,aAAa,aAAa,IAAI;EACpC,MAAM,UAAU,UAAU,WAAW;AACrC,SAAO,MAAA,IACL,SACA,YACA,KAAA,GACA,KAAA,GACA,KACA,YACD;;CAGH,KACE,SACA,YACA,MACA,MACA,KACA,aACA;AACA,SACG,SAAS,KAAA,OAAgB,SAAS,KAAA,IACnC,2CACD;AACD,QAAM,SAAS,KAAK,MAAA,GAAS;EAC7B,IAAI,QAAQ,MAAA,QAAc,IAAI,QAAQ;AACtC,QAAA,cAAoB,OAAO,QAAQ;AACnC,MAAI,CAAC,OAAO;AACV,gBAAa,OAAO,YAAY,MAAA,eAAqB;AAErD,WAAQ;IACN;IACA;IACA;IACA,OAAO;IACP,cAAc,cAAc,CAAC,YAAY,GAAG,EAAE;IAC9C;IACD;AACD,SAAA,QAAc,IAAI,SAAS,MAAM;AACjC,SAAA,iBAAuB;IACrB,IAAI;IACJ,MAAM;IACN,KAAK,SAAS,KAAA,IAAY,aAAa,KAAA;IACvC;IACA;IACA;IACD,CAAC;SACG;AACL,KAAE,MAAM;AACR,SAAA,YAAkB,OAAO,SAAS,IAAI;AAEtC,OAAI,YACF,OAAM,aAAa,KAAK,YAAY;;AAIxC,MAAI,YACF,aAAY,MAAA,WAAiB,IAAI,QAAQ,CAAC;EAG5C,IAAI,UAAU;EACd,MAAM,kBAAkB;AACtB,OAAI,QACF;AAEF,aAAU;AAIV,OAAI,MAAA,gBAAsB,OAAO,GAAG;AAClC,UAAA,gBAAsB,WACpB,MAAA,OAAa,OAAO,SAAS,YAAY,CAC1C;AACD;;AAGF,SAAA,OAAa,OAAO,SAAS,YAAY;;AAE3C,SAAO;;CAGT,aAAa,EAAC,MAAM,QAAsB,KAAU;EAClD,MAAM,UAAU,kBAAkB,MAAM,KAAK;EAC7C,MAAM,QAAQ,KAAK,MAAA,QAAc,IAAI,QAAQ,CAAC;AAC9C,QAAA,YAAkB,OAAO,SAAS,IAAI;;CAGxC,aAAa,KAAU,KAAU;EAE/B,MAAM,UAAU,UADG,aAAa,IAAI,CACC;EACrC,MAAM,QAAQ,KAAK,MAAA,QAAc,IAAI,QAAQ,CAAC;AAC9C,QAAA,YAAkB,OAAO,SAAS,IAAI;;CAGxC,aAAa,OAAc,SAAiB,KAAgB;AAG1D,QAAM,SAAS,KAAK,MAAA,GAAS;AAC7B,MAAI,WAAW,KAAK,MAAM,IAAI,GAAG,GAAG;AAClC,SAAM,MAAM;AACZ,SAAA,iBAAuB;IACrB,IAAI;IACJ,MAAM;IACN,KAAK,MAAM,SAAS,KAAA,IAAY,MAAM,aAAa,KAAA;IACnD,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ;IACD,CAAC;;;CAIN,kBAAkB,IAAsB;AACtC,QAAA,oBAA0B,KAAK,GAAG;AAClC,QAAA,eAAqB;;CAGvB,iBAAiB;AACf,MAAI,MAAA,eAAqB,KAAA,EACvB,OAAA,aAAmB,iBACX,KAAK,YAAY,EACvB,MAAA,sBACD;;CAIL,aAAa;AACX,MAAI,MAAA,eAAqB,KAAA,GAAW;AAClC,gBAAa,MAAA,WAAiB;AAC9B,SAAA,aAAmB,KAAA;;AAErB,MAAI,MAAA,oBAA0B,SAAS,GAAG;AACxC,SAAA,KAAW,CACT,wBACA,EACE,qBAAqB,CAAC,GAAG,MAAA,oBAA0B,EACpD,CACF,CAAC;AACF,SAAA,oBAA0B,SAAS;;;CAIvC,QAAQ,OAAc,SAAiB,aAAsC;AAC3E,MAAI,aAAa;GACf,MAAM,QAAQ,MAAM,aAAa,QAAQ,YAAY;AACrD,SAAM,aAAa,OAAO,OAAO,EAAE;;AAErC,IAAE,MAAM;AACR,MAAI,MAAM,UAAU,GAAG;AACrB,SAAA,cAAoB,IAAI,QAAQ;AAChC,OAAI,MAAA,cAAoB,OAAO,MAAA,sBAA4B;IACzD,MAAM,aAAa,MAAA,cAAoB,QAAQ,CAAC,MAAM,CAAC;AACvD,WAAO,YAAY,iCAAiC;AACpD,UAAA,QAAc,OAAO,WAAW;AAChC,UAAA,cAAoB,OAAO,WAAW;AACtC,UAAA,aAAmB,OAAO,WAAW;AACrC,UAAA,iBAAuB;KAAC,IAAI;KAAO,MAAM;KAAW,CAAC;;;;;;;CAQ3D,IAAI,UAAwB;AAC1B,SAAO,MAAA;;CAGT,UACE,QACA,OACA,GAAG,MACG;AAON,QAAA,QAAc,QAAQ,IAAI,MAAM;EAEhC,MAAM,UAAU,KAAK;AAGrB,MAAI,WAAW,oCAAoC;GACjD,MAAM,MAAM,KAAK;AAEjB,OACE,MAAA,6BAAmC,KAAA,KACnC,QAAQ,MAAA,yBAER,OAAA,GAAS,OACP,yDACA,SACA,KACA,MACD;OAED,OAAA,GAAS,QACP,iDACA,SACA,KACA,MACD;;EAKL,IAAI,WAAW,MAAA,aAAmB,IAAI,QAAQ;AAC9C,MAAI,CAAC,UAAU;AACb,cAAW,YAAY;AACvB,SAAA,aAAmB,IAAI,SAAS,SAAS;;AAE3C,WAAS,QAAQ,IAAI,MAAM;;CAG7B,gBAAgB,SAA2C;AACzD,SAAO,MAAA,aAAmB,IAAI,QAAQ;;;;;CAMxC,0BAA4C;AAC1C,SAAO,WAAW,MAAA,SAAe,MAAA,WAAiB;;;AAItD,SAAS,aAA2B;AAClC,QAAO;EACL,gCAAgC,IAAI,SAAS;EAC7C,oCAAoC,IAAI,SAAS;EACjD,uBAAuB,IAAI,SAAS;EACrC"}
@@ -1,114 +1,93 @@
1
- import { parse } from "../../../shared/src/valita.js";
1
+ import { parse, valita_exports } from "../../../shared/src/valita.js";
2
2
  import { errorKindSchema } from "../../../zero-protocol/src/error.js";
3
3
  import { updateNeededReasonTypeSchema } from "./options.js";
4
- import { tuple, union, string, object, number } from "@badrap/valita";
5
- const RELOAD_REASON_STORAGE_KEY = "_zeroReloadReason";
6
- const RELOAD_BACKOFF_STATE_KEY = "_zeroReloadBackoffState";
7
- const reloadReasonSchema = tuple([
8
- union(updateNeededReasonTypeSchema, errorKindSchema),
9
- string()
10
- ]);
11
- const backoffStateSchema = object({
12
- lastReloadTime: number().default(0),
13
- nextIntervalMs: number().default(0)
4
+ //#region ../zero-client/src/client/reload-error-handler.ts
5
+ var RELOAD_REASON_STORAGE_KEY = "_zeroReloadReason";
6
+ var RELOAD_BACKOFF_STATE_KEY = "_zeroReloadBackoffState";
7
+ var reloadReasonSchema = valita_exports.tuple([valita_exports.union(updateNeededReasonTypeSchema, errorKindSchema), valita_exports.string()]);
8
+ var backoffStateSchema = valita_exports.object({
9
+ lastReloadTime: valita_exports.number().default(0),
10
+ nextIntervalMs: valita_exports.number().default(0)
14
11
  });
15
- const MIN_RELOAD_INTERVAL_MS = 500;
16
- const MAX_RELOAD_INTERVAL_MS = 6e4;
17
- const FALLBACK_RELOAD_INTERVAL_MS = 1e4;
18
- let reloadTimer = null;
12
+ var MAX_RELOAD_INTERVAL_MS = 6e4;
13
+ var FALLBACK_RELOAD_INTERVAL_MS = 1e4;
14
+ var reloadTimer = null;
19
15
  function reloadWithReason(lc, reload, reason, message) {
20
- if (reloadTimer) {
21
- lc.info?.("reload timer already scheduled");
22
- return;
23
- }
24
- const now = Date.now();
25
- const backoff = nextBackoff(lc, now);
26
- if (typeof sessionStorage !== "undefined") {
27
- sessionStorage.setItem(RELOAD_BACKOFF_STATE_KEY, JSON.stringify(backoff));
28
- sessionStorage.setItem(
29
- RELOAD_REASON_STORAGE_KEY,
30
- JSON.stringify([reason, message])
31
- );
32
- }
33
- const delay = backoff.lastReloadTime - now;
34
- lc.error?.(
35
- reason,
36
- "\n",
37
- "reloading",
38
- delay > 0 ? `in ${delay / 1e3} seconds` : ""
39
- );
40
- reloadTimer = setTimeout(() => {
41
- reloadTimer = null;
42
- reload();
43
- }, delay);
16
+ if (reloadTimer) {
17
+ lc.info?.("reload timer already scheduled");
18
+ return;
19
+ }
20
+ const now = Date.now();
21
+ const backoff = nextBackoff(lc, now);
22
+ if (typeof sessionStorage !== "undefined") {
23
+ sessionStorage.setItem(RELOAD_BACKOFF_STATE_KEY, JSON.stringify(backoff));
24
+ sessionStorage.setItem(RELOAD_REASON_STORAGE_KEY, JSON.stringify([reason, message]));
25
+ }
26
+ const delay = backoff.lastReloadTime - now;
27
+ lc.error?.(reason, "\n", "reloading", delay > 0 ? `in ${delay / 1e3} seconds` : "");
28
+ reloadTimer = setTimeout(() => {
29
+ reloadTimer = null;
30
+ reload();
31
+ }, delay);
44
32
  }
45
33
  function reportReloadReason(lc) {
46
- if (typeof sessionStorage !== "undefined") {
47
- const value = sessionStorage.getItem(RELOAD_REASON_STORAGE_KEY);
48
- if (value) {
49
- sessionStorage.removeItem(RELOAD_REASON_STORAGE_KEY);
50
- try {
51
- const parsed = JSON.parse(value);
52
- const [reasonType, message] = parse(parsed, reloadReasonSchema);
53
- lc.error?.(reasonType, "Zero reloaded the page.", message);
54
- } catch (e) {
55
- lc.error?.("Zero reloaded the page.", e);
56
- return;
57
- }
58
- }
59
- }
34
+ if (typeof sessionStorage !== "undefined") {
35
+ const value = sessionStorage.getItem(RELOAD_REASON_STORAGE_KEY);
36
+ if (value) {
37
+ sessionStorage.removeItem(RELOAD_REASON_STORAGE_KEY);
38
+ try {
39
+ const [reasonType, message] = parse(JSON.parse(value), reloadReasonSchema);
40
+ lc.error?.(reasonType, "Zero reloaded the page.", message);
41
+ } catch (e) {
42
+ lc.error?.("Zero reloaded the page.", e);
43
+ return;
44
+ }
45
+ }
46
+ }
60
47
  }
48
+ /** If a reload is scheduled, do not attempt to reconnect. */
61
49
  function reloadScheduled() {
62
- return reloadTimer !== null;
50
+ return reloadTimer !== null;
63
51
  }
52
+ /** Call upon a successful connection, indicating that backoff should be reset. */
64
53
  function resetBackoff() {
65
- if (typeof sessionStorage !== "undefined") {
66
- sessionStorage.removeItem(RELOAD_BACKOFF_STATE_KEY);
67
- }
54
+ if (typeof sessionStorage !== "undefined") sessionStorage.removeItem(RELOAD_BACKOFF_STATE_KEY);
68
55
  }
69
56
  function nextBackoff(lc, now) {
70
- if (typeof sessionStorage === "undefined") {
71
- lc.warn?.(
72
- `sessionStorage not supported. backing off in ${FALLBACK_RELOAD_INTERVAL_MS / 1e3} seconds`
73
- );
74
- return {
75
- lastReloadTime: now + FALLBACK_RELOAD_INTERVAL_MS,
76
- nextIntervalMs: MIN_RELOAD_INTERVAL_MS
77
- };
78
- }
79
- const val = sessionStorage.getItem(RELOAD_BACKOFF_STATE_KEY);
80
- if (!val) {
81
- return { lastReloadTime: now, nextIntervalMs: MIN_RELOAD_INTERVAL_MS };
82
- }
83
- let parsed;
84
- try {
85
- parsed = parse(JSON.parse(val), backoffStateSchema, "passthrough");
86
- } catch (e) {
87
- lc.warn?.("ignoring unparsable backoff state", val, e);
88
- return { lastReloadTime: now, nextIntervalMs: MIN_RELOAD_INTERVAL_MS };
89
- }
90
- const { lastReloadTime, nextIntervalMs } = parsed;
91
- if (now - lastReloadTime > MAX_RELOAD_INTERVAL_MS * 2) {
92
- return { lastReloadTime: now, nextIntervalMs: MIN_RELOAD_INTERVAL_MS };
93
- }
94
- if (now < lastReloadTime) {
95
- return parsed;
96
- }
97
- const nextReloadTime = Math.max(now, lastReloadTime + nextIntervalMs);
98
- return {
99
- lastReloadTime: nextReloadTime,
100
- nextIntervalMs: Math.min(nextIntervalMs * 2, MAX_RELOAD_INTERVAL_MS)
101
- };
57
+ if (typeof sessionStorage === "undefined") {
58
+ lc.warn?.(`sessionStorage not supported. backing off in ${FALLBACK_RELOAD_INTERVAL_MS / 1e3} seconds`);
59
+ return {
60
+ lastReloadTime: now + FALLBACK_RELOAD_INTERVAL_MS,
61
+ nextIntervalMs: 500
62
+ };
63
+ }
64
+ const val = sessionStorage.getItem(RELOAD_BACKOFF_STATE_KEY);
65
+ if (!val) return {
66
+ lastReloadTime: now,
67
+ nextIntervalMs: 500
68
+ };
69
+ let parsed;
70
+ try {
71
+ parsed = parse(JSON.parse(val), backoffStateSchema, "passthrough");
72
+ } catch (e) {
73
+ lc.warn?.("ignoring unparsable backoff state", val, e);
74
+ return {
75
+ lastReloadTime: now,
76
+ nextIntervalMs: 500
77
+ };
78
+ }
79
+ const { lastReloadTime, nextIntervalMs } = parsed;
80
+ if (now - lastReloadTime > 6e4 * 2) return {
81
+ lastReloadTime: now,
82
+ nextIntervalMs: 500
83
+ };
84
+ if (now < lastReloadTime) return parsed;
85
+ return {
86
+ lastReloadTime: Math.max(now, lastReloadTime + nextIntervalMs),
87
+ nextIntervalMs: Math.min(nextIntervalMs * 2, MAX_RELOAD_INTERVAL_MS)
88
+ };
102
89
  }
103
- export {
104
- FALLBACK_RELOAD_INTERVAL_MS,
105
- MAX_RELOAD_INTERVAL_MS,
106
- MIN_RELOAD_INTERVAL_MS,
107
- RELOAD_BACKOFF_STATE_KEY,
108
- RELOAD_REASON_STORAGE_KEY,
109
- reloadScheduled,
110
- reloadWithReason,
111
- reportReloadReason,
112
- resetBackoff
113
- };
114
- //# sourceMappingURL=reload-error-handler.js.map
90
+ //#endregion
91
+ export { reloadScheduled, reloadWithReason, reportReloadReason, resetBackoff };
92
+
93
+ //# sourceMappingURL=reload-error-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reload-error-handler.js","sources":["../../../../../zero-client/src/client/reload-error-handler.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport * as v from '../../../shared/src/valita.ts';\nimport type {ErrorKind} from '../../../zero-protocol/src/error-kind.ts';\nimport {errorKindSchema} from '../../../zero-protocol/src/error.ts';\nimport {updateNeededReasonTypeSchema} from './options.ts';\nimport type {UpdateNeededReasonType} from './update-needed-reason-type.ts';\n\nexport const RELOAD_REASON_STORAGE_KEY = '_zeroReloadReason';\nexport const RELOAD_BACKOFF_STATE_KEY = '_zeroReloadBackoffState';\n\nconst reloadReasonSchema = v.tuple([\n v.union(updateNeededReasonTypeSchema, errorKindSchema),\n v.string(),\n]);\n\nconst backoffStateSchema = v.object({\n lastReloadTime: v.number().default(0),\n nextIntervalMs: v.number().default(0),\n});\n\nexport type BackoffState = v.Infer<typeof backoffStateSchema>;\n\nexport const MIN_RELOAD_INTERVAL_MS = 500;\nexport const MAX_RELOAD_INTERVAL_MS = 60_000;\n\n// For the fraction of browsers that do not support sessionStorage.\nexport const FALLBACK_RELOAD_INTERVAL_MS = 10_000;\n\nlet reloadTimer: ReturnType<typeof setTimeout> | null = null;\n\n// TODO: This should get pushed down into Replicache and used for reloads we\n// do there.\nexport function reloadWithReason(\n lc: LogContext,\n reload: () => void,\n reason: UpdateNeededReasonType | ErrorKind,\n message: string,\n) {\n if (reloadTimer) {\n lc.info?.('reload timer already scheduled');\n return;\n }\n const now = Date.now();\n const backoff = nextBackoff(lc, now);\n\n // Record state immediately so that it persists if the user manually reloads first.\n if (typeof sessionStorage !== 'undefined') {\n sessionStorage.setItem(RELOAD_BACKOFF_STATE_KEY, JSON.stringify(backoff));\n sessionStorage.setItem(\n RELOAD_REASON_STORAGE_KEY,\n JSON.stringify([reason, message]),\n );\n }\n\n const delay = backoff.lastReloadTime - now;\n lc.error?.(\n reason,\n '\\n',\n 'reloading',\n delay > 0 ? `in ${delay / 1000} seconds` : '',\n );\n reloadTimer = setTimeout(() => {\n reloadTimer = null;\n reload();\n }, delay);\n}\n\nexport function reportReloadReason(lc: LogContext) {\n if (typeof sessionStorage !== 'undefined') {\n const value = sessionStorage.getItem(RELOAD_REASON_STORAGE_KEY);\n if (value) {\n sessionStorage.removeItem(RELOAD_REASON_STORAGE_KEY);\n try {\n const parsed = JSON.parse(value);\n const [reasonType, message] = v.parse(parsed, reloadReasonSchema);\n lc.error?.(reasonType, 'Zero reloaded the page.', message);\n } catch (e) {\n lc.error?.('Zero reloaded the page.', e);\n // ignore if not able to parse\n return;\n }\n }\n }\n}\n\n/** If a reload is scheduled, do not attempt to reconnect. */\nexport function reloadScheduled() {\n return reloadTimer !== null;\n}\n\n/** Call upon a successful connection, indicating that backoff should be reset. */\nexport function resetBackoff() {\n if (typeof sessionStorage !== 'undefined') {\n sessionStorage.removeItem(RELOAD_BACKOFF_STATE_KEY);\n }\n}\n\nfunction nextBackoff(lc: LogContext, now: number): BackoffState {\n if (typeof sessionStorage === 'undefined') {\n lc.warn?.(\n `sessionStorage not supported. backing off in ${\n FALLBACK_RELOAD_INTERVAL_MS / 1000\n } seconds`,\n );\n return {\n lastReloadTime: now + FALLBACK_RELOAD_INTERVAL_MS,\n nextIntervalMs: MIN_RELOAD_INTERVAL_MS,\n };\n }\n const val = sessionStorage.getItem(RELOAD_BACKOFF_STATE_KEY);\n if (!val) {\n return {lastReloadTime: now, nextIntervalMs: MIN_RELOAD_INTERVAL_MS};\n }\n let parsed: BackoffState;\n try {\n parsed = v.parse(JSON.parse(val), backoffStateSchema, 'passthrough');\n } catch (e) {\n lc.warn?.('ignoring unparsable backoff state', val, e);\n return {lastReloadTime: now, nextIntervalMs: MIN_RELOAD_INTERVAL_MS};\n }\n const {lastReloadTime, nextIntervalMs} = parsed;\n\n // Backoff state might not have been cleared. Reset for sufficiently old state.\n if (now - lastReloadTime > MAX_RELOAD_INTERVAL_MS * 2) {\n return {lastReloadTime: now, nextIntervalMs: MIN_RELOAD_INTERVAL_MS};\n }\n if (now < lastReloadTime) {\n // If the user manually reloaded, stick to the existing schedule.\n return parsed;\n }\n const nextReloadTime = Math.max(now, lastReloadTime + nextIntervalMs);\n return {\n lastReloadTime: nextReloadTime,\n nextIntervalMs: Math.min(nextIntervalMs * 2, MAX_RELOAD_INTERVAL_MS),\n };\n}\n"],"names":["v.tuple","v.union","v.string","v.object","v.number","v.parse"],"mappings":";;;;AAOO,MAAM,4BAA4B;AAClC,MAAM,2BAA2B;AAExC,MAAM,qBAAqBA,MAAQ;AAAA,EACjCC,MAAQ,8BAA8B,eAAe;AAAA,EACrDC,OAAE;AACJ,CAAC;AAED,MAAM,qBAAqBC,OAAS;AAAA,EAClC,gBAAgBC,OAAE,EAAS,QAAQ,CAAC;AAAA,EACpC,gBAAgBA,SAAW,QAAQ,CAAC;AACtC,CAAC;AAIM,MAAM,yBAAyB;AAC/B,MAAM,yBAAyB;AAG/B,MAAM,8BAA8B;AAE3C,IAAI,cAAoD;AAIjD,SAAS,iBACd,IACA,QACA,QACA,SACA;AACA,MAAI,aAAa;AACf,OAAG,OAAO,gCAAgC;AAC1C;AAAA,EACF;AACA,QAAM,MAAM,KAAK,IAAA;AACjB,QAAM,UAAU,YAAY,IAAI,GAAG;AAGnC,MAAI,OAAO,mBAAmB,aAAa;AACzC,mBAAe,QAAQ,0BAA0B,KAAK,UAAU,OAAO,CAAC;AACxE,mBAAe;AAAA,MACb;AAAA,MACA,KAAK,UAAU,CAAC,QAAQ,OAAO,CAAC;AAAA,IAAA;AAAA,EAEpC;AAEA,QAAM,QAAQ,QAAQ,iBAAiB;AACvC,KAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,IAAI,MAAM,QAAQ,GAAI,aAAa;AAAA,EAAA;AAE7C,gBAAc,WAAW,MAAM;AAC7B,kBAAc;AACd,WAAA;AAAA,EACF,GAAG,KAAK;AACV;AAEO,SAAS,mBAAmB,IAAgB;AACjD,MAAI,OAAO,mBAAmB,aAAa;AACzC,UAAM,QAAQ,eAAe,QAAQ,yBAAyB;AAC9D,QAAI,OAAO;AACT,qBAAe,WAAW,yBAAyB;AACnD,UAAI;AACF,cAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,cAAM,CAAC,YAAY,OAAO,IAAIC,MAAQ,QAAQ,kBAAkB;AAChE,WAAG,QAAQ,YAAY,2BAA2B,OAAO;AAAA,MAC3D,SAAS,GAAG;AACV,WAAG,QAAQ,2BAA2B,CAAC;AAEvC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAGO,SAAS,kBAAkB;AAChC,SAAO,gBAAgB;AACzB;AAGO,SAAS,eAAe;AAC7B,MAAI,OAAO,mBAAmB,aAAa;AACzC,mBAAe,WAAW,wBAAwB;AAAA,EACpD;AACF;AAEA,SAAS,YAAY,IAAgB,KAA2B;AAC9D,MAAI,OAAO,mBAAmB,aAAa;AACzC,OAAG;AAAA,MACD,gDACE,8BAA8B,GAChC;AAAA,IAAA;AAEF,WAAO;AAAA,MACL,gBAAgB,MAAM;AAAA,MACtB,gBAAgB;AAAA,IAAA;AAAA,EAEpB;AACA,QAAM,MAAM,eAAe,QAAQ,wBAAwB;AAC3D,MAAI,CAAC,KAAK;AACR,WAAO,EAAC,gBAAgB,KAAK,gBAAgB,uBAAA;AAAA,EAC/C;AACA,MAAI;AACJ,MAAI;AACF,aAASA,MAAQ,KAAK,MAAM,GAAG,GAAG,oBAAoB,aAAa;AAAA,EACrE,SAAS,GAAG;AACV,OAAG,OAAO,qCAAqC,KAAK,CAAC;AACrD,WAAO,EAAC,gBAAgB,KAAK,gBAAgB,uBAAA;AAAA,EAC/C;AACA,QAAM,EAAC,gBAAgB,eAAA,IAAkB;AAGzC,MAAI,MAAM,iBAAiB,yBAAyB,GAAG;AACrD,WAAO,EAAC,gBAAgB,KAAK,gBAAgB,uBAAA;AAAA,EAC/C;AACA,MAAI,MAAM,gBAAgB;AAExB,WAAO;AAAA,EACT;AACA,QAAM,iBAAiB,KAAK,IAAI,KAAK,iBAAiB,cAAc;AACpE,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,gBAAgB,KAAK,IAAI,iBAAiB,GAAG,sBAAsB;AAAA,EAAA;AAEvE;"}
1
+ {"version":3,"file":"reload-error-handler.js","names":[],"sources":["../../../../../zero-client/src/client/reload-error-handler.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport * as v from '../../../shared/src/valita.ts';\nimport type {ErrorKind} from '../../../zero-protocol/src/error-kind.ts';\nimport {errorKindSchema} from '../../../zero-protocol/src/error.ts';\nimport {updateNeededReasonTypeSchema} from './options.ts';\nimport type {UpdateNeededReasonType} from './update-needed-reason-type.ts';\n\nexport const RELOAD_REASON_STORAGE_KEY = '_zeroReloadReason';\nexport const RELOAD_BACKOFF_STATE_KEY = '_zeroReloadBackoffState';\n\nconst reloadReasonSchema = v.tuple([\n v.union(updateNeededReasonTypeSchema, errorKindSchema),\n v.string(),\n]);\n\nconst backoffStateSchema = v.object({\n lastReloadTime: v.number().default(0),\n nextIntervalMs: v.number().default(0),\n});\n\nexport type BackoffState = v.Infer<typeof backoffStateSchema>;\n\nexport const MIN_RELOAD_INTERVAL_MS = 500;\nexport const MAX_RELOAD_INTERVAL_MS = 60_000;\n\n// For the fraction of browsers that do not support sessionStorage.\nexport const FALLBACK_RELOAD_INTERVAL_MS = 10_000;\n\nlet reloadTimer: ReturnType<typeof setTimeout> | null = null;\n\n// TODO: This should get pushed down into Replicache and used for reloads we\n// do there.\nexport function reloadWithReason(\n lc: LogContext,\n reload: () => void,\n reason: UpdateNeededReasonType | ErrorKind,\n message: string,\n) {\n if (reloadTimer) {\n lc.info?.('reload timer already scheduled');\n return;\n }\n const now = Date.now();\n const backoff = nextBackoff(lc, now);\n\n // Record state immediately so that it persists if the user manually reloads first.\n if (typeof sessionStorage !== 'undefined') {\n sessionStorage.setItem(RELOAD_BACKOFF_STATE_KEY, JSON.stringify(backoff));\n sessionStorage.setItem(\n RELOAD_REASON_STORAGE_KEY,\n JSON.stringify([reason, message]),\n );\n }\n\n const delay = backoff.lastReloadTime - now;\n lc.error?.(\n reason,\n '\\n',\n 'reloading',\n delay > 0 ? `in ${delay / 1000} seconds` : '',\n );\n reloadTimer = setTimeout(() => {\n reloadTimer = null;\n reload();\n }, delay);\n}\n\nexport function reportReloadReason(lc: LogContext) {\n if (typeof sessionStorage !== 'undefined') {\n const value = sessionStorage.getItem(RELOAD_REASON_STORAGE_KEY);\n if (value) {\n sessionStorage.removeItem(RELOAD_REASON_STORAGE_KEY);\n try {\n const parsed = JSON.parse(value);\n const [reasonType, message] = v.parse(parsed, reloadReasonSchema);\n lc.error?.(reasonType, 'Zero reloaded the page.', message);\n } catch (e) {\n lc.error?.('Zero reloaded the page.', e);\n // ignore if not able to parse\n return;\n }\n }\n }\n}\n\n/** If a reload is scheduled, do not attempt to reconnect. */\nexport function reloadScheduled() {\n return reloadTimer !== null;\n}\n\n/** Call upon a successful connection, indicating that backoff should be reset. */\nexport function resetBackoff() {\n if (typeof sessionStorage !== 'undefined') {\n sessionStorage.removeItem(RELOAD_BACKOFF_STATE_KEY);\n }\n}\n\nfunction nextBackoff(lc: LogContext, now: number): BackoffState {\n if (typeof sessionStorage === 'undefined') {\n lc.warn?.(\n `sessionStorage not supported. backing off in ${\n FALLBACK_RELOAD_INTERVAL_MS / 1000\n } seconds`,\n );\n return {\n lastReloadTime: now + FALLBACK_RELOAD_INTERVAL_MS,\n nextIntervalMs: MIN_RELOAD_INTERVAL_MS,\n };\n }\n const val = sessionStorage.getItem(RELOAD_BACKOFF_STATE_KEY);\n if (!val) {\n return {lastReloadTime: now, nextIntervalMs: MIN_RELOAD_INTERVAL_MS};\n }\n let parsed: BackoffState;\n try {\n parsed = v.parse(JSON.parse(val), backoffStateSchema, 'passthrough');\n } catch (e) {\n lc.warn?.('ignoring unparsable backoff state', val, e);\n return {lastReloadTime: now, nextIntervalMs: MIN_RELOAD_INTERVAL_MS};\n }\n const {lastReloadTime, nextIntervalMs} = parsed;\n\n // Backoff state might not have been cleared. Reset for sufficiently old state.\n if (now - lastReloadTime > MAX_RELOAD_INTERVAL_MS * 2) {\n return {lastReloadTime: now, nextIntervalMs: MIN_RELOAD_INTERVAL_MS};\n }\n if (now < lastReloadTime) {\n // If the user manually reloaded, stick to the existing schedule.\n return parsed;\n }\n const nextReloadTime = Math.max(now, lastReloadTime + nextIntervalMs);\n return {\n lastReloadTime: nextReloadTime,\n nextIntervalMs: Math.min(nextIntervalMs * 2, MAX_RELOAD_INTERVAL_MS),\n };\n}\n"],"mappings":";;;;AAOA,IAAa,4BAA4B;AACzC,IAAa,2BAA2B;AAExC,IAAM,qBAAqB,eAAE,MAAM,CACjC,eAAE,MAAM,8BAA8B,gBAAgB,EACtD,eAAE,QAAQ,CACX,CAAC;AAEF,IAAM,qBAAqB,eAAE,OAAO;CAClC,gBAAgB,eAAE,QAAQ,CAAC,QAAQ,EAAE;CACrC,gBAAgB,eAAE,QAAQ,CAAC,QAAQ,EAAE;CACtC,CAAC;AAKF,IAAa,yBAAyB;AAGtC,IAAa,8BAA8B;AAE3C,IAAI,cAAoD;AAIxD,SAAgB,iBACd,IACA,QACA,QACA,SACA;AACA,KAAI,aAAa;AACf,KAAG,OAAO,iCAAiC;AAC3C;;CAEF,MAAM,MAAM,KAAK,KAAK;CACtB,MAAM,UAAU,YAAY,IAAI,IAAI;AAGpC,KAAI,OAAO,mBAAmB,aAAa;AACzC,iBAAe,QAAQ,0BAA0B,KAAK,UAAU,QAAQ,CAAC;AACzE,iBAAe,QACb,2BACA,KAAK,UAAU,CAAC,QAAQ,QAAQ,CAAC,CAClC;;CAGH,MAAM,QAAQ,QAAQ,iBAAiB;AACvC,IAAG,QACD,QACA,MACA,aACA,QAAQ,IAAI,MAAM,QAAQ,IAAK,YAAY,GAC5C;AACD,eAAc,iBAAiB;AAC7B,gBAAc;AACd,UAAQ;IACP,MAAM;;AAGX,SAAgB,mBAAmB,IAAgB;AACjD,KAAI,OAAO,mBAAmB,aAAa;EACzC,MAAM,QAAQ,eAAe,QAAQ,0BAA0B;AAC/D,MAAI,OAAO;AACT,kBAAe,WAAW,0BAA0B;AACpD,OAAI;IAEF,MAAM,CAAC,YAAY,WAAW,MADf,KAAK,MAAM,MAAM,EACc,mBAAmB;AACjE,OAAG,QAAQ,YAAY,2BAA2B,QAAQ;YACnD,GAAG;AACV,OAAG,QAAQ,2BAA2B,EAAE;AAExC;;;;;;AAOR,SAAgB,kBAAkB;AAChC,QAAO,gBAAgB;;;AAIzB,SAAgB,eAAe;AAC7B,KAAI,OAAO,mBAAmB,YAC5B,gBAAe,WAAW,yBAAyB;;AAIvD,SAAS,YAAY,IAAgB,KAA2B;AAC9D,KAAI,OAAO,mBAAmB,aAAa;AACzC,KAAG,OACD,gDACE,8BAA8B,IAC/B,UACF;AACD,SAAO;GACL,gBAAgB,MAAM;GACtB,gBAAA;GACD;;CAEH,MAAM,MAAM,eAAe,QAAQ,yBAAyB;AAC5D,KAAI,CAAC,IACH,QAAO;EAAC,gBAAgB;EAAK,gBAAA;EAAuC;CAEtE,IAAI;AACJ,KAAI;AACF,WAAS,MAAQ,KAAK,MAAM,IAAI,EAAE,oBAAoB,cAAc;UAC7D,GAAG;AACV,KAAG,OAAO,qCAAqC,KAAK,EAAE;AACtD,SAAO;GAAC,gBAAgB;GAAK,gBAAA;GAAuC;;CAEtE,MAAM,EAAC,gBAAgB,mBAAkB;AAGzC,KAAI,MAAM,iBAAA,MAA0C,EAClD,QAAO;EAAC,gBAAgB;EAAK,gBAAA;EAAuC;AAEtE,KAAI,MAAM,eAER,QAAO;AAGT,QAAO;EACL,gBAFqB,KAAK,IAAI,KAAK,iBAAiB,eAAe;EAGnE,gBAAgB,KAAK,IAAI,iBAAiB,GAAG,uBAAuB;EACrE"}
@@ -1,64 +1,35 @@
1
1
  import { getBrowserGlobal } from "../../../shared/src/browser-env.js";
2
+ //#region ../zero-client/src/client/server-option.ts
2
3
  function validateServerParam(paramName, server) {
3
- const expectedProtocol = "http";
4
- const forExample = (path = "") => ` For example: "${expectedProtocol}s://myapp-myteam.zero.ms/${path}".`;
5
- if (!server.startsWith(`${expectedProtocol}://`) && !server.startsWith(`${expectedProtocol}s://`)) {
6
- throw new Error(
7
- `ZeroOptions.${paramName} must use the "${expectedProtocol}" or "${expectedProtocol}s" scheme.`
8
- );
9
- }
10
- let url;
11
- try {
12
- url = new URL(server);
13
- } catch {
14
- throw new Error(
15
- `ZeroOptions.${paramName} must be a valid URL.${forExample()}`
16
- );
17
- }
18
- const urlString = url.toString();
19
- const pathComponents = url.pathname.split("/");
20
- if (pathComponents[0] === "") {
21
- pathComponents.shift();
22
- }
23
- if (pathComponents[pathComponents.length - 1] === "") {
24
- pathComponents.pop();
25
- }
26
- if (pathComponents.length > 1) {
27
- throw new Error(
28
- `ZeroOptions.${paramName} may have at most one path component.${forExample(
29
- "zero"
30
- )}`
31
- );
32
- }
33
- for (const [property, invalidEndsWith] of [
34
- ["search", "?"],
35
- ["hash", "#"]
36
- ]) {
37
- if (url[property] || urlString.endsWith(invalidEndsWith)) {
38
- throw new Error(
39
- `ZeroOptions.${paramName} must not contain a ${property} component.${forExample()}`
40
- );
41
- }
42
- }
43
- return urlString;
4
+ const expectedProtocol = "http";
5
+ const forExample = (path = "") => ` For example: "${expectedProtocol}s://myapp-myteam.zero.ms/${path}".`;
6
+ if (!server.startsWith(`${expectedProtocol}://`) && !server.startsWith(`${expectedProtocol}s://`)) throw new Error(`ZeroOptions.${paramName} must use the "${expectedProtocol}" or "${expectedProtocol}s" scheme.`);
7
+ let url;
8
+ try {
9
+ url = new URL(server);
10
+ } catch {
11
+ throw new Error(`ZeroOptions.${paramName} must be a valid URL.${forExample()}`);
12
+ }
13
+ const urlString = url.toString();
14
+ const pathComponents = url.pathname.split("/");
15
+ if (pathComponents[0] === "") pathComponents.shift();
16
+ if (pathComponents[pathComponents.length - 1] === "") pathComponents.pop();
17
+ if (pathComponents.length > 1) throw new Error(`ZeroOptions.${paramName} may have at most one path component.${forExample("zero")}`);
18
+ for (const [property, invalidEndsWith] of [["search", "?"], ["hash", "#"]]) if (url[property] || urlString.endsWith(invalidEndsWith)) throw new Error(`ZeroOptions.${paramName} must not contain a ${property} component.${forExample()}`);
19
+ return urlString;
44
20
  }
45
21
  function getServer(server) {
46
- const WS = getBrowserGlobal("WebSocket");
47
- if (!WS) {
48
- console.warn(
49
- "Zero started in an unsupported environment, no data will be synced."
50
- );
51
- return null;
52
- }
53
- if (server === void 0 || server === null) {
54
- console.warn(
55
- "Zero starting up with no server URL. No data will be synced."
56
- );
57
- return null;
58
- }
59
- return validateServerParam("server", server);
22
+ if (!getBrowserGlobal("WebSocket")) {
23
+ console.warn("Zero started in an unsupported environment, no data will be synced.");
24
+ return null;
25
+ }
26
+ if (server === void 0 || server === null) {
27
+ console.warn("Zero starting up with no server URL. No data will be synced.");
28
+ return null;
29
+ }
30
+ return validateServerParam("server", server);
60
31
  }
61
- export {
62
- getServer
63
- };
64
- //# sourceMappingURL=server-option.js.map
32
+ //#endregion
33
+ export { getServer };
34
+
35
+ //# sourceMappingURL=server-option.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-option.js","sources":["../../../../../zero-client/src/client/server-option.ts"],"sourcesContent":["import {getBrowserGlobal} from '../../../shared/src/browser-env.ts';\nimport type {HTTPString} from './http-string.ts';\n\nfunction validateServerParam(paramName: string, server: string): HTTPString {\n const expectedProtocol = 'http';\n const forExample = (path: string = '') =>\n ` For example: \"${expectedProtocol}s://myapp-myteam.zero.ms/${path}\".`;\n\n if (\n !server.startsWith(`${expectedProtocol}://`) &&\n !server.startsWith(`${expectedProtocol}s://`)\n ) {\n throw new Error(\n `ZeroOptions.${paramName} must use the \"${expectedProtocol}\" or \"${expectedProtocol}s\" scheme.`,\n );\n }\n let url;\n try {\n url = new URL(server);\n } catch {\n throw new Error(\n `ZeroOptions.${paramName} must be a valid URL.${forExample()}`,\n );\n }\n\n const urlString = url.toString();\n\n const pathComponents = url.pathname.split('/');\n if (pathComponents[0] === '') {\n pathComponents.shift();\n }\n if (pathComponents[pathComponents.length - 1] === '') {\n pathComponents.pop();\n }\n if (pathComponents.length > 1) {\n throw new Error(\n `ZeroOptions.${paramName} may have at most one path component.${forExample(\n 'zero',\n )}`,\n );\n }\n\n for (const [property, invalidEndsWith] of [\n ['search', '?'],\n ['hash', '#'],\n ] as const) {\n if (url[property] || urlString.endsWith(invalidEndsWith)) {\n throw new Error(\n `ZeroOptions.${paramName} must not contain a ${property} component.${forExample()}`,\n );\n }\n }\n\n return urlString as HTTPString;\n}\n\nexport function getServer(\n server: string | undefined | null,\n): HTTPString | null {\n const WS = getBrowserGlobal('WebSocket');\n if (!WS) {\n // oxlint-disable-next-line no-console\n console.warn(\n 'Zero started in an unsupported environment, no data will be synced.',\n );\n return null;\n }\n if (server === undefined || server === null) {\n // oxlint-disable-next-line no-console\n console.warn(\n 'Zero starting up with no server URL. No data will be synced.',\n );\n return null;\n }\n return validateServerParam('server', server);\n}\n"],"names":[],"mappings":";AAGA,SAAS,oBAAoB,WAAmB,QAA4B;AAC1E,QAAM,mBAAmB;AACzB,QAAM,aAAa,CAAC,OAAe,OACjC,kBAAkB,gBAAgB,4BAA4B,IAAI;AAEpE,MACE,CAAC,OAAO,WAAW,GAAG,gBAAgB,KAAK,KAC3C,CAAC,OAAO,WAAW,GAAG,gBAAgB,MAAM,GAC5C;AACA,UAAM,IAAI;AAAA,MACR,eAAe,SAAS,kBAAkB,gBAAgB,SAAS,gBAAgB;AAAA,IAAA;AAAA,EAEvF;AACA,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,MAAM;AAAA,EACtB,QAAQ;AACN,UAAM,IAAI;AAAA,MACR,eAAe,SAAS,wBAAwB,WAAA,CAAY;AAAA,IAAA;AAAA,EAEhE;AAEA,QAAM,YAAY,IAAI,SAAA;AAEtB,QAAM,iBAAiB,IAAI,SAAS,MAAM,GAAG;AAC7C,MAAI,eAAe,CAAC,MAAM,IAAI;AAC5B,mBAAe,MAAA;AAAA,EACjB;AACA,MAAI,eAAe,eAAe,SAAS,CAAC,MAAM,IAAI;AACpD,mBAAe,IAAA;AAAA,EACjB;AACA,MAAI,eAAe,SAAS,GAAG;AAC7B,UAAM,IAAI;AAAA,MACR,eAAe,SAAS,wCAAwC;AAAA,QAC9D;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EAEL;AAEA,aAAW,CAAC,UAAU,eAAe,KAAK;AAAA,IACxC,CAAC,UAAU,GAAG;AAAA,IACd,CAAC,QAAQ,GAAG;AAAA,EAAA,GACF;AACV,QAAI,IAAI,QAAQ,KAAK,UAAU,SAAS,eAAe,GAAG;AACxD,YAAM,IAAI;AAAA,QACR,eAAe,SAAS,uBAAuB,QAAQ,cAAc,YAAY;AAAA,MAAA;AAAA,IAErF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,UACd,QACmB;AACnB,QAAM,KAAK,iBAAiB,WAAW;AACvC,MAAI,CAAC,IAAI;AAEP,YAAQ;AAAA,MACN;AAAA,IAAA;AAEF,WAAO;AAAA,EACT;AACA,MAAI,WAAW,UAAa,WAAW,MAAM;AAE3C,YAAQ;AAAA,MACN;AAAA,IAAA;AAEF,WAAO;AAAA,EACT;AACA,SAAO,oBAAoB,UAAU,MAAM;AAC7C;"}
1
+ {"version":3,"file":"server-option.js","names":[],"sources":["../../../../../zero-client/src/client/server-option.ts"],"sourcesContent":["import {getBrowserGlobal} from '../../../shared/src/browser-env.ts';\nimport type {HTTPString} from './http-string.ts';\n\nfunction validateServerParam(paramName: string, server: string): HTTPString {\n const expectedProtocol = 'http';\n const forExample = (path: string = '') =>\n ` For example: \"${expectedProtocol}s://myapp-myteam.zero.ms/${path}\".`;\n\n if (\n !server.startsWith(`${expectedProtocol}://`) &&\n !server.startsWith(`${expectedProtocol}s://`)\n ) {\n throw new Error(\n `ZeroOptions.${paramName} must use the \"${expectedProtocol}\" or \"${expectedProtocol}s\" scheme.`,\n );\n }\n let url;\n try {\n url = new URL(server);\n } catch {\n throw new Error(\n `ZeroOptions.${paramName} must be a valid URL.${forExample()}`,\n );\n }\n\n const urlString = url.toString();\n\n const pathComponents = url.pathname.split('/');\n if (pathComponents[0] === '') {\n pathComponents.shift();\n }\n if (pathComponents[pathComponents.length - 1] === '') {\n pathComponents.pop();\n }\n if (pathComponents.length > 1) {\n throw new Error(\n `ZeroOptions.${paramName} may have at most one path component.${forExample(\n 'zero',\n )}`,\n );\n }\n\n for (const [property, invalidEndsWith] of [\n ['search', '?'],\n ['hash', '#'],\n ] as const) {\n if (url[property] || urlString.endsWith(invalidEndsWith)) {\n throw new Error(\n `ZeroOptions.${paramName} must not contain a ${property} component.${forExample()}`,\n );\n }\n }\n\n return urlString as HTTPString;\n}\n\nexport function getServer(\n server: string | undefined | null,\n): HTTPString | null {\n const WS = getBrowserGlobal('WebSocket');\n if (!WS) {\n // oxlint-disable-next-line no-console\n console.warn(\n 'Zero started in an unsupported environment, no data will be synced.',\n );\n return null;\n }\n if (server === undefined || server === null) {\n // oxlint-disable-next-line no-console\n console.warn(\n 'Zero starting up with no server URL. No data will be synced.',\n );\n return null;\n }\n return validateServerParam('server', server);\n}\n"],"mappings":";;AAGA,SAAS,oBAAoB,WAAmB,QAA4B;CAC1E,MAAM,mBAAmB;CACzB,MAAM,cAAc,OAAe,OACjC,kBAAkB,iBAAiB,2BAA2B,KAAK;AAErE,KACE,CAAC,OAAO,WAAW,GAAG,iBAAiB,KAAK,IAC5C,CAAC,OAAO,WAAW,GAAG,iBAAiB,MAAM,CAE7C,OAAM,IAAI,MACR,eAAe,UAAU,iBAAiB,iBAAiB,QAAQ,iBAAiB,YACrF;CAEH,IAAI;AACJ,KAAI;AACF,QAAM,IAAI,IAAI,OAAO;SACf;AACN,QAAM,IAAI,MACR,eAAe,UAAU,uBAAuB,YAAY,GAC7D;;CAGH,MAAM,YAAY,IAAI,UAAU;CAEhC,MAAM,iBAAiB,IAAI,SAAS,MAAM,IAAI;AAC9C,KAAI,eAAe,OAAO,GACxB,gBAAe,OAAO;AAExB,KAAI,eAAe,eAAe,SAAS,OAAO,GAChD,gBAAe,KAAK;AAEtB,KAAI,eAAe,SAAS,EAC1B,OAAM,IAAI,MACR,eAAe,UAAU,uCAAuC,WAC9D,OACD,GACF;AAGH,MAAK,MAAM,CAAC,UAAU,oBAAoB,CACxC,CAAC,UAAU,IAAI,EACf,CAAC,QAAQ,IAAI,CACd,CACC,KAAI,IAAI,aAAa,UAAU,SAAS,gBAAgB,CACtD,OAAM,IAAI,MACR,eAAe,UAAU,sBAAsB,SAAS,aAAa,YAAY,GAClF;AAIL,QAAO;;AAGT,SAAgB,UACd,QACmB;AAEnB,KAAI,CADO,iBAAiB,YAAY,EAC/B;AAEP,UAAQ,KACN,sEACD;AACD,SAAO;;AAET,KAAI,WAAW,KAAA,KAAa,WAAW,MAAM;AAE3C,UAAQ,KACN,+DACD;AACD,SAAO;;AAET,QAAO,oBAAoB,UAAU,OAAO"}
@@ -1,9 +1,27 @@
1
- const NewClientGroup = "NewClientGroup";
2
- const VersionNotSupported = "VersionNotSupported";
3
- const SchemaVersionNotSupported = "SchemaVersionNotSupported";
4
- export {
5
- NewClientGroup,
6
- SchemaVersionNotSupported,
7
- VersionNotSupported
8
- };
9
- //# sourceMappingURL=update-needed-reason-type-enum.js.map
1
+ import { __exportAll } from "../../../_virtual/_rolldown/runtime.js";
2
+ //#region ../zero-client/src/client/update-needed-reason-type-enum.ts
3
+ var update_needed_reason_type_enum_exports = /* @__PURE__ */ __exportAll({
4
+ NewClientGroup: () => NewClientGroup,
5
+ SchemaVersionNotSupported: () => SchemaVersionNotSupported,
6
+ VersionNotSupported: () => VersionNotSupported
7
+ });
8
+ /**
9
+ * There is a new client group due to a another tab loading new code which
10
+ * cannot sync locally with this tab until it updates to the new code. This tab
11
+ * can still sync with the zero-cache.
12
+ */
13
+ var NewClientGroup = "NewClientGroup";
14
+ /**
15
+ * This client was unable to connect to the zero-cache because it is using a
16
+ * protocol version that the zero-cache does not support.
17
+ */
18
+ var VersionNotSupported = "VersionNotSupported";
19
+ /**
20
+ * This client was unable to connect to the zero-cache because it is using a
21
+ * schema version (see {@codelink Schema}) that the zero-cache does not support.
22
+ */
23
+ var SchemaVersionNotSupported = "SchemaVersionNotSupported";
24
+ //#endregion
25
+ export { NewClientGroup, SchemaVersionNotSupported, VersionNotSupported, update_needed_reason_type_enum_exports };
26
+
27
+ //# sourceMappingURL=update-needed-reason-type-enum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-needed-reason-type-enum.js","sources":["../../../../../zero-client/src/client/update-needed-reason-type-enum.ts"],"sourcesContent":["/**\n * There is a new client group due to a another tab loading new code which\n * cannot sync locally with this tab until it updates to the new code. This tab\n * can still sync with the zero-cache.\n */\nexport const NewClientGroup = 'NewClientGroup';\nexport type NewClientGroup = typeof NewClientGroup;\n\n/**\n * This client was unable to connect to the zero-cache because it is using a\n * protocol version that the zero-cache does not support.\n */\nexport const VersionNotSupported = 'VersionNotSupported';\nexport type VersionNotSupported = typeof VersionNotSupported;\n\n/**\n * This client was unable to connect to the zero-cache because it is using a\n * schema version (see {@codelink Schema}) that the zero-cache does not support.\n */\nexport const SchemaVersionNotSupported = 'SchemaVersionNotSupported';\nexport type SchemaVersionNotSupported = typeof SchemaVersionNotSupported;\n"],"names":[],"mappings":"AAKO,MAAM,iBAAiB;AAOvB,MAAM,sBAAsB;AAO5B,MAAM,4BAA4B;"}
1
+ {"version":3,"file":"update-needed-reason-type-enum.js","names":[],"sources":["../../../../../zero-client/src/client/update-needed-reason-type-enum.ts"],"sourcesContent":["/**\n * There is a new client group due to a another tab loading new code which\n * cannot sync locally with this tab until it updates to the new code. This tab\n * can still sync with the zero-cache.\n */\nexport const NewClientGroup = 'NewClientGroup';\nexport type NewClientGroup = typeof NewClientGroup;\n\n/**\n * This client was unable to connect to the zero-cache because it is using a\n * protocol version that the zero-cache does not support.\n */\nexport const VersionNotSupported = 'VersionNotSupported';\nexport type VersionNotSupported = typeof VersionNotSupported;\n\n/**\n * This client was unable to connect to the zero-cache because it is using a\n * schema version (see {@codelink Schema}) that the zero-cache does not support.\n */\nexport const SchemaVersionNotSupported = 'SchemaVersionNotSupported';\nexport type SchemaVersionNotSupported = typeof SchemaVersionNotSupported;\n"],"mappings":";;;;;;;;;;;;AAKA,IAAa,iBAAiB;;;;;AAO9B,IAAa,sBAAsB;;;;;AAOnC,IAAa,4BAA4B"}
@@ -1,5 +1,9 @@
1
- const version = "0.26.1-canary.9";
2
- export {
3
- version
4
- };
5
- //# sourceMappingURL=version.js.map
1
+ //#region ../zero-client/src/client/version.ts
2
+ /**
3
+ * The current version of Zero.
4
+ */
5
+ var version = "0.26.2-canary.1";
6
+ //#endregion
7
+ export { version };
8
+
9
+ //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sources":["../../../../../zero-client/src/client/version.ts"],"sourcesContent":["// The env value should be filled in by esbuild.\n\ndeclare const process: {\n env: {\n ['ZERO_VERSION']?: string;\n };\n};\n\n/**\n * The current version of Zero.\n */\nexport const version = process.env.ZERO_VERSION ?? '0.0.0';\n"],"names":[],"mappings":"AAWO,MAAM,UAAU;"}
1
+ {"version":3,"file":"version.js","names":[],"sources":["../../../../../zero-client/src/client/version.ts"],"sourcesContent":["// The env value should be filled in by esbuild.\n\ndeclare const process: {\n env: {\n ['ZERO_VERSION']?: string;\n };\n};\n\n/**\n * The current version of Zero.\n */\nexport const version = process.env.ZERO_VERSION ?? '0.0.0';\n"],"mappings":";;;;AAWA,IAAa,UAAA"}
@@ -22,7 +22,7 @@ type PokeAccumulator = {
22
22
  */
23
23
  export declare class PokeHandler {
24
24
  #private;
25
- constructor(replicachePoke: (poke: PokeInternal) => Promise<void>, onPokeError: () => void, clientID: ClientID, schema: Schema, lc: LogContext, mutationTracker: MutationTracker);
25
+ constructor(replicachePoke: (poke: PokeInternal) => Promise<void>, onPokeError: (error: unknown) => void, clientID: ClientID, schema: Schema, lc: LogContext, mutationTracker: MutationTracker);
26
26
  handlePokeStart(pokeStart: PokeStartBody): void;
27
27
  handlePokePart(pokePart: PokePartBody): number | undefined;
28
28
  handlePokeEnd(pokeEnd: PokeEndBody): void;
@@ -1 +1 @@
1
- {"version":3,"file":"zero-poke-handler.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/zero-poke-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EACV,sBAAsB,EACtB,YAAY,EACb,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,qCAAqC,CAAC;AAGlE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,+CAA+C,CAAC;AACjF,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,aAAa,EACd,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAO9D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAE3D,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B,CAAC;AAEF;;;;;;;;GAQG;AACH,qBAAa,WAAW;;gBAiBpB,cAAc,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,EACrD,WAAW,EAAE,MAAM,IAAI,EACvB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,UAAU,EACd,eAAe,EAAE,eAAe;IAWlC,eAAe,CAAC,SAAS,EAAE,aAAa;IAiBxC,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS;IAa1D,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAoBzC,gBAAgB,IAAI,IAAI;CAmFzB;AAED,wBAAgB,UAAU,CACxB,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,UAAU,GAExB,CAAC,YAAY,GAAG;IAAC,eAAe,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,CAAA;CAAC,CAAC,GAChE,SAAS,CAmFZ;AAyBD,wBAAgB,kCAAkC,CAChD,EAAE,EAAE,aAAa,GAChB,sBAAsB,CAcxB"}
1
+ {"version":3,"file":"zero-poke-handler.d.ts","sourceRoot":"","sources":["../../../../../zero-client/src/client/zero-poke-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EACV,sBAAsB,EACtB,YAAY,EACb,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,qCAAqC,CAAC;AAGlE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,+CAA+C,CAAC;AACjF,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,aAAa,EACd,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAO9D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAE3D,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B,CAAC;AAEF;;;;;;;;GAQG;AACH,qBAAa,WAAW;;gBAiBpB,cAAc,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,EACrD,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,EACrC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,UAAU,EACd,eAAe,EAAE,eAAe;IAWlC,eAAe,CAAC,SAAS,EAAE,aAAa;IAiBxC,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS;IAa1D,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAoBzC,gBAAgB,IAAI,IAAI;CAmFzB;AAED,wBAAgB,UAAU,CACxB,UAAU,EAAE,eAAe,EAAE,EAC7B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,UAAU,GAExB,CAAC,YAAY,GAAG;IAAC,eAAe,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,CAAA;CAAC,CAAC,GAChE,SAAS,CAmFZ;AAyBD,wBAAgB,kCAAkC,CAChD,EAAE,EAAE,aAAa,GAChB,sBAAsB,CAcxB"}