Skip to content

Function: plugin()

Define a plugin

Since

v0.27.0

Call Signature

ts
export function plugin<
  Context extends ExtendContext = DefaultGunshiParams['extensions'], // for plugin dependency extensions
  Id extends string = string, // for plugin id
  Deps extends ReadonlyArray<PluginDependency | string> = [], // for plugin dependencies
  Extension extends {} = {}, // for plugin extension type
  ResolvedDepExtensions extends GunshiParams = DependencyParams<Deps, Context>,
  PluginExt extends PluginExtension<Extension, DefaultGunshiParams> = PluginExtension<
    Extension,
    ResolvedDepExtensions
  >,
  MergedExtensions extends GunshiParams = MergedPluginParams<
    Id,
    Deps,
    Context,
    Awaited<ReturnType<PluginExt>>
  >
>(options: {
  id: Id
  name?: string
  dependencies?: Deps
  setup?: (
    ctx: Readonly<
      PluginContext<MergedPluginParams<Id, Deps, Context, Awaited<ReturnType<PluginExt>>>>
    >
  ) => Awaitable<void>
  extension: PluginExt
  onExtension?: OnPluginExtension<MergedExtensions>
}): PluginWithExtension<Awaited<ReturnType<PluginExt>>>

Define a plugin with extension compatibility and typed dependency extensions

Since

v0.27.0

Type Parameters

NameDescription
Context extends ExtendContext = DefaultGunshiParams['extensions']A type extending ExtendContext to specify the shape of plugin dependency extensions.
Id extends string = stringA string type to specify the plugin ID.
Deps extends ReadonlyArray<PluginDependency | string> = []A readonly array of PluginDependency or string to specify the plugin dependencies.
Extension extends {} = {}A type to specify the shape of the plugin extension object.
ResolvedDepExtensions extends GunshiParams = DependencyParams<Deps, Context>-
PluginExt extends PluginExtension<Extension, DefaultGunshiParams> = PluginExtension<Extension, ResolvedDepExtensions>-
MergedExtensions extends GunshiParams = MergedPluginParams<Id, Deps, Context, Awaited<ReturnType<PluginExt>>>-

Parameters

NameTypeDescription
options{ id: Id; name?: string; dependencies?: Deps; setup?: (ctx: Readonly<PluginContext<MergedPluginParams<Id, Deps, Context, Awaited<ReturnType<PluginExt>>>>>) => Awaitable<void>; extension: PluginExt; onExtension?: OnPluginExtension<MergedExtensions> }plugin options
options.idId
options.name?stringoptional
options.dependencies?Depsoptional
options.setup?(ctx: Readonly<PluginContext<MergedPluginParams<Id, Deps, Context, Awaited<ReturnType<PluginExt>>>>>) => Awaitable<void>optional
options.extensionPluginExt
options.onExtension?OnPluginExtension<MergedExtensions>optional

Returns

PluginWithExtension<Awaited<ReturnType<PluginExt>>> — A defined plugin with extension

Call Signature

ts
export function plugin<
  Context extends ExtendContext = DefaultGunshiParams['extensions'], // for plugin dependency extensions
  Id extends string = string, // for plugin id
  Deps extends ReadonlyArray<PluginDependency | string> = [], // for plugin dependencies
  Extension extends Record<string, unknown> = {}, // for plugin extension type
  ResolvedDepExtensions extends GunshiParams = DependencyParams<Deps, Context>,
  PluginExt extends PluginExtension<Extension, DefaultGunshiParams> = PluginExtension<
    Extension,
    ResolvedDepExtensions
  >,
  MergedExtensions extends GunshiParams = MergedPluginParams<
    Id,
    Deps,
    Context,
    Awaited<ReturnType<PluginExt>>
  >
>(options: {
  id: Id
  name?: string
  dependencies?: Deps
  setup?: (
    ctx: Readonly<
      PluginContext<MergedPluginParams<Id, Deps, Context, Awaited<ReturnType<PluginExt>>>>
    >
  ) => Awaitable<void>
  onExtension?: OnPluginExtension<MergedExtensions>
}): PluginWithoutExtension<DefaultGunshiParams['extensions']>

Define a plugin without extension and typed dependency extensions

Since

v0.27.0

Type Parameters

NameDescription
Context extends ExtendContext = DefaultGunshiParams['extensions']A type extending ExtendContext to specify the shape of plugin dependency extensions.
Id extends string = stringA string type to specify the plugin ID.
Deps extends ReadonlyArray<PluginDependency | string> = []A readonly array of PluginDependency or string to specify the plugin dependencies.
Extension extends Record<string, unknown> = {}A type to specify the shape of the plugin extension object.
ResolvedDepExtensions extends GunshiParams = DependencyParams<Deps, Context>-
PluginExt extends PluginExtension<Extension, DefaultGunshiParams> = PluginExtension<Extension, ResolvedDepExtensions>-
MergedExtensions extends GunshiParams = MergedPluginParams<Id, Deps, Context, Awaited<ReturnType<PluginExt>>>-

Parameters

NameTypeDescription
options{ id: Id; name?: string; dependencies?: Deps; setup?: (ctx: Readonly<PluginContext<MergedPluginParams<Id, Deps, Context, Awaited<ReturnType<PluginExt>>>>>) => Awaitable<void>; onExtension?: OnPluginExtension<MergedExtensions> }plugin options without extension
options.idId
options.name?stringoptional
options.dependencies?Depsoptional
options.setup?(ctx: Readonly<PluginContext<MergedPluginParams<Id, Deps, Context, Awaited<ReturnType<PluginExt>>>>>) => Awaitable<void>optional
options.onExtension?OnPluginExtension<MergedExtensions>optional

Returns

PluginWithoutExtension<DefaultGunshiParams['extensions']> — A defined plugin without extension

Released under the MIT License.