@rocicorp/zero 0.26.1 → 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 (1086) 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 -283
  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.js +68 -103
  10. package/out/analyze-query/src/run-ast.js.map +1 -1
  11. package/out/ast-to-zql/src/ast-to-zql.js +105 -153
  12. package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
  13. package/out/ast-to-zql/src/bin.js +57 -62
  14. package/out/ast-to-zql/src/bin.js.map +1 -1
  15. package/out/ast-to-zql/src/format.js +14 -13
  16. package/out/ast-to-zql/src/format.js.map +1 -1
  17. package/out/datadog/src/datadog-log-sink.js +148 -213
  18. package/out/datadog/src/datadog-log-sink.js.map +1 -1
  19. package/out/otel/src/enabled.js +9 -11
  20. package/out/otel/src/enabled.js.map +1 -1
  21. package/out/otel/src/log-options.js +25 -35
  22. package/out/otel/src/log-options.js.map +1 -1
  23. package/out/otel/src/maybe-time.js +13 -14
  24. package/out/otel/src/maybe-time.js.map +1 -1
  25. package/out/otel/src/span.js +23 -26
  26. package/out/otel/src/span.js.map +1 -1
  27. package/out/otel/src/test-log-config.js +11 -10
  28. package/out/otel/src/test-log-config.js.map +1 -1
  29. package/out/otel/src/version.js +6 -5
  30. package/out/otel/src/version.js.map +1 -1
  31. package/out/replicache/src/async-iterable-to-array.js +8 -9
  32. package/out/replicache/src/async-iterable-to-array.js.map +1 -1
  33. package/out/replicache/src/bg-interval.js +28 -35
  34. package/out/replicache/src/bg-interval.js.map +1 -1
  35. package/out/replicache/src/btree/diff.js +6 -5
  36. package/out/replicache/src/btree/diff.js.map +1 -1
  37. package/out/replicache/src/btree/node.js +281 -372
  38. package/out/replicache/src/btree/node.js.map +1 -1
  39. package/out/replicache/src/btree/read.js +155 -256
  40. package/out/replicache/src/btree/read.js.map +1 -1
  41. package/out/replicache/src/btree/splice.js +60 -80
  42. package/out/replicache/src/btree/splice.js.map +1 -1
  43. package/out/replicache/src/btree/write.js +134 -158
  44. package/out/replicache/src/btree/write.js.map +1 -1
  45. package/out/replicache/src/call-default-fetch.js +28 -32
  46. package/out/replicache/src/call-default-fetch.js.map +1 -1
  47. package/out/replicache/src/config.js +2 -0
  48. package/out/replicache/src/connection-loop-delegates.js +31 -33
  49. package/out/replicache/src/connection-loop-delegates.js.map +1 -1
  50. package/out/replicache/src/connection-loop.js +174 -240
  51. package/out/replicache/src/connection-loop.js.map +1 -1
  52. package/out/replicache/src/cookies.js +22 -32
  53. package/out/replicache/src/cookies.js.map +1 -1
  54. package/out/replicache/src/dag/chunk.js +44 -50
  55. package/out/replicache/src/dag/chunk.js.map +1 -1
  56. package/out/replicache/src/dag/gc.js +94 -114
  57. package/out/replicache/src/dag/gc.js.map +1 -1
  58. package/out/replicache/src/dag/key.js +9 -11
  59. package/out/replicache/src/dag/key.js.map +1 -1
  60. package/out/replicache/src/dag/lazy-store.js +458 -510
  61. package/out/replicache/src/dag/lazy-store.js.map +1 -1
  62. package/out/replicache/src/dag/store-impl.js +147 -178
  63. package/out/replicache/src/dag/store-impl.js.map +1 -1
  64. package/out/replicache/src/dag/store.js +19 -22
  65. package/out/replicache/src/dag/store.js.map +1 -1
  66. package/out/replicache/src/dag/visitor.js +23 -21
  67. package/out/replicache/src/dag/visitor.js.map +1 -1
  68. package/out/replicache/src/db/commit.js +209 -283
  69. package/out/replicache/src/db/commit.js.map +1 -1
  70. package/out/replicache/src/db/index.js +79 -122
  71. package/out/replicache/src/db/index.js.map +1 -1
  72. package/out/replicache/src/db/read.js +44 -60
  73. package/out/replicache/src/db/read.js.map +1 -1
  74. package/out/replicache/src/db/rebase.js +22 -77
  75. package/out/replicache/src/db/rebase.js.map +1 -1
  76. package/out/replicache/src/db/write.js +162 -296
  77. package/out/replicache/src/db/write.js.map +1 -1
  78. package/out/replicache/src/deleted-clients.js +59 -87
  79. package/out/replicache/src/deleted-clients.js.map +1 -1
  80. package/out/replicache/src/error-responses.js +18 -26
  81. package/out/replicache/src/error-responses.js.map +1 -1
  82. package/out/replicache/src/expo-sqlite.js +2 -0
  83. package/out/replicache/src/frozen-json.js +74 -108
  84. package/out/replicache/src/frozen-json.js.map +1 -1
  85. package/out/replicache/src/get-default-puller.js +34 -46
  86. package/out/replicache/src/get-default-puller.js.map +1 -1
  87. package/out/replicache/src/get-default-pusher.js +25 -33
  88. package/out/replicache/src/get-default-pusher.js.map +1 -1
  89. package/out/replicache/src/get-kv-store-provider.js +18 -20
  90. package/out/replicache/src/get-kv-store-provider.js.map +1 -1
  91. package/out/replicache/src/hash.js +29 -29
  92. package/out/replicache/src/hash.js.map +1 -1
  93. package/out/replicache/src/http-request-info.js +9 -8
  94. package/out/replicache/src/http-request-info.js.map +1 -1
  95. package/out/replicache/src/impl.js +2 -0
  96. package/out/replicache/src/index-defs.js +17 -28
  97. package/out/replicache/src/index-defs.js.map +1 -1
  98. package/out/replicache/src/kv/expo-sqlite/store.js +52 -50
  99. package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
  100. package/out/replicache/src/kv/idb-store-with-mem-fallback.js +71 -68
  101. package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -1
  102. package/out/replicache/src/kv/idb-store.js +144 -168
  103. package/out/replicache/src/kv/idb-store.js.map +1 -1
  104. package/out/replicache/src/kv/mem-store.js +57 -45
  105. package/out/replicache/src/kv/mem-store.js.map +1 -1
  106. package/out/replicache/src/kv/op-sqlite/store.js +56 -62
  107. package/out/replicache/src/kv/op-sqlite/store.js.map +1 -1
  108. package/out/replicache/src/kv/op-sqlite/types.d.ts.map +1 -1
  109. package/out/replicache/src/kv/op-sqlite/types.js +7 -6
  110. package/out/replicache/src/kv/op-sqlite/types.js.map +1 -1
  111. package/out/replicache/src/kv/read-impl.js +26 -25
  112. package/out/replicache/src/kv/read-impl.js.map +1 -1
  113. package/out/replicache/src/kv/sqlite-store.js +194 -207
  114. package/out/replicache/src/kv/sqlite-store.js.map +1 -1
  115. package/out/replicache/src/kv/throw-if-closed.js +12 -19
  116. package/out/replicache/src/kv/throw-if-closed.js.map +1 -1
  117. package/out/replicache/src/kv/write-impl-base.js +44 -56
  118. package/out/replicache/src/kv/write-impl-base.js.map +1 -1
  119. package/out/replicache/src/kv/write-impl.js +22 -26
  120. package/out/replicache/src/kv/write-impl.js.map +1 -1
  121. package/out/replicache/src/lazy.js +10 -11
  122. package/out/replicache/src/lazy.js.map +1 -1
  123. package/out/replicache/src/log-options.js +14 -7
  124. package/out/replicache/src/log-options.js.map +1 -1
  125. package/out/replicache/src/make-idb-name.js +14 -9
  126. package/out/replicache/src/make-idb-name.js.map +1 -1
  127. package/out/replicache/src/mutation-recovery.js +12 -0
  128. package/out/replicache/src/mutation-recovery.js.map +1 -0
  129. package/out/replicache/src/new-client-channel.js +34 -42
  130. package/out/replicache/src/new-client-channel.js.map +1 -1
  131. package/out/replicache/src/on-persist-channel.js +26 -29
  132. package/out/replicache/src/on-persist-channel.js.map +1 -1
  133. package/out/replicache/src/op-sqlite.js +2 -0
  134. package/out/replicache/src/patch-operation.js +27 -36
  135. package/out/replicache/src/patch-operation.js.map +1 -1
  136. package/out/replicache/src/pending-mutations.js +14 -12
  137. package/out/replicache/src/pending-mutations.js.map +1 -1
  138. package/out/replicache/src/persist/client-gc.js +36 -51
  139. package/out/replicache/src/persist/client-gc.js.map +1 -1
  140. package/out/replicache/src/persist/client-group-gc.js +29 -36
  141. package/out/replicache/src/persist/client-group-gc.js.map +1 -1
  142. package/out/replicache/src/persist/client-groups.js +80 -154
  143. package/out/replicache/src/persist/client-groups.js.map +1 -1
  144. package/out/replicache/src/persist/clients.js +212 -307
  145. package/out/replicache/src/persist/clients.js.map +1 -1
  146. package/out/replicache/src/persist/collect-idb-databases.js +109 -171
  147. package/out/replicache/src/persist/collect-idb-databases.js.map +1 -1
  148. package/out/replicache/src/persist/gather-mem-only-visitor.js +23 -24
  149. package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -1
  150. package/out/replicache/src/persist/gather-not-cached-visitor.js +35 -33
  151. package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -1
  152. package/out/replicache/src/persist/heartbeat.js +31 -41
  153. package/out/replicache/src/persist/heartbeat.js.map +1 -1
  154. package/out/replicache/src/persist/idb-databases-store-db-name.js +9 -12
  155. package/out/replicache/src/persist/idb-databases-store-db-name.js.map +1 -1
  156. package/out/replicache/src/persist/idb-databases-store.js +78 -97
  157. package/out/replicache/src/persist/idb-databases-store.js.map +1 -1
  158. package/out/replicache/src/persist/make-client-id.js +13 -9
  159. package/out/replicache/src/persist/make-client-id.js.map +1 -1
  160. package/out/replicache/src/persist/persist.js +113 -174
  161. package/out/replicache/src/persist/persist.js.map +1 -1
  162. package/out/replicache/src/persist/refresh.js +94 -183
  163. package/out/replicache/src/persist/refresh.js.map +1 -1
  164. package/out/replicache/src/process-scheduler.js +122 -143
  165. package/out/replicache/src/process-scheduler.js.map +1 -1
  166. package/out/replicache/src/pusher.js +21 -26
  167. package/out/replicache/src/pusher.js.map +1 -1
  168. package/out/replicache/src/replicache-impl.js +844 -1184
  169. package/out/replicache/src/replicache-impl.js.map +1 -1
  170. package/out/replicache/src/report-error.js +9 -6
  171. package/out/replicache/src/report-error.js.map +1 -1
  172. package/out/replicache/src/request-idle.js +13 -11
  173. package/out/replicache/src/request-idle.js.map +1 -1
  174. package/out/replicache/src/scan-iterator.d.ts.map +1 -1
  175. package/out/replicache/src/scan-iterator.js +108 -135
  176. package/out/replicache/src/scan-iterator.js.map +1 -1
  177. package/out/replicache/src/scan-options.js +33 -39
  178. package/out/replicache/src/scan-options.js.map +1 -1
  179. package/out/replicache/src/set-interval-with-signal.js +11 -10
  180. package/out/replicache/src/set-interval-with-signal.js.map +1 -1
  181. package/out/replicache/src/sqlite.js +2 -0
  182. package/out/replicache/src/subscriptions.js +222 -338
  183. package/out/replicache/src/subscriptions.js.map +1 -1
  184. package/out/replicache/src/sync/diff.js +52 -65
  185. package/out/replicache/src/sync/diff.js.map +1 -1
  186. package/out/replicache/src/sync/ids.js +8 -9
  187. package/out/replicache/src/sync/ids.js.map +1 -1
  188. package/out/replicache/src/sync/patch.js +34 -45
  189. package/out/replicache/src/sync/patch.js.map +1 -1
  190. package/out/replicache/src/sync/pull-error.js +15 -15
  191. package/out/replicache/src/sync/pull-error.js.map +1 -1
  192. package/out/replicache/src/sync/pull.js +145 -283
  193. package/out/replicache/src/sync/pull.js.map +1 -1
  194. package/out/replicache/src/sync/push.js +64 -79
  195. package/out/replicache/src/sync/push.js.map +1 -1
  196. package/out/replicache/src/sync/request-id.js +23 -15
  197. package/out/replicache/src/sync/request-id.js.map +1 -1
  198. package/out/replicache/src/sync/sync-head-name.js +6 -5
  199. package/out/replicache/src/sync/sync-head-name.js.map +1 -1
  200. package/out/replicache/src/to-error.js +7 -8
  201. package/out/replicache/src/to-error.js.map +1 -1
  202. package/out/replicache/src/transaction-closed-error.js +15 -15
  203. package/out/replicache/src/transaction-closed-error.js.map +1 -1
  204. package/out/replicache/src/transactions.js +120 -140
  205. package/out/replicache/src/transactions.js.map +1 -1
  206. package/out/replicache/src/version.js +9 -5
  207. package/out/replicache/src/version.js.map +1 -1
  208. package/out/replicache/src/with-transactions.js +23 -20
  209. package/out/replicache/src/with-transactions.js.map +1 -1
  210. package/out/shared/src/abort-error.js +7 -6
  211. package/out/shared/src/abort-error.js.map +1 -1
  212. package/out/shared/src/arrays.js +35 -42
  213. package/out/shared/src/arrays.js.map +1 -1
  214. package/out/shared/src/asserts.js +21 -45
  215. package/out/shared/src/asserts.js.map +1 -1
  216. package/out/shared/src/bigint-json.js +42 -38
  217. package/out/shared/src/bigint-json.js.map +1 -1
  218. package/out/shared/src/binary-search.js +27 -18
  219. package/out/shared/src/binary-search.js.map +1 -1
  220. package/out/shared/src/broadcast-channel.js +20 -23
  221. package/out/shared/src/broadcast-channel.js.map +1 -1
  222. package/out/shared/src/browser-env.js +11 -17
  223. package/out/shared/src/browser-env.js.map +1 -1
  224. package/out/shared/src/btree-set.js +419 -481
  225. package/out/shared/src/btree-set.js.map +1 -1
  226. package/out/shared/src/cache.js +43 -36
  227. package/out/shared/src/cache.js.map +1 -1
  228. package/out/shared/src/centroid.js +24 -26
  229. package/out/shared/src/centroid.js.map +1 -1
  230. package/out/shared/src/config.js +6 -6
  231. package/out/shared/src/config.js.map +1 -1
  232. package/out/shared/src/custom-key-map.js +54 -58
  233. package/out/shared/src/custom-key-map.js.map +1 -1
  234. package/out/shared/src/custom-key-set.js +53 -51
  235. package/out/shared/src/custom-key-set.js.map +1 -1
  236. package/out/shared/src/deep-clone.js +30 -41
  237. package/out/shared/src/deep-clone.js.map +1 -1
  238. package/out/shared/src/deep-merge.js +25 -24
  239. package/out/shared/src/deep-merge.js.map +1 -1
  240. package/out/shared/src/document-visible.js +63 -70
  241. package/out/shared/src/document-visible.js.map +1 -1
  242. package/out/shared/src/dotenv.js +7 -3
  243. package/out/shared/src/dotenv.js.map +1 -1
  244. package/out/shared/src/error.js +43 -64
  245. package/out/shared/src/error.js.map +1 -1
  246. package/out/shared/src/has-own.js +6 -5
  247. package/out/shared/src/has-own.js.map +1 -1
  248. package/out/shared/src/hash.js +15 -14
  249. package/out/shared/src/hash.js.map +1 -1
  250. package/out/shared/src/iterables.js +34 -47
  251. package/out/shared/src/iterables.js.map +1 -1
  252. package/out/shared/src/json-schema.js +25 -30
  253. package/out/shared/src/json-schema.js.map +1 -1
  254. package/out/shared/src/json.js +90 -129
  255. package/out/shared/src/json.js.map +1 -1
  256. package/out/shared/src/logging-test-utils.js +9 -11
  257. package/out/shared/src/logging-test-utils.js.map +1 -1
  258. package/out/shared/src/logging.js +75 -95
  259. package/out/shared/src/logging.js.map +1 -1
  260. package/out/shared/src/must.js +7 -8
  261. package/out/shared/src/must.js.map +1 -1
  262. package/out/shared/src/navigator.js +6 -5
  263. package/out/shared/src/navigator.js.map +1 -1
  264. package/out/shared/src/object-traversal.js +23 -23
  265. package/out/shared/src/object-traversal.js.map +1 -1
  266. package/out/shared/src/objects.js +15 -18
  267. package/out/shared/src/objects.js.map +1 -1
  268. package/out/shared/src/options.js +225 -302
  269. package/out/shared/src/options.js.map +1 -1
  270. package/out/shared/src/parse-big-int.js +12 -11
  271. package/out/shared/src/parse-big-int.js.map +1 -1
  272. package/out/shared/src/promise-race.js +21 -17
  273. package/out/shared/src/promise-race.js.map +1 -1
  274. package/out/shared/src/queue.js +124 -124
  275. package/out/shared/src/queue.js.map +1 -1
  276. package/out/shared/src/rand.js +13 -7
  277. package/out/shared/src/rand.js.map +1 -1
  278. package/out/shared/src/random-uint64.js +8 -7
  279. package/out/shared/src/random-uint64.js.map +1 -1
  280. package/out/shared/src/random-values.js +8 -11
  281. package/out/shared/src/random-values.js.map +1 -1
  282. package/out/shared/src/record-proxy.js +68 -57
  283. package/out/shared/src/record-proxy.js.map +1 -1
  284. package/out/shared/src/resolved-promises.js +9 -11
  285. package/out/shared/src/resolved-promises.js.map +1 -1
  286. package/out/shared/src/sentinels.js +9 -12
  287. package/out/shared/src/sentinels.js.map +1 -1
  288. package/out/shared/src/set-utils.js +41 -63
  289. package/out/shared/src/set-utils.js.map +1 -1
  290. package/out/shared/src/size-of-value.js +55 -51
  291. package/out/shared/src/size-of-value.js.map +1 -1
  292. package/out/shared/src/sleep.js +50 -45
  293. package/out/shared/src/sleep.js.map +1 -1
  294. package/out/shared/src/string-compare.js +8 -11
  295. package/out/shared/src/string-compare.js.map +1 -1
  296. package/out/shared/src/subscribable.js +34 -33
  297. package/out/shared/src/subscribable.js.map +1 -1
  298. package/out/shared/src/tdigest-schema.js +11 -7
  299. package/out/shared/src/tdigest-schema.js.map +1 -1
  300. package/out/shared/src/tdigest.js +197 -270
  301. package/out/shared/src/tdigest.js.map +1 -1
  302. package/out/shared/src/valita.js +145 -174
  303. package/out/shared/src/valita.js.map +1 -1
  304. package/out/z2s/src/compiler.d.ts.map +1 -1
  305. package/out/z2s/src/compiler.js +238 -468
  306. package/out/z2s/src/compiler.js.map +1 -1
  307. package/out/z2s/src/sql.d.ts +0 -1
  308. package/out/z2s/src/sql.d.ts.map +1 -1
  309. package/out/z2s/src/sql.js +149 -194
  310. package/out/z2s/src/sql.js.map +1 -1
  311. package/out/zero/package.js +193 -0
  312. package/out/zero/package.js.map +1 -0
  313. package/out/zero/src/adapters/drizzle.js +1 -6
  314. package/out/zero/src/adapters/pg.js +1 -6
  315. package/out/zero/src/adapters/postgresjs.js +1 -6
  316. package/out/zero/src/adapters/prisma.js +1 -5
  317. package/out/zero/src/analyze-query.js +1 -1
  318. package/out/zero/src/ast-to-zql.js +1 -1
  319. package/out/zero/src/bindings.js +6 -21
  320. package/out/zero/src/build-schema.js +5 -1
  321. package/out/zero/src/build-schema.js.map +1 -1
  322. package/out/zero/src/change-protocol/v0.js +3 -5
  323. package/out/zero/src/cli.js +2 -2
  324. package/out/zero/src/deploy-permissions.js +1 -1
  325. package/out/zero/src/expo-sqlite.js +2 -4
  326. package/out/zero/src/op-sqlite.js +2 -4
  327. package/out/zero/src/pg.js +2 -20
  328. package/out/zero/src/react-native.js +16 -12
  329. package/out/zero/src/react-native.js.map +1 -1
  330. package/out/zero/src/react.js +3 -12
  331. package/out/zero/src/server/runner/main.js +2 -0
  332. package/out/zero/src/server.js +2 -17
  333. package/out/zero/src/solid.js +3 -12
  334. package/out/zero/src/sqlite.js +2 -6
  335. package/out/zero/src/transform-query.js +1 -1
  336. package/out/zero/src/zero-cache-dev.js +124 -151
  337. package/out/zero/src/zero-cache-dev.js.map +1 -1
  338. package/out/zero/src/zero-out.js +9 -6
  339. package/out/zero/src/zero-out.js.map +1 -1
  340. package/out/zero/src/zero.js +6 -55
  341. package/out/zero/src/zqlite.js +2 -7
  342. package/out/zero-cache/src/auth/auth.js +138 -172
  343. package/out/zero-cache/src/auth/auth.js.map +1 -1
  344. package/out/zero-cache/src/auth/jwt.js +25 -33
  345. package/out/zero-cache/src/auth/jwt.js.map +1 -1
  346. package/out/zero-cache/src/auth/load-permissions.js +54 -62
  347. package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
  348. package/out/zero-cache/src/auth/read-authorizer.js +70 -80
  349. package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
  350. package/out/zero-cache/src/auth/write-authorizer.js +284 -432
  351. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  352. package/out/zero-cache/src/config/network.js +31 -45
  353. package/out/zero-cache/src/config/network.js.map +1 -1
  354. package/out/zero-cache/src/config/normalize.js +81 -83
  355. package/out/zero-cache/src/config/normalize.js.map +1 -1
  356. package/out/zero-cache/src/config/server-context.js +32 -29
  357. package/out/zero-cache/src/config/server-context.js.map +1 -1
  358. package/out/zero-cache/src/config/zero-config.js +753 -833
  359. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  360. package/out/zero-cache/src/custom/fetch.js +183 -230
  361. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  362. package/out/zero-cache/src/custom-queries/transform-query.js +93 -99
  363. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  364. package/out/zero-cache/src/db/create.js +27 -29
  365. package/out/zero-cache/src/db/create.js.map +1 -1
  366. package/out/zero-cache/src/db/delete-lite-db.js +11 -7
  367. package/out/zero-cache/src/db/delete-lite-db.js.map +1 -1
  368. package/out/zero-cache/src/db/lite-tables.js +118 -158
  369. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  370. package/out/zero-cache/src/db/migration-lite.js +110 -178
  371. package/out/zero-cache/src/db/migration-lite.js.map +1 -1
  372. package/out/zero-cache/src/db/migration.js +82 -151
  373. package/out/zero-cache/src/db/migration.js.map +1 -1
  374. package/out/zero-cache/src/db/mode-enum.js +8 -9
  375. package/out/zero-cache/src/db/mode-enum.js.map +1 -1
  376. package/out/zero-cache/src/db/pg-copy.js +56 -54
  377. package/out/zero-cache/src/db/pg-copy.js.map +1 -1
  378. package/out/zero-cache/src/db/pg-to-lite.js +74 -110
  379. package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
  380. package/out/zero-cache/src/db/pg-type-parser.js +19 -36
  381. package/out/zero-cache/src/db/pg-type-parser.js.map +1 -1
  382. package/out/zero-cache/src/db/run-transaction.js +19 -20
  383. package/out/zero-cache/src/db/run-transaction.js.map +1 -1
  384. package/out/zero-cache/src/db/specs.js +42 -78
  385. package/out/zero-cache/src/db/specs.js.map +1 -1
  386. package/out/zero-cache/src/db/statements.js +52 -59
  387. package/out/zero-cache/src/db/statements.js.map +1 -1
  388. package/out/zero-cache/src/db/transaction-pool.js +376 -400
  389. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  390. package/out/zero-cache/src/db/warmup.js +13 -24
  391. package/out/zero-cache/src/db/warmup.js.map +1 -1
  392. package/out/zero-cache/src/observability/events.js +89 -99
  393. package/out/zero-cache/src/observability/events.js.map +1 -1
  394. package/out/zero-cache/src/observability/metrics.js +30 -54
  395. package/out/zero-cache/src/observability/metrics.js.map +1 -1
  396. package/out/zero-cache/src/scripts/decommission.js +42 -47
  397. package/out/zero-cache/src/scripts/decommission.js.map +1 -1
  398. package/out/zero-cache/src/scripts/deploy-permissions.js +106 -144
  399. package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
  400. package/out/zero-cache/src/scripts/permissions.js +86 -107
  401. package/out/zero-cache/src/scripts/permissions.js.map +1 -1
  402. package/out/zero-cache/src/server/anonymous-otel-start.js +306 -440
  403. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
  404. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  405. package/out/zero-cache/src/server/change-streamer.js +57 -130
  406. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  407. package/out/zero-cache/src/server/inspector-delegate.js +89 -100
  408. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  409. package/out/zero-cache/src/server/logging.js +18 -26
  410. package/out/zero-cache/src/server/logging.js.map +1 -1
  411. package/out/zero-cache/src/server/main.js +85 -142
  412. package/out/zero-cache/src/server/main.js.map +1 -1
  413. package/out/zero-cache/src/server/mutator.js +16 -13
  414. package/out/zero-cache/src/server/mutator.js.map +1 -1
  415. package/out/zero-cache/src/server/otel-diag-logger.js +42 -49
  416. package/out/zero-cache/src/server/otel-diag-logger.js.map +1 -1
  417. package/out/zero-cache/src/server/otel-log-sink.js +34 -44
  418. package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
  419. package/out/zero-cache/src/server/otel-start.js +43 -51
  420. package/out/zero-cache/src/server/otel-start.js.map +1 -1
  421. package/out/zero-cache/src/server/priority-op.js +27 -25
  422. package/out/zero-cache/src/server/priority-op.js.map +1 -1
  423. package/out/zero-cache/src/server/reaper.js +32 -43
  424. package/out/zero-cache/src/server/reaper.js.map +1 -1
  425. package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
  426. package/out/zero-cache/src/server/replicator.js +41 -57
  427. package/out/zero-cache/src/server/replicator.js.map +1 -1
  428. package/out/zero-cache/src/server/runner/main.js +7 -8
  429. package/out/zero-cache/src/server/runner/main.js.map +1 -1
  430. package/out/zero-cache/src/server/runner/run-worker.js +56 -52
  431. package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
  432. package/out/zero-cache/src/server/runner/runtime.js +26 -32
  433. package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
  434. package/out/zero-cache/src/server/runner/zero-dispatcher.js +22 -27
  435. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  436. package/out/zero-cache/src/server/syncer.js +79 -148
  437. package/out/zero-cache/src/server/syncer.js.map +1 -1
  438. package/out/zero-cache/src/server/worker-dispatcher.js +84 -113
  439. package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
  440. package/out/zero-cache/src/server/worker-urls.d.ts +2 -1
  441. package/out/zero-cache/src/server/worker-urls.d.ts.map +1 -1
  442. package/out/zero-cache/src/server/worker-urls.js +14 -18
  443. package/out/zero-cache/src/server/worker-urls.js.map +1 -1
  444. package/out/zero-cache/src/server/write-worker.js +2 -0
  445. package/out/zero-cache/src/services/analyze.js +61 -130
  446. package/out/zero-cache/src/services/analyze.js.map +1 -1
  447. package/out/zero-cache/src/services/change-source/common/backfill-manager.js +420 -419
  448. package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
  449. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js +111 -114
  450. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -1
  451. package/out/zero-cache/src/services/change-source/common/replica-schema.js +80 -148
  452. package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
  453. package/out/zero-cache/src/services/change-source/custom/change-source.js +154 -216
  454. package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
  455. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js +11 -14
  456. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +1 -1
  457. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +168 -212
  458. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
  459. package/out/zero-cache/src/services/change-source/pg/change-source.js +672 -892
  460. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  461. package/out/zero-cache/src/services/change-source/pg/decommission.js +19 -23
  462. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
  463. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +258 -411
  464. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  465. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js +59 -65
  466. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
  467. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js +218 -247
  468. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
  469. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +100 -142
  470. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
  471. package/out/zero-cache/src/services/change-source/pg/lsn.js +17 -19
  472. package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
  473. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +88 -98
  474. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  475. package/out/zero-cache/src/services/change-source/pg/schema/init.js +96 -177
  476. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  477. package/out/zero-cache/src/services/change-source/pg/schema/published.js +69 -107
  478. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
  479. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +151 -212
  480. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  481. package/out/zero-cache/src/services/change-source/pg/schema/validation.js +22 -53
  482. package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
  483. package/out/zero-cache/src/services/change-source/protocol/current/control.js +24 -12
  484. package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
  485. package/out/zero-cache/src/services/change-source/protocol/current/data.js +180 -290
  486. package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
  487. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js +21 -33
  488. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
  489. package/out/zero-cache/src/services/change-source/protocol/current/json.js +7 -18
  490. package/out/zero-cache/src/services/change-source/protocol/current/json.js.map +1 -1
  491. package/out/zero-cache/src/services/change-source/protocol/current/path.js +24 -5
  492. package/out/zero-cache/src/services/change-source/protocol/current/path.js.map +1 -1
  493. package/out/zero-cache/src/services/change-source/protocol/current/status.js +25 -19
  494. package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
  495. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js +24 -16
  496. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
  497. package/out/zero-cache/src/services/change-source/protocol/current.js +51 -46
  498. package/out/zero-cache/src/services/change-source/protocol/current.js.map +1 -1
  499. package/out/zero-cache/src/services/change-source/protocol/mod.js +2 -0
  500. package/out/zero-cache/src/services/change-streamer/backup-monitor.js +165 -171
  501. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  502. package/out/zero-cache/src/services/change-streamer/broadcast.js +163 -169
  503. package/out/zero-cache/src/services/change-streamer/broadcast.js.map +1 -1
  504. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +154 -221
  505. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  506. package/out/zero-cache/src/services/change-streamer/change-streamer-service.d.ts.map +1 -1
  507. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +340 -299
  508. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  509. package/out/zero-cache/src/services/change-streamer/change-streamer.js +17 -24
  510. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  511. package/out/zero-cache/src/services/change-streamer/forwarder.js +84 -103
  512. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  513. package/out/zero-cache/src/services/change-streamer/replica-monitor.js +49 -43
  514. package/out/zero-cache/src/services/change-streamer/replica-monitor.js.map +1 -1
  515. package/out/zero-cache/src/services/change-streamer/schema/init.js +61 -89
  516. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  517. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts +20 -1
  518. package/out/zero-cache/src/services/change-streamer/schema/tables.d.ts.map +1 -1
  519. package/out/zero-cache/src/services/change-streamer/schema/tables.js +131 -109
  520. package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
  521. package/out/zero-cache/src/services/change-streamer/snapshot.js +26 -28
  522. package/out/zero-cache/src/services/change-streamer/snapshot.js.map +1 -1
  523. package/out/zero-cache/src/services/change-streamer/storer.js +434 -513
  524. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  525. package/out/zero-cache/src/services/change-streamer/subscriber.js +142 -155
  526. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  527. package/out/zero-cache/src/services/heapz.js +18 -20
  528. package/out/zero-cache/src/services/heapz.js.map +1 -1
  529. package/out/zero-cache/src/services/http-service.js +59 -57
  530. package/out/zero-cache/src/services/http-service.js.map +1 -1
  531. package/out/zero-cache/src/services/life-cycle.js +182 -214
  532. package/out/zero-cache/src/services/life-cycle.js.map +1 -1
  533. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +102 -81
  534. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
  535. package/out/zero-cache/src/services/litestream/commands.js +144 -205
  536. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  537. package/out/zero-cache/src/services/mutagen/error.js +10 -14
  538. package/out/zero-cache/src/services/mutagen/error.js.map +1 -1
  539. package/out/zero-cache/src/services/mutagen/mutagen.js +166 -264
  540. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  541. package/out/zero-cache/src/services/mutagen/pusher.js +372 -487
  542. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  543. package/out/zero-cache/src/services/replicator/change-processor.js +483 -592
  544. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  545. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts +4 -2
  546. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  547. package/out/zero-cache/src/services/replicator/incremental-sync.js +118 -143
  548. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  549. package/out/zero-cache/src/services/replicator/notifier.js +52 -28
  550. package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
  551. package/out/zero-cache/src/services/replicator/replication-status.js +105 -128
  552. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  553. package/out/zero-cache/src/services/replicator/replicator.d.ts +2 -1
  554. package/out/zero-cache/src/services/replicator/replicator.d.ts.map +1 -1
  555. package/out/zero-cache/src/services/replicator/replicator.js +32 -34
  556. package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
  557. package/out/zero-cache/src/services/replicator/schema/change-log.js +101 -133
  558. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  559. package/out/zero-cache/src/services/replicator/schema/column-metadata.js +145 -174
  560. package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -1
  561. package/out/zero-cache/src/services/replicator/schema/constants.js +11 -5
  562. package/out/zero-cache/src/services/replicator/schema/constants.js.map +1 -1
  563. package/out/zero-cache/src/services/replicator/schema/replication-state.js +56 -107
  564. package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
  565. package/out/zero-cache/src/services/replicator/schema/table-metadata.js +81 -66
  566. package/out/zero-cache/src/services/replicator/schema/table-metadata.js.map +1 -1
  567. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts +69 -0
  568. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts.map +1 -0
  569. package/out/zero-cache/src/services/replicator/write-worker-client.js +96 -0
  570. package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -0
  571. package/out/zero-cache/src/services/replicator/write-worker.js +68 -0
  572. package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -0
  573. package/out/zero-cache/src/services/run-ast.js +79 -120
  574. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  575. package/out/zero-cache/src/services/runner.js +39 -41
  576. package/out/zero-cache/src/services/runner.js.map +1 -1
  577. package/out/zero-cache/src/services/running-state.js +129 -134
  578. package/out/zero-cache/src/services/running-state.js.map +1 -1
  579. package/out/zero-cache/src/services/statz.js +139 -200
  580. package/out/zero-cache/src/services/statz.js.map +1 -1
  581. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +46 -49
  582. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
  583. package/out/zero-cache/src/services/view-syncer/client-handler.js +257 -299
  584. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  585. package/out/zero-cache/src/services/view-syncer/client-schema.js +52 -82
  586. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  587. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +85 -107
  588. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
  589. package/out/zero-cache/src/services/view-syncer/cvr-store.js +604 -757
  590. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  591. package/out/zero-cache/src/services/view-syncer/cvr.js +631 -739
  592. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  593. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +60 -40
  594. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  595. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +95 -178
  596. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  597. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  598. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +572 -722
  599. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  600. package/out/zero-cache/src/services/view-syncer/row-record-cache.d.ts.map +1 -1
  601. package/out/zero-cache/src/services/view-syncer/row-record-cache.js +246 -257
  602. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  603. package/out/zero-cache/src/services/view-syncer/schema/cvr.js +59 -45
  604. package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
  605. package/out/zero-cache/src/services/view-syncer/schema/init.js +121 -189
  606. package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
  607. package/out/zero-cache/src/services/view-syncer/schema/types.js +138 -263
  608. package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
  609. package/out/zero-cache/src/services/view-syncer/snapshotter.js +322 -335
  610. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  611. package/out/zero-cache/src/services/view-syncer/tracer.js +7 -6
  612. package/out/zero-cache/src/services/view-syncer/tracer.js.map +1 -1
  613. package/out/zero-cache/src/services/view-syncer/ttl-clock.js +9 -11
  614. package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
  615. package/out/zero-cache/src/services/view-syncer/view-syncer.js +1067 -1603
  616. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  617. package/out/zero-cache/src/types/error-with-level.js +19 -25
  618. package/out/zero-cache/src/types/error-with-level.js.map +1 -1
  619. package/out/zero-cache/src/types/http.js +17 -26
  620. package/out/zero-cache/src/types/http.js.map +1 -1
  621. package/out/zero-cache/src/types/lexi-version.js +28 -42
  622. package/out/zero-cache/src/types/lexi-version.js.map +1 -1
  623. package/out/zero-cache/src/types/lite.js +101 -121
  624. package/out/zero-cache/src/types/lite.js.map +1 -1
  625. package/out/zero-cache/src/types/names.js +6 -5
  626. package/out/zero-cache/src/types/names.js.map +1 -1
  627. package/out/zero-cache/src/types/pg-data-type.d.ts +1 -0
  628. package/out/zero-cache/src/types/pg-data-type.d.ts.map +1 -1
  629. package/out/zero-cache/src/types/pg-data-type.js +58 -73
  630. package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
  631. package/out/zero-cache/src/types/pg-types.js +12 -19
  632. package/out/zero-cache/src/types/pg-types.js.map +1 -1
  633. package/out/zero-cache/src/types/pg.js +144 -218
  634. package/out/zero-cache/src/types/pg.js.map +1 -1
  635. package/out/zero-cache/src/types/processes.js +95 -90
  636. package/out/zero-cache/src/types/processes.js.map +1 -1
  637. package/out/zero-cache/src/types/profiler.js +32 -27
  638. package/out/zero-cache/src/types/profiler.js.map +1 -1
  639. package/out/zero-cache/src/types/row-key.js +42 -30
  640. package/out/zero-cache/src/types/row-key.js.map +1 -1
  641. package/out/zero-cache/src/types/shards.js +36 -45
  642. package/out/zero-cache/src/types/shards.js.map +1 -1
  643. package/out/zero-cache/src/types/sql.js +20 -9
  644. package/out/zero-cache/src/types/sql.js.map +1 -1
  645. package/out/zero-cache/src/types/state-version.js +17 -23
  646. package/out/zero-cache/src/types/state-version.js.map +1 -1
  647. package/out/zero-cache/src/types/streams.js +234 -270
  648. package/out/zero-cache/src/types/streams.js.map +1 -1
  649. package/out/zero-cache/src/types/strings.js +10 -13
  650. package/out/zero-cache/src/types/strings.js.map +1 -1
  651. package/out/zero-cache/src/types/subscription.js +266 -226
  652. package/out/zero-cache/src/types/subscription.js.map +1 -1
  653. package/out/zero-cache/src/types/url-params.js +30 -39
  654. package/out/zero-cache/src/types/url-params.js.map +1 -1
  655. package/out/zero-cache/src/types/websocket-handoff.js +62 -75
  656. package/out/zero-cache/src/types/websocket-handoff.js.map +1 -1
  657. package/out/zero-cache/src/types/ws.js +43 -53
  658. package/out/zero-cache/src/types/ws.js.map +1 -1
  659. package/out/zero-cache/src/workers/connect-params.js +42 -43
  660. package/out/zero-cache/src/workers/connect-params.js.map +1 -1
  661. package/out/zero-cache/src/workers/connection.js +213 -282
  662. package/out/zero-cache/src/workers/connection.js.map +1 -1
  663. package/out/zero-cache/src/workers/mutator.js +22 -21
  664. package/out/zero-cache/src/workers/mutator.js.map +1 -1
  665. package/out/zero-cache/src/workers/replicator.d.ts +7 -0
  666. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  667. package/out/zero-cache/src/workers/replicator.js +92 -97
  668. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  669. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +121 -203
  670. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  671. package/out/zero-cache/src/workers/syncer.js +147 -201
  672. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  673. package/out/zero-client/src/client/active-clients-manager.js +178 -187
  674. package/out/zero-client/src/client/active-clients-manager.js.map +1 -1
  675. package/out/zero-client/src/client/bindings.js +11 -0
  676. package/out/zero-client/src/client/client-error-kind-enum.js +18 -29
  677. package/out/zero-client/src/client/client-error-kind-enum.js.map +1 -1
  678. package/out/zero-client/src/client/connection-manager.js +291 -346
  679. package/out/zero-client/src/client/connection-manager.js.map +1 -1
  680. package/out/zero-client/src/client/connection-status-enum.js +20 -15
  681. package/out/zero-client/src/client/connection-status-enum.js.map +1 -1
  682. package/out/zero-client/src/client/connection.js +92 -110
  683. package/out/zero-client/src/client/connection.js.map +1 -1
  684. package/out/zero-client/src/client/context.js +84 -100
  685. package/out/zero-client/src/client/context.js.map +1 -1
  686. package/out/zero-client/src/client/crud-impl.js +56 -88
  687. package/out/zero-client/src/client/crud-impl.js.map +1 -1
  688. package/out/zero-client/src/client/crud.js +127 -129
  689. package/out/zero-client/src/client/crud.js.map +1 -1
  690. package/out/zero-client/src/client/custom.d.ts.map +1 -1
  691. package/out/zero-client/src/client/custom.js +50 -74
  692. package/out/zero-client/src/client/custom.js.map +1 -1
  693. package/out/zero-client/src/client/delete-clients-manager.js +72 -93
  694. package/out/zero-client/src/client/delete-clients-manager.js.map +1 -1
  695. package/out/zero-client/src/client/enable-analytics.js +8 -16
  696. package/out/zero-client/src/client/enable-analytics.js.map +1 -1
  697. package/out/zero-client/src/client/error.js +118 -133
  698. package/out/zero-client/src/client/error.js.map +1 -1
  699. package/out/zero-client/src/client/http-string.js +7 -7
  700. package/out/zero-client/src/client/http-string.js.map +1 -1
  701. package/out/zero-client/src/client/inspector/client-group.js +21 -26
  702. package/out/zero-client/src/client/inspector/client-group.js.map +1 -1
  703. package/out/zero-client/src/client/inspector/client.js +23 -26
  704. package/out/zero-client/src/client/inspector/client.js.map +1 -1
  705. package/out/zero-client/src/client/inspector/html-dialog-prompt.js +72 -73
  706. package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -1
  707. package/out/zero-client/src/client/inspector/inspector.js +46 -51
  708. package/out/zero-client/src/client/inspector/inspector.js.map +1 -1
  709. package/out/zero-client/src/client/inspector/lazy-inspector.js +132 -192
  710. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -1
  711. package/out/zero-client/src/client/inspector/query.js +72 -77
  712. package/out/zero-client/src/client/inspector/query.js.map +1 -1
  713. package/out/zero-client/src/client/ivm-branch.js +118 -145
  714. package/out/zero-client/src/client/ivm-branch.js.map +1 -1
  715. package/out/zero-client/src/client/keys.js +15 -31
  716. package/out/zero-client/src/client/keys.js.map +1 -1
  717. package/out/zero-client/src/client/log-options.js +43 -57
  718. package/out/zero-client/src/client/log-options.js.map +1 -1
  719. package/out/zero-client/src/client/make-mutate-property.js +46 -29
  720. package/out/zero-client/src/client/make-mutate-property.js.map +1 -1
  721. package/out/zero-client/src/client/make-replicache-mutators.js +80 -96
  722. package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
  723. package/out/zero-client/src/client/metric-name-enum.js +11 -15
  724. package/out/zero-client/src/client/metric-name-enum.js.map +1 -1
  725. package/out/zero-client/src/client/metrics.js +210 -237
  726. package/out/zero-client/src/client/metrics.js.map +1 -1
  727. package/out/zero-client/src/client/mutation-tracker.js +264 -354
  728. package/out/zero-client/src/client/mutation-tracker.js.map +1 -1
  729. package/out/zero-client/src/client/mutator-proxy.js +122 -151
  730. package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
  731. package/out/zero-client/src/client/options.js +7 -10
  732. package/out/zero-client/src/client/options.js.map +1 -1
  733. package/out/zero-client/src/client/query-manager.js +305 -373
  734. package/out/zero-client/src/client/query-manager.js.map +1 -1
  735. package/out/zero-client/src/client/reload-error-handler.js +80 -101
  736. package/out/zero-client/src/client/reload-error-handler.js.map +1 -1
  737. package/out/zero-client/src/client/server-option.js +30 -59
  738. package/out/zero-client/src/client/server-option.js.map +1 -1
  739. package/out/zero-client/src/client/update-needed-reason-type-enum.js +27 -9
  740. package/out/zero-client/src/client/update-needed-reason-type-enum.js.map +1 -1
  741. package/out/zero-client/src/client/version.js +9 -5
  742. package/out/zero-client/src/client/version.js.map +1 -1
  743. package/out/zero-client/src/client/zero-poke-handler.d.ts +1 -1
  744. package/out/zero-client/src/client/zero-poke-handler.d.ts.map +1 -1
  745. package/out/zero-client/src/client/zero-poke-handler.js +205 -293
  746. package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
  747. package/out/zero-client/src/client/zero-rep.js +61 -68
  748. package/out/zero-client/src/client/zero-rep.js.map +1 -1
  749. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  750. package/out/zero-client/src/client/zero.js +1367 -1834
  751. package/out/zero-client/src/client/zero.js.map +1 -1
  752. package/out/zero-client/src/mod.js +21 -0
  753. package/out/zero-client/src/util/nanoid.js +13 -18
  754. package/out/zero-client/src/util/nanoid.js.map +1 -1
  755. package/out/zero-client/src/util/socket.js +6 -5
  756. package/out/zero-client/src/util/socket.js.map +1 -1
  757. package/out/zero-pg/src/mod.js +10 -0
  758. package/out/zero-protocol/src/analyze-query-result.js +108 -148
  759. package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
  760. package/out/zero-protocol/src/application-error.js +36 -34
  761. package/out/zero-protocol/src/application-error.js.map +1 -1
  762. package/out/zero-protocol/src/ast.js +236 -309
  763. package/out/zero-protocol/src/ast.js.map +1 -1
  764. package/out/zero-protocol/src/change-desired-queries.js +8 -13
  765. package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
  766. package/out/zero-protocol/src/client-schema.js +21 -42
  767. package/out/zero-protocol/src/client-schema.js.map +1 -1
  768. package/out/zero-protocol/src/close-connection.js +20 -12
  769. package/out/zero-protocol/src/close-connection.js.map +1 -1
  770. package/out/zero-protocol/src/connect.js +37 -52
  771. package/out/zero-protocol/src/connect.js.map +1 -1
  772. package/out/zero-protocol/src/custom-queries.js +34 -65
  773. package/out/zero-protocol/src/custom-queries.js.map +1 -1
  774. package/out/zero-protocol/src/data.js +6 -9
  775. package/out/zero-protocol/src/data.js.map +1 -1
  776. package/out/zero-protocol/src/delete-clients.js +11 -17
  777. package/out/zero-protocol/src/delete-clients.js.map +1 -1
  778. package/out/zero-protocol/src/down.js +11 -23
  779. package/out/zero-protocol/src/down.js.map +1 -1
  780. package/out/zero-protocol/src/error-kind-enum.js +24 -41
  781. package/out/zero-protocol/src/error-kind-enum.js.map +1 -1
  782. package/out/zero-protocol/src/error-origin-enum.js +8 -9
  783. package/out/zero-protocol/src/error-origin-enum.js.map +1 -1
  784. package/out/zero-protocol/src/error-reason-enum.js +12 -17
  785. package/out/zero-protocol/src/error-reason-enum.js.map +1 -1
  786. package/out/zero-protocol/src/error.js +76 -152
  787. package/out/zero-protocol/src/error.js.map +1 -1
  788. package/out/zero-protocol/src/inspect-down.js +51 -74
  789. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  790. package/out/zero-protocol/src/inspect-up.js +28 -46
  791. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  792. package/out/zero-protocol/src/mutation-id.js +9 -9
  793. package/out/zero-protocol/src/mutation-id.js.map +1 -1
  794. package/out/zero-protocol/src/mutation-type-enum.js +7 -7
  795. package/out/zero-protocol/src/mutation-type-enum.js.map +1 -1
  796. package/out/zero-protocol/src/mutations-patch.js +21 -16
  797. package/out/zero-protocol/src/mutations-patch.js.map +1 -1
  798. package/out/zero-protocol/src/ping.js +8 -9
  799. package/out/zero-protocol/src/ping.js.map +1 -1
  800. package/out/zero-protocol/src/poke.js +53 -59
  801. package/out/zero-protocol/src/poke.js.map +1 -1
  802. package/out/zero-protocol/src/pong.js +8 -9
  803. package/out/zero-protocol/src/pong.js.map +1 -1
  804. package/out/zero-protocol/src/primary-key.js +9 -19
  805. package/out/zero-protocol/src/primary-key.js.map +1 -1
  806. package/out/zero-protocol/src/protocol-version.js +5 -11
  807. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  808. package/out/zero-protocol/src/pull.js +16 -28
  809. package/out/zero-protocol/src/pull.js.map +1 -1
  810. package/out/zero-protocol/src/push.js +162 -209
  811. package/out/zero-protocol/src/push.js.map +1 -1
  812. package/out/zero-protocol/src/queries-patch.js +22 -30
  813. package/out/zero-protocol/src/queries-patch.js.map +1 -1
  814. package/out/zero-protocol/src/query-hash.js +14 -17
  815. package/out/zero-protocol/src/query-hash.js.map +1 -1
  816. package/out/zero-protocol/src/row-patch.js +23 -30
  817. package/out/zero-protocol/src/row-patch.js.map +1 -1
  818. package/out/zero-protocol/src/up.js +11 -22
  819. package/out/zero-protocol/src/up.js.map +1 -1
  820. package/out/zero-protocol/src/update-auth.js +8 -13
  821. package/out/zero-protocol/src/update-auth.js.map +1 -1
  822. package/out/zero-protocol/src/version.js +8 -9
  823. package/out/zero-protocol/src/version.js.map +1 -1
  824. package/out/zero-react/src/bindings.js +12 -0
  825. package/out/zero-react/src/mod.js +5 -0
  826. package/out/zero-react/src/use-connection-state.js +14 -11
  827. package/out/zero-react/src/use-connection-state.js.map +1 -1
  828. package/out/zero-react/src/use-query.js +283 -281
  829. package/out/zero-react/src/use-query.js.map +1 -1
  830. package/out/zero-react/src/use-zero-online.js +17 -11
  831. package/out/zero-react/src/use-zero-online.js.map +1 -1
  832. package/out/zero-react/src/zero-provider.js +53 -69
  833. package/out/zero-react/src/zero-provider.js.map +1 -1
  834. package/out/zero-react/src/zero.js +22 -0
  835. package/out/zero-schema/src/builder/relationship-builder.js +25 -21
  836. package/out/zero-schema/src/builder/relationship-builder.js.map +1 -1
  837. package/out/zero-schema/src/builder/schema-builder.js +51 -79
  838. package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
  839. package/out/zero-schema/src/builder/table-builder.js +99 -116
  840. package/out/zero-schema/src/builder/table-builder.js.map +1 -1
  841. package/out/zero-schema/src/compiled-permissions.js +21 -25
  842. package/out/zero-schema/src/compiled-permissions.js.map +1 -1
  843. package/out/zero-schema/src/name-mapper.js +31 -47
  844. package/out/zero-schema/src/name-mapper.js.map +1 -1
  845. package/out/zero-schema/src/permissions.js +94 -181
  846. package/out/zero-schema/src/permissions.js.map +1 -1
  847. package/out/zero-schema/src/schema-config.js +26 -32
  848. package/out/zero-schema/src/schema-config.js.map +1 -1
  849. package/out/zero-server/src/adapters/drizzle.d.ts.map +1 -1
  850. package/out/zero-server/src/adapters/drizzle.js +79 -76
  851. package/out/zero-server/src/adapters/drizzle.js.map +1 -1
  852. package/out/zero-server/src/adapters/pg.d.ts.map +1 -1
  853. package/out/zero-server/src/adapters/pg.js +79 -55
  854. package/out/zero-server/src/adapters/pg.js.map +1 -1
  855. package/out/zero-server/src/adapters/postgresjs.d.ts.map +1 -1
  856. package/out/zero-server/src/adapters/postgresjs.js +66 -40
  857. package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
  858. package/out/zero-server/src/adapters/prisma.d.ts.map +1 -1
  859. package/out/zero-server/src/adapters/prisma.js +75 -55
  860. package/out/zero-server/src/adapters/prisma.js.map +1 -1
  861. package/out/zero-server/src/custom.d.ts.map +1 -1
  862. package/out/zero-server/src/custom.js +188 -265
  863. package/out/zero-server/src/custom.js.map +1 -1
  864. package/out/zero-server/src/logging.js +6 -5
  865. package/out/zero-server/src/logging.js.map +1 -1
  866. package/out/zero-server/src/mod.js +8 -0
  867. package/out/zero-server/src/pg-query-executor.js +14 -17
  868. package/out/zero-server/src/pg-query-executor.js.map +1 -1
  869. package/out/zero-server/src/process-mutations.js +293 -365
  870. package/out/zero-server/src/process-mutations.js.map +1 -1
  871. package/out/zero-server/src/push-processor.js +33 -49
  872. package/out/zero-server/src/push-processor.js.map +1 -1
  873. package/out/zero-server/src/queries/process-queries.js +106 -96
  874. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  875. package/out/zero-server/src/schema.js +98 -144
  876. package/out/zero-server/src/schema.js.map +1 -1
  877. package/out/zero-server/src/zql-database.d.ts.map +1 -1
  878. package/out/zero-server/src/zql-database.js +54 -69
  879. package/out/zero-server/src/zql-database.js.map +1 -1
  880. package/out/zero-solid/src/bindings.js +12 -0
  881. package/out/zero-solid/src/mod.js +5 -0
  882. package/out/zero-solid/src/solid-view.js +135 -227
  883. package/out/zero-solid/src/solid-view.js.map +1 -1
  884. package/out/zero-solid/src/use-connection-state.js +18 -14
  885. package/out/zero-solid/src/use-connection-state.js.map +1 -1
  886. package/out/zero-solid/src/use-query.js +55 -100
  887. package/out/zero-solid/src/use-query.js.map +1 -1
  888. package/out/zero-solid/src/use-zero-online.js +18 -12
  889. package/out/zero-solid/src/use-zero-online.js.map +1 -1
  890. package/out/zero-solid/src/use-zero.js +65 -77
  891. package/out/zero-solid/src/use-zero.js.map +1 -1
  892. package/out/zero-solid/src/zero.js +22 -0
  893. package/out/zero-types/src/format.js +8 -7
  894. package/out/zero-types/src/format.js.map +1 -1
  895. package/out/zero-types/src/name-mapper.js +34 -47
  896. package/out/zero-types/src/name-mapper.js.map +1 -1
  897. package/out/zql/src/builder/builder.d.ts.map +1 -1
  898. package/out/zql/src/builder/builder.js +315 -476
  899. package/out/zql/src/builder/builder.js.map +1 -1
  900. package/out/zql/src/builder/debug-delegate.js +69 -74
  901. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  902. package/out/zql/src/builder/filter.js +116 -140
  903. package/out/zql/src/builder/filter.js.map +1 -1
  904. package/out/zql/src/builder/like.js +41 -46
  905. package/out/zql/src/builder/like.js.map +1 -1
  906. package/out/zql/src/error.js +10 -9
  907. package/out/zql/src/error.js.map +1 -1
  908. package/out/zql/src/ivm/array-view.js +89 -91
  909. package/out/zql/src/ivm/array-view.js.map +1 -1
  910. package/out/zql/src/ivm/constraint.js +65 -74
  911. package/out/zql/src/ivm/constraint.js.map +1 -1
  912. package/out/zql/src/ivm/data.js +61 -48
  913. package/out/zql/src/ivm/data.js.map +1 -1
  914. package/out/zql/src/ivm/exists.js +164 -213
  915. package/out/zql/src/ivm/exists.js.map +1 -1
  916. package/out/zql/src/ivm/fan-in.js +62 -59
  917. package/out/zql/src/ivm/fan-in.js.map +1 -1
  918. package/out/zql/src/ivm/fan-out.js +52 -61
  919. package/out/zql/src/ivm/fan-out.js.map +1 -1
  920. package/out/zql/src/ivm/filter-operators.js +91 -96
  921. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  922. package/out/zql/src/ivm/filter-push.js +22 -26
  923. package/out/zql/src/ivm/filter-push.js.map +1 -1
  924. package/out/zql/src/ivm/filter.js +41 -35
  925. package/out/zql/src/ivm/filter.js.map +1 -1
  926. package/out/zql/src/ivm/flipped-join.js +282 -391
  927. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  928. package/out/zql/src/ivm/join-utils.js +85 -115
  929. package/out/zql/src/ivm/join-utils.js.map +1 -1
  930. package/out/zql/src/ivm/join.js +162 -231
  931. package/out/zql/src/ivm/join.js.map +1 -1
  932. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +21 -25
  933. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
  934. package/out/zql/src/ivm/memory-source.js +364 -503
  935. package/out/zql/src/ivm/memory-source.js.map +1 -1
  936. package/out/zql/src/ivm/memory-storage.js +33 -34
  937. package/out/zql/src/ivm/memory-storage.js.map +1 -1
  938. package/out/zql/src/ivm/operator.js +13 -15
  939. package/out/zql/src/ivm/operator.js.map +1 -1
  940. package/out/zql/src/ivm/push-accumulated.js +267 -270
  941. package/out/zql/src/ivm/push-accumulated.js.map +1 -1
  942. package/out/zql/src/ivm/skip.js +91 -104
  943. package/out/zql/src/ivm/skip.js.map +1 -1
  944. package/out/zql/src/ivm/stream.js +10 -10
  945. package/out/zql/src/ivm/stream.js.map +1 -1
  946. package/out/zql/src/ivm/take.js +422 -569
  947. package/out/zql/src/ivm/take.js.map +1 -1
  948. package/out/zql/src/ivm/union-fan-in.js +157 -231
  949. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  950. package/out/zql/src/ivm/union-fan-out.js +38 -43
  951. package/out/zql/src/ivm/union-fan-out.js.map +1 -1
  952. package/out/zql/src/ivm/view-apply-change.js +166 -255
  953. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  954. package/out/zql/src/mutate/crud.js +35 -34
  955. package/out/zql/src/mutate/crud.js.map +1 -1
  956. package/out/zql/src/mutate/custom.d.ts.map +1 -1
  957. package/out/zql/src/mutate/custom.js +7 -11
  958. package/out/zql/src/mutate/custom.js.map +1 -1
  959. package/out/zql/src/mutate/mutator-registry.js +67 -71
  960. package/out/zql/src/mutate/mutator-registry.js.map +1 -1
  961. package/out/zql/src/mutate/mutator.js +26 -25
  962. package/out/zql/src/mutate/mutator.js.map +1 -1
  963. package/out/zql/src/planner/planner-builder.js +134 -239
  964. package/out/zql/src/planner/planner-builder.js.map +1 -1
  965. package/out/zql/src/planner/planner-connection.js +222 -212
  966. package/out/zql/src/planner/planner-connection.js.map +1 -1
  967. package/out/zql/src/planner/planner-constraint.js +15 -7
  968. package/out/zql/src/planner/planner-constraint.js.map +1 -1
  969. package/out/zql/src/planner/planner-debug.js +199 -224
  970. package/out/zql/src/planner/planner-debug.js.map +1 -1
  971. package/out/zql/src/planner/planner-fan-in.js +146 -162
  972. package/out/zql/src/planner/planner-fan-in.js.map +1 -1
  973. package/out/zql/src/planner/planner-fan-out.js +62 -74
  974. package/out/zql/src/planner/planner-fan-out.js.map +1 -1
  975. package/out/zql/src/planner/planner-graph.js +302 -334
  976. package/out/zql/src/planner/planner-graph.js.map +1 -1
  977. package/out/zql/src/planner/planner-join.js +255 -240
  978. package/out/zql/src/planner/planner-join.js.map +1 -1
  979. package/out/zql/src/planner/planner-node.js +10 -6
  980. package/out/zql/src/planner/planner-node.js.map +1 -1
  981. package/out/zql/src/planner/planner-source.js +15 -22
  982. package/out/zql/src/planner/planner-source.js.map +1 -1
  983. package/out/zql/src/planner/planner-terminus.js +28 -28
  984. package/out/zql/src/planner/planner-terminus.js.map +1 -1
  985. package/out/zql/src/query/complete-ordering.js +37 -61
  986. package/out/zql/src/query/complete-ordering.js.map +1 -1
  987. package/out/zql/src/query/create-builder.js +14 -22
  988. package/out/zql/src/query/create-builder.js.map +1 -1
  989. package/out/zql/src/query/error.js +10 -12
  990. package/out/zql/src/query/error.js.map +1 -1
  991. package/out/zql/src/query/escape-like.js +6 -5
  992. package/out/zql/src/query/escape-like.js.map +1 -1
  993. package/out/zql/src/query/expression.js +138 -157
  994. package/out/zql/src/query/expression.js.map +1 -1
  995. package/out/zql/src/query/measure-push-operator.js +35 -38
  996. package/out/zql/src/query/measure-push-operator.js.map +1 -1
  997. package/out/zql/src/query/metrics-delegate.js +7 -7
  998. package/out/zql/src/query/metrics-delegate.js.map +1 -1
  999. package/out/zql/src/query/named.js +52 -51
  1000. package/out/zql/src/query/named.js.map +1 -1
  1001. package/out/zql/src/query/query-delegate-base.js +190 -238
  1002. package/out/zql/src/query/query-delegate-base.js.map +1 -1
  1003. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  1004. package/out/zql/src/query/query-impl.js +271 -405
  1005. package/out/zql/src/query/query-impl.js.map +1 -1
  1006. package/out/zql/src/query/query-internals.js +16 -8
  1007. package/out/zql/src/query/query-internals.js.map +1 -1
  1008. package/out/zql/src/query/query-registry.js +83 -98
  1009. package/out/zql/src/query/query-registry.js.map +1 -1
  1010. package/out/zql/src/query/query.d.ts.map +1 -1
  1011. package/out/zql/src/query/query.js +2 -0
  1012. package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
  1013. package/out/zql/src/query/runnable-query-impl.js +30 -55
  1014. package/out/zql/src/query/runnable-query-impl.js.map +1 -1
  1015. package/out/zql/src/query/static-query.js +7 -14
  1016. package/out/zql/src/query/static-query.js.map +1 -1
  1017. package/out/zql/src/query/ttl.js +45 -67
  1018. package/out/zql/src/query/ttl.js.map +1 -1
  1019. package/out/zql/src/query/validate-input.js +23 -20
  1020. package/out/zql/src/query/validate-input.js.map +1 -1
  1021. package/out/zqlite/src/database-storage.js +99 -103
  1022. package/out/zqlite/src/database-storage.js.map +1 -1
  1023. package/out/zqlite/src/db.js +206 -249
  1024. package/out/zqlite/src/db.js.map +1 -1
  1025. package/out/zqlite/src/explain-queries.js +11 -13
  1026. package/out/zqlite/src/explain-queries.js.map +1 -1
  1027. package/out/zqlite/src/internal/sql-inline.js +54 -37
  1028. package/out/zqlite/src/internal/sql-inline.js.map +1 -1
  1029. package/out/zqlite/src/internal/sql.js +17 -15
  1030. package/out/zqlite/src/internal/sql.js.map +1 -1
  1031. package/out/zqlite/src/internal/statement-cache.js +117 -92
  1032. package/out/zqlite/src/internal/statement-cache.js.map +1 -1
  1033. package/out/zqlite/src/mod.js +5 -0
  1034. package/out/zqlite/src/query-builder.js +81 -172
  1035. package/out/zqlite/src/query-builder.js.map +1 -1
  1036. package/out/zqlite/src/query-delegate.js +45 -55
  1037. package/out/zqlite/src/query-delegate.js.map +1 -1
  1038. package/out/zqlite/src/resolve-scalar-subqueries.js +134 -124
  1039. package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
  1040. package/out/zqlite/src/sqlite-cost-model.js +92 -97
  1041. package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
  1042. package/out/zqlite/src/sqlite-stat-fanout.js +304 -286
  1043. package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
  1044. package/out/zqlite/src/table-source.js +281 -455
  1045. package/out/zqlite/src/table-source.js.map +1 -1
  1046. package/package.json +7 -7
  1047. package/out/replicache/src/db/index-operation-enum.js +0 -7
  1048. package/out/replicache/src/db/index-operation-enum.js.map +0 -1
  1049. package/out/replicache/src/db/meta-type-enum.js +0 -7
  1050. package/out/replicache/src/db/meta-type-enum.js.map +0 -1
  1051. package/out/replicache/src/format-version-enum.js +0 -11
  1052. package/out/replicache/src/format-version-enum.js.map +0 -1
  1053. package/out/replicache/src/http-status-unauthorized.js +0 -5
  1054. package/out/replicache/src/http-status-unauthorized.js.map +0 -1
  1055. package/out/replicache/src/invoke-kind-enum.js +0 -7
  1056. package/out/replicache/src/invoke-kind-enum.js.map +0 -1
  1057. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js +0 -9
  1058. package/out/replicache/src/sync/handle-pull-response-result-type-enum.js.map +0 -1
  1059. package/out/zero/package.json.js +0 -9
  1060. package/out/zero/package.json.js.map +0 -1
  1061. package/out/zero/src/adapters/drizzle.js.map +0 -1
  1062. package/out/zero/src/adapters/pg.js.map +0 -1
  1063. package/out/zero/src/adapters/postgresjs.js.map +0 -1
  1064. package/out/zero/src/adapters/prisma.js.map +0 -1
  1065. package/out/zero/src/analyze-query.js.map +0 -1
  1066. package/out/zero/src/ast-to-zql.js.map +0 -1
  1067. package/out/zero/src/bindings.js.map +0 -1
  1068. package/out/zero/src/change-protocol/v0.js.map +0 -1
  1069. package/out/zero/src/cli.js.map +0 -1
  1070. package/out/zero/src/deploy-permissions.js.map +0 -1
  1071. package/out/zero/src/expo-sqlite.js.map +0 -1
  1072. package/out/zero/src/op-sqlite.js.map +0 -1
  1073. package/out/zero/src/pg.js.map +0 -1
  1074. package/out/zero/src/react.js.map +0 -1
  1075. package/out/zero/src/server.js.map +0 -1
  1076. package/out/zero/src/solid.js.map +0 -1
  1077. package/out/zero/src/sqlite.js.map +0 -1
  1078. package/out/zero/src/transform-query.js.map +0 -1
  1079. package/out/zero/src/zero.js.map +0 -1
  1080. package/out/zero/src/zqlite.js.map +0 -1
  1081. package/out/zero-cache/src/db/postgres-replica-identity-enum.js +0 -11
  1082. package/out/zero-cache/src/db/postgres-replica-identity-enum.js.map +0 -1
  1083. package/out/zero-cache/src/db/postgres-type-class-enum.js +0 -17
  1084. package/out/zero-cache/src/db/postgres-type-class-enum.js.map +0 -1
  1085. package/out/zero-cache/src/services/change-streamer/error-type-enum.js +0 -9
  1086. package/out/zero-cache/src/services/change-streamer/error-type-enum.js.map +0 -1
