hermes-transform 0.5.0 → 0.6.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 (74) 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 +1761 -9
  5. package/dist/generated/TransformReplaceSignatures.js.flow +936 -774
  6. package/dist/generated/node-types.js +1117 -1132
  7. package/dist/generated/node-types.js.flow +26 -1
  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 +7 -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 +1 -1
  18. package/dist/transform/TransformContext.js +106 -54
  19. package/dist/transform/TransformContext.js.flow +255 -121
  20. package/dist/transform/comments/comments.js +25 -25
  21. package/dist/transform/comments/comments.js.flow +1 -1
  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 +85 -101
  37. package/dist/transform/getTransformedAST.js.flow +7 -2
  38. package/dist/transform/mutations/AddLeadingComments.js +15 -22
  39. package/dist/transform/mutations/AddLeadingComments.js.flow +1 -1
  40. package/dist/transform/mutations/AddTrailingComments.js +15 -22
  41. package/dist/transform/mutations/AddTrailingComments.js.flow +1 -1
  42. package/dist/transform/mutations/CloneCommentsTo.js +16 -23
  43. package/dist/transform/mutations/CloneCommentsTo.js.flow +1 -1
  44. package/dist/transform/mutations/InsertStatement.js +27 -30
  45. package/dist/transform/mutations/InsertStatement.js.flow +1 -1
  46. package/dist/transform/mutations/RemoveComment.js +25 -43
  47. package/dist/transform/mutations/RemoveComment.js.flow +1 -1
  48. package/dist/transform/mutations/RemoveNode.js +185 -0
  49. package/dist/transform/mutations/RemoveNode.js.flow +279 -0
  50. package/dist/transform/mutations/RemoveStatement.js +7 -9
  51. package/dist/transform/mutations/RemoveStatement.js.flow +1 -1
  52. package/dist/transform/mutations/ReplaceNode.js +36 -44
  53. package/dist/transform/mutations/ReplaceNode.js.flow +1 -1
  54. package/dist/transform/mutations/ReplaceStatementWithMany.js +11 -13
  55. package/dist/transform/mutations/ReplaceStatementWithMany.js.flow +1 -1
  56. package/dist/transform/mutations/utils/arrayUtils.js +2 -14
  57. package/dist/transform/mutations/utils/arrayUtils.js.flow +1 -1
  58. package/dist/transform/mutations/utils/getStatementParent.js +23 -28
  59. package/dist/transform/mutations/utils/getStatementParent.js.flow +2 -2
  60. package/dist/transform/mutations/utils/isValidModuleDeclarationParent.js +7 -24
  61. package/dist/transform/mutations/utils/isValidModuleDeclarationParent.js.flow +1 -1
  62. package/dist/transform/transform.js +20 -24
  63. package/dist/transform/transform.js.flow +12 -8
  64. package/dist/traverse/NodeEventGenerator.js +91 -165
  65. package/dist/traverse/NodeEventGenerator.js.flow +1 -1
  66. package/dist/traverse/SafeEmitter.js +20 -38
  67. package/dist/traverse/SafeEmitter.js.flow +1 -1
  68. package/dist/traverse/SimpleTraverser.js +67 -98
  69. package/dist/traverse/SimpleTraverser.js.flow +4 -1
  70. package/dist/traverse/esquery.js +6 -6
  71. package/dist/traverse/esquery.js.flow +1 -1
  72. package/dist/traverse/traverse.js +39 -51
  73. package/dist/traverse/traverse.js.flow +1 -1
  74. package/package.json +4 -3
@@ -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,86 +9,73 @@ var _Errors = require("./Errors");
9
9
 
10
10
  var _comments = require("./comments/comments");
11
11
 
