@@ -635,21 +635,21 @@ JSONPath.prototype._trace = function (expr, val, path, parent, parentPropName, c
635
635
addRet ( this . _trace ( x , val [ loc ] , push ( path , loc ) , val , loc , callback , hasArrExpr ) ) ; // eslint-disable-next-line unicorn/prefer-switch -- Part of larger `if`
636
636
} else if ( loc === '*' ) {
637
637
// all child properties
638
- this . _walk ( loc , x , val , path , parent , parentPropName , callback , function ( m , l , _x , v , p , par , pr , cb ) {
639
- addRet ( _this3 . _trace ( unshift ( m , _x ) , v , p , par , pr , cb , true , true ) ) ;
638
+ this . _walk ( val , function ( m ) {
639
+ addRet ( _this3 . _trace ( x , val [ m ] , push ( path , m ) , val , m , callback , true , true ) ) ;
640
640
} ) ;
641
641
} else if ( loc === '..' ) {
642
642
// all descendent parent properties
643
643
// Check remaining expression with val's immediate children
644
644
addRet ( this . _trace ( x , val , path , parent , parentPropName , callback , hasArrExpr ) ) ;
645
645
646
- this . _walk ( loc , x , val , path , parent , parentPropName , callback , function ( m , l , _x , v , p , par , pr , cb ) {
646
+ this . _walk ( val , function ( m ) {
647
647
// We don't join m and x here because we only want parents,
648
648
// not scalar values
649
- if ( _typeof ( v [ m ] ) === 'object' ) {
649
+ if ( _typeof ( val [ m ] ) === 'object' ) {
650
650
// Keep going with recursive descent on val's
651
651
// object children
652
- addRet ( _this3 . _trace ( unshift ( l , _x ) , v [ m ] , push ( p , m ) , v , m , cb , true ) ) ;
652
+ addRet ( _this3 . _trace ( expr . slice ( ) , val [ m ] , push ( path , m ) , val , m , callback , true ) ) ;
653
653
}
654
654
} ) ; // The parent sel computation is handled in the frame above using the
655
655
// ancestor object of val
@@ -686,9 +686,11 @@ JSONPath.prototype._trace = function (expr, val, path, parent, parentPropName, c
686
686
throw new Error ( 'Eval [?(expr)] prevented in JSONPath expression.' ) ;
687
687
}
688
688
689
- this . _walk ( loc , x , val , path , parent , parentPropName , callback , function ( m , l , _x , v , p , par , pr , cb ) {
690
- if ( _this3 . _eval ( l . replace ( / ^ \? \( ( (?: [ \0 - \t \x0B \f \x0E - \u2027 \u202A - \uD7FF \uE000 - \uFFFF ] | [ \uD800 - \uDBFF ] [ \uDC00 - \uDFFF ] | [ \uD800 - \uDBFF ] (? ! [ \uDC00 - \uDFFF ] ) | (?: [ ^ \uD800 - \uDBFF ] | ^ ) [ \uDC00 - \uDFFF ] ) * ?) \) $ / , '$1' ) , v [ m ] , m , p , par , pr ) ) {
691
- addRet ( _this3 . _trace ( unshift ( m , _x ) , v , p , par , pr , cb , true ) ) ;
689
+ var safeLoc = loc . replace ( / ^ \? \( ( (?: [ \0 - \t \x0B \f \x0E - \u2027 \u202A - \uD7FF \uE000 - \uFFFF ] | [ \uD800 - \uDBFF ] [ \uDC00 - \uDFFF ] | [ \uD800 - \uDBFF ] (? ! [ \uDC00 - \uDFFF ] ) | (?: [ ^ \uD800 - \uDBFF ] | ^ ) [ \uDC00 - \uDFFF ] ) * ?) \) $ / , '$1' ) ;
690
+
691
+ this . _walk ( val , function ( m ) {
692
+ if ( _this3 . _eval ( safeLoc , val [ m ] , m , path , parent , parentPropName ) ) {
693
+ addRet ( _this3 . _trace ( x , val [ m ] , push ( path , m ) , val , m , callback , true ) ) ;
692
694
}
693
695
} ) ;
694
696
} else if ( loc [ 0 ] === '(' ) {
@@ -844,16 +846,16 @@ JSONPath.prototype._trace = function (expr, val, path, parent, parentPropName, c
844
846
return ret ;
845
847
} ;
846
848
847
- JSONPath . prototype . _walk = function ( loc , expr , val , path , parent , parentPropName , callback , f ) {
849
+ JSONPath . prototype . _walk = function ( val , f ) {
848
850
if ( Array . isArray ( val ) ) {
849
851
var n = val . length ;
850
852
851
853
for ( var i = 0 ; i < n ; i ++ ) {
852
- f ( i , loc , expr , val , path , parent , parentPropName , callback ) ;
854
+ f ( i ) ;
853
855
}
854
856
} else if ( val && _typeof ( val ) === 'object' ) {
855
857
Object . keys ( val ) . forEach ( function ( m ) {
856
- f ( m , loc , expr , val , path , parent , parentPropName , callback ) ;
858
+ f ( m ) ;
857
859
} ) ;
858
860
}
859
861
} ;
0 commit comments