Base
Exports shared by plugins.
interface Plugable {
install: function
}
interface Plugables
extends Record<string, Plugable | undefined> {
apis?: ApisPlugin
crypto?: CryptoPlugin
data?: DataPlugin
env?: EnvPlugin
fetch?: FetchPlugin
id?: IdPlugin
media?: MediaPlugin
}
type PluginFunction = (args: ARGS, opts: OPTS) => RET
type PluginMap<ID = PluginId> = Map<ID, PluginType<ID>>
interface PluginOptions {}
type PluginPromiseMap<ID = PluginId> = Map<ID, Promise<PluginType<ID>>>
type PluginTypeRequired<Plugables>[T]
interface Plugins {
options: PluginsOptions
plugin: (plugin: ID) => PluginType<ID>
pluginPromise: (plugin: ID, location?: string) => Promise<PluginType<ID>>
}
interface PluginsOptions {
apis: ApisPluginOptions
context: ClientOrServer
data: DataPluginOptions
importUrl: FetchUrl
media: MediaPluginOptions
plugins: Record<string, OrArray<string>>
}
/** @implements Plugable */
class PluginClass {
install: function
}
/** Manages plugin lifecycle */
class PluginManager {
location: (path: string, id: string | PluginId) => string
locationsByPluginId: () => Record<PluginId, string>
plugin: (id: ID) => PluginType<ID>
pluginLocation: (id: PluginId) => string
pluginOrPromise: (id: ID) => Promise<PluginType<ID>>
}
/**
* Manages plugin dependencies and
* registration
*/
class PluginRegistry {
/** Get dependencies for a plugin */
getDependencies: (pluginName: PluginId) => Array<PluginId>
/** Register dependencies for a plugin */
registerDependencies: (pluginName: PluginId, dependencies?: Array<PluginId>) => void
}
/** @implements Plugins */
class PluginsClass {
manager: PluginManager
options: PluginsOptions
plugin: (plugin: ID) => PluginType<ID>
pluginPromise: (plugin: ID, location?: string) => Promise<PluginType<ID>>
}
function pluginImportUrl(
): FetchUrl
function stopEvent(
event: Event
): void