Ensure NativeAnimatedHelper cannot be setup incorrectly (#37157)

Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/37157

## Context
NativeAnimatedHelper must be set up in a very particular way:
- On iOS in Bridgeless mode, it must use NativeAnimated**Turbo**Module.
- Everywhere else, it must use NativeAnimatedModule.

## Problem
For some unknown reason, NativeAnimatedModule was getting loaded on D44933587.

## Changes
This diff makes the aformentioned error impossible. It moves the module load gating logic into the two NativeModule spec files.

Changelog: [Internal]

Reviewed By: philIip

Differential Revision: D45292907

fbshipit-source-id: 771bf64d7b491732e8860cf704bc9c3686980e74
This commit is contained in:
Ramanpreet Nara
2023-04-30 03:28:33 -07:00
committed by Facebook GitHub Bot
parent c4a6c3728e
commit fbf6a8c888
4 changed files with 29 additions and 7 deletions
@@ -28,9 +28,7 @@ import invariant from 'invariant';
// TODO T69437152 @petetheheat - Delete this fork when Fabric ships to 100%.
const NativeAnimatedModule =
Platform.OS === 'ios' && global.RN$Bridgeless === true
? NativeAnimatedTurboModule
: NativeAnimatedNonTurboModule;
NativeAnimatedNonTurboModule ?? NativeAnimatedTurboModule;
let __nativeAnimatedNodeTagCount = 1; /* used for animated nodes */
let __nativeAnimationIdCount = 1; /* used for started animations */
@@ -11,6 +11,7 @@
import type {TurboModule} from '../TurboModule/RCTExport';
import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
import shouldUseTurboAnimatedModule from './shouldUseTurboAnimatedModule';
type EndResult = {finished: boolean, ...};
type EndCallback = (result: EndResult) => void;
@@ -70,4 +71,7 @@ export interface Spec extends TurboModule {
+queueAndExecuteBatchedOperations?: (operationsAndArgs: Array<any>) => void;
}
export default (TurboModuleRegistry.get<Spec>('NativeAnimatedModule'): ?Spec);
const NativeModule: ?Spec = !shouldUseTurboAnimatedModule()
? TurboModuleRegistry.get<Spec>('NativeAnimatedModule')
: null;
export default NativeModule;
@@ -11,6 +11,7 @@
import type {TurboModule} from '../TurboModule/RCTExport';
import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
import shouldUseTurboAnimatedModule from './shouldUseTurboAnimatedModule';
type EndResult = {finished: boolean, ...};
type EndCallback = (result: EndResult) => void;
@@ -70,6 +71,8 @@ export interface Spec extends TurboModule {
+queueAndExecuteBatchedOperations?: (operationsAndArgs: Array<any>) => void;
}
export default (TurboModuleRegistry.get<Spec>(
'NativeAnimatedTurboModule',
): ?Spec);
const NativeModule: ?Spec = shouldUseTurboAnimatedModule()
? TurboModuleRegistry.get<Spec>('NativeAnimatedTurboModule')
: null;
export default NativeModule;
@@ -0,0 +1,17 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @format
*/
import Platform from '../Utilities/Platform';
function shouldUseTurboAnimatedModule(): boolean {
return Platform.OS === 'ios' && global.RN$Bridgeless === true;
}
export default shouldUseTurboAnimatedModule;