File tree Expand file tree Collapse file tree 4 files changed +14
-5
lines changed Expand file tree Collapse file tree 4 files changed +14
-5
lines changed Original file line number Diff line number Diff line change 4
4
get_type ,
5
5
is_plain_object ,
6
6
is_primitive ,
7
+ stringify_key ,
7
8
stringify_string
8
9
} from './utils.js' ;
9
10
import {
@@ -154,7 +155,7 @@ export function stringify(value, reducers) {
154
155
if ( Object . getPrototypeOf ( thing ) === null ) {
155
156
str = '["null"' ;
156
157
for ( const key in thing ) {
157
- keys . push ( `. ${ key } ` ) ;
158
+ keys . push ( stringify_key ( key ) ) ;
158
159
str += `,${ stringify_string ( key ) } ,${ flatten ( thing [ key ] ) } ` ;
159
160
keys . pop ( ) ;
160
161
}
@@ -165,7 +166,7 @@ export function stringify(value, reducers) {
165
166
for ( const key in thing ) {
166
167
if ( started ) str += ',' ;
167
168
started = true ;
168
- keys . push ( `. ${ key } ` ) ;
169
+ keys . push ( stringify_key ( key ) ) ;
169
170
str += `${ stringify_string ( key ) } :${ flatten ( thing [ key ] ) } ` ;
170
171
keys . pop ( ) ;
171
172
}
Original file line number Diff line number Diff line change 5
5
get_type ,
6
6
is_plain_object ,
7
7
is_primitive ,
8
+ stringify_key ,
8
9
stringify_string
9
10
} from './utils.js' ;
10
11
@@ -98,7 +99,7 @@ export function uneval(value, replacer) {
98
99
}
99
100
100
101
for ( const key in thing ) {
101
- keys . push ( `. ${ key } ` ) ;
102
+ keys . push ( stringify_key ( key ) ) ;
102
103
walk ( thing [ key ] ) ;
103
104
keys . pop ( ) ;
104
105
}
Original file line number Diff line number Diff line change @@ -104,3 +104,10 @@ export function enumerable_symbols(object) {
104
104
( symbol ) => Object . getOwnPropertyDescriptor ( object , symbol ) . enumerable
105
105
) ;
106
106
}
107
+
108
+ const is_identifier = / ^ [ a - z A - Z _ $ ] [ a - z A - Z _ $ 0 - 9 ] * $ / ;
109
+
110
+ /** @param {string } key */
111
+ export function stringify_key ( key ) {
112
+ return is_identifier . test ( key ) ? '.' + key : '[' + JSON . stringify ( key ) + ']' ;
113
+ }
Original file line number Diff line number Diff line change @@ -584,13 +584,13 @@ for (const fn of [uneval, stringify]) {
584
584
class Whatever { }
585
585
fn ( {
586
586
foo : {
587
- map : new Map ( [ [ 'key' , new Whatever ( ) ] ] )
587
+ [ 'string-key' ] : new Map ( [ [ 'key' , new Whatever ( ) ] ] )
588
588
}
589
589
} ) ;
590
590
} catch ( e ) {
591
591
assert . equal ( e . name , 'DevalueError' ) ;
592
592
assert . equal ( e . message , 'Cannot stringify arbitrary non-POJOs' ) ;
593
- assert . equal ( e . path , '.foo.map .get("key")' ) ;
593
+ assert . equal ( e . path , '.foo["string-key"] .get("key")' ) ;
594
594
}
595
595
} ) ;
596
596
You can’t perform that action at this time.
0 commit comments