@kanian77/choux 0.2.0 → 0.2.2

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 (104) hide show
  1. package/README.md +85 -53
  2. package/bun.lock +5 -3
  3. package/dist/core/ChouxModule.d.ts +1 -1
  4. package/dist/core/ChouxModule.d.ts.map +1 -1
  5. package/dist/core/ChouxModule.js +1 -1
  6. package/dist/core/ChouxModule.js.map +1 -1
  7. package/dist/core/HookRegistry.js +121 -59
  8. package/dist/core/HookRegistry.js.map +1 -1
  9. package/dist/core/HookRegistry.spec.js +28 -19
  10. package/dist/core/HookRegistry.spec.js.map +1 -1
  11. package/dist/core/Plugin.d.ts +1 -6
  12. package/dist/core/Plugin.d.ts.map +1 -1
  13. package/dist/core/Plugin.js +1 -2
  14. package/dist/core/Plugin.js.map +1 -1
  15. package/dist/core/PluginManager.d.ts +10 -5
  16. package/dist/core/PluginManager.d.ts.map +1 -1
  17. package/dist/core/PluginManager.js +168 -52
  18. package/dist/core/PluginManager.js.map +1 -1
  19. package/dist/core/PluginManager.spec.js +42 -31
  20. package/dist/core/PluginManager.spec.js.map +1 -1
  21. package/dist/decorators/enableHooksDecorator.d.ts.map +1 -1
  22. package/dist/decorators/enableHooksDecorator.js +4 -1
  23. package/dist/decorators/enableHooksDecorator.js.map +1 -1
  24. package/dist/decorators/hookDecorator.d.ts +5 -1
  25. package/dist/decorators/hookDecorator.d.ts.map +1 -1
  26. package/dist/decorators/hookDecorator.js +46 -9
  27. package/dist/decorators/hookDecorator.js.map +1 -1
  28. package/dist/decorators/hookDecorator.spec.js +107 -25
  29. package/dist/decorators/hookDecorator.spec.js.map +1 -1
  30. package/dist/lib/functions/index.d.ts +3 -2
  31. package/dist/lib/functions/index.d.ts.map +1 -1
  32. package/dist/lib/functions/index.js +3 -2
  33. package/dist/lib/functions/index.js.map +1 -1
  34. package/dist/lib/functions/registerHookHandler.d.ts.map +1 -1
  35. package/dist/lib/functions/registerHookHandler.js +1 -1
  36. package/dist/lib/functions/registerHookHandler.js.map +1 -1
  37. package/dist/lib/functions/registerHooksForInstance.d.ts.map +1 -1
  38. package/dist/lib/functions/registerHooksForInstance.js +2 -2
  39. package/dist/lib/functions/registerHooksForInstance.js.map +1 -1
  40. package/dist/lib/functions/registerInstanceHooks.d.ts.map +1 -1
  41. package/dist/lib/functions/registerInstanceHooks.js +19 -10
  42. package/dist/lib/functions/registerInstanceHooks.js.map +1 -1
  43. package/dist/lib/functions/registerStaticHooks.d.ts +2 -0
  44. package/dist/lib/functions/registerStaticHooks.d.ts.map +1 -0
  45. package/dist/lib/functions/registerStaticHooks.js +36 -0
  46. package/dist/lib/functions/registerStaticHooks.js.map +1 -0
  47. package/dist/lib/test-related/plugins/plugin-a/module.d.ts +5 -2
  48. package/dist/lib/test-related/plugins/plugin-a/module.d.ts.map +1 -1
  49. package/dist/lib/test-related/plugins/plugin-a/module.js +156 -77
  50. package/dist/lib/test-related/plugins/plugin-a/module.js.map +1 -1
  51. package/dist/lib/test-related/plugins/plugin-b/module.d.ts +5 -2
  52. package/dist/lib/test-related/plugins/plugin-b/module.d.ts.map +1 -1
  53. package/dist/lib/test-related/plugins/plugin-b/module.js +158 -77
  54. package/dist/lib/test-related/plugins/plugin-b/module.js.map +1 -1
  55. package/dist/lib/test-related/services.d.ts +17 -0
  56. package/dist/lib/test-related/services.d.ts.map +1 -0
  57. package/dist/lib/test-related/services.js +104 -0
  58. package/dist/lib/test-related/services.js.map +1 -0
  59. package/dist/lib/types/IHookMetadata.d.ts +6 -0
  60. package/dist/lib/types/IHookMetadata.d.ts.map +1 -0
  61. package/dist/lib/types/IHookMetadata.js +2 -0
  62. package/dist/lib/types/IHookMetadata.js.map +1 -0
  63. package/dist/lib/types/IHookRegistry.js +1 -0
  64. package/dist/lib/types/IPluginManager.d.ts +3 -1
  65. package/dist/lib/types/IPluginManager.d.ts.map +1 -1
  66. package/dist/lib/types/IPluginManager.js +1 -0
  67. package/dist/lib/types/LoadedPlugin.d.ts +2 -2
  68. package/dist/lib/types/LoadedPlugin.d.ts.map +1 -1
  69. package/dist/lib/types/LoadedPlugin.js +1 -0
  70. package/dist/lib/types/PluginMetadata.js +1 -0
  71. package/dist/lib/types/PluginModule.d.ts +10 -0
  72. package/dist/lib/types/PluginModule.d.ts.map +1 -0
  73. package/dist/lib/types/PluginModule.js +14 -0
  74. package/dist/lib/types/PluginModule.js.map +1 -0
  75. package/dist/lib/types/index.d.ts +1 -1
  76. package/dist/lib/types/index.d.ts.map +1 -1
  77. package/dist/lib/types/index.js +1 -1
  78. package/dist/lib/types/index.js.map +1 -1
  79. package/package.json +2 -2
  80. package/tsconfig.json +15 -9
  81. package/dist/core/PluginLoader.d.ts +0 -13
  82. package/dist/core/PluginLoader.d.ts.map +0 -1
  83. package/dist/core/PluginLoader.js +0 -147
  84. package/dist/core/PluginLoader.js.map +0 -1
  85. package/dist/core/PluginLoader.spec.d.ts +0 -2
  86. package/dist/core/PluginLoader.spec.d.ts.map +0 -1
  87. package/dist/core/PluginLoader.spec.js +0 -114
  88. package/dist/core/PluginLoader.spec.js.map +0 -1
  89. package/dist/example-plugin/module.d.ts +0 -20
  90. package/dist/example-plugin/module.d.ts.map +0 -1
  91. package/dist/example-plugin/module.js +0 -90
  92. package/dist/example-plugin/module.js.map +0 -1
  93. package/dist/example-plugin/services.d.ts +0 -9
  94. package/dist/example-plugin/services.d.ts.map +0 -1
  95. package/dist/example-plugin/services.js +0 -29
  96. package/dist/example-plugin/services.js.map +0 -1
  97. package/dist/example-plugin/tokens.d.ts +0 -2
  98. package/dist/example-plugin/tokens.d.ts.map +0 -1
  99. package/dist/example-plugin/tokens.js +0 -2
  100. package/dist/example-plugin/tokens.js.map +0 -1
  101. package/dist/lib/types/HookMetadata.d.ts +0 -5
  102. package/dist/lib/types/HookMetadata.d.ts.map +0 -1
  103. package/dist/lib/types/HookMetadata.js +0 -1
  104. package/dist/lib/types/HookMetadata.js.map +0 -1
