UNPKG

plugin-tls

Version:

plugin-tls 是插件系统相应的工具,可快速地让任何模块具备插件机制

261 lines 11.9 kB
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