chore: bump up @blocksuite/affine version to v0.18.0 (#8899)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@blocksuite/affine](https://redirect.github.com/toeverything/blocksuite) ([source](https://redirect.github.com/toeverything/blocksuite/tree/HEAD/packages/affine/all), [changelog](https://redirect.github.com/toeverything/blocksuite/blob/master/packages/blocks/CHANGELOG.md)) | [`0.17.33` -> `0.18.0`](https://renovatebot.com/diffs/npm/@blocksuite%2faffine/0.17.33/0.18.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@blocksuite%2faffine/0.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@blocksuite%2faffine/0.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@blocksuite%2faffine/0.17.33/0.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@blocksuite%2faffine/0.17.33/0.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>toeverything/blocksuite (@&#8203;blocksuite/affine)</summary>

### [`v0.18.0`](https://redirect.github.com/toeverything/blocksuite/blob/HEAD/packages/affine/all/CHANGELOG.md#0180)

[Compare Source](https://redirect.github.com/toeverything/blocksuite/compare/v0.17.33...v0.18.0)

##### Minor Changes

-   [`9daa1f3`](https://redirect.github.com/toeverything/blocksuite/commit/9daa1f3): ## Feat

    -   feat(blocks): markdown adapter reference serialization and deserialization ([#&#8203;8782](https://redirect.github.com/toeverything/blocksuite/issues/8782))
    -   feat(blocks): add lazy loading to image and iframe ([#&#8203;8773](https://redirect.github.com/toeverything/blocksuite/issues/8773))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xOS4wIiwidXBkYXRlZEluVmVyIjoiMzkuMTkuMCIsInRhcmdldEJyYW5jaCI6ImNhbmFyeSIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
This commit is contained in:
renovate
2024-11-25 08:58:21 +00:00
parent 0a20332674
commit 70633d0d16
37 changed files with 196 additions and 1354 deletions

View File

@@ -173,31 +173,6 @@ jobs:
path: ./test-results
if-no-files-found: ignore
e2e-migration-test:
name: E2E Migration Test
runs-on: ubuntu-latest
env:
DISTRIBUTION: web
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: ./.github/actions/setup-node
with:
playwright-install: true
electron-install: false
full-cache: true
- name: Run playwright tests
run: yarn workspace @affine-test/affine-migration e2e --forbid-only
- name: Upload test results
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: test-results-e2e-migration
path: ./test-results
if-no-files-found: ignore
unit-test:
name: Unit Test
runs-on: ubuntu-latest
@@ -766,7 +741,6 @@ jobs:
- check-yarn-binary
- e2e-test
- e2e-mobile-test
- e2e-migration-test
- unit-test
- build-native
- build-server-native

View File

@@ -3,7 +3,7 @@
"private": true,
"type": "module",
"devDependencies": {
"@blocksuite/affine": "0.17.33",
"@blocksuite/affine": "0.18.0",
"vitest": "2.1.4"
},
"exports": {

View File

@@ -15,7 +15,7 @@
"@affine/debug": "workspace:*",
"@affine/env": "workspace:*",
"@affine/templates": "workspace:*",
"@blocksuite/affine": "0.17.33",
"@blocksuite/affine": "0.18.0",
"@datastructures-js/binary-search-tree": "^5.3.2",
"eventemitter2": "^6.4.9",
"foxact": "^0.2.33",

View File

@@ -1,84 +0,0 @@
import { readFileSync } from 'node:fs';
import { dirname, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
import { describe, expect, test } from 'vitest';
import type { Array as YArray, Map as YMap } from 'yjs';
import { applyUpdate, Doc } from 'yjs';
import { migrateToSubdoc } from '../blocksuite/index.js';
const fixturePath = resolve(
dirname(fileURLToPath(import.meta.url)),
'workspace.ydoc'
);
const yDocBuffer = readFileSync(fixturePath);
const doc = new Doc();
applyUpdate(doc, new Uint8Array(yDocBuffer));
const migratedDoc = migrateToSubdoc(doc);
describe('migration', () => {
test('migration to subdoc', async () => {
const { default: json } = await import('@affine-test/fixtures/output.json');
const length = Object.keys(json).length;
const binary = new Uint8Array(length);
for (let i = 0; i < length; i++) {
binary[i] = (json as any)[i];
}
const doc = new Doc();
applyUpdate(doc, binary);
{
// invoke data
doc.getMap('space:hello-world');
doc.getMap('space:meta');
}
const blocks = doc.getMap('space:hello-world').toJSON();
const newDoc = migrateToSubdoc(doc);
const subDoc = newDoc.getMap('spaces').values().next().value as Doc;
const data = (subDoc.toJSON() as any).blocks;
Object.keys(data).forEach(id => {
if (id === 'xyWNqindHH') {
return;
}
if (
blocks[id]['sys:flavour'] === 'affine:surface' &&
!blocks[id]['prop:elements']
) {
blocks[id]['prop:elements'] = data[id]['prop:elements'];
}
expect(data[id]).toEqual(blocks[id]);
});
});
test('test fixture should be set correctly', () => {
const meta = doc.getMap('space:meta');
const versions = meta.get('versions') as YMap<unknown>;
expect(versions.get('affine:code')).toBeTypeOf('number');
});
test('metadata should be migrated correctly', () => {
const originalMeta = doc.getMap('space:meta');
const originalVersions = originalMeta.get('versions') as YMap<unknown>;
const meta = migratedDoc.getMap('meta');
const blockVersions = meta.get('blockVersions') as YMap<unknown>;
expect(meta.get('workspaceVersion')).toBe(1);
expect(blockVersions.get('affine:code')).toBe(
originalVersions.get('affine:code')
);
expect((meta.get('pages') as YArray<unknown>).length).toBe(
(originalMeta.get('pages') as YArray<unknown>).length
);
expect(blockVersions.get('affine:embed')).toBeUndefined();
expect(blockVersions.get('affine:image')).toBe(
originalVersions.get('affine:embed')
);
expect(blockVersions.get('affine:frame')).toBeUndefined();
expect(blockVersions.get('affine:note')).toBe(
originalVersions.get('affine:frame')
);
});
});

View File

@@ -1,19 +1 @@
export * from './blocks';
export {
migratePages as forceUpgradePages,
migrateGuidCompatibility,
} from './migration/blocksuite'; // campatible with electron
export * from './migration/fixing';
export { migrateToSubdoc, upgradeV1ToV2 } from './migration/subdoc';
export * from './migration/workspace';
/**
* @deprecated
* Use workspace meta data to determine the workspace version.
*/
export enum WorkspaceVersion {
// v1 is treated as undefined
SubDoc = 2,
DatabaseV3 = 3,
Surface = 4,
}

View File

@@ -1,100 +0,0 @@
import type { Schema } from '@blocksuite/affine/store';
import type { Array as YArray } from 'yjs';
import {
applyUpdate,
Doc as YDoc,
encodeStateAsUpdate,
Map as YMap,
transact,
} from 'yjs';
export const getLatestVersions = (schema: Schema): Record<string, number> => {
return [...schema.flavourSchemaMap.entries()].reduce(
(record, [flavour, schema]) => {
record[flavour] = schema.version;
return record;
},
{} as Record<string, number>
);
};
export async function migratePages(
rootDoc: YDoc,
schema: Schema
): Promise<boolean> {
const spaces = rootDoc.getMap('spaces') as YMap<any>;
const meta = rootDoc.getMap('meta') as YMap<unknown>;
const versions = meta.get('blockVersions') as YMap<number>;
const oldVersions = versions?.toJSON() ?? {};
spaces.forEach((space: YDoc) => {
try {
// Catch page upgrade error to avoid blocking the whole workspace migration.
schema.upgradeDoc(0, oldVersions, space);
} catch (e) {
console.error(e);
}
});
schema.upgradeCollection(rootDoc);
// Hard code to upgrade page version to 2.
// Let e2e to ensure the data version is correct.
return transact(
rootDoc,
() => {
const pageVersion = meta.get('pageVersion');
if (typeof pageVersion !== 'number' || pageVersion < 2) {
meta.set('pageVersion', 2);
}
const newVersions = getLatestVersions(schema);
meta.set('blockVersions', new YMap(Object.entries(newVersions)));
return Object.entries(oldVersions).some(
([flavour, version]) => newVersions[flavour] !== version
);
},
'migratePages',
/**
* transact as remote update, because blocksuite will skip local changes.
* https://github.com/toeverything/blocksuite/blob/9c2df3f7aa5617c050e0dccdd73e99bb67e0c0f7/packages/store/src/reactive/utils.ts#L143
*/
false
);
}
// patch root doc's space guid compatibility issue
//
// in version 0.10, page id in spaces no longer has prefix "space:"
// The data flow for fetching a doc's updates is:
// - page id in `meta.pages` -> find `${page-id}` in `doc.spaces` -> `doc` -> `doc.guid`
// if `doc` is not found in `doc.spaces`, a new doc will be created and its `doc.guid` is the same with its pageId
// - because of guid logic change, the doc that previously prefixed with "space:" will not be found in `doc.spaces`
// - when fetching the rows of this doc using the doc id === page id,
// it will return empty since there is no updates associated with the page id
export function migrateGuidCompatibility(rootDoc: YDoc) {
const meta = rootDoc.getMap('meta') as YMap<unknown>;
const pages = meta.get('pages') as YArray<YMap<unknown>>;
pages?.forEach(page => {
const pageId = page.get('id') as string | undefined;
if (pageId?.includes(':')) {
// remove the prefix "space:" from page id
page.set('id', pageId.split(':').at(-1));
}
});
const spaces = rootDoc.getMap('spaces') as YMap<YDoc>;
spaces?.forEach((doc: YDoc, pageId: string) => {
if (pageId.includes(':')) {
const newPageId = pageId.split(':').at(-1) ?? pageId;
const newDoc = new YDoc();
// clone the original doc. yjs is not happy to use the same doc instance
applyUpdate(newDoc, encodeStateAsUpdate(doc));
newDoc.guid = doc.guid;
spaces.set(newPageId, newDoc);
// should remove the old doc, otherwise we will do it again in the next run
spaces.delete(pageId);
console.debug(
`fixed space id ${pageId} -> ${newPageId}, doc id: ${doc.guid}`
);
}
});
}

View File

@@ -1,49 +0,0 @@
import type { Doc as YDoc, Map as YMap } from 'yjs';
import { transact } from 'yjs';
/**
* Hard code to fix workspace version to be compatible with legacy data.
* Let e2e to ensure the data version is correct.
*/
export function fixWorkspaceVersion(rootDoc: YDoc) {
const meta = rootDoc.getMap('meta') as YMap<unknown>;
/**
* It doesn't matter to upgrade workspace version from 1 or undefined to 2.
* Blocksuite just set the value, do nothing else.
*/
function doFix() {
if (meta.size === 0) {
return;
}
const workspaceVersion = meta.get('workspaceVersion');
if (typeof workspaceVersion !== 'number' || workspaceVersion < 2) {
transact(
rootDoc,
() => {
meta.set('workspaceVersion', 2);
},
'fixWorkspaceVersion',
// transact as remote update, because blocksuite will skip local changes.
false
);
}
const pageVersion = meta.get('pageVersion');
if (typeof pageVersion !== 'number' || pageVersion < 2) {
transact(
rootDoc,
() => {
meta.set('pageVersion', 2);
},
'fixPageVersion',
// transact as remote update, because blocksuite will skip local changes.
false
);
}
}
doFix();
// do fix every time when meta changed
meta.observe(() => doFix());
}

View File

@@ -1,284 +0,0 @@
import { nanoid } from 'nanoid';
import {
applyUpdate,
Array as YArray,
Doc as YDoc,
encodeStateAsUpdate,
Map as YMap,
} from 'yjs';
const migrationOrigin = 'affine-migration';
type XYWH = [number, number, number, number];
function deserializeXYWH(xywh: string): XYWH {
return JSON.parse(xywh) as XYWH;
}
function migrateDatabase(data: YMap<unknown>) {
data.delete('prop:mode');
data.set('prop:views', new YArray());
const columns = (data.get('prop:columns') as YArray<unknown>).toJSON() as {
id: string;
name: string;
hide: boolean;
type: string;
width: number;
selection?: unknown[];
}[];
const views = [
{
id: 'default',
name: 'Table',
columns: columns.map(col => ({
id: col.id,
width: col.width,
hide: col.hide,
})),
filter: { type: 'group', op: 'and', conditions: [] },
mode: 'table',
},
];
const cells = (data.get('prop:cells') as YMap<unknown>).toJSON() as Record<
string,
Record<
string,
{
id: string;
value: unknown;
}
>
>;
const convertColumn = (
id: string,
update: (cell: { id: string; value: unknown }) => void
) => {
Object.values(cells).forEach(row => {
if (row[id] !== null && row[id] !== undefined) {
update(row[id]);
}
});
};
const newColumns = columns.map(v => {
let data: Record<string, unknown> = {};
if (v.type === 'select' || v.type === 'multi-select') {
data = { options: v.selection };
if (v.type === 'select') {
convertColumn(v.id, cell => {
if (Array.isArray(cell.value)) {
cell.value = cell.value[0]?.id;
}
});
} else {
convertColumn(v.id, cell => {
if (Array.isArray(cell.value)) {
cell.value = cell.value.map(v => v.id);
}
});
}
}
if (v.type === 'number') {
convertColumn(v.id, cell => {
if (typeof cell.value === 'string') {
cell.value = Number.parseFloat(cell.value.toString());
}
});
}
return {
id: v.id,
type: v.type,
name: v.name,
data,
};
});
data.set('prop:columns', newColumns);
data.set('prop:views', views);
data.set('prop:cells', cells);
}
function runBlockMigration(
flavour: string,
data: YMap<unknown>,
version: number
) {
if (flavour === 'affine:frame') {
data.set('sys:flavour', 'affine:note');
return;
}
if (flavour === 'affine:surface' && version <= 3) {
if (data.has('elements')) {
const elements = data.get('elements') as YMap<unknown>;
migrateSurface(elements);
data.set('prop:elements', elements.clone());
data.delete('elements');
} else {
data.set('prop:elements', new YMap());
}
}
if (flavour === 'affine:embed') {
data.set('sys:flavour', 'affine:image');
data.delete('prop:type');
}
if (flavour === 'affine:database' && version < 2) {
migrateDatabase(data);
}
}
function migrateSurface(data: YMap<unknown>) {
for (const [, value] of <IterableIterator<[string, YMap<unknown>]>>(
data.entries()
)) {
if (value.get('type') === 'connector') {
migrateSurfaceConnector(value);
}
}
}
function migrateSurfaceConnector(data: YMap<any>) {
let id = data.get('startElement')?.id;
const controllers = data.get('controllers');
const length = controllers.length;
const xywh = deserializeXYWH(data.get('xywh'));
if (id) {
data.set('source', { id });
} else {
data.set('source', {
position: [controllers[0].x + xywh[0], controllers[0].y + xywh[1]],
});
}
id = data.get('endElement')?.id;
if (id) {
data.set('target', { id });
} else {
data.set('target', {
position: [
controllers[length - 1].x + xywh[0],
controllers[length - 1].y + xywh[1],
],
});
}
const width = data.get('lineWidth') ?? 4;
data.set('strokeWidth', width);
const color = data.get('color');
data.set('stroke', color);
data.delete('startElement');
data.delete('endElement');
data.delete('controllers');
data.delete('lineWidth');
data.delete('color');
data.delete('xywh');
}
function updateBlockVersions(versions: YMap<number>) {
const frameVersion = versions.get('affine:frame');
if (frameVersion !== undefined) {
versions.set('affine:note', frameVersion);
versions.delete('affine:frame');
}
const embedVersion = versions.get('affine:embed');
if (embedVersion !== undefined) {
versions.set('affine:image', embedVersion);
versions.delete('affine:embed');
}
const databaseVersion = versions.get('affine:database');
if (databaseVersion !== undefined && databaseVersion < 2) {
versions.set('affine:database', 2);
}
}
function migrateMeta(
oldDoc: YDoc,
newDoc: YDoc,
idMap: Record<string, string>
) {
const originalMeta = oldDoc.getMap('space:meta');
const originalVersions = originalMeta.get('versions') as YMap<number>;
const originalPages = originalMeta.get('pages') as YArray<YMap<string>>;
const meta = newDoc.getMap('meta');
const pages = new YArray();
const blockVersions = originalVersions.clone();
meta.set('workspaceVersion', 1);
meta.set('blockVersions', blockVersions);
meta.set('pages', pages);
meta.set('name', originalMeta.get('name') as string);
updateBlockVersions(blockVersions);
const mapList = originalPages.map(page => {
const map = new YMap();
Array.from(page.entries())
.filter(([key]) => key !== 'subpageIds')
.forEach(([key, value]) => {
if (key === 'id') {
idMap[value] = nanoid();
map.set(key, idMap[value]);
} else {
map.set(key, value);
}
});
return map;
});
pages.push(mapList);
}
function migrateBlocks(
oldDoc: YDoc,
newDoc: YDoc,
idMap: Record<string, string>
) {
const spaces = newDoc.getMap('spaces');
const originalMeta = oldDoc.getMap('space:meta');
const originalVersions = originalMeta.get('versions') as YMap<number>;
const originalPages = originalMeta.get('pages') as YArray<YMap<unknown>>;
originalPages.forEach(page => {
const id = page.get('id') as string;
const newId = idMap[id];
const spaceId = id.startsWith('space:') ? id : `space:${id}`;
const originalBlocks = oldDoc.getMap(spaceId) as YMap<unknown>;
const subdoc = new YDoc();
spaces.set(newId, subdoc);
subdoc.guid = id;
const blocks = subdoc.getMap('blocks');
Array.from(originalBlocks.entries()).forEach(([key, value]) => {
// @ts-expect-error clone method exists
const blockData = value.clone();
blocks.set(key, blockData);
const flavour = blockData.get('sys:flavour') as string;
const version = originalVersions.get(flavour);
if (version !== undefined) {
runBlockMigration(flavour, blockData, version);
}
});
});
}
export function migrateToSubdoc(oldDoc: YDoc): YDoc {
const needMigration =
Array.from(oldDoc.getMap('space:meta').keys()).length > 0;
if (!needMigration) {
return oldDoc;
}
const newDoc = new YDoc();
const idMap = {} as Record<string, string>;
migrateMeta(oldDoc, newDoc, idMap);
migrateBlocks(oldDoc, newDoc, idMap);
return newDoc;
}
/**
* upgrade oldDoc to v2, write to targetDoc
*/
export const upgradeV1ToV2 = async (oldDoc: YDoc, targetDoc: YDoc) => {
const newDoc = migrateToSubdoc(oldDoc);
applyUpdate(targetDoc, encodeStateAsUpdate(newDoc), migrationOrigin);
newDoc.getSubdocs().forEach(subdoc => {
targetDoc.getSubdocs().forEach(newDoc => {
if (subdoc.guid === newDoc.guid) {
applyUpdate(newDoc, encodeStateAsUpdate(subdoc), migrationOrigin);
}
});
});
};

View File

@@ -1,76 +0,0 @@
import type { DocCollection } from '@blocksuite/affine/store';
import type { Array as YArray, Doc as YDoc, Map as YMap } from 'yjs';
/**
* For split migrate function from MigrationQueue.
*/
export enum MigrationPoint {
SubDoc = 1,
GuidFix = 2,
BlockVersion = 3,
}
export function checkWorkspaceCompatibility(
docCollection: DocCollection,
isCloud: boolean
): MigrationPoint | null {
// check if there is any key starts with 'space:' on root doc
const spaceMetaObj = docCollection.doc.share.get('space:meta') as
| YMap<any>
| undefined;
const docKeys = Array.from(docCollection.doc.share.keys());
const haveSpaceMeta = !!spaceMetaObj && spaceMetaObj.size > 0;
const haveLegacySpace = docKeys.some(key => key.startsWith('space:'));
// DON'T UPGRADE SUBDOC ON CLOUD
if (!isCloud && (haveSpaceMeta || haveLegacySpace)) {
return MigrationPoint.SubDoc;
}
// exit if no pages
if (!docCollection.meta.docs?.length) {
return null;
}
// check guid compatibility
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 = docCollection.doc.getMap('spaces') as YMap<YDoc>;
for (const [pageId, _] of spaces) {
if (pageId.includes(':')) {
return MigrationPoint.GuidFix;
}
}
const hasVersion = docCollection.meta.hasVersion;
if (!hasVersion) {
return MigrationPoint.BlockVersion;
}
// Temporarily follow the check logic of blocksuite.
if ((docCollection.meta.docs?.length ?? 0) <= 1) {
try {
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 = docCollection.meta.blockVersions;
for (const [flavour, version] of Object.entries(blockVersions ?? {})) {
const schema = docCollection.schema.flavourSchemaMap.get(flavour);
if (schema?.version !== version) {
return MigrationPoint.BlockVersion;
}
}
return null;
}

View File

@@ -1,135 +0,0 @@
import { Unreachable } from '@affine/env/constant';
import { WorkspaceFlavour } from '@affine/env/workspace';
import { applyUpdate, Doc as YDoc, encodeStateAsUpdate } from 'yjs';
import {
checkWorkspaceCompatibility,
forceUpgradePages,
migrateGuidCompatibility,
MigrationPoint,
upgradeV1ToV2,
} from '../../../blocksuite';
import { Entity } from '../../../framework';
import { LiveData } from '../../../livedata';
import type { WorkspaceMetadata } from '../metadata';
import type { WorkspaceDestroyService } from '../services/destroy';
import type { WorkspaceFactoryService } from '../services/factory';
import type { WorkspaceService } from '../services/workspace';
export class WorkspaceUpgrade extends Entity {
needUpgrade$ = new LiveData(false);
upgrading$ = new LiveData(false);
constructor(
private readonly workspaceService: WorkspaceService,
private readonly workspaceFactory: WorkspaceFactoryService,
private readonly workspaceDestroy: WorkspaceDestroyService
) {
super();
this.checkIfNeedUpgrade();
workspaceService.workspace.docCollection.doc.on('update', () => {
this.checkIfNeedUpgrade();
});
}
checkIfNeedUpgrade() {
const needUpgrade = !!checkWorkspaceCompatibility(
this.workspaceService.workspace.docCollection,
this.workspaceService.workspace.flavour === WorkspaceFlavour.AFFINE_CLOUD
);
this.needUpgrade$.next(needUpgrade);
return needUpgrade;
}
async upgrade(): Promise<WorkspaceMetadata | null> {
if (this.upgrading$.value) {
return null;
}
this.upgrading$.next(true);
try {
await this.workspaceService.workspace.engine.waitForDocSynced();
const step = checkWorkspaceCompatibility(
this.workspaceService.workspace.docCollection,
this.workspaceService.workspace.flavour ===
WorkspaceFlavour.AFFINE_CLOUD
);
if (!step) {
return null;
}
// Clone a new doc to prevent change events.
const clonedDoc = new YDoc({
guid: this.workspaceService.workspace.docCollection.doc.guid,
});
applyDoc(clonedDoc, this.workspaceService.workspace.docCollection.doc);
if (step === MigrationPoint.SubDoc) {
const newWorkspace = await this.workspaceFactory.create(
WorkspaceFlavour.LOCAL,
async (workspace, blobStorage) => {
await upgradeV1ToV2(clonedDoc, workspace.doc);
migrateGuidCompatibility(clonedDoc);
await forceUpgradePages(
workspace.doc,
this.workspaceService.workspace.docCollection.schema
);
const blobList =
await this.workspaceService.workspace.docCollection.blobSync.list();
for (const blobKey of blobList) {
const blob =
await this.workspaceService.workspace.docCollection.blobSync.get(
blobKey
);
if (blob) {
await blobStorage.set(blobKey, blob);
}
}
}
);
await this.workspaceDestroy.deleteWorkspace(
this.workspaceService.workspace.meta
);
return newWorkspace;
} else if (step === MigrationPoint.GuidFix) {
migrateGuidCompatibility(clonedDoc);
await forceUpgradePages(
clonedDoc,
this.workspaceService.workspace.docCollection.schema
);
applyDoc(this.workspaceService.workspace.docCollection.doc, clonedDoc);
await this.workspaceService.workspace.engine.waitForDocSynced();
return null;
} else if (step === MigrationPoint.BlockVersion) {
await forceUpgradePages(
clonedDoc,
this.workspaceService.workspace.docCollection.schema
);
applyDoc(this.workspaceService.workspace.docCollection.doc, clonedDoc);
await this.workspaceService.workspace.engine.waitForDocSynced();
return null;
} else {
throw new Unreachable();
}
} finally {
this.upgrading$.next(false);
}
}
}
function applyDoc(target: YDoc, result: YDoc) {
applyUpdate(target, encodeStateAsUpdate(result));
for (const targetSubDoc of target.subdocs.values()) {
const resultSubDocs = Array.from(result.subdocs.values());
const resultSubDoc = resultSubDocs.find(
item => item.guid === targetSubDoc.guid
);
if (resultSubDoc) {
applyDoc(targetSubDoc, resultSubDoc);
}
}
}

View File

@@ -9,7 +9,6 @@ import { WorkspaceDBService } from '../../db';
import { getAFFiNEWorkspaceSchema } from '../global-schema';
import type { WorkspaceScope } from '../scopes/workspace';
import { WorkspaceEngineService } from '../services/engine';
import { WorkspaceUpgradeService } from '../services/upgrade';
export class Workspace extends Entity {
constructor(public readonly scope: WorkspaceScope) {
@@ -64,10 +63,6 @@ export class Workspace extends Entity {
return this.framework.get(WorkspaceEngineService).engine;
}
get upgrade() {
return this.framework.get(WorkspaceUpgradeService).upgrade;
}
name$ = LiveData.from<string | undefined>(
new Observable(subscriber => {
subscriber.next(this.docCollection.meta.name);

View File

@@ -16,7 +16,6 @@ import { GlobalCache, GlobalState } from '../storage';
import { WorkspaceEngine } from './entities/engine';
import { WorkspaceList } from './entities/list';
import { WorkspaceProfile } from './entities/profile';
import { WorkspaceUpgrade } from './entities/upgrade';
import { Workspace } from './entities/workspace';
import {
WorkspaceLocalCacheImpl,
@@ -32,7 +31,6 @@ import { WorkspaceListService } from './services/list';
import { WorkspaceProfileService } from './services/profile';
import { WorkspaceRepositoryService } from './services/repo';
import { WorkspaceTransformService } from './services/transform';
import { WorkspaceUpgradeService } from './services/upgrade';
import { WorkspaceService } from './services/workspace';
import { WorkspacesService } from './services/workspaces';
import { WorkspaceProfileCacheStore } from './stores/profile-cache';
@@ -72,12 +70,6 @@ export function configureWorkspaceModule(framework: Framework) {
.entity(Workspace, [WorkspaceScope])
.service(WorkspaceEngineService, [WorkspaceScope])
.entity(WorkspaceEngine, [WorkspaceService])
.service(WorkspaceUpgradeService)
.entity(WorkspaceUpgrade, [
WorkspaceService,
WorkspaceFactoryService,
WorkspaceDestroyService,
])
.impl(WorkspaceLocalState, WorkspaceLocalStateImpl, [
WorkspaceService,
GlobalState,

View File

@@ -1,6 +1,5 @@
import { DebugLogger } from '@affine/debug';
import { fixWorkspaceVersion } from '../../../blocksuite';
import { Service } from '../../../framework';
import { ObjectPool } from '../../../utils';
import type { Workspace } from '../entities/workspace';
@@ -105,9 +104,6 @@ export class WorkspaceRepositoryService extends Service {
workspace.engine.setRootDoc(workspace.docCollection.doc);
workspace.engine.start();
// apply compatibility fix
fixWorkspaceVersion(workspace.docCollection.doc);
this.framework.emitEvent(WorkspaceInitialized, workspace);
this.profileRepo

View File

@@ -1,6 +0,0 @@
import { Service } from '../../../framework';
import { WorkspaceUpgrade } from '../entities/upgrade';
export class WorkspaceUpgradeService extends Service {
upgrade = this.framework.createEntity(WorkspaceUpgrade);
}

View File

@@ -13,7 +13,7 @@
"@affine/component": "workspace:*",
"@affine/core": "workspace:*",
"@affine/i18n": "workspace:*",
"@blocksuite/affine": "0.17.33",
"@blocksuite/affine": "0.18.0",
"@blocksuite/icons": "^2.1.70",
"@capacitor/android": "^6.1.2",
"@capacitor/core": "^6.1.2",

View File

@@ -28,7 +28,7 @@
"@affine/core": "workspace:*",
"@affine/i18n": "workspace:*",
"@affine/native": "workspace:*",
"@blocksuite/affine": "0.17.33",
"@blocksuite/affine": "0.18.0",
"@electron-forge/cli": "^7.3.0",
"@electron-forge/core": "^7.3.0",
"@electron-forge/core-utils": "^7.3.0",

View File

@@ -15,7 +15,7 @@
"@affine/component": "workspace:*",
"@affine/core": "workspace:*",
"@affine/i18n": "workspace:*",
"@blocksuite/affine": "0.17.33",
"@blocksuite/affine": "0.18.0",
"@blocksuite/icons": "^2.1.70",
"@capacitor/app": "^6.0.1",
"@capacitor/browser": "^6.0.3",

View File

@@ -13,7 +13,7 @@
"@affine/component": "workspace:*",
"@affine/core": "workspace:*",
"@affine/i18n": "workspace:*",
"@blocksuite/affine": "0.17.33",
"@blocksuite/affine": "0.18.0",
"@blocksuite/icons": "^2.1.70",
"@sentry/react": "^8.0.0",
"react": "^18.2.0",

View File

@@ -63,7 +63,7 @@
"zod": "^3.22.4"
},
"devDependencies": {
"@blocksuite/affine": "0.17.33",
"@blocksuite/affine": "0.18.0",
"@blocksuite/icons": "2.1.70",
"@chromatic-com/storybook": "^3.0.0",
"@storybook/addon-essentials": "^8.2.9",

View File

@@ -16,7 +16,7 @@
"@affine/i18n": "workspace:*",
"@affine/templates": "workspace:*",
"@affine/track": "workspace:*",
"@blocksuite/affine": "0.17.33",
"@blocksuite/affine": "0.18.0",
"@blocksuite/icons": "2.1.70",
"@capacitor/app": "^6.0.1",
"@capacitor/browser": "^6.0.3",

View File

@@ -170,7 +170,6 @@ export const useSnapshotPage = (
const spaceDoc = page.spaceDoc;
page.load(() => {
applyUpdate(spaceDoc, new Uint8Array(snapshot));
historyShellWorkspace.schema.upgradeDoc(0, {}, spaceDoc);
}); // must load before applyUpdate
}
return page ?? undefined;

View File

@@ -26,16 +26,17 @@ function createNewDocMenuGroup(
inlineEditor
);
const items = Array.isArray(originalNewDocMenuGroup.items)
? originalNewDocMenuGroup.items
: originalNewDocMenuGroup.items.value;
// Patch the import item, to use the custom import dialog.
const importItemIndex = originalNewDocMenuGroup.items.findIndex(
item => item.key === 'import'
);
const importItemIndex = items.findIndex(item => item.key === 'import');
if (importItemIndex === -1) {
return originalNewDocMenuGroup;
}
const originalItems = originalNewDocMenuGroup.items;
const originalImportItem = originalItems[importItemIndex];
const originalImportItem = items[importItemIndex];
const customImportItem = {
...originalImportItem,
action: () => {
@@ -70,7 +71,7 @@ function createNewDocMenuGroup(
};
// only replace the original import item
originalItems.splice(importItemIndex, 1, customImportItem);
items.splice(importItemIndex, 1, customImportItem);
return originalNewDocMenuGroup;
}

View File

@@ -1 +0,0 @@
export { WorkspaceUpgrade } from './upgrade';

View File

@@ -1,44 +0,0 @@
import type React from 'react';
/**
* TODO(@eyhn): move to icons package
*/
export const ArrowCircleIcon = (props: React.SVGProps<SVGSVGElement>) => {
return (
<svg
width="20"
height="20"
viewBox="0 0 21 21"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<path
fillRule="evenodd"
clipRule="evenodd"
fill="currentColor"
d="M3.20837 10.7372C3.20837 6.71015 6.47296 3.44556 10.5 3.44556C12.3672 3.44556 14.0717 4.14815 15.3613 5.30239L15.3633 5.30417L16.5417 6.36801V4.07056C16.5417 3.72538 16.8215 3.44556 17.1667 3.44556C17.5119 3.44556 17.7917 3.72538 17.7917 4.07056V7.77426C17.7917 8.11944 17.5119 8.39926 17.1667 8.39926H13.463C13.1178 8.39926 12.838 8.11944 12.838 7.77426C12.838 7.42908 13.1178 7.14926 13.463 7.14926H15.5417L14.5277 6.23381C14.5273 6.23351 14.527 6.23321 14.5267 6.23291C13.4575 5.2764 12.0473 4.69556 10.5 4.69556C7.16332 4.69556 4.45837 7.4005 4.45837 10.7372C4.45837 14.0739 7.16332 16.7789 10.5 16.7789C13.3745 16.7789 15.7815 14.7708 16.392 12.0804C16.4684 11.7438 16.8032 11.5328 17.1398 11.6092C17.4764 11.6856 17.6874 12.0204 17.611 12.357C16.8742 15.6043 13.971 18.0289 10.5 18.0289C6.47296 18.0289 3.20837 14.7643 3.20837 10.7372Z"
/>
</svg>
);
};
export const HeartBreakIcon = (props: React.SVGProps<SVGSVGElement>) => {
return (
<svg
width="20"
height="20"
viewBox="0 0 20 21"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<path
fillRule="evenodd"
clipRule="evenodd"
fill="currentColor"
d="M9.99962 4.57817C8.29319 3.01965 5.71364 2.60583 3.71072 4.31175C1.58022 6.12634 1.27156 9.1804 2.95519 11.34C3.60283 12.1708 4.87307 13.4256 6.10152 14.5814C7.34198 15.7486 8.57984 16.8517 9.1904 17.3907L9.20124 17.4003C9.25961 17.4519 9.32753 17.5118 9.3919 17.5602C9.46767 17.617 9.57193 17.6842 9.70946 17.7251C9.89501 17.7803 10.0946 17.7803 10.2802 17.7251C10.4177 17.6842 10.522 17.617 10.5977 17.5602C10.6621 17.5118 10.73 17.4519 10.7884 17.4003L10.7992 17.3907C11.4098 16.8517 12.6477 15.7486 13.8881 14.5814C15.1166 13.4256 16.3868 12.1708 17.0344 11.34C18.7125 9.18752 18.4501 6.11052 16.2724 4.30628C14.2452 2.62668 11.7026 3.01918 9.99962 4.57817ZM10.8772 5.46815L12.1086 6.69955C12.2506 6.84161 12.3157 7.0433 12.2836 7.24161C12.2514 7.43991 12.1258 7.61066 11.9461 7.70051L9.38839 8.97938L11.2752 10.8662C11.5193 11.1103 11.5193 11.506 11.2752 11.7501C11.0312 11.9942 10.6354 11.9942 10.3913 11.7501L7.89135 9.2501C7.74929 9.10804 7.68418 8.90635 7.71636 8.70804C7.74854 8.50974 7.87409 8.33899 8.05378 8.24914L10.6115 6.97027L9.55801 5.91677C9.54678 5.90554 9.53598 5.89388 9.52564 5.88183C8.19717 4.33364 6.07983 3.93588 4.52123 5.26337C2.89416 6.64918 2.67381 8.94603 3.94102 10.5715C4.5201 11.3143 5.71945 12.5056 6.95809 13.6711C8.16952 14.8109 9.38104 15.8914 9.99482 16.4335C10.6086 15.8914 11.8201 14.8109 13.0315 13.6711C14.2702 12.5056 15.4695 11.3143 16.0486 10.5715C17.3214 8.93892 17.1194 6.63133 15.4749 5.26884C14.0321 4.07341 12.1948 4.27909 10.8772 5.46815Z"
/>
</svg>
);
};

View File

@@ -1,21 +0,0 @@
import { cssVar } from '@toeverything/theme';
import { style } from '@vanilla-extract/css';
export const layout = style({
margin: '80px auto',
maxWidth: '536px',
});
export const upgradeBox = style({
padding: '48px 52px',
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
});
export const upgradeTips = style({
margin: '20px 0',
color: cssVar('textSecondaryColor'),
fontSize: '12px',
fontStyle: 'normal',
fontWeight: '400',
lineHeight: '20px',
textAlign: 'center',
});

View File

@@ -1,67 +0,0 @@
import { Button } from '@affine/component/ui/button';
import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hooks';
import { useNavigateHelper } from '@affine/core/components/hooks/use-navigate-helper';
import { AffineShapeIcon } from '@affine/core/components/page-list'; // TODO(@eyhn): import from page-list temporarily, need to defined common svg icon/images management.
import { useI18n } from '@affine/i18n';
import { track } from '@affine/track';
import { useLiveData, useService, WorkspaceService } from '@toeverything/infra';
import { useState } from 'react';
import * as styles from './upgrade.css';
import { ArrowCircleIcon, HeartBreakIcon } from './upgrade-icon';
/**
* TODO(@eyhn): Help info is not implemented yet.
*/
export const WorkspaceUpgrade = function WorkspaceUpgrade() {
const [error, setError] = useState<string | null>(null);
const currentWorkspace = useService(WorkspaceService).workspace;
const upgrading = useLiveData(currentWorkspace.upgrade.upgrading$);
const t = useI18n();
const { openPage } = useNavigateHelper();
const onButtonClick = useAsyncCallback(async () => {
if (upgrading) {
return;
}
track.workspace.$.$.upgradeWorkspace();
try {
const newWorkspace = await currentWorkspace.upgrade.upgrade();
if (newWorkspace) {
openPage(newWorkspace.id, 'all');
} else {
// blocksuite may enter an incorrect state, reload to reset it.
location.reload();
}
} catch (error) {
setError(error instanceof Error ? error.message : '' + error);
}
}, [upgrading, currentWorkspace.upgrade, openPage]);
return (
<div className={styles.layout}>
<div className={styles.upgradeBox}>
<AffineShapeIcon width={180} height={180} />
<p className={styles.upgradeTips}>
{error ? error : t['com.affine.upgrade.tips.normal']()}
</p>
<Button
data-testid="upgrade-workspace-button"
onClick={onButtonClick}
size="extraLarge"
loading={upgrading}
prefix={error ? <HeartBreakIcon /> : <ArrowCircleIcon />}
variant={error ? 'error' : 'secondary'}
>
{error
? t['com.affine.upgrade.button-text.error']()
: upgrading
? t['com.affine.upgrade.button-text.upgrading']()
: t['com.affine.upgrade.button-text.pending']()}
</Button>
</div>
</div>
);
};

View File

@@ -6,7 +6,6 @@ import {
} from '@affine/core/components/affine/quota-reached-modal';
import { SWRConfigProvider } from '@affine/core/components/providers/swr-config-provider';
import { WorkspaceSideEffects } from '@affine/core/components/providers/workspace-side-effects';
import { WorkspaceUpgrade } from '@affine/core/components/workspace-upgrade';
import { AIIsland } from '@affine/core/desktop/components/ai-island';
import { AppContainer } from '@affine/core/desktop/components/app-container';
import { WorkspaceDialogs } from '@affine/core/desktop/dialogs';
@@ -64,14 +63,5 @@ const WorkspaceLayoutUIContainer = ({ children }: PropsWithChildren) => {
);
};
const WorkspaceLayoutInner = ({ children }: PropsWithChildren) => {
const workspace = useService(WorkspaceService).workspace;
const upgrading = useLiveData(workspace.upgrade.upgrading$);
const needUpgrade = useLiveData(workspace.upgrade.needUpgrade$);
return (
<WorkspaceLayoutUIContainer>
{needUpgrade || upgrading ? <WorkspaceUpgrade /> : children}
</WorkspaceLayoutUIContainer>
);
return <WorkspaceLayoutUIContainer>{children}</WorkspaceLayoutUIContainer>;
};

View File

@@ -1,5 +0,0 @@
static
fixtures/*.ydoc
test-results
*.zip
web-static

View File

@@ -1,12 +0,0 @@
# AFFiNE Migration Testings
This package is used to testing migration logic for every breaking version.
```sh
BUILD_TYPE=canary yarn run build
cd tests/affine-migration
yarn run e2e
```
> Tips:
> Run `yarn dev` to start dev server in 8080 could make debugging more quickly.

View File

@@ -1,116 +0,0 @@
import { patchDataEnhancement } from '@affine-test/kit/e2e-enhance/initializer';
import { SnapshotStorage } from '@affine-test/kit/e2e-enhance/snapshot';
import { test } from '@affine-test/kit/playwright';
import { clickEdgelessModeButton } from '@affine-test/kit/utils/editor';
import { coreUrl } from '@affine-test/kit/utils/load-page';
import { waitForEditorLoad } from '@affine-test/kit/utils/page-logic';
import { clickSideBarAllPageButton } from '@affine-test/kit/utils/sidebar';
import type { Page } from '@playwright/test';
import { expect } from '@playwright/test';
async function open404PageToInitData(page: Page, version: string) {
const snapshotStorage = new SnapshotStorage(version);
const { binaries, idbData, localStorageData } = await snapshotStorage.read();
// Open other page to init data
await page.goto(`${coreUrl}/404`);
await page.evaluate(
([v1, v2]) => window.writeAffineDatabase(v1, v2),
[idbData, binaries]
);
await page.evaluate(
value => window.writeAffineLocalStorage(value),
localStorageData
);
return { localStorageData };
}
test.beforeEach(async ({ page }) => {
await patchDataEnhancement(page);
});
test('v1 to v4', async ({ page }) => {
await open404PageToInitData(page, '0.7.0-canary.18');
await page.goto(coreUrl);
await clickSideBarAllPageButton(page);
await expect(page.getByTestId('upgrade-workspace-button')).toBeVisible();
await page.getByTestId('upgrade-workspace-button').click();
await expect(page.getByTestId('page-list-item')).toHaveCount(2);
await page
.getByTestId('page-list-item-title-text')
.getByText('hello')
.click();
await waitForEditorLoad(page);
await expect(page.locator('v-line').nth(0)).toHaveText('hello');
});
test('v2 to v4, database migration', async ({ page }) => {
const { localStorageData } = await open404PageToInitData(
page,
'0.8.0-canary.7'
);
const detailPagePath = `${coreUrl}/workspace/${localStorageData.last_workspace_id}/${localStorageData.last_page_id}`;
await page.goto(detailPagePath);
await expect(page.getByTestId('upgrade-workspace-button')).toBeVisible();
await page.getByTestId('upgrade-workspace-button').click();
// check page mode is correct
await expect(page.locator('v-line').nth(0)).toHaveText('hello');
await expect(page.locator('affine-database')).toBeVisible();
// check edgeless mode is correct
await clickEdgelessModeButton(page);
await expect(page.locator('affine-database')).toBeVisible();
});
test('v3 to v4, surface migration', async ({ page }) => {
const { localStorageData } = await open404PageToInitData(page, '0.8.4');
const detailPagePath = `${coreUrl}/workspace/${localStorageData.last_workspace_id}/${localStorageData.last_page_id}`;
await page.goto(detailPagePath);
await expect(page.getByTestId('upgrade-workspace-button')).toBeVisible();
await page.getByTestId('upgrade-workspace-button').click();
await waitForEditorLoad(page);
await page.waitForTimeout(500);
// check edgeless mode is correct
await clickEdgelessModeButton(page);
await expect(page.locator('.edgeless-toolbar-container')).toBeVisible();
await expect(page.locator('affine-edgeless-root')).toBeVisible();
});
test('v0 to v4, subdoc migration', async ({ page }) => {
await open404PageToInitData(page, '0.6.1-beta.1');
await page.goto(coreUrl);
await clickSideBarAllPageButton(page);
await expect(page.getByTestId('upgrade-workspace-button')).toBeVisible();
await page.getByTestId('upgrade-workspace-button').click();
await expect(page.getByTestId('page-list-item')).toHaveCount(2);
await page
.getByTestId('page-list-item-title-text')
.getByText('hello')
.click();
await waitForEditorLoad(page);
// check page mode is correct
await expect(page.locator('v-line').nth(0)).toHaveText('hello');
await expect(page.locator('v-line').nth(1)).toHaveText('TEST CONTENT');
// check edgeless mode is correct
await clickEdgelessModeButton(page);
await expect(page.locator('.edgeless-toolbar-container')).toBeVisible();
await expect(page.locator('affine-edgeless-root')).toBeVisible();
});

View File

@@ -1,12 +0,0 @@
{
"name": "@affine-test/affine-migration",
"description": "AFFiNE migration e2e tests",
"scripts": {
"e2e": "yarn playwright test"
},
"devDependencies": {
"@affine-test/kit": "workspace:*",
"@playwright/test": "=1.48.2"
},
"version": "0.18.0"
}

View File

@@ -1,46 +0,0 @@
import { testResultDir } from '@affine-test/kit/playwright';
import type {
PlaywrightTestConfig,
PlaywrightWorkerOptions,
} from '@playwright/test';
const config: PlaywrightTestConfig = {
testDir: './e2e',
fullyParallel: !process.env.CI,
timeout: process.env.CI ? 50_000 : 30_000,
outputDir: testResultDir,
use: {
baseURL: 'http://localhost:8080/',
browserName:
(process.env.BROWSER as PlaywrightWorkerOptions['browserName']) ??
'chromium',
permissions: ['clipboard-read', 'clipboard-write'],
viewport: { width: 1440, height: 800 },
actionTimeout: 5 * 1000,
locale: 'en-US',
trace: 'on-first-retry',
video: 'on-first-retry',
},
forbidOnly: !!process.env.CI,
workers: process.env.CI ? 1 : 4,
retries: 1,
reporter: process.env.CI ? 'github' : 'list',
webServer: [
// Intentionally not building the web, reminds you to run it by yourself.
{
command: 'yarn -T run start:web-static',
port: 8080,
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
env: {
COVERAGE: process.env.COVERAGE || 'false',
},
},
],
};
if (process.env.CI) {
config.retries = 3;
}
export default config;

View File

@@ -1,17 +0,0 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"esModuleInterop": true,
"resolveJsonModule": true,
"outDir": "lib"
},
"include": ["e2e"],
"references": [
{
"path": "../../tests/kit"
},
{
"path": "../../tests/fixtures"
}
]
}

View File

@@ -6,7 +6,7 @@
"@affine/env": "workspace:*",
"@affine/templates": "workspace:*",
"@aws-sdk/client-s3": "^3.620.0",
"@blocksuite/affine": "0.17.33",
"@blocksuite/affine": "0.18.0",
"@clack/core": "^0.3.4",
"@clack/prompts": "^0.7.0",
"@magic-works/i18n-codegen": "^0.6.0",

View File

@@ -149,9 +149,6 @@
{
"path": "./tests/affine-local"
},
{
"path": "./tests/affine-migration"
},
{
"path": "./tests/affine-mobile"
},

367
yarn.lock
View File

@@ -116,15 +116,6 @@ __metadata:
languageName: unknown
linkType: soft
"@affine-test/affine-migration@workspace:tests/affine-migration":
version: 0.0.0-use.local
resolution: "@affine-test/affine-migration@workspace:tests/affine-migration"
dependencies:
"@affine-test/kit": "workspace:*"
"@playwright/test": "npm:=1.48.2"
languageName: unknown
linkType: soft
"@affine-test/affine-mobile@workspace:tests/affine-mobile":
version: 0.0.0-use.local
resolution: "@affine-test/affine-mobile@workspace:tests/affine-mobile"
@@ -222,7 +213,7 @@ __metadata:
"@affine/component": "workspace:*"
"@affine/core": "workspace:*"
"@affine/i18n": "workspace:*"
"@blocksuite/affine": "npm:0.17.33"
"@blocksuite/affine": "npm:0.18.0"
"@blocksuite/icons": "npm:^2.1.70"
"@capacitor/android": "npm:^6.1.2"
"@capacitor/cli": "npm:^6.1.2"
@@ -269,7 +260,7 @@ __metadata:
"@affine/env": "workspace:*"
"@affine/templates": "workspace:*"
"@aws-sdk/client-s3": "npm:^3.620.0"
"@blocksuite/affine": "npm:0.17.33"
"@blocksuite/affine": "npm:0.18.0"
"@clack/core": "npm:^0.3.4"
"@clack/prompts": "npm:^0.7.0"
"@magic-works/i18n-codegen": "npm:^0.6.0"
@@ -326,7 +317,7 @@ __metadata:
"@affine/i18n": "workspace:*"
"@atlaskit/pragmatic-drag-and-drop": "npm:^1.2.1"
"@atlaskit/pragmatic-drag-and-drop-hitbox": "npm:^1.0.3"
"@blocksuite/affine": "npm:0.17.33"
"@blocksuite/affine": "npm:0.18.0"
"@blocksuite/icons": "npm:2.1.70"
"@chromatic-com/storybook": "npm:^3.0.0"
"@emotion/react": "npm:^11.11.4"
@@ -409,7 +400,7 @@ __metadata:
"@affine/i18n": "workspace:*"
"@affine/templates": "workspace:*"
"@affine/track": "workspace:*"
"@blocksuite/affine": "npm:0.17.33"
"@blocksuite/affine": "npm:0.18.0"
"@blocksuite/icons": "npm:2.1.70"
"@capacitor/app": "npm:^6.0.1"
"@capacitor/browser": "npm:^6.0.3"
@@ -518,7 +509,7 @@ __metadata:
"@affine/core": "workspace:*"
"@affine/i18n": "workspace:*"
"@affine/native": "workspace:*"
"@blocksuite/affine": "npm:0.17.33"
"@blocksuite/affine": "npm:0.18.0"
"@electron-forge/cli": "npm:^7.3.0"
"@electron-forge/core": "npm:^7.3.0"
"@electron-forge/core-utils": "npm:^7.3.0"
@@ -572,7 +563,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@affine/env@workspace:packages/common/env"
dependencies:
"@blocksuite/affine": "npm:0.17.33"
"@blocksuite/affine": "npm:0.18.0"
vitest: "npm:2.1.4"
zod: "npm:^3.22.4"
peerDependencies:
@@ -621,7 +612,7 @@ __metadata:
"@affine/component": "workspace:*"
"@affine/core": "workspace:*"
"@affine/i18n": "workspace:*"
"@blocksuite/affine": "npm:0.17.33"
"@blocksuite/affine": "npm:0.18.0"
"@blocksuite/icons": "npm:^2.1.70"
"@capacitor/app": "npm:^6.0.1"
"@capacitor/browser": "npm:^6.0.3"
@@ -647,7 +638,7 @@ __metadata:
"@affine/component": "workspace:*"
"@affine/core": "workspace:*"
"@affine/i18n": "workspace:*"
"@blocksuite/affine": "npm:0.17.33"
"@blocksuite/affine": "npm:0.18.0"
"@blocksuite/icons": "npm:^2.1.70"
"@sentry/react": "npm:^8.0.0"
"@types/react": "npm:^18.2.75"
@@ -2533,113 +2524,113 @@ __metadata:
languageName: node
linkType: hard
"@blocksuite/affine-block-embed@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/affine-block-embed@npm:0.17.33"
"@blocksuite/affine-block-embed@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/affine-block-embed@npm:0.18.0"
dependencies:
"@blocksuite/affine-block-surface": "npm:0.17.33"
"@blocksuite/affine-components": "npm:0.17.33"
"@blocksuite/affine-model": "npm:0.17.33"
"@blocksuite/affine-shared": "npm:0.17.33"
"@blocksuite/block-std": "npm:0.17.33"
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/affine-block-surface": "npm:0.18.0"
"@blocksuite/affine-components": "npm:0.18.0"
"@blocksuite/affine-model": "npm:0.18.0"
"@blocksuite/affine-shared": "npm:0.18.0"
"@blocksuite/block-std": "npm:0.18.0"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/icons": "npm:^2.1.70"
"@blocksuite/inline": "npm:0.17.33"
"@blocksuite/store": "npm:0.17.33"
"@blocksuite/inline": "npm:0.18.0"
"@blocksuite/store": "npm:0.18.0"
"@floating-ui/dom": "npm:^1.6.10"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.0.15"
"@toeverything/theme": "npm:^1.0.19"
lit: "npm:^3.2.0"
minimatch: "npm:^10.0.1"
zod: "npm:^3.23.8"
checksum: 10/ca10ef815186413a5ac9b7cdb60f31a1e4ab982a4507edf5d8f6f131429bae50e27624c632639e17ebd8d45cabb946291ff33ed6ce94670d08e51ca5d598b6fb
checksum: 10/b46c6f59c52f86a615498a73dbc183aab73cc8f1c771bf2b24bd5b1768765bacd07428c66d675be1f6629fc5026ae15bc75a35586724dc3241f57aac5c636990
languageName: node
linkType: hard
"@blocksuite/affine-block-list@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/affine-block-list@npm:0.17.33"
"@blocksuite/affine-block-list@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/affine-block-list@npm:0.18.0"
dependencies:
"@blocksuite/affine-components": "npm:0.17.33"
"@blocksuite/affine-model": "npm:0.17.33"
"@blocksuite/affine-shared": "npm:0.17.33"
"@blocksuite/block-std": "npm:0.17.33"
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/inline": "npm:0.17.33"
"@blocksuite/store": "npm:0.17.33"
"@blocksuite/affine-components": "npm:0.18.0"
"@blocksuite/affine-model": "npm:0.18.0"
"@blocksuite/affine-shared": "npm:0.18.0"
"@blocksuite/block-std": "npm:0.18.0"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/inline": "npm:0.18.0"
"@blocksuite/store": "npm:0.18.0"
"@floating-ui/dom": "npm:^1.6.10"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.0.15"
"@toeverything/theme": "npm:^1.0.19"
lit: "npm:^3.2.0"
minimatch: "npm:^10.0.1"
zod: "npm:^3.23.8"
checksum: 10/25fdc0d014df56c70737276638ddf3262d569924b37fdd3d5ed35323344c8b1573a6091761f220aa878e089cae5869fdf23569365f7f531db70266ae3f1067cf
checksum: 10/bbcf28e6da235735c61857b49e5f360a4ee0046ab6b5ceae62abac7c073cf118256c49cdcafb5ac9a3acea31fde8d4e115f7dba9b5e58aa2745ff1cb6e27224c
languageName: node
linkType: hard
"@blocksuite/affine-block-paragraph@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/affine-block-paragraph@npm:0.17.33"
"@blocksuite/affine-block-paragraph@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/affine-block-paragraph@npm:0.18.0"
dependencies:
"@blocksuite/affine-components": "npm:0.17.33"
"@blocksuite/affine-model": "npm:0.17.33"
"@blocksuite/affine-shared": "npm:0.17.33"
"@blocksuite/block-std": "npm:0.17.33"
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/inline": "npm:0.17.33"
"@blocksuite/store": "npm:0.17.33"
"@blocksuite/affine-components": "npm:0.18.0"
"@blocksuite/affine-model": "npm:0.18.0"
"@blocksuite/affine-shared": "npm:0.18.0"
"@blocksuite/block-std": "npm:0.18.0"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/inline": "npm:0.18.0"
"@blocksuite/store": "npm:0.18.0"
"@floating-ui/dom": "npm:^1.6.10"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.0.15"
"@toeverything/theme": "npm:^1.0.19"
lit: "npm:^3.2.0"
minimatch: "npm:^10.0.1"
zod: "npm:^3.23.8"
checksum: 10/a07710ae717e87ae793f052fe4e55875affb3a5ccb78fffe1692ad014404ee73508f36bc26b1f3a1196ef334beaef6219bdb7f2bad5a16c0afd150374cd6641f
checksum: 10/b45d22337f26236b089d3180aedf3643a68e1c1afee850d08000705d5d6796a67692d95fb3b52310d8976cb82cb99cbe397717241bb27f44e69959bcc0bae1e8
languageName: node
linkType: hard
"@blocksuite/affine-block-surface@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/affine-block-surface@npm:0.17.33"
"@blocksuite/affine-block-surface@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/affine-block-surface@npm:0.18.0"
dependencies:
"@blocksuite/affine-components": "npm:0.17.33"
"@blocksuite/affine-model": "npm:0.17.33"
"@blocksuite/affine-shared": "npm:0.17.33"
"@blocksuite/block-std": "npm:0.17.33"
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/inline": "npm:0.17.33"
"@blocksuite/store": "npm:0.17.33"
"@blocksuite/affine-components": "npm:0.18.0"
"@blocksuite/affine-model": "npm:0.18.0"
"@blocksuite/affine-shared": "npm:0.18.0"
"@blocksuite/block-std": "npm:0.18.0"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/inline": "npm:0.18.0"
"@blocksuite/store": "npm:0.18.0"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.0.15"
"@toeverything/theme": "npm:^1.0.19"
fractional-indexing: "npm:^3.2.0"
lit: "npm:^3.2.0"
lodash.chunk: "npm:^4.2.0"
nanoid: "npm:^5.0.7"
zod: "npm:^3.23.8"
checksum: 10/19b607d8ee38252666d02d2428a923d0c7ff018cd0c7ecd27047327fac183ac69c0ff97d58824940962a3e5c8958a4055a10503b04e00975e00cc93a13aed660
checksum: 10/ec7d41ae64b13ad8f7423bd7f96ab734c2cb479d35ec9fee465068cc14d9d98d5c44671cfe039138ec150267cf37368a8cfb9a6f64fe06e46401bee017dfe0e5
languageName: node
linkType: hard
"@blocksuite/affine-components@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/affine-components@npm:0.17.33"
"@blocksuite/affine-components@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/affine-components@npm:0.18.0"
dependencies:
"@blocksuite/affine-model": "npm:0.17.33"
"@blocksuite/affine-shared": "npm:0.17.33"
"@blocksuite/block-std": "npm:0.17.33"
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/affine-model": "npm:0.18.0"
"@blocksuite/affine-shared": "npm:0.18.0"
"@blocksuite/block-std": "npm:0.18.0"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/icons": "npm:^2.1.70"
"@blocksuite/inline": "npm:0.17.33"
"@blocksuite/store": "npm:0.17.33"
"@blocksuite/inline": "npm:0.18.0"
"@blocksuite/store": "npm:0.18.0"
"@floating-ui/dom": "npm:^1.6.10"
"@lit/context": "npm:^1.1.2"
"@lottiefiles/dotlottie-wc": "npm:^0.2.16"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.0.15"
"@toeverything/theme": "npm:^1.0.19"
date-fns: "npm:^4.0.0"
katex: "npm:^0.16.11"
lit: "npm:^3.2.0"
@@ -2647,82 +2638,82 @@ __metadata:
lodash.clonedeep: "npm:^4.5.0"
shiki: "npm:^1.12.0"
zod: "npm:^3.23.8"
checksum: 10/9bd77f4064c19c34d35fe9b1a988b901a9c181ea8e7e23b5a92255efc8136fef9d699e6d5f83bc303a2c2450777d0d41d153893a5a5c024fd7a8ca1d9bc85b70
checksum: 10/adcd514573254ce163ce49d0c62269a5c43575f279b4b62b712c6ae30b0973f0fee4d7310ddbff58700529d59c20b0d257f72e1b7329ee4d009af680767c01ea
languageName: node
linkType: hard
"@blocksuite/affine-model@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/affine-model@npm:0.17.33"
"@blocksuite/affine-model@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/affine-model@npm:0.18.0"
dependencies:
"@blocksuite/block-std": "npm:0.17.33"
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/inline": "npm:0.17.33"
"@blocksuite/store": "npm:0.17.33"
"@blocksuite/block-std": "npm:0.18.0"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/inline": "npm:0.18.0"
"@blocksuite/store": "npm:0.18.0"
fractional-indexing: "npm:^3.2.0"
zod: "npm:^3.23.8"
checksum: 10/7d184d6d6d1ebd97213a17a2eed82a550e5cdd03f6fa34e0d911c87d2c4424a86869c1325fd97ed565e96159f4e5c579510ed7f09fc9a73944ad8bc940843ebc
checksum: 10/6f607753b4609e9436e0740386308b2ec36c0dc114d9a2feb48155c1d23ecfff4d8452792f4b4ac8c77997f3b13d8984e6db5f8123ae6e16003a439f556e8431
languageName: node
linkType: hard
"@blocksuite/affine-shared@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/affine-shared@npm:0.17.33"
"@blocksuite/affine-shared@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/affine-shared@npm:0.18.0"
dependencies:
"@blocksuite/affine-model": "npm:0.17.33"
"@blocksuite/block-std": "npm:0.17.33"
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/inline": "npm:0.17.33"
"@blocksuite/store": "npm:0.17.33"
"@blocksuite/affine-model": "npm:0.18.0"
"@blocksuite/block-std": "npm:0.18.0"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/inline": "npm:0.18.0"
"@blocksuite/store": "npm:0.18.0"
"@floating-ui/dom": "npm:^1.6.10"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.0.15"
"@toeverything/theme": "npm:^1.0.19"
lit: "npm:^3.2.0"
lodash.clonedeep: "npm:^4.5.0"
lodash.mergewith: "npm:^4.6.2"
minimatch: "npm:^10.0.1"
zod: "npm:^3.23.8"
checksum: 10/c25a2297f2e28caae8f858f6427092e87e34ad6e8be60f81c3e79edb2d3f92162b1a13f1e449edd321fdb782d696718a95595a76704fe2386e4c197bdfd9acfb
checksum: 10/8e89b78d6bad1a3e29b8dcca3de6cfbc7c069a7522df9a3027eca3ba4369694ae9c8002d6daabe6258b143937e89b90e8c7c0e4bbdd2cbed4a0f0972fb0667f3
languageName: node
linkType: hard
"@blocksuite/affine-widget-scroll-anchoring@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/affine-widget-scroll-anchoring@npm:0.17.33"
"@blocksuite/affine-widget-scroll-anchoring@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/affine-widget-scroll-anchoring@npm:0.18.0"
dependencies:
"@blocksuite/affine-model": "npm:0.17.33"
"@blocksuite/affine-shared": "npm:0.17.33"
"@blocksuite/block-std": "npm:0.17.33"
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/affine-model": "npm:0.18.0"
"@blocksuite/affine-shared": "npm:0.18.0"
"@blocksuite/block-std": "npm:0.18.0"
"@blocksuite/global": "npm:0.18.0"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.0.15"
"@toeverything/theme": "npm:^1.0.19"
lit: "npm:^3.2.0"
checksum: 10/2acb2e66270513c954bf6230278e8ce54929ab98d152cb1b9dfa1c7969b8906b7db1cf5d57a5adff2c5c72be7674a1a9ae421e49e771216b32899ba313579c97
checksum: 10/b098d837eff42ba3633c28ed95ad0eedd5cb07dad16ed8c2cb416086f796973990f4d3111205e356f53357008f034732a59123df8f0a694e69e066c663849200
languageName: node
linkType: hard
"@blocksuite/affine@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/affine@npm:0.17.33"
"@blocksuite/affine@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/affine@npm:0.18.0"
dependencies:
"@blocksuite/block-std": "npm:0.17.33"
"@blocksuite/blocks": "npm:0.17.33"
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/inline": "npm:0.17.33"
"@blocksuite/presets": "npm:0.17.33"
"@blocksuite/store": "npm:0.17.33"
checksum: 10/cc1c63bd804f2d089b9ee72b2a59c4745d7c2c54ac1e19e9af67f4d02a97ba9c91ae87e4d2e97c94ff1ea9519f61a95069d5a7c9bd84023afd365b7d8189ff76
"@blocksuite/block-std": "npm:0.18.0"
"@blocksuite/blocks": "npm:0.18.0"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/inline": "npm:0.18.0"
"@blocksuite/presets": "npm:0.18.0"
"@blocksuite/store": "npm:0.18.0"
checksum: 10/bd6ef74ba998754abaf502e4e53e3e21041a165f9dad8a204269f19128da890329c3bddca48fa2f959791d23dd2ede53f4f1814542a97f7d3313c381b27c72f5
languageName: node
linkType: hard
"@blocksuite/block-std@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/block-std@npm:0.17.33"
"@blocksuite/block-std@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/block-std@npm:0.18.0"
dependencies:
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/inline": "npm:0.17.33"
"@blocksuite/store": "npm:0.17.33"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/inline": "npm:0.18.0"
"@blocksuite/store": "npm:0.18.0"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
"@types/hast": "npm:^3.0.4"
@@ -2734,32 +2725,32 @@ __metadata:
unified: "npm:^11.0.5"
w3c-keyname: "npm:^2.2.8"
zod: "npm:^3.23.8"
checksum: 10/18bb597c6d62763cfa1939d680cd522a8cc1285cbb312b83c8d96861d6d56a2004a7cabd389491580e3897e9ea4f787f22ecf583f79c83dbe223cf3d2845b7de
checksum: 10/a3eadd461bdd8417dda1489dd84298084e8a5e2f81fd1ed147985891867945bc828d6df65a7f7b92ddd2406434a995a8b5b659a7354654d86ae20b684ae42acb
languageName: node
linkType: hard
"@blocksuite/blocks@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/blocks@npm:0.17.33"
"@blocksuite/blocks@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/blocks@npm:0.18.0"
dependencies:
"@blocksuite/affine-block-embed": "npm:0.17.33"
"@blocksuite/affine-block-list": "npm:0.17.33"
"@blocksuite/affine-block-paragraph": "npm:0.17.33"
"@blocksuite/affine-block-surface": "npm:0.17.33"
"@blocksuite/affine-components": "npm:0.17.33"
"@blocksuite/affine-model": "npm:0.17.33"
"@blocksuite/affine-shared": "npm:0.17.33"
"@blocksuite/affine-widget-scroll-anchoring": "npm:0.17.33"
"@blocksuite/block-std": "npm:0.17.33"
"@blocksuite/data-view": "npm:0.17.33"
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/affine-block-embed": "npm:0.18.0"
"@blocksuite/affine-block-list": "npm:0.18.0"
"@blocksuite/affine-block-paragraph": "npm:0.18.0"
"@blocksuite/affine-block-surface": "npm:0.18.0"
"@blocksuite/affine-components": "npm:0.18.0"
"@blocksuite/affine-model": "npm:0.18.0"
"@blocksuite/affine-shared": "npm:0.18.0"
"@blocksuite/affine-widget-scroll-anchoring": "npm:0.18.0"
"@blocksuite/block-std": "npm:0.18.0"
"@blocksuite/data-view": "npm:0.18.0"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/icons": "npm:^2.1.70"
"@blocksuite/inline": "npm:0.17.33"
"@blocksuite/store": "npm:0.17.33"
"@blocksuite/inline": "npm:0.18.0"
"@blocksuite/store": "npm:0.18.0"
"@floating-ui/dom": "npm:^1.6.10"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.0.15"
"@toeverything/theme": "npm:^1.0.19"
"@types/hast": "npm:^3.0.4"
"@types/mdast": "npm:^4.0.4"
collapse-white-space: "npm:^2.1.0"
@@ -2792,41 +2783,41 @@ __metadata:
simple-xml-to-json: "npm:^1.2.2"
unified: "npm:^11.0.5"
zod: "npm:^3.23.8"
checksum: 10/b14381b0b0d35e6cba962abf02b88df545cb05780c950ef5ed622235cbeee447230cf358de4834fc9876c7be352a504f479e7295c58b697287561f7d38b18efa
checksum: 10/42167bf16f754673c171829d25112bb489093f19c809b8b3860cfcf98d4dc40f1f1500d8c23bcae1366672de1088858b889b5bec18a24e8dc63e13916a7b56c2
languageName: node
linkType: hard
"@blocksuite/data-view@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/data-view@npm:0.17.33"
"@blocksuite/data-view@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/data-view@npm:0.18.0"
dependencies:
"@blocksuite/affine-components": "npm:0.17.33"
"@blocksuite/affine-shared": "npm:0.17.33"
"@blocksuite/block-std": "npm:0.17.33"
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/affine-components": "npm:0.18.0"
"@blocksuite/affine-shared": "npm:0.18.0"
"@blocksuite/block-std": "npm:0.18.0"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/icons": "npm:^2.1.70"
"@blocksuite/store": "npm:0.17.33"
"@blocksuite/store": "npm:0.18.0"
"@emotion/hash": "npm:^0.9.2"
"@floating-ui/dom": "npm:^1.6.10"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.0.15"
"@toeverything/theme": "npm:^1.0.19"
date-fns: "npm:^4.0.0"
lit: "npm:^3.2.0"
zod: "npm:^3.23.8"
checksum: 10/9b25844c4200c303e0703f4b3240a9d3bbfe6e08770aa492013d69cd1e9a32d793fc64bd075ca6f256c5c49074fc8f10cb8ccb448e5e44b9033287965549c35d
checksum: 10/63c1732df0b7275502bc77012808b8028507b072158845eea6d3da37a90d17e8c4f71bf702cdf6db88130b3955383709f3b986ba0455a0225b7b5c94a276f3a4
languageName: node
linkType: hard
"@blocksuite/global@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/global@npm:0.17.33"
"@blocksuite/global@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/global@npm:0.18.0"
dependencies:
"@preact/signals-core": "npm:^1.8.0"
lib0: "npm:^0.2.97"
lit: "npm:^3.2.0"
zod: "npm:^3.23.8"
checksum: 10/adc172e6687f66b6b68966aff1cb5e0ccd88056585d8c41264be556837e37e92dba37169103087d57c040419238c58cf607b7ad1173def9921aac5d0748857d9
checksum: 10/7dfb0d8e65fd09c9b7ef7e29bc63ab253c3ed3f2258cab40fbd4dd086f907a1a57f5e76d96e154dee6c91ab7cc5e0a71c4e6a0380b01aa4e223c21d327b095f9
languageName: node
linkType: hard
@@ -2846,49 +2837,49 @@ __metadata:
languageName: node
linkType: hard
"@blocksuite/inline@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/inline@npm:0.17.33"
"@blocksuite/inline@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/inline@npm:0.18.0"
dependencies:
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/global": "npm:0.18.0"
"@preact/signals-core": "npm:^1.8.0"
zod: "npm:^3.23.8"
peerDependencies:
lit: ^3.2.0
yjs: ^13.6.18
checksum: 10/007b0f4401ba5215760970d70896ef064033e176e3d492110980fd3e87c9522190aae2b7fd15f3f7b187a1a64598cbbfbb77b57ade18abf5fce7079c60996992
checksum: 10/f6db02fb6c3bda59c3af1619f333b81faa069062b5705032dd74841e49a19bbfece803ea2ab483a2d9e0677a2894e7aaebb5ccc0baa9a6c1ff553fd5530002b4
languageName: node
linkType: hard
"@blocksuite/presets@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/presets@npm:0.17.33"
"@blocksuite/presets@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/presets@npm:0.18.0"
dependencies:
"@blocksuite/affine-block-surface": "npm:0.17.33"
"@blocksuite/affine-model": "npm:0.17.33"
"@blocksuite/affine-shared": "npm:0.17.33"
"@blocksuite/block-std": "npm:0.17.33"
"@blocksuite/blocks": "npm:0.17.33"
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/inline": "npm:0.17.33"
"@blocksuite/store": "npm:0.17.33"
"@blocksuite/affine-block-surface": "npm:0.18.0"
"@blocksuite/affine-model": "npm:0.18.0"
"@blocksuite/affine-shared": "npm:0.18.0"
"@blocksuite/block-std": "npm:0.18.0"
"@blocksuite/blocks": "npm:0.18.0"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/inline": "npm:0.18.0"
"@blocksuite/store": "npm:0.18.0"
"@floating-ui/dom": "npm:^1.6.10"
"@lottiefiles/dotlottie-wc": "npm:^0.2.16"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.0.15"
"@toeverything/theme": "npm:^1.0.19"
lit: "npm:^3.2.0"
zod: "npm:^3.23.8"
checksum: 10/f46861883b57112153c1b4e1d43957788b711b20ecd0efd31bb4e9b12012ddf44c3e3a394d729ed204c6bcd710c9901468a8641da0754d1c2e280793eb6615b0
checksum: 10/a000d5730a1bdc0bd14302eaaf829130930683c4042f1a4bd555796683fb06cb4b01a5b0e450cdd9875ba75a2611c63e10791a06a5165284f71e1949d6304c5d
languageName: node
linkType: hard
"@blocksuite/store@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/store@npm:0.17.33"
"@blocksuite/store@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/store@npm:0.18.0"
dependencies:
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/inline": "npm:0.17.33"
"@blocksuite/sync": "npm:0.17.33"
"@blocksuite/global": "npm:0.18.0"
"@blocksuite/inline": "npm:0.18.0"
"@blocksuite/sync": "npm:0.18.0"
"@preact/signals-core": "npm:^1.8.0"
"@types/flexsearch": "npm:^0.7.6"
"@types/lodash.ismatch": "npm:^4.4.9"
@@ -2904,21 +2895,21 @@ __metadata:
zod: "npm:^3.23.8"
peerDependencies:
yjs: ^13.6.18
checksum: 10/2a5c6065df2405d9238603228303432ade303c7765d8b42a5e707e257634af8844c2572bcf92da2e8e5ceda0740854c583877236514dcc7d5794377fea86e61c
checksum: 10/f70fa3b4492bf8fdee5a8a3da19a437bfe1b4836b661265724b7269b2b6afbf8b22942a3e0793947a6f43e29854f3a90e848ac1e1e088b30987b560ca2100e5c
languageName: node
linkType: hard
"@blocksuite/sync@npm:0.17.33":
version: 0.17.33
resolution: "@blocksuite/sync@npm:0.17.33"
"@blocksuite/sync@npm:0.18.0":
version: 0.18.0
resolution: "@blocksuite/sync@npm:0.18.0"
dependencies:
"@blocksuite/global": "npm:0.17.33"
"@blocksuite/global": "npm:0.18.0"
idb: "npm:^8.0.0"
idb-keyval: "npm:^6.2.1"
y-protocols: "npm:^1.0.6"
peerDependencies:
yjs: ^13.6.15
checksum: 10/a4cdd81333c5b64658f520cac1c6ea8d557342a96e8062bc1ebc24421d0f9b66674f66ae0fcea7accc9504fdcd4fcbc7c92dcd458265eb4fdcbc33ce69be19d3
checksum: 10/ab11fb95b8a41a277bad32728cc07dff700362d52ed2b83f5fc33ff92a4c12ffb1a326eb4a340b0d55f00c1ee13930f2705c2aa6ae20635079c084826f0a9732
languageName: node
linkType: hard
@@ -13092,7 +13083,7 @@ __metadata:
"@affine/debug": "workspace:*"
"@affine/env": "workspace:*"
"@affine/templates": "workspace:*"
"@blocksuite/affine": "npm:0.17.33"
"@blocksuite/affine": "npm:0.18.0"
"@datastructures-js/binary-search-tree": "npm:^5.3.2"
"@testing-library/react": "npm:^16.0.0"
eventemitter2: "npm:^6.4.9"
@@ -13152,10 +13143,10 @@ __metadata:
languageName: node
linkType: hard
"@toeverything/theme@npm:^1.0.15, @toeverything/theme@npm:^1.0.18":
version: 1.0.18
resolution: "@toeverything/theme@npm:1.0.18"
checksum: 10/0a72d7e171037bd1867a78f8d0346dc8fc8f64d6777a6944df99dd32eedd698de0a5ef405fbd41bc7f58e94384f57a67e6c912b3c2914808268de6136f7eea64
"@toeverything/theme@npm:^1.0.18, @toeverything/theme@npm:^1.0.19":
version: 1.0.19
resolution: "@toeverything/theme@npm:1.0.19"
checksum: 10/3f7f1a084394f34beb2f065cc6a79a08be3f7197c365daf089a01a8ca152f3ec84533601019dfefb60dc0e0743a98979e719e9f984dcd58b32998e0e58c8fb92
languageName: node
linkType: hard