@react-native/codegen 0.74.0 → 0.75.0-nightly-20240221-a1171f79f

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 (147) hide show
  1. package/lib/CodegenSchema.d.ts +10 -1
  2. package/lib/CodegenSchema.js.flow +2 -1
  3. package/lib/SchemaValidator.js.flow +2 -2
  4. package/lib/cli/combine/combine-js-to-schema-cli.js +59 -40
  5. package/lib/cli/combine/combine-js-to-schema-cli.js.flow +23 -39
  6. package/lib/cli/combine/combine-js-to-schema.js +49 -1
  7. package/lib/cli/combine/combine-js-to-schema.js.flow +59 -1
  8. package/lib/cli/combine/combine-schemas-cli.js +77 -0
  9. package/lib/cli/combine/combine-schemas-cli.js.flow +87 -0
  10. package/lib/cli/combine/combine-utils.js +3 -65
  11. package/lib/cli/combine/combine-utils.js.flow +7 -28
  12. package/lib/cli/parser/parser.js +1 -1
  13. package/lib/cli/parser/parser.js.flow +1 -1
  14. package/lib/generators/RNCodegen.d.ts +1 -0
  15. package/lib/generators/RNCodegen.js +58 -31
  16. package/lib/generators/RNCodegen.js.flow +52 -32
  17. package/lib/generators/TypeUtils/Cxx/index.js +17 -0
  18. package/lib/generators/TypeUtils/Cxx/index.js.flow +18 -0
  19. package/lib/generators/TypeUtils/Java/index.js +31 -0
  20. package/lib/generators/TypeUtils/Java/index.js.flow +27 -0
  21. package/lib/generators/TypeUtils/Objective-C/index.js +17 -0
  22. package/lib/generators/TypeUtils/Objective-C/index.js.flow +18 -0
  23. package/lib/generators/components/ComponentsGeneratorUtils.js +7 -7
  24. package/lib/generators/components/ComponentsGeneratorUtils.js.flow +8 -10
  25. package/lib/generators/components/ComponentsProviderUtils.js +55 -0
  26. package/lib/generators/components/ComponentsProviderUtils.js.flow +60 -0
  27. package/lib/generators/components/CppHelpers.js +7 -0
  28. package/lib/generators/components/CppHelpers.js.flow +14 -0
  29. package/lib/generators/components/GenerateComponentDescriptorCpp.js +89 -0
  30. package/lib/generators/components/GenerateComponentDescriptorCpp.js.flow +101 -0
  31. package/lib/generators/components/GenerateComponentDescriptorH.js +28 -12
  32. package/lib/generators/components/GenerateComponentDescriptorH.js.flow +20 -12
  33. package/lib/generators/components/GenerateComponentHObjCpp.js +15 -1
  34. package/lib/generators/components/GenerateComponentHObjCpp.js.flow +11 -2
  35. package/lib/generators/components/GenerateEventEmitterCpp.js +28 -15
  36. package/lib/generators/components/GenerateEventEmitterCpp.js.flow +16 -17
  37. package/lib/generators/components/GenerateEventEmitterH.js +20 -13
  38. package/lib/generators/components/GenerateEventEmitterH.js.flow +13 -15
  39. package/lib/generators/components/GeneratePropsCpp.js +17 -8
  40. package/lib/generators/components/GeneratePropsCpp.js.flow +13 -9
  41. package/lib/generators/components/GeneratePropsH.js +23 -16
  42. package/lib/generators/components/GeneratePropsH.js.flow +12 -16
  43. package/lib/generators/components/GeneratePropsJavaDelegate.js +11 -3
  44. package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +7 -4
  45. package/lib/generators/components/GeneratePropsJavaInterface.js +11 -3
  46. package/lib/generators/components/GeneratePropsJavaInterface.js.flow +6 -3
  47. package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js.flow +6 -6
  48. package/lib/generators/components/GeneratePropsJavaPojo/index.js +1 -1
  49. package/lib/generators/components/GeneratePropsJavaPojo/index.js.flow +1 -1
  50. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +1 -0
  51. package/lib/generators/components/GenerateShadowNodeCpp.js +19 -8
  52. package/lib/generators/components/GenerateShadowNodeCpp.js.flow +9 -8
  53. package/lib/generators/components/GenerateShadowNodeH.js +27 -11
  54. package/lib/generators/components/GenerateShadowNodeH.js.flow +11 -14
  55. package/lib/generators/components/GenerateStateCpp.js +19 -8
  56. package/lib/generators/components/GenerateStateCpp.js.flow +9 -8
  57. package/lib/generators/components/GenerateStateH.js +9 -5
  58. package/lib/generators/components/GenerateStateH.js.flow +3 -4
  59. package/lib/generators/components/GenerateTests.js +11 -5
  60. package/lib/generators/components/GenerateTests.js.flow +2 -2
  61. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js +16 -3
  62. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js.flow +18 -3
  63. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js +18 -3
  64. package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js.flow +21 -3
  65. package/lib/generators/components/GenerateViewConfigJs.js +2 -2
  66. package/lib/generators/components/GenerateViewConfigJs.js.flow +2 -2
  67. package/lib/generators/components/JavaHelpers.js +8 -0
  68. package/lib/generators/components/JavaHelpers.js.flow +9 -0
  69. package/lib/generators/components/__test_fixtures__/fixtures.js +22 -0
  70. package/lib/generators/components/__test_fixtures__/fixtures.js.flow +22 -0
  71. package/lib/generators/modules/GenerateModuleCpp.js +14 -10
  72. package/lib/generators/modules/GenerateModuleCpp.js.flow +9 -10
  73. package/lib/generators/modules/GenerateModuleH.js +198 -72
  74. package/lib/generators/modules/GenerateModuleH.js.flow +186 -71
  75. package/lib/generators/modules/GenerateModuleJavaSpec.js +50 -57
  76. package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +45 -50
  77. package/lib/generators/modules/GenerateModuleJniCpp.js +16 -12
  78. package/lib/generators/modules/GenerateModuleJniCpp.js.flow +11 -12
  79. package/lib/generators/modules/GenerateModuleJniH.js +12 -5
  80. package/lib/generators/modules/GenerateModuleJniH.js.flow +8 -6
  81. package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js +5 -5
  82. package/lib/generators/modules/GenerateModuleObjCpp/StructCollector.js.flow +11 -12
  83. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js +23 -21
  84. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeConstantsStruct.js.flow +19 -18
  85. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js +23 -21
  86. package/lib/generators/modules/GenerateModuleObjCpp/header/serializeRegularStruct.js.flow +19 -18
  87. package/lib/generators/modules/GenerateModuleObjCpp/index.js +18 -20
  88. package/lib/generators/modules/GenerateModuleObjCpp/index.js.flow +11 -14
  89. package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js +40 -42
  90. package/lib/generators/modules/GenerateModuleObjCpp/serializeMethod.js.flow +38 -44
  91. package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js +25 -27
  92. package/lib/generators/modules/GenerateModuleObjCpp/source/serializeModule.js.flow +26 -28
  93. package/lib/generators/modules/Utils.js +98 -0
  94. package/lib/generators/modules/Utils.js.flow +34 -2
  95. package/lib/generators/modules/__test_fixtures__/fixtures.js +685 -64
  96. package/lib/generators/modules/__test_fixtures__/fixtures.js.flow +686 -64
  97. package/lib/parsers/error-utils.js +17 -17
  98. package/lib/parsers/error-utils.js.flow +10 -10
  99. package/lib/parsers/errors.js +10 -0
  100. package/lib/parsers/errors.js.flow +15 -1
  101. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +7 -1
  102. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +7 -1
  103. package/lib/parsers/flow/components/commands.js +24 -0
  104. package/lib/parsers/flow/components/commands.js.flow +45 -3
  105. package/lib/parsers/flow/components/componentsUtils.js +5 -4
  106. package/lib/parsers/flow/components/componentsUtils.js.flow +4 -3
  107. package/lib/parsers/flow/components/events.js +7 -7
  108. package/lib/parsers/flow/components/events.js.flow +7 -7
  109. package/lib/parsers/flow/components/index.js +8 -8
  110. package/lib/parsers/flow/components/index.js.flow +3 -3
  111. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +13 -0
  112. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +13 -0
  113. package/lib/parsers/flow/modules/index.js +20 -19
  114. package/lib/parsers/flow/modules/index.js.flow +10 -11
  115. package/lib/parsers/flow/parseFlowAndThrowErrors.js +105 -0
  116. package/lib/parsers/flow/parseFlowAndThrowErrors.js.flow +41 -0
  117. package/lib/parsers/flow/parser.js +24 -25
  118. package/lib/parsers/flow/parser.js.flow +27 -36
  119. package/lib/parsers/flow/utils.js.flow +1 -1
  120. package/lib/parsers/parser.js.flow +12 -10
  121. package/lib/parsers/parserMock.js +11 -12
  122. package/lib/parsers/parserMock.js.flow +25 -28
  123. package/lib/parsers/parsers-commons.js +85 -36
  124. package/lib/parsers/parsers-commons.js.flow +71 -37
  125. package/lib/parsers/parsers-primitives.js +17 -17
  126. package/lib/parsers/parsers-primitives.js.flow +14 -16
  127. package/lib/parsers/schema.js.flow +3 -3
  128. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +8 -1
  129. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +8 -1
  130. package/lib/parsers/typescript/components/commands.js +23 -15
  131. package/lib/parsers/typescript/components/commands.js.flow +24 -16
  132. package/lib/parsers/typescript/components/componentsUtils.js +34 -20
  133. package/lib/parsers/typescript/components/componentsUtils.js.flow +36 -19
  134. package/lib/parsers/typescript/components/events.js +22 -22
  135. package/lib/parsers/typescript/components/events.js.flow +11 -10
  136. package/lib/parsers/typescript/components/extends.js.flow +1 -0
  137. package/lib/parsers/typescript/components/index.js +10 -10
  138. package/lib/parsers/typescript/components/index.js.flow +4 -4
  139. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js +13 -0
  140. package/lib/parsers/typescript/modules/__test_fixtures__/fixtures.js.flow +13 -0
  141. package/lib/parsers/typescript/modules/index.js +25 -20
  142. package/lib/parsers/typescript/modules/index.js.flow +16 -14
  143. package/lib/parsers/typescript/parser.js +25 -26
  144. package/lib/parsers/typescript/parser.js.flow +23 -27
  145. package/lib/parsers/utils.js +5 -0
  146. package/lib/parsers/utils.js.flow +6 -1
  147. package/package.json +8 -6
