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,283 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.transformProgram = transformProgram;
7
+
8
+ var _flowEstree = require("flow-estree");
9
+
10
+ var _SimpleTransform = require("../transform/SimpleTransform");
11
+
12
+ var _astNodeMutationHelpers = require("../transform/astNodeMutationHelpers");
13
+
14
+ var _Builders = require("../utils/Builders");
15
+
16
+ var _isReservedWord = _interopRequireDefault(require("../utils/isReservedWord"));
17
+
18
+ var _GenID = _interopRequireDefault(require("../utils/GenID"));
19
+
20
+ function _interopRequireDefault(obj) {
21
+ return obj && obj.__esModule ? obj : {
22
+ default: obj
23
+ };
24
+ }
25
+
26
+ function nameOfKey(key) {
27
+ switch (key.type) {
28
+ case 'Identifier':
29
+ return key.name;
30
+
31
+ case 'Literal':
32
+ if ((0, _flowEstree.isBigIntLiteral)(key)) {
33
+ return key.bigint;
34
+ }
35
+
36
+ return String(key.value);
37
+ }
38
+ }
39
+
40
+ function mapRecordDeclaration(genID, node) {
41
+ const ownProperties = [];
42
+ const staticProperties = [];
43
+ const methods = [];
44
+ const staticMethods = [];
45
+
46
+ for (const element of node.body.elements) {
47
+ switch (element.type) {
48
+ case 'RecordDeclarationProperty':
49
+ ownProperties.push(element);
50
+ break;
51
+
52
+ case 'RecordDeclarationStaticProperty':
53
+ staticProperties.push(element);
54
+ break;
55
+
56
+ case 'MethodDefinition':
57
+ if (element.static) {
58
+ staticMethods.push(element);
59
+ } else {
60
+ methods.push(element);
61
+ }
62
+
63
+ break;
64
+ }
65
+ }
66
+
67
+ const reservedPropNames = new Map();
68
+ const constructorParam = {
69
+ type: 'ObjectPattern',
70
+ properties: ownProperties.map(prop => {
71
+ const {
72
+ key,
73
+ defaultValue
74
+ } = prop;
75
+ const keyName = nameOfKey(key);
76
+
77
+ const getValue = bindingIdent => defaultValue != null ? {
78
+ type: 'AssignmentPattern',
79
+ left: bindingIdent,
80
+ right: (0, _astNodeMutationHelpers.deepCloneNode)(defaultValue),
81
+ ...(0, _Builders.etc)()
82
+ } : bindingIdent;
83
+
84
+ switch (key.type) {
85
+ case 'Identifier':
86
+ {
87
+ const needsNewBinding = (0, _isReservedWord.default)(keyName);
88
+ const bindingName = needsNewBinding ? genID.id() : keyName;
89
+ const bindingIdent = (0, _Builders.ident)(bindingName);
90
+
91
+ if (needsNewBinding) {
92
+ reservedPropNames.set(keyName, bindingName);
93
+ }
94
+
95
+ if (needsNewBinding) {
96
+ return {
97
+ type: 'Property',
98
+ kind: 'init',
99
+ key: (0, _astNodeMutationHelpers.shallowCloneNode)(key),
100
+ value: getValue(bindingIdent),
101
+ shorthand: false,
102
+ method: false,
103
+ computed: false,
104
+ ...(0, _Builders.etc)(),
105
+ parent: _Builders.EMPTY_PARENT
106
+ };
107
+ } else {
108
+ return {
109
+ type: 'Property',
110
+ kind: 'init',
111
+ key: (0, _astNodeMutationHelpers.shallowCloneNode)(key),
112
+ value: getValue(bindingIdent),
113
+ shorthand: true,
114
+ method: false,
115
+ computed: false,
116
+ ...(0, _Builders.etc)(),
117
+ parent: _Builders.EMPTY_PARENT
118
+ };
119
+ }
120
+ }
121
+
122
+ case 'Literal':
123
+ {
124
+ const bindingName = genID.id();
125
+ const bindingIdent = (0, _Builders.ident)(bindingName);
126
+ reservedPropNames.set(keyName, bindingName);
127
+ return {
128
+ type: 'Property',
129
+ kind: 'init',
130
+ key: (0, _astNodeMutationHelpers.shallowCloneNode)(key),
131
+ value: getValue(bindingIdent),
132
+ shorthand: false,
133
+ method: false,
134
+ computed: false,
135
+ ...(0, _Builders.etc)(),
136
+ parent: _Builders.EMPTY_PARENT
137
+ };
138
+ }
139
+ }
140
+ }),
141
+ typeAnnotation: null,
142
+ ...(0, _Builders.etc)()
143
+ };
144
+ const constructor = {
145
+ type: 'MethodDefinition',
146
+ key: (0, _Builders.ident)('constructor'),
147
+ kind: 'constructor',
148
+ computed: false,
149
+ static: false,
150
+ decorators: [],
151
+ value: {
152
+ type: 'FunctionExpression',
153
+ id: null,
154
+ params: [constructorParam],
155
+ body: {
156
+ type: 'BlockStatement',
157
+ body: ownProperties.map(({
158
+ key
159
+ }) => {
160
+ var _reservedPropNames$ge;
161
+
162
+ const keyName = nameOfKey(key);
163
+ const bindingIdent = (0, _Builders.ident)((_reservedPropNames$ge = reservedPropNames.get(keyName)) != null ? _reservedPropNames$ge : keyName);
164
+ const object = {
165
+ type: 'ThisExpression',
166
+ ...(0, _Builders.etc)()
167
+ };
168
+ const memberExpression = key.type === 'Identifier' ? {
169
+ type: 'MemberExpression',
170
+ object,
171
+ property: (0, _astNodeMutationHelpers.shallowCloneNode)(key),
172
+ computed: false,
173
+ optional: false,
174
+ ...(0, _Builders.etc)()
175
+ } : {
176
+ type: 'MemberExpression',
177
+ object,
178
+ property: (0, _astNodeMutationHelpers.shallowCloneNode)(key),
179
+ computed: true,
180
+ optional: false,
181
+ ...(0, _Builders.etc)()
182
+ };
183
+ return {
184
+ type: 'ExpressionStatement',
185
+ expression: {
186
+ type: 'AssignmentExpression',
187
+ operator: '=',
188
+ left: memberExpression,
189
+ right: bindingIdent,
190
+ ...(0, _Builders.etc)()
191
+ },
192
+ directive: null,
193
+ ...(0, _Builders.etc)()
194
+ };
195
+ }),
196
+ ...(0, _Builders.etc)()
197
+ },
198
+ generator: false,
199
+ async: false,
200
+ predicate: null,
201
+ returnType: null,
202
+ typeParameters: null,
203
+ ...(0, _Builders.etc)()
204
+ },
205
+ ...(0, _Builders.etc)(),
206
+ parent: _Builders.EMPTY_PARENT
207
+ };
208
+ const classStaticProperties = staticProperties.map(prop => ({
209
+ type: 'PropertyDefinition',
210
+ key: (0, _astNodeMutationHelpers.shallowCloneNode)(prop.key),
211
+ value: (0, _astNodeMutationHelpers.deepCloneNode)(prop.value),
212
+ static: true,
213
+ decorators: [],
214
+ typeAnnotation: null,
215
+ variance: null,
216
+ computed: false,
217
+ declare: false,
218
+ optional: false,
219
+ ...(0, _Builders.etc)(),
220
+ parent: _Builders.EMPTY_PARENT
221
+ }));
222
+ const classBodyElements = [constructor, ...methods, ...classStaticProperties, ...staticMethods];
223
+ return {
224
+ type: 'ClassDeclaration',
225
+ id: (0, _astNodeMutationHelpers.shallowCloneNode)(node.id),
226
+ body: {
227
+ type: 'ClassBody',
228
+ body: classBodyElements,
229
+ ...(0, _Builders.etc)(),
230
+ parent: _Builders.EMPTY_PARENT
231
+ },
232
+ superClass: null,
233
+ typeParameters: null,
234
+ superTypeArguments: null,
235
+ implements: [],
236
+ decorators: [],
237
+ ...(0, _Builders.etc)()
238
+ };
239
+ }
240
+
241
+ function mapRecordExpression(node) {
242
+ const obj = {
243
+ type: 'ObjectExpression',
244
+ properties: node.properties.properties,
245
+ ...(0, _Builders.etc)()
246
+ };
247
+ return {
248
+ type: 'NewExpression',
249
+ callee: node.recordConstructor,
250
+ arguments: [obj],
251
+ typeArguments: null,
252
+ ...(0, _Builders.etc)()
253
+ };
254
+ }
255
+
256
+ function transformProgram(program, _options) {
257
+ const genID = new _GenID.default('r');
258
+ return _SimpleTransform.SimpleTransform.transformProgram(program, {
259
+ transform(node) {
260
+ switch (node.type) {
261
+ case 'RecordDeclaration':
262
+ {
263
+ return mapRecordDeclaration(genID, node);
264
+ }
265
+
266
+ case 'RecordExpression':
267
+ {
268
+ return mapRecordExpression(node);
269
+ }
270
+
271
+ case 'Identifier':
272
+ {
273
+ genID.addUsage(node.name);
274
+ return node;
275
+ }
276
+
277
+ default:
278
+ return node;
279
+ }
280
+ }
281
+
282
+ });
283
+ }
@@ -0,0 +1,234 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ AbstractMethodDefinition: ['key', 'value'],
5
+ AbstractPropertyDefinition: ['key', 'value', 'variance'],
6
+ AnyTypeAnnotation: [],
7
+ ArrayExpression: ['elements'],
8
+ ArrayPattern: ['elements', 'typeAnnotation'],
9
+ ArrayTypeAnnotation: ['elementType'],
10
+ ArrowFunctionExpression: ['params', 'body', 'typeParameters', 'returnType', 'predicate'],
11
+ AsConstExpression: ['expression'],
12
+ AsExpression: ['expression', 'typeAnnotation'],
13
+ AssignmentExpression: ['left', 'right'],
14
+ AssignmentPattern: ['left', 'right'],
15
+ AwaitExpression: ['argument'],
16
+ BigIntLiteralTypeAnnotation: [],
17
+ BigIntTypeAnnotation: [],
18
+ BinaryExpression: ['left', 'right'],
19
+ BlockStatement: ['body'],
20
+ BooleanLiteralTypeAnnotation: [],
21
+ BooleanTypeAnnotation: [],
22
+ BreakStatement: ['label'],
23
+ CallExpression: ['callee', 'typeArguments', 'arguments'],
24
+ CatchClause: ['param', 'body'],
25
+ ChainExpression: ['expression'],
26
+ ClassBody: ['body'],
27
+ ClassDeclaration: ['id', 'typeParameters', 'superClass', 'superTypeArguments', 'implements', 'decorators', 'body'],
28
+ ClassExpression: ['id', 'typeParameters', 'superClass', 'superTypeArguments', 'implements', 'decorators', 'body'],
29
+ ClassImplements: ['id', 'typeParameters'],
30
+ ComponentDeclaration: ['id', 'params', 'body', 'typeParameters', 'rendersType'],
31
+ ComponentParameter: ['name', 'local'],
32
+ ComponentTypeAnnotation: ['params', 'rest', 'typeParameters', 'rendersType'],
33
+ ComponentTypeParameter: ['name', 'typeAnnotation'],
34
+ ConditionalExpression: ['test', 'consequent', 'alternate'],
35
+ ConditionalTypeAnnotation: ['checkType', 'extendsType', 'trueType', 'falseType'],
36
+ ConstructorTypeAnnotation: ['params', 'returnType', 'rest', 'typeParameters'],
37
+ ContinueStatement: ['label'],
38
+ DebuggerStatement: [],
39
+ DeclareClass: ['id', 'typeParameters', 'extends', 'implements', 'mixins', 'body'],
40
+ DeclareClassExtendsCall: ['callee', 'argument'],
41
+ DeclareComponent: ['id', 'params', 'rest', 'typeParameters', 'rendersType'],
42
+ DeclareEnum: ['id', 'body'],
43
+ DeclareExportAllDeclaration: ['source'],
44
+ DeclareExportDeclaration: ['declaration', 'specifiers', 'source'],
45
+ DeclareFunction: ['id', 'predicate'],
46
+ DeclareHook: ['id'],
47
+ DeclareInterface: ['id', 'typeParameters', 'extends', 'body'],
48
+ DeclareMethodDefinition: ['key', 'value'],
49
+ DeclareModule: ['id', 'body'],
50
+ DeclareModuleExports: ['typeAnnotation'],
51
+ DeclareNamespace: ['id', 'body'],
52
+ DeclareOpaqueType: ['id', 'typeParameters', 'impltype', 'lowerBound', 'upperBound', 'supertype'],
53
+ DeclareTypeAlias: ['id', 'typeParameters', 'right'],
54
+ DeclareVariable: ['id'],
55
+ DeclaredPredicate: ['value'],
56
+ Decorator: ['expression'],
57
+ DoWhileStatement: ['body', 'test'],
58
+ EmptyStatement: [],
59
+ EmptyTypeAnnotation: [],
60
+ EnumBigIntBody: ['members'],
61
+ EnumBigIntMember: ['id', 'init'],
62
+ EnumBody: ['members'],
63
+ EnumBooleanBody: ['members'],
64
+ EnumBooleanMember: ['id', 'init'],
65
+ EnumDeclaration: ['id', 'body'],
66
+ EnumDefaultedMember: ['id'],
67
+ EnumNumberBody: ['members'],
68
+ EnumNumberMember: ['id', 'init'],
69
+ EnumStringBody: ['members'],
70
+ EnumStringMember: ['id', 'init'],
71
+ EnumSymbolBody: ['members'],
72
+ ExistsTypeAnnotation: [],
73
+ ExportAllDeclaration: ['exported', 'source'],
74
+ ExportAssignment: ['expression'],
75
+ ExportDefaultDeclaration: ['declaration'],
76
+ ExportNamedDeclaration: ['declaration', 'specifiers', 'source'],
77
+ ExportNamespaceSpecifier: ['exported'],
78
+ ExportSpecifier: ['exported', 'local'],
79
+ ExpressionStatement: ['expression'],
80
+ ExternalModuleReference: ['expression'],
81
+ ForInStatement: ['left', 'right', 'body'],
82
+ ForOfStatement: ['left', 'right', 'body'],
83
+ ForStatement: ['init', 'test', 'update', 'body'],
84
+ FunctionDeclaration: ['id', 'params', 'body', 'typeParameters', 'returnType', 'predicate'],
85
+ FunctionExpression: ['id', 'params', 'body', 'typeParameters', 'returnType', 'predicate'],
86
+ FunctionTypeAnnotation: ['params', 'this', 'returnType', 'rest', 'typeParameters'],
87
+ FunctionTypeParam: ['name', 'typeAnnotation'],
88
+ GenericTypeAnnotation: ['id', 'typeParameters'],
89
+ HookDeclaration: ['id', 'params', 'body', 'typeParameters', 'returnType'],
90
+ HookTypeAnnotation: ['params', 'returnType', 'rest', 'typeParameters'],
91
+ Identifier: ['typeAnnotation'],
92
+ IfStatement: ['test', 'consequent', 'alternate'],
93
+ ImportAttribute: ['key', 'value'],
94
+ ImportDeclaration: ['specifiers', 'source', 'attributes'],
95
+ ImportDefaultSpecifier: ['local'],
96
+ ImportEqualsDeclaration: ['id', 'moduleReference'],
97
+ ImportExpression: ['source', 'options'],
98
+ ImportNamespaceSpecifier: ['local'],
99
+ ImportSpecifier: ['imported', 'local'],
100
+ ImportType: ['argument'],
101
+ IndexedAccessType: ['objectType', 'indexType'],
102
+ InferTypeAnnotation: ['typeParameter'],
103
+ InferredPredicate: [],
104
+ InterfaceDeclaration: ['id', 'typeParameters', 'extends', 'body'],
105
+ InterfaceExtends: ['id', 'typeParameters'],
106
+ InterfaceTypeAnnotation: ['extends', 'body'],
107
+ InterpreterDirective: [],
108
+ IntersectionTypeAnnotation: ['types'],
109
+ JSXAttribute: ['name', 'value'],
110
+ JSXClosingElement: ['name'],
111
+ JSXClosingFragment: [],
112
+ JSXElement: ['openingElement', 'children', 'closingElement'],
113
+ JSXEmptyExpression: [],
114
+ JSXExpressionContainer: ['expression'],
115
+ JSXFragment: ['openingFragment', 'children', 'closingFragment'],
116
+ JSXIdentifier: [],
117
+ JSXMemberExpression: ['object', 'property'],
118
+ JSXNamespacedName: ['namespace', 'name'],
119
+ JSXOpeningElement: ['name', 'attributes', 'typeArguments'],
120
+ JSXOpeningFragment: [],
121
+ JSXSpreadAttribute: ['argument'],
122
+ JSXSpreadChild: ['expression'],
123
+ JSXText: [],
124
+ KeyofTypeAnnotation: ['argument'],
125
+ LabeledStatement: ['label', 'body'],
126
+ LogicalExpression: ['left', 'right'],
127
+ MatchArrayPattern: ['elements', 'rest'],
128
+ MatchAsPattern: ['pattern', 'target'],
129
+ MatchBindingPattern: ['id'],
130
+ MatchExpression: ['argument', 'cases'],
131
+ MatchExpressionCase: ['pattern', 'body', 'guard'],
132
+ MatchIdentifierPattern: ['id'],
133
+ MatchInstanceObjectPattern: ['properties', 'rest'],
134
+ MatchInstancePattern: ['targetConstructor', 'properties'],
135
+ MatchLiteralPattern: ['literal'],
136
+ MatchMemberPattern: ['base', 'property'],
137
+ MatchObjectPattern: ['properties', 'rest'],
138
+ MatchObjectPatternProperty: ['key', 'pattern'],
139
+ MatchOrPattern: ['patterns'],
140
+ MatchRestPattern: ['argument'],
141
+ MatchStatement: ['argument', 'cases'],
142
+ MatchStatementCase: ['pattern', 'body', 'guard'],
143
+ MatchUnaryPattern: ['argument'],
144
+ MatchWildcardPattern: [],
145
+ MemberExpression: ['object', 'property'],
146
+ MetaProperty: ['meta', 'property'],
147
+ MethodDefinition: ['key', 'value', 'decorators'],
148
+ MixedTypeAnnotation: [],
149
+ NamespaceExportDeclaration: ['id'],
150
+ NeverTypeAnnotation: [],
151
+ NewExpression: ['callee', 'typeArguments', 'arguments'],
152
+ NonNullExpression: ['argument'],
153
+ NullLiteralTypeAnnotation: [],
154
+ NullableTypeAnnotation: ['typeAnnotation'],
155
+ NumberLiteralTypeAnnotation: [],
156
+ NumberTypeAnnotation: [],
157
+ ObjectExpression: ['properties'],
158
+ ObjectPattern: ['properties', 'typeAnnotation'],
159
+ ObjectTypeAnnotation: ['properties', 'indexers', 'callProperties', 'internalSlots'],
160
+ ObjectTypeCallProperty: ['value'],
161
+ ObjectTypeIndexer: ['id', 'key', 'value', 'variance'],
162
+ ObjectTypeInternalSlot: ['id', 'value'],
163
+ ObjectTypeMappedTypeProperty: ['keyTparam', 'propType', 'sourceType', 'variance'],
164
+ ObjectTypePrivateField: ['key'],
165
+ ObjectTypeProperty: ['key', 'value', 'variance'],
166
+ ObjectTypeSpreadProperty: ['argument'],
167
+ OpaqueType: ['id', 'typeParameters', 'impltype', 'lowerBound', 'upperBound', 'supertype'],
168
+ OptionalIndexedAccessType: ['objectType', 'indexType'],
169
+ ParameterProperty: ['key', 'value', 'typeAnnotation', 'variance', 'decorators'],
170
+ PrivateIdentifier: [],
171
+ Program: ['body'],
172
+ Property: ['key', 'value'],
173
+ PropertyDefinition: ['key', 'value', 'decorators', 'variance', 'typeAnnotation'],
174
+ QualifiedTypeIdentifier: ['qualification', 'id'],
175
+ QualifiedTypeofIdentifier: ['qualification', 'id'],
176
+ RecordDeclaration: ['id', 'typeParameters', 'implements', 'body'],
177
+ RecordDeclarationBody: ['elements'],
178
+ RecordDeclarationImplements: ['id', 'typeArguments'],
179
+ RecordDeclarationProperty: ['key', 'typeAnnotation', 'defaultValue'],
180
+ RecordDeclarationStaticProperty: ['key', 'typeAnnotation', 'value'],
181
+ RecordExpression: ['recordConstructor', 'typeArguments', 'properties'],
182
+ RecordExpressionProperties: ['properties'],
183
+ RendersMaybeType: ['argument'],
184
+ RendersStarType: ['argument'],
185
+ RendersType: ['argument'],
186
+ RestElement: ['argument'],
187
+ ReturnStatement: ['argument'],
188
+ SatisfiesExpression: ['expression', 'typeAnnotation'],
189
+ SequenceExpression: ['expressions'],
190
+ SpreadElement: ['argument'],
191
+ StaticBlock: ['body'],
192
+ StringLiteralTypeAnnotation: [],
193
+ StringTypeAnnotation: [],
194
+ Super: [],
195
+ SwitchCase: ['test', 'consequent'],
196
+ SwitchStatement: ['discriminant', 'cases'],
197
+ SymbolTypeAnnotation: [],
198
+ TaggedTemplateExpression: ['tag', 'quasi'],
199
+ TemplateElement: [],
200
+ TemplateLiteral: ['quasis', 'expressions'],
201
+ TemplateLiteralTypeAnnotation: ['quasis', 'types'],
202
+ ThisExpression: [],
203
+ ThisTypeAnnotation: [],
204
+ ThrowStatement: ['argument'],
205
+ TryStatement: ['block', 'handler', 'finalizer'],
206
+ TupleTypeAnnotation: ['elementTypes'],
207
+ TupleTypeElement: ['elementType'],
208
+ TupleTypeLabeledElement: ['label', 'elementType', 'variance'],
209
+ TupleTypeSpreadElement: ['label', 'typeAnnotation'],
210
+ TypeAlias: ['id', 'typeParameters', 'right'],
211
+ TypeAnnotation: ['typeAnnotation'],
212
+ TypeCastExpression: ['expression', 'typeAnnotation'],
213
+ TypeOperator: ['typeAnnotation'],
214
+ TypeParameter: ['bound', 'variance', 'default'],
215
+ TypeParameterDeclaration: ['params'],
216
+ TypeParameterInstantiation: ['params'],
217
+ TypePredicate: ['parameterName', 'typeAnnotation'],
218
+ TypeofTypeAnnotation: ['argument', 'typeArguments'],
219
+ UnaryExpression: ['argument'],
220
+ UndefinedTypeAnnotation: [],
221
+ UnionTypeAnnotation: ['types'],
222
+ UnknownTypeAnnotation: [],
223
+ UpdateExpression: ['argument'],
224
+ VariableDeclaration: ['declarations'],
225
+ VariableDeclarator: ['id', 'init'],
226
+ Variance: [],
227
+ VoidTypeAnnotation: [],
228
+ WhileStatement: ['test', 'body'],
229
+ WithStatement: ['object', 'body'],
230
+ YieldExpression: ['argument'],
231
+ OptionalMemberExpression: ['object', 'property'],
232
+ OptionalCallExpression: ['callee', 'typeArguments', 'arguments'],
233
+ Literal: []
234
+ };
@@ -0,0 +1,87 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getModuleDocblock = getModuleDocblock;
7
+ exports.parseDocblockString = parseDocblockString;
8
+ const DIRECTIVE_REGEX = /^\s*@([a-zA-Z0-9_-]+)( +.+)?$/;
9
+
10
+ function parseDocblockString(docblock) {
11
+ const directiveLines = docblock.split('\n').map(line => line.trimStart().replace(/^\* ?/, '').trim()).filter(line => line.startsWith('@'));
12
+ const directives = Object.create(null);
13
+
14
+ for (const line of directiveLines) {
15
+ var _match$;
16
+
17
+ const match = DIRECTIVE_REGEX.exec(line);
18
+
19
+ if (match == null) {
20
+ continue;
21
+ }
22
+
23
+ const name = match[1];
24
+ const value = ((_match$ = match[2]) != null ? _match$ : '').trim();
25
+
26
+ if (directives[name]) {
27
+ directives[name].push(value);
28
+ } else {
29
+ directives[name] = [value];
30
+ }
31
+ }
32
+
33
+ return directives;
34
+ }
35
+
36
+ function getModuleDocblock(hermesProgram) {
37
+ const docblockNode = (() => {
38
+ if (hermesProgram.type !== 'Program') {
39
+ return null;
40
+ }
41
+
42
+ const program = hermesProgram;
43
+
44
+ if (program.comments.length === 0) {
45
+ return null;
46
+ }
47
+
48
+ const firstComment = (() => {
49
+ const first = program.comments[0];
50
+
51
+ if (first.type === 'Block') {
52
+ return first;
53
+ }
54
+
55
+ if (program.comments.length === 1) {
56
+ return null;
57
+ }
58
+
59
+ const second = program.comments[1];
60
+
61
+ if (first.type === 'Line' && first.range[0] === 0 && second.type === 'Block') {
62
+ return second;
63
+ }
64
+
65
+ return null;
66
+ })();
67
+
68
+ if (firstComment == null) {
69
+ return null;
70
+ }
71
+
72
+ if (program.body.length > 0 && program.body[0].range[0] < firstComment.range[0]) {
73
+ return null;
74
+ }
75
+
76
+ return firstComment;
77
+ })();
78
+
79
+ if (docblockNode == null) {
80
+ return null;
81
+ }
82
+
83
+ return {
84
+ directives: parseDocblockString(docblockNode.value),
85
+ comment: docblockNode
86
+ };
87
+ }