@livestore/common 0.4.0-dev.8 → 0.4.0

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 (518) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/ClientSessionLeaderThreadProxy.d.ts +27 -12
  3. package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
  4. package/dist/ClientSessionLeaderThreadProxy.js.map +1 -1
  5. package/dist/WorkerTransportError.d.ts +11 -0
  6. package/dist/WorkerTransportError.d.ts.map +1 -0
  7. package/dist/WorkerTransportError.js +11 -0
  8. package/dist/WorkerTransportError.js.map +1 -0
  9. package/dist/adapter-types.d.ts +37 -7
  10. package/dist/adapter-types.d.ts.map +1 -1
  11. package/dist/adapter-types.js +27 -1
  12. package/dist/adapter-types.js.map +1 -1
  13. package/dist/bounded-collections.d.ts.map +1 -1
  14. package/dist/bounded-collections.js +6 -4
  15. package/dist/bounded-collections.js.map +1 -1
  16. package/dist/debug-info.d.ts.map +1 -1
  17. package/dist/debug-info.js +33 -6
  18. package/dist/debug-info.js.map +1 -1
  19. package/dist/devtools/devtools-compatibility.test.d.ts +2 -0
  20. package/dist/devtools/devtools-compatibility.test.d.ts.map +1 -0
  21. package/dist/devtools/devtools-compatibility.test.js +15 -0
  22. package/dist/devtools/devtools-compatibility.test.js.map +1 -0
  23. package/dist/devtools/devtools-messages-client-session.d.ts +55 -24
  24. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
  25. package/dist/devtools/devtools-messages-client-session.js +22 -5
  26. package/dist/devtools/devtools-messages-client-session.js.map +1 -1
  27. package/dist/devtools/devtools-messages-common.d.ts +11 -14
  28. package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
  29. package/dist/devtools/devtools-messages-common.js +7 -9
  30. package/dist/devtools/devtools-messages-common.js.map +1 -1
  31. package/dist/devtools/devtools-messages-leader.d.ts +65 -30
  32. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  33. package/dist/devtools/devtools-messages-leader.js +29 -11
  34. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  35. package/dist/devtools/devtools-sessioninfo.d.ts +14 -2
  36. package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
  37. package/dist/devtools/devtools-sessioninfo.js +7 -4
  38. package/dist/devtools/devtools-sessioninfo.js.map +1 -1
  39. package/dist/devtools/mod.d.ts +13 -2
  40. package/dist/devtools/mod.d.ts.map +1 -1
  41. package/dist/devtools/mod.js +10 -3
  42. package/dist/devtools/mod.js.map +1 -1
  43. package/dist/errors.d.ts +48 -18
  44. package/dist/errors.d.ts.map +1 -1
  45. package/dist/errors.js +20 -12
  46. package/dist/errors.js.map +1 -1
  47. package/dist/index.d.ts +4 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +4 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/leader-thread/LeaderSyncProcessor.d.ts +53 -6
  52. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  53. package/dist/leader-thread/LeaderSyncProcessor.js +325 -257
  54. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  55. package/dist/leader-thread/RejectedPushError.d.ts +107 -0
  56. package/dist/leader-thread/RejectedPushError.d.ts.map +1 -0
  57. package/dist/leader-thread/RejectedPushError.js +78 -0
  58. package/dist/leader-thread/RejectedPushError.js.map +1 -0
  59. package/dist/leader-thread/connection.js +1 -1
  60. package/dist/leader-thread/connection.js.map +1 -1
  61. package/dist/leader-thread/eventlog.d.ts +19 -14
  62. package/dist/leader-thread/eventlog.d.ts.map +1 -1
  63. package/dist/leader-thread/eventlog.js +78 -18
  64. package/dist/leader-thread/eventlog.js.map +1 -1
  65. package/dist/leader-thread/leader-worker-devtools.d.ts +1 -2
  66. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  67. package/dist/leader-thread/leader-worker-devtools.js +90 -58
  68. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  69. package/dist/leader-thread/make-leader-thread-layer.d.ts +15 -7
  70. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  71. package/dist/leader-thread/make-leader-thread-layer.js +49 -17
  72. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  73. package/dist/leader-thread/make-leader-thread-layer.test.d.ts +2 -0
  74. package/dist/leader-thread/make-leader-thread-layer.test.d.ts.map +1 -0
  75. package/dist/leader-thread/make-leader-thread-layer.test.js +32 -0
  76. package/dist/leader-thread/make-leader-thread-layer.test.js.map +1 -0
  77. package/dist/leader-thread/materialize-event.d.ts +1 -1
  78. package/dist/leader-thread/materialize-event.d.ts.map +1 -1
  79. package/dist/leader-thread/materialize-event.js +28 -9
  80. package/dist/leader-thread/materialize-event.js.map +1 -1
  81. package/dist/leader-thread/mod.d.ts +1 -0
  82. package/dist/leader-thread/mod.d.ts.map +1 -1
  83. package/dist/leader-thread/mod.js +1 -0
  84. package/dist/leader-thread/mod.js.map +1 -1
  85. package/dist/leader-thread/recreate-db.d.ts +2 -2
  86. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  87. package/dist/leader-thread/recreate-db.js +6 -6
  88. package/dist/leader-thread/recreate-db.js.map +1 -1
  89. package/dist/leader-thread/shutdown-channel.d.ts +2 -2
  90. package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
  91. package/dist/leader-thread/shutdown-channel.js +2 -2
  92. package/dist/leader-thread/shutdown-channel.js.map +1 -1
  93. package/dist/leader-thread/stream-events.d.ts +56 -0
  94. package/dist/leader-thread/stream-events.d.ts.map +1 -0
  95. package/dist/leader-thread/stream-events.js +167 -0
  96. package/dist/leader-thread/stream-events.js.map +1 -0
  97. package/dist/leader-thread/types.d.ts +95 -17
  98. package/dist/leader-thread/types.d.ts.map +1 -1
  99. package/dist/leader-thread/types.js +13 -0
  100. package/dist/leader-thread/types.js.map +1 -1
  101. package/dist/logging.d.ts +40 -0
  102. package/dist/logging.d.ts.map +1 -0
  103. package/dist/logging.js +33 -0
  104. package/dist/logging.js.map +1 -0
  105. package/dist/make-client-session.d.ts +5 -3
  106. package/dist/make-client-session.d.ts.map +1 -1
  107. package/dist/make-client-session.js +7 -4
  108. package/dist/make-client-session.js.map +1 -1
  109. package/dist/materializer-helper.d.ts +6 -6
  110. package/dist/materializer-helper.d.ts.map +1 -1
  111. package/dist/materializer-helper.js +18 -8
  112. package/dist/materializer-helper.js.map +1 -1
  113. package/dist/otel.d.ts +2 -1
  114. package/dist/otel.d.ts.map +1 -1
  115. package/dist/otel.js +7 -2
  116. package/dist/otel.js.map +1 -1
  117. package/dist/rematerialize-from-eventlog.d.ts +3 -3
  118. package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
  119. package/dist/rematerialize-from-eventlog.js +40 -29
  120. package/dist/rematerialize-from-eventlog.js.map +1 -1
  121. package/dist/schema/EventDef/define.d.ts +161 -0
  122. package/dist/schema/EventDef/define.d.ts.map +1 -0
  123. package/dist/schema/EventDef/define.js +140 -0
  124. package/dist/schema/EventDef/define.js.map +1 -0
  125. package/dist/schema/EventDef/deprecated.d.ts +99 -0
  126. package/dist/schema/EventDef/deprecated.d.ts.map +1 -0
  127. package/dist/schema/EventDef/deprecated.js +144 -0
  128. package/dist/schema/EventDef/deprecated.js.map +1 -0
  129. package/dist/schema/EventDef/deprecated.test.d.ts +2 -0
  130. package/dist/schema/EventDef/deprecated.test.d.ts.map +1 -0
  131. package/dist/schema/EventDef/deprecated.test.js +95 -0
  132. package/dist/schema/EventDef/deprecated.test.js.map +1 -0
  133. package/dist/schema/EventDef/event-def.d.ts +110 -0
  134. package/dist/schema/EventDef/event-def.d.ts.map +1 -0
  135. package/dist/schema/EventDef/event-def.js +2 -0
  136. package/dist/schema/EventDef/event-def.js.map +1 -0
  137. package/dist/schema/EventDef/facts.d.ts +118 -0
  138. package/dist/schema/EventDef/facts.d.ts.map +1 -0
  139. package/dist/schema/EventDef/facts.js +53 -0
  140. package/dist/schema/EventDef/facts.js.map +1 -0
  141. package/dist/schema/EventDef/materializer.d.ts +155 -0
  142. package/dist/schema/EventDef/materializer.d.ts.map +1 -0
  143. package/dist/schema/EventDef/materializer.js +83 -0
  144. package/dist/schema/EventDef/materializer.js.map +1 -0
  145. package/dist/schema/EventDef/mod.d.ts +6 -0
  146. package/dist/schema/EventDef/mod.d.ts.map +1 -0
  147. package/dist/schema/EventDef/mod.js +6 -0
  148. package/dist/schema/EventDef/mod.js.map +1 -0
  149. package/dist/schema/EventSequenceNumber/client.d.ts +136 -0
  150. package/dist/schema/EventSequenceNumber/client.d.ts.map +1 -0
  151. package/dist/schema/EventSequenceNumber/client.js +193 -0
  152. package/dist/schema/EventSequenceNumber/client.js.map +1 -0
  153. package/dist/schema/EventSequenceNumber/global.d.ts +15 -0
  154. package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -0
  155. package/dist/schema/EventSequenceNumber/global.js +14 -0
  156. package/dist/schema/EventSequenceNumber/global.js.map +1 -0
  157. package/dist/schema/EventSequenceNumber/mod.d.ts +37 -0
  158. package/dist/schema/EventSequenceNumber/mod.d.ts.map +1 -0
  159. package/dist/schema/EventSequenceNumber/mod.js +37 -0
  160. package/dist/schema/EventSequenceNumber/mod.js.map +1 -0
  161. package/dist/schema/EventSequenceNumber.test.js +44 -44
  162. package/dist/schema/EventSequenceNumber.test.js.map +1 -1
  163. package/dist/schema/{LiveStoreEvent.d.ts → LiveStoreEvent/client.d.ts} +102 -111
  164. package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -0
  165. package/dist/schema/LiveStoreEvent/client.js +176 -0
  166. package/dist/schema/LiveStoreEvent/client.js.map +1 -0
  167. package/dist/schema/LiveStoreEvent/client.test.d.ts +2 -0
  168. package/dist/schema/LiveStoreEvent/client.test.d.ts.map +1 -0
  169. package/dist/schema/LiveStoreEvent/client.test.js +111 -0
  170. package/dist/schema/LiveStoreEvent/client.test.js.map +1 -0
  171. package/dist/schema/LiveStoreEvent/for-event-def.d.ts +52 -0
  172. package/dist/schema/LiveStoreEvent/for-event-def.d.ts.map +1 -0
  173. package/dist/schema/LiveStoreEvent/for-event-def.js +2 -0
  174. package/dist/schema/LiveStoreEvent/for-event-def.js.map +1 -0
  175. package/dist/schema/LiveStoreEvent/global.d.ts +36 -0
  176. package/dist/schema/LiveStoreEvent/global.d.ts.map +1 -0
  177. package/dist/schema/LiveStoreEvent/global.js +31 -0
  178. package/dist/schema/LiveStoreEvent/global.js.map +1 -0
  179. package/dist/schema/LiveStoreEvent/input.d.ts +46 -0
  180. package/dist/schema/LiveStoreEvent/input.d.ts.map +1 -0
  181. package/dist/schema/LiveStoreEvent/input.js +26 -0
  182. package/dist/schema/LiveStoreEvent/input.js.map +1 -0
  183. package/dist/schema/LiveStoreEvent/mod.d.ts +5 -0
  184. package/dist/schema/LiveStoreEvent/mod.d.ts.map +1 -0
  185. package/dist/schema/LiveStoreEvent/mod.js +5 -0
  186. package/dist/schema/LiveStoreEvent/mod.js.map +1 -0
  187. package/dist/schema/events.d.ts +1 -1
  188. package/dist/schema/events.d.ts.map +1 -1
  189. package/dist/schema/events.js +1 -1
  190. package/dist/schema/events.js.map +1 -1
  191. package/dist/schema/mod.d.ts +6 -4
  192. package/dist/schema/mod.d.ts.map +1 -1
  193. package/dist/schema/mod.js +5 -4
  194. package/dist/schema/mod.js.map +1 -1
  195. package/dist/schema/schema.d.ts +16 -1
  196. package/dist/schema/schema.d.ts.map +1 -1
  197. package/dist/schema/schema.js +32 -4
  198. package/dist/schema/schema.js.map +1 -1
  199. package/dist/schema/state/sqlite/client-document-def.d.ts +2 -1
  200. package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
  201. package/dist/schema/state/sqlite/client-document-def.js +36 -15
  202. package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
  203. package/dist/schema/state/sqlite/client-document-def.test.js +121 -2
  204. package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
  205. package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
  206. package/dist/schema/state/sqlite/column-annotations.js +1 -1
  207. package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
  208. package/dist/schema/state/sqlite/column-annotations.test.js +2 -2
  209. package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
  210. package/dist/schema/state/sqlite/column-def.d.ts.map +1 -1
  211. package/dist/schema/state/sqlite/column-def.js +96 -47
  212. package/dist/schema/state/sqlite/column-def.js.map +1 -1
  213. package/dist/schema/state/sqlite/column-def.test.js +51 -12
  214. package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
  215. package/dist/schema/state/sqlite/column-spec.d.ts.map +1 -1
  216. package/dist/schema/state/sqlite/column-spec.js +30 -12
  217. package/dist/schema/state/sqlite/column-spec.js.map +1 -1
  218. package/dist/schema/state/sqlite/column-spec.test.js +24 -15
  219. package/dist/schema/state/sqlite/column-spec.test.js.map +1 -1
  220. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +2 -2
  221. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
  222. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +16 -10
  223. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -1
  224. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +15 -4
  225. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
  226. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +1 -1
  227. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -1
  228. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +1 -1
  229. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
  230. package/dist/schema/state/sqlite/db-schema/dsl/mod.js +1 -1
  231. package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
  232. package/dist/schema/state/sqlite/mod.d.ts +2 -2
  233. package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
  234. package/dist/schema/state/sqlite/mod.js +5 -7
  235. package/dist/schema/state/sqlite/mod.js.map +1 -1
  236. package/dist/schema/state/sqlite/query-builder/api.d.ts +51 -22
  237. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
  238. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
  239. package/dist/schema/state/sqlite/query-builder/astToSql.js +99 -22
  240. package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
  241. package/dist/schema/state/sqlite/query-builder/impl.d.ts +1 -1
  242. package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
  243. package/dist/schema/state/sqlite/query-builder/impl.js +28 -15
  244. package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
  245. package/dist/schema/state/sqlite/query-builder/impl.test.js +231 -93
  246. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
  247. package/dist/schema/state/sqlite/schema-helpers.d.ts +2 -2
  248. package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -1
  249. package/dist/schema/state/sqlite/schema-helpers.js +24 -14
  250. package/dist/schema/state/sqlite/schema-helpers.js.map +1 -1
  251. package/dist/schema/state/sqlite/schema-helpers.test.d.ts +2 -0
  252. package/dist/schema/state/sqlite/schema-helpers.test.d.ts.map +1 -0
  253. package/dist/schema/state/sqlite/schema-helpers.test.js +36 -0
  254. package/dist/schema/state/sqlite/schema-helpers.test.js.map +1 -0
  255. package/dist/schema/state/sqlite/{system-tables.d.ts → system-tables/eventlog-tables.d.ts} +21 -450
  256. package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts.map +1 -0
  257. package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +54 -0
  258. package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -0
  259. package/dist/schema/state/sqlite/system-tables/mod.d.ts +3 -0
  260. package/dist/schema/state/sqlite/system-tables/mod.d.ts.map +1 -0
  261. package/dist/schema/state/sqlite/system-tables/mod.js +3 -0
  262. package/dist/schema/state/sqlite/system-tables/mod.js.map +1 -0
  263. package/dist/schema/state/sqlite/system-tables/state-tables.d.ts +456 -0
  264. package/dist/schema/state/sqlite/system-tables/state-tables.d.ts.map +1 -0
  265. package/dist/schema/state/sqlite/system-tables/state-tables.js +55 -0
  266. package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -0
  267. package/dist/schema/state/sqlite/table-def.d.ts +5 -3
  268. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
  269. package/dist/schema/state/sqlite/table-def.js +1 -1
  270. package/dist/schema/state/sqlite/table-def.js.map +1 -1
  271. package/dist/schema/state/sqlite/table-def.test.js +92 -3
  272. package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
  273. package/dist/schema/unknown-events.d.ts +47 -0
  274. package/dist/schema/unknown-events.d.ts.map +1 -0
  275. package/dist/schema/unknown-events.js +69 -0
  276. package/dist/schema/unknown-events.js.map +1 -0
  277. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts +2 -0
  278. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts.map +1 -0
  279. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js +73 -0
  280. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js.map +1 -0
  281. package/dist/schema-management/common.js +2 -2
  282. package/dist/schema-management/common.js.map +1 -1
  283. package/dist/schema-management/migrations.d.ts +32 -2
  284. package/dist/schema-management/migrations.d.ts.map +1 -1
  285. package/dist/schema-management/migrations.js +38 -6
  286. package/dist/schema-management/migrations.js.map +1 -1
  287. package/dist/schema-management/validate-schema.d.ts +3 -3
  288. package/dist/schema-management/validate-schema.d.ts.map +1 -1
  289. package/dist/schema-management/validate-schema.js +2 -2
  290. package/dist/schema-management/validate-schema.js.map +1 -1
  291. package/dist/sql-queries/sql-queries.d.ts.map +1 -1
  292. package/dist/sql-queries/sql-queries.js +18 -6
  293. package/dist/sql-queries/sql-queries.js.map +1 -1
  294. package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
  295. package/dist/sql-queries/sql-query-builder.js.map +1 -1
  296. package/dist/sqlite-db-helper.js +3 -3
  297. package/dist/sqlite-db-helper.js.map +1 -1
  298. package/dist/sqlite-types.d.ts +5 -5
  299. package/dist/sqlite-types.d.ts.map +1 -1
  300. package/dist/sqlite-types.js.map +1 -1
  301. package/dist/sync/ClientSessionSyncProcessor.d.ts +12 -12
  302. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  303. package/dist/sync/ClientSessionSyncProcessor.js +99 -114
  304. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  305. package/dist/sync/errors.d.ts +0 -33
  306. package/dist/sync/errors.d.ts.map +1 -1
  307. package/dist/sync/errors.js +5 -22
  308. package/dist/sync/errors.js.map +1 -1
  309. package/dist/sync/index.d.ts +2 -0
  310. package/dist/sync/index.d.ts.map +1 -1
  311. package/dist/sync/index.js +2 -0
  312. package/dist/sync/index.js.map +1 -1
  313. package/dist/sync/mock-sync-backend.d.ts +10 -8
  314. package/dist/sync/mock-sync-backend.d.ts.map +1 -1
  315. package/dist/sync/mock-sync-backend.js +71 -69
  316. package/dist/sync/mock-sync-backend.js.map +1 -1
  317. package/dist/sync/next/compact-events.d.ts.map +1 -1
  318. package/dist/sync/next/compact-events.js +11 -12
  319. package/dist/sync/next/compact-events.js.map +1 -1
  320. package/dist/sync/next/facts.d.ts +5 -5
  321. package/dist/sync/next/facts.d.ts.map +1 -1
  322. package/dist/sync/next/facts.js +7 -8
  323. package/dist/sync/next/facts.js.map +1 -1
  324. package/dist/sync/next/history-dag-common.d.ts +54 -15
  325. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  326. package/dist/sync/next/history-dag-common.js +198 -9
  327. package/dist/sync/next/history-dag-common.js.map +1 -1
  328. package/dist/sync/next/history-dag.d.ts.map +1 -1
  329. package/dist/sync/next/history-dag.js +11 -11
  330. package/dist/sync/next/history-dag.js.map +1 -1
  331. package/dist/sync/next/rebase-events.d.ts +5 -5
  332. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  333. package/dist/sync/next/rebase-events.js +6 -6
  334. package/dist/sync/next/rebase-events.js.map +1 -1
  335. package/dist/sync/next/test/compact-events.calculator.test.js +2 -2
  336. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  337. package/dist/sync/next/test/compact-events.test.d.ts.map +1 -1
  338. package/dist/sync/next/test/compact-events.test.js +2 -2
  339. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  340. package/dist/sync/next/test/event-fixtures.d.ts +2 -2
  341. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
  342. package/dist/sync/next/test/event-fixtures.js +11 -11
  343. package/dist/sync/next/test/event-fixtures.js.map +1 -1
  344. package/dist/sync/sync-backend-kv.d.ts +3 -3
  345. package/dist/sync/sync-backend-kv.d.ts.map +1 -1
  346. package/dist/sync/sync-backend-kv.js +3 -3
  347. package/dist/sync/sync-backend-kv.js.map +1 -1
  348. package/dist/sync/sync-backend.d.ts +33 -13
  349. package/dist/sync/sync-backend.d.ts.map +1 -1
  350. package/dist/sync/sync-backend.js +38 -1
  351. package/dist/sync/sync-backend.js.map +1 -1
  352. package/dist/sync/sync.d.ts +23 -2
  353. package/dist/sync/sync.d.ts.map +1 -1
  354. package/dist/sync/syncstate.d.ts +55 -55
  355. package/dist/sync/syncstate.d.ts.map +1 -1
  356. package/dist/sync/syncstate.js +80 -98
  357. package/dist/sync/syncstate.js.map +1 -1
  358. package/dist/sync/syncstate.test.js +221 -132
  359. package/dist/sync/syncstate.test.js.map +1 -1
  360. package/dist/sync/transport-chunking.d.ts +36 -0
  361. package/dist/sync/transport-chunking.d.ts.map +1 -0
  362. package/dist/sync/transport-chunking.js +56 -0
  363. package/dist/sync/transport-chunking.js.map +1 -0
  364. package/dist/sync/validate-push-payload.d.ts +2 -2
  365. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  366. package/dist/sync/validate-push-payload.js +4 -6
  367. package/dist/sync/validate-push-payload.js.map +1 -1
  368. package/dist/testing/event-factory.d.ts +68 -0
  369. package/dist/testing/event-factory.d.ts.map +1 -0
  370. package/dist/testing/event-factory.js +78 -0
  371. package/dist/testing/event-factory.js.map +1 -0
  372. package/dist/testing/mod.d.ts +2 -0
  373. package/dist/testing/mod.d.ts.map +1 -0
  374. package/dist/testing/mod.js +2 -0
  375. package/dist/testing/mod.js.map +1 -0
  376. package/dist/util.js +2 -2
  377. package/dist/util.js.map +1 -1
  378. package/dist/version.d.ts +24 -5
  379. package/dist/version.d.ts.map +1 -1
  380. package/dist/version.js +25 -8
  381. package/dist/version.js.map +1 -1
  382. package/package.json +69 -16
  383. package/src/ClientSessionLeaderThreadProxy.ts +27 -12
  384. package/src/WorkerTransportError.ts +12 -0
  385. package/src/adapter-types.ts +50 -7
  386. package/src/bounded-collections.ts +6 -5
  387. package/src/debug-info.ts +37 -6
  388. package/src/devtools/devtools-compatibility.test.ts +18 -0
  389. package/src/devtools/devtools-messages-client-session.ts +22 -4
  390. package/src/devtools/devtools-messages-common.ts +7 -12
  391. package/src/devtools/devtools-messages-leader.ts +29 -10
  392. package/src/devtools/devtools-sessioninfo.ts +8 -5
  393. package/src/devtools/mod.ts +11 -2
  394. package/src/errors.ts +32 -24
  395. package/src/index.ts +4 -1
  396. package/src/leader-thread/LeaderSyncProcessor.ts +523 -373
  397. package/src/leader-thread/RejectedPushError.ts +106 -0
  398. package/src/leader-thread/connection.ts +1 -1
  399. package/src/leader-thread/eventlog.ts +112 -39
  400. package/src/leader-thread/leader-worker-devtools.ts +201 -120
  401. package/src/leader-thread/make-leader-thread-layer.test.ts +44 -0
  402. package/src/leader-thread/make-leader-thread-layer.ts +125 -40
  403. package/src/leader-thread/materialize-event.ts +40 -10
  404. package/src/leader-thread/mod.ts +1 -0
  405. package/src/leader-thread/recreate-db.ts +7 -7
  406. package/src/leader-thread/shutdown-channel.ts +4 -8
  407. package/src/leader-thread/stream-events.ts +206 -0
  408. package/src/leader-thread/types.ts +68 -18
  409. package/src/logging.ts +62 -0
  410. package/src/make-client-session.ts +11 -5
  411. package/src/materializer-helper.ts +27 -16
  412. package/src/otel.ts +13 -2
  413. package/src/rematerialize-from-eventlog.ts +61 -51
  414. package/src/schema/EventDef/define.ts +217 -0
  415. package/src/schema/EventDef/deprecated.test.ts +129 -0
  416. package/src/schema/EventDef/deprecated.ts +175 -0
  417. package/src/schema/EventDef/event-def.ts +125 -0
  418. package/src/schema/EventDef/facts.ts +135 -0
  419. package/src/schema/EventDef/materializer.ts +172 -0
  420. package/src/schema/EventDef/mod.ts +5 -0
  421. package/src/schema/EventSequenceNumber/client.ts +257 -0
  422. package/src/schema/EventSequenceNumber/global.ts +19 -0
  423. package/src/schema/EventSequenceNumber/mod.ts +37 -0
  424. package/src/schema/EventSequenceNumber.test.ts +72 -53
  425. package/src/schema/LiveStoreEvent/client.test.ts +129 -0
  426. package/src/schema/LiveStoreEvent/client.ts +235 -0
  427. package/src/schema/LiveStoreEvent/for-event-def.ts +60 -0
  428. package/src/schema/LiveStoreEvent/global.ts +45 -0
  429. package/src/schema/LiveStoreEvent/input.ts +63 -0
  430. package/src/schema/LiveStoreEvent/mod.ts +4 -0
  431. package/src/schema/events.ts +1 -1
  432. package/src/schema/mod.ts +6 -4
  433. package/src/schema/schema.ts +46 -5
  434. package/src/schema/state/sqlite/client-document-def.test.ts +144 -5
  435. package/src/schema/state/sqlite/client-document-def.ts +47 -34
  436. package/src/schema/state/sqlite/column-annotations.test.ts +3 -2
  437. package/src/schema/state/sqlite/column-annotations.ts +2 -1
  438. package/src/schema/state/sqlite/column-def.test.ts +66 -12
  439. package/src/schema/state/sqlite/column-def.ts +119 -47
  440. package/src/schema/state/sqlite/column-spec.test.ts +32 -17
  441. package/src/schema/state/sqlite/column-spec.ts +37 -11
  442. package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +2 -2
  443. package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +2 -1
  444. package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +41 -15
  445. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +13 -19
  446. package/src/schema/state/sqlite/mod.ts +7 -8
  447. package/src/schema/state/sqlite/query-builder/api.ts +55 -17
  448. package/src/schema/state/sqlite/query-builder/astToSql.ts +110 -21
  449. package/src/schema/state/sqlite/query-builder/impl.test.ts +267 -93
  450. package/src/schema/state/sqlite/query-builder/impl.ts +26 -13
  451. package/src/schema/state/sqlite/schema-helpers.test.ts +44 -0
  452. package/src/schema/state/sqlite/schema-helpers.ts +30 -22
  453. package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +64 -0
  454. package/src/schema/state/sqlite/system-tables/mod.ts +2 -0
  455. package/src/schema/state/sqlite/system-tables/state-tables.ts +69 -0
  456. package/src/schema/state/sqlite/table-def.test.ts +114 -3
  457. package/src/schema/state/sqlite/table-def.ts +16 -22
  458. package/src/schema/unknown-events.ts +131 -0
  459. package/src/schema-management/__tests__/migrations-autoincrement-quoting.test.ts +88 -0
  460. package/src/schema-management/common.ts +2 -2
  461. package/src/schema-management/migrations.ts +42 -9
  462. package/src/schema-management/validate-schema.ts +3 -3
  463. package/src/sql-queries/sql-queries.ts +18 -6
  464. package/src/sql-queries/sql-query-builder.ts +1 -0
  465. package/src/sqlite-db-helper.ts +3 -3
  466. package/src/sqlite-types.ts +6 -5
  467. package/src/sync/ClientSessionSyncProcessor.ts +152 -142
  468. package/src/sync/errors.ts +12 -24
  469. package/src/sync/index.ts +2 -0
  470. package/src/sync/mock-sync-backend.ts +146 -104
  471. package/src/sync/next/compact-events.ts +10 -11
  472. package/src/sync/next/facts.ts +13 -14
  473. package/src/sync/next/history-dag-common.ts +280 -26
  474. package/src/sync/next/history-dag.ts +17 -13
  475. package/src/sync/next/rebase-events.ts +12 -12
  476. package/src/sync/next/test/compact-events.calculator.test.ts +3 -2
  477. package/src/sync/next/test/compact-events.test.ts +4 -3
  478. package/src/sync/next/test/event-fixtures.ts +13 -13
  479. package/src/sync/sync-backend-kv.ts +4 -3
  480. package/src/sync/sync-backend.ts +66 -17
  481. package/src/sync/sync.ts +24 -2
  482. package/src/sync/syncstate.test.ts +583 -419
  483. package/src/sync/syncstate.ts +127 -122
  484. package/src/sync/transport-chunking.ts +90 -0
  485. package/src/sync/validate-push-payload.ts +6 -8
  486. package/src/testing/event-factory.ts +131 -0
  487. package/src/testing/mod.ts +1 -0
  488. package/src/util.ts +2 -2
  489. package/src/version.ts +33 -8
  490. package/dist/schema/EventDef.d.ts +0 -126
  491. package/dist/schema/EventDef.d.ts.map +0 -1
  492. package/dist/schema/EventDef.js +0 -46
  493. package/dist/schema/EventDef.js.map +0 -1
  494. package/dist/schema/EventSequenceNumber.d.ts +0 -80
  495. package/dist/schema/EventSequenceNumber.d.ts.map +0 -1
  496. package/dist/schema/EventSequenceNumber.js +0 -139
  497. package/dist/schema/EventSequenceNumber.js.map +0 -1
  498. package/dist/schema/LiveStoreEvent.d.ts.map +0 -1
  499. package/dist/schema/LiveStoreEvent.js +0 -147
  500. package/dist/schema/LiveStoreEvent.js.map +0 -1
  501. package/dist/schema/state/sqlite/system-tables.d.ts.map +0 -1
  502. package/dist/schema/state/sqlite/system-tables.js +0 -81
  503. package/dist/schema/state/sqlite/system-tables.js.map +0 -1
  504. package/dist/sync/next/graphology.d.ts +0 -8
  505. package/dist/sync/next/graphology.d.ts.map +0 -1
  506. package/dist/sync/next/graphology.js +0 -30
  507. package/dist/sync/next/graphology.js.map +0 -1
  508. package/dist/sync/next/graphology_.d.ts +0 -3
  509. package/dist/sync/next/graphology_.d.ts.map +0 -1
  510. package/dist/sync/next/graphology_.js +0 -3
  511. package/dist/sync/next/graphology_.js.map +0 -1
  512. package/src/schema/EventDef.ts +0 -222
  513. package/src/schema/EventSequenceNumber.ts +0 -199
  514. package/src/schema/LiveStoreEvent.ts +0 -286
  515. package/src/schema/state/sqlite/system-tables.ts +0 -106
  516. package/src/sync/next/ambient.d.ts +0 -3
  517. package/src/sync/next/graphology.ts +0 -41
  518. package/src/sync/next/graphology_.ts +0 -2
