@jsbot-tellus/core 2.4.0 → 2.5.1

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.
Files changed (183) hide show
  1. package/README.md +8 -5
  2. package/dist/app/cli.d.ts +10 -0
  3. package/dist/app/cli.d.ts.map +1 -0
  4. package/dist/app/cli.js +37 -0
  5. package/dist/app/cli.js.map +1 -0
  6. package/dist/app/runtime.d.ts +121 -0
  7. package/dist/app/runtime.d.ts.map +1 -0
  8. package/dist/app/runtime.js +296 -0
  9. package/dist/app/runtime.js.map +1 -0
  10. package/dist/app.js +63 -273
  11. package/dist/app.js.map +1 -1
  12. package/dist/core/dispatch/command.d.ts.map +1 -1
  13. package/dist/core/dispatch/command.js +5 -1
  14. package/dist/core/dispatch/command.js.map +1 -1
  15. package/dist/core/dispatch/router.d.ts.map +1 -1
  16. package/dist/core/dispatch/router.js +1 -1
  17. package/dist/core/dispatch/router.js.map +1 -1
  18. package/dist/core/plugin/command-params.d.ts +3 -36
  19. package/dist/core/plugin/command-params.d.ts.map +1 -1
  20. package/dist/core/plugin/command-params.js +2 -461
  21. package/dist/core/plugin/command-params.js.map +1 -1
  22. package/dist/core/plugin/install/paths.d.ts +7 -0
  23. package/dist/core/plugin/install/paths.d.ts.map +1 -0
  24. package/dist/core/plugin/install/paths.js +49 -0
  25. package/dist/core/plugin/install/paths.js.map +1 -0
  26. package/dist/core/plugin/install/state.d.ts +23 -0
  27. package/dist/core/plugin/install/state.d.ts.map +1 -0
  28. package/dist/core/plugin/install/state.js +129 -0
  29. package/dist/core/plugin/install/state.js.map +1 -0
  30. package/dist/core/plugin/install/validate-script.d.ts +3 -0
  31. package/dist/core/plugin/install/validate-script.d.ts.map +1 -0
  32. package/dist/core/plugin/install/validate-script.js +154 -0
  33. package/dist/core/plugin/install/validate-script.js.map +1 -0
  34. package/dist/core/plugin/install-dir.d.ts +3 -28
  35. package/dist/core/plugin/install-dir.d.ts.map +1 -1
  36. package/dist/core/plugin/install-dir.js +3 -326
  37. package/dist/core/plugin/install-dir.js.map +1 -1
  38. package/dist/core/plugin/installer/checks.d.ts +6 -0
  39. package/dist/core/plugin/installer/checks.d.ts.map +1 -0
  40. package/dist/core/plugin/installer/checks.js +99 -0
  41. package/dist/core/plugin/installer/checks.js.map +1 -0
  42. package/dist/core/plugin/installer/support.d.ts +37 -0
  43. package/dist/core/plugin/installer/support.d.ts.map +1 -0
  44. package/dist/core/plugin/installer/support.js +67 -0
  45. package/dist/core/plugin/installer/support.js.map +1 -0
  46. package/dist/core/plugin/installer/warnings.d.ts +5 -0
  47. package/dist/core/plugin/installer/warnings.d.ts.map +1 -0
  48. package/dist/core/plugin/installer/warnings.js +28 -0
  49. package/dist/core/plugin/installer/warnings.js.map +1 -0
  50. package/dist/core/plugin/installer.d.ts +4 -30
  51. package/dist/core/plugin/installer.d.ts.map +1 -1
  52. package/dist/core/plugin/installer.js +21 -202
  53. package/dist/core/plugin/installer.js.map +1 -1
  54. package/dist/core/plugin/params/compile.d.ts +3 -0
  55. package/dist/core/plugin/params/compile.d.ts.map +1 -0
  56. package/dist/core/plugin/params/compile.js +23 -0
  57. package/dist/core/plugin/params/compile.js.map +1 -0
  58. package/dist/core/plugin/params/declaration.d.ts +9 -0
  59. package/dist/core/plugin/params/declaration.d.ts.map +1 -0
  60. package/dist/core/plugin/params/declaration.js +223 -0
  61. package/dist/core/plugin/params/declaration.js.map +1 -0
  62. package/dist/core/plugin/params/input.d.ts +5 -0
  63. package/dist/core/plugin/params/input.d.ts.map +1 -0
  64. package/dist/core/plugin/params/input.js +181 -0
  65. package/dist/core/plugin/params/input.js.map +1 -0
  66. package/dist/core/plugin/params/reply.d.ts +3 -0
  67. package/dist/core/plugin/params/reply.d.ts.map +1 -0
  68. package/dist/core/plugin/params/reply.js +49 -0
  69. package/dist/core/plugin/params/reply.js.map +1 -0
  70. package/dist/core/plugin/params/type-level.d.ts +23 -0
  71. package/dist/core/plugin/params/type-level.d.ts.map +1 -0
  72. package/dist/core/plugin/params/type-level.js +2 -0
  73. package/dist/core/plugin/params/type-level.js.map +1 -0
  74. package/dist/core/plugin/params/types.d.ts +28 -0
  75. package/dist/core/plugin/params/types.d.ts.map +1 -0
  76. package/dist/core/plugin/params/types.js +12 -0
  77. package/dist/core/plugin/params/types.js.map +1 -0
  78. package/dist/core/plugin/params/values.d.ts +6 -0
  79. package/dist/core/plugin/params/values.d.ts.map +1 -0
  80. package/dist/core/plugin/params/values.js +108 -0
  81. package/dist/core/plugin/params/values.js.map +1 -0
  82. package/dist/core/web/api.d.ts +2 -14
  83. package/dist/core/web/api.d.ts.map +1 -1
  84. package/dist/core/web/api.js +8 -500
  85. package/dist/core/web/api.js.map +1 -1
  86. package/dist/core/web/routes/actions.d.ts +4 -0
  87. package/dist/core/web/routes/actions.d.ts.map +1 -0
  88. package/dist/core/web/routes/actions.js +33 -0
  89. package/dist/core/web/routes/actions.js.map +1 -0
  90. package/dist/core/web/routes/config.d.ts +5 -0
  91. package/dist/core/web/routes/config.d.ts.map +1 -0
  92. package/dist/core/web/routes/config.js +30 -0
  93. package/dist/core/web/routes/config.js.map +1 -0
  94. package/dist/core/web/routes/kv.d.ts +6 -0
  95. package/dist/core/web/routes/kv.d.ts.map +1 -0
  96. package/dist/core/web/routes/kv.js +80 -0
  97. package/dist/core/web/routes/kv.js.map +1 -0
  98. package/dist/core/web/routes/plugins.d.ts +5 -0
  99. package/dist/core/web/routes/plugins.d.ts.map +1 -0
  100. package/dist/core/web/routes/plugins.js +98 -0
  101. package/dist/core/web/routes/plugins.js.map +1 -0
  102. package/dist/core/web/routes/sessions.d.ts +8 -0
  103. package/dist/core/web/routes/sessions.d.ts.map +1 -0
  104. package/dist/core/web/routes/sessions.js +130 -0
  105. package/dist/core/web/routes/sessions.js.map +1 -0
  106. package/dist/core/web/routes/shared.d.ts +18 -0
  107. package/dist/core/web/routes/shared.d.ts.map +1 -0
  108. package/dist/core/web/routes/shared.js +19 -0
  109. package/dist/core/web/routes/shared.js.map +1 -0
  110. package/dist/core/web/routes/status.d.ts +6 -0
  111. package/dist/core/web/routes/status.d.ts.map +1 -0
  112. package/dist/core/web/routes/status.js +132 -0
  113. package/dist/core/web/routes/status.js.map +1 -0
  114. package/dist/core/web/server/auth.d.ts +17 -0
  115. package/dist/core/web/server/auth.d.ts.map +1 -0
  116. package/dist/core/web/server/auth.js +68 -0
  117. package/dist/core/web/server/auth.js.map +1 -0
  118. package/dist/core/web/server/csp.d.ts +11 -0
  119. package/dist/core/web/server/csp.d.ts.map +1 -0
  120. package/dist/core/web/server/csp.js +31 -0
  121. package/dist/core/web/server/csp.js.map +1 -0
  122. package/dist/core/web/server/request.d.ts +6 -0
  123. package/dist/core/web/server/request.d.ts.map +1 -0
  124. package/dist/core/web/server/request.js +33 -0
  125. package/dist/core/web/server/request.js.map +1 -0
  126. package/dist/core/web/server/security.d.ts +4 -0
  127. package/dist/core/web/server/security.d.ts.map +1 -0
  128. package/dist/core/web/server/security.js +12 -0
  129. package/dist/core/web/server/security.js.map +1 -0
  130. package/dist/core/web/server/sse.d.ts +18 -0
  131. package/dist/core/web/server/sse.d.ts.map +1 -0
  132. package/dist/core/web/server/sse.js +49 -0
  133. package/dist/core/web/server/sse.js.map +1 -0
  134. package/dist/core/web/server/static.d.ts +16 -0
  135. package/dist/core/web/server/static.d.ts.map +1 -0
  136. package/dist/core/web/server/static.js +80 -0
  137. package/dist/core/web/server/static.js.map +1 -0
  138. package/dist/core/web/server.d.ts +0 -7
  139. package/dist/core/web/server.d.ts.map +1 -1
  140. package/dist/core/web/server.js +41 -263
  141. package/dist/core/web/server.js.map +1 -1
  142. package/docs/architecture.md +28 -11
  143. package/docs/configuration.md +1 -1
  144. package/docs/migration.md +2 -2
  145. package/docs/plugin-api.md +3 -1
  146. package/docs/plugin-development.md +1 -1
  147. package/package.json +19 -17
  148. package/src/app/cli.ts +47 -0
  149. package/src/app/runtime.ts +522 -0
  150. package/src/app.ts +87 -395
  151. package/src/core/dispatch/command.ts +7 -1
  152. package/src/core/dispatch/router.ts +2 -1
  153. package/src/core/plugin/command-params.ts +8 -713
  154. package/src/core/plugin/install/paths.ts +72 -0
  155. package/src/core/plugin/install/state.ts +196 -0
  156. package/src/core/plugin/install/validate-script.ts +154 -0
  157. package/src/core/plugin/install-dir.ts +19 -427
  158. package/src/core/plugin/installer/checks.ts +137 -0
  159. package/src/core/plugin/installer/support.ts +120 -0
  160. package/src/core/plugin/installer/warnings.ts +52 -0
  161. package/src/core/plugin/installer.ts +52 -301
  162. package/src/core/plugin/params/compile.ts +41 -0
  163. package/src/core/plugin/params/declaration.ts +286 -0
  164. package/src/core/plugin/params/input.ts +254 -0
  165. package/src/core/plugin/params/reply.ts +59 -0
  166. package/src/core/plugin/params/type-level.ts +71 -0
  167. package/src/core/plugin/params/types.ts +49 -0
  168. package/src/core/plugin/params/values.ts +146 -0
  169. package/src/core/web/api.ts +33 -759
  170. package/src/core/web/routes/actions.ts +43 -0
  171. package/src/core/web/routes/config.ts +42 -0
  172. package/src/core/web/routes/kv.ts +122 -0
  173. package/src/core/web/routes/plugins.ts +151 -0
  174. package/src/core/web/routes/sessions.ts +188 -0
  175. package/src/core/web/routes/shared.ts +42 -0
  176. package/src/core/web/routes/status.ts +191 -0
  177. package/src/core/web/server/auth.ts +126 -0
  178. package/src/core/web/server/csp.ts +33 -0
  179. package/src/core/web/server/request.ts +38 -0
  180. package/src/core/web/server/security.ts +14 -0
  181. package/src/core/web/server/sse.ts +74 -0
  182. package/src/core/web/server/static.ts +112 -0
  183. package/src/core/web/server.ts +41 -383
