react-native 0.84.0-nightly-20251210-3e9083b42 → 0.84.0-nightly-20251212-dd390dbbe
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/Libraries/AppDelegate/RCTReactNativeFactory.mm +21 -31
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +97 -2
- package/React/Base/RCTBridge.mm +1 -1
- package/React/Base/RCTUtils.mm +1 -1
- package/React/Base/RCTVersion.m +1 -1
- package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropComponentView.mm +11 -0
- package/React/Modules/RCTEventEmitter.m +1 -0
- package/ReactAndroid/api/ReactAndroid.api +8 -0
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.kt +3 -6
- package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.kt +36 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/PackagerConnectionSettings.kt +15 -8
- package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp +34 -8
- package/ReactAndroid/src/main/res/views/uimanager/values-ne/strings.xml +1 -0
- package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
- package/ReactCommon/react/renderer/animationbackend/AnimatedPropSerializer.cpp +46 -3
- package/ReactCommon/react/renderer/animationbackend/AnimatedProps.h +32 -1
- package/ReactCommon/react/renderer/animationbackend/AnimatedPropsBuilder.h +16 -0
- package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h +16 -0
- package/package.json +9 -9
- package/scripts/cocoapods/new_architecture.rb +2 -0
- package/scripts/cocoapods/utils.rb +4 -4
- package/sdks/hermes-engine/version.properties +1 -1
- package/third-party-podspecs/RCT-Folly.podspec +1 -0
|
@@ -288,62 +288,51 @@ using namespace facebook::react;
|
|
|
288
288
|
};
|
|
289
289
|
}
|
|
290
290
|
|
|
291
|
+
#ifndef RCT_REMOVE_LEGACY_ARCH
|
|
292
|
+
// When the Legacy Arch is removed, the Delegate does not have a extraLazyModuleClassesForBridge method
|
|
291
293
|
if ([self.delegate respondsToSelector:@selector(extraLazyModuleClassesForBridge:)]) {
|
|
292
294
|
configuration.extraLazyModuleClassesForBridge =
|
|
293
295
|
^NSDictionary<NSString *, Class> *_Nonnull(RCTBridge *_Nonnull bridge)
|
|
294
296
|
{
|
|
295
|
-
#ifndef RCT_REMOVE_LEGACY_ARCH
|
|
296
297
|
return [weakSelf.delegate extraLazyModuleClassesForBridge:bridge];
|
|
297
|
-
#else
|
|
298
|
-
// When the Legacy Arch is removed, the Delegate does not have a extraLazyModuleClassesForBridge method
|
|
299
|
-
return @{};
|
|
300
|
-
#endif
|
|
301
298
|
};
|
|
302
299
|
}
|
|
300
|
+
#endif
|
|
303
301
|
|
|
302
|
+
#ifndef RCT_REMOVE_LEGACY_ARCH
|
|
303
|
+
// When the Legacy Arch is removed, the Delegate does not have a bridge:didNotFindModule method
|
|
304
|
+
// We return NO, because if we have invoked this method is unlikely that the module will be actually registered
|
|
304
305
|
if ([self.delegate respondsToSelector:@selector(bridge:didNotFindModule:)]) {
|
|
305
306
|
configuration.bridgeDidNotFindModule = ^BOOL(RCTBridge *_Nonnull bridge, NSString *_Nonnull moduleName) {
|
|
306
|
-
#ifndef RCT_REMOVE_LEGACY_ARCH
|
|
307
307
|
return [weakSelf.delegate bridge:bridge didNotFindModule:moduleName];
|
|
308
|
-
#else
|
|
309
|
-
// When the Legacy Arch is removed, the Delegate does not have a bridge:didNotFindModule method
|
|
310
|
-
// We return NO, because if we have invoked this method is unlikely that the module will be actually registered
|
|
311
|
-
return NO;
|
|
312
|
-
#endif
|
|
313
308
|
};
|
|
314
309
|
}
|
|
310
|
+
#endif
|
|
315
311
|
|
|
312
|
+
#ifndef RCT_REMOVE_LEGACY_ARCH
|
|
313
|
+
// When the Legacy Arch is removed, the Delegate does not have a
|
|
314
|
+
// loadSourceForBridge:onProgress:onComplete: method
|
|
315
|
+
// We then call the loadBundleAtURL:onProgress:onComplete: instead
|
|
316
316
|
if ([self.delegate respondsToSelector:@selector(loadSourceForBridge:onProgress:onComplete:)]) {
|
|
317
317
|
configuration.loadSourceForBridgeWithProgress =
|
|
318
318
|
^(RCTBridge *_Nonnull bridge,
|
|
319
319
|
RCTSourceLoadProgressBlock _Nonnull onProgress,
|
|
320
320
|
RCTSourceLoadBlock _Nonnull loadCallback) {
|
|
321
|
-
#ifndef RCT_REMOVE_LEGACY_ARCH
|
|
322
321
|
[weakSelf.delegate loadSourceForBridge:bridge onProgress:onProgress onComplete:loadCallback];
|
|
323
|
-
#else
|
|
324
|
-
// When the Legacy Arch is removed, the Delegate does not have a
|
|
325
|
-
// loadSourceForBridge:onProgress:onComplete: method
|
|
326
|
-
// We then call the loadBundleAtURL:onProgress:onComplete: instead
|
|
327
|
-
[weakSelf.delegate loadBundleAtURL:self.bundleURL onProgress:onProgress onComplete:loadCallback];
|
|
328
|
-
#endif
|
|
329
322
|
};
|
|
330
323
|
}
|
|
324
|
+
#endif
|
|
331
325
|
|
|
326
|
+
#ifndef RCT_REMOVE_LEGACY_ARCH
|
|
327
|
+
// When the Legacy Arch is removed, the Delegate does not have a
|
|
328
|
+
// loadSourceForBridge:withBlock: method
|
|
329
|
+
// We then call the loadBundleAtURL:onProgress:onComplete: instead
|
|
332
330
|
if ([self.delegate respondsToSelector:@selector(loadSourceForBridge:withBlock:)]) {
|
|
333
331
|
configuration.loadSourceForBridge = ^(RCTBridge *_Nonnull bridge, RCTSourceLoadBlock _Nonnull loadCallback) {
|
|
334
|
-
#ifndef RCT_REMOVE_LEGACY_ARCH
|
|
335
332
|
[weakSelf.delegate loadSourceForBridge:bridge withBlock:loadCallback];
|
|
336
|
-
#else
|
|
337
|
-
// When the Legacy Arch is removed, the Delegate does not have a
|
|
338
|
-
// loadSourceForBridge:withBlock: method
|
|
339
|
-
// We then call the loadBundleAtURL:onProgress:onComplete: instead
|
|
340
|
-
[weakSelf.delegate loadBundleAtURL:self.bundleURL
|
|
341
|
-
onProgress:^(RCTLoadingProgress *progressData) {
|
|
342
|
-
}
|
|
343
|
-
onComplete:loadCallback];
|
|
344
|
-
#endif
|
|
345
333
|
};
|
|
346
334
|
}
|
|
335
|
+
#endif
|
|
347
336
|
|
|
348
337
|
configuration.jsRuntimeConfiguratorDelegate = self;
|
|
349
338
|
|
|
@@ -371,15 +360,16 @@ using namespace facebook::react;
|
|
|
371
360
|
static dispatch_once_t setupFeatureFlagsToken;
|
|
372
361
|
dispatch_once(&setupFeatureFlagsToken, ^{
|
|
373
362
|
switch (releaseLevel) {
|
|
374
|
-
case Stable:
|
|
375
|
-
ReactNativeFeatureFlags::override(std::make_unique<ReactNativeFeatureFlagsOverridesOSSStable>());
|
|
376
|
-
break;
|
|
377
363
|
case Canary:
|
|
378
364
|
ReactNativeFeatureFlags::override(std::make_unique<ReactNativeFeatureFlagsOverridesOSSCanary>());
|
|
379
365
|
break;
|
|
380
366
|
case Experimental:
|
|
381
367
|
ReactNativeFeatureFlags::override(std::make_unique<ReactNativeFeatureFlagsOverridesOSSExperimental>());
|
|
382
368
|
break;
|
|
369
|
+
case Stable:
|
|
370
|
+
default:
|
|
371
|
+
ReactNativeFeatureFlags::override(std::make_unique<ReactNativeFeatureFlagsOverridesOSSStable>());
|
|
372
|
+
break;
|
|
383
373
|
}
|
|
384
374
|
});
|
|
385
375
|
}
|
|
@@ -29,7 +29,7 @@ export default class ReactNativeVersion {
|
|
|
29
29
|
static major: number = 0;
|
|
30
30
|
static minor: number = 84;
|
|
31
31
|
static patch: number = 0;
|
|
32
|
-
static prerelease: string | null = 'nightly-
|
|
32
|
+
static prerelease: string | null = 'nightly-20251212-dd390dbbe';
|
|
33
33
|
|
|
34
34
|
static getVersionString(): string {
|
|
35
35
|
return `${this.major}.${this.minor}.${this.patch}${this.prerelease != null ? `-${this.prerelease}` : ''}`;
|
|
@@ -367,7 +367,7 @@ export type BlendMode =
|
|
|
367
367
|
| 'color'
|
|
368
368
|
| 'luminosity';
|
|
369
369
|
|
|
370
|
-
export type
|
|
370
|
+
export type LinearGradientValue = {
|
|
371
371
|
type: 'linear-gradient';
|
|
372
372
|
// Angle or direction enums
|
|
373
373
|
direction?: string | undefined;
|
|
@@ -377,6 +377,89 @@ export type GradientValue = {
|
|
|
377
377
|
}>;
|
|
378
378
|
};
|
|
379
379
|
|
|
380
|
+
export type GradientValue = LinearGradientValue;
|
|
381
|
+
|
|
382
|
+
type RadialExtent =
|
|
383
|
+
| 'closest-corner'
|
|
384
|
+
| 'closest-side'
|
|
385
|
+
| 'farthest-corner'
|
|
386
|
+
| 'farthest-side';
|
|
387
|
+
export type RadialGradientPosition =
|
|
388
|
+
| {
|
|
389
|
+
top: number | string;
|
|
390
|
+
left: number | string;
|
|
391
|
+
}
|
|
392
|
+
| {
|
|
393
|
+
top: number | string;
|
|
394
|
+
right: number | string;
|
|
395
|
+
}
|
|
396
|
+
| {
|
|
397
|
+
bottom: number | string;
|
|
398
|
+
left: number | string;
|
|
399
|
+
}
|
|
400
|
+
| {
|
|
401
|
+
bottom: number | string;
|
|
402
|
+
right: number | string;
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
export type RadialGradientShape = 'circle' | 'ellipse';
|
|
406
|
+
export type RadialGradientSize =
|
|
407
|
+
| RadialExtent
|
|
408
|
+
| {
|
|
409
|
+
x: string | number;
|
|
410
|
+
y: string | number;
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
type RadialGradientValue = {
|
|
414
|
+
type: 'radial-gradient';
|
|
415
|
+
shape: RadialGradientShape;
|
|
416
|
+
size: RadialGradientSize;
|
|
417
|
+
position: RadialGradientPosition;
|
|
418
|
+
colorStops: ReadonlyArray<{
|
|
419
|
+
color: ColorValue | null;
|
|
420
|
+
positions?: ReadonlyArray<string> | undefined;
|
|
421
|
+
}>;
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
export type BackgroundImageValue = LinearGradientValue | RadialGradientValue;
|
|
425
|
+
|
|
426
|
+
export type BackgroundSizeValue =
|
|
427
|
+
| {
|
|
428
|
+
x: string | number;
|
|
429
|
+
y: string | number;
|
|
430
|
+
}
|
|
431
|
+
| 'cover'
|
|
432
|
+
| 'contain';
|
|
433
|
+
|
|
434
|
+
export type BackgroundRepeatKeyword =
|
|
435
|
+
| 'repeat'
|
|
436
|
+
| 'space'
|
|
437
|
+
| 'round'
|
|
438
|
+
| 'no-repeat';
|
|
439
|
+
|
|
440
|
+
export type BackgroundPositionValue =
|
|
441
|
+
| {
|
|
442
|
+
top: number | string;
|
|
443
|
+
left: number | string;
|
|
444
|
+
}
|
|
445
|
+
| {
|
|
446
|
+
top: number | string;
|
|
447
|
+
right: number | string;
|
|
448
|
+
}
|
|
449
|
+
| {
|
|
450
|
+
bottom: number | string;
|
|
451
|
+
left: number | string;
|
|
452
|
+
}
|
|
453
|
+
| {
|
|
454
|
+
bottom: number | string;
|
|
455
|
+
right: number | string;
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
export type BackgroundRepeatValue = {
|
|
459
|
+
x: BackgroundRepeatKeyword;
|
|
460
|
+
y: BackgroundRepeatKeyword;
|
|
461
|
+
};
|
|
462
|
+
|
|
380
463
|
/**
|
|
381
464
|
* @see https://reactnative.dev/docs/view#style
|
|
382
465
|
*/
|
|
@@ -437,7 +520,19 @@ export interface ViewStyle extends FlexStyle, ShadowStyleIOS, TransformsStyle {
|
|
|
437
520
|
|
|
438
521
|
mixBlendMode?: BlendMode | undefined;
|
|
439
522
|
experimental_backgroundImage?:
|
|
440
|
-
| ReadonlyArray<
|
|
523
|
+
| ReadonlyArray<BackgroundImageValue>
|
|
524
|
+
| string
|
|
525
|
+
| undefined;
|
|
526
|
+
experimental_backgroundSize?:
|
|
527
|
+
| ReadonlyArray<BackgroundSizeValue>
|
|
528
|
+
| string
|
|
529
|
+
| undefined;
|
|
530
|
+
experimental_backgroundPosition?:
|
|
531
|
+
| ReadonlyArray<BackgroundPositionValue>
|
|
532
|
+
| string
|
|
533
|
+
| undefined;
|
|
534
|
+
experimental_backgroundRepeat?:
|
|
535
|
+
| ReadonlyArray<BackgroundRepeatValue>
|
|
441
536
|
| string
|
|
442
537
|
| undefined;
|
|
443
538
|
}
|
package/React/Base/RCTBridge.mm
CHANGED
|
@@ -369,7 +369,7 @@ static RCTBridge *RCTCurrentBridgeInstance = nil;
|
|
|
369
369
|
moduleProvider:(RCTBridgeModuleListProvider)block
|
|
370
370
|
launchOptions:(NSDictionary *)launchOptions
|
|
371
371
|
{
|
|
372
|
-
// Only
|
|
372
|
+
// Only enable this assertion in OSS
|
|
373
373
|
#if COCOAPODS
|
|
374
374
|
[RCTBridge throwIfOnLegacyArch];
|
|
375
375
|
#endif
|
package/React/Base/RCTUtils.mm
CHANGED
|
@@ -706,7 +706,7 @@ NSURL *RCTDataURL(NSString *mimeType, NSData *data)
|
|
|
706
706
|
[data base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)0]]];
|
|
707
707
|
}
|
|
708
708
|
|
|
709
|
-
BOOL RCTIsGzippedData(NSData *__nullable /*data*/); // exposed for unit testing purposes
|
|
709
|
+
extern "C" BOOL RCTIsGzippedData(NSData *__nullable /*data*/); // exposed for unit testing purposes
|
|
710
710
|
BOOL RCTIsGzippedData(NSData *__nullable data)
|
|
711
711
|
{
|
|
712
712
|
UInt8 *bytes = (UInt8 *)data.bytes;
|
package/React/Base/RCTVersion.m
CHANGED
|
@@ -24,7 +24,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
|
|
|
24
24
|
RCTVersionMajor: @(0),
|
|
25
25
|
RCTVersionMinor: @(84),
|
|
26
26
|
RCTVersionPatch: @(0),
|
|
27
|
-
RCTVersionPrerelease: @"nightly-
|
|
27
|
+
RCTVersionPrerelease: @"nightly-20251212-dd390dbbe",
|
|
28
28
|
};
|
|
29
29
|
});
|
|
30
30
|
return __rnVersion;
|
|
@@ -287,4 +287,15 @@ static NSString *const kRCTLegacyInteropChildIndexKey = @"index";
|
|
|
287
287
|
[_adapter handleCommand:(NSString *)commandName args:(NSArray *)args];
|
|
288
288
|
}
|
|
289
289
|
|
|
290
|
+
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
|
|
291
|
+
{
|
|
292
|
+
UIView *result = [super hitTest:point withEvent:event];
|
|
293
|
+
|
|
294
|
+
if (result == self) {
|
|
295
|
+
return nil;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return result;
|
|
299
|
+
}
|
|
300
|
+
|
|
290
301
|
@end
|
|
@@ -2465,6 +2465,7 @@ public final class com/facebook/react/modules/appearance/AppearanceModule : com/
|
|
|
2465
2465
|
public fun addListener (Ljava/lang/String;)V
|
|
2466
2466
|
public final fun emitAppearanceChanged (Ljava/lang/String;)V
|
|
2467
2467
|
public fun getColorScheme ()Ljava/lang/String;
|
|
2468
|
+
public fun invalidate ()V
|
|
2468
2469
|
public final fun invalidatePlatformColorCache ()V
|
|
2469
2470
|
public final fun onConfigurationChanged (Landroid/content/Context;)V
|
|
2470
2471
|
public fun removeListeners (D)V
|
|
@@ -2475,7 +2476,14 @@ public final class com/facebook/react/modules/appearance/AppearanceModule$Compan
|
|
|
2475
2476
|
}
|
|
2476
2477
|
|
|
2477
2478
|
public abstract interface class com/facebook/react/modules/appearance/AppearanceModule$OverrideColorScheme {
|
|
2479
|
+
public abstract fun addSchemeChangeListener (Lkotlin/jvm/functions/Function0;)V
|
|
2478
2480
|
public abstract fun getScheme ()Ljava/lang/String;
|
|
2481
|
+
public abstract fun removeSchemeChangeListener (Lkotlin/jvm/functions/Function0;)V
|
|
2482
|
+
}
|
|
2483
|
+
|
|
2484
|
+
public final class com/facebook/react/modules/appearance/AppearanceModule$OverrideColorScheme$DefaultImpls {
|
|
2485
|
+
public static fun addSchemeChangeListener (Lcom/facebook/react/modules/appearance/AppearanceModule$OverrideColorScheme;Lkotlin/jvm/functions/Function0;)V
|
|
2486
|
+
public static fun removeSchemeChangeListener (Lcom/facebook/react/modules/appearance/AppearanceModule$OverrideColorScheme;Lkotlin/jvm/functions/Function0;)V
|
|
2479
2487
|
}
|
|
2480
2488
|
|
|
2481
2489
|
public abstract interface class com/facebook/react/modules/appregistry/AppRegistry : com/facebook/react/bridge/JavaScriptModule {
|
|
@@ -178,13 +178,10 @@ public open class ReactDelegate {
|
|
|
178
178
|
if (
|
|
179
179
|
ReactNativeNewArchitectureFeatureFlags.enableBridgelessArchitecture() && reactHost != null
|
|
180
180
|
) {
|
|
181
|
-
reactHost?.onBackPressed()
|
|
181
|
+
return reactHost?.onBackPressed() == true
|
|
182
|
+
} else if (reactNativeHost?.hasInstance() == true) {
|
|
183
|
+
reactNativeHost?.reactInstanceManager?.onBackPressed()
|
|
182
184
|
return true
|
|
183
|
-
} else {
|
|
184
|
-
if (reactNativeHost?.hasInstance() == true) {
|
|
185
|
-
reactNativeHost?.reactInstanceManager?.onBackPressed()
|
|
186
|
-
return true
|
|
187
|
-
}
|
|
188
185
|
}
|
|
189
186
|
return false
|
|
190
187
|
}
|
package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.kt
CHANGED
|
@@ -28,13 +28,42 @@ constructor(
|
|
|
28
28
|
|
|
29
29
|
private var lastEmittedColorScheme: String? = null
|
|
30
30
|
|
|
31
|
+
private val schemeChangeListener: () -> Unit = {
|
|
32
|
+
val activity = reactApplicationContext.getCurrentActivity()
|
|
33
|
+
onConfigurationChanged(activity ?: reactApplicationContext)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
init {
|
|
37
|
+
// Register as a listener for color scheme changes if override is provided
|
|
38
|
+
overrideColorScheme?.addSchemeChangeListener(schemeChangeListener)
|
|
39
|
+
}
|
|
40
|
+
|
|
31
41
|
/** Optional override to the current color scheme */
|
|
32
|
-
public
|
|
42
|
+
public interface OverrideColorScheme {
|
|
33
43
|
/**
|
|
34
44
|
* Color scheme will use the return value instead of the current system configuration. Available
|
|
35
45
|
* scheme: {light, dark}
|
|
36
46
|
*/
|
|
37
47
|
public fun getScheme(): String
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Register a listener to be notified when the color scheme changes. The listener will be
|
|
51
|
+
* invoked whenever the underlying theme preference changes.
|
|
52
|
+
*
|
|
53
|
+
* Default implementation does nothing. Override this method if you want to support dynamic
|
|
54
|
+
* color scheme updates.
|
|
55
|
+
*/
|
|
56
|
+
public fun addSchemeChangeListener(listener: () -> Unit) {
|
|
57
|
+
// no-op
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Unregisters a previously added color scheme change listener. Default implementation is a
|
|
62
|
+
* no-op; override to remove the listener from your source.
|
|
63
|
+
*/
|
|
64
|
+
public fun removeSchemeChangeListener(listener: () -> Unit) {
|
|
65
|
+
// no-op
|
|
66
|
+
}
|
|
38
67
|
}
|
|
39
68
|
|
|
40
69
|
private fun colorSchemeForCurrentConfiguration(context: Context): String {
|
|
@@ -98,6 +127,12 @@ constructor(
|
|
|
98
127
|
Companion.invalidatePlatformColorCache?.run()
|
|
99
128
|
}
|
|
100
129
|
|
|
130
|
+
public override fun invalidate() {
|
|
131
|
+
overrideColorScheme?.removeSchemeChangeListener(schemeChangeListener)
|
|
132
|
+
invalidatePlatformColorCache()
|
|
133
|
+
super.invalidate()
|
|
134
|
+
}
|
|
135
|
+
|
|
101
136
|
public companion object {
|
|
102
137
|
public const val NAME: String = NativeAppearanceSpec.NAME
|
|
103
138
|
private const val APPEARANCE_CHANGED_EVENT_NAME = "appearanceChanged"
|
|
@@ -19,15 +19,16 @@ public open class PackagerConnectionSettings(private val appContext: Context) {
|
|
|
19
19
|
private val preferences: SharedPreferences =
|
|
20
20
|
PreferenceManager.getDefaultSharedPreferences(appContext)
|
|
21
21
|
public val packageName: String = appContext.packageName
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
|
|
23
|
+
init {
|
|
24
|
+
resetDebugServerHost()
|
|
25
|
+
}
|
|
25
26
|
|
|
26
27
|
public open var debugServerHost: String
|
|
27
28
|
get() {
|
|
28
29
|
// Check cached host first. If empty try to detect emulator type and use default
|
|
29
30
|
// hostname for those
|
|
30
|
-
|
|
31
|
+
_cachedOrOverrideHost?.let {
|
|
31
32
|
return it
|
|
32
33
|
}
|
|
33
34
|
|
|
@@ -44,19 +45,19 @@ public open class PackagerConnectionSettings(private val appContext: Context) {
|
|
|
44
45
|
)
|
|
45
46
|
}
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
_cachedOrOverrideHost = host
|
|
48
49
|
return host
|
|
49
50
|
}
|
|
50
51
|
set(host) {
|
|
51
52
|
if (host.isEmpty()) {
|
|
52
|
-
|
|
53
|
+
_cachedOrOverrideHost = null
|
|
53
54
|
} else {
|
|
54
|
-
|
|
55
|
+
_cachedOrOverrideHost = host
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
public open fun resetDebugServerHost() {
|
|
59
|
-
|
|
60
|
+
_cachedOrOverrideHost = null
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
public fun setPackagerOptionsUpdater(queryMapper: (Map<String, String>) -> Map<String, String>) {
|
|
@@ -76,5 +77,11 @@ public open class PackagerConnectionSettings(private val appContext: Context) {
|
|
|
76
77
|
private companion object {
|
|
77
78
|
private val TAG = PackagerConnectionSettings::class.java.simpleName
|
|
78
79
|
private const val PREFS_DEBUG_SERVER_HOST_KEY = "debug_http_host"
|
|
80
|
+
|
|
81
|
+
// The state for this class needs to be retained in the companion object.
|
|
82
|
+
// That's necessary in the case when there are multiple instances of PackagerConnectionSettings
|
|
83
|
+
private var _cachedOrOverrideHost: String? = null
|
|
84
|
+
private val _additionalOptionsForPackager: MutableMap<String, String> = mutableMapOf()
|
|
85
|
+
private var _packagerOptionsUpdater: (Map<String, String>) -> Map<String, String> = { it }
|
|
79
86
|
}
|
|
80
87
|
}
|
|
@@ -176,11 +176,24 @@ std::shared_ptr<TurboModule> TurboModuleManager::getTurboModule(
|
|
|
176
176
|
return turboModule;
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
+
// TODO(T248203434): Remove this workaround once fixed in fbjni
|
|
180
|
+
// NOTE: We use jstring instead of std::string for the method signature to
|
|
181
|
+
// work around a bug in fbjni's exception handling. When a Java method throws
|
|
182
|
+
// an exception, fbjni's JMethod::operator() needs to check for pending
|
|
183
|
+
// exceptions via FACEBOOK_JNI_THROW_PENDING_EXCEPTION(). However, if we pass
|
|
184
|
+
// std::string, fbjni creates a temporary local_ref<JString> for the argument.
|
|
185
|
+
// C++ destroys temporaries at the end of the full-expression, which happens
|
|
186
|
+
// AFTER the JNI call returns but BEFORE the exception check. The destructor
|
|
187
|
+
// calls JNI functions (GetObjectRefType) while there's a pending exception,
|
|
188
|
+
// which violates JNI rules and causes ART's CheckJNI to abort the process.
|
|
189
|
+
//
|
|
190
|
+
// By pre-converting to jstring here, we control the lifetime of the
|
|
191
|
+
// local_ref<JString> so it extends past the exception check.
|
|
179
192
|
static auto getTurboJavaModule =
|
|
180
|
-
javaPart->getClass()
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
auto moduleInstance = getTurboJavaModule(javaPart.get(),
|
|
193
|
+
javaPart->getClass()->getMethod<jni::alias_ref<JTurboModule>(jstring)>(
|
|
194
|
+
"getTurboJavaModule");
|
|
195
|
+
auto jname = jni::make_jstring(name);
|
|
196
|
+
auto moduleInstance = getTurboJavaModule(javaPart.get(), jname.get());
|
|
184
197
|
if (moduleInstance) {
|
|
185
198
|
TurboModulePerfLogger::moduleJSRequireEndingStart(moduleName);
|
|
186
199
|
JavaTurboModule::InitParams params = {
|
|
@@ -243,11 +256,24 @@ std::shared_ptr<TurboModule> TurboModuleManager::getLegacyModule(
|
|
|
243
256
|
|
|
244
257
|
TurboModulePerfLogger::moduleJSRequireBeginningEnd(moduleName);
|
|
245
258
|
|
|
259
|
+
// TODO(T248203434): Remove this workaround once fixed in fbjni
|
|
260
|
+
// NOTE: We use jstring instead of std::string for the method signature to
|
|
261
|
+
// work around a bug in fbjni's exception handling. When a Java method throws
|
|
262
|
+
// an exception, fbjni's JMethod::operator() needs to check for pending
|
|
263
|
+
// exceptions via FACEBOOK_JNI_THROW_PENDING_EXCEPTION(). However, if we pass
|
|
264
|
+
// std::string, fbjni creates a temporary local_ref<JString> for the argument.
|
|
265
|
+
// C++ destroys temporaries at the end of the full-expression, which happens
|
|
266
|
+
// AFTER the JNI call returns but BEFORE the exception check. The destructor
|
|
267
|
+
// calls JNI functions (GetObjectRefType) while there's a pending exception,
|
|
268
|
+
// which violates JNI rules and causes ART's CheckJNI to abort the process.
|
|
269
|
+
//
|
|
270
|
+
// By pre-converting to jstring here, we control the lifetime of the
|
|
271
|
+
// local_ref<JString> so it extends past the exception check.
|
|
246
272
|
static auto getLegacyJavaModule =
|
|
247
|
-
javaPart->getClass()
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
auto moduleInstance = getLegacyJavaModule(javaPart.get(),
|
|
273
|
+
javaPart->getClass()->getMethod<jni::alias_ref<JNativeModule>(jstring)>(
|
|
274
|
+
"getLegacyJavaModule");
|
|
275
|
+
auto jname = jni::make_jstring(name);
|
|
276
|
+
auto moduleInstance = getLegacyJavaModule(javaPart.get(), jname.get());
|
|
251
277
|
|
|
252
278
|
if (moduleInstance) {
|
|
253
279
|
TurboModulePerfLogger::moduleJSRequireEndingStart(moduleName);
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
<string name="menubar_description" gender="unknown">मेनु बार</string>
|
|
13
13
|
<string name="menuitem_description" gender="unknown">मेनु वस्तु</string>
|
|
14
14
|
<string name="scrollbar_description" gender="unknown">स्क्रोल बार</string>
|
|
15
|
+
<string name="spinbutton_description" gender="unknown">स्पिन बटन</string>
|
|
15
16
|
<string name="rn_tab_description" gender="unknown">टयाब</string>
|
|
16
17
|
<string name="timer_description" gender="unknown">टाइमर</string>
|
|
17
18
|
<string name="state_busy_description" gender="unknown">व्यस्त</string>
|
|
@@ -22,7 +22,7 @@ constexpr struct {
|
|
|
22
22
|
int32_t Major = 0;
|
|
23
23
|
int32_t Minor = 84;
|
|
24
24
|
int32_t Patch = 0;
|
|
25
|
-
std::string_view Prerelease = "nightly-
|
|
25
|
+
std::string_view Prerelease = "nightly-20251212-dd390dbbe";
|
|
26
26
|
} ReactNativeVersion;
|
|
27
27
|
|
|
28
28
|
} // namespace facebook::react
|
|
@@ -78,9 +78,36 @@ void packBackgroundColor(
|
|
|
78
78
|
folly::dynamic& dyn,
|
|
79
79
|
const AnimatedPropBase& animatedProp) {
|
|
80
80
|
const auto& backgroundColor = get<SharedColor>(animatedProp);
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
dyn.insert("backgroundColor", static_cast<int32_t>(*backgroundColor));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
void packShadowColor(
|
|
85
|
+
folly::dynamic& dyn,
|
|
86
|
+
const AnimatedPropBase& animatedProp) {
|
|
87
|
+
const auto& shadowColor = get<SharedColor>(animatedProp);
|
|
88
|
+
dyn.insert("shadowColor", static_cast<int32_t>(*shadowColor));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
void packShadowOffset(
|
|
92
|
+
folly::dynamic& dyn,
|
|
93
|
+
const AnimatedPropBase& animatedProp) {
|
|
94
|
+
const auto& shadowOffset = get<Size>(animatedProp);
|
|
95
|
+
dyn.insert(
|
|
96
|
+
"shadowOffset",
|
|
97
|
+
folly::dynamic::object("width", shadowOffset.width)(
|
|
98
|
+
"height", shadowOffset.height));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
void packShadowOpacity(
|
|
102
|
+
folly::dynamic& dyn,
|
|
103
|
+
const AnimatedPropBase& animatedProp) {
|
|
104
|
+
dyn.insert("shadowOpacity", get<Float>(animatedProp));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
void packShadowRadius(
|
|
108
|
+
folly::dynamic& dyn,
|
|
109
|
+
const AnimatedPropBase& animatedProp) {
|
|
110
|
+
dyn.insert("shadowRadius", get<Float>(animatedProp));
|
|
84
111
|
}
|
|
85
112
|
|
|
86
113
|
void packAnimatedProp(
|
|
@@ -103,6 +130,22 @@ void packAnimatedProp(
|
|
|
103
130
|
packBorderRadii(dyn, *animatedProp);
|
|
104
131
|
break;
|
|
105
132
|
|
|
133
|
+
case SHADOW_COLOR:
|
|
134
|
+
packShadowColor(dyn, *animatedProp);
|
|
135
|
+
break;
|
|
136
|
+
|
|
137
|
+
case SHADOW_OFFSET:
|
|
138
|
+
packShadowOffset(dyn, *animatedProp);
|
|
139
|
+
break;
|
|
140
|
+
|
|
141
|
+
case SHADOW_OPACITY:
|
|
142
|
+
packShadowOpacity(dyn, *animatedProp);
|
|
143
|
+
break;
|
|
144
|
+
|
|
145
|
+
case SHADOW_RADIUS:
|
|
146
|
+
packShadowRadius(dyn, *animatedProp);
|
|
147
|
+
break;
|
|
148
|
+
|
|
106
149
|
case WIDTH:
|
|
107
150
|
case HEIGHT:
|
|
108
151
|
case FLEX:
|
|
@@ -12,7 +12,19 @@
|
|
|
12
12
|
|
|
13
13
|
namespace facebook::react {
|
|
14
14
|
|
|
15
|
-
enum PropName {
|
|
15
|
+
enum PropName {
|
|
16
|
+
OPACITY,
|
|
17
|
+
WIDTH,
|
|
18
|
+
HEIGHT,
|
|
19
|
+
BORDER_RADII,
|
|
20
|
+
FLEX,
|
|
21
|
+
TRANSFORM,
|
|
22
|
+
BACKGROUND_COLOR,
|
|
23
|
+
SHADOW_COLOR,
|
|
24
|
+
SHADOW_OFFSET,
|
|
25
|
+
SHADOW_OPACITY,
|
|
26
|
+
SHADOW_RADIUS
|
|
27
|
+
};
|
|
16
28
|
|
|
17
29
|
struct AnimatedPropBase {
|
|
18
30
|
PropName propName;
|
|
@@ -74,6 +86,25 @@ inline void cloneProp(BaseViewProps &viewProps, const AnimatedPropBase &animated
|
|
|
74
86
|
case BACKGROUND_COLOR:
|
|
75
87
|
viewProps.backgroundColor = get<SharedColor>(animatedProp);
|
|
76
88
|
break;
|
|
89
|
+
|
|
90
|
+
case SHADOW_COLOR:
|
|
91
|
+
viewProps.shadowColor = get<SharedColor>(animatedProp);
|
|
92
|
+
break;
|
|
93
|
+
|
|
94
|
+
case SHADOW_OFFSET:
|
|
95
|
+
viewProps.shadowOffset = get<Size>(animatedProp);
|
|
96
|
+
break;
|
|
97
|
+
|
|
98
|
+
case SHADOW_OPACITY:
|
|
99
|
+
viewProps.shadowOpacity = get<Float>(animatedProp);
|
|
100
|
+
break;
|
|
101
|
+
|
|
102
|
+
case SHADOW_RADIUS:
|
|
103
|
+
viewProps.shadowRadius = get<Float>(animatedProp);
|
|
104
|
+
break;
|
|
105
|
+
|
|
106
|
+
default:
|
|
107
|
+
break;
|
|
77
108
|
}
|
|
78
109
|
}
|
|
79
110
|
} // namespace facebook::react
|
|
@@ -39,6 +39,22 @@ struct AnimatedPropsBuilder {
|
|
|
39
39
|
{
|
|
40
40
|
props.push_back(std::make_unique<AnimatedProp<SharedColor>>(BACKGROUND_COLOR, value));
|
|
41
41
|
}
|
|
42
|
+
void setShadowColor(SharedColor value)
|
|
43
|
+
{
|
|
44
|
+
props.push_back(std::make_unique<AnimatedProp<SharedColor>>(SHADOW_COLOR, value));
|
|
45
|
+
}
|
|
46
|
+
void setShadowOpacity(Float value)
|
|
47
|
+
{
|
|
48
|
+
props.push_back(std::make_unique<AnimatedProp<Float>>(SHADOW_OPACITY, value));
|
|
49
|
+
}
|
|
50
|
+
void setShadowRadius(Float value)
|
|
51
|
+
{
|
|
52
|
+
props.push_back(std::make_unique<AnimatedProp<Float>>(SHADOW_RADIUS, value));
|
|
53
|
+
}
|
|
54
|
+
void setShadowOffset(Size value)
|
|
55
|
+
{
|
|
56
|
+
props.push_back(std::make_unique<AnimatedProp<Size>>(SHADOW_OFFSET, value));
|
|
57
|
+
}
|
|
42
58
|
void storeDynamic(folly::dynamic &d)
|
|
43
59
|
{
|
|
44
60
|
rawProps = std::make_unique<RawProps>(std::move(d));
|
|
@@ -77,6 +77,22 @@ inline void updateProp(const PropName propName, BaseViewProps &viewProps, const
|
|
|
77
77
|
case BACKGROUND_COLOR:
|
|
78
78
|
viewProps.backgroundColor = snapshot.props.backgroundColor;
|
|
79
79
|
break;
|
|
80
|
+
|
|
81
|
+
case SHADOW_COLOR:
|
|
82
|
+
viewProps.shadowColor = snapshot.props.shadowColor;
|
|
83
|
+
break;
|
|
84
|
+
|
|
85
|
+
case SHADOW_OFFSET:
|
|
86
|
+
viewProps.shadowOffset = snapshot.props.shadowOffset;
|
|
87
|
+
break;
|
|
88
|
+
|
|
89
|
+
case SHADOW_OPACITY:
|
|
90
|
+
viewProps.shadowOpacity = snapshot.props.shadowOpacity;
|
|
91
|
+
break;
|
|
92
|
+
|
|
93
|
+
case SHADOW_RADIUS:
|
|
94
|
+
viewProps.shadowRadius = snapshot.props.shadowRadius;
|
|
95
|
+
break;
|
|
80
96
|
}
|
|
81
97
|
}
|
|
82
98
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native",
|
|
3
|
-
"version": "0.84.0-nightly-
|
|
3
|
+
"version": "0.84.0-nightly-20251212-dd390dbbe",
|
|
4
4
|
"description": "A framework for building native apps using React",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -160,13 +160,13 @@
|
|
|
160
160
|
},
|
|
161
161
|
"dependencies": {
|
|
162
162
|
"@jest/create-cache-key-function": "^29.7.0",
|
|
163
|
-
"@react-native/assets-registry": "0.84.0-nightly-
|
|
164
|
-
"@react-native/codegen": "0.84.0-nightly-
|
|
165
|
-
"@react-native/community-cli-plugin": "0.84.0-nightly-
|
|
166
|
-
"@react-native/gradle-plugin": "0.84.0-nightly-
|
|
167
|
-
"@react-native/js-polyfills": "0.84.0-nightly-
|
|
168
|
-
"@react-native/normalize-colors": "0.84.0-nightly-
|
|
169
|
-
"@react-native/virtualized-lists": "0.84.0-nightly-
|
|
163
|
+
"@react-native/assets-registry": "0.84.0-nightly-20251212-dd390dbbe",
|
|
164
|
+
"@react-native/codegen": "0.84.0-nightly-20251212-dd390dbbe",
|
|
165
|
+
"@react-native/community-cli-plugin": "0.84.0-nightly-20251212-dd390dbbe",
|
|
166
|
+
"@react-native/gradle-plugin": "0.84.0-nightly-20251212-dd390dbbe",
|
|
167
|
+
"@react-native/js-polyfills": "0.84.0-nightly-20251212-dd390dbbe",
|
|
168
|
+
"@react-native/normalize-colors": "0.84.0-nightly-20251212-dd390dbbe",
|
|
169
|
+
"@react-native/virtualized-lists": "0.84.0-nightly-20251212-dd390dbbe",
|
|
170
170
|
"abort-controller": "^3.0.0",
|
|
171
171
|
"anser": "^1.4.9",
|
|
172
172
|
"ansi-regex": "^5.0.0",
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
"base64-js": "^1.5.1",
|
|
176
176
|
"commander": "^12.0.0",
|
|
177
177
|
"flow-enums-runtime": "^0.0.6",
|
|
178
|
-
"hermes-compiler": "0.14.0-commitly-
|
|
178
|
+
"hermes-compiler": "0.14.0-commitly-202512102158-39fca9fda",
|
|
179
179
|
"invariant": "^2.2.4",
|
|
180
180
|
"jest-environment-node": "^29.7.0",
|
|
181
181
|
"memoize-one": "^5.0.0",
|
|
@@ -194,13 +194,13 @@ class ReactNativePodsUtils
|
|
|
194
194
|
installer.target_installation_results.pod_target_installation_results.each do |pod_name, target_installation_result|
|
|
195
195
|
if pod_name.to_s == target_pod_name
|
|
196
196
|
target_installation_result.native_target.build_configurations.each do |config|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
end
|
|
197
|
+
if configuration_type == nil || (configuration_type != nil && config.type == configuration_type)
|
|
198
|
+
config.build_settings[settings_name] ||= '$(inherited) '
|
|
199
|
+
config.build_settings[settings_name] << settings_value
|
|
201
200
|
end
|
|
202
201
|
end
|
|
203
202
|
end
|
|
203
|
+
end
|
|
204
204
|
end
|
|
205
205
|
|
|
206
206
|
def self.fix_library_search_path(config)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
HERMES_VERSION_NAME=0.14.0-commitly-
|
|
1
|
+
HERMES_VERSION_NAME=0.14.0-commitly-202512102158-39fca9fda
|
|
2
2
|
HERMES_V1_VERSION_NAME=250829098.0.4
|
|
@@ -50,6 +50,7 @@ Pod::Spec.new do |spec|
|
|
|
50
50
|
'folly/lang/Exception.cpp',
|
|
51
51
|
'folly/memory/ReentrantAllocator.cpp',
|
|
52
52
|
'folly/memory/detail/MallocImpl.cpp',
|
|
53
|
+
'folly/memory/SanitizeLeak.cpp',
|
|
53
54
|
'folly/net/NetOps.cpp',
|
|
54
55
|
'folly/portability/SysUio.cpp',
|
|
55
56
|
'folly/synchronization/SanitizeThread.cpp',
|