@@ -1,19 +1,30 @@
1
1
  import { omitUndefineds, shouldNeverHappen } from '@livestore/utils'
2
- import type { HttpClient, Schema, Scope } from '@livestore/utils/effect'
3
- import { Deferred, Effect, KeyValueStore, Layer, PlatformError, Queue, SubscriptionRef } from '@livestore/utils/effect'
2
+ import type { HttpClient, Scope } from '@livestore/utils/effect'
3
+ import {
4
+ Deferred,
5
+ Effect,
6
+ KeyValueStore,
7
+ Layer,
8
+ PlatformError,
9
+ Queue,
10
+ Schema,
11
+ Stream,
12
+ Subscribable,
13
+ SubscriptionRef,
14
+ } from '@livestore/utils/effect'
15
+
4
16
  import {
5
17
  type BootStatus,
6
18
  type MakeSqliteDb,
7
19
  type MaterializerHashMismatchError,
8
20
  type SqliteDb,
9
- type SqliteError,
10
- UnexpectedError,
21
+ UnknownError,
11
22
  } from '../adapter-types.ts'
12
23
  import type { MigrationsReport } from '../defs.ts'
13
24
  import type * as Devtools from '../devtools/mod.ts'
14
25
  import type { LiveStoreSchema } from '../schema/mod.ts'
