snapshot-checker 0.8.1 → 0.8.3

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 (83) hide show
  1. package/README.md +13 -2
  2. package/dist/src/bin.js +1 -1
  3. package/dist/src/bin.js.map +1 -1
  4. package/dist/src/cli.js +62 -367
  5. package/dist/src/cli.js.map +1 -1
  6. package/dist/src/executor.d.ts +4 -5
  7. package/dist/src/executor.d.ts.map +1 -1
  8. package/dist/src/executor.js +2 -3
  9. package/dist/src/executor.js.map +1 -1
  10. package/dist/src/group_specs.d.ts +1 -9
  11. package/dist/src/group_specs.d.ts.map +1 -1
  12. package/dist/src/group_specs.js +1 -26
  13. package/dist/src/group_specs.js.map +1 -1
  14. package/dist/src/index.d.ts +4 -4
  15. package/dist/src/index.d.ts.map +1 -1
  16. package/dist/src/index.js +3 -3
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/lib/format.d.ts +1 -1
  19. package/dist/src/lib/format.d.ts.map +1 -1
  20. package/dist/src/lib/perf_decode.d.ts +2 -1
  21. package/dist/src/lib/perf_decode.d.ts.map +1 -1
  22. package/dist/src/lib/perf_decode.js +0 -1
  23. package/dist/src/lib/perf_decode.js.map +1 -1
  24. package/dist/src/lib/pipeline.d.ts +1 -1
  25. package/dist/src/lib/pipeline.d.ts.map +1 -1
  26. package/dist/src/lib/pipeline.js.map +1 -1
  27. package/dist/src/lib/scenario.d.ts +12 -50
  28. package/dist/src/lib/scenario.d.ts.map +1 -1
  29. package/dist/src/lib/scenario.js +10 -74
  30. package/dist/src/lib/scenario.js.map +1 -1
  31. package/dist/src/lib/scenario_globals.d.ts +8 -0
  32. package/dist/src/lib/scenario_globals.d.ts.map +1 -0
  33. package/dist/src/lib/scenario_globals.js +11 -0
  34. package/dist/src/lib/scenario_globals.js.map +1 -0
  35. package/dist/src/logger.d.ts +2 -0
  36. package/dist/src/logger.d.ts.map +1 -1
  37. package/dist/src/logger.js +3 -0
  38. package/dist/src/logger.js.map +1 -1
  39. package/dist/src/run_command.d.ts +1 -68
  40. package/dist/src/run_command.d.ts.map +1 -1
  41. package/dist/src/run_command.js +1 -366
  42. package/dist/src/run_command.js.map +1 -1
  43. package/dist/src/run_groups.d.ts +1 -38
  44. package/dist/src/run_groups.d.ts.map +1 -1
  45. package/dist/src/run_groups.js +1 -153
  46. package/dist/src/run_groups.js.map +1 -1
  47. package/dist/src/runners/index.d.ts +1 -6
  48. package/dist/src/runners/index.d.ts.map +1 -1
  49. package/dist/src/runners/index.js +1 -4
  50. package/dist/src/runners/index.js.map +1 -1
  51. package/dist/src/types.d.ts +1 -171
  52. package/dist/src/types.d.ts.map +1 -1
  53. package/dist/src/types.js +1 -174
  54. package/dist/src/types.js.map +1 -1
  55. package/package.json +5 -3
  56. package/dist/src/lib/programmatic.d.ts +0 -30
  57. package/dist/src/lib/programmatic.d.ts.map +0 -1
  58. package/dist/src/lib/programmatic.js +0 -40
  59. package/dist/src/lib/programmatic.js.map +0 -1
  60. package/dist/src/runners/background_executor.d.ts +0 -3
  61. package/dist/src/runners/background_executor.d.ts.map +0 -1
  62. package/dist/src/runners/background_executor.js +0 -3
  63. package/dist/src/runners/background_executor.js.map +0 -1
  64. package/dist/src/runners/builtin_runner.d.ts +0 -8
  65. package/dist/src/runners/builtin_runner.d.ts.map +0 -1
  66. package/dist/src/runners/builtin_runner.js +0 -66
  67. package/dist/src/runners/builtin_runner.js.map +0 -1
  68. package/dist/src/runners/embed_runner.d.ts +0 -8
  69. package/dist/src/runners/embed_runner.d.ts.map +0 -1
  70. package/dist/src/runners/embed_runner.js +0 -155
  71. package/dist/src/runners/embed_runner.js.map +0 -1
  72. package/dist/src/runners/platform_shell_executor.d.ts +0 -71
  73. package/dist/src/runners/platform_shell_executor.d.ts.map +0 -1
  74. package/dist/src/runners/platform_shell_executor.js +0 -158
  75. package/dist/src/runners/platform_shell_executor.js.map +0 -1
  76. package/dist/src/runners/shell_runner.d.ts +0 -8
  77. package/dist/src/runners/shell_runner.d.ts.map +0 -1
  78. package/dist/src/runners/shell_runner.js +0 -167
  79. package/dist/src/runners/shell_runner.js.map +0 -1
  80. package/dist/src/runners/types.d.ts +0 -27
  81. package/dist/src/runners/types.d.ts.map +0 -1
  82. package/dist/src/runners/types.js +0 -2
  83. package/dist/src/runners/types.js.map +0 -1
