mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-04 08:38:34 +00:00
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) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>toeverything/blocksuite (@​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 ([#​8782](https://redirect.github.com/toeverything/blocksuite/issues/8782)) - feat(blocks): add lazy loading to image and iframe ([#​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:
26
.github/workflows/build-test.yml
vendored
26
.github/workflows/build-test.yml
vendored
@@ -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
|
||||
|
||||
2
packages/common/env/package.json
vendored
2
packages/common/env/package.json
vendored
@@ -3,7 +3,7 @@
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"devDependencies": {
|
||||
"@blocksuite/affine": "0.17.33",
|
||||
"@blocksuite/affine": "0.18.0",
|
||||
"vitest": "2.1.4"
|
||||
},
|
||||
"exports": {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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')
|
||||
);
|
||||
});
|
||||
});
|
||||
Binary file not shown.
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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}`
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
import { Service } from '../../../framework';
|
||||
import { WorkspaceUpgrade } from '../entities/upgrade';
|
||||
|
||||
export class WorkspaceUpgradeService extends Service {
|
||||
upgrade = this.framework.createEntity(WorkspaceUpgrade);
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
export { WorkspaceUpgrade } from './upgrade';
|
||||
@@ -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>
|
||||
);
|
||||
};
|
||||
@@ -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',
|
||||
});
|
||||
@@ -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>
|
||||
);
|
||||
};
|
||||
@@ -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>;
|
||||
};
|
||||
|
||||
5
tests/affine-migration/.gitignore
vendored
5
tests/affine-migration/.gitignore
vendored
@@ -1,5 +0,0 @@
|
||||
static
|
||||
fixtures/*.ydoc
|
||||
test-results
|
||||
*.zip
|
||||
web-static
|
||||
@@ -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.
|
||||
@@ -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();
|
||||
});
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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;
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"esModuleInterop": true,
|
||||
"resolveJsonModule": true,
|
||||
"outDir": "lib"
|
||||
},
|
||||
"include": ["e2e"],
|
||||
"references": [
|
||||
{
|
||||
"path": "../../tests/kit"
|
||||
},
|
||||
{
|
||||
"path": "../../tests/fixtures"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -149,9 +149,6 @@
|
||||
{
|
||||
"path": "./tests/affine-local"
|
||||
},
|
||||
{
|
||||
"path": "./tests/affine-migration"
|
||||
},
|
||||
{
|
||||
"path": "./tests/affine-mobile"
|
||||
},
|
||||
|
||||
367
yarn.lock
367
yarn.lock
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user