mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-14 05:14:54 +00:00
Merge branch 'feat/datacenter-dev' of github.com:toeverything/AFFiNE into feat/datacenter-dev
This commit is contained in:
@@ -0,0 +1,42 @@
|
|||||||
|
import { ReactElement, useState } from 'react';
|
||||||
|
import { useAppState } from '@/providers/app-state-provider';
|
||||||
|
import type { NextPageWithLayout } from '../..//_app';
|
||||||
|
|
||||||
|
import dynamic from 'next/dynamic';
|
||||||
|
import { useRouter } from 'next/router';
|
||||||
|
const DynamicBlocksuite = dynamic(() => import('@/components/editor'), {
|
||||||
|
ssr: false,
|
||||||
|
});
|
||||||
|
const Page: NextPageWithLayout = () => {
|
||||||
|
const [workspace, setWorkspace] = useState(null);
|
||||||
|
const [page, setPage] = useState(null);
|
||||||
|
const { dataCenter } = useAppState();
|
||||||
|
console.log('dataCenter: ', dataCenter);
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
console.log(router.query.workspaceId);
|
||||||
|
dataCenter
|
||||||
|
.loadPublicWorkspace(router.query.workspaceId as string)
|
||||||
|
.then(data => {
|
||||||
|
console.log(data);
|
||||||
|
});
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{workspace && page && (
|
||||||
|
<DynamicBlocksuite
|
||||||
|
page={page}
|
||||||
|
workspace={workspace}
|
||||||
|
setEditor={() => {
|
||||||
|
console.log('test');
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
Page.getLayout = function getLayout(page: ReactElement) {
|
||||||
|
return <div>{page}</div>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Page;
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { PageList } from '@/components/page-list';
|
||||||
|
import { AllPagesIcon } from '@blocksuite/icons';
|
||||||
|
import { PageListHeader } from '@/components/header';
|
||||||
|
import { ReactElement } from 'react';
|
||||||
|
import { useTranslation } from '@affine/i18n';
|
||||||
|
import { useAppState } from '@/providers/app-state-provider';
|
||||||
|
import { useRouter } from 'next/router';
|
||||||
|
const All = () => {
|
||||||
|
const { pageList } = useAppState();
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const { dataCenter } = useAppState();
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
console.log(router.query.workspaceId);
|
||||||
|
dataCenter
|
||||||
|
.loadPublicWorkspace(router.query.workspaceId as string)
|
||||||
|
.then(data => {
|
||||||
|
console.log(data);
|
||||||
|
});
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<PageList
|
||||||
|
pageList={pageList.filter(p => !p.trash)}
|
||||||
|
showFavoriteTag={true}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
All.getLayout = function getLayout(page: ReactElement) {
|
||||||
|
return <div>{page}</div>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default All;
|
||||||
@@ -36,7 +36,6 @@
|
|||||||
"ky-universal": "^0.11.0",
|
"ky-universal": "^0.11.0",
|
||||||
"lib0": "^0.2.58",
|
"lib0": "^0.2.58",
|
||||||
"swr": "^2.0.0",
|
"swr": "^2.0.0",
|
||||||
"yjs": "^13.5.44",
|
|
||||||
"y-protocols": "^1.0.5"
|
"y-protocols": "^1.0.5"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import assert from 'assert';
|
|||||||
import { getLogger } from './logger';
|
import { getLogger } from './logger';
|
||||||
import { createBlocksuiteWorkspace } from './utils/index.js';
|
import { createBlocksuiteWorkspace } from './utils/index.js';
|
||||||
import { MessageCenter } from './message';
|
import { MessageCenter } from './message';
|
||||||
import type { WorkspaceUnit } from './workspace-unit';
|
import { WorkspaceUnit } from './workspace-unit';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class DataCenter
|
* @class DataCenter
|
||||||
@@ -153,7 +153,7 @@ export class DataCenter {
|
|||||||
/**
|
/**
|
||||||
* load workspace instance by id
|
* load workspace instance by id
|
||||||
* @param {string} workspaceId workspace id
|
* @param {string} workspaceId workspace id
|
||||||
* @returns {Promise<BlocksuiteWorkspace>}
|
* @returns {Promise<WorkspaceUnit>}
|
||||||
*/
|
*/
|
||||||
public async loadWorkspace(workspaceId: string) {
|
public async loadWorkspace(workspaceId: string) {
|
||||||
const workspaceUnit = this._workspaceUnitCollection.find(workspaceId);
|
const workspaceUnit = this._workspaceUnitCollection.find(workspaceId);
|
||||||
@@ -175,6 +175,29 @@ export class DataCenter {
|
|||||||
return workspaceUnit;
|
return workspaceUnit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async loadPublicWorkspace(workspaceId: string) {
|
||||||
|
const workspaceUnit = this._workspaceUnitCollection.find(workspaceId);
|
||||||
|
assert(workspaceUnit, 'Workspace not found');
|
||||||
|
const provider = this.providerMap.get(workspaceUnit.provider);
|
||||||
|
assert(provider);
|
||||||
|
const blocksuiteWorkspace = this._getBlocksuiteWorkspace(workspaceId);
|
||||||
|
await provider.loadPublicWorkspace(blocksuiteWorkspace);
|
||||||
|
|
||||||
|
const workspaceUnitForPublic = new WorkspaceUnit({
|
||||||
|
id: workspaceUnit.id,
|
||||||
|
name: workspaceUnit.name,
|
||||||
|
avatar: workspaceUnit.avatar,
|
||||||
|
owner: workspaceUnit.owner,
|
||||||
|
published: workspaceUnit.published,
|
||||||
|
provider: workspaceUnit.provider,
|
||||||
|
memberCount: workspaceUnit.memberCount,
|
||||||
|
syncMode: workspaceUnit.syncMode,
|
||||||
|
});
|
||||||
|
|
||||||
|
workspaceUnitForPublic.setBlocksuiteWorkspace(blocksuiteWorkspace);
|
||||||
|
return workspaceUnitForPublic;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get user info by provider id
|
* get user info by provider id
|
||||||
* @param {string} providerId the provider name of workspace
|
* @param {string} providerId the provider name of workspace
|
||||||
@@ -206,7 +229,7 @@ export class DataCenter {
|
|||||||
/**
|
/**
|
||||||
* change workspaces meta
|
* change workspaces meta
|
||||||
* @param {WorkspaceMeta} workspaceMeta workspace meta
|
* @param {WorkspaceMeta} workspaceMeta workspace meta
|
||||||
* @param {BlocksuiteWorkspace} workspace workspace instance
|
* @param {WorkspaceUnit} workspace workspace instance
|
||||||
*/
|
*/
|
||||||
public async updateWorkspaceMeta(
|
public async updateWorkspaceMeta(
|
||||||
{ name, avatar }: UpdateWorkspaceMetaParams,
|
{ name, avatar }: UpdateWorkspaceMetaParams,
|
||||||
@@ -255,12 +278,17 @@ export class DataCenter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async inviteMember(id: string, email: string) {
|
/**
|
||||||
const workspaceInfo = this._workspaceUnitCollection.find(id);
|
* invite the new member to the workspace
|
||||||
|
* @param {string} workspaceId workspace id
|
||||||
|
* @param {string} email
|
||||||
|
*/
|
||||||
|
public async inviteMember(workspaceId: string, email: string) {
|
||||||
|
const workspaceInfo = this._workspaceUnitCollection.find(workspaceId);
|
||||||
assert(workspaceInfo, 'Workspace not found');
|
assert(workspaceInfo, 'Workspace not found');
|
||||||
const provider = this.providerMap.get(workspaceInfo.provider);
|
const provider = this.providerMap.get(workspaceInfo.provider);
|
||||||
if (provider) {
|
if (provider) {
|
||||||
await provider.invite(id, email);
|
await provider.invite(workspaceId, email);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -380,10 +408,10 @@ export class DataCenter {
|
|||||||
* @returns {Promise<string | null>} blob url
|
* @returns {Promise<string | null>} blob url
|
||||||
*/
|
*/
|
||||||
async getBlob(
|
async getBlob(
|
||||||
workspace: BlocksuiteWorkspace,
|
workspaceUnit: WorkspaceUnit,
|
||||||
id: string
|
id: string
|
||||||
): Promise<string | null> {
|
): Promise<string | null> {
|
||||||
const blob = await workspace.blobs;
|
const blob = await workspaceUnit.blocksuiteWorkspace?.blobs;
|
||||||
return (await blob?.get(id)) || '';
|
return (await blob?.get(id)) || '';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,8 +420,8 @@ export class DataCenter {
|
|||||||
* @param id
|
* @param id
|
||||||
* @returns {Promise<string | null>} blob url
|
* @returns {Promise<string | null>} blob url
|
||||||
*/
|
*/
|
||||||
async setBlob(workspace: BlocksuiteWorkspace, blob: Blob): Promise<string> {
|
async setBlob(workspace: WorkspaceUnit, blob: Blob): Promise<string> {
|
||||||
const blobStorage = await workspace.blobs;
|
const blobStorage = await workspace.blocksuiteWorkspace?.blobs;
|
||||||
return (await blobStorage?.set(blob)) || '';
|
return (await blobStorage?.set(blob)) || '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,33 +7,47 @@ import type {
|
|||||||
import type { User } from '../../types';
|
import type { User } from '../../types';
|
||||||
import { Workspace as BlocksuiteWorkspace } from '@blocksuite/store';
|
import { Workspace as BlocksuiteWorkspace } from '@blocksuite/store';
|
||||||
import { BlockSchema } from '@blocksuite/blocks/models';
|
import { BlockSchema } from '@blocksuite/blocks/models';
|
||||||
import { applyUpdate, encodeStateAsUpdate } from 'yjs';
|
|
||||||
import { storage } from './storage.js';
|
import { storage } from './storage.js';
|
||||||
import assert from 'assert';
|
import assert from 'assert';
|
||||||
import { WebsocketProvider } from './sync.js';
|
import { WebsocketProvider } from './sync.js';
|
||||||
// import { IndexedDBProvider } from '../local/indexeddb';
|
// import { IndexedDBProvider } from '../local/indexeddb';
|
||||||
import { getApis, Member } from './apis/index.js';
|
import { getApis } from './apis/index.js';
|
||||||
import type { Apis, WorkspaceDetail, Callback } from './apis';
|
import type { Apis, WorkspaceDetail, Callback } from './apis';
|
||||||
import { setDefaultAvatar } from '../utils.js';
|
import { setDefaultAvatar } from '../utils.js';
|
||||||
import { MessageCode } from '../../message';
|
import { MessageCode } from '../../message';
|
||||||
import { token } from './apis/token.js';
|
import { token } from './apis/token.js';
|
||||||
|
import { WebsocketClient } from './channel';
|
||||||
|
|
||||||
export interface AffineProviderConstructorParams
|
export interface AffineProviderConstructorParams
|
||||||
extends ProviderConstructorParams {
|
extends ProviderConstructorParams {
|
||||||
apis?: Apis;
|
apis?: Apis;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const {
|
||||||
|
Y: { applyUpdate, encodeStateAsUpdate },
|
||||||
|
} = BlocksuiteWorkspace;
|
||||||
|
|
||||||
export class AffineProvider extends BaseProvider {
|
export class AffineProvider extends BaseProvider {
|
||||||
public id = 'affine';
|
public id = 'affine';
|
||||||
private _workspacesCache: Map<string, BlocksuiteWorkspace> = new Map();
|
private _workspacesCache: Map<string, BlocksuiteWorkspace> = new Map();
|
||||||
private _onTokenRefresh?: Callback = undefined;
|
private _onTokenRefresh?: Callback = undefined;
|
||||||
private _wsMap: Map<string, WebsocketProvider> = new Map();
|
private _wsMap: Map<string, WebsocketProvider> = new Map();
|
||||||
private _apis: Apis;
|
private _apis: Apis;
|
||||||
|
private _channel: WebsocketClient;
|
||||||
// private _idbMap: Map<string, IndexedDBProvider> = new Map();
|
// private _idbMap: Map<string, IndexedDBProvider> = new Map();
|
||||||
|
|
||||||
constructor({ apis, ...params }: AffineProviderConstructorParams) {
|
constructor({ apis, ...params }: AffineProviderConstructorParams) {
|
||||||
super(params);
|
super(params);
|
||||||
this._apis = apis || getApis();
|
this._apis = apis || getApis();
|
||||||
|
this._channel = new WebsocketClient(
|
||||||
|
`${window.location.protocol === 'https:' ? 'wss' : 'ws'}://${
|
||||||
|
window.location.host
|
||||||
|
}/global/sync/`,
|
||||||
|
this._logger
|
||||||
|
);
|
||||||
|
if (token.isLogin) {
|
||||||
|
this._connectChannel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override async init() {
|
override async init() {
|
||||||
@@ -64,6 +78,15 @@ export class AffineProvider extends BaseProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _connectChannel() {
|
||||||
|
this._channel.connect();
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
this._channel.on('message', (message: any) => {
|
||||||
|
console.log('message', message);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private _getWebsocketProvider(workspace: BlocksuiteWorkspace) {
|
private _getWebsocketProvider(workspace: BlocksuiteWorkspace) {
|
||||||
const { doc, room } = workspace;
|
const { doc, room } = workspace;
|
||||||
assert(room);
|
assert(room);
|
||||||
@@ -93,6 +116,11 @@ export class AffineProvider extends BaseProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override async loadPublicWorkspace(blocksuiteWorkspace: BlocksuiteWorkspace) {
|
||||||
|
await this._applyCloudUpdates(blocksuiteWorkspace);
|
||||||
|
return blocksuiteWorkspace;
|
||||||
|
}
|
||||||
|
|
||||||
override async warpWorkspace(workspace: BlocksuiteWorkspace) {
|
override async warpWorkspace(workspace: BlocksuiteWorkspace) {
|
||||||
await this._applyCloudUpdates(workspace);
|
await this._applyCloudUpdates(workspace);
|
||||||
const { room } = workspace;
|
const { room } = workspace;
|
||||||
@@ -207,6 +235,9 @@ export class AffineProvider extends BaseProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
const user = await this._apis.signInWithGoogle?.();
|
const user = await this._apis.signInWithGoogle?.();
|
||||||
|
if (!this._channel.connected) {
|
||||||
|
this._connectChannel();
|
||||||
|
}
|
||||||
if (!user) {
|
if (!user) {
|
||||||
this._messageCenter.send(MessageCode.loginError);
|
this._messageCenter.send(MessageCode.loginError);
|
||||||
}
|
}
|
||||||
@@ -365,6 +396,8 @@ export class AffineProvider extends BaseProvider {
|
|||||||
|
|
||||||
public override async logout(): Promise<void> {
|
public override async logout(): Promise<void> {
|
||||||
token.clear();
|
token.clear();
|
||||||
|
this._channel.disconnect();
|
||||||
|
this._wsMap.forEach(ws => ws.disconnect());
|
||||||
storage.removeItem('token');
|
storage.removeItem('token');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
53
packages/data-center/src/provider/affine/channel.ts
Normal file
53
packages/data-center/src/provider/affine/channel.ts
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
import * as websocket from 'lib0/websocket';
|
||||||
|
import { Logger } from 'src/types';
|
||||||
|
import { token } from './apis/token';
|
||||||
|
|
||||||
|
const RECONNECT_INTERVAL_TIME = 5000;
|
||||||
|
const MAX_RECONNECT_TIMES = 50;
|
||||||
|
|
||||||
|
export class WebsocketClient extends websocket.WebsocketClient {
|
||||||
|
public shouldReconnect = false;
|
||||||
|
private _reconnectInterval: number | null = null;
|
||||||
|
private _logger: Logger;
|
||||||
|
constructor(
|
||||||
|
url: string,
|
||||||
|
logger: Logger,
|
||||||
|
options?: { binaryType: 'arraybuffer' | 'blob' | null }
|
||||||
|
) {
|
||||||
|
super(url, options);
|
||||||
|
this._logger = logger;
|
||||||
|
this._setupChannel();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _setupChannel() {
|
||||||
|
this.on('connect', () => {
|
||||||
|
this._logger('Affine channel connected');
|
||||||
|
this.shouldReconnect = true;
|
||||||
|
if (this._reconnectInterval) {
|
||||||
|
window.clearInterval(this._reconnectInterval);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.on('disconnect', ({ error }: { error: Error }) => {
|
||||||
|
if (error) {
|
||||||
|
let times = 0;
|
||||||
|
// Try reconnect if connect error has occurred
|
||||||
|
this._reconnectInterval = window.setInterval(() => {
|
||||||
|
if (this.shouldReconnect && token.isLogin && !this.connected) {
|
||||||
|
try {
|
||||||
|
this.connect();
|
||||||
|
this._logger(`try reconnect channel ${++times} times`);
|
||||||
|
if (times > MAX_RECONNECT_TIMES) {
|
||||||
|
this._logger('reconnect failed, max reconnect times reached');
|
||||||
|
this._reconnectInterval &&
|
||||||
|
window.clearInterval(this._reconnectInterval);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
this._logger('reconnect failed', e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, RECONNECT_INTERVAL_TIME);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -75,6 +75,15 @@ export class BaseProvider {
|
|||||||
return workspace;
|
return workspace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Temporary for public workspace
|
||||||
|
* @param blocksuiteWorkspace
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
public async loadPublicWorkspace(blocksuiteWorkspace: BlocksuiteWorkspace) {
|
||||||
|
return blocksuiteWorkspace;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* load workspaces
|
* load workspaces
|
||||||
**/
|
**/
|
||||||
|
|||||||
@@ -1,14 +1,19 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
import * as idb from 'lib0/indexeddb.js';
|
import * as idb from 'lib0/indexeddb.js';
|
||||||
import { Observable } from 'lib0/observable.js';
|
import { Observable } from 'lib0/observable.js';
|
||||||
import type { Doc } from 'yjs';
|
import { Workspace as BlocksuiteWorkspace } from '@blocksuite/store';
|
||||||
import { applyUpdate, encodeStateAsUpdate, transact } from 'yjs';
|
|
||||||
|
|
||||||
const customStoreName = 'custom';
|
const customStoreName = 'custom';
|
||||||
const updatesStoreName = 'updates';
|
const updatesStoreName = 'updates';
|
||||||
|
|
||||||
const PREFERRED_TRIM_SIZE = 500;
|
const PREFERRED_TRIM_SIZE = 500;
|
||||||
|
|
||||||
|
const {
|
||||||
|
Y: { applyUpdate, transact, encodeStateAsUpdate },
|
||||||
|
} = BlocksuiteWorkspace;
|
||||||
|
|
||||||
|
type Doc = Parameters<typeof transact>[0];
|
||||||
|
|
||||||
const fetchUpdates = async (provider: IndexedDBProvider) => {
|
const fetchUpdates = async (provider: IndexedDBProvider) => {
|
||||||
const [updatesStore] = idb.transact(provider.db as IDBDatabase, [
|
const [updatesStore] = idb.transact(provider.db as IDBDatabase, [
|
||||||
updatesStoreName,
|
updatesStoreName,
|
||||||
|
|||||||
76
pnpm-lock.yaml
generated
76
pnpm-lock.yaml
generated
@@ -144,10 +144,9 @@ importers:
|
|||||||
swr: ^2.0.0
|
swr: ^2.0.0
|
||||||
typescript: ^4.8.4
|
typescript: ^4.8.4
|
||||||
y-protocols: ^1.0.5
|
y-protocols: ^1.0.5
|
||||||
yjs: ^13.5.44
|
|
||||||
dependencies:
|
dependencies:
|
||||||
'@blocksuite/blocks': 0.3.1-20230109032243-37ad3ba_yjs@13.5.44
|
'@blocksuite/blocks': 0.3.1-20230109032243-37ad3ba
|
||||||
'@blocksuite/store': 0.3.1-20230109032243-37ad3ba_yjs@13.5.44
|
'@blocksuite/store': 0.3.1-20230109032243-37ad3ba
|
||||||
debug: 4.3.4
|
debug: 4.3.4
|
||||||
encoding: 0.1.13
|
encoding: 0.1.13
|
||||||
firebase: 9.15.0_encoding@0.1.13
|
firebase: 9.15.0_encoding@0.1.13
|
||||||
@@ -157,7 +156,6 @@ importers:
|
|||||||
lib0: 0.2.58
|
lib0: 0.2.58
|
||||||
swr: 2.0.0
|
swr: 2.0.0
|
||||||
y-protocols: 1.0.5
|
y-protocols: 1.0.5
|
||||||
yjs: 13.5.44
|
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@playwright/test': 1.29.1
|
'@playwright/test': 1.29.1
|
||||||
'@types/debug': 4.1.7
|
'@types/debug': 4.1.7
|
||||||
@@ -1501,6 +1499,26 @@ packages:
|
|||||||
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
|
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@blocksuite/blocks/0.3.1-20230109032243-37ad3ba:
|
||||||
|
resolution: {integrity: sha512-UTlbk0Is7TMRBbvUyM2nivbqM/TLwRj1qArMYbOmvDGUNYadWo68cTwv/Ej2WwiKn22q4/4JHryGsv3gTCRz1Q==}
|
||||||
|
dependencies:
|
||||||
|
'@blocksuite/phasor': 0.3.1-20230109032243-37ad3ba
|
||||||
|
'@blocksuite/store': 0.3.1-20230109032243-37ad3ba
|
||||||
|
'@tldraw/intersect': 1.8.0
|
||||||
|
autosize: 5.0.2
|
||||||
|
highlight.js: 11.7.0
|
||||||
|
hotkeys-js: 3.10.1
|
||||||
|
lit: 2.5.0
|
||||||
|
perfect-freehand: 1.2.0
|
||||||
|
quill: 1.3.7
|
||||||
|
quill-cursors: 4.0.0
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- bufferutil
|
||||||
|
- supports-color
|
||||||
|
- utf-8-validate
|
||||||
|
- yjs
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@blocksuite/blocks/0.3.1-20230109032243-37ad3ba_yjs@13.5.44:
|
/@blocksuite/blocks/0.3.1-20230109032243-37ad3ba_yjs@13.5.44:
|
||||||
resolution: {integrity: sha512-UTlbk0Is7TMRBbvUyM2nivbqM/TLwRj1qArMYbOmvDGUNYadWo68cTwv/Ej2WwiKn22q4/4JHryGsv3gTCRz1Q==}
|
resolution: {integrity: sha512-UTlbk0Is7TMRBbvUyM2nivbqM/TLwRj1qArMYbOmvDGUNYadWo68cTwv/Ej2WwiKn22q4/4JHryGsv3gTCRz1Q==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -1546,6 +1564,12 @@ packages:
|
|||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@blocksuite/phasor/0.3.1-20230109032243-37ad3ba:
|
||||||
|
resolution: {integrity: sha512-mL1gSQ3rzrjdQSbWPtgyMXpbbl266UUjw26d0aIjkOh+iMMI6rWtmKWDoiDkO7tejIjwSNQ4w5zJOjJRIj+mSA==}
|
||||||
|
peerDependencies:
|
||||||
|
yjs: ^13
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@blocksuite/phasor/0.3.1-20230109032243-37ad3ba_yjs@13.5.44:
|
/@blocksuite/phasor/0.3.1-20230109032243-37ad3ba_yjs@13.5.44:
|
||||||
resolution: {integrity: sha512-mL1gSQ3rzrjdQSbWPtgyMXpbbl266UUjw26d0aIjkOh+iMMI6rWtmKWDoiDkO7tejIjwSNQ4w5zJOjJRIj+mSA==}
|
resolution: {integrity: sha512-mL1gSQ3rzrjdQSbWPtgyMXpbbl266UUjw26d0aIjkOh+iMMI6rWtmKWDoiDkO7tejIjwSNQ4w5zJOjJRIj+mSA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -1554,6 +1578,26 @@ packages:
|
|||||||
yjs: 13.5.44
|
yjs: 13.5.44
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@blocksuite/store/0.3.1-20230109032243-37ad3ba:
|
||||||
|
resolution: {integrity: sha512-zOUz19jfhuhsUkx9BGEQPZWbPyD/AgX0LB7ShVRdd3YM73x25hD6tPLLz1HEV2b69XokC0P9oSru4aNomm4jkg==}
|
||||||
|
peerDependencies:
|
||||||
|
yjs: ^13
|
||||||
|
dependencies:
|
||||||
|
'@types/flexsearch': 0.7.3
|
||||||
|
'@types/quill': 1.3.10
|
||||||
|
buffer: 6.0.3
|
||||||
|
flexsearch: 0.7.21
|
||||||
|
idb-keyval: 6.2.0
|
||||||
|
ky: 0.33.1
|
||||||
|
lib0: 0.2.58
|
||||||
|
y-protocols: 1.0.5
|
||||||
|
y-webrtc: 10.2.3
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- bufferutil
|
||||||
|
- supports-color
|
||||||
|
- utf-8-validate
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@blocksuite/store/0.3.1-20230109032243-37ad3ba_yjs@13.5.44:
|
/@blocksuite/store/0.3.1-20230109032243-37ad3ba_yjs@13.5.44:
|
||||||
resolution: {integrity: sha512-zOUz19jfhuhsUkx9BGEQPZWbPyD/AgX0LB7ShVRdd3YM73x25hD6tPLLz1HEV2b69XokC0P9oSru4aNomm4jkg==}
|
resolution: {integrity: sha512-zOUz19jfhuhsUkx9BGEQPZWbPyD/AgX0LB7ShVRdd3YM73x25hD6tPLLz1HEV2b69XokC0P9oSru4aNomm4jkg==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -2967,6 +3011,7 @@ packages:
|
|||||||
|
|
||||||
/@next/env/13.1.0:
|
/@next/env/13.1.0:
|
||||||
resolution: {integrity: sha512-6iNixFzCndH+Bl4FetQzOMjxCJqg8fs0LAlZviig1K6mIjOWH2m2oPcHcOg1Ta5VCe7Bx5KG1Hs+NrWDUkBt9A==}
|
resolution: {integrity: sha512-6iNixFzCndH+Bl4FetQzOMjxCJqg8fs0LAlZviig1K6mIjOWH2m2oPcHcOg1Ta5VCe7Bx5KG1Hs+NrWDUkBt9A==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@next/eslint-plugin-next/12.3.1:
|
/@next/eslint-plugin-next/12.3.1:
|
||||||
resolution: {integrity: sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw==}
|
resolution: {integrity: sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw==}
|
||||||
@@ -2989,6 +3034,7 @@ packages:
|
|||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [android]
|
os: [android]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-android-arm64/12.3.1:
|
/@next/swc-android-arm64/12.3.1:
|
||||||
@@ -3006,6 +3052,7 @@ packages:
|
|||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [android]
|
os: [android]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-darwin-arm64/12.3.1:
|
/@next/swc-darwin-arm64/12.3.1:
|
||||||
@@ -3023,6 +3070,7 @@ packages:
|
|||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-darwin-x64/12.3.1:
|
/@next/swc-darwin-x64/12.3.1:
|
||||||
@@ -3040,6 +3088,7 @@ packages:
|
|||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-freebsd-x64/12.3.1:
|
/@next/swc-freebsd-x64/12.3.1:
|
||||||
@@ -3057,6 +3106,7 @@ packages:
|
|||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [freebsd]
|
os: [freebsd]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-linux-arm-gnueabihf/12.3.1:
|
/@next/swc-linux-arm-gnueabihf/12.3.1:
|
||||||
@@ -3074,6 +3124,7 @@ packages:
|
|||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-linux-arm64-gnu/12.3.1:
|
/@next/swc-linux-arm64-gnu/12.3.1:
|
||||||
@@ -3091,6 +3142,7 @@ packages:
|
|||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-linux-arm64-musl/12.3.1:
|
/@next/swc-linux-arm64-musl/12.3.1:
|
||||||
@@ -3108,6 +3160,7 @@ packages:
|
|||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-linux-x64-gnu/12.3.1:
|
/@next/swc-linux-x64-gnu/12.3.1:
|
||||||
@@ -3125,6 +3178,7 @@ packages:
|
|||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-linux-x64-musl/12.3.1:
|
/@next/swc-linux-x64-musl/12.3.1:
|
||||||
@@ -3142,6 +3196,7 @@ packages:
|
|||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-win32-arm64-msvc/12.3.1:
|
/@next/swc-win32-arm64-msvc/12.3.1:
|
||||||
@@ -3159,6 +3214,7 @@ packages:
|
|||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-win32-ia32-msvc/12.3.1:
|
/@next/swc-win32-ia32-msvc/12.3.1:
|
||||||
@@ -3176,6 +3232,7 @@ packages:
|
|||||||
cpu: [ia32]
|
cpu: [ia32]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@next/swc-win32-x64-msvc/12.3.1:
|
/@next/swc-win32-x64-msvc/12.3.1:
|
||||||
@@ -3193,6 +3250,7 @@ packages:
|
|||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@nodelib/fs.scandir/2.1.5:
|
/@nodelib/fs.scandir/2.1.5:
|
||||||
@@ -3555,6 +3613,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
|
resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib: 2.4.0
|
tslib: 2.4.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@szmarczak/http-timer/5.0.1:
|
/@szmarczak/http-timer/5.0.1:
|
||||||
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
|
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
|
||||||
@@ -4521,6 +4580,7 @@ packages:
|
|||||||
|
|
||||||
/client-only/0.0.1:
|
/client-only/0.0.1:
|
||||||
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
|
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/cliui/6.0.0:
|
/cliui/6.0.0:
|
||||||
resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
|
resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
|
||||||
@@ -7452,6 +7512,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
|
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
|
||||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
dev: false
|
||||||
|
|
||||||
/natural-compare-lite/1.4.0:
|
/natural-compare-lite/1.4.0:
|
||||||
resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
|
resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
|
||||||
@@ -7574,6 +7635,7 @@ packages:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@babel/core'
|
- '@babel/core'
|
||||||
- babel-plugin-macros
|
- babel-plugin-macros
|
||||||
|
dev: false
|
||||||
|
|
||||||
/node-domexception/1.0.0:
|
/node-domexception/1.0.0:
|
||||||
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
||||||
@@ -7924,6 +7986,7 @@ packages:
|
|||||||
nanoid: 3.3.4
|
nanoid: 3.3.4
|
||||||
picocolors: 1.0.0
|
picocolors: 1.0.0
|
||||||
source-map-js: 1.0.2
|
source-map-js: 1.0.2
|
||||||
|
dev: false
|
||||||
|
|
||||||
/preferred-pm/3.0.3:
|
/preferred-pm/3.0.3:
|
||||||
resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==}
|
resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==}
|
||||||
@@ -8093,6 +8156,7 @@ packages:
|
|||||||
loose-envify: 1.4.0
|
loose-envify: 1.4.0
|
||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
scheduler: 0.23.0
|
scheduler: 0.23.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/react-i18next/11.18.6_i18next@21.10.0:
|
/react-i18next/11.18.6_i18next@21.10.0:
|
||||||
resolution: {integrity: sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==}
|
resolution: {integrity: sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==}
|
||||||
@@ -8189,6 +8253,7 @@ packages:
|
|||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dependencies:
|
dependencies:
|
||||||
loose-envify: 1.4.0
|
loose-envify: 1.4.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/read-pkg-up/7.0.1:
|
/read-pkg-up/7.0.1:
|
||||||
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
|
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
|
||||||
@@ -8466,6 +8531,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
|
resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
loose-envify: 1.4.0
|
loose-envify: 1.4.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/schema-utils/2.7.1:
|
/schema-utils/2.7.1:
|
||||||
resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==}
|
resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==}
|
||||||
@@ -8624,6 +8690,7 @@ packages:
|
|||||||
/source-map-js/1.0.2:
|
/source-map-js/1.0.2:
|
||||||
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
|
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/source-map-support/0.5.13:
|
/source-map-support/0.5.13:
|
||||||
resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
|
resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
|
||||||
@@ -8872,6 +8939,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
client-only: 0.0.1
|
client-only: 0.0.1
|
||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/stylis/4.0.13:
|
/stylis/4.0.13:
|
||||||
resolution: {integrity: sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==}
|
resolution: {integrity: sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==}
|
||||||
|
|||||||
Reference in New Issue
Block a user