@livestore/common 0.4.0-dev.9 → 0.5.0-dev.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 (580) 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/MaterializationJournal.d.ts +44 -0
  6. package/dist/MaterializationJournal.d.ts.map +1 -0
  7. package/dist/MaterializationJournal.js +112 -0
  8. package/dist/MaterializationJournal.js.map +1 -0
  9. package/dist/StateHead.d.ts +26 -0
  10. package/dist/StateHead.d.ts.map +1 -0
  11. package/dist/StateHead.js +50 -0
  12. package/dist/StateHead.js.map +1 -0
  13. package/dist/WorkerTransportError.d.ts +11 -0
  14. package/dist/WorkerTransportError.d.ts.map +1 -0
  15. package/dist/WorkerTransportError.js +11 -0
  16. package/dist/WorkerTransportError.js.map +1 -0
  17. package/dist/__tests__/fixture.d.ts +1 -1
  18. package/dist/__tests__/fixture.d.ts.map +1 -1
  19. package/dist/__tests__/fixture.js +3 -3
  20. package/dist/__tests__/fixture.js.map +1 -1
  21. package/dist/adapter-types.d.ts +59 -57
  22. package/dist/adapter-types.d.ts.map +1 -1
  23. package/dist/adapter-types.js +31 -22
  24. package/dist/adapter-types.js.map +1 -1
  25. package/dist/bounded-collections.d.ts.map +1 -1
  26. package/dist/bounded-collections.js +6 -4
  27. package/dist/bounded-collections.js.map +1 -1
  28. package/dist/debug-info.d.ts +56 -56
  29. package/dist/debug-info.d.ts.map +1 -1
  30. package/dist/debug-info.js +46 -32
  31. package/dist/debug-info.js.map +1 -1
  32. package/dist/defs.d.ts +9 -9
  33. package/dist/defs.js +2 -2
  34. package/dist/devtools/devtools-compatibility.test.d.ts +2 -0
  35. package/dist/devtools/devtools-compatibility.test.d.ts.map +1 -0
  36. package/dist/devtools/devtools-compatibility.test.js +16 -0
  37. package/dist/devtools/devtools-compatibility.test.js.map +1 -0
  38. package/dist/devtools/devtools-messages-client-session.d.ts +531 -312
  39. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
  40. package/dist/devtools/devtools-messages-client-session.js +86 -67
  41. package/dist/devtools/devtools-messages-client-session.js.map +1 -1
  42. package/dist/devtools/devtools-messages-common.d.ts +32 -35
  43. package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
  44. package/dist/devtools/devtools-messages-common.js +12 -14
  45. package/dist/devtools/devtools-messages-common.js.map +1 -1
  46. package/dist/devtools/devtools-messages-leader.d.ts +417 -320
  47. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  48. package/dist/devtools/devtools-messages-leader.js +117 -87
  49. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  50. package/dist/devtools/devtools-sessioninfo.d.ts +28 -17
  51. package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
  52. package/dist/devtools/devtools-sessioninfo.js +12 -6
  53. package/dist/devtools/devtools-sessioninfo.js.map +1 -1
  54. package/dist/devtools/mod.d.ts +17 -7
  55. package/dist/devtools/mod.d.ts.map +1 -1
  56. package/dist/devtools/mod.js +19 -8
  57. package/dist/devtools/mod.js.map +1 -1
  58. package/dist/errors.d.ts +52 -46
  59. package/dist/errors.d.ts.map +1 -1
  60. package/dist/errors.js +31 -21
  61. package/dist/errors.js.map +1 -1
  62. package/dist/index.d.ts +7 -1
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +7 -1
  65. package/dist/index.js.map +1 -1
  66. package/dist/leader-thread/LeaderSyncProcessor.d.ts +116 -21
  67. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  68. package/dist/leader-thread/LeaderSyncProcessor.js +596 -470
  69. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  70. package/dist/leader-thread/RejectedPushError.d.ts +138 -0
  71. package/dist/leader-thread/RejectedPushError.d.ts.map +1 -0
  72. package/dist/leader-thread/RejectedPushError.js +97 -0
  73. package/dist/leader-thread/RejectedPushError.js.map +1 -0
  74. package/dist/leader-thread/connection.d.ts +1 -0
  75. package/dist/leader-thread/connection.d.ts.map +1 -1
  76. package/dist/leader-thread/connection.js +10 -9
  77. package/dist/leader-thread/connection.js.map +1 -1
  78. package/dist/leader-thread/eventlog.d.ts +20 -15
  79. package/dist/leader-thread/eventlog.d.ts.map +1 -1
  80. package/dist/leader-thread/eventlog.js +80 -20
  81. package/dist/leader-thread/eventlog.js.map +1 -1
  82. package/dist/leader-thread/leader-worker-devtools.d.ts +1 -2
  83. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  84. package/dist/leader-thread/leader-worker-devtools.js +110 -62
  85. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  86. package/dist/leader-thread/make-leader-thread-layer.d.ts +19 -7
  87. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  88. package/dist/leader-thread/make-leader-thread-layer.js +67 -45
  89. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  90. package/dist/leader-thread/make-leader-thread-layer.test.d.ts +2 -0
  91. package/dist/leader-thread/make-leader-thread-layer.test.d.ts.map +1 -0
  92. package/dist/leader-thread/make-leader-thread-layer.test.js +32 -0
  93. package/dist/leader-thread/make-leader-thread-layer.test.js.map +1 -0
  94. package/dist/leader-thread/materialize-event.d.ts +3 -2
  95. package/dist/leader-thread/materialize-event.d.ts.map +1 -1
  96. package/dist/leader-thread/materialize-event.js +32 -9
  97. package/dist/leader-thread/materialize-event.js.map +1 -1
  98. package/dist/leader-thread/mod.d.ts +1 -0
  99. package/dist/leader-thread/mod.d.ts.map +1 -1
  100. package/dist/leader-thread/mod.js +1 -0
  101. package/dist/leader-thread/mod.js.map +1 -1
  102. package/dist/leader-thread/recreate-db.d.ts +2 -2
  103. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  104. package/dist/leader-thread/recreate-db.js +19 -40
  105. package/dist/leader-thread/recreate-db.js.map +1 -1
  106. package/dist/leader-thread/shutdown-channel.d.ts +3 -7
  107. package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
  108. package/dist/leader-thread/shutdown-channel.js +2 -3
  109. package/dist/leader-thread/shutdown-channel.js.map +1 -1
  110. package/dist/leader-thread/stream-events.d.ts +53 -0
  111. package/dist/leader-thread/stream-events.d.ts.map +1 -0
  112. package/dist/leader-thread/stream-events.js +164 -0
  113. package/dist/leader-thread/stream-events.js.map +1 -0
  114. package/dist/leader-thread/types.d.ts +92 -51
  115. package/dist/leader-thread/types.d.ts.map +1 -1
  116. package/dist/leader-thread/types.js +17 -4
  117. package/dist/leader-thread/types.js.map +1 -1
  118. package/dist/logging.d.ts +15 -0
  119. package/dist/logging.d.ts.map +1 -0
  120. package/dist/logging.js +2 -0
  121. package/dist/logging.js.map +1 -0
  122. package/dist/make-client-session.d.ts +6 -5
  123. package/dist/make-client-session.d.ts.map +1 -1
  124. package/dist/make-client-session.js +10 -7
  125. package/dist/make-client-session.js.map +1 -1
  126. package/dist/materializer-helper.d.ts +6 -7
  127. package/dist/materializer-helper.d.ts.map +1 -1
  128. package/dist/materializer-helper.js +22 -40
  129. package/dist/materializer-helper.js.map +1 -1
  130. package/dist/otel.d.ts +4 -4
  131. package/dist/otel.d.ts.map +1 -1
  132. package/dist/otel.js +8 -8
  133. package/dist/otel.js.map +1 -1
  134. package/dist/rematerialize-from-eventlog.d.ts +3 -3
  135. package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
  136. package/dist/rematerialize-from-eventlog.js +52 -39
  137. package/dist/rematerialize-from-eventlog.js.map +1 -1
  138. package/dist/schema/EventDef/define.d.ts +161 -0
  139. package/dist/schema/EventDef/define.d.ts.map +1 -0
  140. package/dist/schema/EventDef/define.js +140 -0
  141. package/dist/schema/EventDef/define.js.map +1 -0
  142. package/dist/schema/EventDef/define.test.d.ts +2 -0
  143. package/dist/schema/EventDef/define.test.d.ts.map +1 -0
  144. package/dist/schema/EventDef/define.test.js +23 -0
  145. package/dist/schema/EventDef/define.test.js.map +1 -0
  146. package/dist/schema/EventDef/deprecated.d.ts +94 -0
  147. package/dist/schema/EventDef/deprecated.d.ts.map +1 -0
  148. package/dist/schema/EventDef/deprecated.js +143 -0
  149. package/dist/schema/EventDef/deprecated.js.map +1 -0
  150. package/dist/schema/EventDef/deprecated.test.d.ts +2 -0
  151. package/dist/schema/EventDef/deprecated.test.d.ts.map +1 -0
  152. package/dist/schema/EventDef/deprecated.test.js +95 -0
  153. package/dist/schema/EventDef/deprecated.test.js.map +1 -0
  154. package/dist/schema/EventDef/event-def.d.ts +110 -0
  155. package/dist/schema/EventDef/event-def.d.ts.map +1 -0
  156. package/dist/schema/EventDef/event-def.js +2 -0
  157. package/dist/schema/EventDef/event-def.js.map +1 -0
  158. package/dist/schema/EventDef/facts.d.ts +118 -0
  159. package/dist/schema/EventDef/facts.d.ts.map +1 -0
  160. package/dist/schema/EventDef/facts.js +53 -0
  161. package/dist/schema/EventDef/facts.js.map +1 -0
  162. package/dist/schema/EventDef/materializer.d.ts +155 -0
  163. package/dist/schema/EventDef/materializer.d.ts.map +1 -0
  164. package/dist/schema/EventDef/materializer.js +83 -0
  165. package/dist/schema/EventDef/materializer.js.map +1 -0
  166. package/dist/schema/EventDef/mod.d.ts +6 -0
  167. package/dist/schema/EventDef/mod.d.ts.map +1 -0
  168. package/dist/schema/EventDef/mod.js +6 -0
  169. package/dist/schema/EventDef/mod.js.map +1 -0
  170. package/dist/schema/EventSequenceNumber/client.d.ts +136 -0
  171. package/dist/schema/EventSequenceNumber/client.d.ts.map +1 -0
  172. package/dist/schema/EventSequenceNumber/client.js +192 -0
  173. package/dist/schema/EventSequenceNumber/client.js.map +1 -0
  174. package/dist/schema/EventSequenceNumber/global.d.ts +15 -0
  175. package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -0
  176. package/dist/schema/EventSequenceNumber/global.js +14 -0
  177. package/dist/schema/EventSequenceNumber/global.js.map +1 -0
  178. package/dist/schema/EventSequenceNumber/mod.d.ts +37 -0
  179. package/dist/schema/EventSequenceNumber/mod.d.ts.map +1 -0
  180. package/dist/schema/EventSequenceNumber/mod.js +37 -0
  181. package/dist/schema/EventSequenceNumber/mod.js.map +1 -0
  182. package/dist/schema/EventSequenceNumber.test.js +44 -44
  183. package/dist/schema/EventSequenceNumber.test.js.map +1 -1
  184. package/dist/schema/LiveStoreEvent/client.d.ts +168 -0
  185. package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -0
  186. package/dist/schema/LiveStoreEvent/client.js +179 -0
  187. package/dist/schema/LiveStoreEvent/client.js.map +1 -0
  188. package/dist/schema/LiveStoreEvent/client.test.d.ts +2 -0
  189. package/dist/schema/LiveStoreEvent/client.test.d.ts.map +1 -0
  190. package/dist/schema/LiveStoreEvent/client.test.js +120 -0
  191. package/dist/schema/LiveStoreEvent/client.test.js.map +1 -0
  192. package/dist/schema/LiveStoreEvent/for-event-def.d.ts +52 -0
  193. package/dist/schema/LiveStoreEvent/for-event-def.d.ts.map +1 -0
  194. package/dist/schema/LiveStoreEvent/for-event-def.js +2 -0
  195. package/dist/schema/LiveStoreEvent/for-event-def.js.map +1 -0
  196. package/dist/schema/LiveStoreEvent/global.d.ts +36 -0
  197. package/dist/schema/LiveStoreEvent/global.d.ts.map +1 -0
  198. package/dist/schema/LiveStoreEvent/global.js +31 -0
  199. package/dist/schema/LiveStoreEvent/global.js.map +1 -0
  200. package/dist/schema/LiveStoreEvent/input.d.ts +46 -0
  201. package/dist/schema/LiveStoreEvent/input.d.ts.map +1 -0
  202. package/dist/schema/LiveStoreEvent/input.js +26 -0
  203. package/dist/schema/LiveStoreEvent/input.js.map +1 -0
  204. package/dist/schema/LiveStoreEvent/mod.d.ts +5 -0
  205. package/dist/schema/LiveStoreEvent/mod.d.ts.map +1 -0
  206. package/dist/schema/LiveStoreEvent/mod.js +5 -0
  207. package/dist/schema/LiveStoreEvent/mod.js.map +1 -0
  208. package/dist/schema/events.d.ts +1 -1
  209. package/dist/schema/events.d.ts.map +1 -1
  210. package/dist/schema/events.js +1 -1
  211. package/dist/schema/events.js.map +1 -1
  212. package/dist/schema/mod.d.ts +7 -4
  213. package/dist/schema/mod.d.ts.map +1 -1
  214. package/dist/schema/mod.js +6 -4
  215. package/dist/schema/mod.js.map +1 -1
  216. package/dist/schema/schema.d.ts +16 -1
  217. package/dist/schema/schema.d.ts.map +1 -1
  218. package/dist/schema/schema.js +34 -5
  219. package/dist/schema/schema.js.map +1 -1
  220. package/dist/schema/state/sqlite/client-document-def.d.ts +14 -18
  221. package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
  222. package/dist/schema/state/sqlite/client-document-def.js +54 -30
  223. package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
  224. package/dist/schema/state/sqlite/client-document-def.test.js +146 -6
  225. package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
  226. package/dist/schema/state/sqlite/column-annotations.d.ts +13 -13
  227. package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
  228. package/dist/schema/state/sqlite/column-annotations.js +13 -15
  229. package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
  230. package/dist/schema/state/sqlite/column-annotations.test.js +19 -43
  231. package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
  232. package/dist/schema/state/sqlite/column-def.d.ts +1 -1
  233. package/dist/schema/state/sqlite/column-def.d.ts.map +1 -1
  234. package/dist/schema/state/sqlite/column-def.js +132 -57
  235. package/dist/schema/state/sqlite/column-def.js.map +1 -1
  236. package/dist/schema/state/sqlite/column-def.test.js +155 -70
  237. package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
  238. package/dist/schema/state/sqlite/column-spec.d.ts.map +1 -1
  239. package/dist/schema/state/sqlite/column-spec.js +30 -12
  240. package/dist/schema/state/sqlite/column-spec.js.map +1 -1
  241. package/dist/schema/state/sqlite/column-spec.test.js +26 -17
  242. package/dist/schema/state/sqlite/column-spec.test.js.map +1 -1
  243. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +2 -2
  244. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
  245. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +15 -6
  246. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
  247. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +25 -19
  248. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -1
  249. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +22 -16
  250. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
  251. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +28 -17
  252. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -1
  253. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +14 -12
  254. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
  255. package/dist/schema/state/sqlite/db-schema/dsl/mod.js +6 -4
  256. package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
  257. package/dist/schema/state/sqlite/mod.d.ts +3 -5
  258. package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
  259. package/dist/schema/state/sqlite/mod.js +6 -8
  260. package/dist/schema/state/sqlite/mod.js.map +1 -1
  261. package/dist/schema/state/sqlite/persistence.d.ts +11 -0
  262. package/dist/schema/state/sqlite/persistence.d.ts.map +1 -0
  263. package/dist/schema/state/sqlite/persistence.js +10 -0
  264. package/dist/schema/state/sqlite/persistence.js.map +1 -0
  265. package/dist/schema/state/sqlite/query-builder/api.d.ts +58 -29
  266. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
  267. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
  268. package/dist/schema/state/sqlite/query-builder/astToSql.js +105 -24
  269. package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
  270. package/dist/schema/state/sqlite/query-builder/impl.d.ts +4 -2
  271. package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
  272. package/dist/schema/state/sqlite/query-builder/impl.js +42 -27
  273. package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
  274. package/dist/schema/state/sqlite/query-builder/impl.test.js +402 -498
  275. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
  276. package/dist/schema/state/sqlite/schema-helpers.d.ts +2 -2
  277. package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -1
  278. package/dist/schema/state/sqlite/schema-helpers.js +24 -14
  279. package/dist/schema/state/sqlite/schema-helpers.js.map +1 -1
  280. package/dist/schema/state/sqlite/schema-helpers.test.d.ts +2 -0
  281. package/dist/schema/state/sqlite/schema-helpers.test.d.ts.map +1 -0
  282. package/dist/schema/state/sqlite/schema-helpers.test.js +36 -0
  283. package/dist/schema/state/sqlite/schema-helpers.test.js.map +1 -0
  284. package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts +515 -0
  285. package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts.map +1 -0
  286. package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +54 -0
  287. package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -0
  288. package/dist/schema/state/sqlite/system-tables/mod.d.ts +3 -0
  289. package/dist/schema/state/sqlite/system-tables/mod.d.ts.map +1 -0
  290. package/dist/schema/state/sqlite/system-tables/mod.js +3 -0
  291. package/dist/schema/state/sqlite/system-tables/mod.js.map +1 -0
  292. package/dist/schema/state/sqlite/system-tables/state-tables.d.ts +678 -0
  293. package/dist/schema/state/sqlite/system-tables/state-tables.d.ts.map +1 -0
  294. package/dist/schema/state/sqlite/system-tables/state-tables.js +87 -0
  295. package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -0
  296. package/dist/schema/state/sqlite/table-def.d.ts +19 -20
  297. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
  298. package/dist/schema/state/sqlite/table-def.js +54 -4
  299. package/dist/schema/state/sqlite/table-def.js.map +1 -1
  300. package/dist/schema/state/sqlite/table-def.test.js +226 -20
  301. package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
  302. package/dist/schema/unknown-events.d.ts +47 -0
  303. package/dist/schema/unknown-events.d.ts.map +1 -0
  304. package/dist/schema/unknown-events.js +70 -0
  305. package/dist/schema/unknown-events.js.map +1 -0
  306. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts +2 -0
  307. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts.map +1 -0
  308. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js +73 -0
  309. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js.map +1 -0
  310. package/dist/schema-management/common.js +2 -2
  311. package/dist/schema-management/common.js.map +1 -1
  312. package/dist/schema-management/migrations.d.ts +32 -2
  313. package/dist/schema-management/migrations.d.ts.map +1 -1
  314. package/dist/schema-management/migrations.js +38 -6
  315. package/dist/schema-management/migrations.js.map +1 -1
  316. package/dist/schema-management/validate-schema.d.ts +3 -3
  317. package/dist/schema-management/validate-schema.d.ts.map +1 -1
  318. package/dist/schema-management/validate-schema.js +2 -2
  319. package/dist/schema-management/validate-schema.js.map +1 -1
  320. package/dist/session-id-symbol.d.ts +29 -0
  321. package/dist/session-id-symbol.d.ts.map +1 -0
  322. package/dist/session-id-symbol.js +44 -0
  323. package/dist/session-id-symbol.js.map +1 -0
  324. package/dist/sql-queries/sql-queries.d.ts.map +1 -1
  325. package/dist/sql-queries/sql-queries.js +26 -16
  326. package/dist/sql-queries/sql-queries.js.map +1 -1
  327. package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
  328. package/dist/sql-queries/sql-query-builder.js.map +1 -1
  329. package/dist/sql-queries/types.d.ts +6 -7
  330. package/dist/sql-queries/types.d.ts.map +1 -1
  331. package/dist/sql-queries/types.js.map +1 -1
  332. package/dist/sqlite-db-helper.d.ts +21 -1
  333. package/dist/sqlite-db-helper.d.ts.map +1 -1
  334. package/dist/sqlite-db-helper.js +40 -5
  335. package/dist/sqlite-db-helper.js.map +1 -1
  336. package/dist/sqlite-types.d.ts +8 -11
  337. package/dist/sqlite-types.d.ts.map +1 -1
  338. package/dist/sqlite-types.js +3 -3
  339. package/dist/sqlite-types.js.map +1 -1
  340. package/dist/sync/ClientSessionSyncProcessor.d.ts +47 -25
  341. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  342. package/dist/sync/ClientSessionSyncProcessor.js +269 -154
  343. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  344. package/dist/sync/errors.d.ts +12 -51
  345. package/dist/sync/errors.d.ts.map +1 -1
  346. package/dist/sync/errors.js +7 -24
  347. package/dist/sync/errors.js.map +1 -1
  348. package/dist/sync/index.d.ts +2 -0
  349. package/dist/sync/index.d.ts.map +1 -1
  350. package/dist/sync/index.js +2 -0
  351. package/dist/sync/index.js.map +1 -1
  352. package/dist/sync/mock-sync-backend.d.ts +11 -10
  353. package/dist/sync/mock-sync-backend.d.ts.map +1 -1
  354. package/dist/sync/mock-sync-backend.js +97 -74
  355. package/dist/sync/mock-sync-backend.js.map +1 -1
  356. package/dist/sync/mock-sync-backend.test.d.ts +2 -0
  357. package/dist/sync/mock-sync-backend.test.d.ts.map +1 -0
  358. package/dist/sync/mock-sync-backend.test.js +49 -0
  359. package/dist/sync/mock-sync-backend.test.js.map +1 -0
  360. package/dist/sync/next/compact-events.d.ts.map +1 -1
  361. package/dist/sync/next/compact-events.js +11 -12
  362. package/dist/sync/next/compact-events.js.map +1 -1
  363. package/dist/sync/next/facts.d.ts +5 -5
  364. package/dist/sync/next/facts.d.ts.map +1 -1
  365. package/dist/sync/next/facts.js +7 -8
  366. package/dist/sync/next/facts.js.map +1 -1
  367. package/dist/sync/next/history-dag-common.d.ts +58 -15
  368. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  369. package/dist/sync/next/history-dag-common.js +219 -9
  370. package/dist/sync/next/history-dag-common.js.map +1 -1
  371. package/dist/sync/next/history-dag.d.ts.map +1 -1
  372. package/dist/sync/next/history-dag.js +12 -11
  373. package/dist/sync/next/history-dag.js.map +1 -1
  374. package/dist/sync/next/rebase-events.d.ts +5 -5
  375. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  376. package/dist/sync/next/rebase-events.js +6 -6
  377. package/dist/sync/next/rebase-events.js.map +1 -1
  378. package/dist/sync/next/test/compact-events.calculator.test.js +4 -4
  379. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  380. package/dist/sync/next/test/compact-events.test.d.ts.map +1 -1
  381. package/dist/sync/next/test/compact-events.test.js +2 -2
  382. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  383. package/dist/sync/next/test/event-fixtures.d.ts +9 -9
  384. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
  385. package/dist/sync/next/test/event-fixtures.js +12 -12
  386. package/dist/sync/next/test/event-fixtures.js.map +1 -1
  387. package/dist/sync/next/test/history-dag-common.test.d.ts +2 -0
  388. package/dist/sync/next/test/history-dag-common.test.d.ts.map +1 -0
  389. package/dist/sync/next/test/history-dag-common.test.js +73 -0
  390. package/dist/sync/next/test/history-dag-common.test.js.map +1 -0
  391. package/dist/sync/sync-backend-kv.d.ts +3 -3
  392. package/dist/sync/sync-backend-kv.d.ts.map +1 -1
  393. package/dist/sync/sync-backend-kv.js +6 -4
  394. package/dist/sync/sync-backend-kv.js.map +1 -1
  395. package/dist/sync/sync-backend.d.ts +41 -21
  396. package/dist/sync/sync-backend.d.ts.map +1 -1
  397. package/dist/sync/sync-backend.js +45 -4
  398. package/dist/sync/sync-backend.js.map +1 -1
  399. package/dist/sync/sync.d.ts +23 -2
  400. package/dist/sync/sync.d.ts.map +1 -1
  401. package/dist/sync/syncstate.d.ts +115 -191
  402. package/dist/sync/syncstate.d.ts.map +1 -1
  403. package/dist/sync/syncstate.js +108 -129
  404. package/dist/sync/syncstate.js.map +1 -1
  405. package/dist/sync/syncstate.test.js +289 -161
  406. package/dist/sync/syncstate.test.js.map +1 -1
  407. package/dist/sync/transport-chunking.d.ts +35 -0
  408. package/dist/sync/transport-chunking.d.ts.map +1 -0
  409. package/dist/sync/transport-chunking.js +47 -0
  410. package/dist/sync/transport-chunking.js.map +1 -0
  411. package/dist/sync/validate-push-payload.d.ts +2 -2
  412. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  413. package/dist/sync/validate-push-payload.js +4 -6
  414. package/dist/sync/validate-push-payload.js.map +1 -1
  415. package/dist/testing/event-factory.d.ts +3 -3
  416. package/dist/testing/event-factory.d.ts.map +1 -1
  417. package/dist/testing/event-factory.js +5 -7
  418. package/dist/testing/event-factory.js.map +1 -1
  419. package/dist/util.d.ts +11 -4
  420. package/dist/util.d.ts.map +1 -1
  421. package/dist/util.js +21 -4
  422. package/dist/util.js.map +1 -1
  423. package/dist/version.d.ts +24 -5
  424. package/dist/version.d.ts.map +1 -1
  425. package/dist/version.js +25 -8
  426. package/dist/version.js.map +1 -1
  427. package/package.json +50 -16
  428. package/src/ClientSessionLeaderThreadProxy.ts +27 -12
  429. package/src/MaterializationJournal.ts +184 -0
  430. package/src/StateHead.ts +80 -0
  431. package/src/WorkerTransportError.ts +12 -0
  432. package/src/__tests__/fixture.ts +3 -3
  433. package/src/adapter-types.ts +62 -56
  434. package/src/bounded-collections.ts +6 -5
  435. package/src/debug-info.ts +54 -43
  436. package/src/defs.ts +2 -2
  437. package/src/devtools/devtools-compatibility.test.ts +19 -0
  438. package/src/devtools/devtools-messages-client-session.ts +72 -63
  439. package/src/devtools/devtools-messages-common.ts +18 -22
  440. package/src/devtools/devtools-messages-leader.ts +89 -68
  441. package/src/devtools/devtools-sessioninfo.ts +17 -12
  442. package/src/devtools/mod.ts +15 -7
  443. package/src/errors.ts +58 -38
  444. package/src/index.ts +11 -1
  445. package/src/leader-thread/LeaderSyncProcessor.ts +927 -674
  446. package/src/leader-thread/RejectedPushError.ts +119 -0
  447. package/src/leader-thread/connection.ts +13 -9
  448. package/src/leader-thread/eventlog.ts +114 -41
  449. package/src/leader-thread/leader-worker-devtools.ts +223 -124
  450. package/src/leader-thread/make-leader-thread-layer.test.ts +44 -0
  451. package/src/leader-thread/make-leader-thread-layer.ts +170 -82
  452. package/src/leader-thread/materialize-event.ts +51 -16
  453. package/src/leader-thread/mod.ts +1 -0
  454. package/src/leader-thread/recreate-db.ts +26 -61
  455. package/src/leader-thread/shutdown-channel.ts +3 -18
  456. package/src/leader-thread/stream-events.ts +209 -0
  457. package/src/leader-thread/types.ts +77 -65
  458. package/src/logging.ts +15 -0
  459. package/src/make-client-session.ts +16 -10
  460. package/src/materializer-helper.ts +31 -49
  461. package/src/otel.ts +15 -13
  462. package/src/rematerialize-from-eventlog.ts +106 -93
  463. package/src/schema/EventDef/define.test.ts +28 -0
  464. package/src/schema/EventDef/define.ts +218 -0
  465. package/src/schema/EventDef/deprecated.test.ts +122 -0
  466. package/src/schema/EventDef/deprecated.ts +172 -0
  467. package/src/schema/EventDef/event-def.ts +123 -0
  468. package/src/schema/EventDef/facts.ts +135 -0
  469. package/src/schema/EventDef/materializer.ts +172 -0
  470. package/src/schema/EventDef/mod.ts +5 -0
  471. package/src/schema/EventSequenceNumber/client.ts +256 -0
  472. package/src/schema/EventSequenceNumber/global.ts +19 -0
  473. package/src/schema/EventSequenceNumber/mod.ts +37 -0
  474. package/src/schema/EventSequenceNumber.test.ts +72 -53
  475. package/src/schema/LiveStoreEvent/client.test.ts +142 -0
  476. package/src/schema/LiveStoreEvent/client.ts +236 -0
  477. package/src/schema/LiveStoreEvent/for-event-def.ts +60 -0
  478. package/src/schema/LiveStoreEvent/global.ts +45 -0
  479. package/src/schema/LiveStoreEvent/input.ts +63 -0
  480. package/src/schema/LiveStoreEvent/mod.ts +4 -0
  481. package/src/schema/events.ts +1 -1
  482. package/src/schema/mod.ts +7 -4
  483. package/src/schema/schema.ts +48 -6
  484. package/src/schema/state/sqlite/client-document-def.test.ts +172 -14
  485. package/src/schema/state/sqlite/client-document-def.ts +126 -98
  486. package/src/schema/state/sqlite/column-annotations.test.ts +27 -45
  487. package/src/schema/state/sqlite/column-annotations.ts +27 -30
  488. package/src/schema/state/sqlite/column-def.test.ts +186 -77
  489. package/src/schema/state/sqlite/column-def.ts +169 -62
  490. package/src/schema/state/sqlite/column-spec.test.ts +34 -19
  491. package/src/schema/state/sqlite/column-spec.ts +38 -11
  492. package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +17 -7
  493. package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +123 -63
  494. package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +37 -17
  495. package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +65 -45
  496. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +48 -40
  497. package/src/schema/state/sqlite/mod.ts +9 -12
  498. package/src/schema/state/sqlite/persistence.ts +11 -0
  499. package/src/schema/state/sqlite/query-builder/api.ts +61 -23
  500. package/src/schema/state/sqlite/query-builder/astToSql.ts +117 -23
  501. package/src/schema/state/sqlite/query-builder/impl.test.ts +489 -551
  502. package/src/schema/state/sqlite/query-builder/impl.ts +43 -26
  503. package/src/schema/state/sqlite/schema-helpers.test.ts +44 -0
  504. package/src/schema/state/sqlite/schema-helpers.ts +30 -22
  505. package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +64 -0
  506. package/src/schema/state/sqlite/system-tables/mod.ts +2 -0
  507. package/src/schema/state/sqlite/system-tables/state-tables.ts +109 -0
  508. package/src/schema/state/sqlite/table-def.test.ts +295 -46
  509. package/src/schema/state/sqlite/table-def.ts +109 -64
  510. package/src/schema/unknown-events.ts +132 -0
  511. package/src/schema-management/__tests__/migrations-autoincrement-quoting.test.ts +88 -0
  512. package/src/schema-management/common.ts +2 -2
  513. package/src/schema-management/migrations.ts +42 -9
  514. package/src/schema-management/validate-schema.ts +3 -3
  515. package/src/session-id-symbol.ts +59 -0
  516. package/src/sql-queries/sql-queries.ts +26 -18
  517. package/src/sql-queries/sql-query-builder.ts +1 -0
  518. package/src/sql-queries/types.ts +6 -7
  519. package/src/sqlite-db-helper.ts +67 -5
  520. package/src/sqlite-types.ts +9 -11
  521. package/src/sync/ClientSessionSyncProcessor.ts +388 -194
  522. package/src/sync/errors.ts +18 -28
  523. package/src/sync/index.ts +2 -0
  524. package/src/sync/mock-sync-backend.test.ts +78 -0
  525. package/src/sync/mock-sync-backend.ts +196 -108
  526. package/src/sync/next/compact-events.ts +10 -11
  527. package/src/sync/next/facts.ts +13 -14
  528. package/src/sync/next/history-dag-common.ts +306 -26
  529. package/src/sync/next/history-dag.ts +20 -13
  530. package/src/sync/next/rebase-events.ts +12 -12
  531. package/src/sync/next/test/compact-events.calculator.test.ts +5 -4
  532. package/src/sync/next/test/compact-events.test.ts +4 -3
  533. package/src/sync/next/test/event-fixtures.ts +14 -14
  534. package/src/sync/next/test/history-dag-common.test.ts +87 -0
  535. package/src/sync/sync-backend-kv.ts +7 -4
  536. package/src/sync/sync-backend.ts +75 -26
  537. package/src/sync/sync.ts +24 -2
  538. package/src/sync/syncstate.test.ts +657 -442
  539. package/src/sync/syncstate.ts +175 -160
  540. package/src/sync/transport-chunking.ts +85 -0
  541. package/src/sync/validate-push-payload.ts +6 -8
  542. package/src/testing/event-factory.ts +10 -12
  543. package/src/util.ts +20 -11
  544. package/src/version.ts +32 -8
  545. package/dist/schema/EventDef.d.ts +0 -126
  546. package/dist/schema/EventDef.d.ts.map +0 -1
  547. package/dist/schema/EventDef.js +0 -46
  548. package/dist/schema/EventDef.js.map +0 -1
  549. package/dist/schema/EventSequenceNumber.d.ts +0 -80
  550. package/dist/schema/EventSequenceNumber.d.ts.map +0 -1
  551. package/dist/schema/EventSequenceNumber.js +0 -139
  552. package/dist/schema/EventSequenceNumber.js.map +0 -1
  553. package/dist/schema/LiveStoreEvent.d.ts +0 -306
  554. package/dist/schema/LiveStoreEvent.d.ts.map +0 -1
  555. package/dist/schema/LiveStoreEvent.js +0 -147
  556. package/dist/schema/LiveStoreEvent.js.map +0 -1
  557. package/dist/schema/state/sqlite/system-tables.d.ts +0 -976
  558. package/dist/schema/state/sqlite/system-tables.d.ts.map +0 -1
  559. package/dist/schema/state/sqlite/system-tables.js +0 -81
  560. package/dist/schema/state/sqlite/system-tables.js.map +0 -1
  561. package/dist/sql-queries/misc.d.ts +0 -2
  562. package/dist/sql-queries/misc.d.ts.map +0 -1
  563. package/dist/sql-queries/misc.js +0 -2
  564. package/dist/sql-queries/misc.js.map +0 -1
  565. package/dist/sync/next/graphology.d.ts +0 -8
  566. package/dist/sync/next/graphology.d.ts.map +0 -1
  567. package/dist/sync/next/graphology.js +0 -30
  568. package/dist/sync/next/graphology.js.map +0 -1
  569. package/dist/sync/next/graphology_.d.ts +0 -3
  570. package/dist/sync/next/graphology_.d.ts.map +0 -1
  571. package/dist/sync/next/graphology_.js +0 -3
  572. package/dist/sync/next/graphology_.js.map +0 -1
  573. package/src/schema/EventDef.ts +0 -222
  574. package/src/schema/EventSequenceNumber.ts +0 -199
  575. package/src/schema/LiveStoreEvent.ts +0 -286
  576. package/src/schema/state/sqlite/system-tables.ts +0 -106
  577. package/src/sql-queries/misc.ts +0 -2
  578. package/src/sync/next/ambient.d.ts +0 -3
  579. package/src/sync/next/graphology.ts +0 -41
  580. package/src/sync/next/graphology_.ts +0 -2
