scriverse 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.
@@ -0,0 +1,611 @@
1
+ import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, isAbsolute, join, resolve } from "node:path";
4
+ import { cliResourceDefinitions, cliResourceTypes, cliWorkDefinition } from "./cli-contract.js";
5
+ const booleanOptions = new Set(["compact", "help"]);
6
+ const maximumInputBytes = 2_500_000;
7
+ export class CliError extends Error {
8
+ code;
9
+ details;
10
+ constructor(code, message, details) {
11
+ super(message);
12
+ this.code = code;
13
+ this.details = details;
14
+ }
15
+ }
16
+ export function parseCliArguments(args) {
17
+ const positionals = [];
18
+ const options = new Map();
19
+ for (let index = 0; index < args.length; index += 1) {
20
+ const argument = args[index] ?? "";
21
+ if (!argument.startsWith("--")) {
22
+ positionals.push(argument);
23
+ continue;
24
+ }
25
+ const equalsIndex = argument.indexOf("=");
26
+ const name = argument.slice(2, equalsIndex >= 0 ? equalsIndex : undefined);
27
+ if (!name)
28
+ throw new CliError("CLI_ARGUMENT_INVALID", "选项名称不能为空");
29
+ let value = "true";
30
+ if (equalsIndex >= 0) {
31
+ value = argument.slice(equalsIndex + 1);
32
+ }
33
+ else if (!booleanOptions.has(name)) {
34
+ const candidate = args[index + 1];
35
+ if (candidate === undefined || candidate.startsWith("--")) {
36
+ throw new CliError("CLI_OPTION_VALUE_REQUIRED", `选项 --${name} 缺少值`);
37
+ }
38
+ value = candidate;
39
+ index += 1;
40
+ }
41
+ const values = options.get(name) ?? [];
42
+ values.push(value);
43
+ options.set(name, values);
44
+ }
45
+ return { positionals, options };
46
+ }
47
+ function option(parsed, name) {
48
+ return parsed.options.get(name)?.at(-1);
49
+ }
50
+ function optionValues(parsed, name) {
51
+ return parsed.options.get(name) ?? [];
52
+ }
53
+ function assertAllowedOptions(parsed, allowed) {
54
+ const allowedSet = new Set(["config", "compact", "help", ...allowed]);
55
+ for (const name of parsed.options.keys()) {
56
+ if (!allowedSet.has(name))
57
+ throw new CliError("CLI_OPTION_UNKNOWN", `当前命令不支持 --${name}`);
58
+ }
59
+ }
60
+ function requiredPosition(positionals, index, label) {
61
+ const value = positionals[index];
62
+ if (!value)
63
+ throw new CliError("CLI_ARGUMENT_REQUIRED", `缺少 ${label}`);
64
+ return value;
65
+ }
66
+ function assertPositionCount(positionals, expected) {
67
+ if (positionals.length > expected) {
68
+ throw new CliError("CLI_ARGUMENT_UNEXPECTED", `存在多余参数:${positionals.slice(expected).join(" ")}`);
69
+ }
70
+ }
71
+ function emitJson(stream, value, compact) {
72
+ stream.write(`${JSON.stringify(value, null, compact ? 0 : 2)}\n`);
73
+ }
74
+ function emitText(stream, value) {
75
+ stream.write(value.endsWith("\n") ? value : `${value}\n`);
76
+ }
77
+ function configPath(parsed, dependencies) {
78
+ const configured = option(parsed, "config") ?? dependencies.env.SCRIVERSE_CONFIG;
79
+ if (configured)
80
+ return isAbsolute(configured) ? configured : resolve(dependencies.cwd, configured);
81
+ const base = dependencies.env.XDG_CONFIG_HOME?.trim() || join(dependencies.homeDirectory, ".config");
82
+ return join(base, "scriverse", "cli.json");
83
+ }
84
+ function normalizeServer(value) {
85
+ let url;
86
+ try {
87
+ url = new URL(value);
88
+ }
89
+ catch {
90
+ throw new CliError("CLI_SERVER_INVALID", "服务端地址不是有效 URL");
91
+ }
92
+ if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash) {
93
+ throw new CliError("CLI_SERVER_INVALID", "服务端地址必须是无内嵌凭据的 HTTP 或 HTTPS 地址");
94
+ }
95
+ if (url.pathname !== "/" && url.pathname !== "") {
96
+ throw new CliError("CLI_SERVER_INVALID", "服务端地址不能包含路径,请只填写协议、主机和端口");
97
+ }
98
+ return url.origin;
99
+ }
100
+ function readConfig(path) {
101
+ if (!existsSync(path))
102
+ throw new CliError("CLI_LOGIN_REQUIRED", "请先执行 auth login");
103
+ let parsed;
104
+ try {
105
+ parsed = JSON.parse(readFileSync(path, "utf8"));
106
+ }
107
+ catch {
108
+ throw new CliError("CLI_CONFIG_INVALID", `CLI 配置文件无法读取:${path}`);
109
+ }
110
+ if (!parsed || typeof parsed !== "object")
111
+ throw new CliError("CLI_CONFIG_INVALID", "CLI 配置内容无效");
112
+ const value = parsed;
113
+ if (value.version !== 1 || typeof value.server !== "string" || typeof value.apiKey !== "string" || !value.user || typeof value.user.userId !== "string") {
114
+ throw new CliError("CLI_CONFIG_INVALID", "CLI 配置字段不完整,请重新登录");
115
+ }
116
+ return value;
117
+ }
118
+ function writeConfig(path, config) {
119
+ const directory = dirname(path);
120
+ mkdirSync(directory, { recursive: true, mode: 0o700 });
121
+ const temporary = `${path}.${process.pid}.tmp`;
122
+ writeFileSync(temporary, `${JSON.stringify(config, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
123
+ chmodSync(temporary, 0o600);
124
+ renameSync(temporary, path);
125
+ chmodSync(path, 0o600);
126
+ }
127
+ function readBoundedFile(path, cwd) {
128
+ const resolved = isAbsolute(path) ? path : resolve(cwd, path);
129
+ const content = readFileSync(resolved);
130
+ if (content.byteLength > maximumInputBytes)
131
+ throw new CliError("CLI_INPUT_TOO_LARGE", `输入文件超过 ${maximumInputBytes} 字节限制`);
132
+ return content.toString("utf8");
133
+ }
134
+ async function readBoundedStdin(stdin) {
135
+ const chunks = [];
136
+ let length = 0;
137
+ for await (const chunk of stdin) {
138
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
139
+ length += buffer.byteLength;
140
+ if (length > maximumInputBytes)
141
+ throw new CliError("CLI_INPUT_TOO_LARGE", `标准输入超过 ${maximumInputBytes} 字节限制`);
142
+ chunks.push(buffer);
143
+ }
144
+ return Buffer.concat(chunks).toString("utf8");
145
+ }
146
+ function parseJsonObject(text) {
147
+ let parsed;
148
+ try {
149
+ parsed = JSON.parse(text);
150
+ }
151
+ catch {
152
+ throw new CliError("CLI_INPUT_INVALID", "编辑输入不是有效的 JSON");
153
+ }
154
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
155
+ throw new CliError("CLI_INPUT_INVALID", "编辑输入必须是 JSON 对象");
156
+ }
157
+ return parsed;
158
+ }
159
+ async function editInput(parsed, dependencies, allowChangeNote) {
160
+ const inputPath = option(parsed, "input");
161
+ const fieldFiles = optionValues(parsed, "field-file");
162
+ if (!inputPath && !fieldFiles.length) {
163
+ throw new CliError("CLI_INPUT_REQUIRED", "请使用 --input <json-file|->,或至少提供一个 --field-file field=path");
164
+ }
165
+ const input = inputPath
166
+ ? parseJsonObject(inputPath === "-" ? await readBoundedStdin(dependencies.stdin) : readBoundedFile(inputPath, dependencies.cwd))
167
+ : {};
168
+ for (const binding of fieldFiles) {
169
+ const separator = binding.indexOf("=");
170
+ const field = separator > 0 ? binding.slice(0, separator) : "";
171
+ const path = separator > 0 ? binding.slice(separator + 1) : "";
172
+ if (!/^[A-Za-z][A-Za-z0-9]*$/u.test(field) || !path) {
173
+ throw new CliError("CLI_FIELD_FILE_INVALID", "--field-file 必须使用 field=path 格式");
174
+ }
175
+ input[field] = readBoundedFile(path, dependencies.cwd);
176
+ }
177
+ const note = option(parsed, "change-note");
178
+ if (note !== undefined) {
179
+ if (!allowChangeNote)
180
+ throw new CliError("CLI_CHANGE_NOTE_UNSUPPORTED", "当前资源不支持版本说明");
181
+ input.changeNote = note;
182
+ }
183
+ return input;
184
+ }
185
+ async function apiRequest(fetchImpl, config, path, options = {}) {
186
+ const response = await fetchImpl(`${config.server}${path}`, {
187
+ method: options.method ?? "GET",
188
+ headers: {
189
+ Accept: options.text ? "text/plain" : "application/json",
190
+ Authorization: `Bearer ${config.apiKey}`,
191
+ ...(options.body ? { "Content-Type": "application/json" } : {})
192
+ },
193
+ ...(options.body ? { body: JSON.stringify(options.body) } : {})
194
+ }).catch((error) => {
195
+ throw new CliError("CLI_NETWORK_ERROR", error instanceof Error ? error.message : "无法连接服务端");
196
+ });
197
+ const text = await response.text();
198
+ if (!response.ok) {
199
+ let payload;
200
+ try {
201
+ payload = JSON.parse(text);
202
+ }
203
+ catch {
204
+ payload = null;
205
+ }
206
+ const remote = payload && typeof payload === "object" && "error" in payload
207
+ ? payload.error
208
+ : undefined;
209
+ throw new CliError(typeof remote?.code === "string" ? remote.code : `HTTP_${response.status}`, typeof remote?.message === "string" ? remote.message : `服务端请求失败,状态码 ${response.status}`, remote?.details);
210
+ }
211
+ if (options.text)
212
+ return text;
213
+ if (!text)
214
+ return null;
215
+ let payload;
216
+ try {
217
+ payload = JSON.parse(text);
218
+ }
219
+ catch {
220
+ throw new CliError("CLI_RESPONSE_INVALID", "服务端返回了无效 JSON");
221
+ }
222
+ if (payload && typeof payload === "object" && "data" in payload)
223
+ return payload.data;
224
+ return payload;
225
+ }
226
+ function resourceType(value) {
227
+ if (cliResourceTypes.includes(value))
228
+ return value;
229
+ throw new CliError("CLI_RESOURCE_UNKNOWN", `未知资源类型:${value}`);
230
+ }
231
+ function encoded(value) {
232
+ return encodeURIComponent(value);
233
+ }
234
+ function resourceListPath(type, workId) {
235
+ const suffix = {
236
+ setting: "settings",
237
+ character: "characters",
238
+ race: "races",
239
+ organization: "organizations",
240
+ "timeline-track": "timeline-tracks",
241
+ "timeline-event": "timeline",
242
+ relationship: "relationships",
243
+ foreshadow: "foreshadows"
244
+ };
245
+ if (type === "volume" || type === "chapter")
246
+ return `/api/works/${encoded(workId)}`;
247
+ if (type === "chapter-outline")
248
+ return `/api/works/${encoded(workId)}/outlines`;
249
+ return `/api/works/${encoded(workId)}/${suffix[type]}${type === "foreshadow" ? "?status=all" : ""}`;
250
+ }
251
+ function resourceGetPath(type, id) {
252
+ const prefix = {
253
+ volume: "volumes",
254
+ chapter: "chapters",
255
+ setting: "settings",
256
+ character: "characters",
257
+ race: "races",
258
+ organization: "organizations",
259
+ "timeline-track": "timeline-tracks",
260
+ "timeline-event": "timeline",
261
+ relationship: "relationships",
262
+ foreshadow: "foreshadows"
263
+ };
264
+ if (type === "chapter-outline")
265
+ return `/api/chapters/${encoded(id)}/outline`;
266
+ return `/api/${prefix[type]}/${encoded(id)}`;
267
+ }
268
+ function resourceCreatePath(type, scopeId) {
269
+ if (type === "chapter-outline")
270
+ return { path: `/api/chapters/${encoded(scopeId)}/outline`, method: "PUT" };
271
+ const suffix = {
272
+ volume: "volumes",
273
+ chapter: "chapters",
274
+ setting: "settings",
275
+ character: "characters",
276
+ race: "races",
277
+ organization: "organizations",
278
+ "timeline-track": "timeline-tracks",
279
+ "timeline-event": "timeline",
280
+ relationship: "relationships",
281
+ foreshadow: "foreshadows"
282
+ };
283
+ return { path: `/api/works/${encoded(scopeId)}/${suffix[type]}`, method: "POST" };
284
+ }
285
+ function resourceUpdatePath(type, id) {
286
+ if (type === "chapter-outline")
287
+ return { path: `/api/chapters/${encoded(id)}/outline`, method: "PUT" };
288
+ return { path: resourceGetPath(type, id), method: "PATCH" };
289
+ }
290
+ function resourceHistoryPath(type, id) {
291
+ if (type === "chapter")
292
+ return `/api/chapters/${encoded(id)}/versions`;
293
+ if (type === "character")
294
+ return `/api/characters/${encoded(id)}/versions`;
295
+ if (type === "volume")
296
+ throw new CliError("CLI_ACTION_UNSUPPORTED", "volume 不支持 history");
297
+ return `/api/entity-versions/${encoded(type)}/${encoded(id)}`;
298
+ }
299
+ function resourceRestorePath(type, id) {
300
+ if (type === "chapter")
301
+ return `/api/chapters/${encoded(id)}/restore`;
302
+ if (type === "character")
303
+ return `/api/characters/${encoded(id)}/restore`;
304
+ if (type === "volume")
305
+ throw new CliError("CLI_ACTION_UNSUPPORTED", "volume 不支持 restore");
306
+ return `/api/entity-versions/${encoded(type)}/${encoded(id)}/restore`;
307
+ }
308
+ function summarizeTreeList(type, tree) {
309
+ if (!tree || typeof tree !== "object" || !Array.isArray(tree.volumes))
310
+ return [];
311
+ const volumes = tree.volumes;
312
+ if (type === "volume") {
313
+ return volumes.map(({ chapters, ...volume }) => ({ ...volume, chapterCount: Array.isArray(chapters) ? chapters.length : 0 }));
314
+ }
315
+ return volumes.flatMap((volume) => {
316
+ const chapters = Array.isArray(volume.chapters) ? volume.chapters : [];
317
+ return chapters.map((chapter) => ({
318
+ id: chapter.id,
319
+ workId: chapter.workId,
320
+ volumeId: volume.id,
321
+ volumeTitle: volume.title,
322
+ title: chapter.title,
323
+ chapterType: chapter.chapterType,
324
+ sortOrder: chapter.sortOrder,
325
+ wordCount: chapter.wordCount,
326
+ versionNo: chapter.versionNo,
327
+ analysisStatus: chapter.analysisStatus,
328
+ updatedAt: chapter.updatedAt
329
+ }));
330
+ });
331
+ }
332
+ function helpText() {
333
+ return `Scriverse CLI
334
+
335
+ 认证:
336
+ scriverse auth login --server <url> [--api-key <key> | --api-key-file <path>]
337
+ scriverse auth status
338
+ scriverse auth logout
339
+
340
+ 查询:
341
+ scriverse work list
342
+ scriverse work get <workId>
343
+ scriverse manuscript get <workId> [--format json|markdown|txt]
344
+ scriverse search <workId> --query <text>
345
+ scriverse audit <workId>
346
+
347
+ 编辑:
348
+ scriverse work create --input <json-file|->
349
+ scriverse work update <workId> --input <json-file|->
350
+ scriverse resource list <type> <workId>
351
+ scriverse resource get <type> <id>
352
+ scriverse resource create <type> <workId|chapterId> --input <json-file|->
353
+ scriverse resource update <type> <id> --input <json-file|-> [--change-note <text>]
354
+ scriverse resource history <type> <id>
355
+ scriverse resource restore <type> <id> --version <number>
356
+
357
+ AI 编辑辅助:
358
+ scriverse schema list
359
+ scriverse schema show <type>
360
+ --field-file content=chapter.txt 可把长文本写入 JSON 字段
361
+
362
+ 全局选项:
363
+ --config <path> 指定登录配置文件
364
+ --compact 输出单行 JSON
365
+ `;
366
+ }
367
+ function schemaList() {
368
+ return {
369
+ output: "除 manuscript 的 markdown/txt 外,所有成功结果都输出 JSON;错误输出到 stderr 并返回非零状态码。",
370
+ input: {
371
+ json: "create/update 使用 --input file.json 或 --input - 从标准输入读取 JSON 对象",
372
+ longText: "使用可重复的 --field-file field=path 注入长文本字段",
373
+ history: "版本化资源更新时使用 --change-note 说明修改原因"
374
+ },
375
+ prohibited: ["用户管理", "作品成员管理", "系统管理", "AI 供应商与模型管理", "删除操作", "任意 HTTP 请求"],
376
+ resources: cliResourceTypes.map((type) => ({
377
+ type,
378
+ description: cliResourceDefinitions[type].description,
379
+ scopeArgument: cliResourceDefinitions[type].scopeArgument,
380
+ actions: cliResourceDefinitions[type].actions
381
+ })),
382
+ work: cliWorkDefinition
383
+ };
384
+ }
385
+ async function execute(parsed, dependencies) {
386
+ const compact = option(parsed, "compact") === "true";
387
+ const [group, action] = parsed.positionals;
388
+ if (!group || group === "help" || option(parsed, "help") === "true") {
389
+ assertAllowedOptions(parsed, []);
390
+ emitText(dependencies.stdout, helpText());
391
+ return;
392
+ }
393
+ const path = configPath(parsed, dependencies);
394
+ if (group === "auth") {
395
+ if (action === "login") {
396
+ assertAllowedOptions(parsed, ["server", "api-key", "api-key-file"]);
397
+ assertPositionCount(parsed.positionals, 2);
398
+ const server = normalizeServer(option(parsed, "server") ?? "");
399
+ const directKey = option(parsed, "api-key");
400
+ const keyFile = option(parsed, "api-key-file");
401
+ const environmentKey = dependencies.env.SCRIVERSE_API_KEY?.trim();
402
+ const supplied = [directKey, keyFile ? readBoundedFile(keyFile, dependencies.cwd).trim() : undefined, environmentKey].filter((value) => Boolean(value));
403
+ if (supplied.length !== 1) {
404
+ throw new CliError("CLI_API_KEY_REQUIRED", "请通过 --api-key、--api-key-file 或 SCRIVERSE_API_KEY 三者之一提供 API Key");
405
+ }
406
+ const apiKey = supplied[0];
407
+ const temporary = {
408
+ version: 1,
409
+ server,
410
+ apiKey,
411
+ apiKeyPrefix: null,
412
+ user: { userId: "", username: "", displayName: "", role: "user" }
413
+ };
414
+ const session = await apiRequest(dependencies.fetchImpl, temporary, "/api/cli/session");
415
+ if (!session.user?.userId)
416
+ throw new CliError("CLI_RESPONSE_INVALID", "服务端没有返回有效用户信息");
417
+ const config = {
418
+ version: 1,
419
+ server,
420
+ apiKey,
421
+ apiKeyPrefix: session.apiKeyPrefix ?? null,
422
+ user: session.user
423
+ };
424
+ writeConfig(path, config);
425
+ emitJson(dependencies.stdout, { authenticated: true, server, user: config.user, apiKeyPrefix: config.apiKeyPrefix, configPath: path }, compact);
426
+ return;
427
+ }
428
+ if (action === "status") {
429
+ assertAllowedOptions(parsed, []);
430
+ assertPositionCount(parsed.positionals, 2);
431
+ if (!existsSync(path)) {
432
+ emitJson(dependencies.stdout, { authenticated: false, configPath: path }, compact);
433
+ return;
434
+ }
435
+ const config = readConfig(path);
436
+ const session = await apiRequest(dependencies.fetchImpl, config, "/api/cli/session");
437
+ emitJson(dependencies.stdout, { ...session, server: config.server, configPath: path }, compact);
438
+ return;
439
+ }
440
+ if (action === "logout") {
441
+ assertAllowedOptions(parsed, []);
442
+ assertPositionCount(parsed.positionals, 2);
443
+ rmSync(path, { force: true });
444
+ emitJson(dependencies.stdout, { authenticated: false, configPath: path }, compact);
445
+ return;
446
+ }
447
+ throw new CliError("CLI_COMMAND_UNKNOWN", "未知 auth 命令");
448
+ }
449
+ if (group === "schema") {
450
+ if (action === "list") {
451
+ assertAllowedOptions(parsed, []);
452
+ assertPositionCount(parsed.positionals, 2);
453
+ emitJson(dependencies.stdout, schemaList(), compact);
454
+ return;
455
+ }
456
+ if (action === "show") {
457
+ assertAllowedOptions(parsed, []);
458
+ const requestedType = requiredPosition(parsed.positionals, 2, "resource type");
459
+ assertPositionCount(parsed.positionals, 3);
460
+ if (requestedType === "work") {
461
+ emitJson(dependencies.stdout, { type: "work", ...cliWorkDefinition }, compact);
462
+ return;
463
+ }
464
+ const type = resourceType(requestedType);
465
+ emitJson(dependencies.stdout, { type, ...cliResourceDefinitions[type] }, compact);
466
+ return;
467
+ }
468
+ throw new CliError("CLI_COMMAND_UNKNOWN", "未知 schema 命令");
469
+ }
470
+ if (!["work", "manuscript", "search", "audit", "resource"].includes(group)) {
471
+ throw new CliError("CLI_COMMAND_UNKNOWN", "未知命令;使用 --help 查看可用命令");
472
+ }
473
+ const config = readConfig(path);
474
+ if (group === "work") {
475
+ if (action === "list") {
476
+ assertAllowedOptions(parsed, []);
477
+ assertPositionCount(parsed.positionals, 2);
478
+ emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, "/api/works"), compact);
479
+ return;
480
+ }
481
+ if (action === "get") {
482
+ assertAllowedOptions(parsed, []);
483
+ const workId = requiredPosition(parsed.positionals, 2, "workId");
484
+ assertPositionCount(parsed.positionals, 3);
485
+ emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, `/api/works/${encoded(workId)}`), compact);
486
+ return;
487
+ }
488
+ if (action === "create") {
489
+ assertAllowedOptions(parsed, ["input", "field-file"]);
490
+ assertPositionCount(parsed.positionals, 2);
491
+ const body = await editInput(parsed, dependencies, false);
492
+ emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, "/api/works", { method: "POST", body }), compact);
493
+ return;
494
+ }
495
+ if (action === "update") {
496
+ assertAllowedOptions(parsed, ["input", "field-file"]);
497
+ const workId = requiredPosition(parsed.positionals, 2, "workId");
498
+ assertPositionCount(parsed.positionals, 3);
499
+ const body = await editInput(parsed, dependencies, false);
500
+ emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, `/api/works/${encoded(workId)}`, { method: "PATCH", body }), compact);
501
+ return;
502
+ }
503
+ throw new CliError("CLI_COMMAND_UNKNOWN", "未知 work 命令");
504
+ }
505
+ if (group === "manuscript" && action === "get") {
506
+ assertAllowedOptions(parsed, ["format"]);
507
+ const workId = requiredPosition(parsed.positionals, 2, "workId");
508
+ assertPositionCount(parsed.positionals, 3);
509
+ const format = option(parsed, "format") ?? "json";
510
+ if (!["json", "markdown", "txt"].includes(format))
511
+ throw new CliError("CLI_FORMAT_INVALID", "format 必须是 json、markdown 或 txt");
512
+ if (format === "json") {
513
+ emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, `/api/works/${encoded(workId)}`), compact);
514
+ }
515
+ else {
516
+ emitText(dependencies.stdout, String(await apiRequest(dependencies.fetchImpl, config, `/api/works/${encoded(workId)}/export?format=${format}`, { text: true })));
517
+ }
518
+ return;
519
+ }
520
+ if (group === "search") {
521
+ assertAllowedOptions(parsed, ["query"]);
522
+ const workId = requiredPosition(parsed.positionals, 1, "workId");
523
+ assertPositionCount(parsed.positionals, 2);
524
+ const query = option(parsed, "query")?.trim();
525
+ if (!query)
526
+ throw new CliError("CLI_QUERY_REQUIRED", "请使用 --query 提供搜索词");
527
+ emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, `/api/works/${encoded(workId)}/search?q=${encodeURIComponent(query)}`), compact);
528
+ return;
529
+ }
530
+ if (group === "audit") {
531
+ assertAllowedOptions(parsed, []);
532
+ const workId = requiredPosition(parsed.positionals, 1, "workId");
533
+ assertPositionCount(parsed.positionals, 2);
534
+ emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, `/api/works/${encoded(workId)}/audit-logs`), compact);
535
+ return;
536
+ }
537
+ if (group === "resource") {
538
+ const type = resourceType(requiredPosition(parsed.positionals, 2, "resource type"));
539
+ const id = requiredPosition(parsed.positionals, 3, action === "list" ? "workId" : (action === "create" ? cliResourceDefinitions[type].scopeArgument : "resource id"));
540
+ assertPositionCount(parsed.positionals, 4);
541
+ if (!cliResourceDefinitions[type].actions.includes(action)) {
542
+ throw new CliError("CLI_ACTION_UNSUPPORTED", `${type} 不支持 ${action}`);
543
+ }
544
+ if (action === "list") {
545
+ assertAllowedOptions(parsed, []);
546
+ const result = await apiRequest(dependencies.fetchImpl, config, resourceListPath(type, id));
547
+ emitJson(dependencies.stdout, type === "volume" || type === "chapter" ? summarizeTreeList(type, result) : result, compact);
548
+ return;
549
+ }
550
+ if (action === "get") {
551
+ assertAllowedOptions(parsed, []);
552
+ emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, resourceGetPath(type, id)), compact);
553
+ return;
554
+ }
555
+ if (action === "create") {
556
+ assertAllowedOptions(parsed, ["input", "field-file"]);
557
+ const body = await editInput(parsed, dependencies, false);
558
+ const endpoint = resourceCreatePath(type, id);
559
+ emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, endpoint.path, { method: endpoint.method, body }), compact);
560
+ return;
561
+ }
562
+ if (action === "update") {
563
+ assertAllowedOptions(parsed, ["input", "field-file", "change-note"]);
564
+ const body = await editInput(parsed, dependencies, type !== "volume");
565
+ const endpoint = resourceUpdatePath(type, id);
566
+ emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, endpoint.path, { method: endpoint.method, body }), compact);
567
+ return;
568
+ }
569
+ if (action === "history") {
570
+ assertAllowedOptions(parsed, []);
571
+ emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, resourceHistoryPath(type, id)), compact);
572
+ return;
573
+ }
574
+ if (action === "restore") {
575
+ assertAllowedOptions(parsed, ["version"]);
576
+ const version = Number(option(parsed, "version"));
577
+ if (!Number.isInteger(version) || version <= 0)
578
+ throw new CliError("CLI_VERSION_INVALID", "请使用 --version 提供正整数版本号");
579
+ emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, resourceRestorePath(type, id), { method: "POST", body: { versionNo: version } }), compact);
580
+ return;
581
+ }
582
+ throw new CliError("CLI_COMMAND_UNKNOWN", "未知 resource 命令");
583
+ }
584
+ throw new CliError("CLI_COMMAND_UNKNOWN", "未知命令;使用 --help 查看可用命令");
585
+ }
586
+ export async function runCli(args, inputDependencies = {}) {
587
+ const dependencies = {
588
+ fetchImpl: inputDependencies.fetchImpl ?? fetch,
589
+ stdin: inputDependencies.stdin ?? process.stdin,
590
+ stdout: inputDependencies.stdout ?? process.stdout,
591
+ stderr: inputDependencies.stderr ?? process.stderr,
592
+ env: inputDependencies.env ?? process.env,
593
+ cwd: inputDependencies.cwd ?? process.cwd(),
594
+ homeDirectory: inputDependencies.homeDirectory ?? homedir()
595
+ };
596
+ try {
597
+ await execute(parseCliArguments(args), dependencies);
598
+ return 0;
599
+ }
600
+ catch (error) {
601
+ const compact = args.includes("--compact");
602
+ if (error instanceof CliError) {
603
+ emitJson(dependencies.stderr, { error: { code: error.code, message: error.message, ...(error.details === undefined ? {} : { details: error.details }) } }, compact);
604
+ }
605
+ else {
606
+ emitJson(dependencies.stderr, { error: { code: "CLI_INTERNAL_ERROR", message: error instanceof Error ? error.message : "CLI 内部错误" } }, compact);
607
+ }
608
+ return 1;
609
+ }
610
+ }
611
+ //# sourceMappingURL=cli-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-core.js","sourceRoot":"","sources":["../src/cli-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5G,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,iBAAiB,EAAwB,MAAM,mBAAmB,CAAC;AAuCtH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AACpD,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAEpC,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEtB;IAEA;IAHX,YACW,IAAY,EACrB,OAAe,EACN,OAAiB;QAE1B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJN,SAAI,GAAJ,IAAI,CAAQ;QAEZ,YAAO,GAAP,OAAO,CAAU;IAG5B,CAAC;CACF;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;QAClE,IAAI,KAAK,GAAG,MAAM,CAAC;QACnB,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAClC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,QAAQ,CAAC,2BAA2B,EAAE,QAAQ,IAAI,MAAM,CAAC,CAAC;YACtE,CAAC;YACD,KAAK,GAAG,SAAS,CAAC;YAClB,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,MAAM,CAAC,MAAuB,EAAE,IAAY;IACnD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,YAAY,CAAC,MAAuB,EAAE,IAAY;IACzD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAuB,EAAE,OAAiB;IACtE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IACtE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAqB,EAAE,KAAa,EAAE,KAAa;IAC3E,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,QAAQ,CAAC,uBAAuB,EAAE,MAAM,KAAK,EAAE,CAAC,CAAC;IACvE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAqB,EAAE,QAAgB;IAClE,IAAI,WAAW,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,QAAQ,CAAC,yBAAyB,EAAE,UAAU,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,MAAoB,EAAE,KAAc,EAAE,OAAgB;IACtE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,QAAQ,CAAC,MAAoB,EAAE,KAAa;IACnD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,UAAU,CAAC,MAAuB,EAAE,YAA8E;IACzH,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACjF,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACnG,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACrG,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1G,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,gCAAgC,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;QAChD,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,0BAA0B,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;IACnF,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;IAClG,MAAM,KAAK,GAAG,MAA4B,CAAC;IAC3C,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxJ,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,KAAkB,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,MAAiB;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IAC/C,aAAa,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpG,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC5B,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC5B,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,GAAW;IAChD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,UAAU,GAAG,iBAAiB;QAAE,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,UAAU,iBAAiB,OAAO,CAAC,CAAC;IAC1H,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAAkB;IAChD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC;QAC5B,IAAI,MAAM,GAAG,iBAAiB;YAAE,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,UAAU,iBAAiB,OAAO,CAAC,CAAC;QAC9G,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,QAAQ,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAiC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAuB,EAAE,YAA8D,EAAE,eAAwB;IACxI,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtD,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,2DAA2D,CAAC,CAAC;IACxG,CAAC;IACD,MAAM,KAAK,GAAG,SAAS;QACrB,CAAC,CAAC,eAAe,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;QAChI,CAAC,CAAC,EAAE,CAAC;IACP,KAAK,MAAM,OAAO,IAAI,UAAU,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,IAAI,QAAQ,CAAC,wBAAwB,EAAE,iCAAiC,CAAC,CAAC;QAClF,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe;YAAE,MAAM,IAAI,QAAQ,CAAC,6BAA6B,EAAE,aAAa,CAAC,CAAC;QACvF,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,SAAuB,EAAE,MAAiB,EAAE,IAAY,EAAE,UAA0B,EAAE;IAC9G,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,EAAE;QAC1D,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,OAAO,EAAE;YACP,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB;YACxD,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;YACxC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE;QACD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC1B,MAAM,IAAI,QAAQ,CAAC,mBAAmB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,OAAO;YACzE,CAAC,CAAE,OAAgF,CAAC,KAAK;YACzF,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,IAAI,QAAQ,CAChB,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAC1E,OAAO,MAAM,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,QAAQ,CAAC,MAAM,EAAE,EACvF,MAAM,EAAE,OAAO,CAChB,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,IAAI,OAAO;QAAE,OAAQ,OAA6B,CAAC,IAAI,CAAC;IAC5G,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAK,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAwB,CAAC;IAC7F,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAqB,EAAE,MAAc;IAC7D,MAAM,MAAM,GAAuF;QACjG,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,eAAe;QAC7B,gBAAgB,EAAE,iBAAiB;QACnC,gBAAgB,EAAE,UAAU;QAC5B,YAAY,EAAE,eAAe;QAC7B,UAAU,EAAE,aAAa;KAC1B,CAAC;IACF,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,cAAc,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACpF,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,cAAc,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;IAChF,OAAO,cAAc,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACtG,CAAC;AAED,SAAS,eAAe,CAAC,IAAqB,EAAE,EAAU;IACxD,MAAM,MAAM,GAAgE;QAC1E,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,eAAe;QAC7B,gBAAgB,EAAE,iBAAiB;QACnC,gBAAgB,EAAE,UAAU;QAC5B,YAAY,EAAE,eAAe;QAC7B,UAAU,EAAE,aAAa;KAC1B,CAAC;IACF,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,iBAAiB,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC;IAC9E,OAAO,QAAQ,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAqB,EAAE,OAAe;IAChE,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC5G,MAAM,MAAM,GAAgE;QAC1E,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,UAAU;QACnB,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,eAAe;QAC7B,gBAAgB,EAAE,iBAAiB;QACnC,gBAAgB,EAAE,UAAU;QAC5B,YAAY,EAAE,eAAe;QAC7B,UAAU,EAAE,aAAa;KAC1B,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,cAAc,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACpF,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAqB,EAAE,EAAU;IAC3D,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACvG,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAqB,EAAE,EAAU;IAC5D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,iBAAiB,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC;IACvE,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,mBAAmB,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC;IAC3E,IAAI,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,QAAQ,CAAC,wBAAwB,EAAE,oBAAoB,CAAC,CAAC;IAC1F,OAAO,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAqB,EAAE,EAAU;IAC5D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,iBAAiB,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC;IACtE,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,mBAAmB,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC;IAC1E,IAAI,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,QAAQ,CAAC,wBAAwB,EAAE,oBAAoB,CAAC,CAAC;IAC1F,OAAO,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC;AACxE,CAAC;AAED,SAAS,iBAAiB,CAAC,IAA0B,EAAE,IAAa;IAClE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,IAA8B,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5G,MAAM,OAAO,GAAI,IAAoD,CAAC,OAAO,CAAC;IAC9E,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChI,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAA0C,CAAC,CAAC,CAAC,EAAE,CAAC;QACzG,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAChC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,WAAW,EAAE,MAAM,CAAC,KAAK;YACzB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ;IACf,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCR,CAAC;AACF,CAAC;AAED,SAAS,UAAU;IACjB,OAAO;QACL,MAAM,EAAE,qEAAqE;QAC7E,KAAK,EAAE;YACL,IAAI,EAAE,gEAAgE;YACtE,QAAQ,EAAE,wCAAwC;YAClD,OAAO,EAAE,iCAAiC;SAC3C;QACD,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,CAAC;QAC3E,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI;YACJ,WAAW,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC,WAAW;YACrD,aAAa,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC,aAAa;YACzD,OAAO,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC,OAAO;SAC9C,CAAC,CAAC;QACH,IAAI,EAAE,iBAAiB;KACxB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,MAAuB,EAAE,YAAuC;IACrF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,MAAM,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;IAC3C,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;QACpE,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC9C,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,oBAAoB,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;YACpE,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAC/C,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;YAClE,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACzK,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,iEAAiE,CAAC,CAAC;YAChH,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YAC5B,MAAM,SAAS,GAAc;gBAC3B,OAAO,EAAE,CAAC;gBACV,MAAM;gBACN,MAAM;gBACN,YAAY,EAAE,IAAI;gBAClB,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;aAClE,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,kBAAkB,CAGrF,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM;gBAAE,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC;YACvF,MAAM,MAAM,GAAc;gBACxB,OAAO,EAAE,CAAC;gBACV,MAAM;gBACN,MAAM;gBACN,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;gBAC1C,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC;YACF,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1B,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YAChJ,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjC,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;gBACnF,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC;YACrF,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,GAAI,OAAmC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YAC7H,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjC,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9B,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;YACnF,OAAO;QACT,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjC,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC3C,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjC,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;YAC/E,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;gBAC7B,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC/E,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;YACzC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAClF,OAAO;QACT,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjC,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC3C,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;YACvG,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;YACjE,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC3C,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1H,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,oBAAoB,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YACtD,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YAC1D,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACjI,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,oBAAoB,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;YACjE,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YAC1D,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACrJ,OAAO;QACT,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,KAAK,YAAY,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC/C,oBAAoB,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QACjE,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC;QAClD,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,gCAAgC,CAAC,CAAC;QAC9H,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5H,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,OAAO,CAAC,MAAM,CAAC,kBAAkB,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnK,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,oBAAoB,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QACjE,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,QAAQ,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;QAC1E,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,OAAO,CAAC,MAAM,CAAC,aAAa,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAChK,OAAO;IACT,CAAC;IAED,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QACjE,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC3C,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;QACrI,OAAO;IACT,CAAC;IAED,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;QACpF,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;QACtK,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAe,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,QAAQ,CAAC,wBAAwB,EAAE,GAAG,IAAI,QAAQ,MAAM,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5F,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3H,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpH,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,oBAAoB,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9C,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3I,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,oBAAoB,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;YACrE,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9C,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3I,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACjC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACxH,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,oBAAoB,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;gBAAE,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC;YACpH,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1K,OAAO;QACT,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,oBAAqC,EAAE;IAClF,MAAM,YAAY,GAA8B;QAC9C,SAAS,EAAE,iBAAiB,CAAC,SAAS,IAAI,KAAK;QAC/C,KAAK,EAAE,iBAAiB,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;QAC/C,MAAM,EAAE,iBAAiB,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;QAClD,MAAM,EAAE,iBAAiB,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;QAClD,GAAG,EAAE,iBAAiB,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;QACzC,GAAG,EAAE,iBAAiB,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;QAC3C,aAAa,EAAE,iBAAiB,CAAC,aAAa,IAAI,OAAO,EAAE;KAC5D,CAAC;IACF,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;QACrD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACtK,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAClJ,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
package/dist/cli.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from "./cli-core.js";
3
+ process.exitCode = await runCli(process.argv.slice(2));
4
+ //# sourceMappingURL=cli.js.map