Compare commits

...

19 Commits

Author SHA1 Message Date
李华桥
4db811c999 v0.10.1-beta.0 2023-11-15 17:49:12 +08:00
Peng Xiao
9b631f2328 fix(infra): page id compat fix for page ids in workspace.meta (#4950)
since we strip `page:` in keys of workspacedoc.spaces, we should also strip the prefix in meta.pages as well.
2023-11-15 17:36:08 +08:00
LongYinan
01f481a9b6 ci: only disable postinstall on macOS in nightly desktop build (#4938) 2023-11-14 23:00:30 +08:00
Joooye_34
0177ab5c87 fix(infra): workspace migration without blockVersions (#4936) 2023-11-14 14:38:11 +01:00
Peng Xiao
4db35d341c perf(component): use png instead of svg for rendering noise svg (#4935) 2023-11-14 11:52:51 +00:00
DarkSky
3c4a803c97 fix: change password token check (#4934) (#4932) 2023-11-14 11:15:54 +00:00
LongYinan
05154dc7ca ci: disable postinstall in nightly desktop build (#4930)
Should be part of https://github.com/toeverything/AFFiNE/pull/4885
2023-11-14 14:13:55 +08:00
Peng Xiao
c90b477f60 fix(core): change server url of stable to insider (#4902) (#4926) 2023-11-14 12:05:52 +08:00
李华桥
6f18ddbe85 v0.10.1 2023-11-13 19:49:26 +08:00
LongYinan
dde779a71d test(e2e): add subdoc migration test (#4921)
test(e2e): add subdoc migration test

fix: remove .only
2023-11-13 18:00:40 +08:00
Peng Xiao
bd9f66fbc7 fix(infra): compatibility fix for space prefix (#4912)
It seems there are some cases that [this upstream PR](https://github.com/toeverything/blocksuite/pull/4747) will cause data loss.

Because of some historical reasons, the page id could be different with its doc id.
It might be caused by subdoc migration in the following (not 100% sure if all white screen issue is caused by it) 0714c12703/packages/common/infra/src/blocksuite/index.ts (L538-L540)

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

The provided fix in the PR will patch the `spaces` field of the root doc so that after 0.10 the page doc can still be found in the `spaces` map. It shall apply to both of the idb & sqlite datasources.

Special thanks to @lawvs 's db file for investigation!
2023-11-13 17:57:56 +08:00
liuyi
92f1f40bfa fix(server): wrap updates applying in a transaction (#4922) 2023-11-13 08:49:30 +00:00
LongYinan
48dc1049b3 Merge pull request #4913 from toeverything/darksky/cleanup-depolyment
chore: cleanup deployment
2023-11-12 11:20:02 +08:00
DarkSky
9add530370 chore: cleanup deployment 2023-11-12 11:03:25 +08:00
LongYinan
b77460d871 Merge pull request #4908 from toeverything/61/hotfix-websocket-payload
fix(server): increase server acceptable websocket payload size
2023-11-10 22:01:48 +08:00
forehalo
42db41776b fix(server): increase server acceptable websocket payload size 2023-11-10 21:31:45 +08:00
李华桥
075439c74f fix(core): change server url of stable to insider 2023-11-10 18:32:53 +08:00
Yifeng Wang
fc6c553ece chore: bump theme (#4904)
Co-authored-by: 李华桥 <joooye1991@gmail.com>
2023-11-10 15:40:38 +08:00
Joooye_34
59cb3d5df1 fix(core): change server url of stable to insider (#4902) 2023-11-10 14:50:57 +08:00
76 changed files with 1606 additions and 130 deletions

View File

@@ -66,7 +66,6 @@ jobs:
check-yarn-binary:
name: Check yarn binary
runs-on: ubuntu-latest
environment: development
steps:
- uses: actions/checkout@v4
- name: Run check

View File

@@ -86,11 +86,11 @@ jobs:
# For windows, we need a separate approach
matrix:
spec:
- runner: macos-latest-xlarge
- runner: macos-latest
platform: darwin
arch: x64
target: x86_64-apple-darwin
- runner: macos-latest-xlarge
- runner: macos-latest
platform: darwin
arch: arm64
target: aarch64-apple-darwin
@@ -115,6 +115,17 @@ jobs:
- uses: actions/checkout@v4
- name: Setup Node.js
timeout-minutes: 10
if: ${{ matrix.spec.platform == 'darwin' }}
uses: ./.github/actions/setup-node
with:
extra-flags: workspaces focus @affine/electron @affine/monorepo
hard-link-nm: false
build-plugins: false
nmHoistingLimits: workspaces
enableScripts: false
- name: Setup Node.js
timeout-minutes: 10
if: ${{ matrix.spec.platform != 'darwin' }}
uses: ./.github/actions/setup-node
with:
extra-flags: workspaces focus @affine/electron @affine/monorepo

View File

@@ -1,6 +1,6 @@
{
"name": "@affine/monorepo",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"private": true,
"author": "toeverything",
"license": "MIT",

View File

@@ -1,7 +1,7 @@
{
"name": "@affine/server",
"private": true,
"version": "0.10.0",
"version": "0.10.1-beta.0",
"description": "Affine Node.js server",
"type": "module",
"bin": {

View File

@@ -23,6 +23,8 @@ import {
export const NextAuthOptionsProvide = Symbol('NextAuthOptions');
const TrustedProviders = ['google'];
export const NextAuthOptionsProvider: FactoryProvider<NextAuthOptions> = {
provide: NextAuthOptionsProvide,
useFactory(
@@ -51,6 +53,23 @@ export const NextAuthOptionsProvider: FactoryProvider<NextAuthOptions> = {
}
return createUser(userData);
};
// linkAccount exists in the adapter
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const linkAccount = prismaAdapter.linkAccount!.bind(prismaAdapter);
prismaAdapter.linkAccount = async account => {
// google account must be a verified email
if (TrustedProviders.includes(account.provider)) {
await prisma.user.update({
where: {
id: account.userId,
},
data: {
emailVerified: new Date(),
},
});
}
return linkAccount(account) as Promise<void>;
};
// getUser exists in the adapter
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const getUser = prismaAdapter.getUser!.bind(prismaAdapter)!;

View File

@@ -135,9 +135,17 @@ export class AuthResolver {
@Args('token') token: string,
@Args('newPassword') newPassword: string
) {
// we only create user account after user sign in with email link
const id = await this.session.get(token);
if (!id || id !== user.id || !user.emailVerified) {
if (!user.emailVerified) {
throw new ForbiddenException('Please verify the email first');
}
if (
!id ||
(id !== user.id &&
// change password after sign in with email link
// we only create user account after user sign in with email link
id !== user.email)
) {
throw new ForbiddenException('Invalid token');
}

View File

@@ -8,7 +8,13 @@ import {
import { Snapshot, Update } from '@prisma/client';
import { chunk } from 'lodash-es';
import { defer, retry } from 'rxjs';
import { applyUpdate, Doc, encodeStateAsUpdate, encodeStateVector } from 'yjs';
import {
applyUpdate,
Doc,
encodeStateAsUpdate,
encodeStateVector,
transact,
} from 'yjs';
import { Config } from '../../config';
import { Metrics } from '../../metrics/metrics';
@@ -84,16 +90,18 @@ export class DocManager implements OnModuleInit, OnModuleDestroy {
const next = () => {
const updates = chunks.shift();
if (updates?.length) {
updates.forEach(u => {
try {
applyUpdate(doc, u);
} catch (e) {
this.logger.error(
`Failed to apply update: ${updates
.map(u => u.toString('hex'))
.join('\n')}`
);
}
transact(doc, () => {
updates.forEach(u => {
try {
applyUpdate(doc, u);
} catch (e) {
this.logger.error(
`Failed to apply update: ${updates
.map(u => u.toString('hex'))
.join('\n')}`
);
}
});
});
// avoid applying too many updates in single round which will take the whole cpu time like dead lock

View File

@@ -50,6 +50,8 @@ type EventResponse<Data = any> =
@WebSocketGateway({
cors: process.env.NODE_ENV !== 'production',
transports: ['websocket'],
// see: https://socket.io/docs/v4/server-options/#maxhttpbuffersize
maxHttpBufferSize: 1e8, // 100 MB
})
export class EventsGateway implements OnGatewayConnection, OnGatewayDisconnect {
protected logger = new Logger(EventsGateway.name);

View File

@@ -1,6 +1,6 @@
{
"name": "@affine/storage",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"engines": {
"node": ">= 10.16.0 < 11 || >= 11.8.0"
},

View File

@@ -8,5 +8,5 @@
"react": "18.2.0",
"react-dom": "18.2.0"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -9,5 +9,5 @@
"@types/debug": "^4.1.9",
"vitest": "0.34.6"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -27,5 +27,5 @@
"dependencies": {
"lit": "^3.0.2"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -111,5 +111,5 @@
"optional": true
}
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -2,7 +2,7 @@ import type { Page, PageMeta, Workspace } from '@blocksuite/store';
import { createIndexeddbStorage } from '@blocksuite/store';
import type { createStore, WritableAtom } from 'jotai/vanilla';
import type { Doc } from 'yjs';
import { Array as YArray, Doc as YDoc, Map as YMap } from 'yjs';
import { Array as YArray, Doc as YDoc, Map as YMap, transact } from 'yjs';
export async function initEmptyPage(page: Page, title?: string) {
await page.waitForLoaded();
@@ -537,6 +537,7 @@ function migrateBlocks(
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]) => {
const blockData = value.clone();
@@ -597,11 +598,13 @@ export async function forceUpgradePages(
options: Omit<UpgradeOptions, 'createWorkspace'>
): Promise<boolean> {
const rootDoc = await options.getCurrentRootDoc();
guidCompatibilityFix(rootDoc);
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 schema = options.getSchema();
const oldVersions = versions.toJSON();
const oldVersions = versions?.toJSON() ?? {};
spaces.forEach((space: Doc) => {
try {
schema.upgradePage(0, oldVersions, space);
@@ -623,6 +626,7 @@ async function upgradeV2ToV3(options: UpgradeOptions): Promise<boolean> {
const meta = rootDoc.getMap('meta') as YMap<unknown>;
const versions = meta.get('blockVersions') as YMap<number>;
const schema = options.getSchema();
guidCompatibilityFix(rootDoc);
spaces.forEach((space: Doc) => {
schema.upgradePage(
0,
@@ -654,6 +658,48 @@ async function upgradeV2ToV3(options: UpgradeOptions): Promise<boolean> {
return true;
}
// 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 guidCompatibilityFix(rootDoc: YDoc) {
let changed = false;
transact(rootDoc, () => {
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);
changed = true;
console.debug(
`fixed space id ${pageId} -> ${newPageId}, doc id: ${doc.guid}`
);
}
});
});
return changed;
}
export enum WorkspaceVersion {
// v1 is treated as undefined
SubDoc = 2,

View File

@@ -1,6 +1,6 @@
{
"name": "@affine/sdk",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"type": "module",
"scripts": {
"build": "vite build",

View File

@@ -1,7 +1,7 @@
{
"name": "@toeverything/y-indexeddb",
"type": "module",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"description": "IndexedDB database adapter for Yjs",
"repository": "toeverything/AFFiNE",
"author": "toeverything",

View File

@@ -1,7 +1,7 @@
{
"name": "y-provider",
"type": "module",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"description": "Yjs provider protocol for multi document support",
"exports": {
".": "./src/index.ts"

View File

@@ -98,38 +98,21 @@ export const createLazyProvider = (
async function syncDoc(doc: Doc) {
const guid = doc.guid;
{
// backport from `@blocksuite/store`
const prefixId = guid.startsWith('space:') ? guid.slice(6) : guid;
const possible1 = `${rootDoc.guid}:space:${prefixId}`;
const possible2 = `space:${prefixId}`;
const update1 = await datasource.queryDocState(possible1);
const update2 = await datasource.queryDocState(possible2);
const update = await datasource.queryDocState(guid);
let hasUpdate = false;
if (
update1 &&
update1.missing.length !== 2 &&
update1.missing[0] !== 0 &&
update1.missing[1] !== 0
update &&
update.missing.length !== 2 &&
update.missing[0] !== 0 &&
update.missing[1] !== 0
) {
applyUpdate(doc, update1.missing, origin);
hasUpdate = true;
}
if (
update2 &&
update2.missing.length !== 2 &&
update2.missing[0] !== 0 &&
update2.missing[1] !== 0
) {
applyUpdate(doc, update2.missing, origin);
applyUpdate(doc, update.missing, origin);
hasUpdate = true;
}
if (hasUpdate) {
await datasource.sendDocUpdate(
guid,
encodeStateAsUpdate(
doc,
update1 ? update1.state : update2 ? update2.state : undefined
)
encodeStateAsUpdate(doc, update ? update.state : undefined)
);
}
}

View File

@@ -40,7 +40,7 @@
"@radix-ui/react-toolbar": "^1.0.4",
"@toeverything/hooks": "workspace:*",
"@toeverything/infra": "workspace:*",
"@toeverything/theme": "^0.7.20",
"@toeverything/theme": "^0.7.24",
"@vanilla-extract/dynamic": "^2.0.3",
"bytes": "^3.1.2",
"check-password-strength": "^2.0.7",
@@ -90,5 +90,5 @@
"vitest": "0.34.6",
"yjs": "^13.6.8"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -3,6 +3,7 @@ import type { ComplexStyleRule } from '@vanilla-extract/css';
import { globalStyle, style } from '@vanilla-extract/css';
import { breakpoints } from '../../styles/mui-theme';
export const appStyle = style({
width: '100%',
position: 'relative',
@@ -22,9 +23,11 @@ export const appStyle = style({
content: '""',
position: 'absolute',
inset: 0,
opacity: 'var(--affine-noise-opacity)',
backgroundSize: '25%',
backgroundImage: `url("data:image/svg+xml,%3Csvg viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.25' numOctaves='10' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E")`,
opacity: 'var(--affine-noise-opacity, 0)',
backgroundRepeat: 'repeat',
backgroundSize: '2.5%',
// todo: figure out how to use vanilla-extract webpack plugin to inject img url
backgroundImage: `var(--noise-background)`,
},
},
});

View File

@@ -8,6 +8,10 @@
/*transition: all 0.1s;*/
}
:root {
--noise-background: url(./noise.png);
}
html,
body,
h1,

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@@ -33,7 +33,7 @@ export function getRuntimeConfig(buildFlags: BuildFlags): RuntimeConfig {
enableCaptcha: true,
enableEnhanceShareMode: false,
enablePayment: true,
serverUrlPrefix: 'https://app.affine.pro',
serverUrlPrefix: 'https://insider.affine.pro', // Let insider be stable environment temporarily.
editorFlags,
appVersion: packageJson.version,
editorVersion: packageJson.dependencies['@blocksuite/editor'],

View File

@@ -2,7 +2,7 @@
"name": "@affine/core",
"type": "module",
"private": true,
"version": "0.10.0",
"version": "0.10.1-beta.0",
"scripts": {
"build": "yarn -T run build-core",
"dev": "yarn -T run dev-core",

View File

@@ -6,6 +6,7 @@ import {
currentWorkspaceIdAtom,
getCurrentStore,
} from '@toeverything/infra/atom';
import { guidCompatibilityFix } from '@toeverything/infra/blocksuite';
import type { ReactElement } from 'react';
import {
type LoaderFunction,
@@ -43,6 +44,7 @@ export const loader: LoaderFunction = async args => {
const workspace = await rootStore.get(workspaceAtom);
return (() => {
guidCompatibilityFix(workspace.doc);
const blockVersions = workspace.meta.blockVersions;
if (!blockVersions) {
return true;

View File

@@ -1,7 +1,7 @@
{
"name": "@affine/electron",
"private": true,
"version": "0.10.0",
"version": "0.10.1-beta.0",
"author": "toeverything",
"repository": {
"url": "https://github.com/toeverything/AFFiNE",
@@ -51,7 +51,7 @@
"builder-util-runtime": "^9.2.1",
"cross-env": "^7.0.3",
"electron": "^27.0.0",
"electron-log": "^5.0.0-rc.1",
"electron-log": "^5.0.0",
"electron-squirrel-startup": "1.0.0",
"electron-window-state": "^5.0.3",
"esbuild": "^0.19.4",

View File

@@ -54,7 +54,6 @@ function spawnOrReloadElectron() {
if (code && code !== 0) {
console.log(`Electron exited with code ${code}`);
}
process.exit(code ?? 0);
});
}

View File

@@ -5,7 +5,7 @@ import {
} from '@affine/native';
import { WorkspaceVersion } from '@toeverything/infra/blocksuite';
import { migrateToLatest } from '../db/migration';
import { applyGuidCompatibilityFix, migrateToLatest } from '../db/migration';
import { logger } from '../logger';
/**
@@ -29,6 +29,7 @@ export abstract class BaseSQLiteAdapter {
if (maxVersion !== WorkspaceVersion.Surface) {
await migrateToLatest(this.path, WorkspaceVersion.Surface);
}
await applyGuidCompatibilityFix(this.db);
logger.info(`[SQLiteAdapter:${this.role}]`, 'connected:', this.path);
}
return this.db;

View File

@@ -6,6 +6,7 @@ import { __unstableSchemas, AffineSchemas } from '@blocksuite/blocks/models';
import { Schema } from '@blocksuite/store';
import {
forceUpgradePages,
guidCompatibilityFix,
migrateToSubdoc,
WorkspaceVersion,
} from '@toeverything/infra/blocksuite';
@@ -119,3 +120,21 @@ async function replaceRows(
})
);
}
export const applyGuidCompatibilityFix = async (db: SqliteConnection) => {
const oldRows = await db.getUpdates(undefined);
const rootDoc = new YDoc();
oldRows.forEach(row => applyUpdate(rootDoc, row.data));
// see comments of guidCompatibilityFix
guidCompatibilityFix(rootDoc);
// todo: backup?
await db.replaceUpdates(undefined, [
{
docId: undefined,
data: encodeStateAsUpdate(rootDoc),
},
]);
};

View File

@@ -24,7 +24,7 @@ export const mode = process.env.NODE_ENV;
export const isDev = mode === 'development';
const API_URL_MAPPING = {
stable: `https://app.affine.pro`,
stable: `https://insider.affine.pro`, // Let insider be stable environment temporarily.
beta: `https://insider.affine.pro`,
canary: `https://affine.fail`,
internal: `https://insider.affine.pro`,

View File

@@ -1,4 +1,5 @@
import { shell } from 'electron';
import { app } from 'electron';
import log from 'electron-log';
export const logger = log.scope('main');
@@ -12,3 +13,7 @@ export async function revealLogFile() {
const filePath = getLogFilePath();
return await shell.openPath(filePath);
}
app.on('before-quit', () => {
log.transports.console.level = false;
});

View File

@@ -10,6 +10,9 @@ import { updaterSubjects } from './event';
const mode = process.env.NODE_ENV;
const isDev = mode === 'development';
// skip auto update in dev mode & internal
const disabled = buildType === 'internal' || isDev;
export const quitAndInstall = async () => {
autoUpdater.quitAndInstall();
};
@@ -17,7 +20,7 @@ export const quitAndInstall = async () => {
let lastCheckTime = 0;
export const checkForUpdates = async (force = true) => {
// check every 30 minutes (1800 seconds) at most
if (force || lastCheckTime + 1000 * 1800 < Date.now()) {
if (!disabled && (force || lastCheckTime + 1000 * 1800 < Date.now())) {
lastCheckTime = Date.now();
return await autoUpdater.checkForUpdates();
}
@@ -25,8 +28,7 @@ export const checkForUpdates = async (force = true) => {
};
export const registerUpdater = async () => {
// skip auto update in dev mode & internal
if (buildType === 'internal' || isDev) {
if (disabled) {
return;
}
@@ -43,7 +45,6 @@ export const registerUpdater = async () => {
channel: buildType,
// hack for custom provider
provider: 'custom' as 'github',
// @ts-expect-error - just ignore for now
repo: buildType !== 'internal' ? 'AFFiNE' : 'AFFiNE-Releases',
owner: 'toeverything',
releaseType: buildType === 'stable' ? 'release' : 'prerelease',

View File

@@ -1,6 +1,6 @@
{
"name": "@affine/graphql",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"description": "Autogenerated GraphQL client for affine.pro",
"license": "MIT",
"type": "module",

View File

@@ -66,5 +66,5 @@
"optional": true
}
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -76,12 +76,25 @@ describe('useBlockSuitePagePreview', () => {
page.getBlockByFlavour('affine:note')[0].id
);
const hook = renderHook(() => useAtomValue(useBlockSuitePagePreview(page)));
expect(hook.result.current).toBe('\nHello, world!');
expect(hook.result.current).toBe('Hello, world!');
page.transact(() => {
page.getBlockById(id)!.text!.insert('Test', 0);
});
await new Promise(resolve => setTimeout(resolve, 100));
hook.rerender();
expect(hook.result.current).toBe('\nTestHello, world!');
expect(hook.result.current).toBe('TestHello, world!');
// Insert before
page.addBlock(
'affine:paragraph',
{
text: new page.Text('First block!'),
},
page.getBlockByFlavour('affine:note')[0].id,
0
);
await new Promise(resolve => setTimeout(resolve, 100));
hook.rerender();
expect(hook.result.current).toBe('First block! TestHello, world!');
});
});

View File

@@ -1,20 +1,49 @@
import type { ParagraphBlockModel } from '@blocksuite/blocks/models';
import type { Page } from '@blocksuite/store';
import type { Atom } from 'jotai';
import { atom } from 'jotai';
const MAX_PREVIEW_LENGTH = 150;
const MAX_SEARCH_BLOCK_COUNT = 30;
const weakMap = new WeakMap<Page, Atom<string>>();
export const getPagePreviewText = (page: Page) => {
// TODO this is incorrect, since the order of blocks is not guaranteed
const paragraphBlocks = page.getBlockByFlavour(
'affine:paragraph'
) as ParagraphBlockModel[];
const text = paragraphBlocks
.slice(0, 10)
.map(block => block.text.toString())
.join('\n');
return text.slice(0, 300);
const pageRoot = page.root;
if (!pageRoot) {
return '';
}
const preview: string[] = [];
// DFS
const queue = [pageRoot];
let previewLenNeeded = MAX_PREVIEW_LENGTH;
let count = MAX_SEARCH_BLOCK_COUNT;
while (queue.length && previewLenNeeded > 0 && count-- > 0) {
const block = queue.shift();
if (!block) {
console.error('Unexpected empty block');
break;
}
if (block.children) {
queue.unshift(...block.children);
}
if (block.role !== 'content') {
continue;
}
if (block.text) {
const text = block.text.toString();
if (!text.length) {
continue;
}
previewLenNeeded -= text.length;
preview.push(text);
} else {
// image/attachment/bookmark
const type = block.flavour.split('affine:')[1] ?? null;
previewLenNeeded -= type.length + 2;
type && preview.push(`[${type}]`);
}
}
return preview.join(' ');
};
const emptyAtom = atom<string>('');

View File

@@ -85,7 +85,7 @@ export function loadPage(page: Page, priority = 0) {
logger.debug('page loaded', page.id);
// we do not know how long it takes to load a page here
// so that we just use 300ms timeout as the default page processing time
await awaitForTimeout(1000);
await awaitForTimeout(300);
} else {
// do nothing if it is already loaded
}

View File

@@ -37,5 +37,5 @@
"ts-node": "^10.9.1",
"typescript": "^5.2.2"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -58,5 +58,5 @@
"test": "ava",
"version": "napi version"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -7,5 +7,5 @@
"./v1/*.json": "./v1/*.json",
"./preloading.json": "./preloading.json"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -48,5 +48,5 @@
"vitest": "0.34.6",
"ws": "^8.14.2"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -140,12 +140,10 @@ const fetchMetadata: FetchMetadata = async (get, { signal }) => {
performanceJotaiLogger.info('%s adapter', Adapter.flavour);
const { CRUD, flavour: currentFlavour } = Adapter;
if (
Adapter.Events['app:access'] &&
!(await Adapter.Events['app:access']())
) {
performanceJotaiLogger.info('%s app:access', Adapter.flavour);
const appAccessFn = Adapter.Events['app:access'];
const canAccess = appAccessFn && !(await appAccessFn());
performanceJotaiLogger.info('%s app:access', Adapter.flavour);
if (canAccess) {
// skip the adapter if the user doesn't have access to it
const removed = metadata.filter(
meta => meta.flavour === currentFlavour

View File

@@ -38,5 +38,5 @@
"react": "*",
"react-dom": "*"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -3,7 +3,7 @@
"type": "module",
"private": true,
"description": "Hello world plugin",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"scripts": {
"dev": "af dev",
"build": "af build"

View File

@@ -1,7 +1,7 @@
{
"name": "@affine/image-preview-plugin",
"type": "module",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"description": "Image preview plugin",
"affinePlugin": {
"release": true,
@@ -18,7 +18,7 @@
"@affine/sdk": "workspace:*",
"@blocksuite/icons": "2.1.35",
"@toeverything/components": "^0.0.46",
"@toeverything/theme": "^0.7.20",
"@toeverything/theme": "^0.7.24",
"clsx": "^2.0.0",
"foxact": "^0.2.20",
"react-error-boundary": "^4.0.11",

View File

@@ -3,7 +3,7 @@
"type": "module",
"private": true,
"description": "Outline plugin",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"scripts": {
"dev": "af dev",
"build": "af build"

View File

@@ -3,7 +3,7 @@
"type": "module",
"private": true,
"description": "Vue hello world plugin",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"scripts": {
"dev": "af dev",
"build": "af build"

View File

@@ -9,5 +9,5 @@
"@affine-test/kit": "workspace:*",
"@playwright/test": "^1.39.0"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -11,5 +11,5 @@
"@types/fs-extra": "^11.0.2",
"fs-extra": "^11.1.1"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -12,5 +12,5 @@
"fs-extra": "^11.1.1",
"playwright": "^1.39.0"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

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

View File

@@ -0,0 +1,12 @@
# AFFiNE Legacy 0.6.1-beta.1
This package is used to record legacy data of 0.6.1-beta.1.
Run following commands locally to record data to `tests/fixtures/legacy/0.6.1-beta.1`.
```sh
cd tests/affine-legacy/0.6.1-beta.1
yarn run unzip
yarn run e2e
```
If you want to debug, running `yarn run e2e --ui` is ok. Or using https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright is more better.

View File

@@ -0,0 +1,36 @@
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 {
clickNewPageButton,
waitForEditorLoad,
} from '@affine-test/kit/utils/page-logic';
test.beforeEach(async ({ page }) => {
await patchDataEnhancement(page);
});
test('record 0.6.1-beta.1 legacy data', async ({ page }) => {
await page.goto('http://localhost:8081/');
await waitForEditorLoad(page);
await clickNewPageButton(page);
const locator = page.locator('v-line').nth(0);
await locator.fill('hello');
await page.keyboard.press('Enter');
await page.keyboard.type('TEST CONTENT', { delay: 50 });
const localStorageData = await page.evaluate(() =>
window.readAffineLocalStorage()
);
const { idbData, binaries } = await page.evaluate(() =>
window.readAffineDatabase()
);
const snapshotStorage = new SnapshotStorage('0.6.1-beta.1');
await snapshotStorage.write({
idbData,
localStorageData,
binaries,
});
});

View File

@@ -0,0 +1,22 @@
{
"name": "@affine-legacy/0.6.1-beta.1",
"description": "AFFiNE 0.6.1-beta.1 static output",
"scripts": {
"unzip": "wget -O static.zip https://github.com/toeverything/AFFiNE/releases/download/v0.6.1-beta.1/web-static.zip && unzip static.zip -d static",
"start": "yarn exec serve -s static -l 8081",
"e2e": "yarn playwright test"
},
"devDependencies": {
"@affine-test/fixtures": "workspace:*",
"@affine-test/kit": "workspace:*",
"@blocksuite/block-std": "0.0.0-20231110042432-4fdac4dc-nightly",
"@blocksuite/blocks": "0.0.0-20231110042432-4fdac4dc-nightly",
"@blocksuite/global": "0.0.0-20231110042432-4fdac4dc-nightly",
"@blocksuite/store": "0.0.0-20231110042432-4fdac4dc-nightly",
"@playwright/test": "^1.39.0",
"express": "^4.18.2",
"http-proxy-middleware": "^3.0.0-beta.1",
"serve": "^14.2.1"
},
"version": "0.10.1-beta.0"
}

View File

@@ -0,0 +1,41 @@
import type {
PlaywrightTestConfig,
PlaywrightWorkerOptions,
} from '@playwright/test';
const config: PlaywrightTestConfig = {
testDir: './e2e',
fullyParallel: true,
timeout: process.env.CI ? 50_000 : 30_000,
use: {
baseURL: 'http://localhost:8081/',
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: 4,
retries: 1,
reporter: process.env.CI ? 'github' : 'list',
webServer: [
{
command: 'yarn run start',
port: 8081,
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
},
],
};
if (process.env.CI) {
config.retries = 3;
config.workers = '50%';
}
export default config;

View File

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

View File

@@ -18,5 +18,5 @@
"http-proxy-middleware": "^3.0.0-beta.1",
"serve": "^14.2.1"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -18,5 +18,5 @@
"http-proxy-middleware": "^3.0.0-beta.1",
"serve": "^14.2.1"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -18,5 +18,5 @@
"http-proxy-middleware": "^3.0.0-beta.1",
"serve": "^14.2.1"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -9,5 +9,5 @@
"@affine-test/kit": "workspace:*",
"@playwright/test": "^1.39.0"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -120,3 +120,41 @@ test('v3 to v4, surface migration', async ({ page }) => {
expect(workspace.version).toBe(4);
}
});
test('v0 to v4, subdoc migration', async ({ page }) => {
await open404PageToInitData(page, '0.6.1-beta.1');
await page.goto(coreUrl);
await page.waitForTimeout(5000);
// go to all page
await clickSideBarAllPageButton(page);
// find if page name with "hello" exists and click it
await page
.locator('[data-testid="page-list-item-title-text"]:has-text("hello")')
.click();
await waitForEditorLoad(page);
// check if content is correct
expect(await page.locator('v-line').nth(0).textContent()).toBe('hello');
expect(await page.locator('v-line').nth(1).textContent()).toBe(
'TEST CONTENT'
);
// check edgeless mode is correct
await clickEdgelessModeButton(page);
await expect(page.locator('edgeless-toolbar')).toBeVisible();
await expect(page.locator('affine-edgeless-page')).toBeVisible();
const changedLocalStorageData = await page.evaluate(() =>
window.readAffineLocalStorage()
);
const workspaces = JSON.parse(
changedLocalStorageData['jotai-workspaces']
) as any[];
for (const workspace of workspaces) {
expect(workspace.version).toBe(4);
}
});

View File

@@ -13,5 +13,5 @@
"@blocksuite/store": "0.0.0-20231110042432-4fdac4dc-nightly",
"@playwright/test": "^1.39.0"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -9,5 +9,5 @@
"@affine-test/kit": "workspace:*",
"@playwright/test": "^1.39.0"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

Binary file not shown.

View File

@@ -0,0 +1,530 @@
[
{
"name": "affine-local",
"version": 1,
"stores": [
{
"name": "milestone",
"keyPath": "id",
"values": []
},
{
"name": "workspace",
"keyPath": "id",
"values": [
{
"id": "sdI1qQamsV",
"updates": [
{
"timestamp": 1699853753756,
"update": "__BINARY__1"
},
{
"timestamp": 1699853753757,
"update": "__BINARY__2"
},
{
"timestamp": 1699853753757,
"update": "__BINARY__3"
},
{
"timestamp": 1699853753757,
"update": "__BINARY__4"
},
{
"timestamp": 1699853753757,
"update": "__BINARY__5"
},
{
"timestamp": 1699853753757,
"update": "__BINARY__6"
},
{
"timestamp": 1699853753758,
"update": "__BINARY__7"
},
{
"timestamp": 1699853753758,
"update": "__BINARY__8"
},
{
"timestamp": 1699853753758,
"update": "__BINARY__9"
},
{
"timestamp": 1699853753759,
"update": "__BINARY__10"
},
{
"timestamp": 1699853753760,
"update": "__BINARY__11"
},
{
"timestamp": 1699853753760,
"update": "__BINARY__12"
},
{
"timestamp": 1699853753761,
"update": "__BINARY__13"
},
{
"timestamp": 1699853753762,
"update": "__BINARY__14"
},
{
"timestamp": 1699853753767,
"update": "__BINARY__15"
},
{
"timestamp": 1699853753768,
"update": "__BINARY__16"
},
{
"timestamp": 1699853753770,
"update": "__BINARY__17"
},
{
"timestamp": 1699853753770,
"update": "__BINARY__18"
},
{
"timestamp": 1699853753771,
"update": "__BINARY__19"
},
{
"timestamp": 1699853753772,
"update": "__BINARY__20"
},
{
"timestamp": 1699853753773,
"update": "__BINARY__21"
},
{
"timestamp": 1699853753774,
"update": "__BINARY__22"
},
{
"timestamp": 1699853753775,
"update": "__BINARY__23"
},
{
"timestamp": 1699853753776,
"update": "__BINARY__24"
},
{
"timestamp": 1699853753777,
"update": "__BINARY__25"
},
{
"timestamp": 1699853753778,
"update": "__BINARY__26"
},
{
"timestamp": 1699853753778,
"update": "__BINARY__27"
},
{
"timestamp": 1699853753779,
"update": "__BINARY__28"
},
{
"timestamp": 1699853753780,
"update": "__BINARY__29"
},
{
"timestamp": 1699853753781,
"update": "__BINARY__30"
},
{
"timestamp": 1699853753782,
"update": "__BINARY__31"
},
{
"timestamp": 1699853753783,
"update": "__BINARY__32"
},
{
"timestamp": 1699853753783,
"update": "__BINARY__33"
},
{
"timestamp": 1699853753784,
"update": "__BINARY__34"
},
{
"timestamp": 1699853753785,
"update": "__BINARY__35"
},
{
"timestamp": 1699853753786,
"update": "__BINARY__36"
},
{
"timestamp": 1699853753787,
"update": "__BINARY__37"
},
{
"timestamp": 1699853753787,
"update": "__BINARY__38"
},
{
"timestamp": 1699853753788,
"update": "__BINARY__39"
},
{
"timestamp": 1699853753789,
"update": "__BINARY__40"
},
{
"timestamp": 1699853753790,
"update": "__BINARY__41"
},
{
"timestamp": 1699853753791,
"update": "__BINARY__42"
},
{
"timestamp": 1699853753792,
"update": "__BINARY__43"
},
{
"timestamp": 1699853753793,
"update": "__BINARY__44"
},
{
"timestamp": 1699853753794,
"update": "__BINARY__45"
},
{
"timestamp": 1699853753794,
"update": "__BINARY__46"
},
{
"timestamp": 1699853753795,
"update": "__BINARY__47"
},
{
"timestamp": 1699853753796,
"update": "__BINARY__48"
},
{
"timestamp": 1699853753797,
"update": "__BINARY__49"
},
{
"timestamp": 1699853753798,
"update": "__BINARY__50"
},
{
"timestamp": 1699853753799,
"update": "__BINARY__51"
},
{
"timestamp": 1699853753800,
"update": "__BINARY__52"
},
{
"timestamp": 1699853753801,
"update": "__BINARY__53"
},
{
"timestamp": 1699853753802,
"update": "__BINARY__54"
},
{
"timestamp": 1699853753802,
"update": "__BINARY__55"
},
{
"timestamp": 1699853753803,
"update": "__BINARY__56"
},
{
"timestamp": 1699853753804,
"update": "__BINARY__57"
},
{
"timestamp": 1699853753805,
"update": "__BINARY__58"
},
{
"timestamp": 1699853753806,
"update": "__BINARY__59"
},
{
"timestamp": 1699853753807,
"update": "__BINARY__60"
},
{
"timestamp": 1699853753807,
"update": "__BINARY__61"
},
{
"timestamp": 1699853753808,
"update": "__BINARY__62"
},
{
"timestamp": 1699853753809,
"update": "__BINARY__63"
},
{
"timestamp": 1699853753810,
"update": "__BINARY__64"
},
{
"timestamp": 1699853753811,
"update": "__BINARY__65"
},
{
"timestamp": 1699853753811,
"update": "__BINARY__66"
},
{
"timestamp": 1699853753812,
"update": "__BINARY__67"
},
{
"timestamp": 1699853753813,
"update": "__BINARY__68"
},
{
"timestamp": 1699853753814,
"update": "__BINARY__69"
},
{
"timestamp": 1699853753815,
"update": "__BINARY__70"
},
{
"timestamp": 1699853753816,
"update": "__BINARY__71"
},
{
"timestamp": 1699853753817,
"update": "__BINARY__72"
},
{
"timestamp": 1699853753818,
"update": "__BINARY__73"
},
{
"timestamp": 1699853753818,
"update": "__BINARY__74"
},
{
"timestamp": 1699853753819,
"update": "__BINARY__75"
},
{
"timestamp": 1699853753820,
"update": "__BINARY__76"
},
{
"timestamp": 1699853754053,
"update": "__BINARY__77"
},
{
"timestamp": 1699853755314,
"update": "__BINARY__78"
},
{
"timestamp": 1699853755516,
"update": "__BINARY__79"
},
{
"timestamp": 1699853755920,
"update": "__BINARY__80"
},
{
"timestamp": 1699853755921,
"update": "__BINARY__81"
},
{
"timestamp": 1699853755922,
"update": "__BINARY__82"
},
{
"timestamp": 1699853755923,
"update": "__BINARY__83"
},
{
"timestamp": 1699853755924,
"update": "__BINARY__84"
},
{
"timestamp": 1699853755925,
"update": "__BINARY__85"
},
{
"timestamp": 1699853755926,
"update": "__BINARY__86"
},
{
"timestamp": 1699853755930,
"update": "__BINARY__87"
},
{
"timestamp": 1699853755932,
"update": "__BINARY__88"
},
{
"timestamp": 1699853755933,
"update": "__BINARY__89"
},
{
"timestamp": 1699853755934,
"update": "__BINARY__90"
},
{
"timestamp": 1699853755935,
"update": "__BINARY__91"
},
{
"timestamp": 1699853756122,
"update": "__BINARY__92"
},
{
"timestamp": 1699853756123,
"update": "__BINARY__93"
},
{
"timestamp": 1699853756124,
"update": "__BINARY__94"
},
{
"timestamp": 1699853756125,
"update": "__BINARY__95"
},
{
"timestamp": 1699853756129,
"update": "__BINARY__96"
},
{
"timestamp": 1699853756130,
"update": "__BINARY__97"
},
{
"timestamp": 1699853756131,
"update": "__BINARY__98"
},
{
"timestamp": 1699853756132,
"update": "__BINARY__99"
},
{
"timestamp": 1699853756134,
"update": "__BINARY__100"
},
{
"timestamp": 1699853756135,
"update": "__BINARY__101"
},
{
"timestamp": 1699853756146,
"update": "__BINARY__102"
},
{
"timestamp": 1699853756154,
"update": "__BINARY__103"
},
{
"timestamp": 1699853756155,
"update": "__BINARY__104"
},
{
"timestamp": 1699853756158,
"update": "__BINARY__105"
},
{
"timestamp": 1699853756161,
"update": "__BINARY__106"
},
{
"timestamp": 1699853756162,
"update": "__BINARY__107"
},
{
"timestamp": 1699853756163,
"update": "__BINARY__108"
},
{
"timestamp": 1699853756164,
"update": "__BINARY__109"
},
{
"timestamp": 1699853756165,
"update": "__BINARY__110"
},
{
"timestamp": 1699853756212,
"update": "__BINARY__111"
},
{
"timestamp": 1699853756266,
"update": "__BINARY__112"
},
{
"timestamp": 1699853756321,
"update": "__BINARY__113"
},
{
"timestamp": 1699853756375,
"update": "__BINARY__114"
},
{
"timestamp": 1699853756435,
"update": "__BINARY__115"
},
{
"timestamp": 1699853756490,
"update": "__BINARY__116"
},
{
"timestamp": 1699853756546,
"update": "__BINARY__117"
},
{
"timestamp": 1699853756607,
"update": "__BINARY__118"
},
{
"timestamp": 1699853756672,
"update": "__BINARY__119"
},
{
"timestamp": 1699853756734,
"update": "__BINARY__120"
},
{
"timestamp": 1699853756806,
"update": "__BINARY__121"
}
]
}
]
}
]
},
{
"name": "page-view",
"version": 1,
"stores": [
{
"name": "view",
"keyPath": "id",
"values": []
}
]
},
{
"name": "sdI1qQamsV_blob",
"version": 1,
"stores": [
{
"name": "blob",
"keyPath": null,
"values": []
}
]
}
]

View File

@@ -0,0 +1,607 @@
[
{
"name": "__BINARY__1",
"start": 0,
"end": 189
},
{
"name": "__BINARY__2",
"start": 189,
"end": 251
},
{
"name": "__BINARY__3",
"start": 251,
"end": 564
},
{
"name": "__BINARY__4",
"start": 564,
"end": 626
},
{
"name": "__BINARY__5",
"start": 626,
"end": 923
},
{
"name": "__BINARY__6",
"start": 923,
"end": 985
},
{
"name": "__BINARY__7",
"start": 985,
"end": 1280
},
{
"name": "__BINARY__8",
"start": 1280,
"end": 1342
},
{
"name": "__BINARY__9",
"start": 1342,
"end": 126036
},
{
"name": "__BINARY__10",
"start": 126036,
"end": 126099
},
{
"name": "__BINARY__11",
"start": 126099,
"end": 126402
},
{
"name": "__BINARY__12",
"start": 126402,
"end": 126467
},
{
"name": "__BINARY__13",
"start": 126467,
"end": 126769
},
{
"name": "__BINARY__14",
"start": 126769,
"end": 126834
},
{
"name": "__BINARY__15",
"start": 126834,
"end": 127137
},
{
"name": "__BINARY__16",
"start": 127137,
"end": 127202
},
{
"name": "__BINARY__17",
"start": 127202,
"end": 127504
},
{
"name": "__BINARY__18",
"start": 127504,
"end": 127569
},
{
"name": "__BINARY__19",
"start": 127569,
"end": 127873
},
{
"name": "__BINARY__20",
"start": 127873,
"end": 127938
},
{
"name": "__BINARY__21",
"start": 127938,
"end": 128261
},
{
"name": "__BINARY__22",
"start": 128261,
"end": 128326
},
{
"name": "__BINARY__23",
"start": 128326,
"end": 128647
},
{
"name": "__BINARY__24",
"start": 128647,
"end": 128712
},
{
"name": "__BINARY__25",
"start": 128712,
"end": 129034
},
{
"name": "__BINARY__26",
"start": 129034,
"end": 129099
},
{
"name": "__BINARY__27",
"start": 129099,
"end": 129370
},
{
"name": "__BINARY__28",
"start": 129370,
"end": 129435
},
{
"name": "__BINARY__29",
"start": 129435,
"end": 129895
},
{
"name": "__BINARY__30",
"start": 129895,
"end": 129960
},
{
"name": "__BINARY__31",
"start": 129960,
"end": 130307
},
{
"name": "__BINARY__32",
"start": 130307,
"end": 130372
},
{
"name": "__BINARY__33",
"start": 130372,
"end": 130738
},
{
"name": "__BINARY__34",
"start": 130738,
"end": 130803
},
{
"name": "__BINARY__35",
"start": 130803,
"end": 131698
},
{
"name": "__BINARY__36",
"start": 131698,
"end": 131763
},
{
"name": "__BINARY__37",
"start": 131763,
"end": 131916
},
{
"name": "__BINARY__38",
"start": 131916,
"end": 131981
},
{
"name": "__BINARY__39",
"start": 131981,
"end": 132435
},
{
"name": "__BINARY__40",
"start": 132435,
"end": 132500
},
{
"name": "__BINARY__41",
"start": 132500,
"end": 132730
},
{
"name": "__BINARY__42",
"start": 132730,
"end": 132795
},
{
"name": "__BINARY__43",
"start": 132795,
"end": 133172
},
{
"name": "__BINARY__44",
"start": 133172,
"end": 133237
},
{
"name": "__BINARY__45",
"start": 133237,
"end": 133466
},
{
"name": "__BINARY__46",
"start": 133466,
"end": 133531
},
{
"name": "__BINARY__47",
"start": 133531,
"end": 133935
},
{
"name": "__BINARY__48",
"start": 133935,
"end": 134000
},
{
"name": "__BINARY__49",
"start": 134000,
"end": 134228
},
{
"name": "__BINARY__50",
"start": 134228,
"end": 134293
},
{
"name": "__BINARY__51",
"start": 134293,
"end": 134626
},
{
"name": "__BINARY__52",
"start": 134626,
"end": 134691
},
{
"name": "__BINARY__53",
"start": 134691,
"end": 134921
},
{
"name": "__BINARY__54",
"start": 134921,
"end": 134986
},
{
"name": "__BINARY__55",
"start": 134986,
"end": 135372
},
{
"name": "__BINARY__56",
"start": 135372,
"end": 135437
},
{
"name": "__BINARY__57",
"start": 135437,
"end": 135679
},
{
"name": "__BINARY__58",
"start": 135679,
"end": 135744
},
{
"name": "__BINARY__59",
"start": 135744,
"end": 136129
},
{
"name": "__BINARY__60",
"start": 136129,
"end": 136194
},
{
"name": "__BINARY__61",
"start": 136194,
"end": 136417
},
{
"name": "__BINARY__62",
"start": 136417,
"end": 136482
},
{
"name": "__BINARY__63",
"start": 136482,
"end": 136758
},
{
"name": "__BINARY__64",
"start": 136758,
"end": 136823
},
{
"name": "__BINARY__65",
"start": 136823,
"end": 137319
},
{
"name": "__BINARY__66",
"start": 137319,
"end": 137384
},
{
"name": "__BINARY__67",
"start": 137384,
"end": 137538
},
{
"name": "__BINARY__68",
"start": 137538,
"end": 137603
},
{
"name": "__BINARY__69",
"start": 137603,
"end": 139400
},
{
"name": "__BINARY__70",
"start": 139400,
"end": 139465
},
{
"name": "__BINARY__71",
"start": 139465,
"end": 139692
},
{
"name": "__BINARY__72",
"start": 139692,
"end": 139757
},
{
"name": "__BINARY__73",
"start": 139757,
"end": 139980
},
{
"name": "__BINARY__74",
"start": 139980,
"end": 140045
},
{
"name": "__BINARY__75",
"start": 140045,
"end": 140266
},
{
"name": "__BINARY__76",
"start": 140266,
"end": 140331
},
{
"name": "__BINARY__77",
"start": 140331,
"end": 278777
},
{
"name": "__BINARY__78",
"start": 278777,
"end": 278804
},
{
"name": "__BINARY__79",
"start": 278804,
"end": 417260
},
{
"name": "__BINARY__80",
"start": 417260,
"end": 417300
},
{
"name": "__BINARY__81",
"start": 417300,
"end": 417388
},
{
"name": "__BINARY__82",
"start": 417388,
"end": 417475
},
{
"name": "__BINARY__83",
"start": 417475,
"end": 417565
},
{
"name": "__BINARY__84",
"start": 417565,
"end": 417655
},
{
"name": "__BINARY__85",
"start": 417655,
"end": 417743
},
{
"name": "__BINARY__86",
"start": 417743,
"end": 417832
},
{
"name": "__BINARY__87",
"start": 417832,
"end": 417922
},
{
"name": "__BINARY__88",
"start": 417922,
"end": 418014
},
{
"name": "__BINARY__89",
"start": 418014,
"end": 418103
},
{
"name": "__BINARY__90",
"start": 418103,
"end": 418193
},
{
"name": "__BINARY__91",
"start": 418193,
"end": 418230
},
{
"name": "__BINARY__92",
"start": 418230,
"end": 418344
},
{
"name": "__BINARY__93",
"start": 418344,
"end": 418493
},
{
"name": "__BINARY__94",
"start": 418493,
"end": 418523
},
{
"name": "__BINARY__95",
"start": 418523,
"end": 418676
},
{
"name": "__BINARY__96",
"start": 418676,
"end": 418706
},
{
"name": "__BINARY__97",
"start": 418706,
"end": 418979
},
{
"name": "__BINARY__98",
"start": 418979,
"end": 419009
},
{
"name": "__BINARY__99",
"start": 419009,
"end": 419210
},
{
"name": "__BINARY__100",
"start": 419210,
"end": 419240
},
{
"name": "__BINARY__101",
"start": 419240,
"end": 419281
},
{
"name": "__BINARY__102",
"start": 419281,
"end": 419323
},
{
"name": "__BINARY__103",
"start": 419323,
"end": 419360
},
{
"name": "__BINARY__104",
"start": 419360,
"end": 419397
},
{
"name": "__BINARY__105",
"start": 419397,
"end": 419438
},
{
"name": "__BINARY__106",
"start": 419438,
"end": 419473
},
{
"name": "__BINARY__107",
"start": 419473,
"end": 419673
},
{
"name": "__BINARY__108",
"start": 419673,
"end": 419708
},
{
"name": "__BINARY__109",
"start": 419708,
"end": 419729
},
{
"name": "__BINARY__110",
"start": 419729,
"end": 419772
},
{
"name": "__BINARY__111",
"start": 419772,
"end": 419792
},
{
"name": "__BINARY__112",
"start": 419792,
"end": 419812
},
{
"name": "__BINARY__113",
"start": 419812,
"end": 419832
},
{
"name": "__BINARY__114",
"start": 419832,
"end": 419852
},
{
"name": "__BINARY__115",
"start": 419852,
"end": 419872
},
{
"name": "__BINARY__116",
"start": 419872,
"end": 419892
},
{
"name": "__BINARY__117",
"start": 419892,
"end": 419912
},
{
"name": "__BINARY__118",
"start": 419912,
"end": 419932
},
{
"name": "__BINARY__119",
"start": 419932,
"end": 419952
},
{
"name": "__BINARY__120",
"start": 419952,
"end": 419972
},
{
"name": "__BINARY__121",
"start": 419972,
"end": 419992
}
]

View File

@@ -0,0 +1,7 @@
{
"jotai-workspaces": "[{\"id\":\"sdI1qQamsV\",\"flavour\":\"local\"}]",
"last_page_id": "-RlV_W_Ey1",
"last_workspace_id": "sdI1qQamsV",
"affine-local-workspace": "[\"sdI1qQamsV\"]",
"is-first-open": "false"
}

View File

@@ -3,5 +3,5 @@
"exports": {
"./*": "./*"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -2,7 +2,7 @@
"name": "@affine-test/kit",
"private": true,
"type": "module",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"exports": {
"./electron": "./electron.ts",
"./playwright": "./playwright.ts",

View File

@@ -57,5 +57,5 @@
"@blocksuite/lit": "*",
"@blocksuite/store": "*"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -7,5 +7,5 @@
"@affine/env": "workspace:*",
"@toeverything/infra": "workspace:*"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -22,5 +22,5 @@
"peerDependencies": {
"ts-node": "*"
},
"version": "0.10.0"
"version": "0.10.1-beta.0"
}

View File

@@ -1,7 +1,7 @@
{
"name": "@affine/plugin-cli",
"type": "module",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"bin": {
"af": "./src/af.mjs"
},

View File

@@ -1,6 +1,6 @@
{
"name": "@affine/workers",
"version": "0.10.0",
"version": "0.10.1-beta.0",
"private": true,
"scripts": {
"dev": "wrangler dev"

View File

@@ -190,6 +190,9 @@
{
"path": "./tests/affine-legacy/0.8.4"
},
{
"path": "./tests/affine-legacy/0.6.1-beta.1"
},
// Others
{
"path": "./tsconfig.node.json"

View File

@@ -19,6 +19,23 @@ __metadata:
languageName: node
linkType: hard
"@affine-legacy/0.6.1-beta.1@workspace:tests/affine-legacy/0.6.1-beta.1":
version: 0.0.0-use.local
resolution: "@affine-legacy/0.6.1-beta.1@workspace:tests/affine-legacy/0.6.1-beta.1"
dependencies:
"@affine-test/fixtures": "workspace:*"
"@affine-test/kit": "workspace:*"
"@blocksuite/block-std": "npm:0.0.0-20231110042432-4fdac4dc-nightly"
"@blocksuite/blocks": "npm:0.0.0-20231110042432-4fdac4dc-nightly"
"@blocksuite/global": "npm:0.0.0-20231110042432-4fdac4dc-nightly"
"@blocksuite/store": "npm:0.0.0-20231110042432-4fdac4dc-nightly"
"@playwright/test": "npm:^1.39.0"
express: "npm:^4.18.2"
http-proxy-middleware: "npm:^3.0.0-beta.1"
serve: "npm:^14.2.1"
languageName: unknown
linkType: soft
"@affine-legacy/0.7.0-canary.18@workspace:tests/affine-legacy/0.7.0-canary.18":
version: 0.0.0-use.local
resolution: "@affine-legacy/0.7.0-canary.18@workspace:tests/affine-legacy/0.7.0-canary.18"
@@ -224,7 +241,7 @@ __metadata:
"@testing-library/react": "npm:^14.0.0"
"@toeverything/hooks": "workspace:*"
"@toeverything/infra": "workspace:*"
"@toeverything/theme": "npm:^0.7.20"
"@toeverything/theme": "npm:^0.7.24"
"@types/bytes": "npm:^3.1.3"
"@types/react": "npm:^18.2.28"
"@types/react-datepicker": "npm:^4.19.0"
@@ -427,7 +444,7 @@ __metadata:
builder-util-runtime: "npm:^9.2.1"
cross-env: "npm:^7.0.3"
electron: "npm:^27.0.0"
electron-log: "npm:^5.0.0-rc.1"
electron-log: "npm:^5.0.0"
electron-squirrel-startup: "npm:1.0.0"
electron-updater: "npm:^6.1.5"
electron-window-state: "npm:^5.0.3"
@@ -524,7 +541,7 @@ __metadata:
"@affine/sdk": "workspace:*"
"@blocksuite/icons": "npm:2.1.35"
"@toeverything/components": "npm:^0.0.46"
"@toeverything/theme": "npm:^0.7.20"
"@toeverything/theme": "npm:^0.7.24"
clsx: "npm:^2.0.0"
foxact: "npm:^0.2.20"
react-error-boundary: "npm:^4.0.11"
@@ -12679,14 +12696,7 @@ __metadata:
languageName: unknown
linkType: soft
"@toeverything/theme@npm:^0.7.20, @toeverything/theme@npm:^0.7.21":
version: 0.7.23
resolution: "@toeverything/theme@npm:0.7.23"
checksum: 1576abae43677fff5c9a88aea5c5755db7e07cb397daf3eb3bdfd5629350b066d8ddc1b9922b0c773774a7fed465c45e1bfebe6b809c6fa609d75017f40743ab
languageName: node
linkType: hard
"@toeverything/theme@npm:^0.7.24":
"@toeverything/theme@npm:^0.7.21, @toeverything/theme@npm:^0.7.24":
version: 0.7.24
resolution: "@toeverything/theme@npm:0.7.24"
checksum: faa97dad2a411e895090497ff6cbb83836e9be963e608cbc7f3421c4a933d86393551250fa015d4b9060778f0abb0e122a41d12a70e6f7fb7c9eadc2324a6035
@@ -19152,10 +19162,10 @@ __metadata:
languageName: node
linkType: hard
"electron-log@npm:^5.0.0-rc.1":
version: 5.0.0-rc.1
resolution: "electron-log@npm:5.0.0-rc.1"
checksum: f4ec437197ec5801a325e062c19f182a14eba960ee683034bfea5854efe452cfa91985b7f7ab159599c8264fde869f7101d4e82303231865a6b7c8e621815f87
"electron-log@npm:^5.0.0":
version: 5.0.0
resolution: "electron-log@npm:5.0.0"
checksum: 23b14119a5753be24880e7466ee80ae1386f9df4123ed59bc8f4426a814c728875b07de13bf0729cba7202888fcd6230375e2b5302cee0d0c5f25584d9db3334
languageName: node
linkType: hard