@aalis/plugin-package-manager 0.1.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,69 @@
1
+ import type { Context } from '@aalis/core';
2
+ import { type ProcessService } from '@aalis/plugin-process-api';
3
+ import { type StorageService } from '@aalis/plugin-storage-api';
4
+ export declare const name = "@aalis/plugin-package-manager";
5
+ export declare const displayName = "\u5305\u7BA1\u7406\u5668";
6
+ export declare const subsystem = "system";
7
+ export declare const provides: string[];
8
+ export declare const inject: {
9
+ required: string[];
10
+ };
11
+ /**
12
+ * 包管理服务:从 npm 安装/卸载插件到 packages/ 目录
13
+ *
14
+ * 通过 `ctx.getService<PackageManagerService>('package-manager')` 消费。
15
+ *
16
+ * 这些操作涉及子进程(npm/tar/pnpm/rm),不属于 core 内核职责,
17
+ * 因此从 App 抽出到独立插件;底层子进程统一走 plugin-process-api。
18
+ */
19
+ export interface PackageManagerService {
20
+ /** 从 npm 安装插件到 packages/ 并触发 rescanPlugins */
21
+ install(npmPkg: string): Promise<{
22
+ ok: boolean;
23
+ message: string;
24
+ }>;
25
+ /** 停用并删除 packages/ 下对应目录 */
26
+ uninstall(pluginName: string): Promise<{
27
+ ok: boolean;
28
+ message: string;
29
+ }>;
30
+ }
31
+ declare module '@aalis/core' {
32
+ interface ServiceCapabilityMap {
33
+ 'package-manager': 'install' | 'uninstall';
34
+ }
35
+ }
36
+ /**
37
+ * 解析 `npm pack --json` 的输出 → 产物 {filename, name}。
38
+ * npm pack --json 输出形如 `[{"filename":"scope-foo-1.2.3.tgz","name":"@scope/foo",...}]`。
39
+ * 部分 npm 版本会在 JSON 前混入 notice,故定位首个 `[` 起截取。纯函数,便于单测。
40
+ */
41
+ export declare function parsePackInfo(jsonOut: string): {
42
+ filename: string;
43
+ name: string;
44
+ } | undefined;
45
+ /** install/uninstall 的显式依赖(从 ctx/网关解耦,便于集成测试) */
46
+ export interface PackageManagerDeps {
47
+ proc: ProcessService;
48
+ storage: Pick<StorageService, 'stat' | 'delete'>;
49
+ log: {
50
+ info(msg: string): void;
51
+ error(msg: string): void;
52
+ };
53
+ packagesUri(): string;
54
+ packagesLocal(): Promise<string>;
55
+ rescanPlugins(): Promise<string[]>;
56
+ disablePlugin(name: string): Promise<void>;
57
+ }
58
+ /**
59
+ * 包管理核心:install/uninstall 的纯依赖实现(不碰 ctx/网关,可单测)。
60
+ * ctx 组装层见 createService。
61
+ */
62
+ export declare function createPackageManager(deps: PackageManagerDeps): PackageManagerService;
63
+ export declare function apply(ctx: Context, config: Record<string, unknown>): void;
64
+ declare module '@aalis/core' {
65
+ interface ServiceTypeMap {
66
+ 'package-manager': PackageManagerService;
67
+ }
68
+ }
69
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACvG,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAItF,eAAO,MAAM,IAAI,kCAAkC,CAAC;AACpD,eAAO,MAAM,WAAW,6BAAS,CAAC;AAClC,eAAO,MAAM,SAAS,WAAW,CAAC;AAClC,eAAO,MAAM,QAAQ,UAAsB,CAAC;AAC5C,eAAO,MAAM,MAAM;;CAElB,CAAC;AAIF;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,8CAA8C;IAC9C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,4BAA4B;IAC5B,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,oBAAoB;QAC5B,iBAAiB,EAAE,SAAS,GAAG,WAAW,CAAC;KAC5C;CACF;AAID;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAW7F;AA8DD,iDAAiD;AACjD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;IACjD,GAAG,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC3D,WAAW,IAAI,MAAM,CAAC;IACtB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACnC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,qBAAqB,CA6EpF;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAKzE;AAGD,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,cAAc;QACtB,iBAAiB,EAAE,qBAAqB,CAAC;KAC1C;CACF"}
package/dist/index.js ADDED
@@ -0,0 +1,172 @@
1
+ import { createProcessGateway } from '@aalis/plugin-process-api';
2
+ import { createStorageGateway } from '@aalis/plugin-storage-api';
3
+ // ===== 插件元数据 =====
4
+ export const name = '@aalis/plugin-package-manager';
5
+ export const displayName = '包管理器';
6
+ export const subsystem = 'system';
7
+ export const provides = ['package-manager'];
8
+ export const inject = {
9
+ required: ['process', 'storage'],
10
+ };
11
+ // ===== 实现 =====
12
+ /**
13
+ * 解析 `npm pack --json` 的输出 → 产物 {filename, name}。
14
+ * npm pack --json 输出形如 `[{"filename":"scope-foo-1.2.3.tgz","name":"@scope/foo",...}]`。
15
+ * 部分 npm 版本会在 JSON 前混入 notice,故定位首个 `[` 起截取。纯函数,便于单测。
16
+ */
17
+ export function parsePackInfo(jsonOut) {
18
+ try {
19
+ const start = jsonOut.indexOf('[');
20
+ if (start < 0)
21
+ return undefined;
22
+ const arr = JSON.parse(jsonOut.slice(start));
23
+ const first = arr?.[0];
24
+ if (!first?.filename || !first?.name)
25
+ return undefined;
26
+ return { filename: first.filename, name: first.name };
27
+ }
28
+ catch {
29
+ return undefined;
30
+ }
31
+ }
32
+ async function execProc(proc, cmd, args, cwd) {
33
+ try {
34
+ const result = await proc.execFile(cmd, args, { cwd, timeout: 120_000 });
35
+ return result.stdout;
36
+ }
37
+ catch (err) {
38
+ const withResult = err;
39
+ const stderr = withResult.result?.stderr ?? '';
40
+ throw new Error(stderr || withResult.message);
41
+ }
42
+ }
43
+ function createService(ctx, config) {
44
+ const log = ctx.logger;
45
+ const proc = createProcessGateway(ctx);
46
+ const storage = createStorageGateway(ctx);
47
+ function getApp() {
48
+ const app = ctx.getService('app');
49
+ if (!app)
50
+ throw new Error('app 服务不可用,无法执行包管理操作');
51
+ return app;
52
+ }
53
+ /**
54
+ * 解析 packages/ 的 storage URI 与本地绝对路径。
55
+ *
56
+ * 与 core 的 createFsPluginLoader 默认一致:`workspace:/packages`。
57
+ * 可通过插件配置 `packagesDir` 字段覆盖(必须是 storage URI 或 workspace 下的相对路径)。
58
+ */
59
+ function packagesUri() {
60
+ const override = config.packagesDir;
61
+ if (typeof override === 'string' && override.length > 0) {
62
+ if (override.includes(':/'))
63
+ return override;
64
+ return `workspace:/${override.replace(/^\.?\/+/, '')}`;
65
+ }
66
+ return 'workspace:/packages';
67
+ }
68
+ async function packagesLocal() {
69
+ const uri = packagesUri();
70
+ if (!storage.resolveLocalPath) {
71
+ throw new Error('storage 服务未实现 resolveLocalPath,无法执行包管理操作');
72
+ }
73
+ return storage.resolveLocalPath(uri, 'write');
74
+ }
75
+ return createPackageManager({
76
+ proc,
77
+ storage,
78
+ log,
79
+ packagesUri,
80
+ packagesLocal,
81
+ rescanPlugins: () => getApp().rescanPlugins(),
82
+ // plugins 服务可能未启用:缺席即跳过实例停用(仅删目录)
83
+ disablePlugin: async (name) => {
84
+ const pm = ctx.getService('plugins');
85
+ if (pm)
86
+ await pm.disablePlugin(name);
87
+ },
88
+ });
89
+ }
90
+ /**
91
+ * 包管理核心:install/uninstall 的纯依赖实现(不碰 ctx/网关,可单测)。
92
+ * ctx 组装层见 createService。
93
+ */
94
+ export function createPackageManager(deps) {
95
+ const { proc, storage, log } = deps;
96
+ async function dirExists(uri) {
97
+ try {
98
+ await storage.stat(uri);
99
+ return true;
100
+ }
101
+ catch {
102
+ return false;
103
+ }
104
+ }
105
+ return {
106
+ async install(npmPkg) {
107
+ const packagesDir = await deps.packagesLocal();
108
+ // 分离包名与可选版本:@scope/foo@1.2.3 → dirName=foo(去 scope、去版本)
109
+ const dirName = npmPkg.replace(/^@[^/]+\//, '').replace(/@[^@]+$/, '');
110
+ const targetUri = `${deps.packagesUri()}/${dirName}`;
111
+ const targetDir = `${packagesDir}/${dirName}`;
112
+ if (await dirExists(targetUri)) {
113
+ return { ok: false, message: `目录 ${dirName} 已存在` };
114
+ }
115
+ log.info(`正在安装插件: ${npmPkg} → packages/${dirName}`);
116
+ let tgzName;
117
+ try {
118
+ // npm pack --json 精确返回产物 {filename, name},避免 includes 误匹配
119
+ // (装 foo 时命中 foo-bar-*.tgz);name 是精确包名,供 pnpm --filter 用。
120
+ const packOut = await execProc(proc, 'npm', ['pack', npmPkg, '--pack-destination', packagesDir, '--json'], packagesDir);
121
+ const packInfo = parsePackInfo(packOut);
122
+ if (!packInfo)
123
+ return { ok: false, message: '下载包失败: 未能解析 npm pack 产物' };
124
+ tgzName = packInfo.filename;
125
+ const tgzPath = `${packagesDir}/${tgzName}`;
126
+ await execProc(proc, 'mkdir', ['-p', targetDir], packagesDir);
127
+ await execProc(proc, 'tar', ['xzf', tgzPath, '-C', targetDir, '--strip-components=1'], packagesDir);
128
+ await storage.delete(`${deps.packagesUri()}/${tgzName}`).catch(() => { }); // 清理 tgz
129
+ tgzName = undefined; // 已删,回滚时不再尝试
130
+ // --filter 用精确包名(npm pack 回报的 name,无版本后缀)链接新 workspace 包
131
+ await execProc(proc, 'pnpm', ['install', '--filter', packInfo.name], process.cwd());
132
+ const newPlugins = await deps.rescanPlugins();
133
+ return newPlugins.length > 0
134
+ ? { ok: true, message: `已安装并加载: ${newPlugins.join(', ')}` }
135
+ : { ok: true, message: `已安装到 packages/${dirName},但未发现新插件` };
136
+ }
137
+ catch (err) {
138
+ const message = err instanceof Error ? err.message : String(err);
139
+ log.error(`安装插件 "${npmPkg}" 失败: ${message}`);
140
+ // 回滚:清理半成品 targetDir 与残留 tgz,避免占位导致下次"目录已存在"
141
+ await storage.delete(targetUri).catch(() => { });
142
+ if (tgzName)
143
+ await storage.delete(`${deps.packagesUri()}/${tgzName}`).catch(() => { });
144
+ return { ok: false, message };
145
+ }
146
+ },
147
+ async uninstall(pluginName) {
148
+ await deps.disablePlugin(pluginName); // 先停用实例(plugins 服务缺席则 no-op)
149
+ const dirName = pluginName.replace(/^@[^/]+\//, '');
150
+ const targetUri = `${deps.packagesUri()}/${dirName}`;
151
+ if (!(await dirExists(targetUri))) {
152
+ return { ok: true, message: `插件 ${pluginName} 已卸载(目录不存在)` };
153
+ }
154
+ try {
155
+ await storage.delete(targetUri);
156
+ log.info(`已删除插件目录: packages/${dirName}`);
157
+ return { ok: true, message: `插件 ${pluginName} 已卸载并删除` };
158
+ }
159
+ catch (err) {
160
+ const message = err instanceof Error ? err.message : String(err);
161
+ return { ok: false, message };
162
+ }
163
+ },
164
+ };
165
+ }
166
+ export function apply(ctx, config) {
167
+ ctx.provide('package-manager', createService(ctx, config), {
168
+ capabilities: ['install', 'uninstall'],
169
+ label: 'package-manager',
170
+ });
171
+ }
172
+ //# 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,40 @@
1
+ {
2
+ "name": "@aalis/plugin-package-manager",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "keywords": [
6
+ "aalis-plugin"
7
+ ],
8
+ "main": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "dependencies": {
14
+ "@aalis/plugin-process-api": "^0.1.0",
15
+ "@aalis/plugin-storage-api": "^0.1.0"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^22.0.0",
19
+ "typescript": "^5.7.0",
20
+ "@aalis/core": "0.1.0"
21
+ },
22
+ "peerDependencies": {
23
+ "@aalis/core": "^0.1.0"
24
+ },
25
+ "aalis": {
26
+ "service": {
27
+ "required": [
28
+ "process",
29
+ "storage"
30
+ ],
31
+ "provides": [
32
+ "package-manager"
33
+ ]
34
+ }
35
+ },
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "dev": "tsc --watch"
39
+ }
40
+ }