@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,144 @@
1
+ /**
2
+ * Deprecation Annotations for Events
3
+ *
4
+ * This module provides utilities for marking event fields and entire events as deprecated.
5
+ * When a deprecated field is used or a deprecated event is committed, a warning is logged.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { Events } from '@livestore/livestore'
10
+ * import { Schema } from 'effect'
11
+ * import { deprecated } from '@livestore/common/schema'
12
+ *
13
+ * // Field-level deprecation
14
+ * const todoUpdated = Events.synced({
15
+ * name: 'v1.TodoUpdated',
16
+ * schema: Schema.Struct({
17
+ * id: Schema.String,
18
+ * title: Schema.optional(Schema.String).pipe(deprecated("Use 'text' instead")),
19
+ * text: Schema.optional(Schema.String),
20
+ * }),
21
+ * })
22
+ *
23
+ * // Event-level deprecation
24
+ * const todoRenamed = Events.synced({
25
+ * name: 'v1.TodoRenamed',
26
+ * schema: Schema.Struct({ id: Schema.String, name: Schema.String }),
27
+ * deprecated: "Use 'v1.TodoUpdated' instead",
28
+ * })
29
+ * ```
30
+ * @module
31
+ */
32
+ import { Effect, Option, SchemaAST } from '@livestore/utils/effect';
33
+ /** Symbol used to mark schemas as deprecated. */
34
+ export const DeprecatedId = Symbol.for('livestore/schema/annotations/deprecated');
35
+ /**
36
+ * Marks a schema field as deprecated with a reason message.
37
+ * When an event is committed with a deprecated field that has a value,
38
+ * a warning will be logged.
39
+ *
40
+ * Works with both Schema types and PropertySignatures (from Schema.optional).
41
+ *
42
+ * @param reason - Explanation of why this field is deprecated and what to use instead
43
+ * @returns A function that adds the deprecation annotation to the schema
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * const schema = Schema.Struct({
48
+ * oldField: Schema.optional(Schema.String).pipe(deprecated("Use 'newField' instead")),
49
+ * newField: Schema.optional(Schema.String),
50
+ * })
51
+ * ```
52
+ */
53
+ export const deprecated = (reason) => (schema) => schema.annotations({ [DeprecatedId]: reason });
54
+ /**
55
+ * Checks if a schema has a deprecation annotation.
56
+ *
57
+ * @param schema - The schema to check
58
+ * @returns The deprecation reason if deprecated, None otherwise
59
+ */
60
+ export const getDeprecatedReason = (schema) => SchemaAST.getAnnotation(DeprecatedId)(schema.ast);
61
+ /**
62
+ * Checks if a schema is deprecated.
63
+ *
64
+ * @param schema - The schema to check
65
+ * @returns true if the schema is deprecated
66
+ */
67
+ export const isDeprecated = (schema) => Option.isSome(getDeprecatedReason(schema));
68
+ /**
69
+ * Finds deprecated fields with values in the given event arguments.
70
+ * This walks through a Struct schema and checks each property for deprecation.
71
+ *
72
+ * @param schema - The event schema (expected to be a Struct)
73
+ * @param args - The event arguments
74
+ * @returns Array of objects containing field name and deprecation reason
75
+ */
76
+ export const findDeprecatedFieldsWithValues = (schema, args) => {
77
+ const result = [];
78
+ const ast = schema.ast;
79
+ // Handle TypeLiteral (Struct) schemas
80
+ if (ast._tag === 'TypeLiteral') {
81
+ for (const prop of ast.propertySignatures) {
82
+ const fieldName = String(prop.name);
83
+ const fieldValue = args[fieldName];
84
+ // Only check fields that have a value (not undefined)
85
+ if (fieldValue !== undefined) {
86
+ // Check deprecation on the property signature itself (for Schema.optional(...).pipe(deprecated(...)))
87
+ const propAnnotations = prop.annotations;
88
+ const deprecationReason = propAnnotations?.[DeprecatedId];
89
+ // Also check deprecation on the type (for direct field deprecation)
90
+ const typeDeprecation = SchemaAST.getAnnotation(DeprecatedId)(prop.type);
91
+ const reason = deprecationReason ?? (Option.isSome(typeDeprecation) === true ? typeDeprecation.value : undefined);
92
+ if (reason !== undefined) {
93
+ result.push({ field: fieldName, reason });
94
+ }
95
+ }
96
+ }
97
+ }
98
+ return result;
99
+ };
100
+ /** Set of event names that have already logged deprecation warnings. */
101
+ const warnedDeprecatedEvents = new Set();
102
+ /** Map of event+field combinations that have already logged deprecation warnings. */
103
+ const warnedDeprecatedFields = new Set();
104
+ /**
105
+ * Logs deprecation warnings for an event using Effect.logWarning.
106
+ * Checks both event-level and field-level deprecation, with deduplication.
107
+ *
108
+ * @param eventDef - The event definition to check
109
+ * @param args - The event arguments
110
+ * @returns An Effect that logs warnings for any deprecations found
111
+ */
112
+ export const logDeprecationWarnings = (eventDef, args) => Effect.gen(function* () {
113
+ const eventName = eventDef.name;
114
+ // Check for event-level deprecation
115
+ const eventDeprecation = eventDef.options.deprecated;
116
+ if (eventDeprecation !== undefined && warnedDeprecatedEvents.has(eventName) === false) {
117
+ warnedDeprecatedEvents.add(eventName);
118
+ yield* Effect.logWarning('@livestore/schema:deprecated-event', {
119
+ event: eventName,
120
+ reason: eventDeprecation,
121
+ });
122
+ }
123
+ // Check for deprecated fields with values
124
+ const deprecatedFields = findDeprecatedFieldsWithValues(eventDef.schema, args);
125
+ for (const { field, reason } of deprecatedFields) {
126
+ const key = `${eventName}:${field}`;
127
+ if (warnedDeprecatedFields.has(key) === false) {
128
+ warnedDeprecatedFields.add(key);
129
+ yield* Effect.logWarning('@livestore/schema:deprecated-field', {
130
+ event: eventName,
131
+ field,
132
+ reason,
133
+ });
134
+ }
135
+ }
136
+ });
137
+ /**
138
+ * Resets the deprecation warning state. Useful for testing.
139
+ */
140
+ export const resetDeprecationWarnings = () => {
141
+ warnedDeprecatedEvents.clear();
142
+ warnedDeprecatedFields.clear();
143
+ };
144
+ //# sourceMappingURL=deprecated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deprecated.js","sourceRoot":"","sources":["../../../src/schema/EventDef/deprecated.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deprecated.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deprecated.test.d.ts","sourceRoot":"","sources":["../../../src/schema/EventDef/deprecated.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,95 @@
1
+ import { afterEach, beforeEach, describe, expect, test } from 'vitest';
2
+ import { Effect, Logger, Schema } from '@livestore/utils/effect';
3
+ import { synced } from "./define.js";
4
+ import { deprecated, findDeprecatedFieldsWithValues, getDeprecatedReason, isDeprecated, logDeprecationWarnings, resetDeprecationWarnings, } from "./deprecated.js";
5
+ describe('deprecated annotations', () => {
6
+ test('adds deprecation annotation to schema', () => {
7
+ const schema = Schema.String.pipe(deprecated('Use newField instead'));
8
+ expect(isDeprecated(schema)).toBe(true);
9
+ expect(getDeprecatedReason(schema)._tag).toBe('Some');
10
+ });
11
+ test('works with optional fields in Struct', () => {
12
+ const struct = Schema.Struct({
13
+ oldField: Schema.optional(Schema.String).pipe(deprecated('Legacy')),
14
+ });
15
+ expect(findDeprecatedFieldsWithValues(struct, { oldField: 'x' })).toEqual([{ field: 'oldField', reason: 'Legacy' }]);
16
+ });
17
+ test('non-deprecated schemas return false', () => {
18
+ expect(isDeprecated(Schema.String)).toBe(false);
19
+ });
20
+ test('ignores deprecated fields without values', () => {
21
+ const schema = Schema.Struct({
22
+ id: Schema.String,
23
+ old: Schema.optional(Schema.String).pipe(deprecated('x')),
24
+ });
25
+ expect(findDeprecatedFieldsWithValues(schema, { id: '1' })).toEqual([]);
26
+ });
27
+ test('finds multiple deprecated fields', () => {
28
+ const schema = Schema.Struct({
29
+ a: Schema.optional(Schema.String).pipe(deprecated('A')),
30
+ b: Schema.optional(Schema.String).pipe(deprecated('B')),
31
+ });
32
+ const result = findDeprecatedFieldsWithValues(schema, { a: '1', b: '2' });
33
+ expect(result).toHaveLength(2);
34
+ });
35
+ });
36
+ describe('logDeprecationWarnings', () => {
37
+ let logs;
38
+ beforeEach(() => {
39
+ resetDeprecationWarnings();
40
+ logs = [];
41
+ });
42
+ afterEach(() => resetDeprecationWarnings());
43
+ const run = (effect) => Effect.runSync(effect.pipe(Effect.provide(Logger.replace(Logger.defaultLogger, Logger.make(({ message }) => logs.push(message))))));
44
+ test('logs event deprecation warning', () => {
45
+ const event = synced({ name: 'Old', schema: Schema.Struct({ id: Schema.String }), deprecated: 'Use New' });
46
+ run(logDeprecationWarnings(event, { id: '1' }));
47
+ expect(logs).toEqual([['@livestore/schema:deprecated-event', { event: 'Old', reason: 'Use New' }]]);
48
+ });
49
+ test('logs field deprecation warning', () => {
50
+ const event = synced({
51
+ name: 'Ev',
52
+ schema: Schema.Struct({ old: Schema.optional(Schema.String).pipe(deprecated('Use new')) }),
53
+ });
54
+ run(logDeprecationWarnings(event, { old: 'x' }));
55
+ expect(logs).toEqual([['@livestore/schema:deprecated-field', { event: 'Ev', field: 'old', reason: 'Use new' }]]);
56
+ });
57
+ test('deduplicates event warnings', () => {
58
+ const event = synced({ name: 'Dup', schema: Schema.Struct({ id: Schema.String }), deprecated: 'x' });
59
+ run(logDeprecationWarnings(event, { id: '1' }));
60
+ run(logDeprecationWarnings(event, { id: '2' }));
61
+ expect(logs).toHaveLength(1);
62
+ });
63
+ test('deduplicates field warnings', () => {
64
+ const event = synced({
65
+ name: 'DupField',
66
+ schema: Schema.Struct({ old: Schema.optional(Schema.String).pipe(deprecated('x')) }),
67
+ });
68
+ run(logDeprecationWarnings(event, { old: 'a' }));
69
+ run(logDeprecationWarnings(event, { old: 'b' }));
70
+ expect(logs).toHaveLength(1);
71
+ });
72
+ test('no warning for non-deprecated event', () => {
73
+ const event = synced({ name: 'Normal', schema: Schema.Struct({ id: Schema.String }) });
74
+ run(logDeprecationWarnings(event, { id: '1' }));
75
+ expect(logs).toHaveLength(0);
76
+ });
77
+ test('no warning when deprecated field is undefined', () => {
78
+ const event = synced({
79
+ name: 'Unused',
80
+ schema: Schema.Struct({ old: Schema.optional(Schema.String).pipe(deprecated('x')) }),
81
+ });
82
+ run(logDeprecationWarnings(event, {}));
83
+ expect(logs).toHaveLength(0);
84
+ });
85
+ test('logs both event and field warnings', () => {
86
+ const event = synced({
87
+ name: 'Both',
88
+ schema: Schema.Struct({ old: Schema.optional(Schema.String).pipe(deprecated('F')) }),
89
+ deprecated: 'E',
90
+ });
91
+ run(logDeprecationWarnings(event, { old: 'x' }));
92
+ expect(logs).toHaveLength(2);
93
+ });
94
+ });
95
+ //# sourceMappingURL=deprecated.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deprecated.test.js","sourceRoot":"","sources":["../../../src/schema/EventDef/deprecated.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import type { Schema } from '@livestore/utils/effect';
2
+ import type { FactsCallback } from './facts.ts';
3
+ /**
4
+ * Core type representing an event definition in LiveStore.
5
+ *
6
+ * An EventDef defines the structure and behavior of an event type, including:
7
+ * - A unique name identifying the event type (conventionally versioned, e.g., `v1.TodoCreated`)
8
+ * - A schema for validating and encoding/decoding event arguments
9
+ * - Options controlling sync behavior and constraints
10
+ *
11
+ * EventDefs are callable - invoking them creates a partial event object suitable for `store.commit()`.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { Events } from '@livestore/livestore'
16
+ * import { Schema } from 'effect'
17
+ *
18
+ * const todoCreated = Events.synced({
19
+ * name: 'v1.TodoCreated',
20
+ * schema: Schema.Struct({
21
+ * id: Schema.String,
22
+ * text: Schema.String,
23
+ * }),
24
+ * })
25
+ *
26
+ * // Use the EventDef as a constructor
27
+ * store.commit(todoCreated({ id: 'abc', text: 'Buy milk' }))
28
+ * ```
29
+ */
30
+ export type EventDef<TName extends string, TType, TEncoded = TType, TDerived extends boolean = false> = {
31
+ /** Unique identifier for this event type. Conventionally versioned (e.g., `v1.TodoCreated`). */
32
+ name: TName;
33
+ /** Effect Schema used for validating and encoding/decoding event arguments. */
34
+ schema: Schema.Schema<TType, TEncoded>;
35
+ options: {
36
+ /**
37
+ * When true, the event is only synced within the same client's sessions (e.g., across tabs)
38
+ * but never sent to the sync backend. Useful for UI state like selected items or filters.
39
+ */
40
+ clientOnly: boolean;
41
+ /**
42
+ * Callback defining fact constraints for this event.
43
+ * @experimental This feature is not fully implemented yet.
44
+ */
45
+ facts: FactsCallback<TType> | undefined;
46
+ /** Whether this is a derived event. Derived events cannot have materializers. */
47
+ derived: TDerived;
48
+ /**
49
+ * Deprecation reason for this event. When set, a warning is logged at commit time.
50
+ */
51
+ deprecated: string | undefined;
52
+ };
53
+ /**
54
+ * Callable signature - creates a partial event with decoded arguments.
55
+ * The returned object can be passed directly to `store.commit()`.
56
+ */
57
+ (args: TType): {
58
+ name: TName;
59
+ args: TType;
60
+ };
61
+ /**
62
+ * Creates a partial event with pre-encoded arguments.
63
+ * Useful when working with already-serialized data.
64
+ */
65
+ encoded: (args: TEncoded) => {
66
+ name: TName;
67
+ args: TEncoded;
68
+ };
69
+ /** Type helper for accessing the event's shape with name and decoded args. */
70
+ readonly Event: {
71
+ name: TName;
72
+ args: TType;
73
+ };
74
+ };
75
+ export declare namespace EventDef {
76
+ /**
77
+ * Wildcard type matching any EventDef regardless of type parameters.
78
+ * Used as a type constraint in generic functions and collections.
79
+ */
80
+ type Any = EventDef<string, any, any, boolean>;
81
+ /**
82
+ * EventDef without the callable function signature.
83
+ * Used in contexts where only the metadata (name, schema, options) is needed,
84
+ * such as materializer definitions.
85
+ */
86
+ type AnyWithoutFn = Pick<Any, 'name' | 'schema' | 'options'>;
87
+ }
88
+ /**
89
+ * Container holding a Map of event definitions keyed by name.
90
+ * Used internally by LiveStoreSchema.
91
+ */
92
+ export type EventDefMap = {
93
+ map: Map<string, EventDef.Any>;
94
+ };
95
+ /**
96
+ * Plain object record of event definitions keyed by name.
97
+ * This is the typical shape when defining events in user code.
98
+ *
99
+ * @example
100
+ * ```ts
101
+ * const events = {
102
+ * todoCreated: Events.synced({ name: 'v1.TodoCreated', schema: ... }),
103
+ * todoDeleted: Events.synced({ name: 'v1.TodoDeleted', schema: ... }),
104
+ * } satisfies EventDefRecord
105
+ * ```
106
+ */
107
+ export type EventDefRecord = {
108
+ [name: string]: EventDef.Any;
109
+ };
110
+ //# sourceMappingURL=event-def.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-def.d.ts","sourceRoot":"","sources":["../../../src/schema/EventDef/event-def.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,IAAI;IACtG,gGAAgG;IAChG,IAAI,EAAE,KAAK,CAAA;IAEX,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAEtC,OAAO,EAAE;QACP;;;WAGG;QACH,UAAU,EAAE,OAAO,CAAA;QAEnB;;;WAGG;QACH,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;QAEvC,iFAAiF;QACjF,OAAO,EAAE,QAAQ,CAAA;QAEjB;;WAEG;QACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;KAC/B,CAAA;IAED;;;OAGG;IACH,CACE,IAAI,EAAE,KAAK,GACV;QACD,IAAI,EAAE,KAAK,CAAA;QACX,IAAI,EAAE,KAAK,CAAA;KACZ,CAAA;IAED;;;OAGG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK;QAC3B,IAAI,EAAE,KAAK,CAAA;QACX,IAAI,EAAE,QAAQ,CAAA;KACf,CAAA;IAED,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE;QACd,IAAI,EAAE,KAAK,CAAA;QACX,IAAI,EAAE,KAAK,CAAA;KACZ,CAAA;CACF,CAAA;AAED,yBAAiB,QAAQ,CAAC;IACxB;;;OAGG;IACH,KAAY,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;IAErD;;;;OAIG;IACH,KAAY,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAA;CACpE;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;CAC/B,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAA;CAC7B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=event-def.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-def.js","sourceRoot":"","sources":["../../../src/schema/EventDef/event-def.ts"],"names":[],"mappings":""}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Facts System for Event Constraints (Experimental)
3
+ *
4
+ * The facts system enables defining constraints and dependencies between events.
5
+ * Facts are key-value pairs that events can read, set, or require, allowing
6
+ * LiveStore to understand event relationships for:
7
+ * - History constraints (ordering requirements)
8
+ * - Event compaction (which events can be safely merged)
9
+ * - Conflict detection during sync
10
+ *
11
+ * @experimental This system is not fully implemented yet.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const facts = defineFacts({
16
+ * todoExists: (id: string) => [`todo:${id}`, true],
17
+ * userOwns: (userId: string, todoId: string) => [`owns:${userId}:${todoId}`, true],
18
+ * })
19
+ *
20
+ * const todoCreated = Events.synced({
21
+ * name: 'v1.TodoCreated',
22
+ * schema: Schema.Struct({ id: Schema.String, userId: Schema.String }),
23
+ * facts: ({ id, userId }) => ({
24
+ * modify: { set: [facts.todoExists(id), facts.userOwns(userId, id)] },
25
+ * require: [],
26
+ * }),
27
+ * })
28
+ * ```
29
+ * @module
30
+ */
31
+ /** String key identifying a fact (e.g., `"todo:abc123"` or `"user:owner:xyz"`). */
32
+ export type EventDefKey = string;
33
+ /** String identifier for a fact type. */
34
+ export type EventDefFact = string;
35
+ /** Immutable map of fact keys to their current values. */
36
+ export type EventDefFacts = ReadonlyMap<string, any>;
37
+ /**
38
+ * Groups of facts that an event interacts with.
39
+ * Used internally to track how events modify and depend on facts.
40
+ */
41
+ export type EventDefFactsGroup = {
42
+ /** Facts this event sets to a new value. */
43
+ modifySet: EventDefFacts;
44
+ /** Facts this event removes/unsets. */
45
+ modifyUnset: EventDefFacts;
46
+ /**
47
+ * Facts this event requires to exist with specific values.
48
+ * Events on independent dependency branches are commutative,
49
+ * which can facilitate more prioritized syncing.
50
+ */
51
+ depRequire: EventDefFacts;
52
+ /** Facts this event reads (but doesn't require). */
53
+ depRead: EventDefFacts;
54
+ };
55
+ /** Mutable snapshot of facts state at a point in time. */
56
+ export type EventDefFactsSnapshot = Map<string, any>;
57
+ /**
58
+ * Input format for specifying a fact.
59
+ * Either a simple key string (value defaults to `true`) or a `[key, value]` tuple.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * // Simple key (value = true)
64
+ * const fact1: EventDefFactInput = 'todo:abc123'
65
+ *
66
+ * // Key-value tuple
67
+ * const fact2: EventDefFactInput = ['todo:abc123', { status: 'active' }]
68
+ * ```
69
+ */
70
+ export type EventDefFactInput = string | readonly [string, any];
71
+ /**
72
+ * Callback function that defines how an event interacts with the facts system.
73
+ * Called during event processing to determine fact constraints.
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * const factsCallback: FactsCallback<{ id: string }> = (args, currentFacts) => ({
78
+ * modify: {
79
+ * set: [`item:${args.id}`], // Create/update this fact
80
+ * unset: [], // No facts to remove
81
+ * },
82
+ * require: currentFacts.has('initialized') ? [] : ['initialized'],
83
+ * })
84
+ * ```
85
+ */
86
+ export type FactsCallback<TTo> = (args: TTo, currentFacts: EventDefFacts) => {
87
+ modify: {
88
+ /** Facts to set (create or update). */
89
+ set: Iterable<EventDefFactInput>;
90
+ /** Facts to unset (remove). */
91
+ unset: Iterable<EventDefFactInput>;
92
+ };
93
+ /** Facts that must exist with specific values for this event to be valid. */
94
+ require: Iterable<EventDefFactInput>;
95
+ };
96
+ /**
97
+ * Helper to define a typed record of fact constructors.
98
+ * Returns the input unchanged but provides type inference.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * const facts = defineFacts({
103
+ * // Simple fact (value = true)
104
+ * initialized: 'system:initialized',
105
+ *
106
+ * // Parameterized fact constructor
107
+ * todoExists: (id: string) => [`todo:${id}`, true] as const,
108
+ *
109
+ * // Fact with complex value
110
+ * todoStatus: (id: string, status: string) => [`todo:${id}:status`, status] as const,
111
+ * })
112
+ *
113
+ * // Usage
114
+ * facts.todoExists('abc') // => ['todo:abc', true]
115
+ * ```
116
+ */
117
+ export declare const defineFacts: <TRecord extends Record<string, EventDefFactInput | ((...args: any[]) => EventDefFactInput)>>(record: TRecord) => TRecord;
118
+ //# sourceMappingURL=facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../../src/schema/EventDef/facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,mFAAmF;AACnF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,yCAAyC;AACzC,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AAEjC,0DAA0D;AAC1D,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAEpD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,4CAA4C;IAC5C,SAAS,EAAE,aAAa,CAAA;IAExB,uCAAuC;IACvC,WAAW,EAAE,aAAa,CAAA;IAE1B;;;;OAIG;IACH,UAAU,EAAE,aAAa,CAAA;IAEzB,oDAAoD;IACpD,OAAO,EAAE,aAAa,CAAA;CACvB,CAAA;AAED,0DAA0D;AAC1D,MAAM,MAAM,qBAAqB,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAE/D;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,aAAa,CAAC,GAAG,IAAI,CAC/B,IAAI,EAAE,GAAG,EACT,YAAY,EAAE,aAAa,KACxB;IACH,MAAM,EAAE;QACN,uCAAuC;QACvC,GAAG,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;QAChC,+BAA+B;QAC/B,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;KACnC,CAAA;IACD,6EAA6E;IAC7E,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAA;CACrC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,iBAAiB,CAAC,CAAC,EAE3F,QAAQ,OAAO,KACd,OAAiB,CAAA"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Facts System for Event Constraints (Experimental)
3
+ *
4
+ * The facts system enables defining constraints and dependencies between events.
5
+ * Facts are key-value pairs that events can read, set, or require, allowing
6
+ * LiveStore to understand event relationships for:
7
+ * - History constraints (ordering requirements)
8
+ * - Event compaction (which events can be safely merged)
9
+ * - Conflict detection during sync
10
+ *
11
+ * @experimental This system is not fully implemented yet.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const facts = defineFacts({
16
+ * todoExists: (id: string) => [`todo:${id}`, true],
17
+ * userOwns: (userId: string, todoId: string) => [`owns:${userId}:${todoId}`, true],
18
+ * })
19
+ *
20
+ * const todoCreated = Events.synced({
21
+ * name: 'v1.TodoCreated',
22
+ * schema: Schema.Struct({ id: Schema.String, userId: Schema.String }),
23
+ * facts: ({ id, userId }) => ({
24
+ * modify: { set: [facts.todoExists(id), facts.userOwns(userId, id)] },
25
+ * require: [],
26
+ * }),
27
+ * })
28
+ * ```
29
+ * @module
30
+ */
31
+ /**
32
+ * Helper to define a typed record of fact constructors.
33
+ * Returns the input unchanged but provides type inference.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * const facts = defineFacts({
38
+ * // Simple fact (value = true)
39
+ * initialized: 'system:initialized',
40
+ *
41
+ * // Parameterized fact constructor
42
+ * todoExists: (id: string) => [`todo:${id}`, true] as const,
43
+ *
44
+ * // Fact with complex value
45
+ * todoStatus: (id: string, status: string) => [`todo:${id}:status`, status] as const,
46
+ * })
47
+ *
48
+ * // Usage
49
+ * facts.todoExists('abc') // => ['todo:abc', true]
50
+ * ```
51
+ */
52
+ export const defineFacts = (record) => record;
53
+ //# sourceMappingURL=facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../../src/schema/EventDef/facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAgFH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAGzB,MAAe,EACN,EAAE,CAAC,MAAM,CAAA"}