@@ -1 +1 @@
1
- {"version":3,"file":"install-dir.js","sourceRoot":"","sources":["../../../src/core/plugin/install-dir.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-dir.js","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,GAGpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { InstalledPackageRecord, InstallState } from '../install-dir.js';
2
+ import type { ValidatedPlugin } from '../install-validate.js';
3
+ export declare function checkPlugins(packageName: string, plugins: ValidatedPlugin[], state: InstallState, reservedIds: () => ReadonlySet<string>): void;
4
+ export declare function resolveTarget(target: string, state: InstallState): string;
5
+ export declare function assertTargetAvailable(state: InstallState, packageName: string, directory: string, target: string, previous: InstalledPackageRecord | undefined): Promise<void>;
6
+ //# sourceMappingURL=checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../../src/core/plugin/installer/checks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAG7D,wBAAgB,YAAY,CACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,eAAe,EAAE,EAC1B,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,WAAW,CAAC,MAAM,CAAC,GACvC,IAAI,CAqFN;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAczE;AAED,wBAAsB,qBAAqB,CACvC,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,sBAAsB,GAAG,SAAS,GAC7C,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -0,0 +1,99 @@
1
+ import { pathExists } from '../install-dir.js';
2
+ import { ID_PATTERN, InstallerError } from './support.js';
3
+ export function checkPlugins(packageName, plugins, state, reservedIds) {
4
+ const ownIds = new Set(state.packages[packageName]?.pluginIds ?? []);
5
+ const ids = new Set();
6
+ const taken = new Set();
7
+ for (const id of reservedIds()) {
8
+ if (!ownIds.has(id))
9
+ taken.add(id);
10
+ }
11
+ for (const [name, record] of Object.entries(state.packages)) {
12
+ if (name === packageName)
13
+ continue;
14
+ for (const id of record.pluginIds)
15
+ taken.add(id);
16
+ }
17
+ for (const plugin of plugins) {
18
+ if (!ID_PATTERN.test(plugin.id)) {
19
+ throw new InstallerError(`插件 id 无效: ${plugin.id}`);
20
+ }
21
+ if (ids.has(plugin.id)) {
22
+ throw new InstallerError(`插件 id 重复: ${plugin.id}`);
23
+ }
24
+ if (taken.has(plugin.id)) {
25
+ throw new InstallerError(`插件 id 已被占用: ${plugin.id}(内置插件或其他已安装包)`);
26
+ }
27
+ ids.add(plugin.id);
28
+ }
29
+ const graph = new Map();
30
+ for (const [name, record] of Object.entries(state.packages)) {
31
+ if (name === packageName)
32
+ continue;
33
+ for (const id of record.pluginIds) {
34
+ graph.set(id, record.dependencies[id] ?? []);
35
+ }
36
+ }
37
+ for (const plugin of plugins) {
38
+ graph.set(plugin.id, plugin.dependencies);
39
+ }
40
+ const reserved = reservedIds();
41
+ const available = new Set(graph.keys());
42
+ for (const id of reserved) {
43
+ if (!ownIds.has(id))
44
+ available.add(id);
45
+ }
46
+ for (const [id, dependencies] of graph) {
47
+ for (const dependency of dependencies) {
48
+ if (!available.has(dependency)) {
49
+ throw new InstallerError(`插件 ${id} 依赖未加载的插件: ${dependency}`);
50
+ }
51
+ }
52
+ }
53
+ const visiting = new Set();
54
+ const visited = new Set();
55
+ const visit = (id) => {
56
+ if (visited.has(id))
57
+ return;
58
+ if (visiting.has(id)) {
59
+ throw new InstallerError(`插件依赖存在循环: ${id}`);
60
+ }
61
+ visiting.add(id);
62
+ for (const dependency of graph.get(id) ?? []) {
63
+ if (graph.has(dependency))
64
+ visit(dependency);
65
+ }
66
+ visiting.delete(id);
67
+ visited.add(id);
68
+ };
69
+ for (const id of graph.keys())
70
+ visit(id);
71
+ }
72
+ export function resolveTarget(target, state) {
73
+ const value = target.trim();
74
+ if (value.length === 0) {
75
+ throw new InstallerError('请提供包名或插件 id');
76
+ }
77
+ if (state.packages[value] !== undefined)
78
+ return value;
79
+ for (const [name, record] of Object.entries(state.packages)) {
80
+ if (record.pluginIds.includes(value))
81
+ return name;
82
+ }
83
+ throw new InstallerError(`未找到已安装的插件包: ${value}`);
84
+ }
85
+ export async function assertTargetAvailable(state, packageName, directory, target, previous) {
86
+ for (const [name, record] of Object.entries(state.packages)) {
87
+ if (name === packageName)
88
+ continue;
89
+ if (record.dir !== directory)
90
+ continue;
91
+ throw new InstallerError(`插件目录已被其它已安装包使用: ${record.dir}(${name})`);
92
+ }
93
+ if (previous !== undefined)
94
+ return;
95
+ if (await pathExists(target)) {
96
+ throw new InstallerError(`安装目录已存在且不是由安装器管理: ${target}。请先移除该本地插件或为其改名。`);
97
+ }
98
+ }
99
+ //# sourceMappingURL=checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../../src/core/plugin/installer/checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { InstallerConfig } from '../../config/schema.js';
2
+ import type { Logger } from '../../logging/logger.js';
3
+ import type { PackageValidator } from '../install-validate.js';
4
+ import type { NpmRunner } from '../npm-runner.js';
5
+ import { type PackageSpec } from '../spec.js';
6
+ import type { PluginInstaller } from '../types.js';
7
+ export declare class InstallerError extends Error {
8
+ constructor(message: string, options?: ErrorOptions);
9
+ }
10
+ export interface InstallerOptions {
11
+ /** Plugins root. Installed packages are placed in subdirectories here. */
12
+ dir: string;
13
+ config: InstallerConfig;
14
+ logger: Logger;
15
+ runner?: NpmRunner | undefined;
16
+ validate?: PackageValidator | undefined;
17
+ reservedIds?: (() => ReadonlySet<string>) | undefined;
18
+ configuredPluginIds?: (() => ReadonlySet<string>) | undefined;
19
+ now?: (() => Date) | undefined;
20
+ }
21
+ export declare const ID_PATTERN: RegExp;
22
+ export declare const NPM_FLAGS: string[];
23
+ export declare const STAGING_MANIFEST: {
24
+ name: string;
25
+ private: boolean;
26
+ version: string;
27
+ type: string;
28
+ };
29
+ export declare function messageOf(error: unknown): string;
30
+ export declare function asInstallerError(error: unknown): InstallerError;
31
+ export declare function installDirectoryName(packageName: string, pluginIds: readonly string[]): string;
32
+ export declare function parseInstallerSpec(spec: string, allowedPackages: string[]): PackageSpec;
33
+ export declare function temporaryPath(dir: string, kind: 'staging' | 'backup'): string;
34
+ export declare function assertInstallerEnabled(enabled: boolean): void;
35
+ export declare function createTaskSerializer(): <T>(task: () => Promise<T>) => Promise<T>;
36
+ export declare function createDisabledInstaller(): PluginInstaller;
37
+ //# sourceMappingURL=support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../../../src/core/plugin/installer/support.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAIH,KAAK,WAAW,EACnB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,qBAAa,cAAe,SAAQ,KAAK;IACrC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAGlD;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC7B,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IAC9B,QAAQ,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IACvC,WAAW,CAAC,EAAE,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAA;IACrD,mBAAmB,CAAC,EAAE,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAA;IAC7D,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;CACjC;AAED,eAAO,MAAM,UAAU,QAA4B,CAAA;AACnD,eAAO,MAAM,SAAS,UAAkD,CAAA;AACxE,eAAO,MAAM,gBAAgB;IACzB,IAAI;IACJ,OAAO;IACP,OAAO;IACP,IAAI;CACP,CAAA;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEhD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAQ/D;AAED,wBAAgB,oBAAoB,CAChC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,SAAS,MAAM,EAAE,GAC7B,MAAM,CAIR;AAED,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,EAAE,GAC1B,WAAW,CAQb;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAE7E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAM7D;AAED,wBAAgB,oBAAoB,IAAI,CAAC,CAAC,EACtC,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KACrB,OAAO,CAAC,CAAC,CAAC,CAad;AAED,wBAAgB,uBAAuB,IAAI,eAAe,CAWzD"}
@@ -0,0 +1,67 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { join } from 'node:path';
3
+ import { packageDirectoryName } from '../install-dir.js';
4
+ import { isPackageAllowed, parsePackageSpec, PackageSpecError, } from '../spec.js';
5
+ export class InstallerError extends Error {
6
+ constructor(message, options) {
7
+ super(message, options);
8
+ this.name = 'InstallerError';
9
+ }
10
+ }
11
+ export const ID_PATTERN = /^[a-z0-9][a-z0-9._-]*$/i;
12
+ export const NPM_FLAGS = ['--no-audit', '--no-fund', '--loglevel=error'];
13
+ export const STAGING_MANIFEST = {
14
+ name: '@jsbot-tellus/plugin-staging',
15
+ private: true,
16
+ version: '0.0.0',
17
+ type: 'module',
18
+ };
19
+ export function messageOf(error) {
20
+ return error instanceof Error ? error.message : String(error);
21
+ }
22
+ export function asInstallerError(error) {
23
+ if (error instanceof InstallerError)
24
+ return error;
25
+ if (error instanceof PackageSpecError) {
26
+ return new InstallerError(error.message, { cause: error });
27
+ }
28
+ return new InstallerError(messageOf(error), { cause: error });
29
+ }
30
+ export function installDirectoryName(packageName, pluginIds) {
31
+ const only = pluginIds.length === 1 ? pluginIds[0] : undefined;
32
+ return only ?? packageDirectoryName(packageName);
33
+ }
34
+ export function parseInstallerSpec(spec, allowedPackages) {
35
+ const parsed = parsePackageSpec(spec);
36
+ if (!isPackageAllowed(parsed.name, allowedPackages)) {
37
+ throw new InstallerError(`包不在允许列表: ${parsed.name}`);
38
+ }
39
+ return parsed;
40
+ }
41
+ export function temporaryPath(dir, kind) {
42
+ return join(dir, `.${kind}-${randomUUID()}`);
43
+ }
44
+ export function assertInstallerEnabled(enabled) {
45
+ if (!enabled) {
46
+ throw new InstallerError('插件安装功能未启用(installer.enabled=false)');
47
+ }
48
+ }
49
+ export function createTaskSerializer() {
50
+ let tail = Promise.resolve();
51
+ return (task) => {
52
+ const run = tail.then(task, task);
53
+ tail = run.then(() => undefined, () => undefined);
54
+ return run;
55
+ };
56
+ }
57
+ export function createDisabledInstaller() {
58
+ const fail = () => Promise.reject(new InstallerError('插件安装功能未启用'));
59
+ return {
60
+ enabled: false,
61
+ list: () => Promise.resolve([]),
62
+ install: fail,
63
+ remove: fail,
64
+ update: fail,
65
+ };
66
+ }
67
+ //# sourceMappingURL=support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support.js","sourceRoot":"","sources":["../../../../src/core/plugin/installer/support.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { InstalledPackageRecord, InstallState } from '../install-dir.js';
2
+ export declare function configuredWarnings(pluginIds: readonly string[], configured: ReadonlySet<string>): string[];
3
+ export declare function removalWarnings(packageName: string, record: InstalledPackageRecord | undefined, state: InstallState, configured: ReadonlySet<string>): string[];
4
+ export declare function dependentWarnings(packageName: string, record: InstalledPackageRecord | undefined, state: InstallState): string[];
5
+ //# sourceMappingURL=warnings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warnings.d.ts","sourceRoot":"","sources":["../../../../src/core/plugin/installer/warnings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE7E,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,MAAM,EAAE,CAOV;AAED,wBAAgB,eAAe,CAC3B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,sBAAsB,GAAG,SAAS,EAC1C,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,MAAM,EAAE,CAKV;AAED,wBAAgB,iBAAiB,CAC7B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,sBAAsB,GAAG,SAAS,EAC1C,KAAK,EAAE,YAAY,GACpB,MAAM,EAAE,CAqBV"}
@@ -0,0 +1,28 @@
1
+ export function configuredWarnings(pluginIds, configured) {
2
+ return pluginIds
3
+ .filter((id) => configured.has(id))
4
+ .map((id) => `配置里的 plugins.${id} 仍然存在,重启前请删除,否则会因未知插件 ID 启动失败`);
5
+ }
6
+ export function removalWarnings(packageName, record, state, configured) {
7
+ return [
8
+ ...configuredWarnings(record?.pluginIds ?? [], configured),
9
+ ...dependentWarnings(packageName, record, state),
10
+ ];
11
+ }
12
+ export function dependentWarnings(packageName, record, state) {
13
+ const removedIds = new Set(record?.pluginIds ?? []);
14
+ const warnings = [];
15
+ for (const [name, other] of Object.entries(state.packages)) {
16
+ if (name === packageName)
17
+ continue;
18
+ for (const [pluginId, dependencies] of Object.entries(other.dependencies)) {
19
+ for (const dependency of dependencies) {
20
+ if (!removedIds.has(dependency))
21
+ continue;
22
+ warnings.push(`插件包 ${name} 的插件 ${pluginId} 依赖已卸载的插件 ${dependency}`);
23
+ }
24
+ }
25
+ }
26
+ return warnings;
27
+ }
28
+ //# sourceMappingURL=warnings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"warnings.js","sourceRoot":"","sources":["../../../../src/core/plugin/installer/warnings.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAC9B,SAA4B,EAC5B,UAA+B;IAE/B,OAAO,SAAS;SACX,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAClC,GAAG,CACA,CAAC,EAAE,EAAE,EAAE,CACH,gBAAgB,EAAE,+BAA+B,CACxD,CAAA;AACT,CAAC;AAED,MAAM,UAAU,eAAe,CAC3B,WAAmB,EACnB,MAA0C,EAC1C,KAAmB,EACnB,UAA+B;IAE/B,OAAO;QACH,GAAG,kBAAkB,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,EAAE,UAAU,CAAC;QAC1D,GAAG,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC;KACnD,CAAA;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC7B,WAAmB,EACnB,MAA0C,EAC1C,KAAmB;IAEnB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAA;IACnD,MAAM,QAAQ,GAAa,EAAE,CAAA;IAE7B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,IAAI,IAAI,KAAK,WAAW;YAAE,SAAQ;QAElC,KAAK,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CACjD,KAAK,CAAC,YAAY,CACrB,EAAE,CAAC;YACA,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;oBAAE,SAAQ;gBAEzC,QAAQ,CAAC,IAAI,CACT,OAAO,IAAI,QAAQ,QAAQ,aAAa,UAAU,EAAE,CACvD,CAAA;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAA;AACnB,CAAC"}
@@ -1,22 +1,7 @@
1
- import type { InstallerConfig } from '../config/schema.js';
2
- import type { Logger } from '../logging/logger.js';
3
- import { type PackageValidator } from './install-validate.js';
4
- import { type NpmRunner } from './npm-runner.js';
1
+ import { type InstallerOptions } from './installer/support.js';
5
2
  import type { InstalledPackageInfo, PluginInstallResult, PluginInstaller, PluginRemoveResult, PluginUpdateResult } from './types.js';
6
- export declare class InstallerError extends Error {
7
- constructor(message: string, options?: ErrorOptions);
8
- }
9
- export interface InstallerOptions {
10
- /** Plugins root. Installed packages are placed in subdirectories here. */
11
- dir: string;
12
- config: InstallerConfig;
13
- logger: Logger;
14
- runner?: NpmRunner | undefined;
15
- validate?: PackageValidator | undefined;
16
- reservedIds?: (() => ReadonlySet<string>) | undefined;
17
- configuredPluginIds?: (() => ReadonlySet<string>) | undefined;
18
- now?: (() => Date) | undefined;
19
- }
3
+ export { createDisabledInstaller, InstallerError } from './installer/support.js';
4
+ export type { InstallerOptions } from './installer/support.js';
20
5
  export declare class NpmPluginInstaller implements PluginInstaller {
21
6
  readonly enabled: boolean;
22
7
  private readonly dir;
@@ -27,7 +12,7 @@ export declare class NpmPluginInstaller implements PluginInstaller {
27
12
  private readonly reservedIds;
28
13
  private readonly configuredPluginIds;
29
14
  private readonly now;
30
- private tail;
15
+ private readonly serialize;
31
16
  constructor(options: InstallerOptions);
32
17
  list(): Promise<InstalledPackageInfo[]>;
33
18
  install(spec: string, signal?: AbortSignal | undefined): Promise<PluginInstallResult>;
@@ -36,16 +21,5 @@ export declare class NpmPluginInstaller implements PluginInstaller {
36
21
  } | undefined): Promise<PluginRemoveResult>;
37
22
  update(target?: string | undefined, signal?: AbortSignal | undefined): Promise<PluginUpdateResult>;
38
23
  private installSpec;
39
- private assertTargetAvailable;
40
- private checkPlugins;
41
- private resolveTarget;
42
- private removalWarnings;
43
- private configuredWarnings;
44
- private dependentWarnings;
45
- private parse;
46
- private temporaryPath;
47
- private assertEnabled;
48
- private serialize;
49
24
  }
50
- export declare function createDisabledInstaller(): PluginInstaller;
51
25
  //# sourceMappingURL=installer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/installer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAclD,OAAO,EAEH,KAAK,gBAAgB,EAExB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAO9D,OAAO,KAAK,EACR,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EACrB,MAAM,YAAY,CAAA;AAEnB,qBAAa,cAAe,SAAQ,KAAK;IACrC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAGlD;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC7B,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IAC9B,QAAQ,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAA;IACvC,WAAW,CAAC,EAAE,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAA;IACrD,mBAAmB,CAAC,EAAE,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAA;IAC7D,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;CACjC;AAkCD,qBAAa,kBAAmB,YAAW,eAAe;IACtD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IAEzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IACvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA2B;IAC/D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,IAAI,CAAsC;IAElD,YAAY,OAAO,EAAE,gBAAgB,EAWpC;IAEK,IAAI,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA2B5C;IAED,OAAO,CACH,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAS9B;IAED,MAAM,CACF,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,EAChC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,GACtD,OAAO,CAAC,kBAAkB,CAAC,CA4E7B;IAED,MAAM,CACF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,EAC3B,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,GACjC,OAAO,CAAC,kBAAkB,CAAC,CA8C7B;YAEa,WAAW;YAmLX,qBAAqB;IAyBnC,OAAO,CAAC,YAAY;IA2FpB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,SAAS;CAQpB;AAED,wBAAgB,uBAAuB,IAAI,eAAe,CAWzD"}
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/installer.ts"],"names":[],"mappings":"AAyBA,OAAO,EAWH,KAAK,gBAAgB,EACxB,MAAM,wBAAwB,CAAA;AAQ/B,OAAO,KAAK,EACR,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EACrB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAChF,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,qBAAa,kBAAmB,YAAW,eAAe;IACtD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IAEzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IACvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA2B;IAC/D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,YAAY,OAAO,EAAE,gBAAgB,EAWpC;IAEK,IAAI,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA2B5C;IAED,OAAO,CACH,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAS9B;IAED,MAAM,CACF,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,EAChC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,GAAG,SAAS,GACtD,OAAO,CAAC,kBAAkB,CAAC,CAiF7B;IAED,MAAM,CACF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,EAC3B,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAiD7B;YAEa,WAAW;CAmL5B"}