@@ -1,12 +1,17 @@
1
1
  import type { IHookRegistry, IPluginManager, LoadedPlugin } from '../lib/types';
2
- import { PluginLoader } from './PluginLoader';
2
+ import { PluginModule } from '../lib/types/PluginModule';
3
3
  export declare class PluginManager implements IPluginManager {
4
- private hookRegistry;
5
- private loader;
6
- constructor(hookRegistry: IHookRegistry, loader: PluginLoader);
7
- initialize(...pluginsDir: string[]): Promise<void>;
4
+ private readonly hkRegistry;
5
+ private loadedPlugins;
6
+ constructor();
7
+ initializePlugin(pluginModule: PluginModule): Promise<LoadedPlugin>;
8
+ initializePlugins(pluginModules: PluginModule[]): Promise<void>;
9
+ loadPluginModule(pluginModule: PluginModule): Promise<LoadedPlugin>;
10
+ private initializeLoadedPlugin;
8
11
  shutdown(): Promise<void>;
12
+ unloadPlugin(pluginName: string): Promise<void>;
9
13
  getPlugin(name: string): LoadedPlugin | undefined;
10
14
  getAllPlugins(): LoadedPlugin[];
15
+ get hookRegistry(): IHookRegistry;
11
16
  }
12
17
  //# sourceMappingURL=PluginManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../../src/core/PluginManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAI9C,qBACa,aAAc,YAAW,cAAc;IAEnB,OAAO,CAAC,YAAY;IAC3B,OAAO,CAAC,MAAM;gBADC,YAAY,EAAE,aAAa,EAClC,MAAM,EAAE,YAAY;IAG9C,UAAU,CAAC,GAAG,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAelD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD,aAAa,IAAI,YAAY,EAAE;CAGhC"}
