2022-04-22 22:31:54 +02:00
|
|
|
export interface Plugin {
|
|
|
|
|
title: JSX.Element;
|
2022-04-22 23:12:52 +02:00
|
|
|
icon: JSX.Element;
|
|
|
|
|
content: JSX.Element;
|
2022-04-22 22:31:54 +02:00
|
|
|
onDismount?(): void;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
interface ServerResponseSuccess<TRes> {
|
|
|
|
|
success: true;
|
|
|
|
|
result: TRes;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
interface ServerResponseError {
|
|
|
|
|
success: false;
|
|
|
|
|
result: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ServerResponse<TRes> = ServerResponseSuccess<TRes> | ServerResponseError;
|
|
|
|
|
|
|
|
|
|
export interface ServerAPI {
|
|
|
|
|
callPluginMethod<TArgs = {}, TRes = {}>(methodName: string, args: TArgs): Promise<ServerResponse<TRes>>;
|
|
|
|
|
callServerMethod<TArgs = {}, TRes = {}>(methodName: string, args: TArgs): Promise<ServerResponse<TRes>>;
|
|
|
|
|
fetchNoCors<TRes = {}>(url: string, request: RequestInfo): Promise<ServerResponse<TRes>>;
|
|
|
|
|
executeInTab(tab: string, runAsync: boolean, code: string): Promise<unknown>;
|
|
|
|
|
removeCssFromTab(tab: string, cssId: string): Promise<unknown>;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type DefinePluginFn = (serverAPI: ServerAPI) => Plugin;
|
|
|
|
|
|
|
|
|
|
// TypeScript helper function
|
2022-05-10 23:38:10 +02:00
|
|
|
export const definePlugin = (fn: DefinePluginFn): DefinePluginFn => {
|
|
|
|
|
return (...args) => {
|
|
|
|
|
// TODO: Maybe wrap this
|
|
|
|
|
return fn(...args);
|
|
|
|
|
};
|
2022-04-22 22:31:54 +02:00
|
|
|
};
|