@livestore/common 0.0.0-snapshot-2b8a9de3ec1a701aca891ebc2c98eb328274ae9e → 0.0.0-snapshot-2c861249e50661661613204300b1fc0d902c2e46

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 (287) 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 +36 -22
  7. package/dist/adapter-types.d.ts.map +1 -1
  8. package/dist/adapter-types.js +20 -8
  9. package/dist/adapter-types.js.map +1 -1
  10. package/dist/debug-info.d.ts.map +1 -1
  11. package/dist/debug-info.js +1 -0
  12. package/dist/debug-info.js.map +1 -1
  13. package/dist/devtools/devtools-messages-client-session.d.ts +21 -21
  14. package/dist/devtools/devtools-messages-common.d.ts +13 -6
  15. package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
  16. package/dist/devtools/devtools-messages-common.js +6 -0
  17. package/dist/devtools/devtools-messages-common.js.map +1 -1
  18. package/dist/devtools/devtools-messages-leader.d.ts +46 -46
  19. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  20. package/dist/devtools/devtools-messages-leader.js +12 -13
  21. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  22. package/dist/index.d.ts +2 -5
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +2 -5
  25. package/dist/index.js.map +1 -1
  26. package/dist/leader-thread/LeaderSyncProcessor.d.ts +34 -12
  27. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  28. package/dist/leader-thread/LeaderSyncProcessor.js +284 -226
  29. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  30. package/dist/leader-thread/apply-event.d.ts +16 -0
  31. package/dist/leader-thread/apply-event.d.ts.map +1 -0
  32. package/dist/leader-thread/apply-event.js +122 -0
  33. package/dist/leader-thread/apply-event.js.map +1 -0
  34. package/dist/leader-thread/eventlog.d.ts +27 -0
  35. package/dist/leader-thread/eventlog.d.ts.map +1 -0
  36. package/dist/leader-thread/eventlog.js +123 -0
  37. package/dist/leader-thread/eventlog.js.map +1 -0
  38. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  39. package/dist/leader-thread/leader-worker-devtools.js +22 -23
  40. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  41. package/dist/leader-thread/make-leader-thread-layer.d.ts +16 -4
  42. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  43. package/dist/leader-thread/make-leader-thread-layer.js +36 -41
  44. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  45. package/dist/leader-thread/mod.d.ts +1 -1
  46. package/dist/leader-thread/mod.d.ts.map +1 -1
  47. package/dist/leader-thread/mod.js +1 -1
  48. package/dist/leader-thread/mod.js.map +1 -1
  49. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  50. package/dist/leader-thread/recreate-db.js +7 -7
  51. package/dist/leader-thread/recreate-db.js.map +1 -1
  52. package/dist/leader-thread/types.d.ts +40 -25
  53. package/dist/leader-thread/types.d.ts.map +1 -1
  54. package/dist/leader-thread/types.js.map +1 -1
  55. package/dist/materializer-helper.d.ts +23 -0
  56. package/dist/materializer-helper.d.ts.map +1 -0
  57. package/dist/materializer-helper.js +70 -0
  58. package/dist/materializer-helper.js.map +1 -0
  59. package/dist/query-builder/api.d.ts +55 -50
  60. package/dist/query-builder/api.d.ts.map +1 -1
  61. package/dist/query-builder/api.js +3 -5
  62. package/dist/query-builder/api.js.map +1 -1
  63. package/dist/query-builder/astToSql.d.ts.map +1 -1
  64. package/dist/query-builder/astToSql.js +59 -37
  65. package/dist/query-builder/astToSql.js.map +1 -1
  66. package/dist/query-builder/impl.d.ts +2 -3
  67. package/dist/query-builder/impl.d.ts.map +1 -1
  68. package/dist/query-builder/impl.js +47 -43
  69. package/dist/query-builder/impl.js.map +1 -1
  70. package/dist/query-builder/impl.test.d.ts +86 -1
  71. package/dist/query-builder/impl.test.d.ts.map +1 -1
  72. package/dist/query-builder/impl.test.js +223 -36
  73. package/dist/query-builder/impl.test.js.map +1 -1
  74. package/dist/rehydrate-from-eventlog.d.ts +15 -0
  75. package/dist/rehydrate-from-eventlog.d.ts.map +1 -0
  76. package/dist/{rehydrate-from-mutationlog.js → rehydrate-from-eventlog.js} +27 -28
  77. package/dist/rehydrate-from-eventlog.js.map +1 -0
  78. package/dist/schema/EventDef.d.ts +136 -0
  79. package/dist/schema/EventDef.d.ts.map +1 -0
  80. package/dist/schema/EventDef.js +58 -0
  81. package/dist/schema/EventDef.js.map +1 -0
  82. package/dist/schema/EventId.d.ts +10 -1
  83. package/dist/schema/EventId.d.ts.map +1 -1
  84. package/dist/schema/EventId.js +24 -3
  85. package/dist/schema/EventId.js.map +1 -1
  86. package/dist/schema/LiveStoreEvent.d.ts +255 -0
  87. package/dist/schema/LiveStoreEvent.d.ts.map +1 -0
  88. package/dist/schema/LiveStoreEvent.js +118 -0
  89. package/dist/schema/LiveStoreEvent.js.map +1 -0
  90. package/dist/schema/client-document-def.d.ts +223 -0
  91. package/dist/schema/client-document-def.d.ts.map +1 -0
  92. package/dist/schema/client-document-def.js +164 -0
  93. package/dist/schema/client-document-def.js.map +1 -0
  94. package/dist/schema/client-document-def.test.d.ts +2 -0
  95. package/dist/schema/client-document-def.test.d.ts.map +1 -0
  96. package/dist/schema/client-document-def.test.js +161 -0
  97. package/dist/schema/client-document-def.test.js.map +1 -0
  98. package/dist/schema/db-schema/dsl/mod.d.ts.map +1 -1
  99. package/dist/schema/events.d.ts +2 -0
  100. package/dist/schema/events.d.ts.map +1 -0
  101. package/dist/schema/events.js +2 -0
  102. package/dist/schema/events.js.map +1 -0
  103. package/dist/schema/mod.d.ts +4 -3
  104. package/dist/schema/mod.d.ts.map +1 -1
  105. package/dist/schema/mod.js +4 -3
  106. package/dist/schema/mod.js.map +1 -1
  107. package/dist/schema/schema.d.ts +26 -22
  108. package/dist/schema/schema.d.ts.map +1 -1
  109. package/dist/schema/schema.js +45 -43
  110. package/dist/schema/schema.js.map +1 -1
  111. package/dist/schema/sqlite-state.d.ts +12 -0
  112. package/dist/schema/sqlite-state.d.ts.map +1 -0
  113. package/dist/schema/sqlite-state.js +36 -0
  114. package/dist/schema/sqlite-state.js.map +1 -0
  115. package/dist/schema/system-tables.d.ts +121 -85
  116. package/dist/schema/system-tables.d.ts.map +1 -1
  117. package/dist/schema/system-tables.js +68 -43
  118. package/dist/schema/system-tables.js.map +1 -1
  119. package/dist/schema/table-def.d.ts +26 -96
  120. package/dist/schema/table-def.d.ts.map +1 -1
  121. package/dist/schema/table-def.js +14 -64
  122. package/dist/schema/table-def.js.map +1 -1
  123. package/dist/schema/view.d.ts +3 -0
  124. package/dist/schema/view.d.ts.map +1 -0
  125. package/dist/schema/view.js +3 -0
  126. package/dist/schema/view.js.map +1 -0
  127. package/dist/schema-management/common.d.ts +4 -4
  128. package/dist/schema-management/common.d.ts.map +1 -1
  129. package/dist/schema-management/migrations.d.ts.map +1 -1
  130. package/dist/schema-management/migrations.js +6 -6
  131. package/dist/schema-management/migrations.js.map +1 -1
  132. package/dist/schema-management/validate-mutation-defs.d.ts +3 -3
  133. package/dist/schema-management/validate-mutation-defs.d.ts.map +1 -1
  134. package/dist/schema-management/validate-mutation-defs.js +17 -17
  135. package/dist/schema-management/validate-mutation-defs.js.map +1 -1
  136. package/dist/sync/ClientSessionSyncProcessor.d.ts +16 -8
  137. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  138. package/dist/sync/ClientSessionSyncProcessor.js +50 -43
  139. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  140. package/dist/sync/next/facts.d.ts +19 -19
  141. package/dist/sync/next/facts.d.ts.map +1 -1
  142. package/dist/sync/next/facts.js +2 -2
  143. package/dist/sync/next/facts.js.map +1 -1
  144. package/dist/sync/next/history-dag-common.d.ts +3 -3
  145. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  146. package/dist/sync/next/history-dag-common.js +1 -1
  147. package/dist/sync/next/history-dag-common.js.map +1 -1
  148. package/dist/sync/next/history-dag.js +1 -1
  149. package/dist/sync/next/history-dag.js.map +1 -1
  150. package/dist/sync/next/rebase-events.d.ts +7 -7
  151. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  152. package/dist/sync/next/rebase-events.js +5 -5
  153. package/dist/sync/next/rebase-events.js.map +1 -1
  154. package/dist/sync/next/test/compact-events.calculator.test.js +38 -33
  155. package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
  156. package/dist/sync/next/test/compact-events.test.js +71 -71
  157. package/dist/sync/next/test/compact-events.test.js.map +1 -1
  158. package/dist/sync/next/test/{mutation-fixtures.d.ts → event-fixtures.d.ts} +25 -25
  159. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -0
  160. package/dist/sync/next/test/{mutation-fixtures.js → event-fixtures.js} +60 -25
  161. package/dist/sync/next/test/event-fixtures.js.map +1 -0
  162. package/dist/sync/next/test/mod.d.ts +1 -1
  163. package/dist/sync/next/test/mod.d.ts.map +1 -1
  164. package/dist/sync/next/test/mod.js +1 -1
  165. package/dist/sync/next/test/mod.js.map +1 -1
  166. package/dist/sync/sync.d.ts +8 -7
  167. package/dist/sync/sync.d.ts.map +1 -1
  168. package/dist/sync/sync.js.map +1 -1
  169. package/dist/sync/syncstate.d.ts +69 -93
  170. package/dist/sync/syncstate.d.ts.map +1 -1
  171. package/dist/sync/syncstate.js +143 -146
  172. package/dist/sync/syncstate.js.map +1 -1
  173. package/dist/sync/syncstate.test.js +208 -289
  174. package/dist/sync/syncstate.test.js.map +1 -1
  175. package/dist/sync/validate-push-payload.d.ts +2 -2
  176. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  177. package/dist/sync/validate-push-payload.js.map +1 -1
  178. package/dist/version.d.ts +1 -1
  179. package/dist/version.js +1 -1
  180. package/package.json +2 -2
  181. package/src/__tests__/fixture.ts +36 -15
  182. package/src/adapter-types.ts +34 -23
  183. package/src/debug-info.ts +1 -0
  184. package/src/devtools/devtools-messages-common.ts +9 -0
  185. package/src/devtools/devtools-messages-leader.ts +14 -15
  186. package/src/index.ts +2 -5
  187. package/src/leader-thread/LeaderSyncProcessor.ts +485 -389
  188. package/src/leader-thread/apply-event.ts +197 -0
  189. package/src/leader-thread/eventlog.ts +199 -0
  190. package/src/leader-thread/leader-worker-devtools.ts +23 -25
  191. package/src/leader-thread/make-leader-thread-layer.ts +68 -61
  192. package/src/leader-thread/mod.ts +1 -1
  193. package/src/leader-thread/recreate-db.ts +7 -8
  194. package/src/leader-thread/types.ts +39 -29
  195. package/src/materializer-helper.ts +110 -0
  196. package/src/query-builder/api.ts +76 -102
  197. package/src/query-builder/astToSql.ts +68 -39
  198. package/src/query-builder/impl.test.ts +239 -42
  199. package/src/query-builder/impl.ts +66 -54
  200. package/src/{rehydrate-from-mutationlog.ts → rehydrate-from-eventlog.ts} +37 -40
  201. package/src/schema/EventDef.ts +216 -0
  202. package/src/schema/EventId.ts +30 -4
  203. package/src/schema/LiveStoreEvent.ts +239 -0
  204. package/src/schema/client-document-def.test.ts +188 -0
  205. package/src/schema/client-document-def.ts +436 -0
  206. package/src/schema/db-schema/dsl/mod.ts +0 -1
  207. package/src/schema/events.ts +1 -0
  208. package/src/schema/mod.ts +4 -3
  209. package/src/schema/schema.ts +78 -68
  210. package/src/schema/sqlite-state.ts +62 -0
  211. package/src/schema/system-tables.ts +54 -46
  212. package/src/schema/table-def.ts +51 -209
  213. package/src/schema/view.ts +2 -0
  214. package/src/schema-management/common.ts +4 -4
  215. package/src/schema-management/migrations.ts +8 -9
  216. package/src/schema-management/validate-mutation-defs.ts +22 -24
  217. package/src/sync/ClientSessionSyncProcessor.ts +66 -53
  218. package/src/sync/next/facts.ts +31 -32
  219. package/src/sync/next/history-dag-common.ts +4 -4
  220. package/src/sync/next/history-dag.ts +1 -1
  221. package/src/sync/next/rebase-events.ts +13 -13
  222. package/src/sync/next/test/compact-events.calculator.test.ts +45 -45
  223. package/src/sync/next/test/compact-events.test.ts +73 -73
  224. package/src/sync/next/test/event-fixtures.ts +219 -0
  225. package/src/sync/next/test/mod.ts +1 -1
  226. package/src/sync/sync.ts +9 -12
  227. package/src/sync/syncstate.test.ts +236 -323
  228. package/src/sync/syncstate.ts +218 -203
  229. package/src/sync/validate-push-payload.ts +2 -2
  230. package/src/version.ts +1 -1
  231. package/tsconfig.json +1 -0
  232. package/dist/derived-mutations.d.ts +0 -109
  233. package/dist/derived-mutations.d.ts.map +0 -1
  234. package/dist/derived-mutations.js +0 -54
  235. package/dist/derived-mutations.js.map +0 -1
  236. package/dist/derived-mutations.test.d.ts +0 -2
  237. package/dist/derived-mutations.test.d.ts.map +0 -1
  238. package/dist/derived-mutations.test.js +0 -93
  239. package/dist/derived-mutations.test.js.map +0 -1
  240. package/dist/init-singleton-tables.d.ts +0 -4
  241. package/dist/init-singleton-tables.d.ts.map +0 -1
  242. package/dist/init-singleton-tables.js +0 -16
  243. package/dist/init-singleton-tables.js.map +0 -1
  244. package/dist/leader-thread/apply-mutation.d.ts +0 -11
  245. package/dist/leader-thread/apply-mutation.d.ts.map +0 -1
  246. package/dist/leader-thread/apply-mutation.js +0 -115
  247. package/dist/leader-thread/apply-mutation.js.map +0 -1
  248. package/dist/leader-thread/mutationlog.d.ts +0 -11
  249. package/dist/leader-thread/mutationlog.d.ts.map +0 -1
  250. package/dist/leader-thread/mutationlog.js +0 -31
  251. package/dist/leader-thread/mutationlog.js.map +0 -1
  252. package/dist/leader-thread/pull-queue-set.d.ts +0 -7
  253. package/dist/leader-thread/pull-queue-set.d.ts.map +0 -1
  254. package/dist/leader-thread/pull-queue-set.js +0 -48
  255. package/dist/leader-thread/pull-queue-set.js.map +0 -1
  256. package/dist/mutation.d.ts +0 -20
  257. package/dist/mutation.d.ts.map +0 -1
  258. package/dist/mutation.js +0 -68
  259. package/dist/mutation.js.map +0 -1
  260. package/dist/query-info.d.ts +0 -41
  261. package/dist/query-info.d.ts.map +0 -1
  262. package/dist/query-info.js +0 -7
  263. package/dist/query-info.js.map +0 -1
  264. package/dist/rehydrate-from-mutationlog.d.ts +0 -14
  265. package/dist/rehydrate-from-mutationlog.d.ts.map +0 -1
  266. package/dist/rehydrate-from-mutationlog.js.map +0 -1
  267. package/dist/schema/MutationEvent.d.ts +0 -202
  268. package/dist/schema/MutationEvent.d.ts.map +0 -1
  269. package/dist/schema/MutationEvent.js +0 -105
  270. package/dist/schema/MutationEvent.js.map +0 -1
  271. package/dist/schema/mutations.d.ts +0 -115
  272. package/dist/schema/mutations.d.ts.map +0 -1
  273. package/dist/schema/mutations.js +0 -42
  274. package/dist/schema/mutations.js.map +0 -1
  275. package/dist/sync/next/test/mutation-fixtures.d.ts.map +0 -1
  276. package/dist/sync/next/test/mutation-fixtures.js.map +0 -1
  277. package/src/derived-mutations.test.ts +0 -101
  278. package/src/derived-mutations.ts +0 -170
  279. package/src/init-singleton-tables.ts +0 -24
  280. package/src/leader-thread/apply-mutation.ts +0 -187
  281. package/src/leader-thread/mutationlog.ts +0 -49
  282. package/src/leader-thread/pull-queue-set.ts +0 -67
  283. package/src/mutation.ts +0 -108
  284. package/src/query-info.ts +0 -83
  285. package/src/schema/MutationEvent.ts +0 -224
  286. package/src/schema/mutations.ts +0 -193
  287. package/src/sync/next/test/mutation-fixtures.ts +0 -228
