hermes-transform 0.10.1 → 0.11.1

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.
@@ -7,6 +7,7 @@ exports.ArrowFunctionExpression = ArrowFunctionExpression;
7
7
  exports.ClassDeclaration = ClassDeclaration;
8
8
  exports.DeclareFunction = DeclareFunction;
9
9
  exports.Identifier = Identifier;
10
+ exports.MemberExpression = MemberExpression;
10
11
  exports.Program = Program;
11
12
  exports.TemplateElement = TemplateElement;
12
13
 
@@ -116,4 +117,18 @@ function DeclareFunction(props) {
116
117
  });
117
118
  (0, _detachedNode.setParentPointersInDirectChildren)(node);
118
119
  return node;
120
+ }
121
+
122
+ function MemberExpression(props) {
123
+ var _props$optional2;
124
+
125
+ const node = (0, _detachedNode.detachedProps)(props.parent, {
126
+ type: 'MemberExpression',
127
+ object: (0, _detachedNode.asDetachedNode)(props.object),
128
+ property: (0, _detachedNode.asDetachedNode)(props.property),
129
+ computed: props.computed,
130
+ optional: (_props$optional2 = props.optional) != null ? _props$optional2 : false
131
+ });
132
+ (0, _detachedNode.setParentPointersInDirectChildren)(node);
133
+ return node;
119
134
  }
@@ -21,6 +21,7 @@ import type {
21
21
  TemplateElement as TemplateElementType,
22
22
  Program as ProgramType,
23
23
  DocblockMetadata as DocblockMetadataType,
24
+ MemberExpression as MemberExpressionType,
24
25
  } from 'hermes-estree';
25
26
  import type {DetachedNode, MaybeDetachedNode} from '../../detachedNode';
26
27
 
@@ -203,3 +204,25 @@ export function DeclareFunction(props: {
203
204
  setParentPointersInDirectChildren(node);
204
205
  return node;
205
206
  }
207
+
208
+ export type MemberExpressionProps = {
209
+ +object: MaybeDetachedNode<MemberExpressionType['object']>,
210
+ +property: MaybeDetachedNode<MemberExpressionType['property']>,
211
+ +computed: MemberExpressionType['computed'],
212
+ +optional?: MemberExpressionType['optional'],
213
+ };
214
+
215
+ export function MemberExpression(props: {
216
+ ...$ReadOnly<MemberExpressionProps>,
217
+ +parent?: ESNode,
218
+ }): DetachedNode<MemberExpressionType> {
219
+ const node = detachedProps<MemberExpressionType>(props.parent, {
220
+ type: 'MemberExpression',
221
+ object: asDetachedNode(props.object),
222
+ property: asDetachedNode(props.property),
223
+ computed: props.computed,
224
+ optional: props.optional ?? false,
225
+ });
226
+ setParentPointersInDirectChildren(node);
227
+ return node;
228
+ }
package/dist/index.js CHANGED
@@ -12,7 +12,7 @@
12
12
  Object.defineProperty(exports, "__esModule", {
13
13
  value: true
14
14
  });
15
- exports.traverseWithContext = exports.traverse = exports.transform = exports.t = exports.print = exports.parse = exports.cloneJSDocCommentsToNewNode = exports.asDetachedNode = exports.SimpleTraverser = void 0;
15
+ exports.traverseWithContext = exports.traverse = exports.transform = exports.t = exports.print = exports.parse = exports.makeCommentOwnLine = exports.cloneJSDocCommentsToNewNode = exports.asDetachedNode = exports.SimpleTraverser = void 0;
16
16
 
17
17
  var _hermesParser = require("hermes-parser");
18
18
 
@@ -46,6 +46,7 @@ exports.asDetachedNode = _detachedNode.asDetachedNode;
46
46
  var _comments = require("./transform/comments/comments");
47
47
 
48
48
  exports.cloneJSDocCommentsToNewNode = _comments.cloneJSDocCommentsToNewNode;
49
+ exports.makeCommentOwnLine = _comments.makeCommentOwnLine;
49
50
 
50
51
  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); }
51
52
 
@@ -22,4 +22,7 @@ export {parse} from './transform/parse';
22
22
  export {print} from './transform/print';
23
23
  export * as t from './generated/node-types';
24
24
  export {asDetachedNode} from './detachedNode';
25
- export {cloneJSDocCommentsToNewNode} from './transform/comments/comments';
25
+ export {
26
+ cloneJSDocCommentsToNewNode,
27
+ makeCommentOwnLine,
28
+ } from './transform/comments/comments';
@@ -16,6 +16,7 @@ exports.getLeadingCommentsForNode = getLeadingCommentsForNode;
16
16
  exports.getTrailingCommentsForNode = getTrailingCommentsForNode;
17
17
  exports.isLeadingComment = isLeadingComment;
18
18
  exports.isTrailingComment = isTrailingComment;
19
+ exports.makeCommentOwnLine = makeCommentOwnLine;
19
20
  exports.moveCommentsToNewNode = moveCommentsToNewNode;
20
21
  exports.setCommentsOnNode = setCommentsOnNode;
21
22
 
@@ -67,7 +68,7 @@ function cloneJSDocCommentsToNewNode(oldNode, newNode) {
67
68
  return (0, _hermesEstree.isBlockComment)(comment) && // JSDoc comments always start with an extra asterisk
68
69
  comment.value.startsWith('*');
69
70
  });
70
- setCommentsOnNode(newNode, comments.map(cloneCommentWithMarkers));
71
+ setCommentsOnNode(newNode, [...getCommentsForNode(newNode), ...comments.map(cloneCommentWithMarkers)]);
71
72
  }
