@livestore/common 0.3.0-dev.5 → 0.3.0-dev.50

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 (491) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/__tests__/fixture.d.ts +83 -221
  3. package/dist/__tests__/fixture.d.ts.map +1 -1
  4. package/dist/__tests__/fixture.js +33 -11
  5. package/dist/__tests__/fixture.js.map +1 -1
  6. package/dist/adapter-types.d.ts +120 -64
  7. package/dist/adapter-types.d.ts.map +1 -1
  8. package/dist/adapter-types.js +39 -8
  9. package/dist/adapter-types.js.map +1 -1
  10. package/dist/bounded-collections.d.ts.map +1 -1
  11. package/dist/debug-info.d.ts +1 -1
  12. package/dist/debug-info.d.ts.map +1 -1
  13. package/dist/debug-info.js +1 -0
  14. package/dist/debug-info.js.map +1 -1
  15. package/dist/devtools/devtools-messages-client-session.d.ts +390 -0
  16. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -0
  17. package/dist/devtools/devtools-messages-client-session.js +97 -0
  18. package/dist/devtools/devtools-messages-client-session.js.map +1 -0
  19. package/dist/devtools/devtools-messages-common.d.ts +68 -0
  20. package/dist/devtools/devtools-messages-common.d.ts.map +1 -0
  21. package/dist/devtools/devtools-messages-common.js +60 -0
  22. package/dist/devtools/devtools-messages-common.js.map +1 -0
  23. package/dist/devtools/devtools-messages-leader.d.ts +394 -0
  24. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -0
  25. package/dist/devtools/devtools-messages-leader.js +147 -0
  26. package/dist/devtools/devtools-messages-leader.js.map +1 -0
  27. package/dist/devtools/devtools-messages.d.ts +3 -580
  28. package/dist/devtools/devtools-messages.d.ts.map +1 -1
  29. package/dist/devtools/devtools-messages.js +3 -174
  30. package/dist/devtools/devtools-messages.js.map +1 -1
  31. package/dist/devtools/devtools-sessioninfo.d.ts +32 -0
  32. package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -0
  33. package/dist/devtools/devtools-sessioninfo.js +36 -0
  34. package/dist/devtools/devtools-sessioninfo.js.map +1 -0
  35. package/dist/devtools/mod.d.ts +55 -0
  36. package/dist/devtools/mod.d.ts.map +1 -0
  37. package/dist/devtools/mod.js +33 -0
  38. package/dist/devtools/mod.js.map +1 -0
  39. package/dist/index.d.ts +7 -13
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +7 -9
  42. package/dist/index.js.map +1 -1
  43. package/dist/leader-thread/LeaderSyncProcessor.d.ts +62 -0
  44. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -0
  45. package/dist/leader-thread/LeaderSyncProcessor.js +595 -0
  46. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -0
  47. package/dist/leader-thread/connection.d.ts +34 -6
  48. package/dist/leader-thread/connection.d.ts.map +1 -1
  49. package/dist/leader-thread/connection.js +22 -7
  50. package/dist/leader-thread/connection.js.map +1 -1
  51. package/dist/leader-thread/eventlog.d.ts +27 -0
  52. package/dist/leader-thread/eventlog.d.ts.map +1 -0
  53. package/dist/leader-thread/eventlog.js +119 -0
  54. package/dist/leader-thread/eventlog.js.map +1 -0
  55. package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
  56. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  57. package/dist/leader-thread/leader-worker-devtools.js +155 -80
  58. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  59. package/dist/leader-thread/make-leader-thread-layer.d.ts +23 -11
  60. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  61. package/dist/leader-thread/make-leader-thread-layer.js +72 -47
  62. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  63. package/dist/leader-thread/materialize-event.d.ts +16 -0
  64. package/dist/leader-thread/materialize-event.d.ts.map +1 -0
  65. package/dist/leader-thread/materialize-event.js +109 -0
  66. package/dist/leader-thread/materialize-event.js.map +1 -0
  67. package/dist/leader-thread/mod.d.ts +1 -1
  68. package/dist/leader-thread/mod.d.ts.map +1 -1
  69. package/dist/leader-thread/mod.js +1 -1
  70. package/dist/leader-thread/mod.js.map +1 -1
  71. package/dist/leader-thread/recreate-db.d.ts +4 -2
  72. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  73. package/dist/leader-thread/recreate-db.js +33 -31
  74. package/dist/leader-thread/recreate-db.js.map +1 -1
  75. package/dist/leader-thread/shutdown-channel.d.ts +2 -5
  76. package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
  77. package/dist/leader-thread/shutdown-channel.js +2 -4
  78. package/dist/leader-thread/shutdown-channel.js.map +1 -1
  79. package/dist/leader-thread/types.d.ts +87 -40
  80. package/dist/leader-thread/types.d.ts.map +1 -1
  81. package/dist/leader-thread/types.js +1 -3
  82. package/dist/leader-thread/types.js.map +1 -1
  83. package/dist/make-client-session.d.ts +23 -0
  84. package/dist/make-client-session.d.ts.map +1 -0
  85. package/dist/make-client-session.js +57 -0
  86. package/dist/make-client-session.js.map +1 -0
  87. package/dist/materializer-helper.d.ts +23 -0
  88. package/dist/materializer-helper.d.ts.map +1 -0
  89. package/dist/materializer-helper.js +86 -0
  90. package/dist/materializer-helper.js.map +1 -0
  91. package/dist/otel.d.ts +2 -0
  92. package/dist/otel.d.ts.map +1 -1
  93. package/dist/otel.js +5 -0
  94. package/dist/otel.js.map +1 -1
  95. package/dist/rematerialize-from-eventlog.d.ts +14 -0
  96. package/dist/rematerialize-from-eventlog.d.ts.map +1 -0
  97. package/dist/rematerialize-from-eventlog.js +64 -0
  98. package/dist/rematerialize-from-eventlog.js.map +1 -0
  99. package/dist/schema/EventDef.d.ts +146 -0
  100. package/dist/schema/EventDef.d.ts.map +1 -0
  101. package/dist/schema/EventDef.js +58 -0
  102. package/dist/schema/EventDef.js.map +1 -0
  103. package/dist/schema/EventId.d.ts +43 -25
  104. package/dist/schema/EventId.d.ts.map +1 -1
  105. package/dist/schema/EventId.js +56 -18
  106. package/dist/schema/EventId.js.map +1 -1
  107. package/dist/schema/EventId.test.d.ts +2 -0
  108. package/dist/schema/EventId.test.d.ts.map +1 -0
  109. package/dist/schema/EventId.test.js +11 -0
  110. package/dist/schema/EventId.test.js.map +1 -0
  111. package/dist/schema/EventNumber.d.ts +57 -0
  112. package/dist/schema/EventNumber.d.ts.map +1 -0
  113. package/dist/schema/EventNumber.js +82 -0
  114. package/dist/schema/EventNumber.js.map +1 -0
  115. package/dist/schema/EventNumber.test.d.ts +2 -0
  116. package/dist/schema/EventNumber.test.d.ts.map +1 -0
  117. package/dist/schema/EventNumber.test.js +11 -0
  118. package/dist/schema/EventNumber.test.js.map +1 -0
  119. package/dist/schema/EventSequenceNumber.d.ts +57 -0
  120. package/dist/schema/EventSequenceNumber.d.ts.map +1 -0
  121. package/dist/schema/EventSequenceNumber.js +82 -0
  122. package/dist/schema/EventSequenceNumber.js.map +1 -0
  123. package/dist/schema/EventSequenceNumber.test.d.ts +2 -0
  124. package/dist/schema/EventSequenceNumber.test.d.ts.map +1 -0
  125. package/dist/schema/EventSequenceNumber.test.js +11 -0
  126. package/dist/schema/EventSequenceNumber.test.js.map +1 -0
  127. package/dist/schema/LiveStoreEvent.d.ts +257 -0
  128. package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
  129. package/dist/schema/LiveStoreEvent.js +117 -0
  130. package/dist/schema/LiveStoreEvent.js.map +1 -0
  131. package/dist/schema/events.d.ts +2 -0
  132. package/dist/schema/events.d.ts.map +1 -0
  133. package/dist/schema/events.js +2 -0
  134. package/dist/schema/events.js.map +1 -0
  135. package/dist/schema/mod.d.ts +8 -6
  136. package/dist/schema/mod.d.ts.map +1 -1
  137. package/dist/schema/mod.js +8 -6
  138. package/dist/schema/mod.js.map +1 -1
  139. package/dist/schema/schema.d.ts +50 -32
  140. package/dist/schema/schema.d.ts.map +1 -1
  141. package/dist/schema/schema.js +36 -43
  142. package/dist/schema/schema.js.map +1 -1
  143. package/dist/schema/state/mod.d.ts +3 -0
  144. package/dist/schema/state/mod.d.ts.map +1 -0
  145. package/dist/schema/state/mod.js +3 -0
  146. package/dist/schema/state/mod.js.map +1 -0
  147. package/dist/schema/state/sqlite/client-document-def.d.ts +223 -0
  148. package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -0
  149. package/dist/schema/state/sqlite/client-document-def.js +170 -0
  150. package/dist/schema/state/sqlite/client-document-def.js.map +1 -0
  151. package/dist/schema/state/sqlite/client-document-def.test.d.ts +2 -0
  152. package/dist/schema/state/sqlite/client-document-def.test.d.ts.map +1 -0
  153. package/dist/schema/state/sqlite/client-document-def.test.js +201 -0
  154. package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -0
  155. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +69 -0
  156. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -0
  157. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +71 -0
  158. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -0
  159. package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts +3 -0
  160. package/dist/schema/state/sqlite/db-schema/ast/validate.d.ts.map +1 -0
  161. package/dist/schema/state/sqlite/db-schema/ast/validate.js +12 -0
  162. package/dist/schema/state/sqlite/db-schema/ast/validate.js.map +1 -0
  163. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +90 -0
  164. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -0
  165. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +87 -0
  166. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -0
  167. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.d.ts +2 -0
  168. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.d.ts.map +1 -0
  169. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js +29 -0
  170. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.test.js.map +1 -0
  171. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts +90 -0
  172. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -0
  173. package/dist/schema/state/sqlite/db-schema/dsl/mod.js +41 -0
  174. package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -0
  175. package/dist/schema/state/sqlite/db-schema/hash.d.ts +2 -0
  176. package/dist/schema/state/sqlite/db-schema/hash.d.ts.map +1 -0
  177. package/dist/schema/state/sqlite/db-schema/hash.js +14 -0
  178. package/dist/schema/state/sqlite/db-schema/hash.js.map +1 -0
  179. package/dist/schema/state/sqlite/db-schema/mod.d.ts +3 -0
  180. package/dist/schema/state/sqlite/db-schema/mod.d.ts.map +1 -0
  181. package/dist/schema/state/sqlite/db-schema/mod.js +3 -0
  182. package/dist/schema/state/sqlite/db-schema/mod.js.map +1 -0
  183. package/dist/schema/state/sqlite/mod.d.ts +17 -0
  184. package/dist/schema/state/sqlite/mod.d.ts.map +1 -0
  185. package/dist/schema/state/sqlite/mod.js +41 -0
  186. package/dist/schema/state/sqlite/mod.js.map +1 -0
  187. package/dist/schema/state/sqlite/query-builder/api.d.ts +294 -0
  188. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -0
  189. package/dist/schema/state/sqlite/query-builder/api.js +6 -0
  190. package/dist/schema/state/sqlite/query-builder/api.js.map +1 -0
  191. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts +7 -0
  192. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -0
  193. package/dist/schema/state/sqlite/query-builder/astToSql.js +190 -0
  194. package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -0
  195. package/dist/schema/state/sqlite/query-builder/impl.d.ts +7 -0
  196. package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -0
  197. package/dist/schema/state/sqlite/query-builder/impl.js +286 -0
  198. package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -0
  199. package/dist/schema/state/sqlite/query-builder/impl.test.d.ts +87 -0
  200. package/dist/schema/state/sqlite/query-builder/impl.test.d.ts.map +1 -0
  201. package/dist/schema/state/sqlite/query-builder/impl.test.js +563 -0
  202. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -0
  203. package/dist/{query-builder → schema/state/sqlite/query-builder}/mod.d.ts +7 -0
  204. package/dist/schema/state/sqlite/query-builder/mod.d.ts.map +1 -0
  205. package/dist/{query-builder → schema/state/sqlite/query-builder}/mod.js +7 -0
  206. package/dist/schema/state/sqlite/query-builder/mod.js.map +1 -0
  207. package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -0
  208. package/dist/schema/{schema-helpers.js → state/sqlite/schema-helpers.js} +1 -1
  209. package/dist/schema/state/sqlite/schema-helpers.js.map +1 -0
  210. package/dist/schema/state/sqlite/system-tables.d.ts +574 -0
  211. package/dist/schema/state/sqlite/system-tables.d.ts.map +1 -0
  212. package/dist/schema/state/sqlite/system-tables.js +88 -0
  213. package/dist/schema/state/sqlite/system-tables.js.map +1 -0
  214. package/dist/schema/state/sqlite/table-def.d.ts +84 -0
  215. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -0
  216. package/dist/schema/state/sqlite/table-def.js +36 -0
  217. package/dist/schema/state/sqlite/table-def.js.map +1 -0
  218. package/dist/schema-management/common.d.ts +7 -7
  219. package/dist/schema-management/common.d.ts.map +1 -1
  220. package/dist/schema-management/common.js.map +1 -1
  221. package/dist/schema-management/migrations.d.ts +6 -6
  222. package/dist/schema-management/migrations.d.ts.map +1 -1
  223. package/dist/schema-management/migrations.js +27 -18
  224. package/dist/schema-management/migrations.js.map +1 -1
  225. package/dist/schema-management/validate-schema.d.ts +8 -0
  226. package/dist/schema-management/validate-schema.d.ts.map +1 -0
  227. package/dist/schema-management/validate-schema.js +39 -0
  228. package/dist/schema-management/validate-schema.js.map +1 -0
  229. package/dist/sql-queries/misc.d.ts.map +1 -1
  230. package/dist/sql-queries/sql-queries.d.ts +1 -1
  231. package/dist/sql-queries/sql-queries.d.ts.map +1 -1
  232. package/dist/sql-queries/sql-queries.js.map +1 -1
  233. package/dist/sql-queries/sql-query-builder.d.ts +1 -1
  234. package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
  235. package/dist/sql-queries/sql-query-builder.js.map +1 -1
  236. package/dist/sql-queries/types.d.ts +2 -1
  237. package/dist/sql-queries/types.d.ts.map +1 -1
  238. package/dist/sql-queries/types.js.map +1 -1
  239. package/dist/sync/ClientSessionSyncProcessor.d.ts +66 -0
  240. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -0
  241. package/dist/sync/ClientSessionSyncProcessor.js +209 -0
  242. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -0
  243. package/dist/sync/index.d.ts +1 -1
  244. package/dist/sync/index.d.ts.map +1 -1
  245. package/dist/sync/index.js +1 -1
  246. package/dist/sync/index.js.map +1 -1
  247. package/dist/sync/next/compact-events.d.ts.map +1 -1
  248. package/dist/sync/next/compact-events.js +38 -35
  249. package/dist/sync/next/compact-events.js.map +1 -1
  250. package/dist/sync/next/facts.d.ts +21 -21
  251. package/dist/sync/next/facts.d.ts.map +1 -1
  252. package/dist/sync/next/facts.js +11 -11
  253. package/dist/sync/next/facts.js.map +1 -1
  254. package/dist/sync/next/history-dag-common.d.ts +9 -7
  255. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  256. package/dist/sync/next/history-dag-common.js +10 -5
  257. package/dist/sync/next/history-dag-common.js.map +1 -1
  258. package/dist/sync/next/history-dag.d.ts +0 -2
  259. package/dist/sync/next/history-dag.d.ts.map +1 -1
  260. package/dist/sync/next/history-dag.js +16 -14
  261. package/dist/sync/next/history-dag.js.map +1 -1
  262. package/dist/sync/next/rebase-events.d.ts +10 -8
  263. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  264. package/dist/sync/next/rebase-events.js +18 -10
  265. package/dist/sync/next/rebase-events.js.map +1 -1
  266. package/dist/sync/next/test/compact-events.calculator.test.js +39 -34
  267. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  268. package/dist/sync/next/test/compact-events.test.js +77 -77
  269. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  270. package/dist/sync/next/test/{mutation-fixtures.d.ts → event-fixtures.d.ts} +38 -28
  271. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -0
  272. package/dist/sync/next/test/{mutation-fixtures.js → event-fixtures.js} +81 -38
  273. package/dist/sync/next/test/event-fixtures.js.map +1 -0
  274. package/dist/sync/next/test/mod.d.ts +1 -1
  275. package/dist/sync/next/test/mod.d.ts.map +1 -1
  276. package/dist/sync/next/test/mod.js +1 -1
  277. package/dist/sync/next/test/mod.js.map +1 -1
  278. package/dist/sync/sync.d.ts +60 -25
  279. package/dist/sync/sync.d.ts.map +1 -1
  280. package/dist/sync/sync.js +10 -6
  281. package/dist/sync/sync.js.map +1 -1
  282. package/dist/sync/syncstate.d.ts +213 -82
  283. package/dist/sync/syncstate.d.ts.map +1 -1
  284. package/dist/sync/syncstate.js +337 -139
  285. package/dist/sync/syncstate.js.map +1 -1
  286. package/dist/sync/syncstate.test.js +310 -286
  287. package/dist/sync/syncstate.test.js.map +1 -1
  288. package/dist/sync/validate-push-payload.d.ts +2 -2
  289. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  290. package/dist/sync/validate-push-payload.js +4 -4
  291. package/dist/sync/validate-push-payload.js.map +1 -1
  292. package/dist/util.d.ts +2 -2
  293. package/dist/util.d.ts.map +1 -1
  294. package/dist/version.d.ts +2 -2
  295. package/dist/version.d.ts.map +1 -1
  296. package/dist/version.js +2 -2
  297. package/dist/version.js.map +1 -1
  298. package/package.json +13 -6
  299. package/src/__tests__/fixture.ts +36 -15
  300. package/src/adapter-types.ts +107 -68
  301. package/src/debug-info.ts +1 -0
  302. package/src/devtools/devtools-messages-client-session.ts +142 -0
  303. package/src/devtools/devtools-messages-common.ts +115 -0
  304. package/src/devtools/devtools-messages-leader.ts +191 -0
  305. package/src/devtools/devtools-messages.ts +3 -246
  306. package/src/devtools/devtools-sessioninfo.ts +101 -0
  307. package/src/devtools/mod.ts +59 -0
  308. package/src/index.ts +7 -15
  309. package/src/leader-thread/LeaderSyncProcessor.ts +940 -0
  310. package/src/leader-thread/connection.ts +54 -9
  311. package/src/leader-thread/eventlog.ts +199 -0
  312. package/src/leader-thread/leader-worker-devtools.ts +227 -104
  313. package/src/leader-thread/make-leader-thread-layer.ts +128 -78
  314. package/src/leader-thread/materialize-event.ts +173 -0
  315. package/src/leader-thread/mod.ts +1 -1
  316. package/src/leader-thread/recreate-db.ts +38 -39
  317. package/src/leader-thread/shutdown-channel.ts +2 -4
  318. package/src/leader-thread/types.ts +96 -50
  319. package/src/make-client-session.ts +136 -0
  320. package/src/materializer-helper.ts +138 -0
  321. package/src/otel.ts +8 -0
  322. package/src/rematerialize-from-eventlog.ts +117 -0
  323. package/src/schema/EventDef.ts +227 -0
  324. package/src/schema/EventSequenceNumber.test.ts +12 -0
  325. package/src/schema/EventSequenceNumber.ts +121 -0
  326. package/src/schema/LiveStoreEvent.ts +240 -0
  327. package/src/schema/events.ts +1 -0
  328. package/src/schema/mod.ts +8 -6
  329. package/src/schema/schema.ts +88 -84
  330. package/src/schema/state/mod.ts +2 -0
  331. package/src/schema/state/sqlite/client-document-def.test.ts +238 -0
  332. package/src/schema/state/sqlite/client-document-def.ts +444 -0
  333. package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +142 -0
  334. package/src/schema/state/sqlite/db-schema/ast/validate.ts +13 -0
  335. package/src/schema/state/sqlite/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +206 -0
  336. package/src/schema/state/sqlite/db-schema/dsl/field-defs.test.ts +35 -0
  337. package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +242 -0
  338. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +222 -0
  339. package/src/schema/state/sqlite/db-schema/hash.ts +14 -0
  340. package/src/schema/state/sqlite/db-schema/mod.ts +2 -0
  341. package/src/schema/state/sqlite/mod.ts +73 -0
  342. package/src/schema/state/sqlite/query-builder/api.ts +440 -0
  343. package/src/schema/state/sqlite/query-builder/astToSql.ts +232 -0
  344. package/src/schema/state/sqlite/query-builder/impl.test.ts +617 -0
  345. package/src/schema/state/sqlite/query-builder/impl.ts +351 -0
  346. package/src/{query-builder → schema/state/sqlite/query-builder}/mod.ts +7 -0
  347. package/src/schema/{schema-helpers.ts → state/sqlite/schema-helpers.ts} +1 -1
  348. package/src/schema/state/sqlite/system-tables.ts +117 -0
  349. package/src/schema/state/sqlite/table-def.ts +197 -0
  350. package/src/schema-management/common.ts +7 -7
  351. package/src/schema-management/migrations.ts +37 -31
  352. package/src/schema-management/validate-schema.ts +61 -0
  353. package/src/sql-queries/sql-queries.ts +1 -1
  354. package/src/sql-queries/sql-query-builder.ts +1 -2
  355. package/src/sql-queries/types.ts +3 -1
  356. package/src/sync/ClientSessionSyncProcessor.ts +332 -0
  357. package/src/sync/index.ts +1 -1
  358. package/src/sync/next/compact-events.ts +38 -35
  359. package/src/sync/next/facts.ts +43 -41
  360. package/src/sync/next/history-dag-common.ts +17 -10
  361. package/src/sync/next/history-dag.ts +16 -17
  362. package/src/sync/next/rebase-events.ts +29 -17
  363. package/src/sync/next/test/compact-events.calculator.test.ts +46 -46
  364. package/src/sync/next/test/compact-events.test.ts +79 -79
  365. package/src/sync/next/test/event-fixtures.ts +226 -0
  366. package/src/sync/next/test/mod.ts +1 -1
  367. package/src/sync/sync.ts +60 -24
  368. package/src/sync/syncstate.test.ts +347 -320
  369. package/src/sync/syncstate.ts +422 -230
  370. package/src/sync/validate-push-payload.ts +6 -6
  371. package/src/version.ts +2 -2
  372. package/dist/derived-mutations.d.ts +0 -109
  373. package/dist/derived-mutations.d.ts.map +0 -1
  374. package/dist/derived-mutations.js +0 -54
  375. package/dist/derived-mutations.js.map +0 -1
  376. package/dist/derived-mutations.test.d.ts +0 -2
  377. package/dist/derived-mutations.test.d.ts.map +0 -1
  378. package/dist/derived-mutations.test.js +0 -93
  379. package/dist/derived-mutations.test.js.map +0 -1
  380. package/dist/devtools/devtools-bridge.d.ts +0 -13
  381. package/dist/devtools/devtools-bridge.d.ts.map +0 -1
  382. package/dist/devtools/devtools-bridge.js +0 -2
  383. package/dist/devtools/devtools-bridge.js.map +0 -1
  384. package/dist/devtools/devtools-window-message.d.ts +0 -29
  385. package/dist/devtools/devtools-window-message.d.ts.map +0 -1
  386. package/dist/devtools/devtools-window-message.js +0 -33
  387. package/dist/devtools/devtools-window-message.js.map +0 -1
  388. package/dist/devtools/index.d.ts +0 -42
  389. package/dist/devtools/index.d.ts.map +0 -1
  390. package/dist/devtools/index.js +0 -48
  391. package/dist/devtools/index.js.map +0 -1
  392. package/dist/init-singleton-tables.d.ts +0 -4
  393. package/dist/init-singleton-tables.d.ts.map +0 -1
  394. package/dist/init-singleton-tables.js +0 -16
  395. package/dist/init-singleton-tables.js.map +0 -1
  396. package/dist/leader-thread/apply-mutation.d.ts +0 -8
  397. package/dist/leader-thread/apply-mutation.d.ts.map +0 -1
  398. package/dist/leader-thread/apply-mutation.js +0 -95
  399. package/dist/leader-thread/apply-mutation.js.map +0 -1
  400. package/dist/leader-thread/leader-sync-processor.d.ts +0 -47
  401. package/dist/leader-thread/leader-sync-processor.d.ts.map +0 -1
  402. package/dist/leader-thread/leader-sync-processor.js +0 -425
  403. package/dist/leader-thread/leader-sync-processor.js.map +0 -1
  404. package/dist/leader-thread/mutationlog.d.ts +0 -10
  405. package/dist/leader-thread/mutationlog.d.ts.map +0 -1
  406. package/dist/leader-thread/mutationlog.js +0 -28
  407. package/dist/leader-thread/mutationlog.js.map +0 -1
  408. package/dist/leader-thread/pull-queue-set.d.ts +0 -7
  409. package/dist/leader-thread/pull-queue-set.d.ts.map +0 -1
  410. package/dist/leader-thread/pull-queue-set.js +0 -39
  411. package/dist/leader-thread/pull-queue-set.js.map +0 -1
  412. package/dist/mutation.d.ts +0 -13
  413. package/dist/mutation.d.ts.map +0 -1
  414. package/dist/mutation.js +0 -57
  415. package/dist/mutation.js.map +0 -1
  416. package/dist/query-builder/api.d.ts +0 -190
  417. package/dist/query-builder/api.d.ts.map +0 -1
  418. package/dist/query-builder/api.js +0 -8
  419. package/dist/query-builder/api.js.map +0 -1
  420. package/dist/query-builder/impl.d.ts +0 -12
  421. package/dist/query-builder/impl.d.ts.map +0 -1
  422. package/dist/query-builder/impl.js +0 -244
  423. package/dist/query-builder/impl.js.map +0 -1
  424. package/dist/query-builder/impl.test.d.ts +0 -2
  425. package/dist/query-builder/impl.test.d.ts.map +0 -1
  426. package/dist/query-builder/impl.test.js +0 -212
  427. package/dist/query-builder/impl.test.js.map +0 -1
  428. package/dist/query-builder/mod.d.ts.map +0 -1
  429. package/dist/query-builder/mod.js.map +0 -1
  430. package/dist/query-info.d.ts +0 -38
  431. package/dist/query-info.d.ts.map +0 -1
  432. package/dist/query-info.js +0 -7
  433. package/dist/query-info.js.map +0 -1
  434. package/dist/rehydrate-from-mutationlog.d.ts +0 -14
  435. package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
  436. package/dist/rehydrate-from-mutationlog.js +0 -72
  437. package/dist/rehydrate-from-mutationlog.js.map +0 -1
  438. package/dist/schema/MutationEvent.d.ts +0 -166
  439. package/dist/schema/MutationEvent.d.ts.map +0 -1
  440. package/dist/schema/MutationEvent.js +0 -72
  441. package/dist/schema/MutationEvent.js.map +0 -1
  442. package/dist/schema/mutations.d.ts +0 -107
  443. package/dist/schema/mutations.d.ts.map +0 -1
  444. package/dist/schema/mutations.js +0 -42
  445. package/dist/schema/mutations.js.map +0 -1
  446. package/dist/schema/schema-helpers.d.ts.map +0 -1
  447. package/dist/schema/schema-helpers.js.map +0 -1
  448. package/dist/schema/system-tables.d.ts +0 -399
  449. package/dist/schema/system-tables.d.ts.map +0 -1
  450. package/dist/schema/system-tables.js +0 -58
  451. package/dist/schema/system-tables.js.map +0 -1
  452. package/dist/schema/table-def.d.ts +0 -156
  453. package/dist/schema/table-def.d.ts.map +0 -1
  454. package/dist/schema/table-def.js +0 -79
  455. package/dist/schema/table-def.js.map +0 -1
  456. package/dist/schema-management/validate-mutation-defs.d.ts +0 -8
  457. package/dist/schema-management/validate-mutation-defs.d.ts.map +0 -1
  458. package/dist/schema-management/validate-mutation-defs.js +0 -39
  459. package/dist/schema-management/validate-mutation-defs.js.map +0 -1
  460. package/dist/sync/client-session-sync-processor.d.ts +0 -45
  461. package/dist/sync/client-session-sync-processor.d.ts.map +0 -1
  462. package/dist/sync/client-session-sync-processor.js +0 -131
  463. package/dist/sync/client-session-sync-processor.js.map +0 -1
  464. package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
  465. package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
  466. package/src/derived-mutations.test.ts +0 -101
  467. package/src/derived-mutations.ts +0 -166
  468. package/src/devtools/devtools-bridge.ts +0 -14
  469. package/src/devtools/devtools-window-message.ts +0 -27
  470. package/src/devtools/index.ts +0 -48
  471. package/src/init-singleton-tables.ts +0 -24
  472. package/src/leader-thread/apply-mutation.ts +0 -143
  473. package/src/leader-thread/leader-sync-processor.ts +0 -670
  474. package/src/leader-thread/mutationlog.ts +0 -46
  475. package/src/leader-thread/pull-queue-set.ts +0 -58
  476. package/src/mutation.ts +0 -81
  477. package/src/query-builder/api.ts +0 -289
  478. package/src/query-builder/impl.test.ts +0 -239
  479. package/src/query-builder/impl.ts +0 -285
  480. package/src/query-info.ts +0 -78
  481. package/src/rehydrate-from-mutationlog.ts +0 -127
  482. package/src/schema/EventId.ts +0 -60
  483. package/src/schema/MutationEvent.ts +0 -180
  484. package/src/schema/mutations.ts +0 -192
  485. package/src/schema/system-tables.ts +0 -104
  486. package/src/schema/table-def.ts +0 -343
  487. package/src/schema-management/validate-mutation-defs.ts +0 -63
  488. package/src/sync/client-session-sync-processor.ts +0 -207
  489. package/src/sync/next/test/mutation-fixtures.ts +0 -224
  490. package/tsconfig.json +0 -11
  491. /package/dist/schema/{schema-helpers.d.ts → state/sqlite/schema-helpers.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rematerialize-from-eventlog.js","sourceRoot":"","sources":["../src/rematerialize-from-eventlog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ import type { SingleOrReadonlyArray } from '@livestore/utils';
2
+ import { Schema } from '@livestore/utils/effect';
3
+ import type { BindValues } from '../sql-queries/sql-queries.js';
4
+ import type { ParamsObject } from '../util.js';
5
+ import type { QueryBuilder } from './state/sqlite/query-builder/mod.js';
6
+ export type EventDefMap = {
7
+ map: Map<string | 'livestore.RawSql', EventDef.Any>;
8
+ };
9
+ export type EventDefRecord = {
10
+ 'livestore.RawSql': RawSqlEvent;
11
+ [name: string]: EventDef.Any;
12
+ };
13
+ export type EventDef<TName extends string, TType, TEncoded = TType, TDerived extends boolean = false> = {
14
+ name: TName;
15
+ schema: Schema.Schema<TType, TEncoded>;
16
+ options: {
17
+ /**
18
+ * When set to true, the mutation won't be synced across clients but
19
+ */
20
+ clientOnly: boolean;
21
+ /** Warning: This feature is not fully implemented yet */
22
+ facts: FactsCallback<TType> | undefined;
23
+ derived: TDerived;
24
+ };
25
+ /** Helper function to construct a partial mutation event */
26
+ (args: TType): {
27
+ name: TName;
28
+ args: TType;
29
+ };
30
+ readonly Event: {
31
+ name: TName;
32
+ args: TType;
33
+ };
34
+ };
35
+ export type FactsCallback<TTo> = (args: TTo, currentFacts: EventDefFacts) => {
36
+ modify: {
37
+ set: Iterable<EventDefFactInput>;
38
+ unset: Iterable<EventDefFactInput>;
39
+ };
40
+ require: Iterable<EventDefFactInput>;
41
+ };
42
+ export declare namespace EventDef {
43
+ type Any = EventDef<string, any, any, boolean>;
44
+ type AnyWithoutFn = Pick<Any, 'name' | 'schema' | 'options'>;
45
+ }
46
+ export type EventDefKey = string;
47
+ export type EventDefFact = string;
48
+ export type EventDefFacts = ReadonlyMap<string, any>;
49
+ export type EventDefFactsGroup = {
50
+ modifySet: EventDefFacts;
51
+ modifyUnset: EventDefFacts;
52
+ /**
53
+ * Events on independent "dependency" branches are commutative which can facilitate more prioritized syncing
54
+ */
55
+ depRequire: EventDefFacts;
56
+ depRead: EventDefFacts;
57
+ };
58
+ export type EventDefFactsSnapshot = Map<string, any>;
59
+ export type EventDefFactInput = string | readonly [string, any];
60
+ export declare const defineFacts: <TRecord extends Record<string, EventDefFactInput | ((...args: any[]) => EventDefFactInput)>>(record: TRecord) => TRecord;
61
+ export type DefineEventOptions<TTo, TDerived extends boolean = false> = {
62
+ /** Warning: This feature is not fully implemented yet */
63
+ facts?: (args: TTo, currentFacts: EventDefFacts) => {
64
+ modify?: {
65
+ set?: Iterable<EventDefFactInput>;
66
+ unset?: Iterable<EventDefFactInput>;
67
+ };
68
+ /**
69
+ * Two purposes: constrain history and constrain compaction
70
+ */
71
+ require?: Iterable<EventDefFactInput>;
72
+ };
73
+ /**
74
+ * When set to true, the event won't be synced over the network
75
+ */
76
+ clientOnly?: boolean;
77
+ derived?: TDerived;
78
+ };
79
+ export declare const defineEvent: <TName extends string, TType, TEncoded = TType, TDerived extends boolean = false>(args: {
80
+ name: TName;
81
+ schema: Schema.Schema<TType, TEncoded>;
82
+ } & DefineEventOptions<TType, TDerived>) => EventDef<TName, TType, TEncoded, TDerived>;
83
+ export declare const synced: <TName extends string, TType, TEncoded = TType>(args: {
84
+ name: TName;
85
+ schema: Schema.Schema<TType, TEncoded>;
86
+ } & Omit<DefineEventOptions<TType, false>, "derived" | "clientOnly">) => EventDef<TName, TType, TEncoded>;
87
+ export declare const clientOnly: <TName extends string, TType, TEncoded = TType>(args: {
88
+ name: TName;
89
+ schema: Schema.Schema<TType, TEncoded>;
90
+ } & Omit<DefineEventOptions<TType, false>, "derived" | "clientOnly">) => EventDef<TName, TType, TEncoded>;
91
+ export type MaterializerResult = {
92
+ sql: string;
93
+ bindValues: BindValues;
94
+ writeTables?: ReadonlySet<string>;
95
+ } | QueryBuilder.Any | string;
96
+ export type MaterializerContextQuery = {
97
+ (args: {
98
+ query: string;
99
+ bindValues: ParamsObject;
100
+ }): ReadonlyArray<unknown>;
101
+ <TResult>(qb: QueryBuilder<TResult, any, any>): TResult;
102
+ };
103
+ export type Materializer<TEventDef extends EventDef.AnyWithoutFn = EventDef.AnyWithoutFn> = (event: TEventDef['schema']['Type'], context: {
104
+ currentFacts: EventDefFacts;
105
+ eventDef: TEventDef;
106
+ /** Can be used to query the current state */
107
+ query: MaterializerContextQuery;
108
+ }) => SingleOrReadonlyArray<MaterializerResult>;
109
+ export declare const defineMaterializer: <TEventDef extends EventDef.AnyWithoutFn>(eventDef: TEventDef, materializer: Materializer<TEventDef>) => Materializer<TEventDef>;
110
+ export declare const materializers: <TInputRecord extends Record<string, EventDef.AnyWithoutFn>>(eventDefRecord: TInputRecord, handlers: { [TEventName in TInputRecord[keyof TInputRecord]["name"] as Extract<TInputRecord[keyof TInputRecord], {
111
+ name: TEventName;
112
+ }>["options"]["derived"] extends true ? never : TEventName]: Materializer<Extract<TInputRecord[keyof TInputRecord], {
113
+ name: TEventName;
114
+ }>>; }) => { [TEventName in TInputRecord[keyof TInputRecord]["name"] as Extract<TInputRecord[keyof TInputRecord], {
115
+ name: TEventName;
116
+ }>["options"]["derived"] extends true ? never : TEventName]: Materializer<Extract<TInputRecord[keyof TInputRecord], {
117
+ name: TEventName;
118
+ }>>; };
119
+ export declare const rawSqlEvent: EventDef<"livestore.RawSql", {
120
+ readonly bindValues?: {
121
+ readonly [x: string]: any;
122
+ } | undefined;
123
+ readonly sql: string;
124
+ readonly writeTables?: ReadonlySet<string> | undefined;
125
+ }, {
126
+ readonly sql: string;
127
+ readonly bindValues?: {
128
+ readonly [x: string]: any;
129
+ } | undefined;
130
+ readonly writeTables?: readonly string[] | undefined;
131
+ }, true>;
132
+ export declare const rawSqlMaterializer: Materializer<EventDef<"livestore.RawSql", {
133
+ readonly bindValues?: {
134
+ readonly [x: string]: any;
135
+ } | undefined;
136
+ readonly sql: string;
137
+ readonly writeTables?: ReadonlySet<string> | undefined;
138
+ }, {
139
+ readonly sql: string;
140
+ readonly bindValues?: {
141
+ readonly [x: string]: any;
142
+ } | undefined;
143
+ readonly writeTables?: readonly string[] | undefined;
144
+ }, true>>;
145
+ export type RawSqlEvent = typeof rawSqlEvent;
146
+ //# sourceMappingURL=EventDef.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventDef.d.ts","sourceRoot":"","sources":["../../src/schema/EventDef.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { shouldNeverHappen } from '@livestore/utils';
2
+ import { Schema } from '@livestore/utils/effect';
3
+ export const defineFacts = (record) => record;
4
+ export const defineEvent = (args) => {
5
+ const { name, schema, ...options } = args;
6
+ const makePartialEvent = (args) => {
7
+ const res = Schema.validateEither(schema)(args);
8
+ if (res._tag === 'Left') {
9
+ shouldNeverHappen(`Invalid event args for event '${name}':`, res.left.message, '\n');
10
+ }
11
+ return { name: name, args };
12
+ };
13
+ Object.defineProperty(makePartialEvent, 'name', { value: name });
14
+ Object.defineProperty(makePartialEvent, 'schema', { value: schema });
15
+ Object.defineProperty(makePartialEvent, 'options', {
16
+ value: {
17
+ clientOnly: options?.clientOnly ?? false,
18
+ facts: options?.facts
19
+ ? (args, currentFacts) => {
20
+ const res = options.facts(args, currentFacts);
21
+ return {
22
+ modify: {
23
+ set: res.modify?.set ? new Set(res.modify.set) : new Set(),
24
+ unset: res.modify?.unset ? new Set(res.modify.unset) : new Set(),
25
+ },
26
+ require: res.require ? new Set(res.require) : new Set(),
27
+ };
28
+ }
29
+ : undefined,
30
+ derived: options?.derived ?? false,
31
+ },
32
+ });
33
+ return makePartialEvent;
34
+ };
35
+ export const synced = (args) => defineEvent({ ...args, clientOnly: false });
36
+ export const clientOnly = (args) => defineEvent({ ...args, clientOnly: true });
37
+ export const defineMaterializer = (eventDef, materializer) => {
38
+ return materializer;
39
+ };
40
+ export const materializers = (eventDefRecord, handlers) => {
41
+ return handlers;
42
+ };
43
+ export const rawSqlEvent = defineEvent({
44
+ name: 'livestore.RawSql',
45
+ schema: Schema.Struct({
46
+ sql: Schema.String,
47
+ bindValues: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),
48
+ writeTables: Schema.optional(Schema.ReadonlySet(Schema.String)),
49
+ }),
50
+ clientOnly: true,
51
+ derived: true,
52
+ });
53
+ export const rawSqlMaterializer = defineMaterializer(rawSqlEvent, ({ sql, bindValues, writeTables }) => ({
54
+ sql,
55
+ bindValues: bindValues ?? {},
56
+ writeTables,
57
+ }));
58
+ //# sourceMappingURL=EventDef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventDef.js","sourceRoot":"","sources":["../../src/schema/EventDef.ts"],"names":[],"mappings":"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"}
@@ -1,39 +1,57 @@
1
1
  import { Brand, Schema } from '@livestore/utils/effect';