@@ -1,7 +1,7 @@
1
1
  import { Schema } from '@livestore/utils/effect';
2
+ import { defineEvent, defineFacts } from '../../../schema/EventDef.js';
2
3
  import * as EventId from '../../../schema/EventId.js';
3
- import { defineFacts, defineMutation } from '../../../schema/mutations.js';
4
- import { factsSnapshotForDag, getFactsGroupForMutationArgs } from '../facts.js';
4
+ import { factsSnapshotForDag, getFactsGroupForEventArgs } from '../facts.js';
5
5
  import { historyDagFromNodes } from '../history-dag.js';
6
6
  import { rootEventNode } from '../history-dag-common.js';
7
7
  /** Used for conflict detection and event history compaction */
@@ -12,24 +12,35 @@ export const facts = defineFacts({
12
12
  todoTextUpdated: (id) => `todo-text-updated-${id}`,
13
13
  inputValue: (id) => `input-value-${id}`,
14
14
  });
15
- export const mutations = {
16
- createTodo: defineMutation('createTodo', Schema.Struct({ id: Schema.String, text: Schema.String }), 'INSERT INTO todos (id, text) VALUES ($id, $text)', {
15
+ export const events = {
16
+ createTodo: defineEvent({
17
+ name: 'createTodo',
18
+ schema: Schema.Struct({ id: Schema.String, text: Schema.String }),
19
+ // 'INSERT INTO todos (id, text) VALUES ($id, $text)',
20
+ // {
17
21
  facts: ({ id }) => ({
18
22
  modify: {
19
23
  set: [facts.todoExists(id), facts.todoIsWriteable(id, true), facts.todoCompleted(id, false)],
20
24
  },
21
25
  }),
22
26
  }),
23
- upsertTodo: defineMutation('upsertTodo', Schema.Struct({ id: Schema.String, text: Schema.optional(Schema.String) }), 'INSERT INTO todos (id, text) VALUES ($id, $text) ON CONFLICT (id) DO UPDATE SET text = $text', {
27
+ upsertTodo: defineEvent({
28
+ name: 'upsertTodo',
29
+ schema: Schema.Struct({ id: Schema.String, text: Schema.optional(Schema.String) }),
30
+ // 'INSERT INTO todos (id, text) VALUES ($id, $text) ON CONFLICT (id) DO UPDATE SET text = $text',
31
+ // {
24
32
  facts: ({ id }, currentFacts) =>
25
33
  // TODO enable an API along the lines of `map.has(key, value)`
26
34
  currentFacts.has(facts.todoExists(id)) && currentFacts.get(facts.todoIsWriteable(id, true)[0]) === false
27
35
  ? { require: [facts.todoExists(id), facts.todoIsWriteable(id, true)] }
28
36
  : { modify: { set: [facts.todoExists(id), facts.todoIsWriteable(id, true), facts.todoTextUpdated(id)] } },
29
37
  }),
30
- todoCompleted: defineMutation('todoCompleted', Schema.Struct({ id: Schema.String }),
31
- // consider `RETURNING` to validate before applying facts
32
- 'UPDATE todos SET completed = true WHERE id = $id', {
38
+ todoCompleted: defineEvent({
39
+ name: 'todoCompleted',
40
+ schema: Schema.Struct({ id: Schema.String }),
41
+ // consider `RETURNING` to validate before applying facts
42
+ // 'UPDATE todos SET completed = true WHERE id = $id',
43
+ // {
33
44
  // prewrite assertions from DB
34
45
  // enables more concurrency
35
46
  // turning database inside out
@@ -39,19 +50,31 @@ export const mutations = {
39
50
  modify: { set: [facts.todoCompleted(id, true)] },
40
51
  }),
41
52
  }),
42
- todoUncompleted: defineMutation('todoUncompleted', Schema.Struct({ id: Schema.String }), 'UPDATE todos SET completed = false WHERE id = $id', {
53
+ todoUncompleted: defineEvent({
54
+ name: 'todoUncompleted',
55
+ schema: Schema.Struct({ id: Schema.String }),
56
+ // 'UPDATE todos SET completed = false WHERE id = $id',
57
+ // {
43
58
  facts: ({ id }) => ({
44
59
  require: [facts.todoExists(id), facts.todoIsWriteable(id, true)],
45
60
  modify: { set: [facts.todoCompleted(id, false)] },
46
61
  }),
47
62
  }),
48
- todoCompleteds: defineMutation('todoCompleteds', Schema.Struct({ ids: Schema.Array(Schema.String) }), 'UPDATE todos SET completed = true WHERE id IN ($ids:csv)', {
63
+ todoCompleteds: defineEvent({
64
+ name: 'todoCompleteds',
65
+ schema: Schema.Struct({ ids: Schema.Array(Schema.String) }),
66
+ // 'UPDATE todos SET completed = true WHERE id IN ($ids:csv)',
67
+ // {
49
68
  facts: ({ ids }) => ({
50
69
  require: ids.flatMap((id) => [facts.todoExists(id), facts.todoIsWriteable(id, true)]),
51
70
  modify: { set: ids.map((id) => facts.todoCompleted(id, true)) },
52
71
  }),
53
72
  }),
54
- toggleTodo: defineMutation('toggleTodo', Schema.Struct({ id: Schema.String }), 'UPDATE todos SET completed = NOT completed WHERE id = $id', {
73
+ toggleTodo: defineEvent({
74
+ name: 'toggleTodo',
75
+ schema: Schema.Struct({ id: Schema.String }),
76
+ // 'UPDATE todos SET completed = NOT completed WHERE id = $id',
77
+ // {
55
78
  facts: ({ id }, currentFacts) => {
56
79
  const currentIsCompleted = currentFacts.get(facts.todoCompleted(id, true)[0]) === true;
57
80
  return {
@@ -63,33 +86,45 @@ export const mutations = {
63
86
  };
64
87
  },
65
88
  }),
66
- setReadonlyTodo: defineMutation('setReadonlyTodo', Schema.Struct({ id: Schema.String, readonly: Schema.Boolean }), 'UPDATE todos SET readonly = $readonly WHERE id = $id', {
89
+ setReadonlyTodo: defineEvent({
90
+ name: 'setReadonlyTodo',
91
+ schema: Schema.Struct({ id: Schema.String, readonly: Schema.Boolean }),
92
+ // 'UPDATE todos SET readonly = $readonly WHERE id = $id',
93
+ // {
67
94
  facts: ({ id, readonly }) => ({
68
95
  require: [facts.todoExists(id)],
69
96
  modify: { set: [facts.todoIsWriteable(id, !readonly)] },
70
97
  }),
71
98
  }),
72
- setTextTodo: defineMutation('setTextTodo', Schema.Struct({ id: Schema.String, text: Schema.String }), 'UPDATE todos SET text = $text WHERE id = $id', {
99
+ setTextTodo: defineEvent({
100
+ name: 'setTextTodo',
101
+ schema: Schema.Struct({ id: Schema.String, text: Schema.String }),
102
+ // 'UPDATE todos SET text = $text WHERE id = $id',
103
+ // {
73
104
  facts: ({ id }) => ({
74
105
  require: [facts.todoExists(id), facts.todoIsWriteable(id, true)],
75
106
  modify: { set: [facts.todoTextUpdated(id)] },
76
107
  }),
77
108
  }),
78
- setInputValue: defineMutation('setInputValue', Schema.Struct({ id: Schema.String, text: Schema.String }), 'UPDATE todos SET text = $text WHERE id = $id', {
109
+ setInputValue: defineEvent({
110
+ name: 'setInputValue',
111
+ schema: Schema.Struct({ id: Schema.String, text: Schema.String }),
112
+ // 'UPDATE todos SET text = $text WHERE id = $id',
113
+ // {
79
114
  clientOnly: true,
80
115
  facts: ({ id }) => ({ modify: { set: [facts.inputValue(id)] } }),
81
116
  }),
82
117
  };
83
- export const toEventNodes = (partialEvents, mutationDefs, clientId, sessionId) => {
118
+ export const toEventNodes = (partialEvents, eventDefs, clientId, sessionId) => {
84
119
  const nodesAcc = [rootEventNode];
85
120
  let currentEventId = EventId.ROOT;
86
121
  const eventNodes = partialEvents.map((partialEvent) => {
87
- const mutationDef = mutationDefs[partialEvent.mutation];
88
- const eventId = EventId.nextPair(currentEventId, mutationDef.options.clientOnly).id;
122
+ const eventDef = eventDefs[partialEvent.name];
123
+ const eventId = EventId.nextPair(currentEventId, eventDef.options.clientOnly).id;
89
124
  currentEventId = eventId;
90
125
  const factsSnapshot = factsSnapshotForDag(historyDagFromNodes(nodesAcc, { skipFactsCheck: true }), undefined);
91
126
  // console.log('factsSnapshot', eventId, factsSnapshot)
92
- // const depRead: MutationEventFactsSnapshot = new Map<string, any>()
127
+ // const depRead: EventDefFactsSnapshot = new Map<string, any>()
93
128
  // const factsSnapshotProxy = new Proxy(factsSnapshot, {
94
129
  // get: (target, prop) => {
95
130
  // if (prop === 'has') {
@@ -106,9 +141,9 @@ export const toEventNodes = (partialEvents, mutationDefs, clientId, sessionId) =
106
141
  // notYetImplemented(`toEventNodes: ${prop.toString()} is not yet implemented`)
107
142
  // },
108
143
  // })
109
- // const factsRes = mutationDef.options.facts?.(partialEvent.args, factsSnapshotProxy)
144
+ // const factsRes = eventDef.options.facts?.(partialEvent.args, factsSnapshotProxy)
110
145
  // console.log('factsRes', factsRes?.modify, factsRes?.require)
111
- // const iterableToMap = (iterable: Iterable<MutationEventFactInput>) => {
146
+ // const iterableToMap = (iterable: Iterable<EventDefFactInput>) => {
112
147
  // const map = new Map()
113
148
  // for (const item of iterable) {
114
149
  // if (typeof item === 'string') {
@@ -124,17 +159,17 @@ export const toEventNodes = (partialEvents, mutationDefs, clientId, sessionId) =
124
159
  // modifyRemove: factsRes?.modify.remove ? iterableToMap(factsRes.modify.remove) : new Map(),
125
160
  // depRequire: factsRes?.require ? iterableToMap(factsRes.require) : new Map(),
126
161
  // depRead,
127
- // } satisfies MutationEventFactsGroup
162
+ // } satisfies EventDefFactsGroup
128
163
  // applyFactGroup(facts, factsSnapshot)
129
- const facts = getFactsGroupForMutationArgs({
130
- factsCallback: mutationDef.options.facts,
164
+ const facts = getFactsGroupForEventArgs({
165
+ factsCallback: eventDef.options.facts,
131
166
  args: partialEvent.args,
132
167
  currentFacts: factsSnapshot,
133
168
  });
134
169
  const node = {
135
170
  id: eventId,
136
171
  parentId: getParentId(eventId),
137
- mutation: partialEvent.mutation,
172
+ name: partialEvent.name,
138
173
  args: partialEvent.args,
139
174
  factsGroup: facts,
140
175
  clientId,
@@ -155,4 +190,4 @@ const getParentId = (eventId) => {
155
190
  }
156
191
  return EventId.make({ global: globalParentId, client: clientParentId });
157
192
  };
158
- //# sourceMappingURL=mutation-fixtures.js.map
193
+ //# sourceMappingURL=event-fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-fixtures.js","sourceRoot":"","sources":["../../../../src/sync/next/test/event-fixtures.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export * from './mutation-fixtures.js';
1
+ export * from './event-fixtures.js';
2
2
  //# sourceMappingURL=mod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/sync/next/test/mod.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/sync/next/test/mod.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
@@ -1,2 +1,2 @@
1
- export * from './mutation-fixtures.js';
1
+ export * from './event-fixtures.js';
2
2
  //# sourceMappingURL=mod.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../../src/sync/next/test/mod.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../../src/sync/next/test/mod.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
@@ -3,7 +3,7 @@ import { Schema } from '@livestore/utils/effect';
3
3
  import type { UnexpectedError } from '../adapter-types.js';
4
4
  import type { InitialSyncOptions } from '../leader-thread/types.js';
5
5
  import * as EventId from '../schema/EventId.js';
6
- import type * as MutationEvent from '../schema/MutationEvent.js';
6
+ import type * as LiveStoreEvent from '../schema/LiveStoreEvent.js';
7
7
  /**
8
8
  * Those arguments can be used to implement multi-tenancy etc and are passed in from the store.
9
9
  */
@@ -29,12 +29,16 @@ export type SyncOptions = {
29
29
  };
30
30
  export type SyncBackendConstructor<TSyncMetadata = Schema.JsonValue> = (args: MakeBackendArgs) => Effect.Effect<SyncBackend<TSyncMetadata>, UnexpectedError, Scope.Scope | HttpClient.HttpClient>;
31
31
  export type SyncBackend<TSyncMetadata = Schema.JsonValue> = {
32
+ /**
33
+ * Can be implemented to prepare a connection to the sync backend to speed up the first pull/push.
34
+ */
35
+ connect: Effect.Effect<void, IsOfflineError | UnexpectedError, HttpClient.HttpClient | Scope.Scope>;
32
36
  pull: (args: Option.Option<{
33
37
  cursor: EventId.EventId;
34
38
  metadata: Option.Option<TSyncMetadata>;
35
39
  }>) => Stream.Stream<{
36
40
  batch: ReadonlyArray<{
37
- mutationEventEncoded: MutationEvent.AnyEncodedGlobal;
41
+ eventEncoded: LiveStoreEvent.AnyEncodedGlobal;
38
42
  metadata: Option.Option<TSyncMetadata>;
39
43
  }>;
40
44
  remaining: number;
@@ -45,13 +49,10 @@ export type SyncBackend<TSyncMetadata = Schema.JsonValue> = {
45
49
  * - Number of events: 1-100
46
50
  * - event ids must be in ascending order
47
51
  * */
48
- batch: ReadonlyArray<MutationEvent.AnyEncodedGlobal>) => Effect.Effect<{
49
- /** Indexes are relative to `batch` */
50
- metadata: ReadonlyArray<Option.Option<TSyncMetadata>>;
51
- }, IsOfflineError | InvalidPushError, HttpClient.HttpClient>;
52
+ batch: ReadonlyArray<LiveStoreEvent.AnyEncodedGlobal>) => Effect.Effect<void, IsOfflineError | InvalidPushError, HttpClient.HttpClient>;
52
53
  isConnected: SubscriptionRef.SubscriptionRef<boolean>;
53
54
  /**
54
- * Metadata describing the sync backend.
55
+ * Metadata describing the sync backend. (Currently only used by devtools.)
55
56
  */
56
57
  metadata: {
57
58
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzG,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAEhE;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAA;IACrC,gCAAgC;IAChC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC;;;;;;;;SAQK;IACL,WAAW,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,sBAAsB,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,IAAI,CACrE,IAAI,EAAE,eAAe,KAClB,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;AAEpG,MAAM,MAAM,WAAW,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,IAAI;IAC1D,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAA;QACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;KACvC,CAAC,KACC,MAAM,CAAC,MAAM,CAChB;QACE,KAAK,EAAE,aAAa,CAAC;YACnB,oBAAoB,EAAE,aAAa,CAAC,gBAAgB,CAAA;YACpD,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;SACvC,CAAC,CAAA;QACF,SAAS,EAAE,MAAM,CAAA;KAClB,EACD,cAAc,GAAG,gBAAgB,EACjC,UAAU,CAAC,UAAU,CACtB,CAAA;IAED,IAAI,EAAE;IACJ;;;;SAIK;IACL,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,KACjD,MAAM,CAAC,MAAM,CAChB;QACE,sCAAsC;QACtC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;KACtD,EACD,cAAc,GAAG,gBAAgB,EACjC,UAAU,CAAC,UAAU,CACtB,CAAA;IACD,WAAW,EAAE,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IACrD;;OAEG;IACH,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;CACnF,CAAA;;;;AAED,qBAAa,cAAe,SAAQ,mBAA0D;CAAG;;;;;;;;;;;AAEjG,qBAAa,gBAAiB,SAAQ,qBAUpC;CAAG;;;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG;;;;;;;;;;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzG,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,KAAK,cAAc,MAAM,6BAA6B,CAAA;AAElE;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAA;IACrC,gCAAgC;IAChC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC;;;;;;;;SAQK;IACL,WAAW,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,sBAAsB,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,IAAI,CACrE,IAAI,EAAE,eAAe,KAClB,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;AAEpG,MAAM,MAAM,WAAW,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,IAAI;IAC1D;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,EAAE,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;IACnG,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAA;QACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;KACvC,CAAC,KACC,MAAM,CAAC,MAAM,CAChB;QACE,KAAK,EAAE,aAAa,CAAC;YACnB,YAAY,EAAE,cAAc,CAAC,gBAAgB,CAAA;YAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;SACvC,CAAC,CAAA;QACF,SAAS,EAAE,MAAM,CAAA;KAClB,EACD,cAAc,GAAG,gBAAgB,EACjC,UAAU,CAAC,UAAU,CACtB,CAAA;IAED,IAAI,EAAE;IACJ;;;;SAIK;IACL,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAClD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;IAClF,WAAW,EAAE,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IACrD;;OAEG;IACH,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;CACnF,CAAA;;;;AAED,qBAAa,cAAe,SAAQ,mBAA0D;CAAG;;;;;;;;;;;AAEjG,qBAAa,gBAAiB,SAAQ,qBAUpC;CAAG;;;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG;;;;;;;;;;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAKpC;CAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAIhD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAwE/C,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,WAAW,EAAkB,CAAC,gBAAgB,EAAE,EAAE,CAAC;CAAG;AAEjG,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,MAAM,EAAE,MAAM,CAAC,KAAK,CAClB,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM;KACvB,CAAC,EACF,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,iBAAiB,EAAE,MAAM,CAAC,MAAM;QAChC,UAAU,EAAE,MAAM,CAAC,MAAM;KAC1B,CAAC,CACH;CACF,CAAC;CAAG;AAEL,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,iBAAiB,EAAE,OAAO,CAAC,OAAO;IAClC,UAAU,EAAE,OAAO,CAAC,OAAO;IAC3B,4EAA4E;IAC5E,iCAAiC;CAClC,CAAC;CAAG"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAIhD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAqE/C,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,WAAW,EAAkB,CAAC,gBAAgB,EAAE,EAAE,CAAC;CAAG;AAEjG,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,MAAM,EAAE,MAAM,CAAC,KAAK,CAClB,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM;KACvB,CAAC,EACF,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,iBAAiB,EAAE,MAAM,CAAC,MAAM;QAChC,UAAU,EAAE,MAAM,CAAC,MAAM;KAC1B,CAAC,CACH;CACF,CAAC;CAAG;AAEL,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,iBAAiB,EAAE,OAAO,CAAC,OAAO;IAClC,UAAU,EAAE,OAAO,CAAC,OAAO;IAC3B,4EAA4E;IAC5E,iCAAiC;CAClC,CAAC;CAAG"}
@@ -1,32 +1,32 @@
1
1
  import { Schema } from '@livestore/utils/effect';
2
2
  import { UnexpectedError } from '../adapter-types.js';
3
- import * as MutationEvent from '../schema/MutationEvent.js';
3
+ import * as LiveStoreEvent from '../schema/LiveStoreEvent.js';
4
4
  declare const SyncState_base: Schema.Class<SyncState, {
5
- pending: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
6
- rollbackTail: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
5
+ pending: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
7
6
  /** What this node expects the next upstream node to have as its own local head */
8
7
  upstreamHead: Schema.Struct<{
9
8
  global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
10
9
  client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
11
10
  }>;
11
+ /** Equivalent to `pending.at(-1)?.id` if there are pending events */
12
12
  localHead: Schema.Struct<{
13
13
  global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
14
14
  client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
15
15
  }>;
16
16
  }, Schema.Struct.Encoded<{
17
- pending: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
18
- rollbackTail: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
17
+ pending: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
19
18
  /** What this node expects the next upstream node to have as its own local head */
20
19
  upstreamHead: Schema.Struct<{
21
20
  global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
22
21
  client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
23
22
  }>;
23
+ /** Equivalent to `pending.at(-1)?.id` if there are pending events */
24
24
  localHead: Schema.Struct<{
25
25
  global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
26
26
  client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
27
27
  }>;
28
28
  }>, never, {
29
- readonly pending: readonly MutationEvent.EncodedWithMeta[];
29
+ readonly pending: readonly LiveStoreEvent.EncodedWithMeta[];
30
30
  } & {
31
31
  readonly upstreamHead: {
32
32
  readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
@@ -37,92 +37,75 @@ declare const SyncState_base: Schema.Class<SyncState, {
37
37
  readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
38
38
  readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
39
39
  };
40
- } & {
41
- readonly rollbackTail: readonly MutationEvent.EncodedWithMeta[];
42
40
  }, {}, {}>;
43
41
  /**
44
42
  * SyncState represents the current sync state of a sync node relative to an upstream node.
45
43
  * Events flow from local to upstream, with each state maintaining its own event head.
46
44
  *
47
- * Event Chain Structure:
45
+ * Example:
48
46
  * ```
49
- * +-------------------------+------------------------+
50
- * | ROLLBACK TAIL | PENDING EVENTS |
51
- * +-------------------------+------------------------+
52
- * ▼ ▼
53
- * Upstream Head Local Head
54
- * Example: (0,0), (0,1), (1,0) (1,1), (1,2), (2,0)
47
+ * +------------------------+
48
+ * | PENDING EVENTS |
49
+ * +------------------------+
50
+ * ▼ ▼
51
+ * Upstream Head Local Head
52
+ * (1,0) (1,1), (1,2), (2,0)
55
53
  * ```
56
54
  *
57
- * State:
58
- * - **Pending Events**: Events awaiting acknowledgment from the upstream.
59
- * - Can be confirmed or rejected by the upstream.
60
- * - Subject to rebase if rejected.
61
- * - **Rollback Tail**: Events that are kept around temporarily for potential rollback until confirmed by upstream.
62
- * - Currently only needed for ClientSessionSyncProcessor.
63
- * - Note: Confirmation of an event is stronger than acknowledgment of an event and can only be done by the
64
- * absolute authority in the sync hierarchy (i.e. the sync backend in our case).
55
+ * **Pending Events**: Events awaiting acknowledgment from the upstream.
56
+ * - Can be confirmed or rejected by the upstream.
57
+ * - Subject to rebase if rejected.
65
58
  *
66
59
  * Payloads:
67
60
  * - `PayloadUpstreamRebase`: Upstream has performed a rebase, so downstream must roll back to the specified event
68
61
  * and rebase the pending events on top of the new events.
69
62
  * - `PayloadUpstreamAdvance`: Upstream has advanced, so downstream must rebase the pending events on top of the new events.
70
- * - `PayloadUpstreamTrimRollbackTail`: Upstream has advanced, so downstream can trim the rollback tail.
71
63
  * - `PayloadLocalPush`: Local push payload
72
64
  *
73
65
  * Invariants:
74
66
  * 1. **Chain Continuity**: Each event must reference its immediate parent.
75
67
  * 2. **Head Ordering**: Upstream Head ≤ Local Head.
76
- * 3. **ID Sequence**: Must follow the pattern (1,0)→(1,1)→(1,2)→(2,0).
68
+ * 3. **Event number sequence**: Must follow the pattern (1,0)→(1,1)→(1,2)→(2,0).
77
69
  *
78
70
  * A few further notes to help form an intuition:
79
71
  * - The goal is to keep the pending events as small as possible (i.e. to have synced with the next upstream node)
80
72
  * - There are 2 cases for rebasing:
81
73
  * - The conflicting event only conflicts with the pending events -> only (some of) the pending events need to be rolled back
82
- * - The conflicting event conflicts even with the rollback tail (additionally to the pending events) -> events from both need to be rolled back
83
74
  *
84
75
  * The `merge` function processes updates to the sync state based on incoming payloads,
85
- * handling cases such as upstream rebase, advance, local push, and rollback tail trimming.
76
+ * handling cases such as upstream rebase, advance and local push.
86
77
  */
87
78
  export declare class SyncState extends SyncState_base {
88
79
  toJSON: () => any;
89
80
  }
90
81
  declare const PayloadUpstreamRebase_base: Schema.TaggedStruct<"upstream-rebase", {
91
- /** Rollback until this event in the rollback tail (inclusive). Starting from the end of the rollback tail. */
92
- rollbackUntil: Schema.Struct<{
93
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
94
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
95
- }>;
96
- newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
97
- /** Trim rollback tail up to this event (inclusive). */
98
- trimRollbackUntil: Schema.optional<Schema.Struct<{
99
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
100
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
101
- }>>;
82
+ /** Events which need to be rolled back */
83
+ rollbackEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
84
+ /** Events which need to be applied after the rollback (already rebased by the upstream node) */
85
+ newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
102
86
  }>;
87
+ /**
88
+ * This payload propagates a rebase from the upstream node
89
+ */
103
90
  export declare class PayloadUpstreamRebase extends PayloadUpstreamRebase_base {
104
91
  }
105
92
  declare const PayloadUpstreamAdvance_base: Schema.TaggedStruct<"upstream-advance", {
106
- newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
107
- /** Trim rollback tail up to this event (inclusive). */
108
- trimRollbackUntil: Schema.optional<Schema.Struct<{
109
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
110
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
111
- }>>;
93
+ newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
112
94
  }>;
113
95
  export declare class PayloadUpstreamAdvance extends PayloadUpstreamAdvance_base {
114
96
  }
115
97
  declare const PayloadLocalPush_base: Schema.TaggedStruct<"local-push", {
116
- newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
98
+ newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
117
99
  }>;
118
100
  export declare class PayloadLocalPush extends PayloadLocalPush_base {
119
101
  }
120
102
  declare const Payload_base: Schema.Union<[typeof PayloadUpstreamRebase, typeof PayloadUpstreamAdvance, typeof PayloadLocalPush]>;
121
103
  export declare class Payload extends Payload_base {
122
104
  }
123
- export declare const PayloadUpstream: Schema.Union<[typeof PayloadUpstreamRebase, typeof PayloadUpstreamAdvance]>;
124
- export type PayloadUpstream = typeof PayloadUpstream.Type;
125
- declare const UpdateContext_base: Schema.Class<UpdateContext, {
105
+ declare const PayloadUpstream_base: Schema.Union<[typeof PayloadUpstreamRebase, typeof PayloadUpstreamAdvance]>;
106
+ export declare class PayloadUpstream extends PayloadUpstream_base {
107
+ }
108
+ declare const MergeContext_base: Schema.Class<MergeContext, {
126
109
  payload: typeof Payload;
127
110
  syncState: typeof SyncState;
128
111
  }, Schema.Struct.Encoded<{
@@ -131,53 +114,46 @@ declare const UpdateContext_base: Schema.Class<UpdateContext, {
131
114
  }>, never, {
132
115
  readonly payload: {
133
116
  readonly _tag: "upstream-rebase";
134
- readonly rollbackUntil: {
135
- readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
136
- readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
137
- };
138
- readonly newEvents: readonly MutationEvent.EncodedWithMeta[];
139
- readonly trimRollbackUntil?: {
140
- readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
141
- readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
142
- } | undefined;
117
+ readonly rollbackEvents: readonly LiveStoreEvent.EncodedWithMeta[];
118
+ readonly newEvents: readonly LiveStoreEvent.EncodedWithMeta[];
143
119
  } | {
144
120
  readonly _tag: "upstream-advance";
145
- readonly newEvents: readonly MutationEvent.EncodedWithMeta[];
146
- readonly trimRollbackUntil?: {
147
- readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
148
- readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
149
- } | undefined;
121
+ readonly newEvents: readonly LiveStoreEvent.EncodedWithMeta[];
150
122
  } | {
151
123
  readonly _tag: "local-push";
152
- readonly newEvents: readonly MutationEvent.EncodedWithMeta[];
124
+ readonly newEvents: readonly LiveStoreEvent.EncodedWithMeta[];
153
125
  };
154
126
  } & {
155
127
  readonly syncState: SyncState;
156
128
  }, {}, {}>;
157
129
  /** Only used for debugging purposes */
158
- export declare class UpdateContext extends UpdateContext_base {
130
+ export declare class MergeContext extends MergeContext_base {
159
131
  toJSON: () => any;
160
132
  }
161
133
  declare const MergeResultAdvance_base: Schema.Class<MergeResultAdvance, {
162
134
  _tag: Schema.Literal<["advance"]>;
163
135
  newSyncState: typeof SyncState;
164
- /** Events which weren't pending before the update */
165
- newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
166
- updateContext: typeof UpdateContext;
136
+ newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
137
+ /** Events which were previously pending but are now confirmed */
138
+ confirmedEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
139
+ mergeContext: typeof MergeContext;
167
140
  }, Schema.Struct.Encoded<{
168
141
  _tag: Schema.Literal<["advance"]>;
169
142
  newSyncState: typeof SyncState;
170
- /** Events which weren't pending before the update */
171
- newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
172
- updateContext: typeof UpdateContext;
143
+ newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
144
+ /** Events which were previously pending but are now confirmed */
145
+ confirmedEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
146
+ mergeContext: typeof MergeContext;
173
147
  }>, never, {
174
148
  readonly _tag: "advance";
175
149
  } & {
176
- readonly newEvents: readonly MutationEvent.EncodedWithMeta[];
150
+ readonly newEvents: readonly LiveStoreEvent.EncodedWithMeta[];
177
151
  } & {
178
152
  readonly newSyncState: SyncState;
179
153
  } & {
180
- readonly updateContext: UpdateContext;
154
+ readonly mergeContext: MergeContext;
155
+ } & {
156
+ readonly confirmedEvents: readonly LiveStoreEvent.EncodedWithMeta[];
181
157
  }, {}, {}>;
182
158
  export declare class MergeResultAdvance extends MergeResultAdvance_base {
183
159
  toJSON: () => any;
@@ -185,27 +161,27 @@ export declare class MergeResultAdvance extends MergeResultAdvance_base {
185
161
  declare const MergeResultRebase_base: Schema.Class<MergeResultRebase, {
186
162
  _tag: Schema.Literal<["rebase"]>;
187
163
  newSyncState: typeof SyncState;
188
- /** Events which weren't pending before the update */
189
- newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
190
- eventsToRollback: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
191
- updateContext: typeof UpdateContext;
164
+ newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
165
+ /** Events which need to be rolled back */
166
+ rollbackEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
167
+ mergeContext: typeof MergeContext;
192
168
  }, Schema.Struct.Encoded<{
193
169
  _tag: Schema.Literal<["rebase"]>;
194
170
  newSyncState: typeof SyncState;
195
- /** Events which weren't pending before the update */
196
- newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
197
- eventsToRollback: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
198
- updateContext: typeof UpdateContext;
171
+ newEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
172
+ /** Events which need to be rolled back */
173
+ rollbackEvents: Schema.Array$<typeof LiveStoreEvent.EncodedWithMeta>;
174
+ mergeContext: typeof MergeContext;
199
175
  }>, never, {
200
176
  readonly _tag: "rebase";
201
177
  } & {
202
- readonly newEvents: readonly MutationEvent.EncodedWithMeta[];
178
+ readonly rollbackEvents: readonly LiveStoreEvent.EncodedWithMeta[];
203
179
  } & {
204
- readonly newSyncState: SyncState;
180
+ readonly newEvents: readonly LiveStoreEvent.EncodedWithMeta[];
205
181
  } & {
206
- readonly updateContext: UpdateContext;
182
+ readonly newSyncState: SyncState;
207
183
  } & {
208
- readonly eventsToRollback: readonly MutationEvent.EncodedWithMeta[];
184
+ readonly mergeContext: MergeContext;
209
185
  }, {}, {}>;
210
186
  export declare class MergeResultRebase extends MergeResultRebase_base {
211
187
  toJSON: () => any;
@@ -217,7 +193,7 @@ declare const MergeResultReject_base: Schema.Class<MergeResultReject, {
217
193
  global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
218
194
  client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
219
195
  }>;
220
- updateContext: typeof UpdateContext;
196
+ mergeContext: typeof MergeContext;
221
197
  }, Schema.Struct.Encoded<{
222
198
  _tag: Schema.Literal<["reject"]>;
223
199
  /** The minimum id that the new events must have */
@@ -225,11 +201,11 @@ declare const MergeResultReject_base: Schema.Class<MergeResultReject, {
225
201
  global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
226
202
  client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
227
203
  }>;
228
- updateContext: typeof UpdateContext;
204
+ mergeContext: typeof MergeContext;
229
205
  }>, never, {
230
206
  readonly _tag: "reject";
231
207
  } & {
232
- readonly updateContext: UpdateContext;
208
+ readonly mergeContext: MergeContext;
233
209
  } & {
234
210
  readonly expectedMinimumId: {
235
211
  readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
@@ -258,8 +234,8 @@ export declare class MergeResult extends MergeResult_base {
258
234
  export declare const merge: ({ syncState, payload, isClientEvent, isEqualEvent, ignoreClientEvents, }: {
259
235
  syncState: SyncState;
260
236
  payload: typeof Payload.Type;
261
- isClientEvent: (event: MutationEvent.EncodedWithMeta) => boolean;
262
- isEqualEvent: (a: MutationEvent.EncodedWithMeta, b: MutationEvent.EncodedWithMeta) => boolean;
237
+ isClientEvent: (event: LiveStoreEvent.EncodedWithMeta) => boolean;
238
+ isEqualEvent: (a: LiveStoreEvent.EncodedWithMeta, b: LiveStoreEvent.EncodedWithMeta) => boolean;
263
239
  /** This is used in the leader which should ignore client events when receiving an upstream-advance payload */
264
240
  ignoreClientEvents?: boolean;
265
241
  }) => typeof MergeResult.Type;
@@ -268,10 +244,10 @@ export declare const merge: ({ syncState, payload, isClientEvent, isEqualEvent,
268
244
  * by comparing each event in `existingEvents` to the corresponding event in `incomingEvents`
269
245
  */
270
246
  export declare const findDivergencePoint: ({ existingEvents, incomingEvents, isEqualEvent, isClientEvent, ignoreClientEvents, }: {
271
- existingEvents: ReadonlyArray<MutationEvent.EncodedWithMeta>;
272
- incomingEvents: ReadonlyArray<MutationEvent.EncodedWithMeta>;
273
- isEqualEvent: (a: MutationEvent.EncodedWithMeta, b: MutationEvent.EncodedWithMeta) => boolean;
274
- isClientEvent: (event: MutationEvent.EncodedWithMeta) => boolean;
247
+ existingEvents: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>;
248
+ incomingEvents: ReadonlyArray<LiveStoreEvent.EncodedWithMeta>;
249
+ isEqualEvent: (a: LiveStoreEvent.EncodedWithMeta, b: LiveStoreEvent.EncodedWithMeta) => boolean;
250
+ isClientEvent: (event: LiveStoreEvent.EncodedWithMeta) => boolean;
275
251
  ignoreClientEvents: boolean;
276
252
  }) => number;
277
253
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"syncstate.d.ts","sourceRoot":"","sources":["../../src/sync/syncstate.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;;;;IAiDzD,kFAAkF;;;;;;;;;;;;IAAlF,kFAAkF;;;;;;;;;;;;;;;;;;;;;;;;AA/CpF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,qBAAa,SAAU,SAAQ,cAM7B;IACA,MAAM,QAAO,GAAG,CAOf;CACF;;IAGC,8GAA8G;;;;;;IAG9G,uDAAuD;;;;;;AAJzD,qBAAa,qBAAsB,SAAQ,0BAMzC;CAAG;;;IAIH,uDAAuD;;;;;;AAFzD,qBAAa,sBAAuB,SAAQ,2BAI1C;CAAG;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG;;AAEL,qBAAa,OAAQ,SAAQ,YAA6E;CAAG;AAE7G,eAAO,MAAM,eAAe,6EAA8D,CAAA;AAE1F,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzD,uCAAuC;AACvC,qBAAa,aAAc,SAAQ,kBAGjC;IACA,MAAM,QAAO,GAAG,CAoBf;CACF;;;;IAKC,qDAAqD;;;;;;IAArD,qDAAqD;;;;;;;;;;;;AAHvD,qBAAa,kBAAmB,SAAQ,uBAMtC;IACA,MAAM,QAAO,GAAG,CAOf;CACF;;;;IAKC,qDAAqD;;;;;;;IAArD,qDAAqD;;;;;;;;;;;;;;;AAHvD,qBAAa,iBAAkB,SAAQ,sBAOrC;IACA,MAAM,QAAO,GAAG,CAQf;CACF;;;IAIC,mDAAmD;;;;;;;;IAAnD,mDAAmD;;;;;;;;;;;;;;;;AAFrD,qBAAa,iBAAkB,SAAQ,sBAKrC;IACA,MAAM,QAAO,GAAG,CAMf;CACF;;;;;;;;;;;;AAED,qBAAa,0BAA2B,SAAQ,+BAG9C;CAAG;;AAEL,qBAAa,WAAY,SAAQ,gBAKhC;CAAG;AAQJ,eAAO,MAAM,KAAK,GAAI,0EAMnB;IACD,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,OAAO,CAAC,IAAI,CAAA;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,KAAK,OAAO,CAAA;IAChE,YAAY,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,eAAe,EAAE,CAAC,EAAE,aAAa,CAAC,eAAe,KAAK,OAAO,CAAA;IAC7F,8GAA8G;IAC9G,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,KAAG,OAAO,WAAW,CAAC,IAoOtB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,sFAMjC;IACD,cAAc,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;IAC5D,cAAc,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;IAC5D,YAAY,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,eAAe,EAAE,CAAC,EAAE,aAAa,CAAC,eAAe,KAAK,OAAO,CAAA;IAC7F,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,eAAe,KAAK,OAAO,CAAA;IAChE,kBAAkB,EAAE,OAAO,CAAA;CAC5B,KAAG,MAuBH,CAAA"}
1
+ {"version":3,"file":"syncstate.d.ts","sourceRoot":"","sources":["../../src/sync/syncstate.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAErD,OAAO,KAAK,cAAc,MAAM,6BAA6B,CAAA;;;IAyC3D,kFAAkF;;;;;IAElF,qEAAqE;;;;;;;IAFrE,kFAAkF;;;;;IAElF,qEAAqE;;;;;;;;;;;;;;;;;;AAzCvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,SAAU,SAAQ,cAM7B;IACA,MAAM,QAAO,GAAG,CAId;CACH;;IAMC,0CAA0C;;IAE1C,gGAAgG;;;AANlG;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,0BAKzC;CAAG;;;;AAEL,qBAAa,sBAAuB,SAAQ,2BAE1C;CAAG;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG;;AAEL,qBAAa,OAAQ,SAAQ,YAA6E;CAAG;;AAE7G,qBAAa,eAAgB,SAAQ,oBAA2D;CAAG;;;;;;;;;;;;;;;;;;;;;;AAEnG,uCAAuC;AACvC,qBAAa,YAAa,SAAQ,iBAGhC;IACA,MAAM,QAAO,GAAG,CAqBf;CACF;;;;;IAMC,iEAAiE;;;;;;;IAAjE,iEAAiE;;;;;;;;;;;;;;AAJnE,qBAAa,kBAAmB,SAAQ,uBAOtC;IACA,MAAM,QAAO,GAAG,CAQf;CACF;;;;;IAMC,0CAA0C;;;;;;;IAA1C,0CAA0C;;;;;;;;;;;;;;AAJ5C,qBAAa,iBAAkB,SAAQ,sBAOrC;IACA,MAAM,QAAO,GAAG,CAQf;CACF;;;IAIC,mDAAmD;;;;;;;;IAAnD,mDAAmD;;;;;;;;;;;;;;;;AAFrD,qBAAa,iBAAkB,SAAQ,sBAKrC;IACA,MAAM,QAAO,GAAG,CAMf;CACF;;;;;;;;;;;;AAED,qBAAa,0BAA2B,SAAQ,+BAG9C;CAAG;;AAEL,qBAAa,WAAY,SAAQ,gBAKhC;CAAG;AAoBJ,eAAO,MAAM,KAAK,GAAI,0EAMnB;IACD,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,OAAO,CAAC,IAAI,CAAA;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,eAAe,KAAK,OAAO,CAAA;IACjE,YAAY,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC,EAAE,cAAc,CAAC,eAAe,KAAK,OAAO,CAAA;IAC/F,8GAA8G;IAC9G,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,KAAG,OAAO,WAAW,CAAC,IA0MtB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,sFAMjC;IACD,cAAc,EAAE,aAAa,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;IAC7D,cAAc,EAAE,aAAa,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;IAC7D,YAAY,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,eAAe,EAAE,CAAC,EAAE,cAAc,CAAC,eAAe,KAAK,OAAO,CAAA;IAC/F,aAAa,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,eAAe,KAAK,OAAO,CAAA;IACjE,kBAAkB,EAAE,OAAO,CAAA;CAC5B,KAAG,MAuBH,CAAA"}