@aalis/core 0.10.1 → 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.
Files changed (52) hide show
  1. package/dist/app.d.ts +20 -0
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +22 -3
  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 +75 -4
  10. package/dist/context.d.ts.map +1 -1
  11. package/dist/context.js +169 -23
  12. package/dist/context.js.map +1 -1
  13. package/dist/contributions.d.ts +3 -3
  14. package/dist/disposable-chain.d.ts +5 -3
  15. package/dist/disposable-chain.d.ts.map +1 -1
  16. package/dist/disposable-chain.js +22 -12
  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 -0
  27. package/dist/plugin-activation.d.ts.map +1 -1
  28. package/dist/plugin-activation.js +74 -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 +69 -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 -10
  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
package/dist/events.js CHANGED
@@ -7,6 +7,9 @@
7
7
  */
8
8
  export class EventBus {
9
9
  // biome-ignore lint/suspicious/noExplicitAny: 泛型擦除场景,handlers 容器持有不同事件类型,运行时按事件名分发
10
+ // 事件名 → (handler → 归属 ctx.id)。归属让 Context 拆卸的注销段能与
11
+ // hooks/contributions 同点整体切断(unregisterByContext);直接使用总线
12
+ // 的无主 handler(owner=undefined)不受切断影响。
10
13
  handlers = new Map();
11
14
  /**
12
15
  * handler 抛错时的上报回调(含 sticky 补发路径的同步/异步抛错)。
@@ -32,7 +35,8 @@ export class EventBus {
32
35
  }
33
36
  /**
34
37
  * 一次性事件(sticky):emit 后保留最近一次参数;后续 on 监听该事件时
35
- * 立即用缓存参数同步触发回调。用于"应用生命周期里只发一次的里程碑事件",
38
+ * 在下一个微任务里用缓存参数补发回调(异步,与 emit 的投递语义一致)。
39
+ * 用于"应用生命周期里只发一次的里程碑事件",
36
40
  * 让被热重载的插件在 reactivate 后仍能拿到启动通知。
37
41
  * 当前标记为 sticky 的事件:'ready'、'app:started'。
38
42
  *
@@ -61,13 +65,13 @@ export class EventBus {
61
65
  * 立即用缓存的参数调用 handler 一次(保证语义同步:调用方注册完返回后
62
66
  * 再触发,避免 handler 内部的 await 影响调用方流程)。
63
67
  */
64
- on(event, handler) {
68
+ on(event, handler, owner) {
65
69
  let set = this.handlers.get(event);
66
70
  if (!set) {
67
- set = new Set();
71
+ set = new Map();
68
72
  this.handlers.set(event, set);
69
73
  }
70
- set.add(handler);
74
+ set.set(handler, owner);
71
75
  if (this.stickyEvents.has(event) && this.stickyArgs.has(event)) {
72
76
  const args = this.stickyArgs.get(event);
73
77
  queueMicrotask(() => {
@@ -89,10 +93,29 @@ export class EventBus {
89
93
  }
90
94
  return () => {
91
95
  set.delete(handler);
92
- if (set.size === 0)
96
+ // 身份卫:本闭包捕获的是注册时刻的那张表。若事件键已被整体清掉又被
97
+ // 他人重建(unregisterByContext 扫空 → 新注册进新表),按键盲删会误杀
98
+ // 新注册者的整张表——只有当前挂的仍是自己那张时才清空键。
99
+ if (set.size === 0 && this.handlers.get(event) === set)
93
100
  this.handlers.delete(event);
94
101
  };
95
102
  }
103
+ /**
104
+ * @internal 整体移除某 ctx 归属的全部监听——Context 拆卸的注销段调用,
105
+ * 与 hooks/contributions 同点切断(半拆状态不外露:异步排空窗口内本插件
106
+ * 的 handler 不得再响应事件)。链上残留的退订闭包迟到执行时靠 off 的
107
+ * 身份卫保持无害。
108
+ */
109
+ unregisterByContext(owner) {
110
+ for (const [event, set] of this.handlers) {
111
+ for (const [handler, o] of set) {
112
+ if (o === owner)
113
+ set.delete(handler);
114
+ }
115
+ if (set.size === 0)
116
+ this.handlers.delete(event);
117
+ }
118
+ }
96
119
  /**
97
120
  * 触发事件,按注册顺序依次调用,支持异步 handler。
98
121
  *
@@ -109,8 +132,8 @@ export class EventBus {
109
132
  const set = this.handlers.get(event);
110
133
  if (!set)
111
134
  return;
112
- // 直接迭代活 Set:handler 中 dispose 尚未访问的条目会被正确跳过(Set 迭代语义)
113
- for (const handler of set) {
135
+ // 直接迭代活表:handler 中 dispose 尚未访问的条目会被正确跳过(Map 迭代语义)
136
+ for (const handler of set.keys()) {
114
137
  try {
115
138
  await handler(...args);
116
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export { DefaultLogger, formatLogLine, type Logger, LogHub, parseLogLine } from
11
11
  export type { PluginEntry, PluginModule, PluginState } from './plugin.js';
12
12
  export { PluginManager, parseInstanceId } from './plugin.js';
13
13
  export type { ConfigProvider, PluginDescriptor, PluginLoader, RestartStrategy } from './providers.js';
14
- export type { NormalizedDependency, ServiceEntry, ServicePriorityValue } from './services.js';
15
- export { ServiceContainer, ServicePriority } from './services.js';
14
+ export type { NormalizedDependency, ServiceEntry } from './services.js';
15
+ export { ServiceContainer } from './services.js';
16
16
  export type { AalisEvents, AppService, ContributionPointMap, DependencyDeclaration, DisposableService, HookContextMap, InjectDeclaration, MiddlewareFn, MiddlewareNext, PluginManagerService, PluginStatusEntry, ServiceDependency, ServiceOf, ServiceTypeMap, } from './types/index.js';
17
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,KAAK,kBAAkB,EAAE,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9F,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtG,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAElE,YAAY,EACV,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,cAAc,GACf,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,KAAK,kBAAkB,EAAE,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9F,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtG,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,YAAY,EACV,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,cAAc,GACf,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -23,5 +23,5 @@ export { EventBus } from './events.js';
23
23
  export { HookRegistry } from './hooks.js';
24
24
  export { DefaultLogger, formatLogLine, LogHub, parseLogLine } from './logger.js';
25
25
  export { PluginManager, parseInstanceId } from './plugin.js';
26
- export { ServiceContainer, ServicePriority } from './services.js';
26
+ export { ServiceContainer } from './services.js';
27
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,0BAA0B;AAC1B,EAAE;AACF,YAAY;AACZ,qHAAqH;AACrH,uEAAuE;AACvE,2GAA2G;AAC3G,EAAE;AACF,wCAAwC;AACxC,iEAAiE;AACjE,kEAAkE;AAClE,sFAAsF;AACtF,4EAA4E;AAC5E,+DAA+D;AAG/D,sBAAsB;AACtB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,sDAAsD;AACtD,gEAAgE;AAChE,OAAO,EAA2B,oBAAoB,EAAyB,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAe,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG9F,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,0BAA0B;AAC1B,EAAE;AACF,YAAY;AACZ,qHAAqH;AACrH,uEAAuE;AACvE,2GAA2G;AAC3G,EAAE;AACF,wCAAwC;AACxC,iEAAiE;AACjE,kEAAkE;AAClE,sFAAsF;AACtF,4EAA4E;AAC5E,+DAA+D;AAG/D,sBAAsB;AACtB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,sDAAsD;AACtD,gEAAgE;AAChE,OAAO,EAA2B,oBAAoB,EAAyB,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAe,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG9F,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
@@ -8,6 +8,29 @@ interface ActivationDeps {
8
8
  /** 激活失败回滚 disposeAsync 时单个异步清理项的等待上限(毫秒;缺省不设限) */
9
9
  disposeTimeoutMs?: number;
10
10
  }
11
+ /**
12
+ * 拆卸方的唯一形状:先写终态 → 带超时拆 ctx → 清引用 → 发 plugin:unloaded。
13
+ *
14
+ * 这四步的**顺序**是并发正确性的承重墙,此前以约定形式散抄在五个拆卸点,
15
+ * 漏抄或抄错顺序就是覆写竞态(刀 0 的 Phase A 回归即实证)。收编后约定
16
+ * 只剩一条:「拆卸不许手写,调本函数」——由 test/architecture/
17
+ * state-write-sites.test.ts 的写入点定格测试机器守。
18
+ *
19
+ * - 先写终态:拆卸 await 期间并发管理操作的写入必须是后写者(管理意图胜);
20
+ * 同时给 activatePlugin 的接管检查提供让位信号。
21
+ * - 判据用 entry.context 而非 state:'activating' 的在飞 ctx 同样要拆,
22
+ * disposeAsync 会先等 apply 落定(Context._activation)。
23
+ * - dispose 统一 try/catch:拆卸抛出不得让 entry.context 悬置(否则
24
+ * 重激活闸永挂、插件静默不可激活)。
25
+ * - 清引用带恒等卫:并发路径若已 join 同一次拆卸并清过引用,不重复置空。
26
+ *
27
+ * 唯一不用本函数的拆卸点是 bouncePlugin:它要在写终态与拆卸之间插入
28
+ * evictDownstreamConsumers(该 await 窗口要求状态已先落),塞进本函数
29
+ * 需要回调钩子——宁可让它保持内联并就地注释,也不给这里加第三个参数。
30
+ */
31
+ export declare function retireEntry(entry: PluginEntry, targetState: PluginState, deps: Pick<ActivationDeps, 'rootCtx' | 'logger' | 'disposeTimeoutMs'>, opts?: {
32
+ emitUnloaded?: boolean;
33
+ }): Promise<void>;
11
34
  /**
12
35
  * 计算单个 entry 的目标状态。
13
36
  *
@@ -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,CAkE5F"}
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;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,WAAW,EAClB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,QAAQ,GAAG,kBAAkB,CAAC,EACrE,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"}
@@ -9,6 +9,45 @@
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}`);
@@ -57,7 +102,25 @@ export async function activatePlugin(entry, deps) {
57
102
  const ctx = rootCtx.fork(entry.instanceId);
58
103
  entry.context = ctx;
59
104
  try {
60
- await entry.module.apply(ctx, entry.config);
105
+ // 登记后再 await,让拆卸路径能先等 apply 落定(见 Context.trackActivation)
106
+ const applying = Promise.resolve(entry.module.apply(ctx, entry.config));
107
+ ctx.trackActivation(applying);
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
+ }
61
124
  if (entry.module.provides) {
62
125
  const missing = entry.module.provides.filter(name => !rootCtx.serviceContainer.hasByContext(name, entry.instanceId));
63
126
  if (missing.length > 0) {
@@ -84,15 +147,18 @@ export async function activatePlugin(entry, deps) {
84
147
  }
85
148
  catch (err) {
86
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
+ }
87
156
  logger.error(`插件 "${entry.instanceId}" 激活失败: ${message}`);
88
- // 先写终态、再等清理:recompute 的单飞早退是刻意设计(见 recompute
89
- // 注释——join 在飞 promise 会在 apply 内同步触发 recompute 时自我死锁),
90
- // 并发观察者(getStatus / 早退返回的调用方)依赖状态机即时转移;异步
91
- // 清理只影响本函数何时返回,不该拖延 'error' 的可见时点。
92
- entry.state = 'error';
157
+ // retireEntry 先写 'error' 再等清理——并发观察者(getStatus / 早退返回的
158
+ // 调用方)依赖状态机即时转移,异步清理不该拖延 'error' 的可见时点。
159
+ // 不发 unloaded:本插件从未 loaded 过,配对事件无从谈起。
93
160
  entry.error = message;
94
- await ctx.disposeAsync(deps.disposeTimeoutMs);
95
- entry.context = undefined;
161
+ await retireEntry(entry, 'error', deps, { emitUnloaded: false });
96
162
  return;
97
163
  }
98
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":"AAAA,+DAA+D;AAC/D,+BAA+B;AAC/B,EAAE;AACF,yBAAyB;AACzB,6CAA6C;AAC7C,8DAA8D;AAC9D,gEAAgE;AAChE,+CAA+C;AAC/C,EAAE;AACF,gDAAgD;AAChD,+DAA+D;AAM/D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,OAAsB,EAAE,MAAc;IACnE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC9B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,CAAC,CAAC,UAAU;gBAAE,SAAS;YACzD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,SAAS;YACzC,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,SAAS;YAC5C,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC9B,UAAU,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAC9C,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChD,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACpD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,uCAAuC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAO9C;IACC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IAChD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAClC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACrC,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ;YAAE,SAAS;QAC7D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB;YAAE,SAAS;QACtD,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAAE,SAAS;QAC7D,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CACV,UAAU,KAAK,CAAC,UAAU,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC9F,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;QACxB,MAAM,CAAC,IAAI,CACT,oBAAoB,KAAK,CAAC,UAAU,iDAAiD,QAAQ,CAAC,UAAU,IAAI,CAC7G,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC5D,MAAM,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,UAAU,MAAM,GAAG,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
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;CAkG5B"}