@@ -1,33 +1,48 @@
1
- import type { Effect, Stream } from '@livestore/utils/effect';
1
+ import type { Effect, Stream, Subscribable } from '@livestore/utils/effect';
2
+ import type { StorageMode } from './adapter-types.ts';
2
3
  import type { MigrationsReport } from './defs.ts';
3
4
  import type * as Devtools from './devtools/mod.ts';
4
- import type { UnexpectedError } from './errors.ts';
5
- import type * as EventSequenceNumber from './schema/EventSequenceNumber.ts';
5
+ import type { RejectedPushError } from './leader-thread/RejectedPushError.ts';
6
+ import type { StreamEventsOptions } from './leader-thread/types.ts';
7
+ import type * as EventSequenceNumber from './schema/EventSequenceNumber/mod.ts';
6
8
  import type { LiveStoreEvent } from './schema/mod.ts';
7
- import type { LeaderAheadError } from './sync/sync.ts';
9
+ import type { SyncBackend } from './sync/sync.ts';
8
10
  import type { PayloadUpstream, SyncState } from './sync/syncstate.ts';
9
11
  export interface ClientSessionLeaderThreadProxy {
10
12
  events: {
11
13
  pull: (args: {
12
- cursor: EventSequenceNumber.EventSequenceNumber;
14
+ cursor: EventSequenceNumber.Client.Composite;
13
15
  }) => Stream.Stream<{
14
16
  payload: typeof PayloadUpstream.Type;
15
- }, UnexpectedError>;
17
+ }>;
16
18
  /** It's important that a client session doesn't call `push` concurrently. */
17
- push(batch: ReadonlyArray<LiveStoreEvent.AnyEncoded>): Effect.Effect<void, UnexpectedError | LeaderAheadError>;
19
+ push(batch: ReadonlyArray<LiveStoreEvent.Client.Encoded>): Effect.Effect<void, RejectedPushError>;
20
+ /** Stream events with filtering */
21
+ stream(options: StreamEventsOptions): Stream.Stream<LiveStoreEvent.Client.Encoded>;
18
22
  };
