@yumerijs/loader 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -15
- package/dist/index.js +12 -82
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Core, Config } from '@yumerijs/core';
|
|
2
2
|
interface Plugin {
|
|
3
3
|
apply: (core: Core, config: Config) => Promise<void>;
|
|
4
|
+
disable: (core: Core) => Promise<void>;
|
|
4
5
|
}
|
|
5
6
|
declare class PluginLoader {
|
|
6
7
|
private pluginCache;
|
|
@@ -8,6 +9,7 @@ declare class PluginLoader {
|
|
|
8
9
|
private config;
|
|
9
10
|
private isDev;
|
|
10
11
|
private pluginsDir;
|
|
12
|
+
private logger;
|
|
11
13
|
constructor(core?: Core, config?: Config, pluginsDir?: string);
|
|
12
14
|
setCoreAndConfig(core: Core, config: Config): void;
|
|
13
15
|
/**
|
|
@@ -25,14 +27,6 @@ declare class PluginLoader {
|
|
|
25
27
|
* @throws 如果插件加载失败.
|
|
26
28
|
*/
|
|
27
29
|
private loadPluginFromPath;
|
|
28
|
-
/**
|
|
29
|
-
* 卸载插件
|
|
30
|
-
* @param pluginName 插件名称
|
|
31
|
-
*/
|
|
32
|
-
/**
|
|
33
|
-
* 卸载插件
|
|
34
|
-
* @param pluginName 插件名称
|
|
35
|
-
*/
|
|
36
30
|
unloadPlugin(pluginName: string): Promise<void>;
|
|
37
31
|
/**
|
|
38
32
|
* 检查插件的依赖是否满足.
|
|
@@ -45,12 +39,5 @@ declare class PluginLoader {
|
|
|
45
39
|
* @param pluginPath 插件路径.
|
|
46
40
|
*/
|
|
47
41
|
installPluginDependencies(pluginName: string): Promise<void>;
|
|
48
|
-
/**
|
|
49
|
-
* 监听插件目录,实现热重载
|
|
50
|
-
* @param core Core实例
|
|
51
|
-
* @param config Config实例
|
|
52
|
-
* @param pluginsDir 插件目录
|
|
53
|
-
*/
|
|
54
|
-
watchPlugins(core: Core, config: Config, pluginsDir?: string): void;
|
|
55
42
|
}
|
|
56
43
|
export default PluginLoader;
|
package/dist/index.js
CHANGED
|
@@ -32,16 +32,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
36
|
const path = __importStar(require("path"));
|
|
37
|
+
const core_1 = require("@yumerijs/core");
|
|
40
38
|
const fs = __importStar(require("fs"));
|
|
41
39
|
const util_1 = require("util");
|
|
42
40
|
const child_process_1 = require("child_process");
|
|
43
41
|
const tsNode = __importStar(require("ts-node"));
|
|
44
|
-
const chokidar_1 = __importDefault(require("chokidar"));
|
|
45
42
|
const url_1 = require("url");
|
|
46
43
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
47
44
|
class PluginLoader {
|
|
@@ -51,6 +48,7 @@ class PluginLoader {
|
|
|
51
48
|
this.config = null;
|
|
52
49
|
this.isDev = false;
|
|
53
50
|
this.pluginsDir = 'plugins'; // Default plugins directory
|
|
51
|
+
this.logger = new core_1.Logger('loader');
|
|
54
52
|
this.pluginCache = {};
|
|
55
53
|
this.core = core || null;
|
|
56
54
|
this.config = config || null;
|
|
@@ -75,7 +73,7 @@ class PluginLoader {
|
|
|
75
73
|
*/
|
|
76
74
|
async load(pluginName) {
|
|
77
75
|
if (this.pluginCache[pluginName]) {
|
|
78
|
-
|
|
76
|
+
this.logger.info(`Returning cached plugin: ${pluginName}`);
|
|
79
77
|
return this.pluginCache[pluginName];
|
|
80
78
|
}
|
|
81
79
|
let pluginPath;
|
|
@@ -112,7 +110,7 @@ class PluginLoader {
|
|
|
112
110
|
return plugin;
|
|
113
111
|
}
|
|
114
112
|
catch (e) {
|
|
115
|
-
|
|
113
|
+
this.logger.error(`Failed to load plugin from ${pluginPath}:`, e);
|
|
116
114
|
throw e;
|
|
117
115
|
}
|
|
118
116
|
}
|
|
@@ -152,15 +150,11 @@ class PluginLoader {
|
|
|
152
150
|
return pluginModule;
|
|
153
151
|
}
|
|
154
152
|
catch (e) {
|
|
155
|
-
|
|
153
|
+
this.logger.error(`Error loading plugin from path ${pluginPath}:`, e);
|
|
156
154
|
throw e;
|
|
157
155
|
}
|
|
158
156
|
}
|
|
159
|
-
|
|
160
|
-
* 卸载插件
|
|
161
|
-
* @param pluginName 插件名称
|
|
162
|
-
*/
|
|
163
|
-
/**
|
|
157
|
+
/*
|
|
164
158
|
* 卸载插件
|
|
165
159
|
* @param pluginName 插件名称
|
|
166
160
|
*/
|
|
@@ -175,7 +169,7 @@ class PluginLoader {
|
|
|
175
169
|
if (require.cache[resolvedPath]) {
|
|
176
170
|
delete require.cache[resolvedPath];
|
|
177
171
|
}
|
|
178
|
-
|
|
172
|
+
this.logger.info(`Plugin unloaded: ${pluginName}`);
|
|
179
173
|
}
|
|
180
174
|
/**
|
|
181
175
|
* 检查插件的依赖是否满足.
|
|
@@ -192,83 +186,19 @@ class PluginLoader {
|
|
|
192
186
|
*/
|
|
193
187
|
async installPluginDependencies(pluginName) {
|
|
194
188
|
try {
|
|
195
|
-
|
|
189
|
+
this.logger.info(`Installing dependencies for plugin: ${pluginName}`);
|
|
196
190
|
const { stdout, stderr } = await execAsync(`npm install ${pluginName} --save`);
|
|
197
|
-
|
|
191
|
+
this.logger.info(`stdout: ${stdout}`);
|
|
198
192
|
if (stderr) {
|
|
199
|
-
|
|
193
|
+
this.logger.error(`stderr: ${stderr}`);
|
|
200
194
|
}
|
|
201
|
-
|
|
195
|
+
this.logger.info(`Dependencies installed for plugin: ${pluginName}`);
|
|
202
196
|
}
|
|
203
197
|
catch (error) {
|
|
204
|
-
|
|
198
|
+
this.logger.error(`Error installing dependencies for plugin ${pluginName}:`, error);
|
|
205
199
|
throw error;
|
|
206
200
|
}
|
|
207
201
|
}
|
|
208
|
-
/**
|
|
209
|
-
* 监听插件目录,实现热重载
|
|
210
|
-
* @param core Core实例
|
|
211
|
-
* @param config Config实例
|
|
212
|
-
* @param pluginsDir 插件目录
|
|
213
|
-
*/
|
|
214
|
-
watchPlugins(core, config, pluginsDir = 'plugins') {
|
|
215
|
-
const watcher = chokidar_1.default.watch(pluginsDir, {
|
|
216
|
-
ignored: /(^|[/\\])\../, // 忽略点文件
|
|
217
|
-
persistent: true,
|
|
218
|
-
ignoreInitial: true,
|
|
219
|
-
awaitWriteFinish: {
|
|
220
|
-
stabilityThreshold: 200,
|
|
221
|
-
pollInterval: 100
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
watcher.on('add', async (pluginName) => {
|
|
225
|
-
if (pluginName.endsWith('.ts') || pluginName.endsWith('.js'))
|
|
226
|
-
return;
|
|
227
|
-
console.log(`New plugin detected: ${pluginName}`);
|
|
228
|
-
try {
|
|
229
|
-
// 仅加载目录名作为插件名
|
|
230
|
-
const pluginDirName = path.basename(pluginName);
|
|
231
|
-
await this.load(pluginDirName);
|
|
232
|
-
if (this.core && this.config)
|
|
233
|
-
this.core.emit('plugin-loaded', pluginName);
|
|
234
|
-
}
|
|
235
|
-
catch (error) {
|
|
236
|
-
console.error(`Failed to load new plugin ${pluginName}:`, error);
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
watcher.on('change', async (pluginName) => {
|
|
240
|
-
if (!pluginName.endsWith('.ts'))
|
|
241
|
-
return;
|
|
242
|
-
console.log(`Plugin changed: ${pluginName}`);
|
|
243
|
-
try {
|
|
244
|
-
const pluginDirName = path.dirname(pluginName);
|
|
245
|
-
//const pluginDirName = path.basename(pluginName);
|
|
246
|
-
await this.unloadPlugin(pluginDirName);
|
|
247
|
-
await this.load(pluginDirName);
|
|
248
|
-
if (this.core && this.config)
|
|
249
|
-
this.core.emit('plugin-reloaded', pluginName);
|
|
250
|
-
}
|
|
251
|
-
catch (error) {
|
|
252
|
-
console.error(`Failed to reload plugin ${pluginName}:`, error);
|
|
253
|
-
}
|
|
254
|
-
});
|
|
255
|
-
watcher.on('unlink', async (pluginName) => {
|
|
256
|
-
if (!pluginName.endsWith('.ts'))
|
|
257
|
-
return;
|
|
258
|
-
console.log(`Plugin removed: ${pluginName}`);
|
|
259
|
-
try {
|
|
260
|
-
const pluginDirName = path.dirname(pluginName);
|
|
261
|
-
//const pluginDirName = path.basename(pluginName);
|
|
262
|
-
await this.unloadPlugin(pluginDirName);
|
|
263
|
-
if (this.core && this.config)
|
|
264
|
-
this.core.emit('plugin-unloaded', pluginName);
|
|
265
|
-
}
|
|
266
|
-
catch (error) {
|
|
267
|
-
console.error(`Failed to unload plugin ${pluginName}:`, error);
|
|
268
|
-
}
|
|
269
|
-
});
|
|
270
|
-
console.log(`Watching for plugin changes in ${pluginsDir}`);
|
|
271
|
-
}
|
|
272
202
|
}
|
|
273
203
|
exports.default = PluginLoader;
|
|
274
204
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|