1
+ {"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../../src/core/PluginManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,qBACa,aAAc,YAAW,cAAc;IAElD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,aAAa,CAAwC;;IAIvD,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAOnE,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/D,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;YA8B3D,sBAAsB;IAY9B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAazB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD,aAAa,IAAI,YAAY,EAAE;IAI/B,IAAI,YAAY,IAAI,aAAa,CAEhC;CACF"}
@@ -1,60 +1,176 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
6
27
  };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
9
43
  };
10
- var __param = (this && this.__param) || function (paramIndex, decorator) {
11
- return function (target, key) { decorator(target, key, paramIndex); }
44
+ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
45
+ if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
46
+ return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
12
47
  };
13
- import { Service, Inject } from '@kanian77/simple-di';
48
+ import { Service, Inject, bootstrap, inject } from '@kanian77/tject';
14
49
  import { LIFECYCLE_HOOKS } from './HookRegistry';
15
50
  import { PLUGIN_MANAGER_TOKEN, HOOK_REGISTRY_TOKEN } from '../lib/types/tokens';
16
- import { PluginLoader } from './PluginLoader';
17
51
  // Removed local interface IPluginManager, now imported from lib/types
18
- let PluginManager = class PluginManager {
19
- hookRegistry;
20
- loader;
21
- constructor(hookRegistry, loader) {
22
- this.hookRegistry = hookRegistry;
23
- this.loader = loader;
24
- }
25
- async initialize(...pluginsDir) {
26
- await this.hookRegistry.trigger(LIFECYCLE_HOOKS.APPLICATION_START);
27
- let plugins = [];
28
- await Promise.all(pluginsDir.map(async (dir) => {
29
- const loaded = await this.loader.loadPlugins(dir);
30
- plugins = [...plugins, ...loaded];
31
- }));
32
- console.log(`Loaded ${plugins.length} plugins:`);
33
- plugins.forEach((p) => {
34
- console.log(` - ${p.metadata.name} v${p.metadata.version}`);
35
- });
36
- }
37
- async shutdown() {
38
- await this.hookRegistry.trigger(LIFECYCLE_HOOKS.APPLICATION_SHUTDOWN);
39
- const plugins = this.loader.getAllPlugins();
40
- // Unload in reverse dependency order
41
- for (const plugin of plugins.reverse()) {
42
- await this.loader.unloadPlugin(plugin.metadata.name);
43
- }
44
- this.hookRegistry.clear();
45
- }
46
- getPlugin(name) {
47
- return this.loader.getPlugin(name);
48
- }
49
- getAllPlugins() {
50
- return this.loader.getAllPlugins();
51
- }
52
- };
53
- PluginManager = __decorate([
54
- Service({ token: PLUGIN_MANAGER_TOKEN }),
55
- __param(0, Inject(HOOK_REGISTRY_TOKEN)),
56
- __param(1, Inject(PluginLoader)),
57
- __metadata("design:paramtypes", [Object, PluginLoader])
58
- ], PluginManager);
52
+ let PluginManager = (() => {
53
+ let _classDecorators = [Service({ token: PLUGIN_MANAGER_TOKEN })];
54
+ let _classDescriptor;
55
+ let _classExtraInitializers = [];
56
+ let _classThis;
57
+ let _hkRegistry_decorators;
58
+ let _hkRegistry_initializers = [];
59
+ let _hkRegistry_extraInitializers = [];
60
+ var PluginManager = _classThis = class {
61
+ constructor() {
62
+ Object.defineProperty(this, "hkRegistry", {
63
+ enumerable: true,
64
+ configurable: true,
65
+ writable: true,
66
+ value: __runInitializers(this, _hkRegistry_initializers, void 0)
67
+ });
68
+ Object.defineProperty(this, "loadedPlugins", {
69
+ enumerable: true,
70
+ configurable: true,
71
+ writable: true,
72
+ value: (__runInitializers(this, _hkRegistry_extraInitializers), new Map())
73
+ });
74
+ }
75
+ initializePlugin(pluginModule) {
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ yield this.hkRegistry.trigger(LIFECYCLE_HOOKS.APPLICATION_START);
78
+ const plugin = yield this.loadPluginModule(pluginModule);
79
+ return plugin;
80
+ });
81
+ }
82
+ initializePlugins(pluginModules) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ yield this.hkRegistry.trigger(LIFECYCLE_HOOKS.APPLICATION_START);
85
+ const plugins = yield Promise.all(pluginModules.map((module) => this.initializePlugin(module)));
86
+ console.log(`Loaded ${plugins.length} plugins:`);
87
+ plugins.forEach((plugin) => {
88
+ console.log(` - ${plugin.metadata.name} v${plugin.metadata.version}`);
89
+ });
90
+ });
91
+ }
92
+ loadPluginModule(pluginModule) {
93
+ return __awaiter(this, void 0, void 0, function* () {
94
+ const hookRegistry = inject(HOOK_REGISTRY_TOKEN);
95
+ bootstrap(pluginModule);
96
+ const pluginInstance = inject(pluginModule.token);
97
+ yield hookRegistry.trigger(LIFECYCLE_HOOKS.BEFORE_PLUGIN_LOAD, pluginInstance.metadata);
98
+ if (!pluginInstance.metadata) {
99
+ throw new Error(`Plugin ${pluginInstance} must have metadata property`);
100
+ }
101
+ // Call plugin's onLoad lifecycle method
102
+ if (pluginInstance.onLoad) {
103
+ yield pluginInstance.onLoad();
104
+ }
105
+ const loadedPlugin = {
106
+ plugin: pluginInstance,
107
+ metadata: pluginInstance.metadata,
108
+ };
109
+ this.loadedPlugins.set(pluginInstance.metadata.name, loadedPlugin);
110
+ yield hookRegistry.trigger(LIFECYCLE_HOOKS.AFTER_PLUGIN_LOAD, loadedPlugin);
111
+ yield this.initializeLoadedPlugin(loadedPlugin);
112
+ return loadedPlugin;
113
+ });
114
+ }
115
+ initializeLoadedPlugin(loaded) {
116
+ return __awaiter(this, void 0, void 0, function* () {
117
+ const hookRegistry = inject(HOOK_REGISTRY_TOKEN);
118
+ yield hookRegistry.trigger(LIFECYCLE_HOOKS.BEFORE_PLUGIN_INIT, loaded);
119
+ // Call plugin's onInit lifecycle method
120
+ if (loaded.plugin.onInit) {
121
+ yield loaded.plugin.onInit();
122
+ }
123
+ yield hookRegistry.trigger(LIFECYCLE_HOOKS.AFTER_PLUGIN_INIT, loaded);
124
+ });
125
+ }
126
+ shutdown() {
127
+ return __awaiter(this, void 0, void 0, function* () {
128
+ yield this.hkRegistry.trigger(LIFECYCLE_HOOKS.APPLICATION_SHUTDOWN);
129
+ const plugins = this.getAllPlugins();
130
+ // Unload in reverse dependency order
131
+ for (const plugin of plugins.reverse()) {
132
+ yield this.unloadPlugin(plugin.metadata.name);
133
+ }
134
+ this.hkRegistry.clear();
135
+ });
136
+ }
137
+ unloadPlugin(pluginName) {
138
+ return __awaiter(this, void 0, void 0, function* () {
139
+ const loaded = this.loadedPlugins.get(pluginName);
140
+ if (!loaded) {
141
+ throw new Error(`Plugin ${pluginName} is not loaded`);
142
+ }
143
+ const hookRegistry = inject(HOOK_REGISTRY_TOKEN);
144
+ yield hookRegistry.trigger(LIFECYCLE_HOOKS.BEFORE_PLUGIN_DESTROY, loaded);
145
+ // Call plugin's onDestroy lifecycle method
146
+ if (loaded.plugin.onDestroy) {
147
+ yield loaded.plugin.onDestroy();
148
+ }
149
+ this.loadedPlugins.delete(pluginName);
150
+ yield hookRegistry.trigger(LIFECYCLE_HOOKS.AFTER_PLUGIN_DESTROY, loaded);
151
+ });
152
+ }
153
+ getPlugin(name) {
154
+ return this.loadedPlugins.get(name);
155
+ }
156
+ getAllPlugins() {
157
+ return Array.from(this.loadedPlugins.values());
158
+ }
159
+ get hookRegistry() {
160
+ return this.hkRegistry;
161
+ }
162
+ };
163
+ __setFunctionName(_classThis, "PluginManager");
164
+ (() => {
165
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
166
+ _hkRegistry_decorators = [Inject({ token: HOOK_REGISTRY_TOKEN })];
167
+ __esDecorate(null, null, _hkRegistry_decorators, { kind: "field", name: "hkRegistry", static: false, private: false, access: { has: obj => "hkRegistry" in obj, get: obj => obj.hkRegistry, set: (obj, value) => { obj.hkRegistry = value; } }, metadata: _metadata }, _hkRegistry_initializers, _hkRegistry_extraInitializers);
168
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
169
+ PluginManager = _classThis = _classDescriptor.value;
170
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
171
+ __runInitializers(_classThis, _classExtraInitializers);
172
+ })();
173
+ return PluginManager = _classThis;
174
+ })();
59
175
  export { PluginManager };
