@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,37 +1,4 @@
1
- export type CommandParamType = 'string' | 'text' | 'number' | 'integer' | 'boolean' | 'at';
2
- export interface ParsedCommandParams {
3
- args: unknown[];
4
- ignored: string[];
5
- }
6
- export interface CompiledCommandParams {
7
- usage: string;
8
- parse(input: string): ParsedCommandParams;
9
- }
10
- export declare class CommandParamsError extends Error {
11
- readonly usage: string;
12
- constructor(message: string, usage: string);
13
- }
14
- export declare function compileCommandParams(declaration: string): CompiledCommandParams;
15
- type Whitespace = ' ' | '\n' | '\r' | '\t' | '\v' | '\f';
16
- type TrimLeft<Source extends string> = Source extends `${Whitespace}${infer Rest}` ? TrimLeft<Rest> : Source;
17
- type TrimRight<Source extends string> = Source extends `${infer Rest}${Whitespace}` ? TrimRight<Rest> : Source;
18
- type Trim<Source extends string> = TrimLeft<TrimRight<Source>>;
19
- type ParamValue<Type extends string> = Trim<Type> extends 'string' | 'text' ? string : Trim<Type> extends 'number' | 'integer' | 'at' ? number : Trim<Type> extends 'boolean' ? boolean : unknown;
20
- interface VariadicParam {
21
- readonly variadic: true;
22
- }
23
- type ParamType<Head extends string> = Head extends `${string}:${infer Type}` ? ParamValue<Type> : string;
24
- type ParamElement<Body extends string, Required extends boolean> = Trim<Body> extends `...${string}` ? VariadicParam : Trim<Body> extends `${infer Head}=${string}` ? ParamType<Head> : Required extends true ? ParamType<Body> : ParamType<Body> | undefined;
25
- type AppendParam<Acc extends unknown[], Element> = [Element] extends [
26
- VariadicParam
27
- ] ? [...Acc, ...string[]] : [...Acc, Element];
28
- type ParseCommandParams<Source extends string, Acc extends unknown[] = []> = Trim<Source> extends '' ? Acc : Trim<Source> extends `<${infer Body}>${infer Rest}` ? ParamElement<Body, true> extends VariadicParam ? any[] : ParseCommandParams<Rest, AppendParam<Acc, ParamElement<Body, true>>> : Trim<Source> extends `[${infer Body}]${infer Rest}` ? ParamElement<Body, false> extends VariadicParam ? Trim<Rest> extends '' ? [...Acc, ...string[]] : any[] : ParseCommandParams<Rest, AppendParam<Acc, ParamElement<Body, false>>> : any[];
29
- /**
30
- * 把 `params` 声明字符串推导成 handler 的位置参数 tuple。
31
- *
32
- * 非字面量声明(例如运行时拼接的 `string`)或无法解析的声明会回退为
33
- * `any[]`,以保证现有插件仍然可以编译。
34
- */
35
- export type CommandParamArgs<Declaration extends string> = string extends Declaration ? any[] : ParseCommandParams<Declaration>;
36
- export {};
1
+ export { CommandParamsError, type CommandParamType, type CompiledCommandParams, type ParsedCommandParams, } from './params/types.js';
2
+ export { compileCommandParams } from './params/compile.js';
3
+ export type { CommandParamArgs } from './params/type-level.js';
37
4
  //# sourceMappingURL=command-params.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-params.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/command-params.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-params.d.ts","sourceRoot":"","sources":["../../../src/core/plugin/command-params.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,GAC3B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA"}
