@livestore/common 0.4.0-dev.9 → 0.5.0-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (580) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/ClientSessionLeaderThreadProxy.d.ts +27 -12
  3. package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
  4. package/dist/ClientSessionLeaderThreadProxy.js.map +1 -1
  5. package/dist/MaterializationJournal.d.ts +44 -0
  6. package/dist/MaterializationJournal.d.ts.map +1 -0
  7. package/dist/MaterializationJournal.js +112 -0
  8. package/dist/MaterializationJournal.js.map +1 -0
  9. package/dist/StateHead.d.ts +26 -0
  10. package/dist/StateHead.d.ts.map +1 -0
  11. package/dist/StateHead.js +50 -0
  12. package/dist/StateHead.js.map +1 -0
  13. package/dist/WorkerTransportError.d.ts +11 -0
  14. package/dist/WorkerTransportError.d.ts.map +1 -0
  15. package/dist/WorkerTransportError.js +11 -0
  16. package/dist/WorkerTransportError.js.map +1 -0
  17. package/dist/__tests__/fixture.d.ts +1 -1
  18. package/dist/__tests__/fixture.d.ts.map +1 -1
  19. package/dist/__tests__/fixture.js +3 -3
  20. package/dist/__tests__/fixture.js.map +1 -1
  21. package/dist/adapter-types.d.ts +59 -57
  22. package/dist/adapter-types.d.ts.map +1 -1
  23. package/dist/adapter-types.js +31 -22
  24. package/dist/adapter-types.js.map +1 -1
  25. package/dist/bounded-collections.d.ts.map +1 -1
  26. package/dist/bounded-collections.js +6 -4
  27. package/dist/bounded-collections.js.map +1 -1
  28. package/dist/debug-info.d.ts +56 -56
  29. package/dist/debug-info.d.ts.map +1 -1
  30. package/dist/debug-info.js +46 -32
  31. package/dist/debug-info.js.map +1 -1
  32. package/dist/defs.d.ts +9 -9
  33. package/dist/defs.js +2 -2
  34. package/dist/devtools/devtools-compatibility.test.d.ts +2 -0
  35. package/dist/devtools/devtools-compatibility.test.d.ts.map +1 -0
  36. package/dist/devtools/devtools-compatibility.test.js +16 -0
  37. package/dist/devtools/devtools-compatibility.test.js.map +1 -0
  38. package/dist/devtools/devtools-messages-client-session.d.ts +531 -312
  39. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
  40. package/dist/devtools/devtools-messages-client-session.js +86 -67
  41. package/dist/devtools/devtools-messages-client-session.js.map +1 -1
  42. package/dist/devtools/devtools-messages-common.d.ts +32 -35
  43. package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
  44. package/dist/devtools/devtools-messages-common.js +12 -14
  45. package/dist/devtools/devtools-messages-common.js.map +1 -1
  46. package/dist/devtools/devtools-messages-leader.d.ts +417 -320
  47. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  48. package/dist/devtools/devtools-messages-leader.js +117 -87
  49. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  50. package/dist/devtools/devtools-sessioninfo.d.ts +28 -17
  51. package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
  52. package/dist/devtools/devtools-sessioninfo.js +12 -6
  53. package/dist/devtools/devtools-sessioninfo.js.map +1 -1
  54. package/dist/devtools/mod.d.ts +17 -7
  55. package/dist/devtools/mod.d.ts.map +1 -1
  56. package/dist/devtools/mod.js +19 -8
  57. package/dist/devtools/mod.js.map +1 -1
  58. package/dist/errors.d.ts +52 -46
  59. package/dist/errors.d.ts.map +1 -1
  60. package/dist/errors.js +31 -21
  61. package/dist/errors.js.map +1 -1
  62. package/dist/index.d.ts +7 -1
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +7 -1
  65. package/dist/index.js.map +1 -1
  66. package/dist/leader-thread/LeaderSyncProcessor.d.ts +116 -21
  67. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  68. package/dist/leader-thread/LeaderSyncProcessor.js +596 -470
  69. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  70. package/dist/leader-thread/RejectedPushError.d.ts +138 -0
  71. package/dist/leader-thread/RejectedPushError.d.ts.map +1 -0
  72. package/dist/leader-thread/RejectedPushError.js +97 -0
  73. package/dist/leader-thread/RejectedPushError.js.map +1 -0
  74. package/dist/leader-thread/connection.d.ts +1 -0
  75. package/dist/leader-thread/connection.d.ts.map +1 -1
  76. package/dist/leader-thread/connection.js +10 -9
  77. package/dist/leader-thread/connection.js.map +1 -1
  78. package/dist/leader-thread/eventlog.d.ts +20 -15
  79. package/dist/leader-thread/eventlog.d.ts.map +1 -1
  80. package/dist/leader-thread/eventlog.js +80 -20
  81. package/dist/leader-thread/eventlog.js.map +1 -1
  82. package/dist/leader-thread/leader-worker-devtools.d.ts +1 -2
  83. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  84. package/dist/leader-thread/leader-worker-devtools.js +110 -62
  85. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  86. package/dist/leader-thread/make-leader-thread-layer.d.ts +19 -7
  87. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  88. package/dist/leader-thread/make-leader-thread-layer.js +67 -45
  89. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  90. package/dist/leader-thread/make-leader-thread-layer.test.d.ts +2 -0
  91. package/dist/leader-thread/make-leader-thread-layer.test.d.ts.map +1 -0
  92. package/dist/leader-thread/make-leader-thread-layer.test.js +32 -0
  93. package/dist/leader-thread/make-leader-thread-layer.test.js.map +1 -0
  94. package/dist/leader-thread/materialize-event.d.ts +3 -2
  95. package/dist/leader-thread/materialize-event.d.ts.map +1 -1
  96. package/dist/leader-thread/materialize-event.js +32 -9
  97. package/dist/leader-thread/materialize-event.js.map +1 -1
  98. package/dist/leader-thread/mod.d.ts +1 -0
  99. package/dist/leader-thread/mod.d.ts.map +1 -1
  100. package/dist/leader-thread/mod.js +1 -0
  101. package/dist/leader-thread/mod.js.map +1 -1
  102. package/dist/leader-thread/recreate-db.d.ts +2 -2
  103. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  104. package/dist/leader-thread/recreate-db.js +19 -40
  105. package/dist/leader-thread/recreate-db.js.map +1 -1
  106. package/dist/leader-thread/shutdown-channel.d.ts +3 -7
  107. package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
  108. package/dist/leader-thread/shutdown-channel.js +2 -3
  109. package/dist/leader-thread/shutdown-channel.js.map +1 -1
  110. package/dist/leader-thread/stream-events.d.ts +53 -0
  111. package/dist/leader-thread/stream-events.d.ts.map +1 -0
  112. package/dist/leader-thread/stream-events.js +164 -0
  113. package/dist/leader-thread/stream-events.js.map +1 -0
  114. package/dist/leader-thread/types.d.ts +92 -51
  115. package/dist/leader-thread/types.d.ts.map +1 -1
  116. package/dist/leader-thread/types.js +17 -4
  117. package/dist/leader-thread/types.js.map +1 -1
  118. package/dist/logging.d.ts +15 -0
  119. package/dist/logging.d.ts.map +1 -0
  120. package/dist/logging.js +2 -0
  121. package/dist/logging.js.map +1 -0
  122. package/dist/make-client-session.d.ts +6 -5
  123. package/dist/make-client-session.d.ts.map +1 -1
  124. package/dist/make-client-session.js +10 -7
  125. package/dist/make-client-session.js.map +1 -1
  126. package/dist/materializer-helper.d.ts +6 -7
  127. package/dist/materializer-helper.d.ts.map +1 -1
  128. package/dist/materializer-helper.js +22 -40
  129. package/dist/materializer-helper.js.map +1 -1
  130. package/dist/otel.d.ts +4 -4
  131. package/dist/otel.d.ts.map +1 -1
  132. package/dist/otel.js +8 -8
  133. package/dist/otel.js.map +1 -1
  134. package/dist/rematerialize-from-eventlog.d.ts +3 -3
  135. package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
  136. package/dist/rematerialize-from-eventlog.js +52 -39
  137. package/dist/rematerialize-from-eventlog.js.map +1 -1
  138. package/dist/schema/EventDef/define.d.ts +161 -0
  139. package/dist/schema/EventDef/define.d.ts.map +1 -0
  140. package/dist/schema/EventDef/define.js +140 -0
  141. package/dist/schema/EventDef/define.js.map +1 -0
  142. package/dist/schema/EventDef/define.test.d.ts +2 -0
  143. package/dist/schema/EventDef/define.test.d.ts.map +1 -0
  144. package/dist/schema/EventDef/define.test.js +23 -0
  145. package/dist/schema/EventDef/define.test.js.map +1 -0
  146. package/dist/schema/EventDef/deprecated.d.ts +94 -0
  147. package/dist/schema/EventDef/deprecated.d.ts.map +1 -0
  148. package/dist/schema/EventDef/deprecated.js +143 -0
  149. package/dist/schema/EventDef/deprecated.js.map +1 -0
  150. package/dist/schema/EventDef/deprecated.test.d.ts +2 -0
  151. package/dist/schema/EventDef/deprecated.test.d.ts.map +1 -0
  152. package/dist/schema/EventDef/deprecated.test.js +95 -0
  153. package/dist/schema/EventDef/deprecated.test.js.map +1 -0
  154. package/dist/schema/EventDef/event-def.d.ts +110 -0
  155. package/dist/schema/EventDef/event-def.d.ts.map +1 -0
  156. package/dist/schema/EventDef/event-def.js +2 -0
  157. package/dist/schema/EventDef/event-def.js.map +1 -0
  158. package/dist/schema/EventDef/facts.d.ts +118 -0
  159. package/dist/schema/EventDef/facts.d.ts.map +1 -0
  160. package/dist/schema/EventDef/facts.js +53 -0
  161. package/dist/schema/EventDef/facts.js.map +1 -0
  162. package/dist/schema/EventDef/materializer.d.ts +155 -0
  163. package/dist/schema/EventDef/materializer.d.ts.map +1 -0
  164. package/dist/schema/EventDef/materializer.js +83 -0
  165. package/dist/schema/EventDef/materializer.js.map +1 -0
  166. package/dist/schema/EventDef/mod.d.ts +6 -0
  167. package/dist/schema/EventDef/mod.d.ts.map +1 -0
  168. package/dist/schema/EventDef/mod.js +6 -0
  169. package/dist/schema/EventDef/mod.js.map +1 -0
  170. package/dist/schema/EventSequenceNumber/client.d.ts +136 -0
  171. package/dist/schema/EventSequenceNumber/client.d.ts.map +1 -0
  172. package/dist/schema/EventSequenceNumber/client.js +192 -0
  173. package/dist/schema/EventSequenceNumber/client.js.map +1 -0
  174. package/dist/schema/EventSequenceNumber/global.d.ts +15 -0
  175. package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -0
  176. package/dist/schema/EventSequenceNumber/global.js +14 -0
  177. package/dist/schema/EventSequenceNumber/global.js.map +1 -0
  178. package/dist/schema/EventSequenceNumber/mod.d.ts +37 -0
  179. package/dist/schema/EventSequenceNumber/mod.d.ts.map +1 -0
  180. package/dist/schema/EventSequenceNumber/mod.js +37 -0
  181. package/dist/schema/EventSequenceNumber/mod.js.map +1 -0
  182. package/dist/schema/EventSequenceNumber.test.js +44 -44
  183. package/dist/schema/EventSequenceNumber.test.js.map +1 -1
  184. package/dist/schema/LiveStoreEvent/client.d.ts +168 -0
  185. package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -0
  186. package/dist/schema/LiveStoreEvent/client.js +179 -0
  187. package/dist/schema/LiveStoreEvent/client.js.map +1 -0
  188. package/dist/schema/LiveStoreEvent/client.test.d.ts +2 -0
  189. package/dist/schema/LiveStoreEvent/client.test.d.ts.map +1 -0
  190. package/dist/schema/LiveStoreEvent/client.test.js +120 -0
  191. package/dist/schema/LiveStoreEvent/client.test.js.map +1 -0
  192. package/dist/schema/LiveStoreEvent/for-event-def.d.ts +52 -0
  193. package/dist/schema/LiveStoreEvent/for-event-def.d.ts.map +1 -0
  194. package/dist/schema/LiveStoreEvent/for-event-def.js +2 -0
  195. package/dist/schema/LiveStoreEvent/for-event-def.js.map +1 -0
  196. package/dist/schema/LiveStoreEvent/global.d.ts +36 -0
  197. package/dist/schema/LiveStoreEvent/global.d.ts.map +1 -0
  198. package/dist/schema/LiveStoreEvent/global.js +31 -0
  199. package/dist/schema/LiveStoreEvent/global.js.map +1 -0
  200. package/dist/schema/LiveStoreEvent/input.d.ts +46 -0
  201. package/dist/schema/LiveStoreEvent/input.d.ts.map +1 -0
  202. package/dist/schema/LiveStoreEvent/input.js +26 -0
  203. package/dist/schema/LiveStoreEvent/input.js.map +1 -0
  204. package/dist/schema/LiveStoreEvent/mod.d.ts +5 -0
  205. package/dist/schema/LiveStoreEvent/mod.d.ts.map +1 -0
  206. package/dist/schema/LiveStoreEvent/mod.js +5 -0
  207. package/dist/schema/LiveStoreEvent/mod.js.map +1 -0
  208. package/dist/schema/events.d.ts +1 -1
  209. package/dist/schema/events.d.ts.map +1 -1
  210. package/dist/schema/events.js +1 -1
  211. package/dist/schema/events.js.map +1 -1
  212. package/dist/schema/mod.d.ts +7 -4
  213. package/dist/schema/mod.d.ts.map +1 -1
  214. package/dist/schema/mod.js +6 -4
  215. package/dist/schema/mod.js.map +1 -1
  216. package/dist/schema/schema.d.ts +16 -1
  217. package/dist/schema/schema.d.ts.map +1 -1
  218. package/dist/schema/schema.js +34 -5
  219. package/dist/schema/schema.js.map +1 -1
  220. package/dist/schema/state/sqlite/client-document-def.d.ts +14 -18
  221. package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
  222. package/dist/schema/state/sqlite/client-document-def.js +54 -30
  223. package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
  224. package/dist/schema/state/sqlite/client-document-def.test.js +146 -6
  225. package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
  226. package/dist/schema/state/sqlite/column-annotations.d.ts +13 -13
  227. package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
  228. package/dist/schema/state/sqlite/column-annotations.js +13 -15
  229. package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
  230. package/dist/schema/state/sqlite/column-annotations.test.js +19 -43
  231. package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
  232. package/dist/schema/state/sqlite/column-def.d.ts +1 -1
  233. package/dist/schema/state/sqlite/column-def.d.ts.map +1 -1
  234. package/dist/schema/state/sqlite/column-def.js +132 -57
  235. package/dist/schema/state/sqlite/column-def.js.map +1 -1
  236. package/dist/schema/state/sqlite/column-def.test.js +155 -70
  237. package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
  238. package/dist/schema/state/sqlite/column-spec.d.ts.map +1 -1
  239. package/dist/schema/state/sqlite/column-spec.js +30 -12
  240. package/dist/schema/state/sqlite/column-spec.js.map +1 -1
  241. package/dist/schema/state/sqlite/column-spec.test.js +26 -17
  242. package/dist/schema/state/sqlite/column-spec.test.js.map +1 -1
  243. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +2 -2
  244. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
  245. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +15 -6
  246. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
  247. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +25 -19
  248. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -1
  249. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +22 -16
  250. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
  251. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +28 -17
  252. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -1
  253. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +14 -12
  254. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
  255. package/dist/schema/state/sqlite/db-schema/dsl/mod.js +6 -4
  256. package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
  257. package/dist/schema/state/sqlite/mod.d.ts +3 -5
  258. package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
  259. package/dist/schema/state/sqlite/mod.js +6 -8
  260. package/dist/schema/state/sqlite/mod.js.map +1 -1
  261. package/dist/schema/state/sqlite/persistence.d.ts +11 -0
  262. package/dist/schema/state/sqlite/persistence.d.ts.map +1 -0
  263. package/dist/schema/state/sqlite/persistence.js +10 -0
  264. package/dist/schema/state/sqlite/persistence.js.map +1 -0
  265. package/dist/schema/state/sqlite/query-builder/api.d.ts +58 -29
  266. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
  267. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
  268. package/dist/schema/state/sqlite/query-builder/astToSql.js +105 -24
  269. package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
  270. package/dist/schema/state/sqlite/query-builder/impl.d.ts +4 -2
  271. package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
  272. package/dist/schema/state/sqlite/query-builder/impl.js +42 -27
  273. package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
  274. package/dist/schema/state/sqlite/query-builder/impl.test.js +402 -498
  275. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
  276. package/dist/schema/state/sqlite/schema-helpers.d.ts +2 -2
  277. package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -1
  278. package/dist/schema/state/sqlite/schema-helpers.js +24 -14
  279. package/dist/schema/state/sqlite/schema-helpers.js.map +1 -1
  280. package/dist/schema/state/sqlite/schema-helpers.test.d.ts +2 -0
  281. package/dist/schema/state/sqlite/schema-helpers.test.d.ts.map +1 -0
  282. package/dist/schema/state/sqlite/schema-helpers.test.js +36 -0
  283. package/dist/schema/state/sqlite/schema-helpers.test.js.map +1 -0
  284. package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts +515 -0
  285. package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts.map +1 -0
  286. package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +54 -0
  287. package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -0
  288. package/dist/schema/state/sqlite/system-tables/mod.d.ts +3 -0
  289. package/dist/schema/state/sqlite/system-tables/mod.d.ts.map +1 -0
  290. package/dist/schema/state/sqlite/system-tables/mod.js +3 -0
  291. package/dist/schema/state/sqlite/system-tables/mod.js.map +1 -0
  292. package/dist/schema/state/sqlite/system-tables/state-tables.d.ts +678 -0
  293. package/dist/schema/state/sqlite/system-tables/state-tables.d.ts.map +1 -0
  294. package/dist/schema/state/sqlite/system-tables/state-tables.js +87 -0
  295. package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -0
  296. package/dist/schema/state/sqlite/table-def.d.ts +19 -20
  297. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
  298. package/dist/schema/state/sqlite/table-def.js +54 -4
  299. package/dist/schema/state/sqlite/table-def.js.map +1 -1
  300. package/dist/schema/state/sqlite/table-def.test.js +226 -20
  301. package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
  302. package/dist/schema/unknown-events.d.ts +47 -0
  303. package/dist/schema/unknown-events.d.ts.map +1 -0
  304. package/dist/schema/unknown-events.js +70 -0
  305. package/dist/schema/unknown-events.js.map +1 -0
  306. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts +2 -0
  307. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts.map +1 -0
  308. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js +73 -0
  309. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js.map +1 -0
  310. package/dist/schema-management/common.js +2 -2
  311. package/dist/schema-management/common.js.map +1 -1
  312. package/dist/schema-management/migrations.d.ts +32 -2
  313. package/dist/schema-management/migrations.d.ts.map +1 -1
  314. package/dist/schema-management/migrations.js +38 -6
  315. package/dist/schema-management/migrations.js.map +1 -1
  316. package/dist/schema-management/validate-schema.d.ts +3 -3
  317. package/dist/schema-management/validate-schema.d.ts.map +1 -1
  318. package/dist/schema-management/validate-schema.js +2 -2
  319. package/dist/schema-management/validate-schema.js.map +1 -1
  320. package/dist/session-id-symbol.d.ts +29 -0
  321. package/dist/session-id-symbol.d.ts.map +1 -0
  322. package/dist/session-id-symbol.js +44 -0
  323. package/dist/session-id-symbol.js.map +1 -0
  324. package/dist/sql-queries/sql-queries.d.ts.map +1 -1
  325. package/dist/sql-queries/sql-queries.js +26 -16
  326. package/dist/sql-queries/sql-queries.js.map +1 -1
  327. package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
  328. package/dist/sql-queries/sql-query-builder.js.map +1 -1
  329. package/dist/sql-queries/types.d.ts +6 -7
  330. package/dist/sql-queries/types.d.ts.map +1 -1
  331. package/dist/sql-queries/types.js.map +1 -1
  332. package/dist/sqlite-db-helper.d.ts +21 -1
  333. package/dist/sqlite-db-helper.d.ts.map +1 -1
  334. package/dist/sqlite-db-helper.js +40 -5
  335. package/dist/sqlite-db-helper.js.map +1 -1
  336. package/dist/sqlite-types.d.ts +8 -11
  337. package/dist/sqlite-types.d.ts.map +1 -1
  338. package/dist/sqlite-types.js +3 -3
  339. package/dist/sqlite-types.js.map +1 -1
  340. package/dist/sync/ClientSessionSyncProcessor.d.ts +47 -25
  341. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  342. package/dist/sync/ClientSessionSyncProcessor.js +269 -154
  343. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  344. package/dist/sync/errors.d.ts +12 -51
  345. package/dist/sync/errors.d.ts.map +1 -1
  346. package/dist/sync/errors.js +7 -24
  347. package/dist/sync/errors.js.map +1 -1
  348. package/dist/sync/index.d.ts +2 -0
  349. package/dist/sync/index.d.ts.map +1 -1
  350. package/dist/sync/index.js +2 -0
  351. package/dist/sync/index.js.map +1 -1
  352. package/dist/sync/mock-sync-backend.d.ts +11 -10
  353. package/dist/sync/mock-sync-backend.d.ts.map +1 -1
  354. package/dist/sync/mock-sync-backend.js +97 -74
  355. package/dist/sync/mock-sync-backend.js.map +1 -1
  356. package/dist/sync/mock-sync-backend.test.d.ts +2 -0
  357. package/dist/sync/mock-sync-backend.test.d.ts.map +1 -0
  358. package/dist/sync/mock-sync-backend.test.js +49 -0
  359. package/dist/sync/mock-sync-backend.test.js.map +1 -0
  360. package/dist/sync/next/compact-events.d.ts.map +1 -1
  361. package/dist/sync/next/compact-events.js +11 -12
  362. package/dist/sync/next/compact-events.js.map +1 -1
  363. package/dist/sync/next/facts.d.ts +5 -5
  364. package/dist/sync/next/facts.d.ts.map +1 -1
  365. package/dist/sync/next/facts.js +7 -8
  366. package/dist/sync/next/facts.js.map +1 -1
  367. package/dist/sync/next/history-dag-common.d.ts +58 -15
  368. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  369. package/dist/sync/next/history-dag-common.js +219 -9
  370. package/dist/sync/next/history-dag-common.js.map +1 -1
  371. package/dist/sync/next/history-dag.d.ts.map +1 -1
  372. package/dist/sync/next/history-dag.js +12 -11
  373. package/dist/sync/next/history-dag.js.map +1 -1
  374. package/dist/sync/next/rebase-events.d.ts +5 -5
  375. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  376. package/dist/sync/next/rebase-events.js +6 -6
  377. package/dist/sync/next/rebase-events.js.map +1 -1
  378. package/dist/sync/next/test/compact-events.calculator.test.js +4 -4
  379. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  380. package/dist/sync/next/test/compact-events.test.d.ts.map +1 -1
  381. package/dist/sync/next/test/compact-events.test.js +2 -2
  382. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  383. package/dist/sync/next/test/event-fixtures.d.ts +9 -9
  384. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
  385. package/dist/sync/next/test/event-fixtures.js +12 -12
  386. package/dist/sync/next/test/event-fixtures.js.map +1 -1
  387. package/dist/sync/next/test/history-dag-common.test.d.ts +2 -0
  388. package/dist/sync/next/test/history-dag-common.test.d.ts.map +1 -0
  389. package/dist/sync/next/test/history-dag-common.test.js +73 -0
  390. package/dist/sync/next/test/history-dag-common.test.js.map +1 -0
  391. package/dist/sync/sync-backend-kv.d.ts +3 -3
  392. package/dist/sync/sync-backend-kv.d.ts.map +1 -1
  393. package/dist/sync/sync-backend-kv.js +6 -4
  394. package/dist/sync/sync-backend-kv.js.map +1 -1
  395. package/dist/sync/sync-backend.d.ts +41 -21
  396. package/dist/sync/sync-backend.d.ts.map +1 -1
  397. package/dist/sync/sync-backend.js +45 -4
  398. package/dist/sync/sync-backend.js.map +1 -1
  399. package/dist/sync/sync.d.ts +23 -2
  400. package/dist/sync/sync.d.ts.map +1 -1
  401. package/dist/sync/syncstate.d.ts +115 -191
  402. package/dist/sync/syncstate.d.ts.map +1 -1
  403. package/dist/sync/syncstate.js +108 -129
  404. package/dist/sync/syncstate.js.map +1 -1
  405. package/dist/sync/syncstate.test.js +289 -161
  406. package/dist/sync/syncstate.test.js.map +1 -1
  407. package/dist/sync/transport-chunking.d.ts +35 -0
  408. package/dist/sync/transport-chunking.d.ts.map +1 -0
  409. package/dist/sync/transport-chunking.js +47 -0
  410. package/dist/sync/transport-chunking.js.map +1 -0
  411. package/dist/sync/validate-push-payload.d.ts +2 -2
  412. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  413. package/dist/sync/validate-push-payload.js +4 -6
  414. package/dist/sync/validate-push-payload.js.map +1 -1
  415. package/dist/testing/event-factory.d.ts +3 -3
  416. package/dist/testing/event-factory.d.ts.map +1 -1
  417. package/dist/testing/event-factory.js +5 -7
  418. package/dist/testing/event-factory.js.map +1 -1
  419. package/dist/util.d.ts +11 -4
  420. package/dist/util.d.ts.map +1 -1
  421. package/dist/util.js +21 -4
  422. package/dist/util.js.map +1 -1
  423. package/dist/version.d.ts +24 -5
  424. package/dist/version.d.ts.map +1 -1
  425. package/dist/version.js +25 -8
  426. package/dist/version.js.map +1 -1
  427. package/package.json +50 -16
  428. package/src/ClientSessionLeaderThreadProxy.ts +27 -12
  429. package/src/MaterializationJournal.ts +184 -0
  430. package/src/StateHead.ts +80 -0
  431. package/src/WorkerTransportError.ts +12 -0
  432. package/src/__tests__/fixture.ts +3 -3
  433. package/src/adapter-types.ts +62 -56
  434. package/src/bounded-collections.ts +6 -5
  435. package/src/debug-info.ts +54 -43
  436. package/src/defs.ts +2 -2
  437. package/src/devtools/devtools-compatibility.test.ts +19 -0
  438. package/src/devtools/devtools-messages-client-session.ts +72 -63
  439. package/src/devtools/devtools-messages-common.ts +18 -22
  440. package/src/devtools/devtools-messages-leader.ts +89 -68
  441. package/src/devtools/devtools-sessioninfo.ts +17 -12
  442. package/src/devtools/mod.ts +15 -7
  443. package/src/errors.ts +58 -38
  444. package/src/index.ts +11 -1
  445. package/src/leader-thread/LeaderSyncProcessor.ts +927 -674
  446. package/src/leader-thread/RejectedPushError.ts +119 -0
  447. package/src/leader-thread/connection.ts +13 -9
  448. package/src/leader-thread/eventlog.ts +114 -41
  449. package/src/leader-thread/leader-worker-devtools.ts +223 -124
  450. package/src/leader-thread/make-leader-thread-layer.test.ts +44 -0
  451. package/src/leader-thread/make-leader-thread-layer.ts +170 -82
  452. package/src/leader-thread/materialize-event.ts +51 -16
  453. package/src/leader-thread/mod.ts +1 -0
  454. package/src/leader-thread/recreate-db.ts +26 -61
  455. package/src/leader-thread/shutdown-channel.ts +3 -18
  456. package/src/leader-thread/stream-events.ts +209 -0
  457. package/src/leader-thread/types.ts +77 -65
  458. package/src/logging.ts +15 -0
  459. package/src/make-client-session.ts +16 -10
  460. package/src/materializer-helper.ts +31 -49
  461. package/src/otel.ts +15 -13
  462. package/src/rematerialize-from-eventlog.ts +106 -93
  463. package/src/schema/EventDef/define.test.ts +28 -0
  464. package/src/schema/EventDef/define.ts +218 -0
  465. package/src/schema/EventDef/deprecated.test.ts +122 -0
  466. package/src/schema/EventDef/deprecated.ts +172 -0
  467. package/src/schema/EventDef/event-def.ts +123 -0
  468. package/src/schema/EventDef/facts.ts +135 -0
  469. package/src/schema/EventDef/materializer.ts +172 -0
  470. package/src/schema/EventDef/mod.ts +5 -0
  471. package/src/schema/EventSequenceNumber/client.ts +256 -0
  472. package/src/schema/EventSequenceNumber/global.ts +19 -0
  473. package/src/schema/EventSequenceNumber/mod.ts +37 -0
  474. package/src/schema/EventSequenceNumber.test.ts +72 -53
  475. package/src/schema/LiveStoreEvent/client.test.ts +142 -0
  476. package/src/schema/LiveStoreEvent/client.ts +236 -0
  477. package/src/schema/LiveStoreEvent/for-event-def.ts +60 -0
  478. package/src/schema/LiveStoreEvent/global.ts +45 -0
  479. package/src/schema/LiveStoreEvent/input.ts +63 -0
  480. package/src/schema/LiveStoreEvent/mod.ts +4 -0
  481. package/src/schema/events.ts +1 -1
  482. package/src/schema/mod.ts +7 -4
  483. package/src/schema/schema.ts +48 -6
  484. package/src/schema/state/sqlite/client-document-def.test.ts +172 -14
  485. package/src/schema/state/sqlite/client-document-def.ts +126 -98
  486. package/src/schema/state/sqlite/column-annotations.test.ts +27 -45
  487. package/src/schema/state/sqlite/column-annotations.ts +27 -30
  488. package/src/schema/state/sqlite/column-def.test.ts +186 -77
  489. package/src/schema/state/sqlite/column-def.ts +169 -62
  490. package/src/schema/state/sqlite/column-spec.test.ts +34 -19
  491. package/src/schema/state/sqlite/column-spec.ts +38 -11
  492. package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +17 -7
  493. package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +123 -63
  494. package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +37 -17
  495. package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +65 -45
  496. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +48 -40
  497. package/src/schema/state/sqlite/mod.ts +9 -12
  498. package/src/schema/state/sqlite/persistence.ts +11 -0
  499. package/src/schema/state/sqlite/query-builder/api.ts +61 -23
  500. package/src/schema/state/sqlite/query-builder/astToSql.ts +117 -23
  501. package/src/schema/state/sqlite/query-builder/impl.test.ts +489 -551
  502. package/src/schema/state/sqlite/query-builder/impl.ts +43 -26
  503. package/src/schema/state/sqlite/schema-helpers.test.ts +44 -0
  504. package/src/schema/state/sqlite/schema-helpers.ts +30 -22
  505. package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +64 -0
  506. package/src/schema/state/sqlite/system-tables/mod.ts +2 -0
  507. package/src/schema/state/sqlite/system-tables/state-tables.ts +109 -0
  508. package/src/schema/state/sqlite/table-def.test.ts +295 -46
  509. package/src/schema/state/sqlite/table-def.ts +109 -64
  510. package/src/schema/unknown-events.ts +132 -0
  511. package/src/schema-management/__tests__/migrations-autoincrement-quoting.test.ts +88 -0
  512. package/src/schema-management/common.ts +2 -2
  513. package/src/schema-management/migrations.ts +42 -9
  514. package/src/schema-management/validate-schema.ts +3 -3
  515. package/src/session-id-symbol.ts +59 -0
  516. package/src/sql-queries/sql-queries.ts +26 -18
  517. package/src/sql-queries/sql-query-builder.ts +1 -0
  518. package/src/sql-queries/types.ts +6 -7
  519. package/src/sqlite-db-helper.ts +67 -5
  520. package/src/sqlite-types.ts +9 -11
  521. package/src/sync/ClientSessionSyncProcessor.ts +388 -194
  522. package/src/sync/errors.ts +18 -28
  523. package/src/sync/index.ts +2 -0
  524. package/src/sync/mock-sync-backend.test.ts +78 -0
  525. package/src/sync/mock-sync-backend.ts +196 -108
  526. package/src/sync/next/compact-events.ts +10 -11
  527. package/src/sync/next/facts.ts +13 -14
  528. package/src/sync/next/history-dag-common.ts +306 -26
  529. package/src/sync/next/history-dag.ts +20 -13
  530. package/src/sync/next/rebase-events.ts +12 -12
  531. package/src/sync/next/test/compact-events.calculator.test.ts +5 -4
  532. package/src/sync/next/test/compact-events.test.ts +4 -3
  533. package/src/sync/next/test/event-fixtures.ts +14 -14
  534. package/src/sync/next/test/history-dag-common.test.ts +87 -0
  535. package/src/sync/sync-backend-kv.ts +7 -4
  536. package/src/sync/sync-backend.ts +75 -26
  537. package/src/sync/sync.ts +24 -2
  538. package/src/sync/syncstate.test.ts +657 -442
  539. package/src/sync/syncstate.ts +175 -160
  540. package/src/sync/transport-chunking.ts +85 -0
  541. package/src/sync/validate-push-payload.ts +6 -8
  542. package/src/testing/event-factory.ts +10 -12
  543. package/src/util.ts +20 -11
  544. package/src/version.ts +32 -8
  545. package/dist/schema/EventDef.d.ts +0 -126
  546. package/dist/schema/EventDef.d.ts.map +0 -1
  547. package/dist/schema/EventDef.js +0 -46
  548. package/dist/schema/EventDef.js.map +0 -1
  549. package/dist/schema/EventSequenceNumber.d.ts +0 -80
  550. package/dist/schema/EventSequenceNumber.d.ts.map +0 -1
  551. package/dist/schema/EventSequenceNumber.js +0 -139
  552. package/dist/schema/EventSequenceNumber.js.map +0 -1
  553. package/dist/schema/LiveStoreEvent.d.ts +0 -306
  554. package/dist/schema/LiveStoreEvent.d.ts.map +0 -1
  555. package/dist/schema/LiveStoreEvent.js +0 -147
  556. package/dist/schema/LiveStoreEvent.js.map +0 -1
  557. package/dist/schema/state/sqlite/system-tables.d.ts +0 -976
  558. package/dist/schema/state/sqlite/system-tables.d.ts.map +0 -1
  559. package/dist/schema/state/sqlite/system-tables.js +0 -81
  560. package/dist/schema/state/sqlite/system-tables.js.map +0 -1
  561. package/dist/sql-queries/misc.d.ts +0 -2
  562. package/dist/sql-queries/misc.d.ts.map +0 -1
  563. package/dist/sql-queries/misc.js +0 -2
  564. package/dist/sql-queries/misc.js.map +0 -1
  565. package/dist/sync/next/graphology.d.ts +0 -8
  566. package/dist/sync/next/graphology.d.ts.map +0 -1
  567. package/dist/sync/next/graphology.js +0 -30
  568. package/dist/sync/next/graphology.js.map +0 -1
  569. package/dist/sync/next/graphology_.d.ts +0 -3
  570. package/dist/sync/next/graphology_.d.ts.map +0 -1
  571. package/dist/sync/next/graphology_.js +0 -3
  572. package/dist/sync/next/graphology_.js.map +0 -1
  573. package/src/schema/EventDef.ts +0 -222
  574. package/src/schema/EventSequenceNumber.ts +0 -199
  575. package/src/schema/LiveStoreEvent.ts +0 -286
  576. package/src/schema/state/sqlite/system-tables.ts +0 -106
  577. package/src/sql-queries/misc.ts +0 -2
  578. package/src/sync/next/ambient.d.ts +0 -3
  579. package/src/sync/next/graphology.ts +0 -41
  580. package/src/sync/next/graphology_.ts +0 -2
