@rocicorp/zero 1.11.0 → 1.11.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 (737) hide show
  1. package/out/_virtual/{_@oxc-project_runtime@0.130.0/helpers → _@oxc-project_runtime@0.154.0/helpers/esm}/usingCtx.js +2 -2
  2. package/out/analyze-query/src/analyze-cli.js +2 -1
  3. package/out/analyze-query/src/analyze-cli.js.map +1 -1
  4. package/out/analyze-query/src/bin-analyze.js +5 -3
  5. package/out/analyze-query/src/bin-analyze.js.map +1 -1
  6. package/out/analyze-query/src/bin-transform.js +3 -2
  7. package/out/analyze-query/src/bin-transform.js.map +1 -1
  8. package/out/ast-to-zql/src/ast-to-zql.js.map +1 -1
  9. package/out/ast-to-zql/src/bin.js +3 -2
  10. package/out/ast-to-zql/src/bin.js.map +1 -1
  11. package/out/ast-to-zql/src/format.js.map +1 -1
  12. package/out/datadog/src/datadog-log-sink.js +5 -4
  13. package/out/datadog/src/datadog-log-sink.js.map +1 -1
  14. package/out/otel/src/log-options.js.map +1 -1
  15. package/out/replicache/src/btree/node.js +13 -11
  16. package/out/replicache/src/btree/node.js.map +1 -1
  17. package/out/replicache/src/btree/read.js +4 -2
  18. package/out/replicache/src/btree/read.js.map +1 -1
  19. package/out/replicache/src/btree/splice.js.map +1 -1
  20. package/out/replicache/src/btree/write.js +9 -5
  21. package/out/replicache/src/btree/write.js.map +1 -1
  22. package/out/replicache/src/config.js +1 -2
  23. package/out/replicache/src/connection-loop.js.map +1 -1
  24. package/out/replicache/src/dag/chunk.js +1 -1
  25. package/out/replicache/src/dag/gc.js.map +1 -1
  26. package/out/replicache/src/dag/lazy-store.js +8 -7
  27. package/out/replicache/src/dag/lazy-store.js.map +1 -1
  28. package/out/replicache/src/dag/store-impl.js +1 -1
  29. package/out/replicache/src/dag/store-impl.js.map +1 -1
  30. package/out/replicache/src/dag/visitor.js.map +1 -1
  31. package/out/replicache/src/db/commit.js +5 -3
  32. package/out/replicache/src/db/commit.js.map +1 -1
  33. package/out/replicache/src/db/read.js +1 -1
  34. package/out/replicache/src/db/read.js.map +1 -1
  35. package/out/replicache/src/db/rebase.js.map +1 -1
  36. package/out/replicache/src/db/write.js +5 -2
  37. package/out/replicache/src/db/write.js.map +1 -1
  38. package/out/replicache/src/deleted-clients.js +3 -2
  39. package/out/replicache/src/deleted-clients.js.map +1 -1
  40. package/out/replicache/src/expo-sqlite.js +1 -2
  41. package/out/replicache/src/frozen-json.js +1 -1
  42. package/out/replicache/src/frozen-json.js.map +1 -1
  43. package/out/replicache/src/get-default-puller.js +1 -1
  44. package/out/replicache/src/hash.js +1 -1
  45. package/out/replicache/src/hash.js.map +1 -1
  46. package/out/replicache/src/impl.js +1 -2
  47. package/out/replicache/src/index-defs.js +5 -3
  48. package/out/replicache/src/index-defs.js.map +1 -1
  49. package/out/replicache/src/kv/expo-sqlite/store.js +1 -1
  50. package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
  51. package/out/replicache/src/kv/idb-store.js +1 -1
  52. package/out/replicache/src/kv/idb-store.js.map +1 -1
  53. package/out/replicache/src/kv/mem-fallback-store.js +1 -1
  54. package/out/replicache/src/kv/mem-fallback-store.js.map +1 -1
  55. package/out/replicache/src/kv/mem-store.js.map +1 -1
  56. package/out/replicache/src/kv/op-sqlite/store.js.map +1 -1
  57. package/out/replicache/src/kv/op-sqlite/types.js.map +1 -1
  58. package/out/replicache/src/kv/read-impl.js.map +1 -1
  59. package/out/replicache/src/kv/sqlite-store.js +1 -1
  60. package/out/replicache/src/kv/sqlite-store.js.map +1 -1
  61. package/out/replicache/src/kv/write-impl-base.js +4 -1
  62. package/out/replicache/src/kv/write-impl-base.js.map +1 -1
  63. package/out/replicache/src/kv/write-impl.js.map +1 -1
  64. package/out/replicache/src/log-options.js +2 -1
  65. package/out/replicache/src/log-options.js.map +1 -1
  66. package/out/replicache/src/make-idb-name.js +1 -1
  67. package/out/replicache/src/new-client-channel.js +9 -7
  68. package/out/replicache/src/new-client-channel.js.map +1 -1
  69. package/out/replicache/src/on-persist-channel.js +1 -1
  70. package/out/replicache/src/on-persist-channel.js.map +1 -1
  71. package/out/replicache/src/op-sqlite.js +1 -2
  72. package/out/replicache/src/pending-mutations.js +2 -1
  73. package/out/replicache/src/pending-mutations.js.map +1 -1
  74. package/out/replicache/src/persist/client-gc.js +2 -2
  75. package/out/replicache/src/persist/client-gc.js.map +1 -1
  76. package/out/replicache/src/persist/client-group-gc.js +2 -2
  77. package/out/replicache/src/persist/client-group-gc.js.map +1 -1
  78. package/out/replicache/src/persist/client-groups.js +1 -1
  79. package/out/replicache/src/persist/client-groups.js.map +1 -1
  80. package/out/replicache/src/persist/clients.js +1 -1
  81. package/out/replicache/src/persist/clients.js.map +1 -1
  82. package/out/replicache/src/persist/collect-idb-databases.js +5 -4
  83. package/out/replicache/src/persist/collect-idb-databases.js.map +1 -1
  84. package/out/replicache/src/persist/gather-mem-only-visitor.js.map +1 -1
  85. package/out/replicache/src/persist/gather-not-cached-visitor.js.map +1 -1
  86. package/out/replicache/src/persist/heartbeat.js +2 -2
  87. package/out/replicache/src/persist/heartbeat.js.map +1 -1
  88. package/out/replicache/src/persist/idb-databases-store.js +1 -1
  89. package/out/replicache/src/persist/idb-databases-store.js.map +1 -1
  90. package/out/replicache/src/persist/make-client-id.js +1 -1
  91. package/out/replicache/src/persist/make-client-id.js.map +1 -1
  92. package/out/replicache/src/persist/persist.js +3 -2
  93. package/out/replicache/src/persist/persist.js.map +1 -1
  94. package/out/replicache/src/persist/refresh.js +8 -5
  95. package/out/replicache/src/persist/refresh.js.map +1 -1
  96. package/out/replicache/src/process-scheduler.js.map +1 -1
  97. package/out/replicache/src/replicache-impl.js +3 -3
  98. package/out/replicache/src/replicache-impl.js.map +1 -1
  99. package/out/replicache/src/scan-iterator.js.map +1 -1
  100. package/out/replicache/src/scan-options.js +7 -6
  101. package/out/replicache/src/scan-options.js.map +1 -1
  102. package/out/replicache/src/sqlite.js +1 -2
  103. package/out/replicache/src/subscriptions.js +1 -1
  104. package/out/replicache/src/subscriptions.js.map +1 -1
  105. package/out/replicache/src/sync/diff.js +3 -1
  106. package/out/replicache/src/sync/diff.js.map +1 -1
  107. package/out/replicache/src/sync/ids.js.map +1 -1
  108. package/out/replicache/src/sync/patch.js +2 -4
  109. package/out/replicache/src/sync/patch.js.map +1 -1
  110. package/out/replicache/src/sync/pull.js +3 -1
  111. package/out/replicache/src/sync/pull.js.map +1 -1
  112. package/out/replicache/src/sync/push.js.map +1 -1
  113. package/out/replicache/src/sync/request-id.js +1 -1
  114. package/out/replicache/src/sync/request-id.js.map +1 -1
  115. package/out/replicache/src/transactions.js +1 -1
  116. package/out/replicache/src/transactions.js.map +1 -1
  117. package/out/shared/src/arrays.js +4 -1
  118. package/out/shared/src/arrays.js.map +1 -1
  119. package/out/shared/src/asserts.js +1 -1
  120. package/out/shared/src/bigint-json.js.map +1 -1
  121. package/out/shared/src/broadcast-channel.js +1 -1
  122. package/out/shared/src/btree-set.js +11 -8
  123. package/out/shared/src/btree-set.js.map +1 -1
  124. package/out/shared/src/cache.js.map +1 -1
  125. package/out/shared/src/config.js +1 -1
  126. package/out/shared/src/custom-key-map.js.map +1 -1
  127. package/out/shared/src/custom-key-set.js.map +1 -1
  128. package/out/shared/src/deep-clone.js +1 -1
  129. package/out/shared/src/document-visible.js.map +1 -1
  130. package/out/shared/src/dotenv.js.map +1 -1
  131. package/out/shared/src/error.js +1 -1
  132. package/out/shared/src/error.js.map +1 -1
  133. package/out/shared/src/hash.js +2 -2
  134. package/out/shared/src/hash.js.map +1 -1
  135. package/out/shared/src/iterables.js.map +1 -1
  136. package/out/shared/src/json-schema.js.map +1 -1
  137. package/out/shared/src/json.js.map +1 -1
  138. package/out/shared/src/logging-test-utils.js +1 -1
  139. package/out/shared/src/logging.js +1 -1
  140. package/out/shared/src/logging.js.map +1 -1
  141. package/out/shared/src/navigator.js +1 -1
  142. package/out/shared/src/options.js +9 -12
  143. package/out/shared/src/options.js.map +1 -1
  144. package/out/shared/src/promise-race.js.map +1 -1
  145. package/out/shared/src/queue.js.map +1 -1
  146. package/out/shared/src/record-proxy.js.map +1 -1
  147. package/out/shared/src/ring-buffer.js.map +1 -1
  148. package/out/shared/src/size-of-value.js +7 -10
  149. package/out/shared/src/size-of-value.js.map +1 -1
  150. package/out/shared/src/sorted-entries.js.map +1 -1
  151. package/out/shared/src/tdigest-schema.js.map +1 -1
  152. package/out/shared/src/tdigest.js.map +1 -1
  153. package/out/shared/src/valita.js +1 -1
  154. package/out/shared/src/valita.js.map +1 -1
  155. package/out/z2s/src/compiler.js +2 -4
  156. package/out/z2s/src/compiler.js.map +1 -1
  157. package/out/z2s/src/sql.js +1 -1
  158. package/out/z2s/src/sql.js.map +1 -1
  159. package/out/zero/package.js +212 -189
  160. package/out/zero/package.js.map +1 -1
  161. package/out/zero/src/adapters/drizzle.js +1 -2
  162. package/out/zero/src/adapters/kysely.js +1 -2
  163. package/out/zero/src/adapters/pg.js +1 -2
  164. package/out/zero/src/adapters/postgresjs.js +1 -2
  165. package/out/zero/src/adapters/prisma.js +1 -2
  166. package/out/zero/src/analyze.js +1 -2
  167. package/out/zero/src/change-protocol/v0.js +1 -2
  168. package/out/zero/src/expo-sqlite.js +1 -2
  169. package/out/zero/src/op-sqlite.js +1 -2
  170. package/out/zero/src/react-native.js.map +1 -1
  171. package/out/zero/src/sqlite.js +1 -2
  172. package/out/zero/src/zero-cache-dev.js +10 -9
  173. package/out/zero/src/zero-cache-dev.js.map +1 -1
  174. package/out/zero/src/zero-out.js +2 -1
  175. package/out/zero/src/zero-out.js.map +1 -1
  176. package/out/zero-cache/src/auth/auth.js +1 -1
  177. package/out/zero-cache/src/auth/auth.js.map +1 -1
  178. package/out/zero-cache/src/auth/jwt.js +4 -1
  179. package/out/zero-cache/src/auth/jwt.js.map +1 -1
  180. package/out/zero-cache/src/auth/load-permissions.js.map +1 -1
  181. package/out/zero-cache/src/auth/read-authorizer.js +3 -2
  182. package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
  183. package/out/zero-cache/src/auth/write-authorizer.js +5 -16
  184. package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
  185. package/out/zero-cache/src/config/network.js +1 -1
  186. package/out/zero-cache/src/config/network.js.map +1 -1
  187. package/out/zero-cache/src/config/server-context.js.map +1 -1
  188. package/out/zero-cache/src/config/zero-config.js +2 -2
  189. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  190. package/out/zero-cache/src/custom/fetch.js +1 -1
  191. package/out/zero-cache/src/custom/fetch.js.map +1 -1
  192. package/out/zero-cache/src/custom-queries/transform-query.js.map +1 -1
  193. package/out/zero-cache/src/db/create.js.map +1 -1
  194. package/out/zero-cache/src/db/index-predicate.js.map +1 -1
  195. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  196. package/out/zero-cache/src/db/migration-lite.js +1 -1
  197. package/out/zero-cache/src/db/migration-lite.js.map +1 -1
  198. package/out/zero-cache/src/db/migration.js +5 -3
  199. package/out/zero-cache/src/db/migration.js.map +1 -1
  200. package/out/zero-cache/src/db/pg-copy-binary.js +4 -3
  201. package/out/zero-cache/src/db/pg-copy-binary.js.map +1 -1
  202. package/out/zero-cache/src/db/pg-copy.js +0 -1
  203. package/out/zero-cache/src/db/pg-copy.js.map +1 -1
  204. package/out/zero-cache/src/db/pg-to-lite.js +1 -1
  205. package/out/zero-cache/src/db/pg-to-lite.js.map +1 -1
  206. package/out/zero-cache/src/db/run-transaction.js.map +1 -1
  207. package/out/zero-cache/src/db/specs.js +7 -5
  208. package/out/zero-cache/src/db/specs.js.map +1 -1
  209. package/out/zero-cache/src/db/sqlite-corruption.js.map +1 -1
  210. package/out/zero-cache/src/db/transaction-pool.js +5 -3
  211. package/out/zero-cache/src/db/transaction-pool.js.map +1 -1
  212. package/out/zero-cache/src/db/warmup.js.map +1 -1
  213. package/out/zero-cache/src/observability/events.js.map +1 -1
  214. package/out/zero-cache/src/observability/log-throttle.js.map +1 -1
  215. package/out/zero-cache/src/observability/metrics.js.map +1 -1
  216. package/out/zero-cache/src/scripts/deploy-permissions.js +4 -2
  217. package/out/zero-cache/src/scripts/deploy-permissions.js.map +1 -1
  218. package/out/zero-cache/src/scripts/permissions.js.map +1 -1
  219. package/out/zero-cache/src/server/anonymous-otel-start.js +2 -1
  220. package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
  221. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  222. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  223. package/out/zero-cache/src/server/logging.js +1 -1
  224. package/out/zero-cache/src/server/logging.js.map +1 -1
  225. package/out/zero-cache/src/server/main.js.map +1 -1
  226. package/out/zero-cache/src/server/otel-log-sink.js.map +1 -1
  227. package/out/zero-cache/src/server/otel-start.js.map +1 -1
  228. package/out/zero-cache/src/server/reaper.js +2 -2
  229. package/out/zero-cache/src/server/reaper.js.map +1 -1
  230. package/out/zero-cache/src/server/replicator.js.map +1 -1
  231. package/out/zero-cache/src/server/runner/run-worker.js +2 -1
  232. package/out/zero-cache/src/server/runner/run-worker.js.map +1 -1
  233. package/out/zero-cache/src/server/runner/runtime.js +2 -1
  234. package/out/zero-cache/src/server/runner/runtime.js.map +1 -1
  235. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  236. package/out/zero-cache/src/server/shadow-syncer.js +1 -1
  237. package/out/zero-cache/src/server/shadow-syncer.js.map +1 -1
  238. package/out/zero-cache/src/server/slot-keeper.js.map +1 -1
  239. package/out/zero-cache/src/server/syncer-assigner.js.map +1 -1
  240. package/out/zero-cache/src/server/syncer.js.map +1 -1
  241. package/out/zero-cache/src/server/worker-dispatcher.js +1 -1
  242. package/out/zero-cache/src/server/worker-dispatcher.js.map +1 -1
  243. package/out/zero-cache/src/server/worker-urls.js.map +1 -1
  244. package/out/zero-cache/src/services/analyze.js +1 -1
  245. package/out/zero-cache/src/services/analyze.js.map +1 -1
  246. package/out/zero-cache/src/services/change-source/common/backfill-manager.js +1 -1
  247. package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
  248. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -1
  249. package/out/zero-cache/src/services/change-source/common/init-cleanup.js.map +1 -1
  250. package/out/zero-cache/src/services/change-source/common/replica-restore.js.map +1 -1
  251. package/out/zero-cache/src/services/change-source/common/replica-schema.js +3 -3
  252. package/out/zero-cache/src/services/change-source/common/replica-schema.js.map +1 -1
  253. package/out/zero-cache/src/services/change-source/custom/change-source.js +1 -1
  254. package/out/zero-cache/src/services/change-source/custom/change-source.js.map +1 -1
  255. package/out/zero-cache/src/services/change-source/pg/backfill-metadata.js.map +1 -1
  256. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js +3 -3
  257. package/out/zero-cache/src/services/change-source/pg/backfill-stream.js.map +1 -1
  258. package/out/zero-cache/src/services/change-source/pg/change-source-init.js +1 -1
  259. package/out/zero-cache/src/services/change-source/pg/change-source-init.js.map +1 -1
  260. package/out/zero-cache/src/services/change-source/pg/change-source.js +4 -6
  261. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  262. package/out/zero-cache/src/services/change-source/pg/decommission.js +2 -1
  263. package/out/zero-cache/src/services/change-source/pg/decommission.js.map +1 -1
  264. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +5 -3
  265. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  266. package/out/zero-cache/src/services/change-source/pg/logical-replication/binary-reader.js.map +1 -1
  267. package/out/zero-cache/src/services/change-source/pg/logical-replication/pgoutput-parser.js.map +1 -1
  268. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js +3 -2
  269. package/out/zero-cache/src/services/change-source/pg/logical-replication/stream.js.map +1 -1
  270. package/out/zero-cache/src/services/change-source/pg/lsn.js.map +1 -1
  271. package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.js +2 -2
  272. package/out/zero-cache/src/services/change-source/pg/replication-slot-cleanup-monitor.js.map +1 -1
  273. package/out/zero-cache/src/services/change-source/pg/replication-slot-health.js +1 -1
  274. package/out/zero-cache/src/services/change-source/pg/replication-slot-health.js.map +1 -1
  275. package/out/zero-cache/src/services/change-source/pg/replication-slots.js +3 -3
  276. package/out/zero-cache/src/services/change-source/pg/replication-slots.js.map +1 -1
  277. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +1 -1
  278. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  279. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js +13 -12
  280. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js.map +1 -1
  281. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  282. package/out/zero-cache/src/services/change-source/pg/schema/published.js +1 -1
  283. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
  284. package/out/zero-cache/src/services/change-source/pg/schema/replica-stage-enum.js.map +1 -1
  285. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +9 -6
  286. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  287. package/out/zero-cache/src/services/change-source/pg/schema/validation.js +1 -1
  288. package/out/zero-cache/src/services/change-source/pg/schema/validation.js.map +1 -1
  289. package/out/zero-cache/src/services/change-source/protocol/backfill-progress.js +1 -1
  290. package/out/zero-cache/src/services/change-source/protocol/backfill-progress.js.map +1 -1
  291. package/out/zero-cache/src/services/change-source/protocol/current/control.js.map +1 -1
  292. package/out/zero-cache/src/services/change-source/protocol/current/data.js.map +1 -1
  293. package/out/zero-cache/src/services/change-source/protocol/current/downstream.js.map +1 -1
  294. package/out/zero-cache/src/services/change-source/protocol/current/status.js.map +1 -1
  295. package/out/zero-cache/src/services/change-source/protocol/current/upstream.js.map +1 -1
  296. package/out/zero-cache/src/services/change-source/protocol/current.js +1 -1
  297. package/out/zero-cache/src/services/change-source/protocol/mod.js +1 -2
  298. package/out/zero-cache/src/services/change-streamer/backfill-state-tracker.js.map +1 -1
  299. package/out/zero-cache/src/services/change-streamer/backfill-state.js +1 -1
  300. package/out/zero-cache/src/services/change-streamer/backfill-state.js.map +1 -1
  301. package/out/zero-cache/src/services/change-streamer/backup-cleanup-monitor-factory.js.map +1 -1
  302. package/out/zero-cache/src/services/change-streamer/backup-monitor.js.map +1 -1
  303. package/out/zero-cache/src/services/change-streamer/broadcast.js +1 -1
  304. package/out/zero-cache/src/services/change-streamer/broadcast.js.map +1 -1
  305. package/out/zero-cache/src/services/change-streamer/change-log-initializer.js +2 -2
  306. package/out/zero-cache/src/services/change-streamer/change-log-initializer.js.map +1 -1
  307. package/out/zero-cache/src/services/change-streamer/change-log-transaction-hash.js.map +1 -1
  308. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +4 -2
  309. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  310. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js +21 -21
  311. package/out/zero-cache/src/services/change-streamer/change-streamer-service.js.map +1 -1
  312. package/out/zero-cache/src/services/change-streamer/change-streamer.js +1 -1
  313. package/out/zero-cache/src/services/change-streamer/change-streamer.js.map +1 -1
  314. package/out/zero-cache/src/services/change-streamer/drain-tracker.js.map +1 -1
  315. package/out/zero-cache/src/services/change-streamer/forwarder.js +11 -10
  316. package/out/zero-cache/src/services/change-streamer/forwarder.js.map +1 -1
  317. package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js +1 -1
  318. package/out/zero-cache/src/services/change-streamer/litestream-sync-requester.js.map +1 -1
  319. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js +3 -3
  320. package/out/zero-cache/src/services/change-streamer/litestream3-prometheus-poller.js.map +1 -1
  321. package/out/zero-cache/src/services/change-streamer/replica-poller.js +1 -1
  322. package/out/zero-cache/src/services/change-streamer/replica-poller.js.map +1 -1
  323. package/out/zero-cache/src/services/change-streamer/restore-admission.js +12 -1
  324. package/out/zero-cache/src/services/change-streamer/restore-admission.js.map +1 -1
  325. package/out/zero-cache/src/services/change-streamer/schema/init.js +1 -1
  326. package/out/zero-cache/src/services/change-streamer/schema/init.js.map +1 -1
  327. package/out/zero-cache/src/services/change-streamer/schema/tables.js +1 -1
  328. package/out/zero-cache/src/services/change-streamer/schema/tables.js.map +1 -1
  329. package/out/zero-cache/src/services/change-streamer/snapshot-message.js +1 -1
  330. package/out/zero-cache/src/services/change-streamer/snapshot-message.js.map +1 -1
  331. package/out/zero-cache/src/services/change-streamer/snapshot-reservations.js.map +1 -1
  332. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js +1 -1
  333. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-catchup.js.map +1 -1
  334. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.js +1 -1
  335. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-comparator.js.map +1 -1
  336. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-purge-scheduler.js.map +1 -1
  337. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-read-router.js.map +1 -1
  338. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js +1 -1
  339. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-reader.js.map +1 -1
  340. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js +1 -3
  341. package/out/zero-cache/src/services/change-streamer/sqlite-change-log-writer.js.map +1 -1
  342. package/out/zero-cache/src/services/change-streamer/storer.js +1 -1
  343. package/out/zero-cache/src/services/change-streamer/storer.js.map +1 -1
  344. package/out/zero-cache/src/services/change-streamer/subscribe.js +1 -1
  345. package/out/zero-cache/src/services/change-streamer/subscribe.js.map +1 -1
  346. package/out/zero-cache/src/services/change-streamer/subscriber.js +2 -2
  347. package/out/zero-cache/src/services/change-streamer/subscriber.js.map +1 -1
  348. package/out/zero-cache/src/services/change-streamer/upstream-acker.js +0 -1
  349. package/out/zero-cache/src/services/change-streamer/upstream-acker.js.map +1 -1
  350. package/out/zero-cache/src/services/heapz.js +2 -1
  351. package/out/zero-cache/src/services/heapz.js.map +1 -1
  352. package/out/zero-cache/src/services/http-service.js.map +1 -1
  353. package/out/zero-cache/src/services/life-cycle.js +1 -1
  354. package/out/zero-cache/src/services/life-cycle.js.map +1 -1
  355. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js +4 -2
  356. package/out/zero-cache/src/services/limiter/sliding-window-limiter.js.map +1 -1
  357. package/out/zero-cache/src/services/litestream/commands.js +1 -1
  358. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  359. package/out/zero-cache/src/services/litestream/litestream-checkpointer.js +2 -2
  360. package/out/zero-cache/src/services/litestream/litestream-checkpointer.js.map +1 -1
  361. package/out/zero-cache/src/services/litestream/litestream-controller.js.map +1 -1
  362. package/out/zero-cache/src/services/litestream/metrics.js.map +1 -1
  363. package/out/zero-cache/src/services/litestream/restore-progress.js.map +1 -1
  364. package/out/zero-cache/src/services/mutagen/mutagen.js +1 -1
  365. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  366. package/out/zero-cache/src/services/mutagen/pusher.js +3 -2
  367. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  368. package/out/zero-cache/src/services/plannerz.js +4 -3
  369. package/out/zero-cache/src/services/plannerz.js.map +1 -1
  370. package/out/zero-cache/src/services/profz.js +5 -3
  371. package/out/zero-cache/src/services/profz.js.map +1 -1
  372. package/out/zero-cache/src/services/replicator/change-log-cookies.js.map +1 -1
  373. package/out/zero-cache/src/services/replicator/change-log-db.js +3 -2
  374. package/out/zero-cache/src/services/replicator/change-log-db.js.map +1 -1
  375. package/out/zero-cache/src/services/replicator/change-log-stream-writer.js +1 -1
  376. package/out/zero-cache/src/services/replicator/change-log-stream-writer.js.map +1 -1
  377. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  378. package/out/zero-cache/src/services/replicator/drain-handler.js.map +1 -1
  379. package/out/zero-cache/src/services/replicator/incremental-sync.js +1 -1
  380. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  381. package/out/zero-cache/src/services/replicator/notifier.js.map +1 -1
  382. package/out/zero-cache/src/services/replicator/replication-status.js +4 -3
  383. package/out/zero-cache/src/services/replicator/replication-status.js.map +1 -1
  384. package/out/zero-cache/src/services/replicator/replicator.js.map +1 -1
  385. package/out/zero-cache/src/services/replicator/reporter/recorder.js +1 -1
  386. package/out/zero-cache/src/services/replicator/reporter/recorder.js.map +1 -1
  387. package/out/zero-cache/src/services/replicator/reporter/report-schema.js +1 -1
  388. package/out/zero-cache/src/services/replicator/reporter/report-schema.js.map +1 -1
  389. package/out/zero-cache/src/services/replicator/schema/backfilling.js +1 -1
  390. package/out/zero-cache/src/services/replicator/schema/backfilling.js.map +1 -1
  391. package/out/zero-cache/src/services/replicator/schema/change-log.js.map +1 -1
  392. package/out/zero-cache/src/services/replicator/schema/column-metadata.js +1 -1
  393. package/out/zero-cache/src/services/replicator/schema/column-metadata.js.map +1 -1
  394. package/out/zero-cache/src/services/replicator/schema/replication-state.js +10 -7
  395. package/out/zero-cache/src/services/replicator/schema/replication-state.js.map +1 -1
  396. package/out/zero-cache/src/services/replicator/schema/table-metadata.js.map +1 -1
  397. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js +1 -1
  398. package/out/zero-cache/src/services/replicator/sqlite-change-log-observability.js.map +1 -1
  399. package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.js +1 -1
  400. package/out/zero-cache/src/services/replicator/sqlite-change-log-purger.js.map +1 -1
  401. package/out/zero-cache/src/services/replicator/write-worker-client.js +1 -1
  402. package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -1
  403. package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -1
  404. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  405. package/out/zero-cache/src/services/runner.js.map +1 -1
  406. package/out/zero-cache/src/services/running-state.js.map +1 -1
  407. package/out/zero-cache/src/services/shadow-sync/shadow-sync-service.js.map +1 -1
  408. package/out/zero-cache/src/services/statz.js +2 -1
  409. package/out/zero-cache/src/services/statz.js.map +1 -1
  410. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +2 -2
  411. package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
  412. package/out/zero-cache/src/services/view-syncer/advancement-metrics.js.map +1 -1
  413. package/out/zero-cache/src/services/view-syncer/batch-pacer.js.map +1 -1
  414. package/out/zero-cache/src/services/view-syncer/client-handler.js +4 -2
  415. package/out/zero-cache/src/services/view-syncer/client-handler.js.map +1 -1
  416. package/out/zero-cache/src/services/view-syncer/client-schema.js.map +1 -1
  417. package/out/zero-cache/src/services/view-syncer/connection-context-manager.js.map +1 -1
  418. package/out/zero-cache/src/services/view-syncer/cvr-purger.js +2 -2
  419. package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
  420. package/out/zero-cache/src/services/view-syncer/cvr-store.js +9 -5
  421. package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
  422. package/out/zero-cache/src/services/view-syncer/cvr.js +3 -2
  423. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  424. package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.js +1 -1
  425. package/out/zero-cache/src/services/view-syncer/deferred-writes-budget.js.map +1 -1
  426. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  427. package/out/zero-cache/src/services/view-syncer/e2e-serving-lag.js.map +1 -1
  428. package/out/zero-cache/src/services/view-syncer/hydration-budget.js.map +1 -1
  429. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js +2 -2
  430. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js.map +1 -1
  431. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +5 -3
  432. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  433. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +6 -4
  434. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  435. package/out/zero-cache/src/services/view-syncer/plan-warnings.js.map +1 -1
  436. package/out/zero-cache/src/services/view-syncer/push-cost.js.map +1 -1
  437. package/out/zero-cache/src/services/view-syncer/push-cutoff.js.map +1 -1
  438. package/out/zero-cache/src/services/view-syncer/query-covering.js.map +1 -1
  439. package/out/zero-cache/src/services/view-syncer/query-shape.js.map +1 -1
  440. package/out/zero-cache/src/services/view-syncer/query-stats.js +1 -1
  441. package/out/zero-cache/src/services/view-syncer/query-stats.js.map +1 -1
  442. package/out/zero-cache/src/services/view-syncer/row-record-cache.js.map +1 -1
  443. package/out/zero-cache/src/services/view-syncer/schema/cvr.js +1 -1
  444. package/out/zero-cache/src/services/view-syncer/schema/types.js +1 -1
  445. package/out/zero-cache/src/services/view-syncer/schema/types.js.map +1 -1
  446. package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.js +7 -1
  447. package/out/zero-cache/src/services/view-syncer/snapshot-row-cache.js.map +1 -1
  448. package/out/zero-cache/src/services/view-syncer/snapshotter.js +3 -2
  449. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  450. package/out/zero-cache/src/services/view-syncer/ttl-clock.js.map +1 -1
  451. package/out/zero-cache/src/services/view-syncer/view-syncer.js +4 -6
  452. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  453. package/out/zero-cache/src/types/error-with-level.js.map +1 -1
  454. package/out/zero-cache/src/types/lexi-version.js.map +1 -1
  455. package/out/zero-cache/src/types/lite.js +1 -1
  456. package/out/zero-cache/src/types/lite.js.map +1 -1
  457. package/out/zero-cache/src/types/pg-data-type.js +1 -1
  458. package/out/zero-cache/src/types/pg-data-type.js.map +1 -1
  459. package/out/zero-cache/src/types/pg.js +6 -4
  460. package/out/zero-cache/src/types/pg.js.map +1 -1
  461. package/out/zero-cache/src/types/poke-chunk.js +2 -2
  462. package/out/zero-cache/src/types/poke-chunk.js.map +1 -1
  463. package/out/zero-cache/src/types/processes.js +1 -1
  464. package/out/zero-cache/src/types/processes.js.map +1 -1
  465. package/out/zero-cache/src/types/profiler.js.map +1 -1
  466. package/out/zero-cache/src/types/row-key.js.map +1 -1
  467. package/out/zero-cache/src/types/sql.js.map +1 -1
  468. package/out/zero-cache/src/types/streams.js +10 -9
  469. package/out/zero-cache/src/types/streams.js.map +1 -1
  470. package/out/zero-cache/src/types/strings.js.map +1 -1
  471. package/out/zero-cache/src/types/subscription.js.map +1 -1
  472. package/out/zero-cache/src/types/timeout.js +1 -1
  473. package/out/zero-cache/src/types/websocket-handoff.js +1 -1
  474. package/out/zero-cache/src/types/ws.js +1 -1
  475. package/out/zero-cache/src/workers/connection.js +2 -3
  476. package/out/zero-cache/src/workers/connection.js.map +1 -1
  477. package/out/zero-cache/src/workers/mutator.js.map +1 -1
  478. package/out/zero-cache/src/workers/replicator.js +5 -4
  479. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  480. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  481. package/out/zero-cache/src/workers/syncer.js +2 -2
  482. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  483. package/out/zero-client/src/client/active-clients-manager.js +1 -1
  484. package/out/zero-client/src/client/active-clients-manager.js.map +1 -1
  485. package/out/zero-client/src/client/bindings.js +11 -11
  486. package/out/zero-client/src/client/connection-manager.js.map +1 -1
  487. package/out/zero-client/src/client/connection.js +1 -1
  488. package/out/zero-client/src/client/connection.js.map +1 -1
  489. package/out/zero-client/src/client/context.js.map +1 -1
  490. package/out/zero-client/src/client/crud-impl.js +1 -1
  491. package/out/zero-client/src/client/crud-impl.js.map +1 -1
  492. package/out/zero-client/src/client/crud.js +1 -1
  493. package/out/zero-client/src/client/crud.js.map +1 -1
  494. package/out/zero-client/src/client/custom.js +1 -1
  495. package/out/zero-client/src/client/custom.js.map +1 -1
  496. package/out/zero-client/src/client/delete-clients-manager.js.map +1 -1
  497. package/out/zero-client/src/client/enable-analytics.js +1 -1
  498. package/out/zero-client/src/client/enable-analytics.js.map +1 -1
  499. package/out/zero-client/src/client/error.js.map +1 -1
  500. package/out/zero-client/src/client/inspector/client-group.js.map +1 -1
  501. package/out/zero-client/src/client/inspector/client.js.map +1 -1
  502. package/out/zero-client/src/client/inspector/html-dialog-prompt.js +1 -1
  503. package/out/zero-client/src/client/inspector/html-dialog-prompt.js.map +1 -1
  504. package/out/zero-client/src/client/inspector/inspector.js.map +1 -1
  505. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -1
  506. package/out/zero-client/src/client/inspector/query.js.map +1 -1
  507. package/out/zero-client/src/client/ivm-branch.js +1 -3
  508. package/out/zero-client/src/client/ivm-branch.js.map +1 -1
  509. package/out/zero-client/src/client/keys.js +2 -1
  510. package/out/zero-client/src/client/keys.js.map +1 -1
  511. package/out/zero-client/src/client/log-options.js.map +1 -1
  512. package/out/zero-client/src/client/make-replicache-mutators.js +5 -3
  513. package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
  514. package/out/zero-client/src/client/metrics.js +3 -5
  515. package/out/zero-client/src/client/metrics.js.map +1 -1
  516. package/out/zero-client/src/client/mutation-tracker.js.map +1 -1
  517. package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
  518. package/out/zero-client/src/client/options.js.map +1 -1
  519. package/out/zero-client/src/client/query-manager.js +2 -2
  520. package/out/zero-client/src/client/query-manager.js.map +1 -1
  521. package/out/zero-client/src/client/reload-error-handler.js +4 -3
  522. package/out/zero-client/src/client/reload-error-handler.js.map +1 -1
  523. package/out/zero-client/src/client/version.js +1 -1
  524. package/out/zero-client/src/client/zero-poke-handler.js +1 -1
  525. package/out/zero-client/src/client/zero-poke-handler.js.map +1 -1
  526. package/out/zero-client/src/client/zero-rep.js.map +1 -1
  527. package/out/zero-client/src/client/zero.js +19 -11
  528. package/out/zero-client/src/client/zero.js.map +1 -1
  529. package/out/zero-client/src/mod.js +23 -23
  530. package/out/zero-client/src/util/nanoid.js.map +1 -1
  531. package/out/zero-permissions/src/permissions.js +3 -2
  532. package/out/zero-permissions/src/permissions.js.map +1 -1
  533. package/out/zero-pg/src/mod.js +9 -9
  534. package/out/zero-protocol/src/analyze-query-result.js +1 -1
  535. package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
  536. package/out/zero-protocol/src/application-error.js.map +1 -1
  537. package/out/zero-protocol/src/ast.js +19 -9
  538. package/out/zero-protocol/src/ast.js.map +1 -1
  539. package/out/zero-protocol/src/change-desired-queries.js.map +1 -1
  540. package/out/zero-protocol/src/client-schema.js +1 -1
  541. package/out/zero-protocol/src/client-schema.js.map +1 -1
  542. package/out/zero-protocol/src/close-connection.js +1 -1
  543. package/out/zero-protocol/src/close-connection.js.map +1 -1
  544. package/out/zero-protocol/src/connect.js +1 -1
  545. package/out/zero-protocol/src/connect.js.map +1 -1
  546. package/out/zero-protocol/src/custom-queries.js +1 -1
  547. package/out/zero-protocol/src/custom-queries.js.map +1 -1
  548. package/out/zero-protocol/src/data.js +4 -2
  549. package/out/zero-protocol/src/data.js.map +1 -1
  550. package/out/zero-protocol/src/delete-clients.js.map +1 -1
  551. package/out/zero-protocol/src/down.js.map +1 -1
  552. package/out/zero-protocol/src/error.js.map +1 -1
  553. package/out/zero-protocol/src/inspect-down.d.ts +81 -81
  554. package/out/zero-protocol/src/inspect-down.js +1 -1
  555. package/out/zero-protocol/src/inspect-down.js.map +1 -1
  556. package/out/zero-protocol/src/inspect-up.js +1 -1
  557. package/out/zero-protocol/src/inspect-up.js.map +1 -1
  558. package/out/zero-protocol/src/mutate-server.js +1 -1
  559. package/out/zero-protocol/src/mutate-server.js.map +1 -1
  560. package/out/zero-protocol/src/mutation-id.js.map +1 -1
  561. package/out/zero-protocol/src/mutation.js +1 -1
  562. package/out/zero-protocol/src/mutation.js.map +1 -1
  563. package/out/zero-protocol/src/mutations-patch.js +1 -1
  564. package/out/zero-protocol/src/mutations-patch.js.map +1 -1
  565. package/out/zero-protocol/src/ping.js +1 -1
  566. package/out/zero-protocol/src/ping.js.map +1 -1
  567. package/out/zero-protocol/src/poke.js +1 -1
  568. package/out/zero-protocol/src/poke.js.map +1 -1
  569. package/out/zero-protocol/src/pong.js +1 -1
  570. package/out/zero-protocol/src/pong.js.map +1 -1
  571. package/out/zero-protocol/src/primary-key.js.map +1 -1
  572. package/out/zero-protocol/src/protocol-version.js +1 -0
  573. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  574. package/out/zero-protocol/src/pull.js +1 -1
  575. package/out/zero-protocol/src/pull.js.map +1 -1
  576. package/out/zero-protocol/src/push.js +1 -1
  577. package/out/zero-protocol/src/push.js.map +1 -1
  578. package/out/zero-protocol/src/queries-patch.js +1 -1
  579. package/out/zero-protocol/src/queries-patch.js.map +1 -1
  580. package/out/zero-protocol/src/query-hash-visitor.js.map +1 -1
  581. package/out/zero-protocol/src/query-hash.js +2 -2
  582. package/out/zero-protocol/src/query-server.js +1 -1
  583. package/out/zero-protocol/src/query-server.js.map +1 -1
  584. package/out/zero-protocol/src/row-patch.js.map +1 -1
  585. package/out/zero-protocol/src/up.js.map +1 -1
  586. package/out/zero-protocol/src/update-auth.js.map +1 -1
  587. package/out/zero-protocol/src/version.js.map +1 -1
  588. package/out/zero-react/src/bindings.js +11 -11
  589. package/out/zero-react/src/mod.js +5 -5
  590. package/out/zero-react/src/use-query.js +1 -1
  591. package/out/zero-react/src/use-query.js.map +1 -1
  592. package/out/zero-react/src/zero-provider.d.ts +1 -1
  593. package/out/zero-react/src/zero-provider.d.ts.map +1 -1
  594. package/out/zero-react/src/zero-provider.js +2 -1
  595. package/out/zero-react/src/zero-provider.js.map +1 -1
  596. package/out/zero-react/src/zero.js +23 -23
  597. package/out/zero-schema/src/builder/schema-builder.js +3 -2
  598. package/out/zero-schema/src/builder/schema-builder.js.map +1 -1
  599. package/out/zero-schema/src/builder/table-builder.js +1 -1
  600. package/out/zero-schema/src/builder/table-builder.js.map +1 -1
  601. package/out/zero-schema/src/compiled-permissions.js.map +1 -1
  602. package/out/zero-schema/src/name-mapper.js +7 -5
  603. package/out/zero-schema/src/name-mapper.js.map +1 -1
  604. package/out/zero-schema/src/schema-config.js +1 -1
  605. package/out/zero-schema/src/schema-config.js.map +1 -1
  606. package/out/zero-server/src/adapters/drizzle.js.map +1 -1
  607. package/out/zero-server/src/adapters/kysely.js.map +1 -1
  608. package/out/zero-server/src/adapters/pg.js.map +1 -1
  609. package/out/zero-server/src/adapters/postgresjs.js.map +1 -1
  610. package/out/zero-server/src/adapters/prisma.js.map +1 -1
  611. package/out/zero-server/src/closable-db-transaction.js.map +1 -1
  612. package/out/zero-server/src/custom.js +1 -1
  613. package/out/zero-server/src/custom.js.map +1 -1
  614. package/out/zero-server/src/mod.js +8 -8
  615. package/out/zero-server/src/process-mutations.js.map +1 -1
  616. package/out/zero-server/src/push-processor.js.map +1 -1
  617. package/out/zero-server/src/queries/process-queries.js +2 -1
  618. package/out/zero-server/src/queries/process-queries.js.map +1 -1
  619. package/out/zero-server/src/schema.js +7 -7
  620. package/out/zero-server/src/schema.js.map +1 -1
  621. package/out/zero-server/src/zql-database.js.map +1 -1
  622. package/out/zero-solid/src/bindings.js +11 -11
  623. package/out/zero-solid/src/mod.js +5 -5
  624. package/out/zero-solid/src/solid-view.js +1 -1
  625. package/out/zero-solid/src/solid-view.js.map +1 -1
  626. package/out/zero-solid/src/use-connection-state.js +2 -1
  627. package/out/zero-solid/src/use-connection-state.js.map +1 -1
  628. package/out/zero-solid/src/use-query.js.map +1 -1
  629. package/out/zero-solid/src/use-zero-online.js +2 -1
  630. package/out/zero-solid/src/use-zero-online.js.map +1 -1
  631. package/out/zero-solid/src/use-zero.js +3 -2
  632. package/out/zero-solid/src/use-zero.js.map +1 -1
  633. package/out/zero-solid/src/zero.js +23 -23
  634. package/out/zero-types/src/name-mapper.js.map +1 -1
  635. package/out/zql/src/builder/builder.js +15 -13
  636. package/out/zql/src/builder/builder.js.map +1 -1
  637. package/out/zql/src/builder/correlated-predicate-pushdown.js.map +1 -1
  638. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  639. package/out/zql/src/builder/like.js +0 -1
  640. package/out/zql/src/builder/like.js.map +1 -1
  641. package/out/zql/src/ivm/array-view.js.map +1 -1
  642. package/out/zql/src/ivm/cap.js.map +1 -1
  643. package/out/zql/src/ivm/constraint.js +1 -1
  644. package/out/zql/src/ivm/constraint.js.map +1 -1
  645. package/out/zql/src/ivm/data.js.map +1 -1
  646. package/out/zql/src/ivm/deferred-input.js.map +1 -1
  647. package/out/zql/src/ivm/exists.js +20 -18
  648. package/out/zql/src/ivm/exists.js.map +1 -1
  649. package/out/zql/src/ivm/fan-in.js.map +1 -1
  650. package/out/zql/src/ivm/fan-out.js.map +1 -1
  651. package/out/zql/src/ivm/filter-operators.js +1 -1
  652. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  653. package/out/zql/src/ivm/filter-push.js.map +1 -1
  654. package/out/zql/src/ivm/filter.js.map +1 -1
  655. package/out/zql/src/ivm/flipped-join.js +1 -3
  656. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  657. package/out/zql/src/ivm/join-index-tap.js.map +1 -1
  658. package/out/zql/src/ivm/join-index.js.map +1 -1
  659. package/out/zql/src/ivm/join-utils.js +11 -13
  660. package/out/zql/src/ivm/join-utils.js.map +1 -1
  661. package/out/zql/src/ivm/join.js.map +1 -1
  662. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
  663. package/out/zql/src/ivm/memory-source.js +26 -22
  664. package/out/zql/src/ivm/memory-source.js.map +1 -1
  665. package/out/zql/src/ivm/memory-storage.js.map +1 -1
  666. package/out/zql/src/ivm/operator.js +2 -2
  667. package/out/zql/src/ivm/push-accumulated.js +0 -1
  668. package/out/zql/src/ivm/push-accumulated.js.map +1 -1
  669. package/out/zql/src/ivm/skip-yields.js.map +1 -1
  670. package/out/zql/src/ivm/skip.js.map +1 -1
  671. package/out/zql/src/ivm/take-gate.js.map +1 -1
  672. package/out/zql/src/ivm/take.js +1 -1
  673. package/out/zql/src/ivm/take.js.map +1 -1
  674. package/out/zql/src/ivm/union-fan-in.js +1 -1
  675. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  676. package/out/zql/src/ivm/union-fan-out.js.map +1 -1
  677. package/out/zql/src/ivm/view-apply-change.js +1 -1
  678. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  679. package/out/zql/src/mutate/crud.js +3 -2
  680. package/out/zql/src/mutate/crud.js.map +1 -1
  681. package/out/zql/src/planner/planner-builder.js +1 -1
  682. package/out/zql/src/planner/planner-builder.js.map +1 -1
  683. package/out/zql/src/planner/planner-connection.js.map +1 -1
  684. package/out/zql/src/planner/planner-debug.js.map +1 -1
  685. package/out/zql/src/planner/planner-fan-in.js.map +1 -1
  686. package/out/zql/src/planner/planner-fan-out.js.map +1 -1
  687. package/out/zql/src/planner/planner-filter.js.map +1 -1
  688. package/out/zql/src/planner/planner-graph.js +1 -5
  689. package/out/zql/src/planner/planner-graph.js.map +1 -1
  690. package/out/zql/src/planner/planner-join.js +1 -1
  691. package/out/zql/src/planner/planner-join.js.map +1 -1
  692. package/out/zql/src/planner/planner-source.js.map +1 -1
  693. package/out/zql/src/planner/planner-terminus.js.map +1 -1
  694. package/out/zql/src/query/create-builder.js +2 -1
  695. package/out/zql/src/query/create-builder.js.map +1 -1
  696. package/out/zql/src/query/expression.js +1 -1
  697. package/out/zql/src/query/expression.js.map +1 -1
  698. package/out/zql/src/query/measure-push-operator.js.map +1 -1
  699. package/out/zql/src/query/named.js +2 -1
  700. package/out/zql/src/query/named.js.map +1 -1
  701. package/out/zql/src/query/query-delegate-base.js +1 -1
  702. package/out/zql/src/query/query-delegate-base.js.map +1 -1
  703. package/out/zql/src/query/query-impl.js +3 -2
  704. package/out/zql/src/query/query-impl.js.map +1 -1
  705. package/out/zql/src/query/query-registry.js +1 -1
  706. package/out/zql/src/query/query-registry.js.map +1 -1
  707. package/out/zql/src/query/query-transitions.js +1 -1
  708. package/out/zql/src/query/query-transitions.js.map +1 -1
  709. package/out/zql/src/query/runnable-query-impl.js +3 -2
  710. package/out/zql/src/query/runnable-query-impl.js.map +1 -1
  711. package/out/zql/src/query/static-query.js.map +1 -1
  712. package/out/zql/src/query/ttl.js +8 -8
  713. package/out/zql/src/query/ttl.js.map +1 -1
  714. package/out/zql/src/query/validate-input.js.map +1 -1
  715. package/out/zqlite/src/database-storage.js +2 -2
  716. package/out/zqlite/src/database-storage.js.map +1 -1
  717. package/out/zqlite/src/db.js +2 -2
  718. package/out/zqlite/src/db.js.map +1 -1
  719. package/out/zqlite/src/explain-queries.js.map +1 -1
  720. package/out/zqlite/src/index-usage.js.map +1 -1
  721. package/out/zqlite/src/internal/sql-inline.js.map +1 -1
  722. package/out/zqlite/src/internal/sql.js.map +1 -1
  723. package/out/zqlite/src/internal/statement-cache.js +1 -1
  724. package/out/zqlite/src/internal/statement-cache.js.map +1 -1
  725. package/out/zqlite/src/mod.js +5 -5
  726. package/out/zqlite/src/pending-delta.js.map +1 -1
  727. package/out/zqlite/src/query-builder.js +1 -1
  728. package/out/zqlite/src/query-builder.js.map +1 -1
  729. package/out/zqlite/src/query-delegate.js.map +1 -1
  730. package/out/zqlite/src/resolve-scalar-subqueries.js +2 -5
  731. package/out/zqlite/src/resolve-scalar-subqueries.js.map +1 -1
  732. package/out/zqlite/src/sqlite-cost-model.js +3 -2
  733. package/out/zqlite/src/sqlite-cost-model.js.map +1 -1
  734. package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
  735. package/out/zqlite/src/table-source.js +1 -1
  736. package/out/zqlite/src/table-source.js.map +1 -1
  737. package/package.json +16 -14