@@ -0,0 +1,105 @@
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
+ *
8
+ * @format
9
+ */
10
+
11
+ 'use strict';
12
+
13
+ function ownKeys(object, enumerableOnly) {
14
+ var keys = Object.keys(object);
15
+ if (Object.getOwnPropertySymbols) {
16
+ var symbols = Object.getOwnPropertySymbols(object);
17
+ enumerableOnly &&
18
+ (symbols = symbols.filter(function (sym) {
19
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
20
+ })),
21
+ keys.push.apply(keys, symbols);
22
+ }
23
+ return keys;
24
+ }
25
+ function _objectSpread(target) {
26
+ for (var i = 1; i < arguments.length; i++) {
27
+ var source = null != arguments[i] ? arguments[i] : {};
28
+ i % 2
29
+ ? ownKeys(Object(source), !0).forEach(function (key) {
30
+ _defineProperty(target, key, source[key]);
31
+ })
32
+ : Object.getOwnPropertyDescriptors
33
+ ? Object.defineProperties(
34
+ target,
35
+ Object.getOwnPropertyDescriptors(source),
36
+ )
37
+ : ownKeys(Object(source)).forEach(function (key) {
38
+ Object.defineProperty(
39
+ target,
40
+ key,
41
+ Object.getOwnPropertyDescriptor(source, key),
42
+ );
43
+ });
44
+ }
45
+ return target;
46
+ }
47
+ function _defineProperty(obj, key, value) {
48
+ key = _toPropertyKey(key);
49
+ if (key in obj) {
50
+ Object.defineProperty(obj, key, {
51
+ value: value,
52
+ enumerable: true,
53
+ configurable: true,
54
+ writable: true,
55
+ });
56
+ } else {
57
+ obj[key] = value;
58
+ }
59
+ return obj;
60
+ }
61
+ function _toPropertyKey(arg) {
62
+ var key = _toPrimitive(arg, 'string');
63
+ return typeof key === 'symbol' ? key : String(key);
64
+ }
65
+ function _toPrimitive(input, hint) {
66
+ if (typeof input !== 'object' || input === null) return input;
67
+ var prim = input[Symbol.toPrimitive];
68
+ if (prim !== undefined) {
69
+ var res = prim.call(input, hint || 'default');
70
+ if (typeof res !== 'object') return res;
71
+ throw new TypeError('@@toPrimitive must return a primitive value.');
72
+ }
73
+ return (hint === 'string' ? String : Number)(input);
74
+ }
75
+ const hermesParser = require('hermes-parser');
76
+ function parseFlowAndThrowErrors(code, options = {}) {
77
+ let ast;
78
+ try {
79
+ ast = hermesParser.parse(
80
+ code,
81
+ _objectSpread(
82
+ {
83
+ // Produce an ESTree-compliant AST
84
+ babel: false,
85
+ // Parse Flow without a pragma
86
+ flow: 'all',
87
+ },
88
+ options.filename != null
89
+ ? {
90
+ sourceFilename: options.filename,
91
+ }
92
+ : {},
93
+ ),
94
+ );
95
+ } catch (e) {
96
+ if (options.filename != null) {
97
+ e.message = `Syntax error in ${options.filename}: ${e.message}`;
98
+ }
99
+ throw e;
100
+ }
101
+ return ast;
102
+ }
103
+ module.exports = {
104
+ parseFlowAndThrowErrors,
105
+ };
@@ -0,0 +1,41 @@
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 {Program as ESTreeProgram} from 'hermes-estree';
14
+
15
+ const hermesParser = require('hermes-parser');
16
+
17
+ function parseFlowAndThrowErrors(
18
+ code: string,
19
+ options: $ReadOnly<{filename?: ?string}> = {},
20
+ ): ESTreeProgram {
21
+ let ast;
22
+ try {
23
+ ast = hermesParser.parse(code, {
24
+ // Produce an ESTree-compliant AST
25
+ babel: false,
26
+ // Parse Flow without a pragma
27
+ flow: 'all',
28
+ ...(options.filename != null ? {sourceFilename: options.filename} : {}),
29
+ });
30
+ } catch (e) {
31
+ if (options.filename != null) {
32
+ e.message = `Syntax error in ${options.filename}: ${e.message}`;
33
+ }
34
+ throw e;
35
+ }
36
+ return ast;
37
+ }
38
+
39
+ module.exports = {
40
+ parseFlowAndThrowErrors,
41
+ };
@@ -38,31 +38,30 @@ function _toPrimitive(input, hint) {
38
38
  }
