Skip to content

Commit e61ac7b

Browse files
committed
minor fixes
1 parent d9e6241 commit e61ac7b

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

text-utils/capitalizeKeys.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,29 @@
11

2-
function capitalizeKeys(obj, mapper) {
3-
2+
function capitalizeKeys(obj, mapper, seen = new WeakSet()) {
43
if (Array.isArray(obj)) {
5-
let arr = obj;
6-
return arr.map(item => capitalizeKeys(item, mapper));
4+
return obj.map(item => capitalizeKeys(item, mapper, seen));
75
}
86

9-
if (Object.prototype.toString.apply(obj) !== '[object Object]') {
7+
if (Object.prototype.toString.call(obj) !== '[object Object]') {
108
return obj;
119
}
1210

11+
if (seen.has(obj)) {
12+
throw new Error("Circular reference detected");
13+
}
14+
15+
seen.add(obj); // Mark the object as visited.
16+
1317
let output = {};
1418

1519
for (let key in obj) {
1620
let keyCapitalized = key.replace(/_(\w)/g, (match, letter) => letter.toUpperCase());
1721
if (mapper) keyCapitalized = mapper(keyCapitalized);
18-
output[keyCapitalized] = capitalizeKeys(obj[key], mapper);
22+
output[keyCapitalized] = capitalizeKeys(obj[key], mapper, seen);
1923
}
24+
25+
seen.delete(obj); // Remove from `seen` after processing to allow for reuse in non-circular parts.
26+
2027
return output;
2128
}
2229

0 commit comments

Comments
 (0)