@livestore/common 0.3.0-dev.2 → 0.3.0-dev.22
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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/fixture.d.ts +21 -21
- package/dist/adapter-types.d.ts +97 -53
- package/dist/adapter-types.d.ts.map +1 -1
- package/dist/adapter-types.js +17 -0
- package/dist/adapter-types.js.map +1 -1
- package/dist/bounded-collections.d.ts +1 -1
- package/dist/bounded-collections.d.ts.map +1 -1
- package/dist/debug-info.d.ts +1 -1
- package/dist/debug-info.d.ts.map +1 -1
- package/dist/derived-mutations.d.ts +5 -5
- package/dist/derived-mutations.d.ts.map +1 -1
- package/dist/derived-mutations.js +3 -3
- package/dist/derived-mutations.js.map +1 -1
- package/dist/derived-mutations.test.js.map +1 -1
- package/dist/devtools/devtools-messages-client-session.d.ts +389 -0
- package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -0
- package/dist/devtools/devtools-messages-client-session.js +96 -0
- package/dist/devtools/devtools-messages-client-session.js.map +1 -0
- package/dist/devtools/devtools-messages-common.d.ts +61 -0
- package/dist/devtools/devtools-messages-common.d.ts.map +1 -0
- package/dist/devtools/devtools-messages-common.js +54 -0
- package/dist/devtools/devtools-messages-common.js.map +1 -0
- package/dist/devtools/devtools-messages-leader.d.ts +393 -0
- package/dist/devtools/devtools-messages-leader.d.ts.map +1 -0
- package/dist/devtools/devtools-messages-leader.js +148 -0
- package/dist/devtools/devtools-messages-leader.js.map +1 -0
- package/dist/devtools/devtools-messages.d.ts +3 -592
- package/dist/devtools/devtools-messages.d.ts.map +1 -1
- package/dist/devtools/devtools-messages.js +3 -171
- package/dist/devtools/devtools-messages.js.map +1 -1
- package/dist/devtools/devtools-sessioninfo.d.ts +28 -0
- package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -0
- package/dist/devtools/devtools-sessioninfo.js +34 -0
- package/dist/devtools/devtools-sessioninfo.js.map +1 -0
- package/dist/devtools/mod.d.ts +39 -0
- package/dist/devtools/mod.d.ts.map +1 -0
- package/dist/devtools/mod.js +27 -0
- package/dist/devtools/mod.js.map +1 -0
- package/dist/index.d.ts +2 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/init-singleton-tables.d.ts +2 -2
- package/dist/init-singleton-tables.d.ts.map +1 -1
- package/dist/init-singleton-tables.js.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +39 -0
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -0
- package/dist/leader-thread/LeaderSyncProcessor.js +527 -0
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -0
- package/dist/leader-thread/apply-mutation.d.ts +5 -2
- package/dist/leader-thread/apply-mutation.d.ts.map +1 -1
- package/dist/leader-thread/apply-mutation.js +55 -35
- package/dist/leader-thread/apply-mutation.js.map +1 -1
- package/dist/leader-thread/connection.d.ts +34 -6
- package/dist/leader-thread/connection.d.ts.map +1 -1
- package/dist/leader-thread/connection.js +22 -7
- package/dist/leader-thread/connection.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.js +147 -124
- package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +12 -11
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +55 -18
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/mutationlog.d.ts +6 -19
- package/dist/leader-thread/mutationlog.d.ts.map +1 -1
- package/dist/leader-thread/mutationlog.js +12 -9
- package/dist/leader-thread/mutationlog.js.map +1 -1
- package/dist/leader-thread/pull-queue-set.d.ts +3 -3
- package/dist/leader-thread/pull-queue-set.d.ts.map +1 -1
- package/dist/leader-thread/pull-queue-set.js +9 -0
- package/dist/leader-thread/pull-queue-set.js.map +1 -1
- package/dist/leader-thread/recreate-db.d.ts +4 -2
- package/dist/leader-thread/recreate-db.d.ts.map +1 -1
- package/dist/leader-thread/recreate-db.js +32 -21
- package/dist/leader-thread/recreate-db.js.map +1 -1
- package/dist/leader-thread/shutdown-channel.d.ts +2 -5
- package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
- package/dist/leader-thread/shutdown-channel.js +2 -4
- package/dist/leader-thread/shutdown-channel.js.map +1 -1
- package/dist/leader-thread/types.d.ts +58 -26
- package/dist/leader-thread/types.d.ts.map +1 -1
- package/dist/leader-thread/types.js +1 -3
- package/dist/leader-thread/types.js.map +1 -1
- package/dist/mutation.d.ts +9 -2
- package/dist/mutation.d.ts.map +1 -1
- package/dist/mutation.js +5 -5
- package/dist/mutation.js.map +1 -1
- package/dist/otel.d.ts +2 -0
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +5 -0
- package/dist/otel.js.map +1 -1
- package/dist/query-builder/api.d.ts +3 -3
- package/dist/query-builder/api.d.ts.map +1 -1
- package/dist/query-builder/impl.d.ts +4 -4
- package/dist/query-builder/impl.d.ts.map +1 -1
- package/dist/query-builder/impl.js.map +1 -1
- package/dist/query-builder/impl.test.js +16 -1
- package/dist/query-builder/impl.test.js.map +1 -1
- package/dist/query-info.d.ts +3 -3
- package/dist/query-info.d.ts.map +1 -1
- package/dist/rehydrate-from-mutationlog.d.ts +5 -5
- package/dist/rehydrate-from-mutationlog.d.ts.map +1 -1
- package/dist/rehydrate-from-mutationlog.js +23 -27
- package/dist/rehydrate-from-mutationlog.js.map +1 -1
- package/dist/schema/EventId.d.ts +27 -16
- package/dist/schema/EventId.d.ts.map +1 -1
- package/dist/schema/EventId.js +36 -11
- package/dist/schema/EventId.js.map +1 -1
- package/dist/schema/EventId.test.d.ts +2 -0
- package/dist/schema/EventId.test.d.ts.map +1 -0
- package/dist/schema/EventId.test.js +11 -0
- package/dist/schema/EventId.test.js.map +1 -0
- package/dist/schema/MutationEvent.d.ts +76 -82
- package/dist/schema/MutationEvent.d.ts.map +1 -1
- package/dist/schema/MutationEvent.js +53 -20
- package/dist/schema/MutationEvent.js.map +1 -1
- package/dist/schema/db-schema/ast/sqlite.d.ts +69 -0
- package/dist/schema/db-schema/ast/sqlite.d.ts.map +1 -0
- package/dist/schema/db-schema/ast/sqlite.js +71 -0
- package/dist/schema/db-schema/ast/sqlite.js.map +1 -0
- package/dist/schema/db-schema/ast/validate.d.ts +3 -0
- package/dist/schema/db-schema/ast/validate.d.ts.map +1 -0
- package/dist/schema/db-schema/ast/validate.js +12 -0
- package/dist/schema/db-schema/ast/validate.js.map +1 -0
- package/dist/schema/db-schema/dsl/field-defs.d.ts +90 -0
- package/dist/schema/db-schema/dsl/field-defs.d.ts.map +1 -0
- package/dist/schema/db-schema/dsl/field-defs.js +87 -0
- package/dist/schema/db-schema/dsl/field-defs.js.map +1 -0
- package/dist/schema/db-schema/dsl/field-defs.test.d.ts +2 -0
- package/dist/schema/db-schema/dsl/field-defs.test.d.ts.map +1 -0
- package/dist/schema/db-schema/dsl/field-defs.test.js +29 -0
- package/dist/schema/db-schema/dsl/field-defs.test.js.map +1 -0
- package/dist/schema/db-schema/dsl/mod.d.ts +88 -0
- package/dist/schema/db-schema/dsl/mod.d.ts.map +1 -0
- package/dist/schema/db-schema/dsl/mod.js +35 -0
- package/dist/schema/db-schema/dsl/mod.js.map +1 -0
- package/dist/schema/db-schema/hash.d.ts +2 -0
- package/dist/schema/db-schema/hash.d.ts.map +1 -0
- package/dist/schema/db-schema/hash.js +14 -0
- package/dist/schema/db-schema/hash.js.map +1 -0
- package/dist/schema/db-schema/mod.d.ts +3 -0
- package/dist/schema/db-schema/mod.d.ts.map +1 -0
- package/dist/schema/db-schema/mod.js +3 -0
- package/dist/schema/db-schema/mod.js.map +1 -0
- package/dist/schema/mod.d.ts +1 -0
- package/dist/schema/mod.d.ts.map +1 -1
- package/dist/schema/mod.js +1 -0
- package/dist/schema/mod.js.map +1 -1
- package/dist/schema/mutations.d.ts +8 -9
- package/dist/schema/mutations.d.ts.map +1 -1
- package/dist/schema/mutations.js +2 -2
- package/dist/schema/mutations.js.map +1 -1
- package/dist/schema/schema-helpers.d.ts.map +1 -1
- package/dist/schema/schema-helpers.js +1 -1
- package/dist/schema/schema-helpers.js.map +1 -1
- package/dist/schema/schema.d.ts +5 -2
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +20 -9
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/system-tables.d.ts +65 -47
- package/dist/schema/system-tables.d.ts.map +1 -1
- package/dist/schema/system-tables.js +24 -13
- package/dist/schema/system-tables.js.map +1 -1
- package/dist/schema/table-def.d.ts +18 -24
- package/dist/schema/table-def.d.ts.map +1 -1
- package/dist/schema/table-def.js +3 -4
- package/dist/schema/table-def.js.map +1 -1
- package/dist/schema-management/common.d.ts +3 -3
- package/dist/schema-management/common.d.ts.map +1 -1
- package/dist/schema-management/common.js.map +1 -1
- package/dist/schema-management/migrations.d.ts +6 -6
- package/dist/schema-management/migrations.d.ts.map +1 -1
- package/dist/schema-management/migrations.js +13 -8
- package/dist/schema-management/migrations.js.map +1 -1
- package/dist/schema-management/validate-mutation-defs.d.ts.map +1 -1
- package/dist/schema-management/validate-mutation-defs.js +2 -2
- package/dist/schema-management/validate-mutation-defs.js.map +1 -1
- package/dist/sql-queries/misc.d.ts.map +1 -1
- package/dist/sql-queries/sql-queries.d.ts +1 -1
- package/dist/sql-queries/sql-queries.d.ts.map +1 -1
- package/dist/sql-queries/sql-queries.js.map +1 -1
- package/dist/sql-queries/sql-query-builder.d.ts +1 -1
- package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
- package/dist/sql-queries/sql-query-builder.js.map +1 -1
- package/dist/sql-queries/types.d.ts +2 -1
- package/dist/sql-queries/types.d.ts.map +1 -1
- package/dist/sql-queries/types.js.map +1 -1
- package/dist/sync/{client-session-sync-processor.d.ts → ClientSessionSyncProcessor.d.ts} +25 -14
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -0
- package/dist/sync/ClientSessionSyncProcessor.js +199 -0
- package/dist/sync/ClientSessionSyncProcessor.js.map +1 -0
- package/dist/sync/index.d.ts +1 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +1 -1
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/next/compact-events.d.ts.map +1 -1
- package/dist/sync/next/facts.d.ts.map +1 -1
- package/dist/sync/next/facts.js +1 -1
- package/dist/sync/next/facts.js.map +1 -1
- package/dist/sync/next/history-dag-common.d.ts +3 -4
- package/dist/sync/next/history-dag-common.d.ts.map +1 -1
- package/dist/sync/next/history-dag-common.js +3 -1
- package/dist/sync/next/history-dag-common.js.map +1 -1
- package/dist/sync/next/history-dag.d.ts.map +1 -1
- package/dist/sync/next/history-dag.js +1 -1
- package/dist/sync/next/history-dag.js.map +1 -1
- package/dist/sync/next/rebase-events.d.ts +6 -4
- package/dist/sync/next/rebase-events.d.ts.map +1 -1
- package/dist/sync/next/rebase-events.js +6 -3
- package/dist/sync/next/rebase-events.js.map +1 -1
- package/dist/sync/next/test/compact-events.calculator.test.js +12 -12
- package/dist/sync/next/test/compact-events.calculator.test.js.map +1 -1
- package/dist/sync/next/test/compact-events.test.js +43 -43
- package/dist/sync/next/test/compact-events.test.js.map +1 -1
- package/dist/sync/next/test/mutation-fixtures.d.ts +4 -4
- package/dist/sync/next/test/mutation-fixtures.d.ts.map +1 -1
- package/dist/sync/next/test/mutation-fixtures.js +12 -16
- package/dist/sync/next/test/mutation-fixtures.js.map +1 -1
- package/dist/sync/sync.d.ts +31 -16
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/sync.js +7 -3
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/syncstate.d.ts +177 -44
- package/dist/sync/syncstate.d.ts.map +1 -1
- package/dist/sync/syncstate.js +188 -56
- package/dist/sync/syncstate.js.map +1 -1
- package/dist/sync/syncstate.test.js +162 -92
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/sync/validate-push-payload.d.ts +2 -2
- package/dist/sync/validate-push-payload.d.ts.map +1 -1
- package/dist/sync/validate-push-payload.js +2 -2
- package/dist/sync/validate-push-payload.js.map +1 -1
- package/dist/util.d.ts +2 -2
- package/dist/util.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +6 -6
- package/src/adapter-types.ts +80 -56
- package/src/derived-mutations.test.ts +1 -1
- package/src/derived-mutations.ts +13 -9
- package/src/devtools/devtools-messages-client-session.ts +141 -0
- package/src/devtools/devtools-messages-common.ts +106 -0
- package/src/devtools/devtools-messages-leader.ts +192 -0
- package/src/devtools/devtools-messages.ts +3 -243
- package/src/devtools/devtools-sessioninfo.ts +99 -0
- package/src/devtools/mod.ts +36 -0
- package/src/index.ts +2 -8
- package/src/init-singleton-tables.ts +2 -2
- package/src/leader-thread/LeaderSyncProcessor.ts +833 -0
- package/src/leader-thread/apply-mutation.ts +87 -43
- package/src/leader-thread/connection.ts +54 -9
- package/src/leader-thread/leader-worker-devtools.ts +199 -174
- package/src/leader-thread/make-leader-thread-layer.ts +89 -35
- package/src/leader-thread/mutationlog.ts +20 -14
- package/src/leader-thread/pull-queue-set.ts +10 -1
- package/src/leader-thread/recreate-db.ts +38 -25
- package/src/leader-thread/shutdown-channel.ts +2 -4
- package/src/leader-thread/types.ts +68 -34
- package/src/mutation.ts +17 -7
- package/src/otel.ts +8 -0
- package/src/query-builder/api.ts +4 -4
- package/src/query-builder/impl.test.ts +22 -1
- package/src/query-builder/impl.ts +2 -2
- package/src/query-info.ts +3 -3
- package/src/rehydrate-from-mutationlog.ts +28 -34
- package/src/schema/EventId.test.ts +12 -0
- package/src/schema/EventId.ts +49 -15
- package/src/schema/MutationEvent.ts +78 -31
- package/src/schema/db-schema/ast/sqlite.ts +142 -0
- package/src/schema/db-schema/ast/validate.ts +13 -0
- package/src/schema/db-schema/dsl/__snapshots__/field-defs.test.ts.snap +206 -0
- package/src/schema/db-schema/dsl/field-defs.test.ts +35 -0
- package/src/schema/db-schema/dsl/field-defs.ts +242 -0
- package/src/schema/db-schema/dsl/mod.ts +195 -0
- package/src/schema/db-schema/hash.ts +14 -0
- package/src/schema/db-schema/mod.ts +2 -0
- package/src/schema/mod.ts +1 -0
- package/src/schema/mutations.ts +10 -20
- package/src/schema/schema-helpers.ts +1 -1
- package/src/schema/schema.ts +22 -10
- package/src/schema/system-tables.ts +24 -13
- package/src/schema/table-def.ts +17 -17
- package/src/schema-management/common.ts +3 -3
- package/src/schema-management/migrations.ts +19 -15
- package/src/schema-management/validate-mutation-defs.ts +2 -2
- package/src/sql-queries/sql-queries.ts +1 -1
- package/src/sql-queries/sql-query-builder.ts +1 -2
- package/src/sql-queries/types.ts +3 -1
- package/src/sync/ClientSessionSyncProcessor.ts +313 -0
- package/src/sync/index.ts +1 -1
- package/src/sync/next/facts.ts +1 -1
- package/src/sync/next/history-dag-common.ts +5 -1
- package/src/sync/next/history-dag.ts +1 -1
- package/src/sync/next/rebase-events.ts +13 -7
- package/src/sync/next/test/compact-events.calculator.test.ts +12 -12
- package/src/sync/next/test/compact-events.test.ts +43 -43
- package/src/sync/next/test/mutation-fixtures.ts +16 -19
- package/src/sync/sync.ts +26 -10
- package/src/sync/syncstate.test.ts +178 -98
- package/src/sync/syncstate.ts +170 -83
- package/src/sync/validate-push-payload.ts +7 -4
- package/src/version.ts +1 -1
- package/tmp/pack.tgz +0 -0
- package/tsconfig.json +1 -1
- package/dist/devtools/devtools-bridge.d.ts +0 -12
- package/dist/devtools/devtools-bridge.d.ts.map +0 -1
- package/dist/devtools/devtools-bridge.js +0 -2
- package/dist/devtools/devtools-bridge.js.map +0 -1
- package/dist/devtools/index.d.ts +0 -42
- package/dist/devtools/index.d.ts.map +0 -1
- package/dist/devtools/index.js +0 -48
- package/dist/devtools/index.js.map +0 -1
- package/dist/leader-thread/leader-sync-processor.d.ts +0 -47
- package/dist/leader-thread/leader-sync-processor.d.ts.map +0 -1
- package/dist/leader-thread/leader-sync-processor.js +0 -422
- package/dist/leader-thread/leader-sync-processor.js.map +0 -1
- package/dist/sync/client-session-sync-processor.d.ts.map +0 -1
- package/dist/sync/client-session-sync-processor.js +0 -131
- package/dist/sync/client-session-sync-processor.js.map +0 -1
- package/src/devtools/devtools-bridge.ts +0 -13
- package/src/devtools/index.ts +0 -48
- package/src/leader-thread/leader-sync-processor.ts +0 -666
- package/src/sync/client-session-sync-processor.ts +0 -207
@@ -7,17 +7,19 @@ import * as SyncState from './syncstate.js'
|
|
7
7
|
|
8
8
|
class TestEvent extends MutationEvent.EncodedWithMeta {
|
9
9
|
constructor(
|
10
|
-
|
11
|
-
|
10
|
+
id: EventId.EventId | typeof EventId.EventId.Encoded,
|
11
|
+
parentId: EventId.EventId,
|
12
12
|
public readonly payload: string,
|
13
13
|
public readonly isLocal: boolean,
|
14
14
|
) {
|
15
15
|
super({
|
16
|
-
id,
|
17
|
-
parentId,
|
16
|
+
id: EventId.make(id),
|
17
|
+
parentId: EventId.make(parentId),
|
18
18
|
mutation: 'a',
|
19
19
|
args: payload,
|
20
|
-
|
20
|
+
|
21
|
+
clientId: 'static-local-id',
|
22
|
+
sessionId: undefined,
|
21
23
|
})
|
22
24
|
}
|
23
25
|
|
@@ -26,17 +28,17 @@ class TestEvent extends MutationEvent.EncodedWithMeta {
|
|
26
28
|
}
|
27
29
|
|
28
30
|
// Only used for Vitest printing
|
29
|
-
// toJSON = () => `(${this.id.global},${this.id.
|
31
|
+
// toJSON = () => `(${this.id.global},${this.id.client},${this.payload})`
|
30
32
|
// toString = () => this.toJSON()
|
31
33
|
}
|
32
34
|
|
33
|
-
const e_r_1 = new TestEvent({ global: -1,
|
34
|
-
const e_0_0 = new TestEvent({ global: 0,
|
35
|
-
const e_0_1 = new TestEvent({ global: 0,
|
36
|
-
const e_0_2 = new TestEvent({ global: 0,
|
37
|
-
const e_0_3 = new TestEvent({ global: 0,
|
38
|
-
const e_1_0 = new TestEvent({ global: 1,
|
39
|
-
const e_1_1 = new TestEvent({ global: 1,
|
35
|
+
const e_r_1 = new TestEvent({ global: -1, client: 1 }, EventId.ROOT, 'a', true)
|
36
|
+
const e_0_0 = new TestEvent({ global: 0, client: 0 }, EventId.ROOT, 'a', false)
|
37
|
+
const e_0_1 = new TestEvent({ global: 0, client: 1 }, e_0_0.id, 'a', true)
|
38
|
+
const e_0_2 = new TestEvent({ global: 0, client: 2 }, e_0_1.id, 'a', true)
|
39
|
+
const e_0_3 = new TestEvent({ global: 0, client: 3 }, e_0_2.id, 'a', true)
|
40
|
+
const e_1_0 = new TestEvent({ global: 1, client: 0 }, e_0_0.id, 'a', false)
|
41
|
+
const e_1_1 = new TestEvent({ global: 1, client: 1 }, e_1_0.id, 'a', true)
|
40
42
|
|
41
43
|
const isEqualEvent = MutationEvent.isEqualEncoded
|
42
44
|
|
@@ -58,12 +60,12 @@ describe('syncstate', () => {
|
|
58
60
|
'upstream-rebase (trimRollbackUntil: $trimRollbackUntil)',
|
59
61
|
({ trimRollbackUntil }) => {
|
60
62
|
it('should rollback until start', () => {
|
61
|
-
const syncState = {
|
63
|
+
const syncState = new SyncState.SyncState({
|
62
64
|
pending: [e_1_0],
|
63
65
|
rollbackTail: [e_0_0, e_0_1],
|
64
66
|
upstreamHead: EventId.ROOT,
|
65
67
|
localHead: e_1_0.id,
|
66
|
-
}
|
68
|
+
})
|
67
69
|
const e_0_0_e_1_0 = e_0_0.rebase_(e_1_0.id)
|
68
70
|
const e_0_1_e_1_1 = e_0_1.rebase_(e_0_0_e_1_0.id)
|
69
71
|
const result = run({
|
@@ -83,19 +85,19 @@ describe('syncstate', () => {
|
|
83
85
|
} else {
|
84
86
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0_e_1_0, e_0_1_e_1_1])
|
85
87
|
}
|
86
|
-
expect(result.newSyncState.upstreamHead).
|
88
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_0_1_e_1_1.id)
|
87
89
|
expect(result.newSyncState.localHead).toMatchObject(e_1_0_e_2_0.id)
|
88
|
-
expectEventArraysEqual(result.newEvents, [e_0_0_e_1_0, e_0_1_e_1_1])
|
90
|
+
expectEventArraysEqual(result.newEvents, [e_0_0_e_1_0, e_0_1_e_1_1, e_1_0_e_2_0])
|
89
91
|
expectEventArraysEqual(result.eventsToRollback, [e_0_0, e_0_1, e_1_0])
|
90
92
|
})
|
91
93
|
|
92
94
|
it('should rollback only to specified point', () => {
|
93
|
-
const syncState = {
|
95
|
+
const syncState = new SyncState.SyncState({
|
94
96
|
pending: [e_1_0],
|
95
97
|
rollbackTail: [e_0_0, e_0_1],
|
96
98
|
upstreamHead: EventId.ROOT,
|
97
99
|
localHead: e_1_0.id,
|
98
|
-
}
|
100
|
+
})
|
99
101
|
const e_0_1_e_1_0 = e_0_1.rebase_(e_0_0.id)
|
100
102
|
const result = run({
|
101
103
|
syncState,
|
@@ -114,14 +116,19 @@ describe('syncstate', () => {
|
|
114
116
|
} else {
|
115
117
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_1_e_1_0])
|
116
118
|
}
|
117
|
-
expect(result.newSyncState.upstreamHead).
|
119
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_0_1_e_1_0.id)
|
118
120
|
expect(result.newSyncState.localHead).toMatchObject(e_1_0_e_2_0.id)
|
119
|
-
expectEventArraysEqual(result.newEvents, [e_0_1_e_1_0])
|
121
|
+
expectEventArraysEqual(result.newEvents, [e_0_1_e_1_0, e_1_0_e_2_0])
|
120
122
|
expectEventArraysEqual(result.eventsToRollback, [e_0_1, e_1_0])
|
121
123
|
})
|
122
124
|
|
123
125
|
it('should work for empty pending', () => {
|
124
|
-
const syncState =
|
126
|
+
const syncState = new SyncState.SyncState({
|
127
|
+
pending: [],
|
128
|
+
rollbackTail: [e_0_0],
|
129
|
+
upstreamHead: EventId.ROOT,
|
130
|
+
localHead: e_0_0.id,
|
131
|
+
})
|
125
132
|
const result = run({
|
126
133
|
syncState,
|
127
134
|
payload: { _tag: 'upstream-rebase', rollbackUntil: e_0_0.id, newEvents: [e_1_0] },
|
@@ -129,23 +136,32 @@ describe('syncstate', () => {
|
|
129
136
|
expectRebase(result)
|
130
137
|
expectEventArraysEqual(result.newSyncState.pending, [])
|
131
138
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_1_0])
|
132
|
-
expect(result.newSyncState.upstreamHead).
|
139
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id)
|
133
140
|
expect(result.newSyncState.localHead).toMatchObject(e_1_0.id)
|
134
|
-
expect(result.newEvents).
|
141
|
+
expect(result.newEvents).toStrictEqual([e_1_0])
|
135
142
|
})
|
136
143
|
|
137
144
|
it('should fail for empty rollback tail', () => {
|
138
|
-
const syncState =
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
+
const syncState = new SyncState.SyncState({
|
146
|
+
pending: [],
|
147
|
+
rollbackTail: [],
|
148
|
+
upstreamHead: EventId.ROOT,
|
149
|
+
localHead: e_0_0.id,
|
150
|
+
})
|
151
|
+
const result = run({
|
152
|
+
syncState,
|
153
|
+
payload: { _tag: 'upstream-rebase', rollbackUntil: e_0_0.id, newEvents: [e_1_0] },
|
154
|
+
})
|
155
|
+
expect(result).toMatchObject({ _tag: 'unexpected-error' })
|
145
156
|
})
|
146
157
|
|
147
158
|
it('should work for empty incoming', () => {
|
148
|
-
const syncState =
|
159
|
+
const syncState = new SyncState.SyncState({
|
160
|
+
pending: [],
|
161
|
+
rollbackTail: [e_0_0],
|
162
|
+
upstreamHead: EventId.ROOT,
|
163
|
+
localHead: e_0_0.id,
|
164
|
+
})
|
149
165
|
const result = run({
|
150
166
|
syncState,
|
151
167
|
payload: { _tag: 'upstream-rebase', rollbackUntil: e_0_0.id, newEvents: [] },
|
@@ -153,67 +169,94 @@ describe('syncstate', () => {
|
|
153
169
|
expectRebase(result)
|
154
170
|
expectEventArraysEqual(result.newSyncState.pending, [])
|
155
171
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [])
|
156
|
-
expect(result.newSyncState.upstreamHead).
|
172
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(EventId.ROOT)
|
157
173
|
expect(result.newSyncState.localHead).toMatchObject(EventId.ROOT)
|
158
|
-
expect(result.newEvents).
|
174
|
+
expect(result.newEvents).toStrictEqual([])
|
159
175
|
})
|
160
176
|
},
|
161
177
|
)
|
162
178
|
|
163
179
|
describe('upstream-advance: advance', () => {
|
164
|
-
it('should throw error if newEvents are not sorted in ascending order by eventId (
|
165
|
-
const syncState =
|
166
|
-
|
180
|
+
it('should throw error if newEvents are not sorted in ascending order by eventId (client)', () => {
|
181
|
+
const syncState = new SyncState.SyncState({
|
182
|
+
pending: [e_0_0],
|
183
|
+
rollbackTail: [],
|
184
|
+
upstreamHead: EventId.ROOT,
|
185
|
+
localHead: e_0_0.id,
|
186
|
+
})
|
187
|
+
const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_0] } })
|
188
|
+
expect(result).toMatchObject({ _tag: 'unexpected-error' })
|
167
189
|
})
|
168
190
|
|
169
191
|
it('should throw error if newEvents are not sorted in ascending order by eventId (global)', () => {
|
170
|
-
const syncState =
|
171
|
-
|
192
|
+
const syncState = new SyncState.SyncState({
|
193
|
+
pending: [e_0_0],
|
194
|
+
rollbackTail: [],
|
195
|
+
upstreamHead: EventId.ROOT,
|
196
|
+
localHead: e_0_0.id,
|
197
|
+
})
|
198
|
+
const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0, e_0_0] } })
|
199
|
+
expect(result).toMatchObject({ _tag: 'unexpected-error' })
|
172
200
|
})
|
173
201
|
|
174
202
|
it('should acknowledge pending event when receiving matching event', () => {
|
175
|
-
const syncState =
|
203
|
+
const syncState = new SyncState.SyncState({
|
204
|
+
pending: [e_0_0],
|
205
|
+
rollbackTail: [],
|
206
|
+
upstreamHead: EventId.ROOT,
|
207
|
+
localHead: e_0_0.id,
|
208
|
+
})
|
176
209
|
const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } })
|
177
210
|
|
178
211
|
expectAdvance(result)
|
179
212
|
expectEventArraysEqual(result.newSyncState.pending, [])
|
180
213
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0])
|
181
|
-
expect(result.newSyncState.upstreamHead).
|
214
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_0_0.id)
|
182
215
|
expect(result.newSyncState.localHead).toMatchObject(e_0_0.id)
|
183
|
-
expect(result.newEvents).
|
216
|
+
expect(result.newEvents).toStrictEqual([])
|
184
217
|
})
|
185
218
|
|
186
219
|
it('should acknowledge partial pending event when receiving matching event', () => {
|
187
|
-
const syncState = {
|
220
|
+
const syncState = new SyncState.SyncState({
|
188
221
|
pending: [e_0_0, e_1_0],
|
189
222
|
rollbackTail: [],
|
190
223
|
upstreamHead: EventId.ROOT,
|
191
224
|
localHead: e_1_0.id,
|
192
|
-
}
|
225
|
+
})
|
193
226
|
const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } })
|
194
227
|
|
195
228
|
expectAdvance(result)
|
196
229
|
expectEventArraysEqual(result.newSyncState.pending, [e_1_0])
|
197
230
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0])
|
198
|
-
expect(result.newSyncState.upstreamHead).
|
231
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_0_0.id)
|
199
232
|
expect(result.newSyncState.localHead).toMatchObject(e_1_0.id)
|
200
|
-
expect(result.newEvents).
|
233
|
+
expect(result.newEvents).toStrictEqual([])
|
201
234
|
})
|
202
235
|
|
203
236
|
it('should acknowledge pending event and add new event', () => {
|
204
|
-
const syncState =
|
237
|
+
const syncState = new SyncState.SyncState({
|
238
|
+
pending: [e_0_0],
|
239
|
+
rollbackTail: [],
|
240
|
+
upstreamHead: EventId.ROOT,
|
241
|
+
localHead: e_0_0.id,
|
242
|
+
})
|
205
243
|
const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_0_1] } })
|
206
244
|
|
207
245
|
expectAdvance(result)
|
208
246
|
expectEventArraysEqual(result.newSyncState.pending, [])
|
209
247
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_1])
|
210
|
-
expect(result.newSyncState.upstreamHead).
|
248
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_0_1.id)
|
211
249
|
expect(result.newSyncState.localHead).toMatchObject(e_0_1.id)
|
212
|
-
expect(result.newEvents).
|
250
|
+
expect(result.newEvents).toStrictEqual([e_0_1])
|
213
251
|
})
|
214
252
|
|
215
253
|
it('should acknowledge pending event and add multiple new events', () => {
|
216
|
-
const syncState =
|
254
|
+
const syncState = new SyncState.SyncState({
|
255
|
+
pending: [e_0_1],
|
256
|
+
rollbackTail: [],
|
257
|
+
upstreamHead: e_0_0.id,
|
258
|
+
localHead: e_0_1.id,
|
259
|
+
})
|
217
260
|
const result = run({
|
218
261
|
syncState,
|
219
262
|
payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_2, e_0_3, e_1_0, e_1_1] },
|
@@ -222,18 +265,18 @@ describe('syncstate', () => {
|
|
222
265
|
expectAdvance(result)
|
223
266
|
expectEventArraysEqual(result.newSyncState.pending, [])
|
224
267
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_1, e_0_2, e_0_3, e_1_0, e_1_1])
|
225
|
-
expect(result.newSyncState.upstreamHead).
|
268
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_1_1.id)
|
226
269
|
expect(result.newSyncState.localHead).toMatchObject(e_1_1.id)
|
227
|
-
expect(result.newEvents).
|
270
|
+
expect(result.newEvents).toStrictEqual([e_0_2, e_0_3, e_1_0, e_1_1])
|
228
271
|
})
|
229
272
|
|
230
|
-
it('should ignore
|
231
|
-
const syncState = {
|
273
|
+
it('should ignore client events (incoming is subset of pending)', () => {
|
274
|
+
const syncState = new SyncState.SyncState({
|
232
275
|
pending: [e_r_1, e_0_0],
|
233
276
|
rollbackTail: [],
|
234
277
|
upstreamHead: EventId.ROOT,
|
235
278
|
localHead: e_0_0.id,
|
236
|
-
}
|
279
|
+
})
|
237
280
|
const result = run({
|
238
281
|
syncState,
|
239
282
|
payload: { _tag: 'upstream-advance', newEvents: [e_0_0] },
|
@@ -242,18 +285,18 @@ describe('syncstate', () => {
|
|
242
285
|
expectAdvance(result)
|
243
286
|
expectEventArraysEqual(result.newSyncState.pending, [])
|
244
287
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_r_1, e_0_0])
|
245
|
-
expect(result.newSyncState.upstreamHead).
|
288
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_0_0.id)
|
246
289
|
expect(result.newSyncState.localHead).toMatchObject(e_0_0.id)
|
247
|
-
expect(result.newEvents).
|
290
|
+
expect(result.newEvents).toStrictEqual([])
|
248
291
|
})
|
249
292
|
|
250
|
-
it('should ignore
|
251
|
-
const syncState = {
|
293
|
+
it('should ignore client events (incoming is subset of pending case 2)', () => {
|
294
|
+
const syncState = new SyncState.SyncState({
|
252
295
|
pending: [e_r_1, e_0_0, e_1_0],
|
253
296
|
rollbackTail: [],
|
254
297
|
upstreamHead: EventId.ROOT,
|
255
298
|
localHead: e_0_0.id,
|
256
|
-
}
|
299
|
+
})
|
257
300
|
const result = run({
|
258
301
|
syncState,
|
259
302
|
payload: { _tag: 'upstream-advance', newEvents: [e_0_0] },
|
@@ -262,18 +305,18 @@ describe('syncstate', () => {
|
|
262
305
|
expectAdvance(result)
|
263
306
|
expectEventArraysEqual(result.newSyncState.pending, [e_1_0])
|
264
307
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_r_1, e_0_0])
|
265
|
-
expect(result.newSyncState.upstreamHead).
|
308
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_0_0.id)
|
266
309
|
expect(result.newSyncState.localHead).toMatchObject(e_1_0.id)
|
267
|
-
expect(result.newEvents).
|
310
|
+
expect(result.newEvents).toStrictEqual([])
|
268
311
|
})
|
269
312
|
|
270
|
-
it('should ignore
|
271
|
-
const syncState = {
|
313
|
+
it('should ignore client events (incoming goes beyond pending)', () => {
|
314
|
+
const syncState = new SyncState.SyncState({
|
272
315
|
pending: [e_r_1, e_0_0, e_0_1],
|
273
316
|
rollbackTail: [],
|
274
317
|
upstreamHead: EventId.ROOT,
|
275
318
|
localHead: e_0_1.id,
|
276
|
-
}
|
319
|
+
})
|
277
320
|
const result = run({
|
278
321
|
syncState,
|
279
322
|
payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_1_0] },
|
@@ -283,15 +326,31 @@ describe('syncstate', () => {
|
|
283
326
|
expectAdvance(result)
|
284
327
|
expectEventArraysEqual(result.newSyncState.pending, [])
|
285
328
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_r_1, e_0_0, e_0_1, e_1_0])
|
286
|
-
expect(result.newSyncState.upstreamHead).
|
329
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id)
|
287
330
|
expect(result.newSyncState.localHead).toMatchObject(e_1_0.id)
|
288
|
-
expect(result.newEvents).
|
331
|
+
expect(result.newEvents).toStrictEqual([e_1_0])
|
332
|
+
})
|
333
|
+
|
334
|
+
it('should fail if incoming event is ≤ local head', () => {
|
335
|
+
const syncState = new SyncState.SyncState({
|
336
|
+
pending: [],
|
337
|
+
rollbackTail: [],
|
338
|
+
upstreamHead: e_1_0.id,
|
339
|
+
localHead: e_1_0.id,
|
340
|
+
})
|
341
|
+
const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } })
|
342
|
+
expect(result).toMatchObject({ _tag: 'unexpected-error' })
|
289
343
|
})
|
290
344
|
})
|
291
345
|
|
292
346
|
describe('upstream-advance: rebase', () => {
|
293
|
-
it('should rebase single
|
294
|
-
const syncState =
|
347
|
+
it('should rebase single client event to end', () => {
|
348
|
+
const syncState = new SyncState.SyncState({
|
349
|
+
pending: [e_0_0],
|
350
|
+
rollbackTail: [],
|
351
|
+
upstreamHead: EventId.ROOT,
|
352
|
+
localHead: e_0_0.id,
|
353
|
+
})
|
295
354
|
const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_1] } })
|
296
355
|
|
297
356
|
const e_0_0_e_0_2 = e_0_0.rebase_(e_0_1.id)
|
@@ -299,15 +358,20 @@ describe('syncstate', () => {
|
|
299
358
|
expectRebase(result)
|
300
359
|
expectEventArraysEqual(result.newSyncState.pending, [e_0_0_e_0_2])
|
301
360
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_1])
|
302
|
-
expect(result.newSyncState.upstreamHead).
|
361
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_0_1.id)
|
303
362
|
expect(result.newSyncState.localHead).toMatchObject(e_0_0_e_0_2.id)
|
304
363
|
expectEventArraysEqual(result.eventsToRollback, [e_0_0])
|
305
364
|
expectEventArraysEqual(result.newEvents, [e_0_1, e_0_0_e_0_2])
|
306
365
|
})
|
307
366
|
|
308
367
|
it('should rebase different event with same id (no rollback tail)', () => {
|
309
|
-
const e_0_0_b = new TestEvent({ global: 0,
|
310
|
-
const syncState =
|
368
|
+
const e_0_0_b = new TestEvent({ global: 0, client: 0 }, EventId.ROOT, '0_0_b', true)
|
369
|
+
const syncState = new SyncState.SyncState({
|
370
|
+
pending: [e_0_0_b],
|
371
|
+
rollbackTail: [],
|
372
|
+
upstreamHead: EventId.ROOT,
|
373
|
+
localHead: e_0_0_b.id,
|
374
|
+
})
|
311
375
|
const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_0_0] } })
|
312
376
|
|
313
377
|
const e_0_0_e_1_0 = e_0_0_b.rebase_(e_0_0.id)
|
@@ -317,18 +381,18 @@ describe('syncstate', () => {
|
|
317
381
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0])
|
318
382
|
expectEventArraysEqual(result.newEvents, [e_0_0, e_0_0_e_1_0])
|
319
383
|
expectEventArraysEqual(result.eventsToRollback, [e_0_0_b])
|
320
|
-
expect(result.newSyncState.upstreamHead).
|
384
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_0_0.id)
|
321
385
|
expect(result.newSyncState.localHead).toMatchObject(e_0_0_e_1_0.id)
|
322
386
|
})
|
323
387
|
|
324
388
|
it('should rebase different event with same id', () => {
|
325
|
-
const e_1_0_b = new TestEvent({ global: 1,
|
326
|
-
const syncState = {
|
389
|
+
const e_1_0_b = new TestEvent({ global: 1, client: 0 }, e_0_0.id, '1_0_b', false)
|
390
|
+
const syncState = new SyncState.SyncState({
|
327
391
|
pending: [e_1_0_b],
|
328
392
|
rollbackTail: [e_0_0, e_0_1],
|
329
393
|
upstreamHead: EventId.ROOT,
|
330
394
|
localHead: e_1_0_b.id,
|
331
|
-
}
|
395
|
+
})
|
332
396
|
const result = run({ syncState, payload: { _tag: 'upstream-advance', newEvents: [e_1_0] } })
|
333
397
|
const e_1_0_e_2_0 = e_1_0_b.rebase_(e_1_0.id)
|
334
398
|
|
@@ -337,12 +401,17 @@ describe('syncstate', () => {
|
|
337
401
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_1, e_1_0])
|
338
402
|
expectEventArraysEqual(result.newEvents, [e_1_0, e_1_0_e_2_0])
|
339
403
|
expectEventArraysEqual(result.eventsToRollback, [e_0_0, e_0_1, e_1_0_b])
|
340
|
-
expect(result.newSyncState.upstreamHead).
|
404
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id)
|
341
405
|
expect(result.newSyncState.localHead).toMatchObject(e_1_0_e_2_0.id)
|
342
406
|
})
|
343
407
|
|
344
|
-
it('should rebase single
|
345
|
-
const syncState =
|
408
|
+
it('should rebase single client event to end (more incoming events)', () => {
|
409
|
+
const syncState = new SyncState.SyncState({
|
410
|
+
pending: [e_0_0],
|
411
|
+
rollbackTail: [],
|
412
|
+
upstreamHead: EventId.ROOT,
|
413
|
+
localHead: e_0_0.id,
|
414
|
+
})
|
346
415
|
const result = run({
|
347
416
|
syncState,
|
348
417
|
payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_2, e_0_3, e_1_0] },
|
@@ -353,17 +422,17 @@ describe('syncstate', () => {
|
|
353
422
|
expectRebase(result)
|
354
423
|
expectEventArraysEqual(result.newSyncState.pending, [e_0_0_e_2_0])
|
355
424
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_1, e_0_2, e_0_3, e_1_0])
|
356
|
-
expect(result.newSyncState.upstreamHead).
|
425
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id)
|
357
426
|
expect(result.newSyncState.localHead).toMatchObject(e_0_0_e_2_0.id)
|
358
427
|
})
|
359
428
|
|
360
429
|
it('should only rebase divergent events when first event matches', () => {
|
361
|
-
const syncState = {
|
430
|
+
const syncState = new SyncState.SyncState({
|
362
431
|
pending: [e_0_0, e_0_1],
|
363
432
|
rollbackTail: [],
|
364
433
|
upstreamHead: EventId.ROOT,
|
365
434
|
localHead: e_0_0.id,
|
366
|
-
}
|
435
|
+
})
|
367
436
|
const result = run({
|
368
437
|
syncState,
|
369
438
|
payload: { _tag: 'upstream-advance', newEvents: [e_0_0, e_0_2, e_0_3, e_1_0] },
|
@@ -376,17 +445,17 @@ describe('syncstate', () => {
|
|
376
445
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_2, e_0_3, e_1_0])
|
377
446
|
expectEventArraysEqual(result.eventsToRollback, [e_0_1])
|
378
447
|
expectEventArraysEqual(result.newEvents, [e_0_2, e_0_3, e_1_0, e_0_1_e_1_1])
|
379
|
-
expect(result.newSyncState.upstreamHead).
|
448
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id)
|
380
449
|
expect(result.newSyncState.localHead).toMatchObject(e_0_1_e_1_1.id)
|
381
450
|
})
|
382
451
|
|
383
|
-
it('should rebase all
|
384
|
-
const syncState = {
|
452
|
+
it('should rebase all client events when incoming chain starts differently', () => {
|
453
|
+
const syncState = new SyncState.SyncState({
|
385
454
|
pending: [e_0_0, e_0_1],
|
386
455
|
rollbackTail: [],
|
387
456
|
upstreamHead: EventId.ROOT,
|
388
457
|
localHead: e_0_1.id,
|
389
|
-
}
|
458
|
+
})
|
390
459
|
const result = run({
|
391
460
|
syncState,
|
392
461
|
payload: { _tag: 'upstream-advance', newEvents: [e_0_1, e_0_2, e_0_3, e_1_0] },
|
@@ -400,20 +469,25 @@ describe('syncstate', () => {
|
|
400
469
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_1, e_0_2, e_0_3, e_1_0])
|
401
470
|
expectEventArraysEqual(result.newEvents, [e_0_1, e_0_2, e_0_3, e_1_0, e_0_0_e_1_1, e_0_1_e_1_2])
|
402
471
|
expectEventArraysEqual(result.eventsToRollback, [e_0_0, e_0_1])
|
403
|
-
expect(result.newSyncState.upstreamHead).
|
472
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(e_1_0.id)
|
404
473
|
expect(result.newSyncState.localHead).toMatchObject(e_0_1_e_1_2.id)
|
405
474
|
})
|
406
475
|
|
407
476
|
describe('local-push', () => {
|
408
477
|
describe('advance', () => {
|
409
478
|
it('should advance with new events', () => {
|
410
|
-
const syncState =
|
479
|
+
const syncState = new SyncState.SyncState({
|
480
|
+
pending: [e_0_0],
|
481
|
+
rollbackTail: [],
|
482
|
+
upstreamHead: EventId.ROOT,
|
483
|
+
localHead: e_0_0.id,
|
484
|
+
})
|
411
485
|
const result = run({ syncState, payload: { _tag: 'local-push', newEvents: [e_0_1, e_0_2, e_0_3] } })
|
412
486
|
|
413
487
|
expectAdvance(result)
|
414
488
|
expectEventArraysEqual(result.newSyncState.pending, [e_0_0, e_0_1, e_0_2, e_0_3])
|
415
489
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [])
|
416
|
-
expect(result.newSyncState.upstreamHead).
|
490
|
+
expect(result.newSyncState.upstreamHead).toMatchObject(EventId.ROOT)
|
417
491
|
expect(result.newSyncState.localHead).toMatchObject(e_0_3.id)
|
418
492
|
expectEventArraysEqual(result.newEvents, [e_0_1, e_0_2, e_0_3])
|
419
493
|
})
|
@@ -421,12 +495,12 @@ describe('syncstate', () => {
|
|
421
495
|
|
422
496
|
describe('reject', () => {
|
423
497
|
it('should reject when new events are greater than pending events', () => {
|
424
|
-
const syncState = {
|
498
|
+
const syncState = new SyncState.SyncState({
|
425
499
|
pending: [e_0_0, e_0_1],
|
426
500
|
rollbackTail: [],
|
427
501
|
upstreamHead: EventId.ROOT,
|
428
502
|
localHead: e_0_1.id,
|
429
|
-
}
|
503
|
+
})
|
430
504
|
const result = run({ syncState, payload: { _tag: 'local-push', newEvents: [e_0_1, e_0_2] } })
|
431
505
|
|
432
506
|
expectReject(result)
|
@@ -444,21 +518,27 @@ const expectEventArraysEqual = (
|
|
444
518
|
) => {
|
445
519
|
expect(actual.length).toBe(expected.length)
|
446
520
|
actual.forEach((event, i) => {
|
447
|
-
expect(event.id).
|
448
|
-
expect(event.parentId).
|
449
|
-
expect(event.mutation).
|
450
|
-
expect(event.args).
|
521
|
+
expect(event.id).toStrictEqual(expected[i]!.id)
|
522
|
+
expect(event.parentId).toStrictEqual(expected[i]!.parentId)
|
523
|
+
expect(event.mutation).toStrictEqual(expected[i]!.mutation)
|
524
|
+
expect(event.args).toStrictEqual(expected[i]!.args)
|
451
525
|
})
|
452
526
|
}
|
453
527
|
|
454
|
-
function expectAdvance(
|
528
|
+
function expectAdvance(
|
529
|
+
result: typeof SyncState.UpdateResult.Type,
|
530
|
+
): asserts result is typeof SyncState.UpdateResultAdvance.Type {
|
455
531
|
expect(result._tag).toBe('advance')
|
456
532
|
}
|
457
533
|
|
458
|
-
function expectRebase(
|
534
|
+
function expectRebase(
|
535
|
+
result: typeof SyncState.UpdateResult.Type,
|
536
|
+
): asserts result is typeof SyncState.UpdateResultRebase.Type {
|
459
537
|
expect(result._tag).toBe('rebase')
|
460
538
|
}
|
461
539
|
|
462
|
-
function expectReject(
|
540
|
+
function expectReject(
|
541
|
+
result: typeof SyncState.UpdateResult.Type,
|
542
|
+
): asserts result is typeof SyncState.UpdateResultReject.Type {
|
463
543
|
expect(result._tag).toBe('reject')
|
464
544
|
}
|