12
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
13
-
14
- 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); } }
15
-
16
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
17
-
18
- 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; }
19
-
20
- var MutationContext = /*#__PURE__*/function () {
12
+ /**
13
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ *
18
+ *
19
+ * @format
20
+ */
21
+ class MutationContext {
21
22
  // TODO - do we care about this? Arrays are pretty safe to concurrently mutate
22
- function MutationContext(code) {
23
- _classCallCheck(this, MutationContext);
23
+ constructor(code) {
24
+ this._deletedNodes = new Set();
25
+ this._mutatedKeys = new Map();
26
+ this._mutatedArrays = new Map();
27
+ this.code = void 0;
28
+ this.code = code;
29
+ }
30
+ /**
31
+ * Marks a node and its entire subtree as deleted.
32
+ */
24
33
 
25
- _defineProperty(this, "_deletedNodes", new Set());
26
34
 
27
- _defineProperty(this, "_mutatedKeys", new Map());
35
+ markDeletion(node) {
36
+ this._deletedNodes.add(node);
37
+ }
38
+ /**
39
+ * Marks the key of the node as having been mutated.
40
+ */
28
41
 
29
- _defineProperty(this, "_mutatedArrays", new Map());
30
42
 
31
- _defineProperty(this, "code", void 0);
43
+ markMutation(node, key) {
44
+ var _map$get$add, _map$get;
32
45
 
33
- this.code = code;
46
+ this.assertNotDeleted(node, `Attempted to mutate a \`${node.type}.${key}\` on a deleted node.`);
47
+ this.assertNotMutated(node, key, `Attempted to mutate a \`${node.type}.${key}\` when it has already been mutated.`);
48
+ const map = Array.isArray( // $FlowExpectedError[prop-missing]
49
+ node[key]) ? this._mutatedArrays : this._mutatedKeys;
50
+ map.set(node, (_map$get$add = (_map$get = map.get(node)) == null ? void 0 : _map$get.add(key)) != null ? _map$get$add : new Set([key]));
34
51
  }
35
52
  /**
36
- * Marks a node and its entire subtree as deleted.
53
+ * Throws if the node has been deleted
37
54
  */
38
55
 
39
56
 
40
- _createClass(MutationContext, [{
41
- key: "markDeletion",
42
- value: function markDeletion(node) {
43
- this._deletedNodes.add(node);
44
- }
45
- /**
46
- * Marks the key of the node as having been mutated.
47
- */
48
-
49
- }, {
50
- key: "markMutation",
51
- value: function markMutation(node, key) {
52
- var _map$get$add, _map$get;
53
-
54
- this.assertNotDeleted(node, "Attempted to mutate a `".concat(node.type, ".").concat(key, "` on a deleted node."));
55
- this.assertNotMutated(node, key, "Attempted to mutate a `".concat(node.type, ".").concat(key, "` when it has already been mutated."));
56
- var map = Array.isArray( // $FlowExpectedError[prop-missing]
57
- node[key]) ? this._mutatedArrays : this._mutatedKeys;
58
- map.set(node, (_map$get$add = (_map$get = map.get(node)) === null || _map$get === void 0 ? void 0 : _map$get.add(key)) !== null && _map$get$add !== void 0 ? _map$get$add : new Set([key]));
59
- }
60
- /**
61
- * Throws if the node has been deleted
62
- */
63
-
64
- }, {
65
- key: "assertNotDeleted",
66
- value: function assertNotDeleted(node, message) {
67
- if (this._deletedNodes.has(node)) {
68
- throw new _Errors.NodeIsDeletedError(message);
69
- }
70
- }
71
- /**
72
- * Throws if the key of the node has been mutated
73
- */
74
-
75
- }, {
76
- key: "assertNotMutated",
77
- value: function assertNotMutated(node, key, message) {
78
- var _this$_mutatedKeys$ge;
79
-
80
- if (((_this$_mutatedKeys$ge = this._mutatedKeys.get(node)) === null || _this$_mutatedKeys$ge === void 0 ? void 0 : _this$_mutatedKeys$ge.has(key)) === true) {
81
- throw new _Errors.NodeIsMutatedError(message);
82
- }
57
+ assertNotDeleted(node, message) {
58
+ if (this._deletedNodes.has(node)) {
59
+ throw new _Errors.NodeIsDeletedError(message);
83
60
  }
84
- }, {
85
- key: "appendCommentToSource",
86
- value: function appendCommentToSource(comment) {
87
- this.code = (0, _comments.appendCommentToSource)(this.code, comment);
61
+ }
62
+ /**
63
+ * Throws if the key of the node has been mutated
64
+ */
65
+
66
+
67
+ assertNotMutated(node, key, message) {
68
+ var _this$_mutatedKeys$ge;
69
+
70
+ if (((_this$_mutatedKeys$ge = this._mutatedKeys.get(node)) == null ? void 0 : _this$_mutatedKeys$ge.has(key)) === true) {
71
+ throw new _Errors.NodeIsMutatedError(message);
88
72
  }
89
- }]);
73
+ }
74
+
75
+ appendCommentToSource(comment) {
76
+ this.code = (0, _comments.appendCommentToSource)(this.code, comment);
77
+ }
90
78
 
91
- return MutationContext;
92
- }();
79
+ }
93
80
 
94
81
  exports.MutationContext = MutationContext;
@@ -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.
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.getTransformContext = getTransformContext;
7
7
 
8
+ var _codeFrame = require("@babel/code-frame");
9
+
8
10
  var _detachedNode = require("../detachedNode");
9
11
 
10
12
  var _comments = require("./comments/comments");
@@ -19,29 +21,28 @@ var _InsertStatement = require("./mutations/InsertStatement");
19
21
 
20
22
  var _RemoveComment = require("./mutations/RemoveComment");
21
23
 
24
+ var _RemoveNode = require("./mutations/RemoveNode");
25
+
22
26
  var _RemoveStatement = require("./mutations/RemoveStatement");
23
27
 
24
28
  var _ReplaceNode = require("./mutations/ReplaceNode");
25
29
 
26
30
  var _ReplaceStatementWithMany = require("./mutations/ReplaceStatementWithMany");
27
31
 
28
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
29
-
30
- 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."); }
31
-
32
- 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); }
33
-
34
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
35
-
36
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
37
-
38
- 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; }
39
-
40
- function getTransformContext() {
32
+ /**
33
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
34
+ *
35
+ * This source code is licensed under the MIT license found in the
36
+ * LICENSE file in the root directory of this source tree.
37
+ *
38
+ *
39
+ * @format
40
+ */
41
+ function getTransformContext(code) {
41
42
  /**
42
43
  * The mutations in order of collection.
43
44
  */
44
- var mutations = [];
45
+ const mutations = [];
45
46
 
46
47
  function pushMutation(mutation) {
47
48
  if (mutation != null) {
@@ -49,81 +50,132 @@ function getTransformContext() {
49
50
  }
50
51
  }
51
52
 
52
- return {
53
- mutations: mutations,
53
+ const cloneAPIs = {
54
+ // $FlowExpectedError[incompatible-exact]
55
+ shallowCloneNode: node => {
56
+ if (node == null) {
57
+ return null;
58
+ }
54
59
 
55
- // $FlowExpectedError[unsafe-getters-setters]
56
- get astWasMutated() {
57
- return mutations.length > 0;
60
+ return (0, _detachedNode.shallowCloneNode)(node);
58
61
  },
59
-
60
62
  // $FlowExpectedError[incompatible-exact]
61
- shallowCloneNode: function (node, newProps) {
63
+ shallowCloneNodeWithOverrides: (node, newProps) => {
62
64
  if (node == null) {
63
65
  return null;
64
66
  }
65
67
 
66
68
  return (0, _detachedNode.shallowCloneNode)(node, newProps);
67
69
  },
68
- shallowCloneArray: function (nodes) {
70
+ shallowCloneArray: nodes => {
69
71
  if (nodes == null) {
70
72
  return null;
71
73
  }
72
74
 
73
- return nodes.map(function (node) {
74
- return (0, _detachedNode.shallowCloneNode)(node);
75
- });
75
+ return nodes.map(node => (0, _detachedNode.shallowCloneNode)(node));
76
76
  },
77
77
  // $FlowExpectedError[incompatible-exact]
78
- deepCloneNode: function (node, newProps) {
78
+ deepCloneNode: node => {
79
79
  if (node == null) {
80
80
  return null;
81
81
  }
82
82
 
83
- return (0, _detachedNode.deepCloneNode)(node, newProps);
84
- },
85
- insertAfterStatement: function (target, nodesToInsert) {
86
- pushMutation((0, _InsertStatement.createInsertStatementMutation)('after', target, toArray(nodesToInsert)));
87
- },
88
- insertBeforeStatement: function (target, nodesToInsert) {
89
- pushMutation((0, _InsertStatement.createInsertStatementMutation)('before', target, toArray(nodesToInsert)));
83
+ return (0, _detachedNode.deepCloneNode)(node);
90
84
  },
91
- replaceNode: function (target, nodeToReplaceWith, options) {
92
- pushMutation((0, _ReplaceNode.createReplaceNodeMutation)(target, nodeToReplaceWith, options));
93
- },
94
- replaceStatementWithMany: function (target, nodesToReplaceWith, options) {
95
- pushMutation((0, _ReplaceStatementWithMany.createReplaceStatementWithManyMutation)(target, nodesToReplaceWith, options));
96
- },
97
- removeStatement: function (node) {
98
- pushMutation((0, _RemoveStatement.createRemoveStatementMutation)(node));
99
- },
100
- //
101
- // Comment APIs
102
- //
103
- getComments: function (node) {
104
- return _toConsumableArray((0, _comments.getCommentsForNode)(node));
85
+ // $FlowExpectedError[incompatible-exact]
86
+ deepCloneNodeWithOverrides: (node, newProps) => {
87
+ if (node == null) {
88
+ return null;
89
+ }
90
+
91
+ return (0, _detachedNode.deepCloneNode)(node, newProps);
92
+ }
93
+ };
94
+ const commentAPIs = {
95
+ getComments: node => {
96
+ return [...(0, _comments.getCommentsForNode)(node)];
105
97
  },
106
- getLeadingComments: function (node) {
98
+ getLeadingComments: node => {
107
99
  return (0, _comments.getCommentsForNode)(node).filter(_comments.isLeadingComment);
108
100
  },
109
- getTrailingComments: function (node) {
101
+ getTrailingComments: node => {
110
102
  return (0, _comments.getCommentsForNode)(node).filter(_comments.isTrailingComment);
111
103
  },
112
- cloneCommentsTo: function (target, destination) {
104
+ cloneCommentsTo: (target, destination) => {
113
105
  pushMutation((0, _CloneCommentsTo.createCloneCommentsToMutation)(target, destination));
114
106
  },
115
- addLeadingComments: function (node, comments) {
107
+ addLeadingComments: (node, comments) => {
116
108
  pushMutation((0, _AddLeadingComments.createAddLeadingCommentsMutation)(node, toArray(comments)));
117
109
  },
118
- addTrailingComments: function (node, comments) {
110
+ addTrailingComments: (node, comments) => {
119
111
  pushMutation((0, _AddTrailingComments.createAddTrailingCommentsMutation)(node, toArray(comments)));
120
112
  },
121
- removeComments: function (comments) {
122
- toArray(comments).forEach(function (comment) {
113
+ removeComments: comments => {
114
+ toArray(comments).forEach(comment => {
123
115
  pushMutation((0, _RemoveComment.createRemoveCommentMutation)(comment));
124
116
  });
125
117
  }
126
118
  };
119
+ const insertAPIs = {
120
+ insertAfterStatement: (target, nodesToInsert) => {
121
+ pushMutation((0, _InsertStatement.createInsertStatementMutation)('after', target, toArray(nodesToInsert)));
122
+ },
123
+ insertBeforeStatement: (target, nodesToInsert) => {
124
+ pushMutation((0, _InsertStatement.createInsertStatementMutation)('before', target, toArray(nodesToInsert)));
125
+ }
126
+ };
127
+ const removeAPIs = {
128
+ removeNode: node => {
129
+ pushMutation((0, _RemoveNode.createRemoveNodeMutation)(node));
130
+ },
131
+ removeStatement: node => {
132
+ pushMutation((0, _RemoveStatement.createRemoveStatementMutation)(node));
133
+ }
134
+ };
135
+ const replaceAPIs = {
136
+ replaceNode: (target, nodeToReplaceWith, options) => {
137
+ pushMutation((0, _ReplaceNode.createReplaceNodeMutation)(target, nodeToReplaceWith, options));
138
+ },
139
+ replaceStatementWithMany: (target, nodesToReplaceWith, options) => {
140
+ pushMutation((0, _ReplaceStatementWithMany.createReplaceStatementWithManyMutation)(target, nodesToReplaceWith, options));
141
+ }
142
+ };
143
+ return {
144
+ mutations,
145
+
146
+ // $FlowExpectedError[unsafe-getters-setters]
147
+ get astWasMutated() {
148
+ return mutations.length > 0;
149
+ },
150
+
151
+ buildCodeFrame: (node, message) => {
152
+ // babel uses 1-indexed columns
153
+ const locForBabel = {
154
+ start: {
155
+ line: node.loc.start.line,
156
+ column: node.loc.start.column + 1
157
+ },
158
+ end: {
159
+ line: node.loc.end.line,
160
+ column: node.loc.end.column + 1
161
+ }
162
+ };
163
+ return (0, _codeFrame.codeFrameColumns)(code, locForBabel, {
164
+ linesAbove: 0,
165
+ linesBelow: 0,
166
+ highlightCode: process.env.NODE_ENV !== 'test',
167
+ message: message
168
+ });
169
+ },
170
+ buildSimpleCodeFrame: (node, message) => {
171
+ return `[${node.type}:${node.loc.start.line}:${node.loc.start.column}] ${message}`;
172
+ },
173
+ ...cloneAPIs,
174
+ ...commentAPIs,
175
+ ...insertAPIs,
176
+ ...removeAPIs,
177
+ ...replaceAPIs
178
+ };
127
179
  }
128
180
 
129
181
  function toArray(thing) {