@yumerijs/loader 1.0.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.
@@ -0,0 +1,33 @@
1
+ interface Plugin {
2
+ apply: (core: any) => Promise<void>;
3
+ }
4
+ declare class PluginLoader {
5
+ private pluginCache;
6
+ constructor();
7
+ /**
8
+ * 从本地目录或 npm 包加载插件.
9
+ * @param pluginName 插件名称或路径.
10
+ * @returns 加载的插件对象.
11
+ * @throws 如果插件加载失败.
12
+ */
13
+ load(pluginName: string): Promise<Plugin>;
14
+ /**
15
+ * 从指定路径加载插件.
16
+ * @param pluginPath 插件路径.
17
+ * @returns 加载的插件对象.
18
+ * @throws 如果插件加载失败.
19
+ */
20
+ private loadPluginFromPath;
21
+ /**
22
+ * 检查插件的依赖是否满足.
23
+ * @param pluginPath 插件路径.
24
+ * @returns 如果依赖满足,则返回 true,否则返回 false.
25
+ */
26
+ checkPluginDependencies(pluginPath: string): Promise<boolean>;
27
+ /**
28
+ * 安装插件的依赖.
29
+ * @param pluginPath 插件路径.
30
+ */
31
+ installPluginDependencies(pluginName: string): Promise<void>;
32
+ }
33
+ export default PluginLoader;
package/dist/index.js ADDED
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const path = __importStar(require("path"));
37
+ const util_1 = require("util");
38
+ const child_process_1 = require("child_process");
39
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
40
+ class PluginLoader {
41
+ constructor() {
42
+ this.pluginCache = {};
43
+ this.pluginCache = {};
44
+ }
45
+ /**
46
+ * 从本地目录或 npm 包加载插件.
47
+ * @param pluginName 插件名称或路径.
48
+ * @returns 加载的插件对象.
49
+ * @throws 如果插件加载失败.
50
+ */
51
+ async load(pluginName) {
52
+ if (this.pluginCache[pluginName]) {
53
+ console.log(`Returning cached plugin: ${pluginName}`);
54
+ return this.pluginCache[pluginName];
55
+ }
56
+ let pluginPath;
57
+ // 1. 检查是否是本地路径
58
+ if (path.isAbsolute(pluginName) || pluginName.startsWith('.')) {
59
+ pluginPath = path.resolve(pluginName);
60
+ }
61
+ // 2. 尝试作为 npm 包加载
62
+ else {
63
+ try {
64
+ // 尝试 require,如果成功,则认为是一个已安装的 npm 包
65
+ require.resolve(pluginName); // 检查包是否已安装
66
+ pluginPath = pluginName;
67
+ }
68
+ catch (e) {
69
+ // 如果 require.resolve 失败,则抛出错误
70
+ if (e.code === 'MODULE_NOT_FOUND') {
71
+ throw new Error(`Plugin ${pluginName} not found. Please install it first.`);
72
+ }
73
+ throw e; // 其他类型的错误,直接抛出
74
+ }
75
+ }
76
+ try {
77
+ const plugin = await this.loadPluginFromPath(pluginPath);
78
+ this.pluginCache[pluginName] = plugin;
79
+ return plugin;
80
+ }
81
+ catch (e) {
82
+ console.error(`Failed to load plugin from ${pluginPath}:`, e);
83
+ throw e;
84
+ }
85
+ }
86
+ /**
87
+ * 从指定路径加载插件.
88
+ * @param pluginPath 插件路径.
89
+ * @returns 加载的插件对象.
90
+ * @throws 如果插件加载失败.
91
+ */
92
+ async loadPluginFromPath(pluginPath) {
93
+ try {
94
+ const resolvedPath = require.resolve(pluginPath);
95
+ const pluginModule = require(resolvedPath);
96
+ if (typeof pluginModule === 'function') {
97
+ // 假设导出一个函数
98
+ return { apply: pluginModule };
99
+ }
100
+ else if (typeof pluginModule.apply === 'function') {
101
+ // 假设导出一个对象,并且有 apply 方法
102
+ return pluginModule;
103
+ }
104
+ else {
105
+ throw new Error(`Plugin at ${pluginPath} does not export an 'apply' function.`);
106
+ }
107
+ }
108
+ catch (e) {
109
+ console.error(`Error loading plugin from path ${pluginPath}:`, e);
110
+ throw e;
111
+ }
112
+ }
113
+ /**
114
+ * 检查插件的依赖是否满足.
115
+ * @param pluginPath 插件路径.
116
+ * @returns 如果依赖满足,则返回 true,否则返回 false.
117
+ */
118
+ async checkPluginDependencies(pluginPath) {
119
+ // TODO: 读取插件package.json,检查依赖是否满足
120
+ return true;
121
+ }
122
+ /**
123
+ * 安装插件的依赖.
124
+ * @param pluginPath 插件路径.
125
+ */
126
+ async installPluginDependencies(pluginName) {
127
+ try {
128
+ console.log(`Installing dependencies for plugin: ${pluginName}`);
129
+ const { stdout, stderr } = await execAsync(`npm install ${pluginName} --save`);
130
+ console.log(`stdout: ${stdout}`);
131
+ if (stderr) {
132
+ console.error(`stderr: ${stderr}`);
133
+ }
134
+ console.log(`Dependencies installed for plugin: ${pluginName}`);
135
+ }
136
+ catch (error) {
137
+ console.error(`Error installing dependencies for plugin ${pluginName}:`, error);
138
+ throw error;
139
+ }
140
+ }
141
+ }
142
+ exports.default = PluginLoader;
143
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@yumerijs/loader",
3
+ "version": "1.0.0",
4
+ "description": "Module loader for yumeri",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "prepublishOnly": "npm run build"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/WindyPear-Team/yumeri.git"
17
+ },
18
+ "keywords": [
19
+ "yumeri",
20
+ "API"
21
+ ],
22
+ "author": "WindyPear-Team,FireGuo",
23
+ "license": "MIT",
24
+ "bugs": {
25
+ "url": "https://github.com/WindyPear-Team/yumeri/issues"
26
+ },
27
+ "homepage": "https://github.com/WindyPear-Team/yumeri#readme",
28
+ "devDependencies": {
29
+ "@types/node": "^22.13.10",
30
+ "@types/semver": "^7.5.8",
31
+ "typescript": "^5.8.2"
32
+ },
33
+ "dependencies": {
34
+ "semver": "^7.7.1"
35
+ }
36
+ }