Sha256: 110ab354cd8e0987e4b24698ca175214902faa9549f70d7bbf7b100073c50dda

Contents?: true

Size: 1.12 KB

Versions: 7

Compression:

Stored size: 1.12 KB

Contents

export function walk ( ast, { enter, leave }) {
	visit( ast, null, enter, leave );
}

let shouldSkip = false;
const context = { skip: () => shouldSkip = true };

export const childKeys = {};

const 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 ) {
		let _shouldSkip = shouldSkip;
		shouldSkip = false;
		enter.call( context, node, parent, prop, index );
		const skipped = shouldSkip;
		shouldSkip = _shouldSkip;

		if ( skipped ) return;
	}

	const keys = childKeys[ node.type ] || (
		childKeys[ node.type ] = Object.keys( node ).filter( key => typeof node[ key ] === 'object' )
	);

	for ( let i = 0; i < keys.length; i += 1 ) {
		const key = keys[i];
		const value = node[ key ];

		if ( isArray( value ) ) {
			for ( let 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 );
	}
}

Version data entries

7 entries across 7 versions & 3 rubygems

Version Path
jass-0.9.5 vendor/node_modules/estree-walker/src/estree-walker.js
jass-0.9.4 vendor/node_modules/estree-walker/src/estree-walker.js
jass-vue-0.4.0 vendor/node_modules/rollup-plugin-replace/node_modules/estree-walker/src/estree-walker.js
jass-vue-0.3.0 vendor/node_modules/rollup-plugin-replace/node_modules/estree-walker/src/estree-walker.js
jass-0.9.3 vendor/node_modules/estree-walker/src/estree-walker.js
condenser-0.0.4 lib/condenser/processors/node_modules/estree-walker/src/estree-walker.js
jass-0.9.1 vendor/node_modules/estree-walker/src/estree-walker.js