File tree Expand file tree Collapse file tree 1 file changed +13
-6
lines changed
Expand file tree Collapse file tree 1 file changed +13
-6
lines changed Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments