@aalis/runtime 0.15.0 → 0.16.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 +11 -2
- package/dist/config-store.d.ts +49 -12
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +419 -58
- package/dist/config-store.js.map +1 -1
- package/dist/config-sync.d.ts +19 -8
- package/dist/config-sync.d.ts.map +1 -1
- package/dist/config-sync.js +81 -58
- package/dist/config-sync.js.map +1 -1
- package/dist/console-sink.d.ts +1 -1
- package/dist/file-logger.d.ts +4 -4
- package/dist/file-logger.d.ts.map +1 -1
- package/dist/file-logger.js +6 -5
- package/dist/file-logger.js.map +1 -1
- package/dist/home.d.ts +64 -0
- package/dist/home.d.ts.map +1 -0
- package/dist/home.js +229 -0
- package/dist/home.js.map +1 -0
- package/dist/host-logs.d.ts +9 -0
- package/dist/host-logs.d.ts.map +1 -0
- package/dist/host-logs.js +104 -0
- package/dist/host-logs.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/instance-lock.d.ts +56 -0
- package/dist/instance-lock.d.ts.map +1 -0
- package/dist/instance-lock.js +281 -0
- package/dist/instance-lock.js.map +1 -0
- package/dist/node-modules-loader.d.ts +2 -2
- package/dist/node-modules-loader.d.ts.map +1 -1
- package/dist/node-modules-loader.js +8 -4
- package/dist/node-modules-loader.js.map +1 -1
- package/dist/plugin-discovery.d.ts +9 -4
- package/dist/plugin-discovery.d.ts.map +1 -1
- package/dist/plugin-discovery.js +28 -16
- package/dist/plugin-discovery.js.map +1 -1
- package/dist/providers.d.ts +38 -13
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +92 -216
- package/dist/providers.js.map +1 -1
- package/dist/secrets.d.ts +44 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +104 -0
- package/dist/secrets.js.map +1 -0
- package/dist/start.d.ts +19 -12
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +166 -43
- package/dist/start.js.map +1 -1
- package/dist/yaml-file.d.ts +35 -0
- package/dist/yaml-file.d.ts.map +1 -0
- package/dist/yaml-file.js +213 -0
- package/dist/yaml-file.js.map +1 -0
- package/package.json +13 -7
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @aalis/runtime
|
|
2
2
|
|
|
3
|
-
Aalis 独立部署运行时:node_modules 插件加载 + YAML
|
|
3
|
+
Aalis 独立部署运行时:node_modules 插件加载 + YAML 配置与密钥文件 + 一行启动 startAalis
|
|
4
4
|
|
|
5
5
|
## 安装
|
|
6
6
|
|
|
@@ -10,12 +10,21 @@ pnpm add @aalis/runtime
|
|
|
10
10
|
|
|
11
11
|
## 提供 / 依赖
|
|
12
12
|
|
|
13
|
-
宿主组装件,不是插件,无 `provides` / `uses`;`startAalis` 在根上独占登记 `host-config`(`@aalis/api-host-config`)与 `plugin-source`(`@aalis/api-plugin-source
|
|
13
|
+
宿主组装件,不是插件,无 `provides` / `uses`;`startAalis` 在根上独占登记 `host-paths`(`@aalis/api-host-paths`)、`host-logs`(`@aalis/api-host-logs`)、`host-config`(`@aalis/api-host-config`)与 `plugin-source`(`@aalis/api-plugin-source`)四个服务。主要导出:`startAalis`、家目录的 `parseHostArgs` / `resolveHome` / `profileOfRealHome` / `derivePaths` / `isHomeInitialized` / `initHome`、`createNodeModulesPluginLoader`、`createFsPluginLoader`、`createPluginDiscovery`、`createConfigStore`、`installHostConfig`、`createHostLogs`、`withPluginConfigSync`、`createFsYamlConfigProvider`、`createFsSecretsProvider`、`createProcessRespawnStrategy`。peer:`@aalis/core`(`>=0.20.0 <1.0.0`)。
|
|
14
14
|
|
|
15
15
|
```ts
|
|
16
|
+
import { dirname } from 'node:path';
|
|
17
|
+
import { fileURLToPath } from 'node:url';
|
|
16
18
|
import { startAalis } from '@aalis/runtime';
|
|
19
|
+
|
|
20
|
+
// 安装集是入口文件所在目录;家目录按 --home、AALIS_HOME、--profile 的顺序取,缺省 ~/.aalis
|
|
21
|
+
startAalis({ appDir: dirname(fileURLToPath(import.meta.url)) });
|
|
17
22
|
```
|
|
18
23
|
|
|
24
|
+
第一次运行前在启动命令里加上 `--init` 初始化家目录。
|
|
25
|
+
|
|
26
|
+
配置里标了 `secret: true` 的字段,值存在家目录的 `secrets.yaml`(0600),`aalis.config.yaml` 只放引用 `{ $secret: '<键>' }`;写进主配置的明文在启动或热重载时自动移过去。备份家目录时连同 `secrets.yaml` 一起备份。
|
|
27
|
+
|
|
19
28
|
## 文档
|
|
20
29
|
|
|
21
30
|
详见 [docs/architecture/runtime.md](../../docs/architecture/runtime.md)。
|
package/dist/config-store.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type AalisConfig, type HostConfig } from '@aalis/api-host-config';
|
|
2
|
-
import { type App } from '@aalis/core';
|
|
3
|
-
import type
|
|
2
|
+
import { type App, type Services } from '@aalis/core';
|
|
3
|
+
import { type ConfigSchema } from '@aalis/schema-config';
|
|
4
|
+
import { type ConfigSyncOptions } from './config-sync.js';
|
|
5
|
+
import { type ResolvedSecrets, type SplitSecrets } from './secrets.js';
|
|
4
6
|
/**
|
|
5
7
|
* 配置提供者:负责持久化层。文档由宿主在构造前自己加载好传入,provider 不必提供 load()。
|
|
6
8
|
*/
|
|
@@ -14,25 +16,60 @@ export interface ConfigProvider {
|
|
|
14
16
|
/** 订阅外部对配置源的变更;返回 dispose */
|
|
15
17
|
watch?(onChange: (next: AalisConfig) => void): () => void;
|
|
16
18
|
}
|
|
19
|
+
/** 密钥存储的持久化层(Node 宿主是家目录的 secrets.yaml)。约定同 {@link ConfigProvider} */
|
|
20
|
+
export interface SecretProvider {
|
|
21
|
+
save?(values: Record<string, unknown>): void | Promise<void>;
|
|
22
|
+
watch?(onChange: (next: Record<string, unknown>) => void): () => void;
|
|
23
|
+
}
|
|
17
24
|
/**
|
|
18
|
-
* 宿主持有的配置文档。读写方法与插件经 host-config
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
25
|
+
* 宿主持有的配置文档。读写方法与插件经 host-config 看到的相同(写方法这里不检查形态,宿主自己的同步先拆后写);
|
|
26
|
+
* 落盘、外部变更监听与密钥的换算只给宿主:
|
|
27
|
+
* `persist()` 是裸落盘,不记日志,先写密钥再写文档,兑现值表示文档是否交给了 provider 落盘(provider 不提供 save
|
|
28
|
+
* 时为 false),失败原样以拒绝传出。插件拿到的 `save()` 由 {@link installHostConfig} 包上日志与「拒绝已处理」,
|
|
29
|
+
* 两者名字不同,本对象因此不能被误当成 HostConfig 直接交出去。
|
|
22
30
|
* 裁剪政策 `trimUnknownFields` 是宿主的同步政策、不属文档,同样由 {@link installHostConfig} 填入。
|
|
23
31
|
*/
|
|
24
|
-
export interface ConfigStore extends Omit<HostConfig, 'save' | 'trimUnknownFields'> {
|
|
32
|
+
export interface ConfigStore extends Omit<HostConfig, 'save' | 'trimUnknownFields' | 'applyPluginConfig'> {
|
|
25
33
|
persist(): Promise<boolean>;
|
|
26
|
-
/**
|
|
27
|
-
|
|
34
|
+
/**
|
|
35
|
+
* 订阅外部变更(配置文件或密钥文件;新内容已过同一道闸替换进来后回调,参数是替换前的文档);单订阅者,返回退订。
|
|
36
|
+
* 密钥文件拒写之后的那次变更按文件对账,同主配置拒写:还没写成的密钥作废,文档退回配置文件上最后读入或写出的那一份
|
|
37
|
+
*/
|
|
38
|
+
watch(onChange: (previous: Readonly<AalisConfig>) => void): () => void;
|
|
28
39
|
unwatch(): void;
|
|
40
|
+
/** 宿主有没有密钥存储:没有时密钥照旧以明文留在文档里,不拆 */
|
|
41
|
+
readonly hasSecretStore: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* 文档形态解析成运行态:`doc` 缺省取该实例在文档里的配置;`staged` 是还没提交的写入,优先于存储。
|
|
44
|
+
* 悬空的引用原样留着并列在 dangling 里
|
|
45
|
+
*/
|
|
46
|
+
resolvePluginConfig(instanceId: string, schema: ConfigSchema | undefined, doc?: Record<string, unknown>, staged?: ReadonlyMap<string, unknown>): ResolvedSecrets;
|
|
47
|
+
/**
|
|
48
|
+
* 提交的配置拆成文档形态(见 secrets.ts 的 splitSecrets)。`base` 是改动前的文档,缺省取该实例当前的文档。
|
|
49
|
+
* 只暂存、不写存储;没有密钥存储时原样返回
|
|
50
|
+
*/
|
|
51
|
+
splitPluginSecrets(instanceId: string, schema: ConfigSchema | undefined, submitted: Record<string, unknown>, base?: Record<string, unknown>): SplitSecrets;
|
|
52
|
+
/** 把暂存的写入提交进密钥存储,返回撤回函数(恢复写之前的值) */
|
|
53
|
+
commitSecrets(writes: ReadonlyMap<string, unknown>): () => void;
|
|
54
|
+
}
|
|
55
|
+
export interface SecretStoreInit {
|
|
56
|
+
values: Record<string, unknown>;
|
|
57
|
+
provider?: SecretProvider;
|
|
29
58
|
}
|
|
30
|
-
export declare function createConfigStore(initial: Partial<AalisConfig>, provider?: ConfigProvider): ConfigStore;
|
|
31
59
|
/**
|
|
32
|
-
*
|
|
33
|
-
|
|
60
|
+
* @param secrets 宿主的密钥存储;不给时没有密钥存储(嵌入式宿主、只在内存里的配置),密钥照旧以明文留在文档里
|
|
61
|
+
*/
|
|
62
|
+
export declare function createConfigStore(initial: Partial<AalisConfig>, provider?: ConfigProvider, secrets?: SecretStoreInit): ConfigStore;
|
|
63
|
+
/**
|
|
64
|
+
* 把文档接到 App:以 host-config 服务独占登记在根激活上,应用文档里的服务偏好。
|
|
65
|
+
* 须在注册任何插件之前调用,偏好才先于全部提供者生效。
|
|
34
66
|
* `opts` 传交给配置同步(withPluginConfigSync / installConfigHotReload)的同一份:host-config 的
|
|
35
67
|
* `trimUnknownFields` 据此声明宿主的裁剪政策(缺省与配置同步一样按裁剪)。
|
|
36
68
|
*/
|
|
37
69
|
export declare function installHostConfig(app: App, store: ConfigStore, opts?: ConfigSyncOptions): void;
|
|
70
|
+
/**
|
|
71
|
+
* 文档里的服务偏好(全局与本插件)对到运行态:`previous` 是改动前的文档(热重载时给),这一份没有、它有的撤回,
|
|
72
|
+
* 没变的不动;不给时(启动)全部应用
|
|
73
|
+
*/
|
|
74
|
+
export declare function applyServicePreferences(live: Pick<Services, 'prefer' | 'unprefer'>, next: Readonly<AalisConfig>, previous?: Readonly<AalisConfig>): void;
|
|
38
75
|
//# sourceMappingURL=config-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../src/config-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../src/config-store.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,UAAU,EAGhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,KAAK,GAAG,EAKR,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,YAAY,EAIlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,kBAAkB,CAAC;AAE1E,OAAO,EAGL,KAAK,eAAe,EAGpB,KAAK,YAAY,EAElB,MAAM,cAAc,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,6BAA6B;IAC7B,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC3D;AAED,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACvE;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;IACvG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACvE,OAAO,IAAI,IAAI,CAAC;IAChB,mCAAmC;IACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,mBAAmB,CACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,eAAe,CAAC;IACnB;;;OAGG;IACH,kBAAkB,CAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,YAAY,CAAC;IAChB,oCAAoC;IACpC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC;CACjE;AAUD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,QAAQ,CAAC,EAAE,cAAc,EACzB,OAAO,CAAC,EAAE,eAAe,GACxB,WAAW,CAwMb;AAkCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,IAAI,CA+I9F;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC,EAC3C,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAC/B,IAAI,CAgBN"}
|