@yunzai-ng/core 0.1.0 → 0.2.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/dist/config/core-config.d.ts +1 -1
- package/dist/platform/paths.d.ts +10 -0
- package/dist/platform/paths.d.ts.map +1 -1
- package/dist/platform/paths.js +50 -7
- package/dist/platform/paths.js.map +1 -1
- package/dist/store/sql.js +4 -4
- package/package.json +12 -2
- package/src/adapter/accounts.ts +1 -1
- package/src/adapter/bots.ts +1 -1
- package/src/adapter/host.ts +1 -1
- package/src/adapter/login.ts +1 -1
- package/src/kernel/app.ts +843 -843
- package/src/kernel/policy.ts +120 -120
- package/src/kernel/runtime.ts +1 -1
- package/src/pipeline/event.ts +1 -1
- package/src/platform/paths.test.ts +166 -0
- package/src/platform/paths.ts +52 -7
- package/src/platform/system.ts +1 -1
- package/src/plugin/market.ts +1 -1
- package/src/plugin/services.ts +1 -1
- package/src/render/registry.ts +1 -1
- package/src/scheduler/index.ts +1 -1
- package/src/server/auth.ts +1 -1
- package/src/server/files.ts +1 -1
- package/src/server/index.ts +1 -1
- package/src/store/index.ts +156 -156
- package/src/store/kv.ts +256 -256
- package/src/store/sql.ts +324 -324
|
@@ -42,10 +42,10 @@ export declare const coreConfigSchema: import("./schema.js").Schema<{
|
|
|
42
42
|
dir?: string | undefined;
|
|
43
43
|
};
|
|
44
44
|
server: {
|
|
45
|
+
readonly: boolean;
|
|
45
46
|
enable: boolean;
|
|
46
47
|
host: string;
|
|
47
48
|
port: number;
|
|
48
|
-
readonly: boolean;
|
|
49
49
|
token?: string | undefined;
|
|
50
50
|
publicUrl?: string | undefined;
|
|
51
51
|
};
|
package/dist/platform/paths.d.ts
CHANGED
|
@@ -6,6 +6,16 @@ export interface ResolvePathsOptions {
|
|
|
6
6
|
/** 内核包所在目录;缺省由 `import.meta.url` 推导 */
|
|
7
7
|
runtime?: string;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* 0.1.1 及更早的默认位置上是否还留着一个实例
|
|
11
|
+
*
|
|
12
|
+
* 供 CLI 提示使用:默认位置自 0.2.0 起改为当前目录,装过旧版的机器上那个实例仍在原处,
|
|
13
|
+
* 而使用者多半以为「配置全没了」。内核只负责报出位置,是否搬家由使用者决定 ——
|
|
14
|
+
* 自动迁移会在两个目录都有内容时无从判断该以谁为准。
|
|
15
|
+
* @param home 本次实际使用的主目录
|
|
16
|
+
* @returns 旧实例所在目录;不存在、或恰好就是本次所用的目录时 undefined
|
|
17
|
+
*/
|
|
18
|
+
export declare function legacyInstance(home: string): string | undefined;
|
|
9
19
|
/**
|
|
10
20
|
* 解析目录布局
|
|
11
21
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/platform/paths.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/platform/paths.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAapD,gBAAgB;AAChB,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AA6ED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI/D;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,GAAE,mBAAwB,GAAG,YAAY,CAgBzE;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAW5E;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjG"}
|
package/dist/platform/paths.js
CHANGED
|
@@ -2,13 +2,18 @@
|
|
|
2
2
|
* 模块职责:确定并创建运行时目录布局
|
|
3
3
|
* 依赖方向:依赖 util/fs、platform/detect
|
|
4
4
|
* 生命周期:启动时解析一次,之后只读
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* 其余模块只准通过 `app.paths` 取。
|
|
5
|
+
* 注意事项:优先级:显式参数 > `YZNG_HOME` > 便携模式标记 > 当前目录。
|
|
6
|
+
* 启动时把八个目录一次性定死成绝对路径,其余模块只准通过 `app.paths` 取。
|
|
8
7
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* **默认落在当前目录**:解压或克隆到一个文件夹、在其中 `yzng init`,数据就在
|
|
9
|
+
* 眼前,拷走整个文件夹即完成迁移。代价是本模块必须读 `process.cwd()`,而以
|
|
10
|
+
* Windows 服务、开机自启或 pm2 启动时工作目录并非项目目录 —— 那些场景必须
|
|
11
|
+
* 显式给出 `YZNG_HOME` 或启动器的工作目录,否则数据会落在启动器所在之处。
|
|
12
|
+
*
|
|
13
|
+
* 0.1.1 及更早的默认位置是系统目录(Windows 的 `%LOCALAPPDATA%\YunzaiNG` 等)。
|
|
14
|
+
* 此处**不**为其保留静默回落 —— 那会使「默认在当前目录」在任何装过旧版的机器上
|
|
15
|
+
* 都不成立。改由 {@link legacyInstance} 把旧实例报给 CLI 显式提示:换目录应当是
|
|
16
|
+
* 使用者看得见的一步,而不是内核悄悄替他挑一个。
|
|
12
17
|
*/
|
|
13
18
|
import { homedir } from "node:os";
|
|
14
19
|
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
@@ -49,6 +54,8 @@ function findPortableRoot(runtimeDir) {
|
|
|
49
54
|
}
|
|
50
55
|
/**
|
|
51
56
|
* 系统默认的数据根目录
|
|
57
|
+
*
|
|
58
|
+
* 已不再是缺省取值,仅由 {@link legacyInstance} 用于查找旧实例,见文件头第 3 条。
|
|
52
59
|
* @returns 绝对路径
|
|
53
60
|
*/
|
|
54
61
|
function defaultHome() {
|
|
@@ -70,6 +77,42 @@ function defaultHome() {
|
|
|
70
77
|
return join(xdg, "yunzai-ng");
|
|
71
78
|
return join(home, APP_DIR_NAME_UNIX);
|
|
72
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* 判断一个目录里是否已有实例
|
|
82
|
+
*
|
|
83
|
+
* 以 `config/` 是否存在为准:`ensurePaths` 建的七个目录中只有它必定装着文件
|
|
84
|
+
* (`ConfigStore` 会把缺省配置落盘),而空的 `data/`、`logs/` 无从区分
|
|
85
|
+
* 「一个实例」与「随手建的空目录」。
|
|
86
|
+
* @param dir 待判断的目录
|
|
87
|
+
* @returns 是否已有实例
|
|
88
|
+
*/
|
|
89
|
+
function hasInstance(dir) {
|
|
90
|
+
return existsSync(join(dir, "config"));
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 未显式指定、也无便携标记时的主目录
|
|
94
|
+
*
|
|
95
|
+
* 见文件头第 2、3 条。
|
|
96
|
+
* @returns 绝对路径
|
|
97
|
+
*/
|
|
98
|
+
function autoHome() {
|
|
99
|
+
return process.cwd();
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 0.1.1 及更早的默认位置上是否还留着一个实例
|
|
103
|
+
*
|
|
104
|
+
* 供 CLI 提示使用:默认位置自 0.2.0 起改为当前目录,装过旧版的机器上那个实例仍在原处,
|
|
105
|
+
* 而使用者多半以为「配置全没了」。内核只负责报出位置,是否搬家由使用者决定 ——
|
|
106
|
+
* 自动迁移会在两个目录都有内容时无从判断该以谁为准。
|
|
107
|
+
* @param home 本次实际使用的主目录
|
|
108
|
+
* @returns 旧实例所在目录;不存在、或恰好就是本次所用的目录时 undefined
|
|
109
|
+
*/
|
|
110
|
+
export function legacyInstance(home) {
|
|
111
|
+
const legacy = defaultHome();
|
|
112
|
+
if (resolve(legacy) === resolve(home))
|
|
113
|
+
return undefined;
|
|
114
|
+
return hasInstance(legacy) ? legacy : undefined;
|
|
115
|
+
}
|
|
73
116
|
/**
|
|
74
117
|
* 解析目录布局
|
|
75
118
|
*
|
|
@@ -81,7 +124,7 @@ function defaultHome() {
|
|
|
81
124
|
export function resolvePaths(opts = {}) {
|
|
82
125
|
const runtime = opts.runtime ? resolve(opts.runtime) : detectRuntimeDir();
|
|
83
126
|
const explicit = opts.home ?? process.env.YZNG_HOME;
|
|
84
|
-
const home = explicit ? resolve(process.cwd(), explicit) : (findPortableRoot(runtime) ??
|
|
127
|
+
const home = explicit ? resolve(process.cwd(), explicit) : (findPortableRoot(runtime) ?? autoHome());
|
|
85
128
|
return Object.freeze({
|
|
86
129
|
home,
|
|
87
130
|
config: join(home, "config"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/platform/paths.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/platform/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,gBAAgB;AAChB,MAAM,eAAe,GAAG,WAAW,CAAA;AAEnC,uBAAuB;AACvB,MAAM,YAAY,GAAG,UAAU,CAAA;AAE/B,uBAAuB;AACvB,MAAM,iBAAiB,GAAG,YAAY,CAAA;AAUtC;;;;;GAKG;AACH,SAAS,gBAAgB;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACpD,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAClC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC1G,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;YAAE,OAAO,GAAG,CAAA;IACxD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;IAC7B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IAEtB,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QAC9F,OAAO,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACjC,CAAC;IACD,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,YAAY,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC1B,0CAA0C;QAC1C,OAAO,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;IACtC,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;IACrC,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;IACzD,OAAO,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;AACtC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;AACxC,CAAC;AAED;;;;;GAKG;AACH,SAAS,QAAQ;IACf,OAAO,OAAO,CAAC,GAAG,EAAE,CAAA;AACtB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAA;IAC5B,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAA;IACvD,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;AACjD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4B,EAAE;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAA;IAEzE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAA;IACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAA;IAEpG,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI;QACJ,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACxB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACxB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACxB,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAC9B,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;QAC1B,OAAO;KACR,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAmB;IACnD,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;QACrB,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QACvB,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;QACrB,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;QACrB,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;QACrB,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;QACxB,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;KACvB,CAAC,CAAA;IACF,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAmB,EAAE,MAAc,EAAE,GAAW,EAAE,MAAc;IACvF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,MAAM,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC,CAAA;AACtD,CAAC"}
|
package/dist/store/sql.js
CHANGED
|
@@ -114,10 +114,10 @@ export class SqliteHandle {
|
|
|
114
114
|
* @throws 版本号未严格递增,或某条迁移执行失败
|
|
115
115
|
*/
|
|
116
116
|
async migrate(migrations) {
|
|
117
|
-
await this.run(`CREATE TABLE IF NOT EXISTS ${MIGRATION_TABLE} (
|
|
118
|
-
version INTEGER PRIMARY KEY,
|
|
119
|
-
name TEXT NOT NULL,
|
|
120
|
-
applied_at INTEGER NOT NULL
|
|
117
|
+
await this.run(`CREATE TABLE IF NOT EXISTS ${MIGRATION_TABLE} (
|
|
118
|
+
version INTEGER PRIMARY KEY,
|
|
119
|
+
name TEXT NOT NULL,
|
|
120
|
+
applied_at INTEGER NOT NULL
|
|
121
121
|
)`);
|
|
122
122
|
const sorted = [...migrations].sort((a, b) => a.version - b.version);
|
|
123
123
|
for (let i = 1; i < sorted.length; i++) {
|
package/package.json
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yunzai-ng/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Yunzai NG 内核:插件宿主、统一事件模型、中间件管线、存储与渲染抽象",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "AGPL-3.0-or-later",
|
|
7
|
+
"homepage": "https://github.com/Yunzai-NG/yunzai-ng#readme",
|
|
8
|
+
"bugs": "https://github.com/Yunzai-NG/yunzai-ng/issues",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/Yunzai-NG/yunzai-ng.git",
|
|
12
|
+
"directory": "packages/core"
|
|
13
|
+
},
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=20.11.0"
|
|
16
|
+
},
|
|
7
17
|
"main": "./dist/index.js",
|
|
8
18
|
"types": "./dist/index.d.ts",
|
|
9
19
|
"exports": {
|
|
@@ -29,7 +39,7 @@
|
|
|
29
39
|
"pino": "^9.6.0",
|
|
30
40
|
"undici": "^7.3.0",
|
|
31
41
|
"yaml": "^2.7.0",
|
|
32
|
-
"@yunzai-ng/types": "0.1.
|
|
42
|
+
"@yunzai-ng/types": "0.1.1"
|
|
33
43
|
},
|
|
34
44
|
"optionalDependencies": {
|
|
35
45
|
"better-sqlite3": "^11.8.1",
|
package/src/adapter/accounts.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* 正在进行的 `connect()` —— 被动接入的适配器要等对端连入才返回,不先 abort 会卡住停机。
|
|
18
18
|
*
|
|
19
19
|
* **适配器插件卸载时账号要同步下线。** `onUnregister` 是同步回调(见 registry.ts),
|
|
20
|
-
* 故此处同步改状态并 abort,异步的 socket 关闭交给 `#closing` 由 `stop()` 兜底 await。
|
|
20
|
+
* 故此处同步改状态并 abort,异步的 socket 关闭交给 `#closing` 由 `stop()` 兜底 await。
|
|
21
21
|
*/
|
|
22
22
|
import type {
|
|
23
23
|
AccountRecord,
|
package/src/adapter/bots.ts
CHANGED
package/src/adapter/host.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* `DisposalRegistry`,账号一断开即全部回收,适配器不必自行记录。
|
|
17
17
|
*
|
|
18
18
|
* 工厂分两层是刻意的:内核装配时绑定一次全局依赖,账号管理器每次连接只补「该账号」专属
|
|
19
|
-
* 的几项 —— 于是账号管理器不必认识分发器与服务器,`adapter` 层也不会反向依赖 `pipeline`。
|
|
19
|
+
* 的几项 —— 于是账号管理器不必认识分发器与服务器,`adapter` 层也不会反向依赖 `pipeline`。
|
|
20
20
|
*/
|
|
21
21
|
import type {
|
|
22
22
|
AccountRecord,
|
package/src/adapter/login.ts
CHANGED