19
23
  /** The initial state after the leader thread has booted */
20
24
  readonly initialState: {
21
25
  /** The latest event sequence number during boot. Used for the client session to resume syncing. */
22
- readonly leaderHead: EventSequenceNumber.EventSequenceNumber;
26
+ readonly leaderHead: EventSequenceNumber.Client.Composite;
23
27
  /** The migrations report from the leader thread */
24
28
  readonly migrationsReport: MigrationsReport;
29
+ /**
30
+ * Indicates how data is being stored.
31
+ * - `persisted`: Data is persisted to disk (e.g., via OPFS)
32
+ * - `in-memory`: Data is only stored in memory and will be lost on page refresh (e.g., private browsing)
33
+ */
34
+ readonly storageMode: StorageMode;
25
35
  };
26
- export: Effect.Effect<Uint8Array<ArrayBuffer>, UnexpectedError>;
27
- getEventlogData: Effect.Effect<Uint8Array<ArrayBuffer>, UnexpectedError>;
28
- getSyncState: Effect.Effect<SyncState, UnexpectedError>;
36
+ export: Effect.Effect<Uint8Array<ArrayBuffer>>;
37
+ getEventlogData: Effect.Effect<Uint8Array<ArrayBuffer>>;
38
+ syncState: Subscribable.Subscribable<SyncState>;
29
39
  /** For debugging purposes it can be useful to manually trigger devtools messages (e.g. to reset the database) */