60
176
  //# sourceMappingURL=PluginManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PluginManager.js","sourceRoot":"","sources":["../../src/core/PluginManager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAU,OAAO,EAAE,MAAM,EAAU,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,sEAAsE;AAG/D,IAAM,aAAa,GAAnB,MAAM,aAAa;IAEe;IACP;IAFhC,YACuC,YAA2B,EAClC,MAAoB;QADb,iBAAY,GAAZ,YAAY,CAAe;QAClC,WAAM,GAAN,MAAM,CAAc;IACjD,CAAC;IAEJ,KAAK,CAAC,UAAU,CAAC,GAAG,UAAoB;QACtC,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;QAEnE,IAAI,OAAO,GAAmB,EAAE,CAAC;QACjC,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAClD,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC,CAAC;QAEJ,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;QACjD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;QAEtE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAE5C,qCAAqC;QACrC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;CACF,CAAA;AAzCY,aAAa;IADzB,OAAO,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAGpC,WAAA,MAAM,CAAC,mBAAmB,CAAC,CAAA;IAC3B,WAAA,MAAM,CAAC,YAAY,CAAC,CAAA;6CAAiB,YAAY;GAHzC,aAAa,CAyCzB"}
1
+ {"version":3,"file":"PluginManager.js","sourceRoot":"","sources":["../../src/core/PluginManager.ts"],"names":[],"mappings":"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"}
@@ -1,50 +1,61 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'bun:test';
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { describe, it, expect, beforeAll, } from 'bun:test';
11
+ import { PluginManager } from './PluginManager';
2
12
  import { resolve } from 'path';
