@kanian77/choux 0.2.1 → 0.2.3

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 +8 -4
  16. package/dist/core/PluginManager.d.ts.map +1 -1
  17. package/dist/core/PluginManager.js +168 -55
  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 +2 -1
  76. package/dist/lib/types/index.d.ts.map +1 -1
  77. package/dist/lib/types/index.js +2 -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
package/tsconfig.json CHANGED
@@ -1,19 +1,25 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "outDir": "dist",
4
- "rootDir": "src",
5
- "experimentalDecorators": true,
6
- "emitDecoratorMetadata": true,
7
- "target": "ESNext",
8
- "module": "preserve",
3
+ "strict": true,
4
+ "jsx": "react-jsx",
5
+ "jsxImportSource": "hono/jsx",
6
+ "outDir": "./dist",
7
+ "rootDir": "./src",
8
+ "composite": true,
9
+ // CHANGE THIS: Lower the target to force decorator transpilation
10
+ "target": "ES2015",
11
+ // "target": "ESNext",
12
+ // KEEP THESE: Enable decorators
13
+ "experimentalDecorators": false,
14
+ "emitDecoratorMetadata": false,
15
+ "useDefineForClassFields": true,
16
+ "module": "ESNEXT",
9
17
  "moduleResolution": "bundler",
10
-
11
18
  "esModuleInterop": true,
12
- "strict": true,
13
19
  "skipLibCheck": true,
14
20
  "forceConsistentCasingInFileNames": true,
21
+ "isolatedModules": true,
15
22
  "resolveJsonModule": true,
16
- "emitDeclarationOnly": false,
17
23
  "declaration": true,
18
24
  "declarationMap": true, // Optional: creates sourcemap for .d.ts files
19
25
  "sourceMap": true // Optional: creates sourcemaps for .js files
