2023-12-18 13:12:25 +08:00
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . default = traverse ;
Object . defineProperty ( exports , "NodePath" , {
enumerable : true ,
2024-01-16 21:26:16 +08:00
get : function get ( ) {
2023-12-18 13:12:25 +08:00
return _path . default ;
}
} ) ;
Object . defineProperty ( exports , "Scope" , {
enumerable : true ,
2024-01-16 21:26:16 +08:00
get : function get ( ) {
2023-12-18 13:12:25 +08:00
return _scope . default ;
}
} ) ;
Object . defineProperty ( exports , "Hub" , {
enumerable : true ,
2024-01-16 21:26:16 +08:00
get : function get ( ) {
2023-12-18 13:12:25 +08:00
return _hub . default ;
}
} ) ;
exports . visitors = void 0 ;
var _context = _interopRequireDefault ( require ( "./context" ) ) ;
var visitors = _interopRequireWildcard ( require ( "./visitors" ) ) ;
exports . visitors = visitors ;
function _includes ( ) {
2024-01-16 21:26:16 +08:00
var data = _interopRequireDefault ( require ( "lodash/includes" ) ) ;
2023-12-18 13:12:25 +08:00
2024-01-16 21:26:16 +08:00
_includes = function _includes ( ) {
2023-12-18 13:12:25 +08:00
return data ;
} ;
return data ;
}
function t ( ) {
2024-01-16 21:26:16 +08:00
var data = _interopRequireWildcard ( require ( "@babel/types" ) ) ;
2023-12-18 13:12:25 +08:00
2024-01-16 21:26:16 +08:00
t = function t ( ) {
2023-12-18 13:12:25 +08:00
return data ;
} ;
return data ;
}
var cache = _interopRequireWildcard ( require ( "./cache" ) ) ;
var _path = _interopRequireDefault ( require ( "./path" ) ) ;
var _scope = _interopRequireDefault ( require ( "./scope" ) ) ;
var _hub = _interopRequireDefault ( require ( "./hub" ) ) ;
function _interopRequireWildcard ( obj ) { if ( obj && obj . _ _esModule ) { return obj ; } else { var newObj = { } ; if ( obj != null ) { for ( var key in obj ) { if ( Object . prototype . hasOwnProperty . call ( obj , key ) ) { var desc = Object . defineProperty && Object . getOwnPropertyDescriptor ? Object . getOwnPropertyDescriptor ( obj , key ) : { } ; if ( desc . get || desc . set ) { Object . defineProperty ( newObj , key , desc ) ; } else { newObj [ key ] = obj [ key ] ; } } } } newObj . default = obj ; return newObj ; } }
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
function traverse ( parent , opts , scope , state , parentPath ) {
if ( ! parent ) return ;
if ( ! opts ) opts = { } ;
if ( ! opts . noScope && ! scope ) {
if ( parent . type !== "Program" && parent . type !== "File" ) {
2024-01-16 21:26:16 +08:00
throw new Error ( "You must pass a scope and parentPath unless traversing a Program/File. " + ( "Instead of that you tried to traverse a " + parent . type + " node without " ) + "passing scope and parentPath." ) ;
2023-12-18 13:12:25 +08:00
}
}
visitors . explode ( opts ) ;
traverse . node ( parent , opts , scope , state , parentPath ) ;
}
traverse . visitors = visitors ;
traverse . verify = visitors . verify ;
traverse . explode = visitors . explode ;
traverse . cheap = function ( node , enter ) {
return t ( ) . traverseFast ( node , enter ) ;
} ;
traverse . node = function ( node , opts , scope , state , parentPath , skipKeys ) {
2024-01-16 21:26:16 +08:00
var keys = t ( ) . VISITOR _KEYS [ node . type ] ;
2023-12-18 13:12:25 +08:00
if ( ! keys ) return ;
2024-01-16 21:26:16 +08:00
var context = new _context . default ( scope , opts , state , parentPath ) ;
for ( var _iterator = keys , _isArray = Array . isArray ( _iterator ) , _i = 0 , _iterator = _isArray ? _iterator : _iterator [ Symbol . iterator ] ( ) ; ; ) {
var _ref ;
if ( _isArray ) {
if ( _i >= _iterator . length ) break ;
_ref = _iterator [ _i ++ ] ;
} else {
_i = _iterator . next ( ) ;
if ( _i . done ) break ;
_ref = _i . value ;
}
2023-12-18 13:12:25 +08:00
2024-01-16 21:26:16 +08:00
var key = _ref ;
2023-12-18 13:12:25 +08:00
if ( skipKeys && skipKeys [ key ] ) continue ;
if ( context . visit ( node , key ) ) return ;
}
} ;
traverse . clearNode = function ( node , opts ) {
t ( ) . removeProperties ( node , opts ) ;
cache . path . delete ( node ) ;
} ;
traverse . removeProperties = function ( tree , opts ) {
t ( ) . traverseFast ( tree , traverse . clearNode , opts ) ;
return tree ;
} ;
function hasBlacklistedType ( path , state ) {
if ( path . node . type === state . type ) {
state . has = true ;
path . stop ( ) ;
}
}
traverse . hasType = function ( tree , type , blacklistTypes ) {
if ( ( 0 , _includes ( ) . default ) ( blacklistTypes , tree . type ) ) return false ;
if ( tree . type === type ) return true ;
2024-01-16 21:26:16 +08:00
var state = {
2023-12-18 13:12:25 +08:00
has : false ,
type : type
} ;
traverse ( tree , {
noScope : true ,
blacklist : blacklistTypes ,
enter : hasBlacklistedType
} , null , state ) ;
return state . has ;
} ;
traverse . cache = cache ;