import type { AppEvents, WorkspaceCRUD, WorkspaceUISchema, } from '@affine/workspace/type'; import { LoadPriority, WorkspaceFlavour } from '@affine/workspace/type'; import { AffinePlugin } from './affine'; import { LocalPlugin } from './local'; export interface WorkspacePlugin { flavour: Flavour; // Plugin will be loaded according to the priority loadPriority: LoadPriority; Events: Partial; // Fetch necessary data for the first render CRUD: WorkspaceCRUD; UI: WorkspaceUISchema; } const unimplemented = () => { throw new Error('Not implemented'); }; export const WorkspacePlugins = { [WorkspaceFlavour.AFFINE]: AffinePlugin, [WorkspaceFlavour.LOCAL]: LocalPlugin, [WorkspaceFlavour.PUBLIC]: { flavour: WorkspaceFlavour.PUBLIC, loadPriority: LoadPriority.LOW, Events: {} as Partial, // todo: implement this CRUD: { get: unimplemented, list: unimplemented, delete: unimplemented, create: unimplemented, }, // todo: implement this UI: { Provider: unimplemented, PageDetail: unimplemented, PageList: unimplemented, SettingsDetail: unimplemented, }, }, } satisfies { [Key in WorkspaceFlavour]: WorkspacePlugin; };