From 0a4a9fcdb14da6de6e93faab50a1ef49e6731c88 Mon Sep 17 00:00:00 2001 From: alt0 Date: Mon, 9 Jan 2023 21:10:04 +0800 Subject: [PATCH] refactor: rename BlocksuiteWorkspace and WorkspaceInfo --- packages/data-center/src/datacenter.ts | 23 ++++++++++-------- packages/data-center/src/index.ts | 2 +- .../data-center/src/provider/affine/affine.ts | 22 ++++++++--------- packages/data-center/src/provider/base.ts | 16 ++++++++----- .../data-center/src/provider/local/local.ts | 24 +++++++++---------- packages/data-center/src/types/index.ts | 4 ++-- .../data-center/src/workspaces/workspaces.ts | 22 ++++++++--------- 7 files changed, 60 insertions(+), 53 deletions(-) diff --git a/packages/data-center/src/datacenter.ts b/packages/data-center/src/datacenter.ts index ee320d75ec..1021a4afb3 100644 --- a/packages/data-center/src/datacenter.ts +++ b/packages/data-center/src/datacenter.ts @@ -1,6 +1,6 @@ import { Workspaces } from './workspaces'; import type { WorkspacesChangeEvent } from './workspaces'; -import { Workspace } from '@blocksuite/store'; +import { Workspace as BlocksuiteWorkspace } from '@blocksuite/store'; import { BaseProvider } from './provider/base'; import { LocalProvider } from './provider/local/local'; import { AffineProvider } from './provider'; @@ -17,7 +17,7 @@ import { applyUpdate, encodeStateAsUpdate } from 'yjs'; export class DataCenter { private readonly _workspaces = new Workspaces(); private readonly _logger = getLogger('dc'); - private _workspaceInstances: Map = new Map(); + private _workspaceInstances: Map = new Map(); /** * A mainProvider must exist as the only data trustworthy source. */ @@ -114,7 +114,7 @@ export class DataCenter { assert(workspaceInfo, 'Workspace not found'); return ( this._workspaceInstances.get(workspaceId) || - new Workspace({ + new BlocksuiteWorkspace({ room: workspaceId, }).register(BlockSchema) ); @@ -143,7 +143,7 @@ export class DataCenter { /** * load workspace instance by id * @param {string} workspaceId workspace id - * @returns {Promise} + * @returns {Promise} */ public async loadWorkspace(workspaceId: string) { const workspaceInfo = this._workspaces.find(workspaceId); @@ -185,11 +185,11 @@ export class DataCenter { /** * change workspaces meta * @param {WorkspaceMeta} workspaceMeta workspace meta - * @param {Workspace} workspace workspace instance + * @param {BlocksuiteWorkspace} workspace workspace instance */ public async resetWorkspaceMeta( { name, avatar }: WorkspaceMeta, - workspace: Workspace + workspace: BlocksuiteWorkspace ) { assert(workspace?.room, 'No workspace to set meta'); const update: Partial = {}; @@ -273,7 +273,7 @@ export class DataCenter { } private async _transWorkspaceProvider( - workspace: Workspace, + workspace: BlocksuiteWorkspace, providerId: string ) { assert(workspace.room, 'No workspace id'); @@ -306,7 +306,7 @@ export class DataCenter { * Enable workspace cloud * @param {string} id ID of workspace. */ - public async enableWorkspaceCloud(workspace: Workspace) { + public async enableWorkspaceCloud(workspace: BlocksuiteWorkspace) { assert(workspace?.room, 'No workspace to enable cloud'); return await this._transWorkspaceProvider(workspace, 'affine'); } @@ -344,7 +344,10 @@ export class DataCenter { * @param id * @returns {Promise} blob url */ - async getBlob(workspace: Workspace, id: string): Promise { + async getBlob( + workspace: BlocksuiteWorkspace, + id: string + ): Promise { const blob = await workspace.blobs; return (await blob?.get(id)) || ''; } @@ -354,7 +357,7 @@ export class DataCenter { * @param id * @returns {Promise} blob url */ - async setBlob(workspace: Workspace, blob: Blob): Promise { + async setBlob(workspace: BlocksuiteWorkspace, blob: Blob): Promise { const blobStorage = await workspace.blobs; return (await blobStorage?.set(blob)) || ''; } diff --git a/packages/data-center/src/index.ts b/packages/data-center/src/index.ts index 6fbb0e45db..f07335c0d1 100644 --- a/packages/data-center/src/index.ts +++ b/packages/data-center/src/index.ts @@ -26,5 +26,5 @@ const _initializeDataCenter = () => { export const getDataCenter = _initializeDataCenter(); export type { AccessTokenMessage } from './provider/affine/apis'; -export type { Workspace } from './types'; +export type { WorkspaceInfo } from './types'; export { getLogger } from './logger'; diff --git a/packages/data-center/src/provider/affine/affine.ts b/packages/data-center/src/provider/affine/affine.ts index 597fa24289..6cb876a523 100644 --- a/packages/data-center/src/provider/affine/affine.ts +++ b/packages/data-center/src/provider/affine/affine.ts @@ -1,7 +1,7 @@ import { BaseProvider } from '../base.js'; import type { ProviderConstructorParams } from '../base'; -import type { User, Workspace as WS, WorkspaceMeta } from '../../types'; -import { Workspace } from '@blocksuite/store'; +import type { User, WorkspaceInfo, WorkspaceMeta } from '../../types'; +import { Workspace as BlocksuiteWorkspace } from '@blocksuite/store'; import { BlockSchema } from '@blocksuite/blocks/models'; import { applyUpdate } from 'yjs'; import { storage } from './storage.js'; @@ -19,7 +19,7 @@ export interface AffineProviderConstructorParams export class AffineProvider extends BaseProvider { public id = 'affine'; - private _workspacesCache: Map = new Map(); + private _workspacesCache: Map = new Map(); private _onTokenRefresh?: Callback = undefined; private _wsMap: Map = new Map(); private _apis: Apis; @@ -58,7 +58,7 @@ export class AffineProvider extends BaseProvider { } } - override async warpWorkspace(workspace: Workspace) { + override async warpWorkspace(workspace: BlocksuiteWorkspace) { const { doc, room } = workspace; assert(room); this.linkLocal(workspace); @@ -97,7 +97,7 @@ export class AffineProvider extends BaseProvider { return []; } const workspacesList = await this._apis.getWorkspaces(); - const workspaces: WS[] = workspacesList.map(w => { + const workspaces: WorkspaceInfo[] = workspacesList.map(w => { return { ...w, memberCount: 0, @@ -108,12 +108,12 @@ export class AffineProvider extends BaseProvider { const workspaceInstances = workspaces.map(({ id }) => { const workspace = this._workspacesCache.get(id) || - new Workspace({ + new BlocksuiteWorkspace({ room: id, }).register(BlockSchema); this._workspacesCache.set(id, workspace); if (workspace) { - return new Promise(resolve => { + return new Promise(resolve => { this._apis.downloadWorkspace(id).then(data => { applyUpdate(workspace.doc, new Uint8Array(data)); resolve(workspace); @@ -235,7 +235,7 @@ export class AffineProvider extends BaseProvider { return await this._apis.removeMember({ permissionId }); } - public override async linkLocal(workspace: Workspace) { + public override async linkLocal(workspace: BlocksuiteWorkspace) { return workspace; // assert(workspace.room); // let idb = this._idbMap.get(workspace.room); @@ -249,19 +249,19 @@ export class AffineProvider extends BaseProvider { public override async createWorkspace( meta: WorkspaceMeta - ): Promise { + ): Promise { assert(meta.name, 'Workspace name is required'); const { id } = await this._apis.createWorkspace( meta as Required ); this._logger('Creating affine workspace'); - const nw = new Workspace({ + const nw = new BlocksuiteWorkspace({ room: id, }).register(BlockSchema); nw.meta.setName(meta.name); this.linkLocal(nw); - const workspaceInfo: WS = { + const workspaceInfo: WorkspaceInfo = { name: meta.name, id, isPublish: false, diff --git a/packages/data-center/src/provider/base.ts b/packages/data-center/src/provider/base.ts index 5f531e2940..966141f504 100644 --- a/packages/data-center/src/provider/base.ts +++ b/packages/data-center/src/provider/base.ts @@ -1,5 +1,5 @@ -import { BlobStorage, Workspace } from '@blocksuite/store'; -import { Logger, User, Workspace as WS, WorkspaceMeta } from '../types'; +import { Workspace as BlocksuiteWorkspace } from '@blocksuite/store'; +import { Logger, User, WorkspaceInfo, WorkspaceMeta } from '../types'; import type { WorkspacesScope } from '../workspaces'; const defaultLogger = () => { @@ -47,14 +47,16 @@ export class BaseProvider { * @param workspace * @returns */ - public async warpWorkspace(workspace: Workspace): Promise { + public async warpWorkspace( + workspace: BlocksuiteWorkspace + ): Promise { return workspace; } /** * load workspaces **/ - public async loadWorkspaces(): Promise { + public async loadWorkspaces(): Promise { throw new Error(`provider: ${this.id} loadWorkSpace Not implemented`); } @@ -154,7 +156,7 @@ export class BaseProvider { */ public async createWorkspace( meta: WorkspaceMeta - ): Promise { + ): Promise { meta; return; } @@ -175,7 +177,9 @@ export class BaseProvider { * @param workspace * @returns */ - public async linkLocal(workspace: Workspace): Promise { + public async linkLocal( + workspace: BlocksuiteWorkspace + ): Promise { return workspace; } } diff --git a/packages/data-center/src/provider/local/local.ts b/packages/data-center/src/provider/local/local.ts index 82ffe77741..2d368fdf5c 100644 --- a/packages/data-center/src/provider/local/local.ts +++ b/packages/data-center/src/provider/local/local.ts @@ -1,8 +1,8 @@ import { BaseProvider } from '../base.js'; import type { ProviderConstructorParams } from '../base'; import { varStorage as storage } from 'lib0/storage'; -import { Workspace as WS, WorkspaceMeta } from '../../types'; -import { Workspace, uuidv4 } from '@blocksuite/store'; +import { WorkspaceInfo, WorkspaceMeta } from '../../types'; +import { Workspace as BlocksuiteWorkspace, uuidv4 } from '@blocksuite/store'; import { IndexedDBProvider } from './indexeddb.js'; import assert from 'assert'; import { getDefaultHeadImgBlob } from '../../utils/index.js'; @@ -18,11 +18,11 @@ export class LocalProvider extends BaseProvider { this.loadWorkspaces(); } - private _storeWorkspaces(workspaces: WS[]) { + private _storeWorkspaces(workspaces: WorkspaceInfo[]) { storage.setItem(WORKSPACE_KEY, JSON.stringify(workspaces)); } - public override async linkLocal(workspace: Workspace) { + public override async linkLocal(workspace: BlocksuiteWorkspace) { assert(workspace.room); let idb = this._idbMap.get(workspace.room); idb?.destroy(); @@ -33,19 +33,19 @@ export class LocalProvider extends BaseProvider { } public override async warpWorkspace( - workspace: Workspace - ): Promise { + workspace: BlocksuiteWorkspace + ): Promise { assert(workspace.room); await this.linkLocal(workspace); return workspace; } - override loadWorkspaces(): Promise { + override loadWorkspaces(): Promise { const workspaceStr = storage.getItem(WORKSPACE_KEY); - let workspaces: WS[] = []; + let workspaces: WorkspaceInfo[] = []; if (workspaceStr) { try { - workspaces = JSON.parse(workspaceStr) as WS[]; + workspaces = JSON.parse(workspaceStr) as WorkspaceInfo[]; workspaces.forEach(workspace => { this._workspaces.add(workspace); }); @@ -77,11 +77,11 @@ export class LocalProvider extends BaseProvider { public override async createWorkspace( meta: WorkspaceMeta - ): Promise { + ): Promise { assert(meta.name, 'Workspace name is required'); this._logger('Creating affine workspace'); - const workspaceInfo: WS = { + const workspaceInfo: WorkspaceInfo = { name: meta.name, id: uuidv4(), isPublish: false, @@ -92,7 +92,7 @@ export class LocalProvider extends BaseProvider { provider: 'local', }; - const workspace = new Workspace({ room: workspaceInfo.id }); + const workspace = new BlocksuiteWorkspace({ room: workspaceInfo.id }); this.linkLocal(workspace); workspace.meta.setName(meta.name); if (!meta.avatar) { diff --git a/packages/data-center/src/types/index.ts b/packages/data-center/src/types/index.ts index 61bc12be81..1155ee325a 100644 --- a/packages/data-center/src/types/index.ts +++ b/packages/data-center/src/types/index.ts @@ -1,6 +1,6 @@ import { getLogger } from '../logger'; -export type Workspace = { +export type WorkspaceInfo = { name: string; id: string; isPublish?: boolean; @@ -18,6 +18,6 @@ export type User = { avatar: string; }; -export type WorkspaceMeta = Pick; +export type WorkspaceMeta = Pick; export type Logger = ReturnType; diff --git a/packages/data-center/src/workspaces/workspaces.ts b/packages/data-center/src/workspaces/workspaces.ts index 90b1a5e9ea..d248951dc7 100644 --- a/packages/data-center/src/workspaces/workspaces.ts +++ b/packages/data-center/src/workspaces/workspaces.ts @@ -1,25 +1,25 @@ import { Observable } from 'lib0/observable'; -import type { Workspace, WorkspaceMeta } from '../types'; +import type { WorkspaceInfo, WorkspaceMeta } from '../types'; export interface WorkspacesScope { - get: (workspaceId: string) => Workspace | undefined; - list: () => Workspace[]; - add: (workspace: Workspace) => void; + get: (workspaceId: string) => WorkspaceInfo | undefined; + list: () => WorkspaceInfo[]; + add: (workspace: WorkspaceInfo) => void; remove: (workspaceId: string) => boolean; clear: () => void; update: (workspaceId: string, workspaceMeta: Partial) => void; } export interface WorkspacesChangeEvent { - added?: Workspace; - deleted?: Workspace; - updated?: Workspace; + added?: WorkspaceInfo; + deleted?: WorkspaceInfo; + updated?: WorkspaceInfo; } export class Workspaces extends Observable<'change'> { - private _workspacesMap = new Map(); + private _workspacesMap = new Map(); - get workspaces(): Workspace[] { + get workspaces(): WorkspaceInfo[] { return Array.from(this._workspacesMap.values()); } @@ -37,7 +37,7 @@ export class Workspaces extends Observable<'change'> { return this._workspacesMap.get(workspaceId); }; - const add = (workspace: Workspace) => { + const add = (workspace: WorkspaceInfo) => { if (this._workspacesMap.has(workspace.id)) { throw new Error(`Duplicate workspace id.`); } @@ -105,7 +105,7 @@ export class Workspaces extends Observable<'change'> { // TODO: need to optimize const list = () => { - const workspaces: Workspace[] = []; + const workspaces: WorkspaceInfo[] = []; scopedWorkspaceIds.forEach(id => { const workspace = this._workspacesMap.get(id); if (workspace) {