注册表
Plugin
Section titled “Plugin”支持的插件入口点形式。
/** Supported plugin entrypoint shapes. */type Plugin<T = any> = | Plugin.Function<T> | Plugin.Constructor<T> | Plugin.Object<T>
/** Types associated with plugin entrypoints and runtime records. */namespace Plugin { /** Shared metadata understood by the plugin registry and related tooling. */ export interface Base<T = any> { /** Display name used for fiber diagnostics and logger names. */ name?: string /** Standard-schema validator applied to config before the plugin starts. */ Config?: StandardSchemaV1<any, T> /** Services the plugin requires; it only loads while all are available. */ inject?: Inject /** Service name(s) the plugin provides (read by `Service` and by loaders). */ provide?: string | string[] /** Service names whose intercept config the plugin declares it consumes. */ intercept?: Dict<boolean> }
export interface Transform<S, T> { /** Marks the transform object as a schema/config transform. */ schema?: true /** Convert user-facing config to runtime config. */ Config: (config: S) => T }
/** Function plugin called with `(ctx, config)`. */ export interface Function<T = any> extends Base<T> { (ctx: Context, config: T): any }
/** Class plugin constructed with `(ctx, config)`. */ export interface Constructor<T = any> extends Base<T> { new (ctx: Context, config: T): any }
/** Object plugin with an `apply(ctx, config)` method. */ export interface Object<T = any> extends Base<T> { apply(ctx: Context, config: T): any }
/** Mutable registry record shared by all fibers of one plugin callback. */ export interface Runtime { /** Display name copied from the first registered plugin shape. */ name?: string /** Every live fiber of this plugin (one per `ctx.plugin()` call). */ fibers: DisposableList<Fiber> /** The executable entrypoint all fibers share (registry identity key). */ callback: globalThis.Function /** Standard-schema validator applied to each fiber's config. */ Config?: StandardSchemaV1 }}Inject
Section titled “Inject”插件和 @Inject 装饰器接受的服务依赖声明。
数组形式请求不带拦截配置的服务。对象形式将每个服务名称映射到插件上下文中可选的拦截配置。
/** * Service dependency declaration accepted by plugins and the `@Inject` * decorator. * * Array form requests services without intercept config. Object form maps each * service name to optional intercept config for the plugin context. */type Inject<M = Dict> = (keyof M)[] | { [K in keyof M]?: M[K] }
/** Utilities for normalizing plugin dependency declarations. */namespace Inject { /** * Convert array/object/class-inherited inject metadata into a plain map. * * @param inject — the declaration to normalize; `null`/`undefined` add nothing. * @param result — the map to fill (service name → intercept config or `null`). * @returns `result`. */ export function resolve(inject: Inject | null | undefined, result: Dict = Object.create(null))}