feat: bump blocksuite (#5953)

This commit is contained in:
regischen
2024-02-29 14:33:50 +08:00
committed by GitHub
parent fa534869e1
commit d1e6b23e1a
121 changed files with 665 additions and 674 deletions

View File

@@ -3,8 +3,8 @@
"private": true,
"type": "module",
"devDependencies": {
"@blocksuite/global": "0.12.0-canary-202402220729-0868ac6",
"@blocksuite/store": "0.12.0-canary-202402220729-0868ac6",
"@blocksuite/global": "0.12.0-canary-202402271448-6d3a709",
"@blocksuite/store": "0.12.0-canary-202402271448-6d3a709",
"react": "18.2.0",
"react-dom": "18.2.0",
"vitest": "1.3.1"

View File

@@ -17,9 +17,9 @@
"@affine/debug": "workspace:*",
"@affine/env": "workspace:*",
"@affine/templates": "workspace:*",
"@blocksuite/blocks": "0.12.0-canary-202402220729-0868ac6",
"@blocksuite/global": "0.12.0-canary-202402220729-0868ac6",
"@blocksuite/store": "0.12.0-canary-202402220729-0868ac6",
"@blocksuite/blocks": "0.12.0-canary-202402271448-6d3a709",
"@blocksuite/global": "0.12.0-canary-202402271448-6d3a709",
"@blocksuite/store": "0.12.0-canary-202402271448-6d3a709",
"foxact": "^0.2.31",
"jotai": "^2.6.5",
"jotai-effect": "^0.5.0",
@@ -33,8 +33,8 @@
"devDependencies": {
"@affine-test/fixtures": "workspace:*",
"@affine/templates": "workspace:*",
"@blocksuite/lit": "0.12.0-canary-202402220729-0868ac6",
"@blocksuite/presets": "0.12.0-canary-202402220729-0868ac6",
"@blocksuite/lit": "0.12.0-canary-202402271448-6d3a709",
"@blocksuite/presets": "0.12.0-canary-202402271448-6d3a709",
"@testing-library/react": "^14.2.1",
"async-call-rpc": "^6.4.0",
"react": "^18.2.0",

View File

@@ -30,7 +30,7 @@ export async function migratePages(
spaces.forEach((space: YDoc) => {
try {
// Catch page upgrade error to avoid blocking the whole workspace migration.
schema.upgradePage(0, oldVersions, space);
schema.upgradeDoc(0, oldVersions, space);
} catch (e) {
console.error(e);
}

View File

@@ -28,7 +28,7 @@ export function checkWorkspaceCompatibility(
}
// exit if no pages
if (!workspace.meta.pages?.length) {
if (!workspace.meta.docs?.length) {
return null;
}
@@ -55,7 +55,7 @@ export function checkWorkspaceCompatibility(
// TODO: Catch compatibility error from blocksuite to show upgrade page.
// Temporarily follow the check logic of blocksuite.
if ((workspace.meta.pages?.length ?? 0) <= 1) {
if ((workspace.meta.docs?.length ?? 0) <= 1) {
try {
workspace.meta.validateVersion(workspace);
} catch (e) {

View File

@@ -1,8 +1,8 @@
import type { WorkspaceFlavour } from '@affine/env/workspace';
import type {
Doc,
DocSnapshot,
JobMiddleware,
Page,
PageSnapshot,
WorkspaceInfoSnapshot,
} from '@blocksuite/store';
import { Job } from '@blocksuite/store';
@@ -13,7 +13,7 @@ import { PageRecordList } from '../page';
import type { WorkspaceManager } from '../workspace';
import { replaceIdMiddleware } from './middleware';
export function initEmptyPage(page: Page, title?: string) {
export function initEmptyPage(page: Doc, title?: string) {
page.load(() => {
const pageBlockId = page.addBlock('affine:page', {
title: new page.Text(title ?? ''),
@@ -44,7 +44,7 @@ export async function buildShowcaseWorkspace(
const migrationMiddleware: JobMiddleware = ({ slots, workspace }) => {
slots.afterImport.on(payload => {
if (payload.type === 'page') {
workspace.schema.upgradePage(
workspace.schema.upgradeDoc(
info?.pageVersion ?? 0,
{},
payload.page.spaceDoc
@@ -65,15 +65,15 @@ export async function buildShowcaseWorkspace(
// @ts-expect-error - rethinking API
job._assetsManager.writeToBlob = async () => {};
const pageSnapshots: PageSnapshot[] = Object.entries(onboarding)
const docSnapshots: DocSnapshot[] = Object.entries(onboarding)
.filter(([key]) => {
return key.endsWith('snapshot.json');
})
.map(([_, value]) => value as unknown as PageSnapshot);
.map(([_, value]) => value as unknown as DocSnapshot);
await Promise.all(
pageSnapshots.map(snapshot => {
return job.snapshotToPage(snapshot);
docSnapshots.map(snapshot => {
return job.snapshotToDoc(snapshot);
})
);

View File

@@ -1,10 +1,10 @@
import type { Page as BlockSuitePage } from '@blocksuite/store';
import type { Doc as BlockSuiteDoc } from '@blocksuite/store';
import { createIdentifier, type ServiceCollection } from '../di';
import type { PageRecord } from './record';
import { PageScope } from './service-scope';
export const BlockSuitePageContext = createIdentifier<BlockSuitePage>(
export const BlockSuitePageContext = createIdentifier<BlockSuiteDoc>(
'BlockSuitePageContext'
);
@@ -13,7 +13,7 @@ export const PageRecordContext =
export function configurePageContext(
services: ServiceCollection,
blockSuitePage: BlockSuitePage,
blockSuitePage: BlockSuiteDoc,
pageRecord: PageRecord
) {
services

View File

@@ -9,7 +9,7 @@ import { CleanupService } from '../lifecycle';
import { Workspace, WorkspaceLocalState, WorkspaceScope } from '../workspace';
import { BlockSuitePageContext, PageRecordContext } from './context';
import { PageManager } from './manager';
import { Page } from './page';
import { Doc } from './page';
import { PageRecordList } from './record-list';
import { PageScope } from './service-scope';
@@ -22,5 +22,5 @@ export function configurePageServices(services: ServiceCollection) {
services
.scope(PageScope)
.add(CleanupService)
.add(Page, [PageRecordContext, BlockSuitePageContext, ServiceProvider]);
.add(Doc, [PageRecordContext, BlockSuitePageContext, ServiceProvider]);
}

View File

@@ -3,11 +3,11 @@ import { ObjectPool } from '../utils/object-pool';
import type { Workspace } from '../workspace';
import type { PageRecordList } from '.';
import { configurePageContext } from './context';
import { Page } from './page';
import { Doc } from './page';
import { PageScope } from './service-scope';
export class PageManager {
pool = new ObjectPool<string, Page>({});
pool = new ObjectPool<string, Doc>({});
constructor(
private readonly workspace: Workspace,
@@ -20,7 +20,7 @@ export class PageManager {
if (!pageRecord) {
throw new Error('Page record not found');
}
const blockSuitePage = this.workspace.blockSuiteWorkspace.getPage(pageId);
const blockSuitePage = this.workspace.blockSuiteWorkspace.getDoc(pageId);
if (!blockSuitePage) {
throw new Error('Page not found');
}
@@ -41,7 +41,7 @@ export class PageManager {
this.serviceProvider
);
const page = provider.get(Page);
const page = provider.get(Doc);
const { obj, release } = this.pool.put(pageId, page);

View File

@@ -1,12 +1,12 @@
import type { Page as BlockSuitePage } from '@blocksuite/store';
import type { Doc as BlockSuiteDoc } from '@blocksuite/store';
import type { ServiceProvider } from '@toeverything/infra/di';
import type { PageMode, PageRecord } from './record';
export class Page {
export class Doc {
constructor(
public readonly record: PageRecord,
public readonly blockSuitePage: BlockSuitePage,
public readonly blockSuiteDoc: BlockSuiteDoc,
public readonly services: ServiceProvider
) {}

View File

@@ -18,7 +18,7 @@ export class PageRecordList {
new Observable(subscriber => {
const emit = () => {
subscriber.next(
this.workspace.blockSuiteWorkspace.meta.pageMetas.map(
this.workspace.blockSuiteWorkspace.meta.docMetas.map(
v => new PageRecord(v.id, this.workspace, this.localState)
)
);
@@ -27,9 +27,7 @@ export class PageRecordList {
emit();
const dispose =
this.workspace.blockSuiteWorkspace.meta.pageMetasUpdated.on(
emit
).dispose;
this.workspace.blockSuiteWorkspace.meta.docMetaUpdated.on(emit).dispose;
return () => {
dispose();
};

View File

@@ -1,4 +1,4 @@
import type { PageMeta } from '@blocksuite/store';
import type { DocMeta } from '@blocksuite/store';
import { Observable } from 'rxjs';
import { LiveData } from '../livedata';
@@ -13,10 +13,10 @@ export class PageRecord {
private readonly localState: WorkspaceLocalState
) {}
meta = LiveData.from<PageMeta>(
meta = LiveData.from<DocMeta>(
new Observable(subscriber => {
const emit = () => {
const meta = this.workspace.blockSuiteWorkspace.meta.pageMetas.find(
const meta = this.workspace.blockSuiteWorkspace.meta.docMetas.find(
page => page.id === this.id
);
if (meta === undefined) {
@@ -28,9 +28,7 @@ export class PageRecord {
emit();
const dispose =
this.workspace.blockSuiteWorkspace.meta.pageMetasUpdated.on(
emit
).dispose;
this.workspace.blockSuiteWorkspace.meta.docMetaUpdated.on(emit).dispose;
return () => {
dispose();
};
@@ -43,8 +41,8 @@ export class PageRecord {
}
);
setMeta(meta: Partial<PageMeta>): void {
this.workspace.blockSuiteWorkspace.setPageMeta(this.id, meta);
setMeta(meta: Partial<DocMeta>): void {
this.workspace.blockSuiteWorkspace.setDocMeta(this.id, meta);
}
mode: LiveData<PageMode> = LiveData.from(

View File

@@ -22,7 +22,7 @@ describe('Workspace System', () => {
expect(workspaceListService.workspaceList.value.length).toBe(1);
const page = workspace.blockSuiteWorkspace.createPage({
const page = workspace.blockSuiteWorkspace.createDoc({
id: 'page0',
});
page.load();
@@ -30,7 +30,7 @@ describe('Workspace System', () => {
title: new page.Text('test-page'),
});
expect(workspace.blockSuiteWorkspace.pages.size).toBe(1);
expect(workspace.blockSuiteWorkspace.docs.size).toBe(1);
expect(
(page!.getBlockByFlavour('affine:page')[0] as any).title.toString()
).toBe('test-page');

View File

@@ -42,7 +42,7 @@ describe('SyncEngine', () => {
);
syncEngine.start();
const page = workspace.createPage({
const page = workspace.createDoc({
id: 'page0',
});
page.load();

View File

@@ -35,7 +35,7 @@ describe('SyncPeer', () => {
);
await syncPeer.waitForLoaded();
const page = workspace.createPage({
const page = workspace.createDoc({
id: 'page0',
});
page.load();
@@ -85,7 +85,7 @@ describe('SyncPeer', () => {
await syncPeer.waitForSynced();
expect(syncPeer.status.step).toBe(SyncPeerStep.Synced);
const page = workspace.createPage({
const page = workspace.createDoc({
id: 'page0',
});
expect(syncPeer.status.step).toBe(SyncPeerStep.LoadingSubDoc);

View File

@@ -32,14 +32,14 @@
}
},
"dependencies": {
"@blocksuite/global": "0.12.0-canary-202402220729-0868ac6",
"@blocksuite/global": "0.12.0-canary-202402271448-6d3a709",
"idb": "^8.0.0",
"nanoid": "^5.0.6",
"y-provider": "workspace:*"
},
"devDependencies": {
"@blocksuite/blocks": "0.12.0-canary-202402220729-0868ac6",
"@blocksuite/store": "0.12.0-canary-202402220729-0868ac6",
"@blocksuite/blocks": "0.12.0-canary-202402271448-6d3a709",
"@blocksuite/store": "0.12.0-canary-202402271448-6d3a709",
"fake-indexeddb": "^5.0.2",
"vite": "^5.1.4",
"vite-plugin-dts": "3.7.3",

View File

@@ -7,12 +7,12 @@ import { setTimeout } from 'node:timers/promises';
import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models';
import { assertExists } from '@blocksuite/global/utils';
import type { Page } from '@blocksuite/store';
import type { Doc } from '@blocksuite/store';
import { Schema, Workspace } from '@blocksuite/store';
import { openDB } from 'idb';
import { nanoid } from 'nanoid';
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
import { applyUpdate, Doc, encodeStateAsUpdate } from 'yjs';
import { applyUpdate, Doc as YDoc, encodeStateAsUpdate } from 'yjs';
import type { WorkspacePersist } from '../index';
import {
@@ -27,7 +27,7 @@ import {
setMergeCount,
} from '../index';
function initEmptyPage(page: Page) {
function initEmptyPage(page: Doc) {
const pageBlockId = page.addBlock('affine:page', {
title: new page.Text(''),
});
@@ -99,9 +99,9 @@ describe('indexeddb provider', () => {
},
],
});
const page = workspace.createPage({ id: 'page0' });
page.waitForLoaded();
const pageBlockId = page.addBlock('affine:page', { title: '' });
const page = workspace.createDoc({ id: 'page0' });
page.load();
const pageBlockId = page.addBlock('affine:page', {});
const frameId = page.addBlock('affine:note', {}, pageBlockId);
page.addBlock('affine:paragraph', {}, frameId);
}
@@ -129,7 +129,7 @@ describe('indexeddb provider', () => {
| WorkspacePersist
| undefined;
assertExists(data);
testWorkspace.getPage('page0')?.waitForLoaded();
testWorkspace.getDoc('page0')?.load();
data.updates.forEach(({ update }) => {
Workspace.Y.applyUpdate(subPage, update);
});
@@ -147,9 +147,9 @@ describe('indexeddb provider', () => {
provider.disconnect();
expect(provider.connected).toBe(false);
{
const page = workspace.createPage({ id: 'page0' });
page.waitForLoaded();
const pageBlockId = page.addBlock('affine:page', { title: '' });
const page = workspace.createDoc({ id: 'page0' });
page.load();
const pageBlockId = page.addBlock('affine:page');
const frameId = page.addBlock('affine:note', {}, pageBlockId);
page.addBlock('affine:paragraph', {}, frameId);
}
@@ -202,9 +202,9 @@ describe('indexeddb provider', () => {
const provider = createIndexedDBProvider(workspace.doc, rootDBName);
provider.connect();
{
const page = workspace.createPage({ id: 'page0' });
page.waitForLoaded();
const pageBlockId = page.addBlock('affine:page', { title: '' });
const page = workspace.createDoc({ id: 'page0' });
page.load();
const pageBlockId = page.addBlock('affine:page');
const frameId = page.addBlock('affine:note', {}, pageBlockId);
for (let i = 0; i < 99; i++) {
page.addBlock('affine:paragraph', {}, frameId);
@@ -250,7 +250,7 @@ describe('indexeddb provider', () => {
expect(event).toBe('beforeunload');
return oldRemoveEventListener(event, fn, options);
});
const doc = new Doc({
const doc = new YDoc({
guid: '1',
});
const provider = createIndexedDBProvider(doc);
@@ -270,7 +270,7 @@ describe('indexeddb provider', () => {
describe('milestone', () => {
test('milestone', async () => {
const doc = new Doc();
const doc = new YDoc();
const map = doc.getMap('map');
const array = doc.getArray('array');
map.set('1', 1);
@@ -281,7 +281,7 @@ describe('milestone', () => {
expect(milestones).toBeDefined();
expect(Object.keys(milestones).length).toBe(1);
expect(milestones.test1).toBeInstanceOf(Uint8Array);
const snapshot = new Doc();
const snapshot = new YDoc();
applyUpdate(snapshot, milestones.test1);
{
const map = snapshot.getMap('map');
@@ -316,7 +316,7 @@ describe('milestone', () => {
expect(fn).toBeCalled();
const doc2 = new Doc();
const doc2 = new YDoc();
applyUpdate(doc2, encodeStateAsUpdate(doc));
revertUpdate(doc2, milestones.test1, key =>
@@ -333,11 +333,11 @@ describe('subDoc', () => {
test('basic', async () => {
let json1: any, json2: any;
{
const doc = new Doc({
const doc = new YDoc({
guid: 'test',
});
const map = doc.getMap();
const subDoc = new Doc();
const subDoc = new YDoc();
subDoc.load();
map.set('1', subDoc);
map.set('2', 'test');
@@ -348,14 +348,14 @@ describe('subDoc', () => {
json1 = doc.toJSON();
}
{
const doc = new Doc({
const doc = new YDoc({
guid: 'test',
});
const provider = createIndexedDBProvider(doc);
provider.connect();
await setTimeout(200);
const map = doc.getMap();
const subDoc = map.get('1') as Doc;
const subDoc = map.get('1') as YDoc;
subDoc.load();
provider.disconnect();
json2 = doc.toJSON();
@@ -366,17 +366,17 @@ describe('subDoc', () => {
});
test('blocksuite', async () => {
const page0 = workspace.createPage({
const page0 = workspace.createDoc({
id: 'page0',
});
page0.waitForLoaded();
page0.load();
const { paragraphBlockId: paragraphBlockIdPage1 } = initEmptyPage(page0);
const provider = createIndexedDBProvider(workspace.doc, rootDBName);
provider.connect();
const page1 = workspace.createPage({
const page1 = workspace.createDoc({
id: 'page1',
});
page1.waitForLoaded();
page1.load();
const { paragraphBlockId: paragraphBlockIdPage2 } = initEmptyPage(page1);
await setTimeout(200);
provider.disconnect();
@@ -389,15 +389,15 @@ describe('subDoc', () => {
const provider = createIndexedDBProvider(newWorkspace.doc, rootDBName);
provider.connect();
await setTimeout(200);
const page0 = newWorkspace.getPage('page0') as Page;
page0.waitForLoaded();
const page0 = newWorkspace.getDoc('page0') as Doc;
page0.load();
await setTimeout(200);
{
const block = page0.getBlockById(paragraphBlockIdPage1);
assertExists(block);
}
const page1 = newWorkspace.getPage('page1') as Page;
page1.waitForLoaded();
const page1 = newWorkspace.getDoc('page1') as Doc;
page1.load();
await setTimeout(200);
{
const block = page1.getBlockById(paragraphBlockIdPage2);
@@ -409,8 +409,8 @@ describe('subDoc', () => {
describe('utils', () => {
test('download binary', async () => {
const page = workspace.createPage({ id: 'page0' });
page.waitForLoaded();
const page = workspace.createDoc({ id: 'page0' });
page.load();
initEmptyPage(page);
const provider = createIndexedDBProvider(workspace.doc, rootDBName);
provider.connect();
@@ -437,7 +437,7 @@ describe('utils', () => {
});
test('overwrite binary', async () => {
const doc = new Doc();
const doc = new YDoc();
const map = doc.getMap();
map.set('1', 1);
await overwriteBinary('test', new Uint8Array(encodeStateAsUpdate(doc)));

View File

@@ -24,7 +24,7 @@
"build": "vite build"
},
"devDependencies": {
"@blocksuite/store": "0.12.0-canary-202402220729-0868ac6",
"@blocksuite/store": "0.12.0-canary-202402271448-6d3a709",
"vite": "^5.1.4",
"vite-plugin-dts": "3.7.3",
"vitest": "1.3.1",