@aalis/core 0.11.0 → 0.12.1

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.
Files changed (52) hide show
  1. package/dist/app.d.ts +11 -2
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +49 -7
  4. package/dist/app.js.map +1 -1
  5. package/dist/config.d.ts +5 -1
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +5 -1
  8. package/dist/config.js.map +1 -1
  9. package/dist/context.d.ts +41 -8
  10. package/dist/context.d.ts.map +1 -1
  11. package/dist/context.js +109 -31
  12. package/dist/context.js.map +1 -1
  13. package/dist/contributions.d.ts +3 -3
  14. package/dist/disposable-chain.d.ts +3 -1
  15. package/dist/disposable-chain.d.ts.map +1 -1
  16. package/dist/disposable-chain.js +7 -3
  17. package/dist/disposable-chain.js.map +1 -1
  18. package/dist/events.d.ts +10 -2
  19. package/dist/events.d.ts.map +1 -1
  20. package/dist/events.js +30 -7
  21. package/dist/events.js.map +1 -1
  22. package/dist/index.d.ts +2 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/plugin-activation.d.ts +23 -1
  27. package/dist/plugin-activation.d.ts.map +1 -1
  28. package/dist/plugin-activation.js +71 -8
  29. package/dist/plugin-activation.js.map +1 -1
  30. package/dist/plugin-topology.d.ts.map +1 -1
  31. package/dist/plugin-topology.js +16 -17
  32. package/dist/plugin-topology.js.map +1 -1
  33. package/dist/plugin.d.ts +5 -3
  34. package/dist/plugin.d.ts.map +1 -1
  35. package/dist/plugin.js +68 -42
  36. package/dist/plugin.js.map +1 -1
  37. package/dist/services-helpers.d.ts +0 -2
  38. package/dist/services-helpers.d.ts.map +1 -1
  39. package/dist/services-helpers.js +1 -12
  40. package/dist/services-helpers.js.map +1 -1
  41. package/dist/services.d.ts +7 -28
  42. package/dist/services.d.ts.map +1 -1
  43. package/dist/services.js +2 -28
  44. package/dist/services.js.map +1 -1
  45. package/dist/types/app.d.ts +0 -1
  46. package/dist/types/app.d.ts.map +1 -1
  47. package/dist/types/plugin.d.ts +3 -2
  48. package/dist/types/plugin.d.ts.map +1 -1
  49. package/dist/types/plugin.js.map +1 -1
  50. package/dist/types/services.js +2 -2
  51. package/dist/types/services.js.map +1 -1
  52. package/package.json +1 -1
@@ -2,12 +2,34 @@ import type { Context } from './context.js';
2
2
  import type { Logger } from './logger.js';
3
3
  import type { PluginEntry, PluginState, RecomputeReason } from './types/plugin.js';
4
4
  interface ActivationDeps {
5
- plugins: Map<string, PluginEntry>;
6
5
  rootCtx: Context;
7
6
  logger: Logger;
8
7
  /** 激活失败回滚 disposeAsync 时单个异步清理项的等待上限(毫秒;缺省不设限) */
9
8
  disposeTimeoutMs?: number;
10
9
  }
