@livestore/common 0.4.0-dev.8 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/ClientSessionLeaderThreadProxy.d.ts +27 -12
  3. package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
  4. package/dist/ClientSessionLeaderThreadProxy.js.map +1 -1
  5. package/dist/WorkerTransportError.d.ts +11 -0
  6. package/dist/WorkerTransportError.d.ts.map +1 -0
  7. package/dist/WorkerTransportError.js +11 -0
  8. package/dist/WorkerTransportError.js.map +1 -0
  9. package/dist/adapter-types.d.ts +37 -7
  10. package/dist/adapter-types.d.ts.map +1 -1
  11. package/dist/adapter-types.js +27 -1
  12. package/dist/adapter-types.js.map +1 -1
  13. package/dist/bounded-collections.d.ts.map +1 -1
  14. package/dist/bounded-collections.js +6 -4
  15. package/dist/bounded-collections.js.map +1 -1
  16. package/dist/debug-info.d.ts.map +1 -1
  17. package/dist/debug-info.js +33 -6
  18. package/dist/debug-info.js.map +1 -1
  19. package/dist/devtools/devtools-compatibility.test.d.ts +2 -0
  20. package/dist/devtools/devtools-compatibility.test.d.ts.map +1 -0
  21. package/dist/devtools/devtools-compatibility.test.js +15 -0
  22. package/dist/devtools/devtools-compatibility.test.js.map +1 -0
  23. package/dist/devtools/devtools-messages-client-session.d.ts +55 -24
  24. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
  25. package/dist/devtools/devtools-messages-client-session.js +22 -5
  26. package/dist/devtools/devtools-messages-client-session.js.map +1 -1
  27. package/dist/devtools/devtools-messages-common.d.ts +11 -14
  28. package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
  29. package/dist/devtools/devtools-messages-common.js +7 -9
  30. package/dist/devtools/devtools-messages-common.js.map +1 -1
  31. package/dist/devtools/devtools-messages-leader.d.ts +65 -30
  32. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  33. package/dist/devtools/devtools-messages-leader.js +29 -11
  34. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  35. package/dist/devtools/devtools-sessioninfo.d.ts +14 -2
  36. package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
  37. package/dist/devtools/devtools-sessioninfo.js +7 -4
  38. package/dist/devtools/devtools-sessioninfo.js.map +1 -1
  39. package/dist/devtools/mod.d.ts +13 -2
  40. package/dist/devtools/mod.d.ts.map +1 -1
  41. package/dist/devtools/mod.js +10 -3
  42. package/dist/devtools/mod.js.map +1 -1
  43. package/dist/errors.d.ts +48 -18
  44. package/dist/errors.d.ts.map +1 -1
  45. package/dist/errors.js +20 -12
  46. package/dist/errors.js.map +1 -1
  47. package/dist/index.d.ts +4 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +4 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/leader-thread/LeaderSyncProcessor.d.ts +53 -6
  52. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  53. package/dist/leader-thread/LeaderSyncProcessor.js +325 -257
  54. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  55. package/dist/leader-thread/RejectedPushError.d.ts +107 -0
  56. package/dist/leader-thread/RejectedPushError.d.ts.map +1 -0
  57. package/dist/leader-thread/RejectedPushError.js +78 -0
  58. package/dist/leader-thread/RejectedPushError.js.map +1 -0
  59. package/dist/leader-thread/connection.js +1 -1
  60. package/dist/leader-thread/connection.js.map +1 -1
  61. package/dist/leader-thread/eventlog.d.ts +19 -14
  62. package/dist/leader-thread/eventlog.d.ts.map +1 -1
  63. package/dist/leader-thread/eventlog.js +78 -18
  64. package/dist/leader-thread/eventlog.js.map +1 -1
  65. package/dist/leader-thread/leader-worker-devtools.d.ts +1 -2
  66. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  67. package/dist/leader-thread/leader-worker-devtools.js +90 -58
  68. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  69. package/dist/leader-thread/make-leader-thread-layer.d.ts +15 -7
  70. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  71. package/dist/leader-thread/make-leader-thread-layer.js +49 -17
  72. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  73. package/dist/leader-thread/make-leader-thread-layer.test.d.ts +2 -0
  74. package/dist/leader-thread/make-leader-thread-layer.test.d.ts.map +1 -0
  75. package/dist/leader-thread/make-leader-thread-layer.test.js +32 -0
  76. package/dist/leader-thread/make-leader-thread-layer.test.js.map +1 -0
  77. package/dist/leader-thread/materialize-event.d.ts +1 -1
  78. package/dist/leader-thread/materialize-event.d.ts.map +1 -1
  79. package/dist/leader-thread/materialize-event.js +28 -9
  80. package/dist/leader-thread/materialize-event.js.map +1 -1
  81. package/dist/leader-thread/mod.d.ts +1 -0
  82. package/dist/leader-thread/mod.d.ts.map +1 -1
  83. package/dist/leader-thread/mod.js +1 -0
  84. package/dist/leader-thread/mod.js.map +1 -1
  85. package/dist/leader-thread/recreate-db.d.ts +2 -2
  86. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  87. package/dist/leader-thread/recreate-db.js +6 -6
  88. package/dist/leader-thread/recreate-db.js.map +1 -1
  89. package/dist/leader-thread/shutdown-channel.d.ts +2 -2
  90. package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
  91. package/dist/leader-thread/shutdown-channel.js +2 -2
  92. package/dist/leader-thread/shutdown-channel.js.map +1 -1
  93. package/dist/leader-thread/stream-events.d.ts +56 -0
  94. package/dist/leader-thread/stream-events.d.ts.map +1 -0
  95. package/dist/leader-thread/stream-events.js +167 -0
  96. package/dist/leader-thread/stream-events.js.map +1 -0
  97. package/dist/leader-thread/types.d.ts +95 -17
  98. package/dist/leader-thread/types.d.ts.map +1 -1
  99. package/dist/leader-thread/types.js +13 -0
  100. package/dist/leader-thread/types.js.map +1 -1
  101. package/dist/logging.d.ts +40 -0
  102. package/dist/logging.d.ts.map +1 -0
  103. package/dist/logging.js +33 -0
  104. package/dist/logging.js.map +1 -0
  105. package/dist/make-client-session.d.ts +5 -3
  106. package/dist/make-client-session.d.ts.map +1 -1
  107. package/dist/make-client-session.js +7 -4
  108. package/dist/make-client-session.js.map +1 -1
  109. package/dist/materializer-helper.d.ts +6 -6
  110. package/dist/materializer-helper.d.ts.map +1 -1
  111. package/dist/materializer-helper.js +18 -8
  112. package/dist/materializer-helper.js.map +1 -1
  113. package/dist/otel.d.ts +2 -1
  114. package/dist/otel.d.ts.map +1 -1
  115. package/dist/otel.js +7 -2
  116. package/dist/otel.js.map +1 -1
  117. package/dist/rematerialize-from-eventlog.d.ts +3 -3
  118. package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
  119. package/dist/rematerialize-from-eventlog.js +40 -29
  120. package/dist/rematerialize-from-eventlog.js.map +1 -1
  121. package/dist/schema/EventDef/define.d.ts +161 -0
  122. package/dist/schema/EventDef/define.d.ts.map +1 -0
  123. package/dist/schema/EventDef/define.js +140 -0
  124. package/dist/schema/EventDef/define.js.map +1 -0
  125. package/dist/schema/EventDef/deprecated.d.ts +99 -0
  126. package/dist/schema/EventDef/deprecated.d.ts.map +1 -0
  127. package/dist/schema/EventDef/deprecated.js +144 -0
  128. package/dist/schema/EventDef/deprecated.js.map +1 -0
  129. package/dist/schema/EventDef/deprecated.test.d.ts +2 -0
  130. package/dist/schema/EventDef/deprecated.test.d.ts.map +1 -0
  131. package/dist/schema/EventDef/deprecated.test.js +95 -0
  132. package/dist/schema/EventDef/deprecated.test.js.map +1 -0
  133. package/dist/schema/EventDef/event-def.d.ts +110 -0
  134. package/dist/schema/EventDef/event-def.d.ts.map +1 -0
  135. package/dist/schema/EventDef/event-def.js +2 -0
  136. package/dist/schema/EventDef/event-def.js.map +1 -0
  137. package/dist/schema/EventDef/facts.d.ts +118 -0
  138. package/dist/schema/EventDef/facts.d.ts.map +1 -0
  139. package/dist/schema/EventDef/facts.js +53 -0
  140. package/dist/schema/EventDef/facts.js.map +1 -0
  141. package/dist/schema/EventDef/materializer.d.ts +155 -0
  142. package/dist/schema/EventDef/materializer.d.ts.map +1 -0
  143. package/dist/schema/EventDef/materializer.js +83 -0
  144. package/dist/schema/EventDef/materializer.js.map +1 -0
  145. package/dist/schema/EventDef/mod.d.ts +6 -0
  146. package/dist/schema/EventDef/mod.d.ts.map +1 -0
  147. package/dist/schema/EventDef/mod.js +6 -0
  148. package/dist/schema/EventDef/mod.js.map +1 -0
  149. package/dist/schema/EventSequenceNumber/client.d.ts +136 -0
  150. package/dist/schema/EventSequenceNumber/client.d.ts.map +1 -0
  151. package/dist/schema/EventSequenceNumber/client.js +193 -0
  152. package/dist/schema/EventSequenceNumber/client.js.map +1 -0
  153. package/dist/schema/EventSequenceNumber/global.d.ts +15 -0
  154. package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -0
  155. package/dist/schema/EventSequenceNumber/global.js +14 -0
  156. package/dist/schema/EventSequenceNumber/global.js.map +1 -0
  157. package/dist/schema/EventSequenceNumber/mod.d.ts +37 -0
  158. package/dist/schema/EventSequenceNumber/mod.d.ts.map +1 -0
  159. package/dist/schema/EventSequenceNumber/mod.js +37 -0
  160. package/dist/schema/EventSequenceNumber/mod.js.map +1 -0
  161. package/dist/schema/EventSequenceNumber.test.js +44 -44
  162. package/dist/schema/EventSequenceNumber.test.js.map +1 -1
  163. package/dist/schema/{LiveStoreEvent.d.ts → LiveStoreEvent/client.d.ts} +102 -111
  164. package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -0
  165. package/dist/schema/LiveStoreEvent/client.js +176 -0
  166. package/dist/schema/LiveStoreEvent/client.js.map +1 -0
  167. package/dist/schema/LiveStoreEvent/client.test.d.ts +2 -0
  168. package/dist/schema/LiveStoreEvent/client.test.d.ts.map +1 -0
  169. package/dist/schema/LiveStoreEvent/client.test.js +111 -0
  170. package/dist/schema/LiveStoreEvent/client.test.js.map +1 -0
  171. package/dist/schema/LiveStoreEvent/for-event-def.d.ts +52 -0
  172. package/dist/schema/LiveStoreEvent/for-event-def.d.ts.map +1 -0
  173. package/dist/schema/LiveStoreEvent/for-event-def.js +2 -0
  174. package/dist/schema/LiveStoreEvent/for-event-def.js.map +1 -0
  175. package/dist/schema/LiveStoreEvent/global.d.ts +36 -0
  176. package/dist/schema/LiveStoreEvent/global.d.ts.map +1 -0
  177. package/dist/schema/LiveStoreEvent/global.js +31 -0
  178. package/dist/schema/LiveStoreEvent/global.js.map +1 -0
  179. package/dist/schema/LiveStoreEvent/input.d.ts +46 -0
  180. package/dist/schema/LiveStoreEvent/input.d.ts.map +1 -0
  181. package/dist/schema/LiveStoreEvent/input.js +26 -0
  182. package/dist/schema/LiveStoreEvent/input.js.map +1 -0
  183. package/dist/schema/LiveStoreEvent/mod.d.ts +5 -0
  184. package/dist/schema/LiveStoreEvent/mod.d.ts.map +1 -0
  185. package/dist/schema/LiveStoreEvent/mod.js +5 -0
  186. package/dist/schema/LiveStoreEvent/mod.js.map +1 -0
  187. package/dist/schema/events.d.ts +1 -1
  188. package/dist/schema/events.d.ts.map +1 -1
  189. package/dist/schema/events.js +1 -1
  190. package/dist/schema/events.js.map +1 -1
  191. package/dist/schema/mod.d.ts +6 -4
  192. package/dist/schema/mod.d.ts.map +1 -1
  193. package/dist/schema/mod.js +5 -4
  194. package/dist/schema/mod.js.map +1 -1
  195. package/dist/schema/schema.d.ts +16 -1
  196. package/dist/schema/schema.d.ts.map +1 -1
  197. package/dist/schema/schema.js +32 -4
  198. package/dist/schema/schema.js.map +1 -1
  199. package/dist/schema/state/sqlite/client-document-def.d.ts +2 -1
  200. package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
  201. package/dist/schema/state/sqlite/client-document-def.js +36 -15
  202. package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
  203. package/dist/schema/state/sqlite/client-document-def.test.js +121 -2
  204. package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
  205. package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
  206. package/dist/schema/state/sqlite/column-annotations.js +1 -1
  207. package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
  208. package/dist/schema/state/sqlite/column-annotations.test.js +2 -2
  209. package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
  210. package/dist/schema/state/sqlite/column-def.d.ts.map +1 -1
  211. package/dist/schema/state/sqlite/column-def.js +96 -47
  212. package/dist/schema/state/sqlite/column-def.js.map +1 -1
  213. package/dist/schema/state/sqlite/column-def.test.js +51 -12
  214. package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
  215. package/dist/schema/state/sqlite/column-spec.d.ts.map +1 -1
  216. package/dist/schema/state/sqlite/column-spec.js +30 -12
  217. package/dist/schema/state/sqlite/column-spec.js.map +1 -1
  218. package/dist/schema/state/sqlite/column-spec.test.js +24 -15
  219. package/dist/schema/state/sqlite/column-spec.test.js.map +1 -1
  220. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +2 -2
  221. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
  222. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +16 -10
  223. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -1
  224. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +15 -4
  225. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
  226. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +1 -1
  227. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -1
  228. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +1 -1
  229. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
  230. package/dist/schema/state/sqlite/db-schema/dsl/mod.js +1 -1
  231. package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
  232. package/dist/schema/state/sqlite/mod.d.ts +2 -2
  233. package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
  234. package/dist/schema/state/sqlite/mod.js +5 -7
  235. package/dist/schema/state/sqlite/mod.js.map +1 -1
  236. package/dist/schema/state/sqlite/query-builder/api.d.ts +51 -22
  237. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
  238. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
  239. package/dist/schema/state/sqlite/query-builder/astToSql.js +99 -22
  240. package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
  241. package/dist/schema/state/sqlite/query-builder/impl.d.ts +1 -1
  242. package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
  243. package/dist/schema/state/sqlite/query-builder/impl.js +28 -15
  244. package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
  245. package/dist/schema/state/sqlite/query-builder/impl.test.js +231 -93
  246. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
  247. package/dist/schema/state/sqlite/schema-helpers.d.ts +2 -2
  248. package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -1
  249. package/dist/schema/state/sqlite/schema-helpers.js +24 -14
  250. package/dist/schema/state/sqlite/schema-helpers.js.map +1 -1
  251. package/dist/schema/state/sqlite/schema-helpers.test.d.ts +2 -0
  252. package/dist/schema/state/sqlite/schema-helpers.test.d.ts.map +1 -0
  253. package/dist/schema/state/sqlite/schema-helpers.test.js +36 -0
  254. package/dist/schema/state/sqlite/schema-helpers.test.js.map +1 -0
  255. package/dist/schema/state/sqlite/{system-tables.d.ts → system-tables/eventlog-tables.d.ts} +21 -450
  256. package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts.map +1 -0
  257. package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +54 -0
  258. package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -0
  259. package/dist/schema/state/sqlite/system-tables/mod.d.ts +3 -0
  260. package/dist/schema/state/sqlite/system-tables/mod.d.ts.map +1 -0
  261. package/dist/schema/state/sqlite/system-tables/mod.js +3 -0
  262. package/dist/schema/state/sqlite/system-tables/mod.js.map +1 -0
  263. package/dist/schema/state/sqlite/system-tables/state-tables.d.ts +456 -0
  264. package/dist/schema/state/sqlite/system-tables/state-tables.d.ts.map +1 -0
  265. package/dist/schema/state/sqlite/system-tables/state-tables.js +55 -0
  266. package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -0
  267. package/dist/schema/state/sqlite/table-def.d.ts +5 -3
  268. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
  269. package/dist/schema/state/sqlite/table-def.js +1 -1
  270. package/dist/schema/state/sqlite/table-def.js.map +1 -1
  271. package/dist/schema/state/sqlite/table-def.test.js +92 -3
  272. package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
  273. package/dist/schema/unknown-events.d.ts +47 -0
  274. package/dist/schema/unknown-events.d.ts.map +1 -0
  275. package/dist/schema/unknown-events.js +69 -0
  276. package/dist/schema/unknown-events.js.map +1 -0
  277. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts +2 -0
  278. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts.map +1 -0
  279. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js +73 -0
  280. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js.map +1 -0
  281. package/dist/schema-management/common.js +2 -2
  282. package/dist/schema-management/common.js.map +1 -1
  283. package/dist/schema-management/migrations.d.ts +32 -2
  284. package/dist/schema-management/migrations.d.ts.map +1 -1
  285. package/dist/schema-management/migrations.js +38 -6
  286. package/dist/schema-management/migrations.js.map +1 -1
  287. package/dist/schema-management/validate-schema.d.ts +3 -3
  288. package/dist/schema-management/validate-schema.d.ts.map +1 -1
  289. package/dist/schema-management/validate-schema.js +2 -2
  290. package/dist/schema-management/validate-schema.js.map +1 -1
  291. package/dist/sql-queries/sql-queries.d.ts.map +1 -1
  292. package/dist/sql-queries/sql-queries.js +18 -6
  293. package/dist/sql-queries/sql-queries.js.map +1 -1
  294. package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
  295. package/dist/sql-queries/sql-query-builder.js.map +1 -1
  296. package/dist/sqlite-db-helper.js +3 -3
  297. package/dist/sqlite-db-helper.js.map +1 -1
  298. package/dist/sqlite-types.d.ts +5 -5
  299. package/dist/sqlite-types.d.ts.map +1 -1
  300. package/dist/sqlite-types.js.map +1 -1
  301. package/dist/sync/ClientSessionSyncProcessor.d.ts +12 -12
  302. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  303. package/dist/sync/ClientSessionSyncProcessor.js +99 -114
  304. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  305. package/dist/sync/errors.d.ts +0 -33
  306. package/dist/sync/errors.d.ts.map +1 -1
  307. package/dist/sync/errors.js +5 -22
  308. package/dist/sync/errors.js.map +1 -1
  309. package/dist/sync/index.d.ts +2 -0
  310. package/dist/sync/index.d.ts.map +1 -1
  311. package/dist/sync/index.js +2 -0
  312. package/dist/sync/index.js.map +1 -1
  313. package/dist/sync/mock-sync-backend.d.ts +10 -8
  314. package/dist/sync/mock-sync-backend.d.ts.map +1 -1
  315. package/dist/sync/mock-sync-backend.js +71 -69
  316. package/dist/sync/mock-sync-backend.js.map +1 -1
  317. package/dist/sync/next/compact-events.d.ts.map +1 -1
  318. package/dist/sync/next/compact-events.js +11 -12
  319. package/dist/sync/next/compact-events.js.map +1 -1
  320. package/dist/sync/next/facts.d.ts +5 -5
  321. package/dist/sync/next/facts.d.ts.map +1 -1
  322. package/dist/sync/next/facts.js +7 -8
  323. package/dist/sync/next/facts.js.map +1 -1
  324. package/dist/sync/next/history-dag-common.d.ts +54 -15
  325. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  326. package/dist/sync/next/history-dag-common.js +198 -9
  327. package/dist/sync/next/history-dag-common.js.map +1 -1
  328. package/dist/sync/next/history-dag.d.ts.map +1 -1
  329. package/dist/sync/next/history-dag.js +11 -11
  330. package/dist/sync/next/history-dag.js.map +1 -1
  331. package/dist/sync/next/rebase-events.d.ts +5 -5
  332. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  333. package/dist/sync/next/rebase-events.js +6 -6
  334. package/dist/sync/next/rebase-events.js.map +1 -1
  335. package/dist/sync/next/test/compact-events.calculator.test.js +2 -2
  336. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  337. package/dist/sync/next/test/compact-events.test.d.ts.map +1 -1
  338. package/dist/sync/next/test/compact-events.test.js +2 -2
  339. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  340. package/dist/sync/next/test/event-fixtures.d.ts +2 -2
  341. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
  342. package/dist/sync/next/test/event-fixtures.js +11 -11
  343. package/dist/sync/next/test/event-fixtures.js.map +1 -1
  344. package/dist/sync/sync-backend-kv.d.ts +3 -3
  345. package/dist/sync/sync-backend-kv.d.ts.map +1 -1
  346. package/dist/sync/sync-backend-kv.js +3 -3
  347. package/dist/sync/sync-backend-kv.js.map +1 -1
  348. package/dist/sync/sync-backend.d.ts +33 -13
  349. package/dist/sync/sync-backend.d.ts.map +1 -1
  350. package/dist/sync/sync-backend.js +38 -1
  351. package/dist/sync/sync-backend.js.map +1 -1
  352. package/dist/sync/sync.d.ts +23 -2
  353. package/dist/sync/sync.d.ts.map +1 -1
  354. package/dist/sync/syncstate.d.ts +55 -55
  355. package/dist/sync/syncstate.d.ts.map +1 -1
  356. package/dist/sync/syncstate.js +80 -98
  357. package/dist/sync/syncstate.js.map +1 -1
  358. package/dist/sync/syncstate.test.js +221 -132
  359. package/dist/sync/syncstate.test.js.map +1 -1
  360. package/dist/sync/transport-chunking.d.ts +36 -0
  361. package/dist/sync/transport-chunking.d.ts.map +1 -0
  362. package/dist/sync/transport-chunking.js +56 -0
  363. package/dist/sync/transport-chunking.js.map +1 -0
  364. package/dist/sync/validate-push-payload.d.ts +2 -2
  365. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  366. package/dist/sync/validate-push-payload.js +4 -6
  367. package/dist/sync/validate-push-payload.js.map +1 -1
  368. package/dist/testing/event-factory.d.ts +68 -0
  369. package/dist/testing/event-factory.d.ts.map +1 -0
  370. package/dist/testing/event-factory.js +78 -0
  371. package/dist/testing/event-factory.js.map +1 -0
  372. package/dist/testing/mod.d.ts +2 -0
  373. package/dist/testing/mod.d.ts.map +1 -0
  374. package/dist/testing/mod.js +2 -0
  375. package/dist/testing/mod.js.map +1 -0
  376. package/dist/util.js +2 -2
  377. package/dist/util.js.map +1 -1
  378. package/dist/version.d.ts +24 -5
  379. package/dist/version.d.ts.map +1 -1
  380. package/dist/version.js +25 -8
  381. package/dist/version.js.map +1 -1
  382. package/package.json +69 -16
  383. package/src/ClientSessionLeaderThreadProxy.ts +27 -12
  384. package/src/WorkerTransportError.ts +12 -0
  385. package/src/adapter-types.ts +50 -7
  386. package/src/bounded-collections.ts +6 -5
  387. package/src/debug-info.ts +37 -6
  388. package/src/devtools/devtools-compatibility.test.ts +18 -0
  389. package/src/devtools/devtools-messages-client-session.ts +22 -4
  390. package/src/devtools/devtools-messages-common.ts +7 -12
  391. package/src/devtools/devtools-messages-leader.ts +29 -10
  392. package/src/devtools/devtools-sessioninfo.ts +8 -5
  393. package/src/devtools/mod.ts +11 -2
  394. package/src/errors.ts +32 -24
  395. package/src/index.ts +4 -1
  396. package/src/leader-thread/LeaderSyncProcessor.ts +523 -373
  397. package/src/leader-thread/RejectedPushError.ts +106 -0
  398. package/src/leader-thread/connection.ts +1 -1
  399. package/src/leader-thread/eventlog.ts +112 -39
  400. package/src/leader-thread/leader-worker-devtools.ts +201 -120
  401. package/src/leader-thread/make-leader-thread-layer.test.ts +44 -0
  402. package/src/leader-thread/make-leader-thread-layer.ts +125 -40
  403. package/src/leader-thread/materialize-event.ts +40 -10
  404. package/src/leader-thread/mod.ts +1 -0
  405. package/src/leader-thread/recreate-db.ts +7 -7
  406. package/src/leader-thread/shutdown-channel.ts +4 -8
  407. package/src/leader-thread/stream-events.ts +206 -0
  408. package/src/leader-thread/types.ts +68 -18
  409. package/src/logging.ts +62 -0
  410. package/src/make-client-session.ts +11 -5
  411. package/src/materializer-helper.ts +27 -16
  412. package/src/otel.ts +13 -2
  413. package/src/rematerialize-from-eventlog.ts +61 -51
  414. package/src/schema/EventDef/define.ts +217 -0
  415. package/src/schema/EventDef/deprecated.test.ts +129 -0
  416. package/src/schema/EventDef/deprecated.ts +175 -0
  417. package/src/schema/EventDef/event-def.ts +125 -0
  418. package/src/schema/EventDef/facts.ts +135 -0
  419. package/src/schema/EventDef/materializer.ts +172 -0
  420. package/src/schema/EventDef/mod.ts +5 -0
  421. package/src/schema/EventSequenceNumber/client.ts +257 -0
  422. package/src/schema/EventSequenceNumber/global.ts +19 -0
  423. package/src/schema/EventSequenceNumber/mod.ts +37 -0
  424. package/src/schema/EventSequenceNumber.test.ts +72 -53
  425. package/src/schema/LiveStoreEvent/client.test.ts +129 -0
  426. package/src/schema/LiveStoreEvent/client.ts +235 -0
  427. package/src/schema/LiveStoreEvent/for-event-def.ts +60 -0
  428. package/src/schema/LiveStoreEvent/global.ts +45 -0
  429. package/src/schema/LiveStoreEvent/input.ts +63 -0
  430. package/src/schema/LiveStoreEvent/mod.ts +4 -0
  431. package/src/schema/events.ts +1 -1
  432. package/src/schema/mod.ts +6 -4
  433. package/src/schema/schema.ts +46 -5
  434. package/src/schema/state/sqlite/client-document-def.test.ts +144 -5
  435. package/src/schema/state/sqlite/client-document-def.ts +47 -34
  436. package/src/schema/state/sqlite/column-annotations.test.ts +3 -2
  437. package/src/schema/state/sqlite/column-annotations.ts +2 -1
  438. package/src/schema/state/sqlite/column-def.test.ts +66 -12
  439. package/src/schema/state/sqlite/column-def.ts +119 -47
  440. package/src/schema/state/sqlite/column-spec.test.ts +32 -17
  441. package/src/schema/state/sqlite/column-spec.ts +37 -11
  442. package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +2 -2
  443. package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +2 -1
  444. package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +41 -15
  445. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +13 -19
  446. package/src/schema/state/sqlite/mod.ts +7 -8
  447. package/src/schema/state/sqlite/query-builder/api.ts +55 -17
  448. package/src/schema/state/sqlite/query-builder/astToSql.ts +110 -21
  449. package/src/schema/state/sqlite/query-builder/impl.test.ts +267 -93
  450. package/src/schema/state/sqlite/query-builder/impl.ts +26 -13
  451. package/src/schema/state/sqlite/schema-helpers.test.ts +44 -0
  452. package/src/schema/state/sqlite/schema-helpers.ts +30 -22
  453. package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +64 -0
  454. package/src/schema/state/sqlite/system-tables/mod.ts +2 -0
  455. package/src/schema/state/sqlite/system-tables/state-tables.ts +69 -0
  456. package/src/schema/state/sqlite/table-def.test.ts +114 -3
  457. package/src/schema/state/sqlite/table-def.ts +16 -22
  458. package/src/schema/unknown-events.ts +131 -0
  459. package/src/schema-management/__tests__/migrations-autoincrement-quoting.test.ts +88 -0
  460. package/src/schema-management/common.ts +2 -2
  461. package/src/schema-management/migrations.ts +42 -9
  462. package/src/schema-management/validate-schema.ts +3 -3
  463. package/src/sql-queries/sql-queries.ts +18 -6
  464. package/src/sql-queries/sql-query-builder.ts +1 -0
  465. package/src/sqlite-db-helper.ts +3 -3
  466. package/src/sqlite-types.ts +6 -5
  467. package/src/sync/ClientSessionSyncProcessor.ts +152 -142
  468. package/src/sync/errors.ts +12 -24
  469. package/src/sync/index.ts +2 -0
  470. package/src/sync/mock-sync-backend.ts +146 -104
  471. package/src/sync/next/compact-events.ts +10 -11
  472. package/src/sync/next/facts.ts +13 -14
  473. package/src/sync/next/history-dag-common.ts +280 -26
  474. package/src/sync/next/history-dag.ts +17 -13
  475. package/src/sync/next/rebase-events.ts +12 -12
  476. package/src/sync/next/test/compact-events.calculator.test.ts +3 -2
  477. package/src/sync/next/test/compact-events.test.ts +4 -3
  478. package/src/sync/next/test/event-fixtures.ts +13 -13
  479. package/src/sync/sync-backend-kv.ts +4 -3
  480. package/src/sync/sync-backend.ts +66 -17
  481. package/src/sync/sync.ts +24 -2
  482. package/src/sync/syncstate.test.ts +583 -419
  483. package/src/sync/syncstate.ts +127 -122
  484. package/src/sync/transport-chunking.ts +90 -0
  485. package/src/sync/validate-push-payload.ts +6 -8
  486. package/src/testing/event-factory.ts +131 -0
  487. package/src/testing/mod.ts +1 -0
  488. package/src/util.ts +2 -2
  489. package/src/version.ts +33 -8
  490. package/dist/schema/EventDef.d.ts +0 -126
  491. package/dist/schema/EventDef.d.ts.map +0 -1
  492. package/dist/schema/EventDef.js +0 -46
  493. package/dist/schema/EventDef.js.map +0 -1
  494. package/dist/schema/EventSequenceNumber.d.ts +0 -80
  495. package/dist/schema/EventSequenceNumber.d.ts.map +0 -1
  496. package/dist/schema/EventSequenceNumber.js +0 -139
  497. package/dist/schema/EventSequenceNumber.js.map +0 -1
  498. package/dist/schema/LiveStoreEvent.d.ts.map +0 -1
  499. package/dist/schema/LiveStoreEvent.js +0 -147
  500. package/dist/schema/LiveStoreEvent.js.map +0 -1
  501. package/dist/schema/state/sqlite/system-tables.d.ts.map +0 -1
  502. package/dist/schema/state/sqlite/system-tables.js +0 -81
  503. package/dist/schema/state/sqlite/system-tables.js.map +0 -1
  504. package/dist/sync/next/graphology.d.ts +0 -8
  505. package/dist/sync/next/graphology.d.ts.map +0 -1
  506. package/dist/sync/next/graphology.js +0 -30
  507. package/dist/sync/next/graphology.js.map +0 -1
  508. package/dist/sync/next/graphology_.d.ts +0 -3
  509. package/dist/sync/next/graphology_.d.ts.map +0 -1
  510. package/dist/sync/next/graphology_.js +0 -3
  511. package/dist/sync/next/graphology_.js.map +0 -1
  512. package/src/schema/EventDef.ts +0 -222
  513. package/src/schema/EventSequenceNumber.ts +0 -199
  514. package/src/schema/LiveStoreEvent.ts +0 -286
  515. package/src/schema/state/sqlite/system-tables.ts +0 -106
  516. package/src/sync/next/ambient.d.ts +0 -3
  517. package/src/sync/next/graphology.ts +0 -41
  518. package/src/sync/next/graphology_.ts +0 -2
