import type { ComponentType } from 'react'; import { RouteProps } from 'react-router'; export interface Plugin { title: JSX.Element; icon: JSX.Element; content: JSX.Element; onDismount?(): void; } interface ServerResponseSuccess { success: true; result: TRes; } interface ServerResponseError { success: false; result: string; } type ServerResponse = ServerResponseSuccess | ServerResponseError; interface RouterHook { addRoute(path: string, component: ComponentType, props?: Omit): void; removeRoute(path: string): void; } export interface ServerAPI { routerHook: RouterHook; callPluginMethod(methodName: string, args: TArgs): Promise>; callServerMethod(methodName: string, args: TArgs): Promise>; fetchNoCors(url: string, request: RequestInfo): Promise>; executeInTab(tab: string, runAsync: boolean, code: string): Promise; removeCssFromTab(tab: string, cssId: string): Promise; } type DefinePluginFn = (serverAPI: ServerAPI) => Plugin; // TypeScript helper function export const definePlugin = (fn: DefinePluginFn): DefinePluginFn => { return (...args) => { // TODO: Maybe wrap this return fn(...args); }; };