From 51eae111a0e18cfa897cd6d96c8dc127fe76f106 Mon Sep 17 00:00:00 2001 From: josephsavona Date: Wed, 30 Apr 2025 20:47:01 -0700 Subject: [PATCH] [compiler] PruneNonEscapingScopes understands terminal operands We weren't treating terminal operands as eligible for memoization in PruneNonEscapingScopes, which meant that they could end up un-memoized. Terminal operands can also be compound ReactiveValues like SequenceExpressions, so part of the fix is to make sure we don't just recurse into compound values but record the full aliasing information we would for top-level instructions. Still WIP, this needs to handle terminals other than for..of. ghstack-source-id: 09a29230514e3bc95d1833cd4392de238fabbeda Pull Request resolved: https://github.com/facebook/react/pull/33062 DiffTrain build for [e9db3cc2d4175849578418a37f33a6fde5b3c6d8](https://github.com/facebook/react/commit/e9db3cc2d4175849578418a37f33a6fde5b3c6d8) --- compiled/eslint-plugin-react-hooks/index.js | 753 +++++++++--------- compiled/facebook-www/REVISION | 2 +- compiled/facebook-www/REVISION_TRANSFORMS | 2 +- compiled/facebook-www/React-dev.classic.js | 2 +- compiled/facebook-www/React-dev.modern.js | 2 +- compiled/facebook-www/React-prod.classic.js | 2 +- compiled/facebook-www/React-prod.modern.js | 2 +- .../facebook-www/React-profiling.classic.js | 2 +- .../facebook-www/React-profiling.modern.js | 2 +- compiled/facebook-www/ReactART-dev.classic.js | 6 +- compiled/facebook-www/ReactART-dev.modern.js | 6 +- .../facebook-www/ReactART-prod.classic.js | 6 +- compiled/facebook-www/ReactART-prod.modern.js | 6 +- compiled/facebook-www/ReactDOM-dev.classic.js | 10 +- compiled/facebook-www/ReactDOM-dev.modern.js | 10 +- .../facebook-www/ReactDOM-prod.classic.js | 10 +- compiled/facebook-www/ReactDOM-prod.modern.js | 10 +- .../ReactDOM-profiling.classic.js | 10 +- .../facebook-www/ReactDOM-profiling.modern.js | 10 +- .../ReactDOMServer-dev.classic.js | 2 +- .../facebook-www/ReactDOMServer-dev.modern.js | 2 +- .../ReactDOMServer-prod.classic.js | 2 +- .../ReactDOMServer-prod.modern.js | 2 +- .../ReactDOMTesting-dev.classic.js | 10 +- .../ReactDOMTesting-dev.modern.js | 10 +- .../ReactDOMTesting-prod.classic.js | 10 +- .../ReactDOMTesting-prod.modern.js | 10 +- .../ReactReconciler-dev.classic.js | 2 +- .../ReactReconciler-dev.modern.js | 2 +- .../ReactReconciler-prod.classic.js | 2 +- .../ReactReconciler-prod.modern.js | 2 +- .../ReactTestRenderer-dev.classic.js | 6 +- .../ReactTestRenderer-dev.modern.js | 6 +- compiled/facebook-www/VERSION_CLASSIC | 2 +- compiled/facebook-www/VERSION_MODERN | 2 +- 35 files changed, 477 insertions(+), 448 deletions(-) diff --git a/compiled/eslint-plugin-react-hooks/index.js b/compiled/eslint-plugin-react-hooks/index.js index 39a34f6435..8b41175f5c 100644 --- a/compiled/eslint-plugin-react-hooks/index.js +++ b/compiled/eslint-plugin-react-hooks/index.js @@ -47347,7 +47347,7 @@ function pruneNonEscapingScopes(fn) { state.declare(param.place.identifier.declarationId); } } - visitReactiveFunction(fn, new CollectDependenciesVisitor(fn.env), state); + visitReactiveFunction(fn, new CollectDependenciesVisitor(fn.env, state), []); const memoized = computeMemoizedIdentifiers(state); visitReactiveFunction(fn, new PruneScopesTransform(), memoized); } @@ -47406,7 +47406,7 @@ class State { const identifierNode = this.identifiers.get(identifier); CompilerError.invariant(identifierNode !== undefined, { reason: 'Expected identifier to be initialized', - description: null, + description: `[${id}] operand=${printPlace(place)} for identifier declaration ${identifier}`, loc: place.loc, suggestions: null, }); @@ -47468,349 +47468,6 @@ function computeMemoizedIdentifiers(state) { } return memoized; } -function computeMemoizationInputs(env, value, lvalue, options) { - switch (value.kind) { - case 'ConditionalExpression': { - return { - lvalues: lvalue !== null - ? [{ place: lvalue, level: MemoizationLevel.Conditional }] - : [], - rvalues: [ - ...computeMemoizationInputs(env, value.consequent, null, options) - .rvalues, - ...computeMemoizationInputs(env, value.alternate, null, options) - .rvalues, - ], - }; - } - case 'LogicalExpression': { - return { - lvalues: lvalue !== null - ? [{ place: lvalue, level: MemoizationLevel.Conditional }] - : [], - rvalues: [ - ...computeMemoizationInputs(env, value.left, null, options).rvalues, - ...computeMemoizationInputs(env, value.right, null, options).rvalues, - ], - }; - } - case 'SequenceExpression': { - return { - lvalues: lvalue !== null - ? [{ place: lvalue, level: MemoizationLevel.Conditional }] - : [], - rvalues: computeMemoizationInputs(env, value.value, null, options) - .rvalues, - }; - } - case 'JsxExpression': { - const operands = []; - if (value.tag.kind === 'Identifier') { - operands.push(value.tag); - } - for (const prop of value.props) { - if (prop.kind === 'JsxAttribute') { - operands.push(prop.place); - } - else { - operands.push(prop.argument); - } - } - if (value.children !== null) { - for (const child of value.children) { - operands.push(child); - } - } - const level = options.memoizeJsxElements - ? MemoizationLevel.Memoized - : MemoizationLevel.Unmemoized; - return { - lvalues: lvalue !== null ? [{ place: lvalue, level }] : [], - rvalues: operands, - }; - } - case 'JsxFragment': { - const level = options.memoizeJsxElements - ? MemoizationLevel.Memoized - : MemoizationLevel.Unmemoized; - return { - lvalues: lvalue !== null ? [{ place: lvalue, level }] : [], - rvalues: value.children, - }; - } - case 'NextPropertyOf': - case 'StartMemoize': - case 'FinishMemoize': - case 'Debugger': - case 'ComputedDelete': - case 'PropertyDelete': - case 'LoadGlobal': - case 'MetaProperty': - case 'TemplateLiteral': - case 'Primitive': - case 'JSXText': - case 'BinaryExpression': - case 'UnaryExpression': { - const level = options.forceMemoizePrimitives - ? MemoizationLevel.Memoized - : MemoizationLevel.Never; - return { - lvalues: lvalue !== null ? [{ place: lvalue, level }] : [], - rvalues: [], - }; - } - case 'Await': - case 'TypeCastExpression': { - return { - lvalues: lvalue !== null - ? [{ place: lvalue, level: MemoizationLevel.Conditional }] - : [], - rvalues: [value.value], - }; - } - case 'IteratorNext': { - return { - lvalues: lvalue !== null - ? [{ place: lvalue, level: MemoizationLevel.Conditional }] - : [], - rvalues: [value.iterator, value.collection], - }; - } - case 'GetIterator': { - return { - lvalues: lvalue !== null - ? [{ place: lvalue, level: MemoizationLevel.Conditional }] - : [], - rvalues: [value.collection], - }; - } - case 'LoadLocal': { - return { - lvalues: lvalue !== null - ? [{ place: lvalue, level: MemoizationLevel.Conditional }] - : [], - rvalues: [value.place], - }; - } - case 'LoadContext': { - return { - lvalues: lvalue !== null - ? [{ place: lvalue, level: MemoizationLevel.Conditional }] - : [], - rvalues: [value.place], - }; - } - case 'DeclareContext': { - const lvalues = [ - { place: value.lvalue.place, level: MemoizationLevel.Memoized }, - ]; - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Unmemoized }); - } - return { - lvalues, - rvalues: [], - }; - } - case 'DeclareLocal': { - const lvalues = [ - { place: value.lvalue.place, level: MemoizationLevel.Unmemoized }, - ]; - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Unmemoized }); - } - return { - lvalues, - rvalues: [], - }; - } - case 'PrefixUpdate': - case 'PostfixUpdate': { - const lvalues = [ - { place: value.lvalue, level: MemoizationLevel.Conditional }, - ]; - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Conditional }); - } - return { - lvalues, - rvalues: [value.value], - }; - } - case 'StoreLocal': { - const lvalues = [ - { place: value.lvalue.place, level: MemoizationLevel.Conditional }, - ]; - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Conditional }); - } - return { - lvalues, - rvalues: [value.value], - }; - } - case 'StoreContext': { - const lvalues = [ - { place: value.lvalue.place, level: MemoizationLevel.Memoized }, - ]; - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Conditional }); - } - return { - lvalues, - rvalues: [value.value], - }; - } - case 'StoreGlobal': { - const lvalues = []; - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Unmemoized }); - } - return { - lvalues, - rvalues: [value.value], - }; - } - case 'Destructure': { - const lvalues = []; - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Conditional }); - } - lvalues.push(...computePatternLValues(value.lvalue.pattern)); - return { - lvalues: lvalues, - rvalues: [value.value], - }; - } - case 'ComputedLoad': - case 'PropertyLoad': { - const level = options.forceMemoizePrimitives - ? MemoizationLevel.Memoized - : MemoizationLevel.Conditional; - return { - lvalues: lvalue !== null ? [{ place: lvalue, level }] : [], - rvalues: [value.object], - }; - } - case 'ComputedStore': { - const lvalues = [ - { place: value.object, level: MemoizationLevel.Conditional }, - ]; - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Conditional }); - } - return { - lvalues, - rvalues: [value.value], - }; - } - case 'OptionalExpression': { - const lvalues = []; - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Conditional }); - } - return { - lvalues: lvalues, - rvalues: [ - ...computeMemoizationInputs(env, value.value, null, options).rvalues, - ], - }; - } - case 'TaggedTemplateExpression': { - const signature = getFunctionCallSignature(env, value.tag.identifier.type); - let lvalues = []; - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Memoized }); - } - if ((signature === null || signature === void 0 ? void 0 : signature.noAlias) === true) { - return { - lvalues, - rvalues: [], - }; - } - const operands = [...eachReactiveValueOperand(value)]; - lvalues.push(...operands - .filter(operand => isMutableEffect(operand.effect, operand.loc)) - .map(place => ({ place, level: MemoizationLevel.Memoized }))); - return { - lvalues, - rvalues: operands, - }; - } - case 'CallExpression': { - const signature = getFunctionCallSignature(env, value.callee.identifier.type); - let lvalues = []; - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Memoized }); - } - if ((signature === null || signature === void 0 ? void 0 : signature.noAlias) === true) { - return { - lvalues, - rvalues: [], - }; - } - const operands = [...eachReactiveValueOperand(value)]; - lvalues.push(...operands - .filter(operand => isMutableEffect(operand.effect, operand.loc)) - .map(place => ({ place, level: MemoizationLevel.Memoized }))); - return { - lvalues, - rvalues: operands, - }; - } - case 'MethodCall': { - const signature = getFunctionCallSignature(env, value.property.identifier.type); - let lvalues = []; - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Memoized }); - } - if ((signature === null || signature === void 0 ? void 0 : signature.noAlias) === true) { - return { - lvalues, - rvalues: [], - }; - } - const operands = [...eachReactiveValueOperand(value)]; - lvalues.push(...operands - .filter(operand => isMutableEffect(operand.effect, operand.loc)) - .map(place => ({ place, level: MemoizationLevel.Memoized }))); - return { - lvalues, - rvalues: operands, - }; - } - case 'RegExpLiteral': - case 'ObjectMethod': - case 'FunctionExpression': - case 'ArrayExpression': - case 'NewExpression': - case 'ObjectExpression': - case 'PropertyStore': { - const operands = [...eachReactiveValueOperand(value)]; - const lvalues = operands - .filter(operand => isMutableEffect(operand.effect, operand.loc)) - .map(place => ({ place, level: MemoizationLevel.Memoized })); - if (lvalue !== null) { - lvalues.push({ place: lvalue, level: MemoizationLevel.Memoized }); - } - return { - lvalues, - rvalues: operands, - }; - } - case 'UnsupportedNode': { - CompilerError.invariant(false, { - reason: `Unexpected unsupported node`, - description: null, - loc: value.loc, - suggestions: null, - }); - } - default: { - assertExhaustive$1(value, `Unexpected value kind \`${value.kind}\``); - } - } -} function computePatternLValues(pattern) { const lvalues = []; switch (pattern.kind) { @@ -47849,21 +47506,367 @@ function computePatternLValues(pattern) { return lvalues; } class CollectDependenciesVisitor extends ReactiveFunctionVisitor { - constructor(env) { + constructor(env, state) { super(); this.env = env; + this.state = state; this.options = { memoizeJsxElements: !this.env.config.enableForest, forceMemoizePrimitives: this.env.config.enableForest, }; } - visitInstruction(instruction, state) { + computeMemoizationInputs(value, lvalue) { + const env = this.env; + const options = this.options; + switch (value.kind) { + case 'ConditionalExpression': { + return { + lvalues: lvalue !== null + ? [{ place: lvalue, level: MemoizationLevel.Conditional }] + : [], + rvalues: [ + ...this.computeMemoizationInputs(value.consequent, null).rvalues, + ...this.computeMemoizationInputs(value.alternate, null).rvalues, + ], + }; + } + case 'LogicalExpression': { + return { + lvalues: lvalue !== null + ? [{ place: lvalue, level: MemoizationLevel.Conditional }] + : [], + rvalues: [ + ...this.computeMemoizationInputs(value.left, null).rvalues, + ...this.computeMemoizationInputs(value.right, null).rvalues, + ], + }; + } + case 'SequenceExpression': { + for (const instr of value.instructions) { + this.visitValueForMemoization(instr.id, instr.value, instr.lvalue); + } + return { + lvalues: lvalue !== null + ? [{ place: lvalue, level: MemoizationLevel.Conditional }] + : [], + rvalues: this.computeMemoizationInputs(value.value, null).rvalues, + }; + } + case 'JsxExpression': { + const operands = []; + if (value.tag.kind === 'Identifier') { + operands.push(value.tag); + } + for (const prop of value.props) { + if (prop.kind === 'JsxAttribute') { + operands.push(prop.place); + } + else { + operands.push(prop.argument); + } + } + if (value.children !== null) { + for (const child of value.children) { + operands.push(child); + } + } + const level = options.memoizeJsxElements + ? MemoizationLevel.Memoized + : MemoizationLevel.Unmemoized; + return { + lvalues: lvalue !== null ? [{ place: lvalue, level }] : [], + rvalues: operands, + }; + } + case 'JsxFragment': { + const level = options.memoizeJsxElements + ? MemoizationLevel.Memoized + : MemoizationLevel.Unmemoized; + return { + lvalues: lvalue !== null ? [{ place: lvalue, level }] : [], + rvalues: value.children, + }; + } + case 'NextPropertyOf': + case 'StartMemoize': + case 'FinishMemoize': + case 'Debugger': + case 'ComputedDelete': + case 'PropertyDelete': + case 'LoadGlobal': + case 'MetaProperty': + case 'TemplateLiteral': + case 'Primitive': + case 'JSXText': + case 'BinaryExpression': + case 'UnaryExpression': { + const level = options.forceMemoizePrimitives + ? MemoizationLevel.Memoized + : MemoizationLevel.Never; + return { + lvalues: lvalue !== null ? [{ place: lvalue, level }] : [], + rvalues: [], + }; + } + case 'Await': + case 'TypeCastExpression': { + return { + lvalues: lvalue !== null + ? [{ place: lvalue, level: MemoizationLevel.Conditional }] + : [], + rvalues: [value.value], + }; + } + case 'IteratorNext': { + return { + lvalues: lvalue !== null + ? [{ place: lvalue, level: MemoizationLevel.Conditional }] + : [], + rvalues: [value.iterator, value.collection], + }; + } + case 'GetIterator': { + return { + lvalues: lvalue !== null + ? [{ place: lvalue, level: MemoizationLevel.Conditional }] + : [], + rvalues: [value.collection], + }; + } + case 'LoadLocal': { + return { + lvalues: lvalue !== null + ? [{ place: lvalue, level: MemoizationLevel.Conditional }] + : [], + rvalues: [value.place], + }; + } + case 'LoadContext': { + return { + lvalues: lvalue !== null + ? [{ place: lvalue, level: MemoizationLevel.Conditional }] + : [], + rvalues: [value.place], + }; + } + case 'DeclareContext': { + const lvalues = [ + { place: value.lvalue.place, level: MemoizationLevel.Memoized }, + ]; + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Unmemoized }); + } + return { + lvalues, + rvalues: [], + }; + } + case 'DeclareLocal': { + const lvalues = [ + { place: value.lvalue.place, level: MemoizationLevel.Unmemoized }, + ]; + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Unmemoized }); + } + return { + lvalues, + rvalues: [], + }; + } + case 'PrefixUpdate': + case 'PostfixUpdate': { + const lvalues = [ + { place: value.lvalue, level: MemoizationLevel.Conditional }, + ]; + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Conditional }); + } + return { + lvalues, + rvalues: [value.value], + }; + } + case 'StoreLocal': { + const lvalues = [ + { place: value.lvalue.place, level: MemoizationLevel.Conditional }, + ]; + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Conditional }); + } + return { + lvalues, + rvalues: [value.value], + }; + } + case 'StoreContext': { + const lvalues = [ + { place: value.lvalue.place, level: MemoizationLevel.Memoized }, + ]; + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Conditional }); + } + return { + lvalues, + rvalues: [value.value], + }; + } + case 'StoreGlobal': { + const lvalues = []; + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Unmemoized }); + } + return { + lvalues, + rvalues: [value.value], + }; + } + case 'Destructure': { + const lvalues = []; + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Conditional }); + } + lvalues.push(...computePatternLValues(value.lvalue.pattern)); + return { + lvalues: lvalues, + rvalues: [value.value], + }; + } + case 'ComputedLoad': + case 'PropertyLoad': { + const level = options.forceMemoizePrimitives + ? MemoizationLevel.Memoized + : MemoizationLevel.Conditional; + return { + lvalues: lvalue !== null ? [{ place: lvalue, level }] : [], + rvalues: [value.object], + }; + } + case 'ComputedStore': { + const lvalues = [ + { place: value.object, level: MemoizationLevel.Conditional }, + ]; + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Conditional }); + } + return { + lvalues, + rvalues: [value.value], + }; + } + case 'OptionalExpression': { + const lvalues = []; + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Conditional }); + } + return { + lvalues: lvalues, + rvalues: [ + ...this.computeMemoizationInputs(value.value, null).rvalues, + ], + }; + } + case 'TaggedTemplateExpression': { + const signature = getFunctionCallSignature(env, value.tag.identifier.type); + let lvalues = []; + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Memoized }); + } + if ((signature === null || signature === void 0 ? void 0 : signature.noAlias) === true) { + return { + lvalues, + rvalues: [], + }; + } + const operands = [...eachReactiveValueOperand(value)]; + lvalues.push(...operands + .filter(operand => isMutableEffect(operand.effect, operand.loc)) + .map(place => ({ place, level: MemoizationLevel.Memoized }))); + return { + lvalues, + rvalues: operands, + }; + } + case 'CallExpression': { + const signature = getFunctionCallSignature(env, value.callee.identifier.type); + let lvalues = []; + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Memoized }); + } + if ((signature === null || signature === void 0 ? void 0 : signature.noAlias) === true) { + return { + lvalues, + rvalues: [], + }; + } + const operands = [...eachReactiveValueOperand(value)]; + lvalues.push(...operands + .filter(operand => isMutableEffect(operand.effect, operand.loc)) + .map(place => ({ place, level: MemoizationLevel.Memoized }))); + return { + lvalues, + rvalues: operands, + }; + } + case 'MethodCall': { + const signature = getFunctionCallSignature(env, value.property.identifier.type); + let lvalues = []; + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Memoized }); + } + if ((signature === null || signature === void 0 ? void 0 : signature.noAlias) === true) { + return { + lvalues, + rvalues: [], + }; + } + const operands = [...eachReactiveValueOperand(value)]; + lvalues.push(...operands + .filter(operand => isMutableEffect(operand.effect, operand.loc)) + .map(place => ({ place, level: MemoizationLevel.Memoized }))); + return { + lvalues, + rvalues: operands, + }; + } + case 'RegExpLiteral': + case 'ObjectMethod': + case 'FunctionExpression': + case 'ArrayExpression': + case 'NewExpression': + case 'ObjectExpression': + case 'PropertyStore': { + const operands = [...eachReactiveValueOperand(value)]; + const lvalues = operands + .filter(operand => isMutableEffect(operand.effect, operand.loc)) + .map(place => ({ place, level: MemoizationLevel.Memoized })); + if (lvalue !== null) { + lvalues.push({ place: lvalue, level: MemoizationLevel.Memoized }); + } + return { + lvalues, + rvalues: operands, + }; + } + case 'UnsupportedNode': { + CompilerError.invariant(false, { + reason: `Unexpected unsupported node`, + description: null, + loc: value.loc, + suggestions: null, + }); + } + default: { + assertExhaustive$1(value, `Unexpected value kind \`${value.kind}\``); + } + } + } + visitValueForMemoization(id, value, lvalue) { var _a, _b, _c; - this.traverseInstruction(instruction, state); - const aliasing = computeMemoizationInputs(this.env, instruction.value, instruction.lvalue, this.options); + const state = this.state; + const aliasing = this.computeMemoizationInputs(value, lvalue); for (const operand of aliasing.rvalues) { const operandId = (_a = state.definitions.get(operand.identifier.declarationId)) !== null && _a !== void 0 ? _a : operand.identifier.declarationId; - state.visitOperand(instruction.id, operand, operandId); + state.visitOperand(id, operand, operandId); } for (const { place: lvalue, level } of aliasing.lvalues) { const lvalueId = (_b = state.definitions.get(lvalue.identifier.declarationId)) !== null && _b !== void 0 ? _b : lvalue.identifier.declarationId; @@ -47886,34 +47889,60 @@ class CollectDependenciesVisitor extends ReactiveFunctionVisitor { } node.dependencies.add(operandId); } - state.visitOperand(instruction.id, lvalue, lvalueId); + state.visitOperand(id, lvalue, lvalueId); } - if (instruction.value.kind === 'LoadLocal' && instruction.lvalue !== null) { - state.definitions.set(instruction.lvalue.identifier.declarationId, instruction.value.place.identifier.declarationId); + if (value.kind === 'LoadLocal' && lvalue !== null) { + state.definitions.set(lvalue.identifier.declarationId, value.place.identifier.declarationId); } - else if (instruction.value.kind === 'CallExpression' || - instruction.value.kind === 'MethodCall') { - let callee = instruction.value.kind === 'CallExpression' - ? instruction.value.callee - : instruction.value.property; + else if (value.kind === 'CallExpression' || value.kind === 'MethodCall') { + let callee = value.kind === 'CallExpression' ? value.callee : value.property; if (getHookKind(state.env, callee.identifier) != null) { const signature = getFunctionCallSignature(this.env, callee.identifier.type); if (signature && signature.noAlias === true) { return; } - for (const operand of instruction.value.args) { + for (const operand of value.args) { const place = operand.kind === 'Spread' ? operand.place : operand; state.escapingValues.add(place.identifier.declarationId); } } } } - visitTerminal(stmt, state) { - this.traverseTerminal(stmt, state); + visitInstruction(instruction, _scopes) { + this.visitValueForMemoization(instruction.id, instruction.value, instruction.lvalue); + } + visitTerminal(stmt, scopes) { + this.traverseTerminal(stmt, scopes); if (stmt.terminal.kind === 'return') { - state.escapingValues.add(stmt.terminal.value.identifier.declarationId); + this.state.escapingValues.add(stmt.terminal.value.identifier.declarationId); + const identifierNode = this.state.identifiers.get(stmt.terminal.value.identifier.declarationId); + CompilerError.invariant(identifierNode !== undefined, { + reason: 'Expected identifier to be initialized', + description: null, + loc: stmt.terminal.loc, + suggestions: null, + }); + for (const scope of scopes) { + identifierNode.scopes.add(scope.id); + } } } + visitScope(scope, scopes) { + for (const reassignment of scope.scope.reassignments) { + const identifierNode = this.state.identifiers.get(reassignment.declarationId); + CompilerError.invariant(identifierNode !== undefined, { + reason: 'Expected identifier to be initialized', + description: null, + loc: reassignment.loc, + suggestions: null, + }); + for (const scope of scopes) { + identifierNode.scopes.add(scope.id); + } + identifierNode.scopes.add(scope.scope.id); + } + this.traverseScope(scope, [...scopes, scope.scope]); + } } class PruneScopesTransform extends ReactiveFunctionTransform { constructor() { diff --git a/compiled/facebook-www/REVISION b/compiled/facebook-www/REVISION index 2e35e8a59a..ecfd2ff837 100644 --- a/compiled/facebook-www/REVISION +++ b/compiled/facebook-www/REVISION @@ -1 +1 @@ -71797c871b6bfa45988cba38f3388bac095b26cf +e9db3cc2d4175849578418a37f33a6fde5b3c6d8 diff --git a/compiled/facebook-www/REVISION_TRANSFORMS b/compiled/facebook-www/REVISION_TRANSFORMS index 2e35e8a59a..ecfd2ff837 100644 --- a/compiled/facebook-www/REVISION_TRANSFORMS +++ b/compiled/facebook-www/REVISION_TRANSFORMS @@ -1 +1 @@ -71797c871b6bfa45988cba38f3388bac095b26cf +e9db3cc2d4175849578418a37f33a6fde5b3c6d8 diff --git a/compiled/facebook-www/React-dev.classic.js b/compiled/facebook-www/React-dev.classic.js index e9987490d5..655252f89c 100644 --- a/compiled/facebook-www/React-dev.classic.js +++ b/compiled/facebook-www/React-dev.classic.js @@ -1538,7 +1538,7 @@ __DEV__ && exports.useTransition = function () { return resolveDispatcher().useTransition(); }; - exports.version = "19.2.0-www-classic-71797c87-20250430"; + exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/compiled/facebook-www/React-dev.modern.js b/compiled/facebook-www/React-dev.modern.js index 191c0de053..01de871f44 100644 --- a/compiled/facebook-www/React-dev.modern.js +++ b/compiled/facebook-www/React-dev.modern.js @@ -1538,7 +1538,7 @@ __DEV__ && exports.useTransition = function () { return resolveDispatcher().useTransition(); }; - exports.version = "19.2.0-www-modern-71797c87-20250430"; + exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/compiled/facebook-www/React-prod.classic.js b/compiled/facebook-www/React-prod.classic.js index 257dcbb363..b57cad74db 100644 --- a/compiled/facebook-www/React-prod.classic.js +++ b/compiled/facebook-www/React-prod.classic.js @@ -636,4 +636,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.2.0-www-classic-71797c87-20250430"; +exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; diff --git a/compiled/facebook-www/React-prod.modern.js b/compiled/facebook-www/React-prod.modern.js index fa53c8b0c4..0b2e5e76df 100644 --- a/compiled/facebook-www/React-prod.modern.js +++ b/compiled/facebook-www/React-prod.modern.js @@ -636,4 +636,4 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.2.0-www-modern-71797c87-20250430"; +exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; diff --git a/compiled/facebook-www/React-profiling.classic.js b/compiled/facebook-www/React-profiling.classic.js index da741383c0..ac87c8a8ed 100644 --- a/compiled/facebook-www/React-profiling.classic.js +++ b/compiled/facebook-www/React-profiling.classic.js @@ -640,7 +640,7 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.2.0-www-classic-71797c87-20250430"; +exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/compiled/facebook-www/React-profiling.modern.js b/compiled/facebook-www/React-profiling.modern.js index 19914a41ca..c143ceb5c8 100644 --- a/compiled/facebook-www/React-profiling.modern.js +++ b/compiled/facebook-www/React-profiling.modern.js @@ -640,7 +640,7 @@ exports.useSyncExternalStore = function ( exports.useTransition = function () { return ReactSharedInternals.H.useTransition(); }; -exports.version = "19.2.0-www-modern-71797c87-20250430"; +exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/compiled/facebook-www/ReactART-dev.classic.js b/compiled/facebook-www/ReactART-dev.classic.js index a3d8aa7f5b..44901327ee 100644 --- a/compiled/facebook-www/ReactART-dev.classic.js +++ b/compiled/facebook-www/ReactART-dev.classic.js @@ -19014,10 +19014,10 @@ __DEV__ && (function () { var internals = { bundleType: 1, - version: "19.2.0-www-classic-71797c87-20250430", + version: "19.2.0-www-classic-e9db3cc2-20250501", rendererPackageName: "react-art", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-classic-71797c87-20250430" + reconcilerVersion: "19.2.0-www-classic-e9db3cc2-20250501" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -19051,7 +19051,7 @@ __DEV__ && exports.Shape = Shape; exports.Surface = Surface; exports.Text = Text; - exports.version = "19.2.0-www-classic-71797c87-20250430"; + exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/compiled/facebook-www/ReactART-dev.modern.js b/compiled/facebook-www/ReactART-dev.modern.js index 32b0e14e24..7e827755fd 100644 --- a/compiled/facebook-www/ReactART-dev.modern.js +++ b/compiled/facebook-www/ReactART-dev.modern.js @@ -18786,10 +18786,10 @@ __DEV__ && (function () { var internals = { bundleType: 1, - version: "19.2.0-www-modern-71797c87-20250430", + version: "19.2.0-www-modern-e9db3cc2-20250501", rendererPackageName: "react-art", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-modern-71797c87-20250430" + reconcilerVersion: "19.2.0-www-modern-e9db3cc2-20250501" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -18823,7 +18823,7 @@ __DEV__ && exports.Shape = Shape; exports.Surface = Surface; exports.Text = Text; - exports.version = "19.2.0-www-modern-71797c87-20250430"; + exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/compiled/facebook-www/ReactART-prod.classic.js b/compiled/facebook-www/ReactART-prod.classic.js index d0730b439e..a893289ec3 100644 --- a/compiled/facebook-www/ReactART-prod.classic.js +++ b/compiled/facebook-www/ReactART-prod.classic.js @@ -11412,10 +11412,10 @@ var slice = Array.prototype.slice, })(React.Component); var internals$jscomp$inline_1619 = { bundleType: 0, - version: "19.2.0-www-classic-71797c87-20250430", + version: "19.2.0-www-classic-e9db3cc2-20250501", rendererPackageName: "react-art", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-classic-71797c87-20250430" + reconcilerVersion: "19.2.0-www-classic-e9db3cc2-20250501" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_1620 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -11441,4 +11441,4 @@ exports.RadialGradient = RadialGradient; exports.Shape = TYPES.SHAPE; exports.Surface = Surface; exports.Text = Text; -exports.version = "19.2.0-www-classic-71797c87-20250430"; +exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; diff --git a/compiled/facebook-www/ReactART-prod.modern.js b/compiled/facebook-www/ReactART-prod.modern.js index f134dcd0e3..a983b198e3 100644 --- a/compiled/facebook-www/ReactART-prod.modern.js +++ b/compiled/facebook-www/ReactART-prod.modern.js @@ -11125,10 +11125,10 @@ var slice = Array.prototype.slice, })(React.Component); var internals$jscomp$inline_1592 = { bundleType: 0, - version: "19.2.0-www-modern-71797c87-20250430", + version: "19.2.0-www-modern-e9db3cc2-20250501", rendererPackageName: "react-art", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-modern-71797c87-20250430" + reconcilerVersion: "19.2.0-www-modern-e9db3cc2-20250501" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_1593 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -11154,4 +11154,4 @@ exports.RadialGradient = RadialGradient; exports.Shape = TYPES.SHAPE; exports.Surface = Surface; exports.Text = Text; -exports.version = "19.2.0-www-modern-71797c87-20250430"; +exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; diff --git a/compiled/facebook-www/ReactDOM-dev.classic.js b/compiled/facebook-www/ReactDOM-dev.classic.js index 2e8b5887d0..2eb76256d5 100644 --- a/compiled/facebook-www/ReactDOM-dev.classic.js +++ b/compiled/facebook-www/ReactDOM-dev.classic.js @@ -31126,11 +31126,11 @@ __DEV__ && return_targetInst = null; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.2.0-www-classic-71797c87-20250430" !== isomorphicReactPackageVersion) + if ("19.2.0-www-classic-e9db3cc2-20250501" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.2.0-www-classic-71797c87-20250430\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.2.0-www-classic-e9db3cc2-20250501\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -31173,10 +31173,10 @@ __DEV__ && !(function () { var internals = { bundleType: 1, - version: "19.2.0-www-classic-71797c87-20250430", + version: "19.2.0-www-classic-e9db3cc2-20250501", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-classic-71797c87-20250430" + reconcilerVersion: "19.2.0-www-classic-e9db3cc2-20250501" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -31774,7 +31774,7 @@ __DEV__ && exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.2.0-www-classic-71797c87-20250430"; + exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/compiled/facebook-www/ReactDOM-dev.modern.js b/compiled/facebook-www/ReactDOM-dev.modern.js index c592a13d42..25337470ec 100644 --- a/compiled/facebook-www/ReactDOM-dev.modern.js +++ b/compiled/facebook-www/ReactDOM-dev.modern.js @@ -30912,11 +30912,11 @@ __DEV__ && return_targetInst = null; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.2.0-www-modern-71797c87-20250430" !== isomorphicReactPackageVersion) + if ("19.2.0-www-modern-e9db3cc2-20250501" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.2.0-www-modern-71797c87-20250430\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.2.0-www-modern-e9db3cc2-20250501\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -30959,10 +30959,10 @@ __DEV__ && !(function () { var internals = { bundleType: 1, - version: "19.2.0-www-modern-71797c87-20250430", + version: "19.2.0-www-modern-e9db3cc2-20250501", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-modern-71797c87-20250430" + reconcilerVersion: "19.2.0-www-modern-e9db3cc2-20250501" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -31560,7 +31560,7 @@ __DEV__ && exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.2.0-www-modern-71797c87-20250430"; + exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/compiled/facebook-www/ReactDOM-prod.classic.js b/compiled/facebook-www/ReactDOM-prod.classic.js index 85201d7a92..5ce614254e 100644 --- a/compiled/facebook-www/ReactDOM-prod.classic.js +++ b/compiled/facebook-www/ReactDOM-prod.classic.js @@ -19446,14 +19446,14 @@ function getCrossOriginStringAs(as, input) { } var isomorphicReactPackageVersion$jscomp$inline_2029 = React.version; if ( - "19.2.0-www-classic-71797c87-20250430" !== + "19.2.0-www-classic-e9db3cc2-20250501" !== isomorphicReactPackageVersion$jscomp$inline_2029 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2029, - "19.2.0-www-classic-71797c87-20250430" + "19.2.0-www-classic-e9db3cc2-20250501" ) ); Internals.findDOMNode = function (componentOrElement) { @@ -19471,10 +19471,10 @@ Internals.Events = [ ]; var internals$jscomp$inline_2635 = { bundleType: 0, - version: "19.2.0-www-classic-71797c87-20250430", + version: "19.2.0-www-classic-e9db3cc2-20250501", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-classic-71797c87-20250430" + reconcilerVersion: "19.2.0-www-classic-e9db3cc2-20250501" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2636 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -19838,4 +19838,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.2.0-www-classic-71797c87-20250430"; +exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; diff --git a/compiled/facebook-www/ReactDOM-prod.modern.js b/compiled/facebook-www/ReactDOM-prod.modern.js index 47c4d1c03b..91f8fd1eb3 100644 --- a/compiled/facebook-www/ReactDOM-prod.modern.js +++ b/compiled/facebook-www/ReactDOM-prod.modern.js @@ -19175,14 +19175,14 @@ function getCrossOriginStringAs(as, input) { } var isomorphicReactPackageVersion$jscomp$inline_2019 = React.version; if ( - "19.2.0-www-modern-71797c87-20250430" !== + "19.2.0-www-modern-e9db3cc2-20250501" !== isomorphicReactPackageVersion$jscomp$inline_2019 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2019, - "19.2.0-www-modern-71797c87-20250430" + "19.2.0-www-modern-e9db3cc2-20250501" ) ); Internals.findDOMNode = function (componentOrElement) { @@ -19200,10 +19200,10 @@ Internals.Events = [ ]; var internals$jscomp$inline_2617 = { bundleType: 0, - version: "19.2.0-www-modern-71797c87-20250430", + version: "19.2.0-www-modern-e9db3cc2-20250501", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-modern-71797c87-20250430" + reconcilerVersion: "19.2.0-www-modern-e9db3cc2-20250501" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2618 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -19567,4 +19567,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.2.0-www-modern-71797c87-20250430"; +exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; diff --git a/compiled/facebook-www/ReactDOM-profiling.classic.js b/compiled/facebook-www/ReactDOM-profiling.classic.js index 8c36b60a1f..70b911b928 100644 --- a/compiled/facebook-www/ReactDOM-profiling.classic.js +++ b/compiled/facebook-www/ReactDOM-profiling.classic.js @@ -21420,14 +21420,14 @@ function getCrossOriginStringAs(as, input) { } var isomorphicReactPackageVersion$jscomp$inline_2273 = React.version; if ( - "19.2.0-www-classic-71797c87-20250430" !== + "19.2.0-www-classic-e9db3cc2-20250501" !== isomorphicReactPackageVersion$jscomp$inline_2273 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2273, - "19.2.0-www-classic-71797c87-20250430" + "19.2.0-www-classic-e9db3cc2-20250501" ) ); Internals.findDOMNode = function (componentOrElement) { @@ -21445,10 +21445,10 @@ Internals.Events = [ ]; var internals$jscomp$inline_2275 = { bundleType: 0, - version: "19.2.0-www-classic-71797c87-20250430", + version: "19.2.0-www-classic-e9db3cc2-20250501", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-classic-71797c87-20250430" + reconcilerVersion: "19.2.0-www-classic-e9db3cc2-20250501" }; enableSchedulingProfiler && ((internals$jscomp$inline_2275.getLaneLabelMap = getLaneLabelMap), @@ -21815,7 +21815,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.2.0-www-classic-71797c87-20250430"; +exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/compiled/facebook-www/ReactDOM-profiling.modern.js b/compiled/facebook-www/ReactDOM-profiling.modern.js index 80ba78456d..876a24432b 100644 --- a/compiled/facebook-www/ReactDOM-profiling.modern.js +++ b/compiled/facebook-www/ReactDOM-profiling.modern.js @@ -21218,14 +21218,14 @@ function getCrossOriginStringAs(as, input) { } var isomorphicReactPackageVersion$jscomp$inline_2263 = React.version; if ( - "19.2.0-www-modern-71797c87-20250430" !== + "19.2.0-www-modern-e9db3cc2-20250501" !== isomorphicReactPackageVersion$jscomp$inline_2263 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2263, - "19.2.0-www-modern-71797c87-20250430" + "19.2.0-www-modern-e9db3cc2-20250501" ) ); Internals.findDOMNode = function (componentOrElement) { @@ -21243,10 +21243,10 @@ Internals.Events = [ ]; var internals$jscomp$inline_2265 = { bundleType: 0, - version: "19.2.0-www-modern-71797c87-20250430", + version: "19.2.0-www-modern-e9db3cc2-20250501", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-modern-71797c87-20250430" + reconcilerVersion: "19.2.0-www-modern-e9db3cc2-20250501" }; enableSchedulingProfiler && ((internals$jscomp$inline_2265.getLaneLabelMap = getLaneLabelMap), @@ -21613,7 +21613,7 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.2.0-www-modern-71797c87-20250430"; +exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && diff --git a/compiled/facebook-www/ReactDOMServer-dev.classic.js b/compiled/facebook-www/ReactDOMServer-dev.classic.js index 3383754ede..72b13f66b5 100644 --- a/compiled/facebook-www/ReactDOMServer-dev.classic.js +++ b/compiled/facebook-www/ReactDOMServer-dev.classic.js @@ -9511,5 +9511,5 @@ __DEV__ && 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; - exports.version = "19.2.0-www-classic-71797c87-20250430"; + exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; })(); diff --git a/compiled/facebook-www/ReactDOMServer-dev.modern.js b/compiled/facebook-www/ReactDOMServer-dev.modern.js index 431d03ada8..64343f0232 100644 --- a/compiled/facebook-www/ReactDOMServer-dev.modern.js +++ b/compiled/facebook-www/ReactDOMServer-dev.modern.js @@ -9440,5 +9440,5 @@ __DEV__ && 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; - exports.version = "19.2.0-www-modern-71797c87-20250430"; + exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; })(); diff --git a/compiled/facebook-www/ReactDOMServer-prod.classic.js b/compiled/facebook-www/ReactDOMServer-prod.classic.js index 99300cae16..e4e3439ecc 100644 --- a/compiled/facebook-www/ReactDOMServer-prod.classic.js +++ b/compiled/facebook-www/ReactDOMServer-prod.classic.js @@ -6268,4 +6268,4 @@ exports.renderToString = function (children, options) { 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; -exports.version = "19.2.0-www-classic-71797c87-20250430"; +exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; diff --git a/compiled/facebook-www/ReactDOMServer-prod.modern.js b/compiled/facebook-www/ReactDOMServer-prod.modern.js index b084a87963..aeb26fb0a8 100644 --- a/compiled/facebook-www/ReactDOMServer-prod.modern.js +++ b/compiled/facebook-www/ReactDOMServer-prod.modern.js @@ -6180,4 +6180,4 @@ exports.renderToString = function (children, options) { 'The server used "renderToString" which does not support Suspense. If you intended for this Suspense boundary to render the fallback content on the server consider throwing an Error somewhere within the Suspense boundary. If you intended to have the server wait for the suspended component please switch to "renderToReadableStream" which supports Suspense on the server' ); }; -exports.version = "19.2.0-www-modern-71797c87-20250430"; +exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; diff --git a/compiled/facebook-www/ReactDOMTesting-dev.classic.js b/compiled/facebook-www/ReactDOMTesting-dev.classic.js index 774e8b0cf2..d0344e8401 100644 --- a/compiled/facebook-www/ReactDOMTesting-dev.classic.js +++ b/compiled/facebook-www/ReactDOMTesting-dev.classic.js @@ -31447,11 +31447,11 @@ __DEV__ && return_targetInst = null; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.2.0-www-classic-71797c87-20250430" !== isomorphicReactPackageVersion) + if ("19.2.0-www-classic-e9db3cc2-20250501" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.2.0-www-classic-71797c87-20250430\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.2.0-www-classic-e9db3cc2-20250501\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -31494,10 +31494,10 @@ __DEV__ && !(function () { var internals = { bundleType: 1, - version: "19.2.0-www-classic-71797c87-20250430", + version: "19.2.0-www-classic-e9db3cc2-20250501", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-classic-71797c87-20250430" + reconcilerVersion: "19.2.0-www-classic-e9db3cc2-20250501" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -32261,5 +32261,5 @@ __DEV__ && exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.2.0-www-classic-71797c87-20250430"; + exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; })(); diff --git a/compiled/facebook-www/ReactDOMTesting-dev.modern.js b/compiled/facebook-www/ReactDOMTesting-dev.modern.js index a40a4de635..cb446eeba4 100644 --- a/compiled/facebook-www/ReactDOMTesting-dev.modern.js +++ b/compiled/facebook-www/ReactDOMTesting-dev.modern.js @@ -31233,11 +31233,11 @@ __DEV__ && return_targetInst = null; (function () { var isomorphicReactPackageVersion = React.version; - if ("19.2.0-www-modern-71797c87-20250430" !== isomorphicReactPackageVersion) + if ("19.2.0-www-modern-e9db3cc2-20250501" !== isomorphicReactPackageVersion) throw Error( 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + - "\n - react-dom: 19.2.0-www-modern-71797c87-20250430\nLearn more: https://react.dev/warnings/version-mismatch") + "\n - react-dom: 19.2.0-www-modern-e9db3cc2-20250501\nLearn more: https://react.dev/warnings/version-mismatch") ); })(); ("function" === typeof Map && @@ -31280,10 +31280,10 @@ __DEV__ && !(function () { var internals = { bundleType: 1, - version: "19.2.0-www-modern-71797c87-20250430", + version: "19.2.0-www-modern-e9db3cc2-20250501", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-modern-71797c87-20250430" + reconcilerVersion: "19.2.0-www-modern-e9db3cc2-20250501" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -32047,5 +32047,5 @@ __DEV__ && exports.useFormStatus = function () { return resolveDispatcher().useHostTransitionStatus(); }; - exports.version = "19.2.0-www-modern-71797c87-20250430"; + exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; })(); diff --git a/compiled/facebook-www/ReactDOMTesting-prod.classic.js b/compiled/facebook-www/ReactDOMTesting-prod.classic.js index f6092d1abd..f7cea66631 100644 --- a/compiled/facebook-www/ReactDOMTesting-prod.classic.js +++ b/compiled/facebook-www/ReactDOMTesting-prod.classic.js @@ -19762,14 +19762,14 @@ function getCrossOriginStringAs(as, input) { } var isomorphicReactPackageVersion$jscomp$inline_2058 = React.version; if ( - "19.2.0-www-classic-71797c87-20250430" !== + "19.2.0-www-classic-e9db3cc2-20250501" !== isomorphicReactPackageVersion$jscomp$inline_2058 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2058, - "19.2.0-www-classic-71797c87-20250430" + "19.2.0-www-classic-e9db3cc2-20250501" ) ); Internals.findDOMNode = function (componentOrElement) { @@ -19787,10 +19787,10 @@ Internals.Events = [ ]; var internals$jscomp$inline_2669 = { bundleType: 0, - version: "19.2.0-www-classic-71797c87-20250430", + version: "19.2.0-www-classic-e9db3cc2-20250501", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-classic-71797c87-20250430" + reconcilerVersion: "19.2.0-www-classic-e9db3cc2-20250501" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2670 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -20305,4 +20305,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.2.0-www-classic-71797c87-20250430"; +exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; diff --git a/compiled/facebook-www/ReactDOMTesting-prod.modern.js b/compiled/facebook-www/ReactDOMTesting-prod.modern.js index 2bae70644d..abf2c334c2 100644 --- a/compiled/facebook-www/ReactDOMTesting-prod.modern.js +++ b/compiled/facebook-www/ReactDOMTesting-prod.modern.js @@ -19491,14 +19491,14 @@ function getCrossOriginStringAs(as, input) { } var isomorphicReactPackageVersion$jscomp$inline_2048 = React.version; if ( - "19.2.0-www-modern-71797c87-20250430" !== + "19.2.0-www-modern-e9db3cc2-20250501" !== isomorphicReactPackageVersion$jscomp$inline_2048 ) throw Error( formatProdErrorMessage( 527, isomorphicReactPackageVersion$jscomp$inline_2048, - "19.2.0-www-modern-71797c87-20250430" + "19.2.0-www-modern-e9db3cc2-20250501" ) ); Internals.findDOMNode = function (componentOrElement) { @@ -19516,10 +19516,10 @@ Internals.Events = [ ]; var internals$jscomp$inline_2651 = { bundleType: 0, - version: "19.2.0-www-modern-71797c87-20250430", + version: "19.2.0-www-modern-e9db3cc2-20250501", rendererPackageName: "react-dom", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-modern-71797c87-20250430" + reconcilerVersion: "19.2.0-www-modern-e9db3cc2-20250501" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { var hook$jscomp$inline_2652 = __REACT_DEVTOOLS_GLOBAL_HOOK__; @@ -20034,4 +20034,4 @@ exports.useFormState = function (action, initialState, permalink) { exports.useFormStatus = function () { return ReactSharedInternals.H.useHostTransitionStatus(); }; -exports.version = "19.2.0-www-modern-71797c87-20250430"; +exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; diff --git a/compiled/facebook-www/ReactReconciler-dev.classic.js b/compiled/facebook-www/ReactReconciler-dev.classic.js index 147c377518..7ea680539d 100644 --- a/compiled/facebook-www/ReactReconciler-dev.classic.js +++ b/compiled/facebook-www/ReactReconciler-dev.classic.js @@ -21845,7 +21845,7 @@ __DEV__ && version: rendererVersion, rendererPackageName: rendererPackageName, currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-classic-71797c87-20250430" + reconcilerVersion: "19.2.0-www-classic-e9db3cc2-20250501" }; null !== extraDevToolsConfig && (internals.rendererConfig = extraDevToolsConfig); diff --git a/compiled/facebook-www/ReactReconciler-dev.modern.js b/compiled/facebook-www/ReactReconciler-dev.modern.js index 59821bc8c5..02673b2345 100644 --- a/compiled/facebook-www/ReactReconciler-dev.modern.js +++ b/compiled/facebook-www/ReactReconciler-dev.modern.js @@ -21626,7 +21626,7 @@ __DEV__ && version: rendererVersion, rendererPackageName: rendererPackageName, currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-modern-71797c87-20250430" + reconcilerVersion: "19.2.0-www-modern-e9db3cc2-20250501" }; null !== extraDevToolsConfig && (internals.rendererConfig = extraDevToolsConfig); diff --git a/compiled/facebook-www/ReactReconciler-prod.classic.js b/compiled/facebook-www/ReactReconciler-prod.classic.js index 3b963db58d..bc5bc1c0f4 100644 --- a/compiled/facebook-www/ReactReconciler-prod.classic.js +++ b/compiled/facebook-www/ReactReconciler-prod.classic.js @@ -14088,7 +14088,7 @@ module.exports = function ($$$config) { version: rendererVersion, rendererPackageName: rendererPackageName, currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-classic-71797c87-20250430" + reconcilerVersion: "19.2.0-www-classic-e9db3cc2-20250501" }; null !== extraDevToolsConfig && (internals.rendererConfig = extraDevToolsConfig); diff --git a/compiled/facebook-www/ReactReconciler-prod.modern.js b/compiled/facebook-www/ReactReconciler-prod.modern.js index 010e8fba31..5228b62d29 100644 --- a/compiled/facebook-www/ReactReconciler-prod.modern.js +++ b/compiled/facebook-www/ReactReconciler-prod.modern.js @@ -13805,7 +13805,7 @@ module.exports = function ($$$config) { version: rendererVersion, rendererPackageName: rendererPackageName, currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-modern-71797c87-20250430" + reconcilerVersion: "19.2.0-www-modern-e9db3cc2-20250501" }; null !== extraDevToolsConfig && (internals.rendererConfig = extraDevToolsConfig); diff --git a/compiled/facebook-www/ReactTestRenderer-dev.classic.js b/compiled/facebook-www/ReactTestRenderer-dev.classic.js index 6fda3155de..3f1dbe3cdf 100644 --- a/compiled/facebook-www/ReactTestRenderer-dev.classic.js +++ b/compiled/facebook-www/ReactTestRenderer-dev.classic.js @@ -15341,10 +15341,10 @@ __DEV__ && (function () { var internals = { bundleType: 1, - version: "19.2.0-www-classic-71797c87-20250430", + version: "19.2.0-www-classic-e9db3cc2-20250501", rendererPackageName: "react-test-renderer", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-classic-71797c87-20250430" + reconcilerVersion: "19.2.0-www-classic-e9db3cc2-20250501" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -15479,5 +15479,5 @@ __DEV__ && exports.unstable_batchedUpdates = function (fn, a) { return fn(a); }; - exports.version = "19.2.0-www-classic-71797c87-20250430"; + exports.version = "19.2.0-www-classic-e9db3cc2-20250501"; })(); diff --git a/compiled/facebook-www/ReactTestRenderer-dev.modern.js b/compiled/facebook-www/ReactTestRenderer-dev.modern.js index ac3261368b..d221b69756 100644 --- a/compiled/facebook-www/ReactTestRenderer-dev.modern.js +++ b/compiled/facebook-www/ReactTestRenderer-dev.modern.js @@ -15341,10 +15341,10 @@ __DEV__ && (function () { var internals = { bundleType: 1, - version: "19.2.0-www-modern-71797c87-20250430", + version: "19.2.0-www-modern-e9db3cc2-20250501", rendererPackageName: "react-test-renderer", currentDispatcherRef: ReactSharedInternals, - reconcilerVersion: "19.2.0-www-modern-71797c87-20250430" + reconcilerVersion: "19.2.0-www-modern-e9db3cc2-20250501" }; internals.overrideHookState = overrideHookState; internals.overrideHookStateDeletePath = overrideHookStateDeletePath; @@ -15479,5 +15479,5 @@ __DEV__ && exports.unstable_batchedUpdates = function (fn, a) { return fn(a); }; - exports.version = "19.2.0-www-modern-71797c87-20250430"; + exports.version = "19.2.0-www-modern-e9db3cc2-20250501"; })(); diff --git a/compiled/facebook-www/VERSION_CLASSIC b/compiled/facebook-www/VERSION_CLASSIC index 675a53d074..57d35b8ec5 100644 --- a/compiled/facebook-www/VERSION_CLASSIC +++ b/compiled/facebook-www/VERSION_CLASSIC @@ -1 +1 @@ -19.2.0-www-classic-71797c87-20250430 \ No newline at end of file +19.2.0-www-classic-e9db3cc2-20250501 \ No newline at end of file diff --git a/compiled/facebook-www/VERSION_MODERN b/compiled/facebook-www/VERSION_MODERN index b00800ae6d..1435e8d7a1 100644 --- a/compiled/facebook-www/VERSION_MODERN +++ b/compiled/facebook-www/VERSION_MODERN @@ -1 +1 @@ -19.2.0-www-modern-71797c87-20250430 \ No newline at end of file +19.2.0-www-modern-e9db3cc2-20250501 \ No newline at end of file