feat(nbstore): improve nbstore (#9512)

This commit is contained in:
EYHN
2025-01-06 09:38:03 +00:00
parent a2563d2180
commit 46c8c4a408
103 changed files with 3337 additions and 3423 deletions
@@ -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));