Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: bump blocksuite #6078

Merged
merged 4 commits into from
Mar 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading