44import { extractJsonFromStdout } from "./parsers.mjs" ;
55import { fetchRequestIdByTaskId } from "./fetch-request-id.mjs" ;
66
7+ /**
8+ * 将 trace id 字段转为非空字符串;对象等无法可靠转换时返回 undefined。
9+ * @param {unknown } value
10+ * @returns {string | undefined }
11+ */
12+ function toTraceString ( value ) {
13+ if ( value == null ) return undefined ;
14+ if ( typeof value === "string" ) {
15+ const trimmed = value . trim ( ) ;
16+ return trimmed || undefined ;
17+ }
18+ if ( typeof value === "number" || typeof value === "boolean" || typeof value === "bigint" ) {
19+ const trimmed = String ( value ) . trim ( ) ;
20+ return trimmed || undefined ;
21+ }
22+ return undefined ;
23+ }
24+
25+ /**
26+ * 将日志字段转为字符串;非 string 时返回空字符串。
27+ * @param {unknown } value
28+ * @returns {string }
29+ */
30+ function toLogText ( value ) {
31+ return typeof value === "string" ? value : "" ;
32+ }
33+
734/**
835 * @param {unknown } data
936 */
@@ -18,9 +45,9 @@ export function extractTraceIdsFromJson(data) {
1845 ? /** @type {Record<string, unknown> } */ ( obj . error )
1946 : undefined ;
2047
21- const requestIdRaw = obj . request_id ?? obj . requestId ?? err ?. request_id ?? err ?. requestId ;
22- const requestId =
23- requestIdRaw != null && String ( requestIdRaw ) . trim ( ) ? String ( requestIdRaw ) . trim ( ) : undefined ;
48+ const requestId = toTraceString (
49+ obj . request_id ?? obj . requestId ?? err ?. request_id ?? err ?. requestId ,
50+ ) ;
2451
2552 const taskId = formatTaskIdFromJson ( obj ) ;
2653 return { requestId, taskId } ;
@@ -30,28 +57,29 @@ export function extractTraceIdsFromJson(data) {
3057 * @param {Record<string, unknown> } data
3158 */
3259function formatTaskIdFromJson ( data ) {
33- if ( data . task_id != null && String ( data . task_id ) . trim ( ) ) {
34- return String ( data . task_id ) . trim ( ) ;
35- }
60+ const single = toTraceString ( data . task_id ) ;
61+ if ( single ) return single ;
3662 if ( data . task_ids != null ) {
3763 return formatTaskIdsValue ( data . task_ids ) ;
3864 }
3965 if ( Array . isArray ( data . videos ) ) {
4066 const ids = data . videos
4167 . map ( ( v ) =>
42- v && typeof v === "object" ? /** @type {{ task_id?: unknown } } */ ( v ) . task_id : null ,
68+ v && typeof v === "object"
69+ ? toTraceString ( /** @type {{ task_id?: unknown } } */ ( v ) . task_id )
70+ : undefined ,
4371 )
44- . filter ( ( id ) => id != null && String ( id ) . trim ( ) )
45- . map ( ( id ) => String ( id ) . trim ( ) ) ;
72+ . filter ( ( id ) => id != null ) ;
4673 if ( ids . length > 0 ) return [ ...new Set ( ids ) ] . join ( ", " ) ;
4774 }
4875 if ( Array . isArray ( data . images ) ) {
4976 const ids = data . images
5077 . map ( ( v ) =>
51- v && typeof v === "object" ? /** @type {{ task_id?: unknown } } */ ( v ) . task_id : null ,
78+ v && typeof v === "object"
79+ ? toTraceString ( /** @type {{ task_id?: unknown } } */ ( v ) . task_id )
80+ : undefined ,
5281 )
53- . filter ( ( id ) => id != null && String ( id ) . trim ( ) )
54- . map ( ( id ) => String ( id ) . trim ( ) ) ;
82+ . filter ( ( id ) => id != null ) ;
5583 if ( ids . length > 0 ) return [ ...new Set ( ids ) ] . join ( ", " ) ;
5684 }
5785 return undefined ;
@@ -62,11 +90,10 @@ function formatTaskIdFromJson(data) {
6290 */
6391function formatTaskIdsValue ( value ) {
6492 if ( Array . isArray ( value ) ) {
65- const ids = value . map ( ( v ) => String ( v ) . trim ( ) ) . filter ( Boolean ) ;
93+ const ids = value . map ( ( v ) => toTraceString ( v ) ) . filter ( ( id ) => id != null ) ;
6694 return ids . length > 0 ? ids . join ( ", " ) : undefined ;
6795 }
68- if ( value != null && String ( value ) . trim ( ) ) return String ( value ) . trim ( ) ;
69- return undefined ;
96+ return toTraceString ( value ) ;
7097}
7198
7299/**
@@ -186,9 +213,9 @@ export function extractTraceIdsFromLogs(stdout, stderr) {
186213 * @param {Record<string, unknown> } result
187214 */
188215export function mergeTraceIds ( result ) {
189- const stdout = String ( result . stdout ?? "" ) ;
190- const stderr = String ( result . stderr ?? "" ) ;
191- const errorText = String ( result . error ?? "" ) ;
216+ const stdout = toLogText ( result . stdout ) ;
217+ const stderr = toLogText ( result . stderr ) ;
218+ const errorText = toLogText ( result . error ) ;
192219 const combined = `${ stdout } \n${ stderr } \n${ errorText } ` ;
193220
194221 const data = extractJsonFromStdout ( stdout ) ;
@@ -230,7 +257,7 @@ export async function enrichTraceIdsAsync(result) {
230257
231258 if ( merged . requestId ) return merged ;
232259
233- const taskId = merged . taskId ? String ( merged . taskId ) . split ( "," ) [ 0 ] . trim ( ) : "" ;
260+ const taskId = toTraceString ( merged . taskId ) ? .split ( "," ) [ 0 ] ? .trim ( ) ?? "" ;
234261 if ( ! taskId ) return merged ;
235262
236263 if ( process . env . STRESS_FETCH_REQUEST_ID === "0" ) return merged ;
0 commit comments