Skip to content

Commit

Permalink
feat: bump blocksuite (#6078)
Browse files Browse the repository at this point in the history
  • Loading branch information
regischen authored Mar 13, 2024
1 parent 573528b commit fddbb42
Show file tree
Hide file tree
Showing 126 changed files with 891 additions and 918 deletions.
4 changes: 2 additions & 2 deletions packages/common/env/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
"private": true,
"type": "module",
"devDependencies": {
"@blocksuite/global": "0.13.0-canary-202403050653-934469c",
"@blocksuite/store": "0.13.0-canary-202403050653-934469c",
"@blocksuite/global": "0.13.0-canary-202403120738-e15d583",
"@blocksuite/store": "0.13.0-canary-202403120738-e15d583",
"react": "18.2.0",
"react-dom": "18.2.0",
"vitest": "1.3.1"
Expand Down
8 changes: 4 additions & 4 deletions packages/common/env/src/constant.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// This file should has not side effect
import type { Workspace } from '@blocksuite/store';
import type { DocCollection } from '@blocksuite/store';

declare global {
interface Window {
Expand Down Expand Up @@ -95,12 +95,12 @@ export const Messages = {
};

export class PageNotFoundError extends TypeError {
readonly workspace: Workspace;
readonly docCollection: DocCollection;
readonly pageId: string;

constructor(workspace: Workspace, pageId: string) {
constructor(docCollection: DocCollection, pageId: string) {
super();
this.workspace = workspace;
this.docCollection = docCollection;
this.pageId = pageId;
}
}
Expand Down
4 changes: 2 additions & 2 deletions packages/common/env/src/filter.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { Workspace } from '@blocksuite/store';
import type { DocCollection } from '@blocksuite/store';
import { z } from 'zod';

export const literalValueSchema: z.ZodType<LiteralValue, z.ZodTypeDef> =
Expand Down Expand Up @@ -81,4 +81,4 @@ export const tagSchema = z.object({
});
export type Tag = z.input<typeof tagSchema>;

export type PropertiesMeta = Workspace['meta']['properties'];
export type PropertiesMeta = DocCollection['meta']['properties'];
6 changes: 3 additions & 3 deletions packages/common/env/src/global.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/// <reference types="@blocksuite/global" />
import { assertEquals } from '@blocksuite/global/utils';
import type { Workspace } from '@blocksuite/store';
import type { DocCollection } from '@blocksuite/store';
import { z } from 'zod';

import { isDesktop, isServer } from './constant.js';
Expand Down Expand Up @@ -154,9 +154,9 @@ export function setupGlobal() {
globalThis.$AFFINE_SETUP = true;
}

export function setupEditorFlags(workspace: Workspace) {
export function setupEditorFlags(docCollection: DocCollection) {
Object.entries(runtimeConfig.editorFlags).forEach(([key, value]) => {
workspace.awarenessStore.setFlag(
docCollection.awarenessStore.setFlag(
key as keyof BlockSuiteFeatureFlags,
value
);
Expand Down
10 changes: 5 additions & 5 deletions packages/common/infra/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
"@affine/debug": "workspace:*",
"@affine/env": "workspace:*",
"@affine/templates": "workspace:*",
"@blocksuite/blocks": "0.13.0-canary-202403050653-934469c",
"@blocksuite/global": "0.13.0-canary-202403050653-934469c",
"@blocksuite/store": "0.13.0-canary-202403050653-934469c",
"@blocksuite/blocks": "0.13.0-canary-202403120738-e15d583",
"@blocksuite/global": "0.13.0-canary-202403120738-e15d583",
"@blocksuite/store": "0.13.0-canary-202403120738-e15d583",
"foxact": "^0.2.31",
"jotai": "^2.6.5",
"jotai-effect": "^0.6.0",
Expand All @@ -33,8 +33,8 @@
"devDependencies": {
"@affine-test/fixtures": "workspace:*",
"@affine/templates": "workspace:*",
"@blocksuite/lit": "0.13.0-canary-202403050653-934469c",
"@blocksuite/presets": "0.13.0-canary-202403050653-934469c",
"@blocksuite/lit": "0.13.0-canary-202403120738-e15d583",
"@blocksuite/presets": "0.13.0-canary-202403120738-e15d583",
"@testing-library/react": "^14.2.1",
"async-call-rpc": "^6.4.0",
"react": "^18.2.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export async function migratePages(
console.error(e);
}
});
schema.upgradeWorkspace(rootDoc);
schema.upgradeCollection(rootDoc);

// Hard code to upgrade page version to 2.
// Let e2e to ensure the data version is correct.
Expand Down
24 changes: 12 additions & 12 deletions packages/common/infra/src/blocksuite/migration/workspace.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { Workspace } from '@blocksuite/store';
import type { DocCollection } from '@blocksuite/store';
import type { Array as YArray, Doc as YDoc, Map as YMap } from 'yjs';

/**
Expand All @@ -11,14 +11,14 @@ export enum MigrationPoint {
}

export function checkWorkspaceCompatibility(
workspace: Workspace,
docCollection: DocCollection,
isCloud: boolean
): MigrationPoint | null {
// check if there is any key starts with 'space:' on root doc
const spaceMetaObj = workspace.doc.share.get('space:meta') as
const spaceMetaObj = docCollection.doc.share.get('space:meta') as
| YMap<any>
| undefined;
const docKeys = Array.from(workspace.doc.share.keys());
const docKeys = Array.from(docCollection.doc.share.keys());
const haveSpaceMeta = !!spaceMetaObj && spaceMetaObj.size > 0;
const haveLegacySpace = docKeys.some(key => key.startsWith('space:'));

Expand All @@ -28,46 +28,46 @@ export function checkWorkspaceCompatibility(
}

// exit if no pages
if (!workspace.meta.docs?.length) {
if (!docCollection.meta.docs?.length) {
return null;
}

// check guid compatibility
const meta = workspace.doc.getMap('meta') as YMap<unknown>;
const meta = docCollection.doc.getMap('meta') as YMap<unknown>;
const pages = meta.get('pages') as YArray<YMap<unknown>>;
for (const page of pages) {
const pageId = page.get('id') as string | undefined;
if (pageId?.includes(':')) {
return MigrationPoint.GuidFix;
}
}
const spaces = workspace.doc.getMap('spaces') as YMap<YDoc>;
const spaces = docCollection.doc.getMap('spaces') as YMap<YDoc>;
for (const [pageId, _] of spaces) {
if (pageId.includes(':')) {
return MigrationPoint.GuidFix;
}
}

const hasVersion = workspace.meta.hasVersion;
const hasVersion = docCollection.meta.hasVersion;
if (!hasVersion) {
return MigrationPoint.BlockVersion;
}

// TODO: Catch compatibility error from blocksuite to show upgrade page.
// Temporarily follow the check logic of blocksuite.
if ((workspace.meta.docs?.length ?? 0) <= 1) {
if ((docCollection.meta.docs?.length ?? 0) <= 1) {
try {
workspace.meta.validateVersion(workspace);
docCollection.meta.validateVersion(docCollection);
} catch (e) {
console.info('validateVersion error', e);
return MigrationPoint.BlockVersion;
}
}

// From v2, we depend on blocksuite to check and migrate data.
const blockVersions = workspace.meta.blockVersions;
const blockVersions = docCollection.meta.blockVersions;
for (const [flavour, version] of Object.entries(blockVersions ?? {})) {
const schema = workspace.schema.flavourSchemaMap.get(flavour);
const schema = docCollection.schema.flavourSchemaMap.get(flavour);
if (schema?.version !== version) {
return MigrationPoint.BlockVersion;
}
Expand Down
20 changes: 10 additions & 10 deletions packages/common/infra/src/initialization/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { WorkspaceFlavour } from '@affine/env/workspace';
import type {
CollectionInfoSnapshot,
Doc,
DocSnapshot,
JobMiddleware,
WorkspaceInfoSnapshot,
} from '@blocksuite/store';
import { Job } from '@blocksuite/store';
import { Map as YMap } from 'yjs';
Expand Down Expand Up @@ -49,17 +49,17 @@ export async function buildShowcaseWorkspace(
) {
const meta = await workspaceManager.createWorkspace(
flavour,
async (blockSuiteWorkspace, blobStorage) => {
blockSuiteWorkspace.meta.setName(workspaceName);
async (docCollection, blobStorage) => {
docCollection.meta.setName(workspaceName);
const { onboarding } = await import('@affine/templates');

const info = onboarding['info.json'] as WorkspaceInfoSnapshot;
const info = onboarding['info.json'] as CollectionInfoSnapshot;
const blob = onboarding['blob.json'] as { [key: string]: string };

const migrationMiddleware: JobMiddleware = ({ slots, workspace }) => {
const migrationMiddleware: JobMiddleware = ({ slots, collection }) => {
slots.afterImport.on(payload => {
if (payload.type === 'page') {
workspace.schema.upgradeDoc(
collection.schema.upgradeDoc(
info?.pageVersion ?? 0,
{},
payload.page.spaceDoc
Expand All @@ -69,11 +69,11 @@ export async function buildShowcaseWorkspace(
};

const job = new Job({
workspace: blockSuiteWorkspace,
collection: docCollection,
middlewares: [replaceIdMiddleware, migrationMiddleware],
});

job.snapshotToWorkspaceInfo(info);
job.snapshotToCollectionInfo(info);

// for now all onboarding assets are considered served via CDN
// hack assets so that every blob exists
Expand All @@ -92,8 +92,8 @@ export async function buildShowcaseWorkspace(
})
);

const newVersions = getLatestVersions(blockSuiteWorkspace.schema);
blockSuiteWorkspace.doc
const newVersions = getLatestVersions(docCollection.schema);
docCollection.doc
.getMap('meta')
.set('blockVersions', new YMap(Object.entries(newVersions)));

Expand Down
2 changes: 1 addition & 1 deletion packages/common/infra/src/page/manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export class PageManager {
if (!pageRecord) {
throw new Error('Page record not found');
}
const blockSuitePage = this.workspace.blockSuiteWorkspace.getDoc(pageId);
const blockSuitePage = this.workspace.docCollection.getDoc(pageId);
if (!blockSuitePage) {
throw new Error('Page not found');
}
Expand Down
4 changes: 2 additions & 2 deletions packages/common/infra/src/page/record-list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export class PageRecordList {
new Observable(subscriber => {
const emit = () => {
subscriber.next(
this.workspace.blockSuiteWorkspace.meta.docMetas.map(
this.workspace.docCollection.meta.docMetas.map(
v => new PageRecord(v.id, this.workspace, this.localState)
)
);
Expand All @@ -27,7 +27,7 @@ export class PageRecordList {
emit();

const dispose =
this.workspace.blockSuiteWorkspace.meta.docMetaUpdated.on(emit).dispose;
this.workspace.docCollection.meta.docMetaUpdated.on(emit).dispose;
return () => {
dispose();
};
Expand Down
6 changes: 3 additions & 3 deletions packages/common/infra/src/page/record.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export class PageRecord {
meta = LiveData.from<DocMeta>(
new Observable(subscriber => {
const emit = () => {
const meta = this.workspace.blockSuiteWorkspace.meta.docMetas.find(
const meta = this.workspace.docCollection.meta.docMetas.find(
page => page.id === this.id
);
if (meta === undefined) {
Expand All @@ -28,7 +28,7 @@ export class PageRecord {
emit();

const dispose =
this.workspace.blockSuiteWorkspace.meta.docMetaUpdated.on(emit).dispose;
this.workspace.docCollection.meta.docMetaUpdated.on(emit).dispose;
return () => {
dispose();
};
Expand All @@ -42,7 +42,7 @@ export class PageRecord {
);

setMeta(meta: Partial<DocMeta>): void {
this.workspace.blockSuiteWorkspace.setDocMeta(this.id, meta);
this.workspace.docCollection.setDocMeta(this.id, meta);
}

mode: LiveData<PageMode> = LiveData.from(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@ describe('Workspace System', () => {

expect(workspaceListService.workspaceList.value.length).toBe(1);

const page = workspace.blockSuiteWorkspace.createDoc({
const page = workspace.docCollection.createDoc({
id: 'page0',
});
page.load();
page.addBlock('affine:page' as keyof BlockSuite.BlockModels, {
title: new page.Text('test-page'),
});

expect(workspace.blockSuiteWorkspace.docs.size).toBe(1);
expect(workspace.docCollection.docs.size).toBe(1);
expect(
(page!.getBlockByFlavour('affine:page')[0] as any).title.toString()
).toBe('test-page');
Expand Down
6 changes: 3 additions & 3 deletions packages/common/infra/src/workspace/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
* })
*/

import { Workspace as BlockSuiteWorkspace } from '@blocksuite/store';
import { DocCollection } from '@blocksuite/store';
import { nanoid } from 'nanoid';
import type { Awareness } from 'y-protocols/awareness.js';
import type { Doc as YDoc } from 'yjs';
Expand All @@ -29,7 +29,7 @@ import { globalBlockSuiteSchema } from './global-schema';
import type { WorkspaceMetadata } from './metadata';
import { WorkspaceScope } from './service-scope';

export const BlockSuiteWorkspaceContext = createIdentifier<BlockSuiteWorkspace>(
export const BlockSuiteWorkspaceContext = createIdentifier<DocCollection>(
'BlockSuiteWorkspaceContext'
);

Expand All @@ -53,7 +53,7 @@ export function configureWorkspaceContext(
.addImpl(WorkspaceMetadataContext, workspaceMetadata)
.addImpl(WorkspaceIdContext, workspaceMetadata.id)
.addImpl(BlockSuiteWorkspaceContext, provider => {
return new BlockSuiteWorkspace({
return new DocCollection({
id: workspaceMetadata.id,
blobStorages: [
() => ({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { WorkspaceFlavour } from '@affine/env/workspace';
import { Workspace } from '@blocksuite/store';
import { DocCollection } from '@blocksuite/store';
import { beforeEach, describe, expect, test, vi } from 'vitest';
import { Doc } from 'yjs';

Expand All @@ -26,14 +26,14 @@ describe('SyncEngine', () => {
const storage2 = new MemoryMemento();
let prev: any;
{
const workspace = new Workspace({
const docCollection = new DocCollection({
id: 'test',

schema: globalBlockSuiteSchema,
});

const syncEngine = new SyncEngine(
workspace.doc,
docCollection.doc,
new TestingSyncStorage(testMeta, storage),
[
new TestingSyncStorage(testMeta, storage1),
Expand All @@ -42,7 +42,7 @@ describe('SyncEngine', () => {
);
syncEngine.start();

const page = workspace.createDoc({
const page = docCollection.createDoc({
id: 'page0',
});
page.load();
Expand All @@ -69,23 +69,23 @@ describe('SyncEngine', () => {
);
await syncEngine.waitForSynced();
syncEngine.forceStop();
prev = workspace.doc.toJSON();
prev = docCollection.doc.toJSON();
}

for (const current of [storage, storage1, storage2]) {
const workspace = new Workspace({
const docCollection = new DocCollection({
id: 'test',

schema: globalBlockSuiteSchema,
});
const syncEngine = new SyncEngine(
workspace.doc,
docCollection.doc,
new TestingSyncStorage(testMeta, current),
[]
);
syncEngine.start();
await syncEngine.waitForSynced();
expect(workspace.doc.toJSON()).toEqual({
expect(docCollection.doc.toJSON()).toEqual({
...prev,
});
syncEngine.forceStop();
Expand Down
Loading

0 comments on commit fddbb42

Please sign in to comment.