@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,7 +1,6 @@
1
1
  import type { Nullable } from '@livestore/utils'
2
2
  import { omitUndefineds } from '@livestore/utils'
3
- import type { Option, Types } from '@livestore/utils/effect'
4
- import { Schema } from '@livestore/utils/effect'
3
+ import { type Option, Schema, Struct, type Types } from '@livestore/utils/effect'
5
4
 
6
5
  import type * as SqliteAst from '../ast/sqlite.ts'
7
6
  import type { ColumnDefinition } from './field-defs.ts'
@@ -20,19 +19,18 @@ export type DbSchemaInput = Record<string, TableDefinition<any, any>> | Readonly
20
19
  * - array: we use the table name of each array item (= table definition) as the object key
21
20
  * - object: we discard the keys of the input object and use the table name of each object value (= table definition) as the new object key
22
21
  */
23
- export type DbSchemaFromInputSchema<TSchemaInput extends DbSchemaInput> = TSchemaInput extends ReadonlyArray<
24
- TableDefinition<any, any>
25
- >
26
- ? { [K in TSchemaInput[number] as K['name']]: K }
27
- : TSchemaInput extends Record<string, TableDefinition<any, any>>
28
- ? { [K in keyof TSchemaInput as TSchemaInput[K]['name']]: TSchemaInput[K] }
29
- : never
22
+ export type DbSchemaFromInputSchema<TSchemaInput extends DbSchemaInput> =
23
+ TSchemaInput extends ReadonlyArray<TableDefinition<any, any>>
24
+ ? { [K in TSchemaInput[number] as K['name']]: K }
25
+ : TSchemaInput extends Record<string, TableDefinition<any, any>>
26
+ ? { [K in keyof TSchemaInput as TSchemaInput[K]['name']]: TSchemaInput[K] }
27
+ : never
30
28
 
31
29
  // TODO ensure via runtime check (possibly even via type-level check) that all index names are unique
32
30
  export const makeDbSchema = <TDbSchemaInput extends DbSchemaInput>(
33
31
  schema: TDbSchemaInput,
34
32
  ): DbSchemaFromInputSchema<TDbSchemaInput> => {
35
- return Array.isArray(schema) ? Object.fromEntries(schema.map((_) => [_.name, _])) : (schema as any)
33
+ return Array.isArray(schema) === true ? Object.fromEntries(schema.map((_) => [_.name, _])) : (schema as any)
36
34
  }
37
35
 
