snapshot-checker 0.2.2 → 0.3.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 (93) hide show
  1. package/README.md +103 -343
  2. package/dist/commands/forkall.d.ts +4 -12
  3. package/dist/commands/forkall.d.ts.map +1 -1
  4. package/dist/commands/forkall.js +46 -23
  5. package/dist/commands/forkall.js.map +1 -1
  6. package/dist/commands/report.d.ts +7 -0
  7. package/dist/commands/report.d.ts.map +1 -1
  8. package/dist/commands/report.js +133 -32
  9. package/dist/commands/report.js.map +1 -1
  10. package/dist/demos/context-demo.d.ts +10 -0
  11. package/dist/demos/context-demo.d.ts.map +1 -0
  12. package/dist/{commands/context_demo.js → demos/context-demo.js} +15 -18
  13. package/dist/demos/context-demo.js.map +1 -0
  14. package/dist/{commands → demos}/mac-example.d.ts +1 -3
  15. package/dist/demos/mac-example.d.ts.map +1 -0
  16. package/dist/{commands → demos}/mac-example.js +2 -4
  17. package/dist/demos/mac-example.js.map +1 -0
  18. package/dist/{commands/timeout_demo.d.ts → demos/timeout-demo.d.ts} +2 -2
  19. package/dist/demos/timeout-demo.d.ts.map +1 -0
  20. package/dist/demos/timeout-demo.js +35 -0
  21. package/dist/demos/timeout-demo.js.map +1 -0
  22. package/dist/src/cli.js +209 -169
  23. package/dist/src/cli.js.map +1 -1
  24. package/dist/src/executor.d.ts +1 -3
  25. package/dist/src/executor.d.ts.map +1 -1
  26. package/dist/src/executor.js +1 -3
  27. package/dist/src/executor.js.map +1 -1
  28. package/dist/src/groupSpecs.d.ts +1 -4
  29. package/dist/src/groupSpecs.d.ts.map +1 -1
  30. package/dist/src/groupSpecs.js.map +1 -1
  31. package/dist/src/index.d.ts +1 -1
  32. package/dist/src/index.d.ts.map +1 -1
  33. package/dist/src/index.js +1 -1
  34. package/dist/src/index.js.map +1 -1
  35. package/dist/src/lib/{common_groups.d.ts → presets.d.ts} +13 -2
  36. package/dist/src/lib/presets.d.ts.map +1 -0
  37. package/dist/src/lib/{common_groups.js → presets.js} +66 -24
  38. package/dist/src/lib/presets.js.map +1 -0
  39. package/dist/src/lib/{programmatic.d.ts → scenario.d.ts} +9 -11
  40. package/dist/src/lib/scenario.d.ts.map +1 -0
  41. package/dist/src/lib/{programmatic.js → scenario.js} +6 -10
  42. package/dist/src/lib/scenario.js.map +1 -0
  43. package/dist/src/logger.d.ts +23 -0
  44. package/dist/src/logger.d.ts.map +1 -0
  45. package/dist/src/logger.js +92 -0
  46. package/dist/src/logger.js.map +1 -0
  47. package/dist/src/runCommand.d.ts +27 -35
  48. package/dist/src/runCommand.d.ts.map +1 -1
  49. package/dist/src/runCommand.js +81 -70
  50. package/dist/src/runCommand.js.map +1 -1
  51. package/dist/src/runGroups.d.ts +6 -12
  52. package/dist/src/runGroups.d.ts.map +1 -1
  53. package/dist/src/runGroups.js +14 -19
  54. package/dist/src/runGroups.js.map +1 -1
  55. package/dist/src/runners/builtinFunctionRunner.d.ts +1 -0
  56. package/dist/src/runners/builtinFunctionRunner.d.ts.map +1 -1
  57. package/dist/src/runners/builtinFunctionRunner.js +5 -12
  58. package/dist/src/runners/builtinFunctionRunner.js.map +1 -1
  59. package/dist/src/runners/embedRunner.d.ts +1 -0
  60. package/dist/src/runners/embedRunner.d.ts.map +1 -1
  61. package/dist/src/runners/embedRunner.js +5 -1
  62. package/dist/src/runners/embedRunner.js.map +1 -1
  63. package/dist/src/runners/shellRunner.d.ts +1 -0
  64. package/dist/src/runners/shellRunner.d.ts.map +1 -1
  65. package/dist/src/runners/shellRunner.js +40 -8
  66. package/dist/src/runners/shellRunner.js.map +1 -1
  67. package/dist/src/runners/types.d.ts +9 -0
  68. package/dist/src/runners/types.d.ts.map +1 -1
  69. package/dist/src/types.d.ts +47 -77
  70. package/dist/src/types.d.ts.map +1 -1
  71. package/dist/src/types.js +37 -10
  72. package/dist/src/types.js.map +1 -1
  73. package/package.json +10 -3
  74. package/dist/commands/context_demo.d.ts +0 -18
  75. package/dist/commands/context_demo.d.ts.map +0 -1
  76. package/dist/commands/context_demo.js.map +0 -1
  77. package/dist/commands/mac-example.d.ts.map +0 -1
  78. package/dist/commands/mac-example.js.map +0 -1
  79. package/dist/commands/timeout_demo.d.ts.map +0 -1
  80. package/dist/commands/timeout_demo.js +0 -48
  81. package/dist/commands/timeout_demo.js.map +0 -1
  82. package/dist/src/lib/common_groups.d.ts.map +0 -1
  83. package/dist/src/lib/common_groups.js.map +0 -1
  84. package/dist/src/lib/foo.d.ts +0 -3
  85. package/dist/src/lib/foo.d.ts.map +0 -1
  86. package/dist/src/lib/foo.js +0 -7
  87. package/dist/src/lib/foo.js.map +0 -1
  88. package/dist/src/lib/programmatic.d.ts.map +0 -1
  89. package/dist/src/lib/programmatic.js.map +0 -1
  90. package/dist/src/lib/trace_formatter.d.ts +0 -9
  91. package/dist/src/lib/trace_formatter.d.ts.map +0 -1
  92. package/dist/src/lib/trace_formatter.js +0 -148
  93. package/dist/src/lib/trace_formatter.js.map +0 -1
