flow-parser 0.318.0 → 0.319.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 (102) hide show
  1. package/oxidized/FlowParser.js +249 -0
  2. package/oxidized/FlowParser.js.flow +457 -0
  3. package/oxidized/FlowParserDeserializer.js +209 -0
  4. package/oxidized/FlowParserDeserializer.js.flow +323 -0
  5. package/oxidized/FlowParserNodeDeserializers.js +1767 -0
  6. package/oxidized/FlowParserNodeDeserializers.js.flow +18 -0
  7. package/oxidized/FlowParserWASM.js +1 -0
  8. package/oxidized/FlowParserWASM.js.flow +119 -0
  9. package/oxidized/HermesAST.js.flow +57 -0
  10. package/oxidized/HermesParserDecodeUTF8String.js +45 -0
  11. package/oxidized/HermesParserDecodeUTF8String.js.flow +65 -0
  12. package/oxidized/ParserOptions.js +8 -0
  13. package/oxidized/ParserOptions.js.flow +55 -0
  14. package/oxidized/babel/TransformESTreeToBabel.js +1055 -0
  15. package/oxidized/babel/TransformESTreeToBabel.js.flow +1349 -0
  16. package/oxidized/estree/StripFlowTypes.js +158 -0
  17. package/oxidized/estree/StripFlowTypes.js.flow +158 -0
  18. package/oxidized/estree/StripFlowTypesForBabel.js +176 -0
  19. package/oxidized/estree/StripFlowTypesForBabel.js.flow +216 -0
  20. package/oxidized/estree/TransformComponentSyntax.js +751 -0
  21. package/oxidized/estree/TransformComponentSyntax.js.flow +864 -0
  22. package/oxidized/estree/TransformEnumSyntax.js +92 -0
  23. package/oxidized/estree/TransformEnumSyntax.js.flow +125 -0
  24. package/oxidized/estree/TransformMatchSyntax.js +990 -0
  25. package/oxidized/estree/TransformMatchSyntax.js.flow +991 -0
  26. package/oxidized/estree/TransformRecordSyntax.js +283 -0
  27. package/oxidized/estree/TransformRecordSyntax.js.flow +310 -0
  28. package/oxidized/generated/ESTreeVisitorKeys.js +234 -0
  29. package/oxidized/generated/ESTreeVisitorKeys.js.flow +22 -0
  30. package/oxidized/getModuleDocblock.js +87 -0
  31. package/oxidized/getModuleDocblock.js.flow +119 -0
  32. package/oxidized/index.js +220 -0
  33. package/oxidized/index.js.flow +183 -0
  34. package/oxidized/oxidized-src/FlowParser.js +249 -0
  35. package/oxidized/oxidized-src/FlowParserDeserializer.js +209 -0
  36. package/oxidized/oxidized-src/FlowParserNodeDeserializers.js +1767 -0
  37. package/oxidized/oxidized-src/HermesParserDecodeUTF8String.js +45 -0
  38. package/oxidized/oxidized-src/ParserOptions.js +8 -0
  39. package/oxidized/oxidized-src/babel/TransformESTreeToBabel.js +1055 -0
  40. package/oxidized/oxidized-src/estree/StripFlowTypes.js +158 -0
  41. package/oxidized/oxidized-src/estree/StripFlowTypesForBabel.js +176 -0
  42. package/oxidized/oxidized-src/estree/TransformComponentSyntax.js +751 -0
  43. package/oxidized/oxidized-src/estree/TransformEnumSyntax.js +92 -0
  44. package/oxidized/oxidized-src/estree/TransformMatchSyntax.js +990 -0
  45. package/oxidized/oxidized-src/estree/TransformRecordSyntax.js +283 -0
  46. package/oxidized/oxidized-src/generated/ESTreeVisitorKeys.js +234 -0
  47. package/oxidized/oxidized-src/getModuleDocblock.js +87 -0
  48. package/oxidized/oxidized-src/index.js +220 -0
  49. package/oxidized/oxidized-src/transform/SimpleTransform.js +95 -0
  50. package/oxidized/oxidized-src/transform/astArrayMutationHelpers.js +52 -0
  51. package/oxidized/oxidized-src/transform/astNodeMutationHelpers.js +142 -0
  52. package/oxidized/oxidized-src/transform/print/comments/comments.js +245 -0
  53. package/oxidized/oxidized-src/transform/print/comments/prettier/common/util.js +235 -0
  54. package/oxidized/oxidized-src/transform/print/comments/prettier/language-js/comments.js +663 -0
  55. package/oxidized/oxidized-src/transform/print/comments/prettier/language-js/loc.js +30 -0
  56. package/oxidized/oxidized-src/transform/print/comments/prettier/language-js/printer-estree.js +23 -0
  57. package/oxidized/oxidized-src/transform/print/comments/prettier/language-js/utils.js +89 -0
  58. package/oxidized/oxidized-src/transform/print/comments/prettier/main/comments.js +374 -0
  59. package/oxidized/oxidized-src/transform/print/comments/prettier/utils/get-last.js +5 -0
  60. package/oxidized/oxidized-src/transform/print/detachedNodeTypes.js +1 -0
  61. package/oxidized/oxidized-src/transform/print/print.js +68 -0
  62. package/oxidized/oxidized-src/traverse/SimpleTraverser.js +90 -0
  63. package/oxidized/oxidized-src/traverse/getVisitorKeys.js +29 -0
  64. package/oxidized/oxidized-src/utils/Builders.js +181 -0
  65. package/oxidized/oxidized-src/utils/GenID.js +37 -0
  66. package/oxidized/oxidized-src/utils/createSyntaxError.js +15 -0
  67. package/oxidized/oxidized-src/utils/isReservedWord.js +53 -0
  68. package/oxidized/oxidized-src/utils/mutateESTreeASTForPrettier.js +85 -0
  69. package/oxidized/transform/SimpleTransform.js +95 -0
  70. package/oxidized/transform/SimpleTransform.js.flow +168 -0
  71. package/oxidized/transform/astArrayMutationHelpers.js +52 -0
  72. package/oxidized/transform/astArrayMutationHelpers.js.flow +71 -0
  73. package/oxidized/transform/astNodeMutationHelpers.js +142 -0
  74. package/oxidized/transform/astNodeMutationHelpers.js.flow +252 -0
  75. package/oxidized/transform/print/comments/comments.js +245 -0
  76. package/oxidized/transform/print/comments/comments.js.flow +330 -0
  77. package/oxidized/transform/print/comments/prettier/common/util.js +235 -0
  78. package/oxidized/transform/print/comments/prettier/language-js/comments.js +663 -0
  79. package/oxidized/transform/print/comments/prettier/language-js/loc.js +30 -0
  80. package/oxidized/transform/print/comments/prettier/language-js/printer-estree.js +23 -0
  81. package/oxidized/transform/print/comments/prettier/language-js/utils.js +89 -0
  82. package/oxidized/transform/print/comments/prettier/main/comments.js +374 -0
  83. package/oxidized/transform/print/comments/prettier/utils/get-last.js +5 -0
  84. package/oxidized/transform/print/detachedNodeTypes.js +1 -0
  85. package/oxidized/transform/print/detachedNodeTypes.js.flow +24 -0
  86. package/oxidized/transform/print/print.js +68 -0
  87. package/oxidized/transform/print/print.js.flow +87 -0
  88. package/oxidized/traverse/SimpleTraverser.js +90 -0
  89. package/oxidized/traverse/SimpleTraverser.js.flow +133 -0
  90. package/oxidized/traverse/getVisitorKeys.js +29 -0
  91. package/oxidized/traverse/getVisitorKeys.js.flow +36 -0
  92. package/oxidized/utils/Builders.js +181 -0
  93. package/oxidized/utils/Builders.js.flow +218 -0
  94. package/oxidized/utils/GenID.js +37 -0
  95. package/oxidized/utils/GenID.js.flow +39 -0
  96. package/oxidized/utils/createSyntaxError.js +15 -0
  97. package/oxidized/utils/createSyntaxError.js.flow +24 -0
  98. package/oxidized/utils/isReservedWord.js +53 -0
  99. package/oxidized/utils/isReservedWord.js.flow +57 -0
  100. package/oxidized/utils/mutateESTreeASTForPrettier.js +85 -0
  101. package/oxidized/utils/mutateESTreeASTForPrettier.js.flow +130 -0
  102. package/package.json +6 -4
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ * @format
9
+ */
10
+
11
+ 'use strict';
12
+
13
+ const genPrefix = '$$gen$';
14
+
15
+ export default class GenID {
16
+ genN: number = 0;
17
+ +used: Set<string> = new Set();
18
+ +prefix: string;
19
+
20
+ constructor(uniqueTransformPrefix: string) {
21
+ this.prefix = `${genPrefix}${uniqueTransformPrefix}`;
22
+ }
23
+
24
+ id(): string {
25
+ let name;
26
+ do {
27
+ name = `${this.prefix}${this.genN}`;
28
+ this.genN++;
29
+ } while (this.used.has(name));
30
+ this.used.add(name);
31
+ return name;
32
+ }
33
+
34
+ addUsage(name: string): void {
35
+ if (name.startsWith(this.prefix)) {
36
+ this.used.add(name);
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createSyntaxError = createSyntaxError;
7
+
8
+ function createSyntaxError(node, err) {
9
+ const syntaxError = new SyntaxError(err);
10
+ syntaxError.loc = {
11
+ line: node.loc.start.line,
12
+ column: node.loc.start.column
13
+ };
14
+ return syntaxError;
15
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ * @format
9
+ */
10
+
11
+ 'use strict';
12
+
13
+ import type {ESNode} from 'flow-estree';
14
+
15
+ export function createSyntaxError(node: ESNode, err: string): SyntaxError {
16
+ const syntaxError = new SyntaxError(err);
17
+ // $FlowExpectedError[prop-missing]
18
+ syntaxError.loc = {
19
+ line: node.loc.start.line,
20
+ column: node.loc.start.column,
21
+ };
22
+
23
+ return syntaxError;
24
+ }
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = isReservedWord;
7
+
8
+ function isReservedWord(name) {
9
+ switch (name) {
10
+ case 'await':
11
+ case 'break':
12
+ case 'case':
13
+ case 'catch':
14
+ case 'class':
15
+ case 'const':
16
+ case 'continue':
17
+ case 'debugger':
18
+ case 'default':
19
+ case 'delete':
20
+ case 'do':
21
+ case 'else':
22
+ case 'enum':
23
+ case 'export':
24
+ case 'extends':
25
+ case 'false':
26
+ case 'finally':
27
+ case 'for':
28
+ case 'function':
29
+ case 'if':
30
+ case 'import':
31
+ case 'in':
32
+ case 'instanceof':
33
+ case 'new':
34
+ case 'null':
35
+ case 'return':
36
+ case 'super':
37
+ case 'switch':
38
+ case 'this':
39
+ case 'throw':
40
+ case 'true':
41
+ case 'try':
42
+ case 'typeof':
43
+ case 'var':
44
+ case 'void':
45
+ case 'while':
46
+ case 'with':
47
+ case 'yield':
48
+ return true;
49
+
50
+ default:
51
+ return false;
52
+ }
53
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ * @format
9
+ */
10
+
11
+ 'use strict';
12
+
13
+ export default function isReservedWord(name: string): boolean {
14
+ switch (name) {
15
+ case 'await':
16
+ case 'break':
17
+ case 'case':
18
+ case 'catch':
19
+ case 'class':
20
+ case 'const':
21
+ case 'continue':
22
+ case 'debugger':
23
+ case 'default':
24
+ case 'delete':
25
+ case 'do':
26
+ case 'else':
27
+ case 'enum':
28
+ case 'export':
29
+ case 'extends':
30
+ case 'false':
31
+ case 'finally':
32
+ case 'for':
33
+ case 'function':
34
+ case 'if':
35
+ case 'import':
36
+ case 'in':
37
+ case 'instanceof':
38
+ case 'new':
39
+ case 'null':
40
+ case 'return':
41
+ case 'super':
42
+ case 'switch':
43
+ case 'this':
44
+ case 'throw':
45
+ case 'true':
46
+ case 'try':
47
+ case 'typeof':
48
+ case 'var':
49
+ case 'void':
50
+ case 'while':
51
+ case 'with':
52
+ case 'yield':
53
+ return true;
54
+ default:
55
+ return false;
56
+ }
57
+ }
@@ -0,0 +1,85 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = mutate;
7
+
8
+ var _SimpleTransform = require("../transform/SimpleTransform");
9
+
10
+ function transformChainExpression(node, comments) {
11
+ if (comments != null) {
12
+ var _node$comments;
13
+
14
+ const joinedComments = comments.concat((_node$comments = node.comments) != null ? _node$comments : []);
15
+ node.comments = joinedComments;
16
+ }
17
+
18
+ switch (node.type) {
19
+ case 'CallExpression':
20
+ return { ...node,
21
+ type: 'OptionalCallExpression',
22
+ callee: transformChainExpression(node.callee)
23
+ };
24
+
25
+ case 'MemberExpression':
26
+ return { ...node,
27
+ type: 'OptionalMemberExpression',
28
+ object: transformChainExpression(node.object)
29
+ };
30
+ }
31
+
32
+ return node;
33
+ }
34
+
35
+ function mutate(rootNode, visitorKeys) {
36
+ _SimpleTransform.SimpleTransform.transform(rootNode, {
37
+ transform(node) {
38
+ if (node.parent) {
39
+ delete node.parent;
40
+ }
41
+
42
+ if (node.type === 'ChainExpression') {
43
+ return transformChainExpression(node.expression, node == null ? void 0 : node.comments);
44
+ }
45
+
46
+ if (node.type === 'ObjectTypeProperty') {
47
+ if (node.method === false && node.kind === 'init' && node.range[0] === 1 && node.value.range[0] === 1) {
48
+ node.value = { ...node.value,
49
+ range: [2, node.value.range[1]]
50
+ };
51
+ }
52
+
53
+ return node;
54
+ }
55
+
56
+ if (node.type === 'ImportSpecifier') {
57
+ if (node.local.name === node.imported.name) {
58
+ if (node.local.range == null) {
59
+ node.local.range = [0, 0];
60
+ }
61
+
62
+ node.imported.range = [...node.local.range];
63
+ }
64
+
65
+ return node;
66
+ }
67
+
68
+ if (node.type === 'ExportSpecifier') {
69
+ if (node.local.name === node.exported.name) {
70
+ if (node.local.range == null) {
71
+ node.local.range = [0, 0];
72
+ }
73
+
74
+ node.exported.range = [...node.local.range];
75
+ }
76
+
77
+ return node;
78
+ }
79
+
80
+ return node;
81
+ },
82
+
83
+ visitorKeys
84
+ });
85
+ }
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict
8
+ * @format
9
+ */
10
+
11
+ 'use strict';
12
+
13
+ import type {ESNode, Program, Comment} from 'flow-estree';
14
+ import type {VisitorKeysType} from '../traverse/getVisitorKeys';
15
+ import {SimpleTransform} from '../transform/SimpleTransform';
16
+
17
+ // https://github.com/prettier/prettier/blob/d962466a828f8ef51435e3e8840178d90b7ec6cd/src/language-js/parse/postprocess/index.js#L161-L182
18
+ function transformChainExpression(
19
+ node: ESNode,
20
+ comments: ?ReadonlyArray<Comment>,
21
+ ): ESNode {
22
+ if (comments != null) {
23
+ // $FlowExpectedError[prop-missing]
24
+ const joinedComments = comments.concat(node.comments ?? []);
25
+ // $FlowExpectedError[prop-missing]
26
+ // $FlowFixMe[cannot-write]
27
+ node.comments = joinedComments;
28
+ }
29
+ switch (node.type) {
30
+ case 'CallExpression':
31
+ // $FlowExpectedError[cannot-spread-interface]
32
+ return {
33
+ ...node,
34
+ type: 'OptionalCallExpression',
35
+ callee: transformChainExpression(node.callee),
36
+ };
37
+
38
+ case 'MemberExpression':
39
+ // $FlowExpectedError[cannot-spread-interface]
40
+ return {
41
+ ...node,
42
+ type: 'OptionalMemberExpression',
43
+ object: transformChainExpression(node.object),
44
+ };
45
+ // No default
46
+ }
47
+
48
+ return node;
49
+ }
50
+
51
+ export default function mutate(
52
+ rootNode: Program,
53
+ visitorKeys: ?VisitorKeysType,
54
+ ): void {
55
+ // Since we don't return the result of `transform` we need to be careful not to replace the Program root node.
56
+ SimpleTransform.transform(rootNode, {
57
+ transform(node): ESNode | null {
58
+ // prettier fully expects the parent pointers are NOT set and
59
+ // certain cases can crash due to prettier infinite-looping
60
+ // whilst naively traversing the parent property
61
+ // https://github.com/prettier/prettier/issues/11793
62
+ // Note: Only needed for prettier V2, this is supported in V3
63
+ if (node.parent) {
64
+ // $FlowExpectedError[cannot-write]
65
+ delete node.parent;
66
+ }
67
+
68
+ // prettier currently relies on the AST being in the old-school, deprecated AST format for optional chaining
69
+ // so we have to apply their transform to our AST so it can actually format it.
70
+ // Note: Only needed for prettier V2, this is supported in V3
71
+ if (node.type === 'ChainExpression') {
72
+ // $FlowFixMe[prop-missing]
73
+ return transformChainExpression(node.expression, node?.comments);
74
+ }
75
+
76
+ // Prettier currently relies on comparing the `node` vs `node.value` start positions to know if an
77
+ // `ObjectTypeProperty` is a method or not (instead of using the `node.method` boolean). To correctly print
78
+ // the node when its not a method we need the start position to be different from the `node.value`s start
79
+ // position.
80
+ if (node.type === 'ObjectTypeProperty') {
81
+ if (
82
+ node.method === false &&
83
+ node.kind === 'init' &&
84
+ node.range[0] === 1 &&
85
+ node.value.range[0] === 1
86
+ ) {
87
+ // $FlowExpectedError[cannot-write]
88
+ // $FlowExpectedError[cannot-spread-interface]
89
+ node.value = {
90
+ ...node.value,
91
+ range: [2, node.value.range[1]],
92
+ };
93
+ }
94
+ return node;
95
+ }
96
+
97
+ // Prettier currently relies on comparing the the start positions to know if the import/export specifier should have a
98
+ // rename (eg `Name` vs `Name as Name`) when the name is exactly the same
99
+ // So we need to ensure that the range is always the same to avoid the useless code printing
100
+ if (node.type === 'ImportSpecifier') {
101
+ if (node.local.name === node.imported.name) {
102
+ if (node.local.range == null) {
103
+ // for our TS-ast printing which has no locs
104
+ // $FlowExpectedError[cannot-write]
105
+ node.local.range = [0, 0];
106
+ }
107
+ // $FlowExpectedError[cannot-write]
108
+ node.imported.range = [...node.local.range];
109
+ }
110
+ return node;
111
+ }
112
+
113
+ if (node.type === 'ExportSpecifier') {
114
+ if (node.local.name === node.exported.name) {
115
+ if (node.local.range == null) {
116
+ // for our TS-ast printing which has no locs
117
+ // $FlowExpectedError[cannot-write]
118
+ node.local.range = [0, 0];
119
+ }
120
+ // $FlowExpectedError[cannot-write]
121
+ node.exported.range = [...node.local.range];
122
+ }
123
+ return node;
124
+ }
125
+
126
+ return node;
127
+ },
128
+ visitorKeys,
129
+ });
130
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flow-parser",
3
- "version": "0.318.0",
3
+ "version": "0.319.0",
4
4
  "description": "JavaScript parser written in OCaml. Produces ESTree AST",
5
5
  "homepage": "https://flow.org",
6
6
  "license": "MIT",
@@ -9,7 +9,8 @@
9
9
  "email": "flow@fb.com"
10
10
  },
11
11
  "files": [
12
- "flow_parser.js"
12
+ "flow_parser.js",
13
+ "oxidized"
13
14
  ],
14
15
  "main": "flow_parser.js",
15
16
  "repository": {
@@ -21,7 +22,9 @@
21
22
  "test": "node test/run_tests.js",
22
23
  "build": "make js"
23
24
  },
24
- "dependencies": {},
25
+ "dependencies": {
26
+ "flow-estree": "0.319.0"
27
+ },
25
28
  "devDependencies": {
26
29
  "@babel/generator": "7.7.4",
27
30
  "@babel/parser": "7.7.4",
@@ -29,7 +32,6 @@
29
32
  "chalk": "^4.1.2",
30
33
  "espree": "9.3.2",
31
34
  "flow-enums-runtime": "0.0.6",
32
- "flow-estree": "0.0.1",
33
35
  "hermes-estree": "0.36.1",
34
36
  "hermes-parser": "0.36.1",
35
37
  "minimist": ">=1.2.6",