@livestore/common 0.0.0-snapshot-f6ec49b1a18859aad769f0a0d8edf8bae231ed07 → 0.0.0-snapshot-2ef046b02334f52613d31dbe06af53487685edc0

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 (102) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/adapter-types.d.ts +7 -12
  3. package/dist/adapter-types.d.ts.map +1 -1
  4. package/dist/adapter-types.js +1 -7
  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 +13 -6
  8. package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
  9. package/dist/devtools/devtools-messages-common.js +6 -0
  10. package/dist/devtools/devtools-messages-common.js.map +1 -1
  11. package/dist/devtools/devtools-messages-leader.d.ts +25 -25
  12. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  13. package/dist/devtools/devtools-messages-leader.js +1 -2
  14. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  15. package/dist/leader-thread/LeaderSyncProcessor.d.ts +16 -6
  16. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  17. package/dist/leader-thread/LeaderSyncProcessor.js +227 -215
  18. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  19. package/dist/leader-thread/apply-mutation.d.ts +14 -9
  20. package/dist/leader-thread/apply-mutation.d.ts.map +1 -1
  21. package/dist/leader-thread/apply-mutation.js +43 -36
  22. package/dist/leader-thread/apply-mutation.js.map +1 -1
  23. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  24. package/dist/leader-thread/leader-worker-devtools.js +2 -5
  25. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  26. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  27. package/dist/leader-thread/make-leader-thread-layer.js +22 -33
  28. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  29. package/dist/leader-thread/mod.d.ts +1 -1
  30. package/dist/leader-thread/mod.d.ts.map +1 -1
  31. package/dist/leader-thread/mod.js +1 -1
  32. package/dist/leader-thread/mod.js.map +1 -1
  33. package/dist/leader-thread/mutationlog.d.ts +20 -3
  34. package/dist/leader-thread/mutationlog.d.ts.map +1 -1
  35. package/dist/leader-thread/mutationlog.js +106 -12
  36. package/dist/leader-thread/mutationlog.js.map +1 -1
  37. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  38. package/dist/leader-thread/recreate-db.js +4 -3
  39. package/dist/leader-thread/recreate-db.js.map +1 -1
  40. package/dist/leader-thread/types.d.ts +35 -19
  41. package/dist/leader-thread/types.d.ts.map +1 -1
  42. package/dist/leader-thread/types.js.map +1 -1
  43. package/dist/rehydrate-from-mutationlog.d.ts +5 -4
  44. package/dist/rehydrate-from-mutationlog.d.ts.map +1 -1
  45. package/dist/rehydrate-from-mutationlog.js +7 -9
  46. package/dist/rehydrate-from-mutationlog.js.map +1 -1
  47. package/dist/schema/EventId.d.ts +4 -0
  48. package/dist/schema/EventId.d.ts.map +1 -1
  49. package/dist/schema/EventId.js +7 -1
  50. package/dist/schema/EventId.js.map +1 -1
  51. package/dist/schema/MutationEvent.d.ts +87 -18
  52. package/dist/schema/MutationEvent.d.ts.map +1 -1
  53. package/dist/schema/MutationEvent.js +35 -6
  54. package/dist/schema/MutationEvent.js.map +1 -1
  55. package/dist/schema/schema.js +1 -1
  56. package/dist/schema/schema.js.map +1 -1
  57. package/dist/schema/system-tables.d.ts +67 -0
  58. package/dist/schema/system-tables.d.ts.map +1 -1
  59. package/dist/schema/system-tables.js +12 -1
  60. package/dist/schema/system-tables.js.map +1 -1
  61. package/dist/sync/ClientSessionSyncProcessor.d.ts +11 -1
  62. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  63. package/dist/sync/ClientSessionSyncProcessor.js +54 -47
  64. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  65. package/dist/sync/sync.d.ts +16 -5
  66. package/dist/sync/sync.d.ts.map +1 -1
  67. package/dist/sync/sync.js.map +1 -1
  68. package/dist/sync/syncstate.d.ts +81 -83
  69. package/dist/sync/syncstate.d.ts.map +1 -1
  70. package/dist/sync/syncstate.js +159 -125
  71. package/dist/sync/syncstate.js.map +1 -1
  72. package/dist/sync/syncstate.test.js +97 -138
  73. package/dist/sync/syncstate.test.js.map +1 -1
  74. package/dist/version.d.ts +1 -1
  75. package/dist/version.js +1 -1
  76. package/package.json +2 -2
  77. package/src/adapter-types.ts +5 -12
  78. package/src/devtools/devtools-messages-common.ts +9 -0
  79. package/src/devtools/devtools-messages-leader.ts +1 -2
  80. package/src/leader-thread/LeaderSyncProcessor.ts +398 -370
  81. package/src/leader-thread/apply-mutation.ts +81 -71
  82. package/src/leader-thread/leader-worker-devtools.ts +3 -8
  83. package/src/leader-thread/make-leader-thread-layer.ts +27 -41
  84. package/src/leader-thread/mod.ts +1 -1
  85. package/src/leader-thread/mutationlog.ts +167 -13
  86. package/src/leader-thread/recreate-db.ts +4 -3
  87. package/src/leader-thread/types.ts +34 -23
  88. package/src/rehydrate-from-mutationlog.ts +12 -12
  89. package/src/schema/EventId.ts +8 -1
  90. package/src/schema/MutationEvent.ts +42 -10
  91. package/src/schema/schema.ts +1 -1
  92. package/src/schema/system-tables.ts +20 -1
  93. package/src/sync/ClientSessionSyncProcessor.ts +64 -50
  94. package/src/sync/sync.ts +16 -9
  95. package/src/sync/syncstate.test.ts +173 -217
  96. package/src/sync/syncstate.ts +184 -151
  97. package/src/version.ts +1 -1
  98. package/dist/leader-thread/pull-queue-set.d.ts +0 -7
  99. package/dist/leader-thread/pull-queue-set.d.ts.map +0 -1
  100. package/dist/leader-thread/pull-queue-set.js +0 -48
  101. package/dist/leader-thread/pull-queue-set.js.map +0 -1
  102. package/src/leader-thread/pull-queue-set.ts +0 -67
