Sha256: ac6b98a067ca56dadaea461479185640571bf8844ec27530dd46c93a154d8165

Contents?: true

Size: 1.17 KB

Versions: 69

Compression:

Stored size: 1.17 KB

Contents

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = traverse;

var _definitions = require("../definitions");

function traverse(node, handlers, state) {
  if (typeof handlers === "function") {
    handlers = {
      enter: handlers
    };
  }

  const {
    enter,
    exit
  } = handlers;
  traverseSimpleImpl(node, enter, exit, state, []);
}

function traverseSimpleImpl(node, enter, exit, state, ancestors) {
  const keys = _definitions.VISITOR_KEYS[node.type];
  if (!keys) return;
  if (enter) enter(node, ancestors, state);

  for (const key of keys) {
    const subNode = node[key];

    if (Array.isArray(subNode)) {
      for (let i = 0; i < subNode.length; i++) {
        const child = subNode[i];
        if (!child) continue;
        ancestors.push({
          node,
          key,
          index: i
        });
        traverseSimpleImpl(child, enter, exit, state, ancestors);
        ancestors.pop();
      }
    } else if (subNode) {
      ancestors.push({
        node,
        key
      });
      traverseSimpleImpl(subNode, enter, exit, state, ancestors);
      ancestors.pop();
    }
  }

  if (exit) exit(node, ancestors, state);
}

Version data entries

69 entries across 61 versions & 12 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.18.0 test/dummy/node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.18.2 test/dummy/node_modules/@babel/types/lib/traverse/traverse.js
trusty-cms-5.0.7 node_modules/@babel/types/lib/traverse/traverse.js
trusty-cms-5.0.6 node_modules/@babel/types/lib/traverse/traverse.js
trusty-cms-5.0.5 node_modules/@babel/types/lib/traverse/traverse.js
trusty-cms-5.0.4 node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.16.1 test/dummy/node_modules/@babel/preset-modules/node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.16.1 test/dummy/node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.15.2 test/dummy/node_modules/@babel/preset-modules/node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.15.2 test/dummy/node_modules/@babel/types/lib/traverse/traverse.js
trusty-cms-5.0.3 node_modules/@babel/types/lib/traverse/traverse.js
trusty-cms-5.0.2 node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.18.4 test/dummy/node_modules/@babel/preset-modules/node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.18.4 test/dummy/node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.18.1 test/dummy/node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.18.1 test/dummy/node_modules/@babel/preset-modules/node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/@babel/preset-modules/node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/@babel/types/lib/traverse/traverse.js
disco_app-0.14.0 test/dummy/node_modules/@babel/preset-modules/node_modules/@babel/types/lib/traverse/traverse.js