Skip to content

Commit 99751af

Browse files
committed
fix: address second round of PR review findings
- Dedup file hook: serialize structured objects with JSON.stringify instead of String() to produce meaningful dedup keys - Privacy: guard redactObject spread against non-object return value when processing nested Redux state
1 parent 8e9d09a commit 99751af

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

src/logging/dedup.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,17 @@ export class LogDeduplicator {
6666
if (transportName !== 'file') return message;
6767
if (!message || message.level === 'error') return message;
6868

69-
const text = message.data?.map(String).join(' ') || '';
69+
const text =
70+
message.data
71+
?.map((item: any) => {
72+
if (typeof item === 'string') return item;
73+
try {
74+
return JSON.stringify(item);
75+
} catch {
76+
return String(item);
77+
}
78+
})
79+
.join(' ') || '';
7080
const key = `${message.level}|${text.replace(/\b\d{4,}\b/g, '#').replace(/\b\d+\.\d+\b/g, '#')}`;
7181

7282
if (key === this.lastFileKey) return null; // suppress duplicate

src/logging/privacy.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -277,10 +277,11 @@ const redactObject = (obj: any, depth = 0, seen = new WeakSet()): any => {
277277
}
278278
if (obj.state && isStateDump(obj.state)) {
279279
const { state: _state, ...rest } = obj;
280-
return {
281-
...redactObject(rest, depth + 1, seen),
282-
state: '[Redux State Redacted]',
283-
};
280+
const redactedRest = redactObject(rest, depth + 1, seen);
281+
if (typeof redactedRest === 'object' && redactedRest !== null) {
282+
return { ...redactedRest, state: '[Redux State Redacted]' };
283+
}
284+
return { state: '[Redux State Redacted]' };
284285
}
285286

286287
const result: any = {};

0 commit comments

Comments
 (0)