@react-native-windows/codegen 0.75.1 → 0.76.0-preview.1

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.
@@ -7,13 +7,14 @@
7
7
  'use strict';
8
8
 
9
9
  import type {
10
+ NativeModuleEventEmitterShape,
10
11
  NativeModuleFunctionTypeAnnotation,
11
12
  NativeModulePropertyShape,
12
13
  NativeModuleSchema,
13
14
  } from '@react-native/codegen/lib/CodegenSchema';
14
15
  import {AliasMap} from './AliasManaging';
15
16
  import type {CppCodegenOptions} from './ObjectTypes';
16
- import {translateArgs, translateSpecArgs} from './ParamTypes';
17
+ import {translateArgs, translateSpecArgs, translateEventEmitterArgs} from './ParamTypes';
17
18
  import {translateImplReturnType, translateSpecReturnType} from './ReturnTypes';
18
19
 
19
20
  function isMethodSync(funcType: NativeModuleFunctionTypeAnnotation) {
@@ -91,9 +92,9 @@ function renderProperties(
91
92
  aliases: AliasMap,
92
93
  tuple: boolean,
93
94
  options: CppCodegenOptions,
94
- ): string {
95
+ ): { code: string, numberOfProperties: number } {
95
96
  // TODO: generate code for constants
96
- return methods
97
+ const properties = methods
97
98
  .filter(prop => prop.name !== 'getConstants')
98
99
  .map((prop, index) => {
99
100
  // TODO: prop.optional === true
@@ -151,6 +152,66 @@ function renderProperties(
151
152
  options,
152
153
  )});`;
153
154
  }
155
+ });
156
+
157
+ return {code: properties.join('\n'), numberOfProperties: properties.length};
158
+ }
159
+
160
+ function getPossibleEventEmitterSignatures(
161
+ eventEmitter: NativeModuleEventEmitterShape,
162
+ aliases: AliasMap,
163
+ options: CppCodegenOptions): string[] {
164
+
165
+ const traversedArgs = translateEventEmitterArgs(
166
+ eventEmitter.typeAnnotation.typeAnnotation,
167
+ aliases,
168
+ eventEmitter.name,
169
+ options,
170
+ );
171
+ return [`REACT_EVENT(${eventEmitter.name}) std::function<void(${traversedArgs})> ${eventEmitter.name};`]
172
+ }
173
+
174
+ function translatePossibleEventSignatures(
175
+ eventEmitter: NativeModuleEventEmitterShape,
176
+ aliases: AliasMap,
177
+ options: CppCodegenOptions): string {
178
+ return getPossibleEventEmitterSignatures(
179
+ eventEmitter,
180
+ aliases,
181
+ options
182
+ )
183
+ .map(sig => `" ${sig}\\n"`)
184
+ .join('\n ');
185
+ }
186
+
187
+ function renderEventEmitters(
188
+ eventEmitters: ReadonlyArray<NativeModuleEventEmitterShape>,
189
+ indexOffset: number,
190
+ aliases: AliasMap,
191
+ tuple: boolean,
192
+ options: CppCodegenOptions,
193
+ ): string {
194
+ return eventEmitters
195
+ .map((eventEmitter, index) => {
196
+ const traversedArgs = translateEventEmitterArgs(
197
+ eventEmitter.typeAnnotation.typeAnnotation,
198
+ aliases,
199
+ eventEmitter.name,
200
+ options,
201
+ );
202
+
203
+ if (tuple) {
204
+ return ` EventEmitter<void(${traversedArgs})>{${index + indexOffset}, L"${eventEmitter.name}"},`;
205
+ } else {
206
+ return ` REACT_SHOW_EVENTEMITTER_SPEC_ERRORS(
207
+ ${index + indexOffset},
208
+ "${eventEmitter.name}",
209
+ ${translatePossibleEventSignatures(
210
+ eventEmitter,
211
+ aliases,
212
+ options,
213
+ )});`;
214
+ }
154
215
  })
155
216
  .join('\n');
156
217
  }
@@ -159,19 +220,39 @@ export function generateValidateMethods(
159
220
  nativeModule: NativeModuleSchema,
160
221
  aliases: AliasMap,
161
222
  options: CppCodegenOptions,
162
- ): [string, string] {
223
+ ): {
224
+ traversedProperties: string,
225
+ traversedEventEmitters: string,
226
+ traversedPropertyTuples: string,
227
+ traversedEventEmitterTuples: string,
228
+ } {
163
229
  const methods = nativeModule.spec.methods;
230
+ const eventEmitters = nativeModule.spec.eventEmitters;
164
231
  const traversedProperties = renderProperties(
165
232
  methods,
166
233
  aliases,
167
234
  false,
168
235
  options,
169
236
  );
237
+ const traversedEventEmitters = renderEventEmitters(
238
+ eventEmitters,
239
+ traversedProperties.numberOfProperties,
240
+ aliases,
241
+ false,
242
+ options,
243
+ );
170
244
  const traversedPropertyTuples = renderProperties(
171
245
  methods,
172
246
  aliases,
173
247
  true,
174
248
  options,
175
249
  );
176
- return [traversedPropertyTuples, traversedProperties];
250
+ const traversedEventEmitterTuples = renderEventEmitters(
251
+ eventEmitters,
252
+ traversedProperties.numberOfProperties,
253
+ aliases,
254
+ true,
255
+ options,
256
+ );
257
+ return {traversedPropertyTuples: traversedPropertyTuples.code, traversedEventEmitterTuples, traversedProperties: traversedProperties.code, traversedEventEmitters};
177
258
  }