Sha256: 6f27d3b781a53abf36165a0aaaad4fdca82f8aea523abf1c977feb63998c1502

Contents?: true

Size: 1.12 KB

Versions: 10

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

		if (skipped) return;
	}

	const keys = node.type && 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) {
				value[j] && value[j].type && 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

10 entries across 10 versions & 1 rubygems

Version Path
condenser-0.3 lib/condenser/processors/node_modules/estree-walker/src/estree-walker.js
condenser-0.2 lib/condenser/processors/node_modules/estree-walker/src/estree-walker.js
condenser-0.1 lib/condenser/processors/node_modules/estree-walker/src/estree-walker.js
condenser-0.0.12 lib/condenser/processors/node_modules/estree-walker/src/estree-walker.js
condenser-0.0.11 lib/condenser/processors/node_modules/estree-walker/src/estree-walker.js
condenser-0.0.10 lib/condenser/processors/node_modules/estree-walker/src/estree-walker.js
condenser-0.0.9 lib/condenser/processors/node_modules/estree-walker/src/estree-walker.js
condenser-0.0.8 lib/condenser/processors/node_modules/estree-walker/src/estree-walker.js
condenser-0.0.7 lib/condenser/processors/node_modules/estree-walker/src/estree-walker.js
condenser-0.0.5 lib/condenser/processors/node_modules/estree-walker/src/estree-walker.js