hermes-transform 0.5.0 → 0.8.0

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.
Files changed (76) hide show
  1. package/LICENSE +1 -1
  2. package/dist/detachedNode.js +25 -49
  3. package/dist/detachedNode.js.flow +3 -3
  4. package/dist/generated/TransformCloneSignatures.js.flow +1728 -9
  5. package/dist/generated/TransformReplaceSignatures.js.flow +921 -780
  6. package/dist/generated/node-types.js +1099 -1156
  7. package/dist/generated/node-types.js.flow +77 -125
  8. package/dist/generated/special-case-node-types.js +106 -85
  9. package/dist/generated/special-case-node-types.js.flow +28 -2
  10. package/dist/getVisitorKeys.js +4 -6
  11. package/dist/getVisitorKeys.js.flow +1 -1
  12. package/dist/index.js +13 -18
  13. package/dist/index.js.flow +8 -2
  14. package/dist/transform/Errors.js +8 -116
  15. package/dist/transform/Errors.js.flow +1 -1
  16. package/dist/transform/MutationContext.js +54 -67
  17. package/dist/transform/MutationContext.js.flow +4 -3
  18. package/dist/transform/TransformContext.js +100 -58
  19. package/dist/transform/TransformContext.js.flow +277 -141
  20. package/dist/transform/comments/comments.js +127 -40
  21. package/dist/transform/comments/comments.js.flow +106 -29
  22. package/dist/transform/comments/prettier/common/util.js +46 -47
  23. package/dist/transform/comments/prettier/common/util.js.flow +1 -1
  24. package/dist/transform/comments/prettier/language-js/comments.js +199 -216
  25. package/dist/transform/comments/prettier/language-js/comments.js.flow +1 -1
  26. package/dist/transform/comments/prettier/language-js/loc.js +10 -9
  27. package/dist/transform/comments/prettier/language-js/loc.js.flow +1 -1
  28. package/dist/transform/comments/prettier/language-js/printer-estree.js +7 -6
  29. package/dist/transform/comments/prettier/language-js/printer-estree.js.flow +1 -1
  30. package/dist/transform/comments/prettier/language-js/utils.js +18 -30
  31. package/dist/transform/comments/prettier/language-js/utils.js.flow +1 -1
  32. package/dist/transform/comments/prettier/main/comments.js +225 -298
  33. package/dist/transform/comments/prettier/main/comments.js.flow +1 -1
  34. package/dist/transform/comments/prettier/utils/get-last.js +2 -4
  35. package/dist/transform/comments/prettier/utils/get-last.js.flow +1 -1
  36. package/dist/transform/getTransformedAST.js +81 -104
  37. package/dist/transform/getTransformedAST.js.flow +18 -13
  38. package/dist/transform/mutations/AddComments.js +43 -0
  39. package/dist/transform/mutations/AddComments.js.flow +50 -0
  40. package/dist/transform/mutations/CloneCommentsTo.js +16 -24
  41. package/dist/transform/mutations/CloneCommentsTo.js.flow +2 -3
  42. package/dist/transform/mutations/InsertStatement.js +28 -30
  43. package/dist/transform/mutations/InsertStatement.js.flow +7 -2
  44. package/dist/transform/mutations/RemoveComment.js +25 -43
  45. package/dist/transform/mutations/RemoveComment.js.flow +1 -1
  46. package/dist/transform/mutations/RemoveNode.js +192 -0
  47. package/dist/transform/mutations/RemoveNode.js.flow +290 -0
  48. package/dist/transform/mutations/RemoveStatement.js +7 -9
  49. package/dist/transform/mutations/RemoveStatement.js.flow +1 -1
  50. package/dist/transform/mutations/ReplaceNode.js +36 -44
  51. package/dist/transform/mutations/ReplaceNode.js.flow +1 -1
  52. package/dist/transform/mutations/ReplaceStatementWithMany.js +11 -13
  53. package/dist/transform/mutations/ReplaceStatementWithMany.js.flow +1 -1
  54. package/dist/transform/mutations/utils/arrayUtils.js +16 -14
  55. package/dist/transform/mutations/utils/arrayUtils.js.flow +16 -1
  56. package/dist/transform/mutations/utils/getStatementParent.js +23 -28
  57. package/dist/transform/mutations/utils/getStatementParent.js.flow +2 -2
  58. package/dist/transform/mutations/utils/isValidModuleDeclarationParent.js +7 -24
  59. package/dist/transform/mutations/utils/isValidModuleDeclarationParent.js.flow +1 -1
  60. package/dist/transform/transform.js +58 -30
  61. package/dist/transform/transform.js.flow +51 -13
  62. package/dist/traverse/NodeEventGenerator.js +91 -165
  63. package/dist/traverse/NodeEventGenerator.js.flow +1 -1
  64. package/dist/traverse/SafeEmitter.js +20 -38
  65. package/dist/traverse/SafeEmitter.js.flow +1 -1
  66. package/dist/traverse/SimpleTraverser.js +67 -98
  67. package/dist/traverse/SimpleTraverser.js.flow +4 -1
  68. package/dist/traverse/esquery.js +6 -6
  69. package/dist/traverse/esquery.js.flow +1 -1
  70. package/dist/traverse/traverse.js +64 -52
  71. package/dist/traverse/traverse.js.flow +63 -10
  72. package/package.json +5 -3
  73. package/dist/transform/mutations/AddLeadingComments.js +0 -47
  74. package/dist/transform/mutations/AddLeadingComments.js.flow +0 -49
  75. package/dist/transform/mutations/AddTrailingComments.js +0 -47
  76. package/dist/transform/mutations/AddTrailingComments.js.flow +0 -49
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,18 +10,19 @@
10
10
 
