@aalis/plugin-package-manager 0.10.0 → 0.11.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 CHANGED
@@ -13,11 +13,13 @@ 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`)、`paths`(`host-paths`)、`logger`、`provide`、`services`;可选 `app`、`plugins`、`hostConfig`(`host-config`)、`source`(`plugin-source`)
16
+ - uses:`proc`(`process`)、`paths`(`host-paths`)、`lifecycle`、`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
19
 
20
- 宿主不提供 `host-paths` 时本插件停在 pending。原配置项 `projectRoot` 已删除,配置文件里遗留的这个键不再生效,可以删掉;要装到别的目录,给 `startAalis` 传 `appDir`。
20
+ 本插件停用、重启或停机时打断在途的 npm:已经动过文件的,等 npm 退出后把 `package.json` 与锁文件还原到操作前,回执写明没有生效、怎样对齐 node_modules;收尾等还原做完,新实例在此之前不启动。
21
+
22
+ 宿主不提供 `host-paths` 时本插件停在 pending。要装到别的目录,给 `startAalis` 传 `appDir`。
21
23
 
22
24
  装卸只接受插件(`aalis-plugin`)与前端界面(`aalis-interface`)包;卸载会让其它插件失去所需服务的唯一提供者时拒绝。插件写入存储根的数据不随卸载删除。
23
25
 
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
- import { type AppService, type PluginStatusEntry } from '@aalis/core';
3
+ import { type PluginStatusEntry } from '@aalis/core';
4
+ import type { RestartRollback } from '@aalis/runtime';
4
5
  import { type TextRef } from '@aalis/schema-i18n';
5
6
  /**
6
7
  * 根依赖里是否含 `workspace:` 协议。
@@ -11,14 +12,6 @@ import { type TextRef } from '@aalis/schema-i18n';
11
12
  * 故不能指望 npm 兜底,必须自己先判。纯函数,便于单测。
12
13
  */
13
14
  export declare function hasWorkspaceProtocol(pkgJson: Record<string, unknown> | undefined): boolean;
14
- /**
15
- * 包是否声明自己是可加载插件(与两个加载器同一判据:纯 `aalis-plugin` 关键词正向门)。
16
- *
17
- * 用途是把「装完没发现新插件」分成两种情形:目标本就不是插件(如 `aalis-interface`
18
- * 前端包)→ 正常;目标声明了自己是插件却没被发现 → **静默假成功**,必须报失败。
19
- * 纯函数,便于单测。
20
- */
21
- export declare function declaresPlugin(pkgJson: Record<string, unknown> | undefined): boolean;
22
15
  /**
23
16
  * 包类型是否归市场装卸:插件(判据同 {@link declaresPlugin})与前端界面(`aalis-interface`)
24
17
  * 归市场管,返回 `undefined`;其余按类型关键词返回种类码(没有类型关键词的是 other),拒绝时显示 KIND_NAMES 里的名字。
@@ -31,17 +24,17 @@ type ServiceStatus = Pick<PluginStatusEntry, 'name' | 'instanceId' | 'state' | '
31
24
  /**
32
25
  * 找出「卸载 target 会断其服务依赖」的插件:target 的某个实例正在提供或马上就提供的某服务 S 没有别的插件正在提供,且有别的
33
26
  * 插件 required 依赖 S(uses 里未包 optional)→ 这些插件会被打断。卸载连同 target 的全部实例一起卸下,所以按同名的每个实例判:算在提供的是
34
- * active、activating,以及 pending 而只是在等的(按 api-doctor 的共享判据不缺什么,它要的在启动,起来就提供);disabled、
27
+ * active、activating,以及 pending 而只是在等的(按 api-doctor 的共享判据不缺什么,它要的在启动,启动后就提供);disabled、
35
28
  * error 与 pending 而缺服务的不在提供。别的提供者只算 active 与 activating(替代得是确定的)。已禁用(disabled / disposed)
36
29
  * 的依赖者不算。available 是当前有提供者的服务名(services.names())。纯函数,便于单测。
37
30
  */
