@react-native/codegen 0.72.1 → 0.72.2

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 (119) hide show
  1. package/lib/CodegenSchema.d.ts +348 -0
  2. package/lib/CodegenSchema.js.flow +31 -3
  3. package/lib/SchemaValidator.d.ts +11 -0
  4. package/lib/cli/combine/combine-js-to-schema.js +8 -8
  5. package/lib/cli/combine/combine-js-to-schema.js.flow +8 -7
  6. package/lib/cli/parser/parser.js +8 -15
  7. package/lib/cli/parser/parser.js.flow +8 -14
  8. package/lib/generators/Utils.js +16 -0
  9. package/lib/generators/Utils.js.flow +20 -0
  10. package/lib/generators/__test_fixtures__/fixtures.js +2 -1
  11. package/lib/generators/__test_fixtures__/fixtures.js.flow +2 -1
  12. package/lib/generators/components/ComponentsGeneratorUtils.js +10 -1
  13. package/lib/generators/components/ComponentsGeneratorUtils.js.flow +12 -2
  14. package/lib/generators/components/CppHelpers.js +8 -15
  15. package/lib/generators/components/CppHelpers.js.flow +8 -19
  16. package/lib/generators/components/GenerateEventEmitterCpp.js +7 -3
  17. package/lib/generators/components/GenerateEventEmitterCpp.js.flow +7 -3
  18. package/lib/generators/components/GenerateEventEmitterH.js +2 -2
  19. package/lib/generators/components/GenerateEventEmitterH.js.flow +1 -2
  20. package/lib/generators/components/GeneratePropsH.js +3 -4
  21. package/lib/generators/components/GeneratePropsH.js.flow +2 -4
  22. package/lib/generators/components/GeneratePropsJavaDelegate.js +2 -0
  23. package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +2 -0
  24. package/lib/generators/components/GeneratePropsJavaInterface.js +3 -0
  25. package/lib/generators/components/GeneratePropsJavaInterface.js.flow +3 -0
  26. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js +8 -0
  27. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +12 -0
  28. package/lib/generators/components/GenerateTests.js +3 -2
  29. package/lib/generators/components/GenerateTests.js.flow +3 -1
  30. package/lib/generators/components/GenerateViewConfigJs.js +5 -2
  31. package/lib/generators/components/GenerateViewConfigJs.js.flow +5 -2
  32. package/lib/generators/components/JavaHelpers.js +9 -0
  33. package/lib/generators/components/JavaHelpers.js.flow +12 -1
  34. package/lib/generators/components/__test_fixtures__/fixtures.js +41 -0
  35. package/lib/generators/components/__test_fixtures__/fixtures.js.flow +42 -0
  36. package/lib/generators/modules/GenerateModuleCpp.js +9 -4
  37. package/lib/generators/modules/GenerateModuleCpp.js.flow +11 -3
  38. package/lib/generators/modules/GenerateModuleH.js +185 -33
  39. package/lib/generators/modules/GenerateModuleH.js.flow +203 -25
  40. package/lib/generators/modules/GenerateModuleJavaSpec.js +2 -2
  41. package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +5 -5
  42. package/lib/generators/modules/GenerateModuleJniCpp.js +2 -2
  43. package/lib/generators/modules/GenerateModuleJniCpp.js.flow +5 -5
  44. package/lib/generators/modules/GenerateModuleObjCpp/index.js +2 -2
  45. package/lib/generators/modules/GenerateModuleObjCpp/index.js.flow +2 -2
  46. package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +2 -2
  47. package/lib/generators/modules/Utils.js +4 -0
  48. package/lib/generators/modules/Utils.js.flow +6 -0
  49. package/lib/generators/modules/__test_fixtures__/fixtures.js +152 -10
  50. package/lib/generators/modules/__test_fixtures__/fixtures.js.flow +152 -10
  51. package/lib/parsers/error-utils.js +1 -19
  52. package/lib/parsers/error-utils.js.flow +1 -19
  53. package/lib/parsers/errors.d.ts +10 -0
  54. package/lib/parsers/errors.js +9 -29
  55. package/lib/parsers/errors.js.flow +2 -20
  56. package/lib/parsers/flow/Visitor.js +37 -0
  57. package/lib/parsers/flow/Visitor.js.flow +41 -0
  58. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +20 -2
  59. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +20 -2
  60. package/lib/parsers/flow/components/commands.js +3 -0
  61. package/lib/parsers/flow/components/commands.js.flow +2 -1
  62. package/lib/parsers/flow/components/componentsUtils.js +10 -0
  63. package/lib/parsers/flow/components/componentsUtils.js.flow +11 -1
  64. package/lib/parsers/flow/components/events.js.flow +1 -1
  65. package/lib/parsers/flow/components/extends.js.flow +1 -1
  66. package/lib/parsers/flow/components/index.js.flow +1 -1
  67. package/lib/parsers/flow/components/options.js.flow +1 -1
  68. package/lib/parsers/flow/components/props.js.flow +1 -1
  69. package/lib/parsers/flow/modules/__test_fixtures__/failures.js +54 -0
  70. package/lib/parsers/flow/modules/__test_fixtures__/failures.js.flow +56 -0
  71. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +64 -1
  72. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +66 -1
  73. package/lib/parsers/flow/modules/index.js +99 -25
  74. package/lib/parsers/flow/modules/index.js.flow +106 -22
  75. package/lib/parsers/flow/parser.d.ts +10 -0
  76. package/lib/parsers/flow/parser.js +122 -32
  77. package/lib/parsers/flow/parser.js.flow +144 -24
  78. package/lib/parsers/flow/utils.js +33 -19
  79. package/lib/parsers/flow/utils.js.flow +37 -22
  80. package/lib/parsers/parser.d.ts +17 -0
  81. package/lib/parsers/parser.js.flow +102 -17
  82. package/lib/parsers/parserMock.js +87 -30
  83. package/lib/parsers/parserMock.js.flow +118 -24
  84. package/lib/parsers/parsers-commons.js +121 -119
  85. package/lib/parsers/parsers-commons.js.flow +130 -131
  86. package/lib/parsers/parsers-primitives.js +75 -12
  87. package/lib/parsers/parsers-primitives.js.flow +92 -13
  88. package/lib/parsers/schema/index.d.ts +10 -0
  89. package/lib/parsers/typescript/Visitor.js +42 -0
  90. package/lib/parsers/typescript/Visitor.js.flow +47 -0
  91. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +22 -0
  92. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +22 -0
  93. package/lib/parsers/typescript/components/commands.js +3 -0
  94. package/lib/parsers/typescript/components/commands.js.flow +2 -1
  95. package/lib/parsers/typescript/components/componentsUtils.js +5 -0
  96. package/lib/parsers/typescript/components/componentsUtils.js.flow +6 -1
  97. package/lib/parsers/typescript/components/events.js.flow +1 -1
  98. package/lib/parsers/typescript/components/extends.js.flow +1 -1
  99. package/lib/parsers/typescript/components/index.js.flow +1 -1
  100. package/lib/parsers/typescript/components/options.js.flow +1 -1
  101. package/lib/parsers/typescript/components/props.js.flow +1 -1
  102. package/lib/parsers/typescript/modules/__test_fixtures__/failures.js +52 -0
  103. package/lib/parsers/typescript/modules/__test_fixtures__/failures.js.flow +54 -0
  104. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js +142 -0
  105. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js.flow +146 -0
  106. package/lib/parsers/typescript/modules/index.js +266 -87
  107. package/lib/parsers/typescript/modules/index.js.flow +230 -48
  108. package/lib/parsers/typescript/parser.d.ts +10 -0
  109. package/lib/parsers/typescript/parser.js +131 -25
  110. package/lib/parsers/typescript/parser.js.flow +137 -26
  111. package/lib/parsers/typescript/utils.js +40 -20
  112. package/lib/parsers/typescript/utils.js.flow +44 -24
  113. package/lib/parsers/utils.js +0 -125
  114. package/lib/parsers/utils.js.flow +3 -70
  115. package/package.json +4 -1
  116. package/lib/parsers/flow/index.js +0 -80
  117. package/lib/parsers/flow/index.js.flow +0 -85
  118. package/lib/parsers/typescript/index.js +0 -85
  119. package/lib/parsers/typescript/index.js.flow +0 -94
