mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-25 14:28:51 +08:00
chore: bump blocksuite (#7075)
## Features - toeverything/blocksuite#6937 @Flrande ## Bugfix - toeverything/blocksuite#7137 @fundon - toeverything/blocksuite#7126 @golok727 - toeverything/blocksuite#7128 @CatsJuice - toeverything/blocksuite#7130 @fundon ## Refactor ## Misc - toeverything/blocksuite#7131 @fundon ## Additional changes Adjust the awareness provider so that it only obtains awareness instances when connect, and fixes the dependencies between workspace components.
This commit is contained in:
Vendored
+2
-2
@@ -3,8 +3,8 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@blocksuite/global": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/global": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/store": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/store": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"react": "18.3.1",
|
"react": "18.3.1",
|
||||||
"react-dom": "18.3.1",
|
"react-dom": "18.3.1",
|
||||||
"vitest": "1.6.0"
|
"vitest": "1.6.0"
|
||||||
|
|||||||
@@ -13,9 +13,9 @@
|
|||||||
"@affine/debug": "workspace:*",
|
"@affine/debug": "workspace:*",
|
||||||
"@affine/env": "workspace:*",
|
"@affine/env": "workspace:*",
|
||||||
"@affine/templates": "workspace:*",
|
"@affine/templates": "workspace:*",
|
||||||
"@blocksuite/blocks": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/blocks": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/global": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/global": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/store": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/store": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@datastructures-js/binary-search-tree": "^5.3.2",
|
"@datastructures-js/binary-search-tree": "^5.3.2",
|
||||||
"foxact": "^0.2.33",
|
"foxact": "^0.2.33",
|
||||||
"jotai": "^2.8.0",
|
"jotai": "^2.8.0",
|
||||||
@@ -30,8 +30,8 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@affine-test/fixtures": "workspace:*",
|
"@affine-test/fixtures": "workspace:*",
|
||||||
"@affine/templates": "workspace:*",
|
"@affine/templates": "workspace:*",
|
||||||
"@blocksuite/block-std": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/block-std": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/presets": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/presets": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@testing-library/react": "^15.0.0",
|
"@testing-library/react": "^15.0.0",
|
||||||
"async-call-rpc": "^6.4.0",
|
"async-call-rpc": "^6.4.0",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ export class WorkspaceEngine extends Entity<{
|
|||||||
|
|
||||||
start() {
|
start() {
|
||||||
this.doc.start();
|
this.doc.start();
|
||||||
this.awareness.connect();
|
this.awareness.connect(this.workspaceService.workspace.awareness);
|
||||||
this.blob.start();
|
this.blob.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,11 +78,11 @@ export class WorkspaceUpgrade extends Entity {
|
|||||||
this.workspaceService.workspace.docCollection.schema
|
this.workspaceService.workspace.docCollection.schema
|
||||||
);
|
);
|
||||||
const blobList =
|
const blobList =
|
||||||
await this.workspaceService.workspace.docCollection.blob.list();
|
await this.workspaceService.workspace.docCollection.blobSync.list();
|
||||||
|
|
||||||
for (const blobKey of blobList) {
|
for (const blobKey of blobList) {
|
||||||
const blob =
|
const blob =
|
||||||
await this.workspaceService.workspace.docCollection.blob.get(
|
await this.workspaceService.workspace.docCollection.blobSync.get(
|
||||||
blobKey
|
blobKey
|
||||||
);
|
);
|
||||||
if (blob) {
|
if (blob) {
|
||||||
|
|||||||
@@ -29,24 +29,9 @@ export class Workspace extends Entity {
|
|||||||
if (!this._docCollection) {
|
if (!this._docCollection) {
|
||||||
this._docCollection = new DocCollection({
|
this._docCollection = new DocCollection({
|
||||||
id: this.openOptions.metadata.id,
|
id: this.openOptions.metadata.id,
|
||||||
blobStorages: [
|
blobSources: {
|
||||||
() => ({
|
main: this.engine.blob,
|
||||||
crud: {
|
},
|
||||||
get: key => {
|
|
||||||
return this.engine.blob.get(key);
|
|
||||||
},
|
|
||||||
set: (key, value) => {
|
|
||||||
return this.engine.blob.set(key, value);
|
|
||||||
},
|
|
||||||
list: () => {
|
|
||||||
return this.engine.blob.list();
|
|
||||||
},
|
|
||||||
delete: key => {
|
|
||||||
return this.engine.blob.delete(key);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
idGenerator: () => nanoid(),
|
idGenerator: () => nanoid(),
|
||||||
schema: globalBlockSuiteSchema,
|
schema: globalBlockSuiteSchema,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ export function configureWorkspaceModule(framework: Framework) {
|
|||||||
.scope(WorkspaceScope)
|
.scope(WorkspaceScope)
|
||||||
.service(WorkspaceService)
|
.service(WorkspaceService)
|
||||||
.entity(Workspace, [WorkspaceScope])
|
.entity(Workspace, [WorkspaceScope])
|
||||||
.service(WorkspaceEngineService, [WorkspaceService])
|
.service(WorkspaceEngineService, [WorkspaceScope])
|
||||||
.entity(WorkspaceEngine, [WorkspaceService])
|
.entity(WorkspaceEngine, [WorkspaceService])
|
||||||
.service(WorkspaceUpgradeService)
|
.service(WorkspaceUpgradeService)
|
||||||
.entity(WorkspaceUpgrade, [
|
.entity(WorkspaceUpgrade, [
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import type {
|
|||||||
DocStorage,
|
DocStorage,
|
||||||
} from '../../../sync';
|
} from '../../../sync';
|
||||||
import type { WorkspaceProfileInfo } from '../entities/profile';
|
import type { WorkspaceProfileInfo } from '../entities/profile';
|
||||||
import type { Workspace } from '../entities/workspace';
|
|
||||||
import type { WorkspaceMetadata } from '../metadata';
|
import type { WorkspaceMetadata } from '../metadata';
|
||||||
|
|
||||||
export interface WorkspaceEngineProvider {
|
export interface WorkspaceEngineProvider {
|
||||||
@@ -54,7 +53,7 @@ export interface WorkspaceFlavourProvider {
|
|||||||
|
|
||||||
getWorkspaceBlob(id: string, blob: string): Promise<Blob | null>;
|
getWorkspaceBlob(id: string, blob: string): Promise<Blob | null>;
|
||||||
|
|
||||||
getEngineProvider(workspace: Workspace): WorkspaceEngineProvider;
|
getEngineProvider(workspaceId: string): WorkspaceEngineProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WorkspaceFlavourProvider =
|
export const WorkspaceFlavourProvider =
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Service } from '../../../framework';
|
import { Service } from '../../../framework';
|
||||||
import { WorkspaceEngine } from '../entities/engine';
|
import { WorkspaceEngine } from '../entities/engine';
|
||||||
import type { WorkspaceService } from './workspace';
|
import type { WorkspaceScope } from '../scopes/workspace';
|
||||||
|
|
||||||
export class WorkspaceEngineService extends Service {
|
export class WorkspaceEngineService extends Service {
|
||||||
private _engine: WorkspaceEngine | null = null;
|
private _engine: WorkspaceEngine | null = null;
|
||||||
@@ -8,15 +8,15 @@ export class WorkspaceEngineService extends Service {
|
|||||||
if (!this._engine) {
|
if (!this._engine) {
|
||||||
this._engine = this.framework.createEntity(WorkspaceEngine, {
|
this._engine = this.framework.createEntity(WorkspaceEngine, {
|
||||||
engineProvider:
|
engineProvider:
|
||||||
this.workspaceService.workspace.flavourProvider.getEngineProvider(
|
this.workspaceScope.props.flavourProvider.getEngineProvider(
|
||||||
this.workspaceService.workspace
|
this.workspaceScope.props.openOptions.metadata.id
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return this._engine;
|
return this._engine;
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(private readonly workspaceService: WorkspaceService) {
|
constructor(private readonly workspaceScope: WorkspaceScope) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import { type BlobStorage, MemoryDocStorage } from '../../../sync';
|
|||||||
import { MemoryBlobStorage } from '../../../sync/blob/blob';
|
import { MemoryBlobStorage } from '../../../sync/blob/blob';
|
||||||
import type { GlobalState } from '../../storage';
|
import type { GlobalState } from '../../storage';
|
||||||
import type { WorkspaceProfileInfo } from '../entities/profile';
|
import type { WorkspaceProfileInfo } from '../entities/profile';
|
||||||
import type { Workspace } from '../entities/workspace';
|
|
||||||
import { globalBlockSuiteSchema } from '../global-schema';
|
import { globalBlockSuiteSchema } from '../global-schema';
|
||||||
import type { WorkspaceMetadata } from '../metadata';
|
import type { WorkspaceMetadata } from '../metadata';
|
||||||
import type {
|
import type {
|
||||||
@@ -54,13 +53,9 @@ export class TestingWorkspaceLocalProvider
|
|||||||
id: id,
|
id: id,
|
||||||
idGenerator: () => nanoid(),
|
idGenerator: () => nanoid(),
|
||||||
schema: globalBlockSuiteSchema,
|
schema: globalBlockSuiteSchema,
|
||||||
blobStorages: [
|
blobSources: {
|
||||||
() => {
|
main: blobStorage,
|
||||||
return {
|
},
|
||||||
crud: blobStorage,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// apply initial state
|
// apply initial state
|
||||||
@@ -110,7 +105,7 @@ export class TestingWorkspaceLocalProvider
|
|||||||
blob
|
blob
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
getEngineProvider(workspace: Workspace): WorkspaceEngineProvider {
|
getEngineProvider(workspaceId: string): WorkspaceEngineProvider {
|
||||||
return {
|
return {
|
||||||
getDocStorage: () => {
|
getDocStorage: () => {
|
||||||
return this.docStorage;
|
return this.docStorage;
|
||||||
@@ -123,7 +118,7 @@ export class TestingWorkspaceLocalProvider
|
|||||||
},
|
},
|
||||||
getLocalBlobStorage: () => {
|
getLocalBlobStorage: () => {
|
||||||
return new MemoryBlobStorage(
|
return new MemoryBlobStorage(
|
||||||
wrapMemento(this.store, workspace.id + '/blobs/')
|
wrapMemento(this.store, workspaceId + '/blobs/')
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
getRemoteBlobStorages() {
|
getRemoteBlobStorages() {
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
|
import type { Awareness } from 'y-protocols/awareness.js';
|
||||||
|
|
||||||
export interface AwarenessConnection {
|
export interface AwarenessConnection {
|
||||||
connect(): void;
|
connect(awareness: Awareness): void;
|
||||||
disconnect(): void;
|
disconnect(): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class AwarenessEngine {
|
export class AwarenessEngine {
|
||||||
constructor(public readonly connections: AwarenessConnection[]) {}
|
constructor(public readonly connections: AwarenessConnection[]) {}
|
||||||
|
|
||||||
connect() {
|
connect(awareness: Awareness) {
|
||||||
this.connections.forEach(connection => connection.connect());
|
this.connections.forEach(connection => connection.connect(awareness));
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnect() {
|
disconnect() {
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ export interface BlobStatus {
|
|||||||
* all operations priority use local, then use remote.
|
* all operations priority use local, then use remote.
|
||||||
*/
|
*/
|
||||||
export class BlobEngine {
|
export class BlobEngine {
|
||||||
|
readonly name = 'blob-engine';
|
||||||
|
readonly readonly = this.local.readonly;
|
||||||
|
|
||||||
private abort: AbortController | null = null;
|
private abort: AbortController | null = null;
|
||||||
|
|
||||||
readonly isStorageOverCapacity$ = new LiveData(false);
|
readonly isStorageOverCapacity$ = new LiveData(false);
|
||||||
|
|||||||
@@ -75,12 +75,12 @@
|
|||||||
"zod": "^3.22.4"
|
"zod": "^3.22.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@blocksuite/block-std": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/block-std": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/blocks": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/blocks": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/global": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/global": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/icons": "2.1.51",
|
"@blocksuite/icons": "2.1.51",
|
||||||
"@blocksuite/presets": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/presets": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/store": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/store": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@storybook/addon-actions": "^7.6.17",
|
"@storybook/addon-actions": "^7.6.17",
|
||||||
"@storybook/addon-essentials": "^7.6.17",
|
"@storybook/addon-essentials": "^7.6.17",
|
||||||
"@storybook/addon-interactions": "^7.6.17",
|
"@storybook/addon-interactions": "^7.6.17",
|
||||||
|
|||||||
@@ -18,13 +18,13 @@
|
|||||||
"@affine/graphql": "workspace:*",
|
"@affine/graphql": "workspace:*",
|
||||||
"@affine/i18n": "workspace:*",
|
"@affine/i18n": "workspace:*",
|
||||||
"@affine/templates": "workspace:*",
|
"@affine/templates": "workspace:*",
|
||||||
"@blocksuite/block-std": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/block-std": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/blocks": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/blocks": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/global": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/global": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/icons": "2.1.51",
|
"@blocksuite/icons": "2.1.51",
|
||||||
"@blocksuite/inline": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/inline": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/presets": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/presets": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/store": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/store": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@dnd-kit/core": "^6.1.0",
|
"@dnd-kit/core": "^6.1.0",
|
||||||
"@dnd-kit/modifiers": "^7.0.0",
|
"@dnd-kit/modifiers": "^7.0.0",
|
||||||
"@dnd-kit/sortable": "^8.0.0",
|
"@dnd-kit/sortable": "^8.0.0",
|
||||||
|
|||||||
@@ -108,11 +108,9 @@ const getOrCreateShellWorkspace = (workspaceId: string) => {
|
|||||||
const blobStorage = new CloudBlobStorage(workspaceId);
|
const blobStorage = new CloudBlobStorage(workspaceId);
|
||||||
docCollection = new DocCollection({
|
docCollection = new DocCollection({
|
||||||
id: workspaceId,
|
id: workspaceId,
|
||||||
blobStorages: [
|
blobSources: {
|
||||||
() => ({
|
main: blobStorage,
|
||||||
crud: blobStorage,
|
},
|
||||||
}),
|
|
||||||
],
|
|
||||||
schema: globalBlockSuiteSchema,
|
schema: globalBlockSuiteSchema,
|
||||||
});
|
});
|
||||||
docCollectionMap.set(workspaceId, docCollection);
|
docCollectionMap.set(workspaceId, docCollection);
|
||||||
|
|||||||
+1
-1
@@ -64,7 +64,7 @@ export const ProfilePanel = () => {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const reducedFile = await validateAndReduceImage(file);
|
const reducedFile = await validateAndReduceImage(file);
|
||||||
const blobs = workspace.docCollection.blob;
|
const blobs = workspace.docCollection.blobSync;
|
||||||
const blobId = await blobs.set(reducedFile);
|
const blobId = await blobs.set(reducedFile);
|
||||||
workspace.docCollection.meta.setAvatar(blobId);
|
workspace.docCollection.meta.setAvatar(blobId);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ const ImagePreviewModalImpl = (
|
|||||||
if (typeof blockId === 'string') {
|
if (typeof blockId === 'string') {
|
||||||
const block = page.getBlockById(blockId) as ImageBlockModel;
|
const block = page.getBlockById(blockId) as ImageBlockModel;
|
||||||
assertExists(block);
|
assertExists(block);
|
||||||
const store = block.page.blob;
|
const store = block.page.blobSync;
|
||||||
const url = store?.get(block.sourceId as string);
|
const url = store?.get(block.sourceId as string);
|
||||||
const img = await url;
|
const img = await url;
|
||||||
if (!img) {
|
if (!img) {
|
||||||
@@ -260,7 +260,7 @@ const ImagePreviewModalImpl = (
|
|||||||
assertExists(page);
|
assertExists(page);
|
||||||
const block = page.getBlockById(blockId) as ImageBlockModel;
|
const block = page.getBlockById(blockId) as ImageBlockModel;
|
||||||
assertExists(block);
|
assertExists(block);
|
||||||
return props.docCollection.blob.get(block?.sourceId as string);
|
return props.docCollection.blobSync.get(block?.sourceId as string);
|
||||||
},
|
},
|
||||||
suspense: true,
|
suspense: true,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import {
|
|||||||
onComplete,
|
onComplete,
|
||||||
OnEvent,
|
OnEvent,
|
||||||
onStart,
|
onStart,
|
||||||
type Workspace,
|
|
||||||
type WorkspaceEngineProvider,
|
type WorkspaceEngineProvider,
|
||||||
type WorkspaceFlavourProvider,
|
type WorkspaceFlavourProvider,
|
||||||
type WorkspaceMetadata,
|
type WorkspaceMetadata,
|
||||||
@@ -96,7 +95,9 @@ export class CloudWorkspaceFlavourProviderService
|
|||||||
id: tempId,
|
id: tempId,
|
||||||
idGenerator: () => nanoid(),
|
idGenerator: () => nanoid(),
|
||||||
schema: globalBlockSuiteSchema,
|
schema: globalBlockSuiteSchema,
|
||||||
blobStorages: [() => ({ crud: blobStorage })],
|
blobSources: {
|
||||||
|
main: blobStorage,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// apply initial state
|
// apply initial state
|
||||||
@@ -223,35 +224,31 @@ export class CloudWorkspaceFlavourProviderService
|
|||||||
const cloudBlob = new CloudBlobStorage(id);
|
const cloudBlob = new CloudBlobStorage(id);
|
||||||
return await cloudBlob.get(blob);
|
return await cloudBlob.get(blob);
|
||||||
}
|
}
|
||||||
getEngineProvider(workspace: Workspace): WorkspaceEngineProvider {
|
getEngineProvider(workspaceId: string): WorkspaceEngineProvider {
|
||||||
return {
|
return {
|
||||||
getAwarenessConnections: () => {
|
getAwarenessConnections: () => {
|
||||||
return [
|
return [
|
||||||
new BroadcastChannelAwarenessConnection(
|
new BroadcastChannelAwarenessConnection(workspaceId),
|
||||||
workspace.id,
|
|
||||||
workspace.awareness
|
|
||||||
),
|
|
||||||
new CloudAwarenessConnection(
|
new CloudAwarenessConnection(
|
||||||
workspace.id,
|
workspaceId,
|
||||||
workspace.awareness,
|
|
||||||
this.webSocketService.newSocket()
|
this.webSocketService.newSocket()
|
||||||
),
|
),
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
getDocServer: () => {
|
getDocServer: () => {
|
||||||
return new CloudDocEngineServer(
|
return new CloudDocEngineServer(
|
||||||
workspace.id,
|
workspaceId,
|
||||||
this.webSocketService.newSocket()
|
this.webSocketService.newSocket()
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
getDocStorage: () => {
|
getDocStorage: () => {
|
||||||
return this.storageProvider.getDocStorage(workspace.id);
|
return this.storageProvider.getDocStorage(workspaceId);
|
||||||
},
|
},
|
||||||
getLocalBlobStorage: () => {
|
getLocalBlobStorage: () => {
|
||||||
return this.storageProvider.getBlobStorage(workspace.id);
|
return this.storageProvider.getBlobStorage(workspaceId);
|
||||||
},
|
},
|
||||||
getRemoteBlobStorages() {
|
getRemoteBlobStorages() {
|
||||||
return [new CloudBlobStorage(workspace.id)];
|
return [new CloudBlobStorage(workspaceId)];
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-18
@@ -15,34 +15,32 @@ export class BroadcastChannelAwarenessConnection
|
|||||||
implements AwarenessConnection
|
implements AwarenessConnection
|
||||||
{
|
{
|
||||||
channel: BroadcastChannel | null = null;
|
channel: BroadcastChannel | null = null;
|
||||||
|
awareness: Awareness | null = null;
|
||||||
|
|
||||||
constructor(
|
constructor(private readonly workspaceId: string) {}
|
||||||
private readonly workspaceId: string,
|
|
||||||
private readonly awareness: Awareness
|
|
||||||
) {}
|
|
||||||
|
|
||||||
connect(): void {
|
connect(awareness: Awareness): void {
|
||||||
|
this.awareness = awareness;
|
||||||
this.channel = new BroadcastChannel('awareness:' + this.workspaceId);
|
this.channel = new BroadcastChannel('awareness:' + this.workspaceId);
|
||||||
this.channel.postMessage({
|
this.channel.postMessage({
|
||||||
type: 'connect',
|
type: 'connect',
|
||||||
} satisfies ChannelMessage);
|
} satisfies ChannelMessage);
|
||||||
this.awareness.on('update', (changes: AwarenessChanges, origin: unknown) =>
|
this.awareness.on('update', this.handleAwarenessUpdate);
|
||||||
this.handleAwarenessUpdate(changes, origin)
|
this.channel.addEventListener('message', this.handleChannelMessage);
|
||||||
);
|
|
||||||
this.channel.addEventListener(
|
|
||||||
'message',
|
|
||||||
(event: MessageEvent<ChannelMessage>) => {
|
|
||||||
this.handleChannelMessage(event);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnect(): void {
|
disconnect(): void {
|
||||||
this.channel?.close();
|
this.channel?.close();
|
||||||
this.channel = null;
|
this.channel = null;
|
||||||
|
this.awareness?.off('update', this.handleAwarenessUpdate);
|
||||||
|
this.awareness = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
handleAwarenessUpdate(changes: AwarenessChanges, origin: unknown) {
|
handleAwarenessUpdate = (changes: AwarenessChanges, origin: unknown) => {
|
||||||
|
if (this.awareness === null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (origin === 'remote') {
|
if (origin === 'remote') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -56,9 +54,13 @@ export class BroadcastChannelAwarenessConnection
|
|||||||
type: 'update',
|
type: 'update',
|
||||||
update: update,
|
update: update,
|
||||||
} satisfies ChannelMessage);
|
} satisfies ChannelMessage);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
handleChannelMessage = (event: MessageEvent<ChannelMessage>) => {
|
||||||
|
if (this.awareness === null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
handleChannelMessage(event: MessageEvent<ChannelMessage>) {
|
|
||||||
if (event.data.type === 'update') {
|
if (event.data.type === 'update') {
|
||||||
const update = event.data.update;
|
const update = event.data.update;
|
||||||
applyAwarenessUpdate(this.awareness, update, 'remote');
|
applyAwarenessUpdate(this.awareness, update, 'remote');
|
||||||
@@ -71,5 +73,5 @@ export class BroadcastChannelAwarenessConnection
|
|||||||
]),
|
]),
|
||||||
} satisfies ChannelMessage);
|
} satisfies ChannelMessage);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
+30
-9
@@ -15,23 +15,25 @@ const logger = new DebugLogger('affine:awareness:socketio');
|
|||||||
type AwarenessChanges = Record<'added' | 'updated' | 'removed', number[]>;
|
type AwarenessChanges = Record<'added' | 'updated' | 'removed', number[]>;
|
||||||
|
|
||||||
export class CloudAwarenessConnection implements AwarenessConnection {
|
export class CloudAwarenessConnection implements AwarenessConnection {
|
||||||
|
awareness: Awareness | null = null;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly workspaceId: string,
|
private readonly workspaceId: string,
|
||||||
private readonly awareness: Awareness,
|
|
||||||
private readonly socket: Socket
|
private readonly socket: Socket
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
connect(): void {
|
connect(awareness: Awareness): void {
|
||||||
this.socket.on('server-awareness-broadcast', this.awarenessBroadcast);
|
this.socket.on('server-awareness-broadcast', this.awarenessBroadcast);
|
||||||
this.socket.on(
|
this.socket.on(
|
||||||
'new-client-awareness-init',
|
'new-client-awareness-init',
|
||||||
this.newClientAwarenessInitHandler
|
this.newClientAwarenessInitHandler
|
||||||
);
|
);
|
||||||
|
this.awareness = awareness;
|
||||||
this.awareness.on('update', this.awarenessUpdate);
|
this.awareness.on('update', this.awarenessUpdate);
|
||||||
|
|
||||||
window.addEventListener('beforeunload', this.windowBeforeUnloadHandler);
|
window.addEventListener('beforeunload', this.windowBeforeUnloadHandler);
|
||||||
|
|
||||||
this.socket.on('connect', () => this.handleConnect());
|
this.socket.on('connect', this.handleConnect);
|
||||||
this.socket.on('server-version-rejected', this.handleReject);
|
this.socket.on('server-version-rejected', this.handleReject);
|
||||||
|
|
||||||
if (this.socket.connected) {
|
if (this.socket.connected) {
|
||||||
@@ -42,12 +44,16 @@ export class CloudAwarenessConnection implements AwarenessConnection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
disconnect(): void {
|
disconnect(): void {
|
||||||
removeAwarenessStates(
|
if (this.awareness) {
|
||||||
this.awareness,
|
removeAwarenessStates(
|
||||||
[this.awareness.clientID],
|
this.awareness,
|
||||||
'disconnect'
|
[this.awareness.clientID],
|
||||||
);
|
'disconnect'
|
||||||
this.awareness.off('update', this.awarenessUpdate);
|
);
|
||||||
|
this.awareness.off('update', this.awarenessUpdate);
|
||||||
|
}
|
||||||
|
this.awareness = null;
|
||||||
|
|
||||||
this.socket.emit('client-leave-awareness', this.workspaceId);
|
this.socket.emit('client-leave-awareness', this.workspaceId);
|
||||||
this.socket.off('server-awareness-broadcast', this.awarenessBroadcast);
|
this.socket.off('server-awareness-broadcast', this.awarenessBroadcast);
|
||||||
this.socket.off(
|
this.socket.off(
|
||||||
@@ -66,6 +72,9 @@ export class CloudAwarenessConnection implements AwarenessConnection {
|
|||||||
workspaceId: string;
|
workspaceId: string;
|
||||||
awarenessUpdate: string;
|
awarenessUpdate: string;
|
||||||
}) => {
|
}) => {
|
||||||
|
if (!this.awareness) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (wsId !== this.workspaceId) {
|
if (wsId !== this.workspaceId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -77,6 +86,10 @@ export class CloudAwarenessConnection implements AwarenessConnection {
|
|||||||
};
|
};
|
||||||
|
|
||||||
awarenessUpdate = (changes: AwarenessChanges, origin: unknown) => {
|
awarenessUpdate = (changes: AwarenessChanges, origin: unknown) => {
|
||||||
|
if (!this.awareness) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (origin === 'remote') {
|
if (origin === 'remote') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -97,6 +110,10 @@ export class CloudAwarenessConnection implements AwarenessConnection {
|
|||||||
};
|
};
|
||||||
|
|
||||||
newClientAwarenessInitHandler = () => {
|
newClientAwarenessInitHandler = () => {
|
||||||
|
if (!this.awareness) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const awarenessUpdate = encodeAwarenessUpdate(this.awareness, [
|
const awarenessUpdate = encodeAwarenessUpdate(this.awareness, [
|
||||||
this.awareness.clientID,
|
this.awareness.clientID,
|
||||||
]);
|
]);
|
||||||
@@ -111,6 +128,10 @@ export class CloudAwarenessConnection implements AwarenessConnection {
|
|||||||
};
|
};
|
||||||
|
|
||||||
windowBeforeUnloadHandler = () => {
|
windowBeforeUnloadHandler = () => {
|
||||||
|
if (!this.awareness) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
removeAwarenessStates(
|
removeAwarenessStates(
|
||||||
this.awareness,
|
this.awareness,
|
||||||
[this.awareness.clientID],
|
[this.awareness.clientID],
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import { WorkspaceFlavour } from '@affine/env/workspace';
|
|||||||
import { DocCollection } from '@blocksuite/store';
|
import { DocCollection } from '@blocksuite/store';
|
||||||
import type {
|
import type {
|
||||||
BlobStorage,
|
BlobStorage,
|
||||||
Workspace,
|
|
||||||
WorkspaceEngineProvider,
|
WorkspaceEngineProvider,
|
||||||
WorkspaceFlavourProvider,
|
WorkspaceFlavourProvider,
|
||||||
WorkspaceMetadata,
|
WorkspaceMetadata,
|
||||||
@@ -68,7 +67,7 @@ export class LocalWorkspaceFlavourProvider
|
|||||||
id: id,
|
id: id,
|
||||||
idGenerator: () => nanoid(),
|
idGenerator: () => nanoid(),
|
||||||
schema: globalBlockSuiteSchema,
|
schema: globalBlockSuiteSchema,
|
||||||
blobStorages: [() => ({ crud: blobStorage })],
|
blobSources: { main: blobStorage },
|
||||||
});
|
});
|
||||||
|
|
||||||
// apply initial state
|
// apply initial state
|
||||||
@@ -153,24 +152,19 @@ export class LocalWorkspaceFlavourProvider
|
|||||||
return this.storageProvider.getBlobStorage(id).get(blob);
|
return this.storageProvider.getBlobStorage(id).get(blob);
|
||||||
}
|
}
|
||||||
|
|
||||||
getEngineProvider(workspace: Workspace): WorkspaceEngineProvider {
|
getEngineProvider(workspaceId: string): WorkspaceEngineProvider {
|
||||||
return {
|
return {
|
||||||
getAwarenessConnections() {
|
getAwarenessConnections() {
|
||||||
return [
|
return [new BroadcastChannelAwarenessConnection(workspaceId)];
|
||||||
new BroadcastChannelAwarenessConnection(
|
|
||||||
workspace.id,
|
|
||||||
workspace.awareness
|
|
||||||
),
|
|
||||||
];
|
|
||||||
},
|
},
|
||||||
getDocServer() {
|
getDocServer() {
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
getDocStorage: () => {
|
getDocStorage: () => {
|
||||||
return this.storageProvider.getDocStorage(workspace.id);
|
return this.storageProvider.getDocStorage(workspaceId);
|
||||||
},
|
},
|
||||||
getLocalBlobStorage: () => {
|
getLocalBlobStorage: () => {
|
||||||
return this.storageProvider.getBlobStorage(workspace.id);
|
return this.storageProvider.getBlobStorage(workspaceId);
|
||||||
},
|
},
|
||||||
getRemoteBlobStorages() {
|
getRemoteBlobStorages() {
|
||||||
return [];
|
return [];
|
||||||
|
|||||||
@@ -138,11 +138,11 @@ export const Component = () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
...defaultCloudProvider,
|
...defaultCloudProvider,
|
||||||
getEngineProvider(workspace) {
|
getEngineProvider(workspaceId) {
|
||||||
return {
|
return {
|
||||||
getDocStorage() {
|
getDocStorage() {
|
||||||
return new ReadonlyDocStorage({
|
return new ReadonlyDocStorage({
|
||||||
[workspace.id]: new Uint8Array(workspaceArrayBuffer),
|
[workspaceId]: new Uint8Array(workspaceArrayBuffer),
|
||||||
[docId]: new Uint8Array(pageArrayBuffer),
|
[docId]: new Uint8Array(pageArrayBuffer),
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -156,7 +156,7 @@ export const Component = () => {
|
|||||||
return EmptyBlobStorage;
|
return EmptyBlobStorage;
|
||||||
},
|
},
|
||||||
getRemoteBlobStorages() {
|
getRemoteBlobStorages() {
|
||||||
return [new CloudBlobStorage(workspace.id)];
|
return [new CloudBlobStorage(workspaceId)];
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -29,10 +29,10 @@
|
|||||||
"@affine/env": "workspace:*",
|
"@affine/env": "workspace:*",
|
||||||
"@affine/i18n": "workspace:*",
|
"@affine/i18n": "workspace:*",
|
||||||
"@affine/native": "workspace:*",
|
"@affine/native": "workspace:*",
|
||||||
"@blocksuite/block-std": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/block-std": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/blocks": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/blocks": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/presets": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/presets": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@blocksuite/store": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/store": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@electron-forge/cli": "^7.3.0",
|
"@electron-forge/cli": "^7.3.0",
|
||||||
"@electron-forge/core": "^7.3.0",
|
"@electron-forge/core": "^7.3.0",
|
||||||
"@electron-forge/core-utils": "^7.3.0",
|
"@electron-forge/core-utils": "^7.3.0",
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"@affine/env": "workspace:*",
|
"@affine/env": "workspace:*",
|
||||||
"@affine/templates": "workspace:*",
|
"@affine/templates": "workspace:*",
|
||||||
"@aws-sdk/client-s3": "3.583.0",
|
"@aws-sdk/client-s3": "3.583.0",
|
||||||
"@blocksuite/presets": "0.15.0-canary-202405240632-44ff286",
|
"@blocksuite/presets": "0.15.0-canary-202405261009-6c8ef5b",
|
||||||
"@clack/core": "^0.3.4",
|
"@clack/core": "^0.3.4",
|
||||||
"@clack/prompts": "^0.7.0",
|
"@clack/prompts": "^0.7.0",
|
||||||
"@magic-works/i18n-codegen": "^0.6.0",
|
"@magic-works/i18n-codegen": "^0.6.0",
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ __metadata:
|
|||||||
"@affine/env": "workspace:*"
|
"@affine/env": "workspace:*"
|
||||||
"@affine/templates": "workspace:*"
|
"@affine/templates": "workspace:*"
|
||||||
"@aws-sdk/client-s3": "npm:3.583.0"
|
"@aws-sdk/client-s3": "npm:3.583.0"
|
||||||
"@blocksuite/presets": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/presets": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@clack/core": "npm:^0.3.4"
|
"@clack/core": "npm:^0.3.4"
|
||||||
"@clack/prompts": "npm:^0.7.0"
|
"@clack/prompts": "npm:^0.7.0"
|
||||||
"@magic-works/i18n-codegen": "npm:^0.6.0"
|
"@magic-works/i18n-codegen": "npm:^0.6.0"
|
||||||
@@ -219,12 +219,12 @@ __metadata:
|
|||||||
"@affine/electron-api": "workspace:*"
|
"@affine/electron-api": "workspace:*"
|
||||||
"@affine/graphql": "workspace:*"
|
"@affine/graphql": "workspace:*"
|
||||||
"@affine/i18n": "workspace:*"
|
"@affine/i18n": "workspace:*"
|
||||||
"@blocksuite/block-std": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/block-std": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/blocks": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/blocks": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/global": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/global": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/icons": "npm:2.1.51"
|
"@blocksuite/icons": "npm:2.1.51"
|
||||||
"@blocksuite/presets": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/presets": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/store": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/store": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@dnd-kit/core": "npm:^6.1.0"
|
"@dnd-kit/core": "npm:^6.1.0"
|
||||||
"@dnd-kit/modifiers": "npm:^7.0.0"
|
"@dnd-kit/modifiers": "npm:^7.0.0"
|
||||||
"@dnd-kit/sortable": "npm:^8.0.0"
|
"@dnd-kit/sortable": "npm:^8.0.0"
|
||||||
@@ -320,13 +320,13 @@ __metadata:
|
|||||||
"@affine/graphql": "workspace:*"
|
"@affine/graphql": "workspace:*"
|
||||||
"@affine/i18n": "workspace:*"
|
"@affine/i18n": "workspace:*"
|
||||||
"@affine/templates": "workspace:*"
|
"@affine/templates": "workspace:*"
|
||||||
"@blocksuite/block-std": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/block-std": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/blocks": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/blocks": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/global": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/global": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/icons": "npm:2.1.51"
|
"@blocksuite/icons": "npm:2.1.51"
|
||||||
"@blocksuite/inline": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/inline": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/presets": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/presets": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/store": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/store": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@dnd-kit/core": "npm:^6.1.0"
|
"@dnd-kit/core": "npm:^6.1.0"
|
||||||
"@dnd-kit/modifiers": "npm:^7.0.0"
|
"@dnd-kit/modifiers": "npm:^7.0.0"
|
||||||
"@dnd-kit/sortable": "npm:^8.0.0"
|
"@dnd-kit/sortable": "npm:^8.0.0"
|
||||||
@@ -448,10 +448,10 @@ __metadata:
|
|||||||
"@affine/env": "workspace:*"
|
"@affine/env": "workspace:*"
|
||||||
"@affine/i18n": "workspace:*"
|
"@affine/i18n": "workspace:*"
|
||||||
"@affine/native": "workspace:*"
|
"@affine/native": "workspace:*"
|
||||||
"@blocksuite/block-std": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/block-std": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/blocks": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/blocks": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/presets": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/presets": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/store": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/store": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@electron-forge/cli": "npm:^7.3.0"
|
"@electron-forge/cli": "npm:^7.3.0"
|
||||||
"@electron-forge/core": "npm:^7.3.0"
|
"@electron-forge/core": "npm:^7.3.0"
|
||||||
"@electron-forge/core-utils": "npm:^7.3.0"
|
"@electron-forge/core-utils": "npm:^7.3.0"
|
||||||
@@ -508,8 +508,8 @@ __metadata:
|
|||||||
version: 0.0.0-use.local
|
version: 0.0.0-use.local
|
||||||
resolution: "@affine/env@workspace:packages/common/env"
|
resolution: "@affine/env@workspace:packages/common/env"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@blocksuite/global": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/global": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/store": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/store": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
lit: "npm:^3.1.2"
|
lit: "npm:^3.1.2"
|
||||||
react: "npm:18.3.1"
|
react: "npm:18.3.1"
|
||||||
react-dom: "npm:18.3.1"
|
react-dom: "npm:18.3.1"
|
||||||
@@ -3335,30 +3335,30 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@blocksuite/block-std@npm:0.15.0-canary-202405240632-44ff286":
|
"@blocksuite/block-std@npm:0.15.0-canary-202405261009-6c8ef5b":
|
||||||
version: 0.15.0-canary-202405240632-44ff286
|
version: 0.15.0-canary-202405261009-6c8ef5b
|
||||||
resolution: "@blocksuite/block-std@npm:0.15.0-canary-202405240632-44ff286"
|
resolution: "@blocksuite/block-std@npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@blocksuite/global": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/global": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
lit: "npm:^3.1.3"
|
lit: "npm:^3.1.3"
|
||||||
lz-string: "npm:^1.5.0"
|
lz-string: "npm:^1.5.0"
|
||||||
w3c-keyname: "npm:^2.2.8"
|
w3c-keyname: "npm:^2.2.8"
|
||||||
zod: "npm:^3.23.8"
|
zod: "npm:^3.23.8"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
"@blocksuite/inline": 0.15.0-canary-202405240632-44ff286
|
"@blocksuite/inline": 0.15.0-canary-202405261009-6c8ef5b
|
||||||
"@blocksuite/store": 0.15.0-canary-202405240632-44ff286
|
"@blocksuite/store": 0.15.0-canary-202405261009-6c8ef5b
|
||||||
checksum: 10/707717b3b434caebfccbd316744f512a600386b18c4ad3054a0416f123ae0617524aead148148343fcc9312ff1ffa5aec835b723b75b5db29b7855a60156797a
|
checksum: 10/ad6c58969282e9cd7839629214600cb023a921267e9219ed8a37807b7430de19f8126c71bf8b554da91e356ae703229d292296fed789caaf4a66ab0c4ea079fb
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@blocksuite/blocks@npm:0.15.0-canary-202405240632-44ff286":
|
"@blocksuite/blocks@npm:0.15.0-canary-202405261009-6c8ef5b":
|
||||||
version: 0.15.0-canary-202405240632-44ff286
|
version: 0.15.0-canary-202405261009-6c8ef5b
|
||||||
resolution: "@blocksuite/blocks@npm:0.15.0-canary-202405240632-44ff286"
|
resolution: "@blocksuite/blocks@npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@blocksuite/block-std": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/block-std": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/global": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/global": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/inline": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/inline": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/store": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/store": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@dotlottie/player-component": "npm:^2.7.12"
|
"@dotlottie/player-component": "npm:^2.7.12"
|
||||||
"@fal-ai/serverless-client": "npm:^0.10.0"
|
"@fal-ai/serverless-client": "npm:^0.10.0"
|
||||||
"@floating-ui/dom": "npm:^1.6.5"
|
"@floating-ui/dom": "npm:^1.6.5"
|
||||||
@@ -3395,16 +3395,17 @@ __metadata:
|
|||||||
sortablejs: "npm:^1.15.2"
|
sortablejs: "npm:^1.15.2"
|
||||||
unified: "npm:^11.0.4"
|
unified: "npm:^11.0.4"
|
||||||
zod: "npm:^3.23.8"
|
zod: "npm:^3.23.8"
|
||||||
checksum: 10/f7b2494746ae1842f3388407b446e28ea97d403c0e2ecc38eca6a718e1247f7d6b5217ceeb854be47f9304cebe16dfa1d5d0f6839c6396098f9560be4378fb1e
|
checksum: 10/5e766b5af69a0c73a0944be8464b404f6d2c0e7b3f66d5b1e191126ed31cf42b2310ac7d0f246a0998e1d26fd3a909416be7b4a1af08cdd0bbb52bae0e025c48
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@blocksuite/global@npm:0.15.0-canary-202405240632-44ff286":
|
"@blocksuite/global@npm:0.15.0-canary-202405261009-6c8ef5b":
|
||||||
version: 0.15.0-canary-202405240632-44ff286
|
version: 0.15.0-canary-202405261009-6c8ef5b
|
||||||
resolution: "@blocksuite/global@npm:0.15.0-canary-202405240632-44ff286"
|
resolution: "@blocksuite/global@npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
lib0: "npm:^0.2.93"
|
||||||
zod: "npm:^3.23.8"
|
zod: "npm:^3.23.8"
|
||||||
checksum: 10/c5eb7c7f566e67f35b64918cb459a2b76302b4a633d86311690a36c514ccf3e4cfa70c15de151965505fe913d5a6d9c3383a1855976f6f8b6bb7fa0deda9f4ec
|
checksum: 10/1333f50c05ca1d846a334714e19cfee152d966e594e3a8d54a70889382b2407cd7aaffcc952edd45db84b3cbaad2a34efc1db00bac2efdb5a3e145201a85090c
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -3418,45 +3419,45 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@blocksuite/inline@npm:0.15.0-canary-202405240632-44ff286":
|
"@blocksuite/inline@npm:0.15.0-canary-202405261009-6c8ef5b":
|
||||||
version: 0.15.0-canary-202405240632-44ff286
|
version: 0.15.0-canary-202405261009-6c8ef5b
|
||||||
resolution: "@blocksuite/inline@npm:0.15.0-canary-202405240632-44ff286"
|
resolution: "@blocksuite/inline@npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@blocksuite/global": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/global": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
zod: "npm:^3.23.8"
|
zod: "npm:^3.23.8"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
lit: ^3.1.1
|
lit: ^3.1.1
|
||||||
yjs: ^13.6.15
|
yjs: ^13.6.15
|
||||||
checksum: 10/1f2ec5a45640edada09218e57f5a15d19f800aa162bd91731048aee9a0a74b0b2b82af9e01bb4e6725c8d3465df22621c606b6621de4c71b42393e80781d7381
|
checksum: 10/b60037bd3aae9f5cdcf47db82cefc9b9fc55b0f1c69924a1b6c6a8260a25aa2eec4d5d6315447fa4ff3dbe64ae57a17c1592e94824b124bf7c1e95e486f85b62
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@blocksuite/presets@npm:0.15.0-canary-202405240632-44ff286":
|
"@blocksuite/presets@npm:0.15.0-canary-202405261009-6c8ef5b":
|
||||||
version: 0.15.0-canary-202405240632-44ff286
|
version: 0.15.0-canary-202405261009-6c8ef5b
|
||||||
resolution: "@blocksuite/presets@npm:0.15.0-canary-202405240632-44ff286"
|
resolution: "@blocksuite/presets@npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@blocksuite/block-std": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/block-std": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/blocks": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/blocks": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/global": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/global": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/inline": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/inline": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/store": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/store": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@dotlottie/player-component": "npm:^2.7.12"
|
"@dotlottie/player-component": "npm:^2.7.12"
|
||||||
"@fal-ai/serverless-client": "npm:^0.10.0"
|
"@fal-ai/serverless-client": "npm:^0.10.0"
|
||||||
"@floating-ui/dom": "npm:^1.6.5"
|
"@floating-ui/dom": "npm:^1.6.5"
|
||||||
"@toeverything/theme": "npm:^0.7.30"
|
"@toeverything/theme": "npm:^0.7.30"
|
||||||
lit: "npm:^3.1.3"
|
lit: "npm:^3.1.3"
|
||||||
openai: "npm:^4.47.1"
|
openai: "npm:^4.47.1"
|
||||||
checksum: 10/58eb30f64128b7daa0236b38cfffcc698027e083c5b3af084c3f59173f847de25ed107671226bac50095ad093f1b6f4e50d99e074457c70bf8bbaff7d7e9d17f
|
checksum: 10/7b7470910077cba5d993a801c7385974bc80fb35c2830c797ddae45aeba632335e8f4ea58771e5b24c1c7cde5b1e55413f4fb83704715c773bd0c7d6e4fc51e2
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@blocksuite/store@npm:0.15.0-canary-202405240632-44ff286":
|
"@blocksuite/store@npm:0.15.0-canary-202405261009-6c8ef5b":
|
||||||
version: 0.15.0-canary-202405240632-44ff286
|
version: 0.15.0-canary-202405261009-6c8ef5b
|
||||||
resolution: "@blocksuite/store@npm:0.15.0-canary-202405240632-44ff286"
|
resolution: "@blocksuite/store@npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@blocksuite/global": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/global": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/inline": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/inline": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/sync": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/sync": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@types/flexsearch": "npm:^0.7.6"
|
"@types/flexsearch": "npm:^0.7.6"
|
||||||
flexsearch: "npm:0.7.43"
|
flexsearch: "npm:0.7.43"
|
||||||
idb-keyval: "npm:^6.2.1"
|
idb-keyval: "npm:^6.2.1"
|
||||||
@@ -3468,20 +3469,21 @@ __metadata:
|
|||||||
zod: "npm:^3.23.8"
|
zod: "npm:^3.23.8"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
yjs: ^13.6.15
|
yjs: ^13.6.15
|
||||||
checksum: 10/68b22b2a6cb89e4313a9a4c6532fbf296a36c727a3cb910a5b35885f32e10a9db209184bafb365fee6128fd0df8689c73c93314c5a63d8064257f5be5ae4e982
|
checksum: 10/827f6d0fd98c518e927f9d60ebfe31ad3fc13eb60ee487099b80c174f11a8e5931dcdb0c7bc79b5f563d62c506fb784c3493af894934498311db080d177fcdab
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@blocksuite/sync@npm:0.15.0-canary-202405240632-44ff286":
|
"@blocksuite/sync@npm:0.15.0-canary-202405261009-6c8ef5b":
|
||||||
version: 0.15.0-canary-202405240632-44ff286
|
version: 0.15.0-canary-202405261009-6c8ef5b
|
||||||
resolution: "@blocksuite/sync@npm:0.15.0-canary-202405240632-44ff286"
|
resolution: "@blocksuite/sync@npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@blocksuite/global": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/global": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
idb: "npm:^8.0.0"
|
idb: "npm:^8.0.0"
|
||||||
|
idb-keyval: "npm:^6.2.1"
|
||||||
y-protocols: "npm:^1.0.6"
|
y-protocols: "npm:^1.0.6"
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
yjs: ^13.6.15
|
yjs: ^13.6.15
|
||||||
checksum: 10/225716092e5ab4a68bbadd9bc4cdab111fa9d69ef8d88187b76614f42a98e5d5f059d9368db454fd28f1ee411be996ef8e2e407f824ca08e4a53601670d85fe2
|
checksum: 10/3370baae7c3ba24a3ff1539fb677ee563d7743e44cc489dae262d3818ab92e47d709331a5c8b36833f0f27658b1807045fc1efa5fe389cf8ff501ea2aaafd413
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
@@ -13891,11 +13893,11 @@ __metadata:
|
|||||||
"@affine/debug": "workspace:*"
|
"@affine/debug": "workspace:*"
|
||||||
"@affine/env": "workspace:*"
|
"@affine/env": "workspace:*"
|
||||||
"@affine/templates": "workspace:*"
|
"@affine/templates": "workspace:*"
|
||||||
"@blocksuite/block-std": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/block-std": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/blocks": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/blocks": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/global": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/global": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/presets": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/presets": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@blocksuite/store": "npm:0.15.0-canary-202405240632-44ff286"
|
"@blocksuite/store": "npm:0.15.0-canary-202405261009-6c8ef5b"
|
||||||
"@datastructures-js/binary-search-tree": "npm:^5.3.2"
|
"@datastructures-js/binary-search-tree": "npm:^5.3.2"
|
||||||
"@testing-library/react": "npm:^15.0.0"
|
"@testing-library/react": "npm:^15.0.0"
|
||||||
async-call-rpc: "npm:^6.4.0"
|
async-call-rpc: "npm:^6.4.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user