@react-native/codegen 0.72.2 → 0.72.4

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 (77) hide show
  1. package/lib/CodegenSchema.d.ts +10 -10
  2. package/lib/CodegenSchema.js.flow +6 -1
  3. package/lib/SchemaValidator.d.ts +1 -1
  4. package/lib/generators/RNCodegen.d.ts +98 -0
  5. package/lib/generators/RNCodegen.js +33 -4
  6. package/lib/generators/RNCodegen.js.flow +35 -4
  7. package/lib/generators/components/ComponentsGeneratorUtils.js +2 -0
  8. package/lib/generators/components/ComponentsGeneratorUtils.js.flow +2 -0
  9. package/lib/generators/components/CppHelpers.js +2 -0
  10. package/lib/generators/components/CppHelpers.js.flow +2 -0
  11. package/lib/generators/components/GeneratePropsH.js +2 -0
  12. package/lib/generators/components/GeneratePropsH.js.flow +2 -0
  13. package/lib/generators/components/GeneratePropsJavaDelegate.js +2 -0
  14. package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +2 -0
  15. package/lib/generators/components/GeneratePropsJavaInterface.js +2 -0
  16. package/lib/generators/components/GeneratePropsJavaInterface.js.flow +2 -0
  17. package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js.flow +3 -1
  18. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js +5 -0
  19. package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +6 -0
  20. package/lib/generators/components/GenerateViewConfigJs.js +1 -0
  21. package/lib/generators/components/GenerateViewConfigJs.js.flow +1 -0
  22. package/lib/generators/components/JavaHelpers.js +7 -0
  23. package/lib/generators/components/JavaHelpers.js.flow +8 -0
  24. package/lib/generators/components/__test_fixtures__/fixtures.js +29 -0
  25. package/lib/generators/components/__test_fixtures__/fixtures.js.flow +30 -0
  26. package/lib/parsers/error-utils.js +50 -15
  27. package/lib/parsers/error-utils.js.flow +57 -15
  28. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +5 -1
  29. package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +5 -1
  30. package/lib/parsers/flow/components/componentsUtils.js +4 -0
  31. package/lib/parsers/flow/components/componentsUtils.js.flow +4 -0
  32. package/lib/parsers/flow/components/index.js +27 -126
  33. package/lib/parsers/flow/components/index.js.flow +22 -52
  34. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +4 -4
  35. package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +4 -4
  36. package/lib/parsers/flow/modules/index.js +41 -317
  37. package/lib/parsers/flow/modules/index.js.flow +19 -247
  38. package/lib/parsers/flow/parser.js +119 -12
  39. package/lib/parsers/flow/parser.js.flow +124 -3
  40. package/lib/parsers/flow/utils.js +0 -38
  41. package/lib/parsers/flow/utils.js.flow +0 -38
  42. package/lib/parsers/parser.d.ts +2 -2
  43. package/lib/parsers/parser.js.flow +84 -0
  44. package/lib/parsers/parserMock.js +58 -0
  45. package/lib/parsers/parserMock.js.flow +72 -0
  46. package/lib/parsers/parsers-commons.js +362 -5
  47. package/lib/parsers/parsers-commons.js.flow +351 -8
  48. package/lib/parsers/parsers-primitives.js +119 -3
  49. package/lib/parsers/parsers-primitives.js.flow +128 -3
  50. package/lib/parsers/schema/index.d.ts +1 -1
  51. package/lib/parsers/{typescript/components/schema.js.flow → schema.js.flow} +1 -1
  52. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +5 -1
  53. package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +5 -1
  54. package/lib/parsers/typescript/components/componentsUtils.js +8 -0
  55. package/lib/parsers/typescript/components/componentsUtils.js.flow +8 -0
  56. package/lib/parsers/typescript/components/index.js +28 -127
  57. package/lib/parsers/typescript/components/index.js.flow +24 -54
  58. package/lib/parsers/typescript/modules/index.js +103 -434
  59. package/lib/parsers/typescript/modules/index.js.flow +85 -299
  60. package/lib/parsers/typescript/parser.js +113 -12
  61. package/lib/parsers/typescript/parser.js.flow +115 -3
  62. package/lib/parsers/typescript/utils.js +0 -31
  63. package/lib/parsers/typescript/utils.js.flow +0 -31
  64. package/lib/parsers/utils.js +4 -0
  65. package/lib/parsers/utils.js.flow +3 -0
  66. package/package.json +1 -1
  67. package/lib/parsers/flow/Visitor.js +0 -37
  68. package/lib/parsers/flow/Visitor.js.flow +0 -41
  69. package/lib/parsers/flow/components/options.js +0 -72
  70. package/lib/parsers/flow/components/options.js.flow +0 -87
  71. package/lib/parsers/flow/components/schema.js +0 -106
  72. package/lib/parsers/flow/components/schema.js.flow +0 -62
  73. package/lib/parsers/typescript/Visitor.js +0 -42
  74. package/lib/parsers/typescript/Visitor.js.flow +0 -47
  75. package/lib/parsers/typescript/components/options.js +0 -72
  76. package/lib/parsers/typescript/components/options.js.flow +0 -87
  77. /package/lib/parsers/{typescript/components/schema.js → schema.js} +0 -0