@@ -38,9 +38,26 @@ function _toPrimitive(input, hint) {
38
38
  }
39
39
  return (hint === 'string' ? String : Number)(input);
40
40
  }
41
+ // $FlowFixMe[untyped-import] there's no flowtype flow-parser
42
+ const flowParser = require('flow-parser');
41
43
  const _require = require('./errors'),
42
44
  UnsupportedObjectPropertyTypeAnnotationParserError =
43
45
  _require.UnsupportedObjectPropertyTypeAnnotationParserError;
46
+ const schemaMock = {
47
+ modules: {
48
+ StringPropNativeComponentView: {
49
+ type: 'Component',
50
+ components: {
51
+ StringPropNativeComponentView: {
52
+ extendsProps: [],
53
+ events: [],
54
+ props: [],
55
+ commands: [],
56
+ },
57
+ },
58
+ },
59
+ },
60
+ };
44
61
  export class MockedParser {
45
62
  constructor() {
46
63
  _defineProperty(
@@ -49,37 +66,19 @@ export class MockedParser {
49
66
  'TypeParameterInstantiation',
50
67
  );
51
68
  }
52
- getKeyName(propertyOrIndex, hasteModuleName) {
53
- var _propertyOrIndex$id$n, _propertyOrIndex$id;
54
- switch (propertyOrIndex.type) {
55
- case 'ObjectTypeProperty':
56
- return propertyOrIndex.key.name;
57
- case 'ObjectTypeIndexer':
58
- // flow index name is optional
59
- return (_propertyOrIndex$id$n =
60
- (_propertyOrIndex$id = propertyOrIndex.id) === null ||
61
- _propertyOrIndex$id === void 0
62
- ? void 0
63
- : _propertyOrIndex$id.name) !== null &&
64
- _propertyOrIndex$id$n !== void 0
65
- ? _propertyOrIndex$id$n
66
- : 'key';
67
- default:
68
- throw new UnsupportedObjectPropertyTypeAnnotationParserError(
69
- hasteModuleName,
70
- propertyOrIndex,
71
- propertyOrIndex.type,
72
- this.language(),
73
- );
74
- }
75
- }
76
- getMaybeEnumMemberType(maybeEnumDeclaration) {
77
- return maybeEnumDeclaration.body.type
78
- .replace('EnumNumberBody', 'NumberTypeAnnotation')
79
- .replace('EnumStringBody', 'StringTypeAnnotation');
69
+ isProperty(property) {
70
+ return property.type === 'ObjectTypeProperty';
80
71
  }
81
- isEnumDeclaration(maybeEnumDeclaration) {
82
- return maybeEnumDeclaration.type === 'EnumDeclaration';
72
+ getKeyName(property, hasteModuleName) {
73
+ if (!this.isProperty(property)) {
74
+ throw new UnsupportedObjectPropertyTypeAnnotationParserError(
75
+ hasteModuleName,
76
+ property,
77
+ property.type,
78
+ this.language(),
79
+ );
80
+ }
81
+ return property.key.name;
83
82
  }
84
83
  language() {
85
84
  return 'Flow';
@@ -93,4 +92,62 @@ export class MockedParser {
93
92
  remapUnionTypeAnnotationMemberNames(membersTypes) {
94
93
  return [];
95
94
  }
95
+ parseFile(filename) {
96
+ return schemaMock;
97
+ }
98
+ parseString(contents, filename) {
99
+ return schemaMock;
100
+ }
101
+ parseModuleFixture(filename) {
102
+ return schemaMock;
103
+ }
104
+ getAst(contents) {
105
+ return flowParser.parse(contents, {
106
+ enums: true,
107
+ });
108
+ }
109
+ getFunctionTypeAnnotationParameters(functionTypeAnnotation) {
110
+ return functionTypeAnnotation.params;
111
+ }
112
+ getFunctionNameFromParameter(parameter) {
113
+ return parameter.name;
114
+ }
115
+ getParameterName(parameter) {
116
+ return parameter.name.name;
117
+ }
118
+ getParameterTypeAnnotation(parameter) {
119
+ return parameter.typeAnnotation;
120
+ }
121
+ getFunctionTypeAnnotationReturnType(functionTypeAnnotation) {
122
+ return functionTypeAnnotation.returnType;
123
+ }
124
+ parseEnumMembersType(typeAnnotation) {
125
+ return typeAnnotation.type;
126
+ }
127
+ validateEnumMembersSupported(typeAnnotation, enumMembersType) {
128
+ return;
129
+ }
130
+ parseEnumMembers(typeAnnotation) {
131
+ return typeAnnotation.type === 'StringTypeAnnotation'
132
+ ? [
133
+ {
134
+ name: 'Hello',
135
+ value: 'hello',
136
+ },
137
+ {
138
+ name: 'Goodbye',
139
+ value: 'goodbye',
140
+ },
141
+ ]
142
+ : [
143
+ {
144
+ name: 'On',
145
+ value: '1',
146
+ },
147
+ {
148
+ name: 'Off',
149
+ value: '0',
150
+ },
151
+ ];
152
+ }
96
153
  }
@@ -10,42 +10,57 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- import type {UnionTypeAnnotationMemberType} from '../CodegenSchema.js';
14
13
  import type {Parser} from './parser';
15
14
  import type {ParserType} from './errors';
15
+ import type {
16
+ UnionTypeAnnotationMemberType,
17
+ SchemaType,
18
+ NamedShape,
19
+ Nullable,
20
+ NativeModuleParamTypeAnnotation,
21
+ NativeModuleEnumMemberType,
22
+ NativeModuleEnumMembers,
23
+ } from '../CodegenSchema';
16
24
 
25
+ // $FlowFixMe[untyped-import] there's no flowtype flow-parser
26
+ const flowParser = require('flow-parser');
17
27
  const {
18
28
  UnsupportedObjectPropertyTypeAnnotationParserError,
19
29
  } = require('./errors');
20
30
 
31
+ const schemaMock = {
32
+ modules: {
33
+ StringPropNativeComponentView: {
34
+ type: 'Component',
35
+ components: {
36
+ StringPropNativeComponentView: {
37
+ extendsProps: [],
38
+ events: [],
39
+ props: [],
40
+ commands: [],
41
+ },
42
+ },
43
+ },
44
+ },
45
+ };
46
+
21
47
  export class MockedParser implements Parser {
22
48
  typeParameterInstantiation: string = 'TypeParameterInstantiation';
23
49
 
24
- getKeyName(propertyOrIndex: $FlowFixMe, hasteModuleName: string): string {
25
- switch (propertyOrIndex.type) {
26
- case 'ObjectTypeProperty':
27
- return propertyOrIndex.key.name;
28
- case 'ObjectTypeIndexer':
29
- // flow index name is optional
30
- return propertyOrIndex.id?.name ?? 'key';
31
- default:
32
- throw new UnsupportedObjectPropertyTypeAnnotationParserError(
33
- hasteModuleName,
34
- propertyOrIndex,
35
- propertyOrIndex.type,
36
- this.language(),
37
- );
38
- }
39
- }
40
-
41
- getMaybeEnumMemberType(maybeEnumDeclaration: $FlowFixMe): string {
42
- return maybeEnumDeclaration.body.type
43
- .replace('EnumNumberBody', 'NumberTypeAnnotation')
44
- .replace('EnumStringBody', 'StringTypeAnnotation');
50
+ isProperty(property: $FlowFixMe): boolean {
51
+ return property.type === 'ObjectTypeProperty';
45
52
  }
46
53
 
47
- isEnumDeclaration(maybeEnumDeclaration: $FlowFixMe): boolean {
48
- return maybeEnumDeclaration.type === 'EnumDeclaration';
54
+ getKeyName(property: $FlowFixMe, hasteModuleName: string): string {
55
+ if (!this.isProperty(property)) {
56
+ throw new UnsupportedObjectPropertyTypeAnnotationParserError(
57
+ hasteModuleName,
58
+ property,
59
+ property.type,
60
+ this.language(),
61
+ );
62
+ }
63
+ return property.key.name;
49
64
  }
50
65
 
51
66
  language(): ParserType {
@@ -65,4 +80,83 @@ export class MockedParser implements Parser {
65
80
  ): UnionTypeAnnotationMemberType[] {
66
81
  return [];
67
82
  }
83
+
84
+ parseFile(filename: string): SchemaType {
85
+ return schemaMock;
86
+ }
87
+
88
+ parseString(contents: string, filename: ?string): SchemaType {
89
+ return schemaMock;
90
+ }
91
+
92
+ parseModuleFixture(filename: string): SchemaType {
93
+ return schemaMock;
94
+ }
95
+
96
+ getAst(contents: string): $FlowFixMe {
97
+ return flowParser.parse(contents, {
98
+ enums: true,
99
+ });
100
+ }
101
+
102
+ getFunctionTypeAnnotationParameters(
103
+ functionTypeAnnotation: $FlowFixMe,
104
+ ): $ReadOnlyArray<$FlowFixMe> {
105
+ return functionTypeAnnotation.params;
106
+ }
107
+
108
+ getFunctionNameFromParameter(
109
+ parameter: NamedShape<Nullable<NativeModuleParamTypeAnnotation>>,
110
+ ): $FlowFixMe {
111
+ return parameter.name;
112
+ }
113
+
114
+ getParameterName(parameter: $FlowFixMe): string {
115
+ return parameter.name.name;
116
+ }
117
+
118
+ getParameterTypeAnnotation(parameter: $FlowFixMe): $FlowFixMe {
119
+ return parameter.typeAnnotation;
120
+ }
121
+
122
+ getFunctionTypeAnnotationReturnType(
123
+ functionTypeAnnotation: $FlowFixMe,
124
+ ): $FlowFixMe {
125
+ return functionTypeAnnotation.returnType;
126
+ }
127
+
128
+ parseEnumMembersType(typeAnnotation: $FlowFixMe): NativeModuleEnumMemberType {
129
+ return typeAnnotation.type;
130
+ }
131
+
132
+ validateEnumMembersSupported(
133
+ typeAnnotation: $FlowFixMe,
134
+ enumMembersType: NativeModuleEnumMemberType,
135
+ ): void {
136
+ return;
137
+ }
138
+
139
+ parseEnumMembers(typeAnnotation: $FlowFixMe): NativeModuleEnumMembers {
140
+ return typeAnnotation.type === 'StringTypeAnnotation'
141
+ ? [
142
+ {
143
+ name: 'Hello',
144
+ value: 'hello',
145
+ },
146
+ {
147
+ name: 'Goodbye',
148
+ value: 'goodbye',
149
+ },
150
+ ]
151
+ : [
152
+ {
153
+ name: 'On',
154
+ value: '1',
155
+ },
156
+ {
157
+ name: 'Off',
158
+ value: '0',
159
+ },
160
+ ];
161
+ }
68
162
  }
@@ -78,25 +78,24 @@ function _iterableToArrayLimit(arr, i) {
78
78
  function _arrayWithHoles(arr) {
79
79
  if (Array.isArray(arr)) return arr;
80
80
  }
81
- const _require = require('./error-utils'),
81
+ const _require = require('./utils'),
82
+ getConfigType = _require.getConfigType,
83
+ extractNativeModuleName = _require.extractNativeModuleName,
84
+ createParserErrorCapturer = _require.createParserErrorCapturer;
85
+ const _require2 = require('./error-utils'),
82
86
  throwIfPropertyValueTypeIsUnsupported =
83
- _require.throwIfPropertyValueTypeIsUnsupported,
87
+ _require2.throwIfPropertyValueTypeIsUnsupported,
84
88
  throwIfUnsupportedFunctionParamTypeAnnotationParserError =
85
- _require.throwIfUnsupportedFunctionParamTypeAnnotationParserError,
89
+ _require2.throwIfUnsupportedFunctionParamTypeAnnotationParserError,
86
90
  throwIfUnsupportedFunctionReturnTypeAnnotationParserError =
87
- _require.throwIfUnsupportedFunctionReturnTypeAnnotationParserError,
88
- throwIfModuleTypeIsUnsupported = _require.throwIfModuleTypeIsUnsupported;
89
- const _require2 = require('./errors'),
91
+ _require2.throwIfUnsupportedFunctionReturnTypeAnnotationParserError,
92
+ throwIfModuleTypeIsUnsupported = _require2.throwIfModuleTypeIsUnsupported;
93
+ const _require3 = require('./errors'),
90
94
  MissingTypeParameterGenericParserError =
91
- _require2.MissingTypeParameterGenericParserError,
95
+ _require3.MissingTypeParameterGenericParserError,
92
96
  MoreThanOneTypeParameterGenericParserError =
93
- _require2.MoreThanOneTypeParameterGenericParserError,
94
- UnsupportedEnumDeclarationParserError =
95
- _require2.UnsupportedEnumDeclarationParserError,
96
- UnsupportedGenericParserError = _require2.UnsupportedGenericParserError,
97
- UnsupportedObjectPropertyTypeAnnotationParserError =
98
- _require2.UnsupportedObjectPropertyTypeAnnotationParserError,
99
- UnnamedFunctionParamParserError = _require2.UnnamedFunctionParamParserError;
97
+ _require3.MoreThanOneTypeParameterGenericParserError,
98
+ UnnamedFunctionParamParserError = _require3.UnnamedFunctionParamParserError;
100
99
  const invariant = require('invariant');
101
100
  function wrapModuleSchema(nativeModuleSchema, hasteModuleName) {
102
101
  return {
@@ -151,15 +150,9 @@ function assertGenericTypeAnnotationHasExactlyOneTypeParameter(
151
150
  function isObjectProperty(property, language) {
152
151
  switch (language) {
153
152
  case 'Flow':
154
- return (
155
- property.type === 'ObjectTypeProperty' ||
156
- property.type === 'ObjectTypeIndexer'
157
- );
153
+ return property.type === 'ObjectTypeProperty';
158
154
  case 'TypeScript':
159
- return (
160
- property.type === 'TSPropertySignature' ||
161
- property.type === 'TSIndexSignature'
162
- );
155
+ return property.type === 'TSPropertySignature';
163
156
  default:
164
157
  return false;
165
158
  }
@@ -169,6 +162,7 @@ function parseObjectProperty(
169
162
  hasteModuleName,
170
163
  types,
171
164
  aliasMap,
165
+ enumMap,
172
166
  tryParse,
173
167
  cxxOnly,
174
168
  nullable,
@@ -176,42 +170,23 @@ function parseObjectProperty(
176
170
  parser,
177
171
  ) {
178
172
  const language = parser.language();
179
- if (!isObjectProperty(property, language)) {
180
- throw new UnsupportedObjectPropertyTypeAnnotationParserError(
181
- hasteModuleName,
182
- property,
183
- property.type,
184
- language,
185
- );
186
- }
173
+ const name = parser.getKeyName(property, hasteModuleName);
187
174
  const _property$optional = property.optional,
188
175
  optional = _property$optional === void 0 ? false : _property$optional;
189
- const name = parser.getKeyName(property, hasteModuleName);
190
176
  const languageTypeAnnotation =
191
177
  language === 'TypeScript'
192
178
  ? property.typeAnnotation.typeAnnotation
193
179
  : property.value;
194
- if (
195
- property.type === 'ObjectTypeIndexer' ||
196
- property.type === 'TSIndexSignature'
197
- ) {
198
- return {
199
- name,
200
- optional,
201
- typeAnnotation: wrapNullable(nullable, {
202
- type: 'GenericObjectTypeAnnotation',
203
- }), //TODO: use `emitObject` for typeAnnotation
204
- };
205
- }
206
-
207
180
  const _unwrapNullable = unwrapNullable(
208
181
  translateTypeAnnotation(
209
182
  hasteModuleName,
210
183
  languageTypeAnnotation,
211
184
  types,
212
185
  aliasMap,
186
+ enumMap,
213
187
  tryParse,
214
188
  cxxOnly,
189
+ parser,
215
190
  ),
216
191
  ),
217
192
  _unwrapNullable2 = _slicedToArray(_unwrapNullable, 2),
@@ -227,7 +202,6 @@ function parseObjectProperty(
227
202
  languageTypeAnnotation,
228
203
  property.key,
229
204
  propertyTypeAnnotation.type,
230
- language,
231
205
  );
232
206
  }
233
207
  return {
@@ -236,92 +210,38 @@ function parseObjectProperty(
236
210
  typeAnnotation: wrapNullable(isPropertyNullable, propertyTypeAnnotation),
237
211
  };
238
212
  }
239
- function translateDefault(
240
- hasteModuleName,
241
- typeAnnotation,
242
- types,
243
- nullable,
244
- parser,
245
- ) {
246
- const maybeEnumDeclaration =
247
- types[parser.nameForGenericTypeAnnotation(typeAnnotation)];
248
- if (maybeEnumDeclaration && parser.isEnumDeclaration(maybeEnumDeclaration)) {
249
- const memberType = parser.getMaybeEnumMemberType(maybeEnumDeclaration);
250
- if (
251
- memberType === 'NumberTypeAnnotation' ||
252
- memberType === 'StringTypeAnnotation'
253
- ) {
254
- return wrapNullable(nullable, {
255
- type: 'EnumDeclaration',
256
- memberType: memberType,
257
- });
258
- } else {
259
- throw new UnsupportedEnumDeclarationParserError(
260
- hasteModuleName,
261
- typeAnnotation,
262
- memberType,
263
- parser.language(),
264
- );
265
- }
266
- }
267
- throw new UnsupportedGenericParserError(
268
- hasteModuleName,
269
- typeAnnotation,
270
- parser,
271
- );
272
- }
273
- function getTypeAnnotationParameters(typeAnnotation, language) {
274
- return language === 'Flow'
275
- ? typeAnnotation.params
276
- : typeAnnotation.parameters;
277
- }
278
- function getFunctionNameFromParameter(param, language) {
279
- return language === 'Flow' ? param.name : param.typeAnnotation;
280
- }
281
- function getParameterName(param, language) {
282
- return language === 'Flow' ? param.name.name : param.name;
283
- }
284
- function getParameterTypeAnnotation(param, language) {
285
- return language === 'Flow'
286
- ? param.typeAnnotation
287
- : param.typeAnnotation.typeAnnotation;
288
- }
289
- function getTypeAnnotationReturnType(typeAnnotation, language) {
290
- return language === 'Flow'
291
- ? typeAnnotation.returnType
292
- : typeAnnotation.typeAnnotation.typeAnnotation;
293
- }
294
213
  function translateFunctionTypeAnnotation(
295
214
  hasteModuleName,
296
215
  // TODO(T108222691): Use flow-types for @babel/parser
297
216
  // TODO(T71778680): This is a FunctionTypeAnnotation. Type this.
298
- typeAnnotation,
217
+ functionTypeAnnotation,
299
218
  types,
300
219
  aliasMap,
220
+ enumMap,
301
221
  tryParse,
302
222
  cxxOnly,
303
223
  translateTypeAnnotation,
304
- language,
224
+ parser,
305
225
  ) {
306
226
  const params = [];
307
- for (const param of getTypeAnnotationParameters(typeAnnotation, language)) {
227
+ for (const param of parser.getFunctionTypeAnnotationParameters(
228
+ functionTypeAnnotation,
229
+ )) {
308
230
  const parsedParam = tryParse(() => {
309
- if (getFunctionNameFromParameter(param, language) == null) {
310
- throw new UnnamedFunctionParamParserError(
311
- param,
312
- hasteModuleName,
313
- language,
314
- );
231
+ if (parser.getFunctionNameFromParameter(param) == null) {
232
+ throw new UnnamedFunctionParamParserError(param, hasteModuleName);
315
233
  }
316
- const paramName = getParameterName(param, language);
234
+ const paramName = parser.getParameterName(param);
317
235
  const _unwrapNullable3 = unwrapNullable(
318
236
  translateTypeAnnotation(
319
237
  hasteModuleName,
320
- getParameterTypeAnnotation(param, language),
238
+ parser.getParameterTypeAnnotation(param),
321
239
  types,
322
240
  aliasMap,
241
+ enumMap,
323
242
  tryParse,
324
243
  cxxOnly,
244
+ parser,
325
245
  ),
326
246
  ),
327
247
  _unwrapNullable4 = _slicedToArray(_unwrapNullable3, 2),
@@ -354,11 +274,13 @@ function translateFunctionTypeAnnotation(
354
274
  const _unwrapNullable5 = unwrapNullable(
355
275
  translateTypeAnnotation(
356
276
  hasteModuleName,
357
- getTypeAnnotationReturnType(typeAnnotation, language),
277
+ parser.getFunctionTypeAnnotationReturnType(functionTypeAnnotation),
358
278
  types,
359
279
  aliasMap,
280
+ enumMap,
360
281
  tryParse,
361
282
  cxxOnly,
283
+ parser,
362
284
  ),
363
285
  ),
364
286
  _unwrapNullable6 = _slicedToArray(_unwrapNullable5, 2),
@@ -366,9 +288,8 @@ function translateFunctionTypeAnnotation(
366
288
  isReturnTypeAnnotationNullable = _unwrapNullable6[1];
367
289
  throwIfUnsupportedFunctionReturnTypeAnnotationParserError(
368
290
  hasteModuleName,
369
- typeAnnotation,
291
+ functionTypeAnnotation,
370
292
  'FunctionTypeAnnotation',
371
- language,
372
293
  cxxOnly,
373
294
  returnTypeAnnotation.type,
374
295
  );
@@ -391,17 +312,18 @@ function buildPropertySchema(
391
312
  property,
392
313
  types,
393
314
  aliasMap,
315
+ enumMap,
394
316
  tryParse,
395
317
  cxxOnly,
396
- language,
397
318
  resolveTypeAnnotation,
398
319
  translateTypeAnnotation,
320
+ parser,
399
321
  ) {
400
322
  let nullable = false;
401
323
  let key = property.key,
402
324
  value = property.value;
403
325
  const methodName = key.name;
404
- if (language === 'TypeScript') {
326
+ if (parser.language() === 'TypeScript') {
405
327
  value =
406
328
  property.type === 'TSMethodSignature'
407
329
  ? property
@@ -415,7 +337,7 @@ function buildPropertySchema(
415
337
  property.value,
416
338
  key.name,
417
339
  value.type,
418
- language,
340
+ parser.language(),
419
341
  );
420
342
  return {
421
343
  name: methodName,
@@ -427,14 +349,93 @@ function buildPropertySchema(
427
349
  value,
428
350
  types,
429
351
  aliasMap,
352
+ enumMap,
430
353
  tryParse,
431
354
  cxxOnly,
432
355
  translateTypeAnnotation,
433
- language,
356
+ parser,
434
357
  ),
435
358
  ),
436
359
  };
437
360
  }
361
+ function buildSchemaFromConfigType(
362
+ configType,
363
+ filename,
364
+ ast,
365
+ wrapComponentSchema,
366
+ buildComponentSchema,
367
+ buildModuleSchema,
368
+ parser,
369
+ ) {
370
+ switch (configType) {
371
+ case 'component': {
372
+ return wrapComponentSchema(buildComponentSchema(ast));
373
+ }
374
+ case 'module': {
375
+ if (filename === undefined || filename === null) {
376
+ throw new Error('Filepath expected while parasing a module');
377
+ }
378
+ const nativeModuleName = extractNativeModuleName(filename);
379
+ const _createParserErrorCap = createParserErrorCapturer(),
380
+ _createParserErrorCap2 = _slicedToArray(_createParserErrorCap, 2),
381
+ parsingErrors = _createParserErrorCap2[0],
382
+ tryParse = _createParserErrorCap2[1];
383
+ const schema = tryParse(() =>
384
+ buildModuleSchema(nativeModuleName, ast, tryParse, parser),
385
+ );
386
+ if (parsingErrors.length > 0) {
387
+ /**
388
+ * TODO(T77968131): We have two options:
389
+ * - Throw the first error, but indicate there are more then one errors.
390
+ * - Display all errors, nicely formatted.
391
+ *
392
+ * For the time being, we're just throw the first error.
393
+ **/
394
+
395
+ throw parsingErrors[0];
396
+ }
397
+ invariant(
398
+ schema != null,
399
+ 'When there are no parsing errors, the schema should not be null',
400
+ );
401
+ return wrapModuleSchema(schema, nativeModuleName);
402
+ }
403
+ default:
404
+ return {
405
+ modules: {},
406
+ };
407
+ }
408
+ }
409
+ function buildSchema(
410
+ contents,
411
+ filename,
412
+ wrapComponentSchema,
413
+ buildComponentSchema,
414
+ buildModuleSchema,
415
+ Visitor,
416
+ parser,
417
+ ) {
418
+ // Early return for non-Spec JavaScript files
419
+ if (
420
+ !contents.includes('codegenNativeComponent') &&
421
+ !contents.includes('TurboModule')
422
+ ) {
423
+ return {
424
+ modules: {},
425
+ };
426
+ }
427
+ const ast = parser.getAst(contents);
428
+ const configType = getConfigType(ast, Visitor);
429
+ return buildSchemaFromConfigType(
430
+ configType,
431
+ filename,
432
+ ast,
433
+ wrapComponentSchema,
434
+ buildComponentSchema,
435
+ buildModuleSchema,
436
+ parser,
437
+ );
438
+ }
438
439
  module.exports = {
439
440
  wrapModuleSchema,
440
441
  unwrapNullable,
@@ -442,7 +443,8 @@ module.exports = {
442
443
  assertGenericTypeAnnotationHasExactlyOneTypeParameter,
443
444
  isObjectProperty,
444
445
  parseObjectProperty,
445
- translateDefault,
446
446
  translateFunctionTypeAnnotation,
447
447
  buildPropertySchema,
448
+ buildSchemaFromConfigType,
449
+ buildSchema,
448
450
  };