@@ -32,9 +32,15 @@ export declare function decodeRawPerfDataAndWriteOutputs(input: {
32
32
  inputFilePath: string;
33
33
  dumpStackTxt: string;
34
34
  dumpStackJson: string;
35
+ dumpStackXlsx: string;
35
36
  traceFormatProfile: string;
36
37
  stageName: string;
37
- }): boolean;
38
+ skipDedupePerfData?: boolean;
39
+ /** 解码 trace 后是否执行 {@link associateFsVfs}(在 dedupe 之前) */
40
+ runAssociateFsVfs?: boolean;
41
+ /** 传入 {@link decodePerfRawData}:丢弃有 raw 但无对应 trace 解析器的样本 */
42
+ dropFailedSamples?: boolean;
43
+ }): Promise<boolean>;
38
44
  type DecodeInputConfig = {
39
45
  inputFilePath: string;
40
46
  inputContextKey?: never;
@@ -50,9 +56,14 @@ export declare function buildCommonAnalysisGroup(input: {
50
56
  decodeInput: DecodeInputConfig;
51
57
  dumpStackTxt: string;
52
58
  dumpStackJson: string;
59
+ dumpStackXlsx: string;
53
60
  traceFormatProfile: string;
54
61
  decodeStageName: string;
55
62
  missingInputMessage: string;
63
+ skipDedupePerfData?: boolean;
64
+ runAssociateFsVfs?: boolean;
65
+ /** 传入 {@link decodePerfRawData}:丢弃有 raw 但无对应 trace 解析器的样本 */
66
+ dropFailedSamples?: boolean;
56
67
  }): CommandDef[];
57
68
  export {};
58
- //# sourceMappingURL=common_groups.d.ts.map
69
+ //# sourceMappingURL=presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/lib/presets.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,aAAa,CAAC;AAa9D,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAc/D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B,GAAG,UAAU,EAAE,CAkDf;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6BAA6B,EAAE,MAAM,CAAC;IACtC,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,UAAU,EAAE,CAmBf;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,OAAO,CAAC;CAC/B,GAAG,UAAU,EAAE,CA0Df;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,QAAQ,GAAG,SAAS,CAavB;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACvD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAYA;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CASA;AAED,wBAAsB,gCAAgC,CAAC,KAAK,EAAE;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,OAAO,CAAC,OAAO,CAAC,CAsFnB;AAED,KAAK,iBAAiB,GAClB;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,KAAK,CAAA;CAAE,GAClD;IAAE,aAAa,CAAC,EAAE,KAAK,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,UAAU,EAAE,CAAC;IACjC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,UAAU,EAAE,CAmDf"}
@@ -1,7 +1,14 @@
1
+ /** forkall / report 等场景复用的命令组拼装与 perf 解码辅助 */
2
+ import { logger } from "../logger.js";
1
3
  import { CommandKind } from "../types.js";
2
4
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
3
- import { buildTraceParserRegistry, decodePerfRawData, filterByTgid, formatPerfDataToJson, formatPerfDataToText, parsePerfData, toBackTraceStacks, } from "hiperf_txt_parser";
4
- import { getTraceEventFormatProfiles, getTraceEventFormats, } from "./trace_formatter.js";
5
+ import { buildTraceParserRegistry, decodePerfRawData, dedupePerfData, filterByTgid, formatPerfDataToExcel, formatPerfDataToJson, formatPerfDataToText, parsePerfData, toBackTraceStacks, } from "hiperf_txt_parser";
6
+ import { associateFsVfs, getTraceEventFormatProfiles, getTraceEventFormats, setHmtraceLogger, } from "hmtrace-parser";
7
+ setHmtraceLogger({
8
+ trace: (msg) => logger.trace(msg),
9
+ debug: (msg) => logger.debug(msg),
10
+ info: (msg) => logger.info(msg),
11
+ });
5
12
  export function buildCommonInitEnvGroup(input) {
6
13
  const { app, snapshotLogFile, checkStateCommand, permissionCommands } = input;
7
14
  const permissionDefs = permissionCommands.map((run) => ({
@@ -37,7 +44,7 @@ export function buildCommonInitEnvGroup(input) {
37
44
  {
38
45
  kind: CommandKind.Windows,
39
46
  description: "删除应用镜像",
40
- run: `hdc shell hidumper -s 1901 -a '-p libforkall_plugin.z.so --delete ${app}'`,
47
+ run: `hdc shell "hidumper -s 1901 -a '-p libforkall_plugin.z.so --destroy 100 ${app}'"`,
41
48
  },
42
49
  {
43
50
  kind: CommandKind.Windows,
@@ -47,7 +54,7 @@ export function buildCommonInitEnvGroup(input) {
47
54
  {
48
55
  kind: CommandKind.Windows,
49
56
  description: "配置模式开关",
50
- run: 'hdc shell "echo 1:0000 > /proc/checkpoint/revoke_switch && echo checkout_witch "',
57
+ run: 'hdc shell "echo 0:0000 > /proc/checkpoint/revoke_switch && echo 1:0000 > /proc/checkpoint/revoke_switch && echo 2:0000 > /proc/checkpoint/revoke_switch && cat /proc/checkpoint/revoke_switch"',
51
58
  },
52
59
  ...permissionDefs,
53
60
  ];
@@ -88,24 +95,24 @@ export function buildCommonAnalysisTargetFilterGroup(input) {
88
95
  func: (ctx) => {
89
96
  const targetTgidRaw = ctx.get("target_tgid");
90
97
  if (!targetTgidRaw) {
91
- console.warn("[过滤目标数据] 未获取到 target_tgid,跳过数据过滤");
98
+ logger.warn("[过滤目标数据] 未获取到 target_tgid,跳过数据过滤");
92
99
  return false;
93
100
  }
94
101
  const targetTgid = parseInt(targetTgidRaw, 10);
95
102
  if (Number.isNaN(targetTgid)) {
96
- console.error(`[过滤目标数据] target_tgid 非法: ${targetTgidRaw}`);
103
+ logger.error(`[过滤目标数据] target_tgid 非法: ${targetTgidRaw}`);
97
104
  return false;
98
105
  }
99
106
  try {
100
107
  if (!existsSync(snapshotPerfFile)) {
101
- console.warn(`[过滤目标数据] 输入文件不存在,跳过处理: ${snapshotPerfFile}`);
108
+ logger.warn(`[过滤目标数据] 输入文件不存在,跳过处理: ${snapshotPerfFile}`);
102
109
  return false;
103
110
  }
104
111
  const inputText = readFileSync(snapshotPerfFile, "utf-8");
105
112
  const recordSamples = parsePerfData(inputText);
106
113
  const filteredRecordSamples = filterByTgid(recordSamples, targetTgid);
107
114
  if (filteredRecordSamples.recordSamples.length === 0) {
108
- console.error(`[过滤目标数据] filterByTgid 后无样本数据(tgid=${targetTgid}),终止流程`);
115
+ logger.error(`[过滤目标数据] filterByTgid 后无样本数据(tgid=${targetTgid}),终止流程`);
109
116
  return false;
110
117
  }
111
118
  const samplesToWrite = writeBacktraceStacks
@@ -113,10 +120,10 @@ export function buildCommonAnalysisTargetFilterGroup(input) {
113
120
  : filteredRecordSamples;
114
121
  const filteredRecordSamplesTxt = formatPerfDataToText(samplesToWrite);
115
122
  writeFileSync(snapshotPerfFile, filteredRecordSamplesTxt, "utf-8");
116
- console.info(`[过滤目标数据] 处理完成并写回文件: ${snapshotPerfFile}`);
123
+ logger.info(`[过滤目标数据] 处理完成并写回文件: ${snapshotPerfFile}`);
117
124
  }
118
125
  catch (error) {
119
- console.error(`[过滤目标数据] 处理失败: ${snapshotPerfFile}`, error);
126
+ logger.error(`[过滤目标数据] 处理失败: ${snapshotPerfFile}`, error);
120
127
  return false;
121
128
  }
122
129
  },
@@ -126,7 +133,7 @@ export function buildCommonAnalysisTargetFilterGroup(input) {
126
133
  export function readPerfDataOrWarn(input) {
127
134
  const { filePath, stageName } = input;
128
135
  if (!existsSync(filePath)) {
129
- console.warn(`[${stageName}] 输入文件不存在,跳过处理: ${filePath}`);
136
+ logger.warn(`[${stageName}] 输入文件不存在,跳过处理: ${filePath}`);
130
137
  return undefined;
131
138
  }
132
139
  try {
@@ -134,7 +141,7 @@ export function readPerfDataOrWarn(input) {
134
141
  return parsePerfData(inputText);
135
142
  }
136
143
  catch (error) {
137
- console.error(`[${stageName}] 读取或解析失败: ${filePath}`, error);
144
+ logger.error(`[${stageName}] 读取或解析失败: ${filePath}`, error);
138
145
  return undefined;
139
146
  }
140
147
  }
@@ -158,19 +165,19 @@ export function selectFirstValidPerfInput(candidates) {
158
165
  if (valid) {
159
166
  return { filePath };
160
167
  }
161
- console.warn(`[选择 perf 输入] 跳过文件: ${filePath},原因: ${reason}`);
168
+ logger.warn(`[选择 perf 输入] 跳过文件: ${filePath},原因: ${reason}`);
162
169
  }
163
170
  return { reason: "未找到可用 perf 输入文件" };
164
171
  }
165
- export function decodeRawPerfDataAndWriteOutputs(input) {
166
- const { inputFilePath, dumpStackTxt, dumpStackJson, traceFormatProfile, stageName, } = input;
172
+ export async function decodeRawPerfDataAndWriteOutputs(input) {
173
+ const { inputFilePath, dumpStackTxt, dumpStackJson, dumpStackXlsx, traceFormatProfile, stageName, skipDedupePerfData = false, runAssociateFsVfs = false, dropFailedSamples = false, } = input;
167
174
  try {
168
175
  const availableProfiles = getTraceEventFormatProfiles();
169
176
  const selectedProfile = availableProfiles.includes(traceFormatProfile)
170
177
  ? traceFormatProfile
171
178
  : "default";
172
179
  if (selectedProfile !== traceFormatProfile) {
173
- console.warn(`[${stageName}] 未识别 trace-format-profile="${traceFormatProfile}",已回退到 default`);
180
+ logger.warn(`[${stageName}] 未识别 trace-format-profile="${traceFormatProfile}",已回退到 default`);
174
181
  }
175
182
  const traceParser = buildTraceParserRegistry(getTraceEventFormats(selectedProfile));
176
183
  const recordSamples = readPerfDataOrWarn({
@@ -182,21 +189,52 @@ export function decodeRawPerfDataAndWriteOutputs(input) {
182
189
  }
183
190
  const parsedRecordSamples = decodePerfRawData(recordSamples, traceParser, {
184
191
  tracePrintMode: "fieldDict",
192
+ dropFailedSamples,
185
193
  });
186
- const recordSamplesJson = formatPerfDataToJson(parsedRecordSamples);
187
- const recordSamplesTxt = formatPerfDataToText(parsedRecordSamples);
194
+ let dataForDedupe = parsedRecordSamples;
195
+ if (runAssociateFsVfs) {
196
+ const [associatedSamples] = associateFsVfs(parsedRecordSamples);
197
+ dataForDedupe = {
198
+ ...parsedRecordSamples,
199
+ recordSamples: [...associatedSamples],
200
+ };
201
+ }
202
+ const dedupedPerfData = skipDedupePerfData
203
+ ? dataForDedupe
204
+ : dedupePerfData(dataForDedupe, {
205
+ onEnd: (s) => {
206
+ logger.info(`[${stageName}] perf 去重: input=${s.input}, removed=${s.removed}, remaining=${s.remaining}`);
207
+ },
208
+ });
209
+ const recordSamplesJson = formatPerfDataToJson(dedupedPerfData);
210
+ const recordSamplesTxt = formatPerfDataToText(dedupedPerfData);
188
211
  writeFileSync(dumpStackJson, JSON.stringify(recordSamplesJson, null, 2), "utf-8");
189
212
  writeFileSync(dumpStackTxt, recordSamplesTxt, "utf-8");
190
- console.info(`[${stageName}] 分析完成,格式版本: ${selectedProfile},输出文件: ${dumpStackJson}, ${dumpStackTxt}`);
213
+ const outputPaths = [dumpStackJson, dumpStackTxt];
214
+ if (dedupedPerfData.recordSamples.length === 0) {
215
+ logger.info(`[${stageName}] 无样本数据,跳过 Excel 导出`);
216
+ }
217
+ else {
218
+ try {
219
+ const xlsxBuffer = await formatPerfDataToExcel(dedupedPerfData);
220
+ writeFileSync(dumpStackXlsx, xlsxBuffer);
221
+ outputPaths.push(dumpStackXlsx);
222
+ }
223
+ catch (error) {
224
+ const message = error instanceof Error ? error.message : String(error);
225
+ logger.warn(`[${stageName}] Excel 导出未写入(${message})`, error);
226
+ }
227
+ }
228
+ logger.info(`[${stageName}] 分析完成,格式版本: ${selectedProfile},输出文件: ${outputPaths.join(", ")}`);
191
229
  return true;
192
230
  }
193
231
  catch (error) {
194
- console.error(`[${stageName}] 处理失败`, error);
232
+ logger.error(`[${stageName}] 处理失败`, error);
195
233
  return false;
196
234
  }
197
235
  }
198
236
  export function buildCommonAnalysisGroup(input) {
199
- const { app, snapshotPerfFile, writeBacktraceStacks, preDecodeCommands = [], decodeInput, dumpStackTxt, dumpStackJson, traceFormatProfile, decodeStageName, missingInputMessage, } = input;
237
+ const { app, snapshotPerfFile, writeBacktraceStacks, preDecodeCommands = [], decodeInput, dumpStackTxt, dumpStackJson, dumpStackXlsx, traceFormatProfile, decodeStageName, missingInputMessage, skipDedupePerfData = false, runAssociateFsVfs = false, dropFailedSamples = false, } = input;
200
238
  const targetFilterGroup = buildCommonAnalysisTargetFilterGroup({
201
239
  app,
202
240
  snapshotPerfFile,
@@ -205,23 +243,27 @@ export function buildCommonAnalysisGroup(input) {
205
243
  const decodeCommand = {
206
244
  kind: CommandKind.BuiltinFunction,
207
245
  description: decodeStageName,
208
- func: (ctx) => {
246
+ func: async (ctx) => {
209
247
  const inputFilePath = decodeInput.inputContextKey != null
210
248
  ? ctx.get(decodeInput.inputContextKey)
211
249
  : decodeInput.inputFilePath;
212
250
  if (!inputFilePath) {
213
- console.warn(missingInputMessage);
251
+ logger.warn(missingInputMessage);
214
252
  return false;
215
253
  }
216
254
  return decodeRawPerfDataAndWriteOutputs({
217
255
  inputFilePath,
218
256
  dumpStackTxt,
219
257
  dumpStackJson,
258
+ dumpStackXlsx,
220
259
  traceFormatProfile,
221
260
  stageName: decodeStageName,
261
+ skipDedupePerfData,
262
+ runAssociateFsVfs,
263
+ dropFailedSamples,
222
264
  });
223
265
  },
224
266
  };
225
267
  return [...targetFilterGroup, ...preDecodeCommands, decodeCommand];
226
268
  }
227
- //# sourceMappingURL=common_groups.js.map
269
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../src/lib/presets.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { GroupSpec } from "../runGroups.js";
2
2
  import type { CommandResult, Groups } from "../types.js";
3
- /** 与 commands/*.ts 场景模块兼容的最小形状 */
3
+ /** 与 `commands/*.ts` 场景模块导出面兼容的最小接口 */
4
4
  export interface ScenarioModuleLike {
5
5
  groups: Groups;
6
6
  defaultGroupOrder: string[];
@@ -13,13 +13,9 @@ export interface ScenarioModuleLike {
13
13
  defaultGroupOrder?: string[];
14
14
  } | void;
15
15
  }
16
- /**
17
- * 将 Commander 的 variadic --group 规范为 string[](单参时可能是单个字符串)。
18
- */
16
+ /** 将 Commander 的 variadic `--group` 归一化为 `string[]`(单参数时可能为单个字符串) */
19
17
  export declare function normalizeGroupCliArg(groupRaw: string[] | string | undefined): string[] | undefined;
20
- /**
21
- * 若场景导出 applyOptions,则根据 scenarioOptions 得到最终 groups / defaultGroupOrder。
22
- */
18
+ /** 若模块导出 `applyOptions`,则按 `scenarioOptions` 生成最终的 `groups` 与 `defaultGroupOrder` */
23
19
  export declare function resolveScenario(mod: ScenarioModuleLike, scenarioOptions?: Record<string, unknown>): {
24
20
  groups: Groups;
25
21
  defaultGroupOrder: string[];
@@ -27,14 +23,16 @@ export declare function resolveScenario(mod: ScenarioModuleLike, scenarioOptions
27
23
  export interface RunScenarioGroupsInput {
28
24
  groups: Groups;
29
25
  defaultGroupOrder: string[];
30
- /** 等价 CLI -g/--group,不传则按 defaultGroupOrder 顺序各执行 1 次 */
26
+ /** CLI `-g` / `--group` 相同;缺省时按 `defaultGroupOrder` 各执行一次 */
31
27
  group?: string[] | string;
32
- /** 直接指定组规格时优先于 group / defaultGroupOrder 的默认展开 */
28
+ /** 显式组规格时覆盖由 `group` `defaultGroupOrder` 推导的结果 */
33
29
  groupSpecs?: GroupSpec[];
34
30
  ignorePlatform?: boolean;
35
31
  stopOnError?: boolean;
32
+ /** 见 `RunOptions.silent` */
36
33
  silent?: boolean;
37
34
  waitForBackground?: boolean;
35
+ /** 见 `RunOptions.intervalMs` */
38
36
  intervalMs?: number;
39
37
  }
40
38
  export interface RunScenarioGroupsResult {
@@ -42,7 +40,7 @@ export interface RunScenarioGroupsResult {
42
40
  failed: boolean;
43
41
  }
44
42
  /**
45
- * 按组规格执行命令(与 CLI list/dry-run 路径一致)。
43
+ * 按组规格执行命令;语义与 CLI 在排除 `--list`、`--dry-run` 时的执行路径一致。
46
44
  */
47
45
  export declare function runScenarioGroups(input: RunScenarioGroupsInput): Promise<RunScenarioGroupsResult>;
48
- //# sourceMappingURL=programmatic.d.ts.map
46
+ //# sourceMappingURL=scenario.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario.d.ts","sourceRoot":"","sources":["../../../src/lib/scenario.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEzD,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,KAAK;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC9B,GAAG,IAAI,CAAC;CACV;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,GACtC,MAAM,EAAE,GAAG,SAAS,CAGtB;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAC7B,GAAG,EAAE,kBAAkB,EACvB,eAAe,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAC5C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAAE,CAcjD;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1B,oDAAoD;IACpD,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CA2BlC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * 程序化 API:在代码中复用与 CLI 相同的场景解析与组执行能力。
2
+ * 编程方式复用 CLI 的场景解析与按组执行逻辑。
3
3
  *
4
- * 典型用法:
4
+ * 示例:
5
5
  * ```ts
6
6
  * import { resolveScenario, runScenarioGroups } from 'snapshot-checker';
7
7
  * import * as report from './commands/report.js';
@@ -16,17 +16,13 @@
16
16
  */
17
17
  import { getGroupChunks, runGroupChunks, } from "../runGroups.js";
18
18
  import { parseGroupSpecs } from "../groupSpecs.js";
19
- /**
20
- * 将 Commander 的 variadic --group 规范为 string[](单参时可能是单个字符串)。
21
- */
19
+ /** 将 Commander 的 variadic `--group` 归一化为 `string[]`(单参数时可能为单个字符串) */
22
20
  export function normalizeGroupCliArg(groupRaw) {
23
21
  if (groupRaw === undefined || groupRaw === null)
24
22
  return undefined;
25
23
  return Array.isArray(groupRaw) ? groupRaw : [String(groupRaw)];
26
24
  }
27
- /**
28
- * 若场景导出 applyOptions,则根据 scenarioOptions 得到最终 groups / defaultGroupOrder。
29
- */
25
+ /** 若模块导出 `applyOptions`,则按 `scenarioOptions` 生成最终的 `groups` 与 `defaultGroupOrder` */
30
26
  export function resolveScenario(mod, scenarioOptions = {}) {
31
27
  let groups = mod.groups;
32
28
  let defaultGroupOrder = mod.defaultGroupOrder;
@@ -44,7 +40,7 @@ export function resolveScenario(mod, scenarioOptions = {}) {
44
40
  return { groups, defaultGroupOrder };
45
41
  }
46
42
  /**
47
- * 按组规格执行命令(与 CLI list/dry-run 路径一致)。
43
+ * 按组规格执行命令;语义与 CLI 在排除 `--list`、`--dry-run` 时的执行路径一致。
48
44
  */
49
45
  export async function runScenarioGroups(input) {
50
46
  const { groups, defaultGroupOrder, group, groupSpecs: explicitSpecs, ignorePlatform = false, stopOnError = false, silent = false, waitForBackground = false, intervalMs, } = input;
@@ -60,4 +56,4 @@ export async function runScenarioGroups(input) {
60
56
  };
61
57
  return runGroupChunks(chunks, options);
62
58
  }
63
- //# sourceMappingURL=programmatic.js.map
59
+ //# sourceMappingURL=scenario.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario.js","sourceRoot":"","sources":["../../../src/lib/scenario.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EACL,cAAc,EACd,cAAc,GAEf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAiBnD,qEAAqE;AACrE,MAAM,UAAU,oBAAoB,CAClC,QAAuC;IAEvC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAClE,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,eAAe,CAC7B,GAAuB,EACvB,kBAA2C,EAAE;IAE7C,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IACxB,IAAI,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAC;IAC9C,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC;YACnC,MAAM;YACN,iBAAiB;YACjB,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;QACH,IAAI,WAAW,EAAE,MAAM;YAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QACrD,IAAI,WAAW,EAAE,iBAAiB;YAChC,iBAAiB,GAAG,WAAW,CAAC,iBAAiB,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;AACvC,CAAC;AAuBD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAA6B;IAE7B,MAAM,EACJ,MAAM,EACN,iBAAiB,EACjB,KAAK,EACL,UAAU,EAAE,aAAa,EACzB,cAAc,GAAG,KAAK,EACtB,WAAW,GAAG,KAAK,EACnB,MAAM,GAAG,KAAK,EACd,iBAAiB,GAAG,KAAK,EACzB,UAAU,GACX,GAAG,KAAK,CAAC;IAEV,MAAM,KAAK,GACT,aAAa;QACb,eAAe,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;IACjE,MAAM,OAAO,GAA0B;QACrC,WAAW;QACX,MAAM;QACN,iBAAiB;QACjB,cAAc;QACd,UAAU,EACR,UAAU,KAAK,SAAS,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;KACtE,CAAC;IACF,OAAO,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 工具侧结构化日志;子进程标准流由 Shell 等 Runner 与 `streamOutput` 控制。
3
+ *
4
+ * 默认级别由 `SNAPSHOT_CHECKER_LOG_LEVEL` 或 `LOG_LEVEL` 给出(与 `hiperf_txt_parser` 同名枚举;未识别时回退为 `info`),并与 {@link setHiperfLogLevel} 对齐。
5
+ * CLI 全局 `--log-level` 通过 {@link setGlobalLogLevelFromCli} 覆盖该基准(直至进程退出)。
6
+ */
7
+ import { type ConsolaInstance } from "consola";
8
+ import { type HiperfLogLevelName } from "hiperf_txt_parser";
9
+ /** 与 `hiperf_txt_parser` 一致的合法级别(供 CLI choices 与环境解析共用) */
10
+ export declare const SNAPSHOT_CHECKER_LOG_LEVEL_CHOICES: readonly HiperfLogLevelName[];
11
+ /**
12
+ * 由 CLI 全局 `--log-level` 在子命令 `preAction` 中调用,覆盖环境变量给出的基准。
13
+ */
14
+ export declare function setGlobalLogLevelFromCli(level: string | undefined): void;
15
+ /**
16
+ * 按 `silent` 进入嵌套静默:将日志与 `hiperf_txt_parser` 限制为 `error`,可多次嵌套计数。
17
+ *
18
+ * @returns 结束当前作用域时须调用的恢复函数。
19
+ */
20
+ export declare function attachQuietSilent(silent: boolean): () => void;
21
+ /** 全局共享的 Consola 实例;未处于 {@link attachQuietSilent} 时与 {@link baselineLevelName} 一致 */
22
+ export declare const logger: ConsolaInstance;
23
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,2DAA2D;AAC3D,eAAO,MAAM,kCAAkC,EAAE,SAAS,kBAAkB,EAOlE,CAAC;AAsCX;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAUxE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,CAmB7D;AAED,qFAAqF;AACrF,eAAO,MAAM,MAAM,EAAE,eAEnB,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * 工具侧结构化日志;子进程标准流由 Shell 等 Runner 与 `streamOutput` 控制。
3
+ *
4
+ * 默认级别由 `SNAPSHOT_CHECKER_LOG_LEVEL` 或 `LOG_LEVEL` 给出(与 `hiperf_txt_parser` 同名枚举;未识别时回退为 `info`),并与 {@link setHiperfLogLevel} 对齐。
5
+ * CLI 全局 `--log-level` 通过 {@link setGlobalLogLevelFromCli} 覆盖该基准(直至进程退出)。
6
+ */
7
+ import { createConsola, LogLevels } from "consola";
8
+ import { setHiperfLogLevel, } from "hiperf_txt_parser";
9
+ /** 与 `hiperf_txt_parser` 一致的合法级别(供 CLI choices 与环境解析共用) */
10
+ export const SNAPSHOT_CHECKER_LOG_LEVEL_CHOICES = [
11
+ "silent",
12
+ "error",
13
+ "warn",
14
+ "info",
15
+ "debug",
16
+ "trace",
17
+ ];
18
+ function resolveHiperfLevelNameFromEnv() {
19
+ const raw = (process.env.SNAPSHOT_CHECKER_LOG_LEVEL ??
20
+ process.env.LOG_LEVEL ??
21
+ "info")
22
+ .trim()
23
+ .toLowerCase();
24
+ return SNAPSHOT_CHECKER_LOG_LEVEL_CHOICES.includes(raw)
25
+ ? raw
26
+ : "info";
27
+ }
28
+ /** 基准级别:初始为环境变量;可被 {@link setGlobalLogLevelFromCli} 覆盖(不含 {@link attachQuietSilent} 嵌套降噪) */
29
+ let baselineLevelName = resolveHiperfLevelNameFromEnv();
30
+ setHiperfLogLevel(baselineLevelName);
31
+ const LEVEL_TO_CONSOLA = {
32
+ silent: LogLevels.silent,
33
+ error: LogLevels.error,
34
+ warn: LogLevels.warn,
35
+ info: LogLevels.info,
36
+ debug: LogLevels.debug,
37
+ trace: LogLevels.trace,
38
+ };
39
+ /** `RunOptions.silent` / CLI `-s` 时与 consola、`hiperf_txt_parser` 对齐的静默级别标识 */
40
+ const QUIET_HIPEXF_NAME = "error";
41
+ let quietSilentDepth = 0;
42
+ /** 恢复 {@link baselineLevelName},并同步 `hiperf_txt_parser`。 */
43
+ function applySyncedLevels() {
44
+ logger.level = LEVEL_TO_CONSOLA[baselineLevelName];
45
+ setHiperfLogLevel(baselineLevelName);
46
+ }
47
+ /**
48
+ * 由 CLI 全局 `--log-level` 在子命令 `preAction` 中调用,覆盖环境变量给出的基准。
49
+ */
50
+ export function setGlobalLogLevelFromCli(level) {
51
+ if (level === undefined || level === "")
52
+ return;
53
+ const raw = level.trim().toLowerCase();
54
+ if (!SNAPSHOT_CHECKER_LOG_LEVEL_CHOICES.includes(raw)) {
55
+ return;
56
+ }
57
+ baselineLevelName = raw;
58
+ if (quietSilentDepth === 0) {
59
+ applySyncedLevels();
60
+ }
61
+ }
62
+ /**
63
+ * 按 `silent` 进入嵌套静默:将日志与 `hiperf_txt_parser` 限制为 `error`,可多次嵌套计数。
64
+ *
65
+ * @returns 结束当前作用域时须调用的恢复函数。
66
+ */
67
+ export function attachQuietSilent(silent) {
68
+ if (!silent) {
69
+ return () => { };
70
+ }
71
+ quietSilentDepth += 1;
72
+ if (quietSilentDepth === 1) {
73
+ logger.level = LogLevels.error;
74
+ setHiperfLogLevel(QUIET_HIPEXF_NAME);
75
+ }
76
+ let done = false;
77
+ return () => {
78
+ if (done)
79
+ return;
80
+ done = true;
81
+ quietSilentDepth -= 1;
82
+ if (quietSilentDepth <= 0) {
83
+ quietSilentDepth = 0;
84
+ applySyncedLevels();
85
+ }
86
+ };
87
+ }
88
+ /** 全局共享的 Consola 实例;未处于 {@link attachQuietSilent} 时与 {@link baselineLevelName} 一致 */
89
+ export const logger = createConsola({
90
+ level: LEVEL_TO_CONSOLA[baselineLevelName],
91
+ });
92
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAwB,MAAM,SAAS,CAAC;AACzE,OAAO,EACL,iBAAiB,GAElB,MAAM,mBAAmB,CAAC;AAE3B,2DAA2D;AAC3D,MAAM,CAAC,MAAM,kCAAkC,GAAkC;IAC/E,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;CACC,CAAC;AAEX,SAAS,6BAA6B;IACpC,MAAM,GAAG,GAAG,CACV,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACtC,OAAO,CAAC,GAAG,CAAC,SAAS;QACrB,MAAM,CACP;SACE,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;IACjB,OAAQ,kCAAwD,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC5E,CAAC,CAAE,GAA0B;QAC7B,CAAC,CAAC,MAAM,CAAC;AACb,CAAC;AAED,6FAA6F;AAC7F,IAAI,iBAAiB,GAAuB,6BAA6B,EAAE,CAAC;AAC5E,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;AAErC,MAAM,gBAAgB,GAAuC;IAC3D,MAAM,EAAE,SAAS,CAAC,MAAM;IACxB,KAAK,EAAE,SAAS,CAAC,KAAK;IACtB,IAAI,EAAE,SAAS,CAAC,IAAI;IACpB,IAAI,EAAE,SAAS,CAAC,IAAI;IACpB,KAAK,EAAE,SAAS,CAAC,KAAK;IACtB,KAAK,EAAE,SAAS,CAAC,KAAK;CACvB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,OAAoC,CAAC;AAC/D,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB,4DAA4D;AAC5D,SAAS,iBAAiB;IACxB,MAAM,CAAC,KAAK,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;IACnD,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAyB;IAChE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,CAAE,kCAAwD,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7E,OAAO;IACT,CAAC;IACD,iBAAiB,GAAG,GAAyB,CAAC;IAC9C,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC3B,iBAAiB,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IACD,gBAAgB,IAAI,CAAC,CAAC;IACtB,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC/B,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,GAAS,EAAE;QAChB,IAAI,IAAI;YAAE,OAAO;QACjB,IAAI,GAAG,IAAI,CAAC;QACZ,gBAAgB,IAAI,CAAC,CAAC;QACtB,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAC1B,gBAAgB,GAAG,CAAC,CAAC;YACrB,iBAAiB,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,MAAM,MAAM,GAAoB,aAAa,CAAC;IACnD,KAAK,EAAE,gBAAgB,CAAC,iBAAiB,CAAC;CAC3C,CAAC,CAAC"}
@@ -1,67 +1,59 @@
1
1
  /**
2
- * 单条命令执行模块:执行单条或按顺序执行多条命令,不涉及 group 概念。
3
- * 命令执行失败的判断(Mac / Linux / Windows 通用):
4
- * - 进程正常退出:exitCode === 0 为成功,否则为失败
5
- * - 进程被信号终止(Unix):code 为 null,视为失败
6
- * - spawn 报错(如找不到命令):视为失败
2
+ * 单条与顺序多命令执行(不含 group 分块)。
3
+ *
4
+ * 成功与否:`exitCode === 0` 为成功;信号结束或 `spawn` 失败为失败(与平台一致)。
7
5
  */
8
6
  import { type ChildProcess } from "node:child_process";
9
- import type { CommandContext, CommandDef, CommandResult } from "./types.js";
10
- /** 当前系统是否支持该命令类型:embed 全平台;linux/mac/windows 仅对应平台 */
7
+ import { type CommandContext, type CommandDef, type CommandResult } from "./types.js";
8
+ /** `embed` / `builtin-function` 恒为 true;其余需与 {@link getCurrentPlatformKind} 一致 */
11
9
  export declare function isSupportedOnCurrentPlatform(cmd: CommandDef): boolean;
12
10
  export interface ExecuteOneOptions {
13
- /** 是否将子进程 stdout/stderr 实时打印到当前进程;默认 true */
11
+ /** true(默认)时转发子进程的 stdout/stderr */
14
12
  streamOutput?: boolean;
15
- /** 当命令配置了 background 时,将 spawn 出的子进程传入此回调,由调用方统一管理(如结束后台时 kill) */
13
+ /** `background` 命令的子进程交由调用方管理(卸载、收尾等) */
16
14
  registerBackgroundProcess?: (child: ChildProcess) => void;
17
- /** 传入当前命令上下文,供 builtin-function 使用 */
15
+ /** 参见 {@link RunnerExecuteOptions.registerPendingBackgroundSpawn} */
16
+ registerPendingBackgroundSpawn?: (done: Promise<void>) => void;
17
+ /** 内置函数的命令上下文 */
18
18
  commandContext?: CommandContext;
19
19
  }
20
- /** 执行单条命令 */
20
+ /** 执行单个 {@link CommandDef} */
21
21
  export declare function executeOne(cmd: CommandDef, options?: ExecuteOneOptions): Promise<CommandResult>;
22
22
  export interface ExecuteAllOptions {
23
23
  /**
24
- * 当某条命令执行失败时是否终止后续命令。
25
- * 默认 false:忽略命令执行状态,继续执行后续命令。
26
- * 设为 true:一旦有命令失败(exitCode !== 0 或进程被信号终止等),立即停止。
24
+ * 遇失败是否中止后续命令。默认 `false`:继续执行;`true`:非零退出码或信号终止即停止。
27
25
  */
28
26
  stopOnError?: boolean;
27
+ /**
28
+ * 为 `true` 时经 `attachQuietSilent`(src/logger)应用日志降噪,并协同 `hiperf_txt_parser`;
29
+ * 默认 `streamOutput === false`,且不将非流式缓冲结果回显至终端。
30
+ */
29
31
  silent?: boolean;
30
32
  /**
31
- * 是否将子进程输出实时打印(非 silent 时默认 true)。
32
- * 为 true 时 stdout/stderr 会边执行边输出,结束后不再重复打印整段内容。
33
+ * 子进程标准流是否实时输出。未指定且非 `silent` 时默认为 `true`;为 `true` 时不在结束时重复整段缓冲输出。
33
34
  */
34
35
  streamOutput?: boolean;
35
- /**
36
- * 进度条偏移量(用于跨块累计进度),通常由调用方内部使用。
37
- * 例如前面已经执行了 5 条命令,则 offset = 5。
38
- */
36
+ /** 当前批次首条命令在全局序列中的序位偏移(跨块累计进度) */
39
37
  offset?: number;
40
- /**
41
- * 所有待执行命令的总数(用于显示 cur/all)。
42
- * 不传则默认使用当前批次 commands.length + offset。
43
- */
38
+ /** 全局待执行命令总数(用于 `cur/total`);缺省为 `commands.length + offset` */
44
39
  total?: number;
45
40
  /**
46
- * 若传入,则将本批次启动的后台子进程追加到该数组,由调用方在全部任务结束后统一处理;
47
- * 此时本函数不会在末尾自行 wait/kill 后台进程。
41
+ * 将本批次后台子进程追加至该数组,由调用方统一回收;为真时本函数末尾不处理后台进程。
48
42
  */
49
43
  aggregateBackgroundChildren?: ChildProcess[];
50
44
  /**
51
- * 当未使用 aggregateBackgroundChildren 时生效:
52
- * true — 等待后台进程自然退出;false — 前台结束后优雅结束后台进程。
45
+ * 未使用 `aggregateBackgroundChildren` 时:是否等待后台进程自然退出(否则在前台结束后终止后台进程)。
53
46
  */
54
47
  waitForBackground?: boolean;
55
- /**
56
- * 可选:复用并更新同一份命令上下文(跨多次 executeAll / 跨 group 传递变量)。
57
- * 传入的对象会被就地写入;未传时仅在本次 executeAll 内有效。
58
- */
48
+ /** 跨 `executeAll` / 分组复用的命令上下文;传入则原地更新 */
59
49
  commandContext?: CommandContext;
60
50
  }
61
51
  /**
62
- * 前台命令链结束后对后台子进程收尾:wait true 则等到全部退出,否则优雅 kill。
52
+ * 前台队列结束后处理后台子进程:`wait === true` 时等待自然退出,否则发送终止并回收。
53
+ */
54
+ export declare function finalizeBackgroundProcesses(children: ChildProcess[], wait: boolean): Promise<void>;
55
+ /**
56
+ * 顺序执行命令列表;不包含组间间隔。成功/失败语义同 `executeOne`。
63
57
  */
64
- export declare function finalizeBackgroundProcesses(children: ChildProcess[], wait: boolean, silent: boolean): Promise<void>;
65
- /** 按顺序执行多条命令(无组间间隔)。失败判断见 executeOne,支持 Mac/Linux/Windows。 */
66
58
  export declare function executeAll(commands: CommandDef[], options?: ExecuteAllOptions): Promise<CommandResult[]>;
67
59
  //# sourceMappingURL=runCommand.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runCommand.d.ts","sourceRoot":"","sources":["../../src/runCommand.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAO9D,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,aAAa,EAEd,MAAM,YAAY,CAAC;AAYpB,sDAAsD;AACtD,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAOrE;AAYD,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1D,sCAAsC;IACtC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,aAAa;AACb,wBAAsB,UAAU,CAC9B,GAAG,EAAE,UAAU,EACf,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,aAAa,CAAC,CA4CxB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,2BAA2B,CAAC,EAAE,YAAY,EAAE,CAAC;IAC7C;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AA8MD;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,YAAY,EAAE,EACxB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,8DAA8D;AAC9D,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC,CAsF1B"}
1
+ {"version":3,"file":"runCommand.d.ts","sourceRoot":"","sources":["../../src/runCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAapB,kFAAkF;AAClF,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAOrE;AAYD,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yCAAyC;IACzC,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1D,qEAAqE;IACrE,8BAA8B,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC/D,iBAAiB;IACjB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,8BAA8B;AAC9B,wBAAsB,UAAU,CAC9B,GAAG,EAAE,UAAU,EACf,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,aAAa,CAAC,CAkDxB;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACxB;;;SAGK;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,2BAA2B,CAAC,EAAE,YAAY,EAAE,CAAC;IAC7C;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,0CAA0C;IAC1C,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAsMD;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,YAAY,EAAE,EACxB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC,CA2G1B"}