@rocicorp/zero 1.10.0-canary.23 → 1.10.0-canary.25

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 (485) hide show
  1. package/out/analyze-query/src/bin-analyze.js +1 -1
  2. package/out/analyze-query/src/bin-analyze.js.map +1 -1
  3. package/out/replicache/src/btree/read.d.ts +1 -12
  4. package/out/replicache/src/btree/read.d.ts.map +1 -1
  5. package/out/replicache/src/btree/read.js +12 -24
  6. package/out/replicache/src/btree/read.js.map +1 -1
  7. package/out/replicache/src/dag/gc.d.ts.map +1 -1
  8. package/out/replicache/src/dag/gc.js +1 -2
  9. package/out/replicache/src/dag/gc.js.map +1 -1
  10. package/out/replicache/src/dag/store-impl.d.ts +2 -12
  11. package/out/replicache/src/dag/store-impl.d.ts.map +1 -1
  12. package/out/replicache/src/dag/store-impl.js +8 -22
  13. package/out/replicache/src/dag/store-impl.js.map +1 -1
  14. package/out/replicache/src/db/rebase.d.ts +2 -14
  15. package/out/replicache/src/db/rebase.d.ts.map +1 -1
  16. package/out/replicache/src/db/rebase.js +5 -27
  17. package/out/replicache/src/db/rebase.js.map +1 -1
  18. package/out/replicache/src/db/write.js.map +1 -1
  19. package/out/replicache/src/kv/expo-sqlite/store.d.ts.map +1 -1
  20. package/out/replicache/src/kv/expo-sqlite/store.js +5 -28
  21. package/out/replicache/src/kv/expo-sqlite/store.js.map +1 -1
  22. package/out/replicache/src/kv/idb-store-with-mem-fallback.d.ts +5 -15
  23. package/out/replicache/src/kv/idb-store-with-mem-fallback.d.ts.map +1 -1
  24. package/out/replicache/src/kv/idb-store-with-mem-fallback.js +25 -25
  25. package/out/replicache/src/kv/idb-store-with-mem-fallback.js.map +1 -1
  26. package/out/replicache/src/kv/idb-store.d.ts +0 -9
  27. package/out/replicache/src/kv/idb-store.d.ts.map +1 -1
  28. package/out/replicache/src/kv/idb-store.js +2 -14
  29. package/out/replicache/src/kv/idb-store.js.map +1 -1
  30. package/out/replicache/src/kv/mem-store.d.ts +0 -1
  31. package/out/replicache/src/kv/mem-store.d.ts.map +1 -1
  32. package/out/replicache/src/kv/mem-store.js +0 -3
  33. package/out/replicache/src/kv/mem-store.js.map +1 -1
  34. package/out/replicache/src/kv/op-sqlite/store.d.ts.map +1 -1
  35. package/out/replicache/src/kv/op-sqlite/store.js +1 -1
  36. package/out/replicache/src/kv/op-sqlite/store.js.map +1 -1
  37. package/out/replicache/src/kv/sqlite-store.d.ts +1 -13
  38. package/out/replicache/src/kv/sqlite-store.d.ts.map +1 -1
  39. package/out/replicache/src/kv/sqlite-store.js +4 -49
  40. package/out/replicache/src/kv/sqlite-store.js.map +1 -1
  41. package/out/replicache/src/kv/store.d.ts +0 -6
  42. package/out/replicache/src/kv/store.d.ts.map +1 -1
  43. package/out/replicache/src/persist/collect-idb-databases.d.ts +5 -10
  44. package/out/replicache/src/persist/collect-idb-databases.d.ts.map +1 -1
  45. package/out/replicache/src/persist/collect-idb-databases.js +9 -16
  46. package/out/replicache/src/persist/collect-idb-databases.js.map +1 -1
  47. package/out/replicache/src/persist/persist.d.ts.map +1 -1
  48. package/out/replicache/src/persist/persist.js +5 -12
  49. package/out/replicache/src/persist/persist.js.map +1 -1
  50. package/out/replicache/src/persist/refresh.js +2 -6
  51. package/out/replicache/src/persist/refresh.js.map +1 -1
  52. package/out/replicache/src/replicache-impl.d.ts +3 -14
  53. package/out/replicache/src/replicache-impl.d.ts.map +1 -1
  54. package/out/replicache/src/replicache-impl.js +11 -118
  55. package/out/replicache/src/replicache-impl.js.map +1 -1
  56. package/out/replicache/src/replicache-options.d.ts +0 -9
  57. package/out/replicache/src/replicache-options.d.ts.map +1 -1
  58. package/out/replicache/src/transactions.d.ts.map +1 -1
  59. package/out/replicache/src/transactions.js +1 -1
  60. package/out/replicache/src/transactions.js.map +1 -1
  61. package/out/shared/src/arrays.js +15 -1
  62. package/out/shared/src/arrays.js.map +1 -1
  63. package/out/shared/src/base64.d.ts +19 -0
  64. package/out/shared/src/base64.d.ts.map +1 -0
  65. package/out/shared/src/base64.js +40 -0
  66. package/out/shared/src/base64.js.map +1 -0
  67. package/out/shared/src/error.d.ts +0 -11
  68. package/out/shared/src/error.d.ts.map +1 -1
  69. package/out/shared/src/error.js +1 -35
  70. package/out/shared/src/error.js.map +1 -1
  71. package/out/shared/src/hash.d.ts +0 -1
  72. package/out/shared/src/hash.d.ts.map +1 -1
  73. package/out/shared/src/hash.js +10 -87
  74. package/out/shared/src/hash.js.map +1 -1
  75. package/out/shared/src/iterables.d.ts +0 -2
  76. package/out/shared/src/iterables.d.ts.map +1 -1
  77. package/out/shared/src/iterables.js +1 -18
  78. package/out/shared/src/iterables.js.map +1 -1
  79. package/out/shared/src/json.d.ts.map +1 -1
  80. package/out/shared/src/json.js +2 -2
  81. package/out/shared/src/json.js.map +1 -1
  82. package/out/shared/src/map.d.ts +2 -7
  83. package/out/shared/src/map.d.ts.map +1 -1
  84. package/out/shared/src/map.js.map +1 -1
  85. package/out/shared/src/packed-boolean-map.d.ts +7 -0
  86. package/out/shared/src/packed-boolean-map.d.ts.map +1 -0
  87. package/out/shared/src/packed-boolean-map.js +36 -0
  88. package/out/shared/src/packed-boolean-map.js.map +1 -0
  89. package/out/shared/src/ring-buffer.d.ts +0 -8
  90. package/out/shared/src/ring-buffer.d.ts.map +1 -1
  91. package/out/shared/src/ring-buffer.js +1 -22
  92. package/out/shared/src/ring-buffer.js.map +1 -1
  93. package/out/z2s/src/compiler.js +1 -1
  94. package/out/zero/package.js +3 -2
  95. package/out/zero/package.js.map +1 -1
  96. package/out/zero-cache/src/auth/read-authorizer.js +1 -1
  97. package/out/zero-cache/src/config/zero-config.d.ts +2 -27
  98. package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
  99. package/out/zero-cache/src/config/zero-config.js +28 -114
  100. package/out/zero-cache/src/config/zero-config.js.map +1 -1
  101. package/out/zero-cache/src/custom-queries/transform-query.js +1 -1
  102. package/out/zero-cache/src/db/create.d.ts.map +1 -1
  103. package/out/zero-cache/src/db/create.js +1 -4
  104. package/out/zero-cache/src/db/create.js.map +1 -1
  105. package/out/zero-cache/src/db/lite-tables.d.ts +2 -10
  106. package/out/zero-cache/src/db/lite-tables.d.ts.map +1 -1
  107. package/out/zero-cache/src/db/lite-tables.js +3 -8
  108. package/out/zero-cache/src/db/lite-tables.js.map +1 -1
  109. package/out/zero-cache/src/db/specs.d.ts +0 -41
  110. package/out/zero-cache/src/db/specs.d.ts.map +1 -1
  111. package/out/zero-cache/src/db/specs.js +3 -30
  112. package/out/zero-cache/src/db/specs.js.map +1 -1
  113. package/out/zero-cache/src/server/change-streamer.d.ts.map +1 -1
  114. package/out/zero-cache/src/server/change-streamer.js +4 -13
  115. package/out/zero-cache/src/server/change-streamer.js.map +1 -1
  116. package/out/zero-cache/src/server/inspector-delegate.d.ts +2 -18
  117. package/out/zero-cache/src/server/inspector-delegate.d.ts.map +1 -1
  118. package/out/zero-cache/src/server/inspector-delegate.js +9 -23
  119. package/out/zero-cache/src/server/inspector-delegate.js.map +1 -1
  120. package/out/zero-cache/src/server/main.d.ts.map +1 -1
  121. package/out/zero-cache/src/server/main.js +1 -8
  122. package/out/zero-cache/src/server/main.js.map +1 -1
  123. package/out/zero-cache/src/server/mutator.js +0 -2
  124. package/out/zero-cache/src/server/mutator.js.map +1 -1
  125. package/out/zero-cache/src/server/reaper.d.ts.map +1 -1
  126. package/out/zero-cache/src/server/reaper.js +0 -2
  127. package/out/zero-cache/src/server/reaper.js.map +1 -1
  128. package/out/zero-cache/src/server/replicator.d.ts.map +1 -1
  129. package/out/zero-cache/src/server/replicator.js +2 -8
  130. package/out/zero-cache/src/server/replicator.js.map +1 -1
  131. package/out/zero-cache/src/server/runner/zero-dispatcher.d.ts.map +1 -1
  132. package/out/zero-cache/src/server/runner/zero-dispatcher.js +0 -3
  133. package/out/zero-cache/src/server/runner/zero-dispatcher.js.map +1 -1
  134. package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
  135. package/out/zero-cache/src/server/syncer.js +0 -2
  136. package/out/zero-cache/src/server/syncer.js.map +1 -1
  137. package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
  138. package/out/zero-cache/src/services/analyze.js +2 -3
  139. package/out/zero-cache/src/services/analyze.js.map +1 -1
  140. package/out/zero-cache/src/services/change-source/common/backfill-manager.d.ts.map +1 -1
  141. package/out/zero-cache/src/services/change-source/common/backfill-manager.js +1 -14
  142. package/out/zero-cache/src/services/change-source/common/backfill-manager.js.map +1 -1
  143. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.d.ts.map +1 -1
  144. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js +3 -15
  145. package/out/zero-cache/src/services/change-source/common/change-stream-multiplexer.js.map +1 -1
  146. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts +1 -11
  147. package/out/zero-cache/src/services/change-source/pg/change-source.d.ts.map +1 -1
  148. package/out/zero-cache/src/services/change-source/pg/change-source.js +2 -21
  149. package/out/zero-cache/src/services/change-source/pg/change-source.js.map +1 -1
  150. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts +0 -1
  151. package/out/zero-cache/src/services/change-source/pg/initial-sync.d.ts.map +1 -1
  152. package/out/zero-cache/src/services/change-source/pg/initial-sync.js +7 -8
  153. package/out/zero-cache/src/services/change-source/pg/initial-sync.js.map +1 -1
  154. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts +229 -1513
  155. package/out/zero-cache/src/services/change-source/pg/schema/ddl.d.ts.map +1 -1
  156. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js +2 -2
  157. package/out/zero-cache/src/services/change-source/pg/schema/ddl.js.map +1 -1
  158. package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts +1 -1
  159. package/out/zero-cache/src/services/change-source/pg/schema/init.d.ts.map +1 -1
  160. package/out/zero-cache/src/services/change-source/pg/schema/init.js +6 -15
  161. package/out/zero-cache/src/services/change-source/pg/schema/init.js.map +1 -1
  162. package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts +20 -137
  163. package/out/zero-cache/src/services/change-source/pg/schema/published.d.ts.map +1 -1
  164. package/out/zero-cache/src/services/change-source/pg/schema/published.js +13 -82
  165. package/out/zero-cache/src/services/change-source/pg/schema/published.js.map +1 -1
  166. package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts +21 -128
  167. package/out/zero-cache/src/services/change-source/pg/schema/shard.d.ts.map +1 -1
  168. package/out/zero-cache/src/services/change-source/pg/schema/shard.js +5 -5
  169. package/out/zero-cache/src/services/change-source/pg/schema/shard.js.map +1 -1
  170. package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts +0 -2
  171. package/out/zero-cache/src/services/change-source/protocol/current/data.d.ts.map +1 -1
  172. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts +0 -3
  173. package/out/zero-cache/src/services/change-source/protocol/current/downstream.d.ts.map +1 -1
  174. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts +0 -3
  175. package/out/zero-cache/src/services/change-streamer/change-streamer-http.d.ts.map +1 -1
  176. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js +1 -3
  177. package/out/zero-cache/src/services/change-streamer/change-streamer-http.js.map +1 -1
  178. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts +0 -1
  179. package/out/zero-cache/src/services/change-streamer/change-streamer.d.ts.map +1 -1
  180. package/out/zero-cache/src/services/litestream/commands.d.ts.map +1 -1
  181. package/out/zero-cache/src/services/litestream/commands.js +3 -8
  182. package/out/zero-cache/src/services/litestream/commands.js.map +1 -1
  183. package/out/zero-cache/src/services/litestream/config-v5.yml +1 -15
  184. package/out/zero-cache/src/services/mutagen/mutagen.d.ts +0 -5
  185. package/out/zero-cache/src/services/mutagen/mutagen.d.ts.map +1 -1
  186. package/out/zero-cache/src/services/mutagen/mutagen.js +1 -7
  187. package/out/zero-cache/src/services/mutagen/mutagen.js.map +1 -1
  188. package/out/zero-cache/src/services/mutagen/pusher.d.ts +87 -87
  189. package/out/zero-cache/src/services/mutagen/pusher.js +2 -3
  190. package/out/zero-cache/src/services/mutagen/pusher.js.map +1 -1
  191. package/out/zero-cache/src/services/replicator/change-processor.d.ts.map +1 -1
  192. package/out/zero-cache/src/services/replicator/change-processor.js +16 -16
  193. package/out/zero-cache/src/services/replicator/change-processor.js.map +1 -1
  194. package/out/zero-cache/src/services/replicator/incremental-sync.d.ts.map +1 -1
  195. package/out/zero-cache/src/services/replicator/incremental-sync.js +0 -1
  196. package/out/zero-cache/src/services/replicator/incremental-sync.js.map +1 -1
  197. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts +2 -27
  198. package/out/zero-cache/src/services/replicator/write-worker-client.d.ts.map +1 -1
  199. package/out/zero-cache/src/services/replicator/write-worker-client.js +2 -3
  200. package/out/zero-cache/src/services/replicator/write-worker-client.js.map +1 -1
  201. package/out/zero-cache/src/services/replicator/write-worker.js +5 -24
  202. package/out/zero-cache/src/services/replicator/write-worker.js.map +1 -1
  203. package/out/zero-cache/src/services/run-ast.d.ts +0 -12
  204. package/out/zero-cache/src/services/run-ast.d.ts.map +1 -1
  205. package/out/zero-cache/src/services/run-ast.js +15 -27
  206. package/out/zero-cache/src/services/run-ast.js.map +1 -1
  207. package/out/zero-cache/src/services/runner.d.ts.map +1 -1
  208. package/out/zero-cache/src/services/runner.js +1 -1
  209. package/out/zero-cache/src/services/runner.js.map +1 -1
  210. package/out/zero-cache/src/services/view-syncer/cvr.d.ts +0 -45
  211. package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
  212. package/out/zero-cache/src/services/view-syncer/cvr.js +1 -133
  213. package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
  214. package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts +1 -14
  215. package/out/zero-cache/src/services/view-syncer/drain-coordinator.d.ts.map +1 -1
  216. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js +4 -30
  217. package/out/zero-cache/src/services/view-syncer/drain-coordinator.js.map +1 -1
  218. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts +1 -1
  219. package/out/zero-cache/src/services/view-syncer/inspect-handler.d.ts.map +1 -1
  220. package/out/zero-cache/src/services/view-syncer/inspect-handler.js +2 -2
  221. package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
  222. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +1 -2
  223. package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
  224. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +18 -33
  225. package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
  226. package/out/zero-cache/src/services/view-syncer/query-covering.d.ts.map +1 -1
  227. package/out/zero-cache/src/services/view-syncer/query-covering.js.map +1 -1
  228. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts +1 -4
  229. package/out/zero-cache/src/services/view-syncer/snapshotter.d.ts.map +1 -1
  230. package/out/zero-cache/src/services/view-syncer/snapshotter.js +3 -9
  231. package/out/zero-cache/src/services/view-syncer/snapshotter.js.map +1 -1
  232. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +1 -11
  233. package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
  234. package/out/zero-cache/src/services/view-syncer/view-syncer.js +90 -470
  235. package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
  236. package/out/zero-cache/src/types/processes.d.ts +0 -32
  237. package/out/zero-cache/src/types/processes.d.ts.map +1 -1
  238. package/out/zero-cache/src/types/processes.js +4 -43
  239. package/out/zero-cache/src/types/processes.js.map +1 -1
  240. package/out/zero-cache/src/types/profiler.d.ts +0 -12
  241. package/out/zero-cache/src/types/profiler.d.ts.map +1 -1
  242. package/out/zero-cache/src/types/profiler.js +1 -46
  243. package/out/zero-cache/src/types/profiler.js.map +1 -1
  244. package/out/zero-cache/src/workers/connect-params.d.ts +17 -1
  245. package/out/zero-cache/src/workers/connect-params.d.ts.map +1 -1
  246. package/out/zero-cache/src/workers/connect-params.js +21 -1
  247. package/out/zero-cache/src/workers/connect-params.js.map +1 -1
  248. package/out/zero-cache/src/workers/connection.d.ts +4 -4
  249. package/out/zero-cache/src/workers/connection.d.ts.map +1 -1
  250. package/out/zero-cache/src/workers/connection.js +8 -8
  251. package/out/zero-cache/src/workers/connection.js.map +1 -1
  252. package/out/zero-cache/src/workers/replicator.d.ts +0 -1
  253. package/out/zero-cache/src/workers/replicator.d.ts.map +1 -1
  254. package/out/zero-cache/src/workers/replicator.js +2 -4
  255. package/out/zero-cache/src/workers/replicator.js.map +1 -1
  256. package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +1 -1
  257. package/out/zero-cache/src/workers/syncer-ws-message-handler.js +16 -21
  258. package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
  259. package/out/zero-cache/src/workers/syncer.d.ts.map +1 -1
  260. package/out/zero-cache/src/workers/syncer.js +1 -10
  261. package/out/zero-cache/src/workers/syncer.js.map +1 -1
  262. package/out/zero-client/src/client/connection-manager.d.ts +0 -20
  263. package/out/zero-client/src/client/connection-manager.d.ts.map +1 -1
  264. package/out/zero-client/src/client/connection-manager.js +13 -77
  265. package/out/zero-client/src/client/connection-manager.js.map +1 -1
  266. package/out/zero-client/src/client/connection-status-enum.d.ts +0 -2
  267. package/out/zero-client/src/client/connection-status-enum.d.ts.map +1 -1
  268. package/out/zero-client/src/client/connection-status-enum.js +1 -3
  269. package/out/zero-client/src/client/connection-status-enum.js.map +1 -1
  270. package/out/zero-client/src/client/connection.d.ts +0 -6
  271. package/out/zero-client/src/client/connection.d.ts.map +1 -1
  272. package/out/zero-client/src/client/connection.js +1 -2
  273. package/out/zero-client/src/client/connection.js.map +1 -1
  274. package/out/zero-client/src/client/context.d.ts +2 -27
  275. package/out/zero-client/src/client/context.d.ts.map +1 -1
  276. package/out/zero-client/src/client/context.js +1 -112
  277. package/out/zero-client/src/client/context.js.map +1 -1
  278. package/out/zero-client/src/client/custom.js +2 -2
  279. package/out/zero-client/src/client/custom.js.map +1 -1
  280. package/out/zero-client/src/client/error.js +1 -1
  281. package/out/zero-client/src/client/inspector/lazy-inspector.js +2 -2
  282. package/out/zero-client/src/client/inspector/lazy-inspector.js.map +1 -1
  283. package/out/zero-client/src/client/ivm-branch.d.ts.map +1 -1
  284. package/out/zero-client/src/client/ivm-branch.js +3 -20
  285. package/out/zero-client/src/client/ivm-branch.js.map +1 -1
  286. package/out/zero-client/src/client/mutation-tracker.d.ts.map +1 -1
  287. package/out/zero-client/src/client/mutation-tracker.js +1 -1
  288. package/out/zero-client/src/client/mutation-tracker.js.map +1 -1
  289. package/out/zero-client/src/client/mutator-proxy.d.ts.map +1 -1
  290. package/out/zero-client/src/client/mutator-proxy.js +1 -2
  291. package/out/zero-client/src/client/mutator-proxy.js.map +1 -1
  292. package/out/zero-client/src/client/options.d.ts +0 -3
  293. package/out/zero-client/src/client/options.d.ts.map +1 -1
  294. package/out/zero-client/src/client/options.js.map +1 -1
  295. package/out/zero-client/src/client/query-manager.d.ts +0 -2
  296. package/out/zero-client/src/client/query-manager.d.ts.map +1 -1
  297. package/out/zero-client/src/client/query-manager.js +9 -48
  298. package/out/zero-client/src/client/query-manager.js.map +1 -1
  299. package/out/zero-client/src/client/version.js +1 -1
  300. package/out/zero-client/src/client/zero-rep.d.ts +0 -1
  301. package/out/zero-client/src/client/zero-rep.d.ts.map +1 -1
  302. package/out/zero-client/src/client/zero-rep.js +6 -9
  303. package/out/zero-client/src/client/zero-rep.js.map +1 -1
  304. package/out/zero-client/src/client/zero.d.ts +3 -18
  305. package/out/zero-client/src/client/zero.d.ts.map +1 -1
  306. package/out/zero-client/src/client/zero.js +36 -123
  307. package/out/zero-client/src/client/zero.js.map +1 -1
  308. package/out/zero-client/src/types/query-result.d.ts +0 -2
  309. package/out/zero-client/src/types/query-result.d.ts.map +1 -1
  310. package/out/zero-protocol/src/ast.d.ts +1 -64
  311. package/out/zero-protocol/src/ast.d.ts.map +1 -1
  312. package/out/zero-protocol/src/ast.js +51 -223
  313. package/out/zero-protocol/src/ast.js.map +1 -1
  314. package/out/zero-protocol/src/connect.d.ts +16 -0
  315. package/out/zero-protocol/src/connect.d.ts.map +1 -1
  316. package/out/zero-protocol/src/connect.js +27 -1
  317. package/out/zero-protocol/src/connect.js.map +1 -1
  318. package/out/zero-protocol/src/error.d.ts +1 -1
  319. package/out/zero-protocol/src/feature-flag-enum.d.ts +7 -0
  320. package/out/zero-protocol/src/feature-flag-enum.d.ts.map +1 -0
  321. package/out/zero-protocol/src/feature-flag-enum.js +7 -0
  322. package/out/zero-protocol/src/feature-flag-enum.js.map +1 -0
  323. package/out/zero-protocol/src/feature-flag.d.ts +5 -0
  324. package/out/zero-protocol/src/feature-flag.d.ts.map +1 -0
  325. package/out/zero-protocol/src/poke.d.ts +11 -4
  326. package/out/zero-protocol/src/poke.d.ts.map +1 -1
  327. package/out/zero-protocol/src/poke.js +3 -2
  328. package/out/zero-protocol/src/poke.js.map +1 -1
  329. package/out/zero-protocol/src/protocol-version.d.ts +30 -6
  330. package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
  331. package/out/zero-protocol/src/protocol-version.js +1 -1
  332. package/out/zero-protocol/src/protocol-version.js.map +1 -1
  333. package/out/zero-protocol/src/query-hash.d.ts +2 -7
  334. package/out/zero-protocol/src/query-hash.d.ts.map +1 -1
  335. package/out/zero-protocol/src/query-hash.js +9 -12
  336. package/out/zero-protocol/src/query-hash.js.map +1 -1
  337. package/out/zero-react/src/use-query.d.ts +4 -5
  338. package/out/zero-react/src/use-query.d.ts.map +1 -1
  339. package/out/zero-react/src/use-query.js +9 -86
  340. package/out/zero-react/src/use-query.js.map +1 -1
  341. package/out/zero-solid/src/solid-view.d.ts +0 -17
  342. package/out/zero-solid/src/solid-view.d.ts.map +1 -1
  343. package/out/zero-solid/src/solid-view.js +1 -39
  344. package/out/zero-solid/src/solid-view.js.map +1 -1
  345. package/out/zero-solid/src/use-query.js +3 -5
  346. package/out/zero-solid/src/use-query.js.map +1 -1
  347. package/out/zql/src/builder/debug-delegate.d.ts +1 -6
  348. package/out/zql/src/builder/debug-delegate.d.ts.map +1 -1
  349. package/out/zql/src/builder/debug-delegate.js +2 -14
  350. package/out/zql/src/builder/debug-delegate.js.map +1 -1
  351. package/out/zql/src/ivm/array-view.d.ts +0 -29
  352. package/out/zql/src/ivm/array-view.d.ts.map +1 -1
  353. package/out/zql/src/ivm/array-view.js +12 -63
  354. package/out/zql/src/ivm/array-view.js.map +1 -1
  355. package/out/zql/src/ivm/cap.d.ts.map +1 -1
  356. package/out/zql/src/ivm/cap.js +3 -5
  357. package/out/zql/src/ivm/cap.js.map +1 -1
  358. package/out/zql/src/ivm/data.d.ts.map +1 -1
  359. package/out/zql/src/ivm/data.js +3 -8
  360. package/out/zql/src/ivm/data.js.map +1 -1
  361. package/out/zql/src/ivm/exists.d.ts +1 -1
  362. package/out/zql/src/ivm/exists.d.ts.map +1 -1
  363. package/out/zql/src/ivm/exists.js +1 -1
  364. package/out/zql/src/ivm/exists.js.map +1 -1
  365. package/out/zql/src/ivm/fan-in.d.ts +2 -2
  366. package/out/zql/src/ivm/fan-in.d.ts.map +1 -1
  367. package/out/zql/src/ivm/fan-in.js +5 -6
  368. package/out/zql/src/ivm/fan-in.js.map +1 -1
  369. package/out/zql/src/ivm/fan-out.d.ts +2 -2
  370. package/out/zql/src/ivm/fan-out.d.ts.map +1 -1
  371. package/out/zql/src/ivm/fan-out.js.map +1 -1
  372. package/out/zql/src/ivm/filter-operators.d.ts +4 -4
  373. package/out/zql/src/ivm/filter-operators.d.ts.map +1 -1
  374. package/out/zql/src/ivm/filter-operators.js +8 -10
  375. package/out/zql/src/ivm/filter-operators.js.map +1 -1
  376. package/out/zql/src/ivm/filter.d.ts +2 -2
  377. package/out/zql/src/ivm/filter.d.ts.map +1 -1
  378. package/out/zql/src/ivm/filter.js +4 -7
  379. package/out/zql/src/ivm/filter.js.map +1 -1
  380. package/out/zql/src/ivm/flipped-join.js +2 -2
  381. package/out/zql/src/ivm/flipped-join.js.map +1 -1
  382. package/out/zql/src/ivm/maybe-split-and-push-edit-change.d.ts +1 -1
  383. package/out/zql/src/ivm/maybe-split-and-push-edit-change.d.ts.map +1 -1
  384. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js +4 -6
  385. package/out/zql/src/ivm/maybe-split-and-push-edit-change.js.map +1 -1
  386. package/out/zql/src/ivm/memory-source.d.ts +3 -15
  387. package/out/zql/src/ivm/memory-source.d.ts.map +1 -1
  388. package/out/zql/src/ivm/memory-source.js +19 -40
  389. package/out/zql/src/ivm/memory-source.js.map +1 -1
  390. package/out/zql/src/ivm/take.d.ts.map +1 -1
  391. package/out/zql/src/ivm/take.js +4 -3
  392. package/out/zql/src/ivm/take.js.map +1 -1
  393. package/out/zql/src/ivm/union-fan-in.d.ts.map +1 -1
  394. package/out/zql/src/ivm/union-fan-in.js +7 -9
  395. package/out/zql/src/ivm/union-fan-in.js.map +1 -1
  396. package/out/zql/src/ivm/view-apply-change.d.ts.map +1 -1
  397. package/out/zql/src/ivm/view-apply-change.js +4 -9
  398. package/out/zql/src/ivm/view-apply-change.js.map +1 -1
  399. package/out/zql/src/ivm/view.d.ts +0 -15
  400. package/out/zql/src/ivm/view.d.ts.map +1 -1
  401. package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -1
  402. package/out/zql/src/mutate/mutator-registry.js +2 -2
  403. package/out/zql/src/mutate/mutator-registry.js.map +1 -1
  404. package/out/zql/src/query/query-delegate-base.d.ts +1 -9
  405. package/out/zql/src/query/query-delegate-base.d.ts.map +1 -1
  406. package/out/zql/src/query/query-delegate-base.js +36 -132
  407. package/out/zql/src/query/query-delegate-base.js.map +1 -1
  408. package/out/zql/src/query/query-delegate.d.ts +1 -50
  409. package/out/zql/src/query/query-delegate.d.ts.map +1 -1
  410. package/out/zql/src/query/query-impl.d.ts +14 -25
  411. package/out/zql/src/query/query-impl.d.ts.map +1 -1
  412. package/out/zql/src/query/query-impl.js +94 -414
  413. package/out/zql/src/query/query-impl.js.map +1 -1
  414. package/out/zql/src/query/query-internals.d.ts +11 -21
  415. package/out/zql/src/query/query-internals.d.ts.map +1 -1
  416. package/out/zql/src/query/query-internals.js.map +1 -1
  417. package/out/zql/src/query/query.d.ts +2 -11
  418. package/out/zql/src/query/query.d.ts.map +1 -1
  419. package/out/zql/src/query/runnable-query-impl.d.ts +2 -3
  420. package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
  421. package/out/zql/src/query/runnable-query-impl.js +2 -23
  422. package/out/zql/src/query/runnable-query-impl.js.map +1 -1
  423. package/out/zql/src/query/typed-view.d.ts +1 -1
  424. package/out/zql/src/query/typed-view.d.ts.map +1 -1
  425. package/out/zqlite/src/db.d.ts +1 -9
  426. package/out/zqlite/src/db.d.ts.map +1 -1
  427. package/out/zqlite/src/db.js +2 -8
  428. package/out/zqlite/src/db.js.map +1 -1
  429. package/out/zqlite/src/query-builder.d.ts.map +1 -1
  430. package/out/zqlite/src/query-builder.js +1 -2
  431. package/out/zqlite/src/query-builder.js.map +1 -1
  432. package/out/zqlite/src/sqlite-stat-fanout.d.ts.map +1 -1
  433. package/out/zqlite/src/sqlite-stat-fanout.js +0 -1
  434. package/out/zqlite/src/sqlite-stat-fanout.js.map +1 -1
  435. package/out/zqlite/src/table-source.d.ts +1 -2
  436. package/out/zqlite/src/table-source.d.ts.map +1 -1
  437. package/out/zqlite/src/table-source.js +6 -12
  438. package/out/zqlite/src/table-source.js.map +1 -1
  439. package/package.json +3 -2
  440. package/out/replicache/src/dag/invalid-ref-count-error.d.ts +0 -12
  441. package/out/replicache/src/dag/invalid-ref-count-error.d.ts.map +0 -1
  442. package/out/replicache/src/dag/invalid-ref-count-error.js +0 -19
  443. package/out/replicache/src/dag/invalid-ref-count-error.js.map +0 -1
  444. package/out/shared/src/xxhash32.d.ts +0 -36
  445. package/out/shared/src/xxhash32.d.ts.map +0 -1
  446. package/out/shared/src/xxhash32.js +0 -51
  447. package/out/shared/src/xxhash32.js.map +0 -1
  448. package/out/zero-cache/src/db/index-predicate.d.ts +0 -4
  449. package/out/zero-cache/src/db/index-predicate.d.ts.map +0 -1
  450. package/out/zero-cache/src/db/index-predicate.js +0 -46
  451. package/out/zero-cache/src/db/index-predicate.js.map +0 -1
  452. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.d.ts +0 -19
  453. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.d.ts.map +0 -1
  454. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js +0 -581
  455. package/out/zero-cache/src/services/change-source/pg/schema/index-predicate.js.map +0 -1
  456. package/out/zero-cache/src/services/litestream/litestream-checkpointer.js +0 -131
  457. package/out/zero-cache/src/services/litestream/litestream-checkpointer.js.map +0 -1
  458. package/out/zero-cache/src/services/litestream/litestream-controller.d.ts +0 -70
  459. package/out/zero-cache/src/services/litestream/litestream-controller.d.ts.map +0 -1
  460. package/out/zero-cache/src/services/litestream/litestream-controller.js +0 -101
  461. package/out/zero-cache/src/services/litestream/litestream-controller.js.map +0 -1
  462. package/out/zero-cache/src/services/profz.d.ts +0 -7
  463. package/out/zero-cache/src/services/profz.d.ts.map +0 -1
  464. package/out/zero-cache/src/services/profz.js +0 -103
  465. package/out/zero-cache/src/services/profz.js.map +0 -1
  466. package/out/zero-cache/src/services/view-syncer/hydration-budget.d.ts +0 -33
  467. package/out/zero-cache/src/services/view-syncer/hydration-budget.d.ts.map +0 -1
  468. package/out/zero-cache/src/services/view-syncer/hydration-budget.js +0 -62
  469. package/out/zero-cache/src/services/view-syncer/hydration-budget.js.map +0 -1
  470. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.d.ts +0 -51
  471. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.d.ts.map +0 -1
  472. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js +0 -78
  473. package/out/zero-cache/src/services/view-syncer/hydration-circuit-breaker.js.map +0 -1
  474. package/out/zero-protocol/src/query-hash-visitor.d.ts +0 -81
  475. package/out/zero-protocol/src/query-hash-visitor.d.ts.map +0 -1
  476. package/out/zero-protocol/src/query-hash-visitor.js +0 -324
  477. package/out/zero-protocol/src/query-hash-visitor.js.map +0 -1
  478. package/out/zql/src/ivm/deferred-input.d.ts +0 -44
  479. package/out/zql/src/ivm/deferred-input.d.ts.map +0 -1
  480. package/out/zql/src/ivm/deferred-input.js +0 -89
  481. package/out/zql/src/ivm/deferred-input.js.map +0 -1
  482. package/out/zql/src/query/query-transitions.d.ts +0 -171
  483. package/out/zql/src/query/query-transitions.d.ts.map +0 -1
  484. package/out/zql/src/query/query-transitions.js +0 -207
  485. package/out/zql/src/query/query-transitions.js.map +0 -1
