mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-30 00:29:46 +08:00
feat(nbstore): improve nbstore (#9512)
This commit is contained in:
@@ -9,6 +9,7 @@ import { DocFrontend } from '../frontend/doc';
|
||||
import { BroadcastChannelAwarenessStorage } from '../impls/broadcast-channel/awareness';
|
||||
import { IndexedDBDocStorage } from '../impls/idb';
|
||||
import { AwarenessSyncImpl } from '../sync/awareness';
|
||||
import { DocSyncImpl } from '../sync/doc';
|
||||
import { expectYjsEqual } from './utils';
|
||||
|
||||
test('doc', async () => {
|
||||
@@ -19,7 +20,7 @@ test('doc', async () => {
|
||||
|
||||
const docStorage = new IndexedDBDocStorage({
|
||||
id: 'ws1',
|
||||
peer: 'a',
|
||||
flavour: 'a',
|
||||
type: 'workspace',
|
||||
});
|
||||
|
||||
@@ -27,7 +28,7 @@ test('doc', async () => {
|
||||
|
||||
await docStorage.connection.waitForConnected();
|
||||
|
||||
const frontend1 = new DocFrontend(docStorage, null);
|
||||
const frontend1 = new DocFrontend(docStorage, DocSyncImpl.dummy);
|
||||
frontend1.start();
|
||||
frontend1.addDoc(doc1);
|
||||
await vitest.waitFor(async () => {
|
||||
@@ -42,7 +43,7 @@ test('doc', async () => {
|
||||
const doc2 = new YDoc({
|
||||
guid: 'test-doc',
|
||||
});
|
||||
const frontend2 = new DocFrontend(docStorage, null);
|
||||
const frontend2 = new DocFrontend(docStorage, DocSyncImpl.dummy);
|
||||
frontend2.start();
|
||||
frontend2.addDoc(doc2);
|
||||
|
||||
@@ -57,15 +58,11 @@ test('doc', async () => {
|
||||
|
||||
test('awareness', async () => {
|
||||
const storage1 = new BroadcastChannelAwarenessStorage({
|
||||
id: 'ws1',
|
||||
peer: 'a',
|
||||
type: 'workspace',
|
||||
id: 'ws1:a',
|
||||
});
|
||||
|
||||
const storage2 = new BroadcastChannelAwarenessStorage({
|
||||
id: 'ws1',
|
||||
peer: 'b',
|
||||
type: 'workspace',
|
||||
id: 'ws1:b',
|
||||
});
|
||||
|
||||
storage1.connection.connect();
|
||||
@@ -90,13 +87,23 @@ test('awareness', async () => {
|
||||
const awarenessC = new Awareness(docC);
|
||||
|
||||
{
|
||||
const sync = new AwarenessSyncImpl(storage1, [storage2]);
|
||||
const sync = new AwarenessSyncImpl({
|
||||
local: storage1,
|
||||
remotes: {
|
||||
b: storage2,
|
||||
},
|
||||
});
|
||||
const frontend = new AwarenessFrontend(sync);
|
||||
frontend.connect(awarenessA);
|
||||
frontend.connect(awarenessB);
|
||||
}
|
||||
{
|
||||
const sync = new AwarenessSyncImpl(storage2, [storage1]);
|
||||
const sync = new AwarenessSyncImpl({
|
||||
local: storage2,
|
||||
remotes: {
|
||||
a: storage1,
|
||||
},
|
||||
});
|
||||
const frontend = new AwarenessFrontend(sync);
|
||||
frontend.connect(awarenessC);
|
||||
}
|
||||
|
||||
@@ -19,30 +19,37 @@ test('doc', async () => {
|
||||
|
||||
const peerADoc = new IndexedDBDocStorage({
|
||||
id: 'ws1',
|
||||
peer: 'a',
|
||||
flavour: 'a',
|
||||
type: 'workspace',
|
||||
});
|
||||
|
||||
const peerASync = new IndexedDBSyncStorage({
|
||||
id: 'ws1',
|
||||
peer: 'a',
|
||||
flavour: 'a',
|
||||
type: 'workspace',
|
||||
});
|
||||
|
||||
const peerBDoc = new IndexedDBDocStorage({
|
||||
id: 'ws1',
|
||||
peer: 'b',
|
||||
flavour: 'b',
|
||||
type: 'workspace',
|
||||
});
|
||||
const peerCDoc = new IndexedDBDocStorage({
|
||||
id: 'ws1',
|
||||
peer: 'c',
|
||||
flavour: 'c',
|
||||
type: 'workspace',
|
||||
});
|
||||
|
||||
const peerA = new SpaceStorage([peerADoc, peerASync]);
|
||||
const peerB = new SpaceStorage([peerBDoc]);
|
||||
const peerC = new SpaceStorage([peerCDoc]);
|
||||
const peerA = new SpaceStorage({
|
||||
doc: peerADoc,
|
||||
sync: peerASync,
|
||||
});
|
||||
const peerB = new SpaceStorage({
|
||||
doc: peerBDoc,
|
||||
});
|
||||
const peerC = new SpaceStorage({
|
||||
doc: peerCDoc,
|
||||
});
|
||||
|
||||
peerA.connect();
|
||||
peerB.connect();
|
||||
@@ -57,7 +64,13 @@ test('doc', async () => {
|
||||
bin: update,
|
||||
});
|
||||
|
||||
const sync = new Sync(peerA, [peerB, peerC]);
|
||||
const sync = new Sync({
|
||||
local: peerA,
|
||||
remotes: {
|
||||
b: peerB,
|
||||
c: peerC,
|
||||
},
|
||||
});
|
||||
sync.start();
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
@@ -109,25 +122,31 @@ test('doc', async () => {
|
||||
test('blob', async () => {
|
||||
const a = new IndexedDBBlobStorage({
|
||||
id: 'ws1',
|
||||
peer: 'a',
|
||||
flavour: 'a',
|
||||
type: 'workspace',
|
||||
});
|
||||
|
||||
const b = new IndexedDBBlobStorage({
|
||||
id: 'ws1',
|
||||
peer: 'b',
|
||||
flavour: 'b',
|
||||
type: 'workspace',
|
||||
});
|
||||
|
||||
const c = new IndexedDBBlobStorage({
|
||||
id: 'ws1',
|
||||
peer: 'c',
|
||||
flavour: 'c',
|
||||
type: 'workspace',
|
||||
});
|
||||
|
||||
const peerA = new SpaceStorage([a]);
|
||||
const peerB = new SpaceStorage([b]);
|
||||
const peerC = new SpaceStorage([c]);
|
||||
const peerA = new SpaceStorage({
|
||||
blob: a,
|
||||
});
|
||||
const peerB = new SpaceStorage({
|
||||
blob: b,
|
||||
});
|
||||
const peerC = new SpaceStorage({
|
||||
blob: c,
|
||||
});
|
||||
|
||||
peerA.connect();
|
||||
peerB.connect();
|
||||
@@ -151,7 +170,13 @@ test('blob', async () => {
|
||||
createdAt: new Date(100),
|
||||
});
|
||||
|
||||
const sync = new Sync(peerA, [peerB, peerC]);
|
||||
const sync = new Sync({
|
||||
local: peerA,
|
||||
remotes: {
|
||||
b: peerB,
|
||||
c: peerC,
|
||||
},
|
||||
});
|
||||
sync.start();
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
|
||||
Reference in New Issue
Block a user