38
36
  export const table = <TTableName extends string, TColumns extends Columns, TIndexes extends Index[]>(
@@ -53,34 +51,50 @@ export const table = <TTableName extends string, TColumns extends Columns, TInde
53
51
  export type AnyIfConstained<In, Out> = '__constrained' extends keyof In ? any : Out
54
52
  export type EmptyObjIfConstained<In> = '__constrained' extends keyof In ? {} : In
55
53
 
56
- export type StructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Schema<
57
- AnyIfConstained<TCols, FromColumns.RowDecoded<TCols>>,
58
- AnyIfConstained<TCols, FromColumns.RowEncoded<TCols>>
59
- >
54
+ export type StructFieldsForColumns<TCols extends ConstraintColumns> = '__constrained' extends keyof TCols
55
+ ? Record<string, Schema.Codec<any, any>>
56
+ : { readonly [K in keyof TCols]: TCols[K]['schema'] }
57
+
58
+ export type StructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Struct<StructFieldsForColumns<TCols>>
60
59
 
61
- export type InsertStructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Schema<
60
+ export type InsertStructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Codec<
62
61
  AnyIfConstained<TCols, FromColumns.InsertRowDecoded<TCols>>,
63
62
  AnyIfConstained<TCols, FromColumns.InsertRowEncoded<TCols>>
64
63
  >
65
64
 
66
- export const structSchemaForTable = <TTableDefinition extends TableDefinition<any, any>>(
67
- tableDef: TTableDefinition,
68
- ): StructSchemaForColumns<TTableDefinition['columns']> =>
69
- Schema.Struct(Object.fromEntries(tableDef.ast.columns.map((column) => [column.name, column.schema]))).annotations({
65
+ interface GetColumnSchema extends Struct.Lambda {
66
+ <TEncoded, TDecoded, TNullable extends boolean>(
67
+ column: ColumnDefinition<TEncoded, TDecoded, TNullable>,
68
+ ): ColumnDefinition<TEncoded, TDecoded, TNullable>['schema']
69
+ readonly '~lambda.out': this['~lambda.in'] extends ColumnDefinition<any, any, any>
70
+ ? this['~lambda.in']['schema']
71
+ : never
72
+ }
73
+
74
+ const getColumnSchema = Struct.lambda<GetColumnSchema>((column) => column.schema)
75
+
76
+ const structFieldsForColumns = <TCols extends ConstraintColumns>(columns: TCols): StructFieldsForColumns<TCols> =>
77
+ Struct.map(columns, getColumnSchema)
78
+
79
+ export const structSchemaForTable = <TTableName extends string, TColumns extends ConstraintColumns>(
80
+ tableDef: TableDefinition<TTableName, TColumns>,
81
+ ): StructSchemaForColumns<TColumns> =>
82
+ Schema.Struct(structFieldsForColumns(tableDef.columns)).annotate({
70
83
  title: tableDef.name,
71
- }) as any
84
+ })
72
85
 
73
- export const insertStructSchemaForTable = <TTableDefinition extends TableDefinition<any, any>>(
74
- tableDef: TTableDefinition,
75
- ): InsertStructSchemaForColumns<TTableDefinition['columns']> =>
86
+ export const insertStructSchemaForTable = <TTableName extends string, TColumns extends ConstraintColumns>(
87
+ tableDef: TableDefinition<TTableName, TColumns>,
88
+ ): InsertStructSchemaForColumns<TColumns> =>
76
89
  Schema.Struct(
77
90
  Object.fromEntries(
78
91
  tableDef.ast.columns.map((column) => [
79
92
  column.name,
93
+
80
94
  column.nullable === true || column.default._tag === 'Some' ? Schema.optional(column.schema) : column.schema,
81
95
  ]),
82
96
  ),
83
- ).annotations({
97
+ ).annotate({
84
98
  title: tableDef.name,
85
99
  }) as any
86
100
 
@@ -116,12 +130,8 @@ export type TableDefinition<TName extends string, TColumns extends Columns> = {
116
130
 
117
131
  export type Columns = Record<string, ColumnDefinition<any, any>>
118
132
 
119
- export type IsSingleColumn<TColumns extends Columns | ColumnDefinition<any, any>> = TColumns extends ColumnDefinition<
120
- any,
121
- any
122
- >
123
- ? true
124
- : false
133
+ export type IsSingleColumn<TColumns extends Columns | ColumnDefinition<any, any>> =
134
+ TColumns extends ColumnDefinition<any, any> ? true : false
125
135
 
126
136
  /**
127
137
  * NOTE this is only needed to avoid a TS limitation where `StructSchemaForColumns` in the default case
@@ -154,7 +164,7 @@ export namespace FromTable {
154
164
  }
155
165
 
156
166
  export type RowEncodeNonNullable<TTableDefinition extends TableDefinition<any, any>> = {
157
- [K in keyof TTableDefinition['columns']]: Schema.Schema.Encoded<TTableDefinition['columns'][K]['schema']>
167
+ [K in keyof TTableDefinition['columns']]: TTableDefinition['columns'][K]['schema']['Encoded']
158
168
  }
159
169
 
160
170
  export type RowEncoded<TTableDefinition extends TableDefinition<any, any>> = Types.Simplify<
@@ -171,7 +181,7 @@ export namespace FromTable {
171
181
  // >
172
182
 
173
183
  export type RowDecodedAll<TTableDefinition extends TableDefinition<any, any>> = {
174
- [K in keyof TTableDefinition['columns']]: Schema.Schema.Type<TTableDefinition['columns'][K]['schema']>
184
+ [K in keyof TTableDefinition['columns']]: TTableDefinition['columns'][K]['schema']['Type']
175
185
  }
176
186
  }
177
187
 
@@ -183,11 +193,11 @@ export namespace FromColumns {
183
193
  >
184
194
 
185
195
  export type RowDecodedAll<TColumns extends Columns> = {
186
- readonly [K in keyof TColumns]: Schema.Schema.Type<TColumns[K]['schema']>
196
+ readonly [K in keyof TColumns]: TColumns[K]['schema']['Type']
187
197
  }
188
198
 
189
199
  export type RowEncodedAll<TColumns extends Columns> = {
190
- readonly [K in keyof TColumns]: Schema.Schema.Encoded<TColumns[K]['schema']>
200
+ readonly [K in keyof TColumns]: TColumns[K]['schema']['Encoded']
191
201
  }
192
202
 
193
203
  export type RowEncoded<TColumns extends Columns> = Types.Simplify<
@@ -196,12 +206,11 @@ export namespace FromColumns {
196
206
  >
197
207
 
198
208
  export type RowEncodeNonNullable<TColumns extends Columns> = {
199
- readonly [K in keyof TColumns]: Schema.Schema.Encoded<TColumns[K]['schema']>
209
+ readonly [K in keyof TColumns]: TColumns[K]['schema']['Encoded']
200
210
  }
201
211
 
202
212
  export type NullableColumnNames<TColumns extends Columns> = keyof {
203
- // TODO double check why there is a `true` in the type
204
- [K in keyof TColumns as TColumns[K] extends ColumnDefinition<any, true> ? K : never]: {}
213
+ [K in keyof TColumns as TColumns[K]['nullable'] extends true ? K : never]: {}
205
214
  }
206
215
 
207
216
  export type RequiredInsertColumns<TColumns extends Columns> = {
@@ -214,9 +223,8 @@ export namespace FromColumns {
214
223
 
215
224
  export type RequiredInsertColumnNames<TColumns extends Columns> = keyof RequiredInsertColumns<TColumns>
216
225
 
217
- export type RequiresInsertValues<TColumns extends Columns> = RequiredInsertColumnNames<TColumns> extends never
218
- ? false
219
- : true
226
+ export type RequiresInsertValues<TColumns extends Columns> =
227
+ RequiredInsertColumnNames<TColumns> extends never ? false : true
220
228
 
221
229
  export type InsertRowDecoded<TColumns extends Columns> = Types.Simplify<
222
230
  Pick<RowDecodedAll<TColumns>, RequiredInsertColumnNames<TColumns>> &
@@ -1,14 +1,14 @@
1
1
  import { shouldNeverHappen } from '@livestore/utils'
2
2
 
3
3
  import type { MigrationOptions } from '../../../adapter-types.ts'
4
- import type { Materializer } from '../../EventDef.ts'
4
+ import type { Materializer } from '../../EventDef/mod.ts'
5
5
  import type { InternalState } from '../../schema.ts'
6
6
  import { ClientDocumentTableDefSymbol, tableIsClientDocumentTable } from './client-document-def.ts'
7
7
  import { SqliteAst } from './db-schema/mod.ts'
8
- import { stateSystemTables } from './system-tables.ts'
8
+ import { stateSystemTables } from './system-tables/state-tables.ts'
9
9
  import type { TableDef, TableDefBase } from './table-def.ts'
10
10
 
11
- export * from '../../EventDef.ts'
11
+ export * from '../../EventDef/mod.ts'
12
12
  export {
13
13
  type ClientDocumentTableDef,
14
14
  ClientDocumentTableDefSymbol,
@@ -22,16 +22,15 @@ export * from './column-spec.ts'
22
22
  export * from './table-def.ts'
23
23
 
24
24
  export const makeState = <TStateInput extends InputState>(inputSchema: TStateInput): InternalState => {
25
- const inputTables: ReadonlyArray<TableDef> = Array.isArray(inputSchema.tables)
26
- ? inputSchema.tables
27
- : Object.values(inputSchema.tables)
25
+ const inputTables: ReadonlyArray<TableDef> =
26
+ Array.isArray(inputSchema.tables) === true ? inputSchema.tables : Object.values(inputSchema.tables)
28
27
 
29
28
  const tables = new Map<string, TableDef.Any>()
30
29
 
31
30
  for (const tableDef of inputTables) {
32
31
  const sqliteDef = tableDef.sqliteDef
33
32
  // TODO validate tables (e.g. index names are unique)
34
- if (tables.has(sqliteDef.ast.name)) {
33
+ if (tables.has(sqliteDef.ast.name) === true) {
35
34
  shouldNeverHappen(`Duplicate table name: ${sqliteDef.ast.name}. Please use unique names for tables.`)
36
35
  }
37
36
  tables.set(sqliteDef.ast.name, tableDef)
@@ -48,7 +47,7 @@ export const makeState = <TStateInput extends InputState>(inputSchema: TStateInp
48
47
  }
49
48
 
50
49
  for (const tableDef of inputTables) {
51
- if (tableIsClientDocumentTable(tableDef)) {
50
+ if (tableIsClientDocumentTable(tableDef) === true) {
52
51
  materializers.set(
53
52
  tableDef[ClientDocumentTableDefSymbol].derived.setEventDef.name,
54
53
  tableDef[ClientDocumentTableDefSymbol].derived.setMaterializer,
@@ -61,14 +60,12 @@ export const makeState = <TStateInput extends InputState>(inputSchema: TStateInp
61
60
  tables: [...tables.values()].map((_) => _.sqliteDef.ast),
62
61
  })
63
62
 
64
- return { sqlite: { tables, migrations: inputSchema.migrations ?? { strategy: 'auto' }, hash }, materializers }
63
+ return { sqlite: { tables, migrations: inputSchema.migrations ?? {}, hash }, materializers }
65
64
  }
66
65
 
67
66
  export type InputState = {
68
67
  readonly tables: Record<string, TableDefBase> | ReadonlyArray<TableDefBase>
69
68
  readonly materializers: Record<string, Materializer<any>>
70
- /**
71
- * @default { strategy: 'auto' }
72
- */
69
+ /** Configures hooks and logging for automatic state migration. */
73
70
  readonly migrations?: MigrationOptions
74
71
  }
@@ -0,0 +1,11 @@
1
+ import type { LiveStoreSchema } from '../../schema.ts'
2
+
3
+ /**
4
+ * Returns the schema-keyed base name shared by persisted state databases.
5
+ *
6
+ * @remarks
7
+ *
8
+ * Adapters append backend-specific storage-format namespaces and file
9
+ * extensions.
10
+ */
11
+ export const getStateDbBaseName = (schema: LiveStoreSchema): string => `state${schema.state.sqlite.hash}`
@@ -1,7 +1,7 @@
1
1
  import type { GetValForKey, SingleOrReadonlyArray } from '@livestore/utils'
2
2
  import { type Option, Predicate, type Schema } from '@livestore/utils/effect'
3
3
 
4
- import type { SessionIdSymbol } from '../../../../adapter-types.ts'
4
+ import type { SessionIdSymbol } from '../../../../session-id-symbol.ts'
5
5
  import type { SqlValue } from '../../../../util.ts'
6
6
  import type { ClientDocumentTableDef, ClientDocumentTableDefSymbol } from '../client-document-def.ts'
7
7
  import type { SqliteDsl } from '../db-schema/mod.ts'
@@ -32,14 +32,14 @@ export namespace QueryBuilderAst {
32
32
  readonly limit: Option.Option<number>
33
33
  readonly tableDef: TableDefBase
34
34
  readonly where: ReadonlyArray<QueryBuilderAst.Where>
35
- readonly resultSchemaSingle: Schema.Schema<any>
35
+ readonly resultSchemaSingle: Schema.Codec<any, any>
36
36
  }
37
37
 
38
38
  export interface CountQuery {
39
39
  readonly _tag: 'CountQuery'
40
40
  readonly tableDef: TableDefBase
41
41
  readonly where: ReadonlyArray<QueryBuilderAst.Where>
42
- readonly resultSchema: Schema.Schema<number, ReadonlyArray<{ count: number }>>
42
+ readonly resultSchema: Schema.Codec<number, ReadonlyArray<{ count: number }>>
43
43
  }
44
44
 
45
45
  export interface RowQuery {
@@ -55,7 +55,7 @@ export namespace QueryBuilderAst {
55
55
  readonly values: Record<string, unknown>
56
56
  readonly onConflict: OnConflict | undefined
57
57
  readonly returning: string[] | undefined
58
- readonly resultSchema: Schema.Schema<any>
58
+ readonly resultSchema: Schema.Codec<any, any>
59
59
  }
60
60
 
61
61
  export interface OnConflict {
@@ -76,7 +76,7 @@ export namespace QueryBuilderAst {
76
76
  readonly values: Record<string, unknown>
77
77
  readonly where: ReadonlyArray<QueryBuilderAst.Where>
78
78
  readonly returning: string[] | undefined
79
- readonly resultSchema: Schema.Schema<any>
79
+ readonly resultSchema: Schema.Codec<any, any>
80
80
  }
81
81
 
82
82
  export interface DeleteQuery {
@@ -84,7 +84,7 @@ export namespace QueryBuilderAst {
84
84
  readonly tableDef: TableDefBase
85
85
  readonly where: ReadonlyArray<QueryBuilderAst.Where>
86
86
  readonly returning: string[] | undefined
87
- readonly resultSchema: Schema.Schema<any>
87
+ readonly resultSchema: Schema.Codec<any, any>
88
88
  }
89
89
 
90
90
  export type WriteQuery = InsertQuery | UpdateQuery | DeleteQuery
@@ -115,7 +115,7 @@ export const isQueryBuilder = (value: unknown): value is QueryBuilder<any, any,
115
115
 
116
116
  export type QueryBuilder<
117
117
  TResult,
118
- TTableDef extends TableDefBase,
118
+ TTableDef extends TableDefBase<any, any>,
119
119
  /** Used to gradually remove features from the API based on the query context */
120
120
  TWithout extends QueryBuilder.ApiFeature = never,
121
121
  > = {
@@ -128,15 +128,25 @@ export type QueryBuilder<
128
128
 
129
129
  export namespace QueryBuilder {
130
130
  export type Any = QueryBuilder<any, any, any>
131
- export type WhereOps = WhereOps.Equality | WhereOps.Order | WhereOps.Like | WhereOps.In
131
+ export type WhereOps = WhereOps.Equality | WhereOps.Order | WhereOps.Like | WhereOps.In | WhereOps.JsonArray
132
132
 
133
133
  export namespace WhereOps {
134
134
  export type Equality = '=' | '!='
135
135
  export type Order = '<' | '>' | '<=' | '>='
136
136
  export type Like = 'LIKE' | 'NOT LIKE' | 'ILIKE' | 'NOT ILIKE'
137
137
  export type In = 'IN' | 'NOT IN'
138
+ /**
139
+ * Operators for checking if a JSON array column contains a value.
140
+ *
141
+ * ⚠️ **Performance note**: These operators use SQLite's `json_each()` table-valued function
142
+ * which **cannot be indexed** and requires a full table scan. For large tables with frequent
143
+ * lookups, consider denormalizing the data into a separate indexed table.
144
+ *
145
+ * @see https://sqlite.org/json1.html#jeach
146
+ */
147
+ export type JsonArray = 'JSON_CONTAINS' | 'JSON_NOT_CONTAINS'
138
148
 
139
- export type SingleValue = Equality | Order | Like
149
+ export type SingleValue = Equality | Order | Like | JsonArray
140
150
  export type MultiValue = In
141
151
  }
142
152
 
@@ -155,14 +165,26 @@ export namespace QueryBuilder {
155
165
  | 'returning'
156
166
  | 'onConflict'
157
167
 
168
+ /** Extracts the element type from an array type, or returns never if not an array */
169
+ type ArrayElement<T> = T extends ReadonlyArray<infer E> ? E : never
170
+
158
171
  export type WhereParams<TTableDef extends TableDefBase> = Partial<{
159
172
  [K in keyof TTableDef['sqliteDef']['columns']]:
160
173
  | TTableDef['sqliteDef']['columns'][K]['schema']['Type']
161
- | { op: QueryBuilder.WhereOps.SingleValue; value: TTableDef['sqliteDef']['columns'][K]['schema']['Type'] }
174
+ | {
175
+ op: Exclude<QueryBuilder.WhereOps.SingleValue, QueryBuilder.WhereOps.JsonArray>
176
+ value: TTableDef['sqliteDef']['columns'][K]['schema']['Type']
177
+ }
162
178
  | {
163
179
  op: QueryBuilder.WhereOps.MultiValue
164
180
  value: ReadonlyArray<TTableDef['sqliteDef']['columns'][K]['schema']['Type']>
165
181
  }
182
+ | (ArrayElement<TTableDef['sqliteDef']['columns'][K]['schema']['Type']> extends never
183
+ ? never
184
+ : {
185
+ op: QueryBuilder.WhereOps.JsonArray
186
+ value: ArrayElement<TTableDef['sqliteDef']['columns'][K]['schema']['Type']>
187
+ })
166
188
  | undefined
167
189
  }>
168
190
 
@@ -208,9 +230,8 @@ export namespace QueryBuilder {
208
230
  /** Select multiple columns */
209
231
  <TColumns extends keyof TTableDef['sqliteDef']['columns'] & string>(
210
232
  ...columns: TColumns[]
211
- // TODO also support arbitrary SQL selects
212
- // params: QueryBuilderSelectParams,
213
233
  ): QueryBuilder<
234
+ // params: QueryBuilderSelectParams, // TODO also support arbitrary SQL selects
214
235
  ReadonlyArray<{
215
236
  readonly [K in TColumns]: TTableDef['sqliteDef']['columns'][K]['schema']['Type']
216
237
  }>,
@@ -242,7 +263,12 @@ export namespace QueryBuilder {
242
263
  ): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select'>
243
264
  <TColName extends keyof TTableDef['sqliteDef']['columns']>(
244
265
  col: TColName,
245
- op: QueryBuilder.WhereOps,
266
+ op: QueryBuilder.WhereOps.MultiValue,
267
+ value: ReadonlyArray<TTableDef['sqliteDef']['columns'][TColName]['schema']['Type']>,
268
+ ): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select'>
269
+ <TColName extends keyof TTableDef['sqliteDef']['columns']>(
270
+ col: TColName,
271
+ op: QueryBuilder.WhereOps.SingleValue,
246
272
  value: TTableDef['sqliteDef']['columns'][TColName]['schema']['Type'],
247
273
  ): QueryBuilder<TResult, TTableDef, TWithout | 'row' | 'select'>
248
274
  }
@@ -331,12 +357,20 @@ export namespace QueryBuilder {
331
357
  >
332
358
 
333
359
  /**
334
- * Insert a new row into the table
360
+ * Insert a new row into the table.
361
+ *
362
+ * @remarks
363
+ *
364
+ * Follows SQL semantics: nullable columns and columns with defaults are omittable.
365
+ * `NullOr(S)` and `optional(NullOr(S))` both produce nullable columns, so both are omittable.
366
+ *
367
+ * @example
335
368
  *
336
- * Example:
337
369
  * ```ts
338
370
  * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' })
339
371
  * ```
372
+ *
373
+ * @param values - The row values to insert.
340
374
  */
341
375
  readonly insert: (
342
376
  values: TTableDef['insertSchema']['Type'],
@@ -347,22 +381,26 @@ export namespace QueryBuilder {
347
381
  >
348
382
 
349
383
  /**
350
- * Example: If the row already exists, it will be ignored.
384
+ * Upsert: insert a row, or handle conflicts on existing rows.
385
+ * Equivalent to SQLite's `INSERT ... ON CONFLICT` clause.
386
+ *
387
+ * Actions:
388
+ * - `'ignore'`: Skip the insert if a row with the same key exists
389
+ * - `'replace'`: Delete the existing row and insert the new one
390
+ * - `'update'`: Update specific columns on the existing row
391
+ *
351
392
  * ```ts
393
+ * // Ignore: skip if row exists
352
394
  * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'ignore')
353
- * ```
354
395
  *
355
- * Example: If the row already exists, it will be replaced.
356
- * ```ts
396
+ * // Replace: delete existing row and insert new one
357
397
  * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'replace')
358
- * ```
359
398
  *
360
- * Example: If the row already exists, it will be updated.
361
- * ```ts
399
+ * // Update: merge specific columns into existing row
362
400
  * db.todos.insert({ id: '123', text: 'Buy milk', status: 'active' }).onConflict('id', 'update', { text: 'Buy soy milk' })
363
401
  * ```
364
402
  *
365
- * NOTE This API doesn't yet support composite primary keys.
403
+ * NOTE: Composite primary keys are not yet supported.
366
404
  */
367
405
  readonly onConflict: {
368
406
  <TTarget extends SingleOrReadonlyArray<keyof TTableDef['sqliteDef']['columns']>>(