Blame view

天文台pc/tianwentai-ui/node_modules/@babel/traverse/lib/scope/traverseForScope.js 1.77 KB
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  "use strict";
  
  Object.defineProperty(exports, "__esModule", {
    value: true
  });
  exports.default = traverseForScope;
  var _t = require("@babel/types");
  var _index = require("../index.js");
  var _visitors = require("../visitors.js");
  var _context = require("../path/context.js");
  const {
    VISITOR_KEYS
  } = _t;
  function traverseForScope(path, visitors, state) {
    const exploded = (0, _visitors.explode)(visitors);
    if (exploded.enter || exploded.exit) {
      throw new Error("Should not be used with enter/exit visitors.");
    }
    _traverse(path.parentPath, path.parent, path.node, path.container, path.key, path.listKey, path.hub, path);
    function _traverse(parentPath, parent, node, container, key, listKey, hub, inPath) {
      if (!node) {
        return;
      }
      const path = inPath || _index.NodePath.get({
        hub,
        parentPath,
        parent,
        container,
        listKey,
        key
      });
      _context._forceSetScope.call(path);
      const visitor = exploded[node.type];
      if (visitor != null && visitor.enter) {
        for (const visit of visitor.enter) {
          visit.call(state, path, state);
        }
      }
      if (path.shouldSkip) {
        return;
      }
      const keys = VISITOR_KEYS[node.type];
      if (!(keys != null && keys.length)) {
        return;
      }
      for (const key of keys) {
        const prop = node[key];
        if (!prop) continue;
        if (Array.isArray(prop)) {
          for (let i = 0; i < prop.length; i++) {
            const value = prop[i];
            _traverse(path, node, value, prop, i, key);
          }
        } else {
          _traverse(path, node, prop, node, key, null);
        }
      }
      if (visitor != null && visitor.exit) {
        for (const visit of visitor.exit) {
          visit.call(state, path, state);
        }
      }
    }
  }
  
  //# sourceMappingURL=traverseForScope.js.map