2
- export type LocalEventId = Brand.Branded<number, 'LocalEventId'>;
3
- export declare const localEventId: Brand.Brand.Constructor<LocalEventId>;
4
- export declare const LocalEventId: Schema.BrandSchema<number & Brand.Brand<"LocalEventId">, number, never>;
5
- export type GlobalEventId = Brand.Branded<number, 'GlobalEventId'>;
6
- export declare const globalEventId: Brand.Brand.Constructor<GlobalEventId>;
7
- export declare const GlobalEventId: Schema.BrandSchema<number & Brand.Brand<"GlobalEventId">, number, never>;
8
- export declare const localDefault: LocalEventId;
2
+ export type ClientEventNumber = Brand.Branded<number, 'ClientEventNumber'>;
3
+ export declare const localEventNumber: Brand.Brand.Constructor<ClientEventNumber>;
4
+ export declare const ClientEventNumber: Schema.BrandSchema<number & Brand.Brand<"ClientEventNumber">, number, never>;
5
+ export type GlobalEventNumber = Brand.Branded<number, 'GlobalEventNumber'>;
6
+ export declare const globalEventNumber: Brand.Brand.Constructor<GlobalEventNumber>;
7
+ export declare const GlobalEventNumber: Schema.BrandSchema<number & Brand.Brand<"GlobalEventNumber">, number, never>;
8
+ export declare const clientDefault: ClientEventNumber;
9
9
  /**
10
10
  * LiveStore event id value consisting of a globally unique event sequence number
11
- * and a local sequence number.
11
+ * and a client sequence number.
12
12
  *
13
- * The local sequence number is only used for localOnly mutations and starts from 0 for each global sequence number.
13
+ * The client sequence number is only used for clientOnly events and starts from 0 for each global sequence number.
14
14
  */