15
26
  import { EventSequenceNumber, LiveStoreEvent, SystemTables } from '../schema/mod.ts'
16
- import type { InvalidPullError, IsOfflineError, SyncOptions } from '../sync/sync.ts'
27
+ import type { SyncBackend, SyncOptions } from '../sync/sync.ts'
17
28
  import { SyncState } from '../sync/syncstate.ts'
18
29
  import { sql } from '../util.ts'
19
30
  import * as Eventlog from './eventlog.ts'
@@ -23,6 +34,7 @@ import { makeMaterializeEvent } from './materialize-event.ts'
23
34
  import { recreateDb } from './recreate-db.ts'
24
35
  import type { ShutdownChannel } from './shutdown-channel.ts'
25
36
  import type {
37
+ DevtoolsContext,
26
38
  DevtoolsOptions,
27
39
  InitialBlockingSyncContext,
28
40
  InitialSyncOptions,
@@ -33,7 +45,8 @@ import { LeaderThreadCtx } from './types.ts'
33
45
 
34
46
  export interface MakeLeaderThreadLayerParams {
35
47
  storeId: string
36
- syncPayload: Schema.JsonValue | undefined
48
+ syncPayloadSchema: Schema.Schema<any> | undefined
49
+ syncPayloadEncoded: Schema.JsonValue | undefined
37
50
  clientId: string
38
51
  schema: LiveStoreSchema
39
52
  makeSqliteDb: MakeSqliteDb
@@ -42,6 +55,8 @@ export interface MakeLeaderThreadLayerParams {
42
55
  dbEventlog: LeaderSqliteDb
43
56
  devtoolsOptions: DevtoolsOptions
44
57
  shutdownChannel: ShutdownChannel
58
+ /** Boot warning to emit (e.g., OPFS unavailable in private browsing) */
59
+ bootWarning?: BootStatus
45
60
  params?: {
46
61
  localPushBatchSize?: number
47
62
  backendPushBatchSize?: number
@@ -59,19 +74,29 @@ export const makeLeaderThreadLayer = ({
59
74
  schema,
60
75
  storeId,
61
76
  clientId,
62
- syncPayload,
77
+ syncPayloadSchema = Schema.JsonValue,
78
+ syncPayloadEncoded,
63
79
  makeSqliteDb,
64
80
  syncOptions,
65
81
  dbState,
66
82
  dbEventlog,
67
83
  devtoolsOptions,
68
84
  shutdownChannel,
85
+ bootWarning,
69
86
  params,
70
87
  testing,
71
- }: MakeLeaderThreadLayerParams): Layer.Layer<LeaderThreadCtx, UnexpectedError, Scope.Scope | HttpClient.HttpClient> =>
88
+ }: MakeLeaderThreadLayerParams): Layer.Layer<LeaderThreadCtx, UnknownError, Scope.Scope | HttpClient.HttpClient> =>
72
89
  Effect.gen(function* () {
90
+ const syncPayloadDecoded =
91
+ syncPayloadEncoded === undefined ? undefined : yield* Schema.decodeUnknown(syncPayloadSchema)(syncPayloadEncoded)
92
+
73
93
  const bootStatusQueue = yield* Queue.unbounded<BootStatus>().pipe(Effect.acquireRelease(Queue.shutdown))
74
94
 
95
+ // Emit boot warning if present (e.g., OPFS unavailable in private browsing)
96
+ if (bootWarning !== undefined) {
97
+ yield* Queue.offer(bootStatusQueue, bootWarning)
98
+ }
99
+
75
100
  const dbEventlogMissing = !hasEventlogTables(dbEventlog)
76
101
 
77
102
  // Either happens on initial boot or if schema changes
@@ -82,7 +107,7 @@ export const makeLeaderThreadLayer = ({
82
107
  const syncBackend =
83
108
  syncOptions?.backend === undefined
84
109
  ? undefined
85
- : yield* syncOptions.backend({ storeId, clientId, payload: syncPayload }).pipe(
110
+ : yield* syncOptions.backend({ storeId, clientId, payload: syncPayloadDecoded }).pipe(
86
111
  Effect.provide(
87
112
  Layer.succeed(
88
113
  KeyValueStore.KeyValueStore,
@@ -131,9 +156,10 @@ export const makeLeaderThreadLayer = ({
131
156
 
132
157
  // Recreate state database if needed BEFORE creating sync processor
133
158
  // This ensures all system tables exist before any queries are made
134
- const { migrationsReport } = dbStateMissing
135
- ? yield* recreateDb({ dbState, dbEventlog, schema, bootStatusQueue, materializeEvent })
136
- : { migrationsReport: { migrations: [] } }
159
+ const { migrationsReport } =
160
+ dbStateMissing === true
161
+ ? yield* recreateDb({ dbState, dbEventlog, schema, bootStatusQueue, materializeEvent })
162
+ : { migrationsReport: { migrations: [] } }
137
163
 
138
164
  const syncProcessor = yield* makeLeaderSyncProcessor({
139
165
  schema,
@@ -141,6 +167,7 @@ export const makeLeaderThreadLayer = ({
141
167
  initialSyncState: getInitialSyncState({ dbEventlog, dbState, dbEventlogMissing }),
142
168
  initialBlockingSyncContext,
143
169
  onError: syncOptions?.onSyncError ?? 'ignore',
170
+ onBackendIdMismatch: syncOptions?.onBackendIdMismatch ?? 'reset',
144
171
  livePull: syncOptions?.livePull ?? true,
145
172
  params: {
146
173
  ...omitUndefineds({
@@ -157,13 +184,16 @@ export const makeLeaderThreadLayer = ({
157
184
  Effect.acquireRelease(Queue.shutdown),
158
185
  )
159
186
 
160
- const devtoolsContext = devtoolsOptions.enabled
161
- ? {
162
- enabled: true as const,
163
- syncBackendLatch: yield* Effect.makeLatch(true),
164
- syncBackendLatchState: yield* SubscriptionRef.make<{ latchClosed: boolean }>({ latchClosed: false }),
165
- }
166
- : { enabled: false as const }
187
+ const devtoolsContext =
188
+ devtoolsOptions.enabled === true
189
+ ? {
190
+ enabled: true as const,
191
+ syncBackendLatch: yield* Effect.makeLatch(true),
192
+ syncBackendLatchState: yield* SubscriptionRef.make<{ latchClosed: boolean }>({ latchClosed: false }),
193
+ }
194
+ : { enabled: false as const }
195
+
196
+ const networkStatus = yield* makeNetworkStatusSubscribable({ syncBackend, devtoolsContext })
167
197
 
168
198
  const ctx = {
169
199
  schema,
@@ -173,7 +203,7 @@ export const makeLeaderThreadLayer = ({
173
203
  dbState,
174
204
  dbEventlog,
175
205
  makeSqliteDb,
176
- eventSchema: LiveStoreEvent.makeEventDefSchema(schema),
206
+ eventSchema: LiveStoreEvent.Client.makeSchema(schema),
177
207
  shutdownStateSubRef: yield* SubscriptionRef.make<ShutdownState>('running'),
178
208
  shutdownChannel,
179
209
  syncBackend,
@@ -181,6 +211,7 @@ export const makeLeaderThreadLayer = ({
181
211
  materializeEvent,
182
212
  extraIncomingMessagesQueue,
183
213
  devtools: devtoolsContext,
214
+ networkStatus,
184
215
  // State will be set during `bootLeaderThread`
185
216
  initialState: {} as any as LeaderThreadCtx['Type']['initialState'],
186
217
  } satisfies typeof LeaderThreadCtx.Service
@@ -200,7 +231,7 @@ export const makeLeaderThreadLayer = ({
200
231
  }).pipe(
201
232
  Effect.withSpan('@livestore/common:leader-thread:boot'),
202
233
  Effect.withSpanScoped('@livestore/common:leader-thread'),
203
- UnexpectedError.mapToUnexpectedError,
234
+ UnknownError.mapToUnknownError,
204
235
  Effect.tapCauseLogPretty,
205
236
  Layer.unwrapScoped,
206
237
  )
@@ -219,7 +250,7 @@ const hasStateTables = (db: SqliteDb) => {
219
250
 
220
251
  const isSubsetOf = (a: Set<string>, b: Set<string>): boolean => {
221
252
  for (const item of a) {
222
- if (!b.has(item)) {
253
+ if (b.has(item) === false) {
223
254
  return false
224
255
  }
225
256
  }
@@ -236,11 +267,11 @@ const getInitialSyncState = ({
236
267
  dbState: SqliteDb
237
268
  dbEventlogMissing: boolean
238
269
  }) => {
239
- const initialBackendHead = dbEventlogMissing
240
- ? EventSequenceNumber.ROOT.global
241
- : Eventlog.getBackendHeadFromDb(dbEventlog)
270
+ const initialBackendHead =
271
+ dbEventlogMissing === true ? EventSequenceNumber.Client.ROOT.global : Eventlog.getBackendHeadFromDb(dbEventlog)
242
272
 
243
- const initialLocalHead = dbEventlogMissing ? EventSequenceNumber.ROOT : Eventlog.getClientHeadFromDb(dbEventlog)
273
+ const initialLocalHead =
274
+ dbEventlogMissing === true ? EventSequenceNumber.Client.ROOT : Eventlog.getClientHeadFromDb(dbEventlog)
244
275
 
245
276
  if (initialBackendHead > initialLocalHead.global) {
246
277
  return shouldNeverHappen(
@@ -252,20 +283,21 @@ const getInitialSyncState = ({
252
283
  localHead: initialLocalHead,
253
284
  upstreamHead: {
254
285
  global: initialBackendHead,
255
- client: EventSequenceNumber.clientDefault,
256
- rebaseGeneration: EventSequenceNumber.rebaseGenerationDefault,
286
+ client: EventSequenceNumber.Client.DEFAULT,
287
+ rebaseGeneration: EventSequenceNumber.Client.REBASE_GENERATION_DEFAULT,
257
288
  },
258
- pending: dbEventlogMissing
259
- ? []
260
- : Eventlog.getEventsSince({
261
- dbEventlog,
262
- dbState,
263
- since: {
264
- global: initialBackendHead,
265
- client: EventSequenceNumber.clientDefault,
266
- rebaseGeneration: initialLocalHead.rebaseGeneration,
267
- },
268
- }),
289
+ pending:
290
+ dbEventlogMissing === true
291
+ ? []
292
+ : Eventlog.getEventsSince({
293
+ dbEventlog,
294
+ dbState,
295
+ since: {
296
+ global: initialBackendHead,
297
+ client: EventSequenceNumber.Client.DEFAULT,
298
+ rebaseGeneration: initialLocalHead.rebaseGeneration,
299
+ },
300
+ }),
269
301
  })
270
302
  }
271
303
 
@@ -330,7 +362,7 @@ const bootLeaderThread = ({
330
362
  devtoolsOptions: DevtoolsOptions
331
363
  }): Effect.Effect<
332
364
  LeaderThreadCtx['Type']['initialState'],
333
- UnexpectedError | SqliteError | IsOfflineError | InvalidPullError | MaterializerHashMismatchError,
365
+ UnknownError | MaterializerHashMismatchError,
334
366
  LeaderThreadCtx | Scope.Scope | HttpClient.HttpClient
335
367
  > =>
336
368
  Effect.gen(function* () {
@@ -357,3 +389,56 @@ const bootLeaderThread = ({
357
389
 
358
390
  return { migrationsReport, leaderHead: initialLeaderHead }
359
391
  })
392
+
393
+ /** @internal */
394
+ export const makeNetworkStatusSubscribable = ({
395
+ syncBackend,
396
+ devtoolsContext,
397
+ }: {
398
+ syncBackend: SyncBackend.SyncBackend | undefined
399
+ devtoolsContext: DevtoolsContext
400
+ }): Effect.Effect<Subscribable.Subscribable<SyncBackend.NetworkStatus>, never, Scope.Scope> =>
401
+ Effect.gen(function* () {
402
+ const initialIsConnected = syncBackend !== undefined ? yield* SubscriptionRef.get(syncBackend.isConnected) : false
403
+ const initialLatchClosed =
404
+ devtoolsContext.enabled === true
405
+ ? (yield* SubscriptionRef.get(devtoolsContext.syncBackendLatchState)).latchClosed
406
+ : false
407
+
408
+ const networkStatusRef = yield* SubscriptionRef.make<SyncBackend.NetworkStatus>({
409
+ isConnected: initialIsConnected,
410
+ timestampMs: Date.now(),
411
+ devtools: { latchClosed: initialLatchClosed },
412
+ })
413
+
414
+ const updateNetworkStatus = (patch: { isConnected?: boolean; latchClosed?: boolean }) =>
415
+ SubscriptionRef.update(networkStatusRef, (previous) => ({
416
+ isConnected: patch.isConnected ?? previous.isConnected,
417
+ timestampMs: Date.now(),
418
+ devtools: {
419
+ latchClosed: patch.latchClosed ?? previous.devtools.latchClosed,
420
+ },
421
+ }))
422
+
423
+ if (syncBackend !== undefined) {
424
+ yield* syncBackend.isConnected.changes.pipe(
425
+ Stream.tap((isConnected) => updateNetworkStatus({ isConnected })),
426
+ Stream.runDrain,
427
+ Effect.interruptible,
428
+ Effect.tapCauseLogPretty,
429
+ Effect.forkScoped,
430
+ )
431
+ }
432
+
433
+ if (devtoolsContext.enabled === true) {
434
+ yield* devtoolsContext.syncBackendLatchState.changes.pipe(
435
+ Stream.tap(({ latchClosed }) => updateNetworkStatus({ latchClosed })),
436
+ Stream.runDrain,
437
+ Effect.interruptible,
438
+ Effect.tapCauseLogPretty,
439
+ Effect.forkScoped,
440
+ )
441
+ }
442
+
443
+ return Subscribable.fromSubscriptionRef(networkStatusRef)
444
+ })
@@ -3,8 +3,9 @@ import { Effect, Option, ReadonlyArray, Schema } from '@livestore/utils/effect'
3
3
 
4
4
  import { MaterializeError, MaterializerHashMismatchError, type SqliteDb } from '../adapter-types.ts'
5
5
  import { getExecStatementsFromMaterializer, hashMaterializerResults } from '../materializer-helper.ts'
6
+ import { logDeprecationWarnings } from '../schema/EventDef/deprecated.ts'
6
7
  import type { LiveStoreSchema } from '../schema/mod.ts'
7
- import { EventSequenceNumber, getEventDef, SystemTables } from '../schema/mod.ts'
8
+ import { EventSequenceNumber, resolveEventDef, SystemTables, UNKNOWN_EVENT_SCHEMA_HASH } from '../schema/mod.ts'
8
9
  import { insertRow } from '../sql-queries/index.ts'
9
10
  import { sql } from '../util.ts'
10
11
  import { execSql, execSqlPrepared } from './connection.ts'
@@ -33,8 +34,37 @@ export const makeMaterializeEvent = ({
33
34
  Effect.gen(function* () {
34
35
  const skipEventlog = options?.skipEventlog ?? false
35
36
 
36
- const eventName = eventEncoded.name
37
- const { eventDef, materializer } = getEventDef(schema, eventName)
37
+ const resolution = yield* resolveEventDef(schema, {
38
+ operation: '@livestore/common:leader-thread:materializeEvent',
39
+ event: eventEncoded,
40
+ })
41
+
42
+ if (resolution._tag === 'unknown') {
43
+ // Unknown events still enter the eventlog so newer clients can replay
44
+ // them once they learn the schema. We skip materialization to keep the
45
+ // local state consistent with the knowledge of the current client.
46
+ if (skipEventlog === false) {
47
+ yield* Eventlog.insertIntoEventlog(
48
+ eventEncoded,
49
+ dbEventlog,
50
+ UNKNOWN_EVENT_SCHEMA_HASH,
51
+ eventEncoded.clientId,
52
+ eventEncoded.sessionId,
53
+ )
54
+ }
55
+
56
+ dbState.debug.head = eventEncoded.seqNum
57
+
58
+ return {
59
+ sessionChangeset: { _tag: 'no-op' as const },
60
+ hash: Option.none(),
61
+ }
62
+ }
63
+
64
+ const { eventDef, materializer } = resolution
65
+
66
+ // Log deprecation warnings for deprecated events/fields
67
+ yield* logDeprecationWarnings(eventDef, eventEncoded.args as Record<string, unknown>)
38
68
 
39
69
  const execArgsArr = getExecStatementsFromMaterializer({
40
70
  eventDef,
@@ -43,7 +73,7 @@ export const makeMaterializeEvent = ({
43
73
  event: { decoded: undefined, encoded: eventEncoded },
44
74
  })
45
75
 
46
- const materializerHash = isDevEnv() ? Option.some(hashMaterializerResults(execArgsArr)) : Option.none()
76
+ const materializerHash = isDevEnv() === true ? Option.some(hashMaterializerResults(execArgsArr)) : Option.none()
47
77
 
48
78
  if (
49
79
  materializerHash._tag === 'Some' &&
@@ -89,7 +119,7 @@ export const makeMaterializeEvent = ({
89
119
  seqNumRebaseGeneration: eventEncoded.seqNum.rebaseGeneration,
90
120
  // NOTE the changeset will be empty (i.e. null) for no-op events
91
121
  changeset: changeset ?? null,
92
- debug: LS_DEV ? execArgsArr : null,
122
+ debug: LS_DEV === true ? execArgsArr : null,
93
123
  },
94
124
  }),
95
125
  )
@@ -114,11 +144,11 @@ export const makeMaterializeEvent = ({
114
144
  }
115
145
 
116
146
  return {
117
- sessionChangeset: changeset
147
+ sessionChangeset: changeset !== undefined
118
148
  ? {
119
149
  _tag: 'sessionChangeset' as const,
120
150
  data: changeset,
121
- debug: LS_DEV ? execArgsArr : null,
151
+ debug: LS_DEV === true ? execArgsArr : null,
122
152
  }
123
153
  : { _tag: 'no-op' as const },
124
154
  hash: materializerHash,
@@ -129,7 +159,7 @@ export const makeMaterializeEvent = ({
129
159
  attributes: {
130
160
  eventName: eventEncoded.name,
131
161
  eventNum: eventEncoded.seqNum,
132
- 'span.label': `${EventSequenceNumber.toString(eventEncoded.seqNum)} ${eventEncoded.name}`,
162
+ 'span.label': `${EventSequenceNumber.Client.toString(eventEncoded.seqNum)} ${eventEncoded.name}`,
133
163
  },
134
164
  }),
135
165
  // Effect.logDuration('@livestore/common:leader-thread:materializeEvent'),
@@ -143,7 +173,7 @@ export const rollback = ({
143
173
  }: {
144
174
  dbState: SqliteDb
145
175
  dbEventlog: SqliteDb
146
- eventNumsToRollback: EventSequenceNumber.EventSequenceNumber[]
176
+ eventNumsToRollback: EventSequenceNumber.Client.Composite[]
147
177
  }) =>
148
178
  Effect.gen(function* () {
149
179
  const rollbackEvents = dbState
@@ -159,7 +189,7 @@ export const rollback = ({
159
189
  changeset: _.changeset,
160
190
  debug: _.debug,
161
191
  }))
162
- .toSorted((a, b) => EventSequenceNumber.compare(a.seqNum, b.seqNum))
192
+ .toSorted((a, b) => EventSequenceNumber.Client.compare(a.seqNum, b.seqNum))
163
193
 
164
194
  // Apply changesets in reverse order
165
195
  for (let i = rollbackEvents.length - 1; i >= 0; i--) {
@@ -5,4 +5,5 @@ export * from './make-leader-thread-layer.ts'
5
5
  export * from './materialize-event.ts'
6
6
  export * from './recreate-db.ts'
7
7
  export * as ShutdownChannel from './shutdown-channel.ts'
8
+ export * from './stream-events.ts'
8
9
  export * from './types.ts'
@@ -10,7 +10,7 @@ import {
10
10
  rematerializeFromEventlog,
11
11
  type SqliteDb,
12
12
  type SqliteError,
13
- UnexpectedError,
13
+ UnknownError,
14
14
  } from '../index.ts'
15
15
  import type { LiveStoreSchema } from '../schema/mod.ts'
16
16
  import { configureConnection } from './connection.ts'
@@ -28,10 +28,10 @@ export const recreateDb = ({
28
28
  schema: LiveStoreSchema
29
29
  bootStatusQueue: Queue.Queue<BootStatus>
30
30
  materializeEvent: MaterializeEvent
31
- }): Effect.Effect<{ migrationsReport: MigrationsReport }, UnexpectedError | MaterializeError | SqliteError> =>
31
+ }): Effect.Effect<{ migrationsReport: MigrationsReport }, UnknownError | MaterializeError | SqliteError> =>
32
32
  Effect.gen(function* () {
33
33
  const migrationOptions = schema.state.sqlite.migrations
34
- let migrationsReport: MigrationsReport
34
+ let migrationsReport: MigrationsReport = { migrations: [] }
35
35
 
36
36
  yield* Effect.addFinalizer(
37
37
  Effect.fn('recreateDb:finalizer')(function* (ex) {
@@ -48,7 +48,7 @@ export const recreateDb = ({
48
48
 
49
49
  const initDb = (hooks: Partial<MigrationHooks> | undefined) =>
50
50
  Effect.gen(function* () {
51
- yield* Effect.tryAll(() => hooks?.init?.(tmpDb)).pipe(UnexpectedError.mapToUnexpectedError)
51
+ yield* Effect.tryAll(() => hooks?.init?.(tmpDb)).pipe(UnknownError.mapToUnknownError)
52
52
 
53
53
  const migrationsReport = yield* migrateDb({
54
54
  db: tmpDb,
@@ -57,7 +57,7 @@ export const recreateDb = ({
57
57
  Queue.offer(bootStatusQueue, { stage: 'migrating', progress: { done, total } }),
58
58
  })
59
59
 
60
- yield* Effect.tryAll(() => hooks?.pre?.(tmpDb)).pipe(UnexpectedError.mapToUnexpectedError)
60
+ yield* Effect.tryAll(() => hooks?.pre?.(tmpDb)).pipe(UnknownError.mapToUnknownError)
61
61
 
62
62
  return { migrationsReport, tmpDb }
63
63
  })
@@ -78,7 +78,7 @@ export const recreateDb = ({
78
78
  Queue.offer(bootStatusQueue, { stage: 'rehydrating', progress: { done, total } }),
79
79
  })
80
80
 
81
- yield* Effect.tryAll(() => hooks?.post?.(initResult.tmpDb)).pipe(UnexpectedError.mapToUnexpectedError)
81
+ yield* Effect.tryAll(() => hooks?.post?.(initResult.tmpDb)).pipe(UnknownError.mapToUnknownError)
82
82
 
83
83
  break
84
84
  }
@@ -88,7 +88,7 @@ export const recreateDb = ({
88
88
  migrationsReport = { migrations: [] }
89
89
 
90
90
  const newDbData = yield* Effect.tryAll(() => migrationOptions.migrate(oldDbData)).pipe(
91
- UnexpectedError.mapToUnexpectedError,
91
+ UnknownError.mapToUnknownError,
92
92
  )
93
93
 
94
94
  tmpDb.import(newDbData)
@@ -2,20 +2,16 @@ import type { WebChannel } from '@livestore/utils/effect'
2
2
  import { Schema } from '@livestore/utils/effect'
3
3
 
4
4
  import {
5
+ BackendIdMismatchError,
5
6
  IntentionalShutdownCause,
6
- InvalidPullError,
7
- InvalidPushError,
8
- IsOfflineError,
9
7
  MaterializeError,
10
- UnexpectedError,
8
+ UnknownError,
11
9
  } from '../index.ts'
12
10
 
13
11
  export class All extends Schema.Union(
14
12
  IntentionalShutdownCause,
15
- UnexpectedError,
16
- IsOfflineError,
17
- InvalidPushError,
18
- InvalidPullError,
13
+ UnknownError,
14
+ BackendIdMismatchError,
19
15
  MaterializeError,
20
16
  ) {}
21
17