@@ -1,462 +1,3 @@
1
- import { parseSegments } from '@snowluma/sdk';
2
- export class CommandParamsError extends Error {
3
- usage;
4
- constructor(message, usage) {
5
- super(message);
6
- this.name = 'CommandParamsError';
7
- this.usage = usage;
8
- }
9
- }
10
- const NAME_PATTERN = /^[\p{L}_][\p{L}\p{N}_-]*$/u;
11
- function declarationError(message) {
12
- return new Error(`参数声明错误:${message}`);
13
- }
14
- function parseType(value) {
15
- switch (value) {
16
- case 'string':
17
- case 'text':
18
- case 'number':
19
- case 'integer':
20
- case 'boolean':
21
- case 'at':
22
- return value;
23
- default:
24
- throw declarationError(`未知的参数类型 "${value}"`);
25
- }
26
- }
27
- function validateName(value) {
28
- const name = value.trim();
29
- if (!name) {
30
- throw declarationError('参数名不能为空');
31
- }
32
- if (!NAME_PATTERN.test(name)) {
33
- throw declarationError(`非法的参数名 "${name}"`);
34
- }
35
- return name;
36
- }
37
- function splitDeclaration(input) {
38
- const parts = [];
39
- let index = 0;
40
- while (index < input.length) {
41
- const char = input[index];
42
- if (char === undefined)
43
- break;
44
- if (/\s/.test(char)) {
45
- index += 1;
46
- continue;
47
- }
48
- if (char !== '<' && char !== '[') {
49
- throw declarationError(`无法识别的字符 "${char}"`);
50
- }
51
- const close = char === '<' ? '>' : ']';
52
- let end = index + 1;
53
- let quote = null;
54
- for (; end < input.length; end += 1) {
55
- const current = input[end];
56
- if (current === undefined)
57
- break;
58
- if (quote !== null) {
59
- if (current === '\\') {
60
- end += 1;
61
- continue;
62
- }
63
- if (current === quote) {
64
- quote = null;
65
- }
66
- continue;
67
- }
68
- if (current === '"' || current === "'") {
69
- quote = current;
70
- continue;
71
- }
72
- if (current === close)
73
- break;
74
- }
75
- if (end >= input.length || input[end] !== close) {
76
- throw declarationError(`参数 "${input.slice(index)}" 缺少 ${close}`);
77
- }
78
- parts.push(input.slice(index, end + 1));
79
- index = end + 1;
80
- }
81
- return parts;
82
- }
83
- function unquote(value) {
84
- const trimmed = value.trim();
85
- const quote = trimmed[0];
86
- if (quote !== '"' && quote !== "'") {
87
- return trimmed;
88
- }
89
- if (trimmed.length < 2 || trimmed[trimmed.length - 1] !== quote) {
90
- throw declarationError('默认值引号未闭合');
91
- }
92
- let result = '';
93
- for (let index = 1; index < trimmed.length - 1; index += 1) {
94
- const char = trimmed[index];
95
- if (char === undefined)
96
- break;
97
- if (char === '\\') {
98
- const next = trimmed[index + 1];
99
- if (next !== undefined) {
100
- result += next;
101
- index += 1;
102
- }
103
- continue;
104
- }
105
- result += char;
106
- }
107
- return result;
108
- }
109
- function parseBoolean(value) {
110
- const normalized = value.trim().toLowerCase();
111
- if (['true', '1', 'yes', 'y', 'on'].includes(normalized)) {
112
- return true;
113
- }
114
- if (['false', '0', 'no', 'n', 'off'].includes(normalized)) {
115
- return false;
116
- }
117
- return null;
118
- }
119
- function parseAt(value, name, usage) {
120
- const raw = value.trim();
121
- const segments = parseSegments(raw);
122
- const segment = segments[0];
123
- if (segments.length === 1 && segment?.type === 'at') {
124
- const qq = segment.data.qq;
125
- if (qq !== 'all') {
126
- const parsed = Number(qq);
127
- if (Number.isSafeInteger(parsed) && parsed > 0) {
128
- return parsed;
129
- }
130
- }
131
- }
132
- else if (/^\d+$/.test(raw)) {
133
- const parsed = Number(raw);
134
- if (Number.isSafeInteger(parsed) && parsed > 0) {
135
- return parsed;
136
- }
137
- }
138
- throw new CommandParamsError(`参数 ${name} 需要 @ 一个用户或填写 QQ 号`, usage);
139
- }
140
- function parseDefaultValue(type, raw, name) {
141
- const value = unquote(raw);
142
- switch (type) {
143
- case 'string':
144
- case 'text':
145
- return value;
146
- case 'number': {
147
- const number = value.trim() === '' ? Number.NaN : Number(value);
148
- if (!Number.isFinite(number)) {
149
- throw declarationError(`参数 ${name} 的默认值不是数字`);
150
- }
151
- return number;
152
- }
153
- case 'integer': {
154
- const number = value.trim() === '' ? Number.NaN : Number(value);
155
- if (!Number.isInteger(number)) {
156
- throw declarationError(`参数 ${name} 的默认值不是整数`);
157
- }
158
- return number;
159
- }
160
- case 'boolean': {
161
- const boolean = parseBoolean(value);
162
- if (boolean === null) {
163
- throw declarationError(`参数 ${name} 的默认值不是布尔值`);
164
- }
165
- return boolean;
166
- }
167
- case 'at':
168
- throw declarationError(`参数 ${name} 不支持默认值`);
169
- }
170
- }
171
- function parseToken(token) {
172
- const open = token[0];
173
- const close = token[token.length - 1];
174
- if ((open !== '<' && open !== '[') ||
175
- (close !== '>' && close !== ']') ||
176
- (open === '<') !== (close === '>')) {
177
- throw declarationError(`非法的参数声明 "${token}"`);
178
- }
179
- const required = open === '<';
180
- const inner = token.slice(1, -1).trim();
181
- if (!inner) {
182
- throw declarationError('参数名不能为空');
183
- }
184
- if (inner.startsWith('...')) {
185
- if (required) {
186
- throw declarationError('变长参数必须使用 [ ]');
187
- }
188
- const name = validateName(inner.slice(3));
189
- return {
190
- name,
191
- type: 'string',
192
- required: false,
193
- rest: true,
194
- hasDefault: false,
195
- };
196
- }
197
- if (inner.includes('...')) {
198
- throw declarationError(`非法的参数声明 "${token}"`);
199
- }
200
- const equals = inner.indexOf('=');
201
- const head = equals >= 0 ? inner.slice(0, equals).trim() : inner.trim();
202
- const defaultRaw = equals >= 0 ? inner.slice(equals + 1).trim() : undefined;
203
- const colon = head.indexOf(':');
204
- const name = validateName(colon >= 0 ? head.slice(0, colon) : head);
205
- const type = parseType(colon >= 0 ? head.slice(colon + 1).trim() : 'string');
206
- if (required && defaultRaw !== undefined) {
207
- throw declarationError(`必填参数不能有默认值:${token}`);
208
- }
209
- if (defaultRaw !== undefined) {
210
- return {
211
- name,
212
- type,
213
- required,
214
- rest: false,
215
- hasDefault: true,
216
- defaultValue: parseDefaultValue(type, defaultRaw, name),
217
- };
218
- }
219
- return {
220
- name,
221
- type,
222
- required,
223
- rest: false,
224
- hasDefault: false,
225
- };
226
- }
227
- function validateSpecs(specs) {
228
- const names = new Set();
229
- let seenOptional = false;
230
- let seenRest = false;
231
- let seenText = false;
232
- for (let index = 0; index < specs.length; index += 1) {
233
- const spec = specs[index];
234
- if (!spec)
235
- continue;
236
- if (names.has(spec.name)) {
237
- throw declarationError(`参数名重复 "${spec.name}"`);
238
- }
239
- names.add(spec.name);
240
- if (seenRest) {
241
- throw declarationError('变长参数后面不能再有参数');
242
- }
243
- if (seenText) {
244
- throw declarationError('文本参数后面不能再有参数');
245
- }
246
- if (spec.rest) {
247
- if (index !== specs.length - 1) {
248
- throw declarationError('变长参数必须放在最后');
249
- }
250
- seenRest = true;
251
- continue;
252
- }
253
- if (spec.type === 'text') {
254
- if (index !== specs.length - 1) {
255
- throw declarationError('文本参数必须放在最后');
256
- }
257
- seenText = true;
258
- }
259
- if (spec.required) {
260
- if (seenOptional) {
261
- throw declarationError('必填参数不能出现在可选参数后面');
262
- }
263
- }
264
- else {
265
- seenOptional = true;
266
- }
267
- }
268
- }
269
- function usageOf(specs) {
270
- return specs
271
- .map((spec) => {
272
- if (spec.rest) {
273
- return `[...${spec.name}]`;
274
- }
275
- const name = spec.type === 'text' ? `${spec.name}...` : spec.name;
276
- return spec.required ? `<${name}>` : `[${name}]`;
277
- })
278
- .join(' ');
279
- }
280
- function tokenizeInput(input, usage) {
281
- const tokens = [];
282
- let index = 0;
283
- while (index < input.length) {
284
- const char = input[index];
285
- if (char === undefined)
286
- break;
287
- if (/\s/.test(char)) {
288
- index += 1;
289
- continue;
290
- }
291
- const start = index;
292
- let value = '';
293
- let quote = null;
294
- while (index < input.length) {
295
- const current = input[index];
296
- if (current === undefined)
297
- break;
298
- if (quote !== null) {
299
- if (current === '\\') {
300
- const next = input[index + 1];
301
- if (next !== undefined) {
302
- value += next;
303
- index += 2;
304
- continue;
305
- }
306
- value += current;
307
- index += 1;
308
- continue;
309
- }
310
- if (current === quote) {
311
- quote = null;
312
- index += 1;
313
- continue;
314
- }
315
- value += current;
316
- index += 1;
317
- continue;
318
- }
319
- if (/\s/.test(current))
320
- break;
321
- if (current === '[' && input.startsWith('[CQ:', index)) {
322
- const close = input.indexOf(']', index + 4);
323
- if (close >= 0) {
324
- value += input.slice(index, close + 1);
325
- index = close + 1;
326
- continue;
327
- }
328
- }
329
- if (current === '"' || current === "'") {
330
- quote = current;
331
- index += 1;
332
- continue;
333
- }
334
- if (current === '\\') {
335
- const next = input[index + 1];
336
- if (next !== undefined) {
337
- value += next;
338
- index += 2;
339
- continue;
340
- }
341
- value += current;
342
- index += 1;
343
- continue;
344
- }
345
- value += current;
346
- index += 1;
347
- }
348
- if (quote !== null) {
349
- throw new CommandParamsError('参数引号未闭合', usage);
350
- }
351
- tokens.push({ value, start });
352
- }
353
- return tokens;
354
- }
355
- function parseValue(spec, raw, usage) {
356
- switch (spec.type) {
357
- case 'string':
358
- case 'text':
359
- return raw;
360
- case 'number': {
361
- const value = raw.trim() === '' ? Number.NaN : Number(raw);
362
- if (!Number.isFinite(value)) {
363
- throw new CommandParamsError(`参数 ${spec.name} 需要是数字`, usage);
364
- }
365
- return value;
366
- }
367
- case 'integer': {
368
- const value = raw.trim() === '' ? Number.NaN : Number(raw);
369
- if (!Number.isInteger(value)) {
370
- throw new CommandParamsError(`参数 ${spec.name} 需要是整数`, usage);
371
- }
372
- return value;
373
- }
374
- case 'boolean': {
375
- const value = parseBoolean(raw);
376
- if (value === null) {
377
- throw new CommandParamsError(`参数 ${spec.name} 需要是布尔值`, usage);
378
- }
379
- return value;
380
- }
381
- case 'at':
382
- return parseAt(raw, spec.name, usage);
383
- }
384
- }
385
- function parseInput(specs, input, usage) {
386
- const tokens = tokenizeInput(input, usage);
387
- const args = [];
388
- let index = 0;
389
- for (const spec of specs) {
390
- if (spec.rest) {
391
- for (let tokenIndex = index; tokenIndex < tokens.length; tokenIndex += 1) {
392
- const token = tokens[tokenIndex];
393
- if (token) {
394
- args.push(token.value);
395
- }
396
- }
397
- index = tokens.length;
398
- continue;
399
- }
400
- if (spec.type === 'text') {
401
- const token = tokens[index];
402
- if (!token) {
403
- if (spec.hasDefault) {
404
- args.push(spec.defaultValue);
405
- }
406
- else if (spec.required) {
407
- throw new CommandParamsError(`缺少参数:${spec.name}`, usage);
408
- }
409
- else {
410
- args.push(undefined);
411
- }
412
- continue;
413
- }
414
- const remaining = tokens.length - index;
415
- const value = remaining === 1 ? token.value : input.slice(token.start).trim();
416
- args.push(value);
417
- index = tokens.length;
418
- continue;
419
- }
420
- const token = tokens[index];
421
- if (!token) {
422
- if (spec.hasDefault) {
423
- args.push(spec.defaultValue);
424
- }
425
- else if (spec.required) {
426
- throw new CommandParamsError(`缺少参数:${spec.name}`, usage);
427
- }
428
- else {
429
- args.push(undefined);
430
- }
431
- continue;
432
- }
433
- index += 1;
434
- args.push(parseValue(spec, token.value, usage));
435
- }
436
- while (args.length > 0 && args[args.length - 1] === undefined) {
437
- args.pop();
438
- }
439
- const ignored = index < tokens.length
440
- ? tokens.slice(index).map((token) => token.value)
441
- : [];
442
- return { args, ignored };
443
- }
444
- export function compileCommandParams(declaration) {
445
- const trimmed = declaration.trim();
446
- if (!trimmed) {
447
- throw declarationError('参数声明不能为空');
448
- }
449
- const specs = splitDeclaration(trimmed).map(parseToken);
450
- if (specs.length === 0) {
451
- throw declarationError('参数声明不能为空');
452
- }
453
- validateSpecs(specs);
454
- const usage = usageOf(specs);
455
- return {
456
- usage,
457
- parse(input) {
458
- return parseInput(specs, input, usage);
459
- },
460
- };
461
- }
1
+ export { CommandParamsError, } from './params/types.js';
2
+ export { compileCommandParams } from './params/compile.js';
462
3
  //# sourceMappingURL=command-params.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-params.js","sourceRoot":"","sources":["../../../src/core/plugin/command-params.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-params.js","sourceRoot":"","sources":["../../../src/core/plugin/command-params.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,kBAAkB,GAIrB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,7 @@