@@ -0,0 +1,131 @@
1
+ import { Effect } from '@livestore/utils/effect'
2
+
3
+ import { UnknownEventError } from '../errors.ts'
4
+ import type { EventDef, Materializer } from './EventDef/mod.ts'
5
+ import type * as LiveStoreEvent from './LiveStoreEvent/mod.ts'
6
+ import type { LiveStoreSchema } from './schema.ts'
7
+
8
+ export type UnknownEventContext = {
9
+ readonly event: Pick<LiveStoreEvent.Client.Encoded, 'name' | 'args' | 'seqNum' | 'clientId' | 'sessionId'>
10
+ readonly reason: 'event-definition-missing' | 'materializer-missing'
11
+ readonly operation: string
12
+ }
13
+
14
+ export namespace UnknownEvents {
15
+ export type HandlingStrategy = 'warn' | 'fail' | 'ignore' | 'callback'
16
+
17
+ export type Callback = (
18
+ context: UnknownEventContext,
19
+ error: UnknownEventError,
20
+ ) => Effect.SyncOrPromiseOrEffect<void, unknown>
21
+
22
+ export type HandlingConfig =
23
+ | { readonly strategy: 'warn' }
24
+ | { readonly strategy: 'ignore' }
25
+ | { readonly strategy: 'fail' }
26
+ | { readonly strategy: 'callback'; readonly onUnknownEvent: Callback }
27
+
28
+ export type Reason = UnknownEventContext['reason']
29
+
30
+ export type ResolveContext = Omit<UnknownEventContext, 'reason'>
31
+
32
+ export type Resolved =
33
+ | {
34
+ readonly _tag: 'known'
35
+ readonly eventDef: EventDef.AnyWithoutFn
36
+ readonly materializer: Materializer
37
+ }
38
+ | {
39
+ readonly _tag: 'unknown'
40
+ readonly reason: Reason
41
+ }
42
+ }
43
+
44
+ const DEFAULT_UNKNOWN_EVENT_HANDLING: UnknownEvents.HandlingConfig = { strategy: 'warn' }
45
+
46
+ export const normalizeUnknownEventHandling = (
47
+ input: UnknownEvents.HandlingConfig | undefined,
48
+ ): UnknownEvents.HandlingConfig => input ?? DEFAULT_UNKNOWN_EVENT_HANDLING
49
+
50
+ const handleUnknownEvent = ({
51
+ schema,
52
+ context,
53
+ }: {
54
+ schema: LiveStoreSchema
55
+ context: UnknownEventContext
56
+ }): Effect.Effect<void, UnknownEventError> =>
57
+ Effect.gen(function* () {
58
+ const config = schema.unknownEventHandling
59
+ const error = new UnknownEventError(context)
60
+
61
+ switch (config.strategy) {
62
+ case 'fail': {
63
+ return yield* error
64
+ }
65
+ case 'warn': {
66
+ yield* Effect.logWarning('@livestore/common:schema:unknown-event', context)
67
+ return
68
+ }
69
+ case 'ignore': {
70
+ return
71
+ }
72
+ case 'callback': {
73
+ const callback = config.onUnknownEvent
74
+
75
+ yield* Effect.tryAll<void>(() => callback(context, error)).pipe(
76
+ Effect.catchAll((cause) =>
77
+ Effect.logWarning('@livestore/common:schema:unknown-event:callback-error', {
78
+ event: context.event,
79
+ reason: context.reason,
80
+ operation: context.operation,
81
+ cause,
82
+ }),
83
+ ),
84
+ )
85
+ return
86
+ }
87
+ }
88
+ })
89
+
90
+ /**
91
+ * Resolves the runtime event definition + materializer for a given event name.
92
+ *
93
+ * Behaviour is intentionally split across the result and error channels:
94
+ * - For `'fail'` handling, we surface an `UnknownEventError` via the failure channel so
95
+ * callers can convert it into the appropriate domain error (for example `MaterializeError`).
96
+ * - For all other strategies (`warn`, `ignore`, `callback`) we succeed with an
97
+ * `{ _tag: 'unknown' }` value, signalling that the caller should skip the event while
98
+ * continuing normal processing.
99
+ */
100
+ export const resolveEventDef = (
101
+ schema: LiveStoreSchema,
102
+ context: UnknownEvents.ResolveContext,
103
+ ): Effect.Effect<UnknownEvents.Resolved, UnknownEventError> =>
104
+ Effect.gen(function* () {
105
+ const eventName = context.event.name
106
+ const eventDef = schema.eventsDefsMap.get(eventName)
107
+ if (eventDef === undefined) {
108
+ yield* handleUnknownEvent({
109
+ schema,
110
+ context: {
111
+ event: context.event,
112
+ reason: 'event-definition-missing',
113
+ operation: context.operation,
114
+ },
115
+ })
116
+ return { _tag: 'unknown', reason: 'event-definition-missing' }
117
+ }
118
+ const materializer = schema.state.materializers.get(eventName)
119
+ if (materializer === undefined) {
120
+ yield* handleUnknownEvent({
121
+ schema,
122
+ context: {
123
+ event: context.event,
124
+ reason: 'materializer-missing',
125
+ operation: context.operation,
126
+ },
127
+ })
128
+ return { _tag: 'unknown', reason: 'materializer-missing' }
129
+ }
130
+ return { _tag: 'known', eventDef, materializer }
131
+ })
@@ -0,0 +1,88 @@
1
+ import { describe, expect, it } from 'vitest'
2
+
3
+ import { Effect, Option, Schema } from '@livestore/utils/effect'
4
+
5
+ import { SqliteAst } from '../../schema/state/sqlite/db-schema/mod.ts'
6
+ import type { PreparedStatement, SqliteDb } from '../../sqlite-types.ts'
7
+ import type { PreparedBindValues } from '../../util.ts'
8
+ import { migrateTable } from '../migrations.ts'
9
+
10
+ const makeStubDb = () => {
11
+ const executed: string[] = []
12
+
13
+ const db: SqliteDb = {
14
+ _tag: 'SqliteDb',
15
+ metadata: { dbPointer: 0, persistenceInfo: { fileName: ':memory:' } } as any,
16
+ debug: { head: 0 as any },
17
+ prepare: (queryStr: string): PreparedStatement => ({
18
+ sql: queryStr,
19
+ execute: (_bind: PreparedBindValues | undefined) => {
20
+ executed.push(queryStr)
21
+ },
22
+ select: <T>(_bind: PreparedBindValues | undefined) => [] as unknown as ReadonlyArray<T>,
23
+ finalize: () => {},
24
+ }),
25
+ execute: () => {},
26
+ select: () => [],
27
+ export: () => new Uint8Array(),
28
+ import: () => {},
29
+ close: () => {},
30
+ destroy: () => {},
31
+ session: () => ({ changeset: () => undefined, finish: () => {} }),
32
+ makeChangeset: () => ({ invert: () => ({ invert: () => ({}) as any, apply: () => {} }) as any, apply: () => {} }),
33
+ }
34
+
35
+ return { db, executed }
36
+ }
37
+
38
+ describe('migrateTable - quoting and autoincrement', () => {
39
+ it('creates valid CREATE TABLE with inline INTEGER PRIMARY KEY AUTOINCREMENT and double-quoted identifiers', () => {
40
+ const { db, executed } = makeStubDb()
41
+
42
+ const table = SqliteAst.table(
43
+ 'todos',
44
+ [
45
+ SqliteAst.column({
46
+ name: 'id',
47
+ type: { _tag: 'integer' },
48
+ nullable: false,
49
+ primaryKey: true,
50
+ autoIncrement: true,
51
+ default: Option.none(),
52
+ schema: Schema.Number,
53
+ }),
54
+ SqliteAst.column({
55
+ name: 'text',
56
+ type: { _tag: 'text' },
57
+ nullable: false,
58
+ primaryKey: false,
59
+ autoIncrement: false,
60
+ default: Option.some(''),
61
+ schema: Schema.String,
62
+ }),
63
+ SqliteAst.column({
64
+ name: 'completed',
65
+ type: { _tag: 'integer' },
66
+ nullable: false,
67
+ primaryKey: false,
68
+ autoIncrement: false,
69
+ default: Option.some(0),
70
+ schema: Schema.Number,
71
+ }),
72
+ ],
73
+ [],
74
+ )
75
+
76
+ migrateTable({ db, tableAst: table, behaviour: 'create-if-not-exists', skipMetaTable: true }).pipe(Effect.runSync)
77
+
78
+ const createStmt = executed.find((s) => /create table if not exists/i.test(s))
79
+ expect(createStmt).toBeDefined()
80
+
81
+ // Identifiers must be double-quoted, not single-quoted
82
+ expect(createStmt!).toContain('create table if not exists "todos"')
83
+ expect(createStmt!).toContain('"id" integer primary key autoincrement')
84
+ expect(createStmt!).toContain(" default ''")
85
+ expect(createStmt!).not.toContain("PRIMARY KEY ('id')")
86
+ expect(createStmt!).not.toMatch(/'todos'|'id'|'text'/)
87
+ })
88
+ })
@@ -13,7 +13,7 @@ export const dbExecute = (db: SqliteDb, queryStr: string, bindValues?: ParamsObj
13
13
  // cachedStmts.set(queryStr, stmt)
14
14
  // }
15
15
 
16
- const preparedBindValues = bindValues ? prepareBindValues(bindValues, queryStr) : undefined
16
+ const preparedBindValues = bindValues !== undefined ? prepareBindValues(bindValues, queryStr) : undefined
17
17
 
18
18
  try {
19
19
  stmt.execute(preparedBindValues)
@@ -34,7 +34,7 @@ export const dbSelect = <T>(db: SqliteDb, queryStr: string, bindValues?: ParamsO
34
34
  // cachedStmts.set(queryStr, stmt)
35
35
  // }
36
36
 
37
- const res = stmt.select<T>(bindValues ? prepareBindValues(bindValues, queryStr) : undefined)
37
+ const res = stmt.select<T>(bindValues !== undefined ? prepareBindValues(bindValues, queryStr) : undefined)
38
38
  stmt.finalize()
39
39
  return res
40
40
  }
@@ -1,20 +1,51 @@
1
+ /**
2
+ * AUTOMATIC HASH-BASED SCHEMA MIGRATIONS
3
+ *
4
+ * This module implements automatic schema versioning using hash-based change detection.
5
+ *
6
+ * ⚠️ CRITICAL DISTINCTION:
7
+ * - STATE TABLES (safe to modify): Changes trigger rematerialization from eventlog
8
+ * - EVENTLOG TABLES (NEVER modify): Changes cause data loss - need manual versioning!
9
+ *
10
+ * How it works:
11
+ * 1. Each table's schema is hashed using SqliteAst.hash()
12
+ * 2. Hashes are stored in SCHEMA_META_TABLE after successful migrations
13
+ * 3. On app start, current schema hashes are compared with stored hashes
14
+ * 4. Mismatches trigger migrations:
15
+ * - State tables: Recreated and repopulated from eventlog (safe, no data loss)
16
+ * - Eventlog tables: Uses 'create-if-not-exists' (UNSAFE - causes data loss!)
17
+ *
18
+ * State Table Changes (SAFE):
19
+ * - User-defined tables are rebuilt from eventlog
20
+ * - System tables (schemaMetaTable, etc.) are recreated
21
+ * - Data preserved through rematerializeFromEventlog()
22
+ *
23
+ * Eventlog Table Changes (UNSAFE):
24
+ * - eventlogMetaTable, syncStatusTable changes cause "soft reset"
25
+ * - Old table becomes inaccessible (but remains in DB)
26
+ * - No automatic migration - effectively data loss
27
+ * - TODO: Implement proper EVENTLOG_PERSISTENCE_FORMAT_VERSION system
28
+ *
29
+ * See system-tables/state-tables.ts and system-tables/eventlog-tables.ts for detailed documentation on each table type.
30
+ */
31
+
1
32
  import { memoizeByStringifyArgs } from '@livestore/utils'
2
33
  import { Effect } from '@livestore/utils/effect'
3
34
 
4
35
  import type { SqliteDb } from '../adapter-types.ts'
5
36
  import type { MigrationsReport, MigrationsReportEntry } from '../defs.ts'
6
- import type { UnexpectedError } from '../errors.ts'
37
+ import type { UnknownError } from '../errors.ts'
7
38
  import type { LiveStoreSchema } from '../schema/mod.ts'
8
39
  import { makeColumnSpec } from '../schema/state/sqlite/column-spec.ts'
9
40
  import { SqliteAst } from '../schema/state/sqlite/db-schema/mod.ts'
10
- import type { SchemaEventDefsMetaRow, SchemaMetaRow } from '../schema/state/sqlite/system-tables.ts'
41
+ import type { SchemaEventDefsMetaRow, SchemaMetaRow } from '../schema/state/sqlite/system-tables/state-tables.ts'
11
42
  import {
12
43
  isStateSystemTable,
13
44
  SCHEMA_EVENT_DEFS_META_TABLE,
14
45
  SCHEMA_META_TABLE,
15
46
  schemaEventDefsMetaTable,
16
47
  stateSystemTables,
17
- } from '../schema/state/sqlite/system-tables.ts'
48
+ } from '../schema/state/sqlite/system-tables/state-tables.ts'
18
49
  import { sql } from '../util.ts'
19
50
  import type { SchemaManager } from './common.ts'
20
51
  import { dbExecute, dbSelect } from './common.ts'
@@ -56,7 +87,7 @@ export const migrateDb = ({
56
87
  db: SqliteDb
57
88
  schema: LiveStoreSchema
58
89
  onProgress?: (opts: { done: number; total: number }) => Effect.Effect<void>
59
- }): Effect.Effect<MigrationsReport, UnexpectedError> =>
90
+ }): Effect.Effect<MigrationsReport, UnknownError> =>
60
91
  Effect.gen(function* () {
61
92
  for (const tableDef of stateSystemTables) {
62
93
  yield* migrateTable({
@@ -137,10 +168,10 @@ export const migrateTable = ({
137
168
 
138
169
  if (behaviour === 'drop-and-recreate') {
139
170
  // TODO need to possibly handle cascading deletes due to foreign keys
140
- dbExecute(db, sql`drop table if exists '${tableName}'`)
141
- dbExecute(db, sql`create table if not exists '${tableName}' (${columnSpec}) strict`)
171
+ dbExecute(db, sql`drop table if exists "${tableName}"`)
172
+ dbExecute(db, sql`create table if not exists "${tableName}" (${columnSpec}) strict`)
142
173
  } else if (behaviour === 'create-if-not-exists') {
143
- dbExecute(db, sql`create table if not exists '${tableName}' (${columnSpec}) strict`)
174
+ dbExecute(db, sql`create table if not exists "${tableName}" (${columnSpec}) strict`)
144
175
  }
145
176
 
146
177
  for (const index of tableAst.indexes) {
@@ -169,6 +200,8 @@ export const migrateTable = ({
169
200
  )
170
201
 
171
202
  const createIndexFromDefinition = (tableName: string, index: SqliteAst.Index) => {
172
- const uniqueStr = index.unique ? 'UNIQUE' : ''
173
- return sql`create ${uniqueStr} index if not exists '${index.name}' on '${tableName}' (${index.columns.map((col) => `'${col}'`).join(', ')})`
203
+ const uniqueStr = index.unique === true ? 'UNIQUE' : ''
204
+ return sql`create ${uniqueStr} index if not exists "${index.name}" on "${tableName}" (${index.columns
205
+ .map((col) => `"${col}"`)
206
+ .join(', ')})`
174
207
  }
@@ -1,7 +1,7 @@
1
1
  import { Effect, Schema } from '@livestore/utils/effect'
2
2
 
3
- import { UnexpectedError } from '../adapter-types.ts'
4
- import type { EventDef } from '../schema/EventDef.ts'
3
+ import { UnknownError } from '../adapter-types.ts'
4
+ import type { EventDef } from '../schema/EventDef/mod.ts'
5
5
  import type { LiveStoreSchema } from '../schema/mod.ts'
6
6
  import type { EventDefInfo, SchemaManager } from './common.ts'
7
7
 
@@ -15,7 +15,7 @@ export const validateSchema = (schema: LiveStoreSchema, schemaManager: SchemaMan
15
15
  )
16
16
 
17
17
  if (missingEventDefs.length > 0) {
18
- return yield* new UnexpectedError({
18
+ return yield* new UnknownError({
19
19
  cause: `Missing mutation definitions: ${missingEventDefs.map((info) => info.eventName).join(', ')}`,
20
20
  })
21
21
  }
@@ -23,7 +23,7 @@ export const findManyRows = <TColumns extends SqliteDsl.Columns>({
23
23
  }): [string, BindValues] => {
24
24
  const whereSql = buildWhereSql({ where })
25
25
  const whereModifier = whereSql === '' ? '' : `WHERE ${whereSql}`
26
- const limitModifier = limit ? `LIMIT ${limit}` : ''
26
+ const limitModifier = limit !== undefined ? `LIMIT ${limit}` : ''
27
27
 
28
28
  const whereBindValues = makeBindValues({ columns, values: where, variablePrefix: 'where_', skipNil: true })
29
29
 
@@ -80,7 +80,7 @@ export const insertRowPrepared = <TColumns extends SqliteDsl.Columns>({
80
80
  const keysStr = keys.join(', ')
81
81
  const valuesStr = keys.map((key) => `$${key}`).join(', ')
82
82
 
83
- return sql`INSERT ${options.orReplace ? 'OR REPLACE ' : ''}INTO ${tableName} (${keysStr}) VALUES (${valuesStr})`
83
+ return sql`INSERT ${options.orReplace === true ? 'OR REPLACE ' : ''}INTO ${tableName} (${keysStr}) VALUES (${valuesStr})`
84
84
  }
85
85
 
86
86
  export const insertRows = <TColumns extends SqliteDsl.Columns>({
@@ -134,7 +134,7 @@ export const insertOrIgnoreRow = <TColumns extends SqliteDsl.Columns>({
134
134
  .join(', ')
135
135
 
136
136
  const bindValues = makeBindValues({ columns, values })
137
- const returningStmt = returnRow ? 'RETURNING *' : ''
137
+ const returningStmt = returnRow === true ? 'RETURNING *' : ''
138
138
 
139
139
  return [sql`INSERT OR IGNORE INTO ${tableName} (${keysStr}) VALUES (${valuesStr}) ${returningStmt}`, bindValues]
140
140
  }
@@ -247,7 +247,15 @@ export const createTable = ({
247
247
  .map(([columnName, _]) => columnName)
248
248
  const columnDefStrs = Object.entries(table.columns).map(([columnName, columnDef]) => {
249
249
  const nullModifier = columnDef.nullable === true ? '' : 'NOT NULL'
250
- const defaultModifier = columnDef.default._tag === 'None' ? '' : `DEFAULT ${columnDef.default.value}`
250
+ const defaultModifier = (() => {
251
+ if (columnDef.default._tag === 'None') return ''
252
+ const defaultValue = columnDef.default.value
253
+ if (typeof defaultValue === 'function') return ''
254
+ if (defaultValue !== undefined && typeof defaultValue === 'object' && 'sql' in defaultValue) {
255
+ return `DEFAULT ${defaultValue.sql}`
256
+ }
257
+ return `DEFAULT ${defaultValue}`
258
+ })()
251
259
  return sql`${columnName} ${columnDef.columnType} ${nullModifier} ${defaultModifier}`
252
260
  })
253
261
 
@@ -293,7 +301,7 @@ Error: ${parseErrorStr}
293
301
  Value:`,
294
302
  value,
295
303
  )
296
- // biome-ignore lint/suspicious/noDebugger: debug
304
+ // oxlint-disable-next-line eslint(no-debugger) -- intentional breakpoint for SQL decode errors
297
305
  debugger
298
306
  throw res.left
299
307
  } else {
@@ -341,7 +349,11 @@ const buildWhereSql = <TColumns extends SqliteDsl.Columns>({
341
349
  const getWhereOp = (columnName: string, value: ClientTypes.WhereValueForDecoded<any>) => {
342
350
  if (value === null) {
343
351
  return `IS NULL`
344
- } else if (typeof value === 'object' && typeof value.op === 'string' && ClientTypes.isValidWhereOp(value.op)) {
352
+ } else if (
353
+ typeof value === 'object' &&
354
+ typeof value.op === 'string' &&
355
+ ClientTypes.isValidWhereOp(value.op) === true
356
+ ) {
345
357
  return `${value.op} $where_${columnName}`
346
358
  } else if (typeof value === 'object' && typeof value.op === 'string' && value.op === 'in') {
347
359
  return `in (${value.val.map((_: any, i: number) => `$where_${columnName}_${i}`).join(', ')})`
@@ -1,4 +1,5 @@
1
1
  import { omitUndefineds } from '@livestore/utils'
2
+
2
3
  import type { SqliteDsl } from '../schema/state/sqlite/db-schema/mod.ts'
3
4
  import type { BindValues } from './sql-queries.ts'
4
5
  import * as SqlQueries from './sql-queries.ts'
@@ -14,7 +14,7 @@ export const makeExecute = (
14
14
  return (...args: any[]) => {
15
15
  const [queryStrOrQueryBuilder, bindValuesOrOptions, maybeOptions] = args
16
16
 
17
- if (isQueryBuilder(queryStrOrQueryBuilder)) {
17
+ if (isQueryBuilder(queryStrOrQueryBuilder) === true) {
18
18
  const { query, bindValues } = queryStrOrQueryBuilder.asSql()
19
19
  return execute(query, bindValues as unknown as PreparedBindValues, bindValuesOrOptions)
20
20
  } else {
@@ -29,7 +29,7 @@ export const makeSelect = <T>(
29
29
  return (...args: any[]) => {
30
30
  const [queryStrOrQueryBuilder, maybeBindValues] = args
31
31
 
32
- if (isQueryBuilder(queryStrOrQueryBuilder)) {
32
+ if (isQueryBuilder(queryStrOrQueryBuilder) === true) {
33
33
  const { query, bindValues } = queryStrOrQueryBuilder.asSql()
34
34
  const resultSchema = getResultSchema(queryStrOrQueryBuilder)
35
35
  const results = select(query, bindValues as unknown as PreparedBindValues)
@@ -44,7 +44,7 @@ export const validateSnapshot = (snapshot: Uint8Array) => {
44
44
  const headerBytes = new TextDecoder().decode(snapshot.slice(0, 16))
45
45
  const hasValidHeader = headerBytes.startsWith('SQLite format 3')
46
46
 
47
- if (!hasValidHeader) {
47
+ if (hasValidHeader === false) {
48
48
  throw new SqliteError({
49
49
  cause: 'Invalid SQLite header',
50
50
  note: `Expected header to start with 'SQLite format 3', but got: ${headerBytes}`,
@@ -1,5 +1,6 @@
1
1
  import { type Effect, Schema } from '@livestore/utils/effect'
2
- import type { SqliteError, UnexpectedError } from './errors.ts'
2
+
3
+ import type { SqliteError, UnknownError } from './errors.ts'
3
4
  import type { EventSequenceNumber } from './schema/mod.ts'
4
5
  import type { QueryBuilder } from './schema/state/sqlite/query-builder/api.ts'
5
6
  import type { PreparedBindValues } from './util.ts'
@@ -17,12 +18,12 @@ export interface SqliteDb<TReq = any, TMetadata extends TReq = TReq> {
17
18
  prepare(queryStr: string): PreparedStatement
18
19
  execute(
19
20
  queryStr: string,
20
- bindValues?: PreparedBindValues | undefined,
21
+ bindValues?: PreparedBindValues ,
21
22
  options?: { onRowsChanged?: (rowsChanged: number) => void },
22
23
  ): void
23
24
  execute(queryBuilder: QueryBuilder.Any, options?: { onRowsChanged?: (rowsChanged: number) => void }): void
24
25
 
25
- select<T>(queryStr: string, bindValues?: PreparedBindValues | undefined): ReadonlyArray<T>
26
+ select<T>(queryStr: string, bindValues?: PreparedBindValues ): ReadonlyArray<T>
26
27
  select<T>(queryBuilder: QueryBuilder<T, any, any>): T
27
28
 
28
29
  export(): Uint8Array<ArrayBuffer>
@@ -33,7 +34,7 @@ export interface SqliteDb<TReq = any, TMetadata extends TReq = TReq> {
33
34
  makeChangeset: (data: Uint8Array<ArrayBuffer>) => SqliteDbChangeset
34
35
  }
35
36
 
36
- export type SqliteDebugInfo = { head: EventSequenceNumber.EventSequenceNumber }
37
+ export type SqliteDebugInfo = { head: EventSequenceNumber.Client.Composite }
37
38
 
38
39
  // TODO refactor this helper type. It's quite cumbersome to use and should be revisited.
39
40
  export type MakeSqliteDb<
@@ -46,7 +47,7 @@ export type MakeSqliteDb<
46
47
  TMetadata extends TMetadata_ & { _tag: TInput['_tag'] } = TMetadata_ & { _tag: TInput['_tag'] },
47
48
  >(
48
49
  input: TInput,
49
- ) => Effect.Effect<SqliteDb<TReq, Extract<TMetadata, { _tag: TInput['_tag'] }>>, SqliteError | UnexpectedError, R>
50
+ ) => Effect.Effect<SqliteDb<TReq, Extract<TMetadata, { _tag: TInput['_tag'] }>>, SqliteError | UnknownError, R>
50
51
 
51
52
  export interface PreparedStatement {
52
53
  execute(bindValues: PreparedBindValues | undefined, options?: { onRowsChanged?: (rowsChanged: number) => void }): void