@@ -2,8 +2,9 @@ import { LS_DEV, shouldNeverHappen, TRACE_VERBOSE } from '@livestore/utils';
2
2
  import { BucketQueue, Effect, FiberHandle, Queue, Schema, Stream, Subscribable } from '@livestore/utils/effect';
3
3
  import * as otel from '@opentelemetry/api';
4
4
  import * as EventId from '../schema/EventId.js';
5
- import { getMutationDef } from '../schema/mod.js';
5
+ import { getMutationDef, LEADER_MERGE_COUNTER_TABLE } from '../schema/mod.js';
6
6
  import * as MutationEvent from '../schema/MutationEvent.js';
7
+ import { sql } from '../util.js';
7
8
  import * as SyncState from './syncstate.js';
8
9
  /**
9
10
  * Rebase behaviour:
@@ -13,56 +14,59 @@ import * as SyncState from './syncstate.js';
13
14
  * - The goal is to never block the UI, so we'll interrupt rebasing if a new mutations is pushed by the client session.
14
15
  * - We also want to avoid "backwards-jumping" in the UI, so we'll transactionally apply a read model changes during a rebase.
15
16
  * - We might need to make the rebase behaviour configurable e.g. to let users manually trigger a rebase
17
+ *
18
+ * Longer term we should evalutate whether we can unify the ClientSessionSyncProcessor with the LeaderSyncProcessor.
16
19
  */
