@livestore/common 0.3.0-dev.24 → 0.3.0-dev.25

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 (49) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/adapter-types.d.ts +4 -2
  3. package/dist/adapter-types.d.ts.map +1 -1
  4. package/dist/adapter-types.js +1 -1
  5. package/dist/adapter-types.js.map +1 -1
  6. package/dist/devtools/devtools-messages-client-session.d.ts +21 -21
  7. package/dist/devtools/devtools-messages-common.d.ts +6 -6
  8. package/dist/devtools/devtools-messages-leader.d.ts +24 -24
  9. package/dist/leader-thread/LeaderSyncProcessor.d.ts +2 -1
  10. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  11. package/dist/leader-thread/LeaderSyncProcessor.js +13 -11
  12. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  13. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  14. package/dist/leader-thread/make-leader-thread-layer.js +1 -0
  15. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  16. package/dist/leader-thread/mutationlog.d.ts +1 -0
  17. package/dist/leader-thread/mutationlog.d.ts.map +1 -1
  18. package/dist/leader-thread/mutationlog.js +1 -0
  19. package/dist/leader-thread/mutationlog.js.map +1 -1
  20. package/dist/schema/MutationEvent.d.ts +17 -1
  21. package/dist/schema/MutationEvent.d.ts.map +1 -1
  22. package/dist/schema/MutationEvent.js +18 -2
  23. package/dist/schema/MutationEvent.js.map +1 -1
  24. package/dist/sync/ClientSessionSyncProcessor.d.ts +2 -0
  25. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  26. package/dist/sync/ClientSessionSyncProcessor.js +8 -5
  27. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  28. package/dist/sync/sync.d.ts +10 -0
  29. package/dist/sync/sync.d.ts.map +1 -1
  30. package/dist/sync/sync.js.map +1 -1
  31. package/dist/sync/syncstate.d.ts +26 -4
  32. package/dist/sync/syncstate.d.ts.map +1 -1
  33. package/dist/sync/syncstate.js +95 -25
  34. package/dist/sync/syncstate.js.map +1 -1
  35. package/dist/sync/syncstate.test.js +59 -28
  36. package/dist/sync/syncstate.test.js.map +1 -1
  37. package/dist/version.d.ts +1 -1
  38. package/dist/version.js +1 -1
  39. package/package.json +2 -2
  40. package/src/adapter-types.ts +4 -2
  41. package/src/leader-thread/LeaderSyncProcessor.ts +16 -12
  42. package/src/leader-thread/make-leader-thread-layer.ts +1 -0
  43. package/src/leader-thread/mutationlog.ts +1 -0
  44. package/src/schema/MutationEvent.ts +18 -2
  45. package/src/sync/ClientSessionSyncProcessor.ts +10 -4
  46. package/src/sync/sync.ts +10 -0
  47. package/src/sync/syncstate.test.ts +65 -31
  48. package/src/sync/syncstate.ts +116 -34
  49. package/src/version.ts +1 -1
@@ -1,4 +1,4 @@
1
- import { casesHandled } from '@livestore/utils';
1
+ import { casesHandled, shouldNeverHappen } from '@livestore/utils';
2
2
  import { Match, ReadonlyArray, Schema } from '@livestore/utils/effect';
3
3
  import { UnexpectedError } from '../adapter-types.js';
4
4
  import * as EventId from '../schema/EventId.js';
@@ -22,6 +22,9 @@ import * as MutationEvent from '../schema/MutationEvent.js';
22
22
  * - Can be confirmed or rejected by the upstream.
23
23
  * - Subject to rebase if rejected.
24
24
  * - **Rollback Tail**: Events that are kept around temporarily for potential rollback until confirmed by upstream.
25
+ * - Currently only needed for ClientSessionSyncProcessor.
26
+ * - Note: Confirmation of an event is stronger than acknowledgment of an event and can only be done by the
27
+ * absolute authority in the sync hierarchy (i.e. the sync backend in our case).
25
28
  *
26
29
  * Payloads:
27
30
  * - `PayloadUpstreamRebase`: Upstream has performed a rebase, so downstream must roll back to the specified event
@@ -35,12 +38,19 @@ import * as MutationEvent from '../schema/MutationEvent.js';
35
38
  * 2. **Head Ordering**: Upstream Head ≤ Local Head.
36
39
  * 3. **ID Sequence**: Must follow the pattern (1,0)→(1,1)→(1,2)→(2,0).
37
40
  *
41
+ * A few further notes to help form an intuition:
42
+ * - The goal is to keep the pending events as small as possible (i.e. to have synced with the next upstream node)
43
+ * - There are 2 cases for rebasing:
44
+ * - The conflicting event only conflicts with the pending events -> only (some of) the pending events need to be rolled back
45
+ * - The conflicting event conflicts even with the rollback tail (additionally to the pending events) -> events from both need to be rolled back
46
+ *
38
47
  * The `updateSyncState` function processes updates to the sync state based on incoming payloads,
39
48
  * handling cases such as upstream rebase, advance, local push, and rollback tail trimming.
40
49
  */
