Fix circular reference JSON serialization in telemetry logging (#4150)

This commit is contained in:
Bryan Morgan
2025-07-14 16:20:06 -04:00
committed by GitHub
parent 5008aea90d
commit ff3722a3a7
7 changed files with 294 additions and 17 deletions

View File

@@ -0,0 +1,32 @@
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Safely stringifies an object to JSON, handling circular references by replacing them with [Circular].
*
* @param obj - The object to stringify
* @param space - Optional space parameter for formatting (defaults to no formatting)
* @returns JSON string with circular references replaced by [Circular]
*/
export function safeJsonStringify(
obj: unknown,
space?: string | number,
): string {
const seen = new WeakSet();
return JSON.stringify(
obj,
(key, value) => {
if (typeof value === 'object' && value !== null) {
if (seen.has(value)) {
return '[Circular]';
}
seen.add(value);
}
return value;
},
space,
);
}