@yumerijs/loader 1.0.5 → 1.0.7
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 +1 -7
- package/dist/index.js +34 -82
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ declare class PluginLoader {
|
|
|
8
8
|
private config;
|
|
9
9
|
private isDev;
|
|
10
10
|
private pluginsDir;
|
|
11
|
+
private logger;
|
|
11
12
|
constructor(core?: Core, config?: Config, pluginsDir?: string);
|
|
12
13
|
setCoreAndConfig(core: Core, config: Config): void;
|
|
13
14
|
/**
|
|
@@ -45,12 +46,5 @@ declare class PluginLoader {
|
|
|
45
46
|
* @param pluginPath 插件路径.
|
|
46
47
|
*/
|
|
47
48
|
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
49
|
}
|
|
56
50
|
export default PluginLoader;
|
package/dist/index.js
CHANGED
|
@@ -32,15 +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
|
-
const
|
|
41
|
+
const tsNode = __importStar(require("ts-node"));
|
|
44
42
|
const url_1 = require("url");
|
|
45
43
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
46
44
|
class PluginLoader {
|
|
@@ -50,11 +48,18 @@ class PluginLoader {
|
|
|
50
48
|
this.config = null;
|
|
51
49
|
this.isDev = false;
|
|
52
50
|
this.pluginsDir = 'plugins'; // Default plugins directory
|
|
51
|
+
this.logger = new core_1.Logger('loader');
|
|
53
52
|
this.pluginCache = {};
|
|
54
53
|
this.core = core || null;
|
|
55
54
|
this.config = config || null;
|
|
56
55
|
this.isDev = process.env.NODE_ENV === 'development';
|
|
57
56
|
this.pluginsDir = pluginsDir;
|
|
57
|
+
tsNode.register({
|
|
58
|
+
transpileOnly: true, // Use transpileOnly for faster compilation
|
|
59
|
+
compilerOptions: {
|
|
60
|
+
module: 'CommonJS' // Ensure CommonJS for compatibility with require
|
|
61
|
+
}
|
|
62
|
+
});
|
|
58
63
|
}
|
|
59
64
|
setCoreAndConfig(core, config) {
|
|
60
65
|
this.core = core;
|
|
@@ -68,7 +73,7 @@ class PluginLoader {
|
|
|
68
73
|
*/
|
|
69
74
|
async load(pluginName) {
|
|
70
75
|
if (this.pluginCache[pluginName]) {
|
|
71
|
-
|
|
76
|
+
this.logger.info(`Returning cached plugin: ${pluginName}`);
|
|
72
77
|
return this.pluginCache[pluginName];
|
|
73
78
|
}
|
|
74
79
|
let pluginPath;
|
|
@@ -105,7 +110,7 @@ class PluginLoader {
|
|
|
105
110
|
return plugin;
|
|
106
111
|
}
|
|
107
112
|
catch (e) {
|
|
108
|
-
|
|
113
|
+
this.logger.error(`Failed to load plugin from ${pluginPath}:`, e);
|
|
109
114
|
throw e;
|
|
110
115
|
}
|
|
111
116
|
}
|
|
@@ -120,21 +125,32 @@ class PluginLoader {
|
|
|
120
125
|
try {
|
|
121
126
|
let targetPath = pluginPath;
|
|
122
127
|
if (isLocalPlugin && this.isDev) {
|
|
123
|
-
|
|
128
|
+
// 开发模式下,加载 src 目录下的 ts 文件
|
|
129
|
+
targetPath = path.join(pluginPath, 'src', 'index.ts');
|
|
124
130
|
if (!fs.existsSync(targetPath)) {
|
|
125
131
|
throw new Error(`src/index.ts not found in ${pluginPath}`);
|
|
126
132
|
}
|
|
127
|
-
|
|
128
|
-
|
|
133
|
+
// 检查目标文件是否是 TypeScript 文件
|
|
134
|
+
if (targetPath.endsWith('.ts')) {
|
|
135
|
+
// 使用 require 加载 TypeScript 模块
|
|
136
|
+
const module = require(targetPath);
|
|
137
|
+
return module;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// 使用 require 加载 js 模块
|
|
141
|
+
const module = require(targetPath);
|
|
142
|
+
return module;
|
|
143
|
+
}
|
|
129
144
|
}
|
|
130
145
|
else {
|
|
131
146
|
targetPath = require.resolve(pluginPath);
|
|
132
|
-
const pluginModule = require(targetPath);
|
|
133
|
-
return pluginModule;
|
|
134
147
|
}
|
|
148
|
+
//使用require加载
|
|
149
|
+
const pluginModule = require(targetPath);
|
|
150
|
+
return pluginModule;
|
|
135
151
|
}
|
|
136
152
|
catch (e) {
|
|
137
|
-
|
|
153
|
+
this.logger.error(`Error loading plugin from path ${pluginPath}:`, e);
|
|
138
154
|
throw e;
|
|
139
155
|
}
|
|
140
156
|
}
|
|
@@ -157,7 +173,7 @@ class PluginLoader {
|
|
|
157
173
|
if (require.cache[resolvedPath]) {
|
|
158
174
|
delete require.cache[resolvedPath];
|
|
159
175
|
}
|
|
160
|
-
|
|
176
|
+
this.logger.info(`Plugin unloaded: ${pluginName}`);
|
|
161
177
|
}
|
|
162
178
|
/**
|
|
163
179
|
* 检查插件的依赖是否满足.
|
|
@@ -174,83 +190,19 @@ class PluginLoader {
|
|
|
174
190
|
*/
|
|
175
191
|
async installPluginDependencies(pluginName) {
|
|
176
192
|
try {
|
|
177
|
-
|
|
193
|
+
this.logger.info(`Installing dependencies for plugin: ${pluginName}`);
|
|
178
194
|
const { stdout, stderr } = await execAsync(`npm install ${pluginName} --save`);
|
|
179
|
-
|
|
195
|
+
this.logger.info(`stdout: ${stdout}`);
|
|
180
196
|
if (stderr) {
|
|
181
|
-
|
|
197
|
+
this.logger.error(`stderr: ${stderr}`);
|
|
182
198
|
}
|
|
183
|
-
|
|
199
|
+
this.logger.info(`Dependencies installed for plugin: ${pluginName}`);
|
|
184
200
|
}
|
|
185
201
|
catch (error) {
|
|
186
|
-
|
|
202
|
+
this.logger.error(`Error installing dependencies for plugin ${pluginName}:`, error);
|
|
187
203
|
throw error;
|
|
188
204
|
}
|
|
189
205
|
}
|
|
190
|
-
/**
|
|
191
|
-
* 监听插件目录,实现热重载
|
|
192
|
-
* @param core Core实例
|
|
193
|
-
* @param config Config实例
|
|
194
|
-
* @param pluginsDir 插件目录
|
|
195
|
-
*/
|
|
196
|
-
watchPlugins(core, config, pluginsDir = 'plugins') {
|
|
197
|
-
const watcher = chokidar_1.default.watch(pluginsDir, {
|
|
198
|
-
ignored: /(^|[/\\])\../, // 忽略点文件
|
|
199
|
-
persistent: true,
|
|
200
|
-
ignoreInitial: true,
|
|
201
|
-
awaitWriteFinish: {
|
|
202
|
-
stabilityThreshold: 200,
|
|
203
|
-
pollInterval: 100
|
|
204
|
-
}
|
|
205
|
-
});
|
|
206
|
-
watcher.on('add', async (pluginName) => {
|
|
207
|
-
if (pluginName.endsWith('.ts') || pluginName.endsWith('.js'))
|
|
208
|
-
return;
|
|
209
|
-
console.log(`New plugin detected: ${pluginName}`);
|
|
210
|
-
try {
|
|
211
|
-
// 仅加载目录名作为插件名
|
|
212
|
-
const pluginDirName = path.basename(pluginName);
|
|
213
|
-
await this.load(pluginDirName);
|
|
214
|
-
if (this.core && this.config)
|
|
215
|
-
this.core.emit('plugin-loaded', pluginName);
|
|
216
|
-
}
|
|
217
|
-
catch (error) {
|
|
218
|
-
console.error(`Failed to load new plugin ${pluginName}:`, error);
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
watcher.on('change', async (pluginName) => {
|
|
222
|
-
if (!pluginName.endsWith('.ts'))
|
|
223
|
-
return;
|
|
224
|
-
console.log(`Plugin changed: ${pluginName}`);
|
|
225
|
-
try {
|
|
226
|
-
const pluginDirName = path.dirname(pluginName);
|
|
227
|
-
//const pluginDirName = path.basename(pluginName);
|
|
228
|
-
await this.unloadPlugin(pluginDirName);
|
|
229
|
-
await this.load(pluginDirName);
|
|
230
|
-
if (this.core && this.config)
|
|
231
|
-
this.core.emit('plugin-reloaded', pluginName);
|
|
232
|
-
}
|
|
233
|
-
catch (error) {
|
|
234
|
-
console.error(`Failed to reload plugin ${pluginName}:`, error);
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
watcher.on('unlink', async (pluginName) => {
|
|
238
|
-
if (!pluginName.endsWith('.ts'))
|
|
239
|
-
return;
|
|
240
|
-
console.log(`Plugin removed: ${pluginName}`);
|
|
241
|
-
try {
|
|
242
|
-
const pluginDirName = path.dirname(pluginName);
|
|
243
|
-
//const pluginDirName = path.basename(pluginName);
|
|
244
|
-
await this.unloadPlugin(pluginDirName);
|
|
245
|
-
if (this.core && this.config)
|
|
246
|
-
this.core.emit('plugin-unloaded', pluginName);
|
|
247
|
-
}
|
|
248
|
-
catch (error) {
|
|
249
|
-
console.error(`Failed to unload plugin ${pluginName}:`, error);
|
|
250
|
-
}
|
|
251
|
-
});
|
|
252
|
-
console.log(`Watching for plugin changes in ${pluginsDir}`);
|
|
253
|
-
}
|
|
254
206
|
}
|
|
255
207
|
exports.default = PluginLoader;
|
|
256
208
|
//# 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,yCAAsD;AACtD,uCAAyB;AACzB,+BAAiC;AACjC,iDAAqC;AAErC,gDAAkC;AAElC,6BAAoC;AAEpC,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAMlC,MAAM,YAAY;IAQhB,YAAY,IAAW,EAAE,MAAe,EAAE,aAAqB,SAAS;QAPhE,gBAAW,GAA+B,EAAE,CAAC;QAC7C,SAAI,GAAgB,IAAI,CAAC;QACzB,WAAM,GAAkB,IAAI,CAAC;QAC7B,UAAK,GAAY,KAAK,CAAC;QACvB,eAAU,GAAW,SAAS,CAAC,CAAC,4BAA4B;QAC5D,WAAM,GAAG,IAAI,aAAM,CAAC,QAAQ,CAAC,CAAC;QAGpC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;QACpD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,MAAM,CAAC,QAAQ,CAAC;YACI,aAAa,EAAE,IAAI,EAAE,2CAA2C;YAChE,eAAe,EAAE;gBACb,MAAM,EAAE,UAAU,CAAC,iDAAiD;aACvE;SACJ,CAAC,CAAC;IACrB,CAAC;IAED,gBAAgB,CAAC,IAAU,EAAE,MAAc;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,UAAkB;QACzB,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,UAAkB,CAAC;QACvB,IAAI,aAAa,GAAG,KAAK,CAAC;QAE1B,qBAAqB;QACrB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAClE,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACjC,UAAU,GAAG,eAAe,CAAC;YAC7B,aAAa,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,oBAAoB;aACf,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACjE,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACtC,aAAa,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,kBAAkB;aACb,CAAC;YACF,IAAI,CAAC;gBACD,mCAAmC;gBACnC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAE,WAAW;gBACzC,UAAU,GAAG,UAAU,CAAC;YAC5B,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,8BAA8B;gBAC9B,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBAChC,MAAM,IAAI,KAAK,CAAC,UAAU,UAAU,sCAAsC,CAAC,CAAC;gBAChF,CAAC;gBACD,MAAM,CAAC,CAAC,CAAE,eAAe;YAC7B,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YACxE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;YACtC,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,CAAC;QACZ,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,kBAAkB,CAAC,UAAkB,EAAE,aAAsB;QACzE,IAAI,CAAC;YAED,IAAI,UAAU,GAAG,UAAU,CAAC;YAC5B,IAAI,aAAa,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,0BAA0B;gBAC1B,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;gBACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBAEA,0BAA0B;gBAC3B,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7B,8BAA8B;oBAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;oBACnC,OAAO,MAAM,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACF,sBAAsB;oBACxB,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;oBACnC,OAAO,MAAM,CAAC;gBAClB,CAAC;YAEL,CAAC;iBAAM,CAAC;gBACH,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC;YAED,aAAa;YACb,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACzC,OAAO,YAAY,CAAA;QAEvB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;YACtE,MAAM,CAAC,CAAC;QACZ,CAAC;IACL,CAAC;IAEC;;;OAGG;IACH;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,UAAkB;QACnC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,oBAAoB;QAChC,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAEpC,0CAA0C;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAChF,MAAM,YAAY,GAAI,IAAA,mBAAa,EAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE3D,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;IACvD,CAAC;IAEC;;;;OAIG;IACH,KAAK,CAAC,uBAAuB,CAAC,UAAkB;QAC9C,kCAAkC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,yBAAyB,CAAC,UAAkB;QAChD,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,UAAU,EAAE,CAAC,CAAC;YACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,eAAe,UAAU,SAAS,CAAC,CAAC;YAC/E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;YACtC,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,UAAU,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;YACpF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED,kBAAe,YAAY,CAAC"}
|