38
31
  export declare function findServiceDependents(targetName: string, status: ReadonlyArray<ServiceStatus>, available: Iterable<string>): string[];
39
32
  /**
40
- * 校验单个包 spec,合法返回 `undefined`、非法返回可读理由。
33
+ * 校验单个包 spec(包名,可带 `@版本`),合法返回 `undefined`、非法返回可读理由。
41
34
  *
42
35
  * 放在**服务层**:本服务对外公开,任何插件都能绕过 HTTP 路由直接调用。
43
36
  * 这与 `buildUpdateSpecs` 是同一条纪律——路由只做「是不是字符串」的形状检查,安全校验
44
- * 收在所有调用方的必经之路上。**argv 面只有这一份实现**(两份正则漂移是本仓栽过的坑);
37
+ * 收在所有调用方的必经之路上。argv 面的包名与版本各只有一个正则,装、卸(本函数)与更新(buildUpdateSpecs)共用;
45
38
  * URL 路径段另有一份不含版本段的(webui-server 的 depgraph 端点,见那里的注释)——
46
39
  * 两者挡的东西不同,不是同一份的拷贝,别再把它们合并成一条。
47
40
  * 纯函数,便于单测。
@@ -52,76 +45,59 @@ export interface PackageManagerDeps {
52
45
  proc: ProcessService;
53
46
  log: {
54
47
  info(msg: string): void;
48
+ warn(msg: string): void;
55
49
  error(msg: string): void;
56
- warn?(msg: string): void;
57
50
  };
58
- /** 项目根绝对路径(= `<cwd>`):根 package.json 读取、npm 的 cwd。 */
51
+ /**
52
+ * 本插件这次激活的中止信号:停用、重启与停机时断开,交给 npm,打断在途的操作。断开之后不再受理新操作
53
+ */
54
+ signal: AbortSignal;
55
+ /** 安装集目录的绝对路径(宿主 host-paths 的 `app`):根 package.json 读取、npm 的 cwd。 */
59
56
  projectRoot(): string;
60
57
  /** 读文本文件;不存在或读失败返回 undefined。注入以便单测。 */
61
58
  readText(absPath: string): Promise<string | undefined>;
62
59
  rescanPlugins(): Promise<string[]>;
63
60
  /**
64
- * 目标插件此刻是否已在运行时注册表里。
61
+ * 以这个插件名登记的主实例是不是经插件来源加载的(插件来源的 `loaded`);没有登记或不是经插件来源登记的为 false。
65
62
  *
66
- * 这是判定「本次安装是否就位」的**唯一正确判据**。不能用 `rescanPlugins()` 的返回值:
63
+ * 这是判定「本次安装是否就位」的**唯一正确判据**:此刻注册表里的这个插件是从目标包加载的。不能用 `rescanPlugins()` 的返回值:
67
64
  * 它是全局副作用的产物——宿主的 rescan 对已注册插件直接跳过,返回的是「本次扫描新
68
65
  * 加载的**全部**插件」,与本次目标无对应关系。用它会在两个场景下给出错误结论:
69
- * 重装已注册插件时恒返回空(误报失败);两个安装并发时先跑完的那个会把对方的战果
70
- * 一并算作自己的(谎报),后跑的则拿到空数组(误报失败)。
66
+ * 重装已注册插件时恒返回空(误报失败);两个安装并发时先执行完毕的那个会把对方的结果
67
+ * 一并算作自己的(谎报),后跑的则拿到空数组(误报失败)。也不能只看插件名已登记:名字被宿主直接登记的插件占着时,
68
+ * 发现驱动跳过目标包,注册表里那个插件不是它。
71
69
  *
72
- * 传入的是**定义 name**(经 {@link PackageManagerDeps.resolveDefinitionName} 解析),
73
- * 不是 npm 包名——二者可以不同。
70
+ * 插件名即包名,传入的就是 npm 包名。
74
71
  */
