Skip to content

Commit 1601686

Browse files
committed
[compiler][gating] Custom opt out directives (experimental option) (facebook#33328)
Adding an experimental / unstable compiler config to enable custom opt-out directives DiffTrain build for [f9ae0a4](facebook@f9ae0a4)
1 parent f9ec2cb commit 1601686

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+6708
-6148
lines changed

compiled/eslint-plugin-react-hooks/index.js

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56247,9 +56247,12 @@ function tryFindDirectiveEnablingMemoization(directives, opts) {
5624756247
return Err(dynamicGating.unwrapErr());
5624856248
}
5624956249
}
56250-
function findDirectiveDisablingMemoization(directives) {
56251-
var _a;
56252-
return ((_a = directives.find(directive => OPT_OUT_DIRECTIVES.has(directive.value.value))) !== null && _a !== void 0 ? _a : null);
56250+
function findDirectiveDisablingMemoization(directives, { customOptOutDirectives }) {
56251+
var _a, _b;
56252+
if (customOptOutDirectives != null) {
56253+
return ((_a = directives.find(directive => customOptOutDirectives.indexOf(directive.value.value) !== -1)) !== null && _a !== void 0 ? _a : null);
56254+
}
56255+
return ((_b = directives.find(directive => OPT_OUT_DIRECTIVES.has(directive.value.value))) !== null && _b !== void 0 ? _b : null);
5625356256
}
5625456257
function findDirectivesDynamicGating(directives, opts) {
5625556258
var _a, _b;
@@ -56461,7 +56464,8 @@ function compileProgram(program, pass) {
5646156464
filename: pass.filename,
5646256465
code: pass.code,
5646356466
suppressions,
56464-
hasModuleScopeOptOut: findDirectiveDisablingMemoization(program.node.directives) != null,
56467+
hasModuleScopeOptOut: findDirectiveDisablingMemoization(program.node.directives, pass.opts) !=
56468+
null,
5646556469
});
5646656470
const queue = findFunctionsToCompile(program, pass, programContext);
5646756471
const compiledFns = [];
@@ -56552,7 +56556,7 @@ function processFn(fn, fnType, programContext) {
5655256556
}
5655356557
directives = {
5655456558
optIn: optIn.unwrapOr(null),
56555-
optOut: findDirectiveDisablingMemoization(fn.node.body.directives),
56559+
optOut: findDirectiveDisablingMemoization(fn.node.body.directives, programContext.opts),
5655656560
};
5655756561
}
5655856562
let compiledFn;
@@ -57223,6 +57227,9 @@ zod.z.enum([
5722357227
const DynamicGatingOptionsSchema = zod.z.object({
5722457228
source: zod.z.string(),
5722557229
});
57230+
const CustomOptOutDirectiveSchema = zod.z
57231+
.nullable(zod.z.array(zod.z.string()))
57232+
.default(null);
5722657233
const CompilerReactTargetSchema = zod.z.union([
5722757234
zod.z.literal('17'),
5722857235
zod.z.literal('18'),
@@ -57253,6 +57260,7 @@ const defaultOptions = {
5725357260
return filename.indexOf('node_modules') === -1;
5725457261
},
5725557262
enableReanimatedCheck: true,
57263+
customOptOutDirectives: null,
5725657264
target: '19',
5725757265
};
5725857266
function parsePluginOptions(obj) {
@@ -57312,6 +57320,21 @@ function parsePluginOptions(obj) {
5731257320
}
5731357321
break;
5731457322
}
57323+
case 'customOptOutDirectives': {
57324+
const result = CustomOptOutDirectiveSchema.safeParse(value);
57325+
if (result.success) {
57326+
parsedOptions[key] = result.data;
57327+
}
57328+
else {
57329+
CompilerError.throwInvalidConfig({
57330+
reason: 'Could not parse custom opt out directives. Update React Compiler config to fix the error',
57331+
description: `${zodValidationError.fromZodError(result.error)}`,
57332+
loc: null,
57333+
suggestions: null,
57334+
});
57335+
}
57336+
break;
57337+
}
5731557338
default: {
5731657339
parsedOptions[key] = value;
5731757340
}

compiled/facebook-www/JSXDEVRuntime-dev.classic.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ __DEV__ &&
3434
case REACT_ACTIVITY_TYPE:
3535
return "Activity";
3636
case REACT_VIEW_TRANSITION_TYPE:
37-
if (enableViewTransition) return "ViewTransition";
37+
return "ViewTransition";
3838
case REACT_TRACING_MARKER_TYPE:
3939
if (enableTransitionTracing) return "TracingMarker";
4040
}
@@ -308,13 +308,12 @@ __DEV__ &&
308308
disableDefaultPropsExceptForClasses =
309309
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
310310
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
311-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
312-
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
313-
enableViewTransition = dynamicFeatureFlags.enableViewTransition;
314-
dynamicFeatureFlags = Symbol.for("react.element");
315-
var REACT_ELEMENT_TYPE = renameElementSymbol
311+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing;
312+
dynamicFeatureFlags = dynamicFeatureFlags.renameElementSymbol;
313+
var REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
314+
REACT_ELEMENT_TYPE = dynamicFeatureFlags
316315
? Symbol.for("react.transitional.element")
317-
: dynamicFeatureFlags,
316+
: REACT_LEGACY_ELEMENT_TYPE,
318317
REACT_PORTAL_TYPE = Symbol.for("react.portal"),
319318
REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
320319
REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),

compiled/facebook-www/JSXDEVRuntime-dev.modern.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ __DEV__ &&
3434
case REACT_ACTIVITY_TYPE:
3535
return "Activity";
3636
case REACT_VIEW_TRANSITION_TYPE:
37-
if (enableViewTransition) return "ViewTransition";
37+
return "ViewTransition";
3838
case REACT_TRACING_MARKER_TYPE:
3939
if (enableTransitionTracing) return "TracingMarker";
4040
}
@@ -308,13 +308,12 @@ __DEV__ &&
308308
disableDefaultPropsExceptForClasses =
309309
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
310310
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
311-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
312-
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
313-
enableViewTransition = dynamicFeatureFlags.enableViewTransition;
314-
dynamicFeatureFlags = Symbol.for("react.element");
315-
var REACT_ELEMENT_TYPE = renameElementSymbol
311+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing;
312+
dynamicFeatureFlags = dynamicFeatureFlags.renameElementSymbol;
313+
var REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
314+
REACT_ELEMENT_TYPE = dynamicFeatureFlags
316315
? Symbol.for("react.transitional.element")
317-
: dynamicFeatureFlags,
316+
: REACT_LEGACY_ELEMENT_TYPE,
318317
REACT_PORTAL_TYPE = Symbol.for("react.portal"),
319318
REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
320319
REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),