39
39
  return (hint === 'string' ? String : Number)(input);
40
40
  }
41
- const invariant = require('invariant');
42
- const _require = require('./components/componentsUtils'),
43
- getSchemaInfo = _require.getSchemaInfo,
44
- getTypeAnnotation = _require.getTypeAnnotation,
45
- flattenProperties = _require.flattenProperties;
46
- const _require2 = require('./modules'),
47
- flowTranslateTypeAnnotation = _require2.flowTranslateTypeAnnotation;
48
-
49
- // $FlowFixMe[untyped-import] there's no flowtype flow-parser
50
- const flowParser = require('flow-parser');
51
- const _require3 = require('../parsers-commons'),
52
- buildSchema = _require3.buildSchema,
53
- buildPropSchema = _require3.buildPropSchema,
54
- buildModuleSchema = _require3.buildModuleSchema,
55
- handleGenericTypeAnnotation = _require3.handleGenericTypeAnnotation;
56
- const _require4 = require('../parsers-primitives'),
57
- Visitor = _require4.Visitor;
41
+ const _require = require('../errors'),
42
+ UnsupportedObjectPropertyTypeAnnotationParserError =
43
+ _require.UnsupportedObjectPropertyTypeAnnotationParserError;
44
+ const _require2 = require('../parsers-commons'),
45
+ buildModuleSchema = _require2.buildModuleSchema,
46
+ buildPropSchema = _require2.buildPropSchema,
47
+ buildSchema = _require2.buildSchema,
48
+ handleGenericTypeAnnotation = _require2.handleGenericTypeAnnotation;
49
+ const _require3 = require('../parsers-primitives'),
50
+ Visitor = _require3.Visitor;
51
+ const _require4 = require('../schema.js'),
52
+ wrapComponentSchema = _require4.wrapComponentSchema;
58
53
  const _require5 = require('./components'),
