@jsbot-tellus/core 2.5.0 → 2.6.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 +8 -5
- package/dist/app/cli.d.ts +10 -0
- package/dist/app/cli.d.ts.map +1 -0
- package/dist/app/cli.js +37 -0
- package/dist/app/cli.js.map +1 -0
- package/dist/app/runtime.d.ts +121 -0
- package/dist/app/runtime.d.ts.map +1 -0
- package/dist/app/runtime.js +296 -0
- package/dist/app/runtime.js.map +1 -0
- package/dist/app.js +63 -273
- package/dist/app.js.map +1 -1
- package/dist/core/plugin/command-params.d.ts +3 -37
- package/dist/core/plugin/command-params.d.ts.map +1 -1
- package/dist/core/plugin/command-params.js +2 -580
- package/dist/core/plugin/command-params.js.map +1 -1
- package/dist/core/plugin/install/paths.d.ts +7 -0
- package/dist/core/plugin/install/paths.d.ts.map +1 -0
- package/dist/core/plugin/install/paths.js +49 -0
- package/dist/core/plugin/install/paths.js.map +1 -0
- package/dist/core/plugin/install/state.d.ts +23 -0
- package/dist/core/plugin/install/state.d.ts.map +1 -0
- package/dist/core/plugin/install/state.js +129 -0
- package/dist/core/plugin/install/state.js.map +1 -0
- package/dist/core/plugin/install/validate-script.d.ts +3 -0
- package/dist/core/plugin/install/validate-script.d.ts.map +1 -0
- package/dist/core/plugin/install/validate-script.js +154 -0
- package/dist/core/plugin/install/validate-script.js.map +1 -0
- package/dist/core/plugin/install-dir.d.ts +3 -28
- package/dist/core/plugin/install-dir.d.ts.map +1 -1
- package/dist/core/plugin/install-dir.js +3 -326
- package/dist/core/plugin/install-dir.js.map +1 -1
- package/dist/core/plugin/installer/checks.d.ts +6 -0
- package/dist/core/plugin/installer/checks.d.ts.map +1 -0
- package/dist/core/plugin/installer/checks.js +99 -0
- package/dist/core/plugin/installer/checks.js.map +1 -0
- package/dist/core/plugin/installer/support.d.ts +37 -0
- package/dist/core/plugin/installer/support.d.ts.map +1 -0
- package/dist/core/plugin/installer/support.js +67 -0
- package/dist/core/plugin/installer/support.js.map +1 -0
- package/dist/core/plugin/installer/warnings.d.ts +5 -0
- package/dist/core/plugin/installer/warnings.d.ts.map +1 -0
- package/dist/core/plugin/installer/warnings.js +28 -0
- package/dist/core/plugin/installer/warnings.js.map +1 -0
- package/dist/core/plugin/installer.d.ts +4 -30
- package/dist/core/plugin/installer.d.ts.map +1 -1
- package/dist/core/plugin/installer.js +21 -202
- package/dist/core/plugin/installer.js.map +1 -1
- package/dist/core/plugin/params/compile.d.ts +3 -0
- package/dist/core/plugin/params/compile.d.ts.map +1 -0
- package/dist/core/plugin/params/compile.js +23 -0
- package/dist/core/plugin/params/compile.js.map +1 -0
- package/dist/core/plugin/params/declaration.d.ts +9 -0
- package/dist/core/plugin/params/declaration.d.ts.map +1 -0
- package/dist/core/plugin/params/declaration.js +286 -0
- package/dist/core/plugin/params/declaration.js.map +1 -0
- package/dist/core/plugin/params/input.d.ts +5 -0
- package/dist/core/plugin/params/input.d.ts.map +1 -0
- package/dist/core/plugin/params/input.js +196 -0
- package/dist/core/plugin/params/input.js.map +1 -0
- package/dist/core/plugin/params/reply.d.ts +3 -0
- package/dist/core/plugin/params/reply.d.ts.map +1 -0
- package/dist/core/plugin/params/reply.js +49 -0
- package/dist/core/plugin/params/reply.js.map +1 -0
- package/dist/core/plugin/params/type-level.d.ts +24 -0
- package/dist/core/plugin/params/type-level.d.ts.map +1 -0
- package/dist/core/plugin/params/type-level.js +2 -0
- package/dist/core/plugin/params/type-level.js.map +1 -0
- package/dist/core/plugin/params/types.d.ts +33 -0
- package/dist/core/plugin/params/types.d.ts.map +1 -0
- package/dist/core/plugin/params/types.js +12 -0
- package/dist/core/plugin/params/types.js.map +1 -0
- package/dist/core/plugin/params/values.d.ts +7 -0
- package/dist/core/plugin/params/values.d.ts.map +1 -0
- package/dist/core/plugin/params/values.js +111 -0
- package/dist/core/plugin/params/values.js.map +1 -0
- package/dist/core/web/api.d.ts +2 -14
- package/dist/core/web/api.d.ts.map +1 -1
- package/dist/core/web/api.js +8 -500
- package/dist/core/web/api.js.map +1 -1
- package/dist/core/web/routes/actions.d.ts +4 -0
- package/dist/core/web/routes/actions.d.ts.map +1 -0
- package/dist/core/web/routes/actions.js +33 -0
- package/dist/core/web/routes/actions.js.map +1 -0
- package/dist/core/web/routes/config.d.ts +5 -0
- package/dist/core/web/routes/config.d.ts.map +1 -0
- package/dist/core/web/routes/config.js +30 -0
- package/dist/core/web/routes/config.js.map +1 -0
- package/dist/core/web/routes/kv.d.ts +6 -0
- package/dist/core/web/routes/kv.d.ts.map +1 -0
- package/dist/core/web/routes/kv.js +80 -0
- package/dist/core/web/routes/kv.js.map +1 -0
- package/dist/core/web/routes/plugins.d.ts +5 -0
- package/dist/core/web/routes/plugins.d.ts.map +1 -0
- package/dist/core/web/routes/plugins.js +98 -0
- package/dist/core/web/routes/plugins.js.map +1 -0
- package/dist/core/web/routes/sessions.d.ts +8 -0
- package/dist/core/web/routes/sessions.d.ts.map +1 -0
- package/dist/core/web/routes/sessions.js +130 -0
- package/dist/core/web/routes/sessions.js.map +1 -0
- package/dist/core/web/routes/shared.d.ts +18 -0
- package/dist/core/web/routes/shared.d.ts.map +1 -0
- package/dist/core/web/routes/shared.js +19 -0
- package/dist/core/web/routes/shared.js.map +1 -0
- package/dist/core/web/routes/status.d.ts +6 -0
- package/dist/core/web/routes/status.d.ts.map +1 -0
- package/dist/core/web/routes/status.js +132 -0
- package/dist/core/web/routes/status.js.map +1 -0
- package/dist/core/web/server/auth.d.ts +17 -0
- package/dist/core/web/server/auth.d.ts.map +1 -0
- package/dist/core/web/server/auth.js +68 -0
- package/dist/core/web/server/auth.js.map +1 -0
- package/dist/core/web/server/csp.d.ts +11 -0
- package/dist/core/web/server/csp.d.ts.map +1 -0
- package/dist/core/web/server/csp.js +31 -0
- package/dist/core/web/server/csp.js.map +1 -0
- package/dist/core/web/server/request.d.ts +6 -0
- package/dist/core/web/server/request.d.ts.map +1 -0
- package/dist/core/web/server/request.js +33 -0
- package/dist/core/web/server/request.js.map +1 -0
- package/dist/core/web/server/security.d.ts +4 -0
- package/dist/core/web/server/security.d.ts.map +1 -0
- package/dist/core/web/server/security.js +12 -0
- package/dist/core/web/server/security.js.map +1 -0
- package/dist/core/web/server/sse.d.ts +18 -0
- package/dist/core/web/server/sse.d.ts.map +1 -0
- package/dist/core/web/server/sse.js +49 -0
- package/dist/core/web/server/sse.js.map +1 -0
- package/dist/core/web/server/static.d.ts +16 -0
- package/dist/core/web/server/static.d.ts.map +1 -0
- package/dist/core/web/server/static.js +80 -0
- package/dist/core/web/server/static.js.map +1 -0
- package/dist/core/web/server.d.ts +0 -7
- package/dist/core/web/server.d.ts.map +1 -1
- package/dist/core/web/server.js +41 -263
- package/dist/core/web/server.js.map +1 -1
- package/docs/architecture.md +28 -11
- package/docs/configuration.md +1 -1
- package/docs/migration.md +2 -2
- package/docs/plugin-api.md +24 -11
- package/docs/plugin-development.md +1 -1
- package/package.json +19 -17
- package/src/app/cli.ts +47 -0
- package/src/app/runtime.ts +522 -0
- package/src/app.ts +87 -395
- package/src/core/plugin/command-params.ts +8 -871
- package/src/core/plugin/install/paths.ts +72 -0
- package/src/core/plugin/install/state.ts +196 -0
- package/src/core/plugin/install/validate-script.ts +154 -0
- package/src/core/plugin/install-dir.ts +19 -427
- package/src/core/plugin/installer/checks.ts +137 -0
- package/src/core/plugin/installer/support.ts +120 -0
- package/src/core/plugin/installer/warnings.ts +52 -0
- package/src/core/plugin/installer.ts +52 -301
- package/src/core/plugin/params/compile.ts +41 -0
- package/src/core/plugin/params/declaration.ts +394 -0
- package/src/core/plugin/params/input.ts +281 -0
- package/src/core/plugin/params/reply.ts +59 -0
- package/src/core/plugin/params/type-level.ts +75 -0
- package/src/core/plugin/params/types.ts +55 -0
- package/src/core/plugin/params/values.ts +150 -0
- package/src/core/web/api.ts +33 -759
- package/src/core/web/routes/actions.ts +43 -0
- package/src/core/web/routes/config.ts +42 -0
- package/src/core/web/routes/kv.ts +122 -0
- package/src/core/web/routes/plugins.ts +151 -0
- package/src/core/web/routes/sessions.ts +188 -0
- package/src/core/web/routes/shared.ts +42 -0
- package/src/core/web/routes/status.ts +191 -0
- package/src/core/web/server/auth.ts +126 -0
- package/src/core/web/server/csp.ts +33 -0
- package/src/core/web/server/request.ts +38 -0
- package/src/core/web/server/security.ts +14 -0
- package/src/core/web/server/sse.ts +74 -0
- package/src/core/web/server/static.ts +112 -0
- package/src/core/web/server.ts +41 -383
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../../src/core/plugin/install/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const INSTALL_STATE_FILE = ".jsbot-installed.json";
|
|
2
|
+
export interface InstalledPackageRecord {
|
|
3
|
+
spec: string;
|
|
4
|
+
version: string;
|
|
5
|
+
pluginIds: string[];
|
|
6
|
+
dependencies: Record<string, string[]>;
|
|
7
|
+
installedAt: string;
|
|
8
|
+
/** Directory name under the plugins root. */
|
|
9
|
+
dir: string;
|
|
10
|
+
}
|
|
11
|
+
export interface InstallState {
|
|
12
|
+
version: 2;
|
|
13
|
+
packages: Record<string, InstalledPackageRecord>;
|
|
14
|
+
}
|
|
15
|
+
export declare class InstallStateError extends Error {
|
|
16
|
+
constructor(message: string, options?: ErrorOptions);
|
|
17
|
+
}
|
|
18
|
+
export declare function readJsonFile(path: string): Promise<unknown>;
|
|
19
|
+
export declare function readPackageVersion(directory: string): Promise<string | undefined>;
|
|
20
|
+
export declare function isSafeDirectoryName(value: string): boolean;
|
|
21
|
+
export declare function readInstallState(dir: string): Promise<InstallState>;
|
|
22
|
+
export declare function writeInstallState(dir: string, state: InstallState): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../src/core/plugin/install/state.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,0BAA0B,CAAA;AAEzD,MAAM,WAAW,sBAAsB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,CAAC,CAAA;IACV,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;CACnD;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IACxC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAGlD;CACJ;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQjE;AAED,wBAAsB,kBAAkB,CACpC,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU7B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQ1D;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAyGzE;AAED,wBAAsB,iBAAiB,CACnC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { readFile, rename, rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
export const INSTALL_STATE_FILE = '.jsbot-installed.json';
|
|
5
|
+
export class InstallStateError extends Error {
|
|
6
|
+
constructor(message, options) {
|
|
7
|
+
super(message, options);
|
|
8
|
+
this.name = 'InstallStateError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export async function readJsonFile(path) {
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse(await readFile(path, 'utf8'));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
if (error.code === 'ENOENT')
|
|
17
|
+
return undefined;
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export async function readPackageVersion(directory) {
|
|
22
|
+
const manifest = await readJsonFile(join(directory, 'package.json')).catch(() => undefined);
|
|
23
|
+
if (typeof manifest !== 'object' || manifest === null)
|
|
24
|
+
return undefined;
|
|
25
|
+
const version = manifest['version'];
|
|
26
|
+
return typeof version === 'string' ? version : undefined;
|
|
27
|
+
}
|
|
28
|
+
export function isSafeDirectoryName(value) {
|
|
29
|
+
return (value.length > 0 &&
|
|
30
|
+
value !== '.' &&
|
|
31
|
+
value !== '..' &&
|
|
32
|
+
!value.includes('/') &&
|
|
33
|
+
!value.includes('\\'));
|
|
34
|
+
}
|
|
35
|
+
export async function readInstallState(dir) {
|
|
36
|
+
const path = join(dir, INSTALL_STATE_FILE);
|
|
37
|
+
let value;
|
|
38
|
+
try {
|
|
39
|
+
value = await readJsonFile(path);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
throw new InstallStateError(`安装状态文件无法解析: ${path}`, {
|
|
43
|
+
cause: error,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
if (value === undefined) {
|
|
47
|
+
return { version: 2, packages: {} };
|
|
48
|
+
}
|
|
49
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
50
|
+
throw new InstallStateError(`安装状态文件格式无效: ${path}`);
|
|
51
|
+
}
|
|
52
|
+
if (value['version'] !== 2) {
|
|
53
|
+
throw new InstallStateError(`不支持的安装状态版本,请检查 ${path}`);
|
|
54
|
+
}
|
|
55
|
+
const packages = value['packages'];
|
|
56
|
+
if (typeof packages !== 'object' ||
|
|
57
|
+
packages === null ||
|
|
58
|
+
Array.isArray(packages)) {
|
|
59
|
+
throw new InstallStateError(`安装状态 packages 字段无效: ${path}`);
|
|
60
|
+
}
|
|
61
|
+
const result = {};
|
|
62
|
+
const directories = new Set();
|
|
63
|
+
for (const [name, rawRecord] of Object.entries(packages)) {
|
|
64
|
+
if (typeof rawRecord !== 'object' ||
|
|
65
|
+
rawRecord === null ||
|
|
66
|
+
Array.isArray(rawRecord)) {
|
|
67
|
+
throw new InstallStateError(`安装状态记录无效: ${name}`);
|
|
68
|
+
}
|
|
69
|
+
const record = rawRecord;
|
|
70
|
+
const pluginIds = record['pluginIds'];
|
|
71
|
+
const dependencies = record['dependencies'];
|
|
72
|
+
const directory = record['dir'];
|
|
73
|
+
if (typeof record['spec'] !== 'string' ||
|
|
74
|
+
typeof record['version'] !== 'string' ||
|
|
75
|
+
typeof record['installedAt'] !== 'string' ||
|
|
76
|
+
typeof directory !== 'string' ||
|
|
77
|
+
!isSafeDirectoryName(directory) ||
|
|
78
|
+
!Array.isArray(pluginIds) ||
|
|
79
|
+
pluginIds.some((item) => typeof item !== 'string')) {
|
|
80
|
+
throw new InstallStateError(`安装状态记录不完整: ${name}`);
|
|
81
|
+
}
|
|
82
|
+
if (directories.has(directory)) {
|
|
83
|
+
throw new InstallStateError(`安装状态存在重复的插件目录: ${directory}`);
|
|
84
|
+
}
|
|
85
|
+
directories.add(directory);
|
|
86
|
+
if (typeof dependencies !== 'object' ||
|
|
87
|
+
dependencies === null ||
|
|
88
|
+
Array.isArray(dependencies)) {
|
|
89
|
+
throw new InstallStateError(`安装状态依赖字段无效: ${name}`);
|
|
90
|
+
}
|
|
91
|
+
const parsedDependencies = {};
|
|
92
|
+
for (const [id, list] of Object.entries(dependencies)) {
|
|
93
|
+
if (!Array.isArray(list) ||
|
|
94
|
+
list.some((item) => typeof item !== 'string')) {
|
|
95
|
+
throw new InstallStateError(`安装状态依赖记录无效: ${name}.${id}`);
|
|
96
|
+
}
|
|
97
|
+
parsedDependencies[id] = [...list];
|
|
98
|
+
}
|
|
99
|
+
result[name] = {
|
|
100
|
+
spec: record['spec'],
|
|
101
|
+
version: record['version'],
|
|
102
|
+
pluginIds: [...pluginIds],
|
|
103
|
+
dependencies: parsedDependencies,
|
|
104
|
+
installedAt: record['installedAt'],
|
|
105
|
+
dir: directory,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
return { version: 2, packages: result };
|
|
109
|
+
}
|
|
110
|
+
export async function writeInstallState(dir, state) {
|
|
111
|
+
const sorted = { version: 2, packages: {} };
|
|
112
|
+
for (const name of Object.keys(state.packages).sort()) {
|
|
113
|
+
const record = state.packages[name];
|
|
114
|
+
if (!record)
|
|
115
|
+
continue;
|
|
116
|
+
sorted.packages[name] = record;
|
|
117
|
+
}
|
|
118
|
+
const path = join(dir, INSTALL_STATE_FILE);
|
|
119
|
+
const temporary = `${path}.${randomUUID()}.tmp`;
|
|
120
|
+
try {
|
|
121
|
+
await writeFile(temporary, `${JSON.stringify(sorted, null, 4)}\n`, 'utf8');
|
|
122
|
+
await rename(temporary, path);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
await rm(temporary, { force: true }).catch(() => undefined);
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../src/core/plugin/install/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const VALIDATE_SCRIPT_FILE = "validate.mjs";
|
|
2
|
+
export declare const VALIDATE_SCRIPT = "import { readdir } from 'node:fs/promises'\nimport { extname, join } from 'node:path'\nimport { pathToFileURL } from 'node:url'\n\nconst directory = process.argv[2]\n\nif (!directory) {\n console.error('missing plugin directory')\n process.exit(2)\n}\n\nconst extensions = new Set(['.js', '.mjs', '.cjs'])\n\nasync function filesIn(directory) {\n const entries = await readdir(directory, { withFileTypes: true })\n entries.sort((a, b) => a.name.localeCompare(b.name))\n\n const files = []\n\n for (const entry of entries) {\n if (entry.name.startsWith('.')) continue\n\n const path = join(directory, entry.name)\n\n if (entry.isDirectory()) {\n if (entry.name === 'node_modules') continue\n files.push(...(await filesIn(path)))\n continue\n }\n\n if (\n entry.isFile() &&\n extensions.has(extname(entry.name)) &&\n !/\\.d\\.(ts|mts|cts)$/.test(entry.name)\n ) {\n files.push(path)\n }\n }\n\n return files\n}\n\nfunction isPlugin(value) {\n if (typeof value !== 'object' || value === null) return false\n if (!('manifest' in value) || !('setup' in value)) return false\n\n const manifest = value.manifest\n\n if (\n typeof manifest !== 'object' ||\n manifest === null ||\n typeof manifest.id !== 'string' ||\n typeof manifest.configSchema !== 'object' ||\n manifest.configSchema === null ||\n typeof manifest.configSchema.safeParse !== 'function' ||\n typeof value.setup !== 'function'\n ) {\n return false\n }\n\n if (\n manifest.dependencies !== undefined &&\n (!Array.isArray(manifest.dependencies) ||\n manifest.dependencies.some((item) => typeof item !== 'string'))\n ) {\n return false\n }\n\n return true\n}\n\nfunction collect(value, result) {\n if (Array.isArray(value)) {\n for (const item of value) collect(item, result)\n return\n }\n\n if (isPlugin(value)) {\n result.push(value)\n return\n }\n\n if (\n typeof value === 'object' &&\n value !== null &&\n 'plugins' in value &&\n Array.isArray(value.plugins)\n ) {\n for (const item of value.plugins) collect(item, result)\n }\n}\n\nconst files = await filesIn(directory).catch((error) => {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(3)\n})\n\nif (files.length === 0) {\n console.error('\u63D2\u4EF6 dist \u76EE\u5F55\u4E2D\u6CA1\u6709\u53EF\u52A0\u8F7D\u7684\u6587\u4EF6')\n process.exit(4)\n}\n\nconst found = []\nconst invalid = []\n\nfor (const file of files) {\n let imported\n\n try {\n imported = await import(pathToFileURL(file).href)\n } catch (error) {\n invalid.push(\n `failed to import ${file}: ${error instanceof Error ? error.message : String(error)}`\n )\n continue\n }\n\n if (typeof imported !== 'object' || imported === null) continue\n\n for (const candidate of [imported.default, imported.plugin, imported.plugins]) {\n collect(candidate, found)\n }\n}\n\nconst unique = found.filter((plugin, index) => found.indexOf(plugin) === index)\n\nif (unique.length === 0) {\n console.error(\n invalid[0] ??\n 'package does not export a JsBot plugin (default / plugin / plugins)'\n )\n process.exit(5)\n}\n\nconsole.log(\n '__JSBOT_PLUGIN__' +\n JSON.stringify(\n unique.map((plugin) => ({\n id: plugin.manifest.id,\n version:\n typeof plugin.manifest.version === 'string'\n ? plugin.manifest.version\n : '0.0.0',\n dependencies: Array.isArray(plugin.manifest.dependencies)\n ? plugin.manifest.dependencies.filter(\n (item) => typeof item === 'string'\n )\n : [],\n }))\n )\n)\n";
|
|
3
|
+
//# sourceMappingURL=validate-script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-script.d.ts","sourceRoot":"","sources":["../../../../src/core/plugin/install/validate-script.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,iBAAiB,CAAA;AAElD,eAAO,MAAM,eAAe,4/HAuJ3B,CAAA"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
export const VALIDATE_SCRIPT_FILE = 'validate.mjs';
|
|
2
|
+
export const VALIDATE_SCRIPT = `import { readdir } from 'node:fs/promises'
|
|
3
|
+
import { extname, join } from 'node:path'
|
|
4
|
+
import { pathToFileURL } from 'node:url'
|
|
5
|
+
|
|
6
|
+
const directory = process.argv[2]
|
|
7
|
+
|
|
8
|
+
if (!directory) {
|
|
9
|
+
console.error('missing plugin directory')
|
|
10
|
+
process.exit(2)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const extensions = new Set(['.js', '.mjs', '.cjs'])
|
|
14
|
+
|
|
15
|
+
async function filesIn(directory) {
|
|
16
|
+
const entries = await readdir(directory, { withFileTypes: true })
|
|
17
|
+
entries.sort((a, b) => a.name.localeCompare(b.name))
|
|
18
|
+
|
|
19
|
+
const files = []
|
|
20
|
+
|
|
21
|
+
for (const entry of entries) {
|
|
22
|
+
if (entry.name.startsWith('.')) continue
|
|
23
|
+
|
|
24
|
+
const path = join(directory, entry.name)
|
|
25
|
+
|
|
26
|
+
if (entry.isDirectory()) {
|
|
27
|
+
if (entry.name === 'node_modules') continue
|
|
28
|
+
files.push(...(await filesIn(path)))
|
|
29
|
+
continue
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (
|
|
33
|
+
entry.isFile() &&
|
|
34
|
+
extensions.has(extname(entry.name)) &&
|
|
35
|
+
!/\\.d\\.(ts|mts|cts)$/.test(entry.name)
|
|
36
|
+
) {
|
|
37
|
+
files.push(path)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return files
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function isPlugin(value) {
|
|
45
|
+
if (typeof value !== 'object' || value === null) return false
|
|
46
|
+
if (!('manifest' in value) || !('setup' in value)) return false
|
|
47
|
+
|
|
48
|
+
const manifest = value.manifest
|
|
49
|
+
|
|
50
|
+
if (
|
|
51
|
+
typeof manifest !== 'object' ||
|
|
52
|
+
manifest === null ||
|
|
53
|
+
typeof manifest.id !== 'string' ||
|
|
54
|
+
typeof manifest.configSchema !== 'object' ||
|
|
55
|
+
manifest.configSchema === null ||
|
|
56
|
+
typeof manifest.configSchema.safeParse !== 'function' ||
|
|
57
|
+
typeof value.setup !== 'function'
|
|
58
|
+
) {
|
|
59
|
+
return false
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (
|
|
63
|
+
manifest.dependencies !== undefined &&
|
|
64
|
+
(!Array.isArray(manifest.dependencies) ||
|
|
65
|
+
manifest.dependencies.some((item) => typeof item !== 'string'))
|
|
66
|
+
) {
|
|
67
|
+
return false
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return true
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function collect(value, result) {
|
|
74
|
+
if (Array.isArray(value)) {
|
|
75
|
+
for (const item of value) collect(item, result)
|
|
76
|
+
return
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (isPlugin(value)) {
|
|
80
|
+
result.push(value)
|
|
81
|
+
return
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (
|
|
85
|
+
typeof value === 'object' &&
|
|
86
|
+
value !== null &&
|
|
87
|
+
'plugins' in value &&
|
|
88
|
+
Array.isArray(value.plugins)
|
|
89
|
+
) {
|
|
90
|
+
for (const item of value.plugins) collect(item, result)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const files = await filesIn(directory).catch((error) => {
|
|
95
|
+
console.error(error instanceof Error ? error.message : String(error))
|
|
96
|
+
process.exit(3)
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
if (files.length === 0) {
|
|
100
|
+
console.error('插件 dist 目录中没有可加载的文件')
|
|
101
|
+
process.exit(4)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const found = []
|
|
105
|
+
const invalid = []
|
|
106
|
+
|
|
107
|
+
for (const file of files) {
|
|
108
|
+
let imported
|
|
109
|
+
|
|
110
|
+
try {
|
|
111
|
+
imported = await import(pathToFileURL(file).href)
|
|
112
|
+
} catch (error) {
|
|
113
|
+
invalid.push(
|
|
114
|
+
\`failed to import \${file}: \${error instanceof Error ? error.message : String(error)}\`
|
|
115
|
+
)
|
|
116
|
+
continue
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (typeof imported !== 'object' || imported === null) continue
|
|
120
|
+
|
|
121
|
+
for (const candidate of [imported.default, imported.plugin, imported.plugins]) {
|
|
122
|
+
collect(candidate, found)
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const unique = found.filter((plugin, index) => found.indexOf(plugin) === index)
|
|
127
|
+
|
|
128
|
+
if (unique.length === 0) {
|
|
129
|
+
console.error(
|
|
130
|
+
invalid[0] ??
|
|
131
|
+
'package does not export a JsBot plugin (default / plugin / plugins)'
|
|
132
|
+
)
|
|
133
|
+
process.exit(5)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
console.log(
|
|
137
|
+
'__JSBOT_PLUGIN__' +
|
|
138
|
+
JSON.stringify(
|
|
139
|
+
unique.map((plugin) => ({
|
|
140
|
+
id: plugin.manifest.id,
|
|
141
|
+
version:
|
|
142
|
+
typeof plugin.manifest.version === 'string'
|
|
143
|
+
? plugin.manifest.version
|
|
144
|
+
: '0.0.0',
|
|
145
|
+
dependencies: Array.isArray(plugin.manifest.dependencies)
|
|
146
|
+
? plugin.manifest.dependencies.filter(
|
|
147
|
+
(item) => typeof item === 'string'
|
|
148
|
+
)
|
|
149
|
+
: [],
|
|
150
|
+
}))
|
|
151
|
+
)
|
|
152
|
+
)
|
|
153
|
+
`;
|
|
154
|
+
//# sourceMappingURL=validate-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-script.js","sourceRoot":"","sources":["../../../../src/core/plugin/install/validate-script.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAA;AAElD,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuJ9B,CAAA"}
|
|
@@ -1,29 +1,4 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export interface InstalledPackageRecord {
|
|
5
|
-
spec: string;
|
|
6
|
-
version: string;
|
|
7
|
-
pluginIds: string[];
|
|
8
|
-
dependencies: Record<string, string[]>;
|
|
9
|
-
installedAt: string;
|
|
10
|
-
/** Directory name under the plugins root. */
|
|
11
|
-
dir: string;
|
|
12
|
-
}
|
|
13
|
-
export interface InstallState {
|
|
14
|
-
version: 2;
|
|
15
|
-
packages: Record<string, InstalledPackageRecord>;
|
|
16
|
-
}
|
|
17
|
-
export declare class InstallStateError extends Error {
|
|
18
|
-
constructor(message: string, options?: ErrorOptions);
|
|
19
|
-
}
|
|
20
|
-
export declare function packageDirectoryName(name: string): string;
|
|
21
|
-
export declare function readJsonFile(path: string): Promise<unknown>;
|
|
22
|
-
export declare function readPackageVersion(directory: string): Promise<string | undefined>;
|
|
23
|
-
export declare function readInstallState(dir: string): Promise<InstallState>;
|
|
24
|
-
export declare function writeInstallState(dir: string, state: InstallState): Promise<void>;
|
|
25
|
-
export declare function corePackageRoot(): string;
|
|
26
|
-
export declare function ensureCoreLink(dir: string): Promise<void>;
|
|
27
|
-
export declare function pathExists(path: string): Promise<boolean>;
|
|
28
|
-
export declare function ensureInstallRoot(root: string): Promise<void>;
|
|
1
|
+
export { CORE_PACKAGE_NAME, corePackageRoot, ensureCoreLink, ensureInstallRoot, packageDirectoryName, pathExists, } from './install/paths.js';
|
|
2
|
+
export { INSTALL_STATE_FILE, InstallStateError, readInstallState, readJsonFile, readPackageVersion, writeInstallState, type InstalledPackageRecord, type InstallState, } from './install/state.js';
|
|
3
|
+
export { VALIDATE_SCRIPT_FILE } from './install/validate-script.js';
|
|
29
4
|
//# sourceMappingURL=install-dir.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-dir.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/install-dir.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install-dir.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/install-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,GACb,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACH,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,GACpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA"}
|