3
- import { inject } from '@kanian77/simple-di';
4
- import { PLUGIN_MANAGER_TOKEN } from '../lib/types/tokens';
13
+ import { bootstrap, inject, Module } from '@kanian77/tject';
14
+ import { HOOK_REGISTRY_TOKEN, PLUGIN_MANAGER_TOKEN } from '../lib/types/tokens';
15
+ import { HookRegistry } from './HookRegistry';
16
+ import { PluginAModule } from '../lib/test-related/plugins/plugin-a/module';
17
+ import { PluginBModule } from '../lib/test-related/plugins/plugin-b/module';
5
18
  describe('PluginManager', () => {
6
19
  let manager;
7
20
  const pluginsDir = resolve('src/lib/test-related/plugins');
8
- beforeEach(() => {
21
+ beforeAll(() => {
22
+ const TestModule = new Module({
23
+ providers: [
24
+ {
25
+ provide: HOOK_REGISTRY_TOKEN,
26
+ useClass: HookRegistry,
27
+ },
28
+ {
29
+ provide: PLUGIN_MANAGER_TOKEN,
30
+ useClass: PluginManager,
31
+ },
32
+ ],
33
+ });
34
+ bootstrap(TestModule);
9
35
  manager = inject(PLUGIN_MANAGER_TOKEN);
10
36
  });
11
- afterEach(async () => {
12
- // No cleanup needed for static test plugins
13
- });
14
- it('initialize loads plugins and prints info', async () => {
15
- let logOutput = '';
16
- const origLog = console.log;
17
- console.log = (msg) => {
18
- logOutput += msg + '\n';
19
- };
20
- await manager.initialize(pluginsDir);
21
- expect(logOutput).toContain('Loaded 2 plugins:');
22
- expect(logOutput).toContain('plugin-a');
23
- expect(logOutput).toContain('plugin-b');
24
- console.log = origLog;
25
- });
26
- it('getPlugin returns correct plugin', async () => {
27
- await manager.initialize(pluginsDir);
37
+ it('getPlugin returns correct plugin', () => __awaiter(void 0, void 0, void 0, function* () {
38
+ yield manager.initializePlugins([PluginAModule, PluginBModule]);
28
39
  const pluginA = manager.getPlugin('pluginA');
29
40
  expect(pluginA).toBeDefined();
30
- expect(pluginA?.metadata.name).toBe('pluginA');
41
+ expect(pluginA === null || pluginA === void 0 ? void 0 : pluginA.metadata.name).toBe('pluginA');
31
42
  const pluginB = manager.getPlugin('pluginB');
32
43
  expect(pluginB).toBeDefined();
33
- expect(pluginB?.metadata.name).toBe('pluginB');
34
- });
35
- it('getAllPlugins returns all loaded plugins', async () => {
36
- await manager.initialize(pluginsDir);
44
+ expect(pluginB === null || pluginB === void 0 ? void 0 : pluginB.metadata.name).toBe('pluginB');
45
+ }));
46
+ it('getAllPlugins returns all loaded plugins', () => __awaiter(void 0, void 0, void 0, function* () {
47
+ yield manager.initializePlugins([PluginAModule, PluginBModule]);
37
48
  const all = manager.getAllPlugins();
38
49
  expect(all.length).toBe(2);
39
50
  expect(all.map((p) => p.metadata.name).sort()).toEqual([
40
51
  'pluginA',
41
52
  'pluginB',
42
53
  ]);
43
- });
44
- it('shutdown unloads all plugins and clears registry', async () => {
45
- await manager.initialize(pluginsDir);
46
- await manager.shutdown();
54
+ }));
55
+ it('shutdown unloads all plugins and clears registry', () => __awaiter(void 0, void 0, void 0, function* () {
56
+ yield manager.initializePlugins([PluginAModule, PluginBModule]);
57
+ yield manager.shutdown();
47
58
  expect(manager.getAllPlugins()).toEqual([]);
48
- });
59
+ }));
49
60
  });
50
61
  //# sourceMappingURL=PluginManager.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PluginManager.spec.js","sourceRoot":"","sources":["../../src/core/PluginManager.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEvE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,OAAsB,CAAC;IAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAE3D,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,MAAM,CAAgB,oBAAoB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,4CAA4C;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;QAC5B,OAAO,CAAC,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE;YAC5B,SAAS,IAAI,GAAG,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC;QACF,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;YACrD,SAAS;YACT,SAAS;SACV,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"PluginManager.spec.js","sourceRoot":"","sources":["../../src/core/PluginManager.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"enableHooksDecorator.d.ts","sourceRoot":"","sources":["../../src/decorators/enableHooksDecorator.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;CAAE,EAChE,aAAa,CAAC,KAOT,CACN,CAAC"}
1
+ {"version":3,"file":"enableHooksDecorator.d.ts","sourceRoot":"","sources":["../../src/decorators/enableHooksDecorator.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;CAAE,eACnD,CAAC,MAWf,CAAC"}
@@ -1,10 +1,13 @@
1
1
  import { registerInstanceHooks } from '../lib/functions/registerInstanceHooks';
2
+ import { registerStaticHooks } from '../lib/functions/registerStaticHooks';
2
3
  export const EnableHooks = (constructor) => {
3
- return class extends constructor {
4
+ const WrappedClass = class extends constructor {
4
5
  constructor(...args) {
5
6
  super(...args);
6
7
  registerInstanceHooks(this);
8
+ registerStaticHooks(WrappedClass);
7
9
  }
8
10
  };
11
+ return WrappedClass;
9
12
  };
10
13
  //# sourceMappingURL=enableHooksDecorator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enableHooksDecorator.js","sourceRoot":"","sources":["../../src/decorators/enableHooksDecorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,WAAc,EACd,EAAE;IACF,OAAO,KAAM,SAAQ,WAAW;QAC9B,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACf,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;KACG,CAAC;AACT,CAAC,CAAC"}
1
+ {"version":3,"file":"enableHooksDecorator.js","sourceRoot":"","sources":["../../src/decorators/enableHooksDecorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAE3E,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,WAAc,EACd,EAAE;IACF,MAAM,YAAY,GAAG,KAAM,SAAQ,WAAW;QAC5C,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACf,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC5B,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;KACG,CAAC;IAEP,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC"}
@@ -1,2 +1,6 @@
1
- export declare function Hook(hookName: string): <T extends (...args: any[]) => any>(target: any, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;
1
+ /**
2
+ * @Hook decorator
3
+ * Attaches metadata to a class to register a method as a hook handler.
4
+ */
5
+ export declare function Hook(hookName: string): <T extends (...args: any[]) => any>(target: T, context: ClassMethodDecoratorContext<any, T>) => T | void;
2
6
  //# sourceMappingURL=hookDecorator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hookDecorator.d.ts","sourceRoot":"","sources":["../../src/decorators/hookDecorator.ts"],"names":[],"mappings":"AAEA,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,IAClB,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAChD,QAAQ,GAAG,EACX,aAAa,MAAM,GAAG,MAAM,EAC5B,YAAY,uBAAuB,CAAC,CAAC,CAAC,KACrC,uBAAuB,CAAC,CAAC,CAAC,GAAG,IAAI,CAarC"}
1
+ {"version":3,"file":"hookDecorator.d.ts","sourceRoot":"","sources":["../../src/decorators/hookDecorator.ts"],"names":[],"mappings":"AAqCA;;;GAGG;AACH,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,IAClB,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,UACxC,CAAC,WACA,2BAA2B,CAAC,GAAG,EAAE,CAAC,CAAC,KAC3C,CAAC,GAAG,IAAI,CAwBZ"}
@@ -1,15 +1,52 @@
1
+ // File: src/decorators/hookDecorator.ts (or wherever you have it)
1
2
  import { HOOK_METADATA_KEY } from '../lib/types';
2
- export function Hook(hookName) {
3
- return function (target, propertyKey, descriptor) {
4
- // Store hook metadata on the class prototype
5
- if (!target.constructor[HOOK_METADATA_KEY]) {
6
- target.constructor[HOOK_METADATA_KEY] = [];
7
- }
8
- target.constructor[HOOK_METADATA_KEY].push({
3
+ /**
4
+ * Helper function to idempotently add metadata to a class constructor.
5
+ */
6
+ function addHookMetadata(ctor, hookName, methodName, isStatic = false) {
7
+ if (!Object.hasOwnProperty.call(ctor, HOOK_METADATA_KEY)) {
8
+ const parentMetadata = ctor[HOOK_METADATA_KEY];
9
+ ctor[HOOK_METADATA_KEY] = parentMetadata ? [...parentMetadata] : [];
10
+ }
11
+ const metadata = ctor[HOOK_METADATA_KEY];
12
+ // Prevent duplicates
13
+ const exists = metadata.some((m) => m.hookName === hookName &&
14
+ m.methodName === methodName &&
15
+ m.isStatic === isStatic);
16
+ if (!exists) {
17
+ metadata.push({
9
18
  hookName,
10
- methodName: propertyKey.toString(),
19
+ methodName,
20
+ isStatic,
11
21
  });
12
- return descriptor;
22
+ }
23
+ }
24
+ /**
25
+ * @Hook decorator
26
+ * Attaches metadata to a class to register a method as a hook handler.
27
+ */
28
+ export function Hook(hookName) {
29
+ return function (target, context) {
30
+ if (context.kind !== 'method') {
31
+ throw new Error('@Hook decorator can only be applied to methods.');
32
+ }
33
+ const methodNameStr = context.name.toString();
34
+ if (context.static) {
35
+ // For static methods, initializer runs ONCE on class definition
36
+ context.addInitializer(function () {
37
+ // 'this' is the class constructor
38
+ addHookMetadata(this, hookName, methodNameStr, true);
39
+ });
40
+ }
41
+ else {
42
+ // For instance methods, initializer runs PER INSTANCE creation
43
+ context.addInitializer(function () {
44
+ // 'this' is the class instance, get constructor from it
45
+ addHookMetadata(this.constructor, hookName, methodNameStr);
46
+ });
47
+ }
48
+ // We are not changing the method, so return void
49
+ return;
13
50
  };
14
51
  }
15
52
  //# sourceMappingURL=hookDecorator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hookDecorator.js","sourceRoot":"","sources":["../../src/decorators/hookDecorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,UAAU,IAAI,CAAC,QAAgB;IACnC,OAAO,UACL,MAAW,EACX,WAA4B,EAC5B,UAAsC;QAEtC,6CAA6C;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAC7C,CAAC;QAED,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC;YACzC,QAAQ;YACR,UAAU,EAAE,WAAW,CAAC,QAAQ,EAAE;SACnC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"hookDecorator.js","sourceRoot":"","sources":["../../src/decorators/hookDecorator.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,OAAO,EAAE,iBAAiB,EAAiB,MAAM,cAAc,CAAC;AAEhE;;GAEG;AACH,SAAS,eAAe,CACtB,IAAS,EACT,QAAgB,EAChB,UAAkB,EAClB,WAAoB,KAAK;IAEzB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC;QACzD,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/C,IAAI,CAAC,iBAAiB,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,QAAQ,GAAoB,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE1D,qBAAqB;IACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,KAAK,QAAQ;QACvB,CAAC,CAAC,UAAU,KAAK,UAAU;QAC3B,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAC1B,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,QAAQ,CAAC,IAAI,CAAC;YACZ,QAAQ;YACR,UAAU;YACV,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,QAAgB;IACnC,OAAO,UACL,MAAS,EACT,OAA4C;QAE5C,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,gEAAgE;YAChE,OAAO,CAAC,cAAc,CAAC;gBACrB,kCAAkC;gBAClC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,+DAA+D;YAC/D,OAAO,CAAC,cAAc,CAAC;gBACrB,wDAAwD;gBACxD,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACL,CAAC;QAED,iDAAiD;QACjD,OAAO;IACT,CAAC,CAAC;AACJ,CAAC"}