12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- function walk ( ast, ref) {
- var enter = ref.enter;
- var leave = ref.leave;
-
- visit( ast, null, enter, leave );
- }
-
- var shouldSkip = false;
- var context = { skip: function () { return shouldSkip = true; } };
-
- var childKeys = {};
-
- var toString = Object.prototype.toString;
-
- function isArray ( thing ) {
- return toString.call( thing ) === '[object Array]';
- }
-
- function visit ( node, parent, enter, leave, prop, index ) {
- if ( !node ) { return; }
-
- if ( enter ) {
- var _shouldSkip = shouldSkip;
- shouldSkip = false;
- enter.call( context, node, parent, prop, index );
- var skipped = shouldSkip;
- shouldSkip = _shouldSkip;
-
- if ( skipped ) { return; }
- }
-
- var keys = childKeys[ node.type ] || (
- childKeys[ node.type ] = Object.keys( node ).filter( function (key) { return typeof node[ key ] === 'object'; } )
- );
-
- for ( var i = 0; i < keys.length; i += 1 ) {
- var key = keys[i];
- var value = node[ key ];
-
- if ( isArray( value ) ) {
- for ( var j = 0; j < value.length; j += 1 ) {
- visit( value[j], node, enter, leave, key, j );
- }
- }
-
- else if ( value && value.type ) {
- visit( value, node, enter, leave, key, null );
- }
- }
-
- if ( leave ) {
- leave( node, parent, prop, index );
- }
- }
-
- export { walk, childKeys };
- //# sourceMappingURL=estree-walker.es.js.map
|