compiled/facebook-www/REVISION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
c0464aedb16b1c970d717651bba8d1c66c578729
1+
f9ae0a4c2edc9ad93507b550f2aeb60119955336
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
c0464aedb16b1c970d717651bba8d1c66c578729
1+
f9ae0a4c2edc9ad93507b550f2aeb60119955336

compiled/facebook-www/React-dev.classic.js

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ __DEV__ &&
108108
case REACT_ACTIVITY_TYPE:
109109
return "Activity";
110110
case REACT_VIEW_TRANSITION_TYPE:
111-
if (enableViewTransition) return "ViewTransition";
111+
return "ViewTransition";
112112
case REACT_TRACING_MARKER_TYPE:
113113
if (enableTransitionTracing) return "TracingMarker";
114114
}
@@ -604,9 +604,8 @@ __DEV__ &&
604604
function startTransition(scope, options) {
605605
var prevTransition = ReactSharedInternals.T,
606606
currentTransition = {};
607-
enableViewTransition &&
608-
(currentTransition.types =
609-
null !== prevTransition ? prevTransition.types : null);
607+
currentTransition.types =
608+
null !== prevTransition ? prevTransition.types : null;
610609
enableTransitionTracing &&
611610
((currentTransition.name =
612611
void 0 !== options && void 0 !== options.name ? options.name : null),
@@ -647,21 +646,18 @@ __DEV__ &&
647646
}
648647
}
649648
function addTransitionType(type) {
650-
if (enableViewTransition) {
651-
var transition = ReactSharedInternals.T;
652-
if (null !== transition) {
653-
var transitionTypes = transition.types;
654-
null === transitionTypes
655-
? (transition.types = [type])
656-
: -1 === transitionTypes.indexOf(type) &&
657-
transitionTypes.push(type);
658-
} else
659-
0 === ReactSharedInternals.asyncTransitions &&
660-
console.error(
661-
"addTransitionType can only be called inside a `startTransition()` callback. It must be associated with a specific Transition."
662-
),
663-
startTransition(addTransitionType.bind(null, type));
664-
}
649+
var transition = ReactSharedInternals.T;
650+
if (null !== transition) {
651+
var transitionTypes = transition.types;
652+
null === transitionTypes
653+
? (transition.types = [type])
654+
: -1 === transitionTypes.indexOf(type) && transitionTypes.push(type);
655+
} else
656+
0 === ReactSharedInternals.asyncTransitions &&
657+
console.error(
658+
"addTransitionType can only be called inside a `startTransition()` callback. It must be associated with a specific Transition."
659+
),
660+
startTransition(addTransitionType.bind(null, type));
665661
}
666662
function enqueueTask(task) {
667663
if (null === enqueueTaskImpl)
@@ -754,13 +750,12 @@ __DEV__ &&
754750
disableDefaultPropsExceptForClasses =
755751
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
756752
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
757-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
758-
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
759-
enableViewTransition = dynamicFeatureFlags.enableViewTransition;
760-
dynamicFeatureFlags = Symbol.for("react.element");
761-
var REACT_ELEMENT_TYPE = renameElementSymbol
753+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing;
754+
dynamicFeatureFlags = dynamicFeatureFlags.renameElementSymbol;
755+
var REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
756+
REACT_ELEMENT_TYPE = dynamicFeatureFlags
762757
? Symbol.for("react.transitional.element")
763-
: dynamicFeatureFlags,
758+
: REACT_LEGACY_ELEMENT_TYPE,
764759
REACT_PORTAL_TYPE = Symbol.for("react.portal"),
765760
REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
766761
REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
@@ -773,9 +768,9 @@ __DEV__ &&
773768
REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
774769
REACT_MEMO_TYPE = Symbol.for("react.memo"),
775770
REACT_LAZY_TYPE = Symbol.for("react.lazy");
776-
renameElementSymbol = Symbol.for("react.scope");
771+
dynamicFeatureFlags = Symbol.for("react.scope");
777772
var REACT_ACTIVITY_TYPE = Symbol.for("react.activity");
778-
dynamicFeatureFlags = Symbol.for("react.legacy_hidden");
773+
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.legacy_hidden");
779774
var REACT_TRACING_MARKER_TYPE = Symbol.for("react.tracing_marker"),
780775
REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
781776
MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
@@ -1438,8 +1433,8 @@ __DEV__ &&
14381433
};
14391434
exports.startTransition = startTransition;
14401435
exports.unstable_Activity = REACT_ACTIVITY_TYPE;
1441-
exports.unstable_LegacyHidden = dynamicFeatureFlags;
1442-
exports.unstable_Scope = renameElementSymbol;
1436+
exports.unstable_LegacyHidden = REACT_LEGACY_ELEMENT_TYPE;
1437+
exports.unstable_Scope = dynamicFeatureFlags;
14431438
exports.unstable_SuspenseList = REACT_SUSPENSE_LIST_TYPE;
14441439
exports.unstable_TracingMarker = REACT_TRACING_MARKER_TYPE;
14451440
exports.unstable_ViewTransition = REACT_VIEW_TRANSITION_TYPE;
@@ -1537,7 +1532,7 @@ __DEV__ &&
15371532
exports.useTransition = function () {
15381533
return resolveDispatcher().useTransition();
15391534
};
1540-
exports.version = "19.2.0-www-classic-c0464aed-20250523";
1535+
exports.version = "19.2.0-www-classic-f9ae0a4c-20250527";
15411536
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
15421537
"function" ===
15431538
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/React-dev.modern.js

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ __DEV__ &&
108108
case REACT_ACTIVITY_TYPE:
109109
return "Activity";
110110
case REACT_VIEW_TRANSITION_TYPE:
111-
if (enableViewTransition) return "ViewTransition";
111+
return "ViewTransition";
112112
case REACT_TRACING_MARKER_TYPE:
113113
if (enableTransitionTracing) return "TracingMarker";
114114
}
@@ -604,9 +604,8 @@ __DEV__ &&
604604
function startTransition(scope, options) {
605605
var prevTransition = ReactSharedInternals.T,
606606
currentTransition = {};
607-
enableViewTransition &&
608-
(currentTransition.types =
609-
null !== prevTransition ? prevTransition.types : null);
607+
currentTransition.types =
608+
null !== prevTransition ? prevTransition.types : null;
610609
enableTransitionTracing &&
611610
((currentTransition.name =
612611
void 0 !== options && void 0 !== options.name ? options.name : null),
@@ -647,21 +646,18 @@ __DEV__ &&
647646
}
648647
}
649648
function addTransitionType(type) {
650-
if (enableViewTransition) {
651-
var transition = ReactSharedInternals.T;
652-
if (null !== transition) {
653-
var transitionTypes = transition.types;
654-
null === transitionTypes
655-
? (transition.types = [type])
656-
: -1 === transitionTypes.indexOf(type) &&
657-
transitionTypes.push(type);
658-
} else
659-
0 === ReactSharedInternals.asyncTransitions &&
660-
console.error(
661-
"addTransitionType can only be called inside a `startTransition()` callback. It must be associated with a specific Transition."
662-
),
663-
startTransition(addTransitionType.bind(null, type));
664-
}
649+
var transition = ReactSharedInternals.T;
650+
if (null !== transition) {
651+
var transitionTypes = transition.types;
652+
null === transitionTypes
653+
? (transition.types = [type])
654+
: -1 === transitionTypes.indexOf(type) && transitionTypes.push(type);
655+
} else
656+
0 === ReactSharedInternals.asyncTransitions &&
657+
console.error(
658+
"addTransitionType can only be called inside a `startTransition()` callback. It must be associated with a specific Transition."
659+
),
660+
startTransition(addTransitionType.bind(null, type));
665661
}
666662
function enqueueTask(task) {
667663
if (null === enqueueTaskImpl)
@@ -754,13 +750,12 @@ __DEV__ &&
754750
disableDefaultPropsExceptForClasses =
755751
dynamicFeatureFlags.disableDefaultPropsExceptForClasses,
756752
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
757-
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
758-
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
759-
enableViewTransition = dynamicFeatureFlags.enableViewTransition;
760-
dynamicFeatureFlags = Symbol.for("react.element");
761-
var REACT_ELEMENT_TYPE = renameElementSymbol
753+
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing;
754+
dynamicFeatureFlags = dynamicFeatureFlags.renameElementSymbol;
755+
var REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
756+
REACT_ELEMENT_TYPE = dynamicFeatureFlags
762757
? Symbol.for("react.transitional.element")
763-
: dynamicFeatureFlags,
758+
: REACT_LEGACY_ELEMENT_TYPE,
764759
REACT_PORTAL_TYPE = Symbol.for("react.portal"),
765760
REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"),
766761
REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"),
@@ -773,9 +768,9 @@ __DEV__ &&
773768
REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"),
774769
REACT_MEMO_TYPE = Symbol.for("react.memo"),
775770
REACT_LAZY_TYPE = Symbol.for("react.lazy");
776-
renameElementSymbol = Symbol.for("react.scope");
771+
dynamicFeatureFlags = Symbol.for("react.scope");
777772
var REACT_ACTIVITY_TYPE = Symbol.for("react.activity");
778-
dynamicFeatureFlags = Symbol.for("react.legacy_hidden");
773+
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.legacy_hidden");
779774
var REACT_TRACING_MARKER_TYPE = Symbol.for("react.tracing_marker"),
780775
REACT_VIEW_TRANSITION_TYPE = Symbol.for("react.view_transition"),
781776
MAYBE_ITERATOR_SYMBOL = Symbol.iterator,
@@ -1438,8 +1433,8 @@ __DEV__ &&
14381433
};
14391434
exports.startTransition = startTransition;
14401435
exports.unstable_Activity = REACT_ACTIVITY_TYPE;
1441-
exports.unstable_LegacyHidden = dynamicFeatureFlags;
1442-
exports.unstable_Scope = renameElementSymbol;
1436+
exports.unstable_LegacyHidden = REACT_LEGACY_ELEMENT_TYPE;
1437+
exports.unstable_Scope = dynamicFeatureFlags;
14431438
exports.unstable_SuspenseList = REACT_SUSPENSE_LIST_TYPE;
14441439
exports.unstable_TracingMarker = REACT_TRACING_MARKER_TYPE;
14451440
exports.unstable_ViewTransition = REACT_VIEW_TRANSITION_TYPE;
@@ -1537,7 +1532,7 @@ __DEV__ &&
15371532
exports.useTransition = function () {
15381533
return resolveDispatcher().useTransition();
15391534
};
1540-
exports.version = "19.2.0-www-modern-c0464aed-20250523";
1535+
exports.version = "19.2.0-www-modern-f9ae0a4c-20250527";
15411536
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&
15421537
"function" ===
15431538
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&

