plugin-tls
Version:
plugin-tls 是插件系统相应的工具,可快速地让任何模块具备插件机制
261 lines • 11.9 kB
TypeScript
import { PluginManager } from "../plugin-manager/PluginManager";
import type { IPlugin, PluginCreatedReturnType, PluginUseReturnType, GetNormalizePluginOptions, FormatUsePluginParameters } from "../plugin-manager/PluginManager";
import type { ReplaceConstructorReturn } from "../extend/mixin";
import { WebDestroyable } from "@gby/destroyable";
/**
* 插件宿主的接口
*
* @typeParam HostClassType 插件宿主类的类型
*/
export interface IPluginHost<HostClassType extends IPluginHostConstructor<any, Plugin>, Plugin extends IPlugin<HostClassType, any> = IPlugin<HostClassType, any>> {
/**
* PluginHost 的插件管理器
*/
get pluginManager(): HostClassType["pluginManager"];
/**
* 实例的注册插件的方法
* @param plugin
* @param options
* @returns
*/
use<P extends Plugin>(plugin: P, options: GetNormalizePluginOptions<P>): PluginCreatedReturnType<P> | void;
}
/**
* 插件宿主构造函数的接口
* @typeParam HostClassType 插件宿主类的类型
*/
export interface IPluginHostConstructor<HostClassType, Plugin extends IPlugin<HostClassType, any> = IPlugin<HostClassType, any>> {
/**
* PluginHost 的插件管理器
*/
get pluginManager(): PluginManager<HostClassType, Plugin>;
/**
* {@inheritDoc PluginManager.use}
*/
use<P extends Plugin>(plugin: P, options: GetNormalizePluginOptions<P>): PluginUseReturnType<P> | void;
}
/**
* 插件的宿主
*
* @remarks
* 插件宿主 就是 拥有插件机制的宿主
*
* 子类需要在构建函数中调用 `this.pluginManager.created(this);`
*
* 之所以没写在该类中的函数中,是因为 `this.pluginManager.created(this)` 通常会在构建函数执行的最后时才调用;
* 如果像下面写在该类的构建函数中,然后子类通过 `super()` 来调用,这样就会导致 `this.pluginManager.created(this)` 不是在最后的执行;
*/
export declare class PluginHost<Plugin extends IPlugin<typeof PluginHost, any> = IPlugin<typeof PluginHost, any>> extends WebDestroyable {
/**
* 插件管理器
*/
static get pluginManager(): PluginManager<any, IPlugin<any, any>>;
protected static _pluginManager: PluginManager<any>;
/**
* 插件管理器 {@link PluginHost.pluginManager}
*/
get pluginManager(): PluginManager<any, IPlugin<any, any>>;
/**
* {@inheritDoc PluginManager.use}
*/
static use<Plugin extends IPlugin<typeof PluginHost, any>>(plugin: Plugin, ...options: FormatUsePluginParameters<Plugin>): void | ReturnType<Plugin["used"]>;
/**
* 需要在子类中调用
*
* 之所以没写在该类中的函数中,是因为 `this.pluginManager.created(this)` 通常会在构建函数执行的最后时才调用;
* 如果像下面写在该类的构建函数中,然后子类通过 `super()` 来调用,这样就会导致 `this.pluginManager.created(this)` 不是在最后的执行;
*/
/**
* 实例的注册插件的方法
* @param plugin
* @param options
* @returns
*/
use<P extends Plugin>(plugin: P, ...options: FormatUsePluginParameters<P>): PluginCreatedReturnType<P> | void;
/**
* 销毁实例
* @returns
*/
destroyThis(): void;
}
/**
* 创建插件的缩主类
*
* @remarks
* 比 直接使用 PluginHost 提供了完善的类型推导
*
* 子类需要在构建函数中调用 `this.pluginManager.created(this);`
*
* 之所以没写在该类中的函数中,是因为 `this.pluginManager.created(this)` 通常会在构建函数执行的最后时才调用;
* 如果像下面写在该类的构建函数中,然后子类通过 `super()` 来调用,这样就会导致 `this.pluginManager.created(this)` 不是在最后的执行;
* @returns
*/
export declare function createPluginHost<HOST, P extends new (...args: any) => Object, Plugin extends IPlugin<HOST, any> = IPlugin<HOST, any>>(ParentClass: P): {
new (...args: any): {
/**
* 插件管理器 {@link CEarth.pluginManager}
*/
get pluginManager(): PluginManager<any, IPlugin<any, any>>;
/**
/**
* 实例的注册插件的方法
* @param plugin
* @param options
* @returns
*/
use<P_1 extends Plugin>(plugin: P_1, ...options: FormatUsePluginParameters<P_1>): PluginCreatedReturnType<P_1> | void;
/**
* 销毁实例
* @returns
*/
destroyThis(): void;
readonly isDestroyed: boolean;
_isDestroyed: boolean;
_destroyers: import("@gby/destroyable").FunDestroyer[];
disposeFun<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
cancelDisposeFun<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
disposeObj<T extends unknown>(obj: T, sync?: boolean): T;
cancelDisposeObj<T extends unknown>(obj: T): T;
dispose<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
dispose<T extends unknown>(obj: T, asyncDestroy?: boolean): T;
dispose<T extends unknown>(objOrFun: T, asyncDestroy?: boolean): T;
cancelDispose<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
cancelDispose<T extends unknown>(obj: T): T;
cancelDispose<T extends unknown>(objOrFun: T): T;
destroy(): true | undefined;
destroyAsync(): Promise<true | undefined>;
constructor: Function;
toString: (() => string) & (() => string);
toLocaleString: (() => string) & (() => string);
valueOf: (() => Object) & (() => Object);
hasOwnProperty: ((v: PropertyKey) => boolean) & ((v: PropertyKey) => boolean);
isPrototypeOf: ((v: Object) => boolean) & ((v: Object) => boolean);
propertyIsEnumerable: ((v: PropertyKey) => boolean) & ((v: PropertyKey) => boolean);
};
/**
* PluginHost 的插件管理器
*/
get pluginManager(): PluginManager<typeof PluginHost & HOST & (new (...args: any) => {
readonly isDestroyed: boolean;
_isDestroyed: boolean;
_destroyers: import("@gby/destroyable").FunDestroyer[];
disposeFun<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
cancelDisposeFun<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
disposeObj<T extends any>(obj: T, sync?: boolean): T;
cancelDisposeObj<T extends any>(obj: T): T;
dispose<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
dispose<T extends any>(obj: T, asyncDestroy?: boolean): T;
dispose<T extends any | import("@gby/destroyable").FunDestroyer>(objOrFun: T, asyncDestroy?: boolean): T;
cancelDispose<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
cancelDispose<T extends any>(obj: T): T;
cancelDispose<T extends any | import("@gby/destroyable").FunDestroyer>(objOrFun: T): T;
destroyThis(): void;
destroy(): true | undefined;
destroyAsync(): Promise<true | undefined>;
constructor: Function;
toString(): string;
toLocaleString(): string;
valueOf(): Object;
hasOwnProperty(v: PropertyKey): boolean;
isPrototypeOf(v: Object): boolean;
propertyIsEnumerable(v: PropertyKey): boolean;
}) & P, Plugin>;
_pluginManager: PluginManager<typeof PluginHost & HOST & (new (...args: any) => {
readonly isDestroyed: boolean;
_isDestroyed: boolean;
_destroyers: import("@gby/destroyable").FunDestroyer[];
disposeFun<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
cancelDisposeFun<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
disposeObj<T extends any>(obj: T, sync?: boolean): T;
cancelDisposeObj<T extends any>(obj: T): T;
dispose<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
dispose<T extends any>(obj: T, asyncDestroy?: boolean): T;
dispose<T extends any | import("@gby/destroyable").FunDestroyer>(objOrFun: T, asyncDestroy?: boolean): T;
cancelDispose<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
cancelDispose<T extends any>(obj: T): T;
cancelDispose<T extends any | import("@gby/destroyable").FunDestroyer>(objOrFun: T): T;
destroyThis(): void;
destroy(): true | undefined;
destroyAsync(): Promise<true | undefined>;
constructor: Function;
toString(): string;
toLocaleString(): string;
valueOf(): Object;
hasOwnProperty(v: PropertyKey): boolean;
isPrototypeOf(v: Object): boolean;
propertyIsEnumerable(v: PropertyKey): boolean;
}) & P, Plugin>;
/**
* {@inheritDoc PluginManager.use}
*/
use<P_1 extends Plugin>(plugin: P_1, ...options: FormatUsePluginParameters<P_1>): void | ReturnType<P_1["used"]>;
} & P;
/**
* 将 HOST 变成插件宿主类型
*/
export type BecomePluginHost<HOST extends new (...args: any) => Object, Plugin extends IPlugin<HOST, any> = IPlugin<HOST, any>> = HOST & IPluginHostConstructor<HOST & IPluginHostConstructor<HOST, Plugin>, Plugin> & ReplaceConstructorReturn<HOST, InstanceType<HOST> & IPluginHost<HOST & IPluginHostConstructor<HOST & IPluginHostConstructor<HOST, Plugin>, Plugin>>>;
/**
* 变成插件宿主
* @remarks
* 也可作为装饰器
*
* 子类需要在构建函数中调用 `this.pluginManager.created(this);`
*
* 之所以没写在该类中的函数中,是因为 `this.pluginManager.created(this)` 通常会在构建函数执行的最后时才调用;
* 如果像下面写在该类的构建函数中,然后子类通过 `super()` 来调用,这样就会导致 `this.pluginManager.created(this)` 不是在最后的执行;
* @param target
* @param context
* @returns
*/
export declare function becomePluginHost<HOST extends new (...args: any) => Object, Plugin extends IPlugin<HOST, any> = IPlugin<HOST, any>>(target: HOST): BecomePluginHost<HOST, Plugin>;
/**
* 变成插件宿主
* @remarks
* 也可作为装饰器
* @param target
* @param context
* @returns
*/
export declare function becomePluginHost_Proxy<HOST extends new (...args: any) => Object, Plugin extends IPlugin<HOST, any> = IPlugin<HOST, any>>(target: HOST): HOST;
/**
* 插件缩主类的装饰器(继承版)
* @remarks
* 通过继承实现
*/
export declare function becomePluginHost_Extends<HOST extends new (...args: any) => Object>(target: HOST): {
new (...args: any): {
/**
* 插件管理器 {@link PluginHost.pluginManager}
*/
get pluginManager(): PluginManager</*elided*/ any & HOST, IPlugin</*elided*/ any & HOST, any>>;
/**
* 实例的注册插件的方法
* @param plugin
* @param options
* @returns
*/
use<Plugin extends IPlugin</*elided*/ any & HOST, any>>(plugin: Plugin, ...options: FormatUsePluginParameters<Plugin>): void | PluginCreatedReturnType<Plugin>;
/**
* 销毁实例
* @returns
*/
destroy(): void;
constructor: Function;
toString(): string;
toLocaleString(): string;
valueOf(): Object;
hasOwnProperty(v: PropertyKey): boolean;
isPrototypeOf(v: Object): boolean;
propertyIsEnumerable(v: PropertyKey): boolean;
};
/**
* 插件管理器
*/
get pluginManager(): PluginManager</*elided*/ any & HOST, IPlugin</*elided*/ any & HOST, any>>;
_pluginManager: PluginManager</*elided*/ any & HOST>;
/**
* {@inheritDoc PluginManager.use}
*/
use<Plugin extends IPlugin</*elided*/ any & HOST, any>>(plugin: Plugin, ...options: FormatUsePluginParameters<Plugin>): void | ReturnType<Plugin["used"]>;
} & HOST;
//# sourceMappingURL=PluginHost.d.ts.map