From 9bb7981c4c30eb7d40c759a2951abd88877520fe Mon Sep 17 00:00:00 2001 From: David Vacca Date: Wed, 5 Feb 2025 11:53:20 -0800 Subject: [PATCH] Extend ReactNativeFeatureFlags to support prereleaseChannels (#49141) Summary: This diff extends ReactNativeFeatureFlags to support prereleaseChannels, the goal is to be able to configure what release channel each feature flag will be enabled / disabled changelog: [internal] internal Reviewed By: rubennorte Differential Revision: D68583324 --- .../ReactNativeFeatureFlags.config.js | 57 +++++++++++++++++++ .../scripts/featureflags/types.js | 8 +++ 2 files changed, 65 insertions(+) diff --git a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js index 98b200f8173cc1..1714dd2ba8a5c1 100644 --- a/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js +++ b/packages/react-native/scripts/featureflags/ReactNativeFeatureFlags.config.js @@ -30,6 +30,7 @@ const testDefinitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'operational', }, + ossReleaseStage: 'none', }, commonTestFlagWithoutNativeImplementation: { defaultValue: false, @@ -39,6 +40,7 @@ const testDefinitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'operational', }, + ossReleaseStage: 'none', skipNativeAPI: true, }, }, @@ -50,6 +52,7 @@ const testDefinitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'operational', }, + ossReleaseStage: 'none', }, }, }; @@ -66,6 +69,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableAccumulatedUpdatesInRawPropsAndroid: { defaultValue: false, @@ -76,6 +80,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableBridgelessArchitecture: { defaultValue: false, @@ -85,6 +90,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, enableCppPropsIteratorSetter: { defaultValue: false, @@ -95,6 +101,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableEagerRootViewAttachment: { defaultValue: false, @@ -105,6 +112,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableEventEmitterRetentionDuringGesturesOnAndroid: { defaultValue: false, @@ -115,6 +123,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableFabricLogs: { defaultValue: false, @@ -123,6 +132,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'operational', }, + ossReleaseStage: 'none', }, enableFabricRenderer: { defaultValue: false, @@ -131,6 +141,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, enableFixForViewCommandRace: { defaultValue: false, @@ -141,6 +152,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableGranularShadowTreeStateReconciliation: { defaultValue: false, @@ -151,6 +163,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableIOSViewClipToPaddingBox: { defaultValue: false, @@ -160,6 +173,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableImagePrefetchingAndroid: { defaultValue: false, @@ -170,6 +184,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableJSRuntimeGCOnMemoryPressureOnIOS: { defaultValue: false, @@ -178,6 +193,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, enableLayoutAnimationsOnAndroid: { defaultValue: false, @@ -187,6 +203,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, enableLayoutAnimationsOnIOS: { defaultValue: true, @@ -196,6 +213,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, enableLongTaskAPI: { defaultValue: false, @@ -205,6 +223,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, enableNewBackgroundAndBorderDrawables: { defaultValue: false, @@ -215,6 +234,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enablePreciseSchedulingForPremountItemsOnAndroid: { defaultValue: false, @@ -225,6 +245,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enablePropsUpdateReconciliationAndroid: { defaultValue: false, @@ -235,6 +256,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableReportEventPaintTime: { defaultValue: false, @@ -244,6 +266,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, enableSynchronousStateUpdates: { defaultValue: false, @@ -254,6 +277,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableUIConsistency: { defaultValue: false, @@ -264,6 +288,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableViewRecycling: { defaultValue: false, @@ -274,6 +299,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, excludeYogaFromRawProps: { defaultValue: false, @@ -284,6 +310,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, fixDifferentiatorEmittingUpdatesWithWrongParentTag: { defaultValue: true, @@ -293,6 +320,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, fixMappingOfEventPrioritiesBetweenFabricAndReact: { defaultValue: false, @@ -303,6 +331,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, fixMountingCoordinatorReportedPendingTransactionsOnAndroid: { defaultValue: false, @@ -313,6 +342,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, fuseboxEnabledRelease: { defaultValue: false, @@ -322,6 +352,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, fuseboxNetworkInspectionEnabled: { defaultValue: false, @@ -332,6 +363,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, lazyAnimationCallbacks: { defaultValue: false, @@ -342,6 +374,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, traceTurboModulePromiseRejectionsOnAndroid: { defaultValue: false, @@ -351,6 +384,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'operational', }, + ossReleaseStage: 'none', }, useAlwaysAvailableJSErrorHandling: { defaultValue: false, @@ -360,6 +394,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, useEditTextStockAndroidFocusBehavior: { defaultValue: true, @@ -369,6 +404,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, useFabricInterop: { defaultValue: false, @@ -378,6 +414,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, useNativeViewConfigsInBridgelessMode: { defaultValue: false, @@ -388,6 +425,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, useOptimizedEventBatchingOnAndroid: { defaultValue: false, @@ -398,6 +436,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, useRawPropsJsiValue: { defaultValue: false, @@ -408,6 +447,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, useRuntimeShadowNodeReferenceUpdate: { defaultValue: true, @@ -418,6 +458,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, useTurboModuleInterop: { defaultValue: false, @@ -428,6 +469,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, useTurboModules: { defaultValue: false, @@ -437,6 +479,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, }, @@ -452,6 +495,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, animatedShouldUseSingleOp: { defaultValue: false, @@ -462,6 +506,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, disableInteractionManager: { defaultValue: false, @@ -472,6 +517,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableAccessToHostTreeInFabric: { defaultValue: false, @@ -481,6 +527,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, enableAnimatedClearImmediateFix: { defaultValue: true, @@ -491,6 +538,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, enableDOMDocumentAPI: { defaultValue: false, @@ -502,6 +550,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, fixVirtualizeListCollapseWindowSize: { defaultValue: false, @@ -512,6 +561,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, isLayoutAnimationEnabled: { defaultValue: true, @@ -521,6 +571,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'release', }, + ossReleaseStage: 'none', }, scheduleAnimatedCleanupInMicrotask: { defaultValue: false, @@ -531,6 +582,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, shouldSkipStateUpdatesForLoopingAnimations: { defaultValue: true, @@ -541,6 +593,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, shouldUseAnimatedObjectForTransform: { defaultValue: false, @@ -551,6 +604,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, shouldUseRemoveClippedSubviewsAsDefaultOnIOS: { defaultValue: false, @@ -561,6 +615,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, shouldUseSetNativePropsInFabric: { defaultValue: true, @@ -570,6 +625,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, useRefsForTextInputState: { defaultValue: false, @@ -580,6 +636,7 @@ const definitions: FeatureFlagDefinitions = { expectedReleaseValue: true, purpose: 'experimentation', }, + ossReleaseStage: 'none', }, }, }; diff --git a/packages/react-native/scripts/featureflags/types.js b/packages/react-native/scripts/featureflags/types.js index 79acece87973d9..45fdb1498bb4f5 100644 --- a/packages/react-native/scripts/featureflags/types.js +++ b/packages/react-native/scripts/featureflags/types.js @@ -15,9 +15,16 @@ export type FeatureFlagDefinitions = $ReadOnly<{ jsOnly: JsOnlyFeatureFlagList, }>; +export type OSSReleaseStageValue = + | 'none' + | 'experimental' + | 'canary' + | 'stable'; + export type CommonFeatureFlagConfig = $ReadOnly<{ defaultValue: FeatureFlagValue, metadata: FeatureFlagMetadata, + ossReleaseStage: OSSReleaseStageValue, // Indicates if this API should only be defined in JavaScript, only to // preserve backwards compatibility with existing native code temporarily. skipNativeAPI?: true, @@ -30,6 +37,7 @@ export type CommonFeatureFlagList = $ReadOnly<{ export type JsOnlyFeatureFlagConfig = $ReadOnly<{ defaultValue: FeatureFlagValue, metadata: FeatureFlagMetadata, + ossReleaseStage: OSSReleaseStageValue, }>; export type JsOnlyFeatureFlagList = $ReadOnly<{