@@ -635,21 +635,21 @@ JSONPath.prototype._trace = function (expr, val, path, parent, parentPropName, c
635635 addRet ( this . _trace ( x , val [ loc ] , push ( path , loc ) , val , loc , callback , hasArrExpr ) ) ; // eslint-disable-next-line unicorn/prefer-switch -- Part of larger `if`
636636 } else if ( loc === '*' ) {
637637 // 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 ) ) ;
640640 } ) ;
641641 } else if ( loc === '..' ) {
642642 // all descendent parent properties
643643 // Check remaining expression with val's immediate children
644644 addRet ( this . _trace ( x , val , path , parent , parentPropName , callback , hasArrExpr ) ) ;
645645
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 ) {
647647 // We don't join m and x here because we only want parents,
648648 // not scalar values
649- if ( _typeof ( v [ m ] ) === 'object' ) {
649+ if ( _typeof ( val [ m ] ) === 'object' ) {
650650 // Keep going with recursive descent on val's
651651 // 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 ) ) ;
653653 }
654654 } ) ; // The parent sel computation is handled in the frame above using the
655655 // ancestor object of val
@@ -686,9 +686,11 @@ JSONPath.prototype._trace = function (expr, val, path, parent, parentPropName, c
686686 throw new Error ( 'Eval [?(expr)] prevented in JSONPath expression.' ) ;
687687 }
688688
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 ) ) ;
692694 }
693695 } ) ;
694696 } else if ( loc [ 0 ] === '(' ) {
@@ -844,16 +846,16 @@ JSONPath.prototype._trace = function (expr, val, path, parent, parentPropName, c
844846 return ret ;
845847} ;
846848
847- JSONPath . prototype . _walk = function ( loc , expr , val , path , parent , parentPropName , callback , f ) {
849+ JSONPath . prototype . _walk = function ( val , f ) {
848850 if ( Array . isArray ( val ) ) {
849851 var n = val . length ;
850852
851853 for ( var i = 0 ; i < n ; i ++ ) {
852- f ( i , loc , expr , val , path , parent , parentPropName , callback ) ;
854+ f ( i ) ;
853855 }
854856 } else if ( val && _typeof ( val ) === 'object' ) {
855857 Object . keys ( val ) . forEach ( function ( m ) {
856- f ( m , loc , expr , val , path , parent , parentPropName , callback ) ;
858+ f ( m ) ;
857859 } ) ;
858860 }
859861} ;
0 commit comments