@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
@@ -1,33 +1,15 @@
1
- import type { EventDefFactsGroup } from '../../schema/EventDef.ts'
2
- import * as EventSequenceNumber from '../../schema/EventSequenceNumber.ts'
3
- import { graphology } from './graphology_.ts'
1
+ import { shouldNeverHappen } from '@livestore/utils'
2
+ import { Graph } from '@livestore/utils/effect'
3
+
4
+ import type { EventDefFactsGroup } from '../../schema/EventDef/mod.ts'
5
+ import * as EventSequenceNumber from '../../schema/EventSequenceNumber/mod.ts'
4
6
 
5
7
  export const connectionTypeOptions = ['parent', 'facts'] as const
6
8
  export type ConnectionType = (typeof connectionTypeOptions)[number]
7
9
 
8
- /**
9
- * Eventlog represented as a multi-DAG including edges for
10
- * - total-order (parent) relationships
11
- * - dependency (requires/reads facts) relationships
12
- */
13
- export type HistoryDag = graphology.IGraph<HistoryDagNode, { type: ConnectionType }>
14
-
15
- export const emptyHistoryDag = (): HistoryDag =>
16
- new graphology.Graph({
17
- allowSelfLoops: false,
18
- multi: true,
19
- type: 'directed',
20
- })
21
-
22
- // TODO consider making `ROOT_ID` parent to itself
23
- export const rootParentNum = EventSequenceNumber.make({
24
- global: EventSequenceNumber.ROOT.global - 1,
25
- client: EventSequenceNumber.clientDefault,
26
- })
27
-
28
10
  export type HistoryDagNode = {
29
- seqNum: EventSequenceNumber.EventSequenceNumber
30
- parentSeqNum: EventSequenceNumber.EventSequenceNumber
11
+ seqNum: EventSequenceNumber.Client.Composite
12
+ parentSeqNum: EventSequenceNumber.Client.Composite
31
13
  name: string
32
14
  args: any
33
15
  /** Facts are being used for conflict detection and history compaction */
@@ -37,8 +19,280 @@ export type HistoryDagNode = {
37
19
  sessionId: string | undefined
38
20
  }
39
21
 
22
+ type HistoryDagEdgeAttributes = { type: ConnectionType }
23
+
24
+ type HistoryDagEdgeEntry = {
25
+ edge: Graph.EdgeIndex
26
+ source: string
27
+ target: string
28
+ attributes: HistoryDagEdgeAttributes
29
+ }
30
+
31
+ type HistoryDagOptions = {
32
+ allowSelfLoops: boolean
33
+ }
34
+
35
+ const defaultOptions: HistoryDagOptions = {
36
+ allowSelfLoops: false,
37
+ }
38
+
39
+ const cloneFactsGroup = (factsGroup: EventDefFactsGroup): EventDefFactsGroup => ({
40
+ depRead: new Map(factsGroup.depRead),
41
+ depRequire: new Map(factsGroup.depRequire),
42
+ modifySet: new Map(factsGroup.modifySet),
43
+ modifyUnset: new Map(factsGroup.modifyUnset),
44
+ })
45
+
46
+ const cloneHistoryDagNode = (node: HistoryDagNode): HistoryDagNode => ({
47
+ ...node,
48
+ // Copy the event sequence numbers to avoid accidental aliasing
49
+ parentSeqNum: { ...node.parentSeqNum },
50
+ seqNum: { ...node.seqNum },
51
+ // Facts are represented via maps which should not be shared across DAG copies
52
+ factsGroup: cloneFactsGroup(node.factsGroup),
53
+ })
54
+
55
+ /**
56
+ * Mutable DAG wrapper that retains the previous string-based node ids API
57
+ * while delegating storage and algorithms to Effect's graph module.
58
+ */
59
+ export class HistoryDag {
60
+ private readonly options: HistoryDagOptions
61
+ private readonly idToIndex: Map<string, Graph.NodeIndex>
62
+ private readonly indexToId: Map<Graph.NodeIndex, string>
63
+ private readonly graph: Graph.MutableDirectedGraph<HistoryDagNode, HistoryDagEdgeAttributes>
64
+
65
+ private constructor({
66
+ graph,
67
+ idToIndex,
68
+ indexToId,
69
+ options,
70
+ }: {
71
+ graph: Graph.MutableDirectedGraph<HistoryDagNode, HistoryDagEdgeAttributes>
72
+ idToIndex?: Map<string, Graph.NodeIndex>
73
+ indexToId?: Map<Graph.NodeIndex, string>
74
+ options?: Partial<HistoryDagOptions>
75
+ }) {
76
+ this.graph = graph
77
+ this.options = { ...defaultOptions, ...options }
78
+ this.idToIndex = idToIndex !== undefined ? new Map(idToIndex) : new Map()
79
+ this.indexToId = indexToId !== undefined ? new Map(indexToId) : new Map()
80
+ }
81
+
82
+ static create(options?: Partial<HistoryDagOptions>): HistoryDag {
83
+ const graph = Graph.beginMutation(Graph.directed<HistoryDagNode, HistoryDagEdgeAttributes>())
84
+ return options !== undefined ? new HistoryDag({ graph, options }) : new HistoryDag({ graph })
85
+ }
86
+
87
+ copy(): HistoryDag {
88
+ const clone = HistoryDag.create(this.options)
89
+
90
+ for (const [id, index] of this.idToIndex) {
91
+ const node = this.graph.nodes.get(index) ?? shouldNeverHappen(`HistoryDag.copy missing node for ${id}`)
92
+ clone.addNode(id, cloneHistoryDagNode(node))
93
+ }
94
+
95
+ for (const edge of this.graph.edges.values()) {
96
+ const sourceId = this.indexToId.get(edge.source) ?? shouldNeverHappen('HistoryDag.copy missing source id')
97
+ const targetId = this.indexToId.get(edge.target) ?? shouldNeverHappen('HistoryDag.copy missing target id')
98
+ clone.addEdge(sourceId, targetId, { ...edge.data })
99
+ }
100
+
101
+ return clone
102
+ }
103
+
104
+ topologicalNodeIds(): Array<string> {
105
+ const walker = Graph.topo(this.graph)
106
+ const indices = Array.from(Graph.indices(walker))
107
+ return indices.map(
108
+ (index) => this.indexToId.get(index) ?? shouldNeverHappen(`Missing node id for index ${String(index)}`),
109
+ )
110
+ }
111
+
112
+ addNode(id: string, attributes: HistoryDagNode): void {
113
+ if (this.idToIndex.has(id) === true) {
114
+ shouldNeverHappen(`HistoryDag node ${id} already exists`)
115
+ }
116
+
117
+ const nodeIndex = Graph.addNode(this.graph, attributes)
118
+ this.idToIndex.set(id, nodeIndex)
119
+ this.indexToId.set(nodeIndex, id)
120
+ }
121
+
122
+ hasNode(id: string): boolean {
123
+ return this.idToIndex.has(id)
124
+ }
125
+
126
+ getNodeAttributes(id: string): HistoryDagNode {
127
+ const index = this.idToIndex.get(id)
128
+ if (index === undefined) {
129
+ return shouldNeverHappen(`HistoryDag node ${id} not found`)
130
+ }
131
+
132
+ const node = this.graph.nodes.get(index)
133
+ return node ?? shouldNeverHappen(`HistoryDag node data missing for ${id}`)
134
+ }
135
+
136
+ nodes(): IterableIterator<string> {
137
+ return this.idToIndex.keys()
138
+ }
139
+
140
+ nodeEntries(): IterableIterator<{ key: string; attributes: HistoryDagNode }> {
141
+ return function* (this: HistoryDag) {
142
+ for (const [id, index] of this.idToIndex) {
143
+ const attributes = this.graph.nodes.get(index) ?? shouldNeverHappen(`HistoryDag node data missing for ${id}`)
144
+ yield { key: id, attributes }
145
+ }
146
+ }.call(this)
147
+ }
148
+
149
+ addEdge(sourceId: string, targetId: string, attributes: HistoryDagEdgeAttributes): Graph.EdgeIndex {
150
+ if (this.options.allowSelfLoops === false && sourceId === targetId) {
151
+ return shouldNeverHappen('HistoryDag self-loops are disabled')
152
+ }
153
+
154
+ const sourceIndex = this.idToIndex.get(sourceId)
155
+ const targetIndex = this.idToIndex.get(targetId)
156
+
157
+ if (sourceIndex === undefined || targetIndex === undefined) {
158
+ return shouldNeverHappen(`HistoryDag edge references unknown nodes: ${sourceId} -> ${targetId}`)
159
+ }
160
+
161
+ return Graph.addEdge(this.graph, sourceIndex, targetIndex, attributes)
162
+ }
163
+
164
+ edges(sourceId: string, targetId: string): Array<Graph.EdgeIndex> {
165
+ const sourceIndex = this.idToIndex.get(sourceId)
166
+ const targetIndex = this.idToIndex.get(targetId)
167
+
168
+ if (sourceIndex === undefined || targetIndex === undefined) {
169
+ return []
170
+ }
171
+
172
+ const adjacency = this.graph.adjacency.get(sourceIndex)
173
+ if (adjacency === undefined) {
174
+ return []
175
+ }
176
+
177
+ return adjacency.filter((edgeIndex) => {
178
+ const edge = this.graph.edges.get(edgeIndex)
179
+ return edge !== undefined && edge.target === targetIndex
180
+ })
181
+ }
182
+
183
+ inEdges(id: string): Array<Graph.EdgeIndex> {
184
+ const index = this.idToIndex.get(id)
185
+ if (index === undefined) {
186
+ return []
187
+ }
188
+ const incoming = this.graph.reverseAdjacency.get(index)
189
+ return incoming !== undefined ? [...incoming] : []
190
+ }
191
+
192
+ outboundEdgeEntries(id: string): Array<HistoryDagEdgeEntry> {
193
+ const index = this.idToIndex.get(id)
194
+ if (index === undefined) {
195
+ return []
196
+ }
197
+
198
+ const adjacency = this.graph.adjacency.get(index)
199
+ if (adjacency === undefined) {
200
+ return []
201
+ }
202
+
203
+ return adjacency
204
+ .map((edgeIndex) => this.edgeEntry(edgeIndex))
205
+ .filter((entry): entry is HistoryDagEdgeEntry => entry !== undefined)
206
+ }
207
+
208
+ inboundEdgeEntries(id: string): Array<HistoryDagEdgeEntry> {
209
+ const index = this.idToIndex.get(id)
210
+ if (index === undefined) {
211
+ return []
212
+ }
213
+
214
+ const adjacency = this.graph.reverseAdjacency.get(index)
215
+ if (adjacency === undefined) {
216
+ return []
217
+ }
218
+
219
+ return adjacency
220
+ .map((edgeIndex) => this.edgeEntry(edgeIndex))
221
+ .filter((entry): entry is HistoryDagEdgeEntry => entry !== undefined)
222
+ }
223
+
224
+ getEdgeAttributes(edgeIndex: Graph.EdgeIndex): HistoryDagEdgeAttributes {
225
+ const edge = this.graph.edges.get(edgeIndex)
226
+ return edge?.data ?? shouldNeverHappen(`HistoryDag edge ${edgeIndex} not found`)
227
+ }
228
+
229
+ getEdgeAttribute<TKey extends keyof HistoryDagEdgeAttributes>(
230
+ edgeIndex: Graph.EdgeIndex,
231
+ key: TKey,
232
+ ): HistoryDagEdgeAttributes[TKey] {
233
+ const attributes = this.getEdgeAttributes(edgeIndex)
234
+ return attributes[key]
235
+ }
236
+
237
+ source(edgeIndex: Graph.EdgeIndex): string {
238
+ const edge = this.graph.edges.get(edgeIndex)
239
+ const sourceId = edge !== undefined ? this.indexToId.get(edge.source) : undefined
240
+ return sourceId ?? shouldNeverHappen(`HistoryDag edge ${edgeIndex} missing source`)
241
+ }
242
+
243
+ target(edgeIndex: Graph.EdgeIndex): string {
244
+ const edge = this.graph.edges.get(edgeIndex)
245
+ const targetId = edge !== undefined ? this.indexToId.get(edge.target) : undefined
246
+ return targetId ?? shouldNeverHappen(`HistoryDag edge ${edgeIndex} missing target`)
247
+ }
248
+
249
+ dropNode(id: string): void {
250
+ const index = this.idToIndex.get(id)
251
+ if (index === undefined) {
252
+ return
253
+ }
254
+
255
+ Graph.removeNode(this.graph, index)
256
+ this.idToIndex.delete(id)
257
+ this.indexToId.delete(index)
258
+ }
259
+
260
+ get size(): number {
261
+ return this.idToIndex.size
262
+ }
263
+
264
+ private edgeEntry(edgeIndex: Graph.EdgeIndex): HistoryDagEdgeEntry | undefined {
265
+ const edge = this.graph.edges.get(edgeIndex)
266
+ if (edge === undefined) {
267
+ return undefined
268
+ }
269
+
270
+ const source = this.indexToId.get(edge.source)
271
+ const target = this.indexToId.get(edge.target)
272
+
273
+ if (source === undefined || target === undefined) {
274
+ return undefined
275
+ }
276
+
277
+ return {
278
+ edge: edgeIndex,
279
+ source,
280
+ target,
281
+ attributes: edge.data,
282
+ }
283
+ }
284
+ }
285
+
286
+ export const emptyHistoryDag = (): HistoryDag => HistoryDag.create({ allowSelfLoops: false })
287
+
288
+ // TODO consider making `ROOT_ID` parent to itself
289
+ export const rootParentNum = EventSequenceNumber.Client.Composite.make({
290
+ global: EventSequenceNumber.Client.ROOT.global - 1,
291
+ client: EventSequenceNumber.Client.DEFAULT,
292
+ })
293
+
40
294
  export const rootEventNode: HistoryDagNode = {
41
- seqNum: EventSequenceNumber.ROOT,
295
+ seqNum: EventSequenceNumber.Client.ROOT,
42
296
  parentSeqNum: rootParentNum,
43
297
  // unused below
44
298
  name: '__Root__',
@@ -1,4 +1,4 @@
1
- import * as EventSequenceNumber from '../../schema/EventSequenceNumber.ts'
1
+ import * as EventSequenceNumber from '../../schema/EventSequenceNumber/mod.ts'
2
2
  import { factsToString, validateFacts } from './facts.ts'
3
3
  import { emptyHistoryDag, type HistoryDagNode, rootParentNum } from './history-dag-common.ts'
4
4
 
@@ -19,14 +19,18 @@ export const historyDagFromNodes = (dagNodes: HistoryDagNode[], options?: { skip
19
19
  const dag = emptyHistoryDag()
20
20
 
21
21
  dagNodes.forEach((node) => {
22
- dag.addNode(EventSequenceNumber.toString(node.seqNum), node)
22
+ dag.addNode(EventSequenceNumber.Client.toString(node.seqNum), node)
23
23
  })
24
24
 
25
25
  dagNodes.forEach((node) => {
26
- if (EventSequenceNumber.toString(node.parentSeqNum) !== EventSequenceNumber.toString(rootParentNum)) {
27
- dag.addEdge(EventSequenceNumber.toString(node.parentSeqNum), EventSequenceNumber.toString(node.seqNum), {
28
- type: 'parent',
29
- })
26
+ if (EventSequenceNumber.Client.toString(node.parentSeqNum) !== EventSequenceNumber.Client.toString(rootParentNum)) {
27
+ dag.addEdge(
28
+ EventSequenceNumber.Client.toString(node.parentSeqNum),
29
+ EventSequenceNumber.Client.toString(node.seqNum),
30
+ {
31
+ type: 'parent',
32
+ },
33
+ )
30
34
  }
31
35
  })
32
36
 
@@ -35,16 +39,16 @@ export const historyDagFromNodes = (dagNodes: HistoryDagNode[], options?: { skip
35
39
  for (const factKey of factKeys) {
36
40
  // Find the first ancestor node with a matching fact key (via modifySet or modifyUnset) by traversing the graph backwards via the parent edges
37
41
  const depNode = (() => {
38
- let currentSeqNumStr = EventSequenceNumber.toString(node.seqNum)
42
+ let currentSeqNumStr = EventSequenceNumber.Client.toString(node.seqNum)
39
43
 
40
- while (currentSeqNumStr !== EventSequenceNumber.toString(rootParentNum)) {
44
+ while (currentSeqNumStr !== EventSequenceNumber.Client.toString(rootParentNum)) {
41
45
  const parentEdge = dag.inEdges(currentSeqNumStr).find((e) => dag.getEdgeAttribute(e, 'type') === 'parent')
42
- if (!parentEdge) return null
46
+ if (parentEdge == null) return null
43
47
 
44
48
  const parentSeqNumStr = dag.source(parentEdge)
45
49
  const parentNode = dag.getNodeAttributes(parentSeqNumStr)
46
50
 
47
- if (parentNode.factsGroup.modifySet.has(factKey) || parentNode.factsGroup.modifyUnset.has(factKey)) {
51
+ if (parentNode.factsGroup.modifySet.has(factKey) === true || parentNode.factsGroup.modifyUnset.has(factKey) === true) {
48
52
  return parentNode
49
53
  }
50
54
 
@@ -54,9 +58,9 @@ export const historyDagFromNodes = (dagNodes: HistoryDagNode[], options?: { skip
54
58
  return null
55
59
  })()
56
60
 
57
- if (depNode) {
58
- const depNodeIdStr = EventSequenceNumber.toString(depNode.seqNum)
59
- const nodeIdStr = EventSequenceNumber.toString(node.seqNum)
61
+ if (depNode !== null) {
62
+ const depNodeIdStr = EventSequenceNumber.Client.toString(depNode.seqNum)
63
+ const nodeIdStr = EventSequenceNumber.Client.toString(node.seqNum)
60
64
  if (dag.edges(depNodeIdStr, nodeIdStr).filter((e) => dag.getEdgeAttributes(e).type === 'facts').length === 0) {
61
65
  dag.addEdge(depNodeIdStr, nodeIdStr, { type: 'facts' })
62
66
  }
@@ -1,6 +1,6 @@
1
- import type { EventDef, EventDefFactsSnapshot } from '../../schema/EventDef.ts'
2
- import * as EventSequenceNumber from '../../schema/EventSequenceNumber.ts'
3
- import type * as LiveStoreEvent from '../../schema/LiveStoreEvent.ts'
1
+ import type { EventDef, EventDefFactsSnapshot } from '../../schema/EventDef/mod.ts'
2
+ import * as EventSequenceNumber from '../../schema/EventSequenceNumber/mod.ts'
3
+ import type * as LiveStoreEvent from '../../schema/LiveStoreEvent/mod.ts'
4
4
  import {
5
5
  applyFactGroups,
6
6
  type FactValidationResult,
@@ -19,19 +19,19 @@ export type RebaseInput = {
19
19
  newRemoteEvents: RebaseEventWithConflict[]
20
20
  pendingLocalEvents: RebaseEventWithConflict[]
21
21
  validate: (args: {
22
- rebasedLocalEvents: LiveStoreEvent.PartialAnyDecoded[]
22
+ rebasedLocalEvents: LiveStoreEvent.Input.Decoded[]
23
23
  eventDefs: Record<string, EventDef.Any>
24
24
  }) => FactValidationResult
25
25
  }
26
26
 
27
27
  export type RebaseOutput = {
28
- rebasedLocalEvents: LiveStoreEvent.PartialAnyDecoded[]
28
+ rebasedLocalEvents: LiveStoreEvent.Input.Decoded[]
29
29
  }
30
30
 
31
31
  export type RebaseFn = (input: RebaseInput) => RebaseOutput
32
32
 
33
33
  export const defaultRebaseFn: RebaseFn = ({ pendingLocalEvents }) => {
34
- if (pendingLocalEvents.some((_) => _.conflictType === 'missing-requirement')) {
34
+ if (pendingLocalEvents.some((_) => _.conflictType === 'missing-requirement') === true) {
35
35
  throw new Error('missing-requirement conflicts must be resolved before rebasing')
36
36
  }
37
37
 
@@ -53,7 +53,7 @@ export const rebaseEvents = ({
53
53
  currentFactsSnapshot: EventDefFactsSnapshot
54
54
  clientId: string
55
55
  sessionId: string
56
- }): ReadonlyArray<LiveStoreEvent.AnyDecoded> => {
56
+ }): ReadonlyArray<LiveStoreEvent.Client.Decoded> => {
57
57
  const initialSnapshot = new Map(currentFactsSnapshot)
58
58
  applyFactGroups(
59
59
  newRemoteEvents.map((event) => event.factsGroup),
@@ -94,18 +94,18 @@ export const rebaseEvents = ({
94
94
  return rebasedLocalEvents.map(
95
95
  (event, index) =>
96
96
  ({
97
- seqNum: EventSequenceNumber.make({
97
+ seqNum: EventSequenceNumber.Client.Composite.make({
98
98
  global: headGlobalId + index + 1,
99
- client: EventSequenceNumber.clientDefault,
99
+ client: EventSequenceNumber.Client.DEFAULT,
100
100
  }),
101
- parentSeqNum: EventSequenceNumber.make({
101
+ parentSeqNum: EventSequenceNumber.Client.Composite.make({
102
102
  global: headGlobalId + index,
103
- client: EventSequenceNumber.clientDefault,
103
+ client: EventSequenceNumber.Client.DEFAULT,
104
104
  }),
105
105
  name: event.name,
106
106
  args: event.args,
107
107
  clientId,
108
108
  sessionId,
109
- }) satisfies LiveStoreEvent.AnyDecoded,
109
+ }) satisfies LiveStoreEvent.Client.Decoded,
110
110
  )
111
111
  }
@@ -1,6 +1,7 @@
1
+ import { describe, expect, it } from 'vitest'
2
+
1
3
  import { defineEvent } from '@livestore/common/schema'
2
4
  import { Schema } from '@livestore/utils/effect'
3
- import { describe, expect, it } from 'vitest'
4
5
 
5
6
  import { compactEvents } from '../compact-events.ts'
6
7
  import { historyDagFromNodes } from '../history-dag.ts'
@@ -33,7 +34,7 @@ const eventDefs = {
33
34
  schema: Schema.Struct({ value: Schema.Number }),
34
35
  facts: ({ value }, currentFacts) => ({
35
36
  modify: {
36
- set: value === 0 || currentFacts.has(facts.multiplyByZero) ? [facts.multiplyByZero] : [],
37
+ set: value === 0 || currentFacts.has(facts.multiplyByZero) === true ? [facts.multiplyByZero] : [],
37
38
  unset: value === 0 ? [] : [facts.multiplyByZero],
38
39
  },
39
40
  }),
@@ -1,10 +1,11 @@
1
- import type { EventDefFacts } from '@livestore/common/schema'
2
1
  import { describe, expect, it } from 'vitest'
3
2
 
3
+ import type { EventDefFacts } from '@livestore/common/schema'
4
+
4
5
  import { compactEvents } from '../compact-events.ts'
5
- import { historyDagFromNodes } from '../history-dag.ts'
6
6
  import type { HistoryDagNode } from '../history-dag-common.ts'
7
7
  import { EMPTY_FACT_VALUE } from '../history-dag-common.ts'
8
+ import { historyDagFromNodes } from '../history-dag.ts'
8
9
  import { events as eventDefs, printEvent, toEventNodes } from './event-fixtures.ts'
9
10
 
10
11
  const customStringify = (value: any): string => {
@@ -19,7 +20,7 @@ const customStringify = (value: any): string => {
19
20
  if (type === 'number' || type === 'boolean') {
20
21
  return String(value)
21
22
  }
22
- if (Array.isArray(value)) {
23
+ if (Array.isArray(value) === true) {
23
24
  const elements = value.map((el) => customStringify(el))
24
25
  return `[${elements.join(', ')}]`
25
26
  }
@@ -1,16 +1,16 @@
1
1
  import { Schema } from '@livestore/utils/effect'
2
2
 
3
- import type { EventDef } from '../../../schema/EventDef.ts'
4
- import { defineEvent, defineFacts } from '../../../schema/EventDef.ts'
5
- import * as EventSequenceNumber from '../../../schema/EventSequenceNumber.ts'
3
+ import type { EventDef } from '../../../schema/EventDef/mod.ts'
4
+ import { defineEvent, defineFacts } from '../../../schema/EventDef/mod.ts'
5
+ import * as EventSequenceNumber from '../../../schema/EventSequenceNumber/mod.ts'
6
6
  import { factsSnapshotForDag, getFactsGroupForEventArgs } from '../facts.ts'
7
- import { historyDagFromNodes } from '../history-dag.ts'
8
7
  import type { HistoryDagNode } from '../history-dag-common.ts'
9
8
  import { rootEventNode } from '../history-dag-common.ts'
9
+ import { historyDagFromNodes } from '../history-dag.ts'
10
10
 
11
11
  export const printEvent = ({ seqNum, parentSeqNum, factsGroup, ...rest }: HistoryDagNode) => ({
12
- seqNum: EventSequenceNumber.toString(seqNum),
13
- parentSeqNum: EventSequenceNumber.toString(parentSeqNum),
12
+ seqNum: EventSequenceNumber.Client.toString(seqNum),
13
+ parentSeqNum: EventSequenceNumber.Client.toString(parentSeqNum),
14
14
  ...rest,
15
15
  facts: factsGroup,
16
16
  })
@@ -45,7 +45,7 @@ export const events = {
45
45
  // {
46
46
  facts: ({ id }, currentFacts) =>
47
47
  // TODO enable an API along the lines of `map.has(key, value)`
48
- currentFacts.has(facts.todoExists(id)) && currentFacts.get(facts.todoIsWriteable(id, true)[0]) === false
48
+ currentFacts.has(facts.todoExists(id)) === true && currentFacts.get(facts.todoIsWriteable(id, true)[0]) === false
49
49
  ? { require: [facts.todoExists(id), facts.todoIsWriteable(id, true)] }
50
50
  : { modify: { set: [facts.todoExists(id), facts.todoIsWriteable(id, true), facts.todoTextUpdated(id)] } },
51
51
  }),
@@ -140,11 +140,11 @@ export const toEventNodes = (
140
140
  ): HistoryDagNode[] => {
141
141
  const nodesAcc: HistoryDagNode[] = [rootEventNode]
142
142
 
143
- let currentEventSequenceNumber: EventSequenceNumber.EventSequenceNumber = EventSequenceNumber.ROOT
143
+ let currentEventSequenceNumber: EventSequenceNumber.Client.Composite = EventSequenceNumber.Client.ROOT
144
144
 
145
145
  const eventNodes = partialEvents.map((partialEvent) => {
146
146
  const eventDef = eventDefs[partialEvent.name]!
147
- const eventNum = EventSequenceNumber.nextPair({
147
+ const eventNum = EventSequenceNumber.Client.nextPair({
148
148
  seqNum: currentEventSequenceNumber,
149
149
  isClient: eventDef.options.clientOnly,
150
150
  }).seqNum
@@ -219,18 +219,18 @@ export const toEventNodes = (
219
219
  return eventNodes
220
220
  }
221
221
 
222
- const getParentNum = (eventNum: EventSequenceNumber.EventSequenceNumber): EventSequenceNumber.EventSequenceNumber => {
222
+ const getParentNum = (eventNum: EventSequenceNumber.Client.Composite): EventSequenceNumber.Client.Composite => {
223
223
  const globalParentNum = eventNum.global
224
224
  const clientParentNum = eventNum.client - 1
225
225
 
226
226
  if (clientParentNum < 0) {
227
- return EventSequenceNumber.make({
227
+ return EventSequenceNumber.Client.Composite.make({
228
228
  global: globalParentNum - 1,
229
- client: EventSequenceNumber.clientDefault,
229
+ client: EventSequenceNumber.Client.DEFAULT,
230
230
  })
231
231
  }
232
232
 
233
- return EventSequenceNumber.make({
233
+ return EventSequenceNumber.Client.Composite.make({
234
234
  global: globalParentNum,
235
235
  client: clientParentNum,
236
236
  })
@@ -1,11 +1,12 @@
1
1
  import { Effect, KeyValueStore, Option } from '@livestore/utils/effect'
2
- import { UnexpectedError } from '../errors.ts'
2
+
3
+ import { UnknownError } from '../errors.ts'
3
4
 
4
5
  export const makeBackendIdHelper = Effect.gen(function* () {
5
6
  const kv = yield* KeyValueStore.KeyValueStore
6
7
 
7
8
  const backendIdKey = `backendId`
8
- const backendIdRef = { current: yield* kv.get(backendIdKey).pipe(UnexpectedError.mapToUnexpectedError) }
9
+ const backendIdRef = { current: yield* kv.get(backendIdKey).pipe(UnknownError.mapToUnknownError) }
9
10
 
10
11
  const setBackendId = (backendId: string) =>
11
12
  Effect.gen(function* () {
@@ -13,7 +14,7 @@ export const makeBackendIdHelper = Effect.gen(function* () {
13
14
  backendIdRef.current = Option.some(backendId)
14
15
  yield* kv.set(backendIdKey, backendId)
15
16
  }
16
- }).pipe(UnexpectedError.mapToUnexpectedError)
17
+ }).pipe(UnknownError.mapToUnknownError)
17
18
 
18
19
  return {
19
20
  lazySet: setBackendId,