@@ -6,14 +6,13 @@ import type {
6
6
  EventDefFactsGroup,
7
7
  EventDefFactsSnapshot,
8
8
  FactsCallback,
9
- } from '../../schema/EventDef.ts'
10
- import type * as EventSequenceNumber from '../../schema/EventSequenceNumber.ts'
11
- import { graphologyDag } from './graphology_.ts'
9
+ } from '../../schema/EventDef/mod.ts'
10
+ import type * as EventSequenceNumber from '../../schema/EventSequenceNumber/mod.ts'
12
11
  import { EMPTY_FACT_VALUE, type HistoryDag, type HistoryDagNode } from './history-dag-common.ts'
13
12
 
14
13
  export const factsSnapshotForEvents = (
15
14
  events: HistoryDagNode[],
16
- endEventSequenceNumber: EventSequenceNumber.EventSequenceNumber,
15
+ endEventSequenceNumber: EventSequenceNumber.Client.Composite,
17
16
  ): EventDefFactsSnapshot => {
18
17
  const facts = new Map<string, any>()
19
18
 
@@ -30,11 +29,11 @@ export const factsSnapshotForEvents = (
30
29
 
31
30
  export const factsSnapshotForDag = (
32
31
  dag: HistoryDag,
33
- endEventSequenceNumber: EventSequenceNumber.EventSequenceNumber | undefined,
32
+ endEventSequenceNumber: EventSequenceNumber.Client.Composite | undefined,
34
33
  ): EventDefFactsSnapshot => {
35
34
  const facts = new Map<string, any>()
36
35
 
37
- const orderedEventSequenceNumberStrs = graphologyDag.topologicalSort(dag)
36
+ const orderedEventSequenceNumberStrs = dag.topologicalNodeIds()
38
37
 
39
38
  for (let i = 0; i < orderedEventSequenceNumberStrs.length; i++) {
40
39
  const event = dag.getNodeAttributes(orderedEventSequenceNumberStrs[i]!)
@@ -131,7 +130,7 @@ const isSubSetMapByValue = (setA: EventDefFacts, setB: EventDefFacts) => {
131
130
  /** Check if setA is a subset of setB */
132
131
  const isSubSetMapByKey = (setA: EventDefFacts, setB: EventDefFacts) => {
133
132
  for (const [key, _value] of setA) {
134
- if (!setB.has(key)) {
133
+ if (setB.has(key) === false) {
135
134
  return false
136
135
  }
137
136
  }
@@ -169,7 +168,7 @@ export const factsToString = (facts: EventDefFacts) => {
169
168
 
170
169
  export const factsIntersect = (setA: EventDefFacts, setB: EventDefFacts): boolean => {
171
170
  for (const [key, _value] of setA) {
172
- if (setB.has(key)) {
171
+ if (setB.has(key) === true) {
173
172
  return true
174
173
  }
175
174
  }
@@ -200,7 +199,7 @@ export const getFactsGroupForEventArgs = ({
200
199
  }
201
200
  }
202
201
 
203
- notYetImplemented(`getFactsGroupForEventArgs: ${prop.toString()} is not yet implemented`)
202
+ return notYetImplemented(`getFactsGroupForEventArgs: ${prop.toString()} is not yet implemented`)
204
203
  },
205
204
  })
206
205
 
@@ -217,9 +216,9 @@ export const getFactsGroupForEventArgs = ({
217
216
  return map
218
217
  }
219
218
  const facts = {
220
- modifySet: factsRes?.modify.set ? iterableToMap(factsRes.modify.set) : new Map(),
221
- modifyUnset: factsRes?.modify.unset ? iterableToMap(factsRes.modify.unset) : new Map(),
222
- depRequire: factsRes?.require ? iterableToMap(factsRes.require) : new Map(),
219
+ modifySet: factsRes?.modify.set !== undefined ? iterableToMap(factsRes.modify.set) : new Map(),
220
+ modifyUnset: factsRes?.modify.unset !== undefined ? iterableToMap(factsRes.modify.unset) : new Map(),
221
+ depRequire: factsRes?.require !== undefined ? iterableToMap(factsRes.require) : new Map(),
223
222
  depRead,
224
223
  }
225
224
 
@@ -227,8 +226,8 @@ export const getFactsGroupForEventArgs = ({
227
226
  }
228
227
 
229
228
  export const compareEventSequenceNumbers = (
230
- a: EventSequenceNumber.EventSequenceNumber,
231
- b: EventSequenceNumber.EventSequenceNumber,
229
+ a: EventSequenceNumber.Client.Composite,
230
+ b: EventSequenceNumber.Client.Composite,
232
231
  ) => {
233
232
  if (a.global !== b.global) {
234
233
  return a.global - b.global
@@ -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, Option } 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,306 @@ 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 incomingEdges: Map<Graph.NodeIndex, Set<Graph.EdgeIndex>>
64
+ private readonly outgoingEdges: Map<Graph.NodeIndex, Set<Graph.EdgeIndex>>
65
+ private readonly graph: Graph.MutableDirectedGraph<HistoryDagNode, HistoryDagEdgeAttributes>
66
+
67
+ private constructor({
68
+ graph,
69
+ idToIndex,
70
+ indexToId,
71
+ options,
72
+ }: {
73
+ graph: Graph.MutableDirectedGraph<HistoryDagNode, HistoryDagEdgeAttributes>
74
+ idToIndex?: Map<string, Graph.NodeIndex>
75
+ indexToId?: Map<Graph.NodeIndex, string>
76
+ options?: Partial<HistoryDagOptions>
77
+ }) {
78
+ this.graph = graph
79
+ this.options = { ...defaultOptions, ...options }
80
+ this.idToIndex = idToIndex !== undefined ? new Map(idToIndex) : new Map()
81
+ this.indexToId = indexToId !== undefined ? new Map(indexToId) : new Map()
82
+ this.incomingEdges = new Map()
83
+ this.outgoingEdges = new Map()
84
+ }
85
+
86
+ static create(options?: Partial<HistoryDagOptions>): HistoryDag {
87
+ const graph = Graph.beginMutation(Graph.directed<HistoryDagNode, HistoryDagEdgeAttributes>())
88
+ return options !== undefined ? new HistoryDag({ graph, options }) : new HistoryDag({ graph })
89
+ }
90
+
91
+ copy(): HistoryDag {
92
+ const clone = HistoryDag.create(this.options)
93
+
94
+ for (const [id, index] of this.idToIndex) {
95
+ const node = this.nodeAt(index, `HistoryDag.copy missing node for ${id}`)
96
+ clone.addNode(id, cloneHistoryDagNode(node))
97
+ }
98
+
99
+ for (const [, edge] of Graph.edges(this.graph)) {
100
+ const sourceId = this.indexToId.get(edge.source) ?? shouldNeverHappen('HistoryDag.copy missing source id')
101
+ const targetId = this.indexToId.get(edge.target) ?? shouldNeverHappen('HistoryDag.copy missing target id')
102
+ clone.addEdge(sourceId, targetId, { ...edge.data })
103
+ }
104
+
105
+ return clone
106
+ }
107
+
108
+ topologicalNodeIds(): Array<string> {
109
+ const walker = Graph.topo(this.graph)
110
+ const indices = Array.from(Graph.indices(walker))
111
+ return indices.map(
112
+ (index) => this.indexToId.get(index) ?? shouldNeverHappen(`Missing node id for index ${String(index)}`),
113
+ )
114
+ }
115
+
116
+ addNode(id: string, attributes: HistoryDagNode): void {
117
+ if (this.idToIndex.has(id) === true) {
118
+ shouldNeverHappen(`HistoryDag node ${id} already exists`)
119
+ }
120
+
121
+ const nodeIndex = Graph.addNode(this.graph, attributes)
122
+ this.idToIndex.set(id, nodeIndex)
123
+ this.indexToId.set(nodeIndex, id)
124
+ this.incomingEdges.set(nodeIndex, new Set())
125
+ this.outgoingEdges.set(nodeIndex, new Set())
126
+ }
127
+
128
+ hasNode(id: string): boolean {
129
+ return this.idToIndex.has(id)
130
+ }
131
+
132
+ getNodeAttributes(id: string): HistoryDagNode {
133
+ const index = this.idToIndex.get(id)
134
+ if (index === undefined) {
135
+ return shouldNeverHappen(`HistoryDag node ${id} not found`)
136
+ }
137
+
138
+ return this.nodeAt(index, `HistoryDag node data missing for ${id}`)
139
+ }
140
+
141
+ nodes(): IterableIterator<string> {
142
+ return this.idToIndex.keys()
143
+ }
144
+
145
+ nodeEntries(): IterableIterator<{ key: string; attributes: HistoryDagNode }> {
146
+ return function* (this: HistoryDag) {
147
+ for (const [id, index] of this.idToIndex) {
148
+ const attributes = this.nodeAt(index, `HistoryDag node data missing for ${id}`)
149
+ yield { key: id, attributes }
150
+ }
151
+ }.call(this)
152
+ }
153
+
154
+ addEdge(sourceId: string, targetId: string, attributes: HistoryDagEdgeAttributes): Graph.EdgeIndex {
155
+ if (this.options.allowSelfLoops === false && sourceId === targetId) {
156
+ return shouldNeverHappen('HistoryDag self-loops are disabled')
157
+ }
158
+
159
+ const sourceIndex = this.idToIndex.get(sourceId)
160
+ const targetIndex = this.idToIndex.get(targetId)
161
+
162
+ if (sourceIndex === undefined || targetIndex === undefined) {
163
+ return shouldNeverHappen(`HistoryDag edge references unknown nodes: ${sourceId} -> ${targetId}`)
164
+ }
165
+
166
+ const edgeIndex = Graph.addEdge(this.graph, sourceIndex, targetIndex, attributes)
167
+ const outgoingEdges = this.outgoingEdges.get(sourceIndex)
168
+ const incomingEdges = this.incomingEdges.get(targetIndex)
169
+ if (outgoingEdges === undefined || incomingEdges === undefined) {
170
+ return shouldNeverHappen(`HistoryDag edge index missing for ${sourceId} -> ${targetId}`)
171
+ }
172
+ outgoingEdges.add(edgeIndex)
173
+ incomingEdges.add(edgeIndex)
174
+ return edgeIndex
175
+ }
176
+
177
+ edges(sourceId: string, targetId: string): Array<Graph.EdgeIndex> {
178
+ const sourceIndex = this.idToIndex.get(sourceId)
179
+ const targetIndex = this.idToIndex.get(targetId)
180
+
181
+ if (sourceIndex === undefined || targetIndex === undefined) {
182
+ return []
183
+ }
184
+
185
+ return Array.from(this.outgoingEdges.get(sourceIndex) ?? []).filter((edgeIndex) => {
186
+ const edge = Option.getOrUndefined(Graph.getEdge(this.graph, edgeIndex))
187
+ return edge?.target === targetIndex
188
+ })
189
+ }
190
+
191
+ inEdges(id: string): Array<Graph.EdgeIndex> {
192
+ const index = this.idToIndex.get(id)
193
+ if (index === undefined) {
194
+ return []
195
+ }
196
+ return [...(this.incomingEdges.get(index) ?? [])]
197
+ }
198
+
199
+ outboundEdgeEntries(id: string): Array<HistoryDagEdgeEntry> {
200
+ const index = this.idToIndex.get(id)
201
+ if (index === undefined) {
202
+ return []
203
+ }
204
+
205
+ return [...(this.outgoingEdges.get(index) ?? [])]
206
+ .map((edgeIndex) => this.edgeEntry(edgeIndex))
207
+ .filter((entry): entry is HistoryDagEdgeEntry => entry !== undefined)
208
+ }
209
+
210
+ inboundEdgeEntries(id: string): Array<HistoryDagEdgeEntry> {
211
+ const index = this.idToIndex.get(id)
212
+ if (index === undefined) {
213
+ return []
214
+ }
215
+
216
+ return [...(this.incomingEdges.get(index) ?? [])]
217
+ .map((edgeIndex) => this.edgeEntry(edgeIndex))
218
+ .filter((entry): entry is HistoryDagEdgeEntry => entry !== undefined)
219
+ }
220
+
221
+ getEdgeAttributes(edgeIndex: Graph.EdgeIndex): HistoryDagEdgeAttributes {
222
+ return this.edgeAt(edgeIndex, `HistoryDag edge ${edgeIndex} not found`).data
223
+ }
224
+
225
+ getEdgeAttribute<TKey extends keyof HistoryDagEdgeAttributes>(
226
+ edgeIndex: Graph.EdgeIndex,
227
+ key: TKey,
228
+ ): HistoryDagEdgeAttributes[TKey] {
229
+ const attributes = this.getEdgeAttributes(edgeIndex)
230
+ return attributes[key]
231
+ }
232
+
233
+ source(edgeIndex: Graph.EdgeIndex): string {
234
+ const edge = Option.getOrUndefined(Graph.getEdge(this.graph, edgeIndex))
235
+ const sourceId = edge !== undefined ? this.indexToId.get(edge.source) : undefined
236
+ return sourceId ?? shouldNeverHappen(`HistoryDag edge ${edgeIndex} missing source`)
237
+ }
238
+
239
+ target(edgeIndex: Graph.EdgeIndex): string {
240
+ const edge = Option.getOrUndefined(Graph.getEdge(this.graph, edgeIndex))
241
+ const targetId = edge !== undefined ? this.indexToId.get(edge.target) : undefined
242
+ return targetId ?? shouldNeverHappen(`HistoryDag edge ${edgeIndex} missing target`)
243
+ }
244
+
245
+ dropNode(id: string): void {
246
+ const index = this.idToIndex.get(id)
247
+ if (index === undefined) {
248
+ return
249
+ }
250
+
251
+ for (const edgeIndex of this.outgoingEdges.get(index) ?? []) {
252
+ const edge = this.edgeAt(edgeIndex, `HistoryDag edge ${edgeIndex} missing while dropping ${id}`)
253
+ removeEdgeIndex(this.incomingEdges, edge.target, edgeIndex)
254
+ }
255
+ for (const edgeIndex of this.incomingEdges.get(index) ?? []) {
256
+ const edge = this.edgeAt(edgeIndex, `HistoryDag edge ${edgeIndex} missing while dropping ${id}`)
257
+ removeEdgeIndex(this.outgoingEdges, edge.source, edgeIndex)
258
+ }
259
+
260
+ Graph.removeNode(this.graph, index)
261
+ this.idToIndex.delete(id)
262
+ this.indexToId.delete(index)
263
+ this.incomingEdges.delete(index)
264
+ this.outgoingEdges.delete(index)
265
+ }
266
+
267
+ get size(): number {
268
+ return this.idToIndex.size
269
+ }
270
+
271
+ private edgeEntry(edgeIndex: Graph.EdgeIndex): HistoryDagEdgeEntry | undefined {
272
+ const edge = Option.getOrUndefined(Graph.getEdge(this.graph, edgeIndex))
273
+ if (edge === undefined) {
274
+ return undefined
275
+ }
276
+
277
+ const source = this.indexToId.get(edge.source)
278
+ const target = this.indexToId.get(edge.target)
279
+
280
+ if (source === undefined || target === undefined) {
281
+ return undefined
282
+ }
283
+
284
+ return {
285
+ edge: edgeIndex,
286
+ source,
287
+ target,
288
+ attributes: edge.data,
289
+ }
290
+ }
291
+
292
+ private nodeAt(index: Graph.NodeIndex, message: string): HistoryDagNode {
293
+ return Option.getOrElse(Graph.getNode(this.graph, index), () => shouldNeverHappen(message))
294
+ }
295
+
296
+ private edgeAt(edgeIndex: Graph.EdgeIndex, message: string): Graph.Edge<HistoryDagEdgeAttributes> {
297
+ return Option.getOrElse(Graph.getEdge(this.graph, edgeIndex), () => shouldNeverHappen(message))
298
+ }
299
+ }
300
+
301
+ const removeEdgeIndex = (
302
+ edgeIndices: Map<Graph.NodeIndex, Set<Graph.EdgeIndex>>,
303
+ nodeIndex: Graph.NodeIndex,
304
+ edgeIndex: Graph.EdgeIndex,
305
+ ): void => {
306
+ const indices = edgeIndices.get(nodeIndex) ?? shouldNeverHappen(`HistoryDag edge index missing for node ${nodeIndex}`)
307
+ if (indices.delete(edgeIndex) === false) {
308
+ shouldNeverHappen(`HistoryDag edge ${edgeIndex} missing from node ${nodeIndex}`)
309
+ }
310
+ }
311
+
312
+ export const emptyHistoryDag = (): HistoryDag => HistoryDag.create({ allowSelfLoops: false })
313
+
314
+ // TODO consider making `ROOT_ID` parent to itself
315
+ export const rootParentNum = EventSequenceNumber.Client.Composite.make({
316
+ global: EventSequenceNumber.Client.ROOT.global - 1,
317
+ client: EventSequenceNumber.Client.DEFAULT,
318
+ })
319
+
40
320
  export const rootEventNode: HistoryDagNode = {
41
- seqNum: EventSequenceNumber.ROOT,
321
+ seqNum: EventSequenceNumber.Client.ROOT,
42
322
  parentSeqNum: rootParentNum,
43
323
  // unused below
44
324
  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,19 @@ 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 (
52
+ parentNode.factsGroup.modifySet.has(factKey) === true ||
53
+ parentNode.factsGroup.modifyUnset.has(factKey) === true
54
+ ) {
48
55
  return parentNode
49
56
  }
50
57
 
@@ -54,9 +61,9 @@ export const historyDagFromNodes = (dagNodes: HistoryDagNode[], options?: { skip
54
61
  return null
55
62
  })()
56
63
 
57
- if (depNode) {
58
- const depNodeIdStr = EventSequenceNumber.toString(depNode.seqNum)
59
- const nodeIdStr = EventSequenceNumber.toString(node.seqNum)
64
+ if (depNode !== null) {
65
+ const depNodeIdStr = EventSequenceNumber.Client.toString(depNode.seqNum)
66
+ const nodeIdStr = EventSequenceNumber.Client.toString(node.seqNum)
60
67
  if (dag.edges(depNodeIdStr, nodeIdStr).filter((e) => dag.getEdgeAttributes(e).type === 'facts').length === 0) {
61
68
  dag.addEdge(depNodeIdStr, nodeIdStr, { type: 'facts' })
62
69
  }
@@ -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'
@@ -26,14 +27,14 @@ const facts = {
26
27
  const eventDefs = {
27
28
  add: defineEvent({
28
29
  name: 'add',
29
- schema: Schema.Struct({ value: Schema.Number }),
30
+ schema: Schema.Struct({ value: Schema.Finite }),
30
31
  }),
31
32
  multiply: defineEvent({
32
33
  name: 'multiply',
33
- schema: Schema.Struct({ value: Schema.Number }),
34
+ schema: Schema.Struct({ value: Schema.Finite }),
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,13 +140,13 @@ 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
- isClient: eventDef.options.clientOnly,
149
+ isClientOnly: eventDef.options.clientOnly,
150
150
  }).seqNum
151
151
  currentEventSequenceNumber = eventNum
152
152
 
@@ -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
  })