15
- export type EventId = {
16
- global: GlobalEventId;
17
- local: LocalEventId;
15
+ export type EventNumber = {
16
+ global: GlobalEventNumber;
17
+ client: ClientEventNumber;
18
18
  };
19
- export declare const EventId: Schema.Struct<{
20
- global: Schema.BrandSchema<number & Brand.Brand<"GlobalEventId">, number, never>;
21
- local: Schema.BrandSchema<number & Brand.Brand<"LocalEventId">, number, never>;
19
+ /**
20
+ * NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
21
+ */
22
+ export declare const EventNumber: Schema.Struct<{
23
+ global: Schema.BrandSchema<number & Brand.Brand<"GlobalEventNumber">, number, never>;
24
+ /** Only increments for clientOnly events */
25
+ client: Schema.BrandSchema<number & Brand.Brand<"ClientEventNumber">, number, never>;
22
26
  }>;
23
27
  /**
24
28
  * Compare two event ids i.e. checks if the first event id is less than the second.
25
29
  */
26
- export declare const compare: (a: EventId, b: EventId) => number;
27
- export declare const isEqual: (a: EventId, b: EventId) => boolean;
28
- export type EventIdPair = {
29
- id: EventId;
30
- parentId: EventId;
30
+ export declare const compare: (a: EventNumber, b: EventNumber) => number;
31
+ /**
32
+ * Convert an event id to a string representation.
33
+ */
34
+ export declare const toString: (id: EventNumber) => string;
35
+ /**
36
+ * Convert a string representation of an event id to an event id.
37
+ */
38
+ export declare const fromString: (str: string) => EventNumber;
39
+ export declare const isEqual: (a: EventNumber, b: EventNumber) => boolean;
40
+ export type EventNumberPair = {
41
+ id: EventNumber;
42
+ parentId: EventNumber;
31
43
  };
32
44
  export declare const ROOT: {
33
- global: GlobalEventId;
34
- local: LocalEventId;
45
+ global: GlobalEventNumber;
46
+ client: ClientEventNumber;
47
+ };
48
+ export declare const isGreaterThan: (a: EventNumber, b: EventNumber) => boolean;
49
+ export declare const isGreaterThanOrEqual: (a: EventNumber, b: EventNumber) => boolean;
50
+ export declare const max: (a: EventNumber, b: EventNumber) => EventNumber;
51
+ export declare const diff: (a: EventNumber, b: EventNumber) => {
52
+ global: number;
53
+ client: number;
35
54
  };
36
- export declare const isGreaterThan: (a: EventId, b: EventId) => boolean;
37
- export declare const make: (id: EventId | typeof EventId.Encoded) => EventId;
38
- export declare const nextPair: (id: EventId, isLocal: boolean) => EventIdPair;
55
+ export declare const make: (id: EventNumber | typeof EventNumber.Encoded) => EventNumber;
56
+ export declare const nextPair: (id: EventNumber, isLocal: boolean) => EventNumberPair;
39
57
  //# sourceMappingURL=EventId.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventId.d.ts","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEvD,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAChE,eAAO,MAAM,YAAY,uCAAgC,CAAA;AACzD,eAAO,MAAM,YAAY,yEAA6C,CAAA;AAEtE,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;AAClE,eAAO,MAAM,aAAa,wCAAiC,CAAA;AAC3D,eAAO,MAAM,aAAa,0EAA8C,CAAA;AAExE,eAAO,MAAM,YAAY,EAAe,YAAY,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAA;AAEpE,eAAO,MAAM,OAAO;;;EAG0B,CAAA;AAE9C;;GAEG;AACH,eAAO,MAAM,OAAO,MAAO,OAAO,KAAK,OAAO,WAK7C,CAAA;AAED,eAAO,MAAM,OAAO,MAAO,OAAO,KAAK,OAAO,YAAiD,CAAA;AAE/F,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAA;AAE5D,eAAO,MAAM,IAAI;YAA0B,aAAa;;CAAyC,CAAA;AAEjG,eAAO,MAAM,aAAa,MAAO,OAAO,KAAK,OAAO,YAEnD,CAAA;AAED,eAAO,MAAM,IAAI,OAAQ,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,KAAG,OAE3D,CAAA;AAED,eAAO,MAAM,QAAQ,OAAQ,OAAO,WAAW,OAAO,KAAG,WAUxD,CAAA"}
1
+ {"version":3,"file":"EventId.d.ts","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEvD,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAC1E,eAAO,MAAM,gBAAgB,4CAAqC,CAAA;AAClE,eAAO,MAAM,iBAAiB,8EAAiD,CAAA;AAE/E,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAC1E,eAAO,MAAM,iBAAiB,4CAAqC,CAAA;AACnE,eAAO,MAAM,iBAAiB,8EAAkD,CAAA;AAEhF,eAAO,MAAM,aAAa,EAAe,iBAAiB,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAAA;AAOlF;;GAEG;AACH,eAAO,MAAM,WAAW;;IAEtB,4CAA4C;;EAQI,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,WAKrD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,IAAI,WAAW,WAAuE,CAAA;AAE/G;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,WAMxC,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,YAAmD,CAAA;AAEzG,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAA;AAExE,eAAO,MAAM,IAAI;YAAyB,iBAAiB;;CAA+C,CAAA;AAE1G,eAAO,MAAM,aAAa,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,YAE3D,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,YAElE,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,gBAEjD,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW;;;CAKlD,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,IAAI,WAAW,GAAG,OAAO,WAAW,CAAC,OAAO,KAAG,WAEnE,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,IAAI,WAAW,EAAE,SAAS,OAAO,KAAG,eAU5D,CAAA"}
@@ -1,13 +1,25 @@
1
1
  import { Brand, Schema } from '@livestore/utils/effect';
2
- export const localEventId = Brand.nominal();
3
- export const LocalEventId = Schema.fromBrand(localEventId)(Schema.Int);
4
- export const globalEventId = Brand.nominal();
5
- export const GlobalEventId = Schema.fromBrand(globalEventId)(Schema.Int);
6
- export const localDefault = 0;
7
- export const EventId = Schema.Struct({
8
- global: GlobalEventId,
9
- local: LocalEventId,
10
- }).annotations({ title: 'LiveStore.EventId' });
2
+ export const localEventNumber = Brand.nominal();
3
+ export const ClientEventNumber = Schema.fromBrand(localEventNumber)(Schema.Int);
4
+ export const globalEventNumber = Brand.nominal();
5
+ export const GlobalEventNumber = Schema.fromBrand(globalEventNumber)(Schema.Int);
6
+ export const clientDefault = 0;
7
+ // export const EventSequenceNumber = Schema.Struct({})
8
+ // export const EventNumber = Schema.Struct({})
9
+ // export const ClientEventNumber = Schema.Struct({})
10
+ // export const GlobalEventNumber = Schema.Struct({})
11
+ /**
12
+ * NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
13
+ */
14
+ export const EventNumber = Schema.Struct({
15
+ global: GlobalEventNumber,
16
+ /** Only increments for clientOnly events */
17
+ client: ClientEventNumber,
18
+ // TODO also provide a way to see "confirmation level" of event (e.g. confirmed by leader/sync backend)
19
+ // TODO: actually add this field
20
+ // Client only
21
+ // generation: Schema.Number.pipe(Schema.optional),
22
+ }).annotations({ title: 'LiveStore.EventNumber' });
11
23
  /**
12
24
  * Compare two event ids i.e. checks if the first event id is less than the second.
13
25
  */
@@ -15,24 +27,50 @@ export const compare = (a, b) => {
15
27
  if (a.global !== b.global) {
16
28
  return a.global - b.global;
17
29
  }
18
- return a.local - b.local;
30
+ return a.client - b.client;
19
31
  };
20
- export const isEqual = (a, b) => a.global === b.global && a.local === b.local;
21
- export const ROOT = { global: -1, local: localDefault };
32
+ /**
33
+ * Convert an event id to a string representation.
34
+ */
35
+ export const toString = (id) => (id.client === 0 ? `e${id.global}` : `e${id.global}+${id.client}`);
36
+ /**
37
+ * Convert a string representation of an event id to an event id.
38
+ */
39
+ export const fromString = (str) => {
40
+ const [global, client] = str.slice(1, -1).split(',').map(Number);
41
+ if (global === undefined || client === undefined) {
42
+ throw new Error('Invalid event id string');
43
+ }
44
+ return { global, client };
45
+ };
46
+ export const isEqual = (a, b) => a.global === b.global && a.client === b.client;
47
+ export const ROOT = { global: 0, client: clientDefault };
22
48
  export const isGreaterThan = (a, b) => {
23
- return a.global > b.global || (a.global === b.global && a.local > b.local);
49
+ return a.global > b.global || (a.global === b.global && a.client > b.client);
50
+ };
51
+ export const isGreaterThanOrEqual = (a, b) => {
52
+ return a.global > b.global || (a.global === b.global && a.client >= b.client);
53
+ };
54
+ export const max = (a, b) => {
55
+ return a.global > b.global || (a.global === b.global && a.client > b.client) ? a : b;
56
+ };
57
+ export const diff = (a, b) => {
58
+ return {
59
+ global: a.global - b.global,
60
+ client: a.client - b.client,
61
+ };
24
62
  };
25
63
  export const make = (id) => {
26
- return Schema.is(EventId)(id) ? id : Schema.decodeSync(EventId)(id);
64
+ return Schema.is(EventNumber)(id) ? id : Schema.decodeSync(EventNumber)(id);
27
65
  };
28
66
  export const nextPair = (id, isLocal) => {
29
67
  if (isLocal) {
30
- return { id: { global: id.global, local: (id.local + 1) }, parentId: id };
68
+ return { id: { global: id.global, client: (id.client + 1) }, parentId: id };
31
69
  }
32
70
  return {
33
- id: { global: (id.global + 1), local: localDefault },
34
- // NOTE we always point to `local: 0` for non-localOnly mutations
35
- parentId: { global: id.global, local: localDefault },
71
+ id: { global: (id.global + 1), client: clientDefault },
72
+ // NOTE we always point to `client: 0` for non-clientOnly events
73
+ parentId: { global: id.global, client: clientDefault },
36
74
  };
37
75
  };
38
76
  //# sourceMappingURL=EventId.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventId.js","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGvD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAgB,CAAA;AACzD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAGtE,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,EAAiB,CAAA;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAExE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAwB,CAAA;AAUpD,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,YAAY;CACpB,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAA;AAE9C;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAA;IAC5B,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAA;AAI/F,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,CAAyB,EAAE,KAAK,EAAE,YAAY,EAAoB,CAAA;AAEjG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE;IACtD,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;AAC5E,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAoC,EAAW,EAAE;IACpE,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;AACrE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAW,EAAE,OAAgB,EAAe,EAAE;IACrE,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAwB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IAClG,CAAC;IAED,OAAO;QACL,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAyB,EAAE,KAAK,EAAE,YAAY,EAAE;QAC5E,iEAAiE;QACjE,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;KACrD,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"EventId.js","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=EventId.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventId.test.d.ts","sourceRoot":"","sources":["../../src/schema/EventId.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { Vitest } from '@livestore/utils-dev/node-vitest';
2
+ import { expect } from 'vitest';
3
+ import { EventNumber } from './mod.js';
4
+ Vitest.describe('EventNumber', () => {
5
+ Vitest.test('nextPair', () => {
6
+ const e_0_0 = EventNumber.make({ global: 0, client: 0 });
7
+ expect(EventNumber.nextPair(e_0_0, false).id).toStrictEqual({ global: 1, client: 0 });
8
+ expect(EventNumber.nextPair(e_0_0, true).id).toStrictEqual({ global: 0, client: 1 });
9
+ });
10
+ });
11
+ //# sourceMappingURL=EventId.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventId.test.js","sourceRoot":"","sources":["../../src/schema/EventId.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAClC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QACxD,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QACrF,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,57 @@
1
+ import { Brand, Schema } from '@livestore/utils/effect';
2
+ export type ClientEventSequenceNumber = Brand.Branded<number, 'ClientEventSequenceNumber'>;
3
+ export declare const localEventSequenceNumber: Brand.Brand.Constructor<ClientEventSequenceNumber>;
4
+ export declare const ClientEventSequenceNumber: Schema.BrandSchema<number & Brand.Brand<"ClientEventSequenceNumber">, number, never>;
5
+ export type GlobalEventSequenceNumber = Brand.Branded<number, 'GlobalEventSequenceNumber'>;
6
+ export declare const globalEventSequenceNumber: Brand.Brand.Constructor<GlobalEventSequenceNumber>;
7
+ export declare const GlobalEventSequenceNumber: Schema.BrandSchema<number & Brand.Brand<"GlobalEventSequenceNumber">, number, never>;
8
+ export declare const clientDefault: ClientEventSequenceNumber;
9
+ /**
10
+ * LiveStore event id value consisting of a globally unique event sequence number
11
+ * and a client sequence number.
12
+ *
13
+ * The client sequence number is only used for clientOnly events and starts from 0 for each global sequence number.
14
+ */
15
+ export type EventSequenceNumber = {
16
+ global: GlobalEventSequenceNumber;
17
+ client: ClientEventSequenceNumber;
18
+ };
19
+ /**
20
+ * NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
21
+ */
22
+ export declare const EventSequenceNumber: Schema.Struct<{
23
+ global: Schema.BrandSchema<number & Brand.Brand<"GlobalEventSequenceNumber">, number, never>;
24
+ /** Only increments for clientOnly events */
25
+ client: Schema.BrandSchema<number & Brand.Brand<"ClientEventSequenceNumber">, number, never>;
26
+ }>;
27
+ /**
28
+ * Compare two event ids i.e. checks if the first event id is less than the second.
29
+ */
30
+ export declare const compare: (a: EventSequenceNumber, b: EventSequenceNumber) => number;
31
+ /**
32
+ * Convert an event id to a string representation.
33
+ */
34
+ export declare const toString: (seqNum: EventSequenceNumber) => string;
35
+ /**
36
+ * Convert a string representation of an event id to an event id.
37
+ */
38
+ export declare const fromString: (str: string) => EventSequenceNumber;
39
+ export declare const isEqual: (a: EventSequenceNumber, b: EventSequenceNumber) => boolean;
40
+ export type EventSequenceNumberPair = {
41
+ seqNum: EventSequenceNumber;
42
+ parentSeqNum: EventSequenceNumber;
43
+ };
44
+ export declare const ROOT: {
45
+ global: GlobalEventSequenceNumber;
46
+ client: ClientEventSequenceNumber;
47
+ };
48
+ export declare const isGreaterThan: (a: EventSequenceNumber, b: EventSequenceNumber) => boolean;
49
+ export declare const isGreaterThanOrEqual: (a: EventSequenceNumber, b: EventSequenceNumber) => boolean;
50
+ export declare const max: (a: EventSequenceNumber, b: EventSequenceNumber) => EventSequenceNumber;
51
+ export declare const diff: (a: EventSequenceNumber, b: EventSequenceNumber) => {
52
+ global: number;
53
+ client: number;
54
+ };
55
+ export declare const make: (seqNum: EventSequenceNumber | typeof EventSequenceNumber.Encoded) => EventSequenceNumber;
56
+ export declare const nextPair: (seqNum: EventSequenceNumber, isLocal: boolean) => EventSequenceNumberPair;
57
+ //# sourceMappingURL=EventNumber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventNumber.d.ts","sourceRoot":"","sources":["../../src/schema/EventNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEvD,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAA;AAC1F,eAAO,MAAM,wBAAwB,oDAA6C,CAAA;AAClF,eAAO,MAAM,yBAAyB,sFAAyD,CAAA;AAE/F,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAA;AAC1F,eAAO,MAAM,yBAAyB,oDAA6C,CAAA;AACnF,eAAO,MAAM,yBAAyB,sFAA0D,CAAA;AAEhG,eAAO,MAAM,aAAa,EAAe,yBAAyB,CAAA;AAElE;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAAE,MAAM,EAAE,yBAAyB,CAAC;IAAC,MAAM,EAAE,yBAAyB,CAAA;CAAE,CAAA;AAO1G;;GAEG;AACH,eAAO,MAAM,mBAAmB;;IAE9B,4CAA4C;;EAQY,CAAA;AAE1D;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,WAKrE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,QAAQ,mBAAmB,WAC8B,CAAA;AAElF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,mBAMxC,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,YACtB,CAAA;AAEhD,MAAM,MAAM,uBAAuB,GAAG;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,YAAY,EAAE,mBAAmB,CAAA;CAAE,CAAA;AAExG,eAAO,MAAM,IAAI;YACK,yBAAyB;;CAEhB,CAAA;AAE/B,eAAO,MAAM,aAAa,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,YAE3E,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,YAElF,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB,wBAEjE,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,GAAG,mBAAmB,EAAE,GAAG,mBAAmB;;;CAKlE,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,QAAQ,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,OAAO,KAAG,mBAEvF,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,QAAQ,mBAAmB,EAAE,SAAS,OAAO,KAAG,uBAaxE,CAAA"}
@@ -0,0 +1,82 @@
1
+ import { Brand, Schema } from '@livestore/utils/effect';
2
+ export const localEventSequenceNumber = Brand.nominal();
3
+ export const ClientEventSequenceNumber = Schema.fromBrand(localEventSequenceNumber)(Schema.Int);
4
+ export const globalEventSequenceNumber = Brand.nominal();
5
+ export const GlobalEventSequenceNumber = Schema.fromBrand(globalEventSequenceNumber)(Schema.Int);
6
+ export const clientDefault = 0;
7
+ // export const EventSequenceNumber = Schema.Struct({})
8
+ // export const EventSequenceNumber = Schema.Struct({})
9
+ // export const ClientEventSequenceNumber = Schema.Struct({})
10
+ // export const GlobalEventSequenceNumber = Schema.Struct({})
11
+ /**
12
+ * NOTE: Client mutation events with a non-0 client id, won't be synced to the sync backend.
13
+ */
14
+ export const EventSequenceNumber = Schema.Struct({
15
+ global: GlobalEventSequenceNumber,
16
+ /** Only increments for clientOnly events */
17
+ client: ClientEventSequenceNumber,
18
+ // TODO also provide a way to see "confirmation level" of event (e.g. confirmed by leader/sync backend)
19
+ // TODO: actually add this field
20
+ // Client only
21
+ // generation: Schema.Number.pipe(Schema.optional),
22
+ }).annotations({ title: 'LiveStore.EventSequenceNumber' });
23
+ /**
24
+ * Compare two event ids i.e. checks if the first event id is less than the second.
25
+ */
26
+ export const compare = (a, b) => {
27
+ if (a.global !== b.global) {
28
+ return a.global - b.global;
29
+ }
30
+ return a.client - b.client;
31
+ };
32
+ /**
33
+ * Convert an event id to a string representation.
34
+ */
35
+ export const toString = (seqNum) => seqNum.client === 0 ? `e${seqNum.global}` : `e${seqNum.global}+${seqNum.client}`;
36
+ /**
37
+ * Convert a string representation of an event id to an event id.
38
+ */
39
+ export const fromString = (str) => {
40
+ const [global, client] = str.slice(1, -1).split(',').map(Number);
41
+ if (global === undefined || client === undefined) {
42
+ throw new Error('Invalid event id string');
43
+ }
44
+ return { global, client };
45
+ };
46
+ export const isEqual = (a, b) => a.global === b.global && a.client === b.client;
47
+ export const ROOT = {
48
+ global: 0,
49
+ client: clientDefault,
50
+ };
51
+ export const isGreaterThan = (a, b) => {
52
+ return a.global > b.global || (a.global === b.global && a.client > b.client);
53
+ };
54
+ export const isGreaterThanOrEqual = (a, b) => {
55
+ return a.global > b.global || (a.global === b.global && a.client >= b.client);
56
+ };
57
+ export const max = (a, b) => {
58
+ return a.global > b.global || (a.global === b.global && a.client > b.client) ? a : b;
59
+ };
60
+ export const diff = (a, b) => {
61
+ return {
62
+ global: a.global - b.global,
63
+ client: a.client - b.client,
64
+ };
65
+ };
66
+ export const make = (seqNum) => {
67
+ return Schema.is(EventSequenceNumber)(seqNum) ? seqNum : Schema.decodeSync(EventSequenceNumber)(seqNum);
68
+ };
69
+ export const nextPair = (seqNum, isLocal) => {
70
+ if (isLocal) {
71
+ return {
72
+ seqNum: { global: seqNum.global, client: (seqNum.client + 1) },
73
+ parentSeqNum: seqNum,
74
+ };
75
+ }
76
+ return {
77
+ seqNum: { global: (seqNum.global + 1), client: clientDefault },
78
+ // NOTE we always point to `client: 0` for non-clientOnly events
79
+ parentSeqNum: { global: seqNum.global, client: clientDefault },
80
+ };
81
+ };
82
+ //# sourceMappingURL=EventNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventNumber.js","sourceRoot":"","sources":["../../src/schema/EventNumber.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=EventNumber.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventNumber.test.d.ts","sourceRoot":"","sources":["../../src/schema/EventNumber.test.ts"],"names":[],"mappings":""}