@@ -58,12 +58,8 @@ async function refresh(lc, memdag, perdag, clientID, mutators, diffConfig, close
58
58
  await Promise.all(ps);
59
59
  let newMemdagHeadHash = perdagClientGroupHeadHash;
60
60
  if (newMemdagMutations.length > 0) {
61
- let zeroData = await zero?.getTxData?.(newMemdagHeadHash, { openLazyRead: memdagWrite });
62
- for (let i = newMemdagMutations.length - 1; i >= 0; i--) {
63
- const { result, zeroData: next } = await rebaseMutationAndPutCommit(newMemdagMutations[i], memdagWrite, newMemdagHeadHash, mutators, lc, newMemdagMutations[i].meta.clientID, formatVersion, zeroData);
64
- newMemdagHeadHash = result.chunk.hash;
65
- zeroData = next;
66
- }
61
+ const zeroData = await zero?.getTxData?.(newMemdagHeadHash, { openLazyRead: memdagWrite });
62
+ for (let i = newMemdagMutations.length - 1; i >= 0; i--) newMemdagHeadHash = (await rebaseMutationAndPutCommit(newMemdagMutations[i], memdagWrite, newMemdagHeadHash, mutators, lc, newMemdagMutations[i].meta.clientID, formatVersion, zeroData)).chunk.hash;
67
63
  }
68
64
  const diffs = await diffCommits(memdagHeadCommit, await commitFromHash(newMemdagHeadHash, memdagWrite), memdagWrite, diffConfig, formatVersion);
69
65
  await memdagWrite.setHead(DEFAULT_HEAD_NAME, newMemdagHeadHash);
@@ -1 +1 @@
1
- {"version":3,"file":"refresh.js","names":[],"sources":["../../../../../replicache/src/persist/refresh.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport type {Enum} from '../../../shared/src/enum.ts';\nimport type {LazyStore} from '../dag/lazy-store.ts';\nimport type {Store} from '../dag/store.ts';\nimport type {Commit} from '../db/commit.ts';\nimport {\n DEFAULT_HEAD_NAME,\n type SnapshotMetaDD31,\n assertSnapshotCommitDD31,\n baseSnapshotFromCommit,\n baseSnapshotFromHash,\n baseSnapshotFromHead,\n commitFromHash,\n commitFromHead,\n compareCookiesForSnapshots,\n localMutationsGreaterThan,\n} from '../db/commit.ts';\nimport {rebaseMutationAndPutCommit} from '../db/rebase.ts';\nimport type * as FormatVersion from '../format-version-enum.ts';\nimport type {Hash} from '../hash.ts';\nimport type {ZeroOption} from '../replicache-options.ts';\nimport type {DiffsMap} from '../sync/diff.ts';\nimport {type DiffComputationConfig, diffCommits} from '../sync/diff.ts';\nimport type {ClientID} from '../sync/ids.ts';\nimport type {MutatorDefs} from '../types.ts';\nimport {withRead, withWrite} from '../with-transactions.ts';\nimport {\n ClientStateNotFoundError,\n type ClientV6,\n assertClientV6,\n getClientGroupForClient,\n mustGetClient,\n setClient,\n} from './clients.ts';\nimport {\n type ChunkWithSize,\n GatherNotCachedVisitor,\n} from './gather-not-cached-visitor.ts';\n\ntype FormatVersion = Enum<typeof FormatVersion>;\n\nconst GATHER_SIZE_LIMIT = 5 * 2 ** 20; // 5 MB\n\ntype RefreshResult =\n | {\n type: 'aborted';\n refreshHashesForRevert?: readonly Hash[] | undefined;\n }\n | {\n type: 'complete';\n diffs: DiffsMap;\n newPerdagClientHeadHash: Hash;\n oldHead: Hash;\n newHead: Hash;\n };\n\n/**\n * This returns the diff between the state of the btree before and after\n * refresh. It returns `undefined` if the refresh was aborted.\n */\nexport async function refresh(\n lc: LogContext,\n memdag: LazyStore,\n perdag: Store,\n clientID: ClientID,\n mutators: MutatorDefs,\n diffConfig: DiffComputationConfig,\n closed: () => boolean,\n formatVersion: FormatVersion,\n zero: ZeroOption | undefined,\n): Promise<{oldHead: Hash; newHead: Hash; diffs: DiffsMap} | undefined> {\n if (closed()) {\n return;\n }\n const memdagBaseSnapshot = await withRead(memdag, memdagRead =>\n baseSnapshotFromHead(DEFAULT_HEAD_NAME, memdagRead),\n );\n assertSnapshotCommitDD31(memdagBaseSnapshot);\n\n type PerdagWriteResult = [\n perdagClientGroupHeadHash: Hash,\n perdagClientGroupBaseSnapshot: Commit<SnapshotMetaDD31>,\n perdagLmid: number,\n gatheredChunks: ReadonlyMap<Hash, ChunkWithSize>,\n refreshHashesForRevert: readonly Hash[],\n ];\n\n // Suspend eviction and deletion of chunks cached by the lazy store\n // to prevent cache misses. If eviction and deletion are not suspended\n // some chunks that are not gathered due to already being cached, may be\n // evicted or deleted by the time the write lock is acquired on the memdag,\n // which can lead to cache misses when performing the rebase and diff.\n // It is important to avoid these cache misses because they often create jank\n // because they block local mutations, pulls and queries on reading from idb.\n // Cache misses can still happen during the rebase and diff, but only\n // if the gather step hits its size limit.\n const result: RefreshResult =\n await memdag.withSuspendedSourceCacheEvictsAndDeletes(async () => {\n const perdagWriteResult: PerdagWriteResult | undefined = await withWrite(\n perdag,\n async perdagWrite => {\n const clientGroup = await getClientGroupForClient(\n clientID,\n perdagWrite,\n );\n if (!clientGroup) {\n throw new ClientStateNotFoundError(clientID);\n }\n\n const perdagClientGroupHeadHash = clientGroup.headHash;\n const perdagClientGroupHeadCommit = await commitFromHash(\n perdagClientGroupHeadHash,\n perdagWrite,\n );\n const perdagLmid = await perdagClientGroupHeadCommit.getMutationID(\n clientID,\n perdagWrite,\n );\n\n // Need to pull this head into memdag, but can't have it disappear if\n // perdag moves forward while we're rebasing in memdag. Can't change\n // client headHash until our rebase in memdag is complete, because if\n // rebase fails, then nothing is keeping client's chunks alive in\n // perdag.\n const client = await mustGetClient(clientID, perdagWrite);\n assertClientV6(client);\n const perdagClientGroupBaseSnapshot = await baseSnapshotFromHash(\n perdagClientGroupHeadHash,\n perdagWrite,\n );\n assertSnapshotCommitDD31(perdagClientGroupBaseSnapshot);\n if (\n shouldAbortRefresh(\n memdagBaseSnapshot,\n perdagClientGroupBaseSnapshot,\n perdagClientGroupHeadHash,\n )\n ) {\n return undefined;\n }\n\n // To avoid pulling the entire perdag graph into the memdag\n // the amount of chunk data gathered is limited by size.\n const visitor = new GatherNotCachedVisitor(\n perdagWrite,\n memdag,\n GATHER_SIZE_LIMIT,\n );\n await visitor.visit(perdagClientGroupHeadHash);\n const {gatheredChunks} = visitor;\n\n const refreshHashesSet = new Set(client.refreshHashes);\n refreshHashesSet.add(perdagClientGroupHeadHash);\n\n const newClient: ClientV6 = {\n ...client,\n refreshHashes: [...refreshHashesSet],\n };\n\n await setClient(clientID, newClient, perdagWrite);\n return [\n perdagClientGroupHeadHash,\n perdagClientGroupBaseSnapshot,\n perdagLmid,\n gatheredChunks,\n client.refreshHashes,\n ];\n },\n );\n\n if (closed() || !perdagWriteResult) {\n return {\n type: 'aborted',\n } as const;\n }\n\n const [\n perdagClientGroupHeadHash,\n perdagClientGroupBaseSnapshot,\n perdagLmid,\n gatheredChunks,\n refreshHashesForRevert,\n ] = perdagWriteResult;\n return withWrite(memdag, async memdagWrite => {\n const memdagHeadCommit = await commitFromHead(\n DEFAULT_HEAD_NAME,\n memdagWrite,\n );\n const memdagBaseSnapshot = await baseSnapshotFromCommit(\n memdagHeadCommit,\n memdagWrite,\n );\n assertSnapshotCommitDD31(memdagBaseSnapshot);\n if (\n shouldAbortRefresh(\n memdagBaseSnapshot,\n perdagClientGroupBaseSnapshot,\n perdagClientGroupHeadHash,\n )\n ) {\n return {\n type: 'aborted',\n refreshHashesForRevert,\n };\n }\n\n const newMemdagMutations = await localMutationsGreaterThan(\n memdagHeadCommit,\n {[clientID]: perdagLmid},\n memdagWrite,\n );\n const ps = [];\n for (const {chunk, size} of gatheredChunks.values()) {\n ps.push(memdagWrite.putChunk(chunk, size));\n }\n await Promise.all(ps);\n\n let newMemdagHeadHash = perdagClientGroupHeadHash;\n if (newMemdagMutations.length > 0) {\n let zeroData = await zero?.getTxData?.(newMemdagHeadHash, {\n openLazyRead: memdagWrite,\n });\n for (let i = newMemdagMutations.length - 1; i >= 0; i--) {\n const {result, zeroData: next} = await rebaseMutationAndPutCommit(\n newMemdagMutations[i],\n memdagWrite,\n newMemdagHeadHash,\n mutators,\n lc,\n newMemdagMutations[i].meta.clientID,\n formatVersion,\n zeroData,\n );\n newMemdagHeadHash = result.chunk.hash;\n zeroData = next;\n }\n }\n\n const newMemdagHeadCommit = await commitFromHash(\n newMemdagHeadHash,\n memdagWrite,\n );\n const diffs = await diffCommits(\n memdagHeadCommit,\n newMemdagHeadCommit,\n memdagWrite,\n diffConfig,\n formatVersion,\n );\n\n await memdagWrite.setHead(DEFAULT_HEAD_NAME, newMemdagHeadHash);\n return {\n type: 'complete',\n diffs,\n oldHead: memdagHeadCommit.chunk.hash,\n newHead: newMemdagHeadHash,\n newPerdagClientHeadHash: perdagClientGroupHeadHash,\n } as const;\n });\n });\n\n if (closed()) {\n return;\n }\n\n const setRefreshHashes = (refreshHashes: readonly Hash[]) =>\n withWrite(perdag, async perdagWrite => {\n const client = await mustGetClient(clientID, perdagWrite);\n const newClient = {\n ...client,\n refreshHashes,\n };\n\n // If this cleanup never happens, it's no big deal, some data will stay\n // alive longer but next refresh will fix it.\n await setClient(clientID, newClient, perdagWrite);\n });\n\n if (result.type === 'aborted') {\n if (result.refreshHashesForRevert) {\n await setRefreshHashes(result.refreshHashesForRevert);\n }\n return undefined;\n }\n\n // Advance zero here before setting refresh hashes\n // since we must advance before delegating control of the microtask\n // loop.\n zero?.advance(result.oldHead, result.newHead, result.diffs.get('') ?? []);\n await setRefreshHashes([result.newPerdagClientHeadHash]);\n return {\n oldHead: result.oldHead,\n newHead: result.newHead,\n diffs: result.diffs,\n };\n}\n\nfunction shouldAbortRefresh(\n memdagBaseSnapshot: Commit<SnapshotMetaDD31>,\n perdagClientGroupBaseSnapshot: Commit<SnapshotMetaDD31>,\n perdagClientGroupHeadHash: Hash,\n): boolean {\n const baseSnapshotCookieCompareResult = compareCookiesForSnapshots(\n memdagBaseSnapshot,\n perdagClientGroupBaseSnapshot,\n );\n return (\n baseSnapshotCookieCompareResult > 0 ||\n (baseSnapshotCookieCompareResult === 0 &&\n perdagClientGroupHeadHash === perdagClientGroupBaseSnapshot.chunk.hash)\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"refresh.js","names":[],"sources":["../../../../../replicache/src/persist/refresh.ts"],"sourcesContent":["import type {LogContext} from '@rocicorp/logger';\nimport type {Enum} from '../../../shared/src/enum.ts';\nimport type {LazyStore} from '../dag/lazy-store.ts';\nimport type {Store} from '../dag/store.ts';\nimport type {Commit} from '../db/commit.ts';\nimport {\n DEFAULT_HEAD_NAME,\n type SnapshotMetaDD31,\n assertSnapshotCommitDD31,\n baseSnapshotFromCommit,\n baseSnapshotFromHash,\n baseSnapshotFromHead,\n commitFromHash,\n commitFromHead,\n compareCookiesForSnapshots,\n localMutationsGreaterThan,\n} from '../db/commit.ts';\nimport {rebaseMutationAndPutCommit} from '../db/rebase.ts';\nimport type * as FormatVersion from '../format-version-enum.ts';\nimport type {Hash} from '../hash.ts';\nimport type {ZeroOption} from '../replicache-options.ts';\nimport type {DiffsMap} from '../sync/diff.ts';\nimport {type DiffComputationConfig, diffCommits} from '../sync/diff.ts';\nimport type {ClientID} from '../sync/ids.ts';\nimport type {MutatorDefs} from '../types.ts';\nimport {withRead, withWrite} from '../with-transactions.ts';\nimport {\n ClientStateNotFoundError,\n type ClientV6,\n assertClientV6,\n getClientGroupForClient,\n mustGetClient,\n setClient,\n} from './clients.ts';\nimport {\n type ChunkWithSize,\n GatherNotCachedVisitor,\n} from './gather-not-cached-visitor.ts';\n\ntype FormatVersion = Enum<typeof FormatVersion>;\n\nconst GATHER_SIZE_LIMIT = 5 * 2 ** 20; // 5 MB\n\ntype RefreshResult =\n | {\n type: 'aborted';\n refreshHashesForRevert?: readonly Hash[] | undefined;\n }\n | {\n type: 'complete';\n diffs: DiffsMap;\n newPerdagClientHeadHash: Hash;\n oldHead: Hash;\n newHead: Hash;\n };\n\n/**\n * This returns the diff between the state of the btree before and after\n * refresh. It returns `undefined` if the refresh was aborted.\n */\nexport async function refresh(\n lc: LogContext,\n memdag: LazyStore,\n perdag: Store,\n clientID: ClientID,\n mutators: MutatorDefs,\n diffConfig: DiffComputationConfig,\n closed: () => boolean,\n formatVersion: FormatVersion,\n zero: ZeroOption | undefined,\n): Promise<{oldHead: Hash; newHead: Hash; diffs: DiffsMap} | undefined> {\n if (closed()) {\n return;\n }\n const memdagBaseSnapshot = await withRead(memdag, memdagRead =>\n baseSnapshotFromHead(DEFAULT_HEAD_NAME, memdagRead),\n );\n assertSnapshotCommitDD31(memdagBaseSnapshot);\n\n type PerdagWriteResult = [\n perdagClientGroupHeadHash: Hash,\n perdagClientGroupBaseSnapshot: Commit<SnapshotMetaDD31>,\n perdagLmid: number,\n gatheredChunks: ReadonlyMap<Hash, ChunkWithSize>,\n refreshHashesForRevert: readonly Hash[],\n ];\n\n // Suspend eviction and deletion of chunks cached by the lazy store\n // to prevent cache misses. If eviction and deletion are not suspended\n // some chunks that are not gathered due to already being cached, may be\n // evicted or deleted by the time the write lock is acquired on the memdag,\n // which can lead to cache misses when performing the rebase and diff.\n // It is important to avoid these cache misses because they often create jank\n // because they block local mutations, pulls and queries on reading from idb.\n // Cache misses can still happen during the rebase and diff, but only\n // if the gather step hits its size limit.\n const result: RefreshResult =\n await memdag.withSuspendedSourceCacheEvictsAndDeletes(async () => {\n const perdagWriteResult: PerdagWriteResult | undefined = await withWrite(\n perdag,\n async perdagWrite => {\n const clientGroup = await getClientGroupForClient(\n clientID,\n perdagWrite,\n );\n if (!clientGroup) {\n throw new ClientStateNotFoundError(clientID);\n }\n\n const perdagClientGroupHeadHash = clientGroup.headHash;\n const perdagClientGroupHeadCommit = await commitFromHash(\n perdagClientGroupHeadHash,\n perdagWrite,\n );\n const perdagLmid = await perdagClientGroupHeadCommit.getMutationID(\n clientID,\n perdagWrite,\n );\n\n // Need to pull this head into memdag, but can't have it disappear if\n // perdag moves forward while we're rebasing in memdag. Can't change\n // client headHash until our rebase in memdag is complete, because if\n // rebase fails, then nothing is keeping client's chunks alive in\n // perdag.\n const client = await mustGetClient(clientID, perdagWrite);\n assertClientV6(client);\n const perdagClientGroupBaseSnapshot = await baseSnapshotFromHash(\n perdagClientGroupHeadHash,\n perdagWrite,\n );\n assertSnapshotCommitDD31(perdagClientGroupBaseSnapshot);\n if (\n shouldAbortRefresh(\n memdagBaseSnapshot,\n perdagClientGroupBaseSnapshot,\n perdagClientGroupHeadHash,\n )\n ) {\n return undefined;\n }\n\n // To avoid pulling the entire perdag graph into the memdag\n // the amount of chunk data gathered is limited by size.\n const visitor = new GatherNotCachedVisitor(\n perdagWrite,\n memdag,\n GATHER_SIZE_LIMIT,\n );\n await visitor.visit(perdagClientGroupHeadHash);\n const {gatheredChunks} = visitor;\n\n const refreshHashesSet = new Set(client.refreshHashes);\n refreshHashesSet.add(perdagClientGroupHeadHash);\n\n const newClient: ClientV6 = {\n ...client,\n refreshHashes: [...refreshHashesSet],\n };\n\n await setClient(clientID, newClient, perdagWrite);\n return [\n perdagClientGroupHeadHash,\n perdagClientGroupBaseSnapshot,\n perdagLmid,\n gatheredChunks,\n client.refreshHashes,\n ];\n },\n );\n\n if (closed() || !perdagWriteResult) {\n return {\n type: 'aborted',\n } as const;\n }\n\n const [\n perdagClientGroupHeadHash,\n perdagClientGroupBaseSnapshot,\n perdagLmid,\n gatheredChunks,\n refreshHashesForRevert,\n ] = perdagWriteResult;\n return withWrite(memdag, async memdagWrite => {\n const memdagHeadCommit = await commitFromHead(\n DEFAULT_HEAD_NAME,\n memdagWrite,\n );\n const memdagBaseSnapshot = await baseSnapshotFromCommit(\n memdagHeadCommit,\n memdagWrite,\n );\n assertSnapshotCommitDD31(memdagBaseSnapshot);\n if (\n shouldAbortRefresh(\n memdagBaseSnapshot,\n perdagClientGroupBaseSnapshot,\n perdagClientGroupHeadHash,\n )\n ) {\n return {\n type: 'aborted',\n refreshHashesForRevert,\n };\n }\n\n const newMemdagMutations = await localMutationsGreaterThan(\n memdagHeadCommit,\n {[clientID]: perdagLmid},\n memdagWrite,\n );\n const ps = [];\n for (const {chunk, size} of gatheredChunks.values()) {\n ps.push(memdagWrite.putChunk(chunk, size));\n }\n await Promise.all(ps);\n\n let newMemdagHeadHash = perdagClientGroupHeadHash;\n if (newMemdagMutations.length > 0) {\n const zeroData = await zero?.getTxData?.(newMemdagHeadHash, {\n openLazyRead: memdagWrite,\n });\n for (let i = newMemdagMutations.length - 1; i >= 0; i--) {\n newMemdagHeadHash = (\n await rebaseMutationAndPutCommit(\n newMemdagMutations[i],\n memdagWrite,\n newMemdagHeadHash,\n mutators,\n lc,\n newMemdagMutations[i].meta.clientID,\n formatVersion,\n zeroData,\n )\n ).chunk.hash;\n }\n }\n\n const newMemdagHeadCommit = await commitFromHash(\n newMemdagHeadHash,\n memdagWrite,\n );\n const diffs = await diffCommits(\n memdagHeadCommit,\n newMemdagHeadCommit,\n memdagWrite,\n diffConfig,\n formatVersion,\n );\n\n await memdagWrite.setHead(DEFAULT_HEAD_NAME, newMemdagHeadHash);\n return {\n type: 'complete',\n diffs,\n oldHead: memdagHeadCommit.chunk.hash,\n newHead: newMemdagHeadHash,\n newPerdagClientHeadHash: perdagClientGroupHeadHash,\n } as const;\n });\n });\n\n if (closed()) {\n return;\n }\n\n const setRefreshHashes = (refreshHashes: readonly Hash[]) =>\n withWrite(perdag, async perdagWrite => {\n const client = await mustGetClient(clientID, perdagWrite);\n const newClient = {\n ...client,\n refreshHashes,\n };\n\n // If this cleanup never happens, it's no big deal, some data will stay\n // alive longer but next refresh will fix it.\n await setClient(clientID, newClient, perdagWrite);\n });\n\n if (result.type === 'aborted') {\n if (result.refreshHashesForRevert) {\n await setRefreshHashes(result.refreshHashesForRevert);\n }\n return undefined;\n }\n\n // Advance zero here before setting refresh hashes\n // since we must advance before delegating control of the microtask\n // loop.\n zero?.advance(result.oldHead, result.newHead, result.diffs.get('') ?? []);\n await setRefreshHashes([result.newPerdagClientHeadHash]);\n return {\n oldHead: result.oldHead,\n newHead: result.newHead,\n diffs: result.diffs,\n };\n}\n\nfunction shouldAbortRefresh(\n memdagBaseSnapshot: Commit<SnapshotMetaDD31>,\n perdagClientGroupBaseSnapshot: Commit<SnapshotMetaDD31>,\n perdagClientGroupHeadHash: Hash,\n): boolean {\n const baseSnapshotCookieCompareResult = compareCookiesForSnapshots(\n memdagBaseSnapshot,\n perdagClientGroupBaseSnapshot,\n );\n return (\n baseSnapshotCookieCompareResult > 0 ||\n (baseSnapshotCookieCompareResult === 0 &&\n perdagClientGroupHeadHash === perdagClientGroupBaseSnapshot.chunk.hash)\n );\n}\n"],"mappings":";;;;;;;AAyCA,IAAM,oBAAoB,IAAI,KAAK;;;;;AAmBnC,eAAsB,QACpB,IACA,QACA,QACA,UACA,UACA,YACA,QACA,eACA,MACsE;CACtE,IAAI,OAAO,GACT;CAEF,MAAM,qBAAqB,MAAM,SAAS,SAAQ,eAChD,qBAAqB,mBAAmB,UAAU,CACpD;CACA,yBAAyB,kBAAkB;CAmB3C,MAAM,SACJ,MAAM,OAAO,yCAAyC,YAAY;EAChE,MAAM,oBAAmD,MAAM,UAC7D,QACA,OAAM,gBAAe;GACnB,MAAM,cAAc,MAAM,wBACxB,UACA,WACF;GACA,IAAI,CAAC,aACH,MAAM,IAAI,yBAAyB,QAAQ;GAG7C,MAAM,4BAA4B,YAAY;GAK9C,MAAM,aAAa,OAAM,MAJiB,eACxC,2BACA,WACF,GACqD,cACnD,UACA,WACF;GAOA,MAAM,SAAS,MAAM,cAAc,UAAU,WAAW;GACxD,eAAe,MAAM;GACrB,MAAM,gCAAgC,MAAM,qBAC1C,2BACA,WACF;GACA,yBAAyB,6BAA6B;GACtD,IACE,mBACE,oBACA,+BACA,yBACF,GAEA;GAKF,MAAM,UAAU,IAAI,uBAClB,aACA,QACA,iBACF;GACA,MAAM,QAAQ,MAAM,yBAAyB;GAC7C,MAAM,EAAC,mBAAkB;GAEzB,MAAM,mBAAmB,IAAI,IAAI,OAAO,aAAa;GACrD,iBAAiB,IAAI,yBAAyB;GAO9C,MAAM,UAAU,UAAU;IAJxB,GAAG;IACH,eAAe,CAAC,GAAG,gBAAgB;GAGX,GAAW,WAAW;GAChD,OAAO;IACL;IACA;IACA;IACA;IACA,OAAO;GACT;EACF,CACF;EAEA,IAAI,OAAO,KAAK,CAAC,mBACf,OAAO,EACL,MAAM,UACR;EAGF,MAAM,CACJ,2BACA,+BACA,YACA,gBACA,0BACE;EACJ,OAAO,UAAU,QAAQ,OAAM,gBAAe;GAC5C,MAAM,mBAAmB,MAAM,eAC7B,mBACA,WACF;GACA,MAAM,qBAAqB,MAAM,uBAC/B,kBACA,WACF;GACA,yBAAyB,kBAAkB;GAC3C,IACE,mBACE,oBACA,+BACA,yBACF,GAEA,OAAO;IACL,MAAM;IACN;GACF;GAGF,MAAM,qBAAqB,MAAM,0BAC/B,kBACA,GAAE,WAAW,WAAU,GACvB,WACF;GACA,MAAM,KAAK,CAAC;GACZ,KAAK,MAAM,EAAC,OAAO,UAAS,eAAe,OAAO,GAChD,GAAG,KAAK,YAAY,SAAS,OAAO,IAAI,CAAC;GAE3C,MAAM,QAAQ,IAAI,EAAE;GAEpB,IAAI,oBAAoB;GACxB,IAAI,mBAAmB,SAAS,GAAG;IACjC,MAAM,WAAW,MAAM,MAAM,YAAY,mBAAmB,EAC1D,cAAc,YAChB,CAAC;IACD,KAAK,IAAI,IAAI,mBAAmB,SAAS,GAAG,KAAK,GAAG,KAClD,qBACE,MAAM,2BACJ,mBAAmB,IACnB,aACA,mBACA,UACA,IACA,mBAAmB,GAAG,KAAK,UAC3B,eACA,QACF,GACA,MAAM;GAEZ;GAMA,MAAM,QAAQ,MAAM,YAClB,kBACA,MANgC,eAChC,mBACA,WACF,GAIE,aACA,YACA,aACF;GAEA,MAAM,YAAY,QAAQ,mBAAmB,iBAAiB;GAC9D,OAAO;IACL,MAAM;IACN;IACA,SAAS,iBAAiB,MAAM;IAChC,SAAS;IACT,yBAAyB;GAC3B;EACF,CAAC;CACH,CAAC;CAEH,IAAI,OAAO,GACT;CAGF,MAAM,oBAAoB,kBACxB,UAAU,QAAQ,OAAM,gBAAe;EASrC,MAAM,UAAU,UAAU;GANxB,GAAG,MAFgB,cAAc,UAAU,WAAW;GAGtD;EAKwB,GAAW,WAAW;CAClD,CAAC;CAEH,IAAI,OAAO,SAAS,WAAW;EAC7B,IAAI,OAAO,wBACT,MAAM,iBAAiB,OAAO,sBAAsB;EAEtD;CACF;CAKA,MAAM,QAAQ,OAAO,SAAS,OAAO,SAAS,OAAO,MAAM,IAAI,EAAE,KAAK,CAAC,CAAC;CACxE,MAAM,iBAAiB,CAAC,OAAO,uBAAuB,CAAC;CACvD,OAAO;EACL,SAAS,OAAO;EAChB,SAAS,OAAO;EAChB,OAAO,OAAO;CAChB;AACF;AAEA,SAAS,mBACP,oBACA,+BACA,2BACS;CACT,MAAM,kCAAkC,2BACtC,oBACA,6BACF;CACA,OACE,kCAAkC,KACjC,oCAAoC,KACnC,8BAA8B,8BAA8B,MAAM;AAExE"}
@@ -4,7 +4,6 @@ import { type Cookie } from './cookies.ts';
4
4
  import { LazyStore } from './dag/lazy-store.ts';
5
5
  import { type Store } from './dag/store.ts';
6
6
  import { type Hash } from './hash.ts';
7
- import type { Store as KVStore } from './kv/store.ts';
8
7
  import { type PendingMutation } from './pending-mutations.ts';
9
8
  import { type OnClientsDeleted } from './persist/clients.ts';
10
9
  import type { Puller } from './puller.ts';
@@ -78,12 +77,6 @@ export declare class ReplicacheImpl<MD extends MutatorDefs = {}> {
78
77
  * stored.
79
78
  */
80
79
  get idbName(): string;
81
- /**
82
- * The KV store backing this instance. Its `kind` reflects the storage
83
- * currently in use, e.g. `'mem'` after an IndexedDB store fell back to
84
- * memory.
85
- */
86
- get kvStore(): KVStore;
87
80
  set auth(auth: string);
88
81
  get auth(): string;
89
82
  /** The schema version of the data understood by this application. */
@@ -135,13 +128,9 @@ export declare class ReplicacheImpl<MD extends MutatorDefs = {}> {
135
128
  */
136
129
  onSync: ((syncing: boolean) => void) | null;
137
130
  /**
138
- * `onClientStateNotFound` is called when the persistent client state can no
139
- * longer be used. This happens when:
140
- * - the persistent client has been garbage collected. This can happen if the
141
- * client has no pending mutations and has not been used for a while.
142
- * - the persistent store was found to be corrupt. Replicache then tries to
143
- * drop the database, including any pending mutations, so that a fresh one
144
- * is created on reload.
131
+ * `onClientStateNotFound` is called when the persistent client has been
132
+ * garbage collected. This can happen if the client has no pending mutations
133
+ * and has not been used for a while.
145
134
  *
146
135
  * The default behavior is to reload the page (using `location.reload()`). Set
147
136
  * this to `null` or provide your own function to prevent the page from
@@ -1 +1 @@
1
- {"version":3,"file":"replicache-impl.d.ts","sourceRoot":"","sources":["../../../../replicache/src/replicache-impl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replicache-impl.d.ts","sourceRoot":"","sources":["../../../../replicache/src/replicache-impl.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,6 @@ import { promiseVoid } from "../../shared/src/resolved-promises.js";
7
7
  import { deepFreeze } from "./frozen-json.js";
8
8
  import { makeIDBName } from "./make-idb-name.js";
9
9
  import { AbortError } from "../../shared/src/abort-error.js";
10
- import { InvalidRefCountError } from "./dag/invalid-ref-count-error.js";
11
10
  import { assertHash, emptyHash, newRandomHash } from "./hash.js";
12
11
  import { ChunkNotFoundError, mustGetHeadHash } from "./dag/store.js";
13
12
  import { StoreImpl } from "./dag/store-impl.js";
@@ -21,7 +20,7 @@ import { ClientStateNotFoundError, hasClientState, initClientV6 } from "./persis
21
20
  import { getKVStoreProvider } from "./get-kv-store-provider.js";
22
21
  import { createLogContext } from "./log-options.js";
23
22
  import { IDBDatabasesStore } from "./persist/idb-databases-store.js";
24
- import { COLLECT_IDB_INTERVAL, INITIAL_COLLECT_IDB_DELAY, dropDatabaseInternal, initCollectIDBDatabases } from "./persist/collect-idb-databases.js";
23
+ import { COLLECT_IDB_INTERVAL, INITIAL_COLLECT_IDB_DELAY, initCollectIDBDatabases } from "./persist/collect-idb-databases.js";
25
24
  import { throwIfClosed } from "./transaction-closed-error.js";
26
25
  import { getDocumentVisibilityWatcher } from "../../shared/src/document-visible.js";
27
26
  import { PullDelegate, PushDelegate } from "./connection-loop-delegates.js";
@@ -63,12 +62,6 @@ var PERSIST_IDLE_TIMEOUT_MS = 1e3;
63
62
  var REFRESH_IDLE_TIMEOUT_MS = 1e3;
64
63
  var PERSIST_THROTTLE_MS = 500;
65
64
  var REFRESH_THROTTLE_MS = 500;
66
- /**
67
- * Opening the database blocks everything Replicache does, including Zero's
68
- * first connect attempt, so a slow open is worth a warning rather than a
69
- * debug line.
70
- */
71
- var SLOW_DB_OPEN_THRESHOLD_MS = 50;
72
65
  var LAZY_STORE_SOURCE_CHUNK_CACHE_SIZE_LIMIT = 100 * 2 ** 20;
73
66
  var RECOVER_MUTATIONS_INTERVAL_MS = 300 * 1e3;
74
67
  var noop = () => {};
@@ -90,7 +83,6 @@ var ReplicacheImpl = class {
90
83
  */
91
84
  isClientGroupDisabled = false;
92
85
  #kvStoreProvider;
93
- #perKVStore;
94
86
  lastMutationID = 0;
95
87
  /**
96
88
  * This is the name Replicache uses for the IndexedDB database where data is
@@ -99,14 +91,6 @@ var ReplicacheImpl = class {
99
91
  get idbName() {
100
92
  return makeIDBName(this.name, this.schemaVersion);
101
93
  }
102
- /**
103
- * The KV store backing this instance. Its `kind` reflects the storage
104
- * currently in use, e.g. `'mem'` after an IndexedDB store fell back to
105
- * memory.
106
- */
107
- get kvStore() {
108
- return this.#perKVStore;
109
- }
110
94
  set auth(auth) {
111
95
  if (this.#zero) this.#zero.auth = auth;
112
96
  this.#auth = auth;
@@ -128,12 +112,6 @@ var ReplicacheImpl = class {
128
112
  #online = true;
129
113
  #clientID = makeClientID();
130
114
  #ready;
131
- /**
132
- * Resolves if open fails, for whatever reason. `#ready` never resolves in
133
- * that case, so `close()` waits on whichever of the two settles first
134
- * instead of hanging forever.
135
- */
136
- #openFailed = resolver();
137
115
  #profileIDPromise;
138
116
  #clientGroupIDPromise;
139
117
  #mutatorRegistry = {};
@@ -203,13 +181,9 @@ var ReplicacheImpl = class {
203
181
  */
204
182
  onSync = null;
205
183
  /**
206
- * `onClientStateNotFound` is called when the persistent client state can no
207
- * longer be used. This happens when:
208
- * - the persistent client has been garbage collected. This can happen if the
209
- * client has no pending mutations and has not been used for a while.
210
- * - the persistent store was found to be corrupt. Replicache then tries to
211
- * drop the database, including any pending mutations, so that a fresh one
212
- * is created on reload.
184
+ * `onClientStateNotFound` is called when the persistent client has been
185
+ * garbage collected. This can happen if the client has no pending mutations
186
+ * and has not been used for a while.
213
187
  *
214
188
  * The default behavior is to reload the page (using `location.reload()`). Set
215
189
  * this to `null` or provide your own function to prevent the page from
@@ -272,9 +246,8 @@ var ReplicacheImpl = class {
272
246
  const kvStoreProvider = getKVStoreProvider(this.#lc, options.kvStore);
273
247
  this.#kvStoreProvider = kvStoreProvider;
274
248
  const perKVStore = kvStoreProvider.create(this.idbName);
275
- this.#perKVStore = perKVStore;
276
249
  this.#idbDatabases = new IDBDatabasesStore(kvStoreProvider.create);
277
- this.perdag = new StoreImpl(perKVStore, newRandomHash, assertHash, this.#onInvalidRefCount);
250
+ this.perdag = new StoreImpl(perKVStore, newRandomHash, assertHash);
278
251
  this.memdag = new LazyStore(this.perdag, LAZY_STORE_SOURCE_CHUNK_CACHE_SIZE_LIMIT, newRandomHash, assertHash);
279
252
  const readyResolver = resolver();
280
253
  this.#ready = readyResolver.promise;
@@ -294,27 +267,16 @@ var ReplicacheImpl = class {
294
267
  this.#onPersist = initOnPersistChannel(this.name, this.#closeAbortController.signal, (persistInfo) => {
295
268
  this.#handlePersist(persistInfo);
296
269
  });
297
- this.#open(indexes, enableClientGroupForking, enableMutationRecovery, clientMaxAgeMs, profileIDResolver.resolve, clientGroupIDResolver.resolve, readyResolver.resolve, onClientsDeleted).catch((e) => {
298
- this.#openFailed.resolve();
299
- if (e instanceof InvalidRefCountError) {
300
- this.#lc.debug?.("Open failed because the persistent store is corrupt");
301
- return;
302
- }
303
- throw e;
304
- });
270
+ this.#open(indexes, enableClientGroupForking, enableMutationRecovery, clientMaxAgeMs, profileIDResolver.resolve, clientGroupIDResolver.resolve, readyResolver.resolve, onClientsDeleted);
305
271
  }
306
272
  async #open(indexes, enableClientGroupForking, enableMutationRecovery, clientMaxAgeMs, profileIDResolver, resolveClientGroupID, resolveReady, onClientsDeleted) {
307
273
  const { clientID } = this;
308
- const openStart = performance.now();
309
274
  await closingInstances.get(this.name);
310
275
  await this.#idbDatabases.getProfileID().then(profileIDResolver);
311
276
  await this.#idbDatabases.putDatabase(this.#idbDatabase);
312
277
  const [client, headHash, , isNewClientGroup] = await initClientV6(clientID, this.#lc, this.perdag, Object.keys(this.#mutatorRegistry), indexes, 7, enableClientGroupForking);
313
278
  resolveClientGroupID(client.clientGroupID);
314
279
  await withWrite(this.memdag, (write) => write.setHead(DEFAULT_HEAD_NAME, headHash));
315
- const dbOpenMs = performance.now() - openStart;
316
- if (dbOpenMs > SLOW_DB_OPEN_THRESHOLD_MS) this.#lc.warn?.(`Opening the database took ${Math.round(dbOpenMs)}ms`, { name: this.idbName });
317
- else this.#lc.debug?.("Opened the database in", Math.round(dbOpenMs), "ms");
318
280
  await this.#zero?.init(headHash, this.memdag);
319
281
  resolveReady();
320
282
  if (this.#enablePullAndPushInOpen) {
@@ -326,7 +288,7 @@ var ReplicacheImpl = class {
326
288
  this.#clientStateNotFoundOnClient(clientID);
327
289
  }, HEARTBEAT_INTERVAL, this.#lc, signal);
328
290
  initClientGC(clientID, this.perdag, clientMaxAgeMs, GC_INTERVAL, onClientsDeleted, this.#lc, signal);
329
- initCollectIDBDatabases(this.#idbDatabases, this.#kvStoreProvider, COLLECT_IDB_INTERVAL, INITIAL_COLLECT_IDB_DELAY, 2 * clientMaxAgeMs, enableMutationRecovery, onClientsDeleted, this.#lc, signal, (name, createKVStore) => new StoreImpl(createKVStore(name), newRandomHash, assertHash, name === this.idbName ? this.#onInvalidRefCount : void 0));
291
+ initCollectIDBDatabases(this.#idbDatabases, this.#kvStoreProvider, COLLECT_IDB_INTERVAL, INITIAL_COLLECT_IDB_DELAY, 2 * clientMaxAgeMs, enableMutationRecovery, onClientsDeleted, this.#lc, signal);
330
292
  initClientGroupGC(this.perdag, enableMutationRecovery, this.#lc, signal);
331
293
  initNewClientChannel(this.name, this.idbName, signal, client.clientGroupID, isNewClientGroup, () => {
332
294
  this.#fireOnUpdateNeeded(updateNeededReasonNewClientGroup);
@@ -403,7 +365,7 @@ var ReplicacheImpl = class {
403
365
  closingInstances.set(this.name, promise);
404
366
  this.#closeAbortController.abort();
405
367
  getBrowserGlobal("document")?.removeEventListener("visibilitychange", this.#onVisibilityChange);
406
- await Promise.race([this.#ready, this.#openFailed.promise]);
368
+ await this.#ready;
407
369
  const closingPromises = [
408
370
  this.memdag.close(),
409
371
  this.perdag.close(),
@@ -429,13 +391,11 @@ var ReplicacheImpl = class {
429
391
  this.#schedulePersist();
430
392
  return;
431
393
  }
432
- let zeroData = await this.#zero?.getTxData?.(syncHead);
394
+ const zeroData = await this.#zero?.getTxData?.(syncHead);
433
395
  for (const mutation of replayMutations) {
434
396
  if (this.#subscriptions.hasPendingSubscriptionRuns) await Promise.resolve();
435
397
  const { meta } = mutation;
436
- const { result, zeroData: next } = await withWriteNoImplicitCommit(this.memdag, (dagWrite) => rebaseMutationAndCommit(mutation, dagWrite, syncHead, SYNC_HEAD_NAME, this.#mutatorRegistry, lc, isLocalMetaDD31(meta) ? meta.clientID : clientID, 7, zeroData));
437
- syncHead = result;
438
- zeroData = next;
398
+ syncHead = await withWriteNoImplicitCommit(this.memdag, (dagWrite) => rebaseMutationAndCommit(mutation, dagWrite, syncHead, SYNC_HEAD_NAME, this.#mutatorRegistry, lc, isLocalMetaDD31(meta) ? meta.clientID : clientID, 7, zeroData));
439
399
  }
440
400
  }
441
401
  }
@@ -658,10 +618,7 @@ var ReplicacheImpl = class {
658
618
  await persistDD31(this.#lc, clientID, this.memdag, this.perdag, this.#mutatorRegistry, () => this.#closed, 7, this.#zero?.getTxData);
659
619
  } catch (e) {
660
620
  if (e instanceof ClientStateNotFoundError) this.#clientStateNotFoundOnClient(clientID);
661
- else if (e instanceof InvalidRefCountError) {
662
- await this.#handleInvalidRefCount(e);
663
- return;
664
- } else if (this.#closed) this.#lc.debug?.("Exception persisting during close", e);
621
+ else if (this.#closed) this.#lc.debug?.("Exception persisting during close", e);
665
622
  else throw e;
666
623
  }
667
624
  const clientGroupID = await this.#clientGroupIDPromise;
@@ -681,7 +638,6 @@ var ReplicacheImpl = class {
681
638
  refreshResult = await refresh(this.#lc, this.memdag, this.perdag, clientID, this.#mutatorRegistry, this.#subscriptions, () => this.closed, 7, this.#zero);
682
639
  } catch (e) {
683
640
  if (e instanceof ClientStateNotFoundError) this.#clientStateNotFoundOnClient(clientID);
684
- else if (e instanceof InvalidRefCountError) await this.#handleInvalidRefCount(e);
685
641
  else if (this.#closed) this.#lc.debug?.("Exception refreshing during close", e);
686
642
  else throw e;
687
643
  }
@@ -694,69 +650,6 @@ var ReplicacheImpl = class {
694
650
  this.#lc.error?.(`Client state not found on client, clientID: ${clientID}`);
695
651
  this.#fireOnClientStateNotFound();
696
652
  }
697
- /**
698
- * Set once recovery from a corrupt database has started. Every write path
699
- * into the perdag (open, persist, refresh, heartbeat, GC, ...) can trip on
700
- * the same corrupt key, so recovery runs once and later reports await it.
701
- */
702
- #corruptDatabaseRecovery;
703
- /**
704
- * Installed on the dag store that writes to our database. The store calls
705
- * it after the failing transaction has been released, so dropping the
706
- * database from here does not race with the rollback.
707
- */
708
- #onInvalidRefCount = (e) => {
709
- this.#handleInvalidRefCount(e);
710
- };
711
- /**
712
- * The persistent dag store contains an invalid ref count. This means the
713
- * store is corrupt (due to some unknown bug) and every subsequent write that
714
- * touches that chunk would fail the same way. There is no way to repair it,
715
- * so we treat it like the client state was lost and fire
716
- * `onClientStateNotFound`.
717
- *
718
- * Disabling the client group is not enough: the corrupt ref count stays in
719
- * the underlying kv store and any later write that touches that chunk (for
720
- * example rewriting the `clients` chunk when a new client starts) would hit
721
- * it again. Instead we drop the whole database so that the reload starts
722
- * from a fresh store. Pending local mutations in this database are lost.
723
- *
724
- * This is expected to be exceedingly rare. Other instances sharing the
725
- * database are not told: they simply hit the same corrupt key (or, once
726
- * this instance drops the database, a generic storage error) on their own
727
- * next write and recover the same way then. That's an acceptable delay for
728
- * something we don't expect to ever happen.
729
- */
730
- #handleInvalidRefCount(e) {
731
- if (this.#corruptDatabaseRecovery === void 0) {
732
- this.#lc.error?.(`Client state is corrupt on client, clientID: ${this.clientID}. Dropping database ${this.idbName}`, e);
733
- this.#corruptDatabaseRecovery = this.#dropDatabaseAndFireOnClientStateNotFound();
734
- }
735
- return this.#corruptDatabaseRecovery;
736
- }
737
- /**
738
- * Drops our database, then fires `onClientStateNotFound` so the app can
739
- * recover, whether or not the drop itself succeeded.
740
- *
741
- * Uses its own handle on the databases registry rather than `#idbDatabases`
742
- * so it works even when `close()` is already closing this instance.
743
- */
744
- async #dropDatabaseAndFireOnClientStateNotFound() {
745
- const { idbName, clientID } = this;
746
- let idbDatabases;
747
- try {
748
- idbDatabases = new IDBDatabasesStore(this.#kvStoreProvider.create);
749
- await dropDatabaseInternal(idbName, idbDatabases, this.#kvStoreProvider.drop);
750
- } catch (dropError) {
751
- this.#lc.error?.(`Failed to drop database ${idbName}, clientID: ${clientID}`, dropError);
752
- }
753
- try {
754
- await idbDatabases?.close();
755
- } catch (closeError) {
756
- this.#lc.debug?.(`Failed to close the databases registry after dropping ${idbName}, clientID: ${clientID}`, closeError);
757
- }
758
- this.#fireOnClientStateNotFound();
759
- }
760
653
  async #clientStateNotFoundOnServer() {
761
654
  const clientGroupID = await this.#clientGroupIDPromise;
762
655
  this.#lc.error?.(`Client state not found on server, clientGroupID: ${clientGroupID}`);