plugin-tls 2.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +927 -372
- package/dist/index.umd.cjs +1 -1
- package/dist/options/index.d.ts +4 -0
- package/dist/options/index.d.ts.map +1 -0
- package/dist/options/options-manager/ModeOptions.d.ts.map +1 -0
- package/dist/options/options-manager/OptionsManager.d.ts.map +1 -0
- package/dist/options/options-manager/TierModeOptions.d.ts.map +1 -0
- package/dist/options/options-manager/TierOptions.d.ts.map +1 -0
- package/dist/options/options-manager/defaultOptions.d.ts.map +1 -0
- package/dist/options/options-manager/index.d.ts +6 -0
- package/dist/options/options-manager/index.d.ts.map +1 -0
- package/dist/options/options-manager/tools.d.ts.map +1 -0
- package/dist/options/options-plugin-host/index.d.ts +3 -0
- package/dist/options/options-plugin-host/index.d.ts.map +1 -0
- package/dist/options/options-plugin-host/tier-mode-options/TierModeOptionsPluginHost.d.ts +28 -0
- package/dist/options/options-plugin-host/tier-mode-options/TierModeOptionsPluginHost.d.ts.map +1 -0
- package/dist/options/options-plugin-host/tier-mode-options/TierModeOptionsPluginHostEventEmitter.d.ts +29 -0
- package/dist/options/options-plugin-host/tier-mode-options/TierModeOptionsPluginHostEventEmitter.d.ts.map +1 -0
- package/dist/options/options-plugin-host/tier-mode-options/TierModeOptionsPluginHostEventTarget.d.ts +28 -0
- package/dist/options/options-plugin-host/tier-mode-options/TierModeOptionsPluginHostEventTarget.d.ts.map +1 -0
- package/dist/options/options-plugin-host/tier-mode-options/createTierModeOptionsPluginHost.d.ts +60 -0
- package/dist/options/options-plugin-host/tier-mode-options/createTierModeOptionsPluginHost.d.ts.map +1 -0
- package/dist/options/options-plugin-host/tier-mode-options/index.d.ts +6 -0
- package/dist/options/options-plugin-host/tier-mode-options/index.d.ts.map +1 -0
- package/dist/options/options-plugin-host/tier-mode-options/type.d.ts +7 -0
- package/dist/options/options-plugin-host/tier-mode-options/type.d.ts.map +1 -0
- package/dist/options/options-plugin-host/tier-options/TierOptionsPluginHost.d.ts +25 -0
- package/dist/options/options-plugin-host/tier-options/TierOptionsPluginHost.d.ts.map +1 -0
- package/dist/options/options-plugin-host/tier-options/TierOptionsPluginHostEventEmitter.d.ts +26 -0
- package/dist/options/options-plugin-host/tier-options/TierOptionsPluginHostEventEmitter.d.ts.map +1 -0
- package/dist/options/options-plugin-host/tier-options/TierOptionsPluginHostEventTarget.d.ts +25 -0
- package/dist/options/options-plugin-host/tier-options/TierOptionsPluginHostEventTarget.d.ts.map +1 -0
- package/dist/options/options-plugin-host/tier-options/createTierOptionsPluginHost.d.ts +57 -0
- package/dist/options/options-plugin-host/tier-options/createTierOptionsPluginHost.d.ts.map +1 -0
- package/dist/options/options-plugin-host/tier-options/index.d.ts +5 -0
- package/dist/options/options-plugin-host/tier-options/index.d.ts.map +1 -0
- package/dist/options/plugins/index.d.ts +3 -0
- package/dist/options/plugins/index.d.ts.map +1 -0
- package/dist/options/plugins/tier-mode-options/decorator.d.ts +14 -0
- package/dist/options/plugins/tier-mode-options/decorator.d.ts.map +1 -0
- package/dist/options/plugins/tier-mode-options/plugin.d.ts +3 -0
- package/dist/options/plugins/tier-mode-options/plugin.d.ts.map +1 -0
- package/dist/options/plugins/tier-mode-options/type.d.ts +35 -0
- package/dist/options/plugins/tier-mode-options/type.d.ts.map +1 -0
- package/dist/options/plugins/tier-mode-options-plugin.d.ts +4 -0
- package/dist/options/plugins/tier-mode-options-plugin.d.ts.map +1 -0
- package/dist/options/plugins/tier-options/decorator.d.ts +14 -0
- package/dist/options/plugins/tier-options/decorator.d.ts.map +1 -0
- package/dist/options/plugins/tier-options/plugin.d.ts +11 -0
- package/dist/options/plugins/tier-options/plugin.d.ts.map +1 -0
- package/dist/options/plugins/tier-options/type.d.ts +36 -0
- package/dist/options/plugins/tier-options/type.d.ts.map +1 -0
- package/dist/options/plugins/tier-options-plugin.d.ts +4 -0
- package/dist/options/plugins/tier-options-plugin.d.ts.map +1 -0
- package/dist/plugin-host/PluginHost.d.ts +50 -227
- package/dist/plugin-host/PluginHost.d.ts.map +1 -1
- package/dist/plugin-host/PluginHostEventEmitter.d.ts +72 -0
- package/dist/plugin-host/PluginHostEventEmitter.d.ts.map +1 -0
- package/dist/plugin-host/PluginHostEventTarget.d.ts +70 -0
- package/dist/plugin-host/PluginHostEventTarget.d.ts.map +1 -0
- package/dist/plugin-host/createPluginHost.d.ts +95 -0
- package/dist/plugin-host/createPluginHost.d.ts.map +1 -0
- package/dist/plugin-host/decorator.d.ts +174 -0
- package/dist/plugin-host/decorator.d.ts.map +1 -0
- package/dist/plugin-host/index.d.ts +7 -0
- package/dist/plugin-host/index.d.ts.map +1 -0
- package/dist/plugin-host/type.d.ts +65 -0
- package/dist/plugin-host/type.d.ts.map +1 -0
- package/dist/plugin-manager/ExtendManager.d.ts +66 -0
- package/dist/plugin-manager/ExtendManager.d.ts.map +1 -0
- package/dist/plugin-manager/IExtend.d.ts +64 -0
- package/dist/plugin-manager/IExtend.d.ts.map +1 -0
- package/dist/plugin-manager/IPlugin.d.ts +56 -0
- package/dist/plugin-manager/IPlugin.d.ts.map +1 -0
- package/dist/plugin-manager/PluginExtendManager.d.ts +92 -0
- package/dist/plugin-manager/PluginExtendManager.d.ts.map +1 -0
- package/dist/plugin-manager/PluginManager.d.ts +31 -84
- package/dist/plugin-manager/PluginManager.d.ts.map +1 -1
- package/dist/plugin-manager/index.d.ts +7 -0
- package/dist/plugin-manager/index.d.ts.map +1 -0
- package/dist/plugin-manager/mixin.d.ts.map +1 -0
- package/package.json +4 -3
- package/dist/extend/extend.d.ts +0 -222
- package/dist/extend/extend.d.ts.map +0 -1
- package/dist/extend/mixin.d.ts.map +0 -1
- package/dist/options-manager/ModeOptions.d.ts.map +0 -1
- package/dist/options-manager/OptionsManager.d.ts.map +0 -1
- package/dist/options-manager/TierModeOptions.d.ts.map +0 -1
- package/dist/options-manager/TierOptions.d.ts.map +0 -1
- package/dist/options-manager/defaultOptions.d.ts.map +0 -1
- package/dist/options-manager/tools.d.ts.map +0 -1
- package/dist/plugin-host/TierModeOptionsPluginHost.d.ts +0 -167
- package/dist/plugin-host/TierModeOptionsPluginHost.d.ts.map +0 -1
- package/dist/plugin-host/TierOptionsPluginHost.d.ts +0 -153
- package/dist/plugin-host/TierOptionsPluginHost.d.ts.map +0 -1
- package/dist/plugin-manager/PluginManagerWithInit.d.ts +0 -36
- package/dist/plugin-manager/PluginManagerWithInit.d.ts.map +0 -1
- /package/dist/{options-manager → options/options-manager}/ModeOptions.d.ts +0 -0
- /package/dist/{options-manager → options/options-manager}/OptionsManager.d.ts +0 -0
- /package/dist/{options-manager → options/options-manager}/TierModeOptions.d.ts +0 -0
- /package/dist/{options-manager → options/options-manager}/TierOptions.d.ts +0 -0
- /package/dist/{options-manager → options/options-manager}/defaultOptions.d.ts +0 -0
- /package/dist/{options-manager → options/options-manager}/tools.d.ts +0 -0
- /package/dist/{extend → plugin-manager}/mixin.d.ts +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { PluginExtendManager } from "../plugin-manager";
|
|
2
|
+
import type { ExtendOptions, IPlugin, PluginUseArgs, PluginUseReturn } from "../plugin-manager/index";
|
|
3
|
+
import type { AbstractConstructor, ClassType } from "type-tls";
|
|
4
|
+
/**
|
|
5
|
+
* 创建插件的缩主类
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* 比 直接使用 PluginHost 提供了完善的类型推导
|
|
9
|
+
*
|
|
10
|
+
* 子类需要在构建函数中调用 `this.pluginManager.created(this);`
|
|
11
|
+
*
|
|
12
|
+
* 之所以没写在该类中的函数中,是因为 `this.pluginManager.created(this)` 通常会在构建函数执行的最后时才调用;
|
|
13
|
+
* 如果像下面写在该类的构建函数中,然后子类通过 `super()` 来调用,这样就会导致 `this.pluginManager.created(this)` 不是在最后的执行;
|
|
14
|
+
* @returns
|
|
15
|
+
*/
|
|
16
|
+
export declare function createPluginHost<P extends new (...args: any) => Object>(ParentClass: P): {
|
|
17
|
+
new <Host, HostClass extends AbstractConstructor<Host> = ClassType<Host, any>>(...args: any): {
|
|
18
|
+
/**
|
|
19
|
+
* 插件管理器 {@link PluginHostSub.pluginManager}
|
|
20
|
+
*/
|
|
21
|
+
get pluginManager(): PluginExtendManager<Host, HostClass>;
|
|
22
|
+
/**
|
|
23
|
+
* 需要在子类中调用
|
|
24
|
+
*
|
|
25
|
+
* 之所以没写在该类中的函数中,是因为 `this.pluginManager.onCreate(this)` 通常会在构建函数执行的最后时才调用;
|
|
26
|
+
* 如果像下面写在该类的构建函数中,然后子类通过 `super()` 来调用,这样就会导致 `this.pluginManager.onCreate(this)` 不是在最后的执行;
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* 实例的注册插件的方法
|
|
30
|
+
* @param plugin
|
|
31
|
+
* @param args
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
usePlugin<P_1 extends IPlugin<Host, HostClass>>(plugin: P_1, ...args: PluginUseArgs<P_1>): PluginUseReturn<P_1>;
|
|
35
|
+
/**
|
|
36
|
+
* {@inheritDoc PluginExtendManager.useExtend}
|
|
37
|
+
*/
|
|
38
|
+
useExtend<E>(ext: ExtendOptions<HostClass, E>, ...args: ConstructorParameters<HostClass>): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* 初始化实例
|
|
41
|
+
* @remarks
|
|
42
|
+
* 会调用 {@link PluginExtendManager.onInit}
|
|
43
|
+
* @param args
|
|
44
|
+
*/
|
|
45
|
+
init(...args: any): any;
|
|
46
|
+
/**
|
|
47
|
+
* 销毁实例
|
|
48
|
+
* @returns
|
|
49
|
+
*/
|
|
50
|
+
destroyThis(): any;
|
|
51
|
+
refCount: number;
|
|
52
|
+
readonly isDestroyed: boolean;
|
|
53
|
+
_isDestroyed: boolean;
|
|
54
|
+
readonly canDestroy: boolean;
|
|
55
|
+
_destroyers: import("@gby/destroyable").FunDestroyer[];
|
|
56
|
+
disposeFun<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
|
|
57
|
+
cancelDisposeFun<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
|
|
58
|
+
disposeObj<T extends import("@gby/destroyable").IDestroyable>(obj: T, sync?: boolean): T;
|
|
59
|
+
cancelDisposeObj<T extends import("@gby/destroyable").IDestroyable>(obj: T): T;
|
|
60
|
+
dispose<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
|
|
61
|
+
dispose<T extends import("@gby/destroyable").IDestroyable>(obj: T, asyncDestroy?: boolean): T;
|
|
62
|
+
dispose<T extends import("@gby/destroyable").IDestroyable | import("@gby/destroyable").FunDestroyer>(objOrFun: T, asyncDestroy?: boolean): T;
|
|
63
|
+
cancelDispose<T extends import("@gby/destroyable").FunDestroyer>(fun: T): T;
|
|
64
|
+
cancelDispose<T extends import("@gby/destroyable").IDestroyable>(obj: T): T;
|
|
65
|
+
cancelDispose<T extends import("@gby/destroyable").IDestroyable | import("@gby/destroyable").FunDestroyer>(objOrFun: T): T;
|
|
66
|
+
destroySync(): boolean;
|
|
67
|
+
destroy(): boolean | Promise<boolean>;
|
|
68
|
+
constructor: Function;
|
|
69
|
+
toString: (() => string) & (() => string);
|
|
70
|
+
toLocaleString: (() => string) & (() => string);
|
|
71
|
+
valueOf: (() => Object) & (() => Object);
|
|
72
|
+
hasOwnProperty: ((v: PropertyKey) => boolean) & ((v: PropertyKey) => boolean);
|
|
73
|
+
isPrototypeOf: ((v: Object) => boolean) & ((v: Object) => boolean);
|
|
74
|
+
propertyIsEnumerable: ((v: PropertyKey) => boolean) & ((v: PropertyKey) => boolean);
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* 是否使用独立的插件管理器
|
|
78
|
+
* @defaultValue false
|
|
79
|
+
*/
|
|
80
|
+
isolatedPluginManager: boolean;
|
|
81
|
+
/**
|
|
82
|
+
* 插件管理器
|
|
83
|
+
*/
|
|
84
|
+
get pluginManager(): PluginExtendManager<any, any>;
|
|
85
|
+
_pluginManager: PluginExtendManager<any, any>;
|
|
86
|
+
/**
|
|
87
|
+
* {@inheritDoc PluginExtendManager.usePlugin}
|
|
88
|
+
*/
|
|
89
|
+
usePlugin<Plugin extends IPlugin<any, any>>(plugin: Plugin, ...args: PluginUseArgs<Plugin>): ReturnType<Plugin["onUse"]>;
|
|
90
|
+
/**
|
|
91
|
+
* {@inheritDoc PluginExtendManager.useExtend}
|
|
92
|
+
*/
|
|
93
|
+
useExtend<HostClass extends AbstractConstructor, E>(ext: ExtendOptions<HostClass, E>): boolean;
|
|
94
|
+
} & P;
|
|
95
|
+
//# sourceMappingURL=createPluginHost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPluginHost.d.ts","sourceRoot":"","sources":["../../src/plugin-host/createPluginHost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGtG,OAAO,KAAK,EAAE,mBAAmB,EAAG,SAAS,EAAC,MAAM,UAAU,CAAC;AAG/D;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,MAAM,EAAE,WAAW,EAAE,CAAC;SAS1D,IAAI,EAAE,SAAS,SAAS,mBAAmB,CAAC,IAAI,CAAC;QAkB1E;;WAEG;6BACkB,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC;QAkBzD;;;;;WAKG;QAMH;;;;;WAKG;8BACiB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,GAAC,WAAW,aAAa,CAAC,GAAC,CAAC,GAAG,eAAe,CAAC,GAAC,CAAC;QAKvG;;WAEG;kBACO,CAAC,6CAA2C,qBAAqB,CAAC,SAAS,CAAC;QAKtF;;;;;WAKG;sBACW,GAAG,GAAE,GAAG;QAItB;;;WAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;IAjFH;;;OAGG;;IAGH;;OAEG;;;IAgBH;;OAEG;cACc,MAAM,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,MAAM,WAAW,aAAa,CAAC,MAAM,CAAC;IAIjG;;OAEG;cACc,SAAS,SAAS,mBAAmB,EAAC,CAAC,OAAO,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;MAyD7F"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { PluginExtendManager } from "../plugin-manager";
|
|
2
|
+
import type { ExtendOptions, IPlugin, PluginUseArgs } from "../plugin-manager/index";
|
|
3
|
+
import type { IPluginHost, IPluginHostClass } from "./type";
|
|
4
|
+
import type { AbstractConstructor, Constructor } from "type-tls";
|
|
5
|
+
/**
|
|
6
|
+
* 将 HOST 变成插件宿主类型
|
|
7
|
+
*/
|
|
8
|
+
export type BecomePluginHost<HostClass extends AbstractConstructor<any>> = HostClass & IPluginHostClass<InstanceType<HostClass> & IPluginHost<InstanceType<HostClass>, HostClass>>;
|
|
9
|
+
/**
|
|
10
|
+
* 变成插件宿主
|
|
11
|
+
* @remarks
|
|
12
|
+
* 也可作为装饰器
|
|
13
|
+
*
|
|
14
|
+
* 子类需要在构建函数中调用 `this.pluginManager.created(this);`
|
|
15
|
+
*
|
|
16
|
+
* 之所以没写在该类中的函数中,是因为 `this.pluginManager.created(this)` 通常会在构建函数执行的最后时才调用;
|
|
17
|
+
* 如果像下面写在该类的构建函数中,然后子类通过 `super()` 来调用,这样就会导致 `this.pluginManager.created(this)` 不是在最后的执行;
|
|
18
|
+
* @param target
|
|
19
|
+
* @param context
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
22
|
+
export declare function becomePluginHost<HostClass extends AbstractConstructor>(target: HostClass): BecomePluginHost<HostClass>;
|
|
23
|
+
/**
|
|
24
|
+
* 变成插件宿主,通过代理实现
|
|
25
|
+
* @remarks
|
|
26
|
+
* 也可作为装饰器
|
|
27
|
+
* @param target
|
|
28
|
+
* @param context
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
export declare function becomePluginHost_Proxy<HOST extends Constructor<any>>(target: HOST): BecomePluginHost<HOST>;
|
|
32
|
+
/**
|
|
33
|
+
* 插件缩主类的装饰器(继承版)
|
|
34
|
+
* @remarks
|
|
35
|
+
* 通过继承实现
|
|
36
|
+
*/
|
|
37
|
+
export declare function becomePluginHost_Extends<HostClass extends Constructor>(target: HostClass): {
|
|
38
|
+
new (...args: any): {
|
|
39
|
+
[x: string]: any;
|
|
40
|
+
/**
|
|
41
|
+
* 插件管理器 {@link PluginHostExtends.pluginManager}
|
|
42
|
+
*/
|
|
43
|
+
get pluginManager(): PluginExtendManager</*elided*/ any, /*elided*/ any & HostClass>;
|
|
44
|
+
/**
|
|
45
|
+
* 实例的注册插件的方法
|
|
46
|
+
* @param plugin
|
|
47
|
+
* @param args
|
|
48
|
+
* @returns
|
|
49
|
+
*/
|
|
50
|
+
usePlugin<P extends IPlugin</*elided*/ any, /*elided*/ any & HostClass>>(plugin: P, ...args: PluginUseArgs<P>): ReturnType<P["onUse"]>;
|
|
51
|
+
/**
|
|
52
|
+
* {@inheritDoc PluginExtendManager.useExtend}
|
|
53
|
+
*/
|
|
54
|
+
useExtend<E>(ext: ExtendOptions</*elided*/ any & HostClass, E>, ...args: ConstructorParameters</*elided*/ any & HostClass>): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* 初始化实例
|
|
57
|
+
* @remarks
|
|
58
|
+
* 会调用 {@link PluginExtendManager.onInit}
|
|
59
|
+
* @param args
|
|
60
|
+
*/
|
|
61
|
+
init(...args: any): any;
|
|
62
|
+
/**
|
|
63
|
+
* 销毁实例
|
|
64
|
+
* @returns
|
|
65
|
+
*/
|
|
66
|
+
destroy(): any;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* 是否使用独立的插件管理器
|
|
70
|
+
* @defaultValue false
|
|
71
|
+
*/
|
|
72
|
+
isolatedPluginManager: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* 插件管理器
|
|
75
|
+
*/
|
|
76
|
+
get pluginManager(): PluginExtendManager<{
|
|
77
|
+
[x: string]: any;
|
|
78
|
+
/**
|
|
79
|
+
* 插件管理器 {@link PluginHostExtends.pluginManager}
|
|
80
|
+
*/
|
|
81
|
+
get pluginManager(): PluginExtendManager</*elided*/ any, /*elided*/ any & HostClass>;
|
|
82
|
+
/**
|
|
83
|
+
* 实例的注册插件的方法
|
|
84
|
+
* @param plugin
|
|
85
|
+
* @param args
|
|
86
|
+
* @returns
|
|
87
|
+
*/
|
|
88
|
+
usePlugin<P extends IPlugin</*elided*/ any, /*elided*/ any & HostClass>>(plugin: P, ...args: PluginUseArgs<P>): ReturnType<P["onUse"]>;
|
|
89
|
+
/**
|
|
90
|
+
* {@inheritDoc PluginExtendManager.useExtend}
|
|
91
|
+
*/
|
|
92
|
+
useExtend<E>(ext: ExtendOptions</*elided*/ any & HostClass, E>, ...args: ConstructorParameters</*elided*/ any & HostClass>): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* 初始化实例
|
|
95
|
+
* @remarks
|
|
96
|
+
* 会调用 {@link PluginExtendManager.onInit}
|
|
97
|
+
* @param args
|
|
98
|
+
*/
|
|
99
|
+
init(...args: any): any;
|
|
100
|
+
/**
|
|
101
|
+
* 销毁实例
|
|
102
|
+
* @returns
|
|
103
|
+
*/
|
|
104
|
+
destroy(): any;
|
|
105
|
+
}, /*elided*/ any & HostClass>;
|
|
106
|
+
_pluginManager: PluginExtendManager<{
|
|
107
|
+
[x: string]: any;
|
|
108
|
+
/**
|
|
109
|
+
* 插件管理器 {@link PluginHostExtends.pluginManager}
|
|
110
|
+
*/
|
|
111
|
+
get pluginManager(): PluginExtendManager</*elided*/ any, /*elided*/ any & HostClass>;
|
|
112
|
+
/**
|
|
113
|
+
* 实例的注册插件的方法
|
|
114
|
+
* @param plugin
|
|
115
|
+
* @param args
|
|
116
|
+
* @returns
|
|
117
|
+
*/
|
|
118
|
+
usePlugin<P extends IPlugin</*elided*/ any, /*elided*/ any & HostClass>>(plugin: P, ...args: PluginUseArgs<P>): ReturnType<P["onUse"]>;
|
|
119
|
+
/**
|
|
120
|
+
* {@inheritDoc PluginExtendManager.useExtend}
|
|
121
|
+
*/
|
|
122
|
+
useExtend<E>(ext: ExtendOptions</*elided*/ any & HostClass, E>, ...args: ConstructorParameters</*elided*/ any & HostClass>): boolean;
|
|
123
|
+
/**
|
|
124
|
+
* 初始化实例
|
|
125
|
+
* @remarks
|
|
126
|
+
* 会调用 {@link PluginExtendManager.onInit}
|
|
127
|
+
* @param args
|
|
128
|
+
*/
|
|
129
|
+
init(...args: any): any;
|
|
130
|
+
/**
|
|
131
|
+
* 销毁实例
|
|
132
|
+
* @returns
|
|
133
|
+
*/
|
|
134
|
+
destroy(): any;
|
|
135
|
+
}, /*elided*/ any & HostClass>;
|
|
136
|
+
/**
|
|
137
|
+
* {@inheritDoc PluginExtendManager.usePlugin}
|
|
138
|
+
*/
|
|
139
|
+
usePlugin<Plugin extends IPlugin<{
|
|
140
|
+
[x: string]: any;
|
|
141
|
+
/**
|
|
142
|
+
* 插件管理器 {@link PluginHostExtends.pluginManager}
|
|
143
|
+
*/
|
|
144
|
+
get pluginManager(): PluginExtendManager</*elided*/ any, /*elided*/ any & HostClass>;
|
|
145
|
+
/**
|
|
146
|
+
* 实例的注册插件的方法
|
|
147
|
+
* @param plugin
|
|
148
|
+
* @param args
|
|
149
|
+
* @returns
|
|
150
|
+
*/
|
|
151
|
+
usePlugin<P extends IPlugin</*elided*/ any, /*elided*/ any & HostClass>>(plugin: P, ...args: PluginUseArgs<P>): ReturnType<P["onUse"]>;
|
|
152
|
+
/**
|
|
153
|
+
* {@inheritDoc PluginExtendManager.useExtend}
|
|
154
|
+
*/
|
|
155
|
+
useExtend<E>(ext: ExtendOptions</*elided*/ any & HostClass, E>, ...args: ConstructorParameters</*elided*/ any & HostClass>): boolean;
|
|
156
|
+
/**
|
|
157
|
+
* 初始化实例
|
|
158
|
+
* @remarks
|
|
159
|
+
* 会调用 {@link PluginExtendManager.onInit}
|
|
160
|
+
* @param args
|
|
161
|
+
*/
|
|
162
|
+
init(...args: any): any;
|
|
163
|
+
/**
|
|
164
|
+
* 销毁实例
|
|
165
|
+
* @returns
|
|
166
|
+
*/
|
|
167
|
+
destroy(): any;
|
|
168
|
+
}, /*elided*/ any & HostClass>>(plugin: Plugin, ...args: PluginUseArgs<Plugin>): ReturnType<Plugin["onUse"]>;
|
|
169
|
+
/**
|
|
170
|
+
* {@inheritDoc PluginExtendManager.useExtend}
|
|
171
|
+
*/
|
|
172
|
+
useExtend<E>(ext: ExtendOptions</*elided*/ any & HostClass, E>): boolean;
|
|
173
|
+
} & HostClass;
|
|
174
|
+
//# sourceMappingURL=decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorator.d.ts","sourceRoot":"","sources":["../../src/plugin-host/decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAmB,MAAM,yBAAyB,CAAC;AAEtG,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAC,MAAM,UAAU,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,SAAS,SAAS,mBAAmB,CAAC,GAAG,CAAC,IAAI,SAAS,GAAG,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AAGnL;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,SAAS,mBAAmB,EAAE,MAAM,EAAE,SAAS,GA+EtE,gBAAgB,CAAC,SAAS,CAAC,CAC7C;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,SAAS,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,0BASjF;AAGD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,SAAS,WAAW,EAAE,MAAM,EAAE,SAAS;kBAyChE,GAAG;;QArBxB;;WAEG;6BACkB,mBAAmB,4CAA6C;QAuBrF;;;;;WAKG;kBACO,CAAC,SAAS,OAAO,4CAA6C;QAIxE;;WAEG;kBACO,CAAC,8DAA0D,qBAAqB,4BAA0B;QAKpH;;;;;WAKG;sBACW,GAAG,GAAE,GAAG;QAYtB;;;WAGG;;;IAlFH;;;OAGG;;IAGH;;OAEG;;;QASH;;WAEG;6BACkB,mBAAmB,4CAA6C;QAuBrF;;;;;WAKG;kBACO,CAAC,SAAS,OAAO,4CAA6C;QAIxE;;WAEG;kBACO,CAAC,8DAA0D,qBAAqB,4BAA0B;QAKpH;;;;;WAKG;sBACW,GAAG,GAAE,GAAG;QAYtB;;;WAGG;;;;;QAjEH;;WAEG;6BACkB,mBAAmB,4CAA6C;QAuBrF;;;;;WAKG;kBACO,CAAC,SAAS,OAAO,4CAA6C;QAIxE;;WAEG;kBACO,CAAC,8DAA0D,qBAAqB,4BAA0B;QAKpH;;;;;WAKG;sBACW,GAAG,GAAE,GAAG;QAYtB;;;WAGG;;;IA1DH;;OAEG;cACc,MAAM,SAAS,OAAO;;QAVvC;;WAEG;6BACkB,mBAAmB,4CAA6C;QAuBrF;;;;;WAKG;kBACO,CAAC,SAAS,OAAO,4CAA6C;QAIxE;;WAEG;kBACO,CAAC,8DAA0D,qBAAqB,4BAA0B;QAKpH;;;;;WAKG;sBACW,GAAG,GAAE,GAAG;QAYtB;;;WAGG;;kCAvDiF,UAAU,MAAM,WAAW,aAAa,CAAC,MAAM,CAAC;IAIpI;;OAEG;cACc,CAAC,OAAO,aAAa,6BAA2B,CAAC,CAAC,GAAE,OAAO;cAiE/E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin-host/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { AbstractConstructor, ClassType } from "type-tls";
|
|
2
|
+
import type { ExtendOptions, PluginExtendManager } from "../plugin-manager/index";
|
|
3
|
+
import type { IPlugin, PluginUseReturn, PluginUseArgs } from "../plugin-manager/index";
|
|
4
|
+
/**
|
|
5
|
+
* 插件宿主构造函数的接口
|
|
6
|
+
* @typeParam HostClassType 插件宿主类的类型
|
|
7
|
+
*/
|
|
8
|
+
export interface IPluginHostClass<HostInst> {
|
|
9
|
+
/**
|
|
10
|
+
* 构建函数
|
|
11
|
+
*/
|
|
12
|
+
new (...args: any): HostInst;
|
|
13
|
+
/**
|
|
14
|
+
* 插件宿主类的原型
|
|
15
|
+
*/
|
|
16
|
+
prototype: HostInst;
|
|
17
|
+
/**
|
|
18
|
+
* PluginHost 的插件管理器
|
|
19
|
+
*/
|
|
20
|
+
get pluginManager(): PluginExtendManager<HostInst, this>;
|
|
21
|
+
/**
|
|
22
|
+
* 是否使用独立的插件管理器
|
|
23
|
+
* @defaultValue false
|
|
24
|
+
*/
|
|
25
|
+
readonly isolatedPluginManager?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* {@inheritDoc PluginExtendManager.usePlugin}
|
|
28
|
+
*/
|
|
29
|
+
usePlugin<P extends IPlugin<HostInst, this>>(plugin: P, ...args: PluginUseArgs<P>): PluginUseReturn<P>;
|
|
30
|
+
/**
|
|
31
|
+
* {@inheritDoc PluginExtendManager.useExtend}
|
|
32
|
+
*/
|
|
33
|
+
useExtend<HostClass extends AbstractConstructor, E>(ext: ExtendOptions<HostClass, E>): boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 插件宿主的实例类型
|
|
37
|
+
*/
|
|
38
|
+
export interface IPluginHost<Host, HostClass extends AbstractConstructor<Host> = ClassType<Host>> {
|
|
39
|
+
/**
|
|
40
|
+
* 插件管理器
|
|
41
|
+
*/
|
|
42
|
+
readonly pluginManager: PluginExtendManager<Host, HostClass>;
|
|
43
|
+
/**
|
|
44
|
+
* 实例的注册插件的方法
|
|
45
|
+
* @param plugin
|
|
46
|
+
* @param args
|
|
47
|
+
* @returns
|
|
48
|
+
*/
|
|
49
|
+
usePlugin<P extends IPlugin<Host, HostClass>>(plugin: P, ...args: PluginUseArgs<P>): PluginUseReturn<P>;
|
|
50
|
+
/**
|
|
51
|
+
* {@inheritDoc PluginExtendManager.useExtend}
|
|
52
|
+
*/
|
|
53
|
+
useExtend<E>(ext: ExtendOptions<HostClass, E>, ...args: ConstructorParameters<HostClass>): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* 初始化实例
|
|
56
|
+
* @param args
|
|
57
|
+
*/
|
|
58
|
+
init(...args: any): any;
|
|
59
|
+
/**
|
|
60
|
+
* 销毁实例
|
|
61
|
+
* @returns
|
|
62
|
+
*/
|
|
63
|
+
destroy(): any;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/plugin-host/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAC,SAAS,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGvF;;;GAGG;AACH,MAAM,WAAW,gBAAgB,CAAC,QAAQ;IAExC;;OAEG;IACH,KAAK,GAAG,IAAI,EAAE,GAAG,GAAG,QAAQ,CAAC;IAC7B;;OAEG;IACH,SAAS,EAAE,QAAQ,CAAC;IAEpB;;OAEG;IACH,IAAI,aAAa,IAAI,mBAAmB,CAAC,QAAQ,EAAC,IAAI,CAAC,CAAC;IAExD;;;OAGG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEzC;;OAEG;IACH,SAAS,CAAC,CAAC,SAAS,OAAO,CAAC,QAAQ,EAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAEtG;;OAEG;IACH,SAAS,CAAC,SAAS,SAAS,mBAAmB,EAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;CAC/F;AAID;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,IAAI,EAAC,SAAS,SAAS,mBAAmB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC;IAC7F;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC,IAAI,EAAC,SAAS,CAAC,CAAC;IAC5D;;;;;OAKG;IACH,SAAS,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,EAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAEvG;;OAEG;IACH,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,EAAC,GAAG,IAAI,EAAC,qBAAqB,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;IAEjG;;;OAGG;IACH,IAAI,CAAC,GAAG,IAAI,EAAC,GAAG,GAAE,GAAG,CAAC;IAEtB;;;OAGG;IACH,OAAO,IAAG,GAAG,CAAC;CACf"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { AnyFunction, AbstractConstructor } from "type-tls";
|
|
2
|
+
import { Destroyable } from "@gby/destroyable";
|
|
3
|
+
import { type ExtendOptions, type IExtend } from "./IExtend";
|
|
4
|
+
/**
|
|
5
|
+
* 插件管理者
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* 负责管理插件的注册、应用 等
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
export declare class ExtendManager<HostClass extends AbstractConstructor> extends Destroyable {
|
|
12
|
+
/**
|
|
13
|
+
* 插件的宿主
|
|
14
|
+
*/
|
|
15
|
+
host: HostClass;
|
|
16
|
+
/**
|
|
17
|
+
* 所有注册的插件
|
|
18
|
+
*/
|
|
19
|
+
readonly plugins: Set<IExtend<HostClass>>;
|
|
20
|
+
/**
|
|
21
|
+
* @param host - 插件的宿主
|
|
22
|
+
*/
|
|
23
|
+
constructor(host?: HostClass);
|
|
24
|
+
destroyThis(): any;
|
|
25
|
+
/**
|
|
26
|
+
* 使用插件、注册插件
|
|
27
|
+
* @param plugin - 插件
|
|
28
|
+
* @param args - 传递给插件的选项
|
|
29
|
+
*/
|
|
30
|
+
use<E>(plugin: ExtendOptions<HostClass, E>): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* 插件宿主实例的注册插件的方法
|
|
33
|
+
*
|
|
34
|
+
* @remarks
|
|
35
|
+
* 会调用每个插件的 {@link IExtend.use } 方法
|
|
36
|
+
* @param hostInst - 插件宿主的新实例
|
|
37
|
+
*/
|
|
38
|
+
instUse<E>(hostInst: InstanceType<HostClass>, plugin: ExtendOptions<HostClass, E>, ...args: ConstructorParameters<HostClass>): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* 插件宿主创建实例时调用
|
|
41
|
+
*
|
|
42
|
+
* @remarks
|
|
43
|
+
* 会调用每个插件的 {@link IExtend.onCreate} 方法
|
|
44
|
+
* 如果插件的 created 方法返回 Promise,则会等待 Promise resolve
|
|
45
|
+
* @param hostInst - 插件宿主的新实例
|
|
46
|
+
*/
|
|
47
|
+
onCreate(hostInst: InstanceType<HostClass>, ...args: ConstructorParameters<HostClass>): import("com-tools").SerialCallFunsReturn<AnyFunction>;
|
|
48
|
+
/**
|
|
49
|
+
* 插件宿主创建实例时调用
|
|
50
|
+
*
|
|
51
|
+
* @remarks
|
|
52
|
+
* 会调用每个插件的 {@link IExtend.onCreate } 方法
|
|
53
|
+
* @param hostInst - 插件宿主的新实例
|
|
54
|
+
* @param args - 初始化宿主实例时的参数
|
|
55
|
+
*/
|
|
56
|
+
onInit(hostInst: InstanceType<HostClass>, ...args: any): import("com-tools").SerialCallFunsReturn<AnyFunction>;
|
|
57
|
+
/**
|
|
58
|
+
* 插件宿主被销毁时调用
|
|
59
|
+
*
|
|
60
|
+
* @remarks
|
|
61
|
+
* 会调用每个插件的 {@link IExtend.onDestroy} 方法
|
|
62
|
+
* @param hostInst - 被销毁的插件实例
|
|
63
|
+
*/
|
|
64
|
+
onDestroy(hostInst: InstanceType<HostClass>): import("com-tools").SerialCallFunsReturn<AnyFunction>;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=ExtendManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtendManager.d.ts","sourceRoot":"","sources":["../../src/plugin-manager/ExtendManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAyB,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpF;;;;;;GAMG;AACH,qBAAa,aAAa,CAAC,SAAS,SAAS,mBAAmB,CAAE,SAAQ,WAAW;IAEjF;;OAEG;IACH,IAAI,EAAG,SAAS,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,OAAO,0BAAiC;IAIjD;;OAEG;gBACS,IAAI,CAAC,EAAE,SAAS;IAOnB,WAAW;IAMpB;;;;OAIG;IACH,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;IAQ1C;;;;;;OAMG;IACH,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,EAAG,GAAG,IAAI,EAAC,qBAAqB,CAAC,SAAS,CAAC;IAQ5H;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,EAAG,GAAG,IAAI,EAAC,qBAAqB,CAAC,SAAS,CAAC;IAWrF;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,EAAC,GAAG,IAAI,EAAC,GAAG;IAWpD;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC;CAY9C"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { AbstractConstructor, ClassType } from "type-tls";
|
|
2
|
+
/**
|
|
3
|
+
* 扩展选项接口
|
|
4
|
+
* @remarks
|
|
5
|
+
* 扩展 与 插件的接口很像,他们的区别是:
|
|
6
|
+
* - 扩展中的方法的 this 值是被扩展的类的实例,而插件中方法的 this 值是插件对象本身
|
|
7
|
+
* - 扩展中除接口中定义的成员之外,其他成员都会被直接添加到宿主类的原型 prototype 上,而插件的成员不会
|
|
8
|
+
*/
|
|
9
|
+
export interface IExtend<HostClass extends AbstractConstructor> {
|
|
10
|
+
/**
|
|
11
|
+
* 当宿主实例被创建时调用
|
|
12
|
+
* @param host - 新建的宿主实例
|
|
13
|
+
*/
|
|
14
|
+
onCreate?(host: InstanceType<HostClass>, ...args: ConstructorParameters<HostClass>): any;
|
|
15
|
+
/**
|
|
16
|
+
* 当宿主实例被初始化时调用
|
|
17
|
+
* @param host - 新建的宿主实例
|
|
18
|
+
* @param args - 初始化宿主实例时的参数
|
|
19
|
+
*/
|
|
20
|
+
onInit?(host: InstanceType<HostClass>, ...args: any): any;
|
|
21
|
+
/**
|
|
22
|
+
* 当宿主实例被销毁时调用
|
|
23
|
+
* @param host - 被销毁的宿主实例
|
|
24
|
+
*/
|
|
25
|
+
onDestroy?(host: InstanceType<HostClass>): any;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 从扩展选项中提取需要设置给宿主类的成员
|
|
29
|
+
* @param extendOptions
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
export declare function pickHostExtendMembers<Ext>(extendOptions: Ext): Omit<Ext, keyof IExtend<any>>;
|
|
33
|
+
/**
|
|
34
|
+
* 扩展目标的选项类型
|
|
35
|
+
*
|
|
36
|
+
* @remarks
|
|
37
|
+
* 它是一个对象类型,它的属性是 E 的属性,并且会自动更改其this的类型为 InstanceType<C> & E
|
|
38
|
+
*
|
|
39
|
+
* @param HostClass - 扩展的目标类类型
|
|
40
|
+
* @param E - 扩展的对象类型
|
|
41
|
+
*/
|
|
42
|
+
export type ExtendOptions<HostClass extends AbstractConstructor, E> = E & ThisType<InstanceType<HostClass> & E> & IExtend<HostClass>;
|
|
43
|
+
/**
|
|
44
|
+
* 扩展目标的类类型
|
|
45
|
+
*
|
|
46
|
+
* @remarks
|
|
47
|
+
* 它是一个类类型,它的实例类型是 InstanceType<C> & E,构造函数参数是 ConstructorParameters<C>
|
|
48
|
+
*
|
|
49
|
+
* @param HostClass - 扩展的目标类类型
|
|
50
|
+
* @param E - 扩展的对象类型
|
|
51
|
+
*/
|
|
52
|
+
export type ExtendClassType<HostClass extends AbstractConstructor, E> = ClassType<InstanceType<HostClass> & E, ConstructorParameters<HostClass>>;
|
|
53
|
+
/**
|
|
54
|
+
* 定义扩展的类型便利函数
|
|
55
|
+
*
|
|
56
|
+
* @remarks
|
|
57
|
+
* 它会更改 ext 中方法的this指向为 cla & ext,不会真的执行扩展操作。
|
|
58
|
+
*
|
|
59
|
+
* @param hostClass - 扩展的目标,用作 this 的类型
|
|
60
|
+
* @param ext - 描述扩展内容的对象,会自动更改其this的类型
|
|
61
|
+
* @returns 返回注入了 this 类型的 ext 对象本身
|
|
62
|
+
*/
|
|
63
|
+
export declare function defineExtend<HostClass extends AbstractConstructor, E>(hostClass: HostClass, ext: ExtendOptions<HostClass, E>): E & ThisType<HostClass & E>;
|
|
64
|
+
//# sourceMappingURL=IExtend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IExtend.d.ts","sourceRoot":"","sources":["../../src/plugin-manager/IExtend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAC,SAAS,EAAE,MAAM,UAAU,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,WAAW,OAAO,CAAC,SAAS,SAAS,mBAAmB;IAC1D;;;OAGG;IACH,QAAQ,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,EAAG,GAAG,IAAI,EAAC,qBAAqB,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;IAEzF;;;;OAIG;IACH,MAAM,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,EAAC,GAAG,IAAI,EAAC,GAAG,GAAG,GAAG,CAAC;IAExD;;;OAGG;IACH,SAAS,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;CAClD;AAMD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,EAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAU1F;AASD;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,CAAC,SAAS,SAAS,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAMrI;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,CAAC,SAAS,SAAS,mBAAmB,EAAE,CAAC,IAAI,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,EAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;AAQhJ;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,SAAS,SAAS,mBAAmB,EAAE,CAAC,EAAG,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAE3J"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { AnyFunction, AbstractClassType } from "type-tls";
|
|
2
|
+
/**
|
|
3
|
+
* 插件宿主的实例类型
|
|
4
|
+
*/
|
|
5
|
+
export type HostInst<H> = H extends new (...args: any) => Object ? InstanceType<H> : H;
|
|
6
|
+
/**
|
|
7
|
+
* 插件的接口
|
|
8
|
+
* @remarks
|
|
9
|
+
* 插件 与 扩展的接口很像,他们的区别是:
|
|
10
|
+
* - 插件中的方法的 this 值是插件对象本身,而扩展中方法的 this 值是宿主实例
|
|
11
|
+
* - 插件的成员不会被直接添加到宿主类的原型 prototype 上,而扩展的成员会
|
|
12
|
+
* @typeParam HOST - 插件宿主的类类型
|
|
13
|
+
*/
|
|
14
|
+
export interface IPlugin<Host, HostClass = AbstractClassType<Host>> {
|
|
15
|
+
/**
|
|
16
|
+
* 当插件被注册时调用
|
|
17
|
+
* @param hostClass - 宿主的类型
|
|
18
|
+
* @param args - 注册插件时的参数
|
|
19
|
+
*/
|
|
20
|
+
onUse(hostClass: HostClass, ...args: any): any;
|
|
21
|
+
/**
|
|
22
|
+
* 当宿主实例被创建时调用
|
|
23
|
+
* @param host - 新建的宿主实例
|
|
24
|
+
*/
|
|
25
|
+
onCreate?(host: Host, ...args: any): any;
|
|
26
|
+
/**
|
|
27
|
+
* 当宿主实例被初始化时调用
|
|
28
|
+
* @param host - 新建的宿主实例
|
|
29
|
+
* @param args - 初始化宿主实例时的参数
|
|
30
|
+
*/
|
|
31
|
+
onInit?(host: Host, ...args: any): any;
|
|
32
|
+
/**
|
|
33
|
+
* 当宿主实例被销毁时调用
|
|
34
|
+
* @param host - 被销毁的宿主实例
|
|
35
|
+
*/
|
|
36
|
+
onDestroy?(host: Host): any;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 获取插件的 used 方法的参数类型
|
|
40
|
+
*/
|
|
41
|
+
export type PluginUseArgs<Plugin extends IPlugin<any, any>> = Plugin["onUse"] extends (host: any, ...args: infer P) => any ? P : never;
|
|
42
|
+
/**
|
|
43
|
+
* 插件的 used 方法的返回值类型
|
|
44
|
+
*/
|
|
45
|
+
export type PluginUseReturn<P extends IPlugin<any, any>> = ReturnType<P["onUse"]>;
|
|
46
|
+
/**
|
|
47
|
+
* 插件的 created 方法的返回值类型
|
|
48
|
+
*/
|
|
49
|
+
export type PluginCreatedReturn<P extends IPlugin<any, any>> = P["onCreate"] extends AnyFunction ? ReturnType<P["onCreate"]> : never;
|
|
50
|
+
/**
|
|
51
|
+
* 判断一个对象是否是插件
|
|
52
|
+
* @param target
|
|
53
|
+
* @returns
|
|
54
|
+
*/
|
|
55
|
+
export declare function isPlugin(target: any): target is IPlugin<any, any>;
|
|
56
|
+
//# sourceMappingURL=IPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IPlugin.d.ts","sourceRoot":"","sources":["../../src/plugin-manager/IPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAIvF;;;;;;;GAOG;AACH,MAAM,WAAW,OAAO,CAAC,IAAI,EAAC,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC;IAC7D;;;;OAIG;IACH,KAAK,CAAC,SAAS,EAAE,SAAS,EAAG,GAAG,IAAI,EAAC,GAAG,GAAG,GAAG,CAAC;IAE/C;;;OAGG;IACH,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,EAAG,GAAG,IAAI,EAAC,GAAG,GAAG,GAAG,CAAC;IAEzC;;;;OAIG;IACH,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAC,GAAG,IAAI,EAAC,GAAG,GAAG,GAAG,CAAC;IAErC;;;OAGG;IACH,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC;CAC/B;AAGD;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,SAAS,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAAI,CAAC,GAAG,KAAK,CAAC;AAGtI;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAGjF;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC;AAIpI;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC,CAEhE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { AnyFunction, AbstractConstructor, ClassType } from "type-tls";
|
|
2
|
+
import { Destroyable } from "@gby/destroyable";
|
|
3
|
+
import { type ExtendOptions, type IExtend } from "./IExtend";
|
|
4
|
+
import { type IPlugin, type PluginUseArgs, type PluginUseReturn } from "./IPlugin";
|
|
5
|
+
/**
|
|
6
|
+
* 用于标识是扩展的标记
|
|
7
|
+
*/
|
|
8
|
+
export declare const extendMark: unique symbol;
|
|
9
|
+
/**
|
|
10
|
+
* 插件扩展管理者
|
|
11
|
+
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* 负责管理插件 和 扩展的注册、应用 等
|
|
14
|
+
* 相当于 PluginManager + ExtendManager
|
|
15
|
+
*
|
|
16
|
+
*/
|
|
17
|
+
export declare class PluginExtendManager<Host, HostClass extends AbstractConstructor<Host> = ClassType<Host>> extends Destroyable {
|
|
18
|
+
/**
|
|
19
|
+
* 插件的宿主
|
|
20
|
+
*/
|
|
21
|
+
host: HostClass;
|
|
22
|
+
/**
|
|
23
|
+
* 所有注册的插件
|
|
24
|
+
*/
|
|
25
|
+
readonly plugins: Map<IPlugin<Host, HostClass> | IExtend<HostClass>, any>;
|
|
26
|
+
/**
|
|
27
|
+
* @param host - 插件的宿主
|
|
28
|
+
*/
|
|
29
|
+
constructor(host?: HostClass);
|
|
30
|
+
destroyThis(): any;
|
|
31
|
+
/**
|
|
32
|
+
* 判断一个对象是否是插件
|
|
33
|
+
* @param target
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
isPlugin(target: any): target is IPlugin<Host, HostClass>;
|
|
37
|
+
/**
|
|
38
|
+
* 使用插件、注册插件
|
|
39
|
+
* @param ext - 插件
|
|
40
|
+
* @param args - 传递给插件的选项
|
|
41
|
+
*/
|
|
42
|
+
useExtend<E>(ext: ExtendOptions<HostClass, E>): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* 插件宿主实例的注册插件的方法
|
|
45
|
+
*
|
|
46
|
+
* @remarks
|
|
47
|
+
* 会调用每个插件的 {@link IExtend.use } 方法
|
|
48
|
+
* @param hostInst - 插件宿主的新实例
|
|
49
|
+
*/
|
|
50
|
+
instUseExtend<E>(hostInst: InstanceType<HostClass>, ext: ExtendOptions<HostClass, E>, ...args: ConstructorParameters<HostClass>): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* 使用插件、注册插件
|
|
53
|
+
* @param plugin - 插件
|
|
54
|
+
* @param args - 传递给插件的选项
|
|
55
|
+
*/
|
|
56
|
+
usePlugin<P extends IPlugin<Host, HostClass>>(plugin: P, ...args: PluginUseArgs<P>): PluginUseReturn<P>;
|
|
57
|
+
/**
|
|
58
|
+
* 插件宿主实例的注册插件的方法
|
|
59
|
+
*
|
|
60
|
+
* @remarks
|
|
61
|
+
* 会调用每个插件的 {@link IPlugin.use } 方法
|
|
62
|
+
* @param hostInst - 插件宿主的新实例
|
|
63
|
+
*/
|
|
64
|
+
instUsePlugin<P extends IPlugin<Host, HostClass>>(hostInst: Host, plugin: P, ...options: PluginUseArgs<P>): PluginUseReturn<P>;
|
|
65
|
+
/**
|
|
66
|
+
* 插件宿主创建实例时调用
|
|
67
|
+
*
|
|
68
|
+
* @remarks
|
|
69
|
+
* 会调用每个插件的 {@link IPlugin.onCreate} 方法
|
|
70
|
+
* 如果插件的 created 方法返回 Promise,则会等待 Promise resolve
|
|
71
|
+
* @param hostInst - 插件宿主的新实例
|
|
72
|
+
*/
|
|
73
|
+
onCreate(hostInst: Host, ...args: any): import("com-tools").SerialCallFunsReturn<AnyFunction>;
|
|
74
|
+
/**
|
|
75
|
+
* 插件宿主创建实例时调用
|
|
76
|
+
*
|
|
77
|
+
* @remarks
|
|
78
|
+
* 会调用每个插件的 {@link IPlugin.onCreate } 方法
|
|
79
|
+
* @param hostInst - 插件宿主的新实例
|
|
80
|
+
* @param args - 初始化宿主实例时的参数
|
|
81
|
+
*/
|
|
82
|
+
onInit(hostInst: Host, ...args: any): import("com-tools").SerialCallFunsReturn<AnyFunction>;
|
|
83
|
+
/**
|
|
84
|
+
* 插件宿主被销毁时调用
|
|
85
|
+
*
|
|
86
|
+
* @remarks
|
|
87
|
+
* 会调用每个插件的 {@link IPlugin.onDestroy} 方法
|
|
88
|
+
* @param hostInst - 被销毁的插件实例
|
|
89
|
+
*/
|
|
90
|
+
onDestroy(hostInst: Host): import("com-tools").SerialCallFunsReturn<AnyFunction>;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=PluginExtendManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginExtendManager.d.ts","sourceRoot":"","sources":["../../src/plugin-manager/PluginExtendManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAC,SAAS,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,OAAO,EAAyB,MAAM,WAAW,CAAC;AACpF,OAAO,EAAY,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAI7F;;GAEG;AACH,eAAO,MAAM,UAAU,eAAmB,CAAC;AAG3C;;;;;;;GAOG;AACH,qBAAa,mBAAmB,CAAC,IAAI,EAAC,SAAS,SAAS,mBAAmB,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAE,SAAQ,WAAW;IAEpH;;OAEG;IACH,IAAI,EAAG,SAAS,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,OAAO,0DAA6D;IAG7E;;OAEG;gBACS,IAAI,CAAC,EAAE,SAAS;IAOnB,WAAW;IAMpB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,IAAI,EAAC,SAAS,CAAC;IAQxD;;;;OAIG;IACH,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;IAQ7C;;;;;;OAMG;IACH,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,EAAG,GAAG,IAAI,EAAC,qBAAqB,CAAC,SAAS,CAAC;IAQ/H;;;;OAIG;IACH,SAAS,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,EAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAQrG;;;;;;OAMG;IACH,aAAa,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,EAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;IAU7H;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAG,GAAG,IAAI,EAAC,GAAG;IAYrC;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAC,GAAG,IAAI,EAAC,GAAG;IAYjC;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,EAAE,IAAI;CAa3B"}
|