import { Optional, String, Literal, Array, Record, Static, Unknown } from 'runtypes'; export declare const LogCore = "core"; /** * Describes a single plugin. * This will need to be validated by ajv. * In the initial implementation, we will use typescript objects, not json. */ export interface PluginDescriptor { remoteName?: string; remoteURL?: string; bundleFile?: string; remoteModuleName?: string; module: string; package: string; class: string; loader?: (pluginDescriptor: PluginDescriptor) => Promise; loadedClass?: object; loadedModule?: { [exportedModule: string]: object; }; plugin: string; load?: 'deferred'; version: string; description: string; pluginInstance?: Plugin; extensionPoints?: ExtensionPoint[]; extensions?: Extension[]; dependencies?: (string | PluginDescriptor)[]; } export type ExtensionPoint = { id: string; type: string; singleton?: boolean; impl?: { plugin: string; extensionImpl?: object; meta?: object; }[]; }; export type Extension = { plugin: string; id: string; className: string; impl?: object; meta?: object; }; declare const PluginManifestExtensionPoints: Record<{ id: String; type: String; }, false>; export type PluginManifestExtensionPoints = Static; declare const PluginManifestExtension: Record<{ plugin: String; id: String; className: String; meta: Optional>; }, false>; export type PluginManifestExtension = Static; declare const PluginManifestPluginDefinition: Record<{ package: String; module: String; class: String; plugin: String; load: Optional>; version: String; description: String; extensionPoints: Optional, false>>; extensions: Optional>; }, false>, false>>; }, false>; export type PluginManifestPluginDefinition = Static; declare const PluginManifestPlugin: Record<{ remote: Record<{ name: String; bundleFile: String; }, false>; definitions: Array>; version: String; description: String; extensionPoints: Optional, false>>; extensions: Optional>; }, false>, false>>; }, false>, false>; }, false>; export type PluginManifestPlugin = Static; declare const PluginManifest: Record<{ plugins: Array; definitions: Array>; version: String; description: String; extensionPoints: Optional, false>>; extensions: Optional>; }, false>, false>>; }, false>, false>; }, false>, false>; }, false>; export type PluginManifest = Static; export declare abstract class Plugin { initialised: boolean; _started: boolean; stopped: boolean; pluginDescriptor: PluginDescriptor; extensionsPoints: { [extensionPointId: string]: { plugin: string; extensionImpl?: object; meta?: object; }[]; }; extensions: { [id: string]: object; }; get started(): boolean; start(): Promise; stop(): Promise; init(pluginDescriptor: PluginDescriptor): void; getPluginDescriptor(): PluginDescriptor; connectExtensions(extensionPointId: string, extensions: { plugin: string; extensionImpl?: object; meta?: object; }[]): void; protected getConnectedExtensions(extensionPointId: string): { plugin: string; extensionImpl?: object; meta?: object; }[]; setExtensionImplementation(plugin: string, extensionPointId: string, extensionImpl: object): void; protected getExtensionImpl(plugin: string, extensionId: string): object; getModule(moduleName: string): object; } export type ClassConstructor = new (...args: any[]) => T; export {};