@aalis/core 0.11.0 → 0.12.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/app.d.ts +11 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +16 -0
- package/dist/app.js.map +1 -1
- package/dist/config.d.ts +5 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +41 -8
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +109 -31
- package/dist/context.js.map +1 -1
- package/dist/contributions.d.ts +3 -3
- package/dist/disposable-chain.d.ts +3 -1
- package/dist/disposable-chain.d.ts.map +1 -1
- package/dist/disposable-chain.js +7 -3
- package/dist/disposable-chain.js.map +1 -1
- package/dist/events.d.ts +10 -2
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +30 -7
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/plugin-activation.d.ts +23 -0
- package/dist/plugin-activation.d.ts.map +1 -1
- package/dist/plugin-activation.js +70 -7
- package/dist/plugin-activation.js.map +1 -1
- package/dist/plugin-topology.d.ts.map +1 -1
- package/dist/plugin-topology.js +16 -17
- package/dist/plugin-topology.js.map +1 -1
- package/dist/plugin.d.ts +5 -3
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +68 -41
- package/dist/plugin.js.map +1 -1
- package/dist/services-helpers.d.ts +0 -2
- package/dist/services-helpers.d.ts.map +1 -1
- package/dist/services-helpers.js +1 -12
- package/dist/services-helpers.js.map +1 -1
- package/dist/services.d.ts +7 -28
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +2 -28
- package/dist/services.js.map +1 -1
- package/dist/types/app.d.ts +0 -1
- package/dist/types/app.d.ts.map +1 -1
- package/dist/types/plugin.d.ts +3 -2
- package/dist/types/plugin.d.ts.map +1 -1
- package/dist/types/plugin.js.map +1 -1
- package/dist/types/services.js +2 -2
- package/dist/types/services.js.map +1 -1
- package/package.json +1 -1
package/dist/app.d.ts
CHANGED
|
@@ -127,6 +127,13 @@ export declare class App {
|
|
|
127
127
|
/**
|
|
128
128
|
* 注册插件
|
|
129
129
|
*
|
|
130
|
+
* **resolve 语义 = 注册落账 + 尽力即时激活**:完全静置时激活在返回前同步收敛;
|
|
131
|
+
* 有在飞 recompute(反应式级联/另一插件正在激活)**或手动 dispose 段在途**
|
|
132
|
+
* (unload/disable/bounce 的挂起窗口)时,本次请求排队并入其收尾,
|
|
133
|
+
* resolve 时激活可能尚未发生(排队不丢失——单飞排队见 recompute)。需要
|
|
134
|
+
* 「激活已落定」的确定时机,调用后 `await app.plugins.idle()`(不得在插件
|
|
135
|
+
* apply/onDispose 内这样做——自等死锁,见 idle)。
|
|
136
|
+
*
|
|
130
137
|
* @param module 插件模块
|
|
131
138
|
* @param config 插件配置(覆盖文件配置)
|
|
132
139
|
* @param instanceId 实例 ID(多实例时为 `name:suffix`,留空则使用 module.name)
|
|
@@ -143,6 +150,10 @@ export declare class App {
|
|
|
143
150
|
*
|
|
144
151
|
* 优先调用 `pluginLoader.reload(desc)` 实现热重载(loader 可做缓存失效);
|
|
145
152
|
* 未实现 reload 时退化到普通 `load(desc)`。
|
|
153
|
+
*
|
|
154
|
+
* resolve 语义同 `plugin()`(注册落账+尽力即时激活)。**刻意不等静置**:本方法
|
|
155
|
+
* 挂在 HTTP 热路径上,等静置会把请求延迟耦合到无关插件的慢 apply;市场的
|
|
156
|
+
* 就位判据本就只看注册表在场(见 package-manager 的 isPluginRegistered)。
|
|
146
157
|
*/
|
|
147
158
|
rescanPlugins(): Promise<string[]>;
|
|
148
159
|
/**
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAmB,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAoB,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC;IACpC,6BAA6B;IAC7B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnE,6BAA6B;IAC7B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,gBAAgB;IAChB,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,iBAAiB;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,kBAAkB;IAClB,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,GAAG,CAElD;AAED;;;;;GAKG;AACH,qBAAa,GAAG;IACd,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAE7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAe;IAC7C,OAAO,CAAC,cAAc,CAAC,CAAoD;IAC3E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4C;gBAEhE,OAAO,EAAE,UAAU;IA2E/B
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/app.js
CHANGED
|
@@ -109,6 +109,13 @@ export class App {
|
|
|
109
109
|
/**
|
|
110
110
|
* 注册插件
|
|
111
111
|
*
|
|
112
|
+
* **resolve 语义 = 注册落账 + 尽力即时激活**:完全静置时激活在返回前同步收敛;
|
|
113
|
+
* 有在飞 recompute(反应式级联/另一插件正在激活)**或手动 dispose 段在途**
|
|
114
|
+
* (unload/disable/bounce 的挂起窗口)时,本次请求排队并入其收尾,
|
|
115
|
+
* resolve 时激活可能尚未发生(排队不丢失——单飞排队见 recompute)。需要
|
|
116
|
+
* 「激活已落定」的确定时机,调用后 `await app.plugins.idle()`(不得在插件
|
|
117
|
+
* apply/onDispose 内这样做——自等死锁,见 idle)。
|
|
118
|
+
*
|
|
112
119
|
* @param module 插件模块
|
|
113
120
|
* @param config 插件配置(覆盖文件配置)
|
|
114
121
|
* @param instanceId 实例 ID(多实例时为 `name:suffix`,留空则使用 module.name)
|
|
@@ -182,6 +189,11 @@ export class App {
|
|
|
182
189
|
}
|
|
183
190
|
}
|
|
184
191
|
// 配置同步政策(默认值回填 / schema 裁剪)属宿主层,由宿主在本方法之后自行执行。
|
|
192
|
+
// 引导期收敛保证的结构化落点:register 的 recompute 在有在飞 run 时排队早退
|
|
193
|
+
// (见 plugin() JSDoc),此前「本方法返回即全部收敛」靠调用点 await 交错偶然
|
|
194
|
+
// 成立——ready / app:started 的发出时机依赖这条保证,必须等静置而非碰运气。
|
|
195
|
+
// 引导路径不在任何 apply 内,无 idle 自等死锁面。
|
|
196
|
+
await this.plugins.idle();
|
|
185
197
|
}
|
|
186
198
|
/**
|
|
187
199
|
* 重新扫描插件源,加载新发现的插件(已注册的跳过)。
|
|
@@ -189,6 +201,10 @@ export class App {
|
|
|
189
201
|
*
|
|
190
202
|
* 优先调用 `pluginLoader.reload(desc)` 实现热重载(loader 可做缓存失效);
|
|
191
203
|
* 未实现 reload 时退化到普通 `load(desc)`。
|
|
204
|
+
*
|
|
205
|
+
* resolve 语义同 `plugin()`(注册落账+尽力即时激活)。**刻意不等静置**:本方法
|
|
206
|
+
* 挂在 HTTP 热路径上,等静置会把请求延迟耦合到无关插件的慢 apply;市场的
|
|
207
|
+
* 就位判据本就只看注册表在场(见 package-manager 的 isPluginRegistered)。
|
|
192
208
|
*/
|
|
193
209
|
async rescanPlugins() {
|
|
194
210
|
if (!this.pluginLoader)
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -45,9 +45,10 @@ export interface ConfigManagerOptions {
|
|
|
45
45
|
* 职责:
|
|
46
46
|
* - 持有当前配置快照(`AalisConfig`)
|
|
47
47
|
* - 提供 get/set/getPluginConfig 等访问器
|
|
48
|
-
* -
|
|
48
|
+
* - 持有服务偏好表(serviceName → preferred contextId)
|
|
49
49
|
*
|
|
50
50
|
* **不**做的事:
|
|
51
|
+
* - 不做插件默认配置合并与 schema 裁剪——归宿主的 config-sync 政策
|
|
51
52
|
* - 不读写文件,不解析 yaml/json,不 watch 文件系统
|
|
52
53
|
* ——这些由 `ConfigProvider`(宿主注入)负责
|
|
53
54
|
*
|
|
@@ -81,6 +82,9 @@ export declare class ConfigManager {
|
|
|
81
82
|
/**
|
|
82
83
|
* 持久化当前配置。委托给 provider,无 provider 时静默忽略(内存模式)。
|
|
83
84
|
* 同步语义:若 provider 异步保存,调用方不会等待完成——这与原 fs sync 行为一致。
|
|
85
|
+
*
|
|
86
|
+
* @internal 机制口。公开入口是 `app.saveConfig()`(AppService 契约),全部插件
|
|
87
|
+
* 消费者都应走它;本方法仅供 App 门面与宿主使用,避免同一件事两条公开路。
|
|
84
88
|
*/
|
|
85
89
|
save(): void;
|
|
86
90
|
/**
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,gBAAgB;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE5C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AASD,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,gBAAgB;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE5C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AASD,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,gBAAgB,CAA6B;gBAEzC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,oBAAoB;IAMhE,GAAG,CAAC,CAAC,SAAS,MAAM,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAIxD,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;IAInG;;;OAGG;IACH,YAAY,IAAI,MAAM;IAItB,MAAM,IAAI,QAAQ,CAAC,WAAW,CAAC;IAI/B,GAAG,CAAC,CAAC,SAAS,MAAM,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAIrE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI1E,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI5C,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI7C,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAY5D,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAI/C,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAK3D,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3C;;;;;;OAMG;IACH,IAAI,IAAI,IAAI;IAUZ;;;;;;;;OAQG;IACH,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW;IAK1C;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAUjC,OAAO,IAAI,IAAI;CAKhB"}
|
package/dist/config.js
CHANGED
|
@@ -10,9 +10,10 @@ const DEFAULT_CONFIG = {
|
|
|
10
10
|
* 职责:
|
|
11
11
|
* - 持有当前配置快照(`AalisConfig`)
|
|
12
12
|
* - 提供 get/set/getPluginConfig 等访问器
|
|
13
|
-
* -
|
|
13
|
+
* - 持有服务偏好表(serviceName → preferred contextId)
|
|
14
14
|
*
|
|
15
15
|
* **不**做的事:
|
|
16
|
+
* - 不做插件默认配置合并与 schema 裁剪——归宿主的 config-sync 政策
|
|
16
17
|
* - 不读写文件,不解析 yaml/json,不 watch 文件系统
|
|
17
18
|
* ——这些由 `ConfigProvider`(宿主注入)负责
|
|
18
19
|
*
|
|
@@ -87,6 +88,9 @@ export class ConfigManager {
|
|
|
87
88
|
/**
|
|
88
89
|
* 持久化当前配置。委托给 provider,无 provider 时静默忽略(内存模式)。
|
|
89
90
|
* 同步语义:若 provider 异步保存,调用方不会等待完成——这与原 fs sync 行为一致。
|
|
91
|
+
*
|
|
92
|
+
* @internal 机制口。公开入口是 `app.saveConfig()`(AppService 契约),全部插件
|
|
93
|
+
* 消费者都应走它;本方法仅供 App 门面与宿主使用,避免同一件事两条公开路。
|
|
90
94
|
*/
|
|
91
95
|
save() {
|
|
92
96
|
if (!this.provider?.save)
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAmCA,MAAM,cAAc,GAAgB;IAClC,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,EAAE;IACX,eAAe,EAAE,EAAE;CACpB,CAAC;AAYF
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/context.d.ts
CHANGED
|
@@ -25,8 +25,9 @@ export declare class Context {
|
|
|
25
25
|
/**
|
|
26
26
|
* 开发模式开关——由 App 注入,子 Context 通过 fork 继承。
|
|
27
27
|
*
|
|
28
|
-
* - `true`(默认):`provide`
|
|
29
|
-
*
|
|
28
|
+
* - `true`(默认):`provide` 时跑注册校验(entryId 前缀 / 重复 provide,见
|
|
29
|
+
* validateProvide),激活后做 provides 反向一致性 warn
|
|
30
|
+
* - `false`(生产):跳过上述校验
|
|
30
31
|
*
|
|
31
32
|
* core 不读 `process.env`——是否 dev 由宿主决定。
|
|
32
33
|
*/
|
|
@@ -47,11 +48,23 @@ export declare class Context {
|
|
|
47
48
|
* 条目数有界于**当前存活**的贡献数:退订时由 off 的自移除逻辑摘掉本条。
|
|
48
49
|
*/
|
|
49
50
|
private readonly _contributionDisposers;
|
|
51
|
+
/** 贡献登记表 mapKey 分隔符:NUL 是唯一保证不出现在 point 名与贡献 id 里的字符(id 只禁 '/',空格等均合法)。 */
|
|
52
|
+
private static readonly CONTRIB_KEY_SEP;
|
|
50
53
|
/** 活跃沙盒子上下文 id(useModule)——用于同名重复挂载时唯一化 childId。 */
|
|
51
54
|
private readonly _moduleIds;
|
|
52
55
|
private _disposables;
|
|
53
56
|
private _children;
|
|
54
57
|
private _parent?;
|
|
58
|
+
/**
|
|
59
|
+
* post-dispose 注册政策(两档,各入口守卫引用此处):
|
|
60
|
+
* - 订阅类(on/middleware/contribute/provide/whenService):warn + no-op——调用方常是
|
|
61
|
+
* 插件的异步续段,清理路径上不抛错;也杜绝幽灵注册(provide 曾会向活总线闪发
|
|
62
|
+
* service:registered/unregistered,whenService 曾会真跑回调)。
|
|
63
|
+
* - 构造类(fork/useModule):抛错——在死 ctx 上造生命周期单元是编程错误,不是清理路径。
|
|
64
|
+
* - onDispose 特例:拆卸进行中(链未排空)仍进链、被本次清理正常等待(debug);
|
|
65
|
+
* 链已排空才就地执行且异步返回值不被等待(warn)。两种都不 no-op、不抛错——
|
|
66
|
+
* 它握着待释放的资源,丢弃即泄漏。
|
|
67
|
+
*/
|
|
55
68
|
private _disposed;
|
|
56
69
|
/**
|
|
57
70
|
* 在飞的拆卸 promise。`_disposed` 在清理**开始前**置位,仅凭它早退会让后来者
|
|
@@ -70,11 +83,13 @@ export declare class Context {
|
|
|
70
83
|
* 会关,**但异步返回值不被等待**,于是 `disposeAsync` 的「返回时异步清理
|
|
71
84
|
* 已完成」承诺落空。
|
|
72
85
|
*
|
|
73
|
-
* 可达面要说清:`PluginManager`
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* `
|
|
86
|
+
* 可达面要说清:`PluginManager` 的 unload / disablePlugin / bouncePlugin 会**主动**
|
|
87
|
+
* 走进这个窗口——三者对在飞 ctx 直接 disposeAsync(先把 entry.state 改离
|
|
88
|
+
* 'activating' 让激活收尾让位,见 plugin-activation.ts 的接管检查),依赖的正是
|
|
89
|
+
* 本机制「先等 apply 落定再排空链」的承诺;`evictDownstreamConsumers` 同以
|
|
90
|
+
* entry.context 为判据走进窗口;recompute 仍只对 `'active'` 动手,
|
|
91
|
+
* `App.stop` 另有 `idle()` 挡在前面。宿主直调
|
|
92
|
+
* `disposeAsync` 与 `useModule` 的沙盒子 ctx 级联同样由本机制兜住。
|
|
78
93
|
*
|
|
79
94
|
* 记住 apply 的 promise 后,`disposeAsync` 可以先等它落定再排空链——迟到的
|
|
80
95
|
* disposer 就走**正常注册路径**进链,被正常 await。插件侧零改动。
|
|
@@ -116,6 +131,8 @@ export declare class Context {
|
|
|
116
131
|
* 把一个底层退订原语登记到 disposable 链,并返回**自移除**的退订函数:
|
|
117
132
|
* 调用方手动退订时,闭包不再滞留 _disposables(否则它持有 handler 引用直到
|
|
118
133
|
* ctx.dispose 才释放——故所有注册 API 的退订都统一走此路径,杜绝该类泄漏)。
|
|
134
|
+
*
|
|
135
|
+
* label 进入链条目:泄漏排查与超时/抛错告警按它点名(`前缀:名字` 约定)。
|
|
119
136
|
*/
|
|
120
137
|
private trackDisposable;
|
|
121
138
|
emit<E extends string & keyof AalisEvents>(event: E, ...args: AalisEvents[E]): Promise<void>;
|
|
@@ -175,7 +192,7 @@ export declare class Context {
|
|
|
175
192
|
* 设置某服务的偏好 provider(按 contextId)
|
|
176
193
|
*
|
|
177
194
|
* 语义:「偏好 > 优先级 > 注册顺序」。偏好者总是 `getService(name)` 的第一返回值,
|
|
178
|
-
* 即使其 priority
|
|
195
|
+
* 即使其 priority 数值低于其它 entry。
|
|
179
196
|
*
|
|
180
197
|
* 注:偏好可以提前于 entry 注册前设置——一旦目标 contextId 注册即刻生效。
|
|
181
198
|
* @returns 始终返回 true(偏好已记录)
|
|
@@ -333,6 +350,22 @@ export declare class Context {
|
|
|
333
350
|
onDispose(fn: () => void | Promise<void>, label?: string): () => void;
|
|
334
351
|
/** @internal 当前 disposable 链长度(诊断 / 测试用:检测 provide/whenService 的闭包是否如期自移除)。 */
|
|
335
352
|
get disposableCount(): number;
|
|
353
|
+
/**
|
|
354
|
+
* @internal 链序标签名单(诊断 / 测试用):把「卸载后还剩几个」升级为「剩的是谁」。
|
|
355
|
+
* 内核门面注册按 `前缀:名字` 约定自动点名(on:/middleware:/contribute:/provide:/whenService:),
|
|
356
|
+
* onDispose 用作者传的 label;未命名项以 undefined 占位——占位本身是信息
|
|
357
|
+
* (说明有未传 label 的 onDispose,排查时按链序号对照 `[#i]` 告警)。
|
|
358
|
+
*/
|
|
359
|
+
listDisposables(): ReadonlyArray<string | undefined>;
|
|
360
|
+
/**
|
|
361
|
+
* @internal 贡献登记表条目名单(诊断 / 测试用)。与 {@link listDisposables} 是
|
|
362
|
+
* 两本独立的账(同 {@link contributionDisposerCount} 的注释)——登记表泄漏
|
|
363
|
+
* 只有这里看得见。key 天然携带贡献点与贡献 id,直接拆给调用方。
|
|
364
|
+
*/
|
|
365
|
+
listContributions(): ReadonlyArray<{
|
|
366
|
+
point: string;
|
|
367
|
+
id: string;
|
|
368
|
+
}>;
|
|
336
369
|
/**
|
|
337
370
|
* @internal 登记本 ctx 的初始化在飞 promise(见 {@link _activation})。
|
|
338
371
|
*
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAErG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAExH,KAAK,YAAY,CAAC,IAAI,SAAS,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpF;;;;;;;;;;;GAWG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/dist/context.js
CHANGED
|
@@ -19,8 +19,9 @@ export class Context {
|
|
|
19
19
|
/**
|
|
20
20
|
* 开发模式开关——由 App 注入,子 Context 通过 fork 继承。
|
|
21
21
|
*
|
|
22
|
-
* - `true`(默认):`provide`
|
|
23
|
-
*
|
|
22
|
+
* - `true`(默认):`provide` 时跑注册校验(entryId 前缀 / 重复 provide,见
|
|
23
|
+
* validateProvide),激活后做 provides 反向一致性 warn
|
|
24
|
+
* - `false`(生产):跳过上述校验
|
|
24
25
|
*
|
|
25
26
|
* core 不读 `process.env`——是否 dev 由宿主决定。
|
|
26
27
|
*/
|
|
@@ -41,11 +42,23 @@ export class Context {
|
|
|
41
42
|
* 条目数有界于**当前存活**的贡献数:退订时由 off 的自移除逻辑摘掉本条。
|
|
42
43
|
*/
|
|
43
44
|
_contributionDisposers = new Map();
|
|
45
|
+
/** 贡献登记表 mapKey 分隔符:NUL 是唯一保证不出现在 point 名与贡献 id 里的字符(id 只禁 '/',空格等均合法)。 */
|
|
46
|
+
static CONTRIB_KEY_SEP = '\u0000';
|
|
44
47
|
/** 活跃沙盒子上下文 id(useModule)——用于同名重复挂载时唯一化 childId。 */
|
|
45
48
|
_moduleIds = new Set();
|
|
46
49
|
_disposables;
|
|
47
50
|
_children = new Set();
|
|
48
51
|
_parent;
|
|
52
|
+
/**
|
|
53
|
+
* post-dispose 注册政策(两档,各入口守卫引用此处):
|
|
54
|
+
* - 订阅类(on/middleware/contribute/provide/whenService):warn + no-op——调用方常是
|
|
55
|
+
* 插件的异步续段,清理路径上不抛错;也杜绝幽灵注册(provide 曾会向活总线闪发
|
|
56
|
+
* service:registered/unregistered,whenService 曾会真跑回调)。
|
|
57
|
+
* - 构造类(fork/useModule):抛错——在死 ctx 上造生命周期单元是编程错误,不是清理路径。
|
|
58
|
+
* - onDispose 特例:拆卸进行中(链未排空)仍进链、被本次清理正常等待(debug);
|
|
59
|
+
* 链已排空才就地执行且异步返回值不被等待(warn)。两种都不 no-op、不抛错——
|
|
60
|
+
* 它握着待释放的资源,丢弃即泄漏。
|
|
61
|
+
*/
|
|
49
62
|
_disposed = false;
|
|
50
63
|
/**
|
|
51
64
|
* 在飞的拆卸 promise。`_disposed` 在清理**开始前**置位,仅凭它早退会让后来者
|
|
@@ -64,11 +77,13 @@ export class Context {
|
|
|
64
77
|
* 会关,**但异步返回值不被等待**,于是 `disposeAsync` 的「返回时异步清理
|
|
65
78
|
* 已完成」承诺落空。
|
|
66
79
|
*
|
|
67
|
-
* 可达面要说清:`PluginManager`
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* `
|
|
80
|
+
* 可达面要说清:`PluginManager` 的 unload / disablePlugin / bouncePlugin 会**主动**
|
|
81
|
+
* 走进这个窗口——三者对在飞 ctx 直接 disposeAsync(先把 entry.state 改离
|
|
82
|
+
* 'activating' 让激活收尾让位,见 plugin-activation.ts 的接管检查),依赖的正是
|
|
83
|
+
* 本机制「先等 apply 落定再排空链」的承诺;`evictDownstreamConsumers` 同以
|
|
84
|
+
* entry.context 为判据走进窗口;recompute 仍只对 `'active'` 动手,
|
|
85
|
+
* `App.stop` 另有 `idle()` 挡在前面。宿主直调
|
|
86
|
+
* `disposeAsync` 与 `useModule` 的沙盒子 ctx 级联同样由本机制兜住。
|
|
72
87
|
*
|
|
73
88
|
* 记住 apply 的 promise 后,`disposeAsync` 可以先等它落定再排空链——迟到的
|
|
74
89
|
* disposer 就走**正常注册路径**进链,被正常 await。插件侧零改动。
|
|
@@ -109,6 +124,9 @@ export class Context {
|
|
|
109
124
|
* 创建子上下文(通常为每个插件创建一个)
|
|
110
125
|
*/
|
|
111
126
|
fork(id) {
|
|
127
|
+
if (this._disposed) {
|
|
128
|
+
throw new Error(`Context "${this.id}" 已 dispose,无法 fork("${id}")`);
|
|
129
|
+
}
|
|
112
130
|
const child = new Context({
|
|
113
131
|
id,
|
|
114
132
|
events: this._events,
|
|
@@ -125,20 +143,26 @@ export class Context {
|
|
|
125
143
|
}
|
|
126
144
|
// ---- 事件 ----
|
|
127
145
|
on(event, handler) {
|
|
128
|
-
|
|
129
|
-
|
|
146
|
+
if (this._disposed) {
|
|
147
|
+
this.logger.warn(`Context "${this.id}" 已 dispose,忽略 on("${event}")`);
|
|
148
|
+
return () => { };
|
|
149
|
+
}
|
|
150
|
+
const off = this._events.on(event, handler, this.id);
|
|
151
|
+
return this.trackDisposable(off, `on:${event}`);
|
|
130
152
|
}
|
|
131
153
|
/**
|
|
132
154
|
* 把一个底层退订原语登记到 disposable 链,并返回**自移除**的退订函数:
|
|
133
155
|
* 调用方手动退订时,闭包不再滞留 _disposables(否则它持有 handler 引用直到
|
|
134
156
|
* ctx.dispose 才释放——故所有注册 API 的退订都统一走此路径,杜绝该类泄漏)。
|
|
157
|
+
*
|
|
158
|
+
* label 进入链条目:泄漏排查与超时/抛错告警按它点名(`前缀:名字` 约定)。
|
|
135
159
|
*/
|
|
136
|
-
trackDisposable(off) {
|
|
160
|
+
trackDisposable(off, label) {
|
|
137
161
|
const dispose = () => {
|
|
138
162
|
this._disposables.remove(dispose);
|
|
139
163
|
off();
|
|
140
164
|
};
|
|
141
|
-
this._disposables.push(dispose);
|
|
165
|
+
this._disposables.push(dispose, label);
|
|
142
166
|
return dispose;
|
|
143
167
|
}
|
|
144
168
|
emit(event, ...args) {
|
|
@@ -155,6 +179,10 @@ export class Context {
|
|
|
155
179
|
* 但 dev 模式下会验证以避免 "entryId 与拥有者 plugin 脱联" 的 footgun。
|
|
156
180
|
*/
|
|
157
181
|
provide(name, instance, options) {
|
|
182
|
+
if (this._disposed) {
|
|
183
|
+
this.logger.warn(`Context "${this.id}" 已 dispose,忽略 provide("${name}")`);
|
|
184
|
+
return () => { };
|
|
185
|
+
}
|
|
158
186
|
const entryId = options?.entryId ?? this.id;
|
|
159
187
|
if (this.devMode) {
|
|
160
188
|
validateProvide({
|
|
@@ -162,7 +190,6 @@ export class Context {
|
|
|
162
190
|
name,
|
|
163
191
|
entryId,
|
|
164
192
|
explicitEntryId: options?.entryId !== undefined,
|
|
165
|
-
priority: options?.priority,
|
|
166
193
|
services: this._services,
|
|
167
194
|
logger: this.logger,
|
|
168
195
|
});
|
|
@@ -180,7 +207,8 @@ export class Context {
|
|
|
180
207
|
});
|
|
181
208
|
}
|
|
182
209
|
};
|
|
183
|
-
|
|
210
|
+
// 显式 entryId(一 plugin 多 entry,如 LLM 多模型)时用它点名,否则服务名已够定位
|
|
211
|
+
this._disposables.push(dispose, `provide:${options?.entryId ?? name}`);
|
|
184
212
|
emitServiceRegistered(this._events, this.logger, name);
|
|
185
213
|
this.logger.debug(`服务已注册: ${name}`);
|
|
186
214
|
return dispose;
|
|
@@ -201,7 +229,7 @@ export class Context {
|
|
|
201
229
|
* 设置某服务的偏好 provider(按 contextId)
|
|
202
230
|
*
|
|
203
231
|
* 语义:「偏好 > 优先级 > 注册顺序」。偏好者总是 `getService(name)` 的第一返回值,
|
|
204
|
-
* 即使其 priority
|
|
232
|
+
* 即使其 priority 数值低于其它 entry。
|
|
205
233
|
*
|
|
206
234
|
* 注:偏好可以提前于 entry 注册前设置——一旦目标 contextId 注册即刻生效。
|
|
207
235
|
* @returns 始终返回 true(偏好已记录)
|
|
@@ -237,6 +265,10 @@ export class Context {
|
|
|
237
265
|
}
|
|
238
266
|
// biome-ignore lint/suspicious/noConfusingVoidType: cb 可隐式返回 void 或显式返回 cleanup
|
|
239
267
|
whenService(name, cb) {
|
|
268
|
+
if (this._disposed) {
|
|
269
|
+
this.logger.warn(`Context "${this.id}" 已 dispose,忽略 whenService("${name}")`);
|
|
270
|
+
return () => { };
|
|
271
|
+
}
|
|
240
272
|
let cleanup;
|
|
241
273
|
let disposed = false;
|
|
242
274
|
/** 当前已挂载的胜者实例;undefined = 未挂载 */
|
|
@@ -269,7 +301,18 @@ export class Context {
|
|
|
269
301
|
attached = winner;
|
|
270
302
|
if (winner === undefined)
|
|
271
303
|
return;
|
|
272
|
-
|
|
304
|
+
// 统一错误政策:cb 抛错=warn+订阅保持。此前首挂(同步路径)抛错会逃逸
|
|
305
|
+
// 出 whenService 注册调用——复合 disposer 未入链未返回,留下半注册态;
|
|
306
|
+
// 重挂(事件路径)抛错则被 EventBus 吞成另一种沉默。两条路径同一条
|
|
307
|
+
// warn;attached 已记录本次胜者,不自动重试,等下次服务变更再对齐。
|
|
308
|
+
let ret;
|
|
309
|
+
try {
|
|
310
|
+
ret = cb(winner);
|
|
311
|
+
}
|
|
312
|
+
catch (err) {
|
|
313
|
+
this.logger.warn(`whenService('${name}') 回调抛错(订阅保持,等下次服务变更):`, err);
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
273
316
|
// cb 执行期间可能同步触发了本 whenService 的 dispose(如 cb 内部链式
|
|
274
317
|
// 卸载)。此时不能把新 cleanup 挂上去——dispose 已跑过 runCleanup 且
|
|
275
318
|
// disposed=true,挂上的 cleanup 将永不执行(泄漏)。直接立即执行掉。
|
|
@@ -313,7 +356,7 @@ export class Context {
|
|
|
313
356
|
runCleanup();
|
|
314
357
|
attached = undefined;
|
|
315
358
|
};
|
|
316
|
-
this._disposables.push(dispose);
|
|
359
|
+
this._disposables.push(dispose, `whenService:${name}`);
|
|
317
360
|
return dispose;
|
|
318
361
|
}
|
|
319
362
|
// ---- 中间件/钩子 ----
|
|
@@ -338,7 +381,11 @@ export class Context {
|
|
|
338
381
|
* });
|
|
339
382
|
*/
|
|
340
383
|
middleware(hook, fn) {
|
|
341
|
-
|
|
384
|
+
if (this._disposed) {
|
|
385
|
+
this.logger.warn(`Context "${this.id}" 已 dispose,忽略 middleware("${hook}")`);
|
|
386
|
+
return () => { };
|
|
387
|
+
}
|
|
388
|
+
return this.trackDisposable(this._hooks.register(hook, fn, this.id), `middleware:${hook}`);
|
|
342
389
|
}
|
|
343
390
|
/**
|
|
344
391
|
* 执行钩子链(语义见 {@link HookRegistry.run})。
|
|
@@ -378,11 +425,11 @@ export class Context {
|
|
|
378
425
|
this.logger.warn(`Context "${this.id}" 已 dispose,忽略 contribute("${point}")`);
|
|
379
426
|
return () => { };
|
|
380
427
|
}
|
|
381
|
-
const mapKey = `${point}
|
|
428
|
+
const mapKey = `${point}${Context.CONTRIB_KEY_SEP}${spec.id}`;
|
|
382
429
|
// 同键重注册 = 替换:先撤旧登记(自移除出 dispose 链 + 撤注册表旧条目),
|
|
383
430
|
// 再写新的——先删后写,避免旧闭包滞留(见 _contributionDisposers)。
|
|
384
431
|
this._contributionDisposers.get(mapKey)?.();
|
|
385
|
-
const rawOff = this.trackDisposable(this._contributions.register(point, spec, this.id));
|
|
432
|
+
const rawOff = this.trackDisposable(this._contributions.register(point, spec, this.id), `contribute:${point}:${spec.id}`);
|
|
386
433
|
// 包一层做自移除:不删登记表条目的话,`Map → dispose 闭包 → off 闭包 →
|
|
387
434
|
// entry → spec(及其 build 捕获的数据)` 这条持有链会让退订过的贡献一直
|
|
388
435
|
// 活到 ctx.dispose(动态 id 场景下无界增长)。恒等卫防误删同键新注册。
|
|
@@ -491,6 +538,17 @@ export class Context {
|
|
|
491
538
|
* @returns 取消该清理回调的函数(在 dispose 前调用可阻止执行)
|
|
492
539
|
*/
|
|
493
540
|
onDispose(fn, label) {
|
|
541
|
+
if (this._disposed) {
|
|
542
|
+
// 判据必须用链的 disposed,不是本 ctx 的 _disposed——后者在清理**开始前**就置位,
|
|
543
|
+
// 中间隔着等 activation / 级联子 ctx 两段窗口;落在窗口里的迟到 disposer 仍进链、
|
|
544
|
+
// 被本次清理正常等待(设计内正确路径,见 _activation),只有链已排空才真是就地执行。
|
|
545
|
+
if (this._disposables.disposed) {
|
|
546
|
+
this.logger.warn(`Context "${this.id}" 已 dispose,onDispose${label ? `("${label}")` : ''} 将就地执行(异步返回值不被等待)`);
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
this.logger.debug(`Context "${this.id}" 拆卸进行中,onDispose${label ? `("${label}")` : ''} 纳入本次清理链`);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
494
552
|
const who = label ? ` [${label}]` : '';
|
|
495
553
|
const wrapped = () => {
|
|
496
554
|
try {
|
|
@@ -500,12 +558,12 @@ export class Context {
|
|
|
500
558
|
// 这是 onDispose 异步契约真正兑现的通道。错误就地消化,单个清理
|
|
501
559
|
// 失败不拖垮链上其他清理;同步 dispose() 忽略返回值(不等待)。
|
|
502
560
|
return ret.catch(err => {
|
|
503
|
-
this.logger.
|
|
561
|
+
this.logger.warn(`onDispose 异步清理抛错(已忽略)${who}:`, err);
|
|
504
562
|
});
|
|
505
563
|
}
|
|
506
564
|
}
|
|
507
565
|
catch (err) {
|
|
508
|
-
this.logger.
|
|
566
|
+
this.logger.warn(`onDispose 清理抛错(已忽略)${who}:`, err);
|
|
509
567
|
}
|
|
510
568
|
};
|
|
511
569
|
this._disposables.push(wrapped, label);
|
|
@@ -515,6 +573,26 @@ export class Context {
|
|
|
515
573
|
get disposableCount() {
|
|
516
574
|
return this._disposables.size;
|
|
517
575
|
}
|
|
576
|
+
/**
|
|
577
|
+
* @internal 链序标签名单(诊断 / 测试用):把「卸载后还剩几个」升级为「剩的是谁」。
|
|
578
|
+
* 内核门面注册按 `前缀:名字` 约定自动点名(on:/middleware:/contribute:/provide:/whenService:),
|
|
579
|
+
* onDispose 用作者传的 label;未命名项以 undefined 占位——占位本身是信息
|
|
580
|
+
* (说明有未传 label 的 onDispose,排查时按链序号对照 `[#i]` 告警)。
|
|
581
|
+
*/
|
|
582
|
+
listDisposables() {
|
|
583
|
+
return this._disposables.labels();
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* @internal 贡献登记表条目名单(诊断 / 测试用)。与 {@link listDisposables} 是
|
|
587
|
+
* 两本独立的账(同 {@link contributionDisposerCount} 的注释)——登记表泄漏
|
|
588
|
+
* 只有这里看得见。key 天然携带贡献点与贡献 id,直接拆给调用方。
|
|
589
|
+
*/
|
|
590
|
+
listContributions() {
|
|
591
|
+
return [...this._contributionDisposers.keys()].map(k => {
|
|
592
|
+
const sep = k.indexOf(Context.CONTRIB_KEY_SEP);
|
|
593
|
+
return { point: k.slice(0, sep), id: k.slice(sep + 1) };
|
|
594
|
+
});
|
|
595
|
+
}
|
|
518
596
|
/**
|
|
519
597
|
* @internal 登记本 ctx 的初始化在飞 promise(见 {@link _activation})。
|
|
520
598
|
*
|
|
@@ -601,12 +679,11 @@ export class Context {
|
|
|
601
679
|
this._disposed = true;
|
|
602
680
|
// 等初始化落定,再动任何拆卸动作(见 _activation)。
|
|
603
681
|
//
|
|
604
|
-
//
|
|
605
|
-
//
|
|
606
|
-
//
|
|
607
|
-
//
|
|
608
|
-
//
|
|
609
|
-
// (`useModule` 另有硬守卫,续段调它是抛错而非建 ctx)。
|
|
682
|
+
// 位置必须在这里——排在本方法末段的链排空**之前**:apply 续段迟到的 `onDispose`
|
|
683
|
+
// 要赶上本次清理链,这是 disposeAsync「返回即异步清理完成」承诺的落点。
|
|
684
|
+
// 也必须排在子上下文销毁之前:续段可能对先前 fork 出的子 ctx 挂 onDispose,
|
|
685
|
+
// 下移会让该 disposer 落到已排空的子链上就地执行、返回值不被等待。
|
|
686
|
+
// (provide/fork 已各自有 post-dispose 守卫,不再构成本 await 的位置理由。)
|
|
610
687
|
//
|
|
611
688
|
// 仅异步路径等待。同步 `dispose()` 承诺「首个 await 前同步执行完」,可观察
|
|
612
689
|
// 时序与纯同步实现一致——在这里插 await 会打破它,且同步路径本就不等待任何
|
|
@@ -626,12 +703,13 @@ export class Context {
|
|
|
626
703
|
this._children.clear();
|
|
627
704
|
// 记录此上下文注册的服务名,以便清理后发射事件
|
|
628
705
|
const removedServices = this._services.unregisterByContext(this.id);
|
|
629
|
-
//
|
|
630
|
-
//
|
|
631
|
-
//
|
|
632
|
-
//
|
|
706
|
+
// 钩子、贡献与事件监听在清理链**之前**注销:异步等待清理的整个窗口内,
|
|
707
|
+
// 本插件的中间件不得再响应消息、贡献不得再被组装器收集、事件 handler
|
|
708
|
+
// 不得再响应事件——半拆状态不外露。同步路径同一 tick 内完成,先后不可
|
|
709
|
+
// 观察;清理链里各注册的 disposer 靠存在性检查/身份卫自然 no-op,不会双删。
|
|
633
710
|
this._hooks.unregisterByContext(this.id);
|
|
634
711
|
this._contributions.unregisterByContext(this.id);
|
|
712
|
+
this._events.unregisterByContext(this.id);
|
|
635
713
|
// 逆序执行清理(unregisterByContext 已整体移除服务,provide 的 dispose 会安全跳过)
|
|
636
714
|
if (wait)
|
|
637
715
|
await this._disposables.disposeAsync(timeoutMs);
|