import { PluginContext } from './context'; import { PluginEvent } from './event'; import { PluginHost } from './host'; import { PluginExtensionManager } from './manager'; import { Plugin, PluginBase } from './plugin'; import { PluginRuntime } from './runtime'; /** * Enumeration which holds the plugin extension constraints. */ export declare enum PluginExtensionConstraint { /** * Internal plugin extension. * * @var {string} */ Internal = "internal", /** * Required plugin extension. * * @var {string} */ Required = "required", /** * Optional plugin extension. * * @var {string} */ Optional = "optional" } /** * Enumeration which holds the plugin extension resolve methods. */ export declare enum PluginExtensionResolveMethod { UnSafe = "unsafe", Safe = "safe" } /** * Interface which describes the plugin extension promise cache. */ export interface PluginExtensionPromiseCache { /** * Holds the extension identifier for which a resolve is being * perform or has been performed. */ [key: string]: { /** * Holds the promise which is resolving the extension. * * @var {Promise} */ promise: Promise | null; /** * Holds the resolve function to the promise. * * @var {function} */ resolve: ((extension: PluginType) => void) | null; }; } /** * Host type alias for extensible plugins. */ export declare type PluginExtensionHost = ExtensiblePlugin; /** * Interface which describes a plugin which functionality can be extended. */ export interface ExtensiblePlugin extends Plugin, PluginHost { /** * Get the extension manager. * * @return {PluginExtensionManager} * An object which represents the extension manager. */ getExtensionManager(): PluginExtensionManager, PluginContext, PluginRuntimeType>>; /** * Get the extension with specified identifier using safe resolving method. * * @param {string} id * An extension identifier. A nested extension can be retrieved using the '.' as delimiter. * @param {PluginExtensionResolveMethod} [resolveMethod=PluginExtensionResolvingMethod.Safe] * Method which should be used for resolving an extension. * * @return {Promise} * A promise to resolve the extension. */ getExtension, PluginContext, PluginRuntimeType> = Plugin, PluginContext, PluginRuntimeType>>(id: string, resolveMethod?: PluginExtensionResolveMethod.Safe): Promise; /** * Get the extension with specified identifier using unsafe resolving method. * * @param {string} id * An extension identifier. * @param {PluginExtensionResolveMethod} resolveMethod * Method which should be used for resolving an extension. * * @return {T} * The resolved extension. */ getExtension, PluginContext, PluginRuntimeType> = Plugin, PluginContext, PluginRuntimeType>>(id: string, resolveMethod: PluginExtensionResolveMethod.UnSafe): T; /** * Get a extension with specified identifier. * * @param {string} id * An extension identifier. * @param {PluginExtensionResolveMethod} [resolveMethod=PluginExtensionResolveMethod.Safe] * Method which should be used for resolving an extension. * * @return {Promise|T} * A promise to resolve the extension or the extension itself. */ getExtension, PluginContext, PluginRuntimeType> = Plugin, PluginContext, PluginRuntimeType>>(id: string, resolveMethod?: PluginExtensionResolveMethod): Promise | T; } /** * Base implementation for an extensible plugin. */ export declare abstract class ExtensiblePluginBase extends PluginBase implements PluginExtensionHost { /** * Holds the extension manager. * * @var {PluginExtensionManager} */ protected extensionManager: PluginExtensionManager, PluginContext, PluginRuntimeType>> | undefined; /** * Holds the extension promise cache. * * @var {PluginExtensionPromiseCache} */ protected extensionPromiseCache: PluginExtensionPromiseCache, PluginContext, PluginRuntimeType>>; /** * Create an ExtensiblePluginBase object. * * @param {PluginHost} pluginHost * An object which represents the plugin host. * @param {PluginContext} pluginContext * An object which represents the widget context. */ constructor(pluginHost: PluginHostType, pluginContext: PluginContextType); /** * {@inheritdoc} */ protected createHookEvent(hook: string, ...args: any[]): PluginEvent; /** * {@inheritdoc} */ protected onBeforeReady(): Promise; /** * {@inheritdoc} */ protected onReady(): Promise; /** * Handle tasks after a extension was created. * * @param {Plugin} extension * An object which represents an extension. */ protected onExtension(extension: Plugin, PluginContext, PluginRuntimeType>): Promise; /** * Resolve the extension contexts. * * @param {PluginExtensionConstraint} extensionConstraint * Constraint of which plugin extension contexts should be resolved. * * @return {Promise} * A promise to resolve the extension contexts. */ protected abstract resolveExtensionContexts(extensionConstraint: PluginExtensionConstraint): Promise; /** * Create extensions for given constraint. * * @param {PluginExtensionConstraint} extensionConstraint * Constraint of which plugin extension contexts should be created. * * @return {Promise} * A promise to create extensions based on the constraint. */ protected createExtensionsByConstraint(extensionConstraint: PluginExtensionConstraint): Promise; /** * Create extensions for given contexts. * * @param {PluginContext[]} extensionContexts * An list of plugin contexts which should be created. * * @return {Promise} * A promise to create extensions based on the contexts. */ protected createExtensionsByContexts(extensionContexts: PluginContext[]): Promise; /** * Create an extension manager. * * @return {PluginExtensionManager} * An object which represents the plugin extension manager. */ protected abstract createExtensionManager(): PluginExtensionManager, PluginContext, PluginRuntimeType>>; /** * {@inheritdoc} */ getExtensionManager(): PluginExtensionManager, PluginContext, PluginRuntimeType>>; /** * Get an extension using safe resolving method. * * @param {string} id * Plugin extension identifier. * * @return {Promise} * A promise to resolve the extension. */ protected getExtensionSafe, PluginContext, PluginRuntimeType> = Plugin, PluginContext, PluginRuntimeType>>(id: string): Promise; /** * Try to get an extension using unsafe resolving method. * * @param {string} id * Plugin extension identifier. * * @return {T|null} * The resolved extension if available, otherwise null. */ protected tryGetExtensionUnsafe, PluginContext, PluginRuntimeType> = Plugin, PluginContext, PluginRuntimeType>>(id: string): T | null; /** * Get an extension using unsafe resolving method. * * @param {string} id * Plugin extension identifier. * * @return {T} * The resolved extension. */ protected getExtensionUnsafe, PluginContext, PluginRuntimeType> = Plugin, PluginContext, PluginRuntimeType>>(id: string): T; /** * {@inheritdoc} */ getExtension, PluginContext, PluginRuntimeType> = Plugin, PluginContext, PluginRuntimeType>>(id: string, resolveMethod?: PluginExtensionResolveMethod.Safe): Promise; /** * {@inheritdoc} */ getExtension, PluginContext, PluginRuntimeType> = Plugin, PluginContext, PluginRuntimeType>>(id: string, resolveMethod: PluginExtensionResolveMethod.UnSafe): T; }