@aalis/runtime 0.18.0 → 0.20.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 +4 -4
- package/dist/config-store.d.ts +10 -2
- package/dist/config-store.d.ts.map +1 -1
- package/dist/config-store.js +76 -25
- package/dist/config-store.js.map +1 -1
- package/dist/config-sync.d.ts +9 -15
- package/dist/config-sync.d.ts.map +1 -1
- package/dist/config-sync.js +45 -50
- package/dist/config-sync.js.map +1 -1
- package/dist/console-sink.d.ts +1 -1
- package/dist/console-sink.d.ts.map +1 -1
- package/dist/console-sink.js +1 -5
- package/dist/console-sink.js.map +1 -1
- package/dist/data-dir.d.ts +60 -0
- package/dist/data-dir.d.ts.map +1 -0
- package/dist/data-dir.js +181 -0
- package/dist/data-dir.js.map +1 -0
- package/dist/file-logger.d.ts +2 -2
- package/dist/file-logger.d.ts.map +1 -1
- package/dist/file-logger.js +13 -10
- package/dist/file-logger.js.map +1 -1
- package/dist/host-logs.d.ts +1 -1
- package/dist/host-logs.js +1 -1
- package/dist/index.d.ts +2 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -5
- package/dist/index.js.map +1 -1
- package/dist/instance-lock.js +5 -5
- package/dist/instance-lock.js.map +1 -1
- package/dist/locales/en.d.ts +4 -0
- package/dist/locales/en.d.ts.map +1 -1
- package/dist/locales/en.js +4 -0
- package/dist/locales/en.js.map +1 -1
- package/dist/node-modules-loader.d.ts +4 -7
- package/dist/node-modules-loader.d.ts.map +1 -1
- package/dist/node-modules-loader.js +18 -25
- package/dist/node-modules-loader.js.map +1 -1
- package/dist/plugin-discovery.d.ts +10 -3
- package/dist/plugin-discovery.d.ts.map +1 -1
- package/dist/plugin-discovery.js +64 -30
- package/dist/plugin-discovery.js.map +1 -1
- package/dist/providers.d.ts +13 -13
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +22 -35
- package/dist/providers.js.map +1 -1
- package/dist/secrets.js +1 -1
- package/dist/secrets.js.map +1 -1
- package/dist/start.d.ts +7 -13
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +96 -75
- package/dist/start.js.map +1 -1
- package/dist/subcommand.d.ts +1 -1
- package/dist/subcommand.js +1 -1
- package/dist/texts.d.ts +8 -0
- package/dist/texts.d.ts.map +1 -1
- package/dist/texts.js +4 -0
- package/dist/texts.js.map +1 -1
- package/dist/yaml-file.d.ts +4 -2
- package/dist/yaml-file.d.ts.map +1 -1
- package/dist/yaml-file.js +9 -5
- package/dist/yaml-file.js.map +1 -1
- package/package.json +6 -6
- package/dist/bootstrap-buffer.d.ts +0 -34
- package/dist/bootstrap-buffer.d.ts.map +0 -1
- package/dist/bootstrap-buffer.js +0 -42
- package/dist/bootstrap-buffer.js.map +0 -1
- package/dist/home.d.ts +0 -64
- package/dist/home.d.ts.map +0 -1
- package/dist/home.js +0 -206
- package/dist/home.js.map +0 -1
- package/dist/terminal.d.ts +0 -16
- package/dist/terminal.d.ts.map +0 -1
- package/dist/terminal.js +0 -43
- package/dist/terminal.js.map +0 -1
package/dist/console-sink.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export interface ConsoleSinkHandle {
|
|
|
27
27
|
readonly colorized: boolean;
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
-
* 安装 console sink
|
|
30
|
+
* 安装 console sink:订阅 LogEntry,按需染色写到 stdout(或 stderr)。
|
|
31
31
|
*
|
|
32
32
|
* 与 CLI/TUI 等"独占终端 UI"的协调通过事件 `terminal:claimed/released` 完成,
|
|
33
33
|
* sink 自己根据事件决定是否写 stdout——UI 不直接干预 sink。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console-sink.d.ts","sourceRoot":"","sources":["../src/console-sink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"console-sink.d.ts","sourceRoot":"","sources":["../src/console-sink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG5D;;;;;;GAMG;AACH,OAAO,QAAQ,aAAa,CAAC;IAC3B,UAAU,WAAW;QACnB,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;KACtC;CACF;AA+DD,MAAM,WAAW,iBAAiB;IAChC,OAAO,IAAI,IAAI,CAAC;IAChB;;;;;;OAMG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,6BAA6B;IAC7B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAO,GAC/D,iBAAiB,CA4CnB"}
|
package/dist/console-sink.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { LogHub } from '@aalis/core';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
-
import { getBootstrapBuffer } from './bootstrap-buffer.js';
|
|
4
3
|
/**
|
|
5
4
|
* Console sink —— 运行时层的 stdout 输出(按需染色)。
|
|
6
5
|
*
|
|
@@ -59,7 +58,7 @@ function formatEntry(entry) {
|
|
|
59
58
|
return `${prefix} ${entry.message}`;
|
|
60
59
|
}
|
|
61
60
|
/**
|
|
62
|
-
* 安装 console sink
|
|
61
|
+
* 安装 console sink:订阅 LogEntry,按需染色写到 stdout(或 stderr)。
|
|
63
62
|
*
|
|
64
63
|
* 与 CLI/TUI 等"独占终端 UI"的协调通过事件 `terminal:claimed/released` 完成,
|
|
65
64
|
* sink 自己根据事件决定是否写 stdout——UI 不直接干预 sink。
|
|
@@ -78,9 +77,6 @@ export function installConsoleSink(opts = {}) {
|
|
|
78
77
|
return;
|
|
79
78
|
log(formatEntry(entry));
|
|
80
79
|
};
|
|
81
|
-
// 冲洗启动期 bootstrap buffer
|
|
82
|
-
for (const entry of getBootstrapBuffer().snapshot())
|
|
83
|
-
write(entry);
|
|
84
80
|
let paused = false;
|
|
85
81
|
const off = hub.onEntry(entry => {
|
|
86
82
|
if (paused)
|
package/dist/console-sink.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console-sink.js","sourceRoot":"","sources":["../src/console-sink.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"console-sink.js","sourceRoot":"","sources":["../src/console-sink.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type HostPaths } from '@aalis/api-host-paths';
|
|
2
|
+
/** 宿主件的路径参数必须是绝对路径:相对路径会按调用那一刻的 cwd 解析,而 cwd 不带语义 */
|
|
3
|
+
export declare function assertAbsolute(what: string, p: string): void;
|
|
4
|
+
/**
|
|
5
|
+
* 绝对路径。Windows 上还要带盘符或 UNC 前缀:`\aalis` 这类按当前盘解析,仍然依赖 cwd。
|
|
6
|
+
*/
|
|
7
|
+
export declare function isFullyAbsolute(p: string, platform?: NodeJS.Platform): boolean;
|
|
8
|
+
/** 数据目录相关的输入有误(参数缺值、profile 名不合法、来源冲突):宿主据此一行报错退出。 */
|
|
9
|
+
export declare class HostArgsError extends Error {
|
|
10
|
+
name: string;
|
|
11
|
+
}
|
|
12
|
+
/** 出现在子命令之前的宿主参数。 */
|
|
13
|
+
export interface HostArgs {
|
|
14
|
+
data?: string;
|
|
15
|
+
profile?: string;
|
|
16
|
+
/** `--init`:初始化数据目录后退出 */
|
|
17
|
+
init: boolean;
|
|
18
|
+
/** `--service`:由服务管理器启动进程;实例锁被占时按正常退出,免得被服务管理器反复重新启动 */
|
|
19
|
+
service: boolean;
|
|
20
|
+
/** 余下的 argv:非空即子命令 */
|
|
21
|
+
rest: string[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 只认开头的宿主参数(`--data <dir>`、`--data=<dir>`、`--profile`、`--init`、`--service`),遇到第一个别的参数即停:
|
|
25
|
+
* 之后的都属于子命令,子命令自己的参数里出现同名写法也不会被当成宿主参数。
|
|
26
|
+
* 开头这一段里的 `--` 跳过:`pnpm dev -- --init` 会把 `--` 原样传进来。开头这一段里不认识的 `--` 参数报错:子命令名
|
|
27
|
+
* 不以 `--` 开头,把它当成子命令会在缺省的数据目录上读写,打错或写了改过名的参数时落进不该进的实例。
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseHostArgs(argv: readonly string[]): HostArgs;
|
|
30
|
+
export interface ResolveDataDirInput {
|
|
31
|
+
args: Pick<HostArgs, 'data' | 'profile'>;
|
|
32
|
+
env: Readonly<Record<string, string | undefined>>;
|
|
33
|
+
/** 部署目录(安装集),必须是绝对路径:没另行指定时数据目录在它下面 */
|
|
34
|
+
appDir: string;
|
|
35
|
+
/** 解析命令行与环境变量里相对路径的基准:启动时的 cwd。取不到(目录已被删除)时不给,只有遇到相对路径才需要它 */
|
|
36
|
+
cwd?: string;
|
|
37
|
+
/** 用户主目录:展开 `--data`、`AALIS_DATA` 开头的 `~` */
|
|
38
|
+
userHome?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 数据目录的覆盖顺序:`--data` → `AALIS_DATA` → 部署目录下的 `data/`;给了 `--profile` / `AALIS_PROFILE` 时是部署目录下的
|
|
42
|
+
* `data-<p>/`。数据目录不放在用户主目录下:一个部署的配置、数据与日志都在部署目录里。
|
|
43
|
+
* 指定了 profile、同时又有 `--data` 或 `AALIS_DATA` 时报错,不静默忽略 profile:以为进了测试实例、实际写进主实例,
|
|
44
|
+
* 是这类配置错误最坏的后果。profile 只由这两处给,经 `--data` 选中的目录不论叫什么都没有 profile。
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveDataDir(input: ResolveDataDirInput): {
|
|
47
|
+
dir: string;
|
|
48
|
+
profile?: string;
|
|
49
|
+
};
|
|
50
|
+
/** 由数据目录与安装集派生全部路径(数据目录布局见计划书「数据目录布局」)。 */
|
|
51
|
+
export declare function derivePaths(data: string, app: string, profile?: string): HostPaths;
|
|
52
|
+
/** 初始化的判据:主配置文件存在。 */
|
|
53
|
+
export declare function isDataDirInitialized(paths: HostPaths): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* 建数据目录:目录 0700,写默认主配置与空的密钥文件(0600),建布局里的子目录。主配置只有名字、日志级别与空的插件段。
|
|
56
|
+
* 已初始化时拒绝,不覆盖任何文件。目录已存在时只接受空目录,或只有布局自己条目的目录(上次初始化中途失败),
|
|
57
|
+
* 沿用并收紧为 0700:`--data ~ --init` 这类笔误不能把用户主目录改成 0700、再往里铺一层布局。
|
|
58
|
+
*/
|
|
59
|
+
export declare function initDataDir(paths: HostPaths): void;
|
|
60
|
+
//# sourceMappingURL=data-dir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-dir.d.ts","sourceRoot":"","sources":["../src/data-dir.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAYtE,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAE5D;AAqBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,OAAO,CAEhG;AAED,sDAAsD;AACtD,qBAAa,aAAc,SAAQ,KAAK;IAC7B,IAAI,SAAmB;CACjC;AAED,qBAAqB;AACrB,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,wDAAwD;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,CAwB/D;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAClD,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAoB5F;AAyBD,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAgBlF;AAED,sBAAsB;AACtB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAyBlD"}
|
package/dist/data-dir.js
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { chmodSync, existsSync, mkdirSync, readdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { isAbsolute, join, normalize, resolve } from 'node:path';
|
|
4
|
+
import { DATA_DIR_NAME } from '@aalis/api-host-paths';
|
|
5
|
+
import { CORE_CONFIG_SCHEMA, defaultsFrom } from '@aalis/schema-config';
|
|
6
|
+
import { stringify as stringifyYaml } from 'yaml';
|
|
7
|
+
// ============================================================
|
|
8
|
+
// 数据目录:解析、路径派生与初始化
|
|
9
|
+
// ============================================================
|
|
10
|
+
//
|
|
11
|
+
// 数据目录装着一个实例的全部状态与密钥,只在这里解析,core 不参与。进程的 cwd 不带语义:
|
|
12
|
+
// 唯一的例外是命令行与环境变量里写的相对路径,它们按启动时的 cwd 解析一次(那是用户在 shell 里的意图),
|
|
13
|
+
// 之后全程只用绝对路径。
|
|
14
|
+
/** 宿主件的路径参数必须是绝对路径:相对路径会按调用那一刻的 cwd 解析,而 cwd 不带语义 */
|
|
15
|
+
export function assertAbsolute(what, p) {
|
|
16
|
+
if (!isFullyAbsolute(p))
|
|
17
|
+
throw new Error(`${what} must be an absolute path: ${p}`);
|
|
18
|
+
}
|
|
19
|
+
/** profile 名既拼进 `data-<profile>`,也拼进数据库名:只许小写字母、数字与连字符,挡住 `../x` 这类跳出。 */
|
|
20
|
+
const PROFILE_PATTERN = /^[a-z0-9][a-z0-9-]{0,31}$/;
|
|
21
|
+
const CONFIG_FILE = 'aalis.config.yaml';
|
|
22
|
+
const SECRETS_FILE = 'secrets.yaml';
|
|
23
|
+
/** `--init` 只在空目录、或只有布局自己的条目(上次初始化中途失败留下的)的目录里做 */
|
|
24
|
+
const LAYOUT_ENTRIES = new Set([
|
|
25
|
+
'state',
|
|
26
|
+
'logs',
|
|
27
|
+
'cache',
|
|
28
|
+
'run',
|
|
29
|
+
'tmp',
|
|
30
|
+
'self',
|
|
31
|
+
'workspace',
|
|
32
|
+
SECRETS_FILE,
|
|
33
|
+
'.DS_Store',
|
|
34
|
+
]);
|
|
35
|
+
/**
|
|
36
|
+
* 绝对路径。Windows 上还要带盘符或 UNC 前缀:`\aalis` 这类按当前盘解析,仍然依赖 cwd。
|
|
37
|
+
*/
|
|
38
|
+
export function isFullyAbsolute(p, platform = process.platform) {
|
|
39
|
+
return platform === 'win32' ? /^(?:[A-Za-z]:[\\/]|\\\\)/.test(p) : isAbsolute(p);
|
|
40
|
+
}
|
|
41
|
+
/** 数据目录相关的输入有误(参数缺值、profile 名不合法、来源冲突):宿主据此一行报错退出。 */
|
|
42
|
+
export class HostArgsError extends Error {
|
|
43
|
+
name = 'HostArgsError';
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 只认开头的宿主参数(`--data <dir>`、`--data=<dir>`、`--profile`、`--init`、`--service`),遇到第一个别的参数即停:
|
|
47
|
+
* 之后的都属于子命令,子命令自己的参数里出现同名写法也不会被当成宿主参数。
|
|
48
|
+
* 开头这一段里的 `--` 跳过:`pnpm dev -- --init` 会把 `--` 原样传进来。开头这一段里不认识的 `--` 参数报错:子命令名
|
|
49
|
+
* 不以 `--` 开头,把它当成子命令会在缺省的数据目录上读写,打错或写了改过名的参数时落进不该进的实例。
|
|
50
|
+
*/
|
|
51
|
+
export function parseHostArgs(argv) {
|
|
52
|
+
const out = { init: false, service: false, rest: [] };
|
|
53
|
+
let i = 0;
|
|
54
|
+
for (; i < argv.length; i++) {
|
|
55
|
+
const arg = argv[i];
|
|
56
|
+
if (arg === '--')
|
|
57
|
+
continue;
|
|
58
|
+
if (arg === '--init' || arg === '--service') {
|
|
59
|
+
out[arg === '--init' ? 'init' : 'service'] = true;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const m = /^--(data|profile)(?:=(.*))?$/.exec(arg);
|
|
63
|
+
if (!m) {
|
|
64
|
+
if (!arg.startsWith('--'))
|
|
65
|
+
break;
|
|
66
|
+
throw new HostArgsError(`Unknown host option ${arg.split('=')[0]}: host options before any subcommand are --data, --profile, --init, --service`);
|
|
67
|
+
}
|
|
68
|
+
const key = m[1];
|
|
69
|
+
const value = m[2] ?? argv[++i];
|
|
70
|
+
if (!value)
|
|
71
|
+
throw new HostArgsError(`--${key} is missing a value`);
|
|
72
|
+
out[key] = value;
|
|
73
|
+
}
|
|
74
|
+
out.rest = argv.slice(i);
|
|
75
|
+
return out;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 数据目录的覆盖顺序:`--data` → `AALIS_DATA` → 部署目录下的 `data/`;给了 `--profile` / `AALIS_PROFILE` 时是部署目录下的
|
|
79
|
+
* `data-<p>/`。数据目录不放在用户主目录下:一个部署的配置、数据与日志都在部署目录里。
|
|
80
|
+
* 指定了 profile、同时又有 `--data` 或 `AALIS_DATA` 时报错,不静默忽略 profile:以为进了测试实例、实际写进主实例,
|
|
81
|
+
* 是这类配置错误最坏的后果。profile 只由这两处给,经 `--data` 选中的目录不论叫什么都没有 profile。
|
|
82
|
+
*/
|
|
83
|
+
export function resolveDataDir(input) {
|
|
84
|
+
const { args, env, appDir } = input;
|
|
85
|
+
// 部署目录是宿主代码给的值:写错了不论这次谁胜出都报,免得换一台没设环境变量的机器才暴露
|
|
86
|
+
if (!isFullyAbsolute(appDir))
|
|
87
|
+
throw new HostArgsError(`appDir must be an absolute path: ${appDir}`);
|
|
88
|
+
// 环境变量设成空串(`AALIS_DATA=` 用来清掉它)视同没设
|
|
89
|
+
const explicit = args.data ?? nonEmpty(env.AALIS_DATA);
|
|
90
|
+
const profile = args.profile ?? nonEmpty(env.AALIS_PROFILE);
|
|
91
|
+
if (explicit !== undefined && profile !== undefined) {
|
|
92
|
+
const dataSource = args.data !== undefined ? '--data' : 'AALIS_DATA';
|
|
93
|
+
const profileSource = args.profile !== undefined ? '--profile' : 'AALIS_PROFILE';
|
|
94
|
+
throw new HostArgsError(`Both ${dataSource} and ${profileSource} are set; use only one of them`);
|
|
95
|
+
}
|
|
96
|
+
if (explicit !== undefined)
|
|
97
|
+
return { dir: toAbsolute(explicit, input.userHome ?? homedir(), input.cwd) };
|
|
98
|
+
if (profile === undefined)
|
|
99
|
+
return { dir: join(normalize(appDir), DATA_DIR_NAME) };
|
|
100
|
+
if (!PROFILE_PATTERN.test(profile)) {
|
|
101
|
+
throw new HostArgsError(`Invalid profile name "${profile}": use only lowercase letters, digits and hyphens, start with a letter or digit, and keep it within 32 characters`);
|
|
102
|
+
}
|
|
103
|
+
return { dir: join(normalize(appDir), `${DATA_DIR_NAME}-${profile}`), profile };
|
|
104
|
+
}
|
|
105
|
+
function nonEmpty(value) {
|
|
106
|
+
return value === '' ? undefined : value;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 命令行与环境变量里的数据目录写法转成绝对路径。开头的 `~` 展开成用户主目录:`--data=~/x` 不经 shell 展开,
|
|
110
|
+
* launchd、systemd 与容器的环境变量也不展开,不处理就会在 cwd 下建出一个名叫 `~` 的目录。
|
|
111
|
+
*/
|
|
112
|
+
function toAbsolute(value, userHome, cwd) {
|
|
113
|
+
if (value === '~')
|
|
114
|
+
return userHome;
|
|
115
|
+
if (/^~[\\/]/.test(value))
|
|
116
|
+
return join(userHome, value.slice(2));
|
|
117
|
+
if (value.startsWith('~')) {
|
|
118
|
+
throw new HostArgsError(`"~user" paths are not supported; write an absolute path: ${value}`);
|
|
119
|
+
}
|
|
120
|
+
if (isFullyAbsolute(value))
|
|
121
|
+
return normalize(value);
|
|
122
|
+
if (cwd === undefined) {
|
|
123
|
+
throw new HostArgsError(`The current directory no longer exists; write the data directory as an absolute path: ${value}`);
|
|
124
|
+
}
|
|
125
|
+
return resolve(cwd, value);
|
|
126
|
+
}
|
|
127
|
+
/** 由数据目录与安装集派生全部路径(数据目录布局见计划书「数据目录布局」)。 */
|
|
128
|
+
export function derivePaths(data, app, profile) {
|
|
129
|
+
// 冻结:同一个对象交给每个插件,任何一处改了它(例如改 app)都会把别的插件的装卸目录一起带偏
|
|
130
|
+
return Object.freeze({
|
|
131
|
+
data,
|
|
132
|
+
...(profile !== undefined ? { profile } : {}),
|
|
133
|
+
app,
|
|
134
|
+
config: join(data, CONFIG_FILE),
|
|
135
|
+
secrets: join(data, SECRETS_FILE),
|
|
136
|
+
state: join(data, 'state'),
|
|
137
|
+
logs: join(data, 'logs'),
|
|
138
|
+
cache: join(data, 'cache'),
|
|
139
|
+
run: join(data, 'run'),
|
|
140
|
+
tmp: join(data, 'tmp'),
|
|
141
|
+
self: join(data, 'self'),
|
|
142
|
+
workspace: join(data, 'workspace'),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/** 初始化的判据:主配置文件存在。 */
|
|
146
|
+
export function isDataDirInitialized(paths) {
|
|
147
|
+
return existsSync(paths.config);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* 建数据目录:目录 0700,写默认主配置与空的密钥文件(0600),建布局里的子目录。主配置只有名字、日志级别与空的插件段。
|
|
151
|
+
* 已初始化时拒绝,不覆盖任何文件。目录已存在时只接受空目录,或只有布局自己条目的目录(上次初始化中途失败),
|
|
152
|
+
* 沿用并收紧为 0700:`--data ~ --init` 这类笔误不能把用户主目录改成 0700、再往里铺一层布局。
|
|
153
|
+
*/
|
|
154
|
+
export function initDataDir(paths) {
|
|
155
|
+
if (isDataDirInitialized(paths))
|
|
156
|
+
throw new HostArgsError(`The data directory is already initialized: ${paths.data}`);
|
|
157
|
+
if (existsSync(paths.data)) {
|
|
158
|
+
const foreign = readdirSync(paths.data).filter(name => !LAYOUT_ENTRIES.has(name));
|
|
159
|
+
if (foreign.length > 0) {
|
|
160
|
+
const shown = foreign.slice(0, 3).join(', ') + (foreign.length > 3 ? ' and more' : '');
|
|
161
|
+
throw new HostArgsError(`The directory is not empty (it contains ${shown}); cannot initialize a data directory here: ${paths.data}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
mkdirSync(paths.data, { recursive: true, mode: 0o700 });
|
|
165
|
+
chmodSync(paths.data, 0o700);
|
|
166
|
+
for (const dir of [paths.state, paths.logs, paths.cache, paths.run, paths.self, paths.workspace]) {
|
|
167
|
+
mkdirSync(dir, { recursive: true });
|
|
168
|
+
}
|
|
169
|
+
mkdirSync(paths.tmp, { recursive: true, mode: 0o700 });
|
|
170
|
+
// 密钥文件先建:主配置是初始化的判据,最后写,中途失败时下次仍能重新初始化
|
|
171
|
+
if (existsSync(paths.secrets))
|
|
172
|
+
chmodSync(paths.secrets, 0o600);
|
|
173
|
+
else
|
|
174
|
+
writeFileSync(paths.secrets, '', { mode: 0o600, flag: 'wx' });
|
|
175
|
+
const { name, logLevel } = defaultsFrom(CORE_CONFIG_SCHEMA);
|
|
176
|
+
writeFileSync(paths.config, stringifyYaml({ name, logLevel, plugins: {} }), {
|
|
177
|
+
mode: 0o600,
|
|
178
|
+
flag: 'wx',
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=data-dir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-dir.js","sourceRoot":"","sources":["../src/data-dir.ts"],"names":[],"mappings":"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"}
|
package/dist/file-logger.d.ts
CHANGED
|
@@ -10,9 +10,9 @@ export interface FileLoggerHandle {
|
|
|
10
10
|
}
|
|
11
11
|
export declare function appendCrashLog(label: string, err: unknown, logFile: string): Promise<void>;
|
|
12
12
|
/**
|
|
13
|
-
* 装文件日志:先把上一轮的日志改名保留(见 rotateLogs
|
|
13
|
+
* 装文件日志:先把上一轮的日志改名保留(见 rotateLogs),再清空 logFile,之后实时追加。
|
|
14
14
|
* 轮转失败不拦启动:照旧覆盖写 logFile,并记一条告警写明原因。不接在原内容后面写:一个文件只装一轮,
|
|
15
|
-
* seq 从 0 起随文件位置单调递增,webui 的历史分页与 CLI
|
|
15
|
+
* seq 从 0 起随文件位置单调递增,webui 的历史分页与 CLI 的启动恢复都以此为前提。清空写不成时以拒绝传出、不留订阅。
|
|
16
16
|
*/
|
|
17
17
|
export declare function setupFileLogger(logFile: string): Promise<FileLoggerHandle>;
|
|
18
18
|
//# sourceMappingURL=file-logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-logger.d.ts","sourceRoot":"","sources":["../src/file-logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-logger.d.ts","sourceRoot":"","sources":["../src/file-logger.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAOD,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhG;AAsBD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqChF"}
|
package/dist/file-logger.js
CHANGED
|
@@ -2,8 +2,7 @@ import { appendFile, mkdir, rename, writeFile } from 'node:fs/promises';
|
|
|
2
2
|
import { dirname, extname } from 'node:path';
|
|
3
3
|
import { DefaultLogger, LogHub } from '@aalis/core';
|
|
4
4
|
import { formatLogLine } from '@aalis/schema-log';
|
|
5
|
-
import {
|
|
6
|
-
import { assertAbsolute } from './home.js';
|
|
5
|
+
import { assertAbsolute } from './data-dir.js';
|
|
7
6
|
const RUNTIME_SCOPE = 'aalis:runtime';
|
|
8
7
|
/** 启动时保留的上几轮日志份数:latest.1.log(上一轮)到 latest.5.log,更早的被挤掉。 */
|
|
9
8
|
const LOG_HISTORY_COUNT = 5;
|
|
@@ -43,13 +42,12 @@ async function rotateLogs(logFile) {
|
|
|
43
42
|
}
|
|
44
43
|
}
|
|
45
44
|
/**
|
|
46
|
-
* 装文件日志:先把上一轮的日志改名保留(见 rotateLogs
|
|
45
|
+
* 装文件日志:先把上一轮的日志改名保留(见 rotateLogs),再清空 logFile,之后实时追加。
|
|
47
46
|
* 轮转失败不拦启动:照旧覆盖写 logFile,并记一条告警写明原因。不接在原内容后面写:一个文件只装一轮,
|
|
48
|
-
* seq 从 0 起随文件位置单调递增,webui 的历史分页与 CLI
|
|
47
|
+
* seq 从 0 起随文件位置单调递增,webui 的历史分页与 CLI 的启动恢复都以此为前提。清空写不成时以拒绝传出、不留订阅。
|
|
49
48
|
*/
|
|
50
49
|
export async function setupFileLogger(logFile) {
|
|
51
50
|
assertAbsolute('Log file path', logFile);
|
|
52
|
-
let queue = Promise.resolve();
|
|
53
51
|
await mkdir(dirname(logFile), { recursive: true });
|
|
54
52
|
let rotateError;
|
|
55
53
|
try {
|
|
@@ -58,13 +56,18 @@ export async function setupFileLogger(logFile) {
|
|
|
58
56
|
catch (err) {
|
|
59
57
|
rotateError = err instanceof Error ? err.message : String(err);
|
|
60
58
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
await writeFile(logFile, initial);
|
|
65
|
-
const off = hub.onEntry(entry => {
|
|
59
|
+
// 清空是队列里的第一次写入,紧接着订阅:此后到的条目都排在清空之后写,等清空的这段时间里也不丢
|
|
60
|
+
let queue = writeFile(logFile, '');
|
|
61
|
+
const off = LogHub.default.onEntry(entry => {
|
|
66
62
|
queue = queue.then(() => appendFile(logFile, formatLogLine(entry))).catch(() => { });
|
|
67
63
|
});
|
|
64
|
+
try {
|
|
65
|
+
await queue;
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
off();
|
|
69
|
+
throw err;
|
|
70
|
+
}
|
|
68
71
|
// 订阅之后再记:告警经 LogHub 同时进控制台与本文件。
|
|
69
72
|
if (rotateError !== undefined) {
|
|
70
73
|
new DefaultLogger(RUNTIME_SCOPE).warn(`上一轮的日志没能改名保留(${rotateError}),本轮已覆盖写入 ${logFile}`);
|
package/dist/file-logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-logger.js","sourceRoot":"","sources":["../src/file-logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"file-logger.js","sourceRoot":"","sources":["../src/file-logger.ts"],"names":[],"mappings":"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"}
|
package/dist/host-logs.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { Logger, LogHub } from '@aalis/core';
|
|
|
3
3
|
import type { FileLoggerHandle } from './file-logger.js';
|
|
4
4
|
/**
|
|
5
5
|
* host-logs 服务的实现:历史读文件日志(先等它把已记下的写完),实时接中枢。`file` 不给时没有历史。
|
|
6
|
-
*
|
|
6
|
+
* 订阅带历史时先暂存实时的,历史送完再接着送比它新的,之后直通;补发途中 listener 抛错只丢掉那一条,与中枢同一规则
|
|
7
7
|
*/
|
|
8
8
|
export declare function createHostLogs(hub: LogHub, file: Pick<FileLoggerHandle, 'path' | 'flush'> | undefined, logger: Logger): HostLogs;
|
|
9
9
|
//# sourceMappingURL=host-logs.d.ts.map
|
package/dist/host-logs.js
CHANGED
|
@@ -53,7 +53,7 @@ async function readTail(path, limit, accept) {
|
|
|
53
53
|
}
|
|
54
54
|
/**
|
|
55
55
|
* host-logs 服务的实现:历史读文件日志(先等它把已记下的写完),实时接中枢。`file` 不给时没有历史。
|
|
56
|
-
*
|
|
56
|
+
* 订阅带历史时先暂存实时的,历史送完再接着送比它新的,之后直通;补发途中 listener 抛错只丢掉那一条,与中枢同一规则
|
|
57
57
|
*/
|
|
58
58
|
export function createHostLogs(hub, file, logger) {
|
|
59
59
|
const recent = async (limit, options = {}) => {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
export { getBootstrapBuffer, installBootstrapBuffer } from './bootstrap-buffer.js';
|
|
2
1
|
export { type ConfigProvider, type ConfigStore, createConfigStore, installHostConfig, type SecretProvider, type SecretStoreInit, } from './config-store.js';
|
|
3
2
|
export { type ConfigSyncOptions, handleConfigChanged, installConfigHotReload, syncPluginDefaults, withPluginConfigSync, } from './config-sync.js';
|
|
4
3
|
export { type ConsoleSinkHandle, installConsoleSink } from './console-sink.js';
|
|
4
|
+
export { derivePaths, type HostArgs, HostArgsError, initDataDir, isDataDirInitialized, parseHostArgs, type ResolveDataDirInput, resolveDataDir, } from './data-dir.js';
|
|
5
5
|
export { appendCrashLog, type FileLoggerHandle, setupFileLogger } from './file-logger.js';
|
|
6
|
-
export { derivePaths, HomeArgsError, type HostArgs, initHome, isHomeInitialized, parseHostArgs, profileOfRealHome, type ResolveHomeInput, resolveHome, } from './home.js';
|
|
7
6
|
export { createHostLogs } from './host-logs.js';
|
|
8
7
|
export { createNodeModulesPluginLoader } from './node-modules-loader.js';
|
|
9
|
-
export { createPluginDiscovery, type PluginDescriptor, type PluginDiscovery, type PluginLoader, } from './plugin-discovery.js';
|
|
8
|
+
export { createPluginDiscovery, type PluginDescriptor, type PluginDiscovery, type PluginDiscoveryOptions, type PluginLoader, } from './plugin-discovery.js';
|
|
10
9
|
export { buildRespawnCommand, createFsPluginLoader, createFsSecretsProvider, createFsYamlConfigProvider, createProcessRespawnStrategy, createServiceRestartStrategy, isRestartRollback, READY_MESSAGE, type RespawnOptions, type RestartRollback, SERVICE_RESTART_EXIT_CODE, } from './providers.js';
|
|
11
10
|
export { type StartAalisOptions, startAalis } from './start.js';
|
|
12
11
|
export { tryDispatchSubcommand } from './subcommand.js';
|
|
13
|
-
export { installTerminalStateRestorer, restoreTerminalState } from './terminal.js';
|
|
14
12
|
//# 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":"AAcA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,iBAAiB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,WAAW,EACX,KAAK,QAAQ,EACb,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,KAAK,mBAAmB,EACxB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EACL,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,EAC5B,4BAA4B,EAC5B,iBAAiB,EACjB,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,27 +1,25 @@
|
|
|
1
1
|
// @aalis/runtime —— Aalis 默认 Node 宿主层(独立部署与 monorepo 自托管共用)
|
|
2
2
|
//
|
|
3
3
|
// 两种部署模型的加载器 + YAML 配置/重启策略 + 一行启动 startAalis,以及可移植宿主件
|
|
4
|
-
// (日志 sink /
|
|
4
|
+
// (日志 sink / 子命令分发)。core 只产生 LogEntry,染色/TTY/文件落盘全在本层。
|
|
5
5
|
// - createNodeModulesPluginLoader:纯 npm 独立部署(从 node_modules 解析插件)
|
|
6
6
|
// - createFsPluginLoader:monorepo 自托管(扫描 packages/ 目录)
|
|
7
7
|
// - createPluginDiscovery:把加载器发现的插件整批交给 core,并提供热扫描(plugin-source 服务的实现)
|
|
8
8
|
// - createConfigStore / installHostConfig:配置文档与 host-config 服务(core 只持运行态)
|
|
9
9
|
// - createHostLogs:host-logs 服务(读日志:文件日志里的历史 + 中枢的实时)
|
|
10
|
-
// - withPluginConfigSync
|
|
10
|
+
// - withPluginConfigSync:发现驱动每批定下要登记的定义后、登记前把 schema 派生默认值深合并进文档(经 createPluginDiscovery 的 prepare)
|
|
11
11
|
// - createFsYamlConfigProvider / createFsSecretsProvider / createProcessRespawnStrategy:YAML 配置与密钥文件 + 进程级重启
|
|
12
12
|
// - startAalis:组装以上 + 宿主件为实例并启动(带 options 开关,默认独立部署)
|
|
13
13
|
// - install*/setup*/tryDispatchSubcommand:宿主件,供高级 opt-in 组装
|
|
14
|
-
export { getBootstrapBuffer, installBootstrapBuffer } from './bootstrap-buffer.js';
|
|
15
14
|
export { createConfigStore, installHostConfig, } from './config-store.js';
|
|
16
15
|
export { handleConfigChanged, installConfigHotReload, syncPluginDefaults, withPluginConfigSync, } from './config-sync.js';
|
|
17
16
|
export { installConsoleSink } from './console-sink.js';
|
|
17
|
+
export { derivePaths, HostArgsError, initDataDir, isDataDirInitialized, parseHostArgs, resolveDataDir, } from './data-dir.js';
|
|
18
18
|
export { appendCrashLog, setupFileLogger } from './file-logger.js';
|
|
19
|
-
export { derivePaths, HomeArgsError, initHome, isHomeInitialized, parseHostArgs, profileOfRealHome, resolveHome, } from './home.js';
|
|
20
19
|
export { createHostLogs } from './host-logs.js';
|
|
21
20
|
export { createNodeModulesPluginLoader } from './node-modules-loader.js';
|
|
22
21
|
export { createPluginDiscovery, } from './plugin-discovery.js';
|
|
23
22
|
export { buildRespawnCommand, createFsPluginLoader, createFsSecretsProvider, createFsYamlConfigProvider, createProcessRespawnStrategy, createServiceRestartStrategy, isRestartRollback, READY_MESSAGE, SERVICE_RESTART_EXIT_CODE, } from './providers.js';
|
|
24
23
|
export { startAalis } from './start.js';
|
|
25
24
|
export { tryDispatchSubcommand } from './subcommand.js';
|
|
26
|
-
export { installTerminalStateRestorer, restoreTerminalState } from './terminal.js';
|
|
27
25
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,uDAAuD;AACvD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,uDAAuD;AACvD,uDAAuD;AACvD,oEAAoE;AACpE,yDAAyD;AACzD,2EAA2E;AAC3E,6EAA6E;AAC7E,wDAAwD;AACxD,sGAAsG;AACtG,+GAA+G;AAC/G,uDAAuD;AACvD,8DAA8D;AAE9D,OAAO,EAGL,iBAAiB,EACjB,iBAAiB,GAGlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA0B,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,WAAW,EAEX,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,aAAa,EAEb,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAyB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EACL,qBAAqB,GAKtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,EAC5B,4BAA4B,EAC5B,iBAAiB,EACjB,aAAa,EAGb,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAA0B,UAAU,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/instance-lock.js
CHANGED
|
@@ -3,19 +3,19 @@ import { createHash, randomBytes } from 'node:crypto';
|
|
|
3
3
|
import { linkSync, lstatSync, mkdirSync, readdirSync, readFileSync, readlinkSync, statSync, unlinkSync, writeFileSync, } from 'node:fs';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
// ============================================================
|
|
6
|
-
//
|
|
6
|
+
// 实例锁:同一数据目录只许一个实例
|
|
7
7
|
// ============================================================
|
|
8
8
|
//
|
|
9
|
-
//
|
|
9
|
+
// 没有锁时,手动在终端另行启动一个实例会与服务并存,每条消息回两遍。锁是 `run/instance.<n>.lock`,代号 n 最大的那份是现行锁:
|
|
10
10
|
// - 取锁时先把完整内容写进临时文件,再 link 成下一个代号。link 在目标已存在时原子失败,同一代号只有一个进程拿得到;
|
|
11
|
-
//
|
|
11
|
+
// 内容在建出时就是完整的,读不到半截。所以数据目录所在的文件系统要支持硬链接。
|
|
12
12
|
// - 不删、不改名活着的锁。link 成功后再看一遍更低的代号:还有活着的持有者(读到的「残留」其实已经被人接手,
|
|
13
13
|
// 或者代号在 run/ 清空后从 1 重新编号),就让出刚建的这一代、报占用。代号最低的活持有者胜出。
|
|
14
14
|
// 确认没有之后,删掉更低代号的旧文件。
|
|
15
15
|
// - 释放时只删内容仍是自己那份的锁文件:同名的锁可能已经是别的实例的。
|
|
16
16
|
// - 锁内容建出后不再改写。前台 respawn 的交接靠取锁时生成的令牌:锁里只记它的哈希,令牌经环境变量交给新进程,
|
|
17
17
|
// 新进程看到锁里的哈希与令牌对得上,就照常 link 出下一个代号接手。不核对父进程 pid:开发模式经 tsx 包装进程
|
|
18
|
-
//
|
|
18
|
+
// 启动新实例,新实例的父进程是 tsx,不是旧实例;令牌只在交给新进程的环境变量里,拿得到它就是被交接的那个。
|
|
19
19
|
//
|
|
20
20
|
// 判活只用与墙上时钟无关的标识(时钟被 NTP 步进、夏令时回拨都不影响):
|
|
21
21
|
// - 本次开机的标识不同(重启过)判残留;
|
|
@@ -196,7 +196,7 @@ export function acquireInstanceLock(runDir, opts = {}) {
|
|
|
196
196
|
catch (err) {
|
|
197
197
|
if (err.code === 'EEXIST')
|
|
198
198
|
continue;
|
|
199
|
-
throw new Error(`Cannot create lock file ${file} (the file system of the
|
|
199
|
+
throw new Error(`Cannot create lock file ${file} (the file system of the data directory must support hard links): ${err.message}`);
|
|
200
200
|
}
|
|
201
201
|
// 更低的代号里还有活着的持有者:让出刚建的这一代(读锁出错时同样先让出再抛)
|
|
202
202
|
const blocker = lowerBlocker(runDir, next, blocks, file);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-lock.js","sourceRoot":"","sources":["../src/instance-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,+DAA+D;AAC/D,
|
|
1
|
+
{"version":3,"file":"instance-lock.js","sourceRoot":"","sources":["../src/instance-lock.ts"],"names":[],"mappings":"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"}
|
package/dist/locales/en.d.ts
CHANGED
|
@@ -5,6 +5,10 @@ declare const _default: {
|
|
|
5
5
|
readonly yamlPosition: "{code} (line {line}, column {col})";
|
|
6
6
|
readonly saveRefused: "The {file} has external changes that have not taken effect yet; this save was refused so they are not overwritten ({path})";
|
|
7
7
|
readonly unsafePluginId: "Invalid plugin id: {id}";
|
|
8
|
+
readonly notMapping: "The config of plugin {instance} must be a mapping, not null, an array or a scalar";
|
|
9
|
+
readonly sectionNotMapping: "{at} in the config document is not a mapping (got {kind})";
|
|
10
|
+
readonly sectionNotList: "{at} in the config document is not a list (got {kind})";
|
|
11
|
+
readonly entryNotString: "{at} in the config document is not a string (got {kind})";
|
|
8
12
|
readonly noDefinition: "Plugin {instance} does not exist, and no definition of the same module is available to create it (the module must be registered and declare reusable)";
|
|
9
13
|
readonly plainSecret: "setPluginConfig only accepts the document form: raw values cannot be written to the secret fields of {instance} ({paths, list}); use applyPluginConfig to change the config";
|
|
10
14
|
readonly secretAt: "{path} (key {key})";
|
package/dist/locales/en.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAGA,wBAsBG"}
|
package/dist/locales/en.js
CHANGED
|
@@ -6,6 +6,10 @@ export default defineLocale()({
|
|
|
6
6
|
yamlPosition: '{code} (line {line}, column {col})',
|
|
7
7
|
saveRefused: 'The {file} has external changes that have not taken effect yet; this save was refused so they are not overwritten ({path})',
|
|
8
8
|
unsafePluginId: 'Invalid plugin id: {id}',
|
|
9
|
+
notMapping: 'The config of plugin {instance} must be a mapping, not null, an array or a scalar',
|
|
10
|
+
sectionNotMapping: '{at} in the config document is not a mapping (got {kind})',
|
|
11
|
+
sectionNotList: '{at} in the config document is not a list (got {kind})',
|
|
12
|
+
entryNotString: '{at} in the config document is not a string (got {kind})',
|
|
9
13
|
noDefinition: 'Plugin {instance} does not exist, and no definition of the same module is available to create it (the module must be registered and declare reusable)',
|
|
10
14
|
plainSecret: 'setPluginConfig only accepts the document form: raw values cannot be written to the secret fields of {instance} ({paths, list}); use applyPluginConfig to change the config',
|
|
11
15
|
secretAt: '{path} (key {key})',
|