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