@livestore/common 0.3.0-dev.6 → 0.3.0-dev.8
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/devtools/devtools-messages.d.ts +47 -47
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/leader-thread/LeaderSyncProcessor.d.ts +47 -0
- package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -0
- package/dist/leader-thread/LeaderSyncProcessor.js +432 -0
- package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -0
- package/dist/leader-thread/leader-sync-processor.d.ts +2 -2
- package/dist/leader-thread/leader-sync-processor.d.ts.map +1 -1
- package/dist/leader-thread/leader-sync-processor.js.map +1 -1
- package/dist/leader-thread/leader-worker-devtools.d.ts +1 -1
- package/dist/leader-thread/make-leader-thread-layer.d.ts +5 -6
- package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
- package/dist/leader-thread/make-leader-thread-layer.js +7 -4
- package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
- package/dist/leader-thread/pull-queue-set.d.ts.map +1 -1
- package/dist/leader-thread/types.d.ts +2 -2
- package/dist/leader-thread/types.d.ts.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.map +1 -1
- package/dist/schema/MutationEvent.js +2 -2
- package/dist/schema/MutationEvent.js.map +1 -1
- package/dist/schema/MutationEvent.test.d.ts +2 -0
- package/dist/schema/MutationEvent.test.d.ts.map +1 -0
- package/dist/schema/MutationEvent.test.js +2 -0
- package/dist/schema/MutationEvent.test.js.map +1 -0
- package/dist/sync/ClientSessionSyncProcessor.d.ts +45 -0
- package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -0
- package/dist/sync/ClientSessionSyncProcessor.js +131 -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/sync.d.ts +15 -5
- package/dist/sync/sync.d.ts.map +1 -1
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/syncstate.test.js +14 -13
- package/dist/sync/syncstate.test.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
- package/src/index.ts +0 -6
- package/src/leader-thread/{leader-sync-processor.ts → LeaderSyncProcessor.ts} +9 -7
- package/src/leader-thread/make-leader-thread-layer.ts +9 -8
- package/src/leader-thread/types.ts +2 -2
- package/src/schema/EventId.test.ts +12 -0
- package/src/schema/MutationEvent.ts +2 -2
- package/src/sync/{client-session-sync-processor.ts → ClientSessionSyncProcessor.ts} +0 -1
- package/src/sync/index.ts +1 -1
- package/src/sync/sync.ts +15 -4
- package/src/sync/syncstate.test.ts +14 -13
- package/src/version.ts +1 -1
@@ -4,18 +4,21 @@ import { EventId, MutationEvent, mutationLogMetaTable, SYNC_STATUS_TABLE, syncSt
|
|
4
4
|
import { migrateTable } from '../schema-management/migrations.js';
|
5
5
|
import { sql } from '../util.js';
|
6
6
|
import { execSql } from './connection.js';
|
7
|
-
import { makeLeaderSyncProcessor } from './leader-sync-processor.js';
|
8
7
|
import { bootDevtools } from './leader-worker-devtools.js';
|
8
|
+
import { makeLeaderSyncProcessor } from './LeaderSyncProcessor.js';
|
9
9
|
import { makePullQueueSet } from './pull-queue-set.js';
|
10
10
|
import { recreateDb } from './recreate-db.js';
|
11
11
|
import { LeaderThreadCtx } from './types.js';
|
12
|
-
export const makeLeaderThreadLayer = ({ schema, storeId, clientId, makeSyncDb,
|
12
|
+
export const makeLeaderThreadLayer = ({ schema, storeId, clientId, makeSyncDb, syncOptions, db, dbLog, devtoolsOptions, shutdownChannel, }) => Effect.gen(function* () {
|
13
13
|
const bootStatusQueue = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
|
14
14
|
// TODO do more validation here than just checking the count of tables
|
15
15
|
// Either happens on initial boot or if schema changes
|
16
16
|
const dbMissing = db.select(sql `select count(*) as count from sqlite_master`)[0].count === 0;
|
17
|
-
const syncBackend =
|
18
|
-
const initialBlockingSyncContext = yield* makeInitialBlockingSyncContext({
|
17
|
+
const syncBackend = syncOptions === undefined ? undefined : yield* syncOptions.makeBackend({ storeId, clientId });
|
18
|
+
const initialBlockingSyncContext = yield* makeInitialBlockingSyncContext({
|
19
|
+
initialSyncOptions: syncOptions?.initialSyncOptions ?? { _tag: 'Skip' },
|
20
|
+
bootStatusQueue,
|
21
|
+
});
|
19
22
|
const syncProcessor = yield* makeLeaderSyncProcessor({ schema, dbMissing, dbLog, initialBlockingSyncContext });
|
20
23
|
const extraIncomingMessagesQueue = yield* Queue.unbounded().pipe(Effect.acquireRelease(Queue.shutdown));
|
21
24
|
const ctx = {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"make-leader-thread-layer.js","sourceRoot":"","sources":["../../src/leader-thread/make-leader-thread-layer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAGzF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGrD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACnH,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAEjE,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"make-leader-thread-layer.js","sourceRoot":"","sources":["../../src/leader-thread/make-leader-thread-layer.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pull-queue-set.d.ts","sourceRoot":"","sources":["../../src/leader-thread/pull-queue-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAIvD,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,YAAY,CAAA;AAElE,eAAO,MAAM,gBAAgB;
|
1
|
+
{"version":3,"file":"pull-queue-set.d.ts","sourceRoot":"","sources":["../../src/leader-thread/pull-queue-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAIvD,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,YAAY,CAAA;AAElE,eAAO,MAAM,gBAAgB;kEAoDwyE,OAAQ,MAAM,CAAC,MAAM,KAAK;oCAAkG,OAAQ,MAAM;uCAD78E,CAAA"}
|
@@ -53,7 +53,7 @@ declare const LeaderThreadCtx_base: Context.TagClass<LeaderThreadCtx, "LeaderThr
|
|
53
53
|
shutdownChannel: ShutdownChannel;
|
54
54
|
mutationEventSchema: MutationEvent.ForMutationDefRecord<any>;
|
55
55
|
syncBackend: SyncBackend | undefined;
|
56
|
-
syncProcessor:
|
56
|
+
syncProcessor: LeaderSyncProcessor;
|
57
57
|
connectedClientSessionPullQueues: PullQueueSet;
|
58
58
|
/** e.g. used for `store.__dev` APIs */
|
59
59
|
extraIncomingMessagesQueue: Queue.Queue<Devtools.MessageToAppLeader>;
|
@@ -71,7 +71,7 @@ export type PullQueueItem = {
|
|
71
71
|
payload: SyncState.PayloadUpstream;
|
72
72
|
remaining: number;
|
73
73
|
};
|
74
|
-
export interface
|
74
|
+
export interface LeaderSyncProcessor {
|
75
75
|
push: (
|
76
76
|
/** `batch` needs to follow the same rules as `batch` in `SyncBackend.push` */
|
77
77
|
batch: ReadonlyArray<MutationEvent.EncodedWithMeta>) => Effect.Effect<void, UnexpectedError | InvalidPushError, HttpClient.HttpClient | LeaderThreadCtx>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,MAAM,EACN,KAAK,EACL,UAAU,EACV,MAAM,EACN,KAAK,EACL,KAAK,EACL,eAAe,EACf,UAAU,EACX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEzD,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,eAAe,EAChB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC/E,OAAO,KAAK,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,eAAe,CAAA;;gBAKvC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;;AAH5C,qBAAa,cAAe,SAAQ,mBAKjC;CAAG;AAEN,eAAO,MAAM,sBAAsB,iCAAkC,CAAA;AACrE,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AAEvE,eAAO,MAAM,0BAA0B;;EAErC,CAAA;AAEF,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAA;AAE/E,eAAO,MAAM,kBAAkB;;IAAmE,CAAA;AAClG,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;AAE/D,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,OAAO,CAAC,OAAO,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;CAC1C,CAAC,CAAA;AAMF,MAAM,MAAM,cAAc,GAAG,mBAAmB,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,CAAC,CAAA;AACzG,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,eAAe,CAAA;CAAE,CAAA;AAEvF,MAAM,MAAM,eAAe,GACvB;IACE,OAAO,EAAE,KAAK,CAAA;CACf,GACD;IACE,OAAO,EAAE,IAAI,CAAA;IACb,WAAW,EAAE,MAAM,CAAC,MAAM,CACxB;QACE,kBAAkB,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAA;QACrG,eAAe,EAAE,mBAAmB,CAAA;KACrC,EACD,eAAe,EACf,KAAK,CAAC,KAAK,CACZ,CAAA;CACF,CAAA;;YAKO,eAAe;aACd,MAAM;cACL,MAAM;gBACJ,uBAAuB;QAC/B,cAAc;WACX,cAAc;qBACJ,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;yBAEnB,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC;qBAClD,eAAe;yBACX,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC;iBAE/C,WAAW,GAAG,SAAS;mBACrB,
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/leader-thread/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,MAAM,EACN,KAAK,EACL,UAAU,EACV,MAAM,EACN,KAAK,EACL,KAAK,EACL,eAAe,EACf,UAAU,EACX,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEzD,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,eAAe,EAChB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC/E,OAAO,KAAK,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,eAAe,CAAA;;gBAKvC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC;;AAH5C,qBAAa,cAAe,SAAQ,mBAKjC;CAAG;AAEN,eAAO,MAAM,sBAAsB,iCAAkC,CAAA;AACrE,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AAEvE,eAAO,MAAM,0BAA0B;;EAErC,CAAA;AAEF,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAA;AAE/E,eAAO,MAAM,kBAAkB;;IAAmE,CAAA;AAClG,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;AAE/D,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,OAAO,CAAC,OAAO,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;CAC1C,CAAC,CAAA;AAMF,MAAM,MAAM,cAAc,GAAG,mBAAmB,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,eAAe,CAAA;CAAE,CAAC,CAAA;AACzG,MAAM,MAAM,mBAAmB,GAAG;IAAE,EAAE,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,eAAe,CAAA;CAAE,CAAA;AAEvF,MAAM,MAAM,eAAe,GACvB;IACE,OAAO,EAAE,KAAK,CAAA;CACf,GACD;IACE,OAAO,EAAE,IAAI,CAAA;IACb,WAAW,EAAE,MAAM,CAAC,MAAM,CACxB;QACE,kBAAkB,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAA;QACrG,eAAe,EAAE,mBAAmB,CAAA;KACrC,EACD,eAAe,EACf,KAAK,CAAC,KAAK,CACZ,CAAA;CACF,CAAA;;YAKO,eAAe;aACd,MAAM;cACL,MAAM;gBACJ,uBAAuB;QAC/B,cAAc;WACX,cAAc;qBACJ,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;yBAEnB,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC;qBAClD,eAAe;yBACX,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC;iBAE/C,WAAW,GAAG,SAAS;mBACrB,mBAAmB;sCACA,YAAY;IAC9C,uCAAuC;gCACX,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC;;AAnBxE,qBAAa,eAAgB,SAAQ,oBAqBlC;CAAG;AAEN,MAAM,MAAM,0BAA0B,GAAG;IACvC,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;IACrD,MAAM,EAAE,CAAC,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CAC7E,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,SAAS,CAAC,eAAe,CAAA;IAClC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE;IACJ,8EAA8E;IAC9E,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,KAChD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,gBAAgB,EAAE,UAAU,CAAC,UAAU,GAAG,eAAe,CAAC,CAAA;IAErG,WAAW,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,iBAAiB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,eAAe,CAAC,CAAA;IACtH,IAAI,EAAE,CAAC,IAAI,EAAE;QACX,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;KACjC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,eAAe,GAAG,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IACjG,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;CAC/D;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,CACT,KAAK,EAAE,OAAO,CAAC,OAAO,KACnB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,CAAA;IAC9F,KAAK,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,eAAe,CAAC,CAAA;CACtF"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EventId.test.d.ts","sourceRoot":"","sources":["../../src/schema/EventId.test.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Vitest } from '@livestore/utils/node-vitest';
|
2
|
+
import { expect } from 'vitest';
|
3
|
+
import { EventId } from './mod.js';
|
4
|
+
Vitest.describe('EventId', () => {
|
5
|
+
Vitest.test('nextPair', () => {
|
6
|
+
const e_0_0 = EventId.make({ global: 0, local: 0 });
|
7
|
+
expect(EventId.nextPair(e_0_0, false).id).toStrictEqual({ global: 1, local: 0 });
|
8
|
+
expect(EventId.nextPair(e_0_0, true).id).toStrictEqual({ global: 0, local: 1 });
|
9
|
+
});
|
10
|
+
});
|
11
|
+
//# sourceMappingURL=EventId.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EventId.test.js","sourceRoot":"","sources":["../../src/schema/EventId.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAElC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IAC9B,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;QAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QACnD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QAChF,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MutationEvent.d.ts","sourceRoot":"","sources":["../../src/schema/MutationEvent.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"MutationEvent.d.ts","sourceRoot":"","sources":["../../src/schema/MutationEvent.ts"],"names":[],"mappings":"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"}
|
@@ -29,7 +29,7 @@ export const makeMutationEventSchema = (schema) => Schema.Union(...[...schema.mu
|
|
29
29
|
export const makeMutationEventPartialSchema = (schema) => Schema.Union(...[...schema.mutations.values()].map((def) => Schema.Struct({
|
30
30
|
mutation: Schema.Literal(def.name),
|
31
31
|
args: def.schema,
|
32
|
-
}))).annotations({ title: '
|
32
|
+
}))).annotations({ title: 'MutationEventPartial' });
|
33
33
|
export const makeMutationEventSchemaMemo = memoizeByRef(makeMutationEventSchema);
|
34
34
|
/** Equivalent to AnyEncoded but with a meta field and some convenience methods */
|
35
35
|
export class EncodedWithMeta extends Schema.Class('MutationEvent.EncodedWithMeta')({
|
@@ -51,7 +51,7 @@ export class EncodedWithMeta extends Schema.Class('MutationEvent.EncodedWithMeta
|
|
51
51
|
};
|
52
52
|
rebase = (parentId, isLocal) => new EncodedWithMeta({
|
53
53
|
...this,
|
54
|
-
...EventId.nextPair(
|
54
|
+
...EventId.nextPair(parentId, isLocal),
|
55
55
|
});
|
56
56
|
static fromGlobal = (mutationEvent) => new EncodedWithMeta({
|
57
57
|
...mutationEvent,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MutationEvent.js","sourceRoot":"","sources":["../../src/schema/MutationEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AA6BvC,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,IAAI,EAAE,MAAM,CAAC,GAAG;IAChB,EAAE,EAAE,OAAO,CAAC,OAAO;IACnB,QAAQ,EAAE,OAAO,CAAC,OAAO;CAC1B,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAA;AAGrD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,IAAI,EAAE,MAAM,CAAC,GAAG;IAChB,EAAE,EAAE,OAAO,CAAC,OAAO;IACnB,QAAQ,EAAE,OAAO,CAAC,OAAO;CAC1B,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAA;AAErD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,IAAI,EAAE,MAAM,CAAC,GAAG;IAChB,EAAE,EAAE,OAAO,CAAC,aAAa;IACzB,QAAQ,EAAE,OAAO,CAAC,aAAa;CAChC,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAA;AAc3D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,aAA6C,EACT,EAAE,CAAC,IAAI,IAAI,aAAa,KAAK,KAAK,IAAI,UAAU,IAAI,aAAa,KAAK,KAAK,CAAA;AAoCjH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,MAAe,EACuC,EAAE,CACxD,MAAM,CAAC,KAAK,CACV,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC5C,MAAM,CAAC,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAClC,IAAI,EAAE,GAAG,CAAC,MAAM;IAChB,EAAE,EAAE,OAAO,CAAC,OAAO;IACnB,QAAQ,EAAE,OAAO,CAAC,OAAO;CAC1B,CAAC,CACH,CACF,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAQ,CAAA;AAElD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,MAAe,EAC6C,EAAE,CAC9D,MAAM,CAAC,KAAK,CACV,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC5C,MAAM,CAAC,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAClC,IAAI,EAAE,GAAG,CAAC,MAAM;CACjB,CAAC,CACH,CACF,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"MutationEvent.js","sourceRoot":"","sources":["../../src/schema/MutationEvent.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MutationEvent.test.d.ts","sourceRoot":"","sources":["../../src/schema/MutationEvent.test.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MutationEvent.test.js","sourceRoot":"","sources":["../../src/schema/MutationEvent.test.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import type { Scope } from '@livestore/utils/effect';
|
2
|
+
import { Effect } from '@livestore/utils/effect';
|
3
|
+
import * as otel from '@opentelemetry/api';
|
4
|
+
import type { ClientSessionLeaderThreadProxy, UnexpectedError } from '../adapter-types.js';
|
5
|
+
import * as EventId from '../schema/EventId.js';
|
6
|
+
import { type LiveStoreSchema } from '../schema/mod.js';
|
7
|
+
import * as MutationEvent from '../schema/MutationEvent.js';
|
8
|
+
import type { SyncState } from './syncstate.js';
|
9
|
+
/**
|
10
|
+
* Rebase behaviour:
|
11
|
+
* - We continously pull mutations from the leader and apply them to the local store.
|
12
|
+
* - If there was a race condition (i.e. the leader and client session have both advacned),
|
13
|
+
* we'll need to rebase the local pending mutations on top of the leader's head.
|
14
|
+
* - The goal is to never block the UI, so we'll interrupt rebasing if a new mutations is pushed by the client session.
|
15
|
+
* - We also want to avoid "backwards-jumping" in the UI, so we'll transactionally apply a read model changes during a rebase.
|
16
|
+
* - We might need to make the rebase behaviour configurable e.g. to let users manually trigger a rebase
|
17
|
+
*/
|
18
|
+
export declare const makeClientSessionSyncProcessor: ({ schema, initialLeaderHead, pushToLeader, pullFromLeader, applyMutation, rollback, refreshTables, span, }: {
|
19
|
+
schema: LiveStoreSchema;
|
20
|
+
initialLeaderHead: EventId.EventId;
|
21
|
+
pushToLeader: (batch: ReadonlyArray<MutationEvent.AnyEncoded>) => void;
|
22
|
+
pullFromLeader: ClientSessionLeaderThreadProxy["mutations"]["pull"];
|
23
|
+
applyMutation: (mutationEventDecoded: MutationEvent.PartialAnyDecoded, options: {
|
24
|
+
otelContext: otel.Context;
|
25
|
+
withChangeset: boolean;
|
26
|
+
}) => {
|
27
|
+
writeTables: Set<string>;
|
28
|
+
sessionChangeset: Uint8Array | undefined;
|
29
|
+
};
|
30
|
+
rollback: (changeset: Uint8Array) => void;
|
31
|
+
refreshTables: (tables: Set<string>) => void;
|
32
|
+
span: otel.Span;
|
33
|
+
}) => ClientSessionSyncProcessor;
|
34
|
+
export interface ClientSessionSyncProcessor {
|
35
|
+
push: (batch: ReadonlyArray<MutationEvent.PartialAnyDecoded>, options: {
|
36
|
+
otelContext: otel.Context;
|
37
|
+
}) => {
|
38
|
+
writeTables: Set<string>;
|
39
|
+
};
|
40
|
+
boot: Effect.Effect<void, UnexpectedError, Scope.Scope>;
|
41
|
+
syncStateRef: {
|
42
|
+
current: SyncState;
|
43
|
+
};
|
44
|
+
}
|
45
|
+
//# sourceMappingURL=ClientSessionSyncProcessor.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ClientSessionSyncProcessor.d.ts","sourceRoot":"","sources":["../../src/sync/ClientSessionSyncProcessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAkB,MAAM,yBAAyB,CAAA;AAChE,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,KAAK,EAAE,8BAA8B,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1F,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG/C;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,+GASxC;IACD,MAAM,EAAE,eAAe,CAAA;IACvB,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAA;IAClC,YAAY,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IACtE,cAAc,EAAE,8BAA8B,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;IACnE,aAAa,EAAE,CACb,oBAAoB,EAAE,aAAa,CAAC,iBAAiB,EACrD,OAAO,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,KAC3D;QACH,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QACxB,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAA;KACzC,CAAA;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,IAAI,CAAA;IACzC,aAAa,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IAC5C,IAAI,EAAE,IAAI,CAAC,IAAI,CAAA;CAChB,KAAG,0BAoJH,CAAA;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,CACJ,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC,EACrD,OAAO,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAA;KAAE,KACnC;QACH,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KACzB,CAAA;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAEvD,YAAY,EAAE;QAAE,OAAO,EAAE,SAAS,CAAA;KAAE,CAAA;CACrC"}
|
@@ -0,0 +1,131 @@
|
|
1
|
+
import { LS_DEV, shouldNeverHappen, TRACE_VERBOSE } from '@livestore/utils';
|
2
|
+
import { Effect, Schema, Stream } from '@livestore/utils/effect';
|
3
|
+
import * as otel from '@opentelemetry/api';
|
4
|
+
import * as EventId from '../schema/EventId.js';
|
5
|
+
import * as MutationEvent from '../schema/MutationEvent.js';
|
6
|
+
import { updateSyncState } from './syncstate.js';
|
7
|
+
/**
|
8
|
+
* Rebase behaviour:
|
9
|
+
* - We continously pull mutations from the leader and apply them to the local store.
|
10
|
+
* - If there was a race condition (i.e. the leader and client session have both advacned),
|
11
|
+
* we'll need to rebase the local pending mutations on top of the leader's head.
|
12
|
+
* - The goal is to never block the UI, so we'll interrupt rebasing if a new mutations is pushed by the client session.
|
13
|
+
* - We also want to avoid "backwards-jumping" in the UI, so we'll transactionally apply a read model changes during a rebase.
|
14
|
+
* - We might need to make the rebase behaviour configurable e.g. to let users manually trigger a rebase
|
15
|
+
*/
|
16
|
+
export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, pushToLeader, pullFromLeader, applyMutation, rollback, refreshTables, span, }) => {
|
17
|
+
const mutationEventSchema = MutationEvent.makeMutationEventSchemaMemo(schema);
|
18
|
+
const syncStateRef = {
|
19
|
+
current: {
|
20
|
+
localHead: initialLeaderHead,
|
21
|
+
upstreamHead: initialLeaderHead,
|
22
|
+
pending: [],
|
23
|
+
// TODO init rollbackTail from leader to be ready for backend rebasing
|
24
|
+
rollbackTail: [],
|
25
|
+
},
|
26
|
+
};
|
27
|
+
const isLocalEvent = (mutationEventEncoded) => {
|
28
|
+
const mutationDef = schema.mutations.get(mutationEventEncoded.mutation);
|
29
|
+
return mutationDef.options.localOnly;
|
30
|
+
};
|
31
|
+
const push = (batch, { otelContext }) => {
|
32
|
+
// TODO validate batch
|
33
|
+
let baseEventId = syncStateRef.current.localHead;
|
34
|
+
const encodedMutationEvents = batch.map((mutationEvent) => {
|
35
|
+
const mutationDef = schema.mutations.get(mutationEvent.mutation);
|
36
|
+
const nextIdPair = EventId.nextPair(baseEventId, mutationDef.options.localOnly);
|
37
|
+
baseEventId = nextIdPair.id;
|
38
|
+
return new MutationEvent.EncodedWithMeta(Schema.encodeUnknownSync(mutationEventSchema)({ ...mutationEvent, ...nextIdPair }));
|
39
|
+
});
|
40
|
+
const updateResult = updateSyncState({
|
41
|
+
syncState: syncStateRef.current,
|
42
|
+
payload: { _tag: 'local-push', newEvents: encodedMutationEvents },
|
43
|
+
isLocalEvent,
|
44
|
+
isEqualEvent: MutationEvent.isEqualEncoded,
|
45
|
+
});
|
46
|
+
span.addEvent('local-push', {
|
47
|
+
batchSize: encodedMutationEvents.length,
|
48
|
+
updateResult: TRACE_VERBOSE ? JSON.stringify(updateResult) : undefined,
|
49
|
+
});
|
50
|
+
if (updateResult._tag !== 'advance') {
|
51
|
+
return shouldNeverHappen(`Expected advance, got ${updateResult._tag}`);
|
52
|
+
}
|
53
|
+
syncStateRef.current = updateResult.newSyncState;
|
54
|
+
const writeTables = new Set();
|
55
|
+
for (const mutationEvent of updateResult.newEvents) {
|
56
|
+
// TODO avoid encoding and decoding here again
|
57
|
+
const decodedMutationEvent = Schema.decodeSync(mutationEventSchema)(mutationEvent);
|
58
|
+
const res = applyMutation(decodedMutationEvent, { otelContext, withChangeset: true });
|
59
|
+
for (const table of res.writeTables) {
|
60
|
+
writeTables.add(table);
|
61
|
+
}
|
62
|
+
mutationEvent.meta.sessionChangeset = res.sessionChangeset;
|
63
|
+
}
|
64
|
+
pushToLeader(encodedMutationEvents);
|
65
|
+
return { writeTables };
|
66
|
+
};
|
67
|
+
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
68
|
+
const boot = Effect.gen(function* () {
|
69
|
+
yield* pullFromLeader.pipe(Stream.tap(({ payload, remaining }) => Effect.gen(function* () {
|
70
|
+
// console.log('pulled payload from leader', { payload, remaining })
|
71
|
+
const updateResult = updateSyncState({
|
72
|
+
syncState: syncStateRef.current,
|
73
|
+
payload,
|
74
|
+
isLocalEvent,
|
75
|
+
isEqualEvent: MutationEvent.isEqualEncoded,
|
76
|
+
});
|
77
|
+
if (updateResult._tag === 'reject') {
|
78
|
+
debugger;
|
79
|
+
throw new Error('TODO: implement reject in client-session-sync-queue for pull');
|
80
|
+
}
|
81
|
+
syncStateRef.current = updateResult.newSyncState;
|
82
|
+
if (updateResult._tag === 'rebase') {
|
83
|
+
span.addEvent('pull:rebase', {
|
84
|
+
payloadTag: payload._tag,
|
85
|
+
payload: TRACE_VERBOSE ? JSON.stringify(payload) : undefined,
|
86
|
+
newEventsCount: updateResult.newEvents.length,
|
87
|
+
rollbackCount: updateResult.eventsToRollback.length,
|
88
|
+
res: TRACE_VERBOSE ? JSON.stringify(updateResult) : undefined,
|
89
|
+
remaining,
|
90
|
+
});
|
91
|
+
if (LS_DEV) {
|
92
|
+
console.debug('pull:rebase: rollback', updateResult.eventsToRollback.length, ...updateResult.eventsToRollback.map((_) => _.toJSON()));
|
93
|
+
}
|
94
|
+
for (let i = updateResult.eventsToRollback.length - 1; i >= 0; i--) {
|
95
|
+
const event = updateResult.eventsToRollback[i];
|
96
|
+
if (event.meta.sessionChangeset) {
|
97
|
+
rollback(event.meta.sessionChangeset);
|
98
|
+
event.meta.sessionChangeset = undefined;
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
else {
|
103
|
+
span.addEvent('pull:advance', {
|
104
|
+
payloadTag: payload._tag,
|
105
|
+
payload: TRACE_VERBOSE ? JSON.stringify(payload) : undefined,
|
106
|
+
newEventsCount: updateResult.newEvents.length,
|
107
|
+
res: TRACE_VERBOSE ? JSON.stringify(updateResult) : undefined,
|
108
|
+
remaining,
|
109
|
+
});
|
110
|
+
}
|
111
|
+
if (updateResult.newEvents.length === 0)
|
112
|
+
return;
|
113
|
+
const writeTables = new Set();
|
114
|
+
for (const mutationEvent of updateResult.newEvents) {
|
115
|
+
const decodedMutationEvent = Schema.decodeSync(mutationEventSchema)(mutationEvent);
|
116
|
+
const res = applyMutation(decodedMutationEvent, { otelContext, withChangeset: true });
|
117
|
+
for (const table of res.writeTables) {
|
118
|
+
writeTables.add(table);
|
119
|
+
}
|
120
|
+
mutationEvent.meta.sessionChangeset = res.sessionChangeset;
|
121
|
+
}
|
122
|
+
refreshTables(writeTables);
|
123
|
+
})), Stream.runDrain, Effect.tapCauseLogPretty, Effect.forkScoped);
|
124
|
+
});
|
125
|
+
return {
|
126
|
+
push,
|
127
|
+
boot,
|
128
|
+
syncStateRef,
|
129
|
+
};
|
130
|
+
};
|
131
|
+
//# sourceMappingURL=ClientSessionSyncProcessor.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ClientSessionSyncProcessor.js","sourceRoot":"","sources":["../../src/sync/ClientSessionSyncProcessor.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/index.d.ts
CHANGED
package/dist/sync/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,4BAA4B,CAAA;AAC1C,cAAc,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,4BAA4B,CAAA;AAC1C,cAAc,iCAAiC,CAAA"}
|
package/dist/sync/index.js
CHANGED
package/dist/sync/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,4BAA4B,CAAA;AAC1C,cAAc,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,4BAA4B,CAAA;AAC1C,cAAc,iCAAiC,CAAA"}
|
package/dist/sync/sync.d.ts
CHANGED
@@ -1,11 +1,21 @@
|
|
1
|
-
import type { Effect, HttpClient, Option, Stream, SubscriptionRef } from '@livestore/utils/effect';
|
1
|
+
import type { Effect, HttpClient, Option, Scope, Stream, SubscriptionRef } from '@livestore/utils/effect';
|
2
2
|
import { Schema } from '@livestore/utils/effect';
|
3
|
+
import type { UnexpectedError } from '../adapter-types.js';
|
4
|
+
import type { InitialSyncOptions } from '../leader-thread/types.js';
|
3
5
|
import * as EventId from '../schema/EventId.js';
|
4
6
|
import type * as MutationEvent from '../schema/MutationEvent.js';
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
/**
|
8
|
+
* Those arguments can be used to implement multi-tenancy etc and are passed in from the store.
|
9
|
+
*/
|
10
|
+
export type MakeBackendArgs = {
|
11
|
+
storeId: string;
|
12
|
+
clientId: string;
|
13
|
+
};
|
14
|
+
export type SyncOptions = {
|
15
|
+
makeBackend: (args: MakeBackendArgs) => Effect.Effect<SyncBackend<any>, UnexpectedError, Scope.Scope>;
|
16
|
+
/** @default { _tag: 'Skip' } */
|
17
|
+
initialSyncOptions?: InitialSyncOptions;
|
18
|
+
};
|
9
19
|
export type SyncBackend<TSyncMetadata = Schema.JsonValue> = {
|
10
20
|
pull: (args: Option.Option<{
|
11
21
|
cursor: EventId.EventId;
|
package/dist/sync/sync.d.ts.map
CHANGED
@@ -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,MAAM,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;
|
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;CACjB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IACrG,gCAAgC;IAChC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;CACxC,CAAA;AAED,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;CACtD,CAAA;;;;AAED,qBAAa,cAAe,SAAQ,mBAA0D;CAAG;;;;;;;;;;;;;;;;;;;;AAEjG,qBAAa,gBAAiB,SAAQ,qBAcpC;CAAG;;;;;;AAEL,qBAAa,gBAAiB,SAAQ,qBAEpC;CAAG"}
|
package/dist/sync/sync.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;
|
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;AAqD/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,EACF,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,iBAAiB,EAAE,OAAO,CAAC,OAAO;QAClC,UAAU,EAAE,OAAO,CAAC,OAAO;KAC5B,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"}
|
@@ -28,6 +28,7 @@ const e_0_2 = new TestEvent({ global: 0, local: 2 }, e_0_1.id, 'a', true);
|
|
28
28
|
const e_0_3 = new TestEvent({ global: 0, local: 3 }, e_0_2.id, 'a', true);
|
29
29
|
const e_1_0 = new TestEvent({ global: 1, local: 0 }, e_0_0.id, 'a', false);
|
30
30
|
const e_1_1 = new TestEvent({ global: 1, local: 1 }, e_1_0.id, 'a', true);
|
31
|
+
const e_2_0 = new TestEvent({ global: 2, local: 0 }, e_1_0.id, 'a', false);
|
31
32
|
const isEqualEvent = MutationEvent.isEqualEncoded;
|
32
33
|
const isLocalEvent = (event) => event.isLocal;
|
33
34
|
describe('syncstate', () => {
|
@@ -108,7 +109,7 @@ describe('syncstate', () => {
|
|
108
109
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_1_0]);
|
109
110
|
expect(result.newSyncState.upstreamHead).toBe(e_1_0.id);
|
110
111
|
expect(result.newSyncState.localHead).toMatchObject(e_1_0.id);
|
111
|
-
expect(result.newEvents).
|
112
|
+
expect(result.newEvents).toStrictEqual([e_1_0]);
|
112
113
|
});
|
113
114
|
it('should fail for empty rollback tail', () => {
|
114
115
|
const syncState = { pending: [], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
|
@@ -128,7 +129,7 @@ describe('syncstate', () => {
|
|
128
129
|
expectEventArraysEqual(result.newSyncState.rollbackTail, []);
|
129
130
|
expect(result.newSyncState.upstreamHead).toBe(EventId.ROOT);
|
130
131
|
expect(result.newSyncState.localHead).toMatchObject(EventId.ROOT);
|
131
|
-
expect(result.newEvents).
|
132
|
+
expect(result.newEvents).toStrictEqual([]);
|
132
133
|
});
|
133
134
|
});
|
134
135
|
describe('upstream-advance: advance', () => {
|
@@ -148,7 +149,7 @@ describe('syncstate', () => {
|
|
148
149
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0]);
|
149
150
|
expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
|
150
151
|
expect(result.newSyncState.localHead).toMatchObject(e_0_0.id);
|
151
|
-
expect(result.newEvents).
|
152
|
+
expect(result.newEvents).toStrictEqual([]);
|
152
153
|
});
|
153
154
|
it('should acknowledge partial pending event when receiving matching event', () => {
|
154
155
|
const syncState = {
|
@@ -163,7 +164,7 @@ describe('syncstate', () => {
|
|
163
164
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0]);
|
164
165
|
expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
|
165
166
|
expect(result.newSyncState.localHead).toMatchObject(e_1_0.id);
|
166
|
-
expect(result.newEvents).
|
167
|
+
expect(result.newEvents).toStrictEqual([]);
|
167
168
|
});
|
168
169
|
it('should acknowledge pending event and add new event', () => {
|
169
170
|
const syncState = { pending: [e_0_0], rollbackTail: [], upstreamHead: EventId.ROOT, localHead: e_0_0.id };
|
@@ -173,7 +174,7 @@ describe('syncstate', () => {
|
|
173
174
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_0, e_0_1]);
|
174
175
|
expect(result.newSyncState.upstreamHead).toBe(e_0_1.id);
|
175
176
|
expect(result.newSyncState.localHead).toMatchObject(e_0_1.id);
|
176
|
-
expect(result.newEvents).
|
177
|
+
expect(result.newEvents).toStrictEqual([e_0_1]);
|
177
178
|
});
|
178
179
|
it('should acknowledge pending event and add multiple new events', () => {
|
179
180
|
const syncState = { pending: [e_0_1], rollbackTail: [], upstreamHead: e_0_0.id, localHead: e_0_1.id };
|
@@ -186,7 +187,7 @@ describe('syncstate', () => {
|
|
186
187
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_0_1, e_0_2, e_0_3, e_1_0, e_1_1]);
|
187
188
|
expect(result.newSyncState.upstreamHead).toBe(e_1_1.id);
|
188
189
|
expect(result.newSyncState.localHead).toMatchObject(e_1_1.id);
|
189
|
-
expect(result.newEvents).
|
190
|
+
expect(result.newEvents).toStrictEqual([e_0_2, e_0_3, e_1_0, e_1_1]);
|
190
191
|
});
|
191
192
|
it('should ignore local events (incoming is subset of pending)', () => {
|
192
193
|
const syncState = {
|
@@ -205,7 +206,7 @@ describe('syncstate', () => {
|
|
205
206
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_r_1, e_0_0]);
|
206
207
|
expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
|
207
208
|
expect(result.newSyncState.localHead).toMatchObject(e_0_0.id);
|
208
|
-
expect(result.newEvents).
|
209
|
+
expect(result.newEvents).toStrictEqual([]);
|
209
210
|
});
|
210
211
|
it('should ignore local events (incoming is subset of pending case 2)', () => {
|
211
212
|
const syncState = {
|
@@ -224,7 +225,7 @@ describe('syncstate', () => {
|
|
224
225
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_r_1, e_0_0]);
|
225
226
|
expect(result.newSyncState.upstreamHead).toBe(e_0_0.id);
|
226
227
|
expect(result.newSyncState.localHead).toMatchObject(e_1_0.id);
|
227
|
-
expect(result.newEvents).
|
228
|
+
expect(result.newEvents).toStrictEqual([]);
|
228
229
|
});
|
229
230
|
it('should ignore local events (incoming goes beyond pending)', () => {
|
230
231
|
const syncState = {
|
@@ -243,7 +244,7 @@ describe('syncstate', () => {
|
|
243
244
|
expectEventArraysEqual(result.newSyncState.rollbackTail, [e_r_1, e_0_0, e_0_1, e_1_0]);
|
244
245
|
expect(result.newSyncState.upstreamHead).toBe(e_1_0.id);
|
245
246
|
expect(result.newSyncState.localHead).toMatchObject(e_1_0.id);
|
246
|
-
expect(result.newEvents).
|
247
|
+
expect(result.newEvents).toStrictEqual([e_1_0]);
|
247
248
|
});
|
248
249
|
});
|
249
250
|
describe('upstream-advance: rebase', () => {
|
@@ -377,10 +378,10 @@ describe('syncstate', () => {
|
|
377
378
|
const expectEventArraysEqual = (actual, expected) => {
|
378
379
|
expect(actual.length).toBe(expected.length);
|
379
380
|
actual.forEach((event, i) => {
|
380
|
-
expect(event.id).
|
381
|
-
expect(event.parentId).
|
382
|
-
expect(event.mutation).
|
383
|
-
expect(event.args).
|
381
|
+
expect(event.id).toStrictEqual(expected[i].id);
|
382
|
+
expect(event.parentId).toStrictEqual(expected[i].parentId);
|
383
|
+
expect(event.mutation).toStrictEqual(expected[i].mutation);
|
384
|
+
expect(event.args).toStrictEqual(expected[i].args);
|
384
385
|
});
|
385
386
|
};
|
386
387
|
function expectAdvance(result) {
|