compiled/facebook-www/React-prod.classic.js

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ var dynamicFeatureFlags = require("ReactFeatureFlags"),
1717
enableRenderableContext = dynamicFeatureFlags.enableRenderableContext,
1818
enableTransitionTracing = dynamicFeatureFlags.enableTransitionTracing,
1919
renameElementSymbol = dynamicFeatureFlags.renameElementSymbol,
20-
enableViewTransition = dynamicFeatureFlags.enableViewTransition,
2120
REACT_LEGACY_ELEMENT_TYPE = Symbol.for("react.element"),
2221
REACT_ELEMENT_TYPE = renameElementSymbol
2322
? Symbol.for("react.transitional.element")
@@ -357,9 +356,8 @@ var reportGlobalError =
357356
function startTransition(scope, options) {
358357
var prevTransition = ReactSharedInternals.T,
359358
currentTransition = {};
360-
enableViewTransition &&
361-
(currentTransition.types =
362-
null !== prevTransition ? prevTransition.types : null);
359+
currentTransition.types =
360+
null !== prevTransition ? prevTransition.types : null;
363361
enableTransitionTracing &&
364362
((currentTransition.name =
365363
void 0 !== options && void 0 !== options.name ? options.name : null),
@@ -384,15 +382,13 @@ function startTransition(scope, options) {
384382
}
385383
}
386384
function addTransitionType(type) {
387-
if (enableViewTransition) {
388-
var transition = ReactSharedInternals.T;
389-
if (null !== transition) {
390-
var transitionTypes = transition.types;
391-
null === transitionTypes
392-
? (transition.types = [type])
393-
: -1 === transitionTypes.indexOf(type) && transitionTypes.push(type);
394-
} else startTransition(addTransitionType.bind(null, type));
395-
}
385+
var transition = ReactSharedInternals.T;
386+
if (null !== transition) {
387+
var transitionTypes = transition.types;
388+
null === transitionTypes
389+
? (transition.types = [type])
390+
: -1 === transitionTypes.indexOf(type) && transitionTypes.push(type);
391+
} else startTransition(addTransitionType.bind(null, type));
396392
}
397393
var ReactCompilerRuntime = { __proto__: null, c: useMemoCache };
398394
exports.Children = {
@@ -635,4 +631,4 @@ exports.useSyncExternalStore = function (
635631
exports.useTransition = function () {
636632
return ReactSharedInternals.H.useTransition();
637633
};
638-
exports.version = "19.2.0-www-classic-c0464aed-20250523";
634+
exports.version = "19.2.0-www-classic-f9ae0a4c-20250527";

0 commit comments

Comments
 (0)