17
20
  export const makeClientSessionSyncProcessor = ({ schema, clientSession, runtime, applyMutation, rollback, refreshTables, span, params, confirmUnsavedChanges, }) => {
18
21
  const mutationEventSchema = MutationEvent.makeMutationEventSchemaMemo(schema);
19
22
  const syncStateRef = {
23
+ // The initial state is identical to the leader's initial state
20
24
  current: new SyncState.SyncState({
21
25
  localHead: clientSession.leaderThread.initialState.leaderHead,
22
26
  upstreamHead: clientSession.leaderThread.initialState.leaderHead,
27
+ // Given we're starting with the leader's snapshot, we don't have any pending mutations intially
23
28
  pending: [],
24
- // TODO init rollbackTail from leader to be ready for backend rebasing
25
- rollbackTail: [],
26
29
  }),
27
30
  };
28
31
  const syncStateUpdateQueue = Queue.unbounded().pipe(Effect.runSync);
29
- const isLocalEvent = (mutationEventEncoded) => getMutationDef(schema, mutationEventEncoded.mutation).options.clientOnly;
32
+ const isClientEvent = (mutationEventEncoded) => getMutationDef(schema, mutationEventEncoded.mutation).options.clientOnly;
30
33
  /** We're queuing push requests to reduce the number of messages sent to the leader by batching them */
31
34
  const leaderPushQueue = BucketQueue.make().pipe(Effect.runSync);
32
35
  const push = (batch, { otelContext }) => {
33
36
  // TODO validate batch
34
37
  let baseEventId = syncStateRef.current.localHead;
35
- const encodedMutationEvents = batch.map((mutationEvent) => {
36
- const mutationDef = getMutationDef(schema, mutationEvent.mutation);
38
+ const encodedMutationEvents = batch.map(({ mutation, args }) => {
39
+ const mutationDef = getMutationDef(schema, mutation);
37
40
  const nextIdPair = EventId.nextPair(baseEventId, mutationDef.options.clientOnly);
38
41
  baseEventId = nextIdPair.id;
39
42
  return new MutationEvent.EncodedWithMeta(Schema.encodeUnknownSync(mutationEventSchema)({
40
- ...mutationEvent,
43
+ mutation,
44
+ args,
41
45
  ...nextIdPair,
42
46
  clientId: clientSession.clientId,
43
47
  sessionId: clientSession.sessionId,
44
48
  }));
45
49
  });
46
- const updateResult = SyncState.updateSyncState({
50
+ const mergeResult = SyncState.merge({
47
51
  syncState: syncStateRef.current,
48
52
  payload: { _tag: 'local-push', newEvents: encodedMutationEvents },
49
- isLocalEvent,
53
+ isClientEvent,
50
54
  isEqualEvent: MutationEvent.isEqualEncoded,
51
55
  });
52
- if (updateResult._tag === 'unexpected-error') {
53
- return shouldNeverHappen('Unexpected error in client-session-sync-processor', updateResult.cause);
56
+ if (mergeResult._tag === 'unexpected-error') {
57
+ return shouldNeverHappen('Unexpected error in client-session-sync-processor', mergeResult.cause);
54
58
  }
55
59
  span.addEvent('local-push', {
56
60
  batchSize: encodedMutationEvents.length,
57
- updateResult: TRACE_VERBOSE ? JSON.stringify(updateResult) : undefined,
61
+ mergeResult: TRACE_VERBOSE ? JSON.stringify(mergeResult) : undefined,
58
62
  });
59
- if (updateResult._tag !== 'advance') {
60
- return shouldNeverHappen(`Expected advance, got ${updateResult._tag}`);
63
+ if (mergeResult._tag !== 'advance') {
64
+ return shouldNeverHappen(`Expected advance, got ${mergeResult._tag}`);
61
65
  }
62
- syncStateRef.current = updateResult.newSyncState;
63
- syncStateUpdateQueue.offer(updateResult.newSyncState).pipe(Effect.runSync);
66
+ syncStateRef.current = mergeResult.newSyncState;
67
+ syncStateUpdateQueue.offer(mergeResult.newSyncState).pipe(Effect.runSync);
64
68
  const writeTables = new Set();
65
- for (const mutationEvent of updateResult.newEvents) {
69
+ for (const mutationEvent of mergeResult.newEvents) {
66
70
  // TODO avoid encoding and decoding here again
67
71
  const decodedMutationEvent = Schema.decodeSync(mutationEventSchema)(mutationEvent);
68
72
  const res = applyMutation(decodedMutationEvent, { otelContext, withChangeset: true });
@@ -101,33 +105,35 @@ export const makeClientSessionSyncProcessor = ({ schema, clientSession, runtime,
101
105
  }));
102
106
  }).pipe(Effect.forever, Effect.interruptible, Effect.tapCauseLogPretty);
103
107
  yield* FiberHandle.run(leaderPushingFiberHandle, backgroundLeaderPushing);
104
- yield* clientSession.leaderThread.mutations.pull.pipe(Stream.tap(({ payload, remaining }) => Effect.gen(function* () {
105
- // console.log('pulled payload from leader', { payload, remaining })
108
+ const getMergeCounter = () => clientSession.sqliteDb.select(sql `SELECT mergeCounter FROM ${LEADER_MERGE_COUNTER_TABLE} WHERE id = 0`)[0]?.mergeCounter ?? 0;
109
+ // NOTE We need to lazily call `.pull` as we want the cursor to be updated
110
+ yield* Stream.suspend(() => clientSession.leaderThread.mutations.pull({ cursor: getMergeCounter() })).pipe(Stream.tap(({ payload, mergeCounter: leaderMergeCounter }) => Effect.gen(function* () {
111
+ // yield* Effect.logDebug('ClientSessionSyncProcessor:pull', payload)
106
112
  if (clientSession.devtools.enabled) {
107
113
  yield* clientSession.devtools.pullLatch.await;
108
114
  }
109
- const updateResult = SyncState.updateSyncState({
115
+ const mergeResult = SyncState.merge({
110
116
  syncState: syncStateRef.current,
111
117
  payload,
112
- isLocalEvent,
118
+ isClientEvent,
113
119
  isEqualEvent: MutationEvent.isEqualEncoded,
114
120
  });
115
- if (updateResult._tag === 'unexpected-error') {
116
- return yield* Effect.fail(updateResult.cause);
121
+ if (mergeResult._tag === 'unexpected-error') {
122
+ return yield* Effect.fail(mergeResult.cause);
117
123
  }
118
- else if (updateResult._tag === 'reject') {
119
- return shouldNeverHappen('Unexpected reject in client-session-sync-processor', updateResult);
124
+ else if (mergeResult._tag === 'reject') {
125
+ return shouldNeverHappen('Unexpected reject in client-session-sync-processor', mergeResult);
120
126
  }
121
- syncStateRef.current = updateResult.newSyncState;
122
- syncStateUpdateQueue.offer(updateResult.newSyncState).pipe(Effect.runSync);
123
- if (updateResult._tag === 'rebase') {
124
- span.addEvent('pull:rebase', {
127
+ syncStateRef.current = mergeResult.newSyncState;
128
+ syncStateUpdateQueue.offer(mergeResult.newSyncState).pipe(Effect.runSync);
129
+ if (mergeResult._tag === 'rebase') {
130
+ span.addEvent('merge:pull:rebase', {
125
131
  payloadTag: payload._tag,
126
132
  payload: TRACE_VERBOSE ? JSON.stringify(payload) : undefined,
127
- newEventsCount: updateResult.newEvents.length,
128
- rollbackCount: updateResult.eventsToRollback.length,
129
- res: TRACE_VERBOSE ? JSON.stringify(updateResult) : undefined,
130
- remaining,
133
+ newEventsCount: mergeResult.newEvents.length,
134
+ rollbackCount: mergeResult.rollbackEvents.length,
135
+ res: TRACE_VERBOSE ? JSON.stringify(mergeResult) : undefined,
136
+ leaderMergeCounter,
131
137
  });
132
138
  debugInfo.rebaseCount++;
133
139
  yield* FiberHandle.clear(leaderPushingFiberHandle);
@@ -135,31 +141,32 @@ export const makeClientSessionSyncProcessor = ({ schema, clientSession, runtime,
135
141
  yield* BucketQueue.clear(leaderPushQueue);
136
142
  yield* FiberHandle.run(leaderPushingFiberHandle, backgroundLeaderPushing);
137
143
  if (LS_DEV) {
138
- Effect.logDebug('pull:rebase: rollback', updateResult.eventsToRollback.length, ...updateResult.eventsToRollback.slice(0, 10).map((_) => _.toJSON())).pipe(Effect.provide(runtime), Effect.runSync);
144
+ Effect.logDebug('merge:pull:rebase: rollback', mergeResult.rollbackEvents.length, ...mergeResult.rollbackEvents.slice(0, 10).map((_) => _.toJSON()), { leaderMergeCounter }).pipe(Effect.provide(runtime), Effect.runSync);
139
145
  }
140
- for (let i = updateResult.eventsToRollback.length - 1; i >= 0; i--) {
141
- const event = updateResult.eventsToRollback[i];
142
- if (event.meta.sessionChangeset) {
143
- rollback(event.meta.sessionChangeset);
144
- event.meta.sessionChangeset = undefined;
146
+ for (let i = mergeResult.rollbackEvents.length - 1; i >= 0; i--) {
147
+ const event = mergeResult.rollbackEvents[i];
148
+ if (event.meta.sessionChangeset._tag !== 'no-op' && event.meta.sessionChangeset._tag !== 'unset') {
149
+ rollback(event.meta.sessionChangeset.data);
150
+ event.meta.sessionChangeset = { _tag: 'unset' };
145
151
  }
146
152
  }
147
- yield* BucketQueue.offerAll(leaderPushQueue, updateResult.newSyncState.pending);
153
+ yield* BucketQueue.offerAll(leaderPushQueue, mergeResult.newSyncState.pending);
148
154
  }
149
155
  else {
150
- span.addEvent('pull:advance', {
156
+ span.addEvent('merge:pull:advance', {
151
157
  payloadTag: payload._tag,
152
158
  payload: TRACE_VERBOSE ? JSON.stringify(payload) : undefined,
153
- newEventsCount: updateResult.newEvents.length,
154
- res: TRACE_VERBOSE ? JSON.stringify(updateResult) : undefined,
155
- remaining,
159
+ newEventsCount: mergeResult.newEvents.length,
160
+ res: TRACE_VERBOSE ? JSON.stringify(mergeResult) : undefined,
161
+ leaderMergeCounter,
156
162
  });
157
163
  debugInfo.advanceCount++;
158
164
  }
159
- if (updateResult.newEvents.length === 0)
165
+ if (mergeResult.newEvents.length === 0)
160
166
  return;
161
167
  const writeTables = new Set();
162
- for (const mutationEvent of updateResult.newEvents) {
168
+ for (const mutationEvent of mergeResult.newEvents) {
169
+ // TODO apply changeset if available (will require tracking of write tables as well)
163
170
  const decodedMutationEvent = Schema.decodeSync(mutationEventSchema)(mutationEvent);
164
171
  const res = applyMutation(decodedMutationEvent, { otelContext, withChangeset: true });
165
172
  for (const table of res.writeTables) {
@@ -169,7 +176,7 @@ export const makeClientSessionSyncProcessor = ({ schema, clientSession, runtime,
169
176
  }
170
177
  refreshTables(writeTables);
171
178
  }).pipe(Effect.tapCauseLogPretty, Effect.catchAllCause((cause) => Effect.sync(() => clientSession.shutdown(cause))))), Stream.runDrain, Effect.forever, // NOTE Whenever the leader changes, we need to re-start the stream
172
- Effect.withSpan('client-session-sync-processor:pull'), Effect.tapCauseLogPretty, Effect.forkScoped);
179
+ Effect.interruptible, Effect.withSpan('client-session-sync-processor:pull'), Effect.tapCauseLogPretty, Effect.forkScoped);
173
180
  });
174
181
  return {
175
182
  push,
@@ -1 +1 @@
1
- {"version":3,"file":"ClientSessionSyncProcessor.js","sourceRoot":"","sources":["../../src/sync/ClientSessionSyncProcessor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClientSessionSyncProcessor.js","sourceRoot":"","sources":["../../src/sync/ClientSessionSyncProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAE3E,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC/G,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAG1C,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAwB,MAAM,kBAAkB,CAAA;AACnG,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAChC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,EAC7C,MAAM,EACN,aAAa,EACb,OAAO,EACP,aAAa,EACb,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,MAAM,EACN,qBAAqB,GAuBtB,EAA8B,EAAE;IAC/B,MAAM,mBAAmB,GAAG,aAAa,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAA;IAE7E,MAAM,YAAY,GAAG;QACnB,+DAA+D;QAC/D,OAAO,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC;YAC/B,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,UAAU;YAC7D,YAAY,EAAE,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,UAAU;YAChE,gGAAgG;YAChG,OAAO,EAAE,EAAE;SACZ,CAAC;KACH,CAAA;IAED,MAAM,oBAAoB,GAAG,KAAK,CAAC,SAAS,EAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACxF,MAAM,aAAa,GAAG,CAAC,oBAAmD,EAAE,EAAE,CAC5E,cAAc,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAU,CAAA;IAE1E,uGAAuG;IACvG,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,EAAiC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAE9F,MAAM,IAAI,GAAuC,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QAC1E,sBAAsB;QAEtB,IAAI,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAA;QAChD,MAAM,qBAAqB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;YAC7D,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YACpD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YAChF,WAAW,GAAG,UAAU,CAAC,EAAE,CAAA;YAC3B,OAAO,IAAI,aAAa,CAAC,eAAe,CACtC,MAAM,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;gBAC5C,QAAQ;gBACR,IAAI;gBACJ,GAAG,UAAU;gBACb,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,SAAS,EAAE,aAAa,CAAC,SAAS;aACnC,CAAC,CACH,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC;YAClC,SAAS,EAAE,YAAY,CAAC,OAAO;YAC/B,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,qBAAqB,EAAE;YACjE,aAAa;YACb,YAAY,EAAE,aAAa,CAAC,cAAc;SAC3C,CAAC,CAAA;QAEF,IAAI,WAAW,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAC5C,OAAO,iBAAiB,CAAC,mDAAmD,EAAE,WAAW,CAAC,KAAK,CAAC,CAAA;QAClG,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;YAC1B,SAAS,EAAE,qBAAqB,CAAC,MAAM;YACvC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC,CAAA;QAEF,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,iBAAiB,CAAC,yBAAyB,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;QACvE,CAAC;QAED,YAAY,CAAC,OAAO,GAAG,WAAW,CAAC,YAAY,CAAA;QAC/C,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEzE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;QACrC,KAAK,MAAM,aAAa,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YAClD,8CAA8C;YAC9C,MAAM,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,aAAa,CAAC,CAAA;YAClF,MAAM,GAAG,GAAG,aAAa,CAAC,oBAAoB,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;YACrF,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACpC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACxB,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,CAAA;QAC5D,CAAC;QAED,+GAA+G;QAC/G,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEjF,OAAO,EAAE,WAAW,EAAE,CAAA;IACxB,CAAC,CAAA;IAED,MAAM,SAAS,GAAG;QAChB,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;KACf,CAAA;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAA;IAEnE,MAAM,IAAI,GAAuC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnE,sDAAsD;QACtD,IAAI,qBAAqB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;YAC5G,MAAM,cAAc,GAAG,CAAC,KAAwB,EAAE,EAAE;gBAClD,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5C,qCAAqC;oBACrC,KAAK,CAAC,cAAc,EAAE,CAAA;gBACxB,CAAC;YACH,CAAC,CAAA;YAED,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,EAC1E,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CACpF,CAAA;QACH,CAAC;QAED,MAAM,wBAAwB,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;QAE1D,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAC5F,KAAK,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAC1D,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;gBACvC,SAAS,CAAC,WAAW,EAAE,CAAA;gBACvB,OAAO,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;YAC3C,CAAC,CAAC,CACH,CAAA;QACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAEvE,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,wBAAwB,EAAE,uBAAuB,CAAC,CAAA;QAEzE,MAAM,eAAe,GAAG,GAAG,EAAE,CAC3B,aAAa,CAAC,QAAQ,CAAC,MAAM,CAC3B,GAAG,CAAA,4BAA4B,0BAA0B,eAAe,CACzE,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,CAAC,CAAA;QAEzB,0EAA0E;QAC1E,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACxG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAC3D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,qEAAqE;YAErE,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnC,KAAK,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAA;YAC/C,CAAC;YAED,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC;gBAClC,SAAS,EAAE,YAAY,CAAC,OAAO;gBAC/B,OAAO;gBACP,aAAa;gBACb,YAAY,EAAE,aAAa,CAAC,cAAc;aAC3C,CAAC,CAAA;YAEF,IAAI,WAAW,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBAC5C,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YAC9C,CAAC;iBAAM,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACzC,OAAO,iBAAiB,CAAC,oDAAoD,EAAE,WAAW,CAAC,CAAA;YAC7F,CAAC;YAED,YAAY,CAAC,OAAO,GAAG,WAAW,CAAC,YAAY,CAAA;YAC/C,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAEzE,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAClC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE;oBACjC,UAAU,EAAE,OAAO,CAAC,IAAI;oBACxB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC5D,cAAc,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM;oBAC5C,aAAa,EAAE,WAAW,CAAC,cAAc,CAAC,MAAM;oBAChD,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC5D,kBAAkB;iBACnB,CAAC,CAAA;gBAEF,SAAS,CAAC,WAAW,EAAE,CAAA;gBAEvB,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;gBAElD,uEAAuE;gBACvE,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;gBAEzC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,wBAAwB,EAAE,uBAAuB,CAAC,CAAA;gBAEzE,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,QAAQ,CACb,6BAA6B,EAC7B,WAAW,CAAC,cAAc,CAAC,MAAM,EACjC,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EACjE,EAAE,kBAAkB,EAAE,CACvB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;gBACjD,CAAC;gBAED,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChE,MAAM,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,CAAE,CAAA;oBAC5C,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBACjG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;wBAC1C,KAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;oBACjD,CAAC;gBACH,CAAC;gBAED,KAAK,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YAChF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE;oBAClC,UAAU,EAAE,OAAO,CAAC,IAAI;oBACxB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC5D,cAAc,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM;oBAC5C,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC5D,kBAAkB;iBACnB,CAAC,CAAA;gBAEF,SAAS,CAAC,YAAY,EAAE,CAAA;YAC1B,CAAC;YAED,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAE9C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;YACrC,KAAK,MAAM,aAAa,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;gBAClD,oFAAoF;gBACpF,MAAM,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,aAAa,CAAC,CAAA;gBAClF,MAAM,GAAG,GAAG,aAAa,CAAC,oBAAoB,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;gBACrF,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;oBACpC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACxB,CAAC;gBAED,aAAa,CAAC,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,CAAA;YAC5D,CAAC;YAED,aAAa,CAAC,WAAW,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAClF,CACF,EACD,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,OAAO,EAAE,mEAAmE;QACnF,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,QAAQ,CAAC,oCAAoC,CAAC,EACrD,MAAM,CAAC,iBAAiB,EACxB,MAAM,CAAC,UAAU,CAClB,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC;YAC3B,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACvB,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAA;gBACtC,IAAI,YAAY,KAAK,SAAS;oBAAE,OAAO,iBAAiB,CAAC,iBAAiB,CAAC,CAAA;gBAC3E,OAAO,SAAS,CAAA;YAClB,CAAC,CAAC;YACF,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC;SAChD,CAAC;QACF,KAAK,EAAE;YACL,KAAK,EAAE,GAAG,EAAE,CACV,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;gBACnC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;gBAC9C,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC9D,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAA;gBAC3C,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;gBAClE,OAAO,CAAC,GAAG,CACT,gBAAgB,EAChB,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CACtC,CAAA;YACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;YAClD,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS;SAC3B;KACmC,CAAA;AACxC,CAAC,CAAA"}
@@ -16,9 +16,23 @@ export type SyncOptions = {
16
16
  backend?: SyncBackendConstructor<any>;
17
17
  /** @default { _tag: 'Skip' } */
18
18
  initialSyncOptions?: InitialSyncOptions;
19
+ /**
20
+ * What to do if there is an error during sync.
21
+ *
22
+ * Options:
23
+ * `shutdown` will stop the sync processor and cause the app to crash.
24
+ * `ignore` will log the error and let the app continue running acting as if it was offline.
25
+ *
26
+ * @default 'ignore'
27
+ * */
28
+ onSyncError?: 'shutdown' | 'ignore';
19
29
  };
20
30
  export type SyncBackendConstructor<TSyncMetadata = Schema.JsonValue> = (args: MakeBackendArgs) => Effect.Effect<SyncBackend<TSyncMetadata>, UnexpectedError, Scope.Scope | HttpClient.HttpClient>;
21
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>;
22
36
  pull: (args: Option.Option<{
23
37
  cursor: EventId.EventId;
24
38
  metadata: Option.Option<TSyncMetadata>;
@@ -35,13 +49,10 @@ export type SyncBackend<TSyncMetadata = Schema.JsonValue> = {
35
49
  * - Number of events: 1-100
36
50
  * - event ids must be in ascending order
37
51
  * */
38
- batch: ReadonlyArray<MutationEvent.AnyEncodedGlobal>) => Effect.Effect<{
39
- /** Indexes are relative to `batch` */
40
- metadata: ReadonlyArray<Option.Option<TSyncMetadata>>;
41
- }, IsOfflineError | InvalidPushError, HttpClient.HttpClient>;
52
+ batch: ReadonlyArray<MutationEvent.AnyEncodedGlobal>) => Effect.Effect<void, IsOfflineError | InvalidPushError, HttpClient.HttpClient>;
42
53
  isConnected: SubscriptionRef.SubscriptionRef<boolean>;
43
54
  /**
44
- * Metadata describing the sync backend.
55
+ * Metadata describing the sync backend. (Currently only used by devtools.)
45
56
  */
46
57
  metadata: {
47
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;CACxC,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,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;;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,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,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;AA8D/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"}
@@ -3,22 +3,24 @@ import { UnexpectedError } from '../adapter-types.js';
3
3
  import * as MutationEvent from '../schema/MutationEvent.js';
4
4
  declare const SyncState_base: Schema.Class<SyncState, {
5
5
  pending: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
6
- rollbackTail: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
6
+ /** What this node expects the next upstream node to have as its own local head */
7
7
  upstreamHead: Schema.Struct<{
8
8
  global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
9
9
  client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
10
10
  }>;
11
+ /** Equivalent to `pending.at(-1)?.id` if there are pending events */
11
12
  localHead: Schema.Struct<{
12
13
  global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
13
14
  client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
14
15
  }>;
15
16
  }, Schema.Struct.Encoded<{
16
17
  pending: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
17
- rollbackTail: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
18
+ /** What this node expects the next upstream node to have as its own local head */
18
19
  upstreamHead: Schema.Struct<{
19
20
  global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
20
21
  client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
21
22
  }>;
23
+ /** Equivalent to `pending.at(-1)?.id` if there are pending events */
22
24
  localHead: Schema.Struct<{
23
25
  global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
24
26
  client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
@@ -35,69 +37,60 @@ declare const SyncState_base: Schema.Class<SyncState, {
35
37
  readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
36
38
  readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
37
39
  };
38
- } & {
39
- readonly rollbackTail: readonly MutationEvent.EncodedWithMeta[];
40
40
  }, {}, {}>;
41
41
  /**
42
42
  * SyncState represents the current sync state of a sync node relative to an upstream node.
43
43
  * Events flow from local to upstream, with each state maintaining its own event head.
44
44
  *
45
- * Event Chain Structure:
45
+ * Example:
46
46
  * ```
47
- * +-------------------------+------------------------+
48
- * | ROLLBACK TAIL | PENDING EVENTS |
49
- * +-------------------------+------------------------+
50
- * ▼ ▼
51
- * Upstream Head Local Head
52
- * 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)
53
53
  * ```
54
54
  *
55
- * State:
56
- * - **Pending Events**: Events awaiting acknowledgment from the upstream.
57
- * - Can be confirmed or rejected by the upstream.
58
- * - Subject to rebase if rejected.
59
- * - **Rollback Tail**: Events that are kept around temporarily for potential rollback until confirmed by upstream.
55
+ * **Pending Events**: Events awaiting acknowledgment from the upstream.
56
+ * - Can be confirmed or rejected by the upstream.
57
+ * - Subject to rebase if rejected.
60
58
  *
61
59
  * Payloads:
62
60
  * - `PayloadUpstreamRebase`: Upstream has performed a rebase, so downstream must roll back to the specified event
63
61
  * and rebase the pending events on top of the new events.
64
62
  * - `PayloadUpstreamAdvance`: Upstream has advanced, so downstream must rebase the pending events on top of the new events.
65
- * - `PayloadUpstreamTrimRollbackTail`: Upstream has advanced, so downstream can trim the rollback tail.
66
63
  * - `PayloadLocalPush`: Local push payload
67
64
  *
68
65
  * Invariants:
69
66
  * 1. **Chain Continuity**: Each event must reference its immediate parent.
70
67
  * 2. **Head Ordering**: Upstream Head ≤ Local Head.
71
- * 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).
69
+ *
70
+ * A few further notes to help form an intuition:
71
+ * - The goal is to keep the pending events as small as possible (i.e. to have synced with the next upstream node)
72
+ * - There are 2 cases for rebasing:
73
+ * - The conflicting event only conflicts with the pending events -> only (some of) the pending events need to be rolled back
72
74
  *
73
- * The `updateSyncState` function processes updates to the sync state based on incoming payloads,
74
- * handling cases such as upstream rebase, advance, local push, and rollback tail trimming.
75
+ * The `merge` function processes updates to the sync state based on incoming payloads,
76
+ * handling cases such as upstream rebase, advance and local push.
75
77
  */
76
78
  export declare class SyncState extends SyncState_base {
77
79
  toJSON: () => any;
78
80
  }
79
81
  declare const PayloadUpstreamRebase_base: Schema.TaggedStruct<"upstream-rebase", {
80
- /** Rollback until this event in the rollback tail (inclusive). Starting from the end of the rollback tail. */
81
- rollbackUntil: Schema.Struct<{
82
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
83
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
84
- }>;
82
+ /** Events which need to be rolled back */
83
+ rollbackEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
84
+ /** Events which need to be applied after the rollback (already rebased by the upstream node) */
85
85
  newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
86
- /** Trim rollback tail up to this event (inclusive). */
87
- trimRollbackUntil: Schema.optional<Schema.Struct<{
88
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
89
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
90
- }>>;
91
86
  }>;
87
+ /**
88
+ * This payload propagates a rebase from the upstream node
89
+ */
92
90
  export declare class PayloadUpstreamRebase extends PayloadUpstreamRebase_base {
93
91
  }
94
92
  declare const PayloadUpstreamAdvance_base: Schema.TaggedStruct<"upstream-advance", {
95
93
  newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
96
- /** Trim rollback tail up to this event (inclusive). */
97
- trimRollbackUntil: Schema.optional<Schema.Struct<{
98
- global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
99
- client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
100
- }>>;
101
94
  }>;
102
95
  export declare class PayloadUpstreamAdvance extends PayloadUpstreamAdvance_base {
103
96
  }
@@ -109,9 +102,10 @@ export declare class PayloadLocalPush extends PayloadLocalPush_base {
109
102
  declare const Payload_base: Schema.Union<[typeof PayloadUpstreamRebase, typeof PayloadUpstreamAdvance, typeof PayloadLocalPush]>;
110
103
  export declare class Payload extends Payload_base {
111
104
  }
112
- export declare const PayloadUpstream: Schema.Union<[typeof PayloadUpstreamRebase, typeof PayloadUpstreamAdvance]>;
113
- export type PayloadUpstream = typeof PayloadUpstream.Type;
114
- 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, {
115
109
  payload: typeof Payload;
116
110
  syncState: typeof SyncState;
117
111
  }, Schema.Struct.Encoded<{
@@ -120,22 +114,11 @@ declare const UpdateContext_base: Schema.Class<UpdateContext, {
120
114
  }>, never, {
121
115
  readonly payload: {
122
116
  readonly _tag: "upstream-rebase";
123
- readonly rollbackUntil: {
124
- readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
125
- readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
126
- };
117
+ readonly rollbackEvents: readonly MutationEvent.EncodedWithMeta[];
127
118
  readonly newEvents: readonly MutationEvent.EncodedWithMeta[];
128
- readonly trimRollbackUntil?: {
129
- readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
130
- readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
131
- } | undefined;
132
119
  } | {
133
120
  readonly _tag: "upstream-advance";
134
121
  readonly newEvents: readonly MutationEvent.EncodedWithMeta[];
135
- readonly trimRollbackUntil?: {
136
- readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
137
- readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
138
- } | undefined;
139
122
  } | {
140
123
  readonly _tag: "local-push";
141
124
  readonly newEvents: readonly MutationEvent.EncodedWithMeta[];
@@ -144,21 +127,23 @@ declare const UpdateContext_base: Schema.Class<UpdateContext, {
144
127
  readonly syncState: SyncState;
145
128
  }, {}, {}>;
146
129
  /** Only used for debugging purposes */
147
- export declare class UpdateContext extends UpdateContext_base {
130
+ export declare class MergeContext extends MergeContext_base {
148
131
  toJSON: () => any;
149
132
  }
150
- declare const UpdateResultAdvance_base: Schema.Class<UpdateResultAdvance, {
133
+ declare const MergeResultAdvance_base: Schema.Class<MergeResultAdvance, {
151
134
  _tag: Schema.Literal<["advance"]>;
152
135
  newSyncState: typeof SyncState;
153
- /** Events which weren't pending before the update */
154
136
  newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
155
- updateContext: typeof UpdateContext;
137
+ /** Events which were previously pending but are now confirmed */
138
+ confirmedEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
139
+ mergeContext: typeof MergeContext;
156
140
  }, Schema.Struct.Encoded<{
157
141
  _tag: Schema.Literal<["advance"]>;
158
142
  newSyncState: typeof SyncState;
159
- /** Events which weren't pending before the update */
160
143
  newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
161
- updateContext: typeof UpdateContext;
144
+ /** Events which were previously pending but are now confirmed */
145
+ confirmedEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
146
+ mergeContext: typeof MergeContext;
162
147
  }>, never, {
163
148
  readonly _tag: "advance";
164
149
  } & {
@@ -166,47 +151,49 @@ declare const UpdateResultAdvance_base: Schema.Class<UpdateResultAdvance, {
166
151
  } & {
167
152
  readonly newSyncState: SyncState;
168
153
  } & {
169
- readonly updateContext: UpdateContext;
154
+ readonly mergeContext: MergeContext;
155
+ } & {
156
+ readonly confirmedEvents: readonly MutationEvent.EncodedWithMeta[];
170
157
  }, {}, {}>;
171
- export declare class UpdateResultAdvance extends UpdateResultAdvance_base {
158
+ export declare class MergeResultAdvance extends MergeResultAdvance_base {
172
159
  toJSON: () => any;
173
160
  }
174
- declare const UpdateResultRebase_base: Schema.Class<UpdateResultRebase, {
161
+ declare const MergeResultRebase_base: Schema.Class<MergeResultRebase, {
175
162
  _tag: Schema.Literal<["rebase"]>;
176
163
  newSyncState: typeof SyncState;
177
- /** Events which weren't pending before the update */
178
164
  newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
179
- eventsToRollback: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
180
- updateContext: typeof UpdateContext;
165
+ /** Events which need to be rolled back */
166
+ rollbackEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
167
+ mergeContext: typeof MergeContext;
181
168
  }, Schema.Struct.Encoded<{
182
169
  _tag: Schema.Literal<["rebase"]>;
183
170
  newSyncState: typeof SyncState;
184
- /** Events which weren't pending before the update */
185
171
  newEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
186
- eventsToRollback: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
187
- updateContext: typeof UpdateContext;
172
+ /** Events which need to be rolled back */
173
+ rollbackEvents: Schema.Array$<typeof MutationEvent.EncodedWithMeta>;
174
+ mergeContext: typeof MergeContext;
188
175
  }>, never, {
189
176
  readonly _tag: "rebase";
177
+ } & {
178
+ readonly rollbackEvents: readonly MutationEvent.EncodedWithMeta[];
190
179
  } & {
191
180
  readonly newEvents: readonly MutationEvent.EncodedWithMeta[];
192
181
  } & {
193
182
  readonly newSyncState: SyncState;
194
183
  } & {
195
- readonly updateContext: UpdateContext;
196
- } & {
197
- readonly eventsToRollback: readonly MutationEvent.EncodedWithMeta[];
184
+ readonly mergeContext: MergeContext;
198
185
  }, {}, {}>;
199
- export declare class UpdateResultRebase extends UpdateResultRebase_base {
186
+ export declare class MergeResultRebase extends MergeResultRebase_base {
200
187
  toJSON: () => any;
201
188
  }
202
- declare const UpdateResultReject_base: Schema.Class<UpdateResultReject, {
189
+ declare const MergeResultReject_base: Schema.Class<MergeResultReject, {
203
190
  _tag: Schema.Literal<["reject"]>;
204
191
  /** The minimum id that the new events must have */
205
192
  expectedMinimumId: Schema.Struct<{
206
193
  global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
207
194
  client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
208
195
  }>;
209
- updateContext: typeof UpdateContext;
196
+ mergeContext: typeof MergeContext;
210
197
  }, Schema.Struct.Encoded<{
211
198
  _tag: Schema.Literal<["reject"]>;
212
199
  /** The minimum id that the new events must have */
@@ -214,21 +201,21 @@ declare const UpdateResultReject_base: Schema.Class<UpdateResultReject, {
214
201
  global: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventId">, number, never>;
215
202
  client: Schema.BrandSchema<number & import("effect/Brand").Brand<"ClientEventId">, number, never>;
216
203
  }>;
217
- updateContext: typeof UpdateContext;
204
+ mergeContext: typeof MergeContext;
218
205
  }>, never, {
219
206
  readonly _tag: "reject";
220
207
  } & {
221
- readonly updateContext: UpdateContext;
208
+ readonly mergeContext: MergeContext;
222
209
  } & {
223
210
  readonly expectedMinimumId: {
224
211
  readonly global: number & import("effect/Brand").Brand<"GlobalEventId">;
225
212
  readonly client: number & import("effect/Brand").Brand<"ClientEventId">;
226
213
  };
227
214
  }, {}, {}>;
228
- export declare class UpdateResultReject extends UpdateResultReject_base {
215
+ export declare class MergeResultReject extends MergeResultReject_base {
229
216
  toJSON: () => any;
230
217
  }
231
- declare const UpdateResultUnexpectedError_base: Schema.Class<UpdateResultUnexpectedError, {
218
+ declare const MergeResultUnexpectedError_base: Schema.Class<MergeResultUnexpectedError, {
232
219
  _tag: Schema.Literal<["unexpected-error"]>;
233
220
  cause: typeof UnexpectedError;
234
221
  }, Schema.Struct.Encoded<{
@@ -239,18 +226,29 @@ declare const UpdateResultUnexpectedError_base: Schema.Class<UpdateResultUnexpec
239
226
  } & {
240
227
  readonly cause: UnexpectedError;
241
228
  }, {}, {}>;
242
- export declare class UpdateResultUnexpectedError extends UpdateResultUnexpectedError_base {
229
+ export declare class MergeResultUnexpectedError extends MergeResultUnexpectedError_base {
243
230
  }
244
- declare const UpdateResult_base: Schema.Union<[typeof UpdateResultAdvance, typeof UpdateResultRebase, typeof UpdateResultReject, typeof UpdateResultUnexpectedError]>;
245
- export declare class UpdateResult extends UpdateResult_base {
231
+ declare const MergeResult_base: Schema.Union<[typeof MergeResultAdvance, typeof MergeResultRebase, typeof MergeResultReject, typeof MergeResultUnexpectedError]>;
232
+ export declare class MergeResult extends MergeResult_base {
246
233
  }
247
- export declare const updateSyncState: ({ syncState, payload, isLocalEvent, isEqualEvent, ignoreLocalEvents, }: {
234
+ export declare const merge: ({ syncState, payload, isClientEvent, isEqualEvent, ignoreClientEvents, }: {
248
235
  syncState: SyncState;
249
236
  payload: typeof Payload.Type;
250
- isLocalEvent: (event: MutationEvent.EncodedWithMeta) => boolean;
237
+ isClientEvent: (event: MutationEvent.EncodedWithMeta) => boolean;
238
+ isEqualEvent: (a: MutationEvent.EncodedWithMeta, b: MutationEvent.EncodedWithMeta) => boolean;
239
+ /** This is used in the leader which should ignore client events when receiving an upstream-advance payload */
240
+ ignoreClientEvents?: boolean;
241
+ }) => typeof MergeResult.Type;
242
+ /**
243
+ * Gets the index relative to `existingEvents` where the divergence point is
244
+ * by comparing each event in `existingEvents` to the corresponding event in `incomingEvents`
245
+ */
246
+ export declare const findDivergencePoint: ({ existingEvents, incomingEvents, isEqualEvent, isClientEvent, ignoreClientEvents, }: {
247
+ existingEvents: ReadonlyArray<MutationEvent.EncodedWithMeta>;
248
+ incomingEvents: ReadonlyArray<MutationEvent.EncodedWithMeta>;
251
249
  isEqualEvent: (a: MutationEvent.EncodedWithMeta, b: MutationEvent.EncodedWithMeta) => boolean;
252
- /** This is used in the leader which should ignore local events when receiving an upstream-advance payload */
253
- ignoreLocalEvents?: boolean;
254
- }) => typeof UpdateResult.Type;
250
+ isClientEvent: (event: MutationEvent.EncodedWithMeta) => boolean;
251
+ ignoreClientEvents: boolean;
252
+ }) => number;
255
253
  export {};
256
254
  //# sourceMappingURL=syncstate.d.ts.map