@livestore/common 0.4.0 → 0.5.0-dev.1

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 (501) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/ClientSessionLeaderThreadProxy.d.ts +1 -1
  3. package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
  4. package/dist/MaterializationJournal.d.ts +44 -0
  5. package/dist/MaterializationJournal.d.ts.map +1 -0
  6. package/dist/MaterializationJournal.js +112 -0
  7. package/dist/MaterializationJournal.js.map +1 -0
  8. package/dist/StateHead.d.ts +26 -0
  9. package/dist/StateHead.d.ts.map +1 -0
  10. package/dist/StateHead.js +50 -0
  11. package/dist/StateHead.js.map +1 -0
  12. package/dist/WorkerTransportError.d.ts +3 -3
  13. package/dist/WorkerTransportError.d.ts.map +1 -1
  14. package/dist/WorkerTransportError.js +3 -3
  15. package/dist/WorkerTransportError.js.map +1 -1
  16. package/dist/__tests__/fixture.d.ts +8 -8
  17. package/dist/__tests__/fixture.d.ts.map +1 -1
  18. package/dist/__tests__/fixture.js +4 -4
  19. package/dist/__tests__/fixture.js.map +1 -1
  20. package/dist/adapter-types.d.ts +33 -57
  21. package/dist/adapter-types.d.ts.map +1 -1
  22. package/dist/adapter-types.js +24 -41
  23. package/dist/adapter-types.js.map +1 -1
  24. package/dist/bounded-collections.d.ts.map +1 -1
  25. package/dist/bounded-collections.js.map +1 -1
  26. package/dist/debug-info.d.ts +56 -56
  27. package/dist/debug-info.d.ts.map +1 -1
  28. package/dist/debug-info.js +32 -44
  29. package/dist/debug-info.js.map +1 -1
  30. package/dist/defs.d.ts +9 -9
  31. package/dist/defs.js +2 -2
  32. package/dist/devtools/devtools-compatibility.test.js +2 -1
  33. package/dist/devtools/devtools-compatibility.test.js.map +1 -1
  34. package/dist/devtools/devtools-messages-client-session.d.ts +522 -334
  35. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
  36. package/dist/devtools/devtools-messages-client-session.js +80 -78
  37. package/dist/devtools/devtools-messages-client-session.js.map +1 -1
  38. package/dist/devtools/devtools-messages-common.d.ts +27 -27
  39. package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
  40. package/dist/devtools/devtools-messages-common.js +6 -6
  41. package/dist/devtools/devtools-messages-common.js.map +1 -1
  42. package/dist/devtools/devtools-messages-leader.d.ts +410 -348
  43. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  44. package/dist/devtools/devtools-messages-leader.js +105 -93
  45. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  46. package/dist/devtools/devtools-messages.js +3 -3
  47. package/dist/devtools/devtools-sessioninfo.d.ts +18 -19
  48. package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
  49. package/dist/devtools/devtools-sessioninfo.js +8 -5
  50. package/dist/devtools/devtools-sessioninfo.js.map +1 -1
  51. package/dist/devtools/mod.d.ts +4 -5
  52. package/dist/devtools/mod.d.ts.map +1 -1
  53. package/dist/devtools/mod.js +12 -8
  54. package/dist/devtools/mod.js.map +1 -1
  55. package/dist/errors.d.ts +45 -69
  56. package/dist/errors.d.ts.map +1 -1
  57. package/dist/errors.js +19 -17
  58. package/dist/errors.js.map +1 -1
  59. package/dist/index.d.ts +4 -1
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +22 -19
  62. package/dist/index.js.map +1 -1
  63. package/dist/leader-thread/LeaderSyncProcessor.d.ts +87 -18
  64. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  65. package/dist/leader-thread/LeaderSyncProcessor.js +548 -480
  66. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  67. package/dist/leader-thread/RejectedPushError.d.ts +72 -41
  68. package/dist/leader-thread/RejectedPushError.d.ts.map +1 -1
  69. package/dist/leader-thread/RejectedPushError.js +25 -6
  70. package/dist/leader-thread/RejectedPushError.js.map +1 -1
  71. package/dist/leader-thread/connection.d.ts +1 -0
  72. package/dist/leader-thread/connection.d.ts.map +1 -1
  73. package/dist/leader-thread/connection.js +11 -10
  74. package/dist/leader-thread/connection.js.map +1 -1
  75. package/dist/leader-thread/eventlog.d.ts +15 -5
  76. package/dist/leader-thread/eventlog.d.ts.map +1 -1
  77. package/dist/leader-thread/eventlog.js +19 -19
  78. package/dist/leader-thread/eventlog.js.map +1 -1
  79. package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
  80. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  81. package/dist/leader-thread/leader-worker-devtools.js +36 -20
  82. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  83. package/dist/leader-thread/make-leader-thread-layer.d.ts +15 -5
  84. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  85. package/dist/leader-thread/make-leader-thread-layer.js +62 -58
  86. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  87. package/dist/leader-thread/make-leader-thread-layer.test.js +9 -9
  88. package/dist/leader-thread/make-leader-thread-layer.test.js.map +1 -1
  89. package/dist/leader-thread/materialize-event.d.ts +2 -1
  90. package/dist/leader-thread/materialize-event.d.ts.map +1 -1
  91. package/dist/leader-thread/materialize-event.js +12 -8
  92. package/dist/leader-thread/materialize-event.js.map +1 -1
  93. package/dist/leader-thread/mod.js +9 -9
  94. package/dist/leader-thread/recreate-db.d.ts +5 -1
  95. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  96. package/dist/leader-thread/recreate-db.js +34 -59
  97. package/dist/leader-thread/recreate-db.js.map +1 -1
  98. package/dist/leader-thread/shutdown-channel.d.ts +2 -6
  99. package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
  100. package/dist/leader-thread/shutdown-channel.js +2 -3
  101. package/dist/leader-thread/shutdown-channel.js.map +1 -1
  102. package/dist/leader-thread/stream-events.d.ts +4 -7
  103. package/dist/leader-thread/stream-events.d.ts.map +1 -1
  104. package/dist/leader-thread/stream-events.js +16 -21
  105. package/dist/leader-thread/stream-events.js.map +1 -1
  106. package/dist/leader-thread/types.d.ts +38 -73
  107. package/dist/leader-thread/types.d.ts.map +1 -1
  108. package/dist/leader-thread/types.js +10 -6
  109. package/dist/leader-thread/types.js.map +1 -1
  110. package/dist/logging.d.ts +5 -30
  111. package/dist/logging.d.ts.map +1 -1
  112. package/dist/logging.js +1 -32
  113. package/dist/logging.js.map +1 -1
  114. package/dist/make-client-session.d.ts +2 -3
  115. package/dist/make-client-session.d.ts.map +1 -1
  116. package/dist/make-client-session.js +5 -5
  117. package/dist/make-client-session.js.map +1 -1
  118. package/dist/materializer-helper.d.ts +0 -1
  119. package/dist/materializer-helper.d.ts.map +1 -1
  120. package/dist/materializer-helper.js +9 -37
  121. package/dist/materializer-helper.js.map +1 -1
  122. package/dist/otel.d.ts +2 -3
  123. package/dist/otel.d.ts.map +1 -1
  124. package/dist/otel.js +2 -7
  125. package/dist/otel.js.map +1 -1
  126. package/dist/rematerialize-from-eventlog.d.ts +3 -1
  127. package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
  128. package/dist/rematerialize-from-eventlog.js +42 -33
  129. package/dist/rematerialize-from-eventlog.js.map +1 -1
  130. package/dist/schema/EventDef/define.d.ts +6 -6
  131. package/dist/schema/EventDef/define.d.ts.map +1 -1
  132. package/dist/schema/EventDef/define.js +5 -5
  133. package/dist/schema/EventDef/define.js.map +1 -1
  134. package/dist/schema/EventDef/define.test.d.ts +2 -0
  135. package/dist/schema/EventDef/define.test.d.ts.map +1 -0
  136. package/dist/schema/EventDef/define.test.js +23 -0
  137. package/dist/schema/EventDef/define.test.js.map +1 -0
  138. package/dist/schema/EventDef/deprecated.d.ts +8 -13
  139. package/dist/schema/EventDef/deprecated.d.ts.map +1 -1
  140. package/dist/schema/EventDef/deprecated.js +12 -13
  141. package/dist/schema/EventDef/deprecated.js.map +1 -1
  142. package/dist/schema/EventDef/deprecated.test.js +3 -3
  143. package/dist/schema/EventDef/deprecated.test.js.map +1 -1
  144. package/dist/schema/EventDef/event-def.d.ts +1 -1
  145. package/dist/schema/EventDef/event-def.d.ts.map +1 -1
  146. package/dist/schema/EventDef/facts.d.ts.map +1 -1
  147. package/dist/schema/EventDef/materializer.d.ts +2 -2
  148. package/dist/schema/EventDef/materializer.d.ts.map +1 -1
  149. package/dist/schema/EventDef/mod.js +5 -5
  150. package/dist/schema/EventSequenceNumber/client.d.ts +12 -17
  151. package/dist/schema/EventSequenceNumber/client.d.ts.map +1 -1
  152. package/dist/schema/EventSequenceNumber/client.js +20 -24
  153. package/dist/schema/EventSequenceNumber/client.js.map +1 -1
  154. package/dist/schema/EventSequenceNumber/global.d.ts +2 -2
  155. package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -1
  156. package/dist/schema/EventSequenceNumber/global.js +1 -1
  157. package/dist/schema/EventSequenceNumber/global.js.map +1 -1
  158. package/dist/schema/EventSequenceNumber/mod.js +2 -2
  159. package/dist/schema/EventSequenceNumber.test.js +6 -6
  160. package/dist/schema/EventSequenceNumber.test.js.map +1 -1
  161. package/dist/schema/LiveStoreEvent/client.d.ts +58 -187
  162. package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -1
  163. package/dist/schema/LiveStoreEvent/client.js +33 -30
  164. package/dist/schema/LiveStoreEvent/client.js.map +1 -1
  165. package/dist/schema/LiveStoreEvent/client.test.js +13 -4
  166. package/dist/schema/LiveStoreEvent/client.test.js.map +1 -1
  167. package/dist/schema/LiveStoreEvent/for-event-def.d.ts +7 -7
  168. package/dist/schema/LiveStoreEvent/for-event-def.d.ts.map +1 -1
  169. package/dist/schema/LiveStoreEvent/global.d.ts +6 -6
  170. package/dist/schema/LiveStoreEvent/global.d.ts.map +1 -1
  171. package/dist/schema/LiveStoreEvent/global.js +2 -2
  172. package/dist/schema/LiveStoreEvent/global.js.map +1 -1
  173. package/dist/schema/LiveStoreEvent/input.d.ts +6 -6
  174. package/dist/schema/LiveStoreEvent/input.d.ts.map +1 -1
  175. package/dist/schema/LiveStoreEvent/input.js +3 -3
  176. package/dist/schema/LiveStoreEvent/input.js.map +1 -1
  177. package/dist/schema/LiveStoreEvent/mod.js +4 -4
  178. package/dist/schema/events.js +1 -1
  179. package/dist/schema/mod.d.ts +1 -0
  180. package/dist/schema/mod.d.ts.map +1 -1
  181. package/dist/schema/mod.js +11 -10
  182. package/dist/schema/mod.js.map +1 -1
  183. package/dist/schema/schema.d.ts +1 -1
  184. package/dist/schema/schema.d.ts.map +1 -1
  185. package/dist/schema/schema.js +6 -5
  186. package/dist/schema/schema.js.map +1 -1
  187. package/dist/schema/state/mod.js +2 -2
  188. package/dist/schema/state/sqlite/client-document-def.d.ts +13 -18
  189. package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
  190. package/dist/schema/state/sqlite/client-document-def.js +30 -27
  191. package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
  192. package/dist/schema/state/sqlite/client-document-def.test.js +53 -18
  193. package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
  194. package/dist/schema/state/sqlite/column-annotations.d.ts +13 -13
  195. package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
  196. package/dist/schema/state/sqlite/column-annotations.js +13 -15
  197. package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
  198. package/dist/schema/state/sqlite/column-annotations.test.js +19 -43
  199. package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
  200. package/dist/schema/state/sqlite/column-def.d.ts +1 -1
  201. package/dist/schema/state/sqlite/column-def.d.ts.map +1 -1
  202. package/dist/schema/state/sqlite/column-def.js +73 -33
  203. package/dist/schema/state/sqlite/column-def.js.map +1 -1
  204. package/dist/schema/state/sqlite/column-def.test.js +176 -75
  205. package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
  206. package/dist/schema/state/sqlite/column-spec.d.ts.map +1 -1
  207. package/dist/schema/state/sqlite/column-spec.js +1 -1
  208. package/dist/schema/state/sqlite/column-spec.js.map +1 -1
  209. package/dist/schema/state/sqlite/column-spec.test.js +4 -4
  210. package/dist/schema/state/sqlite/column-spec.test.js.map +1 -1
  211. package/dist/schema/state/sqlite/db-schema/ast/fingerprint-digest.d.ts +3 -0
  212. package/dist/schema/state/sqlite/db-schema/ast/fingerprint-digest.d.ts.map +1 -0
  213. package/dist/schema/state/sqlite/db-schema/ast/fingerprint-digest.js +5 -0
  214. package/dist/schema/state/sqlite/db-schema/ast/fingerprint-digest.js.map +1 -0
  215. package/dist/schema/state/sqlite/db-schema/ast/fingerprint.d.ts +5 -0
  216. package/dist/schema/state/sqlite/db-schema/ast/fingerprint.d.ts.map +1 -0
  217. package/dist/schema/state/sqlite/db-schema/ast/fingerprint.js +183 -0
  218. package/dist/schema/state/sqlite/db-schema/ast/fingerprint.js.map +1 -0
  219. package/dist/schema/state/sqlite/db-schema/ast/fingerprint.test.d.ts +2 -0
  220. package/dist/schema/state/sqlite/db-schema/ast/fingerprint.test.d.ts.map +1 -0
  221. package/dist/schema/state/sqlite/db-schema/ast/fingerprint.test.js +142 -0
  222. package/dist/schema/state/sqlite/db-schema/ast/fingerprint.test.js.map +1 -0
  223. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +3 -8
  224. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
  225. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +1 -73
  226. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
  227. package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts.map +1 -1
  228. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +9 -9
  229. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -1
  230. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +9 -13
  231. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
  232. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +28 -17
  233. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -1
  234. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +13 -11
  235. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
  236. package/dist/schema/state/sqlite/db-schema/dsl/mod.js +6 -4
  237. package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
  238. package/dist/schema/state/sqlite/db-schema/has-json-string-encoding.d.ts +3 -0
  239. package/dist/schema/state/sqlite/db-schema/has-json-string-encoding.d.ts.map +1 -0
  240. package/dist/schema/state/sqlite/db-schema/has-json-string-encoding.js +6 -0
  241. package/dist/schema/state/sqlite/db-schema/has-json-string-encoding.js.map +1 -0
  242. package/dist/schema/state/sqlite/db-schema/mod.js +2 -2
  243. package/dist/schema/state/sqlite/mod.d.ts +1 -3
  244. package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
  245. package/dist/schema/state/sqlite/mod.js +11 -10
  246. package/dist/schema/state/sqlite/mod.js.map +1 -1
  247. package/dist/schema/state/sqlite/persistence.d.ts +11 -0
  248. package/dist/schema/state/sqlite/persistence.d.ts.map +1 -0
  249. package/dist/schema/state/sqlite/persistence.js +10 -0
  250. package/dist/schema/state/sqlite/persistence.js.map +1 -0
  251. package/dist/schema/state/sqlite/query-builder/api.d.ts +7 -7
  252. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
  253. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
  254. package/dist/schema/state/sqlite/query-builder/astToSql.js +22 -23
  255. package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
  256. package/dist/schema/state/sqlite/query-builder/impl.d.ts +1 -1
  257. package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
  258. package/dist/schema/state/sqlite/query-builder/impl.js +18 -16
  259. package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
  260. package/dist/schema/state/sqlite/query-builder/impl.test.js +364 -598
  261. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
  262. package/dist/schema/state/sqlite/query-builder/mod.js +2 -2
  263. package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -1
  264. package/dist/schema/state/sqlite/schema-helpers.js +2 -2
  265. package/dist/schema/state/sqlite/schema-helpers.js.map +1 -1
  266. package/dist/schema/state/sqlite/schema-helpers.test.js +2 -2
  267. package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts +102 -134
  268. package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts.map +1 -1
  269. package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +5 -5
  270. package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -1
  271. package/dist/schema/state/sqlite/system-tables/mod.js +2 -2
  272. package/dist/schema/state/sqlite/system-tables/state-tables.d.ts +380 -115
  273. package/dist/schema/state/sqlite/system-tables/state-tables.d.ts.map +1 -1
  274. package/dist/schema/state/sqlite/system-tables/state-tables.js +47 -6
  275. package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -1
  276. package/dist/schema/state/sqlite/table-def.d.ts +17 -20
  277. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
  278. package/dist/schema/state/sqlite/table-def.js +72 -6
  279. package/dist/schema/state/sqlite/table-def.js.map +1 -1
  280. package/dist/schema/state/sqlite/table-def.test.js +207 -37
  281. package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
  282. package/dist/schema/unknown-events.d.ts.map +1 -1
  283. package/dist/schema/unknown-events.js +3 -2
  284. package/dist/schema/unknown-events.js.map +1 -1
  285. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js +28 -6
  286. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js.map +1 -1
  287. package/dist/schema-management/common.d.ts.map +1 -1
  288. package/dist/schema-management/common.js +2 -2
  289. package/dist/schema-management/migrations.d.ts +4 -4
  290. package/dist/schema-management/migrations.d.ts.map +1 -1
  291. package/dist/schema-management/migrations.js +9 -9
  292. package/dist/schema-management/migrations.js.map +1 -1
  293. package/dist/schema-management/validate-schema.d.ts.map +1 -1
  294. package/dist/schema-management/validate-schema.js +1 -1
  295. package/dist/session-id-symbol.d.ts +29 -0
  296. package/dist/session-id-symbol.d.ts.map +1 -0
  297. package/dist/session-id-symbol.js +44 -0
  298. package/dist/session-id-symbol.js.map +1 -0
  299. package/dist/sql-queries/index.js +3 -3
  300. package/dist/sql-queries/sql-queries.d.ts.map +1 -1
  301. package/dist/sql-queries/sql-queries.js +11 -13
  302. package/dist/sql-queries/sql-queries.js.map +1 -1
  303. package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
  304. package/dist/sql-queries/sql-query-builder.js +1 -1
  305. package/dist/sql-queries/types.d.ts +6 -7
  306. package/dist/sql-queries/types.d.ts.map +1 -1
  307. package/dist/sql-queries/types.js.map +1 -1
  308. package/dist/sqlite-db-helper.d.ts +23 -3
  309. package/dist/sqlite-db-helper.d.ts.map +1 -1
  310. package/dist/sqlite-db-helper.js +39 -4
  311. package/dist/sqlite-db-helper.js.map +1 -1
  312. package/dist/sqlite-types.d.ts +3 -6
  313. package/dist/sqlite-types.d.ts.map +1 -1
  314. package/dist/sqlite-types.js +3 -3
  315. package/dist/sqlite-types.js.map +1 -1
  316. package/dist/sync/ClientSessionSyncProcessor.d.ts +41 -19
  317. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  318. package/dist/sync/ClientSessionSyncProcessor.js +200 -70
  319. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  320. package/dist/sync/errors.d.ts +12 -18
  321. package/dist/sync/errors.d.ts.map +1 -1
  322. package/dist/sync/errors.js +3 -3
  323. package/dist/sync/errors.js.map +1 -1
  324. package/dist/sync/index.js +6 -6
  325. package/dist/sync/mock-sync-backend.d.ts +2 -3
  326. package/dist/sync/mock-sync-backend.d.ts.map +1 -1
  327. package/dist/sync/mock-sync-backend.js +58 -37
  328. package/dist/sync/mock-sync-backend.js.map +1 -1
  329. package/dist/sync/mock-sync-backend.test.d.ts +2 -0
  330. package/dist/sync/mock-sync-backend.test.d.ts.map +1 -0
  331. package/dist/sync/mock-sync-backend.test.js +49 -0
  332. package/dist/sync/mock-sync-backend.test.js.map +1 -0
  333. package/dist/sync/next/compact-events.d.ts.map +1 -1
  334. package/dist/sync/next/compact-events.js +3 -3
  335. package/dist/sync/next/facts.d.ts.map +1 -1
  336. package/dist/sync/next/facts.js +1 -1
  337. package/dist/sync/next/history-dag-common.d.ts +5 -1
  338. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  339. package/dist/sync/next/history-dag-common.js +53 -32
  340. package/dist/sync/next/history-dag-common.js.map +1 -1
  341. package/dist/sync/next/history-dag.d.ts.map +1 -1
  342. package/dist/sync/next/history-dag.js +5 -4
  343. package/dist/sync/next/history-dag.js.map +1 -1
  344. package/dist/sync/next/mod.js +5 -5
  345. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  346. package/dist/sync/next/rebase-events.js +2 -2
  347. package/dist/sync/next/test/compact-events.calculator.test.js +6 -6
  348. package/dist/sync/next/test/compact-events.test.js +4 -4
  349. package/dist/sync/next/test/event-fixtures.d.ts +8 -8
  350. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
  351. package/dist/sync/next/test/event-fixtures.js +6 -6
  352. package/dist/sync/next/test/event-fixtures.js.map +1 -1
  353. package/dist/sync/next/test/history-dag-common.test.d.ts +2 -0
  354. package/dist/sync/next/test/history-dag-common.test.d.ts.map +1 -0
  355. package/dist/sync/next/test/history-dag-common.test.js +73 -0
  356. package/dist/sync/next/test/history-dag-common.test.js.map +1 -0
  357. package/dist/sync/next/test/mod.js +1 -1
  358. package/dist/sync/sync-backend-kv.d.ts.map +1 -1
  359. package/dist/sync/sync-backend-kv.js +5 -3
  360. package/dist/sync/sync-backend-kv.js.map +1 -1
  361. package/dist/sync/sync-backend.d.ts +15 -15
  362. package/dist/sync/sync-backend.d.ts.map +1 -1
  363. package/dist/sync/sync-backend.js +10 -6
  364. package/dist/sync/sync-backend.js.map +1 -1
  365. package/dist/sync/sync.d.ts +1 -1
  366. package/dist/sync/sync.d.ts.map +1 -1
  367. package/dist/sync/sync.js +2 -2
  368. package/dist/sync/syncstate.d.ts +100 -176
  369. package/dist/sync/syncstate.d.ts.map +1 -1
  370. package/dist/sync/syncstate.js +36 -39
  371. package/dist/sync/syncstate.js.map +1 -1
  372. package/dist/sync/syncstate.test.js +103 -64
  373. package/dist/sync/syncstate.test.js.map +1 -1
  374. package/dist/sync/transport-chunking.d.ts +15 -16
  375. package/dist/sync/transport-chunking.d.ts.map +1 -1
  376. package/dist/sync/transport-chunking.js +23 -32
  377. package/dist/sync/transport-chunking.js.map +1 -1
  378. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  379. package/dist/sync/validate-push-payload.js +2 -2
  380. package/dist/testing/event-factory.d.ts.map +1 -1
  381. package/dist/testing/event-factory.js +2 -2
  382. package/dist/testing/event-factory.js.map +1 -1
  383. package/dist/testing/mod.js +1 -1
  384. package/dist/util.d.ts +11 -4
  385. package/dist/util.d.ts.map +1 -1
  386. package/dist/util.js +20 -2
  387. package/dist/util.js.map +1 -1
  388. package/dist/version.d.ts.map +1 -1
  389. package/dist/version.js.map +1 -1
  390. package/package.json +40 -57
  391. package/src/ClientSessionLeaderThreadProxy.ts +1 -1
  392. package/src/MaterializationJournal.ts +184 -0
  393. package/src/StateHead.ts +80 -0
  394. package/src/WorkerTransportError.ts +4 -4
  395. package/src/__tests__/fixture.ts +3 -3
  396. package/src/adapter-types.ts +28 -61
  397. package/src/debug-info.ts +53 -70
  398. package/src/defs.ts +2 -2
  399. package/src/devtools/devtools-compatibility.test.ts +1 -0
  400. package/src/devtools/devtools-messages-client-session.ts +56 -65
  401. package/src/devtools/devtools-messages-common.ts +12 -11
  402. package/src/devtools/devtools-messages-leader.ts +71 -69
  403. package/src/devtools/devtools-sessioninfo.ts +13 -11
  404. package/src/devtools/mod.ts +4 -5
  405. package/src/errors.ts +46 -34
  406. package/src/index.ts +8 -1
  407. package/src/leader-thread/LeaderSyncProcessor.ts +777 -650
  408. package/src/leader-thread/RejectedPushError.ts +40 -27
  409. package/src/leader-thread/connection.ts +12 -8
  410. package/src/leader-thread/eventlog.ts +20 -12
  411. package/src/leader-thread/leader-worker-devtools.ts +38 -20
  412. package/src/leader-thread/make-leader-thread-layer.test.ts +7 -7
  413. package/src/leader-thread/make-leader-thread-layer.ts +100 -71
  414. package/src/leader-thread/materialize-event.ts +13 -8
  415. package/src/leader-thread/recreate-db.ts +41 -75
  416. package/src/leader-thread/shutdown-channel.ts +3 -14
  417. package/src/leader-thread/stream-events.ts +102 -101
  418. package/src/leader-thread/types.ts +29 -62
  419. package/src/logging.ts +5 -52
  420. package/src/make-client-session.ts +6 -6
  421. package/src/materializer-helper.ts +7 -36
  422. package/src/otel.ts +5 -14
  423. package/src/rematerialize-from-eventlog.ts +116 -98
  424. package/src/schema/EventDef/define.test.ts +28 -0
  425. package/src/schema/EventDef/define.ts +20 -19
  426. package/src/schema/EventDef/deprecated.test.ts +1 -8
  427. package/src/schema/EventDef/deprecated.ts +17 -20
  428. package/src/schema/EventDef/event-def.ts +2 -4
  429. package/src/schema/EventSequenceNumber/client.ts +20 -24
  430. package/src/schema/EventSequenceNumber/global.ts +1 -1
  431. package/src/schema/EventSequenceNumber.test.ts +5 -5
  432. package/src/schema/LiveStoreEvent/client.test.ts +17 -4
  433. package/src/schema/LiveStoreEvent/client.ts +36 -35
  434. package/src/schema/LiveStoreEvent/for-event-def.ts +7 -7
  435. package/src/schema/LiveStoreEvent/global.ts +1 -1
  436. package/src/schema/LiveStoreEvent/input.ts +6 -6
  437. package/src/schema/mod.ts +1 -0
  438. package/src/schema/schema.ts +4 -3
  439. package/src/schema/state/sqlite/client-document-def.test.ts +55 -20
  440. package/src/schema/state/sqlite/client-document-def.ts +95 -80
  441. package/src/schema/state/sqlite/column-annotations.test.ts +26 -45
  442. package/src/schema/state/sqlite/column-annotations.ts +26 -30
  443. package/src/schema/state/sqlite/column-def.test.ts +213 -77
  444. package/src/schema/state/sqlite/column-def.ts +87 -37
  445. package/src/schema/state/sqlite/column-spec.test.ts +2 -2
  446. package/src/schema/state/sqlite/column-spec.ts +3 -2
  447. package/src/schema/state/sqlite/db-schema/ast/fingerprint-digest.ts +6 -0
  448. package/src/schema/state/sqlite/db-schema/ast/fingerprint.test.ts +209 -0
  449. package/src/schema/state/sqlite/db-schema/ast/fingerprint.ts +225 -0
  450. package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +2 -81
  451. package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +123 -63
  452. package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +35 -16
  453. package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +26 -31
  454. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +35 -21
  455. package/src/schema/state/sqlite/db-schema/has-json-string-encoding.ts +9 -0
  456. package/src/schema/state/sqlite/mod.ts +4 -5
  457. package/src/schema/state/sqlite/persistence.ts +11 -0
  458. package/src/schema/state/sqlite/query-builder/api.ts +9 -9
  459. package/src/schema/state/sqlite/query-builder/astToSql.ts +24 -26
  460. package/src/schema/state/sqlite/query-builder/impl.test.ts +433 -669
  461. package/src/schema/state/sqlite/query-builder/impl.ts +19 -15
  462. package/src/schema/state/sqlite/schema-helpers.ts +1 -1
  463. package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +2 -2
  464. package/src/schema/state/sqlite/system-tables/state-tables.ts +54 -3
  465. package/src/schema/state/sqlite/table-def.test.ts +270 -66
  466. package/src/schema/state/sqlite/table-def.ts +112 -45
  467. package/src/schema/unknown-events.ts +3 -2
  468. package/src/schema-management/__tests__/migrations-autoincrement-quoting.test.ts +35 -4
  469. package/src/schema-management/migrations.ts +7 -6
  470. package/src/session-id-symbol.ts +59 -0
  471. package/src/sql-queries/sql-queries.ts +9 -13
  472. package/src/sql-queries/types.ts +6 -7
  473. package/src/sqlite-db-helper.ts +64 -2
  474. package/src/sqlite-types.ts +5 -8
  475. package/src/sync/ClientSessionSyncProcessor.ts +303 -119
  476. package/src/sync/errors.ts +14 -12
  477. package/src/sync/mock-sync-backend.test.ts +78 -0
  478. package/src/sync/mock-sync-backend.ts +93 -47
  479. package/src/sync/next/history-dag-common.ts +60 -34
  480. package/src/sync/next/history-dag.ts +4 -1
  481. package/src/sync/next/test/compact-events.calculator.test.ts +2 -2
  482. package/src/sync/next/test/event-fixtures.ts +1 -1
  483. package/src/sync/next/test/history-dag-common.test.ts +87 -0
  484. package/src/sync/sync-backend-kv.ts +4 -2
  485. package/src/sync/sync-backend.ts +15 -15
  486. package/src/sync/sync.ts +1 -1
  487. package/src/sync/syncstate.test.ts +191 -140
  488. package/src/sync/syncstate.ts +63 -53
  489. package/src/sync/transport-chunking.ts +34 -39
  490. package/src/util.ts +19 -9
  491. package/src/version.ts +1 -2
  492. package/dist/schema/state/sqlite/db-schema/hash.d.ts +0 -2
  493. package/dist/schema/state/sqlite/db-schema/hash.d.ts.map +0 -1
  494. package/dist/schema/state/sqlite/db-schema/hash.js +0 -15
  495. package/dist/schema/state/sqlite/db-schema/hash.js.map +0 -1
  496. package/dist/sql-queries/misc.d.ts +0 -2
  497. package/dist/sql-queries/misc.d.ts.map +0 -1
  498. package/dist/sql-queries/misc.js +0 -2
  499. package/dist/sql-queries/misc.js.map +0 -1
  500. package/src/schema/state/sqlite/db-schema/hash.ts +0 -13
  501. package/src/sql-queries/misc.ts +0 -2
