@aalis/plugin-package-manager 0.8.1 → 0.10.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.
- package/README.md +5 -3
- package/dist/index.d.ts +45 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +285 -209
- package/dist/index.js.map +1 -1
- package/dist/locales/en.d.ts +70 -0
- package/dist/locales/en.d.ts.map +1 -0
- package/dist/locales/en.js +70 -0
- package/dist/locales/en.js.map +1 -0
- package/dist/texts.d.ts +139 -0
- package/dist/texts.d.ts.map +1 -0
- package/dist/texts.js +78 -0
- package/dist/texts.js.map +1 -0
- package/package.json +11 -9
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @aalis/plugin-package-manager
|
|
2
2
|
|
|
3
|
-
插件包管理:从 npm
|
|
3
|
+
插件包管理:从 npm 安装/卸载/更新到宿主安装集的 dependencies
|
|
4
4
|
|
|
5
5
|
## 安装
|
|
6
6
|
|
|
@@ -13,9 +13,11 @@ pnpm add @aalis/plugin-package-manager
|
|
|
13
13
|
`definePlugin` 默认导出:
|
|
14
14
|
|
|
15
15
|
- provides:`packageManager`(服务名 `package-manager`;描述符来自 `@aalis/api-package-manager`)
|
|
16
|
-
- uses:`proc`(`process`)、`logger`、`
|
|
16
|
+
- uses:`proc`(`process`)、`paths`(`host-paths`)、`logger`、`provide`、`services`;可选 `app`、`plugins`、`hostConfig`(`host-config`)、`source`(`plugin-source`)
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
装卸落在宿主安装集(`host-paths` 的 `app`,与插件加载器读同一份 `package.json`)的 `dependencies`,随后经宿主的 `plugin-source` 服务 `rescan()` 让加载器发现;宿主不提供插件来源时视同本次没有新插件。卸载后经 `host-config` 清掉各实例的禁用标记;配置块与密钥默认留着(重装后照原配置启动),调用方传 `removeConfig: true` 时一并删掉配置块与只有它们用的密钥。配置文件没写成时包照样卸掉,回执写明原因;宿主未提供配置文档时不整理。
|
|
19
|
+
|
|
20
|
+
宿主不提供 `host-paths` 时本插件停在 pending。原配置项 `projectRoot` 已删除,配置文件里遗留的这个键不再生效,可以删掉;要装到别的目录,给 `startAalis` 传 `appDir`。
|
|
19
21
|
|
|
20
22
|
装卸只接受插件(`aalis-plugin`)与前端界面(`aalis-interface`)包;卸载会让其它插件失去所需服务的唯一提供者时拒绝。插件写入存储根的数据不随卸载删除。
|
|
21
23
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type PackageManagerService, type UpdateTarget } from '@aalis/api-package-manager';
|
|
2
2
|
import { type ProcessService } from '@aalis/api-process';
|
|
3
3
|
import { type AppService, type PluginStatusEntry } from '@aalis/core';
|
|
4
|
+
import { type TextRef } from '@aalis/schema-i18n';
|
|
4
5
|
/**
|
|
5
6
|
* 根依赖里是否含 `workspace:` 协议。
|
|
6
7
|
*
|
|
@@ -20,17 +21,21 @@ export declare function hasWorkspaceProtocol(pkgJson: Record<string, unknown> |
|
|
|
20
21
|
export declare function declaresPlugin(pkgJson: Record<string, unknown> | undefined): boolean;
|
|
21
22
|
/**
|
|
22
23
|
* 包类型是否归市场装卸:插件(判据同 {@link declaresPlugin})与前端界面(`aalis-interface`)
|
|
23
|
-
* 归市场管,返回 `undefined
|
|
24
|
-
*
|
|
24
|
+
* 归市场管,返回 `undefined`;其余按类型关键词返回种类码(没有类型关键词的是 other),拒绝时显示 KIND_NAMES 里的名字。
|
|
25
|
+
* 装与卸共用这一份判据——同一件事维护两份同义判据,正是本仓已出事四次的形态(依赖来源判据、定级数学、包名正则、关键词分类)。
|
|
25
26
|
* 纯函数,便于单测。
|
|
26
27
|
*/
|
|
27
|
-
export declare function nonMarketKind(keywords: unknown):
|
|
28
|
+
export declare function nonMarketKind(keywords: unknown): 'core' | 'runtime' | 'api' | 'schema' | 'util' | 'other' | undefined;
|
|
29
|
+
/** 服务依赖者闸读的插件状态:判谁在提供、谁 required 什么,以及 pending 的目标是缺还是在等(api-doctor 的共享判据) */
|
|
30
|
+
type ServiceStatus = Pick<PluginStatusEntry, 'name' | 'instanceId' | 'state' | 'error' | 'provides' | 'uses'>;
|
|
28
31
|
/**
|
|
29
|
-
* 找出「卸载 target 会断其服务依赖」的插件:target
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
+
* 找出「卸载 target 会断其服务依赖」的插件:target 的某个实例正在提供或马上就提供的某服务 S 没有别的插件正在提供,且有别的
|
|
33
|
+
* 插件 required 依赖 S(uses 里未包 optional)→ 这些插件会被打断。卸载连同 target 的全部实例一起卸下,所以按同名的每个实例判:算在提供的是
|
|
34
|
+
* active、activating,以及 pending 而只是在等的(按 api-doctor 的共享判据不缺什么,它要的在启动,起来就提供);disabled、
|
|
35
|
+
* error 与 pending 而缺服务的不在提供。别的提供者只算 active 与 activating(替代得是确定的)。已禁用(disabled / disposed)
|
|
36
|
+
* 的依赖者不算。available 是当前有提供者的服务名(services.names())。纯函数,便于单测。
|
|
32
37
|
*/
|
|
33
|
-
export declare function findServiceDependents(targetName: string, status: ReadonlyArray<
|
|
38
|
+
export declare function findServiceDependents(targetName: string, status: ReadonlyArray<ServiceStatus>, available: Iterable<string>): string[];
|
|
34
39
|
/**
|
|
35
40
|
* 校验单个包 spec,合法返回 `undefined`、非法返回可读理由。
|
|
36
41
|
*
|
|
@@ -41,8 +46,8 @@ export declare function findServiceDependents(targetName: string, status: Readon
|
|
|
41
46
|
* 两者挡的东西不同,不是同一份的拷贝,别再把它们合并成一条。
|
|
42
47
|
* 纯函数,便于单测。
|
|
43
48
|
*/
|
|
44
|
-
export declare function validatePackageSpec(spec: unknown):
|
|
45
|
-
/** install/uninstall
|
|
49
|
+
export declare function validatePackageSpec(spec: unknown): TextRef | undefined;
|
|
50
|
+
/** install/uninstall 的显式依赖(从服务选择解耦,便于集成测试) */
|
|
46
51
|
export interface PackageManagerDeps {
|
|
47
52
|
proc: ProcessService;
|
|
48
53
|
log: {
|
|
@@ -72,7 +77,9 @@ export interface PackageManagerDeps {
|
|
|
72
77
|
* 运行时插件状态,供服务依赖者判定({@link findServiceDependents})与装后回执(按主实例状态说明)。
|
|
73
78
|
* 缺省视为没有活跃插件。
|
|
74
79
|
*/
|
|
75
|
-
pluginStatus?(): ReadonlyArray<
|
|
80
|
+
pluginStatus?(): ReadonlyArray<ServiceStatus>;
|
|
81
|
+
/** 当前有提供者的服务名(`services.names()`,含宿主在根上提供的),服务依赖者判定用。缺省视为没有 */
|
|
82
|
+
availableServices?(): Iterable<string>;
|
|
76
83
|
/**
|
|
77
84
|
* 等插件状态机静置(plugins 服务的 `idle()`),装后回执读状态之前调用:rescan 登记新插件时若已有重算在飞,
|
|
78
85
|
* 登记只排队、立即返回,主实例还是 pending。不等转入后台的慢激活。缺省不等。
|
|
@@ -85,8 +92,11 @@ export interface PackageManagerDeps {
|
|
|
85
92
|
* shell 恢复——与内核/宿主同一条判据。见 uninstallOne 的闸一之二。
|
|
86
93
|
*/
|
|
87
94
|
recoveryChannelProviders?(): string[];
|
|
88
|
-
/**
|
|
89
|
-
|
|
95
|
+
/**
|
|
96
|
+
* 卸载后整理配置文档并落盘:清掉这些实例的停用标记(否则重装时带着上次的停用态登记);removeConfig 时再删它们的配置段,
|
|
97
|
+
* 落盘后只有这些段引用的密钥由宿主一并删掉。落盘失败以拒绝传出。缺省则不整理
|
|
98
|
+
*/
|
|
99
|
+
cleanupConfig?(instanceIds: string[], removeConfig: boolean): Promise<void>;
|
|
90
100
|
/**
|
|
91
101
|
* 解析已装 npm 包的插件定义 name(与 `@aalis/api-plugin-source` 的 `pluginDefinitionOf` 同一口径:入口 default.name)。
|
|
92
102
|
* 解析不到则返回 undefined,调用方回退到包名。name≠包名时由 createPackageManager warn。
|
|
@@ -122,14 +132,26 @@ export declare function stripVersion(spec: string): string;
|
|
|
122
132
|
* 不猜用户意图。纯函数,便于单测。
|
|
123
133
|
*/
|
|
124
134
|
export declare function buildUpdateSpecs(targets: readonly UpdateTarget[]): {
|
|
125
|
-
specs
|
|
126
|
-
error?:
|
|
135
|
+
specs: string[];
|
|
136
|
+
error?: undefined;
|
|
137
|
+
} | {
|
|
138
|
+
specs?: undefined;
|
|
139
|
+
error: TextRef;
|
|
127
140
|
};
|
|
128
141
|
/**
|
|
129
142
|
* 从 npm 的失败输出里摘出冲突要点,供前端直接展示。保留根项目的声明行(`… from the root project`),看得出冲突由
|
|
130
143
|
* 哪条根依赖引起;完整报告的路径行(`…-eresolve-report.txt`)随不分大小写的 ERESOLVE 一并保留。纯函数,便于单测。
|
|
131
144
|
*/
|
|
132
145
|
export declare function extractPeerConflicts(output: string): string[];
|
|
146
|
+
/** npm 失败的几类:与 create-aalis 装依赖失败认的同一套,对账用例钉住 */
|
|
147
|
+
type NpmFailureKind = 'disk' | 'permission' | 'platform' | 'peer' | 'browser' | 'native' | 'missing' | 'network';
|
|
148
|
+
/** npm 的失败输出认出是哪一类,认不出时为 undefined。纯函数,便于单测 */
|
|
149
|
+
export declare function npmFailureKind(output: string): NpmFailureKind | undefined;
|
|
150
|
+
/**
|
|
151
|
+
* 把 npm 的失败输出归成一句给用户看的话:认得出的写原因与修法,认不出的写 npm 的最后一条报错,并指向日志与排障页。
|
|
152
|
+
* 整段输出由调用方记进日志,回执与提示里只放这一句。纯函数,便于单测。
|
|
153
|
+
*/
|
|
154
|
+
export declare function describeNpmFailure(output: string): TextRef;
|
|
133
155
|
/**
|
|
134
156
|
* 从 **成功**(exit 0)的 dry-run 输出里找出因本次目标而无法满足的 peer 依赖。
|
|
135
157
|
*
|
|
@@ -142,24 +164,24 @@ export declare function extractPeerConflicts(output: string): string[];
|
|
|
142
164
|
* 而它确实会在 stderr 打出 `peer <name>@"<range>" from <dependent>`。只认**提到本次目标**
|
|
143
165
|
* 的那些行:工程里原有的、与本次无关的未满足 peer 不该阻断更新。
|
|
144
166
|
*/
|
|
145
|
-
export declare function findUnmetPeers(output: string, targetNames: readonly string[]):
|
|
167
|
+
export declare function findUnmetPeers(output: string, targetNames: readonly string[]): TextRef[];
|
|
146
168
|
/**
|
|
147
|
-
* 包管理核心:install/uninstall
|
|
148
|
-
* 所有文件操作走 process
|
|
169
|
+
* 包管理核心:install/uninstall 的纯依赖实现(不碰服务选择,可单测)。
|
|
170
|
+
* 所有文件操作走 process 服务(子进程:npm/cp/test),目标是项目根 package.json 与
|
|
149
171
|
* node_modules——不经 storage 沙盒。
|
|
150
172
|
* 能力组装层见 createService。
|
|
151
173
|
*/
|
|
152
174
|
export declare function createPackageManager(deps: PackageManagerDeps): PackageManagerService;
|
|
153
175
|
declare const _default: import("@aalis/core").PluginDefinition<{
|
|
154
|
-
proc: import("@aalis/core").ServiceDescriptor<ProcessService,
|
|
176
|
+
proc: import("@aalis/core").ServiceDescriptor<ProcessService, ProcessService>;
|
|
177
|
+
paths: import("@aalis/core").ServiceDescriptor<import("@aalis/api-host-paths").HostPaths, import("@aalis/api-host-paths").HostPaths>;
|
|
155
178
|
logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
|
|
156
|
-
config: import("@aalis/core").ServiceDescriptor<(identity: symbol) => Readonly<Record<string, unknown>>, Readonly<Record<string, unknown>>>;
|
|
157
179
|
provide: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Provide, import("@aalis/core").Provide>;
|
|
158
180
|
services: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Services, import("@aalis/core").Services>;
|
|
159
|
-
app: import("@aalis/core").OptionalUse<AppService,
|
|
160
|
-
plugins: import("@aalis/core").OptionalUse<import("@aalis/core").PluginManagerService, import("@aalis/core").
|
|
161
|
-
hostConfig: import("@aalis/core").OptionalUse<import("@aalis/api-host-config").HostConfig, import("@aalis/
|
|
162
|
-
source: import("@aalis/core").OptionalUse<import("@aalis/api-plugin-source").PluginSourceService, import("@aalis/
|
|
181
|
+
app: import("@aalis/core").OptionalUse<AppService, AppService>;
|
|
182
|
+
plugins: import("@aalis/core").OptionalUse<import("@aalis/core").PluginManagerService, import("@aalis/core").PluginManagerService>;
|
|
183
|
+
hostConfig: import("@aalis/core").OptionalUse<import("@aalis/api-host-config").HostConfig, import("@aalis/api-host-config").HostConfig>;
|
|
184
|
+
source: import("@aalis/core").OptionalUse<import("@aalis/api-plugin-source").PluginSourceService, import("@aalis/api-plugin-source").PluginSourceService>;
|
|
163
185
|
}>;
|
|
164
186
|
export default _default;
|
|
165
187
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|