From 5a3de738a5b6af07cbfe2deb0b56925218ce6207 Mon Sep 17 00:00:00 2001 From: Viktor Korsun Date: Sun, 8 Jun 2025 19:12:12 +0800 Subject: [PATCH 1/2] #608: fixing logger runtime exceptions --- src/logger/index.ts | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/logger/index.ts b/src/logger/index.ts index 2a2d85ae7..c3d5d3d0a 100644 --- a/src/logger/index.ts +++ b/src/logger/index.ts @@ -52,18 +52,18 @@ export interface LogEntry { } /** @internal */ -function removeCircular(obj: any, refs: any[] = []): any { +function removeCircular(obj: any, refs: Set = new Set()): any { if (typeof obj !== "object" || !obj) { return obj; } // If the object defines its own toJSON, prefer that. - if (obj.toJSON) { + if (obj.toJSON && typeof obj.toJSON === "function") { return obj.toJSON(); } - if (refs.includes(obj)) { + if (refs.has(obj)) { return "[Circular]"; } else { - refs.push(obj); + refs.add(obj); } let returnObj: any; if (Array.isArray(obj)) { @@ -72,13 +72,17 @@ function removeCircular(obj: any, refs: any[] = []): any { returnObj = {}; } for (const k in obj) { - if (refs.includes(obj[k])) { - returnObj[k] = "[Circular]"; - } else { - returnObj[k] = removeCircular(obj[k], refs); + try { + if (refs.has(obj[k])) { + returnObj[k] = "[Circular]"; + } else { + returnObj[k] = removeCircular(obj[k], refs); + } + } catch { + returnObj[k] = "[Error - cannot serialize]"; } } - refs.pop(); + refs.delete(obj); return returnObj; } From e1b91027b8993b4bdbff241481eb605c0fda533b Mon Sep 17 00:00:00 2001 From: Viktor Korsun Date: Wed, 11 Jun 2025 10:34:39 +0800 Subject: [PATCH 2/2] Fixing linter errors --- src/logger/index.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/logger/index.ts b/src/logger/index.ts index c3d5d3d0a..d8a36fff2 100644 --- a/src/logger/index.ts +++ b/src/logger/index.ts @@ -72,14 +72,18 @@ function removeCircular(obj: any, refs: Set = new Set()): any { returnObj = {}; } for (const k in obj) { - try { - if (refs.has(obj[k])) { - returnObj[k] = "[Circular]"; - } else { - returnObj[k] = removeCircular(obj[k], refs); + if (obj.hasOwnProperty(k)) { + try { + if (refs.has(obj[k])) { + returnObj[k] = "[Circular]"; + } else { + returnObj[k] = removeCircular(obj[k], refs); + } + } catch { + returnObj[k] = "[Error - cannot serialize]"; } - } catch { - returnObj[k] = "[Error - cannot serialize]"; + } else { + returnObj[k] = "[Error - defined in the prototype but missing in the object]"; } } refs.delete(obj);