@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
@@ -1 +0,0 @@
1
- {"version":3,"file":"system-tables.d.ts","sourceRoot":"","sources":["../../../../src/schema/state/sqlite/system-tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAQhD,eAAO,MAAM,iBAAiB,uBAAuB,CAAA;AAErD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;IAKxB,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;IAAtB,sBAAsB;;;;;;;;;;;;;;;;;UAGxB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAEvD,eAAO,MAAM,4BAA4B,kCAAkC,CAAA;AAE3E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;IAKjC,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;IAAtB,sBAAsB;;;;;;;;;;;;;;;;;UAGxB,CAAA;AAEF,MAAM,MAAM,sBAAsB,GAAG,OAAO,wBAAwB,CAAC,IAAI,CAAA;AAEzE;;;GAGG;AACH,eAAO,MAAM,4BAA4B,kCAAkC,CAAA;AAE3E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAWpC,CAAA;AAEF,MAAM,MAAM,uBAAuB,GAAG,OAAO,yBAAyB,CAAC,IAAI,CAAA;AAE3E,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;IA1C1B,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;IAAtB,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IActB,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;IAAtB,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA4BsF,CAAA;AAEhH,eAAO,MAAM,kBAAkB,GAAI,WAAW,MAAM,YAAkE,CAAA;AAItH,eAAO,MAAM,mBAAmB,aAAa,CAAA;AAE7C,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAU1B,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAA5B,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAY9B,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAE3D,eAAO,MAAM,iBAAiB,4BAA4B,CAAA;AAG1D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAO1B,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAEvD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA9B7B,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAA5B,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA8BiD,CAAA"}
@@ -1,81 +0,0 @@
1
- import { Schema } from '@livestore/utils/effect';
2
- import * as EventSequenceNumber from "../../EventSequenceNumber.js";
3
- import { SqliteDsl } from "./db-schema/mod.js";
4
- import { table } from "./table-def.js";
5
- /// State DB
6
- export const SCHEMA_META_TABLE = '__livestore_schema';
7
- export const schemaMetaTable = table({
8
- name: SCHEMA_META_TABLE,
9
- columns: {
10
- tableName: SqliteDsl.text({ primaryKey: true }),
11
- schemaHash: SqliteDsl.integer({ nullable: false }),
12
- /** ISO date format */
13
- updatedAt: SqliteDsl.text({ nullable: false }),
14
- },
15
- });
16
- export const SCHEMA_EVENT_DEFS_META_TABLE = '__livestore_schema_event_defs';
17
- export const schemaEventDefsMetaTable = table({
18
- name: SCHEMA_EVENT_DEFS_META_TABLE,
19
- columns: {
20
- eventName: SqliteDsl.text({ primaryKey: true }),
21
- schemaHash: SqliteDsl.integer({ nullable: false }),
22
- /** ISO date format */
23
- updatedAt: SqliteDsl.text({ nullable: false }),
24
- },
25
- });
26
- /**
27
- * Table which stores SQLite changeset blobs which is used for rolling back
28
- * read-model state during rebasing.
29
- */
30
- export const SESSION_CHANGESET_META_TABLE = '__livestore_session_changeset';
31
- export const sessionChangesetMetaTable = table({
32
- name: SESSION_CHANGESET_META_TABLE,
33
- columns: {
34
- // TODO bring back primary key
35
- seqNumGlobal: SqliteDsl.integer({ schema: EventSequenceNumber.GlobalEventSequenceNumber }),
36
- seqNumClient: SqliteDsl.integer({ schema: EventSequenceNumber.ClientEventSequenceNumber }),
37
- seqNumRebaseGeneration: SqliteDsl.integer({}),
38
- changeset: SqliteDsl.blob({ nullable: true }),
39
- debug: SqliteDsl.json({ nullable: true }),
40
- },
41
- indexes: [{ columns: ['seqNumGlobal', 'seqNumClient'], name: 'idx_session_changeset_id' }],
42
- });
43
- export const stateSystemTables = [schemaMetaTable, schemaEventDefsMetaTable, sessionChangesetMetaTable];
44
- export const isStateSystemTable = (tableName) => stateSystemTables.some((_) => _.sqliteDef.name === tableName);
45
- /// Eventlog DB
46
- export const EVENTLOG_META_TABLE = 'eventlog';
47
- export const eventlogMetaTable = table({
48
- name: EVENTLOG_META_TABLE,
49
- columns: {
50
- // TODO Adjust modeling so a global event never needs a client id component
51
- seqNumGlobal: SqliteDsl.integer({ primaryKey: true, schema: EventSequenceNumber.GlobalEventSequenceNumber }),
52
- seqNumClient: SqliteDsl.integer({ primaryKey: true, schema: EventSequenceNumber.ClientEventSequenceNumber }),
53
- seqNumRebaseGeneration: SqliteDsl.integer({ primaryKey: true }),
54
- parentSeqNumGlobal: SqliteDsl.integer({ schema: EventSequenceNumber.GlobalEventSequenceNumber }),
55
- parentSeqNumClient: SqliteDsl.integer({ schema: EventSequenceNumber.ClientEventSequenceNumber }),
56
- parentSeqNumRebaseGeneration: SqliteDsl.integer({}),
57
- /** Event definition name */
58
- name: SqliteDsl.text({}),
59
- argsJson: SqliteDsl.text({ schema: Schema.parseJson(Schema.Any) }),
60
- clientId: SqliteDsl.text({}),
61
- sessionId: SqliteDsl.text({}),
62
- schemaHash: SqliteDsl.integer({}),
63
- syncMetadataJson: SqliteDsl.text({ schema: Schema.parseJson(Schema.Option(Schema.JsonValue)) }),
64
- },
65
- indexes: [
66
- { columns: ['seqNumGlobal'], name: 'idx_eventlog_seqNumGlobal' },
67
- { columns: ['seqNumGlobal', 'seqNumClient', 'seqNumRebaseGeneration'], name: 'idx_eventlog_seqNum' },
68
- ],
69
- });
70
- export const SYNC_STATUS_TABLE = '__livestore_sync_status';
71
- // TODO support sync backend identity (to detect if sync backend changes)
72
- export const syncStatusTable = table({
73
- name: SYNC_STATUS_TABLE,
74
- columns: {
75
- head: SqliteDsl.integer({ primaryKey: true }),
76
- // Null means the sync backend is not yet connected and we haven't yet seen a backend ID
77
- backendId: SqliteDsl.text({ nullable: true }),
78
- },
79
- });
80
- export const eventlogSystemTables = [eventlogMetaTable, syncStatusTable];
81
- //# sourceMappingURL=system-tables.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"system-tables.js","sourceRoot":"","sources":["../../../../src/schema/state/sqlite/system-tables.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const objectEntries: <T extends Record<string, any>>(obj: T) => [keyof T & string, T[keyof T]][];
2
- //# sourceMappingURL=misc.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../src/sql-queries/misc.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,KAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAC3C,CAAA"}
@@ -1,2 +0,0 @@
1
- export const objectEntries = (obj) => Object.entries(obj);
2
- //# sourceMappingURL=misc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/sql-queries/misc.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAgC,GAAM,EAAoC,EAAE,CACvG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAqC,CAAA"}
@@ -1,8 +0,0 @@
1
- import type * as graphologyTypes from 'graphology-types';
2
- export declare const graphology: any;
3
- export declare class IGraph<NodeAttributes extends graphologyTypes.Attributes = graphologyTypes.Attributes, EdgeAttributes extends graphologyTypes.Attributes = graphologyTypes.Attributes, GraphAttributes extends graphologyTypes.Attributes = graphologyTypes.Attributes> extends graphologyTypes.AbstractGraph<NodeAttributes, EdgeAttributes, GraphAttributes> {
4
- constructor(options?: graphologyTypes.GraphOptions);
5
- }
6
- export declare const DirectedGraph: typeof IGraph;
7
- export declare const Graph: typeof IGraph;
8
- //# sourceMappingURL=graphology.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graphology.d.ts","sourceRoot":"","sources":["../../../src/sync/next/graphology.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,eAAe,MAAM,kBAAkB,CAAA;AAExD,eAAO,MAAM,UAAU,EAAkB,GAAG,CAAA;AAE5C,MAAM,CAAC,OAAO,OAAO,MAAM,CACzB,cAAc,SAAS,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,EAC9E,cAAc,SAAS,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,EAC9E,eAAe,SAAS,eAAe,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,CAC/E,SAAQ,eAAe,CAAC,aAAa,CAAC,cAAc,EAAE,cAAc,EAAE,eAAe,CAAC;gBAC1E,OAAO,CAAC,EAAE,eAAe,CAAC,YAAY;CACnD;AAED,eAAO,MAAM,aAAa,EAA8D,OAAO,MAAM,CAAA;AAErG,eAAO,MAAM,KAAK,EAA8C,OAAO,MAAM,CAAA"}
@@ -1,30 +0,0 @@
1
- // TODO re-enable when `graphology` supports ESM `exports` and `.js` import/export syntax
2
- // import {} from 'graphology'
3
- import * as graphology_ from 'graphology';
4
- export const graphology = graphology_;
5
- export const DirectedGraph = class DirectedGraph extends graphology.DirectedGraph {
6
- };
7
- export const Graph = class Graph extends graphology.Graph {
8
- };
9
- // export const graphology = graphology_ as graphologyTypes
10
- /*
11
-
12
- Example usage:
13
-
14
- const dag = new graphology.DirectedGraph({ allowSelfLoops: false })
15
-
16
- nodes.forEach((node) => dag.addNode(node.id, { width: node.data.label.length * 100, height: 40 }))
17
- edges.forEach((edge) => {
18
- // TODO do this filtering earlier
19
- if (!nodeIds.has(edge.source) || !nodeIds.has(edge.target)) return
20
-
21
- dag.addEdge(edge.source, edge.target)
22
- })
23
-
24
- graphologyLayout.random.assign(dag) // needed for initial `x`, `y` values
25
- const sensibleSettings = forceAtlas2.inferSettings(dag)
26
- // forceAtlas2.assign(dag, { iterations: 100, settings: { adjustSizes: true, } })
27
- forceAtlas2.assign(dag, { iterations: 100, settings: sensibleSettings })
28
-
29
- */
30
- //# sourceMappingURL=graphology.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graphology.js","sourceRoot":"","sources":["../../../src/sync/next/graphology.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,8BAA8B;AAC9B,OAAO,KAAK,WAAW,MAAM,YAAY,CAAA;AAGzC,MAAM,CAAC,MAAM,UAAU,GAAG,WAAkB,CAAA;AAU5C,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,aAAc,SAAQ,UAAU,CAAC,aAAa;CAAoB,CAAA;AAErG,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,KAAM,SAAQ,UAAU,CAAC,KAAK;CAAoB,CAAA;AAE7E,2DAA2D;AAE3D;;;;;;;;;;;;;;;;;;;EAmBE"}
@@ -1,3 +0,0 @@
1
- export { default as graphologyDag } from 'graphology-dag';
2
- export * as graphology from './graphology.ts';
3
- //# sourceMappingURL=graphology_.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graphology_.d.ts","sourceRoot":"","sources":["../../../src/sync/next/graphology_.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA"}
@@ -1,3 +0,0 @@
1
- export { default as graphologyDag } from 'graphology-dag';
2
- export * as graphology from "./graphology.js";
3
- //# sourceMappingURL=graphology_.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graphology_.js","sourceRoot":"","sources":["../../../src/sync/next/graphology_.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA"}
@@ -1,222 +0,0 @@
1
- import type { SingleOrReadonlyArray } from '@livestore/utils'
2
- import { shouldNeverHappen } from '@livestore/utils'
3
- import { Schema } from '@livestore/utils/effect'
4
-
5
- import type { BindValues } from '../sql-queries/sql-queries.ts'
6
- import type { ParamsObject } from '../util.ts'
7
- import type * as LiveStoreEvent from './LiveStoreEvent.ts'
8
- import type { QueryBuilder } from './state/sqlite/query-builder/mod.ts'
9
-
10
- export type EventDefMap = {
11
- map: Map<string, EventDef.Any>
12
- }
13
- export type EventDefRecord = {
14
- [name: string]: EventDef.Any
15
- }
16
-
17
- export type EventDef<TName extends string, TType, TEncoded = TType, TDerived extends boolean = false> = {
18
- name: TName
19
- schema: Schema.Schema<TType, TEncoded>
20
- options: {
21
- /**
22
- * When set to true, the mutation won't be synced across clients but
23
- */
24
- clientOnly: boolean
25
- /** Warning: This feature is not fully implemented yet */
26
- facts: FactsCallback<TType> | undefined
27
- derived: TDerived
28
- }
29
-
30
- /** Helper function to construct a partial event */
31
- (
32
- args: TType,
33
- ): {
34
- name: TName
35
- args: TType
36
- }
37
-
38
- /** Helper function to construct a partial encoded event */
39
- encoded: (args: TEncoded) => {
40
- name: TName
41
- args: TEncoded
42
- }
43
-
44
- readonly Event: {
45
- name: TName
46
- args: TType
47
- }
48
- }
49
-
50
- export type FactsCallback<TTo> = (
51
- args: TTo,
52
- currentFacts: EventDefFacts,
53
- ) => {
54
- modify: {
55
- set: Iterable<EventDefFactInput>
56
- unset: Iterable<EventDefFactInput>
57
- }
58
- require: Iterable<EventDefFactInput>
59
- }
60
-
61
- export namespace EventDef {
62
- export type Any = EventDef<string, any, any, boolean>
63
-
64
- export type AnyWithoutFn = Pick<Any, 'name' | 'schema' | 'options'>
65
- }
66
-
67
- export type EventDefKey = string
68
- export type EventDefFact = string
69
- export type EventDefFacts = ReadonlyMap<string, any>
70
-
71
- export type EventDefFactsGroup = {
72
- modifySet: EventDefFacts
73
- modifyUnset: EventDefFacts
74
-
75
- /**
76
- * Events on independent "dependency" branches are commutative which can facilitate more prioritized syncing
77
- */
78
- depRequire: EventDefFacts
79
- depRead: EventDefFacts
80
- }
81
-
82
- export type EventDefFactsSnapshot = Map<string, any>
83
-
84
- export type EventDefFactInput = string | readonly [string, any]
85
-
86
- export const defineFacts = <
87
- TRecord extends Record<string, EventDefFactInput | ((...args: any[]) => EventDefFactInput)>,
88
- >(
89
- record: TRecord,
90
- ): TRecord => record
91
-
92
- export type DefineEventOptions<TTo, TDerived extends boolean = false> = {
93
- // TODO actually implement this
94
- // onError?: (error: any) => void
95
- /** Warning: This feature is not fully implemented yet */
96
- facts?: (
97
- args: TTo,
98
- currentFacts: EventDefFacts,
99
- ) => {
100
- modify?: {
101
- set?: Iterable<EventDefFactInput>
102
- unset?: Iterable<EventDefFactInput>
103
- }
104
- /**
105
- * Two purposes: constrain history and constrain compaction
106
- */
107
- require?: Iterable<EventDefFactInput>
108
- }
109
- /**
110
- * When set to true, the event won't be synced over the network
111
- */
112
- clientOnly?: boolean
113
- derived?: TDerived
114
- }
115
-
116
- export const defineEvent = <TName extends string, TType, TEncoded = TType, TDerived extends boolean = false>(
117
- args: {
118
- name: TName
119
- schema: Schema.Schema<TType, TEncoded>
120
- } & DefineEventOptions<TType, TDerived>,
121
- ): EventDef<TName, TType, TEncoded, TDerived> => {
122
- const { name, schema, ...options } = args
123
-
124
- const makePartialEvent = (args: TType) => {
125
- const res = Schema.validateEither(schema)(args)
126
- if (res._tag === 'Left') {
127
- shouldNeverHappen(`Invalid event args for event '${name}':`, res.left.message, '\n')
128
- }
129
- return { name: name, args }
130
- }
131
-
132
- Object.defineProperty(makePartialEvent, 'name', { value: name })
133
- Object.defineProperty(makePartialEvent, 'schema', { value: schema })
134
- Object.defineProperty(makePartialEvent, 'encoded', {
135
- value: (args: TEncoded) => ({ name: name, args }),
136
- })
137
-
138
- Object.defineProperty(makePartialEvent, 'options', {
139
- value: {
140
- clientOnly: options?.clientOnly ?? false,
141
- facts: options?.facts
142
- ? (args, currentFacts) => {
143
- const res = options.facts!(args, currentFacts)
144
- return {
145
- modify: {
146
- set: res.modify?.set ? new Set(res.modify.set) : new Set(),
147
- unset: res.modify?.unset ? new Set(res.modify.unset) : new Set(),
148
- },
149
- require: res.require ? new Set(res.require) : new Set(),
150
- }
151
- }
152
- : undefined,
153
- derived: options?.derived ?? false,
154
- } satisfies EventDef.Any['options'],
155
- })
156
-
157
- return makePartialEvent as EventDef<TName, TType, TEncoded, TDerived>
158
- }
159
-
160
- export const synced = <TName extends string, TType, TEncoded = TType>(
161
- args: {
162
- name: TName
163
- schema: Schema.Schema<TType, TEncoded>
164
- } & Omit<DefineEventOptions<TType, false>, 'derived' | 'clientOnly'>,
165
- ): EventDef<TName, TType, TEncoded> => defineEvent({ ...args, clientOnly: false })
166
-
167
- export const clientOnly = <TName extends string, TType, TEncoded = TType>(
168
- args: {
169
- name: TName
170
- schema: Schema.Schema<TType, TEncoded>
171
- } & Omit<DefineEventOptions<TType, false>, 'derived' | 'clientOnly'>,
172
- ): EventDef<TName, TType, TEncoded> => defineEvent({ ...args, clientOnly: true })
173
-
174
- export type MaterializerResult =
175
- | {
176
- sql: string
177
- bindValues: BindValues
178
- writeTables?: ReadonlySet<string>
179
- }
180
- | QueryBuilder.Any
181
- | string
182
-
183
- export type MaterializerContextQuery = {
184
- (args: { query: string; bindValues: ParamsObject }): ReadonlyArray<unknown>
185
- <TResult>(qb: QueryBuilder<TResult, any, any>): TResult
186
- }
187
-
188
- export type Materializer<TEventDef extends EventDef.AnyWithoutFn = EventDef.AnyWithoutFn> = (
189
- event: TEventDef['schema']['Type'],
190
- context: {
191
- currentFacts: EventDefFacts
192
- eventDef: TEventDef
193
- /** Can be used to query the current state */
194
- query: MaterializerContextQuery
195
- /** The full LiveStore event with clientId, sessionId, etc. */
196
- event: LiveStoreEvent.AnyDecoded
197
- },
198
- ) => SingleOrReadonlyArray<MaterializerResult>
199
-
200
- export const defineMaterializer = <TEventDef extends EventDef.AnyWithoutFn>(
201
- _eventDef: TEventDef,
202
- materializer: Materializer<TEventDef>,
203
- ): Materializer<TEventDef> => {
204
- return materializer
205
- }
206
-
207
- export const materializers = <TInputRecord extends Record<string, EventDef.AnyWithoutFn>>(
208
- _eventDefRecord: TInputRecord,
209
- handlers: {
210
- [TEventName in TInputRecord[keyof TInputRecord]['name'] as Extract<
211
- TInputRecord[keyof TInputRecord],
212
- { name: TEventName }
213
- >['options']['derived'] extends true
214
- ? never
215
- : TEventName]: Materializer<Extract<TInputRecord[keyof TInputRecord], { name: TEventName }>>
216
- // [K in TInputRecord[keyof TInputRecord]['name']]: Materializer<
217
- // Extract<TInputRecord[keyof TInputRecord], { name: K }>
218
- // >
219
- },
220
- ) => {
221
- return handlers
222
- }
@@ -1,199 +0,0 @@
1
- import { Brand, Schema } from '@livestore/utils/effect'
2
-
3
- export type ClientEventSequenceNumber = Brand.Branded<number, 'ClientEventSequenceNumber'>
4
- export const localEventSequenceNumber = Brand.nominal<ClientEventSequenceNumber>()
5
- export const ClientEventSequenceNumber = Schema.fromBrand(localEventSequenceNumber)(Schema.Int)
6
-
7
- export type GlobalEventSequenceNumber = Brand.Branded<number, 'GlobalEventSequenceNumber'>
8
- export const globalEventSequenceNumber = Brand.nominal<GlobalEventSequenceNumber>()
9
- export const GlobalEventSequenceNumber = Schema.fromBrand(globalEventSequenceNumber)(Schema.Int)
10
-
11
- export const clientDefault = 0 as any as ClientEventSequenceNumber
12
-
13
- export const rebaseGenerationDefault = 0
14
-
15
- /**
16
- * LiveStore event sequence number value consisting of a globally unique event sequence number
17
- * and a client sequence number.
18
- *
19
- * The client sequence number is only used for clientOnly events and starts from 0 for each global sequence number.
20
- */
21
- export type EventSequenceNumber = {
22
- global: GlobalEventSequenceNumber
23
- client: ClientEventSequenceNumber
24
- /**
25
- * Generation integer that is incremented whenever the client rebased.
26
- * Starts from and resets to 0 for each global sequence number.
27
- */
28
- rebaseGeneration: number
29
- }
30
-
31
- export type EventSequenceNumberInput =
32
- | EventSequenceNumber
33
- | (Omit<typeof EventSequenceNumber.Encoded, 'rebaseGeneration'> & { rebaseGeneration?: number })
34
-
35
- // TODO adjust name to `ClientEventSequenceNumber`
36
- /**
37
- * NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
38
- */
39
- export const EventSequenceNumber = Schema.Struct({
40
- global: GlobalEventSequenceNumber,
41
- /** Only increments for clientOnly events */
42
- client: ClientEventSequenceNumber,
43
-
44
- // TODO also provide a way to see "confirmation level" of event (e.g. confirmed by leader/sync backend)
45
-
46
- // Client only
47
- rebaseGeneration: Schema.Int,
48
- }).annotations({
49
- title: 'LiveStore.EventSequenceNumber',
50
- pretty: () => (seqNum) => toString(seqNum),
51
- })
52
-
53
- /**
54
- * Compare two event sequence numbers i.e. checks if the first event sequence number is less than the second.
55
- * Comparison hierarchy: global > client > rebaseGeneration
56
- */
57
- export const compare = (a: EventSequenceNumber, b: EventSequenceNumber) => {
58
- if (a.global !== b.global) {
59
- return a.global - b.global
60
- }
61
- if (a.client !== b.client) {
62
- return a.client - b.client
63
- }
64
- return a.rebaseGeneration - b.rebaseGeneration
65
- }
66
-
67
- /**
68
- * Convert an event sequence number to a string representation.
69
- */
70
- export const toString = (seqNum: EventSequenceNumber) => {
71
- const rebaseGenerationStr = seqNum.rebaseGeneration > 0 ? `r${seqNum.rebaseGeneration}` : ''
72
- return seqNum.client === 0
73
- ? `e${seqNum.global}${rebaseGenerationStr}`
74
- : `e${seqNum.global}+${seqNum.client}${rebaseGenerationStr}`
75
- }
76
-
77
- /**
78
- * Convert a string representation of an event sequence number to an event sequence number.
79
- * Parses strings in the format: e{global}[+{client}][r{rebaseGeneration}]
80
- * Examples: "e0", "e0r1", "e0+1", "e0+1r1"
81
- */
82
- export const fromString = (str: string): EventSequenceNumber => {
83
- if (!str.startsWith('e')) {
84
- throw new Error('Invalid event sequence number string: must start with "e"')
85
- }
86
-
87
- // Remove the 'e' prefix
88
- const remaining = str.slice(1)
89
-
90
- // Parse rebase generation if present
91
- let rebaseGeneration = rebaseGenerationDefault
92
- let withoutRebase = remaining
93
- const rebaseMatch = remaining.match(/r(\d+)$/)
94
- if (rebaseMatch !== null) {
95
- rebaseGeneration = Number.parseInt(rebaseMatch[1]!, 10)
96
- withoutRebase = remaining.slice(0, -rebaseMatch[0].length)
97
- }
98
-
99
- // Parse global and client parts
100
- const parts = withoutRebase.split('+')
101
-
102
- // Validate that parts contain only digits (and possibly empty for client)
103
- if (parts[0] === '' || !/^\d+$/.test(parts[0]!)) {
104
- throw new Error('Invalid event sequence number string: invalid number format')
105
- }
106
-
107
- if (parts.length > 1 && parts[1] !== undefined && (parts[1] === '' || !/^\d+$/.test(parts[1]))) {
108
- throw new Error('Invalid event sequence number string: invalid number format')
109
- }
110
-
111
- const global = Number.parseInt(parts[0]!, 10)
112
- const client = parts.length > 1 && parts[1] !== undefined ? Number.parseInt(parts[1], 10) : 0
113
-
114
- if (Number.isNaN(global) || Number.isNaN(client) || Number.isNaN(rebaseGeneration)) {
115
- throw new TypeError('Invalid event sequence number string: invalid number format')
116
- }
117
-
118
- return {
119
- global: global as any as GlobalEventSequenceNumber,
120
- client: client as any as ClientEventSequenceNumber,
121
- rebaseGeneration,
122
- }
123
- }
124
-
125
- export const fromGlobal = (seqNum: GlobalEventSequenceNumber) => ({
126
- global: seqNum,
127
- client: clientDefault,
128
- rebaseGeneration: rebaseGenerationDefault,
129
- })
130
-
131
- export const isEqual = (a: EventSequenceNumber, b: EventSequenceNumber) =>
132
- a.global === b.global && a.client === b.client && a.rebaseGeneration === b.rebaseGeneration
133
-
134
- export type EventSequenceNumberPair = { seqNum: EventSequenceNumber; parentSeqNum: EventSequenceNumber }
135
-
136
- export const ROOT = {
137
- global: 0 as any as GlobalEventSequenceNumber,
138
- client: clientDefault,
139
- rebaseGeneration: rebaseGenerationDefault,
140
- } satisfies EventSequenceNumber
141
-
142
- export const isGreaterThan = (a: EventSequenceNumber, b: EventSequenceNumber) => {
143
- return a.global > b.global || (a.global === b.global && a.client > b.client)
144
- }
145
-
146
- export const isGreaterThanOrEqual = (a: EventSequenceNumber, b: EventSequenceNumber) => {
147
- return a.global > b.global || (a.global === b.global && a.client >= b.client)
148
- }
149
-
150
- export const max = (a: EventSequenceNumber, b: EventSequenceNumber) => {
151
- return a.global > b.global || (a.global === b.global && a.client > b.client) ? a : b
152
- }
153
-
154
- export const diff = (a: EventSequenceNumber, b: EventSequenceNumber) => {
155
- return {
156
- global: a.global - b.global,
157
- client: a.client - b.client,
158
- }
159
- }
160
-
161
- export const make = (seqNum: EventSequenceNumberInput): EventSequenceNumber => {
162
- return Schema.is(EventSequenceNumber)(seqNum)
163
- ? seqNum
164
- : Schema.decodeSync(EventSequenceNumber)({
165
- ...seqNum,
166
- rebaseGeneration: seqNum.rebaseGeneration ?? rebaseGenerationDefault,
167
- })
168
- }
169
-
170
- export const nextPair = ({
171
- seqNum,
172
- isClient,
173
- rebaseGeneration,
174
- }: {
175
- seqNum: EventSequenceNumber
176
- isClient: boolean
177
- rebaseGeneration?: number
178
- }): EventSequenceNumberPair => {
179
- if (isClient) {
180
- return {
181
- seqNum: {
182
- global: seqNum.global,
183
- client: (seqNum.client + 1) as any as ClientEventSequenceNumber,
184
- rebaseGeneration: rebaseGeneration ?? seqNum.rebaseGeneration,
185
- },
186
- parentSeqNum: seqNum,
187
- }
188
- }
189
-
190
- return {
191
- seqNum: {
192
- global: (seqNum.global + 1) as any as GlobalEventSequenceNumber,
193
- client: clientDefault,
194
- rebaseGeneration: rebaseGenerationDefault,
195
- },
196
- // NOTE we always point to `client: 0` for non-clientOnly events
197
- parentSeqNum: { global: seqNum.global, client: clientDefault, rebaseGeneration: seqNum.rebaseGeneration },
198
- }
199
- }