30
- sendDevtoolsMessage: (message: Devtools.Leader.MessageToApp) => Effect.Effect<void, UnexpectedError>;
40
+ sendDevtoolsMessage: (message: Devtools.Leader.MessageToApp) => Effect.Effect<void>;
41
+ /**
42
+ * Reactive stream describing the connectivity between the leader and its upstream sync backend.
43
+ * Includes raw connection state, last transition timestamp, and devtools overrides (latch state).
44
+ */
45
+ networkStatus: Subscribable.Subscribable<SyncBackend.NetworkStatus>;
31
46
  }
32
47
  export declare const of: (proxy: ClientSessionLeaderThreadProxy, options?: {
33
48
  overrides?: (original: ClientSessionLeaderThreadProxy) => Partial<ClientSessionLeaderThreadProxy>;
@@ -1 +1 @@
1
- {"version":3,"file":"ClientSessionLeaderThreadProxy.d.ts","sourceRoot":"","sources":["../src/ClientSessionLeaderThreadProxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAE7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,KAAK,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,KAAK,mBAAmB,MAAM,iCAAiC,CAAA;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAErE,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,IAAI,EAAE;YACX,MAAM,EAAE,mBAAmB,CAAC,mBAAmB,CAAA;SAChD,KAAK,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,OAAO,eAAe,CAAC,IAAI,CAAA;SAAE,EAAE,eAAe,CAAC,CAAA;QAC9E,6EAA6E;QAC7E,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,gBAAgB,CAAC,CAAA;KAC/G,CAAA;IACD,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,EAAE;QACrB,mGAAmG;QACnG,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC,mBAAmB,CAAA;QAC5D,mDAAmD;QACnD,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAA;KAC5C,CAAA;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,CAAA;IAC/D,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,CAAA;IACxE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;IACvD,iHAAiH;IACjH,mBAAmB,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;CACrG;AAED,eAAO,MAAM,EAAE,GACb,OAAO,8BAA8B,EACrC,UAAU;IAAE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,8BAA8B,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAA;CAAE,KAC9G,8BAIF,CAAA"}
1
+ {"version":3,"file":"ClientSessionLeaderThreadProxy.d.ts","sourceRoot":"","sources":["../src/ClientSessionLeaderThreadProxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,KAAK,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAA;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,KAAK,mBAAmB,MAAM,qCAAqC,CAAA;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAErE,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,IAAI,EAAE;YACX,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;SAC7C,KAAK,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,OAAO,eAAe,CAAC,IAAI,CAAA;SAAE,CAAC,CAAA;QAC7D,6EAA6E;QAC7E,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;QACjG,mCAAmC;QACnC,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;KACnF,CAAA;IACD,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,EAAE;QACrB,mGAAmG;QACnG,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;QACzD,mDAAmD;QACnD,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAA;QAC3C;;;;WAIG;QACH,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;KAClC,CAAA;IACD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAA;IAC9C,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAA;IACvD,SAAS,EAAE,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;IAC/C,iHAAiH;IACjH,mBAAmB,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACnF;;;OAGG;IACH,aAAa,EAAE,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;CACpE;AAED,eAAO,MAAM,EAAE,GACb,OAAO,8BAA8B,EACrC,UAAU;IAAE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,8BAA8B,KAAK,OAAO,CAAC,8BAA8B,CAAC,CAAA;CAAE,KAC9G,8BAIF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ClientSessionLeaderThreadProxy.js","sourceRoot":"","sources":["../src/ClientSessionLeaderThreadProxy.ts"],"names":[],"mappings":"AAgCA,MAAM,CAAC,MAAM,EAAE,GAAG,CAChB,KAAqC,EACrC,OAA+G,EAC/E,EAAE;IAClC,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IAElD,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;AAClD,CAAC,CAAA"}
1
+ {"version":3,"file":"ClientSessionLeaderThreadProxy.js","sourceRoot":"","sources":["../src/ClientSessionLeaderThreadProxy.ts"],"names":[],"mappings":"AA+CA,MAAM,CAAC,MAAM,EAAE,GAAG,CAChB,KAAqC,EACrC,OAA+G,EAC/E,EAAE;IAClC,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IAElD,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAA;AAClD,CAAC,CAAA"}
@@ -0,0 +1,44 @@
1
+ import { Context, Effect, Layer, Schema } from '@livestore/utils/effect';
2
+ import { type SqliteDb } from './adapter-types.ts';
3
+ import * as EventSequenceNumber from './schema/EventSequenceNumber/mod.ts';
4
+ export declare const TypeId: "~@livestore/common/MaterializationJournal";
5
+ export type TypeId = typeof TypeId;
6
+ export declare const MaterializationJournalErrorTypeId: "~@livestore/common/MaterializationJournalError";
7
+ export declare const isMaterializationJournalError: (u: unknown) => u is MaterializationJournalError;
8
+ declare const MaterializationJournalError_base: Schema.Class<MaterializationJournalError, Schema.TaggedStruct<"MaterializationJournalError", {
9
+ readonly method: Schema.Literals<readonly ["record", "rollback", "discardUpTo"]>;
10
+ readonly cause: Schema.Defect;
11
+ }>, import("effect/Cause").YieldableError>;
12
+ export declare class MaterializationJournalError extends MaterializationJournalError_base {
13
+ readonly [MaterializationJournalErrorTypeId]: "~@livestore/common/MaterializationJournalError";
14
+ }
15
+ export type MaterializationChangeset = {
16
+ _tag: 'changeset';
17
+ data: Uint8Array<ArrayBuffer>;
18
+ } | {
19
+ _tag: 'no-op';
20
+ };
21
+ export type MaterializationRecord = {
22
+ key: EventSequenceNumber.Client.Composite;
23
+ changeset: MaterializationChangeset;
24
+ };
25
+ export interface Service {
26
+ readonly [TypeId]: TypeId;
27
+ /** Stores a materialization record, replacing any record at the same key. */
28
+ record: (record: MaterializationRecord) => Effect.Effect<void, MaterializationJournalError>;
29
+ /** Reverts the keyed materializations in reverse order, then discards their records. */
30
+ rollback: (keys: ReadonlyArray<EventSequenceNumber.Client.Composite>) => Effect.Effect<void, MaterializationJournalError>;
31
+ /** Discards records whose key is less than or equal to `key`, ignoring rebase generation. */
32
+ discardUpTo: (key: EventSequenceNumber.Client.Composite) => Effect.Effect<void, MaterializationJournalError>;
33
+ }
34
+ declare const MaterializationJournal_base: Context.ServiceClass<MaterializationJournal, "@livestore/common/MaterializationJournal", Service>;
35
+ export declare class MaterializationJournal extends MaterializationJournal_base {
36
+ }
37
+ interface Options {
38
+ readonly dbState: SqliteDb;
39
+ }
40
+ export declare const make: ({ dbState }: Options) => Service;
41
+ export declare const layer: (options: Options) => Layer.Layer<MaterializationJournal, never, never>;
42
+ export declare const layerTest: Layer.Layer<MaterializationJournal, never, never>;
43
+ export {};
44
+ //# sourceMappingURL=MaterializationJournal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaterializationJournal.d.ts","sourceRoot":"","sources":["../src/MaterializationJournal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAA4B,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAElG,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAE/D,OAAO,KAAK,mBAAmB,MAAM,qCAAqC,CAAA;AAM1E,eAAO,MAAM,MAAM,EAAG,2CAAoD,CAAA;AAC1E,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAA;AAElC,eAAO,MAAM,iCAAiC,EAAG,gDAAyD,CAAA;AAE1G,eAAO,MAAM,6BAA6B,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,2BACH,CAAA;;;;;AAE7D,qBAAa,2BAA4B,SAAQ,gCAK/C;IACA,QAAQ,CAAC,CAAC,iCAAiC,CAAC,mDAAoC;CACjF;AAED,MAAM,MAAM,wBAAwB,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAE/G,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAA;IACzC,SAAS,EAAE,wBAAwB,CAAA;CACpC,CAAA;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,6EAA6E;IAC7E,MAAM,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAA;IAC3F,wFAAwF;IACxF,QAAQ,EAAE,CACR,IAAI,EAAE,aAAa,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,KACtD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAA;IACrD,6FAA6F;IAC7F,WAAW,EAAE,CAAC,GAAG,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAA;CAC7G;;AAED,qBAAa,sBAAuB,SAAQ,2BAE3C;CAAG;AAEJ,UAAU,OAAO;IACf,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAA;CAC3B;AAED,eAAO,MAAM,IAAI,GAAI,aAAa,OAAO,YAqHxC,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,SAAS,OAAO,sDAAyD,CAAA;AAE/F,eAAO,MAAM,SAAS,mDAQrB,CAAA"}
@@ -0,0 +1,112 @@
1
+ import { Context, Effect, Layer, Predicate, ReadonlyArray, Schema } from '@livestore/utils/effect';
2
+ import { SqliteError } from "./adapter-types.js";
3
+ import { execSql, execSqlPrepared } from "./leader-thread/connection.js";
4
+ import * as EventSequenceNumber from "./schema/EventSequenceNumber/mod.js";
5
+ import { SystemTables } from "./schema/mod.js";
6
+ import { findManyRows, insertRow } from "./sql-queries/index.js";
7
+ import * as SqliteDbHelper from "./sqlite-db-helper.js";
8
+ import { prepareBindValues, sql } from "./util.js";
9
+ export const TypeId = '~@livestore/common/MaterializationJournal';
10
+ export const MaterializationJournalErrorTypeId = '~@livestore/common/MaterializationJournalError';
11
+ export const isMaterializationJournalError = (u) => Predicate.hasProperty(u, MaterializationJournalErrorTypeId);
12
+ export class MaterializationJournalError extends Schema.TaggedError(MaterializationJournalErrorTypeId)('MaterializationJournalError', {
13
+ method: Schema.Literals(['record', 'rollback', 'discardUpTo']),
14
+ cause: Schema.Defect(),
15
+ }) {
16
+ [MaterializationJournalErrorTypeId] = MaterializationJournalErrorTypeId;
17
+ }
18
+ export class MaterializationJournal extends Context.Service()('@livestore/common/MaterializationJournal') {
19
+ }
20
+ export const make = ({ dbState }) => {
21
+ const deleteByKeys = Effect.fnUntraced(function* (keys) {
22
+ // Keep DELETE statements below SQLite's bound-parameter limit.
23
+ const keyChunks = ReadonlyArray.chunksOf(100)(keys);
24
+ for (const keyChunk of keyChunks) {
25
+ const placeholders = keyChunk.map(() => '(?, ?, ?)').join(', ');
26
+ const bindValues = keyChunk.flatMap((key) => [key.global, key.client, key.rebaseGeneration]);
27
+ const statement = sql `DELETE FROM ${SystemTables.MATERIALIZATION_JOURNAL_META_TABLE}
28
+ WHERE (seqNumGlobal, seqNumClient, seqNumRebaseGeneration) IN (${placeholders})`;
29
+ yield* execSqlPrepared(dbState, statement, prepareBindValues(bindValues, statement));
30
+ }
31
+ }, SqliteDbHelper.withSavepoint(dbState));
32
+ return MaterializationJournal.of({
33
+ [TypeId]: TypeId,
34
+ record: Effect.fnUntraced(function* (record) {
35
+ yield* deleteByKeys([record.key]);
36
+ // Generate the parameterized INSERT statement
37
+ const [statement, bindValues] = insertRow({
38
+ tableName: SystemTables.MATERIALIZATION_JOURNAL_META_TABLE,
39
+ columns: SystemTables.materializationJournalMetaTable.sqliteDef.columns,
40
+ values: {
41
+ seqNumGlobal: record.key.global,
42
+ seqNumClient: record.key.client,
43
+ seqNumRebaseGeneration: record.key.rebaseGeneration,
44
+ changeset: record.changeset._tag === 'changeset' ? record.changeset.data : null,
45
+ // Legacy processors still expose this column for development diagnostics.
46
+ debug: null,
47
+ },
48
+ });
49
+ yield* execSqlPrepared(dbState, statement, prepareBindValues(bindValues, statement));
50
+ }, SqliteDbHelper.withSavepoint(dbState), Effect.mapError((cause) => new MaterializationJournalError({ method: 'record', cause }))),
51
+ rollback: Effect.fnUntraced(function* (keys) {
52
+ const sortedKeys = keys.toSorted((a, b) => EventSequenceNumber.Client.compare(b, a));
53
+ const rollbackRecords = yield* Effect.forEach(sortedKeys, Effect.fnUntraced(function* (key) {
54
+ const [statement, bindValues] = findManyRows({
55
+ tableName: SystemTables.MATERIALIZATION_JOURNAL_META_TABLE,
56
+ columns: SystemTables.materializationJournalMetaTable.sqliteDef.columns,
57
+ where: {
58
+ seqNumGlobal: key.global,
59
+ seqNumClient: key.client,
60
+ seqNumRebaseGeneration: key.rebaseGeneration,
61
+ },
62
+ limit: 1,
63
+ });
64
+ const preparedBindValues = prepareBindValues(bindValues, statement);
65
+ const row = yield* Effect.try({
66
+ try: () => dbState.select(statement, preparedBindValues)[0],
67
+ catch: (cause) => new SqliteError({ cause, query: { sql: statement, bindValues: preparedBindValues } }),
68
+ });
69
+ if (row === undefined) {
70
+ return yield* new MaterializationJournalError({
71
+ method: 'rollback',
72
+ cause: new Error(`Missing materialization journal record for ${EventSequenceNumber.Client.toString(key)}`),
73
+ });
74
+ }
75
+ return {
76
+ key,
77
+ changeset: row.changeset === null
78
+ ? { _tag: 'no-op' }
79
+ : { _tag: 'changeset', data: row.changeset },
80
+ };
81
+ }));
82
+ for (const record of rollbackRecords) {
83
+ if (record.changeset._tag === 'changeset') {
84
+ const data = record.changeset.data;
85
+ yield* Effect.try({
86
+ try: () => dbState.makeChangeset(data).invert().apply(),
87
+ catch: (cause) => new SqliteError({ cause }),
88
+ });
89
+ }
90
+ }
91
+ yield* deleteByKeys(sortedKeys);
92
+ }, SqliteDbHelper.withSavepoint(dbState), Effect.mapError((cause) => isMaterializationJournalError(cause) === true
93
+ ? cause
94
+ : new MaterializationJournalError({ method: 'rollback', cause }))),
95
+ discardUpTo: Effect.fnUntraced(function* (key) {
96
+ yield* execSql(dbState, sql `DELETE FROM ${SystemTables.MATERIALIZATION_JOURNAL_META_TABLE}
97
+ WHERE seqNumGlobal < ${key.global}
98
+ OR (
99
+ seqNumGlobal = ${key.global}
100
+ AND seqNumClient <= ${key.client}
101
+ )`, {});
102
+ }, SqliteDbHelper.withSavepoint(dbState), Effect.mapError((cause) => new MaterializationJournalError({ method: 'discardUpTo', cause }))),
103
+ });
104
+ };
105
+ export const layer = (options) => Layer.succeed(MaterializationJournal, make(options));
106
+ export const layerTest = Layer.succeed(MaterializationJournal, MaterializationJournal.of({
107
+ [TypeId]: TypeId,
108
+ record: () => Effect.void,
109
+ rollback: () => Effect.void,
110
+ discardUpTo: () => Effect.void,
111
+ }));
112
+ //# sourceMappingURL=MaterializationJournal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaterializationJournal.js","sourceRoot":"","sources":["../src/MaterializationJournal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Context, Effect, Layer } from '@livestore/utils/effect';
2
+ import type { SqliteDb, SqliteError } from './adapter-types.ts';
3
+ import * as EventSequenceNumber from './schema/EventSequenceNumber/mod.ts';
4
+ export declare const TypeId: "~@livestore/common/StateHead";
5
+ export type TypeId = typeof TypeId;
6
+ /**
7
+ * Persists and reads the latest event sequence number reflected by the state database.
8
+ */
9
+ export interface Service {
10
+ readonly [TypeId]: TypeId;
11
+ /** Persists the latest event sequence number reflected by the state database. */
12
+ set: (head: EventSequenceNumber.Client.Composite) => Effect.Effect<void, SqliteError>;
13
+ /** Returns the persisted head, or the root when the current-schema table has no row. */
14
+ get: Effect.Effect<EventSequenceNumber.Client.Composite, SqliteError>;
15
+ }
16
+ declare const StateHead_base: Context.ServiceClass<StateHead, "@livestore/common/StateHead", Service>;
17
+ export declare class StateHead extends StateHead_base {
18
+ }
19
+ interface Options {
20
+ readonly dbState: SqliteDb;
21
+ }
22
+ export declare const make: ({ dbState }: Options) => Service;
23
+ export declare const layer: (options: Options) => Layer.Layer<StateHead, never, never>;
24
+ export declare const layerTest: Layer.Layer<StateHead, never, never>;
25
+ export {};
26
+ //# sourceMappingURL=StateHead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateHead.d.ts","sourceRoot":"","sources":["../src/StateHead.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAEhE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAE/D,OAAO,KAAK,mBAAmB,MAAM,qCAAqC,CAAA;AAI1E,eAAO,MAAM,MAAM,EAAG,8BAAuC,CAAA;AAC7D,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAA;AAIlC;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,iFAAiF;IACjF,GAAG,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;IACrF,wFAAwF;IACxF,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;CACtE;;AAED,qBAAa,SAAU,SAAQ,cAAoE;CAAG;AAEtG,UAAU,OAAO;IACf,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAA;CAC3B;AAED,eAAO,MAAM,IAAI,GAAI,aAAa,OAAO,YAsCxC,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,SAAS,OAAO,yCAA4C,CAAA;AAElF,eAAO,MAAM,SAAS,sCAOrB,CAAA"}
@@ -0,0 +1,50 @@
1
+ import { Context, Effect, Layer } from '@livestore/utils/effect';
2
+ import { execSql, selectSql } from "./leader-thread/connection.js";
3
+ import * as EventSequenceNumber from "./schema/EventSequenceNumber/mod.js";
4
+ import { SystemTables } from "./schema/mod.js";
5
+ import { findManyRows, insertRow } from "./sql-queries/index.js";
6
+ export const TypeId = '~@livestore/common/StateHead';
7
+ const STATE_HEAD_ROW_ID = 1;
8
+ export class StateHead extends Context.Service()('@livestore/common/StateHead') {
9
+ }
10
+ export const make = ({ dbState }) => {
11
+ return StateHead.of({
12
+ [TypeId]: TypeId,
13
+ set: (head) => {
14
+ const [statement, bindValues] = insertRow({
15
+ tableName: SystemTables.STATE_HEAD_META_TABLE,
16
+ columns: SystemTables.stateHeadMetaTable.sqliteDef.columns,
17
+ values: {
18
+ id: STATE_HEAD_ROW_ID,
19
+ seqNumGlobal: head.global,
20
+ seqNumClient: head.client,
21
+ seqNumRebaseGeneration: head.rebaseGeneration,
22
+ },
23
+ options: { orReplace: true },
24
+ });
25
+ return execSql(dbState, statement, bindValues);
26
+ },
27
+ get: Effect.suspend(() => {
28
+ const [statement, bindValues] = findManyRows({
29
+ tableName: SystemTables.STATE_HEAD_META_TABLE,
30
+ columns: SystemTables.stateHeadMetaTable.sqliteDef.columns,
31
+ where: { id: STATE_HEAD_ROW_ID },
32
+ limit: 1,
33
+ });
34
+ return selectSql(dbState, statement, bindValues).pipe(Effect.map(([row]) => row === undefined
35
+ ? EventSequenceNumber.Client.ROOT
36
+ : EventSequenceNumber.Client.Composite.make({
37
+ global: row.seqNumGlobal,
38
+ client: row.seqNumClient,
39
+ rebaseGeneration: row.seqNumRebaseGeneration,
40
+ })));
41
+ }),
42
+ });
43
+ };
44
+ export const layer = (options) => Layer.succeed(StateHead, make(options));
45
+ export const layerTest = Layer.succeed(StateHead, StateHead.of({
46
+ [TypeId]: TypeId,
47
+ set: () => Effect.void,
48
+ get: Effect.succeed(EventSequenceNumber.Client.ROOT),
49
+ }));
50
+ //# sourceMappingURL=StateHead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateHead.js","sourceRoot":"","sources":["../src/StateHead.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Schema, WorkerError } from '@livestore/utils/effect';
2
+ /**
3
+ * Type guard that identifies infrastructure errors from the Effect Worker transport layer.
4
+ *
5
+ * @remarks
6
+ *
7
+ * These errors ({@link WorkerError.WorkerError}, {@link Schema.SchemaError}) represent communication failures between
8
+ * threads/processes — not application-level failures.
9
+ */
10
+ export declare const isWorkerTransportError: (e: unknown) => e is WorkerError.WorkerError | Schema.SchemaError;
11
+ //# sourceMappingURL=WorkerTransportError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerTransportError.d.ts","sourceRoot":"","sources":["../src/WorkerTransportError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE7D;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC,WACjC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { Schema, WorkerError } from '@livestore/utils/effect';
2
+ /**
3
+ * Type guard that identifies infrastructure errors from the Effect Worker transport layer.
4
+ *
5
+ * @remarks
6
+ *
7
+ * These errors ({@link WorkerError.WorkerError}, {@link Schema.SchemaError}) represent communication failures between
8
+ * threads/processes — not application-level failures.
9
+ */
10
+ export const isWorkerTransportError = (e) => Schema.isSchemaError(e) || WorkerError.isWorkerError(e);
11
+ //# sourceMappingURL=WorkerTransportError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerTransportError.js","sourceRoot":"","sources":["../src/WorkerTransportError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAE7D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAU,EAAqD,EAAE,CACtG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
- import { SessionIdSymbol } from '../adapter-types.ts';
2
1
  import { State } from '../schema/mod.ts';
2
+ import { SessionIdSymbol } from '../session-id-symbol.ts';
3
3
  export declare const UiState: State.SQLite.ClientDocumentTableDef<"UiState", {
4
4
  readonly showSidebar: boolean;
5
5
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../src/__tests__/fixture.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAc,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAEpD,eAAO,MAAM,OAAO;;;;;;;;;;;;EAQlB,CAAA;AAOF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;EAOpB,CAAA;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;EAOrB,CAAA;AAOF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAyB,CAAA;AAI5C,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAgC,CAAA"}
1
+ {"version":3,"file":"fixture.d.ts","sourceRoot":"","sources":["../../src/__tests__/fixture.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,eAAO,MAAM,OAAO;;;;;;;;;;;;EAQlB,CAAA;AAOF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;EAOpB,CAAA;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;EAOrB,CAAA;AAOF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAyB,CAAA;AAI5C,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAgC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { Schema } from '@livestore/utils/effect';
2
- import { SessionIdSymbol } from "../adapter-types.js";
3
2
  import { makeSchema, State } from "../schema/mod.js";
3
+ import { SessionIdSymbol } from "../session-id-symbol.js";
4
4
  export const UiState = State.SQLite.clientDocument({
5
5
  name: 'UiState',
6
6
  schema: Schema.Struct({
@@ -11,8 +11,8 @@ export const UiState = State.SQLite.clientDocument({
11
11
  },
12
12
  });
13
13
  const Config = Schema.Struct({
14
- fontSize: Schema.Number,
15
- theme: Schema.Literal('light', 'dark'),
14
+ fontSize: Schema.Finite,
15
+ theme: Schema.Literals(['light', 'dark']),
16
16
  });
17
17
  export const appConfig = State.SQLite.clientDocument({
18
18
  name: 'AppConfig',
@@ -1 +1 @@
1
- {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../src/__tests__/fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;IACjD,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC,OAAO;KAC5B,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;KAC7B;CACF,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;CACvC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;IACnD,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE;QACP,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KACxC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;IACpD,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE;QACP,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KACxC;CACF,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG;IACb,UAAU,EAAE,OAAO,CAAC,GAAG;IACvB,YAAY,EAAE,SAAS,CAAC,GAAG;CAC5B,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;AAE5C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAA;AAEnE,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../src/__tests__/fixture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;IACjD,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC,OAAO;KAC5B,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;KAC7B;CACF,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;CAC1C,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;IACnD,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE;QACP,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KACxC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;IACpD,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE;QACP,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;KACxC;CACF,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG;IACb,UAAU,EAAE,OAAO,CAAC,GAAG;IACvB,YAAY,EAAE,SAAS,CAAC,GAAG;CAC5B,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;AAE5C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAA;AAEnE,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA"}
@@ -1,14 +1,19 @@
1
- import { type Effect, type Exit, type Queue, Schema, type Scope, type SubscriptionRef, type WebChannel } from '@livestore/utils/effect';
1
+ import { type Effect, type Exit, type Queue, type Latch, Schema, type Scope, type SubscriptionRef, type WebChannel } from '@livestore/utils/effect';
2
2
  import type { ClientSessionLeaderThreadProxy } from './ClientSessionLeaderThreadProxy.ts';
3
3
  import type * as Devtools from './devtools/mod.ts';
4
- import type { IntentionalShutdownCause, MaterializeError, UnexpectedError } from './errors.ts';
4
+ import type { IntentionalShutdownCause, MaterializeError, UnknownError } from './errors.ts';
5
5
  import type { LiveStoreSchema } from './schema/mod.ts';
6
6
  import type { SqliteDb } from './sqlite-types.ts';
7
- import type { IsOfflineError, SyncError } from './sync/index.js';
7
+ import type { BackendIdMismatchError } from './sync/index.ts';
8
8
  export * as ClientSessionLeaderThreadProxy from './ClientSessionLeaderThreadProxy.ts';
9
9
  export * from './defs.ts';
10
10
  export * from './errors.ts';
11
11
  export * from './sqlite-types.ts';
12
+ /**
13
+ * Runtime handle to an active LiveStore client session within the current process.
14
+ * Provides direct access to the embedded SQLite database, leader thread bridge,
15
+ * and lifecycle controls useful for application-level coordination.
16
+ */
12
17
  export interface ClientSession {
13
18
  /** SQLite database with synchronous API running in the same thread (usually in-memory) */
14
19
  sqliteDb: SqliteDb;
@@ -16,14 +21,14 @@ export interface ClientSession {
16
21
  enabled: false;
17
22
  } | {
18
23
  enabled: true;
19
- pullLatch: Effect.Latch;
20
- pushLatch: Effect.Latch;
24
+ pullLatch: Latch.Latch;
25
+ pushLatch: Latch.Latch;
21
26
  };
22
27
  clientId: string;
23
28
  sessionId: string;
24
29
  /** Status info whether current session is leader or not */
25
30
  lockStatus: SubscriptionRef.SubscriptionRef<LockStatus>;
26
- shutdown: (cause: Exit.Exit<IntentionalShutdownCause, UnexpectedError | SyncError | MaterializeError>) => Effect.Effect<void>;
31
+ shutdown: (cause: Exit.Exit<IntentionalShutdownCause, UnknownError | MaterializeError | BackendIdMismatchError>) => Effect.Effect<void>;
27
32
  /** A proxy API to communicate with the leader thread */
28
33
  leaderThread: ClientSessionLeaderThreadProxy;
29
34
  /** A unique identifier for the current instance of the client session. Used for debugging purposes. */
@@ -31,94 +36,91 @@ export interface ClientSession {
31
36
  }
32
37
  export type ResetMode = 'all-data' | 'only-app-db';
33
38
  export declare const BootStateProgress: Schema.Struct<{
34
- done: typeof Schema.Number;
35
- total: typeof Schema.Number;
39
+ readonly done: Schema.Finite;
40
+ readonly total: Schema.Finite;
36
41
  }>;
37
- export declare const BootStatus: Schema.Union<[Schema.Struct<{
38
- stage: Schema.Literal<["loading"]>;
42
+ /**
43
+ * Describes known reasons why LiveStore boot may encounter storage issues.
44
+ *
45
+ * @remarks
46
+ * - `private-browsing`: OPFS unavailable due to private/incognito browsing mode (Safari, Firefox)
47
+ * - `storage-unavailable`: OPFS access denied for other reasons (permissions, quota)
48
+ * - `unknown`: Unexpected error during storage initialization
49
+ */
50
+ export declare const BootWarningReason: Schema.Literals<readonly ["private-browsing", "storage-unavailable", "unknown"]>;
51
+ export type BootWarningReason = typeof BootWarningReason.Type;
52
+ /**
53
+ * Describes the storage mode the store is operating in.
54
+ *
55
+ * @remarks
56
+ * - `persisted`: Data is persisted to disk (e.g., via OPFS)
57
+ * - `in-memory`: Data is only stored in memory and will be lost on page refresh
58
+ */
59
+ export declare const StorageMode: Schema.Literals<readonly ["persisted", "in-memory"]>;
60
+ export type StorageMode = typeof StorageMode.Type;
61
+ export declare const BootStatus: Schema.Union<readonly [Schema.Struct<{
62
+ readonly stage: Schema.Literal<"loading">;
39
63
  }>, Schema.Struct<{
40
- stage: Schema.Literal<["migrating"]>;
41
- progress: Schema.Struct<{
42
- done: typeof Schema.Number;
43
- total: typeof Schema.Number;
64
+ readonly stage: Schema.Literal<"migrating">;
65
+ readonly progress: Schema.Struct<{
66
+ readonly done: Schema.Finite;
67
+ readonly total: Schema.Finite;
44
68
  }>;
45
69
  }>, Schema.Struct<{
46
- stage: Schema.Literal<["rehydrating"]>;
47
- progress: Schema.Struct<{
48
- done: typeof Schema.Number;
49
- total: typeof Schema.Number;
70
+ readonly stage: Schema.Literal<"rehydrating">;
71
+ readonly progress: Schema.Struct<{
72
+ readonly done: Schema.Finite;
73
+ readonly total: Schema.Finite;
50
74
  }>;
51
75
  }>, Schema.Struct<{
52
- stage: Schema.Literal<["syncing"]>;
53
- progress: Schema.Struct<{
54
- done: typeof Schema.Number;
55
- total: typeof Schema.Number;
76
+ readonly stage: Schema.Literal<"syncing">;
77
+ readonly progress: Schema.Struct<{
78
+ readonly done: Schema.Finite;
79
+ readonly total: Schema.Finite;
56
80
  }>;
57
81
  }>, Schema.Struct<{
58
- stage: Schema.Literal<["done"]>;
82
+ readonly stage: Schema.Literal<"done">;
83
+ }>, Schema.Struct<{
84
+ readonly stage: Schema.Literal<"warning">;
85
+ readonly reason: Schema.Literals<readonly ["private-browsing", "storage-unavailable", "unknown"]>;
86
+ readonly message: Schema.String;
59
87
  }>]>;
60
88
  export type BootStatus = typeof BootStatus.Type;
61
- /**
62
- * Can be used in queries to refer to the current session id.
63
- * Will be replaced with the actual session id at runtime
64
- *
65
- * In client document table:
66
- * ```ts
67
- * const uiState = State.SQLite.clientDocument({
68
- * name: 'ui_state',
69
- * schema: Schema.Struct({
70
- * theme: Schema.Literal('dark', 'light', 'system'),
71
- * user: Schema.String,
72
- * showToolbar: Schema.Boolean,
73
- * }),
74
- * default: { value: defaultFrontendState, id: SessionIdSymbol },
75
- * })
76
- * ```
77
- *
78
- * Or in a client document query:
79
- * ```ts
80
- * const query$ = queryDb(tables.uiState.get(SessionIdSymbol))
81
- * ```
82
- */
83
- export declare const SessionIdSymbol: unique symbol;
84
- export type SessionIdSymbol = typeof SessionIdSymbol;
85
89
  export type LockStatus = 'has-lock' | 'no-lock';
86
90
  export type MigrationOptions = {
87
- strategy: 'auto';
88
91
  hooks?: Partial<MigrationHooks>;
89
92
  logging?: {
90
93
  excludeAffectedRows?: (sqlStmt: string) => boolean;
91
94
  };
92
- } | {
93
- strategy: 'manual';
94
- migrate: (oldDb: Uint8Array<ArrayBuffer>) => Uint8Array<ArrayBuffer> | Promise<Uint8Array<ArrayBuffer>> | Effect.Effect<Uint8Array<ArrayBuffer>, unknown>;
95
95
  };
96
96
  export type MigrationHooks = {
97
97
  /** Runs on the empty in-memory database with no database schemas applied yet */
98
98
  init: MigrationHook;
99
- /** Runs before applying the migration strategy but after table schemas have been applied and singleton rows have been created */
99
+ /** Runs after table schemas and singleton rows are created, but before rematerializing state from the eventlog */
100
100
  pre: MigrationHook;
101
- /** Runs after applying the migration strategy before creating export snapshot and closing the database */
101
+ /** Runs after rematerializing state from the eventlog */
102
102
  post: MigrationHook;
103
103
  };
104
104
  export type MigrationHook = (db: SqliteDb) => void | Promise<void> | Effect.Effect<void, unknown>;
105
105
  export interface ClientSessionDevtoolsChannel extends WebChannel.WebChannel<Devtools.ClientSession.MessageToApp, Devtools.ClientSession.MessageFromApp> {
106
106
  }
107
- export type ConnectDevtoolsToStore = (storeDevtoolsChannel: ClientSessionDevtoolsChannel) => Effect.Effect<void, UnexpectedError, Scope.Scope>;
108
- export type Adapter = (args: AdapterArgs) => Effect.Effect<ClientSession, UnexpectedError, Scope.Scope>;
107
+ export type ConnectDevtoolsToStore = (storeDevtoolsChannel: ClientSessionDevtoolsChannel) => Effect.Effect<void, UnknownError, Scope.Scope>;
108
+ export type Adapter = (args: AdapterArgs) => Effect.Effect<ClientSession, UnknownError, Scope.Scope>;
109
109
  export interface AdapterArgs {
110
110
  schema: LiveStoreSchema;
111
111
  storeId: string;
112
112
  devtoolsEnabled: boolean;
113
113
  debugInstanceId: string;
114
114
  bootStatusQueue: Queue.Queue<BootStatus>;
115
- shutdown: (exit: Exit.Exit<IntentionalShutdownCause, UnexpectedError | SyncError | MaterializeError | IsOfflineError>) => Effect.Effect<void>;
115
+ shutdown: (exit: Exit.Exit<IntentionalShutdownCause, UnknownError | MaterializeError | BackendIdMismatchError>) => Effect.Effect<void>;
116
116
  connectDevtoolsToStore: ConnectDevtoolsToStore;
117
117
  /**
118
118
  * Payload that will be passed to the sync backend when connecting
119
119
  *
120
120
  * @default undefined
121
121
  */
122
- syncPayload: Schema.JsonValue | undefined;
122
+ syncPayloadSchema: Schema.Decoder<Schema.Json> | undefined;
123
+ /** Encoded representation of the sync payload matching `syncPayloadSchema`. */
124
+ syncPayloadEncoded: Schema.Json | undefined;
123
125
  }
124
126
  //# sourceMappingURL=adapter-types.d.ts.map