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.
- package/README.md +103 -343
- package/dist/commands/forkall.d.ts +4 -12
- package/dist/commands/forkall.d.ts.map +1 -1
- package/dist/commands/forkall.js +46 -23
- package/dist/commands/forkall.js.map +1 -1
- package/dist/commands/report.d.ts +7 -0
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +133 -32
- package/dist/commands/report.js.map +1 -1
- package/dist/demos/context-demo.d.ts +10 -0
- package/dist/demos/context-demo.d.ts.map +1 -0
- package/dist/{commands/context_demo.js → demos/context-demo.js} +15 -18
- package/dist/demos/context-demo.js.map +1 -0
- package/dist/{commands → demos}/mac-example.d.ts +1 -3
- package/dist/demos/mac-example.d.ts.map +1 -0
- package/dist/{commands → demos}/mac-example.js +2 -4
- package/dist/demos/mac-example.js.map +1 -0
- package/dist/{commands/timeout_demo.d.ts → demos/timeout-demo.d.ts} +2 -2
- package/dist/demos/timeout-demo.d.ts.map +1 -0
- package/dist/demos/timeout-demo.js +35 -0
- package/dist/demos/timeout-demo.js.map +1 -0
- package/dist/src/cli.js +209 -169
- package/dist/src/cli.js.map +1 -1
- package/dist/src/executor.d.ts +1 -3
- package/dist/src/executor.d.ts.map +1 -1
- package/dist/src/executor.js +1 -3
- package/dist/src/executor.js.map +1 -1
- package/dist/src/groupSpecs.d.ts +1 -4
- package/dist/src/groupSpecs.d.ts.map +1 -1
- package/dist/src/groupSpecs.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/{common_groups.d.ts → presets.d.ts} +13 -2
- package/dist/src/lib/presets.d.ts.map +1 -0
- package/dist/src/lib/{common_groups.js → presets.js} +66 -24
- package/dist/src/lib/presets.js.map +1 -0
- package/dist/src/lib/{programmatic.d.ts → scenario.d.ts} +9 -11
- package/dist/src/lib/scenario.d.ts.map +1 -0
- package/dist/src/lib/{programmatic.js → scenario.js} +6 -10
- package/dist/src/lib/scenario.js.map +1 -0
- package/dist/src/logger.d.ts +23 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +92 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/runCommand.d.ts +27 -35
- package/dist/src/runCommand.d.ts.map +1 -1
- package/dist/src/runCommand.js +81 -70
- package/dist/src/runCommand.js.map +1 -1
- package/dist/src/runGroups.d.ts +6 -12
- package/dist/src/runGroups.d.ts.map +1 -1
- package/dist/src/runGroups.js +14 -19
- package/dist/src/runGroups.js.map +1 -1
- package/dist/src/runners/builtinFunctionRunner.d.ts +1 -0
- package/dist/src/runners/builtinFunctionRunner.d.ts.map +1 -1
- package/dist/src/runners/builtinFunctionRunner.js +5 -12
- package/dist/src/runners/builtinFunctionRunner.js.map +1 -1
- package/dist/src/runners/embedRunner.d.ts +1 -0
- package/dist/src/runners/embedRunner.d.ts.map +1 -1
- package/dist/src/runners/embedRunner.js +5 -1
- package/dist/src/runners/embedRunner.js.map +1 -1
- package/dist/src/runners/shellRunner.d.ts +1 -0
- package/dist/src/runners/shellRunner.d.ts.map +1 -1
- package/dist/src/runners/shellRunner.js +40 -8
- package/dist/src/runners/shellRunner.js.map +1 -1
- package/dist/src/runners/types.d.ts +9 -0
- package/dist/src/runners/types.d.ts.map +1 -1
- package/dist/src/types.d.ts +47 -77
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +37 -10
- package/dist/src/types.js.map +1 -1
- package/package.json +10 -3
- package/dist/commands/context_demo.d.ts +0 -18
- package/dist/commands/context_demo.d.ts.map +0 -1
- package/dist/commands/context_demo.js.map +0 -1
- package/dist/commands/mac-example.d.ts.map +0 -1
- package/dist/commands/mac-example.js.map +0 -1
- package/dist/commands/timeout_demo.d.ts.map +0 -1
- package/dist/commands/timeout_demo.js +0 -48
- package/dist/commands/timeout_demo.js.map +0 -1
- package/dist/src/lib/common_groups.d.ts.map +0 -1
- package/dist/src/lib/common_groups.js.map +0 -1
- package/dist/src/lib/foo.d.ts +0 -3
- package/dist/src/lib/foo.d.ts.map +0 -1
- package/dist/src/lib/foo.js +0 -7
- package/dist/src/lib/foo.js.map +0 -1
- package/dist/src/lib/programmatic.d.ts.map +0 -1
- package/dist/src/lib/programmatic.js.map +0 -1
- package/dist/src/lib/trace_formatter.d.ts +0 -9
- package/dist/src/lib/trace_formatter.d.ts.map +0 -1
- package/dist/src/lib/trace_formatter.js +0 -148
- 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
|
-
|
|
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=
|
|
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 "
|
|
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 --
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
103
|
+
logger.error(`[过滤目标数据] target_tgid 非法: ${targetTgidRaw}`);
|
|
97
104
|
return false;
|
|
98
105
|
}
|
|
99
106
|
try {
|
|
100
107
|
if (!existsSync(snapshotPerfFile)) {
|
|
101
|
-
|
|
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
|
-
|
|
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
|
-
|
|
123
|
+
logger.info(`[过滤目标数据] 处理完成并写回文件: ${snapshotPerfFile}`);
|
|
117
124
|
}
|
|
118
125
|
catch (error) {
|
|
119
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
187
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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=
|
|
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
|
-
/**
|
|
26
|
+
/** 与 CLI `-g` / `--group` 相同;缺省时按 `defaultGroupOrder` 各执行一次 */
|
|
31
27
|
group?: string[] | string;
|
|
32
|
-
/**
|
|
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
|
-
*
|
|
43
|
+
* 按组规格执行命令;语义与 CLI 在排除 `--list`、`--dry-run` 时的执行路径一致。
|
|
46
44
|
*/
|
|
47
45
|
export declare function runScenarioGroups(input: RunScenarioGroupsInput): Promise<RunScenarioGroupsResult>;
|
|
48
|
-
//# sourceMappingURL=
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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=
|
|
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"}
|
package/dist/src/runCommand.d.ts
CHANGED
|
@@ -1,67 +1,59 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
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
|
|
10
|
-
/**
|
|
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
|
-
/**
|
|
11
|
+
/** 为 true(默认)时转发子进程的 stdout/stderr */
|
|
14
12
|
streamOutput?: boolean;
|
|
15
|
-
/**
|
|
13
|
+
/** `background` 命令的子进程交由调用方管理(卸载、收尾等) */
|
|
16
14
|
registerBackgroundProcess?: (child: ChildProcess) => void;
|
|
17
|
-
/**
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
|
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"}
|