@@ -1,13 +0,0 @@
1
- import type { LoadedPlugin } from '../lib/types';
2
- export declare class PluginLoader {
3
- private loadedPlugins;
4
- findPlugins(pluginsDir: string): Promise<string[]>;
5
- loadPlugin(pluginPath: string): Promise<LoadedPlugin>;
6
- loadPlugins(pluginsDir: string): Promise<LoadedPlugin[]>;
7
- private resolveDependencyOrder;
8
- private initializePlugin;
9
- unloadPlugin(pluginName: string): Promise<void>;
10
- getPlugin(name: string): LoadedPlugin | undefined;
11
- getAllPlugins(): LoadedPlugin[];
12
- }
13
- //# sourceMappingURL=PluginLoader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginLoader.d.ts","sourceRoot":"","sources":["../../src/core/PluginLoader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,YAAY,EAAiB,MAAM,cAAc,CAAC;AAQhF,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAwC;IAEvD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA0BlD,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA8CrD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAwB9D,OAAO,CAAC,sBAAsB;YA4ChB,gBAAgB;IAYxB,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;CAGhC"}
@@ -1,147 +0,0 @@
1
- import { inject } from '@kanian77/simple-di';
2
- import { LIFECYCLE_HOOKS } from './HookRegistry';
3
- import { HOOK_REGISTRY_TOKEN } from '../lib/types/tokens';
4
- import * as fs from 'fs/promises';
5
- import * as path from 'path';
6
- // LoadedPlugin now imported from types
7
- export class PluginLoader {
8
- loadedPlugins = new Map();
9
- async findPlugins(pluginsDir) {
10
- try {
11
- const entries = await fs.readdir(pluginsDir, { withFileTypes: true });
12
- const pluginDirs = [];
13
- for (const entry of entries) {
14
- if (entry.isDirectory()) {
15
- const pluginPath = path.join(pluginsDir, entry.name);
16
- const modulePath = path.join(pluginPath, 'module.ts');
17
- try {
18
- await fs.access(modulePath);
19
- pluginDirs.push(pluginPath);
20
- }
21
- catch {
22
- // Skip directories without module.ts
23
- }
24
- }
25
- }
26
- return pluginDirs;
27
- }
28
- catch (error) {
29
- console.warn(`Could not read plugins directory: ${pluginsDir}`, error);
30
- return [];
31
- }
32
- }
33
- async loadPlugin(pluginPath) {
34
- const modulePath = path.join(pluginPath, 'module.ts');
35
- console.log(`Loading plugin from ${modulePath}`);
36
- const hookRegistry = inject(HOOK_REGISTRY_TOKEN);
37
- await hookRegistry.trigger(LIFECYCLE_HOOKS.BEFORE_PLUGIN_LOAD, pluginPath);
38
- // Dynamic import of the plugin module
39
- const module = await import(modulePath);
40
- const PluginClass = module.default;
41
- if (!PluginClass || !PluginClass.prototype) {
42
- throw new Error(`Invalid plugin at ${pluginPath}: must export a Plugin class as default`);
43
- }
44
- // Create plugin instance (which is also a Module)
45
- const plugin = new PluginClass();
46
- if (!plugin.metadata) {
47
- throw new Error(`Plugin at ${pluginPath} must have metadata property`);
48
- }
49
- // Call plugin's onLoad lifecycle method
50
- if (plugin.onLoad) {
51
- await plugin.onLoad();
52
- }
53
- // Register custom hooks if defined
54
- if (plugin.registerCustomHooks) {
55
- plugin.registerCustomHooks();
56
- }
57
- const loadedPlugin = {
58
- plugin, // plugin is already a Module
59
- metadata: plugin.metadata,
60
- pluginClass: PluginClass,
61
- };
62
- this.loadedPlugins.set(plugin.metadata.name, loadedPlugin);
63
- await hookRegistry.trigger(LIFECYCLE_HOOKS.AFTER_PLUGIN_LOAD, loadedPlugin);
64
- return loadedPlugin;
65
- }
66
- async loadPlugins(pluginsDir) {
67
- const pluginDirs = await this.findPlugins(pluginsDir);
68
- const loadedPlugins = [];
69
- // Load all plugins first
70
- for (const dir of pluginDirs) {
71
- try {
72
- const loaded = await this.loadPlugin(dir);
73
- loadedPlugins.push(loaded);
74
- }
75
- catch (error) {
76
- console.error(`Failed to load plugin from ${dir}:`, error);
77
- }
78
- }
79
- // Resolve dependencies and initialize
80
- const sortedPlugins = this.resolveDependencyOrder(loadedPlugins);
81
- for (const loaded of sortedPlugins) {
82
- await this.initializePlugin(loaded);
83
- }
84
- return sortedPlugins;
85
- }
86
- resolveDependencyOrder(plugins) {
87
- const sorted = [];
88
- const visited = new Set();
89
- const visiting = new Set();
90
- const visit = (plugin) => {
91
- const name = plugin.metadata.name;
92
- if (visiting.has(name)) {
93
- throw new Error(`Circular dependency detected involving plugin: ${name}`);
94
- }
95
- if (visited.has(name)) {
96
- return;
97
- }
98
- visiting.add(name);
99
- // Visit dependencies first
100
- const dependencies = plugin.metadata.dependencies || [];
101
- for (const depName of dependencies) {
102
- const dep = plugins.find((p) => p.metadata.name === depName);
103
- if (!dep) {
104
- throw new Error(`Plugin ${name} depends on ${depName}, but it's not loaded`);
105
- }
106
- visit(dep);
107
- }
108
- visiting.delete(name);
109
- visited.add(name);
110
- sorted.push(plugin);
111
- };
112
- for (const plugin of plugins) {
113
- visit(plugin);
114
- }
115
- return sorted;
116
- }
117
- async initializePlugin(loaded) {
118
- const hookRegistry = inject(HOOK_REGISTRY_TOKEN);
119
- await hookRegistry.trigger(LIFECYCLE_HOOKS.BEFORE_PLUGIN_INIT, loaded);
120
- // Call plugin's onInit lifecycle method
121
- if (loaded.plugin.onInit) {
122
- await loaded.plugin.onInit();
123
- }
124
- await hookRegistry.trigger(LIFECYCLE_HOOKS.AFTER_PLUGIN_INIT, loaded);
125
- }
126
- async unloadPlugin(pluginName) {
127
- const loaded = this.loadedPlugins.get(pluginName);
128
- if (!loaded) {
129
- throw new Error(`Plugin ${pluginName} is not loaded`);
130
- }
131
- const hookRegistry = inject(HOOK_REGISTRY_TOKEN);
132
- await hookRegistry.trigger(LIFECYCLE_HOOKS.BEFORE_PLUGIN_DESTROY, loaded);
133
- // Call plugin's onDestroy lifecycle method
134
- if (loaded.plugin.onDestroy) {
135
- await loaded.plugin.onDestroy();
136
- }
137
- this.loadedPlugins.delete(pluginName);
138
- await hookRegistry.trigger(LIFECYCLE_HOOKS.AFTER_PLUGIN_DESTROY, loaded);
139
- }
140
- getPlugin(name) {
141
- return this.loadedPlugins.get(name);
142
- }
143
- getAllPlugins() {
144
- return Array.from(this.loadedPlugins.values());
145
- }
146
- }
147
- //# sourceMappingURL=PluginLoader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginLoader.js","sourceRoot":"","sources":["../../src/core/PluginLoader.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=PluginLoader.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginLoader.spec.d.ts","sourceRoot":"","sources":["../../src/core/PluginLoader.spec.ts"],"names":[],"mappings":""}
@@ -1,114 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'bun:test';
2
- import { PluginLoader } from './PluginLoader';
3
- import { Plugin } from './Plugin';
4
- import { tmpdir } from 'os';
5
- import { mkdtempSync } from 'fs';
6
- // Minimal IHookRegistry mock
7
- const mockHookRegistry = {
8
- trigger: async () => { },
9
- register: () => { },
10
- unregister: () => { },
11
- getHooks: () => [],
12
- clear: () => { },
13
- };
14
- // // Patch inject to return our mock
15
- // import * as simpleDi from "@kanian77/simple-di";
16
- // (simpleDi as any).inject = () => mockHookRegistry;
17
- // Patch fs.promises for plugin discovery
18
- import { mkdir, writeFile, rm } from 'fs/promises';
19
- import { join, resolve } from 'path';
20
- // Helper for plugin mocks
21
- class PluginMock extends Plugin {
22
- metadata = { name: 'pluginA', version: '1.0.0' };
23
- imports = [];
24
- providers = [];
25
- async onLoad() { }
26
- async onInit() { }
27
- async onDestroy() { }
28
- registerCustomHooks() { }
29
- }
30
- class PluginMockA extends Plugin {
31
- metadata = { name: 'A', version: '1.0.0', dependencies: ['B'] };
32
- imports = [];
33
- providers = [];
34
- }
35
- class PluginMockB extends Plugin {
36
- metadata = { name: 'B', version: '1.0.0', dependencies: ['A'] };
37
- imports = [];
38
- providers = [];
39
- }
40
- describe('PluginLoader', () => {
41
- let loader;
42
- let tempRoot;
43
- beforeEach(async () => {
44
- loader = new PluginLoader();
45
- tempRoot = mkdtempSync(join(tmpdir(), 'plugin-test-'));
46
- // Create pluginA with module.ts
47
- const pluginADir = join(tempRoot, 'pluginA');
48
- await mkdir(pluginADir);
49
- await writeFile(join(pluginADir, 'module.ts'), '// pluginA module');
50
- // Create pluginB without module.ts
51
- const pluginBDir = join(tempRoot, 'pluginB');
52
- await mkdir(pluginBDir);
53
- // Create a non-directory file
54
- await writeFile(join(tempRoot, 'file.txt'), 'not a directory');
55
- });
56
- afterEach(async () => {
57
- await rm(tempRoot, { recursive: true, force: true });
58
- });
59
- it('findPlugins returns only directories with module.ts', async () => {
60
- const plugins = await loader.findPlugins('./src/lib/test-related/plugins');
61
- expect(plugins).toEqual([
62
- 'src/lib/test-related/plugins/plugin-a',
63
- 'src/lib/test-related/plugins/plugin-b',
64
- ]);
65
- });
66
- it('loadPlugin throws if no default export', async () => {
67
- const origJoin = require('path').join;
68
- require('path').join = (...args) => args.join('/');
69
- const origImport = global.import;
70
- global.import = async (_) => ({});
71
- await expect(loader.loadPlugin('./src/lib/test-related/plugins/plugin-a')).rejects.toThrow();
72
- global.import = origImport;
73
- require('path').join = origJoin;
74
- });
75
- it('loadPlugin loads valid plugin and triggers hooks', async () => {
76
- const modulePath = resolve('src/lib/test-related/plugins/plugin-a');
77
- const loaded = await loader.loadPlugin(modulePath);
78
- expect(loaded.plugin).toBeInstanceOf(await import(join(modulePath, 'module.ts')).then((m) => m.default));
79
- expect(loaded.metadata.name).toBe('pluginA');
80
- });
81
- it('unloadPlugin triggers destroy hooks and removes plugin', async () => {
82
- const loaded = {
83
- plugin: new PluginMock({}),
84
- metadata: { name: 'pluginA', version: '1.0.0' },
85
- pluginClass: PluginMock,
86
- };
87
- loader['loadedPlugins'].set('pluginA', loaded);
88
- await loader.unloadPlugin('pluginA');
89
- expect(loader.getPlugin('pluginA')).toBeUndefined();
90
- });
91
- it('getAllPlugins returns all loaded plugins', () => {
92
- const loaded = {
93
- plugin: new PluginMock({}),
94
- metadata: { name: 'pluginA', version: '1.0.0' },
95
- pluginClass: PluginMock,
96
- };
97
- loader['loadedPlugins'].set('pluginA', loaded);
98
- expect(loader.getAllPlugins()).toEqual([loaded]);
99
- });
100
- it('resolveDependencyOrder throws on circular dependency', () => {
101
- const pluginA = {
102
- plugin: new PluginMockA({}),
103
- metadata: { name: 'A', version: '1.0.0', dependencies: ['B'] },
104
- pluginClass: PluginMockA,
105
- };
106
- const pluginB = {
107
- plugin: new PluginMockB({}),
108
- metadata: { name: 'B', version: '1.0.0', dependencies: ['A'] },
109
- pluginClass: PluginMockB,
110
- };
111
- expect(() => loader['resolveDependencyOrder']([pluginA, pluginB])).toThrow();
112
- });
113
- });
114
- //# sourceMappingURL=PluginLoader.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginLoader.spec.js","sourceRoot":"","sources":["../../src/core/PluginLoader.spec.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { Plugin } from '../core/Plugin';
2
- export default class ExamplePlugin extends Plugin {
3
- readonly metadata: {
4
- name: string;
5
- version: string;
6
- description: string;
7
- dependencies: never[];
8
- };
9
- constructor();
10
- onLoad(): Promise<void>;
11
- onInit(): Promise<void>;
12
- onDestroy(): Promise<void>;
13
- protected registerCustomHooks(): void;
14
- private handleExampleEvent;
15
- private onApplicationStart;
16
- private onBeforePluginLoad;
17
- private registerAdditionalHooks;
18
- private handleDynamicHook;
19
- }
20
- //# sourceMappingURL=module.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/example-plugin/module.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAIxC,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,MAAM;IAC/C,QAAQ,CAAC,QAAQ;;;;;MAKf;;IAgBa,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAOvB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;cAItB,mBAAmB,IAAI,IAAI;YAQhC,kBAAkB;YAKlB,kBAAkB;YAKlB,kBAAkB;IAKhC,OAAO,CAAC,uBAAuB;YAOjB,iBAAiB;CAGhC"}
@@ -1,90 +0,0 @@
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;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { ExampleService } from './services';
11
- import { EXAMPLE_SERVICE_TOKEN } from './tokens';
12
- import { Hook } from '../decorators/hookDecorator';
13
- import { inject } from '@kanian77/simple-di';
14
- import { Plugin } from '../core/Plugin';
15
- import { HOOK_REGISTRY_TOKEN } from '../lib/types/tokens';
16
- export default class ExamplePlugin extends Plugin {
17
- metadata = {
18
- name: 'example-plugin',
19
- version: '1.0.0',
20
- description: 'An example plugin',
21
- dependencies: [], // other plugin names this depends on
22
- };
23
- constructor() {
24
- // Call parent Module constructor with plugin configuration
25
- super({
26
- providers: [
27
- {
28
- provide: EXAMPLE_SERVICE_TOKEN,
29
- useClass: ExampleService,
30
- },
31
- ],
32
- // Can also import other modules if needed
33
- // imports: [SomeOtherModule],
34
- });
35
- }
36
- async onLoad() {
37
- console.log('ExamplePlugin loading...');
38
- }
39
- async onInit() {
40
- console.log('ExamplePlugin initialized!');
41
- // Additional manual hook registration if needed
42
- this.registerAdditionalHooks();
43
- }
44
- async onDestroy() {
45
- console.log('ExamplePlugin destroyed!');
46
- }
47
- registerCustomHooks() {
48
- // Define custom hooks that this plugin provides
49
- // Other plugins can listen to these hooks
50
- console.log('Registering custom hooks for ExamplePlugin');
51
- }
52
- // These methods will be automatically registered as hook handlers
53
- async handleExampleEvent(data) {
54
- console.log('Handling example event via decorator:', data);
55
- }
56
- async onApplicationStart() {
57
- console.log('ExamplePlugin responding to application start via decorator');
58
- }
59
- async onBeforePluginLoad(pluginPath) {
60
- console.log('Another plugin is about to load:', pluginPath);
61
- }
62
- // Manual hook registration for dynamic scenarios
63
- registerAdditionalHooks() {
64
- const hookRegistry = inject(HOOK_REGISTRY_TOKEN);
65
- // Register additional hooks manually if needed
66
- hookRegistry.register('dynamic:custom-hook', this.handleDynamicHook.bind(this));
67
- }
68
- async handleDynamicHook(data) {
69
- console.log('Handling dynamic hook:', data);
70
- }
71
- }
72
- __decorate([
73
- Hook('custom:example-event'),
74
- __metadata("design:type", Function),
75
- __metadata("design:paramtypes", [Object]),
76
- __metadata("design:returntype", Promise)
77
- ], ExamplePlugin.prototype, "handleExampleEvent", null);
78
- __decorate([
79
- Hook('core:application-start'),
80
- __metadata("design:type", Function),
81
- __metadata("design:paramtypes", []),
82
- __metadata("design:returntype", Promise)
83
- ], ExamplePlugin.prototype, "onApplicationStart", null);
84
- __decorate([
85
- Hook('core:before-plugin-load'),
86
- __metadata("design:type", Function),
87
- __metadata("design:paramtypes", [String]),
88
- __metadata("design:returntype", Promise)
89
- ], ExamplePlugin.prototype, "onBeforePluginLoad", null);
90
- //# sourceMappingURL=module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/example-plugin/module.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,MAAM;IACtC,QAAQ,GAAG;QAClB,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,mBAAmB;QAChC,YAAY,EAAE,EAAE,EAAE,qCAAqC;KACxD,CAAC;IAEF;QACE,2DAA2D;QAC3D,KAAK,CAAC;YACJ,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,qBAAqB;oBAC9B,QAAQ,EAAE,cAAc;iBACzB;aACF;YACD,0CAA0C;YAC1C,8BAA8B;SAC/B,CAAC,CAAC;IACL,CAAC;IAEQ,KAAK,CAAC,MAAM;QACnB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAEQ,KAAK,CAAC,MAAM;QACnB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAE1C,gDAAgD;QAChD,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAEQ,KAAK,CAAC,SAAS;QACtB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAEkB,mBAAmB;QACpC,gDAAgD;QAChD,0CAA0C;QAC1C,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC5D,CAAC;IAED,kEAAkE;IAEpD,AAAN,KAAK,CAAC,kBAAkB,CAAC,IAAS;QACxC,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAGa,AAAN,KAAK,CAAC,kBAAkB;QAC9B,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC7E,CAAC;IAGa,AAAN,KAAK,CAAC,kBAAkB,CAAC,UAAkB;QACjD,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED,iDAAiD;IACzC,uBAAuB;QAC7B,MAAM,YAAY,GAAG,MAAM,CAAgB,mBAAmB,CAAC,CAAC;QAEhE,+CAA+C;QAC/C,YAAY,CAAC,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,IAAS;QACvC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;CACF;AAzBe;IADb,IAAI,CAAC,sBAAsB,CAAC;;;;uDAG5B;AAGa;IADb,IAAI,CAAC,wBAAwB,CAAC;;;;uDAG9B;AAGa;IADb,IAAI,CAAC,yBAAyB,CAAC;;;;uDAG/B"}
@@ -1,9 +0,0 @@
1
- export interface IExampleService {
2
- doSomething(): void;
3
- }
4
- export declare class ExampleService implements IExampleService {
5
- private hookRegistry;
6
- constructor();
7
- doSomething(): void;
8
- }
9
- //# sourceMappingURL=services.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/example-plugin/services.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,WAAW,IAAI,IAAI,CAAC;CACrB;AAED,qBACa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,YAAY,CAAgB;;IAKpC,WAAW,IAAI,IAAI;CAKpB"}
@@ -1,29 +0,0 @@
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;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { Service, inject } from '@kanian77/simple-di';
11
- import { EXAMPLE_SERVICE_TOKEN } from './tokens';
12
- import { HOOK_REGISTRY_TOKEN } from '../lib/types/tokens';
13
- let ExampleService = class ExampleService {
14
- hookRegistry;
15
- constructor() {
16
- this.hookRegistry = inject(HOOK_REGISTRY_TOKEN);
17
- }
18
- doSomething() {
19
- console.log('ExampleService doing something...');
20
- // Can trigger custom hooks
21
- this.hookRegistry.trigger('example:something-done', { data: 'example' });
22
- }
23
- };
24
- ExampleService = __decorate([
25
- Service({ token: EXAMPLE_SERVICE_TOKEN }),
26
- __metadata("design:paramtypes", [])
27
- ], ExampleService);
28
- export { ExampleService };
29
- //# sourceMappingURL=services.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/example-plugin/services.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQnD,IAAM,cAAc,GAApB,MAAM,cAAc;IACjB,YAAY,CAAgB;IACpC;QACE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAgB,mBAAmB,CAAC,CAAC;IACjE,CAAC;IAED,WAAW;QACT,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,2BAA2B;QAC3B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3E,CAAC;CACF,CAAA;AAXY,cAAc;IAD1B,OAAO,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;;GAC7B,cAAc,CAW1B"}
@@ -1,2 +0,0 @@
1
- export declare const EXAMPLE_SERVICE_TOKEN: unique symbol;
2
- //# sourceMappingURL=tokens.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/example-plugin/tokens.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,eAA2B,CAAC"}
@@ -1,2 +0,0 @@
1
- export const EXAMPLE_SERVICE_TOKEN = Symbol('ExampleService');
2
- //# sourceMappingURL=tokens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/example-plugin/tokens.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC"}
@@ -1,5 +0,0 @@
1
- export interface HookMetadata {
2
- hookName: string;
3
- methodName: string;
4
- }
5
- //# sourceMappingURL=HookMetadata.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HookMetadata.d.ts","sourceRoot":"","sources":["../../../src/lib/types/HookMetadata.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=HookMetadata.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HookMetadata.js","sourceRoot":"","sources":["../../../src/lib/types/HookMetadata.ts"],"names":[],"mappings":""}