@react-native/codegen 0.72.5 → 0.73.0-nightly-20230603-fd9e295be
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/README.md +2 -2
- package/lib/CodegenSchema.d.ts +15 -4
- package/lib/CodegenSchema.js.flow +33 -21
- package/lib/generators/components/CppHelpers.js +39 -2
- package/lib/generators/components/CppHelpers.js.flow +54 -5
- package/lib/generators/components/GenerateEventEmitterCpp.js +238 -55
- package/lib/generators/components/GenerateEventEmitterCpp.js.flow +233 -55
- package/lib/generators/components/GenerateEventEmitterH.js +77 -28
- package/lib/generators/components/GenerateEventEmitterH.js.flow +87 -32
- package/lib/generators/components/GeneratePropsH.js +1 -2
- package/lib/generators/components/GeneratePropsH.js.flow +1 -2
- package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js +0 -1
- package/lib/generators/components/GeneratePropsJavaPojo/PojoCollector.js.flow +3 -5
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js +4 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderH.js.flow +4 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js +2 -0
- package/lib/generators/components/GenerateThirdPartyFabricComponentsProviderObjCpp.js.flow +2 -0
- package/lib/generators/components/__test_fixtures__/fixtures.js +114 -1
- package/lib/generators/components/__test_fixtures__/fixtures.js.flow +114 -1
- 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 +44 -0
- package/lib/parsers/error-utils.js.flow +59 -0
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js +51 -0
- package/lib/parsers/flow/components/__test_fixtures__/fixtures.js.flow +51 -0
- package/lib/parsers/flow/components/componentsUtils.js +6 -6
- package/lib/parsers/flow/components/componentsUtils.js.flow +10 -10
- package/lib/parsers/flow/components/events.js +157 -78
- package/lib/parsers/flow/components/events.js.flow +158 -77
- package/lib/parsers/flow/components/index.js +28 -105
- package/lib/parsers/flow/components/index.js.flow +21 -110
- package/lib/parsers/flow/modules/index.js +39 -49
- package/lib/parsers/flow/modules/index.js.flow +22 -31
- package/lib/parsers/flow/parser.d.ts +9 -2
- package/lib/parsers/flow/parser.js +167 -16
- package/lib/parsers/flow/parser.js.flow +209 -6
- package/lib/parsers/flow/utils.js +0 -63
- package/lib/parsers/flow/utils.js.flow +1 -77
- package/lib/parsers/parser.js.flow +141 -1
- package/lib/parsers/parserMock.js +165 -2
- package/lib/parsers/parserMock.js.flow +216 -2
- package/lib/parsers/parsers-commons.js +128 -9
- package/lib/parsers/parsers-commons.js.flow +182 -12
- package/lib/parsers/parsers-primitives.js +84 -35
- package/lib/parsers/parsers-primitives.js.flow +110 -35
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js +51 -0
- package/lib/parsers/typescript/components/__test_fixtures__/fixtures.js.flow +51 -0
- package/lib/parsers/typescript/components/componentsUtils.js +31 -7
- package/lib/parsers/typescript/components/componentsUtils.js.flow +31 -14
- package/lib/parsers/typescript/components/events.js +142 -67
- package/lib/parsers/typescript/components/events.js.flow +149 -68
- package/lib/parsers/typescript/components/extends.js +2 -49
- package/lib/parsers/typescript/components/extends.js.flow +1 -55
- package/lib/parsers/typescript/components/index.js +29 -109
- package/lib/parsers/typescript/components/index.js.flow +21 -116
- package/lib/parsers/typescript/modules/index.js +41 -50
- package/lib/parsers/typescript/modules/index.js.flow +23 -31
- package/lib/parsers/typescript/parser.d.ts +9 -2
- package/lib/parsers/typescript/parser.js +193 -7
- package/lib/parsers/typescript/parser.js.flow +235 -6
- package/lib/parsers/utils.js.flow +6 -0
- package/package.json +16 -5
- package/lib/parsers/flow/components/extends.js +0 -52
- package/lib/parsers/flow/components/extends.js.flow +0 -66
- package/lib/parsers/flow/components/props.js +0 -47
- package/lib/parsers/flow/components/props.js.flow +0 -60
- package/lib/parsers/typescript/components/props.js +0 -39
- package/lib/parsers/typescript/components/props.js.flow +0 -48
- package/lib/parsers/typescript/utils.js +0 -90
- package/lib/parsers/typescript/utils.js.flow +0 -104
|
@@ -10,9 +10,11 @@
|
|
|
10
10
|
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
const _require = require('./CppHelpers
|
|
13
|
+
const _require = require('./CppHelpers'),
|
|
14
14
|
generateEventStructName = _require.generateEventStructName;
|
|
15
|
-
const
|
|
15
|
+
const _require2 = require('../Utils'),
|
|
16
|
+
indent = _require2.indent;
|
|
17
|
+
const FileTemplate = ({events, libraryName, extraIncludes}) => `
|
|
16
18
|
/**
|
|
17
19
|
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
18
20
|
*
|
|
@@ -23,12 +25,11 @@ const FileTemplate = ({events, libraryName}) => `
|
|
|
23
25
|
*/
|
|
24
26
|
|
|
25
27
|
#include <react/renderer/components/${libraryName}/EventEmitters.h>
|
|
28
|
+
${[...extraIncludes].join('\n')}
|
|
26
29
|
|
|
27
30
|
namespace facebook {
|
|
28
31
|
namespace react {
|
|
29
|
-
|
|
30
32
|
${events}
|
|
31
|
-
|
|
32
33
|
} // namespace react
|
|
33
34
|
} // namespace facebook
|
|
34
35
|
`;
|
|
@@ -39,16 +40,16 @@ const ComponentTemplate = ({
|
|
|
39
40
|
dispatchEventName,
|
|
40
41
|
implementation,
|
|
41
42
|
}) => {
|
|
42
|
-
const capture = implementation.includes('event')
|
|
43
|
-
? 'event=std::move(event)'
|
|
43
|
+
const capture = implementation.includes('$event')
|
|
44
|
+
? '$event=std::move($event)'
|
|
44
45
|
: '';
|
|
45
46
|
return `
|
|
46
|
-
void ${className}EventEmitter::${eventName}(${structName} event) const {
|
|
47
|
+
void ${className}EventEmitter::${eventName}(${structName} $event) const {
|
|
47
48
|
dispatchEvent("${dispatchEventName}", [${capture}](jsi::Runtime &runtime) {
|
|
48
49
|
${implementation}
|
|
49
50
|
});
|
|
50
51
|
}
|
|
51
|
-
|
|
52
|
+
`;
|
|
52
53
|
};
|
|
53
54
|
const BasicComponentTemplate = ({className, eventName, dispatchEventName}) =>
|
|
54
55
|
`
|
|
@@ -56,84 +57,261 @@ void ${className}EventEmitter::${eventName}() const {
|
|
|
56
57
|
dispatchEvent("${dispatchEventName}");
|
|
57
58
|
}
|
|
58
59
|
`.trim();
|
|
59
|
-
function generateSetter(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
function generateSetter(
|
|
61
|
+
variableName,
|
|
62
|
+
propertyName,
|
|
63
|
+
propertyParts,
|
|
64
|
+
usingEvent,
|
|
65
|
+
valueMapper = value => value,
|
|
66
|
+
) {
|
|
67
|
+
const eventChain = usingEvent
|
|
68
|
+
? `$event.${[...propertyParts, propertyName].join('.')}`
|
|
69
|
+
: [propertyParts, propertyName].join('.');
|
|
70
|
+
return `${variableName}.setProperty(runtime, "${propertyName}", ${valueMapper(
|
|
71
|
+
eventChain,
|
|
72
|
+
)});`;
|
|
73
|
+
}
|
|
74
|
+
function generateObjectSetter(
|
|
75
|
+
variableName,
|
|
76
|
+
propertyName,
|
|
77
|
+
propertyParts,
|
|
78
|
+
typeAnnotation,
|
|
79
|
+
extraIncludes,
|
|
80
|
+
usingEvent,
|
|
81
|
+
) {
|
|
82
|
+
return `
|
|
83
|
+
{
|
|
84
|
+
auto ${propertyName} = jsi::Object(runtime);
|
|
85
|
+
${indent(
|
|
86
|
+
generateSetters(
|
|
87
|
+
propertyName,
|
|
88
|
+
typeAnnotation.properties,
|
|
89
|
+
propertyParts.concat([propertyName]),
|
|
90
|
+
extraIncludes,
|
|
91
|
+
usingEvent,
|
|
92
|
+
),
|
|
93
|
+
2,
|
|
94
|
+
)}
|
|
95
|
+
${variableName}.setProperty(runtime, "${propertyName}", ${propertyName});
|
|
96
|
+
}
|
|
97
|
+
`.trim();
|
|
65
98
|
}
|
|
66
|
-
function
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
99
|
+
function setValueAtIndex(
|
|
100
|
+
propertyName,
|
|
101
|
+
indexVariable,
|
|
102
|
+
loopLocalVariable,
|
|
103
|
+
mappingFunction = value => value,
|
|
104
|
+
) {
|
|
105
|
+
return `${propertyName}.setValueAtIndex(runtime, ${indexVariable}++, ${mappingFunction(
|
|
106
|
+
loopLocalVariable,
|
|
107
|
+
)});`;
|
|
72
108
|
}
|
|
73
|
-
function
|
|
109
|
+
function generateArraySetter(
|
|
110
|
+
variableName,
|
|
111
|
+
propertyName,
|
|
112
|
+
propertyParts,
|
|
113
|
+
elementType,
|
|
114
|
+
extraIncludes,
|
|
115
|
+
usingEvent,
|
|
116
|
+
) {
|
|
117
|
+
const eventChain = usingEvent
|
|
118
|
+
? `$event.${[...propertyParts, propertyName].join('.')}`
|
|
119
|
+
: [propertyParts, propertyName].join('.');
|
|
120
|
+
const indexVar = `${propertyName}Index`;
|
|
121
|
+
const innerLoopVar = `${propertyName}Value`;
|
|
122
|
+
return `
|
|
123
|
+
auto ${propertyName} = jsi::Array(runtime, ${eventChain}.size());
|
|
124
|
+
size_t ${indexVar} = 0;
|
|
125
|
+
for (auto ${innerLoopVar} : ${eventChain}) {
|
|
126
|
+
${handleArrayElementType(
|
|
127
|
+
elementType,
|
|
128
|
+
propertyName,
|
|
129
|
+
indexVar,
|
|
130
|
+
innerLoopVar,
|
|
131
|
+
propertyParts,
|
|
132
|
+
extraIncludes,
|
|
133
|
+
usingEvent,
|
|
134
|
+
)}
|
|
135
|
+
}
|
|
136
|
+
${variableName}.setProperty(runtime, "${propertyName}", ${propertyName});
|
|
137
|
+
`;
|
|
138
|
+
}
|
|
139
|
+
function handleArrayElementType(
|
|
140
|
+
elementType,
|
|
141
|
+
propertyName,
|
|
142
|
+
indexVariable,
|
|
143
|
+
loopLocalVariable,
|
|
144
|
+
propertyParts,
|
|
145
|
+
extraIncludes,
|
|
146
|
+
usingEvent,
|
|
147
|
+
) {
|
|
148
|
+
switch (elementType.type) {
|
|
149
|
+
case 'BooleanTypeAnnotation':
|
|
150
|
+
return setValueAtIndex(
|
|
151
|
+
propertyName,
|
|
152
|
+
indexVariable,
|
|
153
|
+
loopLocalVariable,
|
|
154
|
+
val => `(bool)${val}`,
|
|
155
|
+
);
|
|
156
|
+
case 'StringTypeAnnotation':
|
|
157
|
+
case 'Int32TypeAnnotation':
|
|
158
|
+
case 'DoubleTypeAnnotation':
|
|
159
|
+
case 'FloatTypeAnnotation':
|
|
160
|
+
return setValueAtIndex(propertyName, indexVariable, loopLocalVariable);
|
|
161
|
+
case 'MixedTypeAnnotation':
|
|
162
|
+
return setValueAtIndex(
|
|
163
|
+
propertyName,
|
|
164
|
+
indexVariable,
|
|
165
|
+
loopLocalVariable,
|
|
166
|
+
val => `jsi::valueFromDynamic(runtime, ${val})`,
|
|
167
|
+
);
|
|
168
|
+
case 'StringEnumTypeAnnotation':
|
|
169
|
+
return setValueAtIndex(
|
|
170
|
+
propertyName,
|
|
171
|
+
indexVariable,
|
|
172
|
+
loopLocalVariable,
|
|
173
|
+
val => `toString(${val})`,
|
|
174
|
+
);
|
|
175
|
+
case 'ObjectTypeAnnotation':
|
|
176
|
+
return convertObjectTypeArray(
|
|
177
|
+
propertyName,
|
|
178
|
+
indexVariable,
|
|
179
|
+
loopLocalVariable,
|
|
180
|
+
propertyParts,
|
|
181
|
+
elementType,
|
|
182
|
+
extraIncludes,
|
|
183
|
+
);
|
|
184
|
+
case 'ArrayTypeAnnotation':
|
|
185
|
+
return convertArrayTypeArray(
|
|
186
|
+
propertyName,
|
|
187
|
+
indexVariable,
|
|
188
|
+
loopLocalVariable,
|
|
189
|
+
propertyParts,
|
|
190
|
+
elementType,
|
|
191
|
+
extraIncludes,
|
|
192
|
+
usingEvent,
|
|
193
|
+
);
|
|
194
|
+
default:
|
|
195
|
+
throw new Error(
|
|
196
|
+
`Received invalid elementType for array ${elementType.type}`,
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function convertObjectTypeArray(
|
|
201
|
+
propertyName,
|
|
202
|
+
indexVariable,
|
|
203
|
+
loopLocalVariable,
|
|
204
|
+
propertyParts,
|
|
205
|
+
objectTypeAnnotation,
|
|
206
|
+
extraIncludes,
|
|
207
|
+
) {
|
|
208
|
+
return `auto ${propertyName}Object = jsi::Object(runtime);
|
|
209
|
+
${generateSetters(
|
|
210
|
+
`${propertyName}Object`,
|
|
211
|
+
objectTypeAnnotation.properties,
|
|
212
|
+
[].concat([loopLocalVariable]),
|
|
213
|
+
extraIncludes,
|
|
214
|
+
false,
|
|
215
|
+
)}
|
|
216
|
+
${setValueAtIndex(propertyName, indexVariable, `${propertyName}Object`)}`;
|
|
217
|
+
}
|
|
218
|
+
function convertArrayTypeArray(
|
|
219
|
+
propertyName,
|
|
220
|
+
indexVariable,
|
|
221
|
+
loopLocalVariable,
|
|
222
|
+
propertyParts,
|
|
223
|
+
eventTypeAnnotation,
|
|
224
|
+
extraIncludes,
|
|
225
|
+
usingEvent,
|
|
226
|
+
) {
|
|
227
|
+
if (eventTypeAnnotation.type !== 'ArrayTypeAnnotation') {
|
|
228
|
+
throw new Error(
|
|
229
|
+
`Inconsistent eventTypeAnnotation received. Expected type = 'ArrayTypeAnnotation'; received = ${eventTypeAnnotation.type}`,
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
return `auto ${propertyName}Array = jsi::Array(runtime, ${loopLocalVariable}.size());
|
|
233
|
+
size_t ${indexVariable}Internal = 0;
|
|
234
|
+
for (auto ${loopLocalVariable}Internal : ${loopLocalVariable}) {
|
|
235
|
+
${handleArrayElementType(
|
|
236
|
+
eventTypeAnnotation.elementType,
|
|
237
|
+
`${propertyName}Array`,
|
|
238
|
+
`${indexVariable}Internal`,
|
|
239
|
+
`${loopLocalVariable}Internal`,
|
|
240
|
+
propertyParts,
|
|
241
|
+
extraIncludes,
|
|
242
|
+
usingEvent,
|
|
243
|
+
)}
|
|
244
|
+
}
|
|
245
|
+
${setValueAtIndex(propertyName, indexVariable, `${propertyName}Array`)}`;
|
|
246
|
+
}
|
|
247
|
+
function generateSetters(
|
|
248
|
+
parentPropertyName,
|
|
249
|
+
properties,
|
|
250
|
+
propertyParts,
|
|
251
|
+
extraIncludes,
|
|
252
|
+
usingEvent = true,
|
|
253
|
+
) {
|
|
74
254
|
const propSetters = properties
|
|
75
255
|
.map(eventProperty => {
|
|
76
256
|
const typeAnnotation = eventProperty.typeAnnotation;
|
|
77
257
|
switch (typeAnnotation.type) {
|
|
78
258
|
case 'BooleanTypeAnnotation':
|
|
79
|
-
return generateSetter(
|
|
80
|
-
parentPropertyName,
|
|
81
|
-
eventProperty.name,
|
|
82
|
-
propertyParts,
|
|
83
|
-
);
|
|
84
259
|
case 'StringTypeAnnotation':
|
|
260
|
+
case 'Int32TypeAnnotation':
|
|
261
|
+
case 'DoubleTypeAnnotation':
|
|
262
|
+
case 'FloatTypeAnnotation':
|
|
85
263
|
return generateSetter(
|
|
86
264
|
parentPropertyName,
|
|
87
265
|
eventProperty.name,
|
|
88
266
|
propertyParts,
|
|
267
|
+
usingEvent,
|
|
89
268
|
);
|
|
90
|
-
case '
|
|
269
|
+
case 'MixedTypeAnnotation':
|
|
270
|
+
extraIncludes.add('#include <jsi/JSIDynamic.h>');
|
|
91
271
|
return generateSetter(
|
|
92
272
|
parentPropertyName,
|
|
93
273
|
eventProperty.name,
|
|
94
274
|
propertyParts,
|
|
275
|
+
usingEvent,
|
|
276
|
+
prop => `jsi::valueFromDynamic(runtime, ${prop})`,
|
|
95
277
|
);
|
|
96
|
-
case '
|
|
278
|
+
case 'StringEnumTypeAnnotation':
|
|
97
279
|
return generateSetter(
|
|
98
280
|
parentPropertyName,
|
|
99
281
|
eventProperty.name,
|
|
100
282
|
propertyParts,
|
|
283
|
+
usingEvent,
|
|
284
|
+
prop => `toString(${prop})`,
|
|
101
285
|
);
|
|
102
|
-
case '
|
|
103
|
-
return
|
|
286
|
+
case 'ObjectTypeAnnotation':
|
|
287
|
+
return generateObjectSetter(
|
|
104
288
|
parentPropertyName,
|
|
105
289
|
eventProperty.name,
|
|
106
290
|
propertyParts,
|
|
291
|
+
typeAnnotation,
|
|
292
|
+
extraIncludes,
|
|
293
|
+
usingEvent,
|
|
107
294
|
);
|
|
108
|
-
case '
|
|
109
|
-
return
|
|
295
|
+
case 'ArrayTypeAnnotation':
|
|
296
|
+
return generateArraySetter(
|
|
110
297
|
parentPropertyName,
|
|
111
298
|
eventProperty.name,
|
|
112
299
|
propertyParts,
|
|
300
|
+
typeAnnotation.elementType,
|
|
301
|
+
extraIncludes,
|
|
302
|
+
usingEvent,
|
|
113
303
|
);
|
|
114
|
-
case 'ObjectTypeAnnotation':
|
|
115
|
-
const propertyName = eventProperty.name;
|
|
116
|
-
return `
|
|
117
|
-
{
|
|
118
|
-
auto ${propertyName} = jsi::Object(runtime);
|
|
119
|
-
${generateSetters(
|
|
120
|
-
propertyName,
|
|
121
|
-
typeAnnotation.properties,
|
|
122
|
-
propertyParts.concat([propertyName]),
|
|
123
|
-
)}
|
|
124
|
-
|
|
125
|
-
${parentPropertyName}.setProperty(runtime, "${propertyName}", ${propertyName});
|
|
126
|
-
}
|
|
127
|
-
`.trim();
|
|
128
304
|
default:
|
|
129
305
|
typeAnnotation.type;
|
|
130
|
-
throw new Error(
|
|
306
|
+
throw new Error(
|
|
307
|
+
`Received invalid event property type ${typeAnnotation.type}`,
|
|
308
|
+
);
|
|
131
309
|
}
|
|
132
310
|
})
|
|
133
311
|
.join('\n');
|
|
134
312
|
return propSetters;
|
|
135
313
|
}
|
|
136
|
-
function generateEvent(componentName, event) {
|
|
314
|
+
function generateEvent(componentName, event, extraIncludes) {
|
|
137
315
|
// This is a gross hack necessary because native code is sending
|
|
138
316
|
// events named things like topChange to JS which is then converted back to
|
|
139
317
|
// call the onChange prop. We should be consistent throughout the system.
|
|
@@ -145,9 +323,14 @@ function generateEvent(componentName, event) {
|
|
|
145
323
|
)}`;
|
|
146
324
|
if (event.typeAnnotation.argument) {
|
|
147
325
|
const implementation = `
|
|
148
|
-
auto payload = jsi::Object(runtime);
|
|
149
|
-
${generateSetters(
|
|
150
|
-
|
|
326
|
+
auto $payload = jsi::Object(runtime);
|
|
327
|
+
${generateSetters(
|
|
328
|
+
'$payload',
|
|
329
|
+
event.typeAnnotation.argument.properties,
|
|
330
|
+
[],
|
|
331
|
+
extraIncludes,
|
|
332
|
+
)}
|
|
333
|
+
return $payload;
|
|
151
334
|
`.trim();
|
|
152
335
|
if (!event.name.startsWith('on')) {
|
|
153
336
|
throw new Error('Expected the event name to start with `on`');
|
|
@@ -183,20 +366,20 @@ module.exports = {
|
|
|
183
366
|
})
|
|
184
367
|
.filter(Boolean)
|
|
185
368
|
.reduce((acc, components) => Object.assign(acc, components), {});
|
|
186
|
-
const
|
|
369
|
+
const extraIncludes = new Set();
|
|
187
370
|
const componentEmitters = Object.keys(moduleComponents)
|
|
188
371
|
.map(componentName => {
|
|
189
372
|
const component = moduleComponents[componentName];
|
|
190
373
|
return component.events
|
|
191
|
-
.map(event =>
|
|
192
|
-
return generateEvent(componentName, event);
|
|
193
|
-
})
|
|
374
|
+
.map(event => generateEvent(componentName, event, extraIncludes))
|
|
194
375
|
.join('\n');
|
|
195
376
|
})
|
|
196
377
|
.join('\n');
|
|
378
|
+
const fileName = 'EventEmitters.cpp';
|
|
197
379
|
const replacedTemplate = FileTemplate({
|
|
198
380
|
libraryName,
|
|
199
381
|
events: componentEmitters,
|
|
382
|
+
extraIncludes,
|
|
200
383
|
});
|
|
201
384
|
return new Map([[fileName, replacedTemplate]]);
|
|
202
385
|
},
|