72
+ loaded(name: string): boolean;
73
+ /** 以这个插件名登记的主实例此刻是否在注册表里:不是从目标包加载的,就是插件名被占着、目标包被跳过 */
75
74
  isPluginRegistered(name: string): boolean;
76
- /**
77
- * 运行时插件状态,供服务依赖者判定({@link findServiceDependents})与装后回执(按主实例状态说明)。
78
- * 缺省视为没有活跃插件。
79
- */
80
- pluginStatus?(): ReadonlyArray<ServiceStatus>;
81
- /** 当前有提供者的服务名(`services.names()`,含宿主在根上提供的),服务依赖者判定用。缺省视为没有 */
82
- availableServices?(): Iterable<string>;
75
+ /** 运行时插件状态,供服务依赖者判定({@link findServiceDependents})、装后回执(按主实例状态说明)与卸载时按定义 name 找全部实例。 */
76
+ pluginStatus(): ReadonlyArray<ServiceStatus>;
77
+ /** 当前有提供者的服务名(`services.names()`,含宿主在根上提供的),服务依赖者判定用 */
78
+ availableServices(): Iterable<string>;
83
79
  /**
84
80
  * 等插件状态机静置(plugins 服务的 `idle()`),装后回执读状态之前调用:rescan 登记新插件时若已有重算在飞,
85
- * 登记只排队、立即返回,主实例还是 pending。不等转入后台的慢激活。缺省不等。
81
+ * 登记只排队、立即返回,主实例还是 pending。不等转入后台的慢激活。
86
82
  */
87
- idle?(): Promise<void>;
88
- /** 彻底卸载插件(dispose + 从注册表移除)。plugins 服务缺席则 no-op。 */
83
+ idle(): Promise<void>;
84
+ /** 彻底卸载插件(dispose + 从注册表移除)。 */
89
85
  unloadPlugin(name: string): Promise<void>;
90
86
  /**
91
87
  * 当前**承载撤销通道**的服务提供者包名列表(去重)。卸掉其中任何一个,用户就只能开
92
88
  * shell 恢复——与内核/宿主同一条判据。见 uninstallOne 的闸一之二。
93
89
  */
94
- recoveryChannelProviders?(): string[];
90
+ recoveryChannelProviders(): string[];
95
91
  /**
96
92
  * 卸载后整理配置文档并落盘:清掉这些实例的停用标记(否则重装时带着上次的停用态登记);removeConfig 时再删它们的配置段,
97
- * 落盘后只有这些段引用的密钥由宿主一并删掉。落盘失败以拒绝传出。缺省则不整理
93
+ * 落盘后只有这些段引用的密钥由宿主一并删掉。落盘失败以拒绝传出。宿主不提供配置文档时什么都不做
98
94
  */
99
- cleanupConfig?(instanceIds: string[], removeConfig: boolean): Promise<void>;
95
+ cleanupConfig(instanceIds: string[], removeConfig: boolean): Promise<void>;
100
96
  /**
101
- * 解析已装 npm 包的插件定义 name(与 `@aalis/api-plugin-source` 的 `pluginDefinitionOf` 同一口径:入口 default.name)。
102
- * 解析不到则返回 undefined,调用方回退到包名。name≠包名时由 createPackageManager warn。
97
+ * 重启进程并交付回滚凭据(新实例启动失败时由重启策略消费)。宿主没有重启策略或应用已开始停机时同步抛错
98
+ * (core 的 `app.restart()`)。
103
99
  */
