@babel/traverse 7.11.5 → 7.12.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @babel/traverse might be problematic. Click here for more details.

package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > The Babel Traverse module maintains the overall tree state, and is responsible for replacing, removing, and adding nodes
4
4
 
5
- See our website [@babel/traverse](https://babeljs.io/docs/en/next/babel-traverse.html) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20traverse%22+is%3Aopen) associated with this package.
5
+ See our website [@babel/traverse](https://babeljs.io/docs/en/babel-traverse) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20traverse%22+is%3Aopen) associated with this package.
6
6
 
7
7
  ## Install
8
8
 
package/lib/context.js CHANGED
@@ -90,7 +90,7 @@ class TraversalContext {
90
90
  visitQueue(queue) {
91
91
  this.queue = queue;
92
92
  this.priorityQueue = [];
93
- const visited = [];
93
+ const visited = new WeakSet();
94
94
  let stop = false;
95
95
 
96
96
  for (const path of queue) {
@@ -106,8 +106,11 @@ class TraversalContext {
106
106
  this.trap = true;
107
107
  }
108
108
 
109
- if (visited.indexOf(path.node) >= 0) continue;
110
- visited.push(path.node);
109
+ const {
110
+ node
111
+ } = path;
112
+ if (visited.has(node)) continue;
113
+ if (node) visited.add(node);
111
114
 
112
115
  if (path.visit()) {
113
116
  stop = true;
@@ -41,27 +41,43 @@ function addCompletionRecords(path, paths) {
41
41
  return paths;
42
42
  }
43
43
 
44
+ function findBreak(statements) {
45
+ let breakStatement;
46
+
47
+ if (!Array.isArray(statements)) {
48
+ statements = [statements];
49
+ }
50
+
51
+ for (const statement of statements) {
52
+ if (statement.isDoExpression() || statement.isProgram() || statement.isBlockStatement() || statement.isCatchClause() || statement.isLabeledStatement()) {
53
+ breakStatement = findBreak(statement.get("body"));
54
+ } else if (statement.isIfStatement()) {
55
+ var _findBreak;
56
+
57
+ breakStatement = (_findBreak = findBreak(statement.get("consequent"))) != null ? _findBreak : findBreak(statement.get("alternate"));
58
+ } else if (statement.isTryStatement()) {
59
+ var _findBreak2;
60
+
61
+ breakStatement = (_findBreak2 = findBreak(statement.get("block"))) != null ? _findBreak2 : findBreak(statement.get("handler"));
62
+ } else if (statement.isBreakStatement()) {
63
+ breakStatement = statement;
64
+ }
65
+
66
+ if (breakStatement) {
67
+ return breakStatement;
68
+ }
69
+ }
70
+
71
+ return null;
72
+ }
73
+
44
74
  function completionRecordForSwitch(cases, paths) {
45
75
  let isLastCaseWithConsequent = true;
46
76
 
47
77
  for (let i = cases.length - 1; i >= 0; i--) {
48
78
  const switchCase = cases[i];
49
79
  const consequent = switchCase.get("consequent");
50
- let breakStatement;
51
-
52
- findBreak: for (const statement of consequent) {
53
- if (statement.isBlockStatement()) {
54
- for (const statementInBlock of statement.get("body")) {
55
- if (statementInBlock.isBreakStatement()) {
56
- breakStatement = statementInBlock;
57
- break findBreak;
58
- }
59
- }
60
- } else if (statement.isBreakStatement()) {
61
- breakStatement = statement;
62
- break;
63
- }
64
- }
80
+ let breakStatement = findBreak(consequent);
65
81
 
66
82
  if (breakStatement) {
67
83
  while (breakStatement.key === 0 && breakStatement.parentPath.isBlockStatement()) {
@@ -162,7 +178,7 @@ function getAllPrevSiblings() {
162
178
  return siblings;
163
179
  }
164
180
 
165
- function get(key, context) {
181
+ function get(key, context = true) {
166
182
  if (context === true) context = this.context;
167
183
  const parts = key.split(".");
168
184
 
package/lib/path/index.js CHANGED
@@ -57,22 +57,22 @@ exports.SHOULD_SKIP = SHOULD_SKIP;
57
57
 
58
58
  class NodePath {
59
59
  constructor(hub, parent) {
60
- this.parent = parent;
61
- this.hub = hub;
62
60
  this.contexts = [];
63
- this.data = null;
64
- this._traverseFlags = 0;
65
61
  this.state = null;
66
62
  this.opts = null;
63
+ this._traverseFlags = 0;
67
64
  this.skipKeys = null;
68
65
  this.parentPath = null;
69
- this.context = null;
70
66
  this.container = null;
71
67
  this.listKey = null;
72
68
  this.key = null;
73
69
  this.node = null;
74
- this.scope = null;
75
70
  this.type = null;
71
+ this.parent = parent;
72
+ this.hub = hub;
73
+ this.data = null;
74
+ this.context = null;
75
+ this.scope = null;
76
76
  }
77
77
 
78
78
  static get({
@@ -92,26 +92,20 @@ class NodePath {
92
92
  }
93
93
 
94
94
  const targetNode = container[key];
95
- const paths = _cache.path.get(parent) || [];
96
-
97
- if (!_cache.path.has(parent)) {
98
- _cache.path.set(parent, paths);
99
- }
100
95
 
101
- let path;
96
+ let paths = _cache.path.get(parent);
102
97
 
103
- for (let i = 0; i < paths.length; i++) {
104
- const pathCheck = paths[i];
98
+ if (!paths) {
99
+ paths = new Map();
105
100
 
106
- if (pathCheck.node === targetNode) {
107
- path = pathCheck;
108
- break;
109
- }
101
+ _cache.path.set(parent, paths);
110
102
  }
111
103
 
104
+ let path = paths.get(targetNode);
105
+
112
106
  if (!path) {
113
107
  path = new NodePath(hub, parent);
114
- paths.push(path);
108
+ if (targetNode) paths.set(targetNode, path);
115
109
  }
116
110
 
117
111
  path.setup(parentPath, container, listKey, key);
@@ -136,9 +136,7 @@ function updateSiblingKeys(fromIndex, incrementBy) {
136
136
 
137
137
  const paths = _cache.path.get(this.parent);
138
138
 
139
- for (let i = 0; i < paths.length; i++) {
140
- const path = paths[i];
141
-
139
+ for (const [, path] of paths) {
142
140
  if (path.key >= fromIndex) {
143
141
  path.key += incrementBy;
144
142
  }
@@ -12,6 +12,8 @@ exports._assertUnremoved = _assertUnremoved;
12
12
 
13
13
  var _removalHooks = require("./lib/removal-hooks");
14
14
 
15
+ var _cache = require("../cache");
16
+
15
17
  var _index = require("./index");
16
18
 
17
19
  function remove() {
@@ -60,6 +62,7 @@ function _remove() {
60
62
 
61
63
  function _markRemoved() {
62
64
  this._traverseFlags |= _index.SHOULD_SKIP | _index.REMOVED;
65
+ if (this.parent) _cache.path.get(this.parent).delete(this.node);
63
66
  this.node = null;
64
67
  }
65
68
 
@@ -16,6 +16,8 @@ var _index = _interopRequireDefault(require("../index"));
16
16
 
17
17
  var _index2 = _interopRequireDefault(require("./index"));
18
18
 
19
+ var _cache = require("../cache");
20
+
19
21
  var _parser = require("@babel/parser");
20
22
 
21
23
  var t = _interopRequireWildcard(require("@babel/types"));
@@ -59,6 +61,9 @@ function replaceWithMultiple(nodes) {
59
61
  nodes = this._verifyNodeList(nodes);
60
62
  t.inheritLeadingComments(nodes[0], this.node);
61
63
  t.inheritTrailingComments(nodes[nodes.length - 1], this.node);
64
+
65
+ _cache.path.get(this.parent).delete(this.node);
66
+
62
67
  this.node = this.container[this.key] = null;
63
68
  const paths = this.insertAfter(nodes);
64
69
 
@@ -12,15 +12,15 @@ class Binding {
12
12
  path,
13
13
  kind
14
14
  }) {
15
- this.identifier = identifier;
16
- this.scope = scope;
17
- this.path = path;
18
- this.kind = kind;
19
15
  this.constantViolations = [];
20
16
  this.constant = true;
21
17
  this.referencePaths = [];
22
18
  this.referenced = false;
23
19
  this.references = 0;
20
+ this.identifier = identifier;
21
+ this.scope = scope;
22
+ this.path = path;
23
+ this.kind = kind;
24
24
  this.clearValue();
25
25
  }
26
26
 
@@ -9,8 +9,6 @@ var _renamer = _interopRequireDefault(require("./lib/renamer"));
9
9
 
10
10
  var _index = _interopRequireDefault(require("../index"));
11
11
 
12
- var _defaults = _interopRequireDefault(require("lodash/defaults"));
13
-
14
12
  var _binding = _interopRequireDefault(require("./binding"));
15
13
 
16
14
  var _globals = _interopRequireDefault(require("globals"));
@@ -346,7 +344,7 @@ class Scope {
346
344
  generateUid(name = "temp") {
347
345
  name = t.toIdentifier(name).replace(/^_+/, "").replace(/[0-9]+$/g, "");
348
346
  let uid;
349
- let i = 0;
347
+ let i = 1;
350
348
 
351
349
  do {
352
350
  uid = this._generateUid(name, i);
@@ -838,7 +836,12 @@ class Scope {
838
836
  let scope = this;
839
837
 
840
838
  do {
841
- (0, _defaults.default)(ids, scope.bindings);
839
+ for (const key of Object.keys(scope.bindings)) {
840
+ if (key in ids === false) {
841
+ ids[key] = scope.bindings[key];
842
+ }
843
+ }
844
+
842
845
  scope = scope.parent;
843
846
  } while (scope);
844
847
 
@@ -876,7 +879,9 @@ class Scope {
876
879
  const binding = scope.getOwnBinding(name);
877
880
 
878
881
  if (binding) {
879
- if (previousPath && previousPath.isPattern() && previousPath.parentPath.isFunction() && binding.kind !== "param") {} else {
882
+ var _previousPath;
883
+
884
+ if (((_previousPath = previousPath) == null ? void 0 : _previousPath.isPattern()) && binding.kind !== "param") {} else {
880
885
  return binding;
881
886
  }
882
887
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babel/traverse",
3
- "version": "7.11.5",
3
+ "version": "7.12.7",
4
4
  "description": "The Babel Traverse module maintains the overall tree state, and is responsible for replacing, removing, and adding nodes",
5
5
  "author": "Sebastian McKenzie <sebmck@gmail.com>",
6
6
  "homepage": "https://babeljs.io/",
@@ -16,17 +16,16 @@
16
16
  "main": "lib/index.js",
17
17
  "dependencies": {
18
18
  "@babel/code-frame": "^7.10.4",
19
- "@babel/generator": "^7.11.5",
19
+ "@babel/generator": "^7.12.5",
20
20
  "@babel/helper-function-name": "^7.10.4",
21
21
  "@babel/helper-split-export-declaration": "^7.11.0",
22
- "@babel/parser": "^7.11.5",
23
- "@babel/types": "^7.11.5",
22
+ "@babel/parser": "^7.12.7",
23
+ "@babel/types": "^7.12.7",
24
24
  "debug": "^4.1.0",
25
25
  "globals": "^11.1.0",
26
26
  "lodash": "^4.17.19"
27
27
  },
28
28
  "devDependencies": {
29
- "@babel/helper-plugin-test-runner": "^7.10.4"
30
- },
31
- "gitHead": "af64ccb2b00bc7574943674996c2f0507cdbfb6f"
29
+ "@babel/helper-plugin-test-runner": "7.10.4"
30
+ }
32
31
  }