@@ -1,34 +1,32 @@
1
- class ConnectionLoopDelegateImpl {
2
- rep;
3
- invokeSend;
4
- // TODO: Remove the ability to have more than one concurrent connection and update tests.
5
- // Bug: https://github.com/rocicorp/replicache-internal/issues/303
6
- maxConnections = 1;
7
- constructor(rep, invokeSend) {
8
- this.rep = rep;
9
- this.invokeSend = invokeSend;
10
- }
11
- get maxDelayMs() {
12
- return this.rep.requestOptions.maxDelayMs;
13
- }
14
- get minDelayMs() {
15
- return this.rep.requestOptions.minDelayMs;
16
- }
17
- }
18
- class PullDelegate extends ConnectionLoopDelegateImpl {
19
- debounceDelay = 0;
20
- get watchdogTimer() {
21
- return this.rep.pullInterval;
22
- }
23
- }
24
- class PushDelegate extends ConnectionLoopDelegateImpl {
25
- get debounceDelay() {
26
- return this.rep.pushDelay;
27
- }
28
- watchdogTimer = null;
29
- }
30
- export {
31
- PullDelegate,
32
- PushDelegate
1
+ //#region ../replicache/src/connection-loop-delegates.ts
2
+ var ConnectionLoopDelegateImpl = class {
3
+ rep;
4
+ invokeSend;
5
+ maxConnections = 1;
6
+ constructor(rep, invokeSend) {
7
+ this.rep = rep;
8
+ this.invokeSend = invokeSend;
9
+ }
10
+ get maxDelayMs() {
11
+ return this.rep.requestOptions.maxDelayMs;
12
+ }
13
+ get minDelayMs() {
14
+ return this.rep.requestOptions.minDelayMs;
15
+ }
33
16
  };
34
- //# sourceMappingURL=connection-loop-delegates.js.map
17
+ var PullDelegate = class extends ConnectionLoopDelegateImpl {
18
+ debounceDelay = 0;
19
+ get watchdogTimer() {
20
+ return this.rep.pullInterval;
21
+ }
22
+ };
23
+ var PushDelegate = class extends ConnectionLoopDelegateImpl {
24
+ get debounceDelay() {
25
+ return this.rep.pushDelay;
26
+ }
27
+ watchdogTimer = null;
28
+ };
29
+ //#endregion
30
+ export { PullDelegate, PushDelegate };
31
+
32
+ //# sourceMappingURL=connection-loop-delegates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection-loop-delegates.js","sources":["../../../../replicache/src/connection-loop-delegates.ts"],"sourcesContent":["import type {ConnectionLoopDelegate} from './connection-loop.ts';\nimport type {ReplicacheImpl} from './replicache-impl.ts';\n\nclass ConnectionLoopDelegateImpl {\n readonly rep: ReplicacheImpl;\n readonly invokeSend: () => Promise<boolean>;\n\n // TODO: Remove the ability to have more than one concurrent connection and update tests.\n // Bug: https://github.com/rocicorp/replicache-internal/issues/303\n readonly maxConnections = 1;\n\n constructor(rep: ReplicacheImpl, invokeSend: () => Promise<boolean>) {\n this.rep = rep;\n this.invokeSend = invokeSend;\n }\n\n get maxDelayMs(): number {\n return this.rep.requestOptions.maxDelayMs;\n }\n\n get minDelayMs(): number {\n return this.rep.requestOptions.minDelayMs;\n }\n}\n\nexport class PullDelegate\n extends ConnectionLoopDelegateImpl\n implements ConnectionLoopDelegate\n{\n readonly debounceDelay = 0;\n\n get watchdogTimer(): number | null {\n return this.rep.pullInterval;\n }\n}\n\nexport class PushDelegate\n extends ConnectionLoopDelegateImpl\n implements ConnectionLoopDelegate\n{\n get debounceDelay(): number {\n return this.rep.pushDelay;\n }\n\n watchdogTimer = null;\n}\n"],"names":[],"mappings":"AAGA,MAAM,2BAA2B;AAAA,EACtB;AAAA,EACA;AAAA;AAAA;AAAA,EAIA,iBAAiB;AAAA,EAE1B,YAAY,KAAqB,YAAoC;AACnE,SAAK,MAAM;AACX,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,aAAqB;AACvB,WAAO,KAAK,IAAI,eAAe;AAAA,EACjC;AAAA,EAEA,IAAI,aAAqB;AACvB,WAAO,KAAK,IAAI,eAAe;AAAA,EACjC;AACF;AAEO,MAAM,qBACH,2BAEV;AAAA,EACW,gBAAgB;AAAA,EAEzB,IAAI,gBAA+B;AACjC,WAAO,KAAK,IAAI;AAAA,EAClB;AACF;AAEO,MAAM,qBACH,2BAEV;AAAA,EACE,IAAI,gBAAwB;AAC1B,WAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EAEA,gBAAgB;AAClB;"}
1
+ {"version":3,"file":"connection-loop-delegates.js","names":[],"sources":["../../../../replicache/src/connection-loop-delegates.ts"],"sourcesContent":["import type {ConnectionLoopDelegate} from './connection-loop.ts';\nimport type {ReplicacheImpl} from './replicache-impl.ts';\n\nclass ConnectionLoopDelegateImpl {\n readonly rep: ReplicacheImpl;\n readonly invokeSend: () => Promise<boolean>;\n\n // TODO: Remove the ability to have more than one concurrent connection and update tests.\n // Bug: https://github.com/rocicorp/replicache-internal/issues/303\n readonly maxConnections = 1;\n\n constructor(rep: ReplicacheImpl, invokeSend: () => Promise<boolean>) {\n this.rep = rep;\n this.invokeSend = invokeSend;\n }\n\n get maxDelayMs(): number {\n return this.rep.requestOptions.maxDelayMs;\n }\n\n get minDelayMs(): number {\n return this.rep.requestOptions.minDelayMs;\n }\n}\n\nexport class PullDelegate\n extends ConnectionLoopDelegateImpl\n implements ConnectionLoopDelegate\n{\n readonly debounceDelay = 0;\n\n get watchdogTimer(): number | null {\n return this.rep.pullInterval;\n }\n}\n\nexport class PushDelegate\n extends ConnectionLoopDelegateImpl\n implements ConnectionLoopDelegate\n{\n get debounceDelay(): number {\n return this.rep.pushDelay;\n }\n\n watchdogTimer = null;\n}\n"],"mappings":";AAGA,IAAM,6BAAN,MAAiC;CAC/B;CACA;CAIA,iBAA0B;CAE1B,YAAY,KAAqB,YAAoC;AACnE,OAAK,MAAM;AACX,OAAK,aAAa;;CAGpB,IAAI,aAAqB;AACvB,SAAO,KAAK,IAAI,eAAe;;CAGjC,IAAI,aAAqB;AACvB,SAAO,KAAK,IAAI,eAAe;;;AAInC,IAAa,eAAb,cACU,2BAEV;CACE,gBAAyB;CAEzB,IAAI,gBAA+B;AACjC,SAAO,KAAK,IAAI;;;AAIpB,IAAa,eAAb,cACU,2BAEV;CACE,IAAI,gBAAwB;AAC1B,SAAO,KAAK,IAAI;;CAGlB,gBAAgB"}
@@ -1,251 +1,185 @@
1
- import { resolver } from "@rocicorp/resolver";
2
1
  import { sleep } from "../../shared/src/sleep.js";
3
- const MIN_DELAY_MS = 30;
4
- const MAX_DELAY_MS = 6e4;
5
- class ConnectionLoop {
6
- // ConnectionLoop runs a loop sending network requests (either pushes or
7
- // pulls) to the server. Our goal, generally, is to send requests as fast as
8
- // we can, but to adjust in case of slowness, network errors, etc. We will
9
- // send requests in parallel if the server supports it. We also debounce
10
- // pushes since they frequently happen in series very near to one another
11
- // (e.g., during drag'n drops).
12
- //
13
- // The loop flows through the following states forever, until it is closed:
14
- //
15
- // Pending: Wait for event or watchdog
16
- // |
17
- // v
18
- // Debounce: Wait for more events (we debounce pushes)
19
- // |
20
- // v
21
- // Wait for available connection (we limit number of parallel requests
22
- // allowed)
23
- // |
24
- // v
25
- // Wait to send (if requests are taking too long, we will slow down)
26
- // |
27
- // v
28
- // Send (asynchronously, wrt the loop)
29
- // |
30
- // v
31
- // Back to the pending!
32
- // Controls whether the next iteration of the loop will wait at the pending
33
- // state.
34
- #pendingResolver = resolver();
35
- /**
36
- * This resolver is used to allow us to skip sleeps when we do send(true)
37
- */
38
- #skipSleepsResolver = resolver();
39
- /**
40
- * Resolver for the next send. Never rejects. Returns an error instead since
41
- * this resolver is used in cases where they might not be someone waiting,
42
- * and we don't want an unhandled promise rejection in that case.
43
- */
44
- #sendResolver = resolver();
45
- #delegate;
46
- #closed = false;
47
- #abortSignal = new AbortController();
48
- /**
49
- * Number of pending send calls.
50
- *
51
- * We keep track of this because if close happens while we are waiting for the
52
- * send to resolve we should reject the send promise.
53
- */
54
- #sendCounter = 0;
55
- #lc;
56
- #visibilityWatcher;
57
- constructor(lc, delegate, visibilityWatcher) {
58
- this.#lc = lc;
59
- this.#delegate = delegate;
60
- this.#visibilityWatcher = visibilityWatcher;
61
- void this.run();
62
- }
63
- close() {
64
- this.#closed = true;
65
- this.#abortSignal.abort();
66
- if (this.#sendCounter > 0) {
67
- this.#sendResolver.resolve({ error: closeError() });
68
- }
69
- }
70
- /**
71
- *
72
- * @returns Returns undefined if ok, otherwise it return the error that caused
73
- * the send to fail.
74
- */
75
- async send(now) {
76
- if (this.#closed) {
77
- return { error: closeError() };
78
- }
79
- this.#sendCounter++;
80
- this.#lc.debug?.("send", now);
81
- if (now) {
82
- this.#skipSleepsResolver.resolve();
83
- } else {
84
- await this.#visibilityWatcher?.waitForVisible();
85
- }
86
- this.#pendingResolver.resolve();
87
- const result = await this.#sendResolver.promise;
88
- this.#sendCounter--;
89
- return result;
90
- }
91
- async run() {
92
- const sendRecords = [];
93
- let recoverResolver = resolver();
94
- let lastSendTime;
95
- let counter = 0;
96
- const delegate = this.#delegate;
97
- const { debug } = this.#lc;
98
- let delay = 0;
99
- debug?.("Starting connection loop");
100
- const sleepMaybeSkip = (ms) => Promise.race([this.#skipSleepsResolver.promise, sleep(ms)]);
101
- while (!this.#closed) {
102
- debug?.(
103
- didLastSendRequestFail(sendRecords) ? "Last request failed. Trying again" : "Waiting for a send"
104
- );
105
- const races = [this.#pendingResolver.promise];
106
- const t = delegate.watchdogTimer;
107
- if (t !== null) {
108
- races.push(sleep(t, this.#abortSignal.signal).catch(() => {
109
- }));
110
- }
111
- await Promise.race(races);
112
- if (this.#closed) break;
113
- debug?.("Waiting for debounce");
114
- await sleepMaybeSkip(delegate.debounceDelay);
115
- if (this.#closed) break;
116
- debug?.("debounced");
117
- this.#pendingResolver = resolver();
118
- if (counter >= delegate.maxConnections) {
119
- debug?.("Too many request in flight. Waiting until one finishes...");
120
- await this.#waitUntilAvailableConnection();
121
- if (this.#closed) break;
122
- debug?.("...finished");
123
- }
124
- if (counter > 0 || didLastSendRequestFail(sendRecords)) {
125
- delay = computeDelayAndUpdateDurations(delay, delegate, sendRecords);
126
- debug?.(
127
- didLastSendRequestFail(sendRecords) ? "Last connection errored. Sleeping for" : "More than one outstanding connection (" + counter + "). Sleeping for",
128
- delay,
129
- "ms"
130
- );
131
- } else {
132
- delay = 0;
133
- }
134
- const clampedDelay = Math.min(
135
- delegate.maxDelayMs,
136
- Math.max(delegate.minDelayMs, delay)
137
- );
138
- if (lastSendTime !== void 0) {
139
- const timeSinceLastSend = Date.now() - lastSendTime;
140
- if (clampedDelay > timeSinceLastSend) {
141
- await Promise.race([
142
- sleepMaybeSkip(clampedDelay - timeSinceLastSend),
143
- recoverResolver.promise
144
- ]);
145
- if (this.#closed) break;
146
- }
147
- }
148
- counter++;
149
- void (async () => {
150
- const start = Date.now();
151
- let ok;
152
- let error;
153
- try {
154
- lastSendTime = start;
155
- debug?.("Sending request");
156
- this.#skipSleepsResolver = resolver();
157
- ok = await delegate.invokeSend();
158
- debug?.("Send returned", ok);
159
- } catch (e) {
160
- debug?.("Send failed", e);
161
- error = e;
162
- ok = false;
163
- }
164
- if (this.#closed) {
165
- debug?.("Closed after invokeSend");
166
- return;
167
- }
168
- debug?.("Request done", { duration: Date.now() - start, ok });
169
- sendRecords.push({ duration: Date.now() - start, ok });
170
- if (recovered(sendRecords)) {
171
- recoverResolver.resolve();
172
- recoverResolver = resolver();
173
- }
174
- counter--;
175
- this.#connectionAvailable();
176
- const sendResolver = this.#sendResolver;
177
- this.#sendResolver = resolver();
178
- if (error) {
179
- sendResolver.resolve({ error });
180
- } else {
181
- sendResolver.resolve(void 0);
182
- }
183
- if (!ok) {
184
- this.#pendingResolver.resolve();
185
- }
186
- })();
187
- }
188
- }
189
- #waitingConnectionResolve = void 0;
190
- #connectionAvailable() {
191
- if (this.#waitingConnectionResolve) {
192
- const resolve = this.#waitingConnectionResolve;
193
- this.#waitingConnectionResolve = void 0;
194
- resolve();
195
- }
196
- }
197
- #waitUntilAvailableConnection() {
198
- const { promise, resolve } = resolver();
199
- this.#waitingConnectionResolve = resolve;
200
- return promise;
201
- }
202
- }
203
- const CONNECTION_MEMORY_COUNT = 9;
2
+ import { resolver } from "@rocicorp/resolver";
3
+ //#region ../replicache/src/connection-loop.ts
4
+ var MAX_DELAY_MS = 6e4;
5
+ var ConnectionLoop = class {
6
+ #pendingResolver = resolver();
7
+ /**
8
+ * This resolver is used to allow us to skip sleeps when we do send(true)
9
+ */
10
+ #skipSleepsResolver = resolver();
11
+ /**
12
+ * Resolver for the next send. Never rejects. Returns an error instead since
13
+ * this resolver is used in cases where they might not be someone waiting,
14
+ * and we don't want an unhandled promise rejection in that case.
15
+ */
16
+ #sendResolver = resolver();
17
+ #delegate;
18
+ #closed = false;
19
+ #abortSignal = new AbortController();
20
+ /**
21
+ * Number of pending send calls.
22
+ *
23
+ * We keep track of this because if close happens while we are waiting for the
24
+ * send to resolve we should reject the send promise.
25
+ */
26
+ #sendCounter = 0;
27
+ #lc;
28
+ #visibilityWatcher;
29
+ constructor(lc, delegate, visibilityWatcher) {
30
+ this.#lc = lc;
31
+ this.#delegate = delegate;
32
+ this.#visibilityWatcher = visibilityWatcher;
33
+ this.run();
34
+ }
35
+ close() {
36
+ this.#closed = true;
37
+ this.#abortSignal.abort();
38
+ if (this.#sendCounter > 0) this.#sendResolver.resolve({ error: closeError() });
39
+ }
40
+ /**
41
+ *
42
+ * @returns Returns undefined if ok, otherwise it return the error that caused
43
+ * the send to fail.
44
+ */
45
+ async send(now) {
46
+ if (this.#closed) return { error: closeError() };
47
+ this.#sendCounter++;
48
+ this.#lc.debug?.("send", now);
49
+ if (now) this.#skipSleepsResolver.resolve();
50
+ else await this.#visibilityWatcher?.waitForVisible();
51
+ this.#pendingResolver.resolve();
52
+ const result = await this.#sendResolver.promise;
53
+ this.#sendCounter--;
54
+ return result;
55
+ }
56
+ async run() {
57
+ const sendRecords = [];
58
+ let recoverResolver = resolver();
59
+ let lastSendTime;
60
+ let counter = 0;
61
+ const delegate = this.#delegate;
62
+ const { debug } = this.#lc;
63
+ let delay = 0;
64
+ debug?.("Starting connection loop");
65
+ const sleepMaybeSkip = (ms) => Promise.race([this.#skipSleepsResolver.promise, sleep(ms)]);
66
+ while (!this.#closed) {
67
+ debug?.(didLastSendRequestFail(sendRecords) ? "Last request failed. Trying again" : "Waiting for a send");
68
+ const races = [this.#pendingResolver.promise];
69
+ const t = delegate.watchdogTimer;
70
+ if (t !== null) races.push(sleep(t, this.#abortSignal.signal).catch(() => {}));
71
+ await Promise.race(races);
72
+ if (this.#closed) break;
73
+ debug?.("Waiting for debounce");
74
+ await sleepMaybeSkip(delegate.debounceDelay);
75
+ if (this.#closed) break;
76
+ debug?.("debounced");
77
+ this.#pendingResolver = resolver();
78
+ if (counter >= delegate.maxConnections) {
79
+ debug?.("Too many request in flight. Waiting until one finishes...");
80
+ await this.#waitUntilAvailableConnection();
81
+ if (this.#closed) break;
82
+ debug?.("...finished");
83
+ }
84
+ if (counter > 0 || didLastSendRequestFail(sendRecords)) {
85
+ delay = computeDelayAndUpdateDurations(delay, delegate, sendRecords);
86
+ debug?.(didLastSendRequestFail(sendRecords) ? "Last connection errored. Sleeping for" : "More than one outstanding connection (" + counter + "). Sleeping for", delay, "ms");
87
+ } else delay = 0;
88
+ const clampedDelay = Math.min(delegate.maxDelayMs, Math.max(delegate.minDelayMs, delay));
89
+ if (lastSendTime !== void 0) {
90
+ const timeSinceLastSend = Date.now() - lastSendTime;
91
+ if (clampedDelay > timeSinceLastSend) {
92
+ await Promise.race([sleepMaybeSkip(clampedDelay - timeSinceLastSend), recoverResolver.promise]);
93
+ if (this.#closed) break;
94
+ }
95
+ }
96
+ counter++;
97
+ (async () => {
98
+ const start = Date.now();
99
+ let ok;
100
+ let error;
101
+ try {
102
+ lastSendTime = start;
103
+ debug?.("Sending request");
104
+ this.#skipSleepsResolver = resolver();
105
+ ok = await delegate.invokeSend();
106
+ debug?.("Send returned", ok);
107
+ } catch (e) {
108
+ debug?.("Send failed", e);
109
+ error = e;
110
+ ok = false;
111
+ }
112
+ if (this.#closed) {
113
+ debug?.("Closed after invokeSend");
114
+ return;
115
+ }
116
+ debug?.("Request done", {
117
+ duration: Date.now() - start,
118
+ ok
119
+ });
120
+ sendRecords.push({
121
+ duration: Date.now() - start,
122
+ ok
123
+ });
124
+ if (recovered(sendRecords)) {
125
+ recoverResolver.resolve();
126
+ recoverResolver = resolver();
127
+ }
128
+ counter--;
129
+ this.#connectionAvailable();
130
+ const sendResolver = this.#sendResolver;
131
+ this.#sendResolver = resolver();
132
+ if (error) sendResolver.resolve({ error });
133
+ else sendResolver.resolve(void 0);
134
+ if (!ok) this.#pendingResolver.resolve();
135
+ })();
136
+ }
137
+ }
138
+ #waitingConnectionResolve = void 0;
139
+ #connectionAvailable() {
140
+ if (this.#waitingConnectionResolve) {
141
+ const resolve = this.#waitingConnectionResolve;
142
+ this.#waitingConnectionResolve = void 0;
143
+ resolve();
144
+ }
145
+ }
146
+ #waitUntilAvailableConnection() {
147
+ const { promise, resolve } = resolver();
148
+ this.#waitingConnectionResolve = resolve;
149
+ return promise;
150
+ }
151
+ };
152
+ var CONNECTION_MEMORY_COUNT = 9;
204
153
  function closeError() {
205
- return new Error("Closed");
154
+ return /* @__PURE__ */ new Error("Closed");
206
155
  }
207
156
  function computeDelayAndUpdateDurations(delay, delegate, sendRecords) {
208
- const { length } = sendRecords;
209
- if (length === 0) {
210
- return delay;
211
- }
212
- const { ok } = sendRecords[sendRecords.length - 1];
213
- const { maxConnections, minDelayMs } = delegate;
214
- if (!ok) {
215
- return delay === 0 ? minDelayMs : delay * 2;
216
- }
217
- if (length > 1) {
218
- const previous = sendRecords[sendRecords.length - 2];
219
- while (sendRecords.length > CONNECTION_MEMORY_COUNT) {
220
- sendRecords.shift();
221
- }
222
- if (ok && !previous.ok) {
223
- return minDelayMs;
224
- }
225
- }
226
- const med = median(
227
- sendRecords.filter(({ ok: ok2 }) => ok2).map(({ duration }) => duration)
228
- );
229
- return med / maxConnections | 0;
157
+ const { length } = sendRecords;
158
+ if (length === 0) return delay;
159
+ const { ok } = sendRecords[sendRecords.length - 1];
160
+ const { maxConnections, minDelayMs } = delegate;
161
+ if (!ok) return delay === 0 ? minDelayMs : delay * 2;
162
+ if (length > 1) {
163
+ const previous = sendRecords[sendRecords.length - 2];
164
+ while (sendRecords.length > CONNECTION_MEMORY_COUNT) sendRecords.shift();
165
+ if (ok && !previous.ok) return minDelayMs;
166
+ }
167
+ return median(sendRecords.filter(({ ok }) => ok).map(({ duration }) => duration)) / maxConnections | 0;
230
168
  }
231
169
  function median(values) {
232
- values.sort();
233
- const { length } = values;
234
- const half = length >> 1;
235
- if (length % 2 === 1) {
236
- return values[half];
237
- }
238
- return (values[half - 1] + values[half]) / 2;
170
+ values.sort();
171
+ const { length } = values;
172
+ const half = length >> 1;
173
+ if (length % 2 === 1) return values[half];
174
+ return (values[half - 1] + values[half]) / 2;
239
175
  }
240
176
  function didLastSendRequestFail(sendRecords) {
241
- return sendRecords.length > 0 && !sendRecords[sendRecords.length - 1].ok;
177
+ return sendRecords.length > 0 && !sendRecords[sendRecords.length - 1].ok;
242
178
  }
243
179
  function recovered(sendRecords) {
244
- return sendRecords.length > 1 && !sendRecords[sendRecords.length - 2].ok && sendRecords[sendRecords.length - 1].ok;
180
+ return sendRecords.length > 1 && !sendRecords[sendRecords.length - 2].ok && sendRecords[sendRecords.length - 1].ok;
245
181
  }
246
- export {
247
- ConnectionLoop,
248
- MAX_DELAY_MS,
249
- MIN_DELAY_MS
250
- };
251
- //# sourceMappingURL=connection-loop.js.map
182
+ //#endregion
183
+ export { ConnectionLoop, MAX_DELAY_MS };
184
+
185
+ //# sourceMappingURL=connection-loop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection-loop.js","sources":["../../../../replicache/src/connection-loop.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {resolver} from '@rocicorp/resolver';\nimport type {DocumentVisibilityWatcher} from '../../shared/src/document-visible.ts';\nimport {sleep} from '../../shared/src/sleep.ts';\n\nexport const DEBOUNCE_DELAY_MS = 10;\n\nexport const MIN_DELAY_MS = 30;\nexport const MAX_DELAY_MS = 60_000;\n\ntype SendRecord = {duration: number; ok: boolean};\n\nexport interface ConnectionLoopDelegate {\n invokeSend(): Promise<boolean>;\n debounceDelay: number;\n // If null, no watchdog timer is used.\n watchdogTimer: number | null;\n maxConnections: number;\n maxDelayMs: number;\n minDelayMs: number;\n}\n\nexport class ConnectionLoop {\n // ConnectionLoop runs a loop sending network requests (either pushes or\n // pulls) to the server. Our goal, generally, is to send requests as fast as\n // we can, but to adjust in case of slowness, network errors, etc. We will\n // send requests in parallel if the server supports it. We also debounce\n // pushes since they frequently happen in series very near to one another\n // (e.g., during drag'n drops).\n //\n // The loop flows through the following states forever, until it is closed:\n //\n // Pending: Wait for event or watchdog\n // |\n // v\n // Debounce: Wait for more events (we debounce pushes)\n // |\n // v\n // Wait for available connection (we limit number of parallel requests\n // allowed)\n // |\n // v\n // Wait to send (if requests are taking too long, we will slow down)\n // |\n // v\n // Send (asynchronously, wrt the loop)\n // |\n // v\n // Back to the pending!\n\n // Controls whether the next iteration of the loop will wait at the pending\n // state.\n #pendingResolver = resolver<void>();\n\n /**\n * This resolver is used to allow us to skip sleeps when we do send(true)\n */\n #skipSleepsResolver = resolver<void>();\n\n /**\n * Resolver for the next send. Never rejects. Returns an error instead since\n * this resolver is used in cases where they might not be someone waiting,\n * and we don't want an unhandled promise rejection in that case.\n */\n #sendResolver = resolver<undefined | {error: unknown}>();\n\n readonly #delegate: ConnectionLoopDelegate;\n #closed = false;\n #abortSignal = new AbortController();\n\n /**\n * Number of pending send calls.\n *\n * We keep track of this because if close happens while we are waiting for the\n * send to resolve we should reject the send promise.\n */\n #sendCounter = 0;\n readonly #lc: LogContext;\n readonly #visibilityWatcher: DocumentVisibilityWatcher | undefined;\n\n constructor(\n lc: LogContext,\n delegate: ConnectionLoopDelegate,\n visibilityWatcher?: DocumentVisibilityWatcher,\n ) {\n this.#lc = lc;\n this.#delegate = delegate;\n this.#visibilityWatcher = visibilityWatcher;\n void this.run();\n }\n\n close(): void {\n this.#closed = true;\n this.#abortSignal.abort();\n if (this.#sendCounter > 0) {\n this.#sendResolver.resolve({error: closeError()});\n }\n }\n\n /**\n *\n * @returns Returns undefined if ok, otherwise it return the error that caused\n * the send to fail.\n */\n async send(now: boolean): Promise<undefined | {error: unknown}> {\n if (this.#closed) {\n return {error: closeError()};\n }\n this.#sendCounter++;\n this.#lc.debug?.('send', now);\n if (now) {\n this.#skipSleepsResolver.resolve();\n } else {\n await this.#visibilityWatcher?.waitForVisible();\n }\n\n this.#pendingResolver.resolve();\n\n const result = await this.#sendResolver.promise;\n this.#sendCounter--;\n return result;\n }\n\n async run(): Promise<void> {\n const sendRecords: SendRecord[] = [];\n\n let recoverResolver = resolver();\n let lastSendTime;\n\n // The number of active connections.\n let counter = 0;\n const delegate = this.#delegate;\n const {debug} = this.#lc;\n let delay = 0;\n\n debug?.('Starting connection loop');\n\n const sleepMaybeSkip: typeof sleep = ms =>\n Promise.race([this.#skipSleepsResolver.promise, sleep(ms)]);\n\n while (!this.#closed) {\n debug?.(\n didLastSendRequestFail(sendRecords)\n ? 'Last request failed. Trying again'\n : 'Waiting for a send',\n );\n\n // Wait until send is called or until the watchdog timer fires.\n const races = [this.#pendingResolver.promise];\n const t = delegate.watchdogTimer;\n if (t !== null) {\n // Wait for the watchdog timer to fire or the abort signal to be triggered.\n races.push(sleep(t, this.#abortSignal.signal).catch(() => {}));\n }\n await Promise.race(races);\n if (this.#closed) break;\n\n debug?.('Waiting for debounce');\n await sleepMaybeSkip(delegate.debounceDelay);\n if (this.#closed) break;\n debug?.('debounced');\n\n // This resolver is used to wait for incoming push calls.\n this.#pendingResolver = resolver();\n\n if (counter >= delegate.maxConnections) {\n debug?.('Too many request in flight. Waiting until one finishes...');\n await this.#waitUntilAvailableConnection();\n if (this.#closed) break;\n debug?.('...finished');\n }\n\n // We need to delay the next request even if there are no active requests\n // in case of error.\n if (counter > 0 || didLastSendRequestFail(sendRecords)) {\n delay = computeDelayAndUpdateDurations(delay, delegate, sendRecords);\n debug?.(\n didLastSendRequestFail(sendRecords)\n ? 'Last connection errored. Sleeping for'\n : 'More than one outstanding connection (' +\n counter +\n '). Sleeping for',\n delay,\n 'ms',\n );\n } else {\n // We set this to 0 here in case minDelayMs is mutated to a lower value\n // than the old delay so that we still get minDelayMs. This can happen\n // if we get an error during a run where minDelayMs is larger than the\n // current value of minDelayMs.\n delay = 0;\n }\n\n const clampedDelay = Math.min(\n delegate.maxDelayMs,\n Math.max(delegate.minDelayMs, delay),\n );\n if (lastSendTime !== undefined) {\n const timeSinceLastSend = Date.now() - lastSendTime;\n if (clampedDelay > timeSinceLastSend) {\n await Promise.race([\n sleepMaybeSkip(clampedDelay - timeSinceLastSend),\n recoverResolver.promise,\n ]);\n if (this.#closed) break;\n }\n }\n\n counter++;\n void (async () => {\n const start = Date.now();\n let ok: boolean;\n let error: unknown;\n try {\n lastSendTime = start;\n debug?.('Sending request');\n this.#skipSleepsResolver = resolver();\n ok = await delegate.invokeSend();\n debug?.('Send returned', ok);\n } catch (e) {\n debug?.('Send failed', e);\n error = e;\n ok = false;\n }\n if (this.#closed) {\n debug?.('Closed after invokeSend');\n return;\n }\n debug?.('Request done', {duration: Date.now() - start, ok});\n sendRecords.push({duration: Date.now() - start, ok});\n if (recovered(sendRecords)) {\n recoverResolver.resolve();\n recoverResolver = resolver();\n }\n counter--;\n this.#connectionAvailable();\n const sendResolver = this.#sendResolver;\n this.#sendResolver = resolver();\n if (error) {\n sendResolver.resolve({error});\n } else {\n sendResolver.resolve(undefined);\n }\n if (!ok) {\n // Keep trying\n this.#pendingResolver.resolve();\n }\n })();\n }\n }\n\n #waitingConnectionResolve: (() => void) | undefined = undefined;\n\n #connectionAvailable() {\n if (this.#waitingConnectionResolve) {\n const resolve = this.#waitingConnectionResolve;\n this.#waitingConnectionResolve = undefined;\n resolve();\n }\n }\n\n #waitUntilAvailableConnection() {\n const {promise, resolve} = resolver();\n this.#waitingConnectionResolve = resolve;\n return promise;\n }\n}\n\n// Number of connections to remember when computing the new delay.\nconst CONNECTION_MEMORY_COUNT = 9;\n\nfunction closeError() {\n return new Error('Closed');\n}\n\n// Computes a new delay based on the previous requests. We use the median of the\n// previous successful request divided by `maxConnections`. When we get errors\n// we do exponential backoff. As soon as we recover from an error we reset back\n// to delegate.minDelayMs.\nfunction computeDelayAndUpdateDurations(\n delay: number,\n delegate: ConnectionLoopDelegate,\n sendRecords: SendRecord[],\n): number {\n const {length} = sendRecords;\n if (length === 0) {\n return delay;\n }\n\n const {ok} = sendRecords[sendRecords.length - 1];\n const {maxConnections, minDelayMs} = delegate;\n\n if (!ok) {\n return delay === 0 ? minDelayMs : delay * 2;\n }\n\n if (length > 1) {\n // length > 1\n const previous: SendRecord = sendRecords[sendRecords.length - 2];\n\n // Prune\n while (sendRecords.length > CONNECTION_MEMORY_COUNT) {\n sendRecords.shift();\n }\n\n if (ok && !previous.ok) {\n // Recovered\n return minDelayMs;\n }\n }\n\n const med = median(\n sendRecords.filter(({ok}) => ok).map(({duration}) => duration),\n );\n\n return (med / maxConnections) | 0;\n}\n\nfunction median(values: number[]) {\n values.sort();\n const {length} = values;\n const half = length >> 1;\n if (length % 2 === 1) {\n return values[half];\n }\n return (values[half - 1] + values[half]) / 2;\n}\n\nfunction didLastSendRequestFail(sendRecords: SendRecord[]) {\n return sendRecords.length > 0 && !sendRecords[sendRecords.length - 1].ok;\n}\n\nfunction recovered(sendRecords: SendRecord[]) {\n return (\n sendRecords.length > 1 &&\n !sendRecords[sendRecords.length - 2].ok &&\n sendRecords[sendRecords.length - 1].ok\n );\n}\n"],"names":["ok"],"mappings":"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"}
1
+ {"version":3,"file":"connection-loop.js","names":["#delegate","#lc","#visibilityWatcher","#closed","#abortSignal","#sendCounter","#sendResolver","#skipSleepsResolver","#pendingResolver","#waitUntilAvailableConnection","#connectionAvailable","#waitingConnectionResolve"],"sources":["../../../../replicache/src/connection-loop.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport {resolver} from '@rocicorp/resolver';\nimport type {DocumentVisibilityWatcher} from '../../shared/src/document-visible.ts';\nimport {sleep} from '../../shared/src/sleep.ts';\n\nexport const DEBOUNCE_DELAY_MS = 10;\n\nexport const MIN_DELAY_MS = 30;\nexport const MAX_DELAY_MS = 60_000;\n\ntype SendRecord = {duration: number; ok: boolean};\n\nexport interface ConnectionLoopDelegate {\n invokeSend(): Promise<boolean>;\n debounceDelay: number;\n // If null, no watchdog timer is used.\n watchdogTimer: number | null;\n maxConnections: number;\n maxDelayMs: number;\n minDelayMs: number;\n}\n\nexport class ConnectionLoop {\n // ConnectionLoop runs a loop sending network requests (either pushes or\n // pulls) to the server. Our goal, generally, is to send requests as fast as\n // we can, but to adjust in case of slowness, network errors, etc. We will\n // send requests in parallel if the server supports it. We also debounce\n // pushes since they frequently happen in series very near to one another\n // (e.g., during drag'n drops).\n //\n // The loop flows through the following states forever, until it is closed:\n //\n // Pending: Wait for event or watchdog\n // |\n // v\n // Debounce: Wait for more events (we debounce pushes)\n // |\n // v\n // Wait for available connection (we limit number of parallel requests\n // allowed)\n // |\n // v\n // Wait to send (if requests are taking too long, we will slow down)\n // |\n // v\n // Send (asynchronously, wrt the loop)\n // |\n // v\n // Back to the pending!\n\n // Controls whether the next iteration of the loop will wait at the pending\n // state.\n #pendingResolver = resolver<void>();\n\n /**\n * This resolver is used to allow us to skip sleeps when we do send(true)\n */\n #skipSleepsResolver = resolver<void>();\n\n /**\n * Resolver for the next send. Never rejects. Returns an error instead since\n * this resolver is used in cases where they might not be someone waiting,\n * and we don't want an unhandled promise rejection in that case.\n */\n #sendResolver = resolver<undefined | {error: unknown}>();\n\n readonly #delegate: ConnectionLoopDelegate;\n #closed = false;\n #abortSignal = new AbortController();\n\n /**\n * Number of pending send calls.\n *\n * We keep track of this because if close happens while we are waiting for the\n * send to resolve we should reject the send promise.\n */\n #sendCounter = 0;\n readonly #lc: LogContext;\n readonly #visibilityWatcher: DocumentVisibilityWatcher | undefined;\n\n constructor(\n lc: LogContext,\n delegate: ConnectionLoopDelegate,\n visibilityWatcher?: DocumentVisibilityWatcher,\n ) {\n this.#lc = lc;\n this.#delegate = delegate;\n this.#visibilityWatcher = visibilityWatcher;\n void this.run();\n }\n\n close(): void {\n this.#closed = true;\n this.#abortSignal.abort();\n if (this.#sendCounter > 0) {\n this.#sendResolver.resolve({error: closeError()});\n }\n }\n\n /**\n *\n * @returns Returns undefined if ok, otherwise it return the error that caused\n * the send to fail.\n */\n async send(now: boolean): Promise<undefined | {error: unknown}> {\n if (this.#closed) {\n return {error: closeError()};\n }\n this.#sendCounter++;\n this.#lc.debug?.('send', now);\n if (now) {\n this.#skipSleepsResolver.resolve();\n } else {\n await this.#visibilityWatcher?.waitForVisible();\n }\n\n this.#pendingResolver.resolve();\n\n const result = await this.#sendResolver.promise;\n this.#sendCounter--;\n return result;\n }\n\n async run(): Promise<void> {\n const sendRecords: SendRecord[] = [];\n\n let recoverResolver = resolver();\n let lastSendTime;\n\n // The number of active connections.\n let counter = 0;\n const delegate = this.#delegate;\n const {debug} = this.#lc;\n let delay = 0;\n\n debug?.('Starting connection loop');\n\n const sleepMaybeSkip: typeof sleep = ms =>\n Promise.race([this.#skipSleepsResolver.promise, sleep(ms)]);\n\n while (!this.#closed) {\n debug?.(\n didLastSendRequestFail(sendRecords)\n ? 'Last request failed. Trying again'\n : 'Waiting for a send',\n );\n\n // Wait until send is called or until the watchdog timer fires.\n const races = [this.#pendingResolver.promise];\n const t = delegate.watchdogTimer;\n if (t !== null) {\n // Wait for the watchdog timer to fire or the abort signal to be triggered.\n races.push(sleep(t, this.#abortSignal.signal).catch(() => {}));\n }\n await Promise.race(races);\n if (this.#closed) break;\n\n debug?.('Waiting for debounce');\n await sleepMaybeSkip(delegate.debounceDelay);\n if (this.#closed) break;\n debug?.('debounced');\n\n // This resolver is used to wait for incoming push calls.\n this.#pendingResolver = resolver();\n\n if (counter >= delegate.maxConnections) {\n debug?.('Too many request in flight. Waiting until one finishes...');\n await this.#waitUntilAvailableConnection();\n if (this.#closed) break;\n debug?.('...finished');\n }\n\n // We need to delay the next request even if there are no active requests\n // in case of error.\n if (counter > 0 || didLastSendRequestFail(sendRecords)) {\n delay = computeDelayAndUpdateDurations(delay, delegate, sendRecords);\n debug?.(\n didLastSendRequestFail(sendRecords)\n ? 'Last connection errored. Sleeping for'\n : 'More than one outstanding connection (' +\n counter +\n '). Sleeping for',\n delay,\n 'ms',\n );\n } else {\n // We set this to 0 here in case minDelayMs is mutated to a lower value\n // than the old delay so that we still get minDelayMs. This can happen\n // if we get an error during a run where minDelayMs is larger than the\n // current value of minDelayMs.\n delay = 0;\n }\n\n const clampedDelay = Math.min(\n delegate.maxDelayMs,\n Math.max(delegate.minDelayMs, delay),\n );\n if (lastSendTime !== undefined) {\n const timeSinceLastSend = Date.now() - lastSendTime;\n if (clampedDelay > timeSinceLastSend) {\n await Promise.race([\n sleepMaybeSkip(clampedDelay - timeSinceLastSend),\n recoverResolver.promise,\n ]);\n if (this.#closed) break;\n }\n }\n\n counter++;\n void (async () => {\n const start = Date.now();\n let ok: boolean;\n let error: unknown;\n try {\n lastSendTime = start;\n debug?.('Sending request');\n this.#skipSleepsResolver = resolver();\n ok = await delegate.invokeSend();\n debug?.('Send returned', ok);\n } catch (e) {\n debug?.('Send failed', e);\n error = e;\n ok = false;\n }\n if (this.#closed) {\n debug?.('Closed after invokeSend');\n return;\n }\n debug?.('Request done', {duration: Date.now() - start, ok});\n sendRecords.push({duration: Date.now() - start, ok});\n if (recovered(sendRecords)) {\n recoverResolver.resolve();\n recoverResolver = resolver();\n }\n counter--;\n this.#connectionAvailable();\n const sendResolver = this.#sendResolver;\n this.#sendResolver = resolver();\n if (error) {\n sendResolver.resolve({error});\n } else {\n sendResolver.resolve(undefined);\n }\n if (!ok) {\n // Keep trying\n this.#pendingResolver.resolve();\n }\n })();\n }\n }\n\n #waitingConnectionResolve: (() => void) | undefined = undefined;\n\n #connectionAvailable() {\n if (this.#waitingConnectionResolve) {\n const resolve = this.#waitingConnectionResolve;\n this.#waitingConnectionResolve = undefined;\n resolve();\n }\n }\n\n #waitUntilAvailableConnection() {\n const {promise, resolve} = resolver();\n this.#waitingConnectionResolve = resolve;\n return promise;\n }\n}\n\n// Number of connections to remember when computing the new delay.\nconst CONNECTION_MEMORY_COUNT = 9;\n\nfunction closeError() {\n return new Error('Closed');\n}\n\n// Computes a new delay based on the previous requests. We use the median of the\n// previous successful request divided by `maxConnections`. When we get errors\n// we do exponential backoff. As soon as we recover from an error we reset back\n// to delegate.minDelayMs.\nfunction computeDelayAndUpdateDurations(\n delay: number,\n delegate: ConnectionLoopDelegate,\n sendRecords: SendRecord[],\n): number {\n const {length} = sendRecords;\n if (length === 0) {\n return delay;\n }\n\n const {ok} = sendRecords[sendRecords.length - 1];\n const {maxConnections, minDelayMs} = delegate;\n\n if (!ok) {\n return delay === 0 ? minDelayMs : delay * 2;\n }\n\n if (length > 1) {\n // length > 1\n const previous: SendRecord = sendRecords[sendRecords.length - 2];\n\n // Prune\n while (sendRecords.length > CONNECTION_MEMORY_COUNT) {\n sendRecords.shift();\n }\n\n if (ok && !previous.ok) {\n // Recovered\n return minDelayMs;\n }\n }\n\n const med = median(\n sendRecords.filter(({ok}) => ok).map(({duration}) => duration),\n );\n\n return (med / maxConnections) | 0;\n}\n\nfunction median(values: number[]) {\n values.sort();\n const {length} = values;\n const half = length >> 1;\n if (length % 2 === 1) {\n return values[half];\n }\n return (values[half - 1] + values[half]) / 2;\n}\n\nfunction didLastSendRequestFail(sendRecords: SendRecord[]) {\n return sendRecords.length > 0 && !sendRecords[sendRecords.length - 1].ok;\n}\n\nfunction recovered(sendRecords: SendRecord[]) {\n return (\n sendRecords.length > 1 &&\n !sendRecords[sendRecords.length - 2].ok &&\n sendRecords[sendRecords.length - 1].ok\n );\n}\n"],"mappings":"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"}
@@ -1,40 +1,30 @@
1
1
  import { assertJSONObject } from "../../shared/src/json.js";
2
2
  import { stringCompare } from "../../shared/src/string-compare.js";
3
+ //#region ../replicache/src/cookies.ts
4
+ /**
5
+ * Compare two cookies.
6
+ * `null` is considered to be less than any other cookie.
7
+ */
3
8
  function compareCookies(a, b) {
4
- if (a === b) {
5
- return 0;
6
- }
7
- if (a === null) {
8
- return -1;
9
- }
10
- if (b === null) {
11
- return 1;
12
- }
13
- const cva = getCompareValue(a);
14
- const cvb = getCompareValue(b);
15
- if (typeof cva === "string" || typeof cvb === "string") {
16
- return stringCompare(String(cva), String(cvb));
17
- }
18
- return cva - cvb;
9
+ if (a === b) return 0;
10
+ if (a === null) return -1;
11
+ if (b === null) return 1;
12
+ const cva = getCompareValue(a);
13
+ const cvb = getCompareValue(b);
14
+ if (typeof cva === "string" || typeof cvb === "string") return stringCompare(String(cva), String(cvb));
15
+ return cva - cvb;
19
16
  }
20
17
  function getCompareValue(cookie) {
21
- if (typeof cookie === "string" || typeof cookie === "number") {
22
- return cookie;
23
- }
24
- return cookie.order;
18
+ if (typeof cookie === "string" || typeof cookie === "number") return cookie;
19
+ return cookie.order;
25
20
  }
26
21
  function assertCookie(v) {
27
- if (v === null || typeof v === "string" || typeof v === "number") {
28
- return;
29
- }
30
- assertJSONObject(v);
31
- if (typeof v.order === "string" || typeof v.order === "number") {
32
- return;
33
- }
34
- throw new Error("Invalid cookie");
22
+ if (v === null || typeof v === "string" || typeof v === "number") return;
23
+ assertJSONObject(v);
24
+ if (typeof v.order === "string" || typeof v.order === "number") return;
25
+ throw new Error("Invalid cookie");
35
26
  }
36
- export {
37
- assertCookie,
38
- compareCookies
39
- };
40
- //# sourceMappingURL=cookies.js.map
27
+ //#endregion
28
+ export { assertCookie, compareCookies };
29
+
30
+ //# sourceMappingURL=cookies.js.map