package/README.md CHANGED
@@ -8,14 +8,25 @@
8
8
 
9
9
  - `report` 默认 `--trace-from` 由 `hitrace` 改为 **`mix`**(采集默认带 `--raw-data`,analysis 默认预处理 hitrace 并使用 **perfFirst** sidecar)。
10
10
  - 日志格式统一为行首 `[ISO8601] {级别} {正文}`(无 consola 颜色)。
11
- - 依赖升级:`hiperf_txt_parser` ^1.4、`hmtrace-parser` ^0.6;analysis trace 解码改由 pipeline 编排。
11
+ - 依赖升级:`hiperf_txt_parser` 2.0、`hm-pt-core` 1.0、`hmtrace-parser` 0.8;analysis trace 解码改由 pipeline 编排;公共类型与 trace 机制自 `hm-pt-core` 导入。
12
12
  - 若需与 0.6.x 相同默认行为,显式传入 `--trace-from hitrace`。
13
13
 
14
14
  **前置条件**
15
15
 
16
16
  - **Node.js** ≥ 18。
17
17
  - PATH 中可用 **`hdc`**,并已连接目标设备。
18
- - 本机 analysis 依赖 **`hiperf_txt_parser` ^1.4**、**`hmtrace-parser` ^0.6**(随包安装):hitrace 预处理与索引由 hmtrace 构建,样本级并行解码与 hitrace 合并由 hiperf 完成。
18
+ - 本机 analysis 依赖 **`hiperf_txt_parser` ^2.0**、**`hm-pt-core` ^1.0**、**`hmtrace-parser` ^0.8**(随 `npm install` 安装):hitrace 预处理与索引由 hmtrace 构建,公共类型与 trace 机制由 hm-pt-core 提供,样本级并行解码与 hitrace 合并由 hiperf 完成。
19
+
20
+ ## 架构与 hmcommand-runner
21
+
22
+ 自 **0.8.x** 起,命令调度与执行引擎已提取为独立 npm 包 **[`hmcommand-runner`](https://www.npmjs.com/package/hmcommand-runner)**(`1.0.0`):
23
+
24
+ | 层级 | 包 / 目录 | 职责 |
25
+ |------|-----------|------|
26
+ | 执行框架 | `hmcommand-runner` | `CommandDef` 类型、组调度(`group:N`)、Shell/Builtin/Embed Runner、通用 CLI 注册器 |
27
+ | 领域场景 | `commands/`、`src/lib/presets.ts` 等 | forkall/report 场景、hdc/hiperf/hitrace 命令拼装与解码 |
28
+
29
+ `snapshot-checker` 的公开 API(`resolveScenario`、`runScenarioGroups`、`executeAll` 等)继续从主包 re-export,现有 `import from 'snapshot-checker'` 的代码无需修改。若只需通用命令编排框架,可直接依赖 `hmcommand-runner`。
19
30
 
20
31
  ---
21
32
 
package/dist/src/bin.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { program } from "commander";
3
- import { resolveScenario, runScenarioGroups } from "./lib/programmatic.js";
3
+ import { resolveScenario, runScenarioGroups } from "./lib/scenario.js";
4
4
  import { runBinaryPreflight } from "./lib/preflight.js";
5
5
  import * as reportScenario from "../commands/report.js";
6
6
  function registerScenarioCommand(name, description, scenario) {
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":"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"}
package/dist/src/cli.js CHANGED
@@ -1,374 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  import { program, Option } from "commander";
3
- import { readdirSync } from "node:fs";
4
- import { dirname, extname, basename, join } from "node:path";
3
+ import { dirname, join } from "node:path";
5
4
  import { fileURLToPath } from "node:url";
6
- import { getGroupChunks, runGroupChunks } from "./executor.js";
7
- import { attachLoggerFileSink, createModuleLogger, resolveLogDumpPath, setGlobalLogLevelFromCli, SNAPSHOT_CHECKER_LOG_LEVEL_CHOICES, } from "./logger.js";
8
- import { parseGroupSpecs } from "./group_specs.js";
9
- import { buildApplyOptionsInput } from "./lib/scenario.js";
5
+ import { registerScenarios, } from "hmcommand-runner/cli";
6
+ import { setLoggerHooks, setGlobalLogLevelFromCli as setRunnerLogLevelFromCli, registerLogFilePathForTee, } from "hmcommand-runner";
7
+ import { attachLoggerFileSink, createModuleLogger, resolveLogDumpPath, restoreBaselineLogLevel, setGlobalLogLevelFromCli, SNAPSHOT_CHECKER_LOG_LEVEL_CHOICES, } from "./logger.js";
8
+ import { buildApplyOptionsInput } from "./lib/scenario_globals.js";
10
9
  import { formatInvocationCommandLine, readSnapshotCheckerVersion, } from "./lib/version.js";
11
- import { formatCommandKindForLog, } from "./types.js";
12
- const logger = createModuleLogger(import.meta.url);
13
10
  const cliModuleDir = dirname(fileURLToPath(import.meta.url));
14
- const customCommands = [];
15
- /**
16
- * 在「Options:」区块内:先列出无 helpGroup 的选项,再按组输出带 helpGroup 的选项;
17
- * 组与组之间、内置块与第一组之间插入空行(与 Commander 默认 formatHelp 对齐)。
18
- */
19
- function formatHelpWithScenarioOptionGroups(cmd, helper) {
20
- const termWidth = helper.padWidth(cmd, helper);
21
- const helpWidth = helper.helpWidth ?? 80;
22
- const itemIndentWidth = 2;
23
- const itemSeparatorWidth = 2;
24
- function formatItem(term, description) {
25
- if (description) {
26
- const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`;
27
- return helper.wrap(fullText, helpWidth - itemIndentWidth, termWidth + itemSeparatorWidth);
28
- }
29
- return term;
30
- }
31
- function formatList(textArray) {
32
- return textArray.join("\n").replace(/^/gm, " ".repeat(itemIndentWidth));
33
- }
34
- const visible = helper.visibleOptions(cmd);
35
- const withGroup = visible.filter((o) => typeof o.helpGroup === "string" &&
36
- o.helpGroup.length > 0);
37
- const withoutGroup = visible.filter((o) => !o.helpGroup);
38
- const groupOrder = [];
39
- for (const o of withGroup) {
40
- const g = o.helpGroup;
41
- if (!groupOrder.includes(g))
42
- groupOrder.push(g);
43
- }
44
- const optionList = [];
45
- for (const o of withoutGroup) {
46
- optionList.push(formatItem(helper.optionTerm(o), helper.optionDescription(o)));
47
- }
48
- if (withoutGroup.length > 0 && withGroup.length > 0) {
49
- optionList.push("");
50
- }
51
- for (let i = 0; i < groupOrder.length; i++) {
52
- if (i > 0)
53
- optionList.push("");
54
- const title = groupOrder[i];
55
- // 单独一行左对齐分组标题(不经 formatItem,避免标题落在「选项名 / 说明」对齐列的说明侧)
56
- optionList.push(title);
57
- for (const o of withGroup) {
58
- if (o.helpGroup === title) {
59
- optionList.push(formatItem(helper.optionTerm(o), helper.optionDescription(o)));
60
- }
61
- }
62
- }
63
- let output = [`Usage: ${helper.commandUsage(cmd)}`, ""];
64
- const commandDescription = helper.commandDescription(cmd);
65
- if (commandDescription.length > 0) {
66
- output = output.concat([helper.wrap(commandDescription, helpWidth, 0), ""]);
67
- }
68
- const argumentList = helper.visibleArguments(cmd).map((argument) => {
69
- return formatItem(helper.argumentTerm(argument), helper.argumentDescription(argument));
70
- });
71
- if (argumentList.length > 0) {
72
- output = output.concat(["Arguments:", formatList(argumentList), ""]);
73
- }
74
- if (optionList.length > 0) {
75
- output = output.concat(["Options:", formatList(optionList), ""]);
76
- }
77
- if (helper.showGlobalOptions) {
78
- const globalOptionList = helper.visibleGlobalOptions(cmd).map((option) => {
79
- return formatItem(helper.optionTerm(option), helper.optionDescription(option));
80
- });
81
- if (globalOptionList.length > 0) {
82
- output = output.concat(["Global Options:", formatList(globalOptionList), ""]);
83
- }
84
- }
85
- const commandList = helper.visibleCommands(cmd).map((sub) => {
86
- return formatItem(helper.subcommandTerm(sub), helper.subcommandDescription(sub));
87
- });
88
- if (commandList.length > 0) {
89
- output = output.concat(["Commands:", formatList(commandList), ""]);
90
- }
91
- return output.join("\n");
92
- }
93
- function getCommandTextForDisplay(c) {
94
- if (c.run != null)
95
- return c.run;
96
- if (c.file)
97
- return [c.file, ...(c.args ?? [])].join(" ");
98
- if (typeof c.func === "function")
99
- return `[func:${c.func.name || "anonymous"}]`;
100
- return "";
101
- }
102
- function getBackgroundTag(c) {
103
- if (!c.background)
104
- return "";
105
- const d = Math.max(0, c.backgroundDelayMs ?? 0);
106
- return d > 0 ? ` [background delay ${d}ms]` : " [background]";
107
- }
108
- function getCommandAlias(name) {
109
- if (name.includes("-"))
110
- return name.replace(/-/g, "_");
111
- if (name.includes("_"))
112
- return name.replace(/_/g, "-");
113
- return undefined;
114
- }
115
- async function registerScenarioCommands(rootProgram) {
116
- const scenarioDirectories = [
117
- {
118
- dirPath: join(cliModuleDir, "..", "commands"),
119
- importPrefix: "../commands",
120
- displayPrefix: "commands",
121
- },
122
- {
123
- dirPath: join(cliModuleDir, "..", "demos"),
124
- importPrefix: "../demos",
125
- displayPrefix: "demos",
126
- },
127
- ];
128
- const loadedCommandNames = new Set();
129
- for (const directory of scenarioDirectories) {
130
- let entries;
131
- try {
132
- entries = readdirSync(directory.dirPath).map((name) => name.toString());
133
- }
134
- catch {
135
- continue;
136
- }
137
- const files = entries.filter((f) => {
138
- const ext = extname(f);
139
- // 排除主名 `config`(含任意扩展名)
140
- if (basename(f, ext) === "config")
141
- return false;
142
- // 排除 `.d.ts` / `.d.mts` / `.d.cts` 及 source map
143
- if (f.endsWith(".d.ts") ||
144
- f.endsWith(".d.mts") ||
145
- f.endsWith(".d.cts") ||
146
- f.endsWith(".map")) {
147
- return false;
148
- }
149
- // 开发载入 `.ts`,发布包仅 `.js`/`.mjs`
150
- return ext === ".js" || ext === ".mjs" || ext === ".ts";
151
- });
152
- for (const file of files) {
153
- const name = basename(file, extname(file));
154
- const commandName = name;
155
- if (loadedCommandNames.has(commandName)) {
156
- logger.warn(`场景命令 "${commandName}" 在多个目录中重复定义,已跳过 ${directory.displayPrefix}/${file}`);
157
- continue;
158
- }
159
- loadedCommandNames.add(commandName);
160
- const relPath = `${directory.importPrefix}/${file}`;
161
- // 懒加载:读取场景的 groups、defaultGroupOrder、options、applyOptions
162
- const mod = await import(relPath);
163
- const displayPath = `${directory.displayPrefix}/${commandName}.ts`;
164
- customCommands.push({ name: commandName, displayPath });
165
- const cmd = rootProgram
166
- .command(commandName)
167
- .description(`按 ${displayPath} 的 group 定义执行`)
168
- .option("-g, --group <specs...>", "要执行的组及次数:group 或 group:N;多项用空格或逗号分隔(例 env:10,list)")
169
- .option("--stop-on-error", "任一命令失败则中止后续(默认忽略失败继续)")
170
- .option("-s, --silent", "日志为 error;子进程 stdout/stderr 不输出到终端")
171
- .option("--wait", "前台结束后阻塞至全部后台子进程退出(默认:终止并回收后台子进程)")
172
- .option("--dry-run", "只打印将执行的命令,不启动子进程")
173
- .option("--list", "只列出命令,不执行;不创建输出目录(与 --dry-run 同目录语义)")
174
- .option("--ignore-platform", "跨平台执行:包含全部 kind 的命令,Shell 类命令依当前宿主系统自动选择执行器")
175
- .option("-i, --interval <ms>", "相邻命令间隔(毫秒),默认 0;组内重复执行也生效", "0");
176
- const alias = getCommandAlias(commandName);
177
- if (alias) {
178
- cmd.alias(alias);
179
- }
180
- // 若导出 `options` 数组,则附加场景级 CLI 选项(可选 `helpGroup` 触发分组 --help)
181
- if (Array.isArray(mod.options)) {
182
- const scenarioOpts = mod.options;
183
- const hasHelpGroups = scenarioOpts.some((o) => typeof o.helpGroup === "string" && o.helpGroup.length > 0);
184
- if (hasHelpGroups) {
185
- for (const opt of scenarioOpts) {
186
- const o = new Option(opt.flags, opt.description ?? "");
187
- if (opt.defaultValue !== undefined) {
188
- o.default(opt.defaultValue);
189
- }
190
- if (opt.helpGroup) {
191
- o.helpGroup = opt.helpGroup;
192
- }
193
- cmd.addOption(o);
194
- }
195
- cmd.configureHelp({
196
- ...rootProgram.configureHelp(),
197
- formatHelp: formatHelpWithScenarioOptionGroups,
198
- });
199
- }
200
- else {
201
- for (const opt of scenarioOpts) {
202
- if (opt.defaultValue !== undefined) {
203
- cmd.option(opt.flags, opt.description ?? "", opt.defaultValue);
204
- }
205
- else {
206
- cmd.option(opt.flags, opt.description ?? "");
207
- }
208
- }
209
- }
210
- }
211
- cmd.action(async (opts, command) => {
212
- const globals = command.optsWithGlobals();
213
- const logFileOpt = globals.logFile;
214
- const skipLogSinkOnList = opts.list === true &&
215
- (logFileOpt === undefined ||
216
- logFileOpt === true ||
217
- (typeof logFileOpt === "string" && logFileOpt.trim() === ""));
218
- const logDumpPath = skipLogSinkOnList
219
- ? undefined
220
- : resolveLogDumpPath(globals);
221
- const detachLog = logDumpPath !== undefined
222
- ? attachLoggerFileSink(logDumpPath, {
223
- commandLine: formatInvocationCommandLine(),
224
- version: readSnapshotCheckerVersion(),
225
- })
226
- : undefined;
227
- try {
228
- let scenarioGroups = mod.groups;
229
- let scenarioDefaultOrder = mod.defaultGroupOrder;
230
- if (!scenarioGroups || !scenarioDefaultOrder) {
231
- logger.error(`场景 "${commandName}" 的配置无效:需要同时导出 groups 与 defaultGroupOrder。`);
232
- process.exitCode = 1;
233
- return;
234
- }
235
- // 可选:基于已解析 CLI 重写 groups / defaultGroupOrder
236
- if (typeof mod.applyOptions === "function") {
237
- const transformed = mod.applyOptions({
238
- groups: scenarioGroups,
239
- defaultGroupOrder: scenarioDefaultOrder,
240
- options: buildApplyOptionsInput(opts, {
241
- hdcTarget: globals.hdcTarget,
242
- parseConcurrency: globals.parseConcurrency,
243
- }),
244
- });
245
- if (transformed?.groups) {
246
- scenarioGroups = transformed.groups;
247
- }
248
- if (transformed?.defaultGroupOrder) {
249
- scenarioDefaultOrder = transformed.defaultGroupOrder;
250
- }
251
- }
252
- const stopOnError = opts.stopOnError === true;
253
- // variadic 单参数时类型为 string,归一成 string[]
254
- const groupRaw = opts.group;
255
- const groupArray = Array.isArray(groupRaw)
256
- ? groupRaw
257
- : groupRaw !== undefined && groupRaw !== null
258
- ? [String(groupRaw)]
259
- : undefined;
260
- const specs = parseGroupSpecs(groupArray, scenarioDefaultOrder);
261
- const ignorePlatform = opts.ignorePlatform === true;
262
- if (ignorePlatform) {
263
- logger.warn("⚠️ 已启用 --ignore-platform:将执行全部 kind 的命令;Shell 类命令(含后台)依当前宿主系统自动选择执行器。Windows 专用语法在非 Windows 宿主上仍可能失败。");
264
- }
265
- const availableGroupNames = new Set(Object.keys(scenarioGroups));
266
- const unknownGroups = specs
267
- .map((s) => s.name)
268
- .filter((name) => !availableGroupNames.has(name));
269
- // `--list`:列出命令但不执行
270
- if (opts.list) {
271
- console.log(`\n[${commandName}] 场景命令(按 group 展示):\n`);
272
- if (unknownGroups.length > 0) {
273
- logger.warn(`未找到以下 group:${unknownGroups.join(", ")}`);
274
- logger.warn(`可用 group:${Array.from(availableGroupNames).join(", ") || "(无)"}`);
275
- console.log("");
276
- }
277
- let printedAnyGroup = false;
278
- for (const spec of specs) {
279
- if (printedAnyGroup) {
280
- console.log("");
281
- }
282
- printedAnyGroup = true;
283
- const groupCommands = scenarioGroups[spec.name] ?? [];
284
- if (groupCommands.length === 0) {
285
- console.log(`Group: ${spec.name}`);
286
- console.log(` (无命令)`);
287
- continue;
288
- }
289
- for (let round = 1; round <= Math.max(1, spec.repeat); round++) {
290
- if (round === 1) {
291
- console.log(`Group: ${spec.name}`);
292
- }
293
- if (spec.repeat > 1) {
294
- console.log(` Round: ${round}/${spec.repeat}`);
295
- }
296
- for (const c of groupCommands) {
297
- const text = getCommandTextForDisplay(c);
298
- const backgroundTag = getBackgroundTag(c);
299
- const desc = c.description != null && c.description !== ""
300
- ? ` — ${c.description}`
301
- : text
302
- ? ` — ${text}`
303
- : "";
304
- console.log(` [${formatCommandKindForLog(c, ignorePlatform)}]${backgroundTag} ${text || "(无命令)"}${desc}`);
305
- }
306
- }
307
- }
308
- if (!printedAnyGroup) {
309
- console.log("(未匹配到任何可用 group)");
310
- }
311
- console.log();
312
- return;
313
- }
314
- // `--dry-run`:打印将执行的命令序列,不写子进程
315
- if (opts.dryRun) {
316
- const chunks = getGroupChunks(scenarioGroups, specs, {
317
- ignorePlatform,
318
- });
319
- const commandsToRun = chunks.flatMap((chunk) => chunk.commands);
320
- console.log(`\n(dry-run) [${commandName}] 将要执行的命令:\n`);
321
- if (unknownGroups.length > 0) {
322
- logger.warn(`未找到以下 group:${unknownGroups.join(", ")}`);
323
- logger.warn(`可用 group:${Array.from(availableGroupNames).join(", ") || "(无)"}`);
324
- console.log("");
325
- }
326
- if (commandsToRun.length === 0) {
327
- console.log("(无可执行命令:请检查 group 名称或命令平台类型)");
328
- console.log("");
329
- return;
330
- }
331
- let cmdIndex = 0;
332
- for (const chunk of chunks) {
333
- const repeatSuffix = chunk.repeat > 1 ? `(${chunk.round}/${chunk.repeat})` : "";
334
- console.log(`\n [group] ${chunk.name}${repeatSuffix} — ${chunk.commands.length} 条命令`);
335
- for (const c of chunk.commands) {
336
- cmdIndex += 1;
337
- const text = getCommandTextForDisplay(c);
338
- const backgroundTag = getBackgroundTag(c);
339
- const desc = c.description != null && c.description !== ""
340
- ? ` — ${c.description}`
341
- : text
342
- ? ` — ${text}`
343
- : "";
344
- console.log(` ${cmdIndex}. [${formatCommandKindForLog(c, ignorePlatform)}]${backgroundTag} ${text || "(无命令)"}${desc}`);
345
- }
346
- }
347
- console.log("");
348
- return;
349
- }
350
- const intervalMs = Math.max(0, parseInt(opts.interval ?? "0", 10));
351
- const options = {
352
- stopOnError,
353
- silent: opts.silent ?? false,
354
- waitForBackground: opts.wait === true,
355
- ignorePlatform,
356
- intervalMs: intervalMs > 0 ? intervalMs : undefined,
357
- };
358
- const chunks = getGroupChunks(scenarioGroups, specs, {
359
- ignorePlatform,
360
- });
361
- const { failed } = await runGroupChunks(chunks, options);
362
- if (failed)
363
- process.exit(1);
364
- }
365
- finally {
366
- detachLog?.();
367
- }
368
- });
369
- }
370
- }
371
- }
11
+ const cliLogger = createModuleLogger(import.meta.url);
12
+ setLoggerHooks({
13
+ onQuietSilentAttach: () => {
14
+ setGlobalLogLevelFromCli("error");
15
+ },
16
+ onQuietSilentDetach: () => {
17
+ restoreBaselineLogLevel();
18
+ },
19
+ onGlobalLevelChange: (level) => {
20
+ setGlobalLogLevelFromCli(level);
21
+ },
22
+ });
372
23
  program
373
24
  .name("snapshot-checker")
374
25
  .description("顺序执行 bat / mac / shell 命令")
@@ -379,10 +30,54 @@ program
379
30
  .addOption(new Option("--hdc-target <sn>", "hdc -t 目标设备序列号;指定后全部 hdc 命令带 -t"))
380
31
  .addOption(new Option("--parse-concurrency <n>", "hiperf_txt_parser 解析/解码/写回并发 Worker 数,默认 1(串行,无 Worker 开销)").default(1));
381
32
  async function main() {
382
- await registerScenarioCommands(program);
33
+ await registerScenarios({
34
+ program: program,
35
+ scenarioDirs: [
36
+ {
37
+ dirPath: join(cliModuleDir, "..", "commands"),
38
+ displayPrefix: "commands",
39
+ },
40
+ {
41
+ dirPath: join(cliModuleDir, "..", "demos"),
42
+ displayPrefix: "demos",
43
+ },
44
+ ],
45
+ mergeScenarioOptions: (scenarioOpts, globals) => buildApplyOptionsInput(scenarioOpts, {
46
+ hdcTarget: globals.hdcTarget,
47
+ parseConcurrency: globals.parseConcurrency,
48
+ }),
49
+ onBeforeRun: async ({ globals, opts }) => {
50
+ const logFileOpt = globals.logFile;
51
+ const skipLogSinkOnList = opts.list === true &&
52
+ (logFileOpt === undefined ||
53
+ logFileOpt === true ||
54
+ (typeof logFileOpt === "string" && logFileOpt.trim() === ""));
55
+ const logDumpPath = skipLogSinkOnList
56
+ ? undefined
57
+ : resolveLogDumpPath(globals);
58
+ if (logDumpPath === undefined) {
59
+ return {};
60
+ }
61
+ const commandLine = formatInvocationCommandLine();
62
+ const version = readSnapshotCheckerVersion();
63
+ const detachChecker = attachLoggerFileSink(logDumpPath, {
64
+ commandLine,
65
+ version,
66
+ });
67
+ const detachTee = registerLogFilePathForTee(logDumpPath);
68
+ return {
69
+ detach: () => {
70
+ detachChecker();
71
+ detachTee();
72
+ },
73
+ };
74
+ },
75
+ logger: cliLogger,
76
+ });
383
77
  program.hook("preAction", (thisCommand) => {
384
78
  const { logLevel } = thisCommand.optsWithGlobals();
385
79
  setGlobalLogLevelFromCli(logLevel);
80
+ setRunnerLogLevelFromCli(logLevel);
386
81
  });
387
82
  await program.parseAsync();
388
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
- /** 对外导出:`run_command`、`run_groups` */
2
- export { executeOne, executeAll, finalizeBackgroundProcesses, isSupportedOnCurrentPlatform, } from "./run_command.js";
3
- export type { ExecuteAllOptions, ExecuteOneOptions } from "./run_command.js";
4
- export { getCommandsToRun, getCommandsToRunWithRepeat, getGroupChunks, runGroupChunks, type GroupChunk, type GroupSpec, } from "./run_groups.js";
5
- export type { RunGroupChunksOptions } from "./run_groups.js";
1
+ export { executeOne, executeAll, finalizeBackgroundProcesses, isSupportedOnCurrentPlatform, } from "hmcommand-runner";
2
+ export type { ExecuteAllOptions, ExecuteOneOptions } from "hmcommand-runner";
3
+ export { getCommandsToRun, getCommandsToRunWithRepeat, getGroupChunks, runGroupChunks, type GroupChunk, type GroupSpec, } from "hmcommand-runner";
4
+ export type { RunGroupChunksOptions } from "hmcommand-runner";
6
5
  //# sourceMappingURL=executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/executor.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EACL,UAAU,EACV,UAAU,EACV,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,cAAc,EACd,KAAK,UAAU,EACf,KAAK,SAAS,GACf,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,EACV,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,cAAc,EACd,KAAK,UAAU,EACf,KAAK,SAAS,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,4 +1,3 @@
1
- /** 对外导出:`run_command`、`run_groups` */
2
- export { executeOne, executeAll, finalizeBackgroundProcesses, isSupportedOnCurrentPlatform, } from "./run_command.js";
3
- export { getCommandsToRun, getCommandsToRunWithRepeat, getGroupChunks, runGroupChunks, } from "./run_groups.js";
1
+ export { executeOne, executeAll, finalizeBackgroundProcesses, isSupportedOnCurrentPlatform, } from "hmcommand-runner";
2
+ export { getCommandsToRun, getCommandsToRunWithRepeat, getGroupChunks, runGroupChunks, } from "hmcommand-runner";
4
3
  //# sourceMappingURL=executor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executor.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EACL,UAAU,EACV,UAAU,EACV,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,cAAc,GAGf,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,EACV,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,cAAc,EACd,cAAc,GAGf,MAAM,kBAAkB,CAAC"}
@@ -1,10 +1,2 @@
1
- /**
2
- * CLI `--group` 与场景默认组顺序之间的桥梁:把 argv 上的字符串解析成 {@link GroupSpec} 列表。
3
- *
4
- * 语法要点:
5
- * - 多条可拆在多个 argv,或写在一条里用逗号分隔;
6
- * - `name` 表示执行一次,`name:N` 表示该组重复 N 次(非法或小于 1 时按 1 处理)。
7
- */
8
- import type { GroupSpec } from "./run_groups.js";
9
- export declare function parseGroupSpecs(raw: string[] | undefined, defaultOrder: string[]): GroupSpec[];
1
+ export { parseGroupSpecs } from "hmcommand-runner";
10
2
  //# sourceMappingURL=group_specs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"group_specs.d.ts","sourceRoot":"","sources":["../../src/group_specs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EAAE,GAAG,SAAS,EACzB,YAAY,EAAE,MAAM,EAAE,GACrB,SAAS,EAAE,CA8Bb"}
1
+ {"version":3,"file":"group_specs.d.ts","sourceRoot":"","sources":["../../src/group_specs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,27 +1,2 @@
1
- export function parseGroupSpecs(raw, defaultOrder) {
2
- if (!raw || raw.length === 0) {
3
- return defaultOrder.map((name) => ({ name, repeat: 1 }));
4
- }
5
- const specs = [];
6
- for (const argvFragment of raw) {
7
- const commaSeparated = argvFragment.split(",");
8
- for (let i = 0; i < commaSeparated.length; i++) {
9
- const token = commaSeparated[i].trim();
10
- if (!token) {
11
- continue;
12
- }
13
- const colon = token.indexOf(":");
14
- if (colon === -1) {
15
- specs.push({ name: token, repeat: 1 });
16
- continue;
17
- }
18
- const name = token.slice(0, colon).trim();
19
- const repeatRaw = token.slice(colon + 1).trim();
20
- const parsed = parseInt(repeatRaw, 10);
21
- const repeat = Number.isNaN(parsed) || parsed < 1 ? 1 : parsed;
22
- specs.push({ name, repeat });
23
- }
24
- }
25
- return specs;
26
- }
1
+ export { parseGroupSpecs } from "hmcommand-runner";
27
2
  //# sourceMappingURL=group_specs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"group_specs.js","sourceRoot":"","sources":["../../src/group_specs.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,eAAe,CAC7B,GAAyB,EACzB,YAAsB;IAEtB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,KAAK,GAAgB,EAAE,CAAC;IAE9B,KAAK,MAAM,YAAY,IAAI,GAAG,EAAE,CAAC;QAC/B,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;gBACvC,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"group_specs.js","sourceRoot":"","sources":["../../src/group_specs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,7 +1,7 @@
1
- export { executeOne, executeAll, finalizeBackgroundProcesses, getCommandsToRun, getCommandsToRunWithRepeat, getGroupChunks, runGroupChunks, isSupportedOnCurrentPlatform, type GroupChunk, type GroupSpec, type RunGroupChunksOptions, type ExecuteAllOptions, } from "./executor.js";
2
- export { parseGroupSpecs } from "./group_specs.js";
1
+ export { executeOne, executeAll, finalizeBackgroundProcesses, getCommandsToRun, getCommandsToRunWithRepeat, getGroupChunks, runGroupChunks, isSupportedOnCurrentPlatform, type GroupChunk, type GroupSpec, type RunGroupChunksOptions, type ExecuteAllOptions, } from "hmcommand-runner";
2
+ export { parseGroupSpecs } from "hmcommand-runner";
3
3
  export { buildApplyOptionsInput, resolveScenario, runScenarioGroups, normalizeGroupCliArg, type ScenarioGlobalOptions, type ScenarioModuleLike, type RunScenarioGroupsInput, type RunScenarioGroupsResult, } from "./lib/scenario.js";
4
4
  export { createHdcCli, type HdcCli } from "./lib/hdc.js";
5
- export { CommandKind, createCommandContext, getCurrentPlatformKind } from "./types.js";
6
- export type { CommandContext, CommandDef, CommandResult, RunOptions, Groups, } from "./types.js";
5
+ export { CommandKind, createCommandContext, getCurrentPlatformKind } from "hmcommand-runner";
6
+ export type { CommandContext, CommandDef, CommandResult, RunOptions, Groups, } from "hmcommand-runner";
7
7
  //# sourceMappingURL=index.d.ts.map