@@ -1 +1 @@
1
- {"version":3,"file":"zero-poke-handler.js","names":["#replicachePoke","#onPokeError","#clientID","#lc","#pokeBuffer","#pokeLock","#schema","#serverToClient","#mutationTracker","#receivingPoke","#handlePokeError","#pokePlaybackLoopRunning","#startPlaybackLoop","#clear","#scheduledCallback","#lastScheduledTimestamp","#processPokesForFrame"],"sources":["../../../../../zero-client/src/client/zero-poke-handler.ts"],"sourcesContent":["import {Lock} from '@rocicorp/lock';\nimport type {LogContext} from '@rocicorp/logger';\nimport type {\n PatchOperationInternal,\n PokeInternal,\n} from '../../../replicache/src/impl.ts';\nimport type {PatchOperation} from '../../../replicache/src/patch-operation.ts';\nimport type {ClientID} from '../../../replicache/src/sync/ids.ts';\nimport {unreachable} from '../../../shared/src/asserts.ts';\nimport * as v from '../../../shared/src/valita.ts';\nimport type {MutationPatch} from '../../../zero-protocol/src/mutations-patch.ts';\nimport {\n pokePartsSchema,\n type PokeEndBody,\n type PokePartBody,\n type PokeParts,\n type PokeStartBody,\n} from '../../../zero-protocol/src/poke.ts';\nimport type {QueriesPatchOp} from '../../../zero-protocol/src/queries-patch.ts';\nimport type {RowPatchOp} from '../../../zero-protocol/src/row-patch.ts';\nimport {\n serverToClient,\n type NameMapper,\n} from '../../../zero-schema/src/name-mapper.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {\n toDesiredQueriesKey,\n toGotQueriesKey,\n toMutationResponseKey,\n toPrimaryKeyString,\n} from './keys.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\n\ntype PokeAccumulator = {\n readonly pokeStart: PokeStartBody;\n readonly parts: PokePartBody[];\n readonly pokeEnd: PokeEndBody;\n};\n\ntype ReceivingPoke = {\n readonly pokeStart: PokeStartBody;\n readonly parts: PokePartBody[];\n readonly chunks: Uint8Array[];\n};\n\nexport type PokeEndResult = {\n readonly lastMutationIDChangeForSelf: number | undefined;\n readonly hasRows: boolean;\n};\n\n/**\n * Handles the multi-part format of zero pokes.\n * As an optimization it also debounces pokes, only poking Replicache with a\n * merged poke at most once per scheduled callback (using setTimeout).\n * This debouncing avoids wastefully computing separate diffs and IVM updates\n * for intermediate states. setTimeout is used instead of requestAnimationFrame\n * to ensure pokes are delivered even when the tab is in the background,\n * enabling notifications (sounds, favicon badges) to work correctly.\n */\nexport class PokeHandler {\n readonly #replicachePoke: (poke: PokeInternal) => Promise<void>;\n readonly #onPokeError: (error: unknown) => void;\n readonly #clientID: ClientID;\n readonly #lc: LogContext;\n #receivingPoke: ReceivingPoke | undefined = undefined;\n readonly #pokeBuffer: PokeAccumulator[] = [];\n #pokePlaybackLoopRunning = false;\n #lastScheduledTimestamp = 0;\n // Serializes calls to this.#replicachePoke otherwise we can cause out of\n // order poke errors.\n readonly #pokeLock = new Lock();\n readonly #schema: Schema;\n readonly #serverToClient: NameMapper;\n readonly #mutationTracker: MutationTracker;\n\n constructor(\n replicachePoke: (poke: PokeInternal) => Promise<void>,\n onPokeError: (error: unknown) => void,\n clientID: ClientID,\n schema: Schema,\n lc: LogContext,\n mutationTracker: MutationTracker,\n ) {\n this.#replicachePoke = replicachePoke;\n this.#onPokeError = onPokeError;\n this.#clientID = clientID;\n this.#schema = schema;\n this.#serverToClient = serverToClient(schema.tables);\n this.#lc = lc.withContext('PokeHandler');\n this.#mutationTracker = mutationTracker;\n }\n\n handlePokeStart(pokeStart: PokeStartBody) {\n if (this.#receivingPoke) {\n this.#handlePokeError(\n `pokeStart ${JSON.stringify(\n pokeStart,\n )} while still receiving ${JSON.stringify(\n this.#receivingPoke.pokeStart,\n )} `,\n );\n return;\n }\n this.#receivingPoke = {\n pokeStart,\n parts: [],\n chunks: [],\n };\n }\n\n handlePokePart(pokePart: PokePartBody): number | undefined {\n if (pokePart.pokeID !== this.#receivingPoke?.pokeStart.pokeID) {\n this.#handlePokeError(\n `pokePart for ${pokePart.pokeID}, when receiving ${\n this.#receivingPoke?.pokeStart.pokeID\n }`,\n );\n return;\n }\n if (this.#receivingPoke.chunks.length > 0) {\n this.#handlePokeError('received both pokePart and binary poke chunks');\n return;\n }\n this.#receivingPoke.parts.push(pokePart);\n return pokePart.lastMutationIDChanges?.[this.#clientID];\n }\n\n handlePokeChunk(chunk: Uint8Array): void {\n if (!this.#receivingPoke) {\n this.#handlePokeError('received a binary poke chunk without pokeStart');\n return;\n }\n if (this.#receivingPoke.parts.length > 0) {\n this.#handlePokeError('received both pokePart and binary poke chunks');\n return;\n }\n this.#receivingPoke.chunks.push(chunk);\n }\n\n handlePokeEnd(pokeEnd: PokeEndBody): PokeEndResult | undefined {\n if (pokeEnd.pokeID !== this.#receivingPoke?.pokeStart.pokeID) {\n this.#handlePokeError(\n `pokeEnd for ${pokeEnd.pokeID}, when receiving ${\n this.#receivingPoke?.pokeStart.pokeID\n }`,\n );\n return;\n }\n if (pokeEnd.cancel) {\n this.#receivingPoke = undefined;\n return;\n }\n const receivingPoke = this.#receivingPoke;\n let parts = receivingPoke.parts;\n if (receivingPoke.chunks.length > 0) {\n try {\n parts = decodePokeChunks(receivingPoke.chunks);\n } catch (e) {\n this.#handlePokeError(e);\n return;\n }\n }\n\n const result = summarizePoke(parts, this.#clientID);\n this.#pokeBuffer.push({\n pokeStart: receivingPoke.pokeStart,\n parts,\n pokeEnd,\n });\n this.#receivingPoke = undefined;\n if (!this.#pokePlaybackLoopRunning) {\n this.#startPlaybackLoop();\n }\n return result;\n }\n\n handleDisconnect(): void {\n this.#lc.debug?.('clearing due to disconnect');\n this.#clear();\n }\n\n #startPlaybackLoop() {\n this.#lc.debug?.('starting playback loop');\n this.#pokePlaybackLoopRunning = true;\n setTimeout(this.#scheduledCallback, 0);\n }\n\n #scheduledCallback = async () => {\n const lc = this.#lc.withContext(\n 'scheduledAt',\n Math.floor(performance.now()),\n );\n if (this.#pokeBuffer.length === 0) {\n lc.debug?.('stopping playback loop');\n this.#pokePlaybackLoopRunning = false;\n return;\n }\n setTimeout(this.#scheduledCallback, 0);\n const start = performance.now();\n lc.debug?.(\n 'scheduled callback fired, processing pokes. Since last callback',\n start - this.#lastScheduledTimestamp,\n );\n this.#lastScheduledTimestamp = start;\n await this.#processPokesForFrame(lc);\n lc.debug?.('processing pokes took', performance.now() - start);\n };\n\n #processPokesForFrame(lc: LogContext): Promise<void> {\n return this.#pokeLock.withLock(async () => {\n const now = Date.now();\n lc.debug?.('got poke lock at', now);\n lc.debug?.('merging', this.#pokeBuffer.length);\n try {\n const merged = mergePokes(\n this.#pokeBuffer,\n this.#schema,\n this.#serverToClient,\n );\n this.#pokeBuffer.length = 0;\n if (merged === undefined) {\n lc.debug?.('frame is empty');\n return;\n }\n const start = performance.now();\n lc.debug?.('poking replicache');\n await this.#replicachePoke(merged);\n lc.debug?.('poking replicache took', performance.now() - start);\n\n if (!('error' in merged.pullResponse)) {\n const lmid =\n merged.pullResponse.lastMutationIDChanges[this.#clientID];\n if (lmid !== undefined) {\n this.#mutationTracker.lmidAdvanced(lmid);\n }\n }\n } catch (e) {\n this.#handlePokeError(e);\n }\n });\n }\n\n #handlePokeError(e: unknown) {\n if (String(e).includes('unexpected base cookie for poke')) {\n // This can happen if cookie changes due to refresh from idb due\n // to an update arriving to different tabs in the same\n // client group at very different times. Unusual but possible.\n this.#lc.debug?.('clearing due to', e);\n } else {\n this.#lc.error?.('clearing due to unexpected poke error', e);\n }\n this.#clear();\n this.#onPokeError(e);\n }\n\n #clear() {\n this.#receivingPoke = undefined;\n this.#pokeBuffer.length = 0;\n }\n}\n\nfunction decodePokeChunks(chunks: Uint8Array[]): PokeParts {\n const decoder = new TextDecoder('utf-8', {fatal: true});\n const decoded = new Array<string>(chunks.length + 1);\n for (let i = 0; i < chunks.length; i++) {\n decoded[i] = decoder.decode(chunks[i], {stream: true});\n }\n decoded[chunks.length] = decoder.decode();\n chunks.length = 0;\n return v.parse(JSON.parse(decoded.join('')), pokePartsSchema, 'passthrough');\n}\n\nfunction summarizePoke(\n parts: PokePartBody[],\n clientID: ClientID,\n): PokeEndResult {\n let lastMutationIDChangeForSelf: number | undefined;\n let hasRows = false;\n for (const part of parts) {\n const lmid = part.lastMutationIDChanges?.[clientID];\n if (lmid !== undefined) {\n lastMutationIDChangeForSelf = lmid;\n }\n hasRows ||= Boolean(part.rowsPatch?.length);\n }\n return {lastMutationIDChangeForSelf, hasRows};\n}\n\nexport function mergePokes(\n pokeBuffer: PokeAccumulator[],\n schema: Schema,\n serverToClient: NameMapper,\n):\n | (PokeInternal & {mutationResults?: MutationPatch[] | undefined})\n | undefined {\n if (pokeBuffer.length === 0) {\n return undefined;\n }\n const {baseCookie} = pokeBuffer[0].pokeStart;\n // oxlint-disable-next-line typescript/no-non-null-assertion\n const lastPoke = pokeBuffer.at(-1)!;\n const {cookie} = lastPoke.pokeEnd;\n const mergedPatch: PatchOperationInternal[] = [];\n const mergedLastMutationIDChanges: Record<string, number> = {};\n const mutationResults: MutationPatch[] = [];\n\n let prevPokeEnd = undefined;\n for (const pokeAccumulator of pokeBuffer) {\n if (\n prevPokeEnd &&\n pokeAccumulator.pokeStart.baseCookie &&\n pokeAccumulator.pokeStart.baseCookie > prevPokeEnd.cookie\n ) {\n throw Error(\n `unexpected cookie gap ${JSON.stringify(prevPokeEnd)} ${JSON.stringify(\n pokeAccumulator.pokeStart,\n )}`,\n );\n }\n prevPokeEnd = pokeAccumulator.pokeEnd;\n for (const pokePart of pokeAccumulator.parts) {\n if (pokePart.lastMutationIDChanges) {\n for (const [clientID, lastMutationID] of Object.entries(\n pokePart.lastMutationIDChanges,\n )) {\n mergedLastMutationIDChanges[clientID] = lastMutationID;\n }\n }\n if (pokePart.desiredQueriesPatches) {\n for (const [clientID, queriesPatch] of Object.entries(\n pokePart.desiredQueriesPatches,\n )) {\n for (const op of queriesPatch) {\n mergedPatch.push(\n queryPatchOpToReplicachePatchOp(op, hash =>\n toDesiredQueriesKey(clientID, hash),\n ),\n );\n }\n }\n }\n if (pokePart.gotQueriesPatch) {\n for (const op of pokePart.gotQueriesPatch) {\n mergedPatch.push(\n queryPatchOpToReplicachePatchOp(op, toGotQueriesKey),\n );\n }\n }\n if (pokePart.rowsPatch) {\n for (const p of pokePart.rowsPatch) {\n const patchOp = rowsPatchOpToReplicachePatchOp(\n p,\n schema,\n serverToClient,\n );\n if (patchOp) {\n mergedPatch.push(patchOp);\n }\n }\n }\n if (pokePart.mutationsPatch) {\n for (const op of pokePart.mutationsPatch) {\n mergedPatch.push(mutationPatchOpToReplicachePatchOp(op));\n }\n }\n }\n }\n const ret: PokeInternal & {mutationResults?: MutationPatch[] | undefined} = {\n baseCookie,\n pullResponse: {\n lastMutationIDChanges: mergedLastMutationIDChanges,\n patch: mergedPatch,\n cookie,\n },\n };\n\n // For backwards compatibility. Because we're strict on our validation,\n // zero-client must be able to parse pokes with this field before we introduce it.\n // So users can update their clients and then start using custom mutators that write responses to the db.\n if (mutationResults.length > 0) {\n ret.mutationResults = mutationResults;\n }\n return ret;\n}\n\nfunction queryPatchOpToReplicachePatchOp(\n op: QueriesPatchOp,\n toKey: (hash: string) => string,\n): PatchOperation {\n switch (op.op) {\n case 'clear':\n return op;\n case 'del':\n return {\n op: 'del',\n key: toKey(op.hash),\n };\n case 'put':\n return {\n op: 'put',\n key: toKey(op.hash),\n value: null,\n };\n default:\n unreachable(op);\n }\n}\n\nexport function mutationPatchOpToReplicachePatchOp(\n op: MutationPatch,\n): PatchOperationInternal {\n switch (op.op) {\n case 'put':\n return {\n op: 'put',\n key: toMutationResponseKey(op.mutation.id),\n value: op.mutation.result,\n };\n case 'del':\n return {\n op: 'del',\n key: toMutationResponseKey(op.id),\n };\n }\n}\n\nfunction rowsPatchOpToReplicachePatchOp(\n op: RowPatchOp,\n schema: Schema,\n serverToClient: NameMapper,\n): PatchOperationInternal | undefined {\n if (op.op === 'clear') {\n return op;\n }\n // Skip rows for tables not in the client schema. This can happen when\n // the server-side query AST references tables (e.g. issueNotifications)\n // that are not yet part of the client schema definition.\n const tableName = serverToClient.tableNameIfKnown(op.tableName);\n if (!tableName) {\n return undefined;\n }\n switch (op.op) {\n case 'del':\n return {\n op: 'del',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.id),\n ),\n };\n case 'put':\n return {\n op: 'put',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.value),\n ),\n value: serverToClient.row(op.tableName, op.value),\n };\n case 'update':\n return {\n op: 'update',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.id),\n ),\n merge: op.merge\n ? serverToClient.row(op.tableName, op.merge)\n : undefined,\n constrain: serverToClient.columns(op.tableName, op.constrain),\n };\n default:\n unreachable(op);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"zero-poke-handler.js","names":["v.parse"],"sources":["../../../../../zero-client/src/client/zero-poke-handler.ts"],"sourcesContent":["import {Lock} from '@rocicorp/lock';\nimport type {LogContext} from '@rocicorp/logger';\nimport type {\n PatchOperationInternal,\n PokeInternal,\n} from '../../../replicache/src/impl.ts';\nimport type {PatchOperation} from '../../../replicache/src/patch-operation.ts';\nimport type {ClientID} from '../../../replicache/src/sync/ids.ts';\nimport {unreachable} from '../../../shared/src/asserts.ts';\nimport * as v from '../../../shared/src/valita.ts';\nimport type {MutationPatch} from '../../../zero-protocol/src/mutations-patch.ts';\nimport {\n pokePartsSchema,\n type PokeEndBody,\n type PokePartBody,\n type PokeParts,\n type PokeStartBody,\n} from '../../../zero-protocol/src/poke.ts';\nimport type {QueriesPatchOp} from '../../../zero-protocol/src/queries-patch.ts';\nimport type {RowPatchOp} from '../../../zero-protocol/src/row-patch.ts';\nimport {\n serverToClient,\n type NameMapper,\n} from '../../../zero-schema/src/name-mapper.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {\n toDesiredQueriesKey,\n toGotQueriesKey,\n toMutationResponseKey,\n toPrimaryKeyString,\n} from './keys.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\n\ntype PokeAccumulator = {\n readonly pokeStart: PokeStartBody;\n readonly parts: PokePartBody[];\n readonly pokeEnd: PokeEndBody;\n};\n\ntype ReceivingPoke = {\n readonly pokeStart: PokeStartBody;\n readonly parts: PokePartBody[];\n readonly chunks: Uint8Array[];\n};\n\nexport type PokeEndResult = {\n readonly lastMutationIDChangeForSelf: number | undefined;\n readonly hasRows: boolean;\n};\n\n/**\n * Handles the multi-part format of zero pokes.\n * As an optimization it also debounces pokes, only poking Replicache with a\n * merged poke at most once per scheduled callback (using setTimeout).\n * This debouncing avoids wastefully computing separate diffs and IVM updates\n * for intermediate states. setTimeout is used instead of requestAnimationFrame\n * to ensure pokes are delivered even when the tab is in the background,\n * enabling notifications (sounds, favicon badges) to work correctly.\n */\nexport class PokeHandler {\n readonly #replicachePoke: (poke: PokeInternal) => Promise<void>;\n readonly #onPokeError: (error: unknown) => void;\n readonly #clientID: ClientID;\n readonly #lc: LogContext;\n #receivingPoke: ReceivingPoke | undefined = undefined;\n readonly #pokeBuffer: PokeAccumulator[] = [];\n #pokePlaybackLoopRunning = false;\n #lastScheduledTimestamp = 0;\n // Serializes calls to this.#replicachePoke otherwise we can cause out of\n // order poke errors.\n readonly #pokeLock = new Lock();\n readonly #schema: Schema;\n readonly #serverToClient: NameMapper;\n readonly #mutationTracker: MutationTracker;\n\n constructor(\n replicachePoke: (poke: PokeInternal) => Promise<void>,\n onPokeError: (error: unknown) => void,\n clientID: ClientID,\n schema: Schema,\n lc: LogContext,\n mutationTracker: MutationTracker,\n ) {\n this.#replicachePoke = replicachePoke;\n this.#onPokeError = onPokeError;\n this.#clientID = clientID;\n this.#schema = schema;\n this.#serverToClient = serverToClient(schema.tables);\n this.#lc = lc.withContext('PokeHandler');\n this.#mutationTracker = mutationTracker;\n }\n\n handlePokeStart(pokeStart: PokeStartBody) {\n if (this.#receivingPoke) {\n this.#handlePokeError(\n `pokeStart ${JSON.stringify(\n pokeStart,\n )} while still receiving ${JSON.stringify(\n this.#receivingPoke.pokeStart,\n )} `,\n );\n return;\n }\n this.#receivingPoke = {\n pokeStart,\n parts: [],\n chunks: [],\n };\n }\n\n handlePokePart(pokePart: PokePartBody): number | undefined {\n if (pokePart.pokeID !== this.#receivingPoke?.pokeStart.pokeID) {\n this.#handlePokeError(\n `pokePart for ${pokePart.pokeID}, when receiving ${\n this.#receivingPoke?.pokeStart.pokeID\n }`,\n );\n return;\n }\n if (this.#receivingPoke.chunks.length > 0) {\n this.#handlePokeError('received both pokePart and binary poke chunks');\n return;\n }\n this.#receivingPoke.parts.push(pokePart);\n return pokePart.lastMutationIDChanges?.[this.#clientID];\n }\n\n handlePokeChunk(chunk: Uint8Array): void {\n if (!this.#receivingPoke) {\n this.#handlePokeError('received a binary poke chunk without pokeStart');\n return;\n }\n if (this.#receivingPoke.parts.length > 0) {\n this.#handlePokeError('received both pokePart and binary poke chunks');\n return;\n }\n this.#receivingPoke.chunks.push(chunk);\n }\n\n handlePokeEnd(pokeEnd: PokeEndBody): PokeEndResult | undefined {\n if (pokeEnd.pokeID !== this.#receivingPoke?.pokeStart.pokeID) {\n this.#handlePokeError(\n `pokeEnd for ${pokeEnd.pokeID}, when receiving ${\n this.#receivingPoke?.pokeStart.pokeID\n }`,\n );\n return;\n }\n if (pokeEnd.cancel) {\n this.#receivingPoke = undefined;\n return;\n }\n const receivingPoke = this.#receivingPoke;\n let parts = receivingPoke.parts;\n if (receivingPoke.chunks.length > 0) {\n try {\n parts = decodePokeChunks(receivingPoke.chunks);\n } catch (e) {\n this.#handlePokeError(e);\n return;\n }\n }\n\n const result = summarizePoke(parts, this.#clientID);\n this.#pokeBuffer.push({\n pokeStart: receivingPoke.pokeStart,\n parts,\n pokeEnd,\n });\n this.#receivingPoke = undefined;\n if (!this.#pokePlaybackLoopRunning) {\n this.#startPlaybackLoop();\n }\n return result;\n }\n\n handleDisconnect(): void {\n this.#lc.debug?.('clearing due to disconnect');\n this.#clear();\n }\n\n #startPlaybackLoop() {\n this.#lc.debug?.('starting playback loop');\n this.#pokePlaybackLoopRunning = true;\n setTimeout(this.#scheduledCallback, 0);\n }\n\n #scheduledCallback = async () => {\n const lc = this.#lc.withContext(\n 'scheduledAt',\n Math.floor(performance.now()),\n );\n if (this.#pokeBuffer.length === 0) {\n lc.debug?.('stopping playback loop');\n this.#pokePlaybackLoopRunning = false;\n return;\n }\n setTimeout(this.#scheduledCallback, 0);\n const start = performance.now();\n lc.debug?.(\n 'scheduled callback fired, processing pokes. Since last callback',\n start - this.#lastScheduledTimestamp,\n );\n this.#lastScheduledTimestamp = start;\n await this.#processPokesForFrame(lc);\n lc.debug?.('processing pokes took', performance.now() - start);\n };\n\n #processPokesForFrame(lc: LogContext): Promise<void> {\n return this.#pokeLock.withLock(async () => {\n const now = Date.now();\n lc.debug?.('got poke lock at', now);\n lc.debug?.('merging', this.#pokeBuffer.length);\n try {\n const merged = mergePokes(\n this.#pokeBuffer,\n this.#schema,\n this.#serverToClient,\n );\n this.#pokeBuffer.length = 0;\n if (merged === undefined) {\n lc.debug?.('frame is empty');\n return;\n }\n const start = performance.now();\n lc.debug?.('poking replicache');\n await this.#replicachePoke(merged);\n lc.debug?.('poking replicache took', performance.now() - start);\n\n if (!('error' in merged.pullResponse)) {\n const lmid =\n merged.pullResponse.lastMutationIDChanges[this.#clientID];\n if (lmid !== undefined) {\n this.#mutationTracker.lmidAdvanced(lmid);\n }\n }\n } catch (e) {\n this.#handlePokeError(e);\n }\n });\n }\n\n #handlePokeError(e: unknown) {\n if (String(e).includes('unexpected base cookie for poke')) {\n // This can happen if cookie changes due to refresh from idb due\n // to an update arriving to different tabs in the same\n // client group at very different times. Unusual but possible.\n this.#lc.debug?.('clearing due to', e);\n } else {\n this.#lc.error?.('clearing due to unexpected poke error', e);\n }\n this.#clear();\n this.#onPokeError(e);\n }\n\n #clear() {\n this.#receivingPoke = undefined;\n this.#pokeBuffer.length = 0;\n }\n}\n\nfunction decodePokeChunks(chunks: Uint8Array[]): PokeParts {\n const decoder = new TextDecoder('utf-8', {fatal: true});\n const decoded = new Array<string>(chunks.length + 1);\n for (let i = 0; i < chunks.length; i++) {\n decoded[i] = decoder.decode(chunks[i], {stream: true});\n }\n decoded[chunks.length] = decoder.decode();\n chunks.length = 0;\n return v.parse(JSON.parse(decoded.join('')), pokePartsSchema, 'passthrough');\n}\n\nfunction summarizePoke(\n parts: PokePartBody[],\n clientID: ClientID,\n): PokeEndResult {\n let lastMutationIDChangeForSelf: number | undefined;\n let hasRows = false;\n for (const part of parts) {\n const lmid = part.lastMutationIDChanges?.[clientID];\n if (lmid !== undefined) {\n lastMutationIDChangeForSelf = lmid;\n }\n hasRows ||= Boolean(part.rowsPatch?.length);\n }\n return {lastMutationIDChangeForSelf, hasRows};\n}\n\nexport function mergePokes(\n pokeBuffer: PokeAccumulator[],\n schema: Schema,\n serverToClient: NameMapper,\n):\n | (PokeInternal & {mutationResults?: MutationPatch[] | undefined})\n | undefined {\n if (pokeBuffer.length === 0) {\n return undefined;\n }\n const {baseCookie} = pokeBuffer[0].pokeStart;\n // oxlint-disable-next-line typescript/no-non-null-assertion\n const lastPoke = pokeBuffer.at(-1)!;\n const {cookie} = lastPoke.pokeEnd;\n const mergedPatch: PatchOperationInternal[] = [];\n const mergedLastMutationIDChanges: Record<string, number> = {};\n const mutationResults: MutationPatch[] = [];\n\n let prevPokeEnd = undefined;\n for (const pokeAccumulator of pokeBuffer) {\n if (\n prevPokeEnd &&\n pokeAccumulator.pokeStart.baseCookie &&\n pokeAccumulator.pokeStart.baseCookie > prevPokeEnd.cookie\n ) {\n throw Error(\n `unexpected cookie gap ${JSON.stringify(prevPokeEnd)} ${JSON.stringify(\n pokeAccumulator.pokeStart,\n )}`,\n );\n }\n prevPokeEnd = pokeAccumulator.pokeEnd;\n for (const pokePart of pokeAccumulator.parts) {\n if (pokePart.lastMutationIDChanges) {\n for (const [clientID, lastMutationID] of Object.entries(\n pokePart.lastMutationIDChanges,\n )) {\n mergedLastMutationIDChanges[clientID] = lastMutationID;\n }\n }\n if (pokePart.desiredQueriesPatches) {\n for (const [clientID, queriesPatch] of Object.entries(\n pokePart.desiredQueriesPatches,\n )) {\n for (const op of queriesPatch) {\n mergedPatch.push(\n queryPatchOpToReplicachePatchOp(op, hash =>\n toDesiredQueriesKey(clientID, hash),\n ),\n );\n }\n }\n }\n if (pokePart.gotQueriesPatch) {\n for (const op of pokePart.gotQueriesPatch) {\n mergedPatch.push(\n queryPatchOpToReplicachePatchOp(op, toGotQueriesKey),\n );\n }\n }\n if (pokePart.rowsPatch) {\n for (const p of pokePart.rowsPatch) {\n const patchOp = rowsPatchOpToReplicachePatchOp(\n p,\n schema,\n serverToClient,\n );\n if (patchOp) {\n mergedPatch.push(patchOp);\n }\n }\n }\n if (pokePart.mutationsPatch) {\n for (const op of pokePart.mutationsPatch) {\n mergedPatch.push(mutationPatchOpToReplicachePatchOp(op));\n }\n }\n }\n }\n const ret: PokeInternal & {mutationResults?: MutationPatch[] | undefined} = {\n baseCookie,\n pullResponse: {\n lastMutationIDChanges: mergedLastMutationIDChanges,\n patch: mergedPatch,\n cookie,\n },\n };\n\n // For backwards compatibility. Because we're strict on our validation,\n // zero-client must be able to parse pokes with this field before we introduce it.\n // So users can update their clients and then start using custom mutators that write responses to the db.\n if (mutationResults.length > 0) {\n ret.mutationResults = mutationResults;\n }\n return ret;\n}\n\nfunction queryPatchOpToReplicachePatchOp(\n op: QueriesPatchOp,\n toKey: (hash: string) => string,\n): PatchOperation {\n switch (op.op) {\n case 'clear':\n return op;\n case 'del':\n return {\n op: 'del',\n key: toKey(op.hash),\n };\n case 'put':\n return {\n op: 'put',\n key: toKey(op.hash),\n value: null,\n };\n default:\n unreachable(op);\n }\n}\n\nexport function mutationPatchOpToReplicachePatchOp(\n op: MutationPatch,\n): PatchOperationInternal {\n switch (op.op) {\n case 'put':\n return {\n op: 'put',\n key: toMutationResponseKey(op.mutation.id),\n value: op.mutation.result,\n };\n case 'del':\n return {\n op: 'del',\n key: toMutationResponseKey(op.id),\n };\n }\n}\n\nfunction rowsPatchOpToReplicachePatchOp(\n op: RowPatchOp,\n schema: Schema,\n serverToClient: NameMapper,\n): PatchOperationInternal | undefined {\n if (op.op === 'clear') {\n return op;\n }\n // Skip rows for tables not in the client schema. This can happen when\n // the server-side query AST references tables (e.g. issueNotifications)\n // that are not yet part of the client schema definition.\n const tableName = serverToClient.tableNameIfKnown(op.tableName);\n if (!tableName) {\n return undefined;\n }\n switch (op.op) {\n case 'del':\n return {\n op: 'del',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.id),\n ),\n };\n case 'put':\n return {\n op: 'put',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.value),\n ),\n value: serverToClient.row(op.tableName, op.value),\n };\n case 'update':\n return {\n op: 'update',\n key: toPrimaryKeyString(\n tableName,\n schema.tables[tableName].primaryKey,\n serverToClient.row(op.tableName, op.id),\n ),\n merge: op.merge\n ? serverToClient.row(op.tableName, op.merge)\n : undefined,\n constrain: serverToClient.columns(op.tableName, op.constrain),\n };\n default:\n unreachable(op);\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"zero-rep.js","names":["#context","#ivmMain","#customMutatorsEnabled","#mutationTracker","#auth","#store","#makeTxData"],"sources":["../../../../../zero-client/src/client/zero-rep.ts"],"sourcesContent":["import type {\n InternalDiff,\n InternalDiffOperation,\n} from '../../../replicache/src/btree/node.ts';\nimport type {LazyStore} from '../../../replicache/src/dag/lazy-store.ts';\nimport {readFromHash} from '../../../replicache/src/db/read.ts';\nimport * as FormatVersion from '../../../replicache/src/format-version-enum.ts';\nimport type {Hash} from '../../../replicache/src/hash.ts';\nimport type {\n EphemeralID,\n MutationTrackingData,\n ZeroOption,\n ZeroReadOptions,\n} from '../../../replicache/src/replicache-options.ts';\nimport {withRead} from '../../../replicache/src/with-transactions.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport type {ZeroContext} from './context.ts';\nimport type {IVMSourceBranch} from './ivm-branch.ts';\nimport {ENTITIES_KEY_PREFIX} from './keys.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\n\n// Replicache doesn't support undefined auth tokens\nconst REPLICACHE_NO_AUTH_TOKEN = '';\n\nexport const toReplicacheAuthToken = (\n auth: string | undefined | null,\n): string => auth ?? REPLICACHE_NO_AUTH_TOKEN;\n\nexport const fromReplicacheAuthToken = (auth: string): string | undefined =>\n !auth ? undefined : auth;\n\ntype TxData = {\n ivmSources: IVMSourceBranch;\n token: string | undefined;\n context: unknown;\n fork: () => TxData;\n};\n\nexport class ZeroRep implements ZeroOption {\n readonly #context: ZeroContext;\n readonly #ivmMain: IVMSourceBranch;\n readonly #customMutatorsEnabled: boolean;\n readonly #mutationTracker: MutationTracker;\n #store: LazyStore | undefined;\n // matches replicache's auth token type\n #auth: string = REPLICACHE_NO_AUTH_TOKEN;\n\n constructor(\n context: ZeroContext,\n ivmMain: IVMSourceBranch,\n customMutatorsEnabled: boolean,\n mutationTracker: MutationTracker,\n ) {\n this.#context = context;\n this.#ivmMain = ivmMain;\n this.#customMutatorsEnabled = customMutatorsEnabled;\n this.#mutationTracker = mutationTracker;\n }\n\n set auth(auth: string) {\n this.#auth = auth;\n }\n\n async init(hash: Hash, store: LazyStore) {\n const diffs: InternalDiffOperation[] = [];\n await withRead(store, async dagRead => {\n const read = await readFromHash(hash, dagRead, FormatVersion.Latest);\n for await (const entry of read.map.scan(ENTITIES_KEY_PREFIX, true)) {\n if (!entry[0].startsWith(ENTITIES_KEY_PREFIX)) {\n break;\n }\n diffs.push({\n op: 'add',\n key: entry[0],\n newValue: entry[1],\n });\n }\n });\n this.#store = store;\n\n this.#context.processChanges(undefined, hash, diffs);\n // Pipelines for queries materialized before this point were deferred so\n // the replica above was loaded into the sources without fanning out to\n // them. Build and hydrate them now that the sources are populated,\n // yielding between pipelines so the app stays responsive. Replicache is\n // not ready until this returns so no changes arrive in the meantime.\n await this.#context.hydratePendingPipelines();\n }\n\n getTxData = (\n desiredHead: Hash,\n readOptions?: ZeroReadOptions,\n ): Promise<TxData> | undefined => {\n // getTxData requires some extensive testing for complete confidence\n // that it will not break. Do not enable `getTxData` unless the user\n // has opted into custom mutators.\n if (!this.#customMutatorsEnabled) {\n return;\n }\n\n return this.#ivmMain\n .forkToHead(must(this.#store), desiredHead, readOptions)\n .then(branch => this.#makeTxData(branch));\n };\n\n #makeTxData = (branch: IVMSourceBranch): TxData => ({\n ivmSources: branch,\n token: fromReplicacheAuthToken(this.#auth),\n context: this.#context,\n fork: () => this.#makeTxData(branch.fork()),\n });\n\n advance = (expectedHash: Hash, newHash: Hash, diffs: InternalDiff): void => {\n this.#context.processChanges(expectedHash, newHash, diffs);\n };\n\n trackMutation(): MutationTrackingData {\n return this.#mutationTracker.trackMutation();\n }\n mutationIDAssigned(ephemeralID: EphemeralID, mutationID: number): void {\n this.#mutationTracker.mutationIDAssigned(ephemeralID, mutationID);\n }\n rejectMutation(ephemeralID: EphemeralID, ex: unknown): void {\n this.#mutationTracker.rejectMutation(ephemeralID, ex);\n }\n}\n"],"mappings":";;;;;AAsBA,IAAM,2BAA2B;AAEjC,IAAa,yBACX,SACW,QAAQ;AAErB,IAAa,2BAA2B,SACtC,CAAC,OAAO,KAAA,IAAY;AAStB,IAAa,UAAb,MAA2C;CACzC;CACA;CACA;CACA;CACA;CAEA,QAAgB;CAEhB,YACE,SACA,SACA,uBACA,iBACA;EACA,KAAKA,WAAW;EAChB,KAAKC,WAAW;EAChB,KAAKC,yBAAyB;EAC9B,KAAKC,mBAAmB;CAC1B;CAEA,IAAI,KAAK,MAAc;EACrB,KAAKC,QAAQ;CACf;CAEA,MAAM,KAAK,MAAY,OAAkB;EACvC,MAAM,QAAiC,CAAC;EACxC,MAAM,SAAS,OAAO,OAAM,YAAW;GACrC,MAAM,OAAO,MAAM,aAAa,MAAM,SAAS,CAAoB;GACnE,WAAW,MAAM,SAAS,KAAK,IAAI,KAAA,MAA0B,IAAI,GAAG;IAClE,IAAI,CAAC,MAAM,GAAG,WAAA,IAA8B,GAC1C;IAEF,MAAM,KAAK;KACT,IAAI;KACJ,KAAK,MAAM;KACX,UAAU,MAAM;IAClB,CAAC;GACH;EACF,CAAC;EACD,KAAKC,SAAS;EAEd,KAAKL,SAAS,eAAe,KAAA,GAAW,MAAM,KAAK;EAMnD,MAAM,KAAKA,SAAS,wBAAwB;CAC9C;CAEA,aACE,aACA,gBACgC;EAIhC,IAAI,CAAC,KAAKE,wBACR;EAGF,OAAO,KAAKD,SACT,WAAW,KAAK,KAAKI,MAAM,GAAG,aAAa,WAAW,EACtD,MAAK,WAAU,KAAKC,YAAY,MAAM,CAAC;CAC5C;CAEA,eAAe,YAAqC;EAClD,YAAY;EACZ,OAAO,wBAAwB,KAAKF,KAAK;EACzC,SAAS,KAAKJ;EACd,YAAY,KAAKM,YAAY,OAAO,KAAK,CAAC;CAC5C;CAEA,WAAW,cAAoB,SAAe,UAA8B;EAC1E,KAAKN,SAAS,eAAe,cAAc,SAAS,KAAK;CAC3D;CAEA,gBAAsC;EACpC,OAAO,KAAKG,iBAAiB,cAAc;CAC7C;CACA,mBAAmB,aAA0B,YAA0B;EACrE,KAAKA,iBAAiB,mBAAmB,aAAa,UAAU;CAClE;CACA,eAAe,aAA0B,IAAmB;EAC1D,KAAKA,iBAAiB,eAAe,aAAa,EAAE;CACtD;AACF"}
1
+ {"version":3,"file":"zero-rep.js","names":[],"sources":["../../../../../zero-client/src/client/zero-rep.ts"],"sourcesContent":["import type {\n InternalDiff,\n InternalDiffOperation,\n} from '../../../replicache/src/btree/node.ts';\nimport type {LazyStore} from '../../../replicache/src/dag/lazy-store.ts';\nimport {readFromHash} from '../../../replicache/src/db/read.ts';\nimport * as FormatVersion from '../../../replicache/src/format-version-enum.ts';\nimport type {Hash} from '../../../replicache/src/hash.ts';\nimport type {\n EphemeralID,\n MutationTrackingData,\n ZeroOption,\n ZeroReadOptions,\n} from '../../../replicache/src/replicache-options.ts';\nimport {withRead} from '../../../replicache/src/with-transactions.ts';\nimport {must} from '../../../shared/src/must.ts';\nimport type {ZeroContext} from './context.ts';\nimport type {IVMSourceBranch} from './ivm-branch.ts';\nimport {ENTITIES_KEY_PREFIX} from './keys.ts';\nimport type {MutationTracker} from './mutation-tracker.ts';\n\n// Replicache doesn't support undefined auth tokens\nconst REPLICACHE_NO_AUTH_TOKEN = '';\n\nexport const toReplicacheAuthToken = (\n auth: string | undefined | null,\n): string => auth ?? REPLICACHE_NO_AUTH_TOKEN;\n\nexport const fromReplicacheAuthToken = (auth: string): string | undefined =>\n !auth ? undefined : auth;\n\ntype TxData = {\n ivmSources: IVMSourceBranch;\n token: string | undefined;\n context: unknown;\n fork: () => TxData;\n};\n\nexport class ZeroRep implements ZeroOption {\n readonly #context: ZeroContext;\n readonly #ivmMain: IVMSourceBranch;\n readonly #customMutatorsEnabled: boolean;\n readonly #mutationTracker: MutationTracker;\n #store: LazyStore | undefined;\n // matches replicache's auth token type\n #auth: string = REPLICACHE_NO_AUTH_TOKEN;\n\n constructor(\n context: ZeroContext,\n ivmMain: IVMSourceBranch,\n customMutatorsEnabled: boolean,\n mutationTracker: MutationTracker,\n ) {\n this.#context = context;\n this.#ivmMain = ivmMain;\n this.#customMutatorsEnabled = customMutatorsEnabled;\n this.#mutationTracker = mutationTracker;\n }\n\n set auth(auth: string) {\n this.#auth = auth;\n }\n\n async init(hash: Hash, store: LazyStore) {\n const diffs: InternalDiffOperation[] = [];\n await withRead(store, async dagRead => {\n const read = await readFromHash(hash, dagRead, FormatVersion.Latest);\n for await (const entry of read.map.scan(ENTITIES_KEY_PREFIX, true)) {\n if (!entry[0].startsWith(ENTITIES_KEY_PREFIX)) {\n break;\n }\n diffs.push({\n op: 'add',\n key: entry[0],\n newValue: entry[1],\n });\n }\n });\n this.#store = store;\n\n this.#context.processChanges(undefined, hash, diffs);\n // Pipelines for queries materialized before this point were deferred so\n // the replica above was loaded into the sources without fanning out to\n // them. Build and hydrate them now that the sources are populated,\n // yielding between pipelines so the app stays responsive. Replicache is\n // not ready until this returns so no changes arrive in the meantime.\n await this.#context.hydratePendingPipelines();\n }\n\n getTxData = (\n desiredHead: Hash,\n readOptions?: ZeroReadOptions,\n ): Promise<TxData> | undefined => {\n // getTxData requires some extensive testing for complete confidence\n // that it will not break. Do not enable `getTxData` unless the user\n // has opted into custom mutators.\n if (!this.#customMutatorsEnabled) {\n return;\n }\n\n return this.#ivmMain\n .forkToHead(must(this.#store), desiredHead, readOptions)\n .then(branch => this.#makeTxData(branch));\n };\n\n #makeTxData = (branch: IVMSourceBranch): TxData => ({\n ivmSources: branch,\n token: fromReplicacheAuthToken(this.#auth),\n context: this.#context,\n fork: () => this.#makeTxData(branch.fork()),\n });\n\n advance = (expectedHash: Hash, newHash: Hash, diffs: InternalDiff): void => {\n this.#context.processChanges(expectedHash, newHash, diffs);\n };\n\n trackMutation(): MutationTrackingData {\n return this.#mutationTracker.trackMutation();\n }\n mutationIDAssigned(ephemeralID: EphemeralID, mutationID: number): void {\n this.#mutationTracker.mutationIDAssigned(ephemeralID, mutationID);\n }\n rejectMutation(ephemeralID: EphemeralID, ex: unknown): void {\n this.#mutationTracker.rejectMutation(ephemeralID, ex);\n }\n}\n"],"mappings":";;;;;AAsBA,IAAM,2BAA2B;AAEjC,IAAa,yBACX,SACW,QAAQ;AAErB,IAAa,2BAA2B,SACtC,CAAC,OAAO,KAAA,IAAY;AAStB,IAAa,UAAb,MAA2C;CACzC;CACA;CACA;CACA;CACA;CAEA,QAAgB;CAEhB,YACE,SACA,SACA,uBACA,iBACA;EACA,KAAK,WAAW;EAChB,KAAK,WAAW;EAChB,KAAK,yBAAyB;EAC9B,KAAK,mBAAmB;CAC1B;CAEA,IAAI,KAAK,MAAc;EACrB,KAAK,QAAQ;CACf;CAEA,MAAM,KAAK,MAAY,OAAkB;EACvC,MAAM,QAAiC,CAAC;EACxC,MAAM,SAAS,OAAO,OAAM,YAAW;GACrC,MAAM,OAAO,MAAM,aAAa,MAAM,SAAS,CAAoB;GACnE,WAAW,MAAM,SAAS,KAAK,IAAI,KAAA,MAA0B,IAAI,GAAG;IAClE,IAAI,CAAC,MAAM,EAAE,CAAC,WAAA,IAA8B,GAC1C;IAEF,MAAM,KAAK;KACT,IAAI;KACJ,KAAK,MAAM;KACX,UAAU,MAAM;IAClB,CAAC;GACH;EACF,CAAC;EACD,KAAK,SAAS;EAEd,KAAK,SAAS,eAAe,KAAA,GAAW,MAAM,KAAK;EAMnD,MAAM,KAAK,SAAS,wBAAwB;CAC9C;CAEA,aACE,aACA,gBACgC;EAIhC,IAAI,CAAC,KAAK,wBACR;EAGF,OAAO,KAAK,SACT,WAAW,KAAK,KAAK,MAAM,GAAG,aAAa,WAAW,CAAC,CACvD,MAAK,WAAU,KAAK,YAAY,MAAM,CAAC;CAC5C;CAEA,eAAe,YAAqC;EAClD,YAAY;EACZ,OAAO,wBAAwB,KAAK,KAAK;EACzC,SAAS,KAAK;EACd,YAAY,KAAK,YAAY,OAAO,KAAK,CAAC;CAC5C;CAEA,WAAW,cAAoB,SAAe,UAA8B;EAC1E,KAAK,SAAS,eAAe,cAAc,SAAS,KAAK;CAC3D;CAEA,gBAAsC;EACpC,OAAO,KAAK,iBAAiB,cAAc;CAC7C;CACA,mBAAmB,aAA0B,YAA0B;EACrE,KAAK,iBAAiB,mBAAmB,aAAa,UAAU;CAClE;CACA,eAAe,aAA0B,IAAmB;EAC1D,KAAK,iBAAiB,eAAe,aAAa,EAAE;CACtD;AACF"}
@@ -21,7 +21,7 @@ import { Closed, Connected, Connecting, Disconnected, Error as Error$1, Initiali
21
21
  import { getDocumentVisibilityWatcher } from "../../../shared/src/document-visible.js";
22
22
  import { ReplicacheImpl } from "../../../replicache/src/replicache-impl.js";
23
23
  import "../../../replicache/src/impl.js";
24
- import { localNavigator } from "../../../shared/src/navigator.js";
24
+ import { navigator as localNavigator } from "../../../shared/src/navigator.js";
25
25
  import { promiseRace } from "../../../shared/src/promise-race.js";
26
26
  import { emptyFunction } from "../../../shared/src/sentinels.js";
27
27
  import { Subscribable } from "../../../shared/src/subscribable.js";
@@ -60,6 +60,9 @@ import { PokeHandler } from "./zero-poke-handler.js";
60
60
  import { ZeroRep, fromReplicacheAuthToken, toReplicacheAuthToken } from "./zero-rep.js";
61
61
  import { resolver } from "@rocicorp/resolver";
62
62
  import { LogContext } from "@rocicorp/logger";
63
+ //#region ../zero-client/src/client/zero.ts
64
+ var exposedToTestingSymbol = Symbol();
65
+ var createLogOptionsSymbol = Symbol();
63
66
  function connectionReadyResolver() {
64
67
  const ready = resolver();
65
68
  ready.promise.catch(() => {});
@@ -77,12 +80,12 @@ var DEFAULT_PING_TIMEOUT_MS = 5e3;
77
80
  * request timed out.
78
81
  */
79
82
  var PULL_TIMEOUT_MS = 5e3;
80
- var DEFAULT_DISCONNECT_HIDDEN_DELAY_MS = 300 * 1e3;
83
+ var DEFAULT_DISCONNECT_HIDDEN_DELAY_MS = 3e5;
81
84
  /**
82
85
  * The amount of time we allow for continuous connecting attempts before
83
86
  * transitioning to disconnected state.
84
87
  */
85
- var DEFAULT_DISCONNECT_TIMEOUT_MS = 60 * 1e3;
88
+ var DEFAULT_DISCONNECT_TIMEOUT_MS = 6e4;
86
89
  /**
87
90
  * The amount of time we wait for a connection to be established before we
88
91
  * consider it timed out.
@@ -95,6 +98,7 @@ var CONNECT_TIMEOUT_MS = 1e4;
95
98
  var SLOW_ACTIVE_CLIENTS_THRESHOLD_MS = 50;
96
99
  var CHECK_CONNECTIVITY_ON_ERROR_FREQUENCY = 6;
97
100
  var DEFAULT_QUERY_CHANGE_THROTTLE_MS = 10;
101
+ var LOGGED_OUT_STORAGE_USER_ID = "__anonymous__";
98
102
  function convertOnUpdateNeededReason(reason) {
99
103
  return { type: reason.type };
100
104
  }
@@ -236,7 +240,8 @@ var Zero = class Zero {
236
240
  message: "ZeroOptions.userID should not be empty. Omit it entirely for logged-out clients."
237
241
  });
238
242
  this.#checkAuthValid(userID ?? void 0, options.auth);
239
- const server = getServer(options.cacheURL ?? options.server);
243
+ const cacheURL = options.cacheURL ?? options.server;
244
+ const server = getServer(cacheURL);
240
245
  this.#enableAnalytics = shouldEnableAnalytics(server, false);
241
246
  let { kvStore = "idb" } = options;
242
247
  if (kvStore === "idb") {
@@ -277,11 +282,12 @@ var Zero = class Zero {
277
282
  this.storageKey = storageKey ?? "";
278
283
  const { clientSchema, hash } = clientSchemaFrom(schema);
279
284
  this.#clientSchema = clientSchema;
280
- const hashedKey = h64(JSON.stringify({
285
+ const nameKey = JSON.stringify({
281
286
  storageKey: this.storageKey,
282
287
  mutateUrl: options.mutateURL ?? "",
283
288
  queryUrl: options.queryURL ?? options.getQueriesURL ?? ""
284
- })).toString(36);
289
+ });
290
+ const hashedKey = h64(nameKey).toString(36);
285
291
  const storageScopedUserID = userID ?? "__anonymous__";
286
292
  const replicacheOptions = {
287
293
  schemaVersion: `52.${hash}`,
@@ -307,14 +313,15 @@ var Zero = class Zero {
307
313
  if (enableLegacyQueries) this.#queryManager.updateLegacy(ast, ttl);
308
314
  }, (customQueryID, ttl) => this.#queryManager.updateCustom(customQueryID, ttl), () => this.#queryManager.flushBatch(), batchViewUpdates, this.#addMetric, assertValidRunOptions, this.#visibilityWatcher);
309
315
  this.query = createRunnableBuilder(this.#zeroContext, schema);
310
- const rep = new ReplicacheImpl(replicacheOptions, {
316
+ const replicacheImplOptions = {
311
317
  enableClientGroupForking: false,
312
318
  enableMutationRecovery: false,
313
319
  enablePullAndPushInOpen: false,
314
320
  enableRefresh: () => this.#enableRefresh(),
315
321
  onClientsDeleted: (deletedClients) => this.#deleteClientsManager.onClientsDeleted(deletedClients),
316
322
  zero: new ZeroRep(this.#zeroContext, this.#ivmMain, options.mutators !== void 0, this.#mutationTracker)
317
- });
323
+ };
324
+ const rep = new ReplicacheImpl(replicacheOptions, replicacheImplOptions);
318
325
  this.#rep = rep;
319
326
  this.#server = server;
320
327
  this.userID = userID ?? void 0;
@@ -772,9 +779,10 @@ var Zero = class Zero {
772
779
  wasClean
773
780
  });
774
781
  if (code === 1009) {
782
+ const recentMessagesInfo = this.#recentSentMessages.length > 0 ? "\nRecent sent messages:\n" + JSON.stringify(this.#recentSentMessages, null, 2) : "";
775
783
  const messageTooLargeError = new ClientError({
776
784
  kind: InvalidMessage$1,
777
- message: "A WebSocket message exceeded the server message size limit. This is usually caused by a mutation's args containing a large value such as a base64-encoded image. Consider uploading large files to object storage and storing only the URL in Zero." + (this.#recentSentMessages.length > 0 ? "\nRecent sent messages:\n" + JSON.stringify(this.#recentSentMessages, null, 2) : "")
785
+ message: "A WebSocket message exceeded the server message size limit. This is usually caused by a mutation's args containing a large value such as a base64-encoded image. Consider uploading large files to object storage and storing only the URL in Zero." + recentMessagesInfo
778
786
  });
779
787
  this.#disconnect(lc, messageTooLargeError);
780
788
  await this.#rep.disableClientGroup();
@@ -1538,7 +1546,7 @@ var OnlineManager = class extends Subscribable {
1538
1546
  return this.#online;
1539
1547
  }
1540
1548
  };
1541
- async function createSocket(rep, queryManager, deleteClientsManager, socketOrigin, baseCookie, clientID, clientGroupID, clientSchema, userID, auth, lmid, wsid, debugPerf, lc, userPushURL, userPushHeaders, userQueryURL, userQueryHeaders, additionalConnectParams, activeClientsManager, maxHeaderLength = 1024 * 8, onEvent) {
1549
+ async function createSocket(rep, queryManager, deleteClientsManager, socketOrigin, baseCookie, clientID, clientGroupID, clientSchema, userID, auth, lmid, wsid, debugPerf, lc, userPushURL, userPushHeaders, userQueryURL, userQueryHeaders, additionalConnectParams, activeClientsManager, maxHeaderLength = 8192, onEvent) {
1542
1550
  onEvent?.("reading the profile ID");
1543
1551
  const url = await createConnectionURL(socketOrigin, clientID, clientGroupID, userID, baseCookie, lmid, wsid, rep, debugPerf, additionalConnectParams, lc);
1544
1552
  const WS = mustGetBrowserGlobal("WebSocket");
@@ -1630,6 +1638,6 @@ async function makeActiveClientsManager(clientGroupID, clientID, signal, onDelet
1630
1638
  return manager;
1631
1639
  }
1632
1640
  //#endregion
1633
- export { Zero };
1641
+ export { CONNECT_TIMEOUT_MS, DEFAULT_DISCONNECT_HIDDEN_DELAY_MS, DEFAULT_DISCONNECT_TIMEOUT_MS, DEFAULT_PING_TIMEOUT_MS, LOGGED_OUT_STORAGE_USER_ID, OnlineManager, PULL_TIMEOUT_MS, RUN_LOOP_INTERVAL_MS, Zero, createConnectionURL, createLogOptionsSymbol, createSocket, exposedToTestingSymbol };
1634
1642
 
1635
1643
  //# sourceMappingURL=zero.js.map