104
- resolveDefinitionName?(pkgName: string): Promise<string | undefined>;
105
- /**
106
- * 按定义 name 列出注册表里全部 instanceId(主实例 + `name:suffix`)。
107
- * 缺省则只对传入的定义 name 做一次 unload / cleanup。
108
- */
109
- listPluginInstanceIds?(definitionName: string): string[];
110
- /** 重启进程并交付回滚凭据(新实例起不来时由重启策略消费)。缺省则 update 不可用。 */
111
- restartApp?(rollback: {
112
- reason: string;
113
- /** `deleteIfEmpty` 表示该文件更新前并不存在,回滚时应删除而非写空(见 runtime 的 RestartRollback)。 */
114
- restore: Array<{
115
- path: string;
116
- content: string;
117
- deleteIfEmpty?: boolean;
118
- }>;
119
- postRestore?: {
120
- cmd: string;
121
- args: string[];
122
- cwd: string;
123
- };
124
- }): void;
100
+ restartApp(rollback: RestartRollback): void;
125
101
  }
126
102
  /** `@scope/foo@1.2.3` → `@scope/foo`(剥掉版本后缀,保留 scope)。 */
127
103
  export declare function stripVersion(spec: string): string;
@@ -143,7 +119,7 @@ export declare function buildUpdateSpecs(targets: readonly UpdateTarget[]): {
143
119
  * 哪条根依赖引起;完整报告的路径行(`…-eresolve-report.txt`)随不分大小写的 ERESOLVE 一并保留。纯函数,便于单测。
144
120
  */
145
121
  export declare function extractPeerConflicts(output: string): string[];
146
- /** npm 失败的几类:与 create-aalis 装依赖失败认的同一套,对账用例钉住 */
122
+ /** npm 失败的几类:与 create-aalis 装依赖失败认的同一套,核对用例钉住 */
147
123
  type NpmFailureKind = 'disk' | 'permission' | 'platform' | 'peer' | 'browser' | 'native' | 'missing' | 'network';
148
124
  /** npm 的失败输出认出是哪一类,认不出时为 undefined。纯函数,便于单测 */
149
125
  export declare function npmFailureKind(output: string): NpmFailureKind | undefined;
@@ -171,15 +147,18 @@ export declare function findUnmetPeers(output: string, targetNames: readonly str
171
147
  * node_modules——不经 storage 沙盒。
172
148
  * 能力组装层见 createService。
173
149
  */
174
- export declare function createPackageManager(deps: PackageManagerDeps): PackageManagerService;
150
+ export declare function createPackageManager(deps: PackageManagerDeps): PackageManagerService & {
151
+ settled(): Promise<void>;
152
+ };
175
153
  declare const _default: import("@aalis/core").PluginDefinition<{
176
154
  proc: import("@aalis/core").ServiceDescriptor<ProcessService, ProcessService>;
177
155
  paths: import("@aalis/core").ServiceDescriptor<import("@aalis/api-host-paths").HostPaths, import("@aalis/api-host-paths").HostPaths>;
156
+ lifecycle: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").LifecycleCap, import("@aalis/core").LifecycleCap>;
178
157
  logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
179
158
  provide: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Provide, import("@aalis/core").Provide>;
180
159
  services: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Services, import("@aalis/core").Services>;
181
- app: import("@aalis/core").OptionalUse<AppService, AppService>;
182
- plugins: import("@aalis/core").OptionalUse<import("@aalis/core").PluginManagerService, import("@aalis/core").PluginManagerService>;
160
+ app: import("@aalis/core").ServiceDescriptor<import("@aalis/core").AppService, import("@aalis/core").AppService>;
161
+ plugins: import("@aalis/core").ServiceDescriptor<import("@aalis/core").PluginManagerService, import("@aalis/core").PluginManagerService>;
183
162
  hostConfig: import("@aalis/core").OptionalUse<import("@aalis/api-host-config").HostConfig, import("@aalis/api-host-config").HostConfig>;
184
163
  source: import("@aalis/core").OptionalUse<import("@aalis/api-plugin-source").PluginSourceService, import("@aalis/api-plugin-source").PluginSourceService>;
185
164
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}