11
11
  'use strict';
12
12
 
13
+ import type {ESNode} from 'hermes-estree';
13
14
  import type {Visitor} from '../traverse/traverse';
14
- import type {TransformContext} from './TransformContext';
15
+ import type {TransformContextAdditions} from './TransformContext';
15
16
 
16
17
  import * as prettier from 'prettier';
17
18
  import {getTransformedAST} from './getTransformedAST';
18
19
  import {SimpleTraverser} from '../traverse/SimpleTraverser';
19
20
 
20
- export type Visitors = Visitor<TransformContext>;
21
+ export type TransformVisitor = Visitor<TransformContextAdditions>;
21
22
 
22
23
  export function transform(
23
24
  originalCode: string,
24
- visitors: Visitor<TransformContext>,
25
+ visitors: TransformVisitor,
25
26
  prettierOptions: {...} = {},
26
27
  ): string {
27
28
  const {ast, astWasMutated, mutatedCode} = getTransformedAST(
@@ -33,14 +34,25 @@ export function transform(
33
34
  return originalCode;
34
35
  }
35
36
 
36
- // prettier fully expects the parent pointers are NOT set and
37
- // certain cases can crash due to prettier infinite-looping
38
- // whilst naively traversing the parent property
39
- // https://github.com/prettier/prettier/issues/11793
40
37
  SimpleTraverser.traverse(ast, {
41
38
  enter(node) {
39
+ // prettier fully expects the parent pointers are NOT set and
40
+ // certain cases can crash due to prettier infinite-looping
41
+ // whilst naively traversing the parent property
42
+ // https://github.com/prettier/prettier/issues/11793
42
43
  // $FlowExpectedError[cannot-write]
43
44
  delete node.parent;
45
+
46
+ // prettier currently relies on the AST being in the old-school, deprecated AST format for optional chaining
47
+ // so we have to apply their transform to our AST so it can actually format it.
48
+ if (node.type === 'ChainExpression') {
49
+ const newNode = transformChainExpression(node.expression);
50
+ // $FlowExpectedError[cannot-write]
51
+ delete node.expression;
52
+ // $FlowExpectedError[prop-missing]
53
+ // $FlowExpectedError[cannot-write]
54
+ Object.assign(node, newNode);
55
+ }
44
56
  },
45
57
  leave() {},
46
58
  });
@@ -51,10 +63,36 @@ export function transform(
51
63
  // $FlowExpectedError[cannot-write]
52
64
  delete ast.comments;
53
65
 
54
- return prettier.format(mutatedCode, {
55
- ...prettierOptions,
56
- parser() {
57
- return ast;
66
+ return prettier.format(
67
+ mutatedCode,
68
+ // $FlowExpectedError[incompatible-exact] - we don't want to create a dependency on the prettier types
69
+ {
70
+ ...prettierOptions,
71
+ parser() {
72
+ return ast;
73
+ },
58
74
  },
59
- });
75
+ );
76
+ }
77
+
78
+ // https://github.com/prettier/prettier/blob/d962466a828f8ef51435e3e8840178d90b7ec6cd/src/language-js/parse/postprocess/index.js#L161-L182
79
+ function transformChainExpression(node: ESNode) {
80
+ switch (node.type) {
81
+ case 'CallExpression':
82
+ // $FlowExpectedError[cannot-write]
83
+ node.type = 'OptionalCallExpression';
84
+ // $FlowExpectedError[cannot-write]
85
+ node.callee = transformChainExpression(node.callee);
86
+ break;
87
+
88
+ case 'MemberExpression':
89
+ // $FlowExpectedError[cannot-write]
90
+ node.type = 'OptionalMemberExpression';
91
+ // $FlowExpectedError[cannot-write]
92
+ node.object = transformChainExpression(node.object);
93
+ break;
94
+ // No default
95
+ }
96
+
97
+ return node;
60
98
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -9,8 +9,6 @@
9
9
  */
10
10
  'use strict';
11
11
 
12
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
13
-
14
12
  Object.defineProperty(exports, "__esModule", {
15
13
  value: true
16
14
  });
@@ -20,36 +18,14 @@ var _hermesEslint = require("hermes-eslint");
20
18
 
21
19
  var esquery = _interopRequireWildcard(require("./esquery"));
22
20
 
23
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
24
-
25
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
26
-
27
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
28
-
29
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
30
-
31
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
32
-
33
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
34
-
35
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
21
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
36
22
 
37
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
23
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
38
24
 
39
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
40
-
41
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
42
-
43
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
44
-
45
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
46
-
47
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
48
-
49
- var ESQUERY_OPTIONS = Object.freeze({
25
+ const ESQUERY_OPTIONS = Object.freeze({
50
26
  visitorKeys: _hermesEslint.VisitorKeys,
51
- fallback: function fallback(node) {
52
- throw new Error("No visitor keys found for node type \"".concat(node.type, "\"."));
27
+ fallback: node => {
28
+ throw new Error(`No visitor keys found for node type "${node.type}".`);
53
29
  }
54
30
  });
55
31
  /**
@@ -58,12 +34,8 @@ var ESQUERY_OPTIONS = Object.freeze({
58
34
  * @returns The union of the input arrays
59
35
  */
60
36
 
61
- function union() {
62
- for (var _len = arguments.length, arrays = new Array(_len), _key = 0; _key < _len; _key++) {
63
- arrays[_key] = arguments[_key];
64
- }
65
-
66
- return _toConsumableArray(new Set(arrays.flat()));
37
+ function union(...arrays) {
38
+ return [...new Set(arrays.flat())];
67
39
  }
68
40
  /**
69
41
  * Computes the intersection of one or more arrays
@@ -72,35 +44,15 @@ function union() {
72
44
  */
73
45
 
74
46
 
75
- function intersection() {
76
- for (var _len2 = arguments.length, arrays = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
77
- arrays[_key2] = arguments[_key2];
78
- }
79
-
47
+ function intersection(...arrays) {
80
48
  if (arrays.length === 0) {
81
49
  return [];
82
50
  }
83
51
 
84
- var result = _toConsumableArray(new Set(arrays[0]));
52
+ let result = [...new Set(arrays[0])];
85
53
 
86
- var _iterator = _createForOfIteratorHelper(arrays.slice(1)),
87
- _step;
88
-
89
- try {
90
- var _loop = function _loop() {
91
- var array = _step.value;
92
- result = result.filter(function (x) {
93
- return array.includes(x);
94
- });
95
- };
96
-
97
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
98
- _loop();
99
- }
100
- } catch (err) {
101
- _iterator.e(err);
102
- } finally {
103
- _iterator.f();
54
+ for (const array of arrays.slice(1)) {
55
+ result = result.filter(x => array.includes(x));
104
56
  }
105
57
 
106
58
  return result;
@@ -116,7 +68,7 @@ function getPossibleTypes(parsedSelector) {
116
68
  switch (parsedSelector.type) {
117
69
  case 'identifier':
118
70
  if (!(parsedSelector.value in _hermesEslint.VisitorKeys)) {
119
- throw new Error("Unexpected selector ".concat(parsedSelector.value));
71
+ throw new Error(`Unexpected selector ${parsedSelector.value}`);
120
72
  } // $FlowExpectedError[incompatible-return]
121
73
 
122
74
 
@@ -124,11 +76,11 @@ function getPossibleTypes(parsedSelector) {
124
76
 
125
77
  case 'matches':
126
78
  {
127
- var typesForComponents = parsedSelector.selectors.map(getPossibleTypes);
128
- var typesForComponentsNonNull = typesForComponents.filter(Boolean);
79
+ const typesForComponents = parsedSelector.selectors.map(getPossibleTypes);
80
+ const typesForComponentsNonNull = typesForComponents.filter(Boolean);
129
81
 
130
82
  if (typesForComponents.length === typesForComponentsNonNull.length) {
131
- return union.apply(void 0, _toConsumableArray(typesForComponentsNonNull));
83
+ return union(...typesForComponentsNonNull);
132
84
  }
133
85
 
134
86
  return null;
@@ -136,10 +88,9 @@ function getPossibleTypes(parsedSelector) {
136
88
 
137
89
  case 'compound':
138
90
  {
139
- var _typesForComponents = parsedSelector.selectors.map(getPossibleTypes).filter(Boolean); // If all of the components could match any type, then the compound could also match any type.
140
-
91
+ const typesForComponents = parsedSelector.selectors.map(getPossibleTypes).filter(Boolean); // If all of the components could match any type, then the compound could also match any type.
141
92
 
142
- if (!_typesForComponents.length) {
93
+ if (!typesForComponents.length) {
143
94
  return null;
144
95
  }
145
96
  /*
@@ -148,7 +99,7 @@ function getPossibleTypes(parsedSelector) {
148
99
  */
149
100
 
150
101
 
151
- return intersection.apply(void 0, _toConsumableArray(_typesForComponents));
102
+ return intersection(...typesForComponents);
152
103
  }
153
104
 
154
105
  case 'child':
@@ -186,9 +137,7 @@ function countClassAttributes(parsedSelector) {
186
137
  case 'compound':
187
138
  case 'not':
188
139
  case 'matches':
189
- return parsedSelector.selectors.reduce(function (sum, childSelector) {
190
- return sum + countClassAttributes(childSelector);
191
- }, 0);
140
+ return parsedSelector.selectors.reduce((sum, childSelector) => sum + countClassAttributes(childSelector), 0);
192
141
 
193
142
  case 'attribute':
194
143
  case 'field':
@@ -218,9 +167,7 @@ function countIdentifiers(parsedSelector) {
218
167
  case 'compound':
219
168
  case 'not':
220
169
  case 'matches':
221
- return parsedSelector.selectors.reduce(function (sum, childSelector) {
222
- return sum + countIdentifiers(childSelector);
223
- }, 0);
170
+ return parsedSelector.selectors.reduce((sum, childSelector) => sum + countIdentifiers(childSelector), 0);
224
171
 
225
172
  case 'identifier':
226
173
  return 1;
@@ -254,17 +201,17 @@ function compareSpecificity(selectorA, selectorB) {
254
201
 
255
202
  function tryParseSelector(rawSelector) {
256
203
  try {
257
- return esquery.parse(rawSelector.replace(/:exit$/, ''));
204
+ return esquery.parse(rawSelector.replace(/:exit$/u, ''));
258
205
  } catch (err) {
259
206
  if (err.location && err.location.start && typeof err.location.start.offset === 'number') {
260
- throw new SyntaxError("Syntax error in selector \"".concat(rawSelector, "\" at position ").concat(err.location.start.offset, ": ").concat(err.message));
207
+ throw new SyntaxError(`Syntax error in selector "${rawSelector}" at position ${err.location.start.offset}: ${err.message}`);
261
208
  }
262
209
 
263
210
  throw err;
264
211
  }
265
212
  }
266
213
 
267
- var selectorCache = new Map();
214
+ const selectorCache = new Map();
268
215
  /**
269
216
  * Parses a raw selector string, and returns the parsed selector along with specificity and type information.
270
217
  * @param rawSelector A raw AST selector
@@ -272,17 +219,17 @@ var selectorCache = new Map();
272
219
  */
273
220
 
274
221
  function parseSelector(rawSelector) {
275
- var cachedSelector = selectorCache.get(rawSelector);
222
+ const cachedSelector = selectorCache.get(rawSelector);
276
223
 
277
224
  if (cachedSelector) {
278
225
  return cachedSelector;
279
226
  }
280
227
 
281
- var parsedSelector = tryParseSelector(rawSelector);
282
- var result = {
283
- rawSelector: rawSelector,
228
+ const parsedSelector = tryParseSelector(rawSelector);
229
+ const result = {
230
+ rawSelector,
284
231
  isExit: rawSelector.endsWith(':exit'),
285
- parsedSelector: parsedSelector,
232
+ parsedSelector,
286
233
  listenerTypes: getPossibleTypes(parsedSelector),
287
234
  attributeCount: countClassAttributes(parsedSelector),
288
235
  identifierCount: countIdentifiers(parsedSelector)
@@ -295,38 +242,28 @@ function parseSelector(rawSelector) {
295
242
  */
296
243
 
297
244
 
298
- var NodeEventGenerator = /*#__PURE__*/function () {
245
+ class NodeEventGenerator {
299
246
  /**
300
247
  * @param emitter
301
248
  * An SafeEmitter which is the destination of events. This emitter must already
302
249
  * have registered listeners for all of the events that it needs to listen for.
303
250
  * (See lib/linter/safe-emitter.js for more details on `SafeEmitter`.)
304
251
  */
305
- function NodeEventGenerator(emitter) {
306
- var _this = this;
307
-
308
- _classCallCheck(this, NodeEventGenerator);
309
-
310
- _defineProperty(this, "emitter", void 0);
311
-
312
- _defineProperty(this, "_currentAncestry", []);
313
-
314
- _defineProperty(this, "_enterSelectorsByNodeType", new Map());
315
-
316
- _defineProperty(this, "_exitSelectorsByNodeType", new Map());
317
-
318
- _defineProperty(this, "_anyTypeEnterSelectors", []);
319
-
320
- _defineProperty(this, "_anyTypeExitSelectors", []);
321
-
252
+ constructor(emitter) {
253
+ this.emitter = void 0;
254
+ this._currentAncestry = [];
255
+ this._enterSelectorsByNodeType = new Map();
256
+ this._exitSelectorsByNodeType = new Map();
257
+ this._anyTypeEnterSelectors = [];
258
+ this._anyTypeExitSelectors = [];
322
259
  this.emitter = emitter;
323
- emitter.eventNames().forEach(function (rawSelector) {
324
- var selector = parseSelector(rawSelector);
260
+ emitter.eventNames().forEach(rawSelector => {
261
+ const selector = parseSelector(rawSelector);
325
262
 
326
263
  if (selector.listenerTypes) {
327
- var typeMap = selector.isExit ? _this._exitSelectorsByNodeType : _this._enterSelectorsByNodeType;
328
- selector.listenerTypes.forEach(function (nodeType) {
329
- var selectors = typeMap.get(nodeType);
264
+ const typeMap = selector.isExit ? this._exitSelectorsByNodeType : this._enterSelectorsByNodeType;
265
+ selector.listenerTypes.forEach(nodeType => {
266
+ const selectors = typeMap.get(nodeType);
330
267
 
331
268
  if (!selectors) {
332
269
  typeMap.set(nodeType, [selector]);
@@ -335,7 +272,7 @@ var NodeEventGenerator = /*#__PURE__*/function () {
335
272
  }
336
273
  });
337
274
  } else {
338
- var selectors = selector.isExit ? _this._anyTypeExitSelectors : _this._anyTypeEnterSelectors;
275
+ const selectors = selector.isExit ? this._anyTypeExitSelectors : this._anyTypeEnterSelectors;
339
276
  selectors.push(selector);
340
277
  }
341
278
  });
@@ -344,13 +281,9 @@ var NodeEventGenerator = /*#__PURE__*/function () {
344
281
 
345
282
  this._anyTypeExitSelectors.sort(compareSpecificity);
346
283
 
347
- this._enterSelectorsByNodeType.forEach(function (selectorList) {
348
- return selectorList.sort(compareSpecificity);
349
- });
284
+ this._enterSelectorsByNodeType.forEach(selectorList => selectorList.sort(compareSpecificity));
350
285
 
351
- this._exitSelectorsByNodeType.forEach(function (selectorList) {
352
- return selectorList.sort(compareSpecificity);
353
- });
286
+ this._exitSelectorsByNodeType.forEach(selectorList => selectorList.sort(compareSpecificity));
354
287
  }
355
288
  /**
356
289
  * Checks a selector against a node, and emits it if it matches
@@ -360,68 +293,61 @@ var NodeEventGenerator = /*#__PURE__*/function () {
360
293
  */
361
294
 
362
295
 
363
- _createClass(NodeEventGenerator, [{
364
- key: "_applySelector",
365
- value: function _applySelector(node, selector) {
366
- if (esquery.matches(node, selector.parsedSelector, this._currentAncestry, ESQUERY_OPTIONS)) {
367
- this.emitter.emit(selector.rawSelector, node);
368
- }
296
+ _applySelector(node, selector) {
297
+ if (esquery.matches(node, selector.parsedSelector, this._currentAncestry, ESQUERY_OPTIONS)) {
298
+ this.emitter.emit(selector.rawSelector, node);
369
299
  }
370
- /**
371
- * Applies all appropriate selectors to a node, in specificity order
372
- * @param node The node to check
373
- * @param isExit `false` if the node is currently being entered, `true` if it's currently being exited
374
- * @private
300
+ }
301
+ /**
302
+ * Applies all appropriate selectors to a node, in specificity order
303
+ * @param node The node to check
304
+ * @param isExit `false` if the node is currently being entered, `true` if it's currently being exited
305
+ * @private
306
+ */
307
+
308
+
309
+ _applySelectors(node, isExit) {
310
+ const selectorsByNodeType = (isExit ? this._exitSelectorsByNodeType : this._enterSelectorsByNodeType).get(node.type) || [];
311
+ const anyTypeSelectors = isExit ? this._anyTypeExitSelectors : this._anyTypeEnterSelectors;
312
+ /*
313
+ * selectorsByNodeType and anyTypeSelectors were already sorted by specificity in the constructor.
314
+ * Iterate through each of them, applying selectors in the right order.
375
315
  */
376
316
 
377
- }, {
378
- key: "_applySelectors",
379
- value: function _applySelectors(node, isExit) {
380
- var selectorsByNodeType = (isExit ? this._exitSelectorsByNodeType : this._enterSelectorsByNodeType).get(node.type) || [];
381
- var anyTypeSelectors = isExit ? this._anyTypeExitSelectors : this._anyTypeEnterSelectors;
382
- /*
383
- * selectorsByNodeType and anyTypeSelectors were already sorted by specificity in the constructor.
384
- * Iterate through each of them, applying selectors in the right order.
385
- */
386
-
387
- var selectorsByTypeIndex = 0;
388
- var anyTypeSelectorsIndex = 0;
389
-
390
- while (selectorsByTypeIndex < selectorsByNodeType.length || anyTypeSelectorsIndex < anyTypeSelectors.length) {
391
- if (selectorsByTypeIndex >= selectorsByNodeType.length || anyTypeSelectorsIndex < anyTypeSelectors.length && compareSpecificity(anyTypeSelectors[anyTypeSelectorsIndex], selectorsByNodeType[selectorsByTypeIndex]) < 0) {
392
- this._applySelector(node, anyTypeSelectors[anyTypeSelectorsIndex++]);
393
- } else {
394
- this._applySelector(node, selectorsByNodeType[selectorsByTypeIndex++]);
395
- }
317
+ let selectorsByTypeIndex = 0;
318
+ let anyTypeSelectorsIndex = 0;
319
+
320
+ while (selectorsByTypeIndex < selectorsByNodeType.length || anyTypeSelectorsIndex < anyTypeSelectors.length) {
321
+ if (selectorsByTypeIndex >= selectorsByNodeType.length || anyTypeSelectorsIndex < anyTypeSelectors.length && compareSpecificity(anyTypeSelectors[anyTypeSelectorsIndex], selectorsByNodeType[selectorsByTypeIndex]) < 0) {
322
+ this._applySelector(node, anyTypeSelectors[anyTypeSelectorsIndex++]);
323
+ } else {
324
+ this._applySelector(node, selectorsByNodeType[selectorsByTypeIndex++]);
396
325
  }
397
326
  }
398
- /**
399
- * Emits an event of entering AST node.
400
- * @param node A node which was entered.
401
- */
327
+ }
328
+ /**
329
+ * Emits an event of entering AST node.
330
+ * @param node A node which was entered.
331
+ */
402
332
 
403
- }, {
404
- key: "enterNode",
405
- value: function enterNode(node) {
406
- this._applySelectors(node, false);
407
333
 
408
- this._currentAncestry.unshift(node);
409
- }
410
- /**
411
- * Emits an event of leaving AST node.
412
- * @param node A node which was left.
413
- */
334
+ enterNode(node) {
335
+ this._applySelectors(node, false);
336
+
337
+ this._currentAncestry.unshift(node);
338
+ }
339
+ /**
340
+ * Emits an event of leaving AST node.
341
+ * @param node A node which was left.
342
+ */
414
343
 
415
- }, {
416
- key: "leaveNode",
417
- value: function leaveNode(node) {
418
- this._currentAncestry.shift();
419
344
 
420
- this._applySelectors(node, true);
421
- }
422
- }]);
345
+ leaveNode(node) {
346
+ this._currentAncestry.shift();
423
347
 
424
- return NodeEventGenerator;
425
- }();
348
+ this._applySelectors(node, true);
349
+ }
350
+
351
+ }
426
352
 
427
353
  exports.NodeEventGenerator = NodeEventGenerator;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -14,14 +14,6 @@ Object.defineProperty(exports, "__esModule", {
14
14
  });
15
15
  exports.SafeEmitter = void 0;
16
16
 
17
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
18
-
19
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
20
-
21
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
22
-
23
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
24
-
25
17
  /**
26
18
  * Creates an object which can listen for and emit events.
27
19
  * This is similar to the EventEmitter API in Node's standard library, but it has a few differences.
@@ -32,39 +24,29 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
32
24
  * 2. It calls listener functions without any `this` value. (`EventEmitter` calls listeners with a
33
25
  * `this` value of the emitter instance, which would give listeners access to other listeners.)
34
26
  */
35
- var SafeEmitter = /*#__PURE__*/function () {
36
- function SafeEmitter() {
37
- _classCallCheck(this, SafeEmitter);
38
-
39
- _defineProperty(this, "listeners", Object.create(null));
27
+ class SafeEmitter {
28
+ constructor() {
29
+ this.listeners = Object.create(null);
40
30
  }
41
31
 
42
- _createClass(SafeEmitter, [{
43
- key: "on",
44
- value: function on(eventName, listener) {
45
- if (eventName in this.listeners) {
46
- this.listeners[eventName].push(listener);
47
- } else {
48
- this.listeners[eventName] = [listener];
49
- }
50
- }
51
- }, {
52
- key: "emit",
53
- value: function emit(eventName, node) {
54
- if (eventName in this.listeners) {
55
- this.listeners[eventName].forEach(function (listener) {
56
- return listener(node);
57
- });
58
- }
32
+ on(eventName, listener) {
33
+ if (eventName in this.listeners) {
34
+ this.listeners[eventName].push(listener);
35
+ } else {
36
+ this.listeners[eventName] = [listener];
59
37
  }
60
- }, {
61
- key: "eventNames",
62
- value: function eventNames() {
63
- return Object.keys(this.listeners);
38
+ }
39
+
40
+ emit(eventName, node) {
41
+ if (eventName in this.listeners) {
42
+ this.listeners[eventName].forEach(listener => listener(node));
64
43
  }
65
- }]);
44
+ }
45
+
46
+ eventNames() {
47
+ return Object.keys(this.listeners);
48
+ }
66
49
 
67
- return SafeEmitter;
68
- }();
50
+ }
69
51
 
70
52
  exports.SafeEmitter = SafeEmitter;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.