72
73
 
73
74
  function setCommentsOnNode(node, comments) {
@@ -165,6 +166,25 @@ function getFirstNonWhitespaceIndex(code) {
165
166
  return code.search(/\S/);
166
167
  }
167
168
 
169
+ function makeCommentOwnLine(code, comment) {
170
+ let newCode = code; // Since we always want a line break we need to ensure a newline is found when
171
+ // searching out from either side of the comment range.
172
+
173
+ let firstNewline = getFirstNewlineIndex(code);
174
+
175
+ if (firstNewline === -1) {
176
+ // No newline in file, lets add one.
177
+ newCode += _os.EOL;
178
+ firstNewline = newCode.length;
179
+ } // Prettier only uses these ranges for detecting whitespace, so this nonsensical
180
+ // range is safe.
181
+ // $FlowExpectedError[cannot-write]
182
+
183
+
184
+ comment.range = [firstNewline + 1, firstNewline];
185
+ return newCode;
186
+ }
187
+
168
188
  function appendCommentToSource(code, comment, placement) {
169
189
  let newCode = code;
170
190
 
@@ -180,20 +200,7 @@ function appendCommentToSource(code, comment, placement) {
180
200
  case CommentPlacement.LEADING_OWN_LINE:
181
201
  case CommentPlacement.TRAILING_OWN_LINE:
182
202
  {
183
- // Since we always want a line break we need to ensure a newline is found when
184
- // searching out from either side of the comment range.
185
- let firstNewline = getFirstNewlineIndex(code);
186
-
187
- if (firstNewline === -1) {
188
- // No newline in file, lets add one.
189
- newCode += _os.EOL;
190
- firstNewline = newCode.length;
191
- } // Prettier only uses these ranges for detecting whitespace, so this nonsensical
192
- // range is safe.
193
- // $FlowExpectedError[cannot-write]
194
-
195
-
196
- comment.range = [firstNewline + 1, firstNewline];
203
+ newCode = makeCommentOwnLine(code, comment);
197
204
  break;
198
205
  }
199
206
 
@@ -66,7 +66,10 @@ export function cloneJSDocCommentsToNewNode(
66
66
  comment.value.startsWith('*')
67
67
  );
68
68
  });
69
- setCommentsOnNode(newNode, comments.map(cloneCommentWithMarkers));
69
+ setCommentsOnNode(newNode, [
70
+ ...getCommentsForNode(newNode),
71
+ ...comments.map(cloneCommentWithMarkers),
72
+ ]);
70
73
  }
71
74
 
72
75
  export function setCommentsOnNode(
@@ -172,6 +175,25 @@ function getFirstNonWhitespaceIndex(code: string): number {
172
175
  return code.search(/\S/);
173
176
  }
174
177
 
178
+ export function makeCommentOwnLine(code: string, comment: Comment): string {
179
+ let newCode = code;
180
+ // Since we always want a line break we need to ensure a newline is found when
181
+ // searching out from either side of the comment range.
182
+ let firstNewline = getFirstNewlineIndex(code);
183
+ if (firstNewline === -1) {
184
+ // No newline in file, lets add one.
185
+ newCode += EOL;
186
+ firstNewline = newCode.length;
187
+ }
188
+
189
+ // Prettier only uses these ranges for detecting whitespace, so this nonsensical
190
+ // range is safe.
191
+ // $FlowExpectedError[cannot-write]
192
+ comment.range = [firstNewline + 1, firstNewline];
193
+
194
+ return newCode;
195
+ }
196
+
175
197
  export function appendCommentToSource(
176
198
  code: string,
177
199
  comment: Comment,
@@ -188,18 +210,7 @@ export function appendCommentToSource(
188
210
  switch (placement) {
189
211
  case CommentPlacement.LEADING_OWN_LINE:
190
212
  case CommentPlacement.TRAILING_OWN_LINE: {
191
- // Since we always want a line break we need to ensure a newline is found when
192
- // searching out from either side of the comment range.
193
- let firstNewline = getFirstNewlineIndex(code);
194
- if (firstNewline === -1) {
195
- // No newline in file, lets add one.
196
- newCode += EOL;
197
- firstNewline = newCode.length;
198
- }
199
- // Prettier only uses these ranges for detecting whitespace, so this nonsensical
200
- // range is safe.
201
- // $FlowExpectedError[cannot-write]
202
- comment.range = [firstNewline + 1, firstNewline];
213
+ newCode = makeCommentOwnLine(code, comment);
203
214
  break;
204
215
  }
205
216
  case CommentPlacement.LEADING_INLINE:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hermes-transform",
3
- "version": "0.10.1",
3
+ "version": "0.11.1",
4
4
  "description": "Tools built on top of Hermes-ESTree to enable codebase transformation",
5
5
  "main": "dist/index.js",
6
6
  "license": "MIT",
@@ -12,9 +12,9 @@
12
12
  "@babel/code-frame": "^7.16.0",
13
13
  "esquery": "^1.4.0",
14
14
  "flow-enums-runtime": "^0.0.6",
15
- "hermes-eslint": "0.10.1",
16
- "hermes-estree": "0.10.1",
17
- "hermes-parser": "0.10.1"
15
+ "hermes-eslint": "0.11.1",
16
+ "hermes-estree": "0.11.1",
17
+ "hermes-parser": "0.11.1"
18
18
  },
19
19
  "peerDependencies": {
20
20
  "prettier": "^2.7.1"