1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
- (factory((global.estreeWalker = {})));
- }(this, (function (exports) { 'use strict';
- function walk(ast, { enter, leave }) {
- visit(ast, null, enter, leave);
- }
- let shouldSkip = false;
- const context = { skip: () => shouldSkip = true };
- 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);
- }
- }
- exports.walk = walk;
- exports.childKeys = childKeys;
- Object.defineProperty(exports, '__esModule', { value: true });
- })));
- //# sourceMappingURL=estree-walker.umd.js.map
|