9
9
* store.set('foo', { is: { not: { quite: false }}});
10
10
* console.log(store.get('foo.is.not.quite'));// logs false
11
11
*
12
- * Status: ALPHA - currently only supports get, inefficient, uses eval
12
+ * Status: ALPHA - currently only supports get
13
13
*/
14
- ; ( function ( _ ) {
14
+ ; ( function ( _ ) {
15
15
16
16
// save original core accessor
17
17
var _get = _ . get ;
18
18
// replace with enhanced version
19
- _ . get = function ( area , key , kid ) {
19
+ _ . get = function ( area , key , kid ) {
20
20
var s = _get ( area , key ) ;
21
21
if ( s == null ) {
22
22
var parts = _ . split ( key ) ;
26
26
return _ . get ( area , parts [ 0 ] , kid ) ;
27
27
}
28
28
} else if ( kid ) {
29
- var val = _ . parse ( s ) ;
30
- /*jshint evil:true */
31
- val = eval ( "val." + kid ) ;
32
- s = _ . stringify ( val ) ;
29
+ try {
30
+ var val = _ . parse ( s ) ;
31
+ val = _ . resolvePath ( val , kid ) ;
32
+ s = _ . stringify ( val ) ;
33
+ } catch ( e ) {
34
+ console . error ( "Error accessing nested property:" , e ) ;
35
+ return null ;
36
+ }
33
37
}
34
38
return s ;
35
39
} ;
36
40
41
+ // Helper function to resolve nested paths safely
42
+ _ . resolvePath = function ( obj , path ) {
43
+ return path . split ( '.' ) . reduce ( ( acc , key ) => acc && acc [ key ] , obj ) ;
44
+ } ;
45
+
37
46
// expose internals on the underscore to allow extensibility
38
- _ . split = function ( key ) {
47
+ _ . split = function ( key ) {
39
48
var dot = key . lastIndexOf ( '.' ) ;
40
49
if ( dot > 0 ) {
41
- var kid = key . substring ( dot + 1 , key . length ) ;
50
+ var kid = key . substring ( dot + 1 , key . length ) ;
42
51
key = key . substring ( 0 , dot ) ;
43
52
return [ key , kid ] ;
44
53
}
45
54
} ;
46
55
47
- } ) ( window . store . _ ) ;
56
+ } ) ( window . store . _ ) ;
0 commit comments