@@ -47,7 +47,7 @@ export interface VoidTypeAnnotation {
47
47
  export interface ObjectTypeAnnotation<T> {
48
48
  readonly type: 'ObjectTypeAnnotation';
49
49
  readonly properties: readonly NamedShape<T>[];
50
- readonly baseTypes?: readonly string[];
50
+ readonly baseTypes?: readonly string[] | undefined;
51
51
  }
52
52
 
53
53
  export interface FunctionTypeAnnotation<P, R> {
@@ -77,10 +77,10 @@ export interface ComponentShape extends OptionsShape {
77
77
  }
78
78
 
79
79
  export interface OptionsShape {
80
- readonly interfaceOnly?: boolean;
81
- readonly paperComponentName?: string;
82
- readonly excludedPlatforms?: readonly PlatformType[];
83
- readonly paperComponentNameDeprecated?: string;
80
+ readonly interfaceOnly?: boolean | undefined;
81
+ readonly paperComponentName?: string | undefined;
82
+ readonly excludedPlatforms?: readonly PlatformType[] | undefined;
83
+ readonly paperComponentNameDeprecated?: string | undefined;
84
84
  }
85
85
 
86
86
  export interface ExtendsPropsShape {
@@ -94,10 +94,10 @@ export interface EventTypeShape {
94
94
  | 'direct'
95
95
  | 'bubble';
96
96
  readonly optional: boolean;
97
- readonly paperTopLevelNameDeprecated?: string;
97
+ readonly paperTopLevelNameDeprecated?: string | undefined;
98
98
  readonly typeAnnotation: {
99
99
  readonly type: 'EventTypeAnnotation';
100
- readonly argument?: ObjectTypeAnnotation<EventTypeAnnotation>;
100
+ readonly argument?: ObjectTypeAnnotation<EventTypeAnnotation> | undefined;
101
101
  };
102
102
  }
103
103
 
@@ -211,7 +211,7 @@ export interface NativeModuleSchema {
211
211
  readonly enumMap: NativeModuleEnumMap;
212
212
  readonly spec: NativeModuleSpec;
213
213
  readonly moduleName: string;
214
- readonly excludedPlatforms?: readonly PlatformType[];
214
+ readonly excludedPlatforms?: readonly PlatformType[] | undefined;
215
215
  }
216
216
 
217
217
  export interface NativeModuleSpec {
@@ -234,7 +234,7 @@ export type NativeModuleObjectTypeAnnotation = ObjectTypeAnnotation<Nullable<Nat
234
234
 
235
235
  export interface NativeModuleArrayTypeAnnotation<T extends Nullable<NativeModuleBaseTypeAnnotation>> {
236
236
  readonly type: 'ArrayTypeAnnotation';
237
- readonly elementType?: T;
237
+ readonly elementType?: T | undefined;
238
238
  }
239
239
 
240
240
  export interface NativeModuleStringTypeAnnotation {
@@ -294,7 +294,7 @@ export interface NativeModuleTypeAliasTypeAnnotation {
294
294
 
295
295
  export interface NativeModulePromiseTypeAnnotation {
296
296
  readonly type: 'PromiseTypeAnnotation';
297
- readonly elementType?: Nullable<NativeModuleBaseTypeAnnotation>;
297
+ readonly elementType?: Nullable<NativeModuleBaseTypeAnnotation> | undefined;
298
298
  }
299
299
 
300
300
  export type UnionTypeAnnotationMemberType =
@@ -58,6 +58,10 @@ export type ObjectTypeAnnotation<+T> = $ReadOnly<{
58
58
  baseTypes?: $ReadOnlyArray<string>,
59
59
  }>;
60
60
 
61
+ export type MixedTypeAnnotation = $ReadOnly<{
62
+ type: 'MixedTypeAnnotation',
63
+ }>;
64
+
61
65
  type FunctionTypeAnnotation<+P, +R> = $ReadOnly<{
62
66
  type: 'FunctionTypeAnnotation',
63
67
  params: $ReadOnlyArray<NamedShape<P>>,
@@ -177,7 +181,8 @@ export type PropTypeAnnotation =
177
181
  type: 'ArrayTypeAnnotation',
178
182
  elementType: ObjectTypeAnnotation<PropTypeAnnotation>,
179
183
  }>,
180
- }>;
184
+ }>
185
+ | MixedTypeAnnotation;
181
186
 
182
187
  export type ReservedPropTypeAnnotation = $ReadOnly<{
183
188
  type: 'ReservedPropTypeAnnotation',
@@ -5,7 +5,7 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import type { SchemaType } from "./CodegenSchema";
8
+ import type { SchemaType } from './CodegenSchema';
9
9
 
10
10
  export declare function getErrors(schema: SchemaType): readonly string[];
11
11
  export declare function validate(schema: SchemaType): void;
@@ -0,0 +1,98 @@
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
+ import type { SchemaType } from '../CodegenSchema';
9
+
10
+ export type FilesOutput = Map<string, string>;
11
+ export type LibraryGeneratorFunction = (libraryName: string, schema: SchemaType, packageName: string | undefined, assumeNonnull: boolean) => FilesOutput;
12
+ export type SchemaGeneratorFunction = (schemas: { [key: string]: SchemaType }) => FilesOutput;
13
+ export type ViewGeneratorFunction = (libraryName: string, schema: SchemaType) => FilesOutput;
14
+
15
+ type LibraryGeneratorNames =
16
+ | 'generateComponentDescriptorH'
17
+ | 'generateComponentHObjCpp'
18
+ | 'generateEventEmitterCpp'
19
+ | 'generateEventEmitterH'
20
+ | 'generatePropsCpp'
21
+ | 'generatePropsH'
22
+ | 'generateStateCpp'
23
+ | 'generateStateH'
24
+ | 'generateModuleH'
25
+ | 'generateModuleCpp'
26
+ | 'generateModuleObjCpp'
27
+ | 'generateModuleJavaSpec'
28
+ | 'generateModuleJniCpp'
29
+ | 'generateModuleJniH'
30
+ | 'generatePropsJavaInterface'
31
+ | 'generatePropsJavaDelegate'
32
+ | 'generateTests'
33
+ | 'generateShadowNodeCpp'
34
+ | 'generateShadowNodeH'
35
+ ;
36
+
37
+ type SchemaGeneratorNames =
38
+ | 'generateThirdPartyFabricComponentsProviderObjCpp'
39
+ | 'generateThirdPartyFabricComponentsProviderH'
40
+ ;
41
+
42
+ type ViewGeneratorNames =
43
+ | 'generateViewConfigJs'
44
+ ;
45
+
46
+ export type AllGenerators =
47
+ & { readonly [key in LibraryGeneratorNames]: LibraryGeneratorFunction; }
48
+ & { readonly [key in SchemaGeneratorNames]: SchemaGeneratorFunction; }
49
+ & { readonly [key in ViewGeneratorNames]: ViewGeneratorFunction; }
50
+ ;
51
+
52
+ export type LibraryGenerators =
53
+ | 'componentsAndroid'
54
+ | 'componentsIOS'
55
+ | 'descriptors'
56
+ | 'events'
57
+ | 'props'
58
+ | 'states'
59
+ | 'tests'
60
+ | 'shadow-nodes'
61
+ | 'modulesAndroid'
62
+ | 'modulesCxx'
63
+ | 'modulesIOS'
64
+ ;
65
+
66
+ export type SchemaGenerators =
67
+ | 'providerIOS'
68
+ ;
69
+
70
+ export interface LibraryOptions {
71
+ libraryName: string;
72
+ schema: SchemaType;
73
+ outputDirectory: string;
74
+ packageName?: string | undefined;
75
+ assumeNonnull: boolean;
76
+ }
77
+
78
+ export interface LibraryConfig {
79
+ generators: LibraryGenerators[];
80
+ test?: boolean | undefined;
81
+ }
82
+
83
+ export interface SchemasOptions {
84
+ schemas: { [key: string]: SchemaType };
85
+ outputDirectory: string;
86
+ }
87
+
88
+ export interface SchemasConfig {
89
+ generators: SchemaGenerators[];
90
+ test?: boolean | undefined;
91
+ }
92
+
93
+ export declare const allGenerators: AllGenerators;
94
+ export declare const libraryGenerators: { readonly [key in LibraryGenerators]: LibraryGeneratorFunction };
95
+ export declare const schemaGenerators: { readonly [key in SchemaGenerators]: SchemaGeneratorFunction };
96
+ export declare function generate(options: LibraryOptions, config: LibraryConfig): boolean;
97
+ export declare function generateFromSchemas(options: SchemasOptions, config: SchemasConfig): boolean;
98
+ export declare function generateViewConfig(options: LibraryOptions): string;
@@ -28,8 +28,8 @@ const generateModuleH = require('./modules/GenerateModuleH.js');
28
28
  const generateModuleCpp = require('./modules/GenerateModuleCpp.js');
29
29
  const generateModuleObjCpp = require('./modules/GenerateModuleObjCpp');
30
30
  const generateModuleJavaSpec = require('./modules/GenerateModuleJavaSpec.js');
31
- const GenerateModuleJniCpp = require('./modules/GenerateModuleJniCpp.js');
32
- const GenerateModuleJniH = require('./modules/GenerateModuleJniH.js');
31
+ const generateModuleJniCpp = require('./modules/GenerateModuleJniCpp.js');
32
+ const generateModuleJniH = require('./modules/GenerateModuleJniH.js');
33
33
  const generatePropsJavaInterface = require('./components/GeneratePropsJavaInterface.js');
34
34
  const generatePropsJavaDelegate = require('./components/GeneratePropsJavaDelegate.js');
35
35
  const generateTests = require('./components/GenerateTests.js');
@@ -40,6 +40,32 @@ const generateThirdPartyFabricComponentsProviderH = require('./components/Genera
40
40
  const generateViewConfigJs = require('./components/GenerateViewConfigJs.js');
41
41
  const path = require('path');
42
42
  const schemaValidator = require('../SchemaValidator.js');
43
+ const ALL_GENERATORS = {
44
+ generateComponentDescriptorH: generateComponentDescriptorH.generate,
45
+ generateComponentHObjCpp: generateComponentHObjCpp.generate,
46
+ generateEventEmitterCpp: generateEventEmitterCpp.generate,
47
+ generateEventEmitterH: generateEventEmitterH.generate,
48
+ generatePropsCpp: generatePropsCpp.generate,
49
+ generatePropsH: generatePropsH.generate,
50
+ generateStateCpp: generateStateCpp.generate,
51
+ generateStateH: generateStateH.generate,
52
+ generateModuleH: generateModuleH.generate,
53
+ generateModuleCpp: generateModuleCpp.generate,
54
+ generateModuleObjCpp: generateModuleObjCpp.generate,
55
+ generateModuleJavaSpec: generateModuleJavaSpec.generate,
56
+ generateModuleJniCpp: generateModuleJniCpp.generate,
57
+ generateModuleJniH: generateModuleJniH.generate,
58
+ generatePropsJavaInterface: generatePropsJavaInterface.generate,
59
+ generatePropsJavaDelegate: generatePropsJavaDelegate.generate,
60
+ generateTests: generateTests.generate,
61
+ generateShadowNodeCpp: generateShadowNodeCpp.generate,
62
+ generateShadowNodeH: generateShadowNodeH.generate,
63
+ generateThirdPartyFabricComponentsProviderObjCpp:
64
+ generateThirdPartyFabricComponentsProviderObjCpp.generate,
65
+ generateThirdPartyFabricComponentsProviderH:
66
+ generateThirdPartyFabricComponentsProviderH.generate,
67
+ generateViewConfigJs: generateViewConfigJs.generate,
68
+ };
43
69
  const LIBRARY_GENERATORS = {
44
70
  descriptors: [generateComponentDescriptorH.generate],
45
71
  events: [generateEventEmitterCpp.generate, generateEventEmitterH.generate],
@@ -80,8 +106,8 @@ const LIBRARY_GENERATORS = {
80
106
  generateShadowNodeH.generate,
81
107
  ],
82
108
  modulesAndroid: [
83
- GenerateModuleJniCpp.generate,
84
- GenerateModuleJniH.generate,
109
+ generateModuleJniCpp.generate,
110
+ generateModuleJniH.generate,
85
111
  generateModuleJavaSpec.generate,
86
112
  ],
87
113
  modulesCxx: [generateModuleCpp.generate, generateModuleH.generate],
@@ -136,6 +162,9 @@ function checkOrWriteFiles(generatedFiles, test) {
136
162
  return writeMapToFiles(generatedFiles);
137
163
  }
138
164
  module.exports = {
165
+ allGenerators: ALL_GENERATORS,
166
+ libraryGenerators: LIBRARY_GENERATORS,
167
+ schemaGenerators: SCHEMAS_GENERATORS,
139
168
  generate(
140
169
  {libraryName, schema, outputDirectory, packageName, assumeNonnull},
141
170
  {generators, test},
@@ -29,8 +29,8 @@ const generateModuleH = require('./modules/GenerateModuleH.js');
29
29
  const generateModuleCpp = require('./modules/GenerateModuleCpp.js');
30
30
  const generateModuleObjCpp = require('./modules/GenerateModuleObjCpp');
31
31
  const generateModuleJavaSpec = require('./modules/GenerateModuleJavaSpec.js');
32
- const GenerateModuleJniCpp = require('./modules/GenerateModuleJniCpp.js');
33
- const GenerateModuleJniH = require('./modules/GenerateModuleJniH.js');
32
+ const generateModuleJniCpp = require('./modules/GenerateModuleJniCpp.js');
33
+ const generateModuleJniH = require('./modules/GenerateModuleJniH.js');
34
34
  const generatePropsJavaInterface = require('./components/GeneratePropsJavaInterface.js');
35
35
  const generatePropsJavaDelegate = require('./components/GeneratePropsJavaDelegate.js');
36
36
  const generateTests = require('./components/GenerateTests.js');
@@ -42,6 +42,33 @@ const generateViewConfigJs = require('./components/GenerateViewConfigJs.js');
42
42
  const path = require('path');
43
43
  const schemaValidator = require('../SchemaValidator.js');
44
44
 
45
+ const ALL_GENERATORS = {
46
+ generateComponentDescriptorH: generateComponentDescriptorH.generate,
47
+ generateComponentHObjCpp: generateComponentHObjCpp.generate,
48
+ generateEventEmitterCpp: generateEventEmitterCpp.generate,
49
+ generateEventEmitterH: generateEventEmitterH.generate,
50
+ generatePropsCpp: generatePropsCpp.generate,
51
+ generatePropsH: generatePropsH.generate,
52
+ generateStateCpp: generateStateCpp.generate,
53
+ generateStateH: generateStateH.generate,
54
+ generateModuleH: generateModuleH.generate,
55
+ generateModuleCpp: generateModuleCpp.generate,
56
+ generateModuleObjCpp: generateModuleObjCpp.generate,
57
+ generateModuleJavaSpec: generateModuleJavaSpec.generate,
58
+ generateModuleJniCpp: generateModuleJniCpp.generate,
59
+ generateModuleJniH: generateModuleJniH.generate,
60
+ generatePropsJavaInterface: generatePropsJavaInterface.generate,
61
+ generatePropsJavaDelegate: generatePropsJavaDelegate.generate,
62
+ generateTests: generateTests.generate,
63
+ generateShadowNodeCpp: generateShadowNodeCpp.generate,
64
+ generateShadowNodeH: generateShadowNodeH.generate,
65
+ generateThirdPartyFabricComponentsProviderObjCpp:
66
+ generateThirdPartyFabricComponentsProviderObjCpp.generate,
67
+ generateThirdPartyFabricComponentsProviderH:
68
+ generateThirdPartyFabricComponentsProviderH.generate,
69
+ generateViewConfigJs: generateViewConfigJs.generate,
70
+ };
71
+
45
72
  import type {SchemaType} from '../CodegenSchema';
46
73
 
47
74
  type LibraryOptions = $ReadOnly<{
@@ -122,8 +149,8 @@ const LIBRARY_GENERATORS = {
122
149
  generateShadowNodeH.generate,
123
150
  ],
124
151
  modulesAndroid: [
125
- GenerateModuleJniCpp.generate,
126
- GenerateModuleJniH.generate,
152
+ generateModuleJniCpp.generate,
153
+ generateModuleJniH.generate,
127
154
  generateModuleJavaSpec.generate,
128
155
  ],
129
156
  modulesCxx: [generateModuleCpp.generate, generateModuleH.generate],
@@ -194,6 +221,10 @@ function checkOrWriteFiles(
194
221
  }
195
222
 
196
223
  module.exports = {
224
+ allGenerators: ALL_GENERATORS,
225
+ libraryGenerators: LIBRARY_GENERATORS,
226
+ schemaGenerators: SCHEMAS_GENERATORS,
227
+
197
228
  generate(
198
229
  {
199
230
  libraryName,
@@ -84,6 +84,8 @@ function getNativeTypeFromAnnotation(componentName, prop, nameParts) {
84
84
  return getEnumName(componentName, prop.name);
85
85
  case 'Int32EnumTypeAnnotation':
86
86
  return getEnumName(componentName, prop.name);
87
+ case 'MixedTypeAnnotation':
88
+ return 'folly::dynamic';
87
89
  default:
88
90
  typeAnnotation;
89
91
  throw new Error(
@@ -122,6 +122,8 @@ function getNativeTypeFromAnnotation(
122
122
  return getEnumName(componentName, prop.name);
123
123
  case 'Int32EnumTypeAnnotation':
124
124
  return getEnumName(componentName, prop.name);
125
+ case 'MixedTypeAnnotation':
126
+ return 'folly::dynamic';
125
127
  default:
126
128
  (typeAnnotation: empty);
127
129
  throw new Error(
@@ -165,6 +165,8 @@ function convertDefaultTypeToString(componentName, prop) {
165
165
  prop.name,
166
166
  typeAnnotation.default,
167
167
  )}`;
168
+ case 'MixedTypeAnnotation':
169
+ return '';
168
170
  default:
169
171
  typeAnnotation;
170
172
  throw new Error(`Unsupported type annotation: ${typeAnnotation.type}`);
@@ -200,6 +200,8 @@ function convertDefaultTypeToString(
200
200
  prop.name,
201
201
  typeAnnotation.default,
202
202
  )}`;
203
+ case 'MixedTypeAnnotation':
204
+ return '';
203
205
  default:
204
206
  (typeAnnotation: empty);
205
207
  throw new Error(`Unsupported type annotation: ${typeAnnotation.type}`);
@@ -522,6 +522,8 @@ function generateStruct(structs, componentName, nameParts, properties) {
522
522
  }
523
523
  generateStruct(structs, componentName, nameParts.concat([name]), props);
524
524
  return;
525
+ case 'MixedTypeAnnotation':
526
+ return;
525
527
  default:
526
528
  property.typeAnnotation.type;
527
529
  throw new Error(
@@ -676,6 +676,8 @@ function generateStruct(
676
676
  }
677
677
  generateStruct(structs, componentName, nameParts.concat([name]), props);
678
678
  return;
679
+ case 'MixedTypeAnnotation':
680
+ return;
679
681
  default:
680
682
  (property.typeAnnotation.type: empty);
681
683
  throw new Error(
@@ -120,6 +120,8 @@ function getJavaValueForProp(prop, componentName) {
120
120
  return '(String) value';
121
121
  case 'Int32EnumTypeAnnotation':
122
122
  return `value == null ? ${typeAnnotation.default} : ((Double) value).intValue()`;
123
+ case 'MixedTypeAnnotation':
124
+ return 'new DynamicFromObject(value)';
123
125
  default:
124
126
  typeAnnotation;
125
127
  throw new Error('Received invalid typeAnnotation');
@@ -144,6 +144,8 @@ function getJavaValueForProp(
144
144
  return '(String) value';
145
145
  case 'Int32EnumTypeAnnotation':
146
146
  return `value == null ? ${typeAnnotation.default} : ((Double) value).intValue()`;
147
+ case 'MixedTypeAnnotation':
148
+ return 'new DynamicFromObject(value)';
147
149
  default:
148
150
  (typeAnnotation: empty);
149
151
  throw new Error('Received invalid typeAnnotation');
@@ -105,6 +105,8 @@ function getJavaValueForProp(prop, imports) {
105
105
  case 'Int32EnumTypeAnnotation':
106
106
  addNullable(imports);
107
107
  return '@Nullable Integer value';
108
+ case 'MixedTypeAnnotation':
109
+ return 'Dynamic value';
108
110
  default:
109
111
  typeAnnotation;
110
112
  throw new Error('Received invalid typeAnnotation');
@@ -127,6 +127,8 @@ function getJavaValueForProp(
127
127
  case 'Int32EnumTypeAnnotation':
128
128
  addNullable(imports);
129
129
  return '@Nullable Integer value';
130
+ case 'MixedTypeAnnotation':
131
+ return 'Dynamic value';
130
132
  default:
131
133
  (typeAnnotation: empty);
132
134
  throw new Error('Received invalid typeAnnotation');
@@ -20,6 +20,7 @@ import type {
20
20
  FloatTypeAnnotation,
21
21
  Int32TypeAnnotation,
22
22
  PropTypeAnnotation,
23
+ MixedTypeAnnotation,
23
24
  } from '../../../CodegenSchema';
24
25
 
25
26
  const {capitalize} = require('../../Utils');
@@ -89,7 +90,8 @@ export type PojoTypeAnnotation =
89
90
  type: 'ArrayTypeAnnotation',
90
91
  elementType: PojoTypeAliasAnnotation,
91
92
  }>,
92
- }>;
93
+ }>
94
+ | MixedTypeAnnotation;
93
95
 
94
96
  class PojoCollector {
95
97
  _pojos: Map<string, Pojo> = new Map();
@@ -18,6 +18,7 @@ function toJavaType(typeAnnotation, addImport) {
18
18
  addImport('com.facebook.react.bridge.ReadableMap');
19
19
  const importArrayList = () => addImport('java.util.ArrayList');
20
20
  const importYogaValue = () => addImport('com.facebook.yoga.YogaValue');
21
+ const importDynamic = () => addImport('com.facebook.react.bridge.Dynamic');
21
22
  switch (typeAnnotation.type) {
22
23
  /**
23
24
  * Primitives
@@ -208,6 +209,10 @@ function toJavaType(typeAnnotation, addImport) {
208
209
  importArrayList();
209
210
  return `ArrayList<${elementTypeString}>`;
210
211
  }
212
+ case 'MixedTypeAnnotation': {
213
+ importDynamic();
214
+ return 'Dynamic';
215
+ }
211
216
  default: {
212
217
  typeAnnotation.type;
213
218
  throw new Error(
@@ -24,6 +24,7 @@ function toJavaType(
24
24
  addImport('com.facebook.react.bridge.ReadableMap');
25
25
  const importArrayList = () => addImport('java.util.ArrayList');
26
26
  const importYogaValue = () => addImport('com.facebook.yoga.YogaValue');
27
+ const importDynamic = () => addImport('com.facebook.react.bridge.Dynamic');
27
28
  switch (typeAnnotation.type) {
28
29
  /**
29
30
  * Primitives
@@ -222,6 +223,11 @@ function toJavaType(
222
223
  return `ArrayList<${elementTypeString}>`;
223
224
  }
224
225
 
226
+ case 'MixedTypeAnnotation': {
227
+ importDynamic();
228
+ return 'Dynamic';
229
+ }
230
+
225
231
  default: {
226
232
  (typeAnnotation.type: empty);
227
233
  throw new Error(
@@ -46,6 +46,7 @@ function getReactDiffProcessValue(typeAnnotation) {
46
46
  case 'ObjectTypeAnnotation':
47
47
  case 'StringEnumTypeAnnotation':
48
48
  case 'Int32EnumTypeAnnotation':
49
+ case 'MixedTypeAnnotation':
49
50
  return j.literal(true);
50
51
  case 'ReservedPropTypeAnnotation':
51
52
  switch (typeAnnotation.name) {
@@ -60,6 +60,7 @@ function getReactDiffProcessValue(typeAnnotation: PropTypeAnnotation) {
60
60
  case 'ObjectTypeAnnotation':
61
61
  case 'StringEnumTypeAnnotation':
62
62
  case 'Int32EnumTypeAnnotation':
63
+ case 'MixedTypeAnnotation':
63
64
  return j.literal(true);
64
65
  case 'ReservedPropTypeAnnotation':
65
66
  switch (typeAnnotation.name) {
@@ -85,6 +85,13 @@ function getImports(component, type) {
85
85
  if (typeAnnotation.type === 'ObjectTypeAnnotation') {
86
86
  imports.add('import com.facebook.react.bridge.ReadableMap;');
87
87
  }
88
+ if (typeAnnotation.type === 'MixedTypeAnnotation') {
89
+ if (type === 'delegate') {
90
+ imports.add('import com.facebook.react.bridge.DynamicFromObject;');
91
+ } else {
92
+ imports.add('import com.facebook.react.bridge.Dynamic;');
93
+ }
94
+ }
88
95
  });
89
96
  return imports;
90
97
  }
@@ -117,6 +117,14 @@ function getImports(
117
117
  if (typeAnnotation.type === 'ObjectTypeAnnotation') {
118
118
  imports.add('import com.facebook.react.bridge.ReadableMap;');
119
119
  }
120
+
121
+ if (typeAnnotation.type === 'MixedTypeAnnotation') {
122
+ if (type === 'delegate') {
123
+ imports.add('import com.facebook.react.bridge.DynamicFromObject;');
124
+ } else {
125
+ imports.add('import com.facebook.react.bridge.Dynamic;');
126
+ }
127
+ }
120
128
  });
121
129
 
122
130
  return imports;
@@ -1102,6 +1102,34 @@ const INT32_ENUM_PROP = {
1102
1102
  },
1103
1103
  },
1104
1104
  };
1105
+ const MIXED_PROP = {
1106
+ modules: {
1107
+ CustomView: {
1108
+ type: 'Component',
1109
+ components: {
1110
+ MixedPropNativeComponent: {
1111
+ extendsProps: [
1112
+ {
1113
+ type: 'ReactNativeBuiltInType',
1114
+ knownTypeName: 'ReactNativeCoreViewProps',
1115
+ },
1116
+ ],
1117
+ events: [],
1118
+ props: [
1119
+ {
1120
+ name: 'mixedProp',
1121
+ optional: false,
1122
+ typeAnnotation: {
1123
+ type: 'MixedTypeAnnotation',
1124
+ },
1125
+ },
1126
+ ],
1127
+ commands: [],
1128
+ },
1129
+ },
1130
+ },
1131
+ },
1132
+ };
1105
1133
  const EVENT_PROPS = {
1106
1134
  modules: {
1107
1135
  Switch: {
@@ -1669,6 +1697,7 @@ module.exports = {
1669
1697
  MULTI_NATIVE_PROP,
1670
1698
  STRING_ENUM_PROP,
1671
1699
  INT32_ENUM_PROP,
1700
+ MIXED_PROP,
1672
1701
  EVENT_PROPS,
1673
1702
  EVENTS_WITH_PAPER_NAME,
1674
1703
  EVENT_NESTED_OBJECT_PROPS,
@@ -1123,6 +1123,35 @@ const INT32_ENUM_PROP: SchemaType = {
1123
1123
  },
1124
1124
  };
1125
1125
 
1126
+ const MIXED_PROP: SchemaType = {
1127
+ modules: {
1128
+ CustomView: {
1129
+ type: 'Component',
1130
+ components: {
1131
+ MixedPropNativeComponent: {
1132
+ extendsProps: [
1133
+ {
1134
+ type: 'ReactNativeBuiltInType',
1135
+ knownTypeName: 'ReactNativeCoreViewProps',
1136
+ },
1137
+ ],
1138
+ events: [],
1139
+ props: [
1140
+ {
1141
+ name: 'mixedProp',
1142
+ optional: false,
1143
+ typeAnnotation: {
1144
+ type: 'MixedTypeAnnotation',
1145
+ },
1146
+ },
1147
+ ],
1148
+ commands: [],
1149
+ },
1150
+ },
1151
+ },
1152
+ },
1153
+ };
1154
+
1126
1155
  const EVENT_PROPS: SchemaType = {
1127
1156
  modules: {
1128
1157
  Switch: {
@@ -1701,6 +1730,7 @@ module.exports = {
1701
1730
  MULTI_NATIVE_PROP,
1702
1731
  STRING_ENUM_PROP,
1703
1732
  INT32_ENUM_PROP,
1733
+ MIXED_PROP,
1704
1734
  EVENT_PROPS,
1705
1735
  EVENTS_WITH_PAPER_NAME,
1706
1736
  EVENT_NESTED_OBJECT_PROPS,