react-native-sdk-pianoio 0.2.5 → 0.3.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.
Files changed (50) hide show
  1. package/README.md +36 -2
  2. package/SdkPianoio.podspec +4 -16
  3. package/android/build.gradle +12 -19
  4. package/android/gradle.properties +17 -2
  5. package/android/src/main/java/com/sdkpianoio/SdkPianoioModule.kt +543 -7
  6. package/android/src/main/java/com/sdkpianoio/SdkPianoioPackage.kt +3 -3
  7. package/ios/ComposerPianoImpl.swift +247 -0
  8. package/ios/MyComposerDelegate.swift +79 -200
  9. package/ios/SdkPianoio.swift +150 -0
  10. package/ios/SdkPianoioBridge.m +81 -0
  11. package/ios/services/TokenService.swift +10 -7
  12. package/lib/commonjs/NativeSdkPianoio.ts +13 -4
  13. package/lib/commonjs/PianoComposer.js +16 -9
  14. package/lib/commonjs/PianoComposer.js.map +1 -1
  15. package/lib/commonjs/debug.js +23 -0
  16. package/lib/commonjs/debug.js.map +1 -0
  17. package/lib/commonjs/index.js +7 -0
  18. package/lib/commonjs/index.js.map +1 -1
  19. package/lib/module/NativeSdkPianoio.ts +13 -4
  20. package/lib/module/PianoComposer.js +16 -9
  21. package/lib/module/PianoComposer.js.map +1 -1
  22. package/lib/module/debug.js +18 -0
  23. package/lib/module/debug.js.map +1 -0
  24. package/lib/module/index.js +1 -0
  25. package/lib/module/index.js.map +1 -1
  26. package/lib/typescript/commonjs/src/NativeSdkPianoio.d.ts +2 -2
  27. package/lib/typescript/commonjs/src/NativeSdkPianoio.d.ts.map +1 -1
  28. package/lib/typescript/commonjs/src/PianoComposer.d.ts +2 -2
  29. package/lib/typescript/commonjs/src/PianoComposer.d.ts.map +1 -1
  30. package/lib/typescript/commonjs/src/debug.d.ts +2 -0
  31. package/lib/typescript/commonjs/src/debug.d.ts.map +1 -0
  32. package/lib/typescript/commonjs/src/index.d.ts +1 -0
  33. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  34. package/lib/typescript/module/src/NativeSdkPianoio.d.ts +2 -2
  35. package/lib/typescript/module/src/NativeSdkPianoio.d.ts.map +1 -1
  36. package/lib/typescript/module/src/PianoComposer.d.ts +2 -2
  37. package/lib/typescript/module/src/PianoComposer.d.ts.map +1 -1
  38. package/lib/typescript/module/src/debug.d.ts +2 -0
  39. package/lib/typescript/module/src/debug.d.ts.map +1 -0
  40. package/lib/typescript/module/src/index.d.ts +1 -0
  41. package/lib/typescript/module/src/index.d.ts.map +1 -1
  42. package/package.json +31 -16
  43. package/src/NativeSdkPianoio.ts +13 -4
  44. package/src/PianoComposer.tsx +17 -10
  45. package/src/debug.ts +19 -0
  46. package/src/index.tsx +1 -0
  47. package/ios/ComposerPiano.swift +0 -297
  48. package/ios/SdkPianoio.h +0 -4
  49. package/ios/SdkPianoio.mm +0 -267
  50. package/ios/services/ComposerService.swift +0 -49
@@ -1,20 +1,556 @@
1
1
  package com.sdkpianoio
2
2
 
3
+ import androidx.core.util.Consumer
3
4
  import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
6
+ import com.facebook.react.bridge.ReactMethod
7
+ import com.facebook.react.bridge.Promise
8
+ import com.facebook.react.bridge.ReadableArray
4
9
  import com.facebook.react.module.annotations.ReactModule
5
10
 