10
+ /**
11
+ * 拆卸方的唯一形状:先写终态 → 带超时拆 ctx → 清引用 → 发 plugin:unloaded。
12
+ *
13
+ * 这四步的**顺序**是并发正确性的承重墙,此前以约定形式散抄在五个拆卸点,
14
+ * 漏抄或抄错顺序就是覆写竞态(刀 0 的 Phase A 回归即实证)。收编后约定
15
+ * 只剩一条:「拆卸不许手写,调本函数」——由 test/architecture/
16
+ * state-write-sites.test.ts 的写入点定格测试机器守。
17
+ *
18
+ * - 先写终态:拆卸 await 期间并发管理操作的写入必须是后写者(管理意图胜);
19
+ * 同时给 activatePlugin 的接管检查提供让位信号。
20
+ * - 判据用 entry.context 而非 state:'activating' 的在飞 ctx 同样要拆,
21
+ * disposeAsync 会先等 apply 落定(Context._activation)。
22
+ * - dispose 统一 try/catch:拆卸抛出不得让 entry.context 悬置(否则
23
+ * 重激活闸永挂、插件静默不可激活)。
24
+ * - 清引用带恒等卫:并发路径若已 join 同一次拆卸并清过引用,不重复置空。
25
+ *
26
+ * 唯一不用本函数的拆卸点是 bouncePlugin:它要在写终态与拆卸之间插入
27
+ * evictDownstreamConsumers(该 await 窗口要求状态已先落),塞进本函数
28
+ * 需要回调钩子——宁可让它保持内联并就地注释,也不给这里加第三个参数。
29
+ */
30
+ export declare function retireEntry(entry: PluginEntry, targetState: PluginState, deps: ActivationDeps, opts?: {
31
+ emitUnloaded?: boolean;
32
+ }): Promise<void>;
11
33
  /**
12
34
  * 计算单个 entry 的目标状态。
13
35
  *
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-activation.d.ts","sourceRoot":"","sources":["../src/plugin-activation.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEnF,UAAU,cAAc;IACtB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,WAAW,CAc7G;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAqE5F"}
1
+ {"version":3,"file":"plugin-activation.d.ts","sourceRoot":"","sources":["../src/plugin-activation.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEnF,UAAU,cAAc;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,cAAc,EACpB,IAAI,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,WAAW,CAc7G;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8F5F"}
@@ -5,10 +5,49 @@
5
5
  // - computeTargetState:给定 reason,单个 entry 的目标态是什么
6
6
  // - activatePlugin:fork ctx → apply → 校验 provides → 标记 active/error
7
7
  //
8
- // 这些都需要 PluginManager 的状态(plugins map / rootCtx),
8
+ // 这些都需要 PluginManager 的状态(rootCtx / logger),
9
9
  // 但被有意提成 free function:传入 deps 对象,方便单测 mock + 让 PluginManager
10
10
  // 自身只负责"事件路由 + recompute 编排"。
11
11
  // ============================================================
12
+ /**
13
+ * 拆卸方的唯一形状:先写终态 → 带超时拆 ctx → 清引用 → 发 plugin:unloaded。
14
+ *
15
+ * 这四步的**顺序**是并发正确性的承重墙,此前以约定形式散抄在五个拆卸点,
16
+ * 漏抄或抄错顺序就是覆写竞态(刀 0 的 Phase A 回归即实证)。收编后约定
17
+ * 只剩一条:「拆卸不许手写,调本函数」——由 test/architecture/
18
+ * state-write-sites.test.ts 的写入点定格测试机器守。
19
+ *
20
+ * - 先写终态:拆卸 await 期间并发管理操作的写入必须是后写者(管理意图胜);
21
+ * 同时给 activatePlugin 的接管检查提供让位信号。
22
+ * - 判据用 entry.context 而非 state:'activating' 的在飞 ctx 同样要拆,
23
+ * disposeAsync 会先等 apply 落定(Context._activation)。
24
+ * - dispose 统一 try/catch:拆卸抛出不得让 entry.context 悬置(否则
25
+ * 重激活闸永挂、插件静默不可激活)。
26
+ * - 清引用带恒等卫:并发路径若已 join 同一次拆卸并清过引用,不重复置空。
27
+ *
28
+ * 唯一不用本函数的拆卸点是 bouncePlugin:它要在写终态与拆卸之间插入
29
+ * evictDownstreamConsumers(该 await 窗口要求状态已先落),塞进本函数
30
+ * 需要回调钩子——宁可让它保持内联并就地注释,也不给这里加第三个参数。
31
+ */
32
+ export async function retireEntry(entry, targetState, deps, opts) {
33
+ entry.state = targetState;
34
+ const ctx = entry.context;
35
+ if (!ctx)
36
+ return;
37
+ try {
38
+ await ctx.disposeAsync(deps.disposeTimeoutMs);
39
+ }
40
+ catch (err) {
41
+ deps.logger.error(`插件 "${entry.instanceId}" dispose 抛错: ${err instanceof Error ? err.message : String(err)}`);
42
+ }
43
+ if (entry.context === ctx)
44
+ entry.context = undefined;
45
+ if (opts?.emitUnloaded !== false) {
46
+ deps.rootCtx.emit('plugin:unloaded', entry.instanceId).catch(err => {
47
+ deps.logger.warn(`emit plugin:unloaded 失败 (${entry.instanceId}): ${err}`);
48
+ });
49
+ }
50
+ }
12
51
  /**
13
52
  * 计算单个 entry 的目标状态。
14
53
  *
@@ -46,6 +85,12 @@ export async function activatePlugin(entry, deps) {
46
85
  const { rootCtx, logger } = deps;
47
86
  if (entry.state !== 'pending')
48
87
  return;
88
+ // 旧 ctx 仍在拆卸中(bouncePlugin 先置 'pending'、后异步拆旧 ctx,拆完才清
89
+ // entry.context):此刻重新激活会让新旧实例同 contextId 并存,旧链排空时的
90
+ // unregisterByContext 会连新实例的注册一并扫掉。跳过本轮,等管理路径收尾
91
+ // 后的 softReload 重新调度。
92
+ if (entry.context)
93
+ return;
49
94
  for (const dep of entry.requiredDeps) {
50
95
  if (rootCtx.getService(dep.service) === undefined) {
51
96
  logger.debug(`插件 "${entry.instanceId}" 等待服务: ${dep.service}`);
@@ -61,6 +106,21 @@ export async function activatePlugin(entry, deps) {
61
106
  const applying = Promise.resolve(entry.module.apply(ctx, entry.config));
62
107
  ctx.trackActivation(applying);
63
108
  await applying;
109
+ // 接管检查(CAS 式):unload / disablePlugin / bouncePlugin 撞上在飞 apply 时
110
+ // 会先把 state 改离 'activating' 再 disposeAsync(等的正是上面这个 applying)。
111
+ // 此处一旦观察到 state 被改走,说明终态与 ctx 的拆卸责任已归管理路径所有,
112
+ // 本次激活的收尾(置 active / 报 error / 发 plugin:loaded)全部让位。
113
+ // 检查与下方各写入之间无 await,不存在二次窗口。
114
+ if (entry.state !== 'activating') {
115
+ logger.debug(`插件 "${entry.instanceId}" 激活期间被管理操作接管(现态 ${entry.state}),本次激活让位`);
116
+ return;
117
+ }
118
+ // 激活期间 ctx 被拆卸(宿主直调 disposeAsync 撞上在飞 apply,state 未被改走):
119
+ // provide 已被 post-dispose 守卫吞掉,provides 校验必然失败——但那是框架层
120
+ // 竞态,不是作者的声明错误,必须如实归因,不能报「声明了但未注册」的假罪名。
121
+ if (ctx.disposed) {
122
+ throw new Error('激活期间 Context 已被拆卸,插件未完成注册');
123
+ }
64
124
  if (entry.module.provides) {
65
125
  const missing = entry.module.provides.filter(name => !rootCtx.serviceContainer.hasByContext(name, entry.instanceId));
66
126
  if (missing.length > 0) {
@@ -87,15 +147,18 @@ export async function activatePlugin(entry, deps) {
87
147
  }
88
148
  catch (err) {
89
149
  const message = err instanceof Error ? err.message : String(err);
150
+ // 接管让位同上:管理路径已持有终态与 ctx 的拆卸责任,此处再写 error /
151
+ // 二次 dispose 会踩掉 disposed / disabled / pending 终态。
152
+ if (entry.state !== 'activating') {
153
+ logger.debug(`插件 "${entry.instanceId}" 激活中止且已被管理操作接管(现态 ${entry.state}): ${message}`);
154
+ return;
155
+ }
90
156
  logger.error(`插件 "${entry.instanceId}" 激活失败: ${message}`);
91
- // 先写终态、再等清理:recompute 的单飞早退是刻意设计(见 recompute
92
- // 注释——join 在飞 promise 会在 apply 内同步触发 recompute 时自我死锁),
93
- // 并发观察者(getStatus / 早退返回的调用方)依赖状态机即时转移;异步
94
- // 清理只影响本函数何时返回,不该拖延 'error' 的可见时点。
95
- entry.state = 'error';
157
+ // retireEntry 先写 'error' 再等清理——并发观察者(getStatus / 早退返回的
158
+ // 调用方)依赖状态机即时转移,异步清理不该拖延 'error' 的可见时点。
159
+ // 不发 unloaded:本插件从未 loaded 过,配对事件无从谈起。
96
160
  entry.error = message;
97
- await ctx.disposeAsync(deps.disposeTimeoutMs);
98
- entry.context = undefined;
161
+ await retireEntry(entry, 'error', deps, { emitUnloaded: false });
99
162
  return;
100
163
  }
101
164
  // 激活成败只由 apply/provides 校验决定。emit 放在 try 块外:旁观插件的
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-activation.js","sourceRoot":"","sources":["../src/plugin-activation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-activation.js","sourceRoot":"","sources":["../src/plugin-activation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-topology.d.ts","sourceRoot":"","sources":["../src/plugin-topology.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CA+CpF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BhB"}
1
+ {"version":3,"file":"plugin-topology.d.ts","sourceRoot":"","sources":["../src/plugin-topology.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CA+CpF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IACnD,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBhB"}
@@ -3,12 +3,15 @@
3
3
  //
4
4
  // 从 plugin.ts 拆出的纯依赖图算法:
5
5
  // - topoSortByDeps:按"提供者→消费者"方向的 Kahn 拓扑排序
6
- // - evictDownstreamConsumers:把所有依赖某 provider provided 服务的下游
7
- // active 插件降级为 pending(用于 updatePluginConfig / bouncePlugin
8
- // 瞬态:provider 即将被 dispose+重启,下游持有的服务引用即失效)
6
+ // - evictDownstreamConsumers:把依赖某 provider provided 服务、且声明了
7
+ // requiresBounceOnDepChange 的下游持活 ctx 插件(active/activating)降级为
8
+ // pending(默认不级联,
9
+ // 期望下游惰性 getService;用于 updatePluginConfig / bouncePlugin 瞬态:
10
+ // provider 即将被 dispose+重启,下游持有的服务引用即失效)
9
11
  //
10
12
  // 这些是无状态/弱状态的操作,分出去让 PluginManager 主体只关心生命周期编排。
11
13
  // ============================================================
14
+ import { retireEntry } from './plugin-activation.js';
12
15
  /**
13
16
  * 按"提供者 → 消费者"方向的拓扑排序(Kahn)。
14
17
  *
@@ -102,27 +105,23 @@ export async function evictDownstreamConsumers(args) {
102
105
  return;
103
106
  const providedSet = new Set(provided);
104
107
  for (const other of plugins.values()) {
105
- if (other === provider || other.state !== 'active')
108
+ // 目标集按状态正面枚举 active/activating('activating' 的在飞下游同样持着
109
+ // 即将失效的 provider 引用,漏疏散会让它抱着死引用完成激活;retireEntry 先写
110
+ // 'pending',在飞激活由接管检查让位)。不能仅凭 ctx 在场判目标:disabled/
111
+ // error/disposed 的拆卸窗口内 ctx 未清,凭 ctx 会把刚写下的终态覆写回
112
+ // 'pending'——实测复活刚禁用的插件。ctx 判「有没有东西要拆」,状态判
113
+ // 「是不是合法疏散目标」,两个问题两个判据。
114
+ if (other === provider)
115
+ continue;
116
+ if (other.state !== 'active' && other.state !== 'activating')
106
117
  continue;
107
118
  if (!other.module.requiresBounceOnDepChange)
108
119
  continue;
109
120
  const allDeps = [...other.requiredDeps, ...other.optionalDeps];
110
121
  if (!allDeps.some(d => providedSet.has(d.service)))
111
122
  continue;
112
- if (other.context) {
113
- try {
114
- await other.context.disposeAsync(disposeTimeoutMs);
115
- }
116
- catch (err) {
117
- logger.error(`下游消费者 "${other.instanceId}" dispose 抛错: ${err instanceof Error ? err.message : String(err)}`);
118
- }
119
- other.context = undefined;
120
- }
121
- other.state = 'pending';
123
+ await retireEntry(other, 'pending', { rootCtx, logger, disposeTimeoutMs });
122
124
  logger.info(`级联 bounce 下游消费者 "${other.instanceId}"(requiresBounceOnDepChange=true,依赖 provider "${provider.instanceId}")`);
123
- rootCtx.emit('plugin:unloaded', other.instanceId).catch(err => {
124
- logger.warn(`emit plugin:unloaded 失败 (${other.instanceId}): ${err}`);
125
- });
126
125
  }
127
126
  }
128
127
  //# sourceMappingURL=plugin-topology.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-topology.js","sourceRoot":"","sources":["../src/plugin-topology.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-topology.js","sourceRoot":"","sources":["../src/plugin-topology.ts"],"names":[],"mappings":"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"}
package/dist/plugin.d.ts CHANGED
@@ -9,7 +9,7 @@ export { parseInstanceId };
9
9
  *
10
10
  * 负责:
11
11
  * - 注册/加载/卸载插件
12
- * - 依赖追踪 (required + optional, 支持 capability 匹配)
12
+ * - 依赖追踪 (required + optional,判据=服务是否在容器中)
13
13
  * - 当所需服务就绪时自动激活插件
14
14
  * - 当所需服务移除时自动停用插件
15
15
  * - 插件启用/禁用控制
@@ -79,6 +79,8 @@ export declare class PluginManager {
79
79
  * 卸载一个插件
80
80
  */
