@react-native/codegen 0.72.3 → 0.73.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/CodegenSchema.d.ts +10 -10
- package/lib/CodegenSchema.js.flow +6 -1
- package/lib/SchemaValidator.d.ts +1 -1
- package/lib/generators/RNCodegen.d.ts +98 -0
- package/lib/generators/RNCodegen.js +33 -4
- package/lib/generators/RNCodegen.js.flow +35 -4
- package/lib/generators/components/ComponentsGeneratorUtils.js +2 -0
- package/lib/generators/components/ComponentsGeneratorUtils.js.flow +2 -0
- package/lib/generators/components/CppHelpers.js +2 -0
- package/lib/generators/components/CppHelpers.js.flow +2 -0
- package/lib/generators/components/GenerateEventEmitterCpp.js +33 -44
- package/lib/generators/components/GenerateEventEmitterCpp.js.flow +35 -44
- package/lib/generators/components/GenerateEventEmitterH.js +0 -2
- package/lib/generators/components/GenerateEventEmitterH.js.flow +0 -2
- package/lib/generators/components/GeneratePropsH.js +2 -0
- package/lib/generators/components/GeneratePropsH.js.flow +2 -0
- package/lib/generators/components/GeneratePropsJavaDelegate.js +2 -0
- package/lib/generators/components/GeneratePropsJavaDelegate.js.flow +2 -0
- package/lib/generators/components/GeneratePropsJavaInterface.js +2 -0
- package/lib/generators/components/GeneratePropsJavaInterface.js.flow +2 -0
- package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js.flow +3 -1
- package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js +5 -0
- package/lib/generators/components/GeneratePropsJavaPojo/serializePojo.js.flow +6 -0
- package/lib/generators/components/GenerateViewConfigJs.js +1 -0
- package/lib/generators/components/GenerateViewConfigJs.js.flow +1 -0
- package/lib/generators/components/JavaHelpers.js +7 -0
- package/lib/generators/components/JavaHelpers.js.flow +8 -0
- package/lib/generators/components/__test_fixtures__/fixtures.js +29 -0
- package/lib/generators/components/__test_fixtures__/fixtures.js.flow +30 -0
- package/lib/generators/modules/GenerateModuleCpp.js +3 -3
- package/lib/generators/modules/GenerateModuleCpp.js.flow +3 -3
- package/lib/generators/modules/GenerateModuleJavaSpec.js +1 -2
- package/lib/generators/modules/GenerateModuleJavaSpec.js.flow +1 -2
- package/lib/parsers/error-utils.js +9 -15
- package/lib/parsers/error-utils.js.flow +12 -15
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +5 -1
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +5 -1
- package/lib/parsers/flow/components/componentsUtils.js +4 -0
- package/lib/parsers/flow/components/componentsUtils.js.flow +4 -0
- package/lib/parsers/flow/components/index.js +35 -168
- package/lib/parsers/flow/components/index.js.flow +33 -107
- package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js +4 -4
- package/lib/parsers/flow/modules/__test_fixtures__/fixtures.js.flow +4 -4
- package/lib/parsers/flow/modules/index.js +51 -327
- package/lib/parsers/flow/modules/index.js.flow +34 -258
- package/lib/parsers/flow/parser.js +84 -13
- package/lib/parsers/flow/parser.js.flow +80 -4
- package/lib/parsers/parser.d.ts +2 -2
- package/lib/parsers/parser.js.flow +84 -3
- package/lib/parsers/parserMock.js +53 -0
- package/lib/parsers/parserMock.js.flow +64 -1
- package/lib/parsers/parsers-commons.js +397 -4
- package/lib/parsers/parsers-commons.js.flow +391 -4
- package/lib/parsers/parsers-primitives.js +121 -3
- package/lib/parsers/parsers-primitives.js.flow +134 -3
- package/lib/parsers/schema/index.d.ts +1 -1
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +5 -1
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +5 -1
- package/lib/parsers/typescript/components/componentsUtils.js +8 -0
- package/lib/parsers/typescript/components/componentsUtils.js.flow +8 -0
- package/lib/parsers/typescript/components/index.js +37 -170
- package/lib/parsers/typescript/components/index.js.flow +33 -109
- package/lib/parsers/typescript/modules/index.js +113 -441
- package/lib/parsers/typescript/modules/index.js.flow +100 -309
- package/lib/parsers/typescript/parser.js +97 -13
- package/lib/parsers/typescript/parser.js.flow +94 -4
- package/lib/parsers/utils.js +4 -0
- package/lib/parsers/utils.js.flow +3 -0
- package/package.json +1 -1
- package/lib/parsers/flow/Visitor.js +0 -37
- package/lib/parsers/flow/Visitor.js.flow +0 -41
- package/lib/parsers/flow/components/options.js +0 -72
- package/lib/parsers/flow/components/options.js.flow +0 -87
- package/lib/parsers/typescript/Visitor.js +0 -42
- package/lib/parsers/typescript/Visitor.js.flow +0 -47
- package/lib/parsers/typescript/components/options.js +0 -72
- package/lib/parsers/typescript/components/options.js.flow +0 -87
package/lib/CodegenSchema.d.ts
CHANGED
|
@@ -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',
|
package/lib/SchemaValidator.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
32
|
-
const
|
|
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
|
-
|
|
84
|
-
|
|
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
|
|
33
|
-
const
|
|
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
|
-
|
|
126
|
-
|
|
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}`);
|
|
@@ -26,9 +26,7 @@ const FileTemplate = ({events, libraryName}) => `
|
|
|
26
26
|
|
|
27
27
|
namespace facebook {
|
|
28
28
|
namespace react {
|
|
29
|
-
|
|
30
29
|
${events}
|
|
31
|
-
|
|
32
30
|
} // namespace react
|
|
33
31
|
} // namespace facebook
|
|
34
32
|
`;
|
|
@@ -39,16 +37,16 @@ const ComponentTemplate = ({
|
|
|
39
37
|
dispatchEventName,
|
|
40
38
|
implementation,
|
|
41
39
|
}) => {
|
|
42
|
-
const capture = implementation.includes('event')
|
|
43
|
-
? 'event=std::move(event)'
|
|
40
|
+
const capture = implementation.includes('$event')
|
|
41
|
+
? '$event=std::move($event)'
|
|
44
42
|
: '';
|
|
45
43
|
return `
|
|
46
|
-
void ${className}EventEmitter::${eventName}(${structName} event) const {
|
|
44
|
+
void ${className}EventEmitter::${eventName}(${structName} $event) const {
|
|
47
45
|
dispatchEvent("${dispatchEventName}", [${capture}](jsi::Runtime &runtime) {
|
|
48
46
|
${implementation}
|
|
49
47
|
});
|
|
50
48
|
}
|
|
51
|
-
|
|
49
|
+
`;
|
|
52
50
|
};
|
|
53
51
|
const BasicComponentTemplate = ({className, eventName, dispatchEventName}) =>
|
|
54
52
|
`
|
|
@@ -58,47 +56,45 @@ void ${className}EventEmitter::${eventName}() const {
|
|
|
58
56
|
`.trim();
|
|
59
57
|
function generateSetter(variableName, propertyName, propertyParts) {
|
|
60
58
|
const trailingPeriod = propertyParts.length === 0 ? '' : '.';
|
|
61
|
-
const eventChain =
|
|
59
|
+
const eventChain = `$event.${propertyParts.join(
|
|
62
60
|
'.',
|
|
63
61
|
)}${trailingPeriod}${propertyName});`;
|
|
64
62
|
return `${variableName}.setProperty(runtime, "${propertyName}", ${eventChain}`;
|
|
65
63
|
}
|
|
66
64
|
function generateEnumSetter(variableName, propertyName, propertyParts) {
|
|
67
65
|
const trailingPeriod = propertyParts.length === 0 ? '' : '.';
|
|
68
|
-
const eventChain =
|
|
66
|
+
const eventChain = `$event.${propertyParts.join(
|
|
69
67
|
'.',
|
|
70
68
|
)}${trailingPeriod}${propertyName})`;
|
|
71
69
|
return `${variableName}.setProperty(runtime, "${propertyName}", toString(${eventChain});`;
|
|
72
70
|
}
|
|
71
|
+
function generateObjectSetter(
|
|
72
|
+
variableName,
|
|
73
|
+
propertyName,
|
|
74
|
+
propertyParts,
|
|
75
|
+
typeAnnotation,
|
|
76
|
+
) {
|
|
77
|
+
return `
|
|
78
|
+
{
|
|
79
|
+
auto ${propertyName} = jsi::Object(runtime);
|
|
80
|
+
${generateSetters(
|
|
81
|
+
propertyName,
|
|
82
|
+
typeAnnotation.properties,
|
|
83
|
+
propertyParts.concat([propertyName]),
|
|
84
|
+
)}
|
|
85
|
+
${variableName}.setProperty(runtime, "${propertyName}", ${propertyName});
|
|
86
|
+
}
|
|
87
|
+
`.trim();
|
|
88
|
+
}
|
|
73
89
|
function generateSetters(parentPropertyName, properties, propertyParts) {
|
|
74
90
|
const propSetters = properties
|
|
75
91
|
.map(eventProperty => {
|
|
76
92
|
const typeAnnotation = eventProperty.typeAnnotation;
|
|
77
93
|
switch (typeAnnotation.type) {
|
|
78
94
|
case 'BooleanTypeAnnotation':
|
|
79
|
-
return generateSetter(
|
|
80
|
-
parentPropertyName,
|
|
81
|
-
eventProperty.name,
|
|
82
|
-
propertyParts,
|
|
83
|
-
);
|
|
84
95
|
case 'StringTypeAnnotation':
|
|
85
|
-
return generateSetter(
|
|
86
|
-
parentPropertyName,
|
|
87
|
-
eventProperty.name,
|
|
88
|
-
propertyParts,
|
|
89
|
-
);
|
|
90
96
|
case 'Int32TypeAnnotation':
|
|
91
|
-
return generateSetter(
|
|
92
|
-
parentPropertyName,
|
|
93
|
-
eventProperty.name,
|
|
94
|
-
propertyParts,
|
|
95
|
-
);
|
|
96
97
|
case 'DoubleTypeAnnotation':
|
|
97
|
-
return generateSetter(
|
|
98
|
-
parentPropertyName,
|
|
99
|
-
eventProperty.name,
|
|
100
|
-
propertyParts,
|
|
101
|
-
);
|
|
102
98
|
case 'FloatTypeAnnotation':
|
|
103
99
|
return generateSetter(
|
|
104
100
|
parentPropertyName,
|
|
@@ -112,19 +108,12 @@ function generateSetters(parentPropertyName, properties, propertyParts) {
|
|
|
112
108
|
propertyParts,
|
|
113
109
|
);
|
|
114
110
|
case 'ObjectTypeAnnotation':
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
typeAnnotation.properties,
|
|
122
|
-
propertyParts.concat([propertyName]),
|
|
123
|
-
)}
|
|
124
|
-
|
|
125
|
-
${parentPropertyName}.setProperty(runtime, "${propertyName}", ${propertyName});
|
|
126
|
-
}
|
|
127
|
-
`.trim();
|
|
111
|
+
return generateObjectSetter(
|
|
112
|
+
parentPropertyName,
|
|
113
|
+
eventProperty.name,
|
|
114
|
+
propertyParts,
|
|
115
|
+
typeAnnotation,
|
|
116
|
+
);
|
|
128
117
|
default:
|
|
129
118
|
typeAnnotation.type;
|
|
130
119
|
throw new Error('Received invalid event property type');
|
|
@@ -145,9 +134,9 @@ function generateEvent(componentName, event) {
|
|
|
145
134
|
)}`;
|
|
146
135
|
if (event.typeAnnotation.argument) {
|
|
147
136
|
const implementation = `
|
|
148
|
-
auto payload = jsi::Object(runtime);
|
|
149
|
-
${generateSetters('payload', event.typeAnnotation.argument.properties, [])}
|
|
150
|
-
return payload;
|
|
137
|
+
auto $payload = jsi::Object(runtime);
|
|
138
|
+
${generateSetters('$payload', event.typeAnnotation.argument.properties, [])}
|
|
139
|
+
return $payload;
|
|
151
140
|
`.trim();
|
|
152
141
|
if (!event.name.startsWith('on')) {
|
|
153
142
|
throw new Error('Expected the event name to start with `on`');
|
|
@@ -18,6 +18,7 @@ import type {
|
|
|
18
18
|
NamedShape,
|
|
19
19
|
EventTypeAnnotation,
|
|
20
20
|
SchemaType,
|
|
21
|
+
ObjectTypeAnnotation,
|
|
21
22
|
} from '../../CodegenSchema';
|
|
22
23
|
|
|
23
24
|
// File path -> contents
|
|
@@ -48,9 +49,7 @@ const FileTemplate = ({
|
|
|
48
49
|
|
|
49
50
|
namespace facebook {
|
|
50
51
|
namespace react {
|
|
51
|
-
|
|
52
52
|
${events}
|
|
53
|
-
|
|
54
53
|
} // namespace react
|
|
55
54
|
} // namespace facebook
|
|
56
55
|
`;
|
|
@@ -68,16 +67,16 @@ const ComponentTemplate = ({
|
|
|
68
67
|
dispatchEventName: string,
|
|
69
68
|
implementation: string,
|
|
70
69
|
}) => {
|
|
71
|
-
const capture = implementation.includes('event')
|
|
72
|
-
? 'event=std::move(event)'
|
|
70
|
+
const capture = implementation.includes('$event')
|
|
71
|
+
? '$event=std::move($event)'
|
|
73
72
|
: '';
|
|
74
73
|
return `
|
|
75
|
-
void ${className}EventEmitter::${eventName}(${structName} event) const {
|
|
74
|
+
void ${className}EventEmitter::${eventName}(${structName} $event) const {
|
|
76
75
|
dispatchEvent("${dispatchEventName}", [${capture}](jsi::Runtime &runtime) {
|
|
77
76
|
${implementation}
|
|
78
77
|
});
|
|
79
78
|
}
|
|
80
|
-
|
|
79
|
+
`;
|
|
81
80
|
};
|
|
82
81
|
|
|
83
82
|
const BasicComponentTemplate = ({
|
|
@@ -101,7 +100,7 @@ function generateSetter(
|
|
|
101
100
|
propertyParts: $ReadOnlyArray<string>,
|
|
102
101
|
) {
|
|
103
102
|
const trailingPeriod = propertyParts.length === 0 ? '' : '.';
|
|
104
|
-
const eventChain =
|
|
103
|
+
const eventChain = `$event.${propertyParts.join(
|
|
105
104
|
'.',
|
|
106
105
|
)}${trailingPeriod}${propertyName});`;
|
|
107
106
|
|
|
@@ -114,13 +113,32 @@ function generateEnumSetter(
|
|
|
114
113
|
propertyParts: $ReadOnlyArray<string>,
|
|
115
114
|
) {
|
|
116
115
|
const trailingPeriod = propertyParts.length === 0 ? '' : '.';
|
|
117
|
-
const eventChain =
|
|
116
|
+
const eventChain = `$event.${propertyParts.join(
|
|
118
117
|
'.',
|
|
119
118
|
)}${trailingPeriod}${propertyName})`;
|
|
120
119
|
|
|
121
120
|
return `${variableName}.setProperty(runtime, "${propertyName}", toString(${eventChain});`;
|
|
122
121
|
}
|
|
123
122
|
|
|
123
|
+
function generateObjectSetter(
|
|
124
|
+
variableName: string,
|
|
125
|
+
propertyName: string,
|
|
126
|
+
propertyParts: $ReadOnlyArray<string>,
|
|
127
|
+
typeAnnotation: ObjectTypeAnnotation<EventTypeAnnotation>,
|
|
128
|
+
) {
|
|
129
|
+
return `
|
|
130
|
+
{
|
|
131
|
+
auto ${propertyName} = jsi::Object(runtime);
|
|
132
|
+
${generateSetters(
|
|
133
|
+
propertyName,
|
|
134
|
+
typeAnnotation.properties,
|
|
135
|
+
propertyParts.concat([propertyName]),
|
|
136
|
+
)}
|
|
137
|
+
${variableName}.setProperty(runtime, "${propertyName}", ${propertyName});
|
|
138
|
+
}
|
|
139
|
+
`.trim();
|
|
140
|
+
}
|
|
141
|
+
|
|
124
142
|
function generateSetters(
|
|
125
143
|
parentPropertyName: string,
|
|
126
144
|
properties: $ReadOnlyArray<NamedShape<EventTypeAnnotation>>,
|
|
@@ -131,29 +149,9 @@ function generateSetters(
|
|
|
131
149
|
const {typeAnnotation} = eventProperty;
|
|
132
150
|
switch (typeAnnotation.type) {
|
|
133
151
|
case 'BooleanTypeAnnotation':
|
|
134
|
-
return generateSetter(
|
|
135
|
-
parentPropertyName,
|
|
136
|
-
eventProperty.name,
|
|
137
|
-
propertyParts,
|
|
138
|
-
);
|
|
139
152
|
case 'StringTypeAnnotation':
|
|
140
|
-
return generateSetter(
|
|
141
|
-
parentPropertyName,
|
|
142
|
-
eventProperty.name,
|
|
143
|
-
propertyParts,
|
|
144
|
-
);
|
|
145
153
|
case 'Int32TypeAnnotation':
|
|
146
|
-
return generateSetter(
|
|
147
|
-
parentPropertyName,
|
|
148
|
-
eventProperty.name,
|
|
149
|
-
propertyParts,
|
|
150
|
-
);
|
|
151
154
|
case 'DoubleTypeAnnotation':
|
|
152
|
-
return generateSetter(
|
|
153
|
-
parentPropertyName,
|
|
154
|
-
eventProperty.name,
|
|
155
|
-
propertyParts,
|
|
156
|
-
);
|
|
157
155
|
case 'FloatTypeAnnotation':
|
|
158
156
|
return generateSetter(
|
|
159
157
|
parentPropertyName,
|
|
@@ -167,19 +165,12 @@ function generateSetters(
|
|
|
167
165
|
propertyParts,
|
|
168
166
|
);
|
|
169
167
|
case 'ObjectTypeAnnotation':
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
typeAnnotation.properties,
|
|
177
|
-
propertyParts.concat([propertyName]),
|
|
178
|
-
)}
|
|
179
|
-
|
|
180
|
-
${parentPropertyName}.setProperty(runtime, "${propertyName}", ${propertyName});
|
|
181
|
-
}
|
|
182
|
-
`.trim();
|
|
168
|
+
return generateObjectSetter(
|
|
169
|
+
parentPropertyName,
|
|
170
|
+
eventProperty.name,
|
|
171
|
+
propertyParts,
|
|
172
|
+
typeAnnotation,
|
|
173
|
+
);
|
|
183
174
|
default:
|
|
184
175
|
(typeAnnotation.type: empty);
|
|
185
176
|
throw new Error('Received invalid event property type');
|
|
@@ -203,9 +194,9 @@ function generateEvent(componentName: string, event: EventTypeShape): string {
|
|
|
203
194
|
|
|
204
195
|
if (event.typeAnnotation.argument) {
|
|
205
196
|
const implementation = `
|
|
206
|
-
auto payload = jsi::Object(runtime);
|
|
207
|
-
${generateSetters('payload', event.typeAnnotation.argument.properties, [])}
|
|
208
|
-
return payload;
|
|
197
|
+
auto $payload = jsi::Object(runtime);
|
|
198
|
+
${generateSetters('$payload', event.typeAnnotation.argument.properties, [])}
|
|
199
|
+
return $payload;
|
|
209
200
|
`.trim();
|
|
210
201
|
|
|
211
202
|
if (!event.name.startsWith('on')) {
|
|
@@ -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(
|