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 44 get_type ,
55 is_plain_object ,
66 is_primitive ,
7+ stringify_key ,
78 stringify_string
89} from './utils.js' ;
910import {
@@ -154,7 +155,7 @@ export function stringify(value, reducers) {
154155 if ( Object . getPrototypeOf ( thing ) === null ) {
155156 str = '["null"' ;
156157 for ( const key in thing ) {
157- keys . push ( `. ${ key } ` ) ;
158+ keys . push ( stringify_key ( key ) ) ;
158159 str += `,${ stringify_string ( key ) } ,${ flatten ( thing [ key ] ) } ` ;
159160 keys . pop ( ) ;
160161 }
@@ -165,7 +166,7 @@ export function stringify(value, reducers) {
165166 for ( const key in thing ) {
166167 if ( started ) str += ',' ;
167168 started = true ;
168- keys . push ( `. ${ key } ` ) ;
169+ keys . push ( stringify_key ( key ) ) ;
169170 str += `${ stringify_string ( key ) } :${ flatten ( thing [ key ] ) } ` ;
170171 keys . pop ( ) ;
171172 }
Original file line number Diff line number Diff line change 55 get_type ,
66 is_plain_object ,
77 is_primitive ,
8+ stringify_key ,
89 stringify_string
910} from './utils.js' ;
1011
@@ -98,7 +99,7 @@ export function uneval(value, replacer) {
9899 }
99100
100101 for ( const key in thing ) {
101- keys . push ( `. ${ key } ` ) ;
102+ keys . push ( stringify_key ( key ) ) ;
102103 walk ( thing [ key ] ) ;
103104 keys . pop ( ) ;
104105 }
Original file line number Diff line number Diff line change @@ -104,3 +104,10 @@ export function enumerable_symbols(object) {
104104 ( symbol ) => Object . getOwnPropertyDescriptor ( object , symbol ) . enumerable
105105 ) ;
106106}
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]) {
584584 class Whatever { }
585585 fn ( {
586586 foo : {
587- map : new Map ( [ [ 'key' , new Whatever ( ) ] ] )
587+ [ 'string-key' ] : new Map ( [ [ 'key' , new Whatever ( ) ] ] )
588588 }
589589 } ) ;
590590 } catch ( e ) {
591591 assert . equal ( e . name , 'DevalueError' ) ;
592592 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")' ) ;
594594 }
595595 } ) ;
596596
You can’t perform that action at this time.
0 commit comments