@@ -4,33 +4,52 @@ import { Schema } from '@livestore/utils/effect'
4
4
 
5
5
  import * as F from './field-defs.ts'
6
6
 
7
- describe.concurrent('FieldDefs', () => {
7
+ describe('FieldDefs', () => {
8
8
  test('text', () => {
9
- expect(F.text()).toMatchSnapshot()
10
- expect(F.text({})).toMatchSnapshot()
11
- expect(F.text({ default: null, nullable: true })).toMatchSnapshot()
12
- expect(F.text({ schema: Schema.Literal('foo'), nullable: true, default: 'foo' })).toMatchSnapshot()
13
- expect(F.text({ schema: Schema.Union(Schema.Literal('foo')), nullable: true, default: 'foo' })).toMatchSnapshot()
9
+ expect(columnDefSnapshot(F.text())).toMatchSnapshot()
10
+ expect(columnDefSnapshot(F.text({}))).toMatchSnapshot()
11
+ expect(columnDefSnapshot(F.text({ default: null, nullable: true }))).toMatchSnapshot()
12
+ expect(
13
+ columnDefSnapshot(F.text({ schema: Schema.Literal('foo'), nullable: true, default: 'foo' })),
14
+ ).toMatchSnapshot()
15
+ expect(
16
+ columnDefSnapshot(F.text({ schema: Schema.Union([Schema.Literal('foo')]), nullable: true, default: 'foo' })),
17
+ ).toMatchSnapshot()
14
18
  })
15
19
 
16
20
  test('json', () => {
17
- expect(F.json()).toMatchSnapshot()
18
- expect(F.json({ default: null, nullable: true })).toMatchSnapshot()
21
+ expect(columnDefSnapshot(F.json())).toMatchSnapshot()
22
+ expect(columnDefSnapshot(F.json({ default: null, nullable: true }))).toMatchSnapshot()
19
23
  expect(
20
- F.json({ schema: Schema.Struct({ name: Schema.String }), default: { name: 'Bob' }, nullable: true }),
24
+ columnDefSnapshot(
25
+ F.json({ schema: Schema.Struct({ name: Schema.String }), default: { name: 'Bob' }, nullable: true }),
26
+ ),
21
27
  ).toMatchSnapshot()
22
28
  })
23
29
 
24
30
  test('datetime', () => {
25
- expect(F.datetime()).toMatchSnapshot()
26
- expect(F.datetime({})).toMatchSnapshot()
27
- expect(F.datetime({ default: null, nullable: true })).toMatchSnapshot()
28
- expect(F.datetime({ default: new Date('2022-02-02') })).toMatchSnapshot()
31
+ expect(columnDefSnapshot(F.datetime())).toMatchSnapshot()
32
+ expect(columnDefSnapshot(F.datetime({}))).toMatchSnapshot()
33
+ expect(columnDefSnapshot(F.datetime({ default: null, nullable: true }))).toMatchSnapshot()
34
+ expect(columnDefSnapshot(F.datetime({ default: new Date('2022-02-02') }))).toMatchSnapshot()
29
35
  })
30
36
 
31
37
  test('boolean', () => {
32
- expect(F.boolean()).toMatchSnapshot()
33
- expect(F.boolean({})).toMatchSnapshot()
34
- expect(F.boolean({ default: false })).toMatchSnapshot()
38
+ expect(columnDefSnapshot(F.boolean())).toMatchSnapshot()
39
+ expect(columnDefSnapshot(F.boolean({}))).toMatchSnapshot()
40
+ expect(columnDefSnapshot(F.boolean({ default: false }))).toMatchSnapshot()
35
41
  })
36
42
  })
43
+
44
+ const columnDefSnapshot = (columnDef: F.ColumnDefinition.Any) => ({
45
+ ...columnDef,
46
+ schema: schemaSnapshot(columnDef.schema),
47
+ })
48
+
49
+ // Effect schemas expose a large inspectable object graph. Snapshot only the
50
+ // schema shape this DSL cares about.
51
+ const schemaSnapshot = (schema: Schema.Codec<unknown, unknown>) => ({
52
+ ast: schema.ast._tag,
53
+ encodedAst: Schema.toEncoded(schema).ast._tag,
54
+ decodedAst: Schema.toType(schema).ast._tag,
55
+ })
@@ -1,6 +1,8 @@
1
1
  import { casesHandled } from '@livestore/utils'
2
2
  import { Option, Schema } from '@livestore/utils/effect'
3
3
 
4
+ import { SqliteReal } from '../../../../../util.ts'
5
+
4
6
  export type SqlDefaultValue = {
5
7
  readonly sql: string
6
8
  }
@@ -21,7 +23,7 @@ export const resolveColumnDefault = <T>(value: ColumnDefaultValue<T>): T | null
21
23
 
22
24
  export type ColumnDefinition<TEncoded, TDecoded, TNullable extends boolean = boolean> = {
23
25
  readonly columnType: FieldColumnType
24
- readonly schema: Schema.Schema<TDecoded, TEncoded>
26
+ readonly schema: Schema.Codec<TDecoded, TEncoded>
25
27
  readonly default: Option.Option<ColumnDefaultValue<TDecoded>>
26
28
  /** @default false */
27
29
  readonly nullable: TNullable
@@ -55,7 +57,7 @@ type ColumnDefaultArg<T, TNullable extends boolean> =
55
57
  | NoDefault
56
58
 
57
59
  export type ColumnDefinitionInput = {
58
- readonly schema?: Schema.Schema<unknown>
60
+ readonly schema?: Schema.Codec<unknown, unknown>
59
61
  readonly default?: ColumnDefaultArg<unknown, boolean>
60
62
  readonly nullable?: boolean
61
63
  readonly primaryKey?: boolean
@@ -68,7 +70,7 @@ export type NoDefault = typeof NoDefault
68
70
  export type ColDefFn<TColumnType extends FieldColumnType> = {
69
71
  (): {
70
72
  columnType: TColumnType
71
- schema: Schema.Schema<DefaultEncodedForColumnType<TColumnType>>
73
+ schema: Schema.Codec<DefaultEncodedForColumnType<TColumnType>>
72
74
  default: Option.None<never>
73
75
  nullable: false
74
76
  primaryKey: false
@@ -82,7 +84,7 @@ export type ColDefFn<TColumnType extends FieldColumnType> = {
82
84
  const TPrimaryKey extends boolean = false,
83
85
  const TAutoIncrement extends boolean = false,
84
86
  >(args: {
85
- schema?: Schema.Schema<TDecoded, TEncoded>
87
+ schema?: Schema.Codec<TDecoded, TEncoded>
86
88
  default?: TDefault
87
89
  nullable?: TNullable
88
90
  primaryKey?: TPrimaryKey
@@ -90,8 +92,8 @@ export type ColDefFn<TColumnType extends FieldColumnType> = {
90
92
  }): {
91
93
  columnType: TColumnType
92
94
  schema: TNullable extends true
93
- ? Schema.Schema<NoInfer<TDecoded> | null, NoInfer<TEncoded> | null>
94
- : Schema.Schema<NoInfer<TDecoded>, NoInfer<TEncoded>>
95
+ ? Schema.Codec<NoInfer<TDecoded> | null, NoInfer<TEncoded> | null>
96
+ : Schema.Codec<NoInfer<TDecoded>, NoInfer<TEncoded>>
95
97
  default: TDefault extends NoDefault ? Option.None<never> : Option.Some<NoInfer<TDefault>>
96
98
  nullable: NoInfer<TNullable>
97
99
  primaryKey: NoInfer<TPrimaryKey>
@@ -103,7 +105,7 @@ const makeColDef =
103
105
  <TColumnType extends FieldColumnType>(columnType: TColumnType): ColDefFn<TColumnType> =>
104
106
  (def?: ColumnDefinitionInput) => {
105
107
  const nullable = def?.nullable ?? false
106
- const schemaWithoutNull: Schema.Schema<any> = def?.schema ?? defaultSchemaForColumnType(columnType)
108
+ const schemaWithoutNull = def?.schema ?? defaultSchemaForColumnType(columnType)
107
109
  const schema = nullable === true ? Schema.NullOr(schemaWithoutNull) : schemaWithoutNull
108
110
  const default_ = def?.default === undefined || def.default === NoDefault ? Option.none() : Option.some(def.default)
109
111
 
@@ -143,7 +145,7 @@ export type SpecializedColDefFn<
143
145
  > = {
144
146
  (): {
145
147
  columnType: TColumnType
146
- schema: Schema.Schema<TBaseDecoded, DefaultEncodedForColumnType<TColumnType>>
148
+ schema: Schema.Codec<TBaseDecoded, DefaultEncodedForColumnType<TColumnType>>
147
149
  default: Option.None<never>
148
150
  nullable: false
149
151
  primaryKey: false
@@ -158,7 +160,7 @@ export type SpecializedColDefFn<
158
160
  >(
159
161
  args: TAllowsCustomSchema extends true
160
162
  ? {
161
- schema?: Schema.Schema<TDecoded, any>
163
+ schema?: Schema.Codec<TDecoded, any>
162
164
  default?: TDefault
163
165
  nullable?: TNullable
164
166
  primaryKey?: TPrimaryKey
@@ -173,8 +175,8 @@ export type SpecializedColDefFn<
173
175
  ): {
174
176
  columnType: TColumnType
175
177
  schema: TNullable extends true
176
- ? Schema.Schema<NoInfer<TDecoded> | null, DefaultEncodedForColumnType<TColumnType> | null>
177
- : Schema.Schema<NoInfer<TDecoded>, DefaultEncodedForColumnType<TColumnType>>
178
+ ? Schema.Codec<NoInfer<TDecoded> | null, DefaultEncodedForColumnType<TColumnType> | null>
179
+ : Schema.Codec<NoInfer<TDecoded>, DefaultEncodedForColumnType<TColumnType>>
178
180
  default: TDefault extends NoDefault ? Option.None<never> : Option.Some<TDefault>
179
181
  nullable: NoInfer<TNullable>
180
182
  primaryKey: NoInfer<TPrimaryKey>
@@ -187,7 +189,7 @@ type MakeSpecializedColDefFn = {
187
189
  columnType: TColumnType,
188
190
  opts: {
189
191
  _tag: 'baseSchema'
190
- baseSchema: Schema.Schema<TBaseDecoded, DefaultEncodedForColumnType<TColumnType>>
192
+ baseSchema: Schema.Codec<TBaseDecoded, DefaultEncodedForColumnType<TColumnType>>
191
193
  },
192
194
  ): SpecializedColDefFn<TColumnType, false, TBaseDecoded>
193
195
  <TColumnType extends FieldColumnType, TBaseDecoded>(
@@ -195,8 +197,8 @@ type MakeSpecializedColDefFn = {
195
197
  opts: {
196
198
  _tag: 'baseSchemaFn'
197
199
  baseSchemaFn: <TDecoded>(
198
- customSchema: Schema.Schema<TDecoded, TBaseDecoded> | undefined,
199
- ) => Schema.Schema<TBaseDecoded, DefaultEncodedForColumnType<TColumnType>>
200
+ customSchema: Schema.Codec<TDecoded, TBaseDecoded> | undefined,
201
+ ) => Schema.Codec<TBaseDecoded, DefaultEncodedForColumnType<TColumnType>>
200
202
  },
201
203
  ): SpecializedColDefFn<TColumnType, true, TBaseDecoded>
202
204
  }
@@ -221,28 +223,22 @@ const makeSpecializedColDef: MakeSpecializedColDefFn = (columnType, opts) => (de
221
223
 
222
224
  export const json: SpecializedColDefFn<'text', true, unknown> = makeSpecializedColDef('text', {
223
225
  _tag: 'baseSchemaFn',
224
- baseSchemaFn: (customSchema) => Schema.parseJson(customSchema ?? Schema.Any),
226
+ baseSchemaFn: (customSchema) => Schema.fromJsonString(customSchema ?? Schema.Any),
225
227
  })
226
228
 
227
229
  export const datetime: SpecializedColDefFn<'text', false, Date> = makeSpecializedColDef('text', {
228
230
  _tag: 'baseSchema',
229
- baseSchema: Schema.Date,
231
+ baseSchema: Schema.DateFromString,
230
232
  })
231
233
 
232
234
  export const datetimeInteger: SpecializedColDefFn<'integer', false, Date> = makeSpecializedColDef('integer', {
233
235
  _tag: 'baseSchema',
234
- baseSchema: Schema.transform(Schema.Number, Schema.DateFromSelf, {
235
- decode: (ms) => new Date(ms),
236
- encode: (date) => date.getTime(),
237
- }),
236
+ baseSchema: Schema.DateFromMillis,
238
237
  })
239
238
 
240
239
  export const boolean: SpecializedColDefFn<'integer', false, boolean> = makeSpecializedColDef('integer', {
241
240
  _tag: 'baseSchema',
242
- baseSchema: Schema.transform(Schema.Number, Schema.Boolean, {
243
- decode: (_) => _ === 1,
244
- encode: (_) => (_ === true ? 1 : 0),
245
- }),
241
+ baseSchema: Schema.BooleanFromBit,
246
242
  })
247
243
 
248
244
  export type FieldColumnType = 'text' | 'integer' | 'real' | 'blob'
@@ -257,27 +253,26 @@ export type DefaultEncodedForColumnType<TColumnType extends FieldColumnType> = T
257
253
  ? Uint8Array<ArrayBuffer>
258
254
  : never
259
255
 
260
- export const defaultSchemaForColumnType = <TColumnType extends FieldColumnType>(
261
- columnType: TColumnType,
262
- ): Schema.Schema<DefaultEncodedForColumnType<TColumnType>> => {
256
+ export const defaultSchemaForColumnType = <TColumnType extends FieldColumnType>(columnType: TColumnType) => {
263
257
  type T = DefaultEncodedForColumnType<TColumnType>
264
258
 
265
259
  switch (columnType) {
266
260
  case 'text': {
267
261
  // oxlint-disable-next-line typescript-eslint(no-unsafe-type-assertion) -- switch-based type narrowing for column type to schema mapping; each case is correct for its branch
268
- return Schema.String as any as Schema.Schema<T>
262
+ return Schema.String as Schema.Codec<T>
269
263
  }
270
264
  case 'integer': {
271
265
  // oxlint-disable-next-line typescript-eslint(no-unsafe-type-assertion) -- switch-based type narrowing for column type to schema mapping; each case is correct for its branch
272
- return Schema.Number as any as Schema.Schema<T>
266
+ return Schema.Finite as Schema.Codec<T>
273
267
  }
274
268
  case 'real': {
275
269
  // oxlint-disable-next-line typescript-eslint(no-unsafe-type-assertion) -- switch-based type narrowing for column type to schema mapping; each case is correct for its branch
276
- return Schema.Number as any as Schema.Schema<T>
270
+ // @effect-diagnostics-next-line schemaNumber:off -- SQLite REAL permits Infinity/NaN; SqliteReal is the documented domain carve-out
271
+ return SqliteReal as Schema.Codec<T>
277
272
  }
278
273
  case 'blob': {
279
274
  // oxlint-disable-next-line typescript-eslint(no-unsafe-type-assertion) -- switch-based type narrowing for column type to schema mapping; each case is correct for its branch
280
- return Schema.Uint8ArrayFromSelf as any as Schema.Schema<T>
275
+ return Schema.Uint8Array as Schema.Codec<T>
281
276
  }
282
277
  default: {
283
278
  return casesHandled(columnType)
@@ -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'
@@ -52,26 +51,41 @@ export const table = <TTableName extends string, TColumns extends Columns, TInde
52
51
  export type AnyIfConstained<In, Out> = '__constrained' extends keyof In ? any : Out
53
52
  export type EmptyObjIfConstained<In> = '__constrained' extends keyof In ? {} : In
54
53
 
55
- export type StructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Schema<
56
- AnyIfConstained<TCols, FromColumns.RowDecoded<TCols>>,
57
- AnyIfConstained<TCols, FromColumns.RowEncoded<TCols>>
58
- >
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>>
59
59
 
60
- export type InsertStructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Schema<
60
+ export type InsertStructSchemaForColumns<TCols extends ConstraintColumns> = Schema.Codec<
61
61
  AnyIfConstained<TCols, FromColumns.InsertRowDecoded<TCols>>,
62
62
  AnyIfConstained<TCols, FromColumns.InsertRowEncoded<TCols>>
63
63
  >
64
64
 
65
- export const structSchemaForTable = <TTableDefinition extends TableDefinition<any, any>>(
66
- tableDef: TTableDefinition,
67
- ): StructSchemaForColumns<TTableDefinition['columns']> =>
68
- 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({
69
83
  title: tableDef.name,
70
- }) as any
84
+ })
71
85
 
72
- export const insertStructSchemaForTable = <TTableDefinition extends TableDefinition<any, any>>(
73
- tableDef: TTableDefinition,
74
- ): InsertStructSchemaForColumns<TTableDefinition['columns']> =>
86
+ export const insertStructSchemaForTable = <TTableName extends string, TColumns extends ConstraintColumns>(
87
+ tableDef: TableDefinition<TTableName, TColumns>,
88
+ ): InsertStructSchemaForColumns<TColumns> =>
75
89
  Schema.Struct(
76
90
  Object.fromEntries(
77
91
  tableDef.ast.columns.map((column) => [
@@ -80,7 +94,7 @@ export const insertStructSchemaForTable = <TTableDefinition extends TableDefinit
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
 
@@ -150,7 +164,7 @@ export namespace FromTable {
150
164
  }
151
165
 
152
166
  export type RowEncodeNonNullable<TTableDefinition extends TableDefinition<any, any>> = {
153
- [K in keyof TTableDefinition['columns']]: Schema.Schema.Encoded<TTableDefinition['columns'][K]['schema']>
167
+ [K in keyof TTableDefinition['columns']]: TTableDefinition['columns'][K]['schema']['Encoded']
154
168
  }
155
169
 
156
170
  export type RowEncoded<TTableDefinition extends TableDefinition<any, any>> = Types.Simplify<
@@ -167,7 +181,7 @@ export namespace FromTable {
167
181
  // >
168
182
 
169
183
  export type RowDecodedAll<TTableDefinition extends TableDefinition<any, any>> = {
170
- [K in keyof TTableDefinition['columns']]: Schema.Schema.Type<TTableDefinition['columns'][K]['schema']>
184
+ [K in keyof TTableDefinition['columns']]: TTableDefinition['columns'][K]['schema']['Type']
171
185
  }
172
186
  }
173
187
 
@@ -179,11 +193,11 @@ export namespace FromColumns {
179
193
  >
180
194
 
181
195
  export type RowDecodedAll<TColumns extends Columns> = {
182
- readonly [K in keyof TColumns]: Schema.Schema.Type<TColumns[K]['schema']>
196
+ readonly [K in keyof TColumns]: TColumns[K]['schema']['Type']
183
197
  }
184
198
 
185
199
  export type RowEncodedAll<TColumns extends Columns> = {
186
- readonly [K in keyof TColumns]: Schema.Schema.Encoded<TColumns[K]['schema']>
200
+ readonly [K in keyof TColumns]: TColumns[K]['schema']['Encoded']
187
201
  }
188
202
 
189
203
  export type RowEncoded<TColumns extends Columns> = Types.Simplify<
@@ -192,7 +206,7 @@ export namespace FromColumns {
192
206
  >
193
207
 
194
208
  export type RowEncodeNonNullable<TColumns extends Columns> = {
195
- readonly [K in keyof TColumns]: Schema.Schema.Encoded<TColumns[K]['schema']>
209
+ readonly [K in keyof TColumns]: TColumns[K]['schema']['Encoded']
196
210
  }
197
211
 
198
212
  export type NullableColumnNames<TColumns extends Columns> = keyof {
@@ -0,0 +1,9 @@
1
+ import { SchemaAST } from '@livestore/utils/effect'
2
+
3
+ const getContentMediaType = SchemaAST.resolveAt<string>('contentMediaType')
4
+
5
+ export const hasJsonStringEncoding = (ast: SchemaAST.AST): boolean => hasJsonMediaType(SchemaAST.toEncoded(ast))
6
+
7
+ const hasJsonMediaType = (ast: SchemaAST.AST): boolean =>
8
+ getContentMediaType(ast) === 'application/json' ||
9
+ (SchemaAST.isUnion(ast) === true && ast.types.some(hasJsonMediaType))
@@ -4,6 +4,7 @@ import type { MigrationOptions } from '../../../adapter-types.ts'
4
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
+ import { fingerprint } from './db-schema/ast/fingerprint.ts'
7
8
  import { SqliteAst } from './db-schema/mod.ts'
8
9
  import { stateSystemTables } from './system-tables/state-tables.ts'
9
10
  import type { TableDef, TableDefBase } from './table-def.ts'
@@ -55,19 +56,17 @@ export const makeState = <TStateInput extends InputState>(inputSchema: TStateInp
55
56
  }
56
57
  }
57
58
 
58
- const hash = SqliteAst.hash({
59
+ const hash = fingerprint({
59
60
  _tag: 'dbSchema',
60
61
  tables: [...tables.values()].map((_) => _.sqliteDef.ast),
61
62
  })
62
63
 
63
- return { sqlite: { tables, migrations: inputSchema.migrations ?? { strategy: 'auto' }, hash }, materializers }
64
+ return { sqlite: { tables, migrations: inputSchema.migrations ?? {}, hash }, materializers }
64
65
  }
65
66
 
66
67
  export type InputState = {
67
68
  readonly tables: Record<string, TableDefBase> | ReadonlyArray<TableDefBase>
68
69
  readonly materializers: Record<string, Materializer<any>>
69
- /**
70
- * @default { strategy: 'auto' }
71
- */
70
+ /** Configures hooks and logging for automatic state migration. */
72
71
  readonly migrations?: MigrationOptions
73
72
  }
@@ -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
  > = {
@@ -230,8 +230,8 @@ export namespace QueryBuilder {
230
230
  /** Select multiple columns */
231
231
  <TColumns extends keyof TTableDef['sqliteDef']['columns'] & string>(
232
232
  ...columns: TColumns[]
233
- )// params: QueryBuilderSelectParams, // TODO also support arbitrary SQL selects
234
- : QueryBuilder<
233
+ ): QueryBuilder<
234
+ // params: QueryBuilderSelectParams, // TODO also support arbitrary SQL selects
235
235
  ReadonlyArray<{
236
236
  readonly [K in TColumns]: TTableDef['sqliteDef']['columns'][K]['schema']['Type']
237
237
  }>,
@@ -1,48 +1,46 @@
1
1
  import { shouldNeverHappen } from '@livestore/utils'
2
- import { Schema, SchemaAST } from '@livestore/utils/effect'
2
+ import { Schema, SchemaAST, Struct } from '@livestore/utils/effect'
3
3
 
4
- import { SessionIdSymbol } from '../../../../adapter-types.ts'
4
+ import { SessionIdSymbol } from '../../../../session-id-symbol.ts'
5
5
  import type { SqlValue } from '../../../../util.ts'
6
6
  import type { State } from '../../../mod.ts'
7
+ import { hasJsonStringEncoding } from '../db-schema/has-json-string-encoding.ts'
7
8
  import type { QueryBuilderAst } from './api.ts'
8
9
 
9
10
  /**
10
- * Extracts array element schema from a JSON array transformation AST.
11
- * Returns the element schema, or undefined if not a JSON array transformation.
11
+ * Extracts array element schema from a JSON array AST with a JSON string encoding.
12
+ * Returns the element schema, or undefined if the AST is not a JSON array.
12
13
  */
13
- const extractArrayElementFromTransformation = (ast: SchemaAST.AST): Schema.Schema.Any | undefined => {
14
- if (SchemaAST.isTransformation(ast) === false) return undefined
14
+ const extractJsonArrayElementSchema = (ast: SchemaAST.AST): Schema.Top | undefined => {
15
+ if (hasJsonStringEncoding(ast) === false) return undefined
15
16
 
16
- const toAst = ast.to
17
- // Check if the "to" side is a TupleType (Effect's internal representation of Array)
18
- if (SchemaAST.isTupleType(toAst) === false) return undefined
17
+ const typeAst = SchemaAST.toType(ast)
18
+ // Check if the type side is Arrays (Effect's internal representation of Array)
19
+ if (SchemaAST.isArrays(typeAst) === false) return undefined
19
20
 
20
- // For Schema.Array, rest contains { type: AST } elements - get the first one's type
21
- const restElement = toAst.rest[0]
21
+ // For Schema.Array, rest contains the element AST - get the first one.
22
+ const restElement = typeAst.rest[0]
22
23
  if (restElement === undefined) return undefined
23
24
 
24
- return Schema.make(restElement.type)
25
+ return Schema.make(restElement)
25
26
  }
26
27
 
27
28
  /**
28
- * For JSON array columns, extracts the element schema from Schema.parseJson(Schema.Array(ElementSchema)).
29
- * Also handles nullable JSON arrays (Schema.NullOr(Schema.parseJson(Schema.Array(...)))).
29
+ * For JSON array columns, extracts the element schema from Schema.fromJsonString(Schema.Array(ElementSchema)).
30
+ * Also handles nullable JSON arrays (Schema.NullOr(Schema.fromJsonString(Schema.Array(...)))).
30
31
  * Returns the element schema, or undefined if the column is not a JSON array.
31
32
  */
32
- const getJsonArrayElementSchema = (colSchema: Schema.Schema.Any): Schema.Schema.Any | undefined => {
33
+ const getJsonArrayElementSchema = (colSchema: Schema.Top): Schema.Top | undefined => {
33
34
  const ast = colSchema.ast
34
35
 
35
- // Case 1: Direct transformation (non-nullable JSON array)
36
- // Schema.parseJson(Schema.Array(ElementSchema)) creates a Transformation AST
37
- if (SchemaAST.isTransformation(ast) === true) {
38
- return extractArrayElementFromTransformation(ast)
39
- }
36
+ // Case 1: Direct JSON string encoding (non-nullable JSON array)
37
+ const direct = extractJsonArrayElementSchema(ast)
38
+ if (direct !== undefined) return direct
40
39
 
41
- // Case 2: Nullable JSON array - Schema.NullOr wraps the parseJson in a Union
42
- // Structure: Union([Transformation (JSON array), Literal (null)])
40
+ // Case 2: Nullable JSON array - Schema.NullOr wraps the JSON array in a Union.
43
41
  if (SchemaAST.isUnion(ast) === true) {
44
42
  for (const member of ast.types) {
45
- const result = extractArrayElementFromTransformation(member)
43
+ const result = extractJsonArrayElementSchema(member)
46
44
  if (result !== undefined) return result
47
45
  }
48
46
  }
@@ -54,8 +52,8 @@ const getJsonArrayElementSchema = (colSchema: Schema.Schema.Any): Schema.Schema.
54
52
  * Encodes a JSON array element to the representation returned by SQLite's json_each().
55
53
  * Objects/arrays are stringified so they match json_each's TEXT representation.
56
54
  */
57
- const encodeJsonArrayElementValue = (elementSchema: Schema.Schema.Any, value: unknown): SqlValue => {
58
- const encoded = Schema.encodeSync(elementSchema as Schema.Schema<unknown, SqlValue>)(value)
55
+ const encodeJsonArrayElementValue = (elementSchema: Schema.Top, value: unknown): SqlValue => {
56
+ const encoded = Schema.encodeSync(elementSchema as Schema.Codec<unknown, SqlValue>)(value)
59
57
 
60
58
  if (encoded === null) return null
61
59
  if (typeof encoded === 'object') {
@@ -237,7 +235,7 @@ export const astToSql = (ast: QueryBuilderAst): { query: string; bindValues: Sql
237
235
  // return shouldNeverHappen('UPDATE query requires at least one column to set.')
238
236
  }
239
237
 
240
- const encodedValues = Schema.encodeSync(Schema.partial(ast.tableDef.rowSchema))(ast.values)
238
+ const encodedValues = Schema.encodeSync(ast.tableDef.rowSchema.mapFields(Struct.map(Schema.optional)))(ast.values)
241
239
 
242
240
  // Ensure bind values are added in the same order as columns
243
241
  setColumns.forEach((col) => {