1
+ export declare const CORE_PACKAGE_NAME = "@jsbot-tellus/core";
2
+ export declare function packageDirectoryName(name: string): string;
3
+ export declare function corePackageRoot(): string;
4
+ export declare function ensureCoreLink(dir: string): Promise<void>;
5
+ export declare function pathExists(path: string): Promise<boolean>;
6
+ export declare function ensureInstallRoot(root: string): Promise<void>;
7
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../../src/core/plugin/install/paths.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,iBAAiB,uBAAuB,CAAA;AAErD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAsBxC;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB/D;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE/D;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQnE"}
@@ -0,0 +1,49 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { mkdir, realpath, rm, stat, symlink, writeFile } from 'node:fs/promises';
3
+ import { dirname, join } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { VALIDATE_SCRIPT, VALIDATE_SCRIPT_FILE } from './validate-script.js';
6
+ export const CORE_PACKAGE_NAME = '@jsbot-tellus/core';
7
+ export function packageDirectoryName(name) {
8
+ return name.startsWith('@') ? name.replace('/', '__') : name;
9
+ }
10
+ export function corePackageRoot() {
11
+ let current = dirname(fileURLToPath(import.meta.url));
12
+ for (;;) {
13
+ try {
14
+ const manifest = JSON.parse(readFileSync(join(current, 'package.json'), 'utf8'));
15
+ if (manifest['name'] === CORE_PACKAGE_NAME)
16
+ return current;
17
+ }
18
+ catch {
19
+ // keep walking up
20
+ }
21
+ const parent = dirname(current);
22
+ if (parent === current) {
23
+ throw new Error(`cannot locate ${CORE_PACKAGE_NAME} package root`);
24
+ }
25
+ current = parent;
26
+ }
27
+ }
28
+ export async function ensureCoreLink(dir) {
29
+ const target = corePackageRoot();
30
+ const link = join(dir, 'node_modules', '@jsbot-tellus', 'core');
31
+ await mkdir(dirname(link), { recursive: true });
32
+ const existing = await realpath(link).catch(() => null);
33
+ if (existing !== null) {
34
+ const resolvedTarget = await realpath(target).catch(() => target);
35
+ if (existing === resolvedTarget)
36
+ return;
37
+ await rm(link, { recursive: true, force: true });
38
+ }
39
+ await symlink(target, link, process.platform === 'win32' ? 'junction' : 'dir');
40
+ }
41
+ export async function pathExists(path) {
42
+ return (await stat(path).catch(() => null)) !== null;
43
+ }
44
+ export async function ensureInstallRoot(root) {
45
+ await mkdir(root, { recursive: true });
46
+ await mkdir(join(root, '.jsbot'), { recursive: true });
47
+ await writeFile(join(root, '.jsbot', VALIDATE_SCRIPT_FILE), VALIDATE_SCRIPT, 'utf8');
48
+ }
49
+ //# sourceMappingURL=paths.js.map
@@ -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"}