81
81
  unload(name: string): Promise<void>;
82
+ /** retireEntry 的 deps 便签(字段皆 private,无法把 this 当结构化 deps 传)。 */
83
+ private retire;
82
84
  /**
83
85
  * 启用一个已禁用的插件
84
86
  */
@@ -161,8 +163,8 @@ export declare class PluginManager {
161
163
  * 5. 若本轮有变动则继续下一轮,直到稳定或达到 maxRounds。
162
164
  * 6. 非 shutdown 时发出 plugins:changed。
163
165
  *
164
- * Aalis 直接用"服务在不在 + capabilities 命中"
165
- * 做判断 —— 表达力等价、复杂度更低。
166
+ * Aalis 直接用"服务在不在容器里"做判断(capability 匹配层已于 0.5.0
167
+ * 删除)—— 表达力等价、复杂度更低。
166
168
  */
167
169
  recompute(reason: RecomputeReason): Promise<void>;
168
170
  /** 单次完整重算:fixed-point 状态转移 + (非关机)plugins:changed 通知 */
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,eAAe,EACf,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B;;;;;;;;;GASG;AACH,qBAAa,aAAa;IAsEtB,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAtEpC,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,oDAAoD;IACpD,OAAO,CAAC,SAAS,CAAS;IAC1B;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,KAAK,SAAS,GAEpB;IACD;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAAgC;IACpD;;;;;OAKG;IACH,OAAO,CAAC,YAAY,CAAS;IAE7B,mCAAmC;IACnC,cAAc,IAAI,OAAO;IAIzB,4DAA4D;IAC5D,OAAO,CAAC,WAAW,CAAyB;IAE5C;;;;;;;;;;OAUG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,OAAO,CAAC,iBAAiB;gBAQvB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM;IACd,mDAAmD;IAClC,gBAAgB,CAAC,EAAE,MAAM,YAAA;IAmB5C;;;;;;OAMG;IACG,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC9G;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BzC;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAalD;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiCnD;;;;;OAKG;IACH,SAAS,IAAI,iBAAiB,EAAE;IAoBhC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIhD;;;OAGG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzF;;;;;;;;;;;OAWG;IACG,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,YAAY,CAAA;KAAE,GACjE,OAAO,CAAC,OAAO,CAAC;IA+CnB;;;;;;;;;;;;;;;OAeG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;;;;OAOG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;;;;;;;;;;;;;;;;OAkBG;IACG,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCvD,wDAAwD;YAC1C,aAAa;CA8G5B"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,eAAe,EACf,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B;;;;;;;;;GASG;AACH,qBAAa,aAAa;IAsEtB,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAtEpC,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,oDAAoD;IACpD,OAAO,CAAC,SAAS,CAAS;IAC1B;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,KAAK,SAAS,GAEpB;IACD;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAAgC;IACpD;;;;;OAKG;IACH,OAAO,CAAC,YAAY,CAAS;IAE7B,mCAAmC;IACnC,cAAc,IAAI,OAAO;IAIzB,4DAA4D;IAC5D,OAAO,CAAC,WAAW,CAAyB;IAE5C;;;;;;;;;;OAUG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrB,OAAO,CAAC,iBAAiB;gBAQvB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM;IACd,mDAAmD;IAClC,gBAAgB,CAAC,EAAE,MAAM,YAAA;IAmB5C;;;;;;OAMG;IACG,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC9G;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCzC,+DAA+D;IAC/D,OAAO,CAAC,MAAM;IASd;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlD;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BnD;;;;;OAKG;IACH,SAAS,IAAI,iBAAiB,EAAE;IAoBhC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIhD;;;OAGG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzF;;;;;;;;;;;OAWG;IACG,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,YAAY,CAAA;KAAE,GACjE,OAAO,CAAC,OAAO,CAAC;IAkEnB;;;;;;;;;;;;;;;OAeG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;;;;OAOG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;;;;;;;;;;;;;;;;OAkBG;IACG,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCvD,wDAAwD;YAC1C,aAAa;CAiG5B"}
package/dist/plugin.js CHANGED
@@ -1,4 +1,4 @@
1
- import { activatePlugin, computeTargetState } from './plugin-activation.js';
1
+ import { activatePlugin, computeTargetState, retireEntry } from './plugin-activation.js';
2
2
  import { evictDownstreamConsumers, topoSortByDeps } from './plugin-topology.js';