59
54
  buildComponentSchema = _require5.buildComponentSchema;
60
- const _require6 = require('../schema.js'),
61
- wrapComponentSchema = _require6.wrapComponentSchema;
55
+ const _require6 = require('./components/componentsUtils'),
56
+ flattenProperties = _require6.flattenProperties,
57
+ getSchemaInfo = _require6.getSchemaInfo,
58
+ getTypeAnnotation = _require6.getTypeAnnotation;
59
+ const _require7 = require('./modules'),
60
+ flowTranslateTypeAnnotation = _require7.flowTranslateTypeAnnotation;
61
+ const _require8 = require('./parseFlowAndThrowErrors'),
62
+ parseFlowAndThrowErrors = _require8.parseFlowAndThrowErrors;
62
63
  const fs = require('fs');
63
- const _require7 = require('../errors'),
64
- UnsupportedObjectPropertyTypeAnnotationParserError =
65
- _require7.UnsupportedObjectPropertyTypeAnnotationParserError;
64
+ const invariant = require('invariant');
66
65
  class FlowParser {
67
66
  constructor() {
68
67
  _defineProperty(
@@ -146,9 +145,9 @@ class FlowParser {
146
145
  const contents = fs.readFileSync(filename, 'utf8');
147
146
  return this.parseString(contents, 'path/NativeSampleTurboModule.js');
148
147
  }
149
- getAst(contents) {
150
- return flowParser.parse(contents, {
151
- enums: true,
148
+ getAst(contents, filename) {
149
+ return parseFlowAndThrowErrors(contents, {
150
+ filename,
152
151
  });
153
152
  }
154
153
  getFunctionTypeAnnotationParameters(functionTypeAnnotation) {
@@ -11,17 +11,17 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
- UnionTypeAnnotationMemberType,
15
- SchemaType,
14
+ ExtendsPropsShape,
16
15
  NamedShape,
17
- Nullable,
18
- NativeModuleParamTypeAnnotation,
19
- NativeModuleEnumMemberType,
20
- NativeModuleEnumMembers,
21
16
  NativeModuleAliasMap,
22
17
  NativeModuleEnumMap,
18
+ NativeModuleEnumMembers,
19
+ NativeModuleEnumMemberType,
20
+ NativeModuleParamTypeAnnotation,
21
+ Nullable,
23
22
  PropTypeAnnotation,
24
- ExtendsPropsShape,
23
+ SchemaType,
24
+ UnionTypeAnnotationMemberType,
25
25
  } from '../../CodegenSchema';
26
26
  import type {ParserType} from '../errors';
27
27
  import type {
@@ -32,44 +32,37 @@ import type {
32
32
  } from '../parser';
33
33
  import type {
34
34
  ParserErrorCapturer,
35
- TypeDeclarationMap,
36
35
  PropAST,
36
+ TypeDeclarationMap,
37
37
  TypeResolutionStatus,
38
38
  } from '../utils';
39
39
 
40
- type ExtendsForProp = null | {
41
- type: 'ReactNativeBuiltInType',
42
- knownTypeName: 'ReactNativeCoreViewProps',
43
- };
44
-
45
- const invariant = require('invariant');
46
-
47
40
  const {
48
- getSchemaInfo,
49
- getTypeAnnotation,
50
- flattenProperties,
51
- } = require('./components/componentsUtils');
52
-
53
- const {flowTranslateTypeAnnotation} = require('./modules');
54
-
55
- // $FlowFixMe[untyped-import] there's no flowtype flow-parser
56
- const flowParser = require('flow-parser');
57
-
41
+ UnsupportedObjectPropertyTypeAnnotationParserError,
42
+ } = require('../errors');
58
43
  const {
59
- buildSchema,
60
- buildPropSchema,
61
44
  buildModuleSchema,
45
+ buildPropSchema,
46
+ buildSchema,
62
47
  handleGenericTypeAnnotation,
63
48
  } = require('../parsers-commons');
64
49
  const {Visitor} = require('../parsers-primitives');
65
- const {buildComponentSchema} = require('./components');
66
50
  const {wrapComponentSchema} = require('../schema.js');
67
-
51
+ const {buildComponentSchema} = require('./components');
52
+ const {
53
+ flattenProperties,
54
+ getSchemaInfo,
55
+ getTypeAnnotation,
56
+ } = require('./components/componentsUtils');
57
+ const {flowTranslateTypeAnnotation} = require('./modules');
58
+ const {parseFlowAndThrowErrors} = require('./parseFlowAndThrowErrors');
68
59
  const fs = require('fs');
60
+ const invariant = require('invariant');
69
61
 
70
- const {
71
- UnsupportedObjectPropertyTypeAnnotationParserError,
72
- } = require('../errors');
62
+ type ExtendsForProp = null | {
63
+ type: 'ReactNativeBuiltInType',
64
+ knownTypeName: 'ReactNativeCoreViewProps',
65
+ };
73
66
 
74
67
  class FlowParser implements Parser {
75
68
  typeParameterInstantiation: string = 'TypeParameterInstantiation';
@@ -149,10 +142,8 @@ class FlowParser implements Parser {
149
142
  return this.parseString(contents, 'path/NativeSampleTurboModule.js');
150
143
  }
151
144
 
152
- getAst(contents: string): $FlowFixMe {
153
- return flowParser.parse(contents, {
154
- enums: true,
155
- });
145
+ getAst(contents: string, filename?: ?string): $FlowFixMe {
146
+ return parseFlowAndThrowErrors(contents, {filename});
156
147
  }
157
148
 
158
149
  getFunctionTypeAnnotationParameters(
@@ -10,7 +10,7 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- import type {TypeDeclarationMap, ASTNode} from '../utils';
13
+ import type {ASTNode, TypeDeclarationMap} from '../utils';
14
14
 
15
15
  function getValueFromTypes(value: ASTNode, types: TypeDeclarationMap): ASTNode {
16
16
  if (value.type === 'GenericTypeAnnotation' && types[value.id.name]) {
@@ -11,24 +11,24 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
- UnionTypeAnnotationMemberType,
15
- SchemaType,
14
+ ExtendsPropsShape,
16
15
  NamedShape,
17
- Nullable,
18
- NativeModuleParamTypeAnnotation,
19
- NativeModuleEnumMemberType,
20
- NativeModuleEnumMembers,
21
16
  NativeModuleAliasMap,
22
17
  NativeModuleEnumMap,
18
+ NativeModuleEnumMembers,
19
+ NativeModuleEnumMemberType,
20
+ NativeModuleParamTypeAnnotation,
21
+ Nullable,
23
22
  PropTypeAnnotation,
24
- ExtendsPropsShape,
23
+ SchemaType,
24
+ UnionTypeAnnotationMemberType,
25
25
  } from '../CodegenSchema';
26
26
  import type {ParserType} from './errors';
27
27
  import type {
28
+ ASTNode,
28
29
  ParserErrorCapturer,
29
- TypeDeclarationMap,
30
30
  PropAST,
31
- ASTNode,
31
+ TypeDeclarationMap,
32
32
  TypeResolutionStatus,
33
33
  } from './utils';
34
34
 
@@ -169,9 +169,11 @@ export interface Parser {
169
169
  /**
170
170
  * Given the content of a file, it returns an AST.
171
171
  * @parameter contents: the content of the file.
172
+ * @parameter filename: the name of the file, if available.
173
+ * @throws if there is a syntax error.
172
174
  * @returns: the AST of the file.
173
175
  */
174
- getAst(contents: string): $FlowFixMe;
176
+ getAst(contents: string, filename?: ?string): $FlowFixMe;
175
177
 
176
178
  /**
177
179
  * Given a FunctionTypeAnnotation, it returns an array of its parameters.
@@ -39,16 +39,15 @@ function _toPrimitive(input, hint) {
39
39
  return (hint === 'string' ? String : Number)(input);
40
40
  }
41
41
  import invariant from 'invariant';
42
- const _require = require('./typescript/components/componentsUtils'),
43
- flattenProperties = _require.flattenProperties;
44
- const _require2 = require('./parsers-commons'),
45
- buildPropSchema = _require2.buildPropSchema;
46
-
47
- // $FlowFixMe[untyped-import] there's no flowtype flow-parser
48
- const flowParser = require('flow-parser');
49
- const _require3 = require('./errors'),
42
+ const _require = require('./errors'),
50
43
  UnsupportedObjectPropertyTypeAnnotationParserError =
51
- _require3.UnsupportedObjectPropertyTypeAnnotationParserError;
44
+ _require.UnsupportedObjectPropertyTypeAnnotationParserError;
45
+ const _require2 = require('./flow/parseFlowAndThrowErrors'),
46
+ parseFlowAndThrowErrors = _require2.parseFlowAndThrowErrors;
47
+ const _require3 = require('./parsers-commons'),
48
+ buildPropSchema = _require3.buildPropSchema;
49
+ const _require4 = require('./typescript/components/componentsUtils'),
50
+ flattenProperties = _require4.flattenProperties;
52
51
  const schemaMock = {
53
52
  modules: {
54
53
  StringPropNativeComponentView: {
@@ -126,9 +125,9 @@ export class MockedParser {
126
125
  parseModuleFixture(filename) {
127
126
  return schemaMock;
128
127
  }
129
- getAst(contents) {
130
- return flowParser.parse(contents, {
131
- enums: true,
128
+ getAst(contents, filename) {
129
+ return parseFlowAndThrowErrors(contents, {
130
+ filename,
132
131
  });
133
132
  }
134
133
  getFunctionTypeAnnotationParameters(functionTypeAnnotation) {
@@ -11,46 +11,45 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
- GetSchemaInfoFN,
15
- GetTypeAnnotationFN,
16
- Parser,
17
- ResolveTypeAnnotationFN,
18
- } from './parser';
19
- import type {ParserType} from './errors';
20
- type ExtendsForProp = null | {
21
- type: 'ReactNativeBuiltInType',
22
- knownTypeName: 'ReactNativeCoreViewProps',
23
- };
24
- import type {
25
- UnionTypeAnnotationMemberType,
26
- SchemaType,
14
+ ExtendsPropsShape,
27
15
  NamedShape,
28
- Nullable,
29
- NativeModuleParamTypeAnnotation,
30
- NativeModuleEnumMemberType,
31
- NativeModuleEnumMembers,
32
16
  NativeModuleAliasMap,
33
17
  NativeModuleEnumMap,
18
+ NativeModuleEnumMembers,
19
+ NativeModuleEnumMemberType,
20
+ NativeModuleParamTypeAnnotation,
21
+ Nullable,
34
22
  PropTypeAnnotation,
35
- ExtendsPropsShape,
23
+ SchemaType,
24
+ UnionTypeAnnotationMemberType,
36
25
  } from '../CodegenSchema';
26
+ import type {ParserType} from './errors';
27
+ import type {
28
+ GetSchemaInfoFN,
29
+ GetTypeAnnotationFN,
30
+ Parser,
31
+ ResolveTypeAnnotationFN,
32
+ } from './parser';
37
33
  import type {
38
34
  ParserErrorCapturer,
39
35
  PropAST,
40
36
  TypeDeclarationMap,
41
37
  TypeResolutionStatus,
42
38
  } from './utils';
43
- import invariant from 'invariant';
44
39
 
45
- const {flattenProperties} = require('./typescript/components/componentsUtils');
46
-
47
- const {buildPropSchema} = require('./parsers-commons');
40
+ import invariant from 'invariant';
48
41
 
49
- // $FlowFixMe[untyped-import] there's no flowtype flow-parser
50
- const flowParser = require('flow-parser');
51
42
  const {
52
43
  UnsupportedObjectPropertyTypeAnnotationParserError,
53
44
  } = require('./errors');
45
+ const {parseFlowAndThrowErrors} = require('./flow/parseFlowAndThrowErrors');
46
+ const {buildPropSchema} = require('./parsers-commons');
47
+ const {flattenProperties} = require('./typescript/components/componentsUtils');
48
+
49
+ type ExtendsForProp = null | {
50
+ type: 'ReactNativeBuiltInType',
51
+ knownTypeName: 'ReactNativeCoreViewProps',
52
+ };
54
53
 
55
54
  const schemaMock = {
56
55
  modules: {
@@ -122,10 +121,8 @@ export class MockedParser implements Parser {
122
121
  return schemaMock;
123
122
  }
124
123
 
125
- getAst(contents: string): $FlowFixMe {
126
- return flowParser.parse(contents, {
127
- enums: true,
128
- });
124
+ getAst(contents: string, filename?: ?string): $FlowFixMe {
125
+ return parseFlowAndThrowErrors(contents, {filename});
129
126
  }
130
127
 
131
128
  getFunctionTypeAnnotationParameters(
@@ -140,47 +140,49 @@ function _iterableToArrayLimit(arr, i) {
140
140
  function _arrayWithHoles(arr) {
141
141
  if (Array.isArray(arr)) return arr;
142
142
  }
143
- const _require = require('./utils'),
144
- getConfigType = _require.getConfigType,
145
- extractNativeModuleName = _require.extractNativeModuleName,
146
- createParserErrorCapturer = _require.createParserErrorCapturer,
147
- visit = _require.visit,
148
- isModuleRegistryCall = _require.isModuleRegistryCall,
149
- verifyPlatforms = _require.verifyPlatforms;
150
- const _require2 = require('./error-utils'),
143
+ const _require = require('./error-utils'),
144
+ throwIfConfigNotfound = _require.throwIfConfigNotfound,
145
+ throwIfIncorrectModuleRegistryCallArgument =
146
+ _require.throwIfIncorrectModuleRegistryCallArgument,
147
+ throwIfIncorrectModuleRegistryCallTypeParameterParserError =
148
+ _require.throwIfIncorrectModuleRegistryCallTypeParameterParserError,
149
+ throwIfModuleInterfaceIsMisnamed = _require.throwIfModuleInterfaceIsMisnamed,
150
+ throwIfModuleInterfaceNotFound = _require.throwIfModuleInterfaceNotFound,
151
+ throwIfModuleTypeIsUnsupported = _require.throwIfModuleTypeIsUnsupported,
152
+ throwIfMoreThanOneCodegenNativecommands =
153
+ _require.throwIfMoreThanOneCodegenNativecommands,
154
+ throwIfMoreThanOneConfig = _require.throwIfMoreThanOneConfig,
155
+ throwIfMoreThanOneModuleInterfaceParserError =
156
+ _require.throwIfMoreThanOneModuleInterfaceParserError,
157
+ throwIfMoreThanOneModuleRegistryCalls =
158
+ _require.throwIfMoreThanOneModuleRegistryCalls,
151
159
  throwIfPropertyValueTypeIsUnsupported =
152
- _require2.throwIfPropertyValueTypeIsUnsupported,
160
+ _require.throwIfPropertyValueTypeIsUnsupported,
161
+ throwIfTypeAliasIsNotInterface = _require.throwIfTypeAliasIsNotInterface,
153
162
  throwIfUnsupportedFunctionParamTypeAnnotationParserError =
154
- _require2.throwIfUnsupportedFunctionParamTypeAnnotationParserError,
163
+ _require.throwIfUnsupportedFunctionParamTypeAnnotationParserError,
155
164
  throwIfUnsupportedFunctionReturnTypeAnnotationParserError =
156
- _require2.throwIfUnsupportedFunctionReturnTypeAnnotationParserError,
157
- throwIfModuleTypeIsUnsupported = _require2.throwIfModuleTypeIsUnsupported,
165
+ _require.throwIfUnsupportedFunctionReturnTypeAnnotationParserError,
166
+ throwIfUntypedModule = _require.throwIfUntypedModule,
158
167
  throwIfUnusedModuleInterfaceParserError =
159
- _require2.throwIfUnusedModuleInterfaceParserError,
160
- throwIfMoreThanOneModuleRegistryCalls =
161
- _require2.throwIfMoreThanOneModuleRegistryCalls,
168
+ _require.throwIfUnusedModuleInterfaceParserError,
162
169
  throwIfWrongNumberOfCallExpressionArgs =
163
- _require2.throwIfWrongNumberOfCallExpressionArgs,
164
- throwIfUntypedModule = _require2.throwIfUntypedModule,
165
- throwIfIncorrectModuleRegistryCallTypeParameterParserError =
166
- _require2.throwIfIncorrectModuleRegistryCallTypeParameterParserError,
167
- throwIfIncorrectModuleRegistryCallArgument =
168
- _require2.throwIfIncorrectModuleRegistryCallArgument,
169
- throwIfModuleInterfaceNotFound = _require2.throwIfModuleInterfaceNotFound,
170
- throwIfMoreThanOneModuleInterfaceParserError =
171
- _require2.throwIfMoreThanOneModuleInterfaceParserError,
172
- throwIfModuleInterfaceIsMisnamed = _require2.throwIfModuleInterfaceIsMisnamed,
173
- throwIfMoreThanOneCodegenNativecommands =
174
- _require2.throwIfMoreThanOneCodegenNativecommands,
175
- throwIfConfigNotfound = _require2.throwIfConfigNotfound,
176
- throwIfMoreThanOneConfig = _require2.throwIfMoreThanOneConfig,
177
- throwIfTypeAliasIsNotInterface = _require2.throwIfTypeAliasIsNotInterface;
178
- const _require3 = require('./errors'),
170
+ _require.throwIfWrongNumberOfCallExpressionArgs;
171
+ const _require2 = require('./errors'),
179
172
  MissingTypeParameterGenericParserError =
180
- _require3.MissingTypeParameterGenericParserError,
173
+ _require2.MissingTypeParameterGenericParserError,
181
174
  MoreThanOneTypeParameterGenericParserError =
182
- _require3.MoreThanOneTypeParameterGenericParserError,
183
- UnnamedFunctionParamParserError = _require3.UnnamedFunctionParamParserError;
175
+ _require2.MoreThanOneTypeParameterGenericParserError,
176
+ UnnamedFunctionParamParserError = _require2.UnnamedFunctionParamParserError,
177
+ UnsupportedObjectDirectRecursivePropertyParserError =
178
+ _require2.UnsupportedObjectDirectRecursivePropertyParserError;
179
+ const _require3 = require('./utils'),
180
+ createParserErrorCapturer = _require3.createParserErrorCapturer,
181
+ extractNativeModuleName = _require3.extractNativeModuleName,
182
+ getConfigType = _require3.getConfigType,
183
+ isModuleRegistryCall = _require3.isModuleRegistryCall,
184
+ verifyPlatforms = _require3.verifyPlatforms,
185
+ visit = _require3.visit;
184
186
  const invariant = require('invariant');
185
187
  function wrapModuleSchema(nativeModuleSchema, hasteModuleName) {
186
188
  return {
@@ -247,6 +249,7 @@ function isObjectProperty(property, language) {
247
249
  }
248
250
  }
249
251
  function parseObjectProperty(
252
+ parentObject,
250
253
  property,
251
254
  hasteModuleName,
252
255
  types,
@@ -266,6 +269,51 @@ function parseObjectProperty(
266
269
  language === 'TypeScript'
267
270
  ? property.typeAnnotation.typeAnnotation
268
271
  : property.value;
272
+
273
+ // Handle recursive types
274
+ if (parentObject) {
275
+ var _languageTypeAnnotati, _languageTypeAnnotati2;
276
+ const propertyType = parser.getResolveTypeAnnotationFN()(
277
+ languageTypeAnnotation,
278
+ types,
279
+ parser,
280
+ );
281
+ if (
282
+ propertyType.typeResolutionStatus.successful === true &&
283
+ propertyType.typeResolutionStatus.type === 'alias' &&
284
+ (language === 'TypeScript'
285
+ ? parentObject.typeName &&
286
+ parentObject.typeName.name ===
287
+ ((_languageTypeAnnotati = languageTypeAnnotation.typeName) ===
288
+ null || _languageTypeAnnotati === void 0
289
+ ? void 0
290
+ : _languageTypeAnnotati.name)
291
+ : parentObject.id &&
292
+ parentObject.id.name ===
293
+ ((_languageTypeAnnotati2 = languageTypeAnnotation.id) === null ||
294
+ _languageTypeAnnotati2 === void 0
295
+ ? void 0
296
+ : _languageTypeAnnotati2.name))
297
+ ) {
298
+ if (!optional) {
299
+ throw new UnsupportedObjectDirectRecursivePropertyParserError(
300
+ name,
301
+ languageTypeAnnotation,
302
+ hasteModuleName,
303
+ );
304
+ }
305
+ return {
306
+ name,
307
+ optional,
308
+ typeAnnotation: {
309
+ type: 'TypeAliasTypeAnnotation',
310
+ name: propertyType.typeResolutionStatus.name,
311
+ },
312
+ };
313
+ }
314
+ }
315
+
316
+ // Handle non-recursive types
269
317
  const _unwrapNullable = unwrapNullable(
270
318
  translateTypeAnnotation(
271
319
  hasteModuleName,
@@ -282,7 +330,7 @@ function parseObjectProperty(
282
330
  propertyTypeAnnotation = _unwrapNullable2[0],
283
331
  isPropertyNullable = _unwrapNullable2[1];
284
332
  if (
285
- propertyTypeAnnotation.type === 'FunctionTypeAnnotation' ||
333
+ (propertyTypeAnnotation.type === 'FunctionTypeAnnotation' && !cxxOnly) ||
286
334
  propertyTypeAnnotation.type === 'PromiseTypeAnnotation' ||
287
335
  propertyTypeAnnotation.type === 'VoidTypeAnnotation'
288
336
  ) {
@@ -521,7 +569,7 @@ function buildSchema(
521
569
  modules: {},
522
570
  };
523
571
  }
524
- const ast = parser.getAst(contents);
572
+ const ast = parser.getAst(contents, filename);
525
573
  const configType = getConfigType(ast, Visitor);
526
574
  return buildSchemaFromConfigType(
527
575
  configType,
@@ -714,6 +762,7 @@ function findNativeComponentType(statement, foundConfigs, parser) {
714
762
  // expression so we need to go one level deeper
715
763
  if (
716
764
  declaration.type === 'TSAsExpression' ||
765
+ declaration.type === 'AsExpression' ||
717
766
  declaration.type === 'TypeCastExpression'
718
767
  ) {
719
768
  declaration = declaration.expression;