41
50
  export class SyncState extends Schema.Class('SyncState')({
42
51
  pending: Schema.Array(MutationEvent.EncodedWithMeta),
43
52
  rollbackTail: Schema.Array(MutationEvent.EncodedWithMeta),
53
+ /** What this node expects the next upstream node to have as its own local head */
44
54
  upstreamHead: EventId.EventId,
45
55
  localHead: EventId.EventId,
46
56
  }) {
@@ -155,7 +165,8 @@ const unexpectedError = (cause) => UpdateResultUnexpectedError.make({
155
165
  _tag: 'unexpected-error',
156
166
  cause: new UnexpectedError({ cause }),
157
167
  });
158
- export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent, ignoreLocalEvents = false, }) => {
168
+ export const updateSyncState = ({ syncState, payload, isClientEvent, isEqualEvent, ignoreClientEvents = false, }) => {
169
+ validateSyncState(syncState);
159
170
  const trimRollbackTail = (rollbackTail) => {
160
171
  const trimRollbackUntil = payload._tag === 'local-push' ? undefined : payload.trimRollbackUntil;
161
172
  if (trimRollbackUntil === undefined)
@@ -180,7 +191,7 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
180
191
  const rebasedPending = rebaseEvents({
181
192
  events: syncState.pending,
182
193
  baseEventId: newUpstreamHead,
183
- isLocalEvent,
194
+ isClientEvent,
184
195
  });
185
196
  return UpdateResultRebase.make({
186
197
  _tag: 'rebase',
@@ -195,6 +206,7 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
195
206
  updateContext,
196
207
  });
197
208
  }
209
+ // #region upstream-advance
198
210
  case 'upstream-advance': {
199
211
  if (payload.newEvents.length === 0) {
200
212
  return UpdateResultAdvance.make({
@@ -216,17 +228,27 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
216
228
  }
217
229
  }
218
230
  // Validate that incoming events are larger than upstream head
219
- if (EventId.isGreaterThan(syncState.upstreamHead, payload.newEvents[0].id)) {
220
- return unexpectedError(`Incoming events must be greater than upstream head. Expected greater than: [${syncState.upstreamHead.global},${syncState.upstreamHead.client}]. Received: [${payload.newEvents.map((e) => `(${e.id.global},${e.id.client})`).join(', ')}]`);
231
+ if (EventId.isGreaterThan(syncState.upstreamHead, payload.newEvents[0].id) ||
232
+ EventId.isEqual(syncState.upstreamHead, payload.newEvents[0].id)) {
233
+ return unexpectedError(`Incoming events must be greater than upstream head. Expected greater than: (${syncState.upstreamHead.global},${syncState.upstreamHead.client}). Received: [${payload.newEvents.map((e) => `(${e.id.global},${e.id.client})`).join(', ')}]`);
234
+ }
235
+ // Validate that the parent id of the first incoming event is known
236
+ const knownEventGlobalIds = [...syncState.rollbackTail, ...syncState.pending].map((e) => e.id.global);
237
+ knownEventGlobalIds.push(syncState.upstreamHead.global);
238
+ const firstNewEvent = payload.newEvents[0];
239
+ const hasUnknownParentId = knownEventGlobalIds.includes(firstNewEvent.parentId.global) === false;
240
+ if (hasUnknownParentId) {
241
+ return unexpectedError(`Incoming events must have a known parent id. Received: [${payload.newEvents.map((e) => `(${e.id.global},${e.id.client})`).join(', ')}]`);
221
242
  }
222
243
  const newUpstreamHead = payload.newEvents.at(-1).id;
223
244
  const divergentPendingIndex = findDivergencePoint({
224
245
  existingEvents: syncState.pending,
225
246
  incomingEvents: payload.newEvents,
226
247
  isEqualEvent,
227
- isLocalEvent,
228
- ignoreLocalEvents,
248
+ isClientEvent,
249
+ ignoreClientEvents,
229
250
  });
251
+ // No divergent pending events, thus we can just advance (some of) the pending events
230
252
  if (divergentPendingIndex === -1) {
231
253
  const pendingEventIds = new Set(syncState.pending.map((e) => `${e.id.global},${e.id.client}`));
232
254
  const newEvents = payload.newEvents.filter((e) => !pendingEventIds.has(`${e.id.global},${e.id.client}`));
@@ -234,14 +256,14 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
234
256
  // we need to split the pending events into two groups:
235
257
  // - pendingMatching: The pending events up to point where they match the incoming events
236
258
  // - pendingRemaining: The pending events after the point where they match the incoming events
237
- // The `localIndexOffset` is used to account for the local events that are being ignored
238
- let localIndexOffset = 0;
259
+ // The `clientIndexOffset` is used to account for the client events that are being ignored
260
+ let clientIndexOffset = 0;
239
261
  const [pendingMatching, pendingRemaining] = ReadonlyArray.splitWhere(syncState.pending, (pendingEvent, index) => {
240
- if (ignoreLocalEvents && isLocalEvent(pendingEvent)) {
241
- localIndexOffset++;
262
+ if (ignoreClientEvents && isClientEvent(pendingEvent)) {
263
+ clientIndexOffset++;
242
264
  return false;
243
265
  }
244
- const newEvent = payload.newEvents.at(index - localIndexOffset);
266
+ const newEvent = payload.newEvents.at(index - clientIndexOffset);
245
267
  if (!newEvent) {
246
268
  return true;
247
269
  }
@@ -273,14 +295,14 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
273
295
  const rebasedPending = rebaseEvents({
274
296
  events: divergentPending,
275
297
  baseEventId: newUpstreamHead,
276
- isLocalEvent,
298
+ isClientEvent,
277
299
  });
278
300
  const divergentNewEventsIndex = findDivergencePoint({
279
301
  existingEvents: payload.newEvents,
280
302
  incomingEvents: syncState.pending,
281
303
  isEqualEvent,
282
- isLocalEvent,
283
- ignoreLocalEvents,
304
+ isClientEvent,
305
+ ignoreClientEvents,
284
306
  });
285
307
  return UpdateResultRebase.make({
286
308
  _tag: 'rebase',
@@ -296,6 +318,7 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
296
318
  });
297
319
  }
298
320
  }
321
+ // #endregion
299
322
  case 'local-push': {
300
323
  if (payload.newEvents.length === 0) {
301
324
  return UpdateResultAdvance.make({
@@ -338,19 +361,19 @@ export const updateSyncState = ({ syncState, payload, isLocalEvent, isEqualEvent
338
361
  * Gets the index relative to `existingEvents` where the divergence point is
339
362
  * by comparing each event in `existingEvents` to the corresponding event in `incomingEvents`
340
363
  */
341
- const findDivergencePoint = ({ existingEvents, incomingEvents, isEqualEvent, isLocalEvent, ignoreLocalEvents, }) => {
342
- if (ignoreLocalEvents) {
343
- const filteredExistingEvents = existingEvents.filter((event) => !isLocalEvent(event));
344
- const divergencePointWithoutLocalEvents = findDivergencePoint({
364
+ export const findDivergencePoint = ({ existingEvents, incomingEvents, isEqualEvent, isClientEvent, ignoreClientEvents, }) => {
365
+ if (ignoreClientEvents) {
366
+ const filteredExistingEvents = existingEvents.filter((event) => !isClientEvent(event));
367
+ const divergencePointWithoutClientEvents = findDivergencePoint({
345
368
  existingEvents: filteredExistingEvents,
346
369
  incomingEvents,
347
370
  isEqualEvent,
348
- isLocalEvent,
349
- ignoreLocalEvents: false,
371
+ isClientEvent,
372
+ ignoreClientEvents: false,
350
373
  });
351
- if (divergencePointWithoutLocalEvents === -1)
374
+ if (divergencePointWithoutClientEvents === -1)
352
375
  return -1;
353
- const divergencePointEventId = existingEvents[divergencePointWithoutLocalEvents].id;
376
+ const divergencePointEventId = existingEvents[divergencePointWithoutClientEvents].id;
354
377
  // Now find the divergence point in the original array
355
378
  return existingEvents.findIndex((event) => EventId.isEqual(event.id, divergencePointEventId));
356
379
  }
@@ -360,10 +383,10 @@ const findDivergencePoint = ({ existingEvents, incomingEvents, isEqualEvent, isL
360
383
  return incomingEvent && !isEqualEvent(existingEvent, incomingEvent);
361
384
  });
362
385
  };
363
- const rebaseEvents = ({ events, baseEventId, isLocalEvent, }) => {
386
+ const rebaseEvents = ({ events, baseEventId, isClientEvent, }) => {
364
387
  let prevEventId = baseEventId;
365
388
  return events.map((event) => {
366
- const isLocal = isLocalEvent(event);
389
+ const isLocal = isClientEvent(event);
367
390
  const newEvent = event.rebase(prevEventId, isLocal);
368
391
  prevEventId = newEvent.id;
369
392
  return newEvent;
@@ -377,4 +400,51 @@ const rebaseEvents = ({ events, baseEventId, isLocalEvent, }) => {
377
400
  * can process more efficiently which avoids push-threshing
378
401
  */
379
402
  const _flattenUpdateResults = (_updateResults) => { };
403
+ const validateSyncState = (syncState) => {
404
+ // Validate that the rollback tail and pending events together form a continuous chain of events / linked list via the parentId
405
+ const chain = [...syncState.rollbackTail, ...syncState.pending];
406
+ for (let i = 0; i < chain.length; i++) {
407
+ const event = chain[i];
408
+ const nextEvent = chain[i + 1];
409
+ if (nextEvent === undefined)
410
+ break; // Reached end of chain
411
+ if (EventId.isGreaterThan(event.id, nextEvent.id)) {
412
+ shouldNeverHappen('Events must be sorted in ascending order by eventId', chain, {
413
+ event,
414
+ nextEvent,
415
+ });
416
+ }
417
+ // If the global id has increased, then the client id must be 0
418
+ const globalIdHasIncreased = nextEvent.id.global > event.id.global;
419
+ if (globalIdHasIncreased) {
420
+ if (nextEvent.id.client !== 0) {
421
+ shouldNeverHappen(`New global events must point to clientId 0 in the parentId. Received: (${nextEvent.id.global},${nextEvent.id.client})`, chain, {
422
+ event,
423
+ nextEvent,
424
+ });
425
+ }
426
+ }
427
+ else {
428
+ // Otherwise, the parentId must be the same as the previous event's id
429
+ if (EventId.isEqual(nextEvent.parentId, event.id) === false) {
430
+ shouldNeverHappen('Events must be linked in a continuous chain via the parentId', chain, {
431
+ event,
432
+ nextEvent,
433
+ });
434
+ }
435
+ }
436
+ }
437
+ // TODO double check this
438
+ // const globalRollbackTail = syncState.rollbackTail.filter((event) => event.id.client === 0)
439
+ // // The parent of the first global rollback tail event ("oldest event") must be the upstream head (if there is a rollback tail)
440
+ // if (globalRollbackTail.length > 0) {
441
+ // const firstRollbackTailEvent = globalRollbackTail[0]!
442
+ // if (EventId.isEqual(firstRollbackTailEvent.parentId, syncState.upstreamHead) === false) {
443
+ // shouldNeverHappen('The parent of the first rollback tail event must be the upstream head', chain, {
444
+ // event: firstRollbackTailEvent,
445
+ // upstreamHead: syncState.upstreamHead,
446
+ // })
447
+ // }
448
+ // }
449
+ };
380
450
  //# sourceMappingURL=syncstate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"syncstate.js","sourceRoot":"","sources":["../../src/sync/syncstate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"syncstate.js","sourceRoot":"","sources":["../../src/sync/syncstate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEtE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,KAAK,CAAY,WAAW,CAAC,CAAC;IAClE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC;IACpD,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC;IACzD,kFAAkF;IAClF,YAAY,EAAE,OAAO,CAAC,OAAO;IAC7B,SAAS,EAAE,OAAO,CAAC,OAAO;CAC3B,CAAC;IACA,MAAM,GAAG,GAAQ,EAAE;QACjB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC5C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACtD,YAAY,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG;YACzE,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG;SACjE,CAAA;IACH,CAAC,CAAA;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,MAAM,CAAC,YAAY,CAAC,iBAAiB,EAAE;IAChF,8GAA8G;IAC9G,aAAa,EAAE,OAAO,CAAC,OAAO;IAC9B,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC;IACtD,uDAAuD;IACvD,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;CACpD,CAAC;CAAG;AAEL,MAAM,OAAO,sBAAuB,SAAQ,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE;IAClF,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC;IACtD,uDAAuD;IACvD,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;CACpD,CAAC;CAAG;AAEL,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE;IACtE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC;CACvD,CAAC;CAAG;AAEL,MAAM,OAAO,OAAQ,SAAQ,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,sBAAsB,EAAE,gBAAgB,CAAC;CAAG;AAE7G,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,CAAA;AAI1F,uCAAuC;AACvC,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,KAAK,CAAgB,eAAe,CAAC,CAAC;IAC9E,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,SAAS;CACrB,CAAC;IACA,MAAM,GAAG,GAAQ,EAAE;QACjB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5C,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7B,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACzD,CAAC,CAAC,EACH,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;YACnC,IAAI,EAAE,kBAAkB;YACxB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACzD,CAAC,CAAC,EACH,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;YAClC,IAAI,EAAE,iBAAiB;YACvB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACzD,CAAC,CAAC,EACH,KAAK,CAAC,UAAU,CACjB,CAAA;QACD,OAAO;YACL,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;SACnC,CAAA;IACH,CAAC,CAAA;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,KAAK,CAAsB,qBAAqB,CAAC,CAAC;IAChG,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;IAC/B,YAAY,EAAE,SAAS;IACvB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC;IACtD,aAAa,EAAE,aAAa;CAC7B,CAAC;IACA,MAAM,GAAG,GAAQ,EAAE;QACjB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YACxC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAChD,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;SAC3C,CAAA;IACH,CAAC,CAAA;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,KAAK,CAAqB,oBAAoB,CAAC,CAAC;IAC7F,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9B,YAAY,EAAE,SAAS;IACvB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC;IACtD,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC;IAC7D,aAAa,EAAE,aAAa;CAC7B,CAAC;IACA,MAAM,GAAG,GAAQ,EAAE;QACjB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YACxC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAChD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9D,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;SAC3C,CAAA;IACH,CAAC,CAAA;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,KAAK,CAAqB,oBAAoB,CAAC,CAAC;IAC7F,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9B,mDAAmD;IACnD,iBAAiB,EAAE,OAAO,CAAC,OAAO;IAClC,aAAa,EAAE,aAAa;CAC7B,CAAC;IACA,MAAM,GAAG,GAAQ,EAAE;QACjB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,iBAAiB,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG;YACxF,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;SAC3C,CAAA;IACH,CAAC,CAAA;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,MAAM,CAAC,KAAK,CAC3D,6BAA6B,CAC9B,CAAC;IACA,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;IACxC,KAAK,EAAE,eAAe;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC,KAAK,CAC5C,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,CAC5B;CAAG;AAEJ,MAAM,eAAe,GAAG,CAAC,KAAc,EAA+B,EAAE,CACtE,2BAA2B,CAAC,IAAI,CAAC;IAC/B,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC;CACtC,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,SAAS,EACT,OAAO,EACP,aAAa,EACb,YAAY,EACZ,kBAAkB,GAAG,KAAK,GAQ3B,EAA4B,EAAE;IAC7B,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAE5B,MAAM,gBAAgB,GAAG,CACvB,YAA0D,EACZ,EAAE;QAChD,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAA;QAC/F,IAAI,iBAAiB,KAAK,SAAS;YAAE,OAAO,YAAY,CAAA;QACxD,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAC7F,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,EAAE,CAAA;QAC3B,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IACtC,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;IAEhE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,4DAA4D;YAC5D,MAAM,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAC/D,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,aAAa,CAAC,CACjD,CAAA;YACD,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzB,OAAO,eAAe,CACpB,+DAA+D,OAAO,CAAC,aAAa,CAAC,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,sBAAsB,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC/M,CAAA;YACH,CAAC;YAED,MAAM,gBAAgB,GAAG,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;YAE/F,uDAAuD;YACvD,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,SAAS,CAAC,YAAY,CAAA;YAE9E,iDAAiD;YACjD,MAAM,cAAc,GAAG,YAAY,CAAC;gBAClC,MAAM,EAAE,SAAS,CAAC,OAAO;gBACzB,WAAW,EAAE,eAAe;gBAC5B,aAAa;aACd,CAAC,CAAA;YAEF,OAAO,kBAAkB,CAAC,IAAI,CAAC;gBAC7B,IAAI,EAAE,QAAQ;gBACd,YAAY,EAAE,IAAI,SAAS,CAAC;oBAC1B,OAAO,EAAE,cAAc;oBACvB,YAAY,EAAE,gBAAgB,CAAC,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;oBACzG,YAAY,EAAE,eAAe;oBAC7B,SAAS,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,eAAe;iBACxD,CAAC;gBACF,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,cAAc,CAAC;gBACpD,gBAAgB;gBAChB,aAAa;aACd,CAAC,CAAA;QACJ,CAAC;QAED,2BAA2B;QAC3B,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,mBAAmB,CAAC,IAAI,CAAC;oBAC9B,IAAI,EAAE,SAAS;oBACf,YAAY,EAAE,IAAI,SAAS,CAAC;wBAC1B,OAAO,EAAE,SAAS,CAAC,OAAO;wBAC1B,YAAY,EAAE,gBAAgB,CAAC,SAAS,CAAC,YAAY,CAAC;wBACtD,YAAY,EAAE,SAAS,CAAC,YAAY;wBACpC,SAAS,EAAE,SAAS,CAAC,SAAS;qBAC/B,CAAC;oBACF,SAAS,EAAE,EAAE;oBACb,aAAa;iBACd,CAAC,CAAA;YACJ,CAAC;YAED,mEAAmE;YACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClF,OAAO,eAAe,CACpB,mEAAmE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjJ,CAAA;gBACH,CAAC;YACH,CAAC;YAED,8DAA8D;YAC9D,IACE,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;gBACvE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,EACjE,CAAC;gBACD,OAAO,eAAe,CACpB,+EAA+E,SAAS,CAAC,YAAY,CAAC,MAAM,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,iBAAiB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC5O,CAAA;YACH,CAAC;YAED,mEAAmE;YACnE,MAAM,mBAAmB,GAAG,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;YACrG,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YACvD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAE,CAAA;YAC3C,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,CAAA;YAChG,IAAI,kBAAkB,EAAE,CAAC;gBACvB,OAAO,eAAe,CACpB,2DAA2D,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACzI,CAAA;YACH,CAAC;YAED,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,CAAA;YAEpD,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;gBAChD,cAAc,EAAE,SAAS,CAAC,OAAO;gBACjC,cAAc,EAAE,OAAO,CAAC,SAAS;gBACjC,YAAY;gBACZ,aAAa;gBACb,kBAAkB;aACnB,CAAC,CAAA;YAEF,qFAAqF;YACrF,IAAI,qBAAqB,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gBAC9F,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;gBAExG,4EAA4E;gBAC5E,uDAAuD;gBACvD,yFAAyF;gBACzF,8FAA8F;gBAC9F,0FAA0F;gBAC1F,IAAI,iBAAiB,GAAG,CAAC,CAAA;gBACzB,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,GAAG,aAAa,CAAC,UAAU,CAClE,SAAS,CAAC,OAAO,EACjB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE;oBACtB,IAAI,kBAAkB,IAAI,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;wBACtD,iBAAiB,EAAE,CAAA;wBACnB,OAAO,KAAK,CAAA;oBACd,CAAC;oBAED,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,GAAG,iBAAiB,CAAC,CAAA;oBAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,OAAO,IAAI,CAAA;oBACb,CAAC;oBACD,OAAO,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,KAAK,CAAA;gBACvD,CAAC,CACF,CAAA;gBAED,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAA;gBACtC,MAAM,mBAAmB,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;oBACtF,MAAM,UAAU,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAA;oBAC1D,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;wBACjC,OAAO,KAAK,CAAA;oBACd,CAAC;oBACD,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;oBAC5B,OAAO,IAAI,CAAA;gBACb,CAAC,CAAC,CAAA;gBAEF,OAAO,mBAAmB,CAAC,IAAI,CAAC;oBAC9B,IAAI,EAAE,SAAS;oBACf,YAAY,EAAE,IAAI,SAAS,CAAC;wBAC1B,OAAO,EAAE,gBAAgB;wBACzB,YAAY,EAAE,gBAAgB,CAAC,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,GAAG,mBAAmB,CAAC,CAAC;wBACnF,YAAY,EAAE,eAAe;wBAC7B,SAAS,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,eAAe;qBAC1D,CAAC;oBACF,SAAS;oBACT,aAAa;iBACd,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;gBACvE,MAAM,cAAc,GAAG,YAAY,CAAC;oBAClC,MAAM,EAAE,gBAAgB;oBACxB,WAAW,EAAE,eAAe;oBAC5B,aAAa;iBACd,CAAC,CAAA;gBAEF,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;oBAClD,cAAc,EAAE,OAAO,CAAC,SAAS;oBACjC,cAAc,EAAE,SAAS,CAAC,OAAO;oBACjC,YAAY;oBACZ,aAAa;oBACb,kBAAkB;iBACnB,CAAC,CAAA;gBAEF,OAAO,kBAAkB,CAAC,IAAI,CAAC;oBAC7B,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,IAAI,SAAS,CAAC;wBAC1B,OAAO,EAAE,cAAc;wBACvB,YAAY,EAAE,gBAAgB,CAAC,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;wBACjF,YAAY,EAAE,eAAe;wBAC7B,SAAS,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE;qBACrC,CAAC;oBACF,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,GAAG,cAAc,CAAC;oBACnF,gBAAgB,EAAE,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,GAAG,gBAAgB,CAAC;oBAClE,aAAa;iBACd,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QACD,aAAa;QAEb,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,mBAAmB,CAAC,IAAI,CAAC;oBAC9B,IAAI,EAAE,SAAS;oBACf,YAAY,EAAE,SAAS;oBACvB,SAAS,EAAE,EAAE;oBACb,aAAa;iBACd,CAAC,CAAA;YACJ,CAAC;YAED,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAE,CAAA;YAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK,KAAK,CAAA;YAE9F,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAE,CAAA;gBACxE,OAAO,kBAAkB,CAAC,IAAI,CAAC;oBAC7B,IAAI,EAAE,QAAQ;oBACd,iBAAiB;oBACjB,aAAa;iBACd,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,mBAAmB,CAAC,IAAI,CAAC;oBAC9B,IAAI,EAAE,SAAS;oBACf,YAAY,EAAE,IAAI,SAAS,CAAC;wBAC1B,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;wBACrD,YAAY,EAAE,SAAS,CAAC,YAAY;wBACpC,YAAY,EAAE,SAAS,CAAC,YAAY;wBACpC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE;qBACxC,CAAC;oBACF,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,aAAa;iBACd,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,YAAY,CAAC,OAAO,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAClC,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,EACb,kBAAkB,GAOnB,EAAU,EAAE;IACX,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,sBAAsB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;QACtF,MAAM,kCAAkC,GAAG,mBAAmB,CAAC;YAC7D,cAAc,EAAE,sBAAsB;YACtC,cAAc;YACd,YAAY;YACZ,aAAa;YACb,kBAAkB,EAAE,KAAK;SAC1B,CAAC,CAAA;QAEF,IAAI,kCAAkC,KAAK,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAA;QAExD,MAAM,sBAAsB,GAAG,cAAc,CAAC,kCAAkC,CAAE,CAAC,EAAE,CAAA;QACrF,sDAAsD;QACtD,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAA;IAC/F,CAAC;IAED,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE;QACvD,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;QAC3C,uEAAuE;QACvE,OAAO,aAAa,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;IACrE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,EACpB,MAAM,EACN,WAAW,EACX,aAAa,GAKd,EAAgD,EAAE;IACjD,IAAI,WAAW,GAAG,WAAW,CAAA;IAC7B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACnD,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAA;QACzB,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,qBAAqB,GAAG,CAAC,cAA2C,EAAE,EAAE,GAAE,CAAC,CAAA;AAEjF,MAAM,iBAAiB,GAAG,CAAC,SAAoB,EAAE,EAAE;IACjD,+HAA+H;IAC/H,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;IAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAA;QACvB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC9B,IAAI,SAAS,KAAK,SAAS;YAAE,MAAK,CAAC,uBAAuB;QAE1D,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YAClD,iBAAiB,CAAC,qDAAqD,EAAE,KAAK,EAAE;gBAC9E,KAAK;gBACL,SAAS;aACV,CAAC,CAAA;QACJ,CAAC;QAED,+DAA+D;QAC/D,MAAM,oBAAoB,GAAG,SAAS,CAAC,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,MAAM,CAAA;QAClE,IAAI,oBAAoB,EAAE,CAAC;YACzB,IAAI,SAAS,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,iBAAiB,CACf,0EAA0E,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,SAAS,CAAC,EAAE,CAAC,MAAM,GAAG,EACvH,KAAK,EACL;oBACE,KAAK;oBACL,SAAS;iBACV,CACF,CAAA;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,sEAAsE;YACtE,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC5D,iBAAiB,CAAC,8DAA8D,EAAE,KAAK,EAAE;oBACvF,KAAK;oBACL,SAAS;iBACV,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,6FAA6F;IAC7F,iIAAiI;IACjI,uCAAuC;IACvC,0DAA0D;IAC1D,8FAA8F;IAC9F,0GAA0G;IAC1G,uCAAuC;IACvC,8CAA8C;IAC9C,SAAS;IACT,MAAM;IACN,IAAI;AACN,CAAC,CAAA"}
@@ -29,11 +29,12 @@ const e_0_2 = new TestEvent({ global: 0, client: 2 }, e_0_1.id, 'a', true);
29
29
  const e_0_3 = new TestEvent({ global: 0, client: 3 }, e_0_2.id, 'a', true);
30
30
  const e_1_0 = new TestEvent({ global: 1, client: 0 }, e_0_0.id, 'a', false);
31
31
  const e_1_1 = new TestEvent({ global: 1, client: 1 }, e_1_0.id, 'a', true);
32
+ const e_2_0 = new TestEvent({ global: 2, client: 0 }, e_1_0.id, 'a', false);
32
33
  const isEqualEvent = MutationEvent.isEqualEncoded;
33
- const isLocalEvent = (event) => event.isLocal;
34
+ const isClientEvent = (event) => event.isLocal;
34
35
  describe('syncstate', () => {
35
36
  describe('updateSyncState', () => {
36
- const run = ({ syncState, payload, ignoreLocalEvents = false, }) => SyncState.updateSyncState({ syncState, payload, isLocalEvent, isEqualEvent, ignoreLocalEvents });
37
+ const update = ({ syncState, payload, ignoreClientEvents = false, }) => SyncState.updateSyncState({ syncState, payload, isClientEvent, isEqualEvent, ignoreClientEvents });
37
38
  describe.each([{ trimRollbackUntil: false }, { trimRollbackUntil: true }])('upstream-rebase (trimRollbackUntil: $trimRollbackUntil)', ({ trimRollbackUntil }) => {
38
39
  it('should rollback until start', () => {
39
40
  const syncState = new SyncState.SyncState({
@@ -44,7 +45,7 @@ describe('syncstate', () => {
44
45
  });
45
46
  const e_0_0_e_1_0 = e_0_0.rebase_(e_1_0.id);
46
47
  const e_0_1_e_1_1 = e_0_1.rebase_(e_0_0_e_1_0.id);
47
- const result = run({
48
+ const result = update({
48
49
  syncState,
49
50
  payload: {
50
51
  _tag: 'upstream-rebase',
@@ -75,7 +76,7 @@ describe('syncstate', () => {
75
76
  localHead: e_1_0.id,
76
77
  });
77
78
  const e_0_1_e_1_0 = e_0_1.rebase_(e_0_0.id);
78
- const result = run({
79
+ const result = update({
79
80
  syncState,
80
81
  payload: {
81
82
  _tag: 'upstream-rebase',
@@ -105,7 +106,7 @@ describe('syncstate', () => {
105
106
  upstreamHead: EventId.ROOT,
106
107
  localHead: e_0_0.id,
107
108
  });
108
- const result = run({
109
+ const result = update({
109
110
  syncState,
110
111
  payload: { _tag: 'upstream-rebase', rollbackUntil: e_0_0.id, newEvents: [e_1_0] },
111
112
  });
@@ -123,7 +124,7 @@ describe('syncstate', () => {
123
124
  upstreamHead: EventId.ROOT,
124
125
  localHead: e_0_0.id,
125
126
  });
126
- const result = run({
127
+ const result = update({
127
128
  syncState,
128
129
  payload: { _tag: 'upstream-rebase', rollbackUntil: e_0_0.id, newEvents: [e_1_0] },
129
130
  });
@@ -136,7 +137,7 @@ describe('syncstate', () => {
136
137
  upstreamHead: EventId.ROOT,
137
138
  localHead: e_0_0.id,
138
139
  });
139
- const result = run({
140
+ const result = update({
140
141
  syncState,
141
142
  payload: { _tag: 'upstream-rebase', rollbackUntil: e_0_0.id, newEvents: [] },
142
143
  });
@@ -156,7 +157,7 @@ describe('syncstate', () => {
156
157
  upstreamHead: EventId.ROOT,
157
158
  localHead: e_0_0.id,
158
159
  });
159
- const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_0] } });
160
+ const result = update({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_0] } });
160
161
  expect(result).toMatchObject({ _tag: 'unexpected-error' });
161
162
  });
162
163
  it('should throw error if newEvents are not sorted in ascending order by eventId (global)', () => {
@@ -166,7 +167,37 @@ describe('syncstate', () => {
166
167
  upstreamHead: EventId.ROOT,
167
168
  localHead: e_0_0.id,
168
169
  });
169
- const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0, e_0_0] } });
170
+ const result = update({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0, e_0_0] } });
171
+ expect(result).toMatchObject({ _tag: 'unexpected-error' });
172
+ });
173
+ it('should throw error if incoming event is < expected upstream head', () => {
174
+ const syncState = new SyncState.SyncState({
175
+ pending: [],
176
+ rollbackTail: [],
177
+ upstreamHead: e_1_0.id,
178
+ localHead: e_1_0.id,
179
+ });
180
+ const result = update({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
181
+ expect(result).toMatchObject({ _tag: 'unexpected-error' });
182
+ });
183
+ it('should throw error if incoming event is = expected upstream head', () => {
184
+ const syncState = new SyncState.SyncState({
185
+ pending: [],
186
+ rollbackTail: [],
187
+ upstreamHead: e_1_0.id,
188
+ localHead: e_1_0.id,
189
+ });
190
+ const result = update({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0] } });
191
+ expect(result).toMatchObject({ _tag: 'unexpected-error' });
192
+ });
193
+ it('should throw if the parent id of the first incoming event is unknown', () => {
194
+ const syncState = new SyncState.SyncState({
195
+ pending: [],
196
+ rollbackTail: [e_0_0],
197
+ upstreamHead: EventId.ROOT,
198
+ localHead: e_0_0.id,
199
+ });
200
+ const result = update({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_2_0] } });
170
201
  expect(result).toMatchObject({ _tag: 'unexpected-error' });
171
202
  });
172
203
  it('should acknowledge pending event when receiving matching event', () => {
@@ -176,7 +207,7 @@ describe('syncstate', () => {
176
207
  upstreamHead: EventId.ROOT,
177
208
  localHead: e_0_0.id,
178
209
  });
179
- const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
210
+ const result = update({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
180
211
  expectAdvance(result);
181
212
  expectEventArraysEqual(result.newSyncState.pending, []);
182
213
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0]);
@@ -191,7 +222,7 @@ describe('syncstate', () => {
191
222
  upstreamHead: EventId.ROOT,
192
223
  localHead: e_1_0.id,
193
224
  });
194
- const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
225
+ const result = update({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
195
226
  expectAdvance(result);
196
227
  expectEventArraysEqual(result.newSyncState.pending, [e_1_0]);
197
228
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0]);
@@ -206,7 +237,7 @@ describe('syncstate', () => {
206
237
  upstreamHead: EventId.ROOT,
207
238
  localHead: e_0_0.id,
208
239
  });
209
- const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_0_1] } });
240
+ const result = update({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_0_1] } });
210
241
  expectAdvance(result);
211
242
  expectEventArraysEqual(result.newSyncState.pending, []);
212
243
  expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_1]);
@@ -221,7 +252,7 @@ describe('syncstate', () => {
221
252
  upstreamHead: e_0_0.id,
222
253
  localHead: e_0_1.id,
223
254
  });
224
- const result = run({
255
+ const result = update({
225
256
  syncState,
226
257
  payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_2, e_0_3, e_1_0, e_1_1] },
227
258
  });
@@ -239,10 +270,10 @@ describe('syncstate', () => {
239
270
  upstreamHead: EventId.ROOT,
240
271
  localHead: e_0_0.id,
241
272
  });
242
- const result = run({
273
+ const result = update({
243
274
  syncState,
244
275
  payload: { _tag: 'upstream-advance', newEvents: [e_0_0] },
245
- ignoreLocalEvents: true,
276
+ ignoreClientEvents: true,
246
277
  });
247
278
  expectAdvance(result);
248
279
  expectEventArraysEqual(result.newSyncState.pending, []);
@@ -258,10 +289,10 @@ describe('syncstate', () => {
258
289
  upstreamHead: EventId.ROOT,
259
290
  localHead: e_0_0.id,
260
291
  });
261
- const result = run({
292
+ const result = update({
262
293
  syncState,
263
294
  payload: { _tag: 'upstream-advance', newEvents: [e_0_0] },
264
- ignoreLocalEvents: true,
295
+ ignoreClientEvents: true,
265
296
  });
266
297
  expectAdvance(result);
267
298
  expectEventArraysEqual(result.newSyncState.pending, [e_1_0]);
@@ -277,10 +308,10 @@ describe('syncstate', () => {
277
308
  upstreamHead: EventId.ROOT,
278
309
  localHead: e_0_1.id,
279
310
  });
280
- const result = run({
311
+ const result = update({
281
312
  syncState,
282
313
  payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_1_0] },
283
- ignoreLocalEvents: true,
314
+ ignoreClientEvents: true,
284
315
  });
285
316
  expectAdvance(result);
286
317
  expectEventArraysEqual(result.newSyncState.pending, []);
@@ -296,7 +327,7 @@ describe('syncstate', () => {
296
327
  upstreamHead: e_1_0.id,
297
328
  localHead: e_1_0.id,
298
329
  });
299
- const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
330
+ const result = update({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
300
331
  expect(result).toMatchObject({ _tag: 'unexpected-error' });
301
332
  });
302
333
  });
@@ -308,7 +339,7 @@ describe('syncstate', () => {
308
339
  upstreamHead: EventId.ROOT,
309
340
  localHead: e_0_0.id,
310
341
  });
311
- const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_1] } });
342
+ const result = update({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_1] } });
312
343
  const e_0_0_e_0_2 = e_0_0.rebase_(e_0_1.id);
313
344
  expectRebase(result);
314
345
  expectEventArraysEqual(result.newSyncState.pending, [e_0_0_e_0_2]);
@@ -326,7 +357,7 @@ describe('syncstate', () => {
326
357
  upstreamHead: EventId.ROOT,
327
358
  localHead: e_0_0_b.id,
328
359
  });
329
- const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
360
+ const result = update({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } });
330
361
  const e_0_0_e_1_0 = e_0_0_b.rebase_(e_0_0.id);
331
362
  expectRebase(result);
332
363
  expectEventArraysEqual(result.newSyncState.pending, [e_0_0_e_1_0]);
@@ -344,7 +375,7 @@ describe('syncstate', () => {
344
375
  upstreamHead: EventId.ROOT,
345
376
  localHead: e_1_0_b.id,
346
377
  });
347
- const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0] } });
378
+ const result = update({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0] } });
348
379
  const e_1_0_e_2_0 = e_1_0_b.rebase_(e_1_0.id);
349
380
  expectRebase(result);
350
381
  expectEventArraysEqual(result.newSyncState.pending, [e_1_0_e_2_0]);
@@ -361,7 +392,7 @@ describe('syncstate', () => {
361
392
  upstreamHead: EventId.ROOT,
362
393
  localHead: e_0_0.id,
363
394
  });
364
- const result = run({
395
+ const result = update({
365
396
  syncState,
366
397
  payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_2, e_0_3, e_1_0] },
367
398
  });
@@ -379,7 +410,7 @@ describe('syncstate', () => {
379
410
  upstreamHead: EventId.ROOT,
380
411
  localHead: e_0_0.id,
381
412
  });
382
- const result = run({
413
+ const result = update({
383
414
  syncState,
384
415
  payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_0_2, e_0_3, e_1_0] },
385
416
  });
@@ -399,7 +430,7 @@ describe('syncstate', () => {
399
430
  upstreamHead: EventId.ROOT,
400
431
  localHead: e_0_1.id,
401
432
  });
402
- const result = run({
433
+ const result = update({
403
434
  syncState,
404
435
  payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_2, e_0_3, e_1_0] },
405
436
  });
@@ -422,7 +453,7 @@ describe('syncstate', () => {
422
453
  upstreamHead: EventId.ROOT,
423
454
  localHead: e_0_0.id,
424
455
  });
425
- const result = run({ syncState, payload: { _tag: 'local-push', newEvents: [e_0_1, e_0_2, e_0_3] } });
456
+ const result = update({ syncState, payload: { _tag: 'local-push', newEvents: [e_0_1, e_0_2, e_0_3] } });
426
457
  expectAdvance(result);
427
458
  expectEventArraysEqual(result.newSyncState.pending, [e_0_0, e_0_1, e_0_2, e_0_3]);
428
459
  expectEventArraysEqual(result.newSyncState.rollbackTail, []);
@@ -439,7 +470,7 @@ describe('syncstate', () => {
439
470
  upstreamHead: EventId.ROOT,
440
471
  localHead: e_0_1.id,
441
472
  });
442
- const result = run({ syncState, payload: { _tag: 'local-push', newEvents: [e_0_1, e_0_2] } });
473
+ const result = update({ syncState, payload: { _tag: 'local-push', newEvents: [e_0_1, e_0_2] } });
443
474
  expectReject(result);
444
475
  expect(result.expectedMinimumId).toMatchObject(e_0_2.id);
445
476
  });