3
3
  import { normalizeDependency } from './services.js';
4
4
  import { parseInstanceId, } from './types/plugin.js';
@@ -9,7 +9,7 @@ export { parseInstanceId };
9
9
  *
10
10
  * 负责:
11
11
  * - 注册/加载/卸载插件
12
- * - 依赖追踪 (required + optional, 支持 capability 匹配)
12
+ * - 依赖追踪 (required + optional,判据=服务是否在容器中)
13
13
  * - 当所需服务就绪时自动激活插件
14
14
  * - 当所需服务移除时自动停用插件
15
15
  * - 插件启用/禁用控制
@@ -147,19 +147,29 @@ export class PluginManager {
147
147
  const entry = this.plugins.get(name);
148
148
  if (!entry)
149
149
  return;
150
+ // 'disposed' 单向化的 unload 侧:已有卸载在途(或停机遗留终态)时不再二次
151
+ // retire/emit——join 其拆卸(disposeAsync 幂等)后只确保注册表摘除。删除必须
152
+ // 带恒等卫:并发首个 unload 完成后同 id 可能已重新注册,按名盲删会把无辜的
153
+ // 新 entry 扫出注册表,留下注册表外的活实例。
154
+ if (entry.state === 'disposed') {
155
+ const inflight = entry.context;
156
+ if (inflight)
157
+ await inflight.disposeAsync(this.disposeTimeoutMs);
158
+ if (this.plugins.get(name) === entry)
159
+ this.plugins.delete(name);
160
+ return;
161
+ }
150
162
  // dispose 段守卫(与 disablePlugin 对齐):dispose 触发的反应式 recompute
151
163
  // 排队到收尾的 softReload,避免在 entry 半卸载态下重算。
152
164
  this.suspendDepth++;
153
165
  try {
154
- if (entry.state === 'active' && entry.context) {
155
- await entry.context.disposeAsync(this.disposeTimeoutMs);
156
- entry.context = undefined;
157
- this.rootCtx.emit('plugin:unloaded', name).catch(err => {
158
- this.logger.warn(`emit plugin:unloaded 失败 (${name}): ${err}`);
159
- });
160
- }
161
- entry.state = 'disposed';
162
- this.plugins.delete(name);
166
+ // delete 必须留在拆卸**之后**:注册表是 register/rescan 的查重闸
167
+ // (plugins.has(id)),提前摘除会让同 id 在旧 ctx 排空期间重新注册,
168
+ // 新实例与旧 ctx 同 contextId,旧链的 unregisterByContext 会把新实例
169
+ // 的注册连根扫掉。
170
+ await this.retire(entry, 'disposed');
171
+ if (this.plugins.get(name) === entry)
172
+ this.plugins.delete(name);
163
173
  this.logger.info(`插件已卸载: ${name}`);
164
174
  }
165
175
  finally {
@@ -168,6 +178,10 @@ export class PluginManager {
168
178
  // 级联重算:依赖被卸载插件所提供服务的下游需要转 pending
169
179
  await this.softReload();
170
180
  }
181
+ /** retireEntry 的 deps 便签(字段皆 private,无法把 this 当结构化 deps 传)。 */
182
+ retire(entry, target, opts) {
183
+ return retireEntry(entry, target, { rootCtx: this.rootCtx, logger: this.logger, disposeTimeoutMs: this.disposeTimeoutMs }, opts);
184
+ }
171
185
  /**
172
186
  * 启用一个已禁用的插件
173
187
  */
@@ -175,8 +189,13 @@ export class PluginManager {
175
189
  const entry = this.plugins.get(name);
176
190
  if (!entry)
177
191
  return false;
192
+ if (entry.state === 'disposed')
193
+ return false; // 正在卸载,'disposed' 对管理路径单向(见 bouncePlugin 内注释)
178
194
  if (entry.state !== 'disabled' && entry.state !== 'error')
179
195
  return true; // 已经启用
196
+ // 依赖不变量:disabled/error 态的 entry 必然 context 已清(disable 与激活失败
197
+ // 都经 retireEntry 清引用;锚在 admin-during-activation 测试)——否则此处转
198
+ // pending 后会被激活侧的「旧 ctx 未清」闸永久跳过。
180
199
  entry.state = 'pending';
181
200
  entry.error = undefined;
182
201
  this.rootCtx.config.setPluginEnabled(name, true);
@@ -195,20 +214,15 @@ export class PluginManager {
195
214
  this.logger.warn(`核心插件 "${name}" 不能被禁用`);
196
215
  return false;
197
216
  }
217
+ if (entry.state === 'disposed')
218
+ return false; // 正在卸载,'disposed' 对管理路径单向(见 bouncePlugin 内注释)
198
219
  if (entry.state === 'disabled')
199
220
  return true; // 已经禁用
200
221
  // dispose 段守卫:期间反应式 recompute 排队到收尾的 softReload
201
222
  this.suspendDepth++;
202
223
  try {
203
- if (entry.state === 'active' && entry.context) {
204
- await entry.context.disposeAsync(this.disposeTimeoutMs);
205
- entry.context = undefined;
206
- this.rootCtx.emit('plugin:unloaded', name).catch(err => {
207
- this.logger.warn(`emit plugin:unloaded 失败 (${name}): ${err}`);
208
- });
209
- }
210
- entry.state = 'disabled';
211
224
  this.rootCtx.config.setPluginEnabled(name, false);
225
+ await this.retire(entry, 'disabled');
212
226
  this.logger.info(`插件已禁用: ${name}`);
213
227
  }
214
228
  finally {
@@ -275,6 +289,14 @@ export class PluginManager {
275
289
  this.logger.warn(`bouncePlugin: 插件 "${name}" 处于 disabled 态,跳过`);
276
290
  return false;
277
291
  }
292
+ // 'disposed' 对管理路径单向(含卸载在途与停机后的遗留终态两种情形):
293
+ // unload 写入终态与从注册表摘除之间隔着 retire 的微任务(即使无 ctx 可拆,
294
+ // await 也让出)——此窗口内把它覆写回 'pending' 会重新武装 entry,激活出
295
+ // 一个注册表外的永生孤儿实例;停机后覆写则会把插件误写进持久化禁用清单。
296
+ if (entry.state === 'disposed') {
297
+ this.logger.debug(`bouncePlugin: 插件 "${name}" 已进入 disposed 终态(卸载在途或已停机),跳过`);
298
+ return false;
299
+ }
278
300
  const newConfig = opts?.config;
279
301
  const newModule = opts?.module;
280
302
  if (newConfig) {
@@ -287,7 +309,16 @@ export class PluginManager {
287
309
  // recompute 不能在 entry 尚未转 pending 时跑——会把半 bounce 态误判。
288
310
  this.suspendDepth++;
289
311
  try {
290
- if (entry.state === 'active' && entry.context) {
312
+ // 唯一不走 retireEntry 的拆卸点(见其 JSDoc):写终态与拆卸之间要插入
313
+ // evictDownstreamConsumers,且该 await 窗口要求状态已先落——塞进 helper
314
+ // 需要回调钩子,不值得。本块内联复刻 helper 的四步顺序,勿改动次序。
315
+ entry.state = 'pending';
316
+ entry.error = undefined;
317
+ // ctx 先捕获:evict 的 await 期间并发管理操作可能已拆掉并清空
318
+ // entry.context,重读会 TypeError 并越过收尾的 softReload(queuedReason
319
+ // 悬挂 → idle() 永不落定)。disposeAsync 幂等,重复调用只会等在飞拆卸。
320
+ const ctx = entry.context;
321
+ if (ctx) {
291
322
  await evictDownstreamConsumers({
292
323
  provider: entry,
293
324
  plugins: this.plugins,
@@ -295,14 +326,18 @@ export class PluginManager {
295
326
  logger: this.logger,
296
327
  disposeTimeoutMs: this.disposeTimeoutMs,
297
328
  });
298
- await entry.context.disposeAsync(this.disposeTimeoutMs);
299
- entry.context = undefined;
329
+ try {
330
+ await ctx.disposeAsync(this.disposeTimeoutMs);
331
+ }
332
+ catch (err) {
333
+ this.logger.error(`插件 "${name}" dispose 抛错: ${err instanceof Error ? err.message : String(err)}`);
334
+ }
335
+ if (entry.context === ctx)
336
+ entry.context = undefined;
300
337
  this.rootCtx.emit('plugin:unloaded', name).catch(err => {
301
338
  this.logger.warn(`emit plugin:unloaded 失败 (${name}): ${err}`);
302
339
  });
303
340
  }
304
- entry.state = 'pending';
305
- entry.error = undefined;
306
341
  }
307
342
  finally {
308
343
  this.suspendDepth--;
@@ -359,8 +394,8 @@ export class PluginManager {
359
394
  * 5. 若本轮有变动则继续下一轮,直到稳定或达到 maxRounds。
360
395
  * 6. 非 shutdown 时发出 plugins:changed。
361
396
  *
362
- * Aalis 直接用"服务在不在 + capabilities 命中"
363
- * 做判断 —— 表达力等价、复杂度更低。
397
+ * Aalis 直接用"服务在不在容器里"做判断(capability 匹配层已于 0.5.0
398
+ * 删除)—— 表达力等价、复杂度更低。
364
399
  */
365
400
  async recompute(reason) {
366
401
  if (this.shuttingDown && reason.type !== 'shutdown') {
@@ -378,6 +413,9 @@ export class PluginManager {
378
413
  // 立即返回而不能把在飞 promise 交还调用方——若调用方恰在某插件 apply()
379
414
  // 内同步调用(在飞 run 正 await 它),等待在飞 promise 会自我死锁。
380
415
  if (this.reloading || this.suspended) {
416
+ // 已知语义损失(如实记账):合并把 service-down 降级为 plugin-state-changed,
417
+ // 被合并的请求拿不到「首轮特殊语义」——requiresBounceOnDepChange 级联在
418
+ // 该路径恒不触发(当前零第一方声明方;根修需按 reason 集合排队,刀单在案)。
381
419
  this.queuedReason = reason.type === 'shutdown' ? reason : (this.queuedReason ?? { type: 'plugin-state-changed' });
382
420
  return;
383
421
  }
@@ -442,21 +480,10 @@ export class PluginManager {
442
480
  this.logger.info(`依赖服务 "${currentReason.service}" 已下线,降级插件为待激活: ${entry.instanceId}`);
443
481
  }
444
482
  }
445
- if (entry.context) {
446
- try {
447
- await entry.context.disposeAsync(this.disposeTimeoutMs);
448
- }
449
- catch (err) {
450
- this.logger.error(`插件 "${entry.instanceId}" dispose 抛错: ${err instanceof Error ? err.message : String(err)}`);
451
- }
452
- entry.context = undefined;
453
- }
454
- entry.state = currentReason.type === 'shutdown' ? 'disposed' : 'pending';
455
- if (currentReason.type !== 'shutdown') {
456
- this.rootCtx.emit('plugin:unloaded', entry.instanceId).catch(err => {
457
- this.logger.warn(`emit plugin:unloaded 失败 (${entry.instanceId}): ${err}`);
458
- });
459
- }
483
+ // 关机降级不发 unloaded:stopAll 的编排自有事件语义,逐插件不重复广播。
484
+ await this.retire(entry, currentReason.type === 'shutdown' ? 'disposed' : 'pending', {
485
+ emitUnloaded: currentReason.type !== 'shutdown',
486
+ });
460
487
  changed = true;
461
488
  lastRoundFlips.push(entry.instanceId);
462
489
  }
@@ -471,7 +498,6 @@ export class PluginManager {
471
498
  if (target !== 'active')
472
499
  continue;
473
500
  await activatePlugin(entry, {
474
- plugins: this.plugins,
475
501
  rootCtx: this.rootCtx,
476
502
  logger: this.logger,
477
503
  disposeTimeoutMs: this.disposeTimeoutMs,
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,6 @@ import type { ServiceContainer } from './services.js';
5
5
  * provide() 的 dev-mode 校验集合:
6
6
  * 1. entryId 必须以 ctxId 为前缀(否则 plugin 卸载时清理不到)
7
7
  * 2. 同一上下文重复 provide 同一服务名静默失效(容器路由按 contextId)
8
- * 3. priority 应使用 ServicePriority enum 而非裸数字
9
8
  *
10
9
  * 参数 explicitEntryId 区分"调用方有意覆盖 entryId"vs"使用 ctxId 默认值"——
11
10
  * 前者才触发 entryId 前缀检查与抑制重复 provide warn(有意拆粒度的语义)。
@@ -17,7 +16,6 @@ export declare function validateProvide(args: {
17
16
  name: string;
18
17
  entryId: string;
19
18
  explicitEntryId: boolean;
20
- priority?: number;
21
19
  services: ServiceContainer;
22
20
  logger: Logger;
23
21
  }): void;
@@ -1 +1 @@
1
- {"version":3,"file":"services-helpers.d.ts","sourceRoot":"","sources":["../src/services-helpers.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAgCP;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAI1F"}
1
+ {"version":3,"file":"services-helpers.d.ts","sourceRoot":"","sources":["../src/services-helpers.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAoBP;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAI1F"}