11
+ import io.piano.android.composer.Composer
12
+ import io.piano.android.composer.Composer.Endpoint
13
+ import io.piano.android.composer.ExperienceInterceptor
14
+ import io.piano.android.composer.listeners.ExecuteExperienceListener
15
+ import io.piano.android.composer.listeners.ShowLoginListener
16
+ import io.piano.android.composer.model.ExperienceRequest
17
+ import io.piano.android.consents.PianoConsents
18
+ import java.util.function.Consumer
19
+ import com.facebook.react.bridge.Arguments
20
+
21
+ // importa altri listener se ti servono
22
+
6
23
  @ReactModule(name = SdkPianoioModule.NAME)
7
- class SdkPianoioModule(reactContext: ReactApplicationContext) :
8
- NativeSdkPianoioSpec(reactContext) {
24
+ class SdkPianoioModule(private val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { // <-- EXTEND ReactContextBaseJavaModule
25
+
26
+ private var composer: Composer? = null
9
27
 
10
- override fun getName(): String {
28
+ // <-- ADD THIS REQUIRED METHOD
29
+ override fun getName(): String { // <--- MAKE THIS CHANGE
11
30
  return NAME
12
31
  }
13
32
 
14
- // Example method
15
- // See https://reactnative.dev/docs/native-modules-android
16
- override fun multiply(a: Double, b: Double): Double {
17
- return a * b
33
+ @ReactMethod
34
+ fun initializeComposer(aid: String, promise: Promise) {
35
+ try {
36
+ val context = reactContext.currentActivity ?: reactContext.applicationContext;
37
+
38
+ Composer.init(
39
+ context,
40
+ aid,
41
+ Endpoint.SANDBOX, // Use Endpoint.SANDBOX instead of Composer.Endpoint.Companion
42
+ null
43
+ )
44
+ promise.resolve(true) // Resolve the promise on successful initialization
45
+ } catch (e: Exception) {
46
+ promise.reject("INIT_ERROR", "Errore inizializzazione Composer", e)
47
+ }
48
+ }
49
+
50
+
51
+ private val tags = mutableListOf<String>()
52
+ private var zoneId: String? = null
53
+ private var referrer: String? = null
54
+ private val customVariables = mutableMapOf<String, String>()
55
+ private var userToken: String? = null
56
+ private var url: String? = null
57
+
58
+ @ReactMethod
59
+ fun addComposerTag(tag: String, promise: Promise) {
60
+ try {
61
+ if (!tags.contains(tag)) {
62
+ tags.add(tag)
63
+ }
64
+ promise.resolve(null)
65
+ } catch (e: Exception) {
66
+ promise.reject("TAG_ERROR", "Errore aggiunta tag", e)
67
+ }
68
+ }
69
+
70
+ @ReactMethod
71
+ fun addComposerTags(tagsList: ReadableArray, promise: Promise) {
72
+ try {
73
+ for (i in 0 until tagsList.size()) {
74
+ val tag = tagsList.getString(i)
75
+ if (tag != null && !tags.contains(tag)) {
76
+ tags.add(tag)
77
+ }
78
+ }
79
+ promise.resolve(null)
80
+ } catch (e: Exception) {
81
+ promise.reject("TAGS_ERROR", "Errore aggiunta tags", e)
82
+ }
83
+ }
84
+
85
+ @ReactMethod
86
+ fun setComposerZoneId(zoneId: String, promise: Promise) {
87
+ try {
88
+ this.zoneId = zoneId
89
+ promise.resolve(null)
90
+ } catch (e: Exception) {
91
+ promise.reject("ZONEID_ERROR", "Errore impostazione zoneId", e)
92
+ }
93
+ }
94
+
95
+ @ReactMethod
96
+ fun setComposerReferrer(referrer: String, promise: Promise) {
97
+ try {
98
+ this.referrer = referrer
99
+ promise.resolve(null)
100
+ } catch (e: Exception) {
101
+ promise.reject("REFERRER_ERROR", "Errore impostazione referrer", e)
102
+ }
103
+ }
104
+
105
+ @ReactMethod
106
+ fun setComposerCustomVariable(name: String, value: String, promise: Promise) {
107
+ try {
108
+ customVariables[name] = value
109
+ promise.resolve(null)
110
+ } catch (e: Exception) {
111
+ promise.reject("CUSTOMVAR_ERROR", "Errore impostazione custom variable", e)
112
+ }
113
+ }
114
+
115
+ @ReactMethod
116
+ fun setComposerUserToken(token: String, promise: Promise) {
117
+ try {
118
+ userToken = token
119
+ promise.resolve(null)
120
+ } catch (e: Exception) {
121
+ promise.reject("TOKEN_ERROR", "Errore impostazione token", e)
122
+ }
123
+ }
124
+
125
+ @ReactMethod
126
+ fun setComposerUrl(url: String, promise: Promise) {
127
+ try {
128
+ this.url = url
129
+ promise.resolve(null)
130
+ } catch (e: Exception) {
131
+ promise.reject("URL_ERROR", "Errore impostazione URL", e)
132
+ }
133
+ }
134
+
135
+ @ReactMethod
136
+ fun getComposer(promise: Promise) {
137
+ try {
138
+ val context = reactContext.currentActivity ?: reactContext.applicationContext
139
+ composer = Composer.getInstance()
140
+ promise.resolve(true)
141
+ } catch (e: Exception) {
142
+ promise.reject("GET_COMPOSER_ERROR", "Errore ottenimento Composer", e)
143
+ }
144
+ }
145
+
146
+ // Replace your old executeExperience method with this one.
147
+
148
+ @ReactMethod
149
+ fun executeExperience(promise: Promise) {
150
+ // 1. Get the Composer instance, rejecting the promise if it's not initialized.
151
+ val composer = Composer.getInstance()
152
+ if (composer == null) {
153
+ promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
154
+ return
155
+ }
156
+
157
+ // 2. Build the request object from the stored properties.
158
+ // This part of your original code was correct.
159
+ val request = ExperienceRequest.Builder()
160
+ .debug(true)
161
+ .tags(tags)
162
+ .zone(zoneId)
163
+ .referer(referrer)
164
+ .customVariables(customVariables.mapValues { listOf(it.value) })
165
+ .url(url)
166
+ .userToken(userToken)
167
+ .build()
168
+
169
+ // 3. Create a listener to handle the asynchronous response from the Piano SDK.
170
+ val listener = ExecuteExperienceListener { events ->
171
+ // This code runs when the SDK gets a successful response.
172
+ try {
173
+ // We need to convert the list of Piano 'Event' objects
174
+ // into a WritableArray of WritableMaps that React Native can understand.
175
+ val eventsArray = Arguments.createArray()
176
+
177
+ for (event in events) {
178
+ val eventMap = Arguments.createMap()
179
+ eventMap.putString("eventType", event.eventType)
180
+ eventMap.putString("experienceId", event.experienceId)
181
+ // Add any other event data you need to this map.
182
+ // For example, for a 'showTemplate' event:
183
+ // if (event.eventData is ShowTemplateEventParams) {
184
+ // eventMap.putString("templateUrl", (event.eventData as ShowTemplateEventParams).templateUrl)
185
+ // }
186
+ eventsArray.pushMap(eventMap)
187
+ }
188
+
189
+ // 4. Resolve the promise with the array of events.
190
+ promise.resolve(eventsArray)
191
+
192
+ } catch (e: Exception) {
193
+ promise.reject("DATA_CONVERSION_ERROR", "Failed to convert event data.", e)
194
+ }
195
+ }
196
+
197
+ // 5. Create a listener for any errors.
198
+ val errorListener = Consumer<Exception> { e ->
199
+ promise.reject("EXECUTE_ERROR", "Piano SDK execution failed.", e)
200
+ }
201
+
202
+ // 6. Finally, execute the request with the composer, passing the request and listeners.
203
+ composer.getExperience(request, listener, errorListener)
204
+ }
205
+
206
+ @ReactMethod
207
+ fun executeComposer(promise: Promise) {
208
+ try {
209
+ val composer = Composer.getInstance()
210
+ if (composer == null) {
211
+ promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
212
+ return
213
+ }
214
+
215
+ // Execute the composer with current state
216
+ val request = ExperienceRequest.Builder()
217
+ .debug(true)
218
+ .tags(tags)
219
+ .zone(zoneId)
220
+ .referer(referrer)
221
+ .customVariables(customVariables.mapValues { listOf(it.value) })
222
+ .url(url)
223
+ .userToken(userToken)
224
+ .build()
225
+
226
+ val listener = ExecuteExperienceListener { events ->
227
+ promise.resolve(true)
228
+ }
229
+
230
+ val errorListener = Consumer<Exception> { e ->
231
+ promise.reject("EXECUTE_ERROR", "Piano SDK execution failed.", e)
232
+ }
233
+
234
+ composer.getExperience(request, listener, errorListener)
235
+ } catch (e: Exception) {
236
+ promise.reject("EXECUTE_ERROR", "Error executing composer", e)
237
+ }
238
+ }
239
+
240
+ @ReactMethod
241
+ fun showLogin(promise: Promise) {
242
+ try {
243
+ val composer = Composer.getInstance()
244
+ if (composer == null) {
245
+ promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
246
+ return
247
+ }
248
+
249
+ val listener = ShowLoginListener { loginResult ->
250
+ promise.resolve(loginResult)
251
+ }
252
+
253
+ composer.showLogin(listener)
254
+ } catch (e: Exception) {
255
+ promise.reject("LOGIN_ERROR", "Error showing login", e)
256
+ }
257
+ }
258
+
259
+ @ReactMethod
260
+ fun showTemplate(promise: Promise) {
261
+ try {
262
+ val composer = Composer.getInstance()
263
+ if (composer == null) {
264
+ promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
265
+ return
266
+ }
267
+
268
+ val request = ExperienceRequest.Builder()
269
+ .debug(true)
270
+ .tags(tags)
271
+ .zone(zoneId)
272
+ .referer(referrer)
273
+ .customVariables(customVariables.mapValues { listOf(it.value) })
274
+ .url(url)
275
+ .userToken(userToken)
276
+ .build()
277
+
278
+ val listener = ExecuteExperienceListener { events ->
279
+ promise.resolve(true)
280
+ }
281
+
282
+ val errorListener = Consumer<Exception> { e ->
283
+ promise.reject("TEMPLATE_ERROR", "Error showing template", e)
284
+ }
285
+
286
+ composer.getExperience(request, listener, errorListener)
287
+ } catch (e: Exception) {
288
+ promise.reject("TEMPLATE_ERROR", "Error showing template", e)
289
+ }
290
+ }
291
+
292
+ @ReactMethod
293
+ fun showForm(promise: Promise) {
294
+ try {
295
+ val composer = Composer.getInstance()
296
+ if (composer == null) {
297
+ promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
298
+ return
299
+ }
300
+
301
+ val request = ExperienceRequest.Builder()
302
+ .debug(true)
303
+ .tags(tags)
304
+ .zone(zoneId)
305
+ .referer(referrer)
306
+ .customVariables(customVariables.mapValues { listOf(it.value) })
307
+ .url(url)
308
+ .userToken(userToken)
309
+ .build()
310
+
311
+ val listener = ExecuteExperienceListener { events ->
312
+ promise.resolve(true)
313
+ }
314
+
315
+ val errorListener = Consumer<Exception> { e ->
316
+ promise.reject("FORM_ERROR", "Error showing form", e)
317
+ }
318
+
319
+ composer.getExperience(request, listener, errorListener)
320
+ } catch (e: Exception) {
321
+ promise.reject("FORM_ERROR", "Error showing form", e)
322
+ }
323
+ }
324
+
325
+ @ReactMethod
326
+ fun showRecommendations(promise: Promise) {
327
+ try {
328
+ val composer = Composer.getInstance()
329
+ if (composer == null) {
330
+ promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
331
+ return
332
+ }
333
+
334
+ val request = ExperienceRequest.Builder()
335
+ .debug(true)
336
+ .tags(tags)
337
+ .zone(zoneId)
338
+ .referer(referrer)
339
+ .customVariables(customVariables.mapValues { listOf(it.value) })
340
+ .url(url)
341
+ .userToken(userToken)
342
+ .build()
343
+
344
+ val listener = ExecuteExperienceListener { events ->
345
+ promise.resolve(true)
346
+ }
347
+
348
+ val errorListener = Consumer<Exception> { e ->
349
+ promise.reject("RECOMMENDATIONS_ERROR", "Error showing recommendations", e)
350
+ }
351
+
352
+ composer.getExperience(request, listener, errorListener)
353
+ } catch (e: Exception) {
354
+ promise.reject("RECOMMENDATIONS_ERROR", "Error showing recommendations", e)
355
+ }
356
+ }
357
+
358
+ @ReactMethod
359
+ fun nonSite(promise: Promise) {
360
+ try {
361
+ val composer = Composer.getInstance()
362
+ if (composer == null) {
363
+ promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
364
+ return
365
+ }
366
+
367
+ val request = ExperienceRequest.Builder()
368
+ .debug(true)
369
+ .tags(tags)
370
+ .zone(zoneId)
371
+ .referer(referrer)
372
+ .customVariables(customVariables.mapValues { listOf(it.value) })
373
+ .url(url)
374
+ .userToken(userToken)
375
+ .build()
376
+
377
+ val listener = ExecuteExperienceListener { events ->
378
+ promise.resolve(true)
379
+ }
380
+
381
+ val errorListener = Consumer<Exception> { e ->
382
+ promise.reject("NONSITE_ERROR", "Error executing nonSite", e)
383
+ }
384
+
385
+ composer.getExperience(request, listener, errorListener)
386
+ } catch (e: Exception) {
387
+ promise.reject("NONSITE_ERROR", "Error executing nonSite", e)
388
+ }
389
+ }
390
+
391
+ @ReactMethod
392
+ fun userSegmentTrue(promise: Promise) {
393
+ try {
394
+ val composer = Composer.getInstance()
395
+ if (composer == null) {
396
+ promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
397
+ return
398
+ }
399
+
400
+ val request = ExperienceRequest.Builder()
401
+ .debug(true)
402
+ .tags(tags)
403
+ .zone(zoneId)
404
+ .referer(referrer)
405
+ .customVariables(customVariables.mapValues { listOf(it.value) })
406
+ .url(url)
407
+ .userToken(userToken)
408
+ .build()
409
+
410
+ val listener = ExecuteExperienceListener { events ->
411
+ promise.resolve(true)
412
+ }
413
+
414
+ val errorListener = Consumer<Exception> { e ->
415
+ promise.reject("USERSEGMENT_ERROR", "Error executing userSegmentTrue", e)
416
+ }
417
+
418
+ composer.getExperience(request, listener, errorListener)
419
+ } catch (e: Exception) {
420
+ promise.reject("USERSEGMENT_ERROR", "Error executing userSegmentTrue", e)
421
+ }
422
+ }
423
+
424
+ @ReactMethod
425
+ fun userSegmentFalse(promise: Promise) {
426
+ try {
427
+ val composer = Composer.getInstance()
428
+ if (composer == null) {
429
+ promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
430
+ return
431
+ }
432
+
433
+ val request = ExperienceRequest.Builder()
434
+ .debug(true)
435
+ .tags(tags)
436
+ .zone(zoneId)
437
+ .referer(referrer)
438
+ .customVariables(customVariables.mapValues { listOf(it.value) })
439
+ .url(url)
440
+ .userToken(userToken)
441
+ .build()
442
+
443
+ val listener = ExecuteExperienceListener { events ->
444
+ promise.resolve(true)
445
+ }
446
+
447
+ val errorListener = Consumer<Exception> { e ->
448
+ promise.reject("USERSEGMENT_ERROR", "Error executing userSegmentFalse", e)
449
+ }
450
+
451
+ composer.getExperience(request, listener, errorListener)
452
+ } catch (e: Exception) {
453
+ promise.reject("USERSEGMENT_ERROR", "Error executing userSegmentFalse", e)
454
+ }
455
+ }
456
+
457
+ @ReactMethod
458
+ fun meterActive(promise: Promise) {
459
+ try {
460
+ val composer = Composer.getInstance()
461
+ if (composer == null) {
462
+ promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
463
+ return
464
+ }
465
+
466
+ val request = ExperienceRequest.Builder()
467
+ .debug(true)
468
+ .tags(tags)
469
+ .zone(zoneId)
470
+ .referer(referrer)
471
+ .customVariables(customVariables.mapValues { listOf(it.value) })
472
+ .url(url)
473
+ .userToken(userToken)
474
+ .build()
475
+
476
+ val listener = ExecuteExperienceListener { events ->
477
+ promise.resolve(true)
478
+ }
479
+
480
+ val errorListener = Consumer<Exception> { e ->
481
+ promise.reject("METER_ERROR", "Error executing meterActive", e)
482
+ }
483
+
484
+ composer.getExperience(request, listener, errorListener)
485
+ } catch (e: Exception) {
486
+ promise.reject("METER_ERROR", "Error executing meterActive", e)
487
+ }
488
+ }
489
+
490
+ @ReactMethod
491
+ fun meterExpired(promise: Promise) {
492
+ try {
493
+ val composer = Composer.getInstance()
494
+ if (composer == null) {
495
+ promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
496
+ return
497
+ }
498
+
499
+ val request = ExperienceRequest.Builder()
500
+ .debug(true)
501
+ .tags(tags)
502
+ .zone(zoneId)
503
+ .referer(referrer)
504
+ .customVariables(customVariables.mapValues { listOf(it.value) })
505
+ .url(url)
506
+ .userToken(userToken)
507
+ .build()
508
+
509
+ val listener = ExecuteExperienceListener { events ->
510
+ promise.resolve(true)
511
+ }
512
+
513
+ val errorListener = Consumer<Exception> { e ->
514
+ promise.reject("METER_ERROR", "Error executing meterExpired", e)
515
+ }
516
+
517
+ composer.getExperience(request, listener, errorListener)
518
+ } catch (e: Exception) {
519
+ promise.reject("METER_ERROR", "Error executing meterExpired", e)
520
+ }
521
+ }
522
+
523
+ @ReactMethod
524
+ fun composerExecutionCompleted(promise: Promise) {
525
+ try {
526
+ val composer = Composer.getInstance()
527
+ if (composer == null) {
528
+ promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
529
+ return
530
+ }
531
+
532
+ val request = ExperienceRequest.Builder()
533
+ .debug(true)
534
+ .tags(tags)
535
+ .zone(zoneId)
536
+ .referer(referrer)
537
+ .customVariables(customVariables.mapValues { listOf(it.value) })
538
+ .url(url)
539
+ .userToken(userToken)
540
+ .build()
541
+
542
+ val listener = ExecuteExperienceListener { events ->
543
+ promise.resolve(true)
544
+ }
545
+
546
+ val errorListener = Consumer<Exception> { e ->
547
+ promise.reject("COMPLETION_ERROR", "Error executing composerExecutionCompleted", e)
548
+ }
549
+
550
+ composer.getExperience(request, listener, errorListener)
551
+ } catch (e: Exception) {
552
+ promise.reject("COMPLETION_ERROR", "Error executing composerExecutionCompleted", e)
553
+ }
18
554
  }
19
555
 
20
556
  companion object {
@@ -18,15 +18,15 @@ class SdkPianoioPackage : BaseReactPackage() {
18
18
 
19
19
  override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
20
20
  return ReactModuleInfoProvider {
21
- val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
22
- moduleInfos[SdkPianoioModule.NAME] = ReactModuleInfo(
21
+ val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap<String, ReactModuleInfo>()
22
+ moduleInfos.put(SdkPianoioModule.NAME, ReactModuleInfo(
23
23
  SdkPianoioModule.NAME,
24
24
  SdkPianoioModule.NAME,
25
25
  false, // canOverrideExistingModule
26
26
  false, // needsEagerInit
27
27
  false, // isCxxModule
28
28
  true // isTurboModule
29
- )
29
+ ))
30
30
  moduleInfos
31
31
  }
32
32
  }