diff --git a/Libraries/Renderer/README.md b/Libraries/Renderer/README.md deleted file mode 100644 index 0462f897e8d2ed..00000000000000 --- a/Libraries/Renderer/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# React & React Native Versions - -This page describes how React and React Native versions interact each other. -The version alignment between the two frameworks relies on two syncronization points: - -1. The versions in the `package.json` of the new app template. For example [for React Native 0.68.1](https://github.com/facebook/react-native/blob/0.68-stable/template/package.json#L12-L15) the versions are aligned as follows: - -``` - "dependencies": { - "react": "17.0.2", - "react-native": "0.68.1" - }, -``` - -1. The React renderers **shipped** with React Native inside this folder, the [./Libraries/Renderer](https://github.com/facebook/react-native/tree/main/Libraries/Renderer) folder, of React Native. - -This practically means that you **can't bump** the version of React in your `package.json` to a later version, -as you will still be using the older renderer from the folder mentioned above. Bumping the react version in your `package.json` will lead to unexpected behaviors. - -For the sake of React 18, the first version of React Native compatible with React 18 is **0.69.0**. Users on React Native 0.68.0 and previous versions won't be able to use React 18. - -If you use the `react-native upgrade` command or the React Native Upgrade Helper, you'll bump to the correct React version once you upgrade React Native. diff --git a/Libraries/Renderer/REVISION b/Libraries/Renderer/REVISION index c9a2a7c8e0a927..b256daecab9b6a 100644 --- a/Libraries/Renderer/REVISION +++ b/Libraries/Renderer/REVISION @@ -1 +1 @@ -d300cebde2a63e742ccb8b6aa7b0f61db1ae29b4 \ No newline at end of file +256aefbea1449869620fb26f6ec695536ab453f5 \ No newline at end of file diff --git a/Libraries/Renderer/implementations/ReactFabric-dev.js b/Libraries/Renderer/implementations/ReactFabric-dev.js index 89b2d1153112db..814de0c69a9006 100644 --- a/Libraries/Renderer/implementations/ReactFabric-dev.js +++ b/Libraries/Renderer/implementations/ReactFabric-dev.js @@ -8,7 +8,7 @@ * @nolint * @providesModule ReactFabric-dev * @preventMunge - * @generated SignedSource<> + * @generated SignedSource<<6ffe3bde635c4012978cdb5508993518>> */ 'use strict'; @@ -7197,30 +7197,27 @@ function readContext(context) { return value; } -// An array of all update queues that received updates during the current // render. When this render exits, either because it finishes or because it is // interrupted, the interleaved updates will be transferred onto the main part // of the queue. -var interleavedQueues = null; -function pushInterleavedQueue(queue) { - if (interleavedQueues === null) { - interleavedQueues = [queue]; + +var concurrentQueues = null; +function pushConcurrentUpdateQueue(queue) { + if (concurrentQueues === null) { + concurrentQueues = [queue]; } else { - interleavedQueues.push(queue); + concurrentQueues.push(queue); } } -function hasInterleavedUpdates() { - return interleavedQueues !== null; -} -function enqueueInterleavedUpdates() { +function finishQueueingConcurrentUpdates() { // Transfer the interleaved updates onto the main queue. Each queue has a // `pending` field and an `interleaved` field. When they are not null, they // point to the last node in a circular linked list. We need to append the // interleaved list to the end of the pending list by joining them into a // single, circular list. - if (interleavedQueues !== null) { - for (var i = 0; i < interleavedQueues.length; i++) { - var queue = interleavedQueues[i]; + if (concurrentQueues !== null) { + for (var i = 0; i < concurrentQueues.length; i++) { + var queue = concurrentQueues[i]; var lastInterleavedUpdate = queue.interleaved; if (lastInterleavedUpdate !== null) { @@ -7238,7 +7235,121 @@ function enqueueInterleavedUpdates() { } } - interleavedQueues = null; + concurrentQueues = null; + } +} +function enqueueConcurrentHookUpdate(fiber, queue, update, lane) { + var interleaved = queue.interleaved; + + if (interleaved === null) { + // This is the first update. Create a circular list. + update.next = update; // At the end of the current render, this queue's interleaved updates will + // be transferred to the pending queue. + + pushConcurrentUpdateQueue(queue); + } else { + update.next = interleaved.next; + interleaved.next = update; + } + + queue.interleaved = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); +} +function enqueueConcurrentHookUpdateAndEagerlyBailout( + fiber, + queue, + update, + lane +) { + var interleaved = queue.interleaved; + + if (interleaved === null) { + // This is the first update. Create a circular list. + update.next = update; // At the end of the current render, this queue's interleaved updates will + // be transferred to the pending queue. + + pushConcurrentUpdateQueue(queue); + } else { + update.next = interleaved.next; + interleaved.next = update; + } + + queue.interleaved = update; +} +function enqueueConcurrentClassUpdate(fiber, queue, update, lane) { + var interleaved = queue.interleaved; + + if (interleaved === null) { + // This is the first update. Create a circular list. + update.next = update; // At the end of the current render, this queue's interleaved updates will + // be transferred to the pending queue. + + pushConcurrentUpdateQueue(queue); + } else { + update.next = interleaved.next; + interleaved.next = update; + } + + queue.interleaved = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); +} +function enqueueConcurrentRenderForLane(fiber, lane) { + return markUpdateLaneFromFiberToRoot(fiber, lane); +} // Calling this function outside this module should only be done for backwards +// compatibility and should always be accompanied by a warning. + +var unsafe_markUpdateLaneFromFiberToRoot = markUpdateLaneFromFiberToRoot; + +function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { + // TODO: We will detect and infinite update loop and throw even if this fiber + // has already unmounted. This isn't really necessary but it happens to be the + // current behavior we've used for several release cycles. Consider not + // performing this check if the updated fiber already unmounted, since it's + // not possible for that to cause an infinite update loop. + throwIfInfiniteUpdateLoopDetected(); // Update the source fiber's lanes + + sourceFiber.lanes = mergeLanes(sourceFiber.lanes, lane); + var alternate = sourceFiber.alternate; + + if (alternate !== null) { + alternate.lanes = mergeLanes(alternate.lanes, lane); + } + + { + if ( + alternate === null && + (sourceFiber.flags & (Placement | Hydrating)) !== NoFlags + ) { + warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber); + } + } // Walk the parent path to the root and update the child lanes. + + var node = sourceFiber; + var parent = sourceFiber.return; + + while (parent !== null) { + parent.childLanes = mergeLanes(parent.childLanes, lane); + alternate = parent.alternate; + + if (alternate !== null) { + alternate.childLanes = mergeLanes(alternate.childLanes, lane); + } else { + { + if ((parent.flags & (Placement | Hydrating)) !== NoFlags) { + warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber); + } + } + } + + node = parent; + parent = parent.return; + } + + if (node.tag === HostRoot) { + var root = node.stateNode; + return root; + } else { + return null; } } @@ -7304,40 +7415,11 @@ function enqueueUpdate(fiber, update, lane) { if (updateQueue === null) { // Only occurs if the fiber has been unmounted. - return; + return null; } var sharedQueue = updateQueue.shared; - if (isInterleavedUpdate(fiber)) { - var interleaved = sharedQueue.interleaved; - - if (interleaved === null) { - // This is the first update. Create a circular list. - update.next = update; // At the end of the current render, this queue's interleaved updates will - // be transferred to the pending queue. - - pushInterleavedQueue(sharedQueue); - } else { - update.next = interleaved.next; - interleaved.next = update; - } - - sharedQueue.interleaved = update; - } else { - var pending = sharedQueue.pending; - - if (pending === null) { - // This is the first update. Create a circular list. - update.next = update; - } else { - update.next = pending.next; - pending.next = update; - } - - sharedQueue.pending = update; - } - { if ( currentlyProcessingQueue === sharedQueue && @@ -7353,6 +7435,29 @@ function enqueueUpdate(fiber, update, lane) { didWarnUpdateInsideUpdate = true; } } + + if (isUnsafeClassRenderPhaseUpdate()) { + // This is an unsafe render phase update. Add directly to the update + // queue so we can process it immediately during the current render. + var pending = sharedQueue.pending; + + if (pending === null) { + // This is the first update. Create a circular list. + update.next = update; + } else { + update.next = pending.next; + pending.next = update; + } + + sharedQueue.pending = update; // Update the childLanes even though we're most likely already rendering + // this fiber. This is for backwards compatibility in the case where you + // update a different component during render phase than the one that is + // currently renderings (a pattern that is accompanied by a warning). + + return unsafe_markUpdateLaneFromFiberToRoot(fiber, lane); + } else { + return enqueueConcurrentClassUpdate(fiber, sharedQueue, update, lane); + } } function entangleTransitions(root, fiber, lane) { var updateQueue = fiber.updateQueue; @@ -7889,10 +7994,10 @@ var classComponentUpdater = { update.callback = callback; } - enqueueUpdate(fiber, update); - var root = scheduleUpdateOnFiber(fiber, lane, eventTime); + var root = enqueueUpdate(fiber, update, lane); if (root !== null) { + scheduleUpdateOnFiber(root, fiber, lane, eventTime); entangleTransitions(root, fiber, lane); } }, @@ -7912,10 +8017,10 @@ var classComponentUpdater = { update.callback = callback; } - enqueueUpdate(fiber, update); - var root = scheduleUpdateOnFiber(fiber, lane, eventTime); + var root = enqueueUpdate(fiber, update, lane); if (root !== null) { + scheduleUpdateOnFiber(root, fiber, lane, eventTime); entangleTransitions(root, fiber, lane); } }, @@ -7934,10 +8039,10 @@ var classComponentUpdater = { update.callback = callback; } - enqueueUpdate(fiber, update); - var root = scheduleUpdateOnFiber(fiber, lane, eventTime); + var root = enqueueUpdate(fiber, update, lane); if (root !== null) { + scheduleUpdateOnFiber(root, fiber, lane, eventTime); entangleTransitions(root, fiber, lane); } } @@ -8525,7 +8630,7 @@ function mountClassInstance(workInProgress, ctor, newProps, renderLanes) { } if (typeof instance.componentDidMount === "function") { - var fiberFlags = Update; + var fiberFlags = Update | LayoutStatic; workInProgress.flags |= fiberFlags; } @@ -8589,7 +8694,7 @@ function resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) { // If an update was already in progress, we should schedule an Update // effect even though we're bailing out, so that cWU/cDU are called. if (typeof instance.componentDidMount === "function") { - var fiberFlags = Update; + var fiberFlags = Update | LayoutStatic; workInProgress.flags |= fiberFlags; } @@ -8637,7 +8742,7 @@ function resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) { } if (typeof instance.componentDidMount === "function") { - var _fiberFlags = Update; + var _fiberFlags = Update | LayoutStatic; workInProgress.flags |= _fiberFlags; } @@ -8645,7 +8750,7 @@ function resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) { // If an update was already in progress, we should schedule an Update // effect even though we're bailing out, so that cWU/cDU are called. if (typeof instance.componentDidMount === "function") { - var _fiberFlags2 = Update; + var _fiberFlags2 = Update | LayoutStatic; workInProgress.flags |= _fiberFlags2; } // If shouldComponentUpdate returned false, we should still update the @@ -11318,7 +11423,11 @@ function checkIfSnapshotChanged(inst) { } function forceStoreRerender(fiber) { - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } } function mountState(initialState) { @@ -11462,7 +11571,7 @@ function updateInsertionEffect(create, deps) { } function mountLayoutEffect(create, deps) { - var fiberFlags = Update; + var fiberFlags = Update | LayoutStatic; return mountEffectImpl(fiberFlags, Layout, create, deps); } @@ -11516,7 +11625,7 @@ function mountImperativeHandle(ref, create, deps) { var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null; - var fiberFlags = Update; + var fiberFlags = Update | LayoutStatic; return mountEffectImpl( fiberFlags, @@ -11804,11 +11913,11 @@ function dispatchReducerAction(fiber, queue, action) { if (isRenderPhaseUpdate(fiber)) { enqueueRenderPhaseUpdate(queue, update); } else { - enqueueUpdate$1(fiber, queue, update); - var eventTime = requestEventTime(); - var root = scheduleUpdateOnFiber(fiber, lane, eventTime); + var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane); if (root !== null) { + var eventTime = requestEventTime(); + scheduleUpdateOnFiber(root, fiber, lane, eventTime); entangleTransitionUpdate(root, queue, lane); } } @@ -11837,7 +11946,6 @@ function dispatchSetState(fiber, queue, action) { if (isRenderPhaseUpdate(fiber)) { enqueueRenderPhaseUpdate(queue, update); } else { - enqueueUpdate$1(fiber, queue, update); var alternate = fiber.alternate; if ( @@ -11872,6 +11980,13 @@ function dispatchSetState(fiber, queue, action) { // It's still possible that we'll need to rebase this update later, // if the component re-renders for a different reason and by that // time the reducer has changed. + // TODO: Do we still need to entangle transitions in this case? + enqueueConcurrentHookUpdateAndEagerlyBailout( + fiber, + queue, + update, + lane + ); return; } } catch (error) { @@ -11884,10 +11999,11 @@ function dispatchSetState(fiber, queue, action) { } } - var eventTime = requestEventTime(); - var root = scheduleUpdateOnFiber(fiber, lane, eventTime); + var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane); if (root !== null) { + var eventTime = requestEventTime(); + scheduleUpdateOnFiber(root, fiber, lane, eventTime); entangleTransitionUpdate(root, queue, lane); } } @@ -11917,38 +12033,7 @@ function enqueueRenderPhaseUpdate(queue, update) { } queue.pending = update; -} - -function enqueueUpdate$1(fiber, queue, update, lane) { - if (isInterleavedUpdate(fiber)) { - var interleaved = queue.interleaved; - - if (interleaved === null) { - // This is the first update. Create a circular list. - update.next = update; // At the end of the current render, this queue's interleaved updates will - // be transferred to the pending queue. - - pushInterleavedQueue(queue); - } else { - update.next = interleaved.next; - interleaved.next = update; - } - - queue.interleaved = update; - } else { - var pending = queue.pending; - - if (pending === null) { - // This is the first update. Create a circular list. - update.next = update; - } else { - update.next = pending.next; - pending.next = update; - } - - queue.pending = update; - } -} +} // TODO: Move to ReactFiberConcurrentUpdates? function entangleTransitionUpdate(root, queue, lane) { if (isTransitionLane(lane)) { @@ -12996,13 +13081,22 @@ function transferActualDuration(fiber) { } } -function createCapturedValue(value, source) { +function createCapturedValueAtFiber(value, source) { // If the value is an error, call this function immediately after it is thrown // so the stack is accurate. return { value: value, source: source, - stack: getStackByFiberInDevAndProd(source) + stack: getStackByFiberInDevAndProd(source), + digest: null + }; +} +function createCapturedValue(value, digest, stack) { + return { + value: value, + source: null, + stack: stack != null ? stack : null, + digest: digest != null ? digest : null }; } @@ -13358,7 +13452,7 @@ function markSuspenseBoundaryShouldCapture( // prevent a bail out. var update = createUpdate(NoTimestamp, SyncLane); update.tag = ForceUpdate; - enqueueUpdate(sourceFiber, update); + enqueueUpdate(sourceFiber, update, SyncLane); } } // The source fiber did not complete. Mark it with Sync priority to // indicate that it still has pending work. @@ -13488,12 +13582,13 @@ function throwException( value = uncaughtSuspenseError; } - } // We didn't find a boundary that could handle this type of exception. Start + } + + value = createCapturedValueAtFiber(value, sourceFiber); + renderDidError(value); // We didn't find a boundary that could handle this type of exception. Start // over and traverse parent path again, this time treating the exception // as an error. - renderDidError(value); - value = createCapturedValue(value, sourceFiber); var workInProgress = returnFiber; do { @@ -14033,6 +14128,7 @@ function markRef(current, workInProgress) { ) { // Schedule a Ref effect workInProgress.flags |= Ref; + workInProgress.flags |= RefStatic; } } @@ -14131,7 +14227,7 @@ function updateClassComponent( var update = createClassErrorUpdate( workInProgress, - createCapturedValue(error$1, workInProgress), + createCapturedValueAtFiber(error$1, workInProgress), lane ); enqueueCapturedUpdate(workInProgress, update); @@ -15305,21 +15401,35 @@ function updateDehydratedSuspenseComponent( // This boundary is in a permanent fallback state. In this case, we'll never // get an update and we'll never be able to hydrate the final content. Let's just try the // client side render instead. - var _getSuspenseInstanceF = getSuspenseInstanceFallbackErrorDetails(), - errorMessage = _getSuspenseInstanceF.errorMessage; - - var error = errorMessage // eslint-disable-next-line react-internal/prod-error-codes - ? new Error(errorMessage) - : new Error( - "The server could not finish this Suspense boundary, likely " + - "due to an error during server rendering. Switched to " + - "client rendering." - ); + var digest, message, stack; + + { + var _getSuspenseInstanceF = getSuspenseInstanceFallbackErrorDetails(); + + digest = _getSuspenseInstanceF.digest; + message = _getSuspenseInstanceF.message; + stack = _getSuspenseInstanceF.stack; + } + + var error; + + if (message) { + // eslint-disable-next-line react-internal/prod-error-codes + error = new Error(message); + } else { + error = new Error( + "The server could not finish this Suspense boundary, likely " + + "due to an error during server rendering. Switched to " + + "client rendering." + ); + } + + var capturedValue = createCapturedValue(error, digest, stack); return retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, - error + capturedValue ); } // any context has changed, we need to treat is as if the input might have changed. @@ -15347,7 +15457,13 @@ function updateDehydratedSuspenseComponent( suspenseState.retryLane = attemptHydrationAtLane; // TODO: Ideally this would inherit the event time of the current render var eventTime = NoTimestamp; - scheduleUpdateOnFiber(current, attemptHydrationAtLane, eventTime); + enqueueConcurrentRenderForLane(current, attemptHydrationAtLane); + scheduleUpdateOnFiber( + root, + current, + attemptHydrationAtLane, + eventTime + ); } } // If we have scheduled higher pri work above, this will probably just abort the render // since we now have higher priority work, but in case it doesn't, we need to prepare to @@ -15356,10 +15472,8 @@ function updateDehydratedSuspenseComponent( // Delay having to do this as long as the suspense timeout allows us. renderDidSuspendDelayIfPossible(); - return retrySuspenseComponentWithoutHydrating( - current, - workInProgress, - renderLanes, + + var _capturedValue = createCapturedValue( new Error( "This Suspense boundary received an update before it finished " + "hydrating. This caused the boundary to switch to client rendering. " + @@ -15367,6 +15481,13 @@ function updateDehydratedSuspenseComponent( "in startTransition." ) ); + + return retrySuspenseComponentWithoutHydrating( + current, + workInProgress, + renderLanes, + _capturedValue + ); } else if (isSuspenseInstancePending()) { // This component is still pending more data from the server, so we can't hydrate its // content. We treat it as if this component suspended itself. It might seem as if @@ -15411,15 +15532,20 @@ function updateDehydratedSuspenseComponent( if (workInProgress.flags & ForceClientRender) { // Something errored during hydration. Try again without hydrating. workInProgress.flags &= ~ForceClientRender; - return retrySuspenseComponentWithoutHydrating( - current, - workInProgress, - renderLanes, + + var _capturedValue2 = createCapturedValue( new Error( "There was an error while hydrating this Suspense boundary. " + "Switched to client rendering." ) ); + + return retrySuspenseComponentWithoutHydrating( + current, + workInProgress, + renderLanes, + _capturedValue2 + ); } else if (workInProgress.memoizedState !== null) { // Something suspended and we should still be in dehydrated mode. // Leave the existing child in place. @@ -16564,7 +16690,7 @@ function markUpdate(workInProgress) { } function markRef$1(workInProgress) { - workInProgress.flags |= Ref; + workInProgress.flags |= Ref | RefStatic; } function hadNoMutationsEffects(current, completedWork) { @@ -17819,6 +17945,9 @@ function unwindWork(current, workInProgress, renderLanes) { case CacheComponent: return null; + case TracingMarkerComponent: + return null; + default: return null; } @@ -17884,6 +18013,10 @@ var didWarnAboutUndefinedSnapshotBeforeUpdate = null; { didWarnAboutUndefinedSnapshotBeforeUpdate = new Set(); } // Used during the commit phase to track the state of the Offscreen component stack. +// Allows us to avoid traversing the return path to find the nearest Offscreen ancestor. + +var offscreenSubtreeIsHidden = false; +var offscreenSubtreeWasHidden = false; var PossiblyWeakSet = typeof WeakSet === "function" ? WeakSet : Set; var nextEffect = null; // Used for Profiling builds to track updaters. @@ -17919,6 +18052,17 @@ var callComponentWillUnmountWithTimer = function(current, instance) { } }; // Capture errors so they don't interrupt mounting. +function safelyCallCommitHookLayoutEffectListMount( + current, + nearestMountedAncestor +) { + try { + commitHookEffectListMount(Layout, current); + } catch (error) { + captureCommitPhaseError(current, nearestMountedAncestor, error); + } +} // Capture errors so they don't interrupt unmounting. + function safelyCallComponentWillUnmount( current, nearestMountedAncestor, @@ -17931,6 +18075,26 @@ function safelyCallComponentWillUnmount( } } // Capture errors so they don't interrupt mounting. +function safelyCallComponentDidMount( + current, + nearestMountedAncestor, + instance +) { + try { + instance.componentDidMount(); + } catch (error) { + captureCommitPhaseError(current, nearestMountedAncestor, error); + } +} // Capture errors so they don't interrupt mounting. + +function safelyAttachRef(current, nearestMountedAncestor) { + try { + commitAttachRef(current); + } catch (error) { + captureCommitPhaseError(current, nearestMountedAncestor, error); + } +} + function safelyDetachRef(current, nearestMountedAncestor) { var ref = current.ref; @@ -18321,7 +18485,7 @@ function commitLayoutEffectOnFiber( case FunctionComponent: case ForwardRef: case SimpleMemoComponent: { - { + if (!offscreenSubtreeWasHidden) { // At this point layout effects have already been destroyed (during mutation phase). // This is done to prevent sibling component effects from interfering with each other, // e.g. a destroy function in one component should never override a ref set @@ -18345,7 +18509,7 @@ function commitLayoutEffectOnFiber( var instance = finishedWork.stateNode; if (finishedWork.flags & Update) { - { + if (!offscreenSubtreeWasHidden) { if (current === null) { // We could update instance props and state here, // but instead we rely on them being set during last render. @@ -18629,7 +18793,7 @@ function commitLayoutEffectOnFiber( } } - { + if (!offscreenSubtreeWasHidden) { { if (finishedWork.flags & Ref) { commitAttachRef(finishedWork); @@ -18638,6 +18802,45 @@ function commitLayoutEffectOnFiber( } } +function reappearLayoutEffectsOnFiber(node) { + // Turn on layout effects in a tree that previously disappeared. + // TODO (Offscreen) Check: flags & LayoutStatic + switch (node.tag) { + case FunctionComponent: + case ForwardRef: + case SimpleMemoComponent: { + if (node.mode & ProfileMode) { + try { + startLayoutEffectTimer(); + safelyCallCommitHookLayoutEffectListMount(node, node.return); + } finally { + recordLayoutEffectDuration(node); + } + } else { + safelyCallCommitHookLayoutEffectListMount(node, node.return); + } + + break; + } + + case ClassComponent: { + var instance = node.stateNode; + + if (typeof instance.componentDidMount === "function") { + safelyCallComponentDidMount(node, node.return, instance); + } + + safelyAttachRef(node, node.return); + break; + } + + case HostComponent: { + safelyAttachRef(node, node.return); + break; + } + } +} + function commitAttachRef(finishedWork) { var ref = finishedWork.ref; @@ -18822,7 +19025,7 @@ function commitDeletionEffectsOnFiber( switch (deletedFiber.tag) { case HostComponent: { - { + if (!offscreenSubtreeWasHidden) { safelyDetachRef(deletedFiber, nearestMountedAncestor); } // Intentional fallthrough to next branch } @@ -18864,7 +19067,7 @@ function commitDeletionEffectsOnFiber( case ForwardRef: case MemoComponent: case SimpleMemoComponent: { - { + if (!offscreenSubtreeWasHidden) { var updateQueue = deletedFiber.updateQueue; if (updateQueue !== null) { @@ -18920,7 +19123,7 @@ function commitDeletionEffectsOnFiber( } case ClassComponent: { - { + if (!offscreenSubtreeWasHidden) { safelyDetachRef(deletedFiber, nearestMountedAncestor); var instance = deletedFiber.stateNode; @@ -18951,7 +19154,26 @@ function commitDeletionEffectsOnFiber( } case OffscreenComponent: { - { + if (deletedFiber.mode & ConcurrentMode) { + // If this offscreen component is hidden, we already unmounted it. Before + // deleting the children, track that it's already unmounted so that we + // don't attempt to unmount the effects again. + // TODO: If the tree is hidden, in most cases we should be able to skip + // over the nested children entirely. An exception is we haven't yet found + // the topmost host node to delete, which we already track on the stack. + // But the other case is portals, which need to be detached no matter how + // deeply they are nested. We should use a subtree flag to track whether a + // subtree includes a nested portal. + var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; + offscreenSubtreeWasHidden = + prevOffscreenSubtreeWasHidden || deletedFiber.memoizedState !== null; + recursivelyTraverseDeletionEffects( + finishedRoot, + nearestMountedAncestor, + deletedFiber + ); + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; + } else { recursivelyTraverseDeletionEffects( finishedRoot, nearestMountedAncestor, @@ -19198,8 +19420,12 @@ function commitMutationEffectsOnFiber(finishedWork, root, lanes) { var offscreenFiber = finishedWork.child; if (offscreenFiber.flags & Visibility) { + var offscreenInstance = offscreenFiber.stateNode; var newState = offscreenFiber.memoizedState; - var isHidden = newState !== null; + var isHidden = newState !== null; // Track the current state on the Offscreen instance so we can + // read it during an event + + offscreenInstance.isHidden = isHidden; if (isHidden) { var wasHidden = @@ -19229,14 +19455,45 @@ function commitMutationEffectsOnFiber(finishedWork, root, lanes) { case OffscreenComponent: { var _wasHidden = current !== null && current.memoizedState !== null; - { + if (finishedWork.mode & ConcurrentMode) { + // Before committing the children, track on the stack whether this + // offscreen subtree was already hidden, so that we don't unmount the + // effects again. + var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || _wasHidden; + recursivelyTraverseMutationEffects(root, finishedWork); + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; + } else { recursivelyTraverseMutationEffects(root, finishedWork); } commitReconciliationEffects(finishedWork); if (flags & Visibility) { + var _offscreenInstance = finishedWork.stateNode; var _newState = finishedWork.memoizedState; + + var _isHidden = _newState !== null; + + var offscreenBoundary = finishedWork; // Track the current state on the Offscreen instance so we can + // read it during an event + + _offscreenInstance.isHidden = _isHidden; + + if (_isHidden) { + if (!_wasHidden) { + if ((offscreenBoundary.mode & ConcurrentMode) !== NoMode) { + nextEffect = offscreenBoundary; + var offscreenChild = offscreenBoundary.child; + + while (offscreenChild !== null) { + nextEffect = offscreenChild; + disappearLayoutEffects_begin(offscreenChild); + offscreenChild = offscreenChild.sibling; + } + } + } + } } return; @@ -19306,6 +19563,54 @@ function commitLayoutEffects_begin(subtreeRoot, root, committedLanes) { var fiber = nextEffect; var firstChild = fiber.child; + if (fiber.tag === OffscreenComponent && isModernRoot) { + // Keep track of the current Offscreen stack's state. + var isHidden = fiber.memoizedState !== null; + var newOffscreenSubtreeIsHidden = isHidden || offscreenSubtreeIsHidden; + + if (newOffscreenSubtreeIsHidden) { + // The Offscreen tree is hidden. Skip over its layout effects. + commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); + continue; + } else { + // TODO (Offscreen) Also check: subtreeFlags & LayoutMask + var current = fiber.alternate; + var wasHidden = current !== null && current.memoizedState !== null; + var newOffscreenSubtreeWasHidden = + wasHidden || offscreenSubtreeWasHidden; + var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden; + var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; // Traverse the Offscreen subtree with the current Offscreen as the root. + + offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden; + offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden; + + if (offscreenSubtreeWasHidden && !prevOffscreenSubtreeWasHidden) { + // This is the root of a reappearing boundary. Turn its layout effects + // back on. + nextEffect = fiber; + reappearLayoutEffects_begin(fiber); + } + + var child = firstChild; + + while (child !== null) { + nextEffect = child; + commitLayoutEffects_begin( + child, // New root; bubble back up to here and stop. + root, + committedLanes + ); + child = child.sibling; + } // Restore Offscreen state and resume in our-progress traversal. + + nextEffect = fiber; + offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden; + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; + commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); + continue; + } + } + if ((fiber.subtreeFlags & LayoutMask) !== NoFlags && firstChild !== null) { firstChild.return = fiber; nextEffect = firstChild; @@ -19349,6 +19654,151 @@ function commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes) { } } +function disappearLayoutEffects_begin(subtreeRoot) { + while (nextEffect !== null) { + var fiber = nextEffect; + var firstChild = fiber.child; // TODO (Offscreen) Check: flags & (RefStatic | LayoutStatic) + + switch (fiber.tag) { + case FunctionComponent: + case ForwardRef: + case MemoComponent: + case SimpleMemoComponent: { + if (fiber.mode & ProfileMode) { + try { + startLayoutEffectTimer(); + commitHookEffectListUnmount(Layout, fiber, fiber.return); + } finally { + recordLayoutEffectDuration(fiber); + } + } else { + commitHookEffectListUnmount(Layout, fiber, fiber.return); + } + + break; + } + + case ClassComponent: { + // TODO (Offscreen) Check: flags & RefStatic + safelyDetachRef(fiber, fiber.return); + var instance = fiber.stateNode; + + if (typeof instance.componentWillUnmount === "function") { + safelyCallComponentWillUnmount(fiber, fiber.return, instance); + } + + break; + } + + case HostComponent: { + safelyDetachRef(fiber, fiber.return); + break; + } + + case OffscreenComponent: { + // Check if this is a + var isHidden = fiber.memoizedState !== null; + + if (isHidden) { + // Nested Offscreen tree is already hidden. Don't disappear + // its effects. + disappearLayoutEffects_complete(subtreeRoot); + continue; + } + + break; + } + } // TODO (Offscreen) Check: subtreeFlags & LayoutStatic + + if (firstChild !== null) { + firstChild.return = fiber; + nextEffect = firstChild; + } else { + disappearLayoutEffects_complete(subtreeRoot); + } + } +} + +function disappearLayoutEffects_complete(subtreeRoot) { + while (nextEffect !== null) { + var fiber = nextEffect; + + if (fiber === subtreeRoot) { + nextEffect = null; + return; + } + + var sibling = fiber.sibling; + + if (sibling !== null) { + sibling.return = fiber.return; + nextEffect = sibling; + return; + } + + nextEffect = fiber.return; + } +} + +function reappearLayoutEffects_begin(subtreeRoot) { + while (nextEffect !== null) { + var fiber = nextEffect; + var firstChild = fiber.child; + + if (fiber.tag === OffscreenComponent) { + var isHidden = fiber.memoizedState !== null; + + if (isHidden) { + // Nested Offscreen tree is still hidden. Don't re-appear its effects. + reappearLayoutEffects_complete(subtreeRoot); + continue; + } + } // TODO (Offscreen) Check: subtreeFlags & LayoutStatic + + if (firstChild !== null) { + // This node may have been reused from a previous render, so we can't + // assume its return pointer is correct. + firstChild.return = fiber; + nextEffect = firstChild; + } else { + reappearLayoutEffects_complete(subtreeRoot); + } + } +} + +function reappearLayoutEffects_complete(subtreeRoot) { + while (nextEffect !== null) { + var fiber = nextEffect; // TODO (Offscreen) Check: flags & LayoutStatic + + setCurrentFiber(fiber); + + try { + reappearLayoutEffectsOnFiber(fiber); + } catch (error) { + captureCommitPhaseError(fiber, fiber.return, error); + } + + resetCurrentFiber(); + + if (fiber === subtreeRoot) { + nextEffect = null; + return; + } + + var sibling = fiber.sibling; + + if (sibling !== null) { + // This node may have been reused from a previous render, so we can't + // assume its return pointer is correct. + sibling.return = fiber.return; + nextEffect = sibling; + return; + } + + nextEffect = fiber.return; + } +} + function commitPassiveMountEffects( root, finishedWork, @@ -19900,21 +20350,13 @@ function requestRetryLane(fiber) { return claimNextRetryLane(); } -function scheduleUpdateOnFiber(fiber, lane, eventTime) { - checkForNestedUpdates(); - +function scheduleUpdateOnFiber(root, fiber, lane, eventTime) { { if (isRunningInsertionEffect) { error("useInsertionEffect must not schedule updates."); } } - var root = markUpdateLaneFromFiberToRoot(fiber, lane); - - if (root === null) { - return null; - } - { if (isFlushingPassiveEffects) { didScheduleUpdateDuringPassiveEffects = true; @@ -19945,7 +20387,6 @@ function scheduleUpdateOnFiber(fiber, lane, eventTime) { warnIfUpdatesNotWrappedWithActDEV(fiber); if (root === workInProgressRoot) { - // TODO: Consolidate with `isInterleavedUpdate` check // Received an update to a tree that's in the middle of rendering. Mark // that there was an interleaved update work on this root. Unless the // `deferRenderPhaseUpdateToNextBatch` flag is off and this is a render @@ -19986,76 +20427,14 @@ function scheduleUpdateOnFiber(fiber, lane, eventTime) { flushSyncCallbacksOnlyInLegacyMode(); } } - - return root; } -// work without treating it as a typical update that originates from an event; -// e.g. retrying a Suspense boundary isn't an update, but it does schedule work -// on a fiber. - -function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { - // Update the source fiber's lanes - sourceFiber.lanes = mergeLanes(sourceFiber.lanes, lane); - var alternate = sourceFiber.alternate; - - if (alternate !== null) { - alternate.lanes = mergeLanes(alternate.lanes, lane); - } - - { - if ( - alternate === null && - (sourceFiber.flags & (Placement | Hydrating)) !== NoFlags - ) { - warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber); - } - } // Walk the parent path to the root and update the child lanes. - - var node = sourceFiber; - var parent = sourceFiber.return; - - while (parent !== null) { - parent.childLanes = mergeLanes(parent.childLanes, lane); - alternate = parent.alternate; - - if (alternate !== null) { - alternate.childLanes = mergeLanes(alternate.childLanes, lane); - } else { - { - if ((parent.flags & (Placement | Hydrating)) !== NoFlags) { - warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber); - } - } - } - - node = parent; - parent = parent.return; - } - - if (node.tag === HostRoot) { - var root = node.stateNode; - return root; - } else { - return null; - } -} - -function isInterleavedUpdate(fiber, lane) { +function isUnsafeClassRenderPhaseUpdate(fiber) { + // Check if this is a render phase update. Only called by class components, + // which special (deprecated) behavior for UNSAFE_componentWillReceive props. return ( - // TODO: Optimize slightly by comparing to root that fiber belongs to. - // Requires some refactoring. Not a big deal though since it's rare for - // concurrent apps to have more than a single root. - (workInProgressRoot !== null || // If the interleaved updates queue hasn't been cleared yet, then - // we should treat this as an interleaved update, too. This is also a - // defensive coding measure in case a new update comes in between when - // rendering has finished and when the interleaved updates are transferred - // to the main queue. - hasInterleavedUpdates()) && - (fiber.mode & ConcurrentMode) !== NoMode && // If this is a render phase update (i.e. UNSAFE_componentWillReceiveProps), - // then don't treat this as an interleaved update. This pattern is - // accompanied by a warning but we haven't fully deprecated it yet. We can - // remove once the deferRenderPhaseUpdateToNextBatch flag is enabled. - (executionContext & RenderContext) === NoContext + // TODO: Remove outdated deferRenderPhaseUpdateToNextBatch experiment. We + // decided not to enable it. + (executionContext & RenderContext) !== NoContext ); } // Use this function to schedule a task for a root. There's only one task per // root; if a task was already scheduled, we'll check to make sure the priority @@ -20752,7 +21131,7 @@ function prepareFreshStack(root, lanes) { workInProgressRootPingedLanes = NoLanes; workInProgressRootConcurrentErrors = null; workInProgressRootRecoverableErrors = null; - enqueueInterleavedUpdates(); + finishQueueingConcurrentUpdates(); { ReactStrictModeWarnings.discardPendingWarnings(); @@ -21397,7 +21776,12 @@ function commitRootImpl( for (var i = 0; i < recoverableErrors.length; i++) { var recoverableError = recoverableErrors[i]; - onRecoverableError(recoverableError); + var componentStack = recoverableError.stack; + var digest = recoverableError.digest; + onRecoverableError(recoverableError.value, { + componentStack: componentStack, + digest: digest + }); } } @@ -21579,11 +21963,10 @@ function prepareToThrowUncaughtError(error) { var onUncaughtError = prepareToThrowUncaughtError; function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) { - var errorInfo = createCapturedValue(error, sourceFiber); + var errorInfo = createCapturedValueAtFiber(error, sourceFiber); var update = createRootErrorUpdate(rootFiber, errorInfo, SyncLane); - enqueueUpdate(rootFiber, update); + var root = enqueueUpdate(rootFiber, update, SyncLane); var eventTime = requestEventTime(); - var root = markUpdateLaneFromFiberToRoot(rootFiber, SyncLane); if (root !== null) { markRootUpdated(root, SyncLane, eventTime); @@ -21623,11 +22006,10 @@ function captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error$1) { (typeof instance.componentDidCatch === "function" && !isAlreadyFailedLegacyErrorBoundary(instance)) ) { - var errorInfo = createCapturedValue(error$1, sourceFiber); + var errorInfo = createCapturedValueAtFiber(error$1, sourceFiber); var update = createClassErrorUpdate(fiber, errorInfo, SyncLane); - enqueueUpdate(fiber, update); + var root = enqueueUpdate(fiber, update, SyncLane); var eventTime = requestEventTime(); - var root = markUpdateLaneFromFiberToRoot(fiber, SyncLane); if (root !== null) { markRootUpdated(root, SyncLane, eventTime); @@ -21714,7 +22096,7 @@ function retryTimedOutBoundary(boundaryFiber, retryLane) { } // TODO: Special case idle priority? var eventTime = requestEventTime(); - var root = markUpdateLaneFromFiberToRoot(boundaryFiber, retryLane); + var root = enqueueConcurrentRenderForLane(boundaryFiber, retryLane); if (root !== null) { markRootUpdated(root, retryLane, eventTime); @@ -21792,7 +22174,7 @@ function jnd(timeElapsed) { : ceil(timeElapsed / 1960) * 1960; } -function checkForNestedUpdates() { +function throwIfInfiniteUpdateLoopDetected() { if (nestedUpdateCount > NESTED_UPDATE_LIMIT) { nestedUpdateCount = 0; rootWithNestedUpdates = null; @@ -21830,7 +22212,6 @@ function flushRenderPhaseStrictModeWarningsInDEV() { } var didWarnStateUpdateForNotYetMountedComponent = null; - function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) { { if ((executionContext & RenderContext) !== NoContext) { @@ -21890,7 +22271,6 @@ function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) { } } } - var beginWork$1; { @@ -22416,7 +22796,11 @@ function scheduleFibersWithFamiliesRecursively( } if (needsRemount || needsRender) { - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var _root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (_root !== null) { + scheduleUpdateOnFiber(_root, fiber, SyncLane, NoTimestamp); + } } if (child !== null && !needsRemount) { @@ -23121,7 +23505,9 @@ function createFiberFromOffscreen(pendingProps, mode, lanes, key) { var fiber = createFiber(OffscreenComponent, pendingProps, key, mode); fiber.elementType = REACT_OFFSCREEN_TYPE; fiber.lanes = lanes; - var primaryChildInstance = {}; + var primaryChildInstance = { + isHidden: false + }; fiber.stateNode = primaryChildInstance; return fiber; } @@ -23293,7 +23679,7 @@ function createFiberRoot( return root; } -var ReactVersion = "18.2.0-next-d300cebde-20220601"; +var ReactVersion = "18.3.0-next-256aefbea-20220614"; function createPortal( children, @@ -23491,10 +23877,10 @@ function updateContainer(element, container, parentComponent, callback) { update.callback = callback; } - enqueueUpdate(current$1, update); - var root = scheduleUpdateOnFiber(current$1, lane, eventTime); + var root = enqueueUpdate(current$1, update, lane); if (root !== null) { + scheduleUpdateOnFiber(root, current$1, lane, eventTime); entangleTransitions(root, current$1, lane); } @@ -23654,7 +24040,11 @@ var setSuspenseHandler = null; // Shallow cloning props works as a workaround for now to bypass the bailout check. fiber.memoizedProps = assign({}, fiber.memoizedProps); - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } } }; @@ -23671,7 +24061,11 @@ var setSuspenseHandler = null; // Shallow cloning props works as a workaround for now to bypass the bailout check. fiber.memoizedProps = assign({}, fiber.memoizedProps); - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } } }; @@ -23688,7 +24082,11 @@ var setSuspenseHandler = null; // Shallow cloning props works as a workaround for now to bypass the bailout check. fiber.memoizedProps = assign({}, fiber.memoizedProps); - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } } }; // Support DevTools props for function components, forwardRef, memo, host components, etc. @@ -23699,7 +24097,11 @@ var setSuspenseHandler = null; fiber.alternate.pendingProps = fiber.pendingProps; } - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } }; overridePropsDeletePath = function(fiber, path) { @@ -23709,7 +24111,11 @@ var setSuspenseHandler = null; fiber.alternate.pendingProps = fiber.pendingProps; } - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } }; overridePropsRenamePath = function(fiber, oldPath, newPath) { @@ -23719,11 +24125,19 @@ var setSuspenseHandler = null; fiber.alternate.pendingProps = fiber.pendingProps; } - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } }; scheduleUpdate = function(fiber) { - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } }; setErrorHandler = function(newShouldErrorImpl) { diff --git a/Libraries/Renderer/implementations/ReactFabric-prod.js b/Libraries/Renderer/implementations/ReactFabric-prod.js index 9f83af5c81ecf0..76a90bd25d0d5b 100644 --- a/Libraries/Renderer/implementations/ReactFabric-prod.js +++ b/Libraries/Renderer/implementations/ReactFabric-prod.js @@ -8,7 +8,7 @@ * @nolint * @providesModule ReactFabric-prod * @preventMunge - * @generated SignedSource<> + * @generated SignedSource<<059820fbdc87a3f6f3260689efae3b1d>> */ "use strict"; @@ -1017,7 +1017,7 @@ eventPluginOrder = Array.prototype.slice.call([ "ReactNativeBridgeEventPlugin" ]); recomputePluginOrdering(); -var injectedNamesToPlugins$jscomp$inline_218 = { +var injectedNamesToPlugins$jscomp$inline_223 = { ResponderEventPlugin: ResponderEventPlugin, ReactNativeBridgeEventPlugin: { eventTypes: {}, @@ -1063,33 +1063,33 @@ var injectedNamesToPlugins$jscomp$inline_218 = { } } }, - isOrderingDirty$jscomp$inline_219 = !1, - pluginName$jscomp$inline_220; -for (pluginName$jscomp$inline_220 in injectedNamesToPlugins$jscomp$inline_218) + isOrderingDirty$jscomp$inline_224 = !1, + pluginName$jscomp$inline_225; +for (pluginName$jscomp$inline_225 in injectedNamesToPlugins$jscomp$inline_223) if ( - injectedNamesToPlugins$jscomp$inline_218.hasOwnProperty( - pluginName$jscomp$inline_220 + injectedNamesToPlugins$jscomp$inline_223.hasOwnProperty( + pluginName$jscomp$inline_225 ) ) { - var pluginModule$jscomp$inline_221 = - injectedNamesToPlugins$jscomp$inline_218[pluginName$jscomp$inline_220]; + var pluginModule$jscomp$inline_226 = + injectedNamesToPlugins$jscomp$inline_223[pluginName$jscomp$inline_225]; if ( - !namesToPlugins.hasOwnProperty(pluginName$jscomp$inline_220) || - namesToPlugins[pluginName$jscomp$inline_220] !== - pluginModule$jscomp$inline_221 + !namesToPlugins.hasOwnProperty(pluginName$jscomp$inline_225) || + namesToPlugins[pluginName$jscomp$inline_225] !== + pluginModule$jscomp$inline_226 ) { - if (namesToPlugins[pluginName$jscomp$inline_220]) + if (namesToPlugins[pluginName$jscomp$inline_225]) throw Error( "EventPluginRegistry: Cannot inject two different event plugins using the same name, `" + - (pluginName$jscomp$inline_220 + "`.") + (pluginName$jscomp$inline_225 + "`.") ); namesToPlugins[ - pluginName$jscomp$inline_220 - ] = pluginModule$jscomp$inline_221; - isOrderingDirty$jscomp$inline_219 = !0; + pluginName$jscomp$inline_225 + ] = pluginModule$jscomp$inline_226; + isOrderingDirty$jscomp$inline_224 = !0; } } -isOrderingDirty$jscomp$inline_219 && recomputePluginOrdering(); +isOrderingDirty$jscomp$inline_224 && recomputePluginOrdering(); function getInstanceFromInstance(instanceHandle) { return instanceHandle; } @@ -2325,8 +2325,40 @@ function readContext(context) { } else lastContextDependency = lastContextDependency.next = context; return value; } -var interleavedQueues = null, - hasForceUpdate = !1; +var concurrentQueues = null; +function pushConcurrentUpdateQueue(queue) { + null === concurrentQueues + ? (concurrentQueues = [queue]) + : concurrentQueues.push(queue); +} +function enqueueConcurrentHookUpdate(fiber, queue, update, lane) { + var interleaved = queue.interleaved; + null === interleaved + ? ((update.next = update), pushConcurrentUpdateQueue(queue)) + : ((update.next = interleaved.next), (interleaved.next = update)); + queue.interleaved = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); +} +function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { + if (50 < nestedUpdateCount) + throw ((nestedUpdateCount = 0), + (rootWithNestedUpdates = null), + Error( + "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops." + )); + sourceFiber.lanes |= lane; + var alternate = sourceFiber.alternate; + null !== alternate && (alternate.lanes |= lane); + alternate = sourceFiber; + for (sourceFiber = sourceFiber.return; null !== sourceFiber; ) + (sourceFiber.childLanes |= lane), + (alternate = sourceFiber.alternate), + null !== alternate && (alternate.childLanes |= lane), + (alternate = sourceFiber), + (sourceFiber = sourceFiber.return); + return 3 === alternate.tag ? alternate.stateNode : null; +} +var hasForceUpdate = !1; function initializeUpdateQueue(fiber) { fiber.updateQueue = { baseState: fiber.memoizedState, @@ -2357,24 +2389,24 @@ function createUpdate(eventTime, lane) { next: null }; } -function enqueueUpdate(fiber, update) { +function enqueueUpdate(fiber, update, lane) { var updateQueue = fiber.updateQueue; - null !== updateQueue && - ((updateQueue = updateQueue.shared), - isInterleavedUpdate(fiber) - ? ((fiber = updateQueue.interleaved), - null === fiber - ? ((update.next = update), - null === interleavedQueues - ? (interleavedQueues = [updateQueue]) - : interleavedQueues.push(updateQueue)) - : ((update.next = fiber.next), (fiber.next = update)), - (updateQueue.interleaved = update)) - : ((fiber = updateQueue.pending), - null === fiber - ? (update.next = update) - : ((update.next = fiber.next), (fiber.next = update)), - (updateQueue.pending = update))); + if (null === updateQueue) return null; + updateQueue = updateQueue.shared; + if (0 !== (executionContext & 2)) { + var pending = updateQueue.pending; + null === pending + ? (update.next = update) + : ((update.next = pending.next), (pending.next = update)); + updateQueue.pending = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); + } + pending = updateQueue.interleaved; + null === pending + ? ((update.next = update), pushConcurrentUpdateQueue(updateQueue)) + : ((update.next = pending.next), (pending.next = update)); + updateQueue.interleaved = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); } function entangleTransitions(root, fiber, lane) { fiber = fiber.updateQueue; @@ -2611,9 +2643,10 @@ var classComponentUpdater = { update = createUpdate(eventTime, lane); update.payload = payload; void 0 !== callback && null !== callback && (update.callback = callback); - enqueueUpdate(inst, update); - payload = scheduleUpdateOnFiber(inst, lane, eventTime); - null !== payload && entangleTransitions(payload, inst, lane); + payload = enqueueUpdate(inst, update, lane); + null !== payload && + (scheduleUpdateOnFiber(payload, inst, lane, eventTime), + entangleTransitions(payload, inst, lane)); }, enqueueReplaceState: function(inst, payload, callback) { inst = inst._reactInternals; @@ -2623,9 +2656,10 @@ var classComponentUpdater = { update.tag = 1; update.payload = payload; void 0 !== callback && null !== callback && (update.callback = callback); - enqueueUpdate(inst, update); - payload = scheduleUpdateOnFiber(inst, lane, eventTime); - null !== payload && entangleTransitions(payload, inst, lane); + payload = enqueueUpdate(inst, update, lane); + null !== payload && + (scheduleUpdateOnFiber(payload, inst, lane, eventTime), + entangleTransitions(payload, inst, lane)); }, enqueueForceUpdate: function(inst, callback) { inst = inst._reactInternals; @@ -2634,9 +2668,10 @@ var classComponentUpdater = { update = createUpdate(eventTime, lane); update.tag = 2; void 0 !== callback && null !== callback && (update.callback = callback); - enqueueUpdate(inst, update); - callback = scheduleUpdateOnFiber(inst, lane, eventTime); - null !== callback && entangleTransitions(callback, inst, lane); + callback = enqueueUpdate(inst, update, lane); + null !== callback && + (scheduleUpdateOnFiber(callback, inst, lane, eventTime), + entangleTransitions(callback, inst, lane)); } }; function checkShouldComponentUpdate( @@ -2727,7 +2762,7 @@ function mountClassInstance(workInProgress, ctor, newProps, renderLanes) { processUpdateQueue(workInProgress, newProps, instance, renderLanes), (instance.state = workInProgress.memoizedState)); "function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4); + (workInProgress.flags |= 4194308); } function coerceRef(returnFiber, current, element) { returnFiber = element.ref; @@ -3741,11 +3776,11 @@ function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) { function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) { inst.value = nextSnapshot; inst.getSnapshot = getSnapshot; - checkIfSnapshotChanged(inst) && scheduleUpdateOnFiber(fiber, 1, -1); + checkIfSnapshotChanged(inst) && forceStoreRerender(fiber); } function subscribeToStore(fiber, inst, subscribe) { return subscribe(function() { - checkIfSnapshotChanged(inst) && scheduleUpdateOnFiber(fiber, 1, -1); + checkIfSnapshotChanged(inst) && forceStoreRerender(fiber); }); } function checkIfSnapshotChanged(inst) { @@ -3758,6 +3793,10 @@ function checkIfSnapshotChanged(inst) { return !0; } } +function forceStoreRerender(fiber) { + var root = markUpdateLaneFromFiberToRoot(fiber, 1); + null !== root && scheduleUpdateOnFiber(root, fiber, 1, -1); +} function mountState(initialState) { var hook = mountWorkInProgressHook(); "function" === typeof initialState && (initialState = initialState()); @@ -3928,12 +3967,15 @@ function dispatchReducerAction(fiber, queue, action) { eagerState: null, next: null }; - isRenderPhaseUpdate(fiber) - ? enqueueRenderPhaseUpdate(queue, action) - : (enqueueUpdate$1(fiber, queue, action), - (action = requestEventTime()), - (fiber = scheduleUpdateOnFiber(fiber, lane, action)), - null !== fiber && entangleTransitionUpdate(fiber, queue, lane)); + if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, action); + else if ( + ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)), + null !== action) + ) { + var eventTime = requestEventTime(); + scheduleUpdateOnFiber(action, fiber, lane, eventTime); + entangleTransitionUpdate(action, queue, lane); + } } function dispatchSetState(fiber, queue, action) { var lane = requestUpdateLane(fiber), @@ -3946,7 +3988,6 @@ function dispatchSetState(fiber, queue, action) { }; if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update); else { - enqueueUpdate$1(fiber, queue, update); var alternate = fiber.alternate; if ( 0 === fiber.lanes && @@ -3958,13 +3999,22 @@ function dispatchSetState(fiber, queue, action) { eagerState = alternate(currentState, action); update.hasEagerState = !0; update.eagerState = eagerState; - if (objectIs(eagerState, currentState)) return; + if (objectIs(eagerState, currentState)) { + var interleaved = queue.interleaved; + null === interleaved + ? ((update.next = update), pushConcurrentUpdateQueue(queue)) + : ((update.next = interleaved.next), (interleaved.next = update)); + queue.interleaved = update; + return; + } } catch (error) { } finally { } - action = requestEventTime(); - fiber = scheduleUpdateOnFiber(fiber, lane, action); - null !== fiber && entangleTransitionUpdate(fiber, queue, lane); + action = enqueueConcurrentHookUpdate(fiber, queue, update, lane); + null !== action && + ((update = requestEventTime()), + scheduleUpdateOnFiber(action, fiber, lane, update), + entangleTransitionUpdate(action, queue, lane)); } } function isRenderPhaseUpdate(fiber) { @@ -3982,22 +4032,6 @@ function enqueueRenderPhaseUpdate(queue, update) { : ((update.next = pending.next), (pending.next = update)); queue.pending = update; } -function enqueueUpdate$1(fiber, queue, update) { - isInterleavedUpdate(fiber) - ? ((fiber = queue.interleaved), - null === fiber - ? ((update.next = update), - null === interleavedQueues - ? (interleavedQueues = [queue]) - : interleavedQueues.push(queue)) - : ((update.next = fiber.next), (fiber.next = update)), - (queue.interleaved = update)) - : ((fiber = queue.pending), - null === fiber - ? (update.next = update) - : ((update.next = fiber.next), (fiber.next = update)), - (queue.pending = update)); -} function entangleTransitionUpdate(root, queue, lane) { if (0 !== (lane & 4194240)) { var queueLanes = queue.lanes; @@ -4041,14 +4075,14 @@ var ContextOnlyDispatcher = { useImperativeHandle: function(ref, create, deps) { deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null; return mountEffectImpl( - 4, + 4194308, 4, imperativeHandleEffect.bind(null, create, ref), deps ); }, useLayoutEffect: function(create, deps) { - return mountEffectImpl(4, 4, create, deps); + return mountEffectImpl(4194308, 4, create, deps); }, useInsertionEffect: function(create, deps) { return mountEffectImpl(4, 2, create, deps); @@ -4193,7 +4227,7 @@ var ContextOnlyDispatcher = { useId: updateId, unstable_isNewReconciler: !1 }; -function createCapturedValue(value, source) { +function createCapturedValueAtFiber(value, source) { try { var info = "", node = source; @@ -4204,7 +4238,20 @@ function createCapturedValue(value, source) { JSCompiler_inline_result = "\nError generating stack: " + x.message + "\n" + x.stack; } - return { value: value, source: source, stack: JSCompiler_inline_result }; + return { + value: value, + source: source, + stack: JSCompiler_inline_result, + digest: null + }; +} +function createCapturedValue(value, digest, stack) { + return { + value: value, + source: null, + stack: null != stack ? stack : null, + digest: null != digest ? digest : null + }; } if ( "function" !== @@ -4468,7 +4515,7 @@ function markRef(current, workInProgress) { (null === current && null !== ref) || (null !== current && current.ref !== ref) ) - workInProgress.flags |= 512; + (workInProgress.flags |= 512), (workInProgress.flags |= 2097152); } function updateFunctionComponent( current, @@ -4580,9 +4627,9 @@ function updateClassComponent( "function" === typeof instance.UNSAFE_componentWillMount && instance.UNSAFE_componentWillMount()), "function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4)) + (workInProgress.flags |= 4194308)) : ("function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4), + (workInProgress.flags |= 4194308), (workInProgress.memoizedProps = nextProps), (workInProgress.memoizedState = oldContext)), (instance.props = nextProps), @@ -4590,7 +4637,7 @@ function updateClassComponent( (instance.context = contextType), (nextProps = oldProps)) : ("function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4), + (workInProgress.flags |= 4194308), (nextProps = !1)); } else { instance = workInProgress.stateNode; @@ -4930,13 +4977,16 @@ function updateDehydratedSuspenseComponent( if (workInProgress.flags & 256) return ( (workInProgress.flags &= -257), + (suspenseState = createCapturedValue( + Error( + "There was an error while hydrating this Suspense boundary. Switched to client rendering." + ) + )), retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, - Error( - "There was an error while hydrating this Suspense boundary. Switched to client rendering." - ) + suspenseState ) ); if (null !== workInProgress.memoizedState) @@ -4981,16 +5031,19 @@ function updateDehydratedSuspenseComponent( ); if (shim$1()) return ( - (suspenseState = shim$1().errorMessage), + (suspenseState = shim$1().digest), + (suspenseState = createCapturedValue( + Error( + "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." + ), + suspenseState, + void 0 + )), retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, suspenseState - ? Error(suspenseState) - : Error( - "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." - ) ) ); didSuspend = 0 !== (renderLanes & current.childLanes); @@ -5033,23 +5086,27 @@ function updateDehydratedSuspenseComponent( default: didSuspend = 0; } - nextProps = + didSuspend = 0 !== (didSuspend & (nextProps.suspendedLanes | renderLanes)) ? 0 : didSuspend; - 0 !== nextProps && - nextProps !== suspenseState.retryLane && - ((suspenseState.retryLane = nextProps), - scheduleUpdateOnFiber(current, nextProps, -1)); + 0 !== didSuspend && + didSuspend !== suspenseState.retryLane && + ((suspenseState.retryLane = didSuspend), + markUpdateLaneFromFiberToRoot(current, didSuspend), + scheduleUpdateOnFiber(nextProps, current, didSuspend, -1)); } renderDidSuspendDelayIfPossible(); + suspenseState = createCapturedValue( + Error( + "This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition." + ) + ); return retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, - Error( - "This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition." - ) + suspenseState ); } if (shim$1()) @@ -5450,14 +5507,14 @@ function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) { break; case "collapsed": lastTailNode = renderState.tail; - for (var lastTailNode$60 = null; null !== lastTailNode; ) - null !== lastTailNode.alternate && (lastTailNode$60 = lastTailNode), + for (var lastTailNode$62 = null; null !== lastTailNode; ) + null !== lastTailNode.alternate && (lastTailNode$62 = lastTailNode), (lastTailNode = lastTailNode.sibling); - null === lastTailNode$60 + null === lastTailNode$62 ? hasRenderedATailFallback || null === renderState.tail ? (renderState.tail = null) : (renderState.tail.sibling = null) - : (lastTailNode$60.sibling = null); + : (lastTailNode$62.sibling = null); } } function bubbleProperties(completedWork) { @@ -5467,19 +5524,19 @@ function bubbleProperties(completedWork) { newChildLanes = 0, subtreeFlags = 0; if (didBailout) - for (var child$61 = completedWork.child; null !== child$61; ) - (newChildLanes |= child$61.lanes | child$61.childLanes), - (subtreeFlags |= child$61.subtreeFlags & 14680064), - (subtreeFlags |= child$61.flags & 14680064), - (child$61.return = completedWork), - (child$61 = child$61.sibling); + for (var child$63 = completedWork.child; null !== child$63; ) + (newChildLanes |= child$63.lanes | child$63.childLanes), + (subtreeFlags |= child$63.subtreeFlags & 14680064), + (subtreeFlags |= child$63.flags & 14680064), + (child$63.return = completedWork), + (child$63 = child$63.sibling); else - for (child$61 = completedWork.child; null !== child$61; ) - (newChildLanes |= child$61.lanes | child$61.childLanes), - (subtreeFlags |= child$61.subtreeFlags), - (subtreeFlags |= child$61.flags), - (child$61.return = completedWork), - (child$61 = child$61.sibling); + for (child$63 = completedWork.child; null !== child$63; ) + (newChildLanes |= child$63.lanes | child$63.childLanes), + (subtreeFlags |= child$63.subtreeFlags), + (subtreeFlags |= child$63.flags), + (child$63.return = completedWork), + (child$63 = child$63.sibling); completedWork.subtreeFlags |= subtreeFlags; completedWork.childLanes = newChildLanes; return didBailout; @@ -5539,7 +5596,8 @@ function completeWork(current, workInProgress, renderLanes) { newProps, renderLanes ), - current.ref !== workInProgress.ref && (workInProgress.flags |= 512); + current.ref !== workInProgress.ref && + (workInProgress.flags |= 2097664); else { if (!newProps) { if (null === workInProgress.stateNode) @@ -5575,7 +5633,7 @@ function completeWork(current, workInProgress, renderLanes) { current = { node: renderLanes, canonical: current }; appendAllChildren(current, workInProgress, !1, !1); workInProgress.stateNode = current; - null !== workInProgress.ref && (workInProgress.flags |= 512); + null !== workInProgress.ref && (workInProgress.flags |= 2097664); } bubbleProperties(workInProgress); return null; @@ -5859,11 +5917,15 @@ function unwindWork(current, workInProgress) { return popRenderLanes(), null; case 24: return null; + case 25: + return null; default: return null; } } -var PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set, +var offscreenSubtreeIsHidden = !1, + offscreenSubtreeWasHidden = !1, + PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set, nextEffect = null; function safelyDetachRef(current, nearestMountedAncestor) { var ref = current.ref; @@ -5971,13 +6033,29 @@ function commitHookEffectListMount(flags, finishedWork) { var effect = (finishedWork = finishedWork.next); do { if ((effect.tag & flags) === flags) { - var create$73 = effect.create; - effect.destroy = create$73(); + var create$75 = effect.create; + effect.destroy = create$75(); } effect = effect.next; } while (effect !== finishedWork); } } +function commitAttachRef(finishedWork) { + var ref = finishedWork.ref; + if (null !== ref) { + var instance = finishedWork.stateNode; + switch (finishedWork.tag) { + case 5: + finishedWork = instance.canonical; + break; + default: + finishedWork = instance; + } + "function" === typeof ref + ? ref(finishedWork) + : (ref.current = finishedWork); + } +} function detachFiberAfterEffects(fiber) { var alternate = fiber.alternate; null !== alternate && @@ -6014,7 +6092,8 @@ function commitDeletionEffectsOnFiber( } catch (err) {} switch (deletedFiber.tag) { case 5: - safelyDetachRef(deletedFiber, nearestMountedAncestor); + offscreenSubtreeWasHidden || + safelyDetachRef(deletedFiber, nearestMountedAncestor); case 6: recursivelyTraverseDeletionEffects( finishedRoot, @@ -6036,27 +6115,33 @@ function commitDeletionEffectsOnFiber( case 11: case 14: case 15: - var updateQueue = deletedFiber.updateQueue; - if ( - null !== updateQueue && - ((updateQueue = updateQueue.lastEffect), null !== updateQueue) - ) { - var effect = (updateQueue = updateQueue.next); - do { - var _effect = effect, - destroy = _effect.destroy; - _effect = _effect.tag; - void 0 !== destroy && - (0 !== (_effect & 2) - ? safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy) - : 0 !== (_effect & 4) && - safelyCallDestroy( - deletedFiber, - nearestMountedAncestor, - destroy - )); - effect = effect.next; - } while (effect !== updateQueue); + if (!offscreenSubtreeWasHidden) { + var updateQueue = deletedFiber.updateQueue; + if ( + null !== updateQueue && + ((updateQueue = updateQueue.lastEffect), null !== updateQueue) + ) { + var effect = (updateQueue = updateQueue.next); + do { + var _effect = effect, + destroy = _effect.destroy; + _effect = _effect.tag; + void 0 !== destroy && + (0 !== (_effect & 2) + ? safelyCallDestroy( + deletedFiber, + nearestMountedAncestor, + destroy + ) + : 0 !== (_effect & 4) && + safelyCallDestroy( + deletedFiber, + nearestMountedAncestor, + destroy + )); + effect = effect.next; + } while (effect !== updateQueue); + } } recursivelyTraverseDeletionEffects( finishedRoot, @@ -6065,9 +6150,12 @@ function commitDeletionEffectsOnFiber( ); break; case 1: - safelyDetachRef(deletedFiber, nearestMountedAncestor); - updateQueue = deletedFiber.stateNode; - if ("function" === typeof updateQueue.componentWillUnmount) + if ( + !offscreenSubtreeWasHidden && + (safelyDetachRef(deletedFiber, nearestMountedAncestor), + (updateQueue = deletedFiber.stateNode), + "function" === typeof updateQueue.componentWillUnmount) + ) try { (updateQueue.props = deletedFiber.memoizedProps), (updateQueue.state = deletedFiber.memoizedState), @@ -6089,11 +6177,21 @@ function commitDeletionEffectsOnFiber( ); break; case 22: - recursivelyTraverseDeletionEffects( - finishedRoot, - nearestMountedAncestor, - deletedFiber - ); + deletedFiber.mode & 1 + ? ((offscreenSubtreeWasHidden = + (updateQueue = offscreenSubtreeWasHidden) || + null !== deletedFiber.memoizedState), + recursivelyTraverseDeletionEffects( + finishedRoot, + nearestMountedAncestor, + deletedFiber + ), + (offscreenSubtreeWasHidden = updateQueue)) + : recursivelyTraverseDeletionEffects( + finishedRoot, + nearestMountedAncestor, + deletedFiber + ); break; default: recursivelyTraverseDeletionEffects( @@ -6155,8 +6253,8 @@ function commitMutationEffectsOnFiber(finishedWork, root) { } try { commitHookEffectListUnmount(5, finishedWork, finishedWork.return); - } catch (error$77) { - captureCommitPhaseError(finishedWork, finishedWork.return, error$77); + } catch (error$79) { + captureCommitPhaseError(finishedWork, finishedWork.return, error$79); } } break; @@ -6191,14 +6289,79 @@ function commitMutationEffectsOnFiber(finishedWork, root) { commitReconciliationEffects(finishedWork); root = finishedWork.child; root.flags & 8192 && - null !== root.memoizedState && - (null === root.alternate || null === root.alternate.memoizedState) && - (globalMostRecentFallbackTime = now()); + ((current = null !== root.memoizedState), + (root.stateNode.isHidden = current), + !current || + (null !== root.alternate && null !== root.alternate.memoizedState) || + (globalMostRecentFallbackTime = now())); flags & 4 && attachSuspenseRetryListeners(finishedWork); break; case 22: - recursivelyTraverseMutationEffects(root, finishedWork); + current = null !== current && null !== current.memoizedState; + if (finishedWork.mode & 1) { + var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || current; + recursivelyTraverseMutationEffects(root, finishedWork); + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; + } else recursivelyTraverseMutationEffects(root, finishedWork); commitReconciliationEffects(finishedWork); + if ( + flags & 8192 && + ((flags = null !== finishedWork.memoizedState), + (finishedWork.stateNode.isHidden = flags) && + !current && + 0 !== (finishedWork.mode & 1)) + ) + for ( + nextEffect = finishedWork, finishedWork = finishedWork.child; + null !== finishedWork; + + ) { + for (flags = nextEffect = finishedWork; null !== nextEffect; ) { + root = nextEffect; + current = root.child; + switch (root.tag) { + case 0: + case 11: + case 14: + case 15: + commitHookEffectListUnmount(4, root, root.return); + break; + case 1: + safelyDetachRef(root, root.return); + var instance = root.stateNode; + if ("function" === typeof instance.componentWillUnmount) { + prevOffscreenSubtreeWasHidden = root; + var nearestMountedAncestor = root.return; + try { + var current$jscomp$0 = prevOffscreenSubtreeWasHidden; + instance.props = current$jscomp$0.memoizedProps; + instance.state = current$jscomp$0.memoizedState; + instance.componentWillUnmount(); + } catch (error) { + captureCommitPhaseError( + prevOffscreenSubtreeWasHidden, + nearestMountedAncestor, + error + ); + } + } + break; + case 5: + safelyDetachRef(root, root.return); + break; + case 22: + if (null !== root.memoizedState) { + disappearLayoutEffects_complete(flags); + continue; + } + } + null !== current + ? ((current.return = root), (nextEffect = current)) + : disappearLayoutEffects_complete(flags); + } + finishedWork = finishedWork.sibling; + } break; case 19: recursivelyTraverseMutationEffects(root, finishedWork); @@ -6217,121 +6380,229 @@ function commitReconciliationEffects(finishedWork) { flags & 2 && (finishedWork.flags &= -3); flags & 4096 && (finishedWork.flags &= -4097); } -function commitLayoutEffects(finishedWork) { - for (nextEffect = finishedWork; null !== nextEffect; ) { +function commitLayoutEffects(finishedWork, root, committedLanes) { + nextEffect = finishedWork; + commitLayoutEffects_begin(finishedWork, root, committedLanes); +} +function commitLayoutEffects_begin(subtreeRoot, root, committedLanes) { + for (var isModernRoot = 0 !== (subtreeRoot.mode & 1); null !== nextEffect; ) { var fiber = nextEffect, firstChild = fiber.child; - if (0 !== (fiber.subtreeFlags & 8772) && null !== firstChild) - (firstChild.return = fiber), (nextEffect = firstChild); - else - for (fiber = finishedWork; null !== nextEffect; ) { - firstChild = nextEffect; - if (0 !== (firstChild.flags & 8772)) { - var current = firstChild.alternate; - try { - if (0 !== (firstChild.flags & 8772)) - switch (firstChild.tag) { - case 0: - case 11: - case 15: - commitHookEffectListMount(5, firstChild); - break; - case 1: - var instance = firstChild.stateNode; - if (firstChild.flags & 4) - if (null === current) instance.componentDidMount(); - else { - var prevProps = - firstChild.elementType === firstChild.type - ? current.memoizedProps - : resolveDefaultProps( - firstChild.type, - current.memoizedProps - ); - instance.componentDidUpdate( - prevProps, - current.memoizedState, - instance.__reactInternalSnapshotBeforeUpdate - ); - } - var updateQueue = firstChild.updateQueue; - null !== updateQueue && - commitUpdateQueue(firstChild, updateQueue, instance); - break; - case 3: - var updateQueue$74 = firstChild.updateQueue; - if (null !== updateQueue$74) { - current = null; - if (null !== firstChild.child) - switch (firstChild.child.tag) { - case 5: - current = firstChild.child.stateNode.canonical; - break; - case 1: - current = firstChild.child.stateNode; - } - commitUpdateQueue(firstChild, updateQueue$74, current); - } - break; - case 5: - if (null === current && firstChild.flags & 4) - throw Error( - "The current renderer does not support mutation. This error is likely caused by a bug in React. Please file an issue." - ); - break; - case 6: - break; - case 4: - break; - case 12: - break; - case 13: - break; - case 19: - case 17: - case 21: - case 22: - case 23: - case 25: - break; - default: - throw Error( - "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." + if (22 === fiber.tag && isModernRoot) { + var newOffscreenSubtreeIsHidden = + null !== fiber.memoizedState || offscreenSubtreeIsHidden; + if (!newOffscreenSubtreeIsHidden) { + var current = fiber.alternate, + newOffscreenSubtreeWasHidden = + (null !== current && null !== current.memoizedState) || + offscreenSubtreeWasHidden; + current = offscreenSubtreeIsHidden; + var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; + offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden; + if ( + (offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden) && + !prevOffscreenSubtreeWasHidden + ) + for (nextEffect = fiber; null !== nextEffect; ) + (newOffscreenSubtreeIsHidden = nextEffect), + (newOffscreenSubtreeWasHidden = + newOffscreenSubtreeIsHidden.child), + 22 === newOffscreenSubtreeIsHidden.tag && + null !== newOffscreenSubtreeIsHidden.memoizedState + ? reappearLayoutEffects_complete(fiber) + : null !== newOffscreenSubtreeWasHidden + ? ((newOffscreenSubtreeWasHidden.return = newOffscreenSubtreeIsHidden), + (nextEffect = newOffscreenSubtreeWasHidden)) + : reappearLayoutEffects_complete(fiber); + for (; null !== firstChild; ) + (nextEffect = firstChild), + commitLayoutEffects_begin(firstChild, root, committedLanes), + (firstChild = firstChild.sibling); + nextEffect = fiber; + offscreenSubtreeIsHidden = current; + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; + } + commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); + } else + 0 !== (fiber.subtreeFlags & 8772) && null !== firstChild + ? ((firstChild.return = fiber), (nextEffect = firstChild)) + : commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); + } +} +function commitLayoutMountEffects_complete(subtreeRoot) { + for (; null !== nextEffect; ) { + var fiber = nextEffect; + if (0 !== (fiber.flags & 8772)) { + var current = fiber.alternate; + try { + if (0 !== (fiber.flags & 8772)) + switch (fiber.tag) { + case 0: + case 11: + case 15: + offscreenSubtreeWasHidden || commitHookEffectListMount(5, fiber); + break; + case 1: + var instance = fiber.stateNode; + if (fiber.flags & 4 && !offscreenSubtreeWasHidden) + if (null === current) instance.componentDidMount(); + else { + var prevProps = + fiber.elementType === fiber.type + ? current.memoizedProps + : resolveDefaultProps(fiber.type, current.memoizedProps); + instance.componentDidUpdate( + prevProps, + current.memoizedState, + instance.__reactInternalSnapshotBeforeUpdate ); - } - if (firstChild.flags & 512) { - current = void 0; - var ref = firstChild.ref; - if (null !== ref) { - var instance$jscomp$0 = firstChild.stateNode; - switch (firstChild.tag) { - case 5: - current = instance$jscomp$0.canonical; - break; - default: - current = instance$jscomp$0; } - "function" === typeof ref - ? ref(current) - : (ref.current = current); + var updateQueue = fiber.updateQueue; + null !== updateQueue && + commitUpdateQueue(fiber, updateQueue, instance); + break; + case 3: + var updateQueue$76 = fiber.updateQueue; + if (null !== updateQueue$76) { + current = null; + if (null !== fiber.child) + switch (fiber.child.tag) { + case 5: + current = fiber.child.stateNode.canonical; + break; + case 1: + current = fiber.child.stateNode; + } + commitUpdateQueue(fiber, updateQueue$76, current); } - } + break; + case 5: + if (null === current && fiber.flags & 4) + throw Error( + "The current renderer does not support mutation. This error is likely caused by a bug in React. Please file an issue." + ); + break; + case 6: + break; + case 4: + break; + case 12: + break; + case 13: + break; + case 19: + case 17: + case 21: + case 22: + case 23: + case 25: + break; + default: + throw Error( + "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." + ); + } + offscreenSubtreeWasHidden || + (fiber.flags & 512 && commitAttachRef(fiber)); + } catch (error) { + captureCommitPhaseError(fiber, fiber.return, error); + } + } + if (fiber === subtreeRoot) { + nextEffect = null; + break; + } + current = fiber.sibling; + if (null !== current) { + current.return = fiber.return; + nextEffect = current; + break; + } + nextEffect = fiber.return; + } +} +function disappearLayoutEffects_complete(subtreeRoot) { + for (; null !== nextEffect; ) { + var fiber = nextEffect; + if (fiber === subtreeRoot) { + nextEffect = null; + break; + } + var sibling = fiber.sibling; + if (null !== sibling) { + sibling.return = fiber.return; + nextEffect = sibling; + break; + } + nextEffect = fiber.return; + } +} +function reappearLayoutEffects_complete(subtreeRoot) { + for (; null !== nextEffect; ) { + var fiber = nextEffect; + try { + switch (fiber.tag) { + case 0: + case 11: + case 15: + var nearestMountedAncestor = fiber.return; + try { + commitHookEffectListMount(4, fiber); } catch (error) { - captureCommitPhaseError(firstChild, firstChild.return, error); + captureCommitPhaseError(fiber, nearestMountedAncestor, error); } - } - if (firstChild === fiber) { - nextEffect = null; break; - } - current = firstChild.sibling; - if (null !== current) { - current.return = firstChild.return; - nextEffect = current; + case 1: + var instance = fiber.stateNode; + if ("function" === typeof instance.componentDidMount) { + var nearestMountedAncestor$jscomp$0 = fiber.return; + try { + instance.componentDidMount(); + } catch (error) { + captureCommitPhaseError( + fiber, + nearestMountedAncestor$jscomp$0, + error + ); + } + } + var nearestMountedAncestor$jscomp$1 = fiber.return; + try { + commitAttachRef(fiber); + } catch (error) { + captureCommitPhaseError( + fiber, + nearestMountedAncestor$jscomp$1, + error + ); + } break; - } - nextEffect = firstChild.return; + case 5: + var nearestMountedAncestor$jscomp$2 = fiber.return; + try { + commitAttachRef(fiber); + } catch (error) { + captureCommitPhaseError( + fiber, + nearestMountedAncestor$jscomp$2, + error + ); + } } + } catch (error) { + captureCommitPhaseError(fiber, fiber.return, error); + } + if (fiber === subtreeRoot) { + nextEffect = null; + break; + } + var sibling = fiber.sibling; + if (null !== sibling) { + sibling.return = fiber.return; + nextEffect = sibling; + break; + } + nextEffect = fiber.return; } } var ceil = Math.ceil, @@ -6397,15 +6668,7 @@ function requestUpdateLane(fiber) { } return fiber; } -function scheduleUpdateOnFiber(fiber, lane, eventTime) { - if (50 < nestedUpdateCount) - throw ((nestedUpdateCount = 0), - (rootWithNestedUpdates = null), - Error( - "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops." - )); - var root = markUpdateLaneFromFiberToRoot(fiber, lane); - if (null === root) return null; +function scheduleUpdateOnFiber(root, fiber, lane, eventTime) { markRootUpdated(root, lane, eventTime); if (0 === (executionContext & 2) || root !== workInProgressRoot) root === workInProgressRoot && @@ -6419,27 +6682,6 @@ function scheduleUpdateOnFiber(fiber, lane, eventTime) { 0 === (fiber.mode & 1) && ((workInProgressRootRenderTargetTime = now() + 500), includesLegacySyncCallbacks && flushSyncCallbacks()); - return root; -} -function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { - sourceFiber.lanes |= lane; - var alternate = sourceFiber.alternate; - null !== alternate && (alternate.lanes |= lane); - alternate = sourceFiber; - for (sourceFiber = sourceFiber.return; null !== sourceFiber; ) - (sourceFiber.childLanes |= lane), - (alternate = sourceFiber.alternate), - null !== alternate && (alternate.childLanes |= lane), - (alternate = sourceFiber), - (sourceFiber = sourceFiber.return); - return 3 === alternate.tag ? alternate.stateNode : null; -} -function isInterleavedUpdate(fiber) { - return ( - (null !== workInProgressRoot || null !== interleavedQueues) && - 0 !== (fiber.mode & 1) && - 0 === (executionContext & 2) - ); } function ensureRootIsScheduled(root, currentTime) { for ( @@ -6844,10 +7086,10 @@ function prepareFreshStack(root, lanes) { workInProgressRootFatalError = null; workInProgressRootPingedLanes = workInProgressRootInterleavedUpdatedLanes = workInProgressRootSkippedLanes = 0; workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors = null; - if (null !== interleavedQueues) { - for (lanes = 0; lanes < interleavedQueues.length; lanes++) + if (null !== concurrentQueues) { + for (lanes = 0; lanes < concurrentQueues.length; lanes++) if ( - ((timeoutHandle = interleavedQueues[lanes]), + ((timeoutHandle = concurrentQueues[lanes]), (interruptedWork = timeoutHandle.interleaved), null !== interruptedWork) ) { @@ -6861,7 +7103,7 @@ function prepareFreshStack(root, lanes) { } timeoutHandle.pending = interruptedWork; } - interleavedQueues = null; + concurrentQueues = null; } return root; } @@ -6957,7 +7199,7 @@ function handleError(root$jscomp$0, thrownValue) { else { var update = createUpdate(-1, 1); update.tag = 2; - enqueueUpdate(sourceFiber, update); + enqueueUpdate(sourceFiber, update, 1); } sourceFiber.lanes |= 1; } @@ -6984,13 +7226,12 @@ function handleError(root$jscomp$0, thrownValue) { ); } } - root = value; + root = value = createCapturedValueAtFiber(value, sourceFiber); 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2); null === workInProgressRootConcurrentErrors ? (workInProgressRootConcurrentErrors = [root]) : workInProgressRootConcurrentErrors.push(root); - value = createCapturedValue(value, sourceFiber); root = returnFiber; do { switch (root.tag) { @@ -7222,7 +7463,11 @@ function commitRootImpl( transitions < recoverableErrors.length; transitions++ ) - renderPriorityLevel(recoverableErrors[transitions]); + (lanes = recoverableErrors[transitions]), + renderPriorityLevel(lanes.value, { + componentStack: lanes.stack, + digest: lanes.digest + }); if (hasUncaughtError) throw ((hasUncaughtError = !1), (root = firstUncaughtError), @@ -7386,11 +7631,10 @@ function flushPassiveEffects() { return !1; } function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) { - sourceFiber = createCapturedValue(error, sourceFiber); + sourceFiber = createCapturedValueAtFiber(error, sourceFiber); sourceFiber = createRootErrorUpdate(rootFiber, sourceFiber, 1); - enqueueUpdate(rootFiber, sourceFiber); + rootFiber = enqueueUpdate(rootFiber, sourceFiber, 1); sourceFiber = requestEventTime(); - rootFiber = markUpdateLaneFromFiberToRoot(rootFiber, 1); null !== rootFiber && (markRootUpdated(rootFiber, 1, sourceFiber), ensureRootIsScheduled(rootFiber, sourceFiber)); @@ -7420,18 +7664,18 @@ function captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) { (null === legacyErrorBoundariesThatAlreadyFailed || !legacyErrorBoundariesThatAlreadyFailed.has(instance))) ) { - sourceFiber = createCapturedValue(error, sourceFiber); + sourceFiber = createCapturedValueAtFiber(error, sourceFiber); sourceFiber = createClassErrorUpdate( nearestMountedAncestor, sourceFiber, 1 ); - enqueueUpdate(nearestMountedAncestor, sourceFiber); - sourceFiber = requestEventTime(); - nearestMountedAncestor = markUpdateLaneFromFiberToRoot( + nearestMountedAncestor = enqueueUpdate( nearestMountedAncestor, + sourceFiber, 1 ); + sourceFiber = requestEventTime(); null !== nearestMountedAncestor && (markRootUpdated(nearestMountedAncestor, 1, sourceFiber), ensureRootIsScheduled(nearestMountedAncestor, sourceFiber)); @@ -8086,7 +8330,7 @@ function createFiberFromOffscreen(pendingProps, mode, lanes, key) { pendingProps = createFiber(22, pendingProps, key, mode); pendingProps.elementType = REACT_OFFSCREEN_TYPE; pendingProps.lanes = lanes; - pendingProps.stateNode = {}; + pendingProps.stateNode = { isHidden: !1 }; return pendingProps; } function createFiberFromText(content, mode, lanes) { @@ -8208,9 +8452,10 @@ function updateContainer(element, container, parentComponent, callback) { container.payload = { element: element }; callback = void 0 === callback ? null : callback; null !== callback && (container.callback = callback); - enqueueUpdate(current, container); - element = scheduleUpdateOnFiber(current, lane, eventTime); - null !== element && entangleTransitions(element, current, lane); + element = enqueueUpdate(current, container, lane); + null !== element && + (scheduleUpdateOnFiber(element, current, lane, eventTime), + entangleTransitions(element, current, lane)); return lane; } function emptyFindFiberByHostInstance() { @@ -8245,10 +8490,10 @@ batchedUpdatesImpl = function(fn, a) { } }; var roots = new Map(), - devToolsConfig$jscomp$inline_925 = { + devToolsConfig$jscomp$inline_940 = { findFiberByHostInstance: getInstanceFromInstance, bundleType: 0, - version: "18.2.0-next-d300cebde-20220601", + version: "18.3.0-next-256aefbea-20220614", rendererPackageName: "react-native-renderer", rendererConfig: { getInspectorDataForViewTag: function() { @@ -8263,11 +8508,11 @@ var roots = new Map(), }.bind(null, findNodeHandle) } }; -var internals$jscomp$inline_1171 = { - bundleType: devToolsConfig$jscomp$inline_925.bundleType, - version: devToolsConfig$jscomp$inline_925.version, - rendererPackageName: devToolsConfig$jscomp$inline_925.rendererPackageName, - rendererConfig: devToolsConfig$jscomp$inline_925.rendererConfig, +var internals$jscomp$inline_1198 = { + bundleType: devToolsConfig$jscomp$inline_940.bundleType, + version: devToolsConfig$jscomp$inline_940.version, + rendererPackageName: devToolsConfig$jscomp$inline_940.rendererPackageName, + rendererConfig: devToolsConfig$jscomp$inline_940.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, @@ -8283,26 +8528,26 @@ var internals$jscomp$inline_1171 = { return null === fiber ? null : fiber.stateNode; }, findFiberByHostInstance: - devToolsConfig$jscomp$inline_925.findFiberByHostInstance || + devToolsConfig$jscomp$inline_940.findFiberByHostInstance || emptyFindFiberByHostInstance, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.2.0-next-d300cebde-20220601" + reconcilerVersion: "18.3.0-next-256aefbea-20220614" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_1172 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_1199 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_1172.isDisabled && - hook$jscomp$inline_1172.supportsFiber + !hook$jscomp$inline_1199.isDisabled && + hook$jscomp$inline_1199.supportsFiber ) try { - (rendererID = hook$jscomp$inline_1172.inject( - internals$jscomp$inline_1171 + (rendererID = hook$jscomp$inline_1199.inject( + internals$jscomp$inline_1198 )), - (injectedHook = hook$jscomp$inline_1172); + (injectedHook = hook$jscomp$inline_1199); } catch (err) {} } exports.createPortal = function(children, containerTag) { diff --git a/Libraries/Renderer/implementations/ReactFabric-profiling.js b/Libraries/Renderer/implementations/ReactFabric-profiling.js index d8823b6d8e767d..20b8016b4d22bd 100644 --- a/Libraries/Renderer/implementations/ReactFabric-profiling.js +++ b/Libraries/Renderer/implementations/ReactFabric-profiling.js @@ -8,7 +8,7 @@ * @nolint * @providesModule ReactFabric-profiling * @preventMunge - * @generated SignedSource<> + * @generated SignedSource<<289a793fae47d3a9492f7e231f7602be>> */ @@ -1028,7 +1028,7 @@ eventPluginOrder = Array.prototype.slice.call([ "ReactNativeBridgeEventPlugin" ]); recomputePluginOrdering(); -var injectedNamesToPlugins$jscomp$inline_229 = { +var injectedNamesToPlugins$jscomp$inline_234 = { ResponderEventPlugin: ResponderEventPlugin, ReactNativeBridgeEventPlugin: { eventTypes: {}, @@ -1074,33 +1074,33 @@ var injectedNamesToPlugins$jscomp$inline_229 = { } } }, - isOrderingDirty$jscomp$inline_230 = !1, - pluginName$jscomp$inline_231; -for (pluginName$jscomp$inline_231 in injectedNamesToPlugins$jscomp$inline_229) + isOrderingDirty$jscomp$inline_235 = !1, + pluginName$jscomp$inline_236; +for (pluginName$jscomp$inline_236 in injectedNamesToPlugins$jscomp$inline_234) if ( - injectedNamesToPlugins$jscomp$inline_229.hasOwnProperty( - pluginName$jscomp$inline_231 + injectedNamesToPlugins$jscomp$inline_234.hasOwnProperty( + pluginName$jscomp$inline_236 ) ) { - var pluginModule$jscomp$inline_232 = - injectedNamesToPlugins$jscomp$inline_229[pluginName$jscomp$inline_231]; + var pluginModule$jscomp$inline_237 = + injectedNamesToPlugins$jscomp$inline_234[pluginName$jscomp$inline_236]; if ( - !namesToPlugins.hasOwnProperty(pluginName$jscomp$inline_231) || - namesToPlugins[pluginName$jscomp$inline_231] !== - pluginModule$jscomp$inline_232 + !namesToPlugins.hasOwnProperty(pluginName$jscomp$inline_236) || + namesToPlugins[pluginName$jscomp$inline_236] !== + pluginModule$jscomp$inline_237 ) { - if (namesToPlugins[pluginName$jscomp$inline_231]) + if (namesToPlugins[pluginName$jscomp$inline_236]) throw Error( "EventPluginRegistry: Cannot inject two different event plugins using the same name, `" + - (pluginName$jscomp$inline_231 + "`.") + (pluginName$jscomp$inline_236 + "`.") ); namesToPlugins[ - pluginName$jscomp$inline_231 - ] = pluginModule$jscomp$inline_232; - isOrderingDirty$jscomp$inline_230 = !0; + pluginName$jscomp$inline_236 + ] = pluginModule$jscomp$inline_237; + isOrderingDirty$jscomp$inline_235 = !0; } } -isOrderingDirty$jscomp$inline_230 && recomputePluginOrdering(); +isOrderingDirty$jscomp$inline_235 && recomputePluginOrdering(); function getInstanceFromInstance(instanceHandle) { return instanceHandle; } @@ -2384,8 +2384,40 @@ function readContext(context) { } else lastContextDependency = lastContextDependency.next = context; return value; } -var interleavedQueues = null, - hasForceUpdate = !1; +var concurrentQueues = null; +function pushConcurrentUpdateQueue(queue) { + null === concurrentQueues + ? (concurrentQueues = [queue]) + : concurrentQueues.push(queue); +} +function enqueueConcurrentHookUpdate(fiber, queue, update, lane) { + var interleaved = queue.interleaved; + null === interleaved + ? ((update.next = update), pushConcurrentUpdateQueue(queue)) + : ((update.next = interleaved.next), (interleaved.next = update)); + queue.interleaved = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); +} +function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { + if (50 < nestedUpdateCount) + throw ((nestedUpdateCount = 0), + (rootWithNestedUpdates = null), + Error( + "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops." + )); + sourceFiber.lanes |= lane; + var alternate = sourceFiber.alternate; + null !== alternate && (alternate.lanes |= lane); + alternate = sourceFiber; + for (sourceFiber = sourceFiber.return; null !== sourceFiber; ) + (sourceFiber.childLanes |= lane), + (alternate = sourceFiber.alternate), + null !== alternate && (alternate.childLanes |= lane), + (alternate = sourceFiber), + (sourceFiber = sourceFiber.return); + return 3 === alternate.tag ? alternate.stateNode : null; +} +var hasForceUpdate = !1; function initializeUpdateQueue(fiber) { fiber.updateQueue = { baseState: fiber.memoizedState, @@ -2416,24 +2448,24 @@ function createUpdate(eventTime, lane) { next: null }; } -function enqueueUpdate(fiber, update) { +function enqueueUpdate(fiber, update, lane) { var updateQueue = fiber.updateQueue; - null !== updateQueue && - ((updateQueue = updateQueue.shared), - isInterleavedUpdate(fiber) - ? ((fiber = updateQueue.interleaved), - null === fiber - ? ((update.next = update), - null === interleavedQueues - ? (interleavedQueues = [updateQueue]) - : interleavedQueues.push(updateQueue)) - : ((update.next = fiber.next), (fiber.next = update)), - (updateQueue.interleaved = update)) - : ((fiber = updateQueue.pending), - null === fiber - ? (update.next = update) - : ((update.next = fiber.next), (fiber.next = update)), - (updateQueue.pending = update))); + if (null === updateQueue) return null; + updateQueue = updateQueue.shared; + if (0 !== (executionContext & 2)) { + var pending = updateQueue.pending; + null === pending + ? (update.next = update) + : ((update.next = pending.next), (pending.next = update)); + updateQueue.pending = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); + } + pending = updateQueue.interleaved; + null === pending + ? ((update.next = update), pushConcurrentUpdateQueue(updateQueue)) + : ((update.next = pending.next), (pending.next = update)); + updateQueue.interleaved = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); } function entangleTransitions(root, fiber, lane) { fiber = fiber.updateQueue; @@ -2670,9 +2702,10 @@ var classComponentUpdater = { update = createUpdate(eventTime, lane); update.payload = payload; void 0 !== callback && null !== callback && (update.callback = callback); - enqueueUpdate(inst, update); - payload = scheduleUpdateOnFiber(inst, lane, eventTime); - null !== payload && entangleTransitions(payload, inst, lane); + payload = enqueueUpdate(inst, update, lane); + null !== payload && + (scheduleUpdateOnFiber(payload, inst, lane, eventTime), + entangleTransitions(payload, inst, lane)); }, enqueueReplaceState: function(inst, payload, callback) { inst = inst._reactInternals; @@ -2682,9 +2715,10 @@ var classComponentUpdater = { update.tag = 1; update.payload = payload; void 0 !== callback && null !== callback && (update.callback = callback); - enqueueUpdate(inst, update); - payload = scheduleUpdateOnFiber(inst, lane, eventTime); - null !== payload && entangleTransitions(payload, inst, lane); + payload = enqueueUpdate(inst, update, lane); + null !== payload && + (scheduleUpdateOnFiber(payload, inst, lane, eventTime), + entangleTransitions(payload, inst, lane)); }, enqueueForceUpdate: function(inst, callback) { inst = inst._reactInternals; @@ -2693,9 +2727,10 @@ var classComponentUpdater = { update = createUpdate(eventTime, lane); update.tag = 2; void 0 !== callback && null !== callback && (update.callback = callback); - enqueueUpdate(inst, update); - callback = scheduleUpdateOnFiber(inst, lane, eventTime); - null !== callback && entangleTransitions(callback, inst, lane); + callback = enqueueUpdate(inst, update, lane); + null !== callback && + (scheduleUpdateOnFiber(callback, inst, lane, eventTime), + entangleTransitions(callback, inst, lane)); } }; function checkShouldComponentUpdate( @@ -2786,7 +2821,7 @@ function mountClassInstance(workInProgress, ctor, newProps, renderLanes) { processUpdateQueue(workInProgress, newProps, instance, renderLanes), (instance.state = workInProgress.memoizedState)); "function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4); + (workInProgress.flags |= 4194308); } function coerceRef(returnFiber, current, element) { returnFiber = element.ref; @@ -3800,11 +3835,11 @@ function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) { function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) { inst.value = nextSnapshot; inst.getSnapshot = getSnapshot; - checkIfSnapshotChanged(inst) && scheduleUpdateOnFiber(fiber, 1, -1); + checkIfSnapshotChanged(inst) && forceStoreRerender(fiber); } function subscribeToStore(fiber, inst, subscribe) { return subscribe(function() { - checkIfSnapshotChanged(inst) && scheduleUpdateOnFiber(fiber, 1, -1); + checkIfSnapshotChanged(inst) && forceStoreRerender(fiber); }); } function checkIfSnapshotChanged(inst) { @@ -3817,6 +3852,10 @@ function checkIfSnapshotChanged(inst) { return !0; } } +function forceStoreRerender(fiber) { + var root = markUpdateLaneFromFiberToRoot(fiber, 1); + null !== root && scheduleUpdateOnFiber(root, fiber, 1, -1); +} function mountState(initialState) { var hook = mountWorkInProgressHook(); "function" === typeof initialState && (initialState = initialState()); @@ -3987,12 +4026,15 @@ function dispatchReducerAction(fiber, queue, action) { eagerState: null, next: null }; - isRenderPhaseUpdate(fiber) - ? enqueueRenderPhaseUpdate(queue, action) - : (enqueueUpdate$1(fiber, queue, action), - (action = requestEventTime()), - (fiber = scheduleUpdateOnFiber(fiber, lane, action)), - null !== fiber && entangleTransitionUpdate(fiber, queue, lane)); + if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, action); + else if ( + ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)), + null !== action) + ) { + var eventTime = requestEventTime(); + scheduleUpdateOnFiber(action, fiber, lane, eventTime); + entangleTransitionUpdate(action, queue, lane); + } } function dispatchSetState(fiber, queue, action) { var lane = requestUpdateLane(fiber), @@ -4005,7 +4047,6 @@ function dispatchSetState(fiber, queue, action) { }; if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update); else { - enqueueUpdate$1(fiber, queue, update); var alternate = fiber.alternate; if ( 0 === fiber.lanes && @@ -4017,13 +4058,22 @@ function dispatchSetState(fiber, queue, action) { eagerState = alternate(currentState, action); update.hasEagerState = !0; update.eagerState = eagerState; - if (objectIs(eagerState, currentState)) return; + if (objectIs(eagerState, currentState)) { + var interleaved = queue.interleaved; + null === interleaved + ? ((update.next = update), pushConcurrentUpdateQueue(queue)) + : ((update.next = interleaved.next), (interleaved.next = update)); + queue.interleaved = update; + return; + } } catch (error) { } finally { } - action = requestEventTime(); - fiber = scheduleUpdateOnFiber(fiber, lane, action); - null !== fiber && entangleTransitionUpdate(fiber, queue, lane); + action = enqueueConcurrentHookUpdate(fiber, queue, update, lane); + null !== action && + ((update = requestEventTime()), + scheduleUpdateOnFiber(action, fiber, lane, update), + entangleTransitionUpdate(action, queue, lane)); } } function isRenderPhaseUpdate(fiber) { @@ -4041,22 +4091,6 @@ function enqueueRenderPhaseUpdate(queue, update) { : ((update.next = pending.next), (pending.next = update)); queue.pending = update; } -function enqueueUpdate$1(fiber, queue, update) { - isInterleavedUpdate(fiber) - ? ((fiber = queue.interleaved), - null === fiber - ? ((update.next = update), - null === interleavedQueues - ? (interleavedQueues = [queue]) - : interleavedQueues.push(queue)) - : ((update.next = fiber.next), (fiber.next = update)), - (queue.interleaved = update)) - : ((fiber = queue.pending), - null === fiber - ? (update.next = update) - : ((update.next = fiber.next), (fiber.next = update)), - (queue.pending = update)); -} function entangleTransitionUpdate(root, queue, lane) { if (0 !== (lane & 4194240)) { var queueLanes = queue.lanes; @@ -4100,14 +4134,14 @@ var ContextOnlyDispatcher = { useImperativeHandle: function(ref, create, deps) { deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null; return mountEffectImpl( - 4, + 4194308, 4, imperativeHandleEffect.bind(null, create, ref), deps ); }, useLayoutEffect: function(create, deps) { - return mountEffectImpl(4, 4, create, deps); + return mountEffectImpl(4194308, 4, create, deps); }, useInsertionEffect: function(create, deps) { return mountEffectImpl(4, 2, create, deps); @@ -4310,7 +4344,7 @@ function transferActualDuration(fiber) { for (var child = fiber.child; child; ) (fiber.actualDuration += child.actualDuration), (child = child.sibling); } -function createCapturedValue(value, source) { +function createCapturedValueAtFiber(value, source) { try { var info = "", node = source; @@ -4321,7 +4355,20 @@ function createCapturedValue(value, source) { JSCompiler_inline_result = "\nError generating stack: " + x.message + "\n" + x.stack; } - return { value: value, source: source, stack: JSCompiler_inline_result }; + return { + value: value, + source: source, + stack: JSCompiler_inline_result, + digest: null + }; +} +function createCapturedValue(value, digest, stack) { + return { + value: value, + source: null, + stack: null != stack ? stack : null, + digest: null != digest ? digest : null + }; } if ( "function" !== @@ -4586,7 +4633,7 @@ function markRef(current, workInProgress) { (null === current && null !== ref) || (null !== current && current.ref !== ref) ) - workInProgress.flags |= 512; + (workInProgress.flags |= 512), (workInProgress.flags |= 2097152); } function updateFunctionComponent( current, @@ -4698,9 +4745,9 @@ function updateClassComponent( "function" === typeof instance.UNSAFE_componentWillMount && instance.UNSAFE_componentWillMount()), "function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4)) + (workInProgress.flags |= 4194308)) : ("function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4), + (workInProgress.flags |= 4194308), (workInProgress.memoizedProps = nextProps), (workInProgress.memoizedState = oldContext)), (instance.props = nextProps), @@ -4708,7 +4755,7 @@ function updateClassComponent( (instance.context = contextType), (nextProps = oldProps)) : ("function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4), + (workInProgress.flags |= 4194308), (nextProps = !1)); } else { instance = workInProgress.stateNode; @@ -5062,13 +5109,16 @@ function updateDehydratedSuspenseComponent( if (workInProgress.flags & 256) return ( (workInProgress.flags &= -257), + (suspenseState = createCapturedValue( + Error( + "There was an error while hydrating this Suspense boundary. Switched to client rendering." + ) + )), retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, - Error( - "There was an error while hydrating this Suspense boundary. Switched to client rendering." - ) + suspenseState ) ); if (null !== workInProgress.memoizedState) @@ -5113,16 +5163,19 @@ function updateDehydratedSuspenseComponent( ); if (shim$1()) return ( - (suspenseState = shim$1().errorMessage), + (suspenseState = shim$1().digest), + (suspenseState = createCapturedValue( + Error( + "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." + ), + suspenseState, + void 0 + )), retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, suspenseState - ? Error(suspenseState) - : Error( - "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." - ) ) ); didSuspend = 0 !== (renderLanes & current.childLanes); @@ -5165,23 +5218,27 @@ function updateDehydratedSuspenseComponent( default: didSuspend = 0; } - nextProps = + didSuspend = 0 !== (didSuspend & (nextProps.suspendedLanes | renderLanes)) ? 0 : didSuspend; - 0 !== nextProps && - nextProps !== suspenseState.retryLane && - ((suspenseState.retryLane = nextProps), - scheduleUpdateOnFiber(current, nextProps, -1)); + 0 !== didSuspend && + didSuspend !== suspenseState.retryLane && + ((suspenseState.retryLane = didSuspend), + markUpdateLaneFromFiberToRoot(current, didSuspend), + scheduleUpdateOnFiber(nextProps, current, didSuspend, -1)); } renderDidSuspendDelayIfPossible(); + suspenseState = createCapturedValue( + Error( + "This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition." + ) + ); return retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, - Error( - "This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition." - ) + suspenseState ); } if (shim$1()) @@ -5590,14 +5647,14 @@ function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) { break; case "collapsed": lastTailNode = renderState.tail; - for (var lastTailNode$63 = null; null !== lastTailNode; ) - null !== lastTailNode.alternate && (lastTailNode$63 = lastTailNode), + for (var lastTailNode$65 = null; null !== lastTailNode; ) + null !== lastTailNode.alternate && (lastTailNode$65 = lastTailNode), (lastTailNode = lastTailNode.sibling); - null === lastTailNode$63 + null === lastTailNode$65 ? hasRenderedATailFallback || null === renderState.tail ? (renderState.tail = null) : (renderState.tail.sibling = null) - : (lastTailNode$63.sibling = null); + : (lastTailNode$65.sibling = null); } } function bubbleProperties(completedWork) { @@ -5609,53 +5666,53 @@ function bubbleProperties(completedWork) { if (didBailout) if (0 !== (completedWork.mode & 2)) { for ( - var treeBaseDuration$65 = completedWork.selfBaseDuration, - child$66 = completedWork.child; - null !== child$66; + var treeBaseDuration$67 = completedWork.selfBaseDuration, + child$68 = completedWork.child; + null !== child$68; ) - (newChildLanes |= child$66.lanes | child$66.childLanes), - (subtreeFlags |= child$66.subtreeFlags & 14680064), - (subtreeFlags |= child$66.flags & 14680064), - (treeBaseDuration$65 += child$66.treeBaseDuration), - (child$66 = child$66.sibling); - completedWork.treeBaseDuration = treeBaseDuration$65; + (newChildLanes |= child$68.lanes | child$68.childLanes), + (subtreeFlags |= child$68.subtreeFlags & 14680064), + (subtreeFlags |= child$68.flags & 14680064), + (treeBaseDuration$67 += child$68.treeBaseDuration), + (child$68 = child$68.sibling); + completedWork.treeBaseDuration = treeBaseDuration$67; } else for ( - treeBaseDuration$65 = completedWork.child; - null !== treeBaseDuration$65; + treeBaseDuration$67 = completedWork.child; + null !== treeBaseDuration$67; ) (newChildLanes |= - treeBaseDuration$65.lanes | treeBaseDuration$65.childLanes), - (subtreeFlags |= treeBaseDuration$65.subtreeFlags & 14680064), - (subtreeFlags |= treeBaseDuration$65.flags & 14680064), - (treeBaseDuration$65.return = completedWork), - (treeBaseDuration$65 = treeBaseDuration$65.sibling); + treeBaseDuration$67.lanes | treeBaseDuration$67.childLanes), + (subtreeFlags |= treeBaseDuration$67.subtreeFlags & 14680064), + (subtreeFlags |= treeBaseDuration$67.flags & 14680064), + (treeBaseDuration$67.return = completedWork), + (treeBaseDuration$67 = treeBaseDuration$67.sibling); else if (0 !== (completedWork.mode & 2)) { - treeBaseDuration$65 = completedWork.actualDuration; - child$66 = completedWork.selfBaseDuration; + treeBaseDuration$67 = completedWork.actualDuration; + child$68 = completedWork.selfBaseDuration; for (var child = completedWork.child; null !== child; ) (newChildLanes |= child.lanes | child.childLanes), (subtreeFlags |= child.subtreeFlags), (subtreeFlags |= child.flags), - (treeBaseDuration$65 += child.actualDuration), - (child$66 += child.treeBaseDuration), + (treeBaseDuration$67 += child.actualDuration), + (child$68 += child.treeBaseDuration), (child = child.sibling); - completedWork.actualDuration = treeBaseDuration$65; - completedWork.treeBaseDuration = child$66; + completedWork.actualDuration = treeBaseDuration$67; + completedWork.treeBaseDuration = child$68; } else for ( - treeBaseDuration$65 = completedWork.child; - null !== treeBaseDuration$65; + treeBaseDuration$67 = completedWork.child; + null !== treeBaseDuration$67; ) (newChildLanes |= - treeBaseDuration$65.lanes | treeBaseDuration$65.childLanes), - (subtreeFlags |= treeBaseDuration$65.subtreeFlags), - (subtreeFlags |= treeBaseDuration$65.flags), - (treeBaseDuration$65.return = completedWork), - (treeBaseDuration$65 = treeBaseDuration$65.sibling); + treeBaseDuration$67.lanes | treeBaseDuration$67.childLanes), + (subtreeFlags |= treeBaseDuration$67.subtreeFlags), + (subtreeFlags |= treeBaseDuration$67.flags), + (treeBaseDuration$67.return = completedWork), + (treeBaseDuration$67 = treeBaseDuration$67.sibling); completedWork.subtreeFlags |= subtreeFlags; completedWork.childLanes = newChildLanes; return didBailout; @@ -5715,7 +5772,8 @@ function completeWork(current, workInProgress, renderLanes) { newProps, renderLanes ), - current.ref !== workInProgress.ref && (workInProgress.flags |= 512); + current.ref !== workInProgress.ref && + (workInProgress.flags |= 2097664); else { if (!newProps) { if (null === workInProgress.stateNode) @@ -5751,7 +5809,7 @@ function completeWork(current, workInProgress, renderLanes) { current = { node: renderLanes, canonical: current }; appendAllChildren(current, workInProgress, !1, !1); workInProgress.stateNode = current; - null !== workInProgress.ref && (workInProgress.flags |= 512); + null !== workInProgress.ref && (workInProgress.flags |= 2097664); } bubbleProperties(workInProgress); return null; @@ -6060,14 +6118,29 @@ function unwindWork(current, workInProgress) { return popRenderLanes(), null; case 24: return null; + case 25: + return null; default: return null; } } -var PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set, +var offscreenSubtreeIsHidden = !1, + offscreenSubtreeWasHidden = !1, + PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set, nextEffect = null, inProgressLanes = null, inProgressRoot = null; +function callComponentWillUnmountWithTimer(current, instance) { + instance.props = current.memoizedProps; + instance.state = current.memoizedState; + if (current.mode & 2) + try { + startLayoutEffectTimer(), instance.componentWillUnmount(); + } finally { + recordLayoutEffectDuration(current); + } + else instance.componentWillUnmount(); +} function safelyDetachRef(current, nearestMountedAncestor) { var ref = current.ref; if (null !== ref) @@ -6180,13 +6253,32 @@ function commitHookEffectListMount(flags, finishedWork) { var effect = (finishedWork = finishedWork.next); do { if ((effect.tag & flags) === flags) { - var create$81 = effect.create; - effect.destroy = create$81(); + var create$83 = effect.create; + effect.destroy = create$83(); } effect = effect.next; } while (effect !== finishedWork); } } +function commitAttachRef(finishedWork) { + var ref = finishedWork.ref; + if (null !== ref) { + var instance = finishedWork.stateNode; + switch (finishedWork.tag) { + case 5: + instance = instance.canonical; + } + if ("function" === typeof ref) + if (finishedWork.mode & 2) + try { + startLayoutEffectTimer(), ref(instance); + } finally { + recordLayoutEffectDuration(finishedWork); + } + else ref(instance); + else ref.current = instance; + } +} function detachFiberAfterEffects(fiber) { var alternate = fiber.alternate; null !== alternate && @@ -6223,7 +6315,8 @@ function commitDeletionEffectsOnFiber( } catch (err) {} switch (deletedFiber.tag) { case 5: - safelyDetachRef(deletedFiber, nearestMountedAncestor); + offscreenSubtreeWasHidden || + safelyDetachRef(deletedFiber, nearestMountedAncestor); case 6: recursivelyTraverseDeletionEffects( finishedRoot, @@ -6245,35 +6338,41 @@ function commitDeletionEffectsOnFiber( case 11: case 14: case 15: - var updateQueue = deletedFiber.updateQueue; - if ( - null !== updateQueue && - ((updateQueue = updateQueue.lastEffect), null !== updateQueue) - ) { - var effect = (updateQueue = updateQueue.next); - do { - var _effect = effect, - destroy = _effect.destroy; - _effect = _effect.tag; - void 0 !== destroy && - (0 !== (_effect & 2) - ? safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy) - : 0 !== (_effect & 4) && - (deletedFiber.mode & 2 - ? (startLayoutEffectTimer(), - safelyCallDestroy( - deletedFiber, - nearestMountedAncestor, - destroy - ), - recordLayoutEffectDuration(deletedFiber)) - : safelyCallDestroy( - deletedFiber, - nearestMountedAncestor, - destroy - ))); - effect = effect.next; - } while (effect !== updateQueue); + if (!offscreenSubtreeWasHidden) { + var updateQueue = deletedFiber.updateQueue; + if ( + null !== updateQueue && + ((updateQueue = updateQueue.lastEffect), null !== updateQueue) + ) { + var effect = (updateQueue = updateQueue.next); + do { + var _effect = effect, + destroy = _effect.destroy; + _effect = _effect.tag; + void 0 !== destroy && + (0 !== (_effect & 2) + ? safelyCallDestroy( + deletedFiber, + nearestMountedAncestor, + destroy + ) + : 0 !== (_effect & 4) && + (deletedFiber.mode & 2 + ? (startLayoutEffectTimer(), + safelyCallDestroy( + deletedFiber, + nearestMountedAncestor, + destroy + ), + recordLayoutEffectDuration(deletedFiber)) + : safelyCallDestroy( + deletedFiber, + nearestMountedAncestor, + destroy + ))); + effect = effect.next; + } while (effect !== updateQueue); + } } recursivelyTraverseDeletionEffects( finishedRoot, @@ -6282,21 +6381,14 @@ function commitDeletionEffectsOnFiber( ); break; case 1: - safelyDetachRef(deletedFiber, nearestMountedAncestor); - updateQueue = deletedFiber.stateNode; - if ("function" === typeof updateQueue.componentWillUnmount) + if ( + !offscreenSubtreeWasHidden && + (safelyDetachRef(deletedFiber, nearestMountedAncestor), + (updateQueue = deletedFiber.stateNode), + "function" === typeof updateQueue.componentWillUnmount) + ) try { - if ( - ((updateQueue.props = deletedFiber.memoizedProps), - (updateQueue.state = deletedFiber.memoizedState), - deletedFiber.mode & 2) - ) - try { - startLayoutEffectTimer(), updateQueue.componentWillUnmount(); - } finally { - recordLayoutEffectDuration(deletedFiber); - } - else updateQueue.componentWillUnmount(); + callComponentWillUnmountWithTimer(deletedFiber, updateQueue); } catch (error) { captureCommitPhaseError(deletedFiber, nearestMountedAncestor, error); } @@ -6314,11 +6406,21 @@ function commitDeletionEffectsOnFiber( ); break; case 22: - recursivelyTraverseDeletionEffects( - finishedRoot, - nearestMountedAncestor, - deletedFiber - ); + deletedFiber.mode & 1 + ? ((offscreenSubtreeWasHidden = + (updateQueue = offscreenSubtreeWasHidden) || + null !== deletedFiber.memoizedState), + recursivelyTraverseDeletionEffects( + finishedRoot, + nearestMountedAncestor, + deletedFiber + ), + (offscreenSubtreeWasHidden = updateQueue)) + : recursivelyTraverseDeletionEffects( + finishedRoot, + nearestMountedAncestor, + deletedFiber + ); break; default: recursivelyTraverseDeletionEffects( @@ -6397,22 +6499,22 @@ function commitMutationEffectsOnFiber(finishedWork, root) { try { startLayoutEffectTimer(), commitHookEffectListUnmount(5, finishedWork, finishedWork.return); - } catch (error$87) { + } catch (error$89) { captureCommitPhaseError( finishedWork, finishedWork.return, - error$87 + error$89 ); } recordLayoutEffectDuration(finishedWork); } else try { commitHookEffectListUnmount(5, finishedWork, finishedWork.return); - } catch (error$88) { + } catch (error$90) { captureCommitPhaseError( finishedWork, finishedWork.return, - error$88 + error$90 ); } } @@ -6448,14 +6550,89 @@ function commitMutationEffectsOnFiber(finishedWork, root) { commitReconciliationEffects(finishedWork); root = finishedWork.child; root.flags & 8192 && - null !== root.memoizedState && - (null === root.alternate || null === root.alternate.memoizedState) && - (globalMostRecentFallbackTime = now()); + ((current = null !== root.memoizedState), + (root.stateNode.isHidden = current), + !current || + (null !== root.alternate && null !== root.alternate.memoizedState) || + (globalMostRecentFallbackTime = now())); flags & 4 && attachSuspenseRetryListeners(finishedWork); break; case 22: - recursivelyTraverseMutationEffects(root, finishedWork); + current = null !== current && null !== current.memoizedState; + if (finishedWork.mode & 1) { + var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || current; + recursivelyTraverseMutationEffects(root, finishedWork); + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; + } else recursivelyTraverseMutationEffects(root, finishedWork); commitReconciliationEffects(finishedWork); + if ( + flags & 8192 && + ((flags = null !== finishedWork.memoizedState), + (finishedWork.stateNode.isHidden = flags) && + !current && + 0 !== (finishedWork.mode & 1)) + ) + for ( + nextEffect = finishedWork, finishedWork = finishedWork.child; + null !== finishedWork; + + ) { + for (flags = nextEffect = finishedWork; null !== nextEffect; ) { + root = nextEffect; + current = root.child; + switch (root.tag) { + case 0: + case 11: + case 14: + case 15: + if (root.mode & 2) + try { + startLayoutEffectTimer(), + commitHookEffectListUnmount(4, root, root.return); + } finally { + recordLayoutEffectDuration(root); + } + else commitHookEffectListUnmount(4, root, root.return); + break; + case 1: + safelyDetachRef(root, root.return); + prevOffscreenSubtreeWasHidden = root.stateNode; + if ( + "function" === + typeof prevOffscreenSubtreeWasHidden.componentWillUnmount + ) { + var current$jscomp$0 = root, + nearestMountedAncestor = root.return; + try { + callComponentWillUnmountWithTimer( + current$jscomp$0, + prevOffscreenSubtreeWasHidden + ); + } catch (error) { + captureCommitPhaseError( + current$jscomp$0, + nearestMountedAncestor, + error + ); + } + } + break; + case 5: + safelyDetachRef(root, root.return); + break; + case 22: + if (null !== root.memoizedState) { + disappearLayoutEffects_complete(flags); + continue; + } + } + null !== current + ? ((current.return = root), (nextEffect = current)) + : disappearLayoutEffects_complete(flags); + } + finishedWork = finishedWork.sibling; + } break; case 19: recursivelyTraverseMutationEffects(root, finishedWork); @@ -6477,203 +6654,315 @@ function commitReconciliationEffects(finishedWork) { function commitLayoutEffects(finishedWork, root, committedLanes) { inProgressLanes = committedLanes; inProgressRoot = root; - for (nextEffect = finishedWork; null !== nextEffect; ) - if ( - ((root = nextEffect), - (committedLanes = root.child), - 0 !== (root.subtreeFlags & 8772) && null !== committedLanes) - ) - (committedLanes.return = root), (nextEffect = committedLanes); - else - for (root = finishedWork; null !== nextEffect; ) { - committedLanes = nextEffect; - if (0 !== (committedLanes.flags & 8772)) { - var current = committedLanes.alternate; - try { - if (0 !== (committedLanes.flags & 8772)) - switch (committedLanes.tag) { - case 0: - case 11: - case 15: - if (committedLanes.mode & 2) + nextEffect = finishedWork; + commitLayoutEffects_begin(finishedWork, root, committedLanes); + inProgressRoot = inProgressLanes = null; +} +function commitLayoutEffects_begin(subtreeRoot, root, committedLanes) { + for (var isModernRoot = 0 !== (subtreeRoot.mode & 1); null !== nextEffect; ) { + var fiber = nextEffect, + firstChild = fiber.child; + if (22 === fiber.tag && isModernRoot) { + var newOffscreenSubtreeIsHidden = + null !== fiber.memoizedState || offscreenSubtreeIsHidden; + if (!newOffscreenSubtreeIsHidden) { + var current = fiber.alternate, + newOffscreenSubtreeWasHidden = + (null !== current && null !== current.memoizedState) || + offscreenSubtreeWasHidden; + current = offscreenSubtreeIsHidden; + var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; + offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden; + if ( + (offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden) && + !prevOffscreenSubtreeWasHidden + ) + for (nextEffect = fiber; null !== nextEffect; ) + (newOffscreenSubtreeIsHidden = nextEffect), + (newOffscreenSubtreeWasHidden = + newOffscreenSubtreeIsHidden.child), + 22 === newOffscreenSubtreeIsHidden.tag && + null !== newOffscreenSubtreeIsHidden.memoizedState + ? reappearLayoutEffects_complete(fiber) + : null !== newOffscreenSubtreeWasHidden + ? ((newOffscreenSubtreeWasHidden.return = newOffscreenSubtreeIsHidden), + (nextEffect = newOffscreenSubtreeWasHidden)) + : reappearLayoutEffects_complete(fiber); + for (; null !== firstChild; ) + (nextEffect = firstChild), + commitLayoutEffects_begin(firstChild, root, committedLanes), + (firstChild = firstChild.sibling); + nextEffect = fiber; + offscreenSubtreeIsHidden = current; + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; + } + commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); + } else + 0 !== (fiber.subtreeFlags & 8772) && null !== firstChild + ? ((firstChild.return = fiber), (nextEffect = firstChild)) + : commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); + } +} +function commitLayoutMountEffects_complete(subtreeRoot) { + for (; null !== nextEffect; ) { + var fiber = nextEffect; + if (0 !== (fiber.flags & 8772)) { + var current = fiber.alternate; + try { + if (0 !== (fiber.flags & 8772)) + switch (fiber.tag) { + case 0: + case 11: + case 15: + if (!offscreenSubtreeWasHidden) + if (fiber.mode & 2) + try { + startLayoutEffectTimer(), + commitHookEffectListMount(5, fiber); + } finally { + recordLayoutEffectDuration(fiber); + } + else commitHookEffectListMount(5, fiber); + break; + case 1: + var instance = fiber.stateNode; + if (fiber.flags & 4 && !offscreenSubtreeWasHidden) + if (null === current) + if (fiber.mode & 2) try { - startLayoutEffectTimer(), - commitHookEffectListMount(5, committedLanes); + startLayoutEffectTimer(), instance.componentDidMount(); } finally { - recordLayoutEffectDuration(committedLanes); + recordLayoutEffectDuration(fiber); } - else commitHookEffectListMount(5, committedLanes); - break; - case 1: - var instance = committedLanes.stateNode; - if (committedLanes.flags & 4) - if (null === current) - if (committedLanes.mode & 2) - try { - startLayoutEffectTimer(), - instance.componentDidMount(); - } finally { - recordLayoutEffectDuration(committedLanes); - } - else instance.componentDidMount(); - else { - var prevProps = - committedLanes.elementType === committedLanes.type - ? current.memoizedProps - : resolveDefaultProps( - committedLanes.type, - current.memoizedProps - ), - prevState = current.memoizedState; - if (committedLanes.mode & 2) - try { - startLayoutEffectTimer(), - instance.componentDidUpdate( - prevProps, - prevState, - instance.__reactInternalSnapshotBeforeUpdate - ); - } finally { - recordLayoutEffectDuration(committedLanes); - } - else + else instance.componentDidMount(); + else { + var prevProps = + fiber.elementType === fiber.type + ? current.memoizedProps + : resolveDefaultProps( + fiber.type, + current.memoizedProps + ), + prevState = current.memoizedState; + if (fiber.mode & 2) + try { + startLayoutEffectTimer(), instance.componentDidUpdate( prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate ); + } finally { + recordLayoutEffectDuration(fiber); } - var updateQueue = committedLanes.updateQueue; - null !== updateQueue && - commitUpdateQueue(committedLanes, updateQueue, instance); - break; - case 3: - var updateQueue$83 = committedLanes.updateQueue; - if (null !== updateQueue$83) { - var instance$84 = null; - if (null !== committedLanes.child) - switch (committedLanes.child.tag) { - case 5: - instance$84 = - committedLanes.child.stateNode.canonical; - break; - case 1: - instance$84 = committedLanes.child.stateNode; - } - commitUpdateQueue( - committedLanes, - updateQueue$83, - instance$84 - ); - } - break; - case 5: - if (null === current && committedLanes.flags & 4) - throw Error( - "The current renderer does not support mutation. This error is likely caused by a bug in React. Please file an issue." - ); - break; - case 6: - break; - case 4: - break; - case 12: - var _finishedWork$memoize2 = committedLanes.memoizedProps, - onCommit = _finishedWork$memoize2.onCommit, - onRender = _finishedWork$memoize2.onRender, - effectDuration = committedLanes.stateNode.effectDuration; - instance$84 = commitTime; - current = null === current ? "mount" : "update"; - currentUpdateIsNested && (current = "nested-update"); - "function" === typeof onRender && - onRender( - committedLanes.memoizedProps.id, - current, - committedLanes.actualDuration, - committedLanes.treeBaseDuration, - committedLanes.actualStartTime, - instance$84 - ); - "function" === typeof onCommit && - onCommit( - committedLanes.memoizedProps.id, - current, - effectDuration, - instance$84 + else + instance.componentDidUpdate( + prevProps, + prevState, + instance.__reactInternalSnapshotBeforeUpdate ); - enqueuePendingPassiveProfilerEffect(committedLanes); - var parentFiber = committedLanes.return; - a: for (; null !== parentFiber; ) { - switch (parentFiber.tag) { - case 3: - parentFiber.stateNode.effectDuration += effectDuration; - break a; - case 12: - parentFiber.stateNode.effectDuration += effectDuration; - break a; - } - parentFiber = parentFiber.return; + } + var updateQueue = fiber.updateQueue; + null !== updateQueue && + commitUpdateQueue(fiber, updateQueue, instance); + break; + case 3: + var updateQueue$85 = fiber.updateQueue; + if (null !== updateQueue$85) { + var instance$86 = null; + if (null !== fiber.child) + switch (fiber.child.tag) { + case 5: + instance$86 = fiber.child.stateNode.canonical; + break; + case 1: + instance$86 = fiber.child.stateNode; } - break; - case 13: - break; - case 19: - case 17: - case 21: - case 22: - case 23: - case 25: - break; - default: - throw Error( - "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." - ); + commitUpdateQueue(fiber, updateQueue$85, instance$86); } - if (committedLanes.flags & 512) { - instance$84 = void 0; - current = committedLanes; - var ref = current.ref; - if (null !== ref) { - var instance$jscomp$0 = current.stateNode; - switch (current.tag) { - case 5: - instance$84 = instance$jscomp$0.canonical; - break; - default: - instance$84 = instance$jscomp$0; + break; + case 5: + if (null === current && fiber.flags & 4) + throw Error( + "The current renderer does not support mutation. This error is likely caused by a bug in React. Please file an issue." + ); + break; + case 6: + break; + case 4: + break; + case 12: + var _finishedWork$memoize2 = fiber.memoizedProps, + onCommit = _finishedWork$memoize2.onCommit, + onRender = _finishedWork$memoize2.onRender, + effectDuration = fiber.stateNode.effectDuration; + instance$86 = commitTime; + current = null === current ? "mount" : "update"; + currentUpdateIsNested && (current = "nested-update"); + "function" === typeof onRender && + onRender( + fiber.memoizedProps.id, + current, + fiber.actualDuration, + fiber.treeBaseDuration, + fiber.actualStartTime, + instance$86 + ); + "function" === typeof onCommit && + onCommit( + fiber.memoizedProps.id, + current, + effectDuration, + instance$86 + ); + enqueuePendingPassiveProfilerEffect(fiber); + var parentFiber = fiber.return; + a: for (; null !== parentFiber; ) { + switch (parentFiber.tag) { + case 3: + parentFiber.stateNode.effectDuration += effectDuration; + break a; + case 12: + parentFiber.stateNode.effectDuration += effectDuration; + break a; } - if ("function" === typeof ref) - if (current.mode & 2) - try { - startLayoutEffectTimer(), ref(instance$84); - } finally { - recordLayoutEffectDuration(current); - } - else ref(instance$84); - else ref.current = instance$84; + parentFiber = parentFiber.return; + } + break; + case 13: + break; + case 19: + case 17: + case 21: + case 22: + case 23: + case 25: + break; + default: + throw Error( + "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." + ); + } + offscreenSubtreeWasHidden || + (fiber.flags & 512 && commitAttachRef(fiber)); + } catch (error) { + captureCommitPhaseError(fiber, fiber.return, error); + } + } + if (fiber === subtreeRoot) { + nextEffect = null; + break; + } + instance$86 = fiber.sibling; + if (null !== instance$86) { + instance$86.return = fiber.return; + nextEffect = instance$86; + break; + } + nextEffect = fiber.return; + } +} +function disappearLayoutEffects_complete(subtreeRoot) { + for (; null !== nextEffect; ) { + var fiber = nextEffect; + if (fiber === subtreeRoot) { + nextEffect = null; + break; + } + var sibling = fiber.sibling; + if (null !== sibling) { + sibling.return = fiber.return; + nextEffect = sibling; + break; + } + nextEffect = fiber.return; + } +} +function reappearLayoutEffects_complete(subtreeRoot) { + for (; null !== nextEffect; ) { + var fiber = nextEffect; + try { + switch (fiber.tag) { + case 0: + case 11: + case 15: + if (fiber.mode & 2) + try { + startLayoutEffectTimer(); + var nearestMountedAncestor = fiber.return; + try { + commitHookEffectListMount(4, fiber); + } catch (error) { + captureCommitPhaseError(fiber, nearestMountedAncestor, error); } + } finally { + recordLayoutEffectDuration(fiber); + } + else { + var nearestMountedAncestor$jscomp$0 = fiber.return; + try { + commitHookEffectListMount(4, fiber); + } catch (error) { + captureCommitPhaseError( + fiber, + nearestMountedAncestor$jscomp$0, + error + ); + } + } + break; + case 1: + var instance = fiber.stateNode; + if ("function" === typeof instance.componentDidMount) { + var nearestMountedAncestor$jscomp$1 = fiber.return; + try { + instance.componentDidMount(); + } catch (error) { + captureCommitPhaseError( + fiber, + nearestMountedAncestor$jscomp$1, + error + ); } + } + var nearestMountedAncestor$jscomp$2 = fiber.return; + try { + commitAttachRef(fiber); } catch (error) { captureCommitPhaseError( - committedLanes, - committedLanes.return, + fiber, + nearestMountedAncestor$jscomp$2, error ); } - } - if (committedLanes === root) { - nextEffect = null; - break; - } - instance$84 = committedLanes.sibling; - if (null !== instance$84) { - instance$84.return = committedLanes.return; - nextEffect = instance$84; break; - } - nextEffect = committedLanes.return; + case 5: + var nearestMountedAncestor$jscomp$3 = fiber.return; + try { + commitAttachRef(fiber); + } catch (error) { + captureCommitPhaseError( + fiber, + nearestMountedAncestor$jscomp$3, + error + ); + } } - inProgressRoot = inProgressLanes = null; + } catch (error) { + captureCommitPhaseError(fiber, fiber.return, error); + } + if (fiber === subtreeRoot) { + nextEffect = null; + break; + } + var sibling = fiber.sibling; + if (null !== sibling) { + sibling.return = fiber.return; + nextEffect = sibling; + break; + } + nextEffect = fiber.return; + } } var ceil = Math.ceil, ReactCurrentDispatcher$2 = ReactSharedInternals.ReactCurrentDispatcher, @@ -6739,15 +7028,7 @@ function requestUpdateLane(fiber) { } return fiber; } -function scheduleUpdateOnFiber(fiber, lane, eventTime) { - if (50 < nestedUpdateCount) - throw ((nestedUpdateCount = 0), - (rootWithNestedUpdates = null), - Error( - "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops." - )); - var root = markUpdateLaneFromFiberToRoot(fiber, lane); - if (null === root) return null; +function scheduleUpdateOnFiber(root, fiber, lane, eventTime) { markRootUpdated(root, lane, eventTime); if (0 === (executionContext & 2) || root !== workInProgressRoot) isDevToolsPresent && addFiberToLanesMap(root, fiber, lane), @@ -6762,27 +7043,6 @@ function scheduleUpdateOnFiber(fiber, lane, eventTime) { 0 === (fiber.mode & 1) && ((workInProgressRootRenderTargetTime = now() + 500), includesLegacySyncCallbacks && flushSyncCallbacks()); - return root; -} -function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { - sourceFiber.lanes |= lane; - var alternate = sourceFiber.alternate; - null !== alternate && (alternate.lanes |= lane); - alternate = sourceFiber; - for (sourceFiber = sourceFiber.return; null !== sourceFiber; ) - (sourceFiber.childLanes |= lane), - (alternate = sourceFiber.alternate), - null !== alternate && (alternate.childLanes |= lane), - (alternate = sourceFiber), - (sourceFiber = sourceFiber.return); - return 3 === alternate.tag ? alternate.stateNode : null; -} -function isInterleavedUpdate(fiber) { - return ( - (null !== workInProgressRoot || null !== interleavedQueues) && - 0 !== (fiber.mode & 1) && - 0 === (executionContext & 2) - ); } function ensureRootIsScheduled(root, currentTime) { for ( @@ -7198,10 +7458,10 @@ function prepareFreshStack(root, lanes) { workInProgressRootFatalError = null; workInProgressRootPingedLanes = workInProgressRootInterleavedUpdatedLanes = workInProgressRootSkippedLanes = 0; workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors = null; - if (null !== interleavedQueues) { - for (lanes = 0; lanes < interleavedQueues.length; lanes++) + if (null !== concurrentQueues) { + for (lanes = 0; lanes < concurrentQueues.length; lanes++) if ( - ((timeoutHandle = interleavedQueues[lanes]), + ((timeoutHandle = concurrentQueues[lanes]), (interruptedWork = timeoutHandle.interleaved), null !== interruptedWork) ) { @@ -7215,7 +7475,7 @@ function prepareFreshStack(root, lanes) { } timeoutHandle.pending = interruptedWork; } - interleavedQueues = null; + concurrentQueues = null; } return root; } @@ -7314,7 +7574,7 @@ function handleError(root$jscomp$0, thrownValue) { else { var update = createUpdate(-1, 1); update.tag = 2; - enqueueUpdate(sourceFiber, update); + enqueueUpdate(sourceFiber, update, 1); } sourceFiber.lanes |= 1; } @@ -7341,13 +7601,12 @@ function handleError(root$jscomp$0, thrownValue) { ); } } - root = value; + root = value = createCapturedValueAtFiber(value, sourceFiber); 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2); null === workInProgressRootConcurrentErrors ? (workInProgressRootConcurrentErrors = [root]) : workInProgressRootConcurrentErrors.push(root); - value = createCapturedValue(value, sourceFiber); root = returnFiber; do { switch (root.tag) { @@ -7611,7 +7870,11 @@ function commitRootImpl( transitions < recoverableErrors.length; transitions++ ) - renderPriorityLevel(recoverableErrors[transitions]); + (lanes = recoverableErrors[transitions]), + renderPriorityLevel(lanes.value, { + componentStack: lanes.stack, + digest: lanes.digest + }); if (hasUncaughtError) throw ((hasUncaughtError = !1), (root = firstUncaughtError), @@ -7841,11 +8104,10 @@ function enqueuePendingPassiveProfilerEffect(fiber) { })); } function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) { - sourceFiber = createCapturedValue(error, sourceFiber); + sourceFiber = createCapturedValueAtFiber(error, sourceFiber); sourceFiber = createRootErrorUpdate(rootFiber, sourceFiber, 1); - enqueueUpdate(rootFiber, sourceFiber); + rootFiber = enqueueUpdate(rootFiber, sourceFiber, 1); sourceFiber = requestEventTime(); - rootFiber = markUpdateLaneFromFiberToRoot(rootFiber, 1); null !== rootFiber && (markRootUpdated(rootFiber, 1, sourceFiber), ensureRootIsScheduled(rootFiber, sourceFiber)); @@ -7875,18 +8137,18 @@ function captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) { (null === legacyErrorBoundariesThatAlreadyFailed || !legacyErrorBoundariesThatAlreadyFailed.has(instance))) ) { - sourceFiber = createCapturedValue(error, sourceFiber); + sourceFiber = createCapturedValueAtFiber(error, sourceFiber); sourceFiber = createClassErrorUpdate( nearestMountedAncestor, sourceFiber, 1 ); - enqueueUpdate(nearestMountedAncestor, sourceFiber); - sourceFiber = requestEventTime(); - nearestMountedAncestor = markUpdateLaneFromFiberToRoot( + nearestMountedAncestor = enqueueUpdate( nearestMountedAncestor, + sourceFiber, 1 ); + sourceFiber = requestEventTime(); null !== nearestMountedAncestor && (markRootUpdated(nearestMountedAncestor, 1, sourceFiber), ensureRootIsScheduled(nearestMountedAncestor, sourceFiber)); @@ -8559,7 +8821,7 @@ function createFiberFromOffscreen(pendingProps, mode, lanes, key) { pendingProps = createFiber(22, pendingProps, key, mode); pendingProps.elementType = REACT_OFFSCREEN_TYPE; pendingProps.lanes = lanes; - pendingProps.stateNode = {}; + pendingProps.stateNode = { isHidden: !1 }; return pendingProps; } function createFiberFromText(content, mode, lanes) { @@ -8685,9 +8947,10 @@ function updateContainer(element, container, parentComponent, callback) { container.payload = { element: element }; callback = void 0 === callback ? null : callback; null !== callback && (container.callback = callback); - enqueueUpdate(current, container); - element = scheduleUpdateOnFiber(current, lane, eventTime); - null !== element && entangleTransitions(element, current, lane); + element = enqueueUpdate(current, container, lane); + null !== element && + (scheduleUpdateOnFiber(element, current, lane, eventTime), + entangleTransitions(element, current, lane)); return lane; } function emptyFindFiberByHostInstance() { @@ -8722,10 +8985,10 @@ batchedUpdatesImpl = function(fn, a) { } }; var roots = new Map(), - devToolsConfig$jscomp$inline_968 = { + devToolsConfig$jscomp$inline_983 = { findFiberByHostInstance: getInstanceFromInstance, bundleType: 0, - version: "18.2.0-next-d300cebde-20220601", + version: "18.3.0-next-256aefbea-20220614", rendererPackageName: "react-native-renderer", rendererConfig: { getInspectorDataForViewTag: function() { @@ -8740,11 +9003,11 @@ var roots = new Map(), }.bind(null, findNodeHandle) } }; -var internals$jscomp$inline_1234 = { - bundleType: devToolsConfig$jscomp$inline_968.bundleType, - version: devToolsConfig$jscomp$inline_968.version, - rendererPackageName: devToolsConfig$jscomp$inline_968.rendererPackageName, - rendererConfig: devToolsConfig$jscomp$inline_968.rendererConfig, +var internals$jscomp$inline_1256 = { + bundleType: devToolsConfig$jscomp$inline_983.bundleType, + version: devToolsConfig$jscomp$inline_983.version, + rendererPackageName: devToolsConfig$jscomp$inline_983.rendererPackageName, + rendererConfig: devToolsConfig$jscomp$inline_983.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, @@ -8760,26 +9023,26 @@ var internals$jscomp$inline_1234 = { return null === fiber ? null : fiber.stateNode; }, findFiberByHostInstance: - devToolsConfig$jscomp$inline_968.findFiberByHostInstance || + devToolsConfig$jscomp$inline_983.findFiberByHostInstance || emptyFindFiberByHostInstance, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.2.0-next-d300cebde-20220601" + reconcilerVersion: "18.3.0-next-256aefbea-20220614" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_1235 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_1257 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_1235.isDisabled && - hook$jscomp$inline_1235.supportsFiber + !hook$jscomp$inline_1257.isDisabled && + hook$jscomp$inline_1257.supportsFiber ) try { - (rendererID = hook$jscomp$inline_1235.inject( - internals$jscomp$inline_1234 + (rendererID = hook$jscomp$inline_1257.inject( + internals$jscomp$inline_1256 )), - (injectedHook = hook$jscomp$inline_1235); + (injectedHook = hook$jscomp$inline_1257); } catch (err) {} } exports.createPortal = function(children, containerTag) { diff --git a/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js b/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js index 18a204692a609c..53d52fcb075d32 100644 --- a/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +++ b/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js @@ -8,7 +8,7 @@ * @nolint * @providesModule ReactNativeRenderer-dev * @preventMunge - * @generated SignedSource<<8a3af3b821da6ecad0d3cd1faee60e8f>> + * @generated SignedSource<<974611ed206537e6003ad25d9dcde1dc>> */ 'use strict'; @@ -7326,30 +7326,27 @@ function readContext(context) { return value; } -// An array of all update queues that received updates during the current // render. When this render exits, either because it finishes or because it is // interrupted, the interleaved updates will be transferred onto the main part // of the queue. -var interleavedQueues = null; -function pushInterleavedQueue(queue) { - if (interleavedQueues === null) { - interleavedQueues = [queue]; + +var concurrentQueues = null; +function pushConcurrentUpdateQueue(queue) { + if (concurrentQueues === null) { + concurrentQueues = [queue]; } else { - interleavedQueues.push(queue); + concurrentQueues.push(queue); } } -function hasInterleavedUpdates() { - return interleavedQueues !== null; -} -function enqueueInterleavedUpdates() { +function finishQueueingConcurrentUpdates() { // Transfer the interleaved updates onto the main queue. Each queue has a // `pending` field and an `interleaved` field. When they are not null, they // point to the last node in a circular linked list. We need to append the // interleaved list to the end of the pending list by joining them into a // single, circular list. - if (interleavedQueues !== null) { - for (var i = 0; i < interleavedQueues.length; i++) { - var queue = interleavedQueues[i]; + if (concurrentQueues !== null) { + for (var i = 0; i < concurrentQueues.length; i++) { + var queue = concurrentQueues[i]; var lastInterleavedUpdate = queue.interleaved; if (lastInterleavedUpdate !== null) { @@ -7367,7 +7364,121 @@ function enqueueInterleavedUpdates() { } } - interleavedQueues = null; + concurrentQueues = null; + } +} +function enqueueConcurrentHookUpdate(fiber, queue, update, lane) { + var interleaved = queue.interleaved; + + if (interleaved === null) { + // This is the first update. Create a circular list. + update.next = update; // At the end of the current render, this queue's interleaved updates will + // be transferred to the pending queue. + + pushConcurrentUpdateQueue(queue); + } else { + update.next = interleaved.next; + interleaved.next = update; + } + + queue.interleaved = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); +} +function enqueueConcurrentHookUpdateAndEagerlyBailout( + fiber, + queue, + update, + lane +) { + var interleaved = queue.interleaved; + + if (interleaved === null) { + // This is the first update. Create a circular list. + update.next = update; // At the end of the current render, this queue's interleaved updates will + // be transferred to the pending queue. + + pushConcurrentUpdateQueue(queue); + } else { + update.next = interleaved.next; + interleaved.next = update; + } + + queue.interleaved = update; +} +function enqueueConcurrentClassUpdate(fiber, queue, update, lane) { + var interleaved = queue.interleaved; + + if (interleaved === null) { + // This is the first update. Create a circular list. + update.next = update; // At the end of the current render, this queue's interleaved updates will + // be transferred to the pending queue. + + pushConcurrentUpdateQueue(queue); + } else { + update.next = interleaved.next; + interleaved.next = update; + } + + queue.interleaved = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); +} +function enqueueConcurrentRenderForLane(fiber, lane) { + return markUpdateLaneFromFiberToRoot(fiber, lane); +} // Calling this function outside this module should only be done for backwards +// compatibility and should always be accompanied by a warning. + +var unsafe_markUpdateLaneFromFiberToRoot = markUpdateLaneFromFiberToRoot; + +function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { + // TODO: We will detect and infinite update loop and throw even if this fiber + // has already unmounted. This isn't really necessary but it happens to be the + // current behavior we've used for several release cycles. Consider not + // performing this check if the updated fiber already unmounted, since it's + // not possible for that to cause an infinite update loop. + throwIfInfiniteUpdateLoopDetected(); // Update the source fiber's lanes + + sourceFiber.lanes = mergeLanes(sourceFiber.lanes, lane); + var alternate = sourceFiber.alternate; + + if (alternate !== null) { + alternate.lanes = mergeLanes(alternate.lanes, lane); + } + + { + if ( + alternate === null && + (sourceFiber.flags & (Placement | Hydrating)) !== NoFlags + ) { + warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber); + } + } // Walk the parent path to the root and update the child lanes. + + var node = sourceFiber; + var parent = sourceFiber.return; + + while (parent !== null) { + parent.childLanes = mergeLanes(parent.childLanes, lane); + alternate = parent.alternate; + + if (alternate !== null) { + alternate.childLanes = mergeLanes(alternate.childLanes, lane); + } else { + { + if ((parent.flags & (Placement | Hydrating)) !== NoFlags) { + warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber); + } + } + } + + node = parent; + parent = parent.return; + } + + if (node.tag === HostRoot) { + var root = node.stateNode; + return root; + } else { + return null; } } @@ -7433,40 +7544,11 @@ function enqueueUpdate(fiber, update, lane) { if (updateQueue === null) { // Only occurs if the fiber has been unmounted. - return; + return null; } var sharedQueue = updateQueue.shared; - if (isInterleavedUpdate(fiber)) { - var interleaved = sharedQueue.interleaved; - - if (interleaved === null) { - // This is the first update. Create a circular list. - update.next = update; // At the end of the current render, this queue's interleaved updates will - // be transferred to the pending queue. - - pushInterleavedQueue(sharedQueue); - } else { - update.next = interleaved.next; - interleaved.next = update; - } - - sharedQueue.interleaved = update; - } else { - var pending = sharedQueue.pending; - - if (pending === null) { - // This is the first update. Create a circular list. - update.next = update; - } else { - update.next = pending.next; - pending.next = update; - } - - sharedQueue.pending = update; - } - { if ( currentlyProcessingQueue === sharedQueue && @@ -7482,6 +7564,29 @@ function enqueueUpdate(fiber, update, lane) { didWarnUpdateInsideUpdate = true; } } + + if (isUnsafeClassRenderPhaseUpdate()) { + // This is an unsafe render phase update. Add directly to the update + // queue so we can process it immediately during the current render. + var pending = sharedQueue.pending; + + if (pending === null) { + // This is the first update. Create a circular list. + update.next = update; + } else { + update.next = pending.next; + pending.next = update; + } + + sharedQueue.pending = update; // Update the childLanes even though we're most likely already rendering + // this fiber. This is for backwards compatibility in the case where you + // update a different component during render phase than the one that is + // currently renderings (a pattern that is accompanied by a warning). + + return unsafe_markUpdateLaneFromFiberToRoot(fiber, lane); + } else { + return enqueueConcurrentClassUpdate(fiber, sharedQueue, update, lane); + } } function entangleTransitions(root, fiber, lane) { var updateQueue = fiber.updateQueue; @@ -8018,10 +8123,10 @@ var classComponentUpdater = { update.callback = callback; } - enqueueUpdate(fiber, update); - var root = scheduleUpdateOnFiber(fiber, lane, eventTime); + var root = enqueueUpdate(fiber, update, lane); if (root !== null) { + scheduleUpdateOnFiber(root, fiber, lane, eventTime); entangleTransitions(root, fiber, lane); } }, @@ -8041,10 +8146,10 @@ var classComponentUpdater = { update.callback = callback; } - enqueueUpdate(fiber, update); - var root = scheduleUpdateOnFiber(fiber, lane, eventTime); + var root = enqueueUpdate(fiber, update, lane); if (root !== null) { + scheduleUpdateOnFiber(root, fiber, lane, eventTime); entangleTransitions(root, fiber, lane); } }, @@ -8063,10 +8168,10 @@ var classComponentUpdater = { update.callback = callback; } - enqueueUpdate(fiber, update); - var root = scheduleUpdateOnFiber(fiber, lane, eventTime); + var root = enqueueUpdate(fiber, update, lane); if (root !== null) { + scheduleUpdateOnFiber(root, fiber, lane, eventTime); entangleTransitions(root, fiber, lane); } } @@ -8654,7 +8759,7 @@ function mountClassInstance(workInProgress, ctor, newProps, renderLanes) { } if (typeof instance.componentDidMount === "function") { - var fiberFlags = Update; + var fiberFlags = Update | LayoutStatic; workInProgress.flags |= fiberFlags; } @@ -8718,7 +8823,7 @@ function resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) { // If an update was already in progress, we should schedule an Update // effect even though we're bailing out, so that cWU/cDU are called. if (typeof instance.componentDidMount === "function") { - var fiberFlags = Update; + var fiberFlags = Update | LayoutStatic; workInProgress.flags |= fiberFlags; } @@ -8766,7 +8871,7 @@ function resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) { } if (typeof instance.componentDidMount === "function") { - var _fiberFlags = Update; + var _fiberFlags = Update | LayoutStatic; workInProgress.flags |= _fiberFlags; } @@ -8774,7 +8879,7 @@ function resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) { // If an update was already in progress, we should schedule an Update // effect even though we're bailing out, so that cWU/cDU are called. if (typeof instance.componentDidMount === "function") { - var _fiberFlags2 = Update; + var _fiberFlags2 = Update | LayoutStatic; workInProgress.flags |= _fiberFlags2; } // If shouldComponentUpdate returned false, we should still update the @@ -11447,7 +11552,11 @@ function checkIfSnapshotChanged(inst) { } function forceStoreRerender(fiber) { - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } } function mountState(initialState) { @@ -11591,7 +11700,7 @@ function updateInsertionEffect(create, deps) { } function mountLayoutEffect(create, deps) { - var fiberFlags = Update; + var fiberFlags = Update | LayoutStatic; return mountEffectImpl(fiberFlags, Layout, create, deps); } @@ -11645,7 +11754,7 @@ function mountImperativeHandle(ref, create, deps) { var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null; - var fiberFlags = Update; + var fiberFlags = Update | LayoutStatic; return mountEffectImpl( fiberFlags, @@ -11933,11 +12042,11 @@ function dispatchReducerAction(fiber, queue, action) { if (isRenderPhaseUpdate(fiber)) { enqueueRenderPhaseUpdate(queue, update); } else { - enqueueUpdate$1(fiber, queue, update); - var eventTime = requestEventTime(); - var root = scheduleUpdateOnFiber(fiber, lane, eventTime); + var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane); if (root !== null) { + var eventTime = requestEventTime(); + scheduleUpdateOnFiber(root, fiber, lane, eventTime); entangleTransitionUpdate(root, queue, lane); } } @@ -11966,7 +12075,6 @@ function dispatchSetState(fiber, queue, action) { if (isRenderPhaseUpdate(fiber)) { enqueueRenderPhaseUpdate(queue, update); } else { - enqueueUpdate$1(fiber, queue, update); var alternate = fiber.alternate; if ( @@ -12001,6 +12109,13 @@ function dispatchSetState(fiber, queue, action) { // It's still possible that we'll need to rebase this update later, // if the component re-renders for a different reason and by that // time the reducer has changed. + // TODO: Do we still need to entangle transitions in this case? + enqueueConcurrentHookUpdateAndEagerlyBailout( + fiber, + queue, + update, + lane + ); return; } } catch (error) { @@ -12013,10 +12128,11 @@ function dispatchSetState(fiber, queue, action) { } } - var eventTime = requestEventTime(); - var root = scheduleUpdateOnFiber(fiber, lane, eventTime); + var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane); if (root !== null) { + var eventTime = requestEventTime(); + scheduleUpdateOnFiber(root, fiber, lane, eventTime); entangleTransitionUpdate(root, queue, lane); } } @@ -12046,38 +12162,7 @@ function enqueueRenderPhaseUpdate(queue, update) { } queue.pending = update; -} - -function enqueueUpdate$1(fiber, queue, update, lane) { - if (isInterleavedUpdate(fiber)) { - var interleaved = queue.interleaved; - - if (interleaved === null) { - // This is the first update. Create a circular list. - update.next = update; // At the end of the current render, this queue's interleaved updates will - // be transferred to the pending queue. - - pushInterleavedQueue(queue); - } else { - update.next = interleaved.next; - interleaved.next = update; - } - - queue.interleaved = update; - } else { - var pending = queue.pending; - - if (pending === null) { - // This is the first update. Create a circular list. - update.next = update; - } else { - update.next = pending.next; - pending.next = update; - } - - queue.pending = update; - } -} +} // TODO: Move to ReactFiberConcurrentUpdates? function entangleTransitionUpdate(root, queue, lane) { if (isTransitionLane(lane)) { @@ -13125,13 +13210,22 @@ function transferActualDuration(fiber) { } } -function createCapturedValue(value, source) { +function createCapturedValueAtFiber(value, source) { // If the value is an error, call this function immediately after it is thrown // so the stack is accurate. return { value: value, source: source, - stack: getStackByFiberInDevAndProd(source) + stack: getStackByFiberInDevAndProd(source), + digest: null + }; +} +function createCapturedValue(value, digest, stack) { + return { + value: value, + source: null, + stack: stack != null ? stack : null, + digest: digest != null ? digest : null }; } @@ -13487,7 +13581,7 @@ function markSuspenseBoundaryShouldCapture( // prevent a bail out. var update = createUpdate(NoTimestamp, SyncLane); update.tag = ForceUpdate; - enqueueUpdate(sourceFiber, update); + enqueueUpdate(sourceFiber, update, SyncLane); } } // The source fiber did not complete. Mark it with Sync priority to // indicate that it still has pending work. @@ -13617,12 +13711,13 @@ function throwException( value = uncaughtSuspenseError; } - } // We didn't find a boundary that could handle this type of exception. Start + } + + value = createCapturedValueAtFiber(value, sourceFiber); + renderDidError(value); // We didn't find a boundary that could handle this type of exception. Start // over and traverse parent path again, this time treating the exception // as an error. - renderDidError(value); - value = createCapturedValue(value, sourceFiber); var workInProgress = returnFiber; do { @@ -14162,6 +14257,7 @@ function markRef(current, workInProgress) { ) { // Schedule a Ref effect workInProgress.flags |= Ref; + workInProgress.flags |= RefStatic; } } @@ -14260,7 +14356,7 @@ function updateClassComponent( var update = createClassErrorUpdate( workInProgress, - createCapturedValue(error$1, workInProgress), + createCapturedValueAtFiber(error$1, workInProgress), lane ); enqueueCapturedUpdate(workInProgress, update); @@ -15434,21 +15530,35 @@ function updateDehydratedSuspenseComponent( // This boundary is in a permanent fallback state. In this case, we'll never // get an update and we'll never be able to hydrate the final content. Let's just try the // client side render instead. - var _getSuspenseInstanceF = getSuspenseInstanceFallbackErrorDetails(), - errorMessage = _getSuspenseInstanceF.errorMessage; - - var error = errorMessage // eslint-disable-next-line react-internal/prod-error-codes - ? new Error(errorMessage) - : new Error( - "The server could not finish this Suspense boundary, likely " + - "due to an error during server rendering. Switched to " + - "client rendering." - ); + var digest, message, stack; + + { + var _getSuspenseInstanceF = getSuspenseInstanceFallbackErrorDetails(); + + digest = _getSuspenseInstanceF.digest; + message = _getSuspenseInstanceF.message; + stack = _getSuspenseInstanceF.stack; + } + + var error; + + if (message) { + // eslint-disable-next-line react-internal/prod-error-codes + error = new Error(message); + } else { + error = new Error( + "The server could not finish this Suspense boundary, likely " + + "due to an error during server rendering. Switched to " + + "client rendering." + ); + } + + var capturedValue = createCapturedValue(error, digest, stack); return retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, - error + capturedValue ); } // any context has changed, we need to treat is as if the input might have changed. @@ -15476,7 +15586,13 @@ function updateDehydratedSuspenseComponent( suspenseState.retryLane = attemptHydrationAtLane; // TODO: Ideally this would inherit the event time of the current render var eventTime = NoTimestamp; - scheduleUpdateOnFiber(current, attemptHydrationAtLane, eventTime); + enqueueConcurrentRenderForLane(current, attemptHydrationAtLane); + scheduleUpdateOnFiber( + root, + current, + attemptHydrationAtLane, + eventTime + ); } } // If we have scheduled higher pri work above, this will probably just abort the render // since we now have higher priority work, but in case it doesn't, we need to prepare to @@ -15485,10 +15601,8 @@ function updateDehydratedSuspenseComponent( // Delay having to do this as long as the suspense timeout allows us. renderDidSuspendDelayIfPossible(); - return retrySuspenseComponentWithoutHydrating( - current, - workInProgress, - renderLanes, + + var _capturedValue = createCapturedValue( new Error( "This Suspense boundary received an update before it finished " + "hydrating. This caused the boundary to switch to client rendering. " + @@ -15496,6 +15610,13 @@ function updateDehydratedSuspenseComponent( "in startTransition." ) ); + + return retrySuspenseComponentWithoutHydrating( + current, + workInProgress, + renderLanes, + _capturedValue + ); } else if (isSuspenseInstancePending()) { // This component is still pending more data from the server, so we can't hydrate its // content. We treat it as if this component suspended itself. It might seem as if @@ -15540,15 +15661,20 @@ function updateDehydratedSuspenseComponent( if (workInProgress.flags & ForceClientRender) { // Something errored during hydration. Try again without hydrating. workInProgress.flags &= ~ForceClientRender; - return retrySuspenseComponentWithoutHydrating( - current, - workInProgress, - renderLanes, + + var _capturedValue2 = createCapturedValue( new Error( "There was an error while hydrating this Suspense boundary. " + "Switched to client rendering." ) ); + + return retrySuspenseComponentWithoutHydrating( + current, + workInProgress, + renderLanes, + _capturedValue2 + ); } else if (workInProgress.memoizedState !== null) { // Something suspended and we should still be in dehydrated mode. // Leave the existing child in place. @@ -16693,7 +16819,7 @@ function markUpdate(workInProgress) { } function markRef$1(workInProgress) { - workInProgress.flags |= Ref; + workInProgress.flags |= Ref | RefStatic; } var appendAllChildren; @@ -17781,6 +17907,9 @@ function unwindWork(current, workInProgress, renderLanes) { case CacheComponent: return null; + case TracingMarkerComponent: + return null; + default: return null; } @@ -17846,6 +17975,10 @@ var didWarnAboutUndefinedSnapshotBeforeUpdate = null; { didWarnAboutUndefinedSnapshotBeforeUpdate = new Set(); } // Used during the commit phase to track the state of the Offscreen component stack. +// Allows us to avoid traversing the return path to find the nearest Offscreen ancestor. + +var offscreenSubtreeIsHidden = false; +var offscreenSubtreeWasHidden = false; var PossiblyWeakSet = typeof WeakSet === "function" ? WeakSet : Set; var nextEffect = null; // Used for Profiling builds to track updaters. @@ -17881,6 +18014,17 @@ var callComponentWillUnmountWithTimer = function(current, instance) { } }; // Capture errors so they don't interrupt mounting. +function safelyCallCommitHookLayoutEffectListMount( + current, + nearestMountedAncestor +) { + try { + commitHookEffectListMount(Layout, current); + } catch (error) { + captureCommitPhaseError(current, nearestMountedAncestor, error); + } +} // Capture errors so they don't interrupt unmounting. + function safelyCallComponentWillUnmount( current, nearestMountedAncestor, @@ -17893,6 +18037,26 @@ function safelyCallComponentWillUnmount( } } // Capture errors so they don't interrupt mounting. +function safelyCallComponentDidMount( + current, + nearestMountedAncestor, + instance +) { + try { + instance.componentDidMount(); + } catch (error) { + captureCommitPhaseError(current, nearestMountedAncestor, error); + } +} // Capture errors so they don't interrupt mounting. + +function safelyAttachRef(current, nearestMountedAncestor) { + try { + commitAttachRef(current); + } catch (error) { + captureCommitPhaseError(current, nearestMountedAncestor, error); + } +} + function safelyDetachRef(current, nearestMountedAncestor) { var ref = current.ref; @@ -18288,7 +18452,7 @@ function commitLayoutEffectOnFiber( case FunctionComponent: case ForwardRef: case SimpleMemoComponent: { - { + if (!offscreenSubtreeWasHidden) { // At this point layout effects have already been destroyed (during mutation phase). // This is done to prevent sibling component effects from interfering with each other, // e.g. a destroy function in one component should never override a ref set @@ -18312,7 +18476,7 @@ function commitLayoutEffectOnFiber( var instance = finishedWork.stateNode; if (finishedWork.flags & Update) { - { + if (!offscreenSubtreeWasHidden) { if (current === null) { // We could update instance props and state here, // but instead we rely on them being set during last render. @@ -18595,7 +18759,7 @@ function commitLayoutEffectOnFiber( } } - { + if (!offscreenSubtreeWasHidden) { { if (finishedWork.flags & Ref) { commitAttachRef(finishedWork); @@ -18604,6 +18768,45 @@ function commitLayoutEffectOnFiber( } } +function reappearLayoutEffectsOnFiber(node) { + // Turn on layout effects in a tree that previously disappeared. + // TODO (Offscreen) Check: flags & LayoutStatic + switch (node.tag) { + case FunctionComponent: + case ForwardRef: + case SimpleMemoComponent: { + if (node.mode & ProfileMode) { + try { + startLayoutEffectTimer(); + safelyCallCommitHookLayoutEffectListMount(node, node.return); + } finally { + recordLayoutEffectDuration(node); + } + } else { + safelyCallCommitHookLayoutEffectListMount(node, node.return); + } + + break; + } + + case ClassComponent: { + var instance = node.stateNode; + + if (typeof instance.componentDidMount === "function") { + safelyCallComponentDidMount(node, node.return, instance); + } + + safelyAttachRef(node, node.return); + break; + } + + case HostComponent: { + safelyAttachRef(node, node.return); + break; + } + } +} + function hideOrUnhideAllChildren(finishedWork, isHidden) { // Only hide or unhide the top-most host nodes. var hostSubtreeRoot = null; @@ -19077,7 +19280,7 @@ function commitDeletionEffectsOnFiber( switch (deletedFiber.tag) { case HostComponent: { - { + if (!offscreenSubtreeWasHidden) { safelyDetachRef(deletedFiber, nearestMountedAncestor); } // Intentional fallthrough to next branch } @@ -19155,7 +19358,7 @@ function commitDeletionEffectsOnFiber( case ForwardRef: case MemoComponent: case SimpleMemoComponent: { - { + if (!offscreenSubtreeWasHidden) { var updateQueue = deletedFiber.updateQueue; if (updateQueue !== null) { @@ -19211,7 +19414,7 @@ function commitDeletionEffectsOnFiber( } case ClassComponent: { - { + if (!offscreenSubtreeWasHidden) { safelyDetachRef(deletedFiber, nearestMountedAncestor); var instance = deletedFiber.stateNode; @@ -19242,7 +19445,26 @@ function commitDeletionEffectsOnFiber( } case OffscreenComponent: { - { + if (deletedFiber.mode & ConcurrentMode) { + // If this offscreen component is hidden, we already unmounted it. Before + // deleting the children, track that it's already unmounted so that we + // don't attempt to unmount the effects again. + // TODO: If the tree is hidden, in most cases we should be able to skip + // over the nested children entirely. An exception is we haven't yet found + // the topmost host node to delete, which we already track on the stack. + // But the other case is portals, which need to be detached no matter how + // deeply they are nested. We should use a subtree flag to track whether a + // subtree includes a nested portal. + var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; + offscreenSubtreeWasHidden = + prevOffscreenSubtreeWasHidden || deletedFiber.memoizedState !== null; + recursivelyTraverseDeletionEffects( + finishedRoot, + nearestMountedAncestor, + deletedFiber + ); + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; + } else { recursivelyTraverseDeletionEffects( finishedRoot, nearestMountedAncestor, @@ -19540,8 +19762,12 @@ function commitMutationEffectsOnFiber(finishedWork, root, lanes) { var offscreenFiber = finishedWork.child; if (offscreenFiber.flags & Visibility) { + var offscreenInstance = offscreenFiber.stateNode; var newState = offscreenFiber.memoizedState; - var isHidden = newState !== null; + var isHidden = newState !== null; // Track the current state on the Offscreen instance so we can + // read it during an event + + offscreenInstance.isHidden = isHidden; if (isHidden) { var wasHidden = @@ -19571,18 +19797,45 @@ function commitMutationEffectsOnFiber(finishedWork, root, lanes) { case OffscreenComponent: { var _wasHidden = current !== null && current.memoizedState !== null; - { + if (finishedWork.mode & ConcurrentMode) { + // Before committing the children, track on the stack whether this + // offscreen subtree was already hidden, so that we don't unmount the + // effects again. + var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || _wasHidden; + recursivelyTraverseMutationEffects(root, finishedWork); + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; + } else { recursivelyTraverseMutationEffects(root, finishedWork); } commitReconciliationEffects(finishedWork); if (flags & Visibility) { + var _offscreenInstance = finishedWork.stateNode; var _newState = finishedWork.memoizedState; var _isHidden = _newState !== null; - var offscreenBoundary = finishedWork; + var offscreenBoundary = finishedWork; // Track the current state on the Offscreen instance so we can + // read it during an event + + _offscreenInstance.isHidden = _isHidden; + + if (_isHidden) { + if (!_wasHidden) { + if ((offscreenBoundary.mode & ConcurrentMode) !== NoMode) { + nextEffect = offscreenBoundary; + var offscreenChild = offscreenBoundary.child; + + while (offscreenChild !== null) { + nextEffect = offscreenChild; + disappearLayoutEffects_begin(offscreenChild); + offscreenChild = offscreenChild.sibling; + } + } + } + } { // TODO: This needs to run whenever there's an insertion or update @@ -19658,6 +19911,54 @@ function commitLayoutEffects_begin(subtreeRoot, root, committedLanes) { var fiber = nextEffect; var firstChild = fiber.child; + if (fiber.tag === OffscreenComponent && isModernRoot) { + // Keep track of the current Offscreen stack's state. + var isHidden = fiber.memoizedState !== null; + var newOffscreenSubtreeIsHidden = isHidden || offscreenSubtreeIsHidden; + + if (newOffscreenSubtreeIsHidden) { + // The Offscreen tree is hidden. Skip over its layout effects. + commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); + continue; + } else { + // TODO (Offscreen) Also check: subtreeFlags & LayoutMask + var current = fiber.alternate; + var wasHidden = current !== null && current.memoizedState !== null; + var newOffscreenSubtreeWasHidden = + wasHidden || offscreenSubtreeWasHidden; + var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden; + var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; // Traverse the Offscreen subtree with the current Offscreen as the root. + + offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden; + offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden; + + if (offscreenSubtreeWasHidden && !prevOffscreenSubtreeWasHidden) { + // This is the root of a reappearing boundary. Turn its layout effects + // back on. + nextEffect = fiber; + reappearLayoutEffects_begin(fiber); + } + + var child = firstChild; + + while (child !== null) { + nextEffect = child; + commitLayoutEffects_begin( + child, // New root; bubble back up to here and stop. + root, + committedLanes + ); + child = child.sibling; + } // Restore Offscreen state and resume in our-progress traversal. + + nextEffect = fiber; + offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden; + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; + commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); + continue; + } + } + if ((fiber.subtreeFlags & LayoutMask) !== NoFlags && firstChild !== null) { firstChild.return = fiber; nextEffect = firstChild; @@ -19701,6 +20002,151 @@ function commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes) { } } +function disappearLayoutEffects_begin(subtreeRoot) { + while (nextEffect !== null) { + var fiber = nextEffect; + var firstChild = fiber.child; // TODO (Offscreen) Check: flags & (RefStatic | LayoutStatic) + + switch (fiber.tag) { + case FunctionComponent: + case ForwardRef: + case MemoComponent: + case SimpleMemoComponent: { + if (fiber.mode & ProfileMode) { + try { + startLayoutEffectTimer(); + commitHookEffectListUnmount(Layout, fiber, fiber.return); + } finally { + recordLayoutEffectDuration(fiber); + } + } else { + commitHookEffectListUnmount(Layout, fiber, fiber.return); + } + + break; + } + + case ClassComponent: { + // TODO (Offscreen) Check: flags & RefStatic + safelyDetachRef(fiber, fiber.return); + var instance = fiber.stateNode; + + if (typeof instance.componentWillUnmount === "function") { + safelyCallComponentWillUnmount(fiber, fiber.return, instance); + } + + break; + } + + case HostComponent: { + safelyDetachRef(fiber, fiber.return); + break; + } + + case OffscreenComponent: { + // Check if this is a + var isHidden = fiber.memoizedState !== null; + + if (isHidden) { + // Nested Offscreen tree is already hidden. Don't disappear + // its effects. + disappearLayoutEffects_complete(subtreeRoot); + continue; + } + + break; + } + } // TODO (Offscreen) Check: subtreeFlags & LayoutStatic + + if (firstChild !== null) { + firstChild.return = fiber; + nextEffect = firstChild; + } else { + disappearLayoutEffects_complete(subtreeRoot); + } + } +} + +function disappearLayoutEffects_complete(subtreeRoot) { + while (nextEffect !== null) { + var fiber = nextEffect; + + if (fiber === subtreeRoot) { + nextEffect = null; + return; + } + + var sibling = fiber.sibling; + + if (sibling !== null) { + sibling.return = fiber.return; + nextEffect = sibling; + return; + } + + nextEffect = fiber.return; + } +} + +function reappearLayoutEffects_begin(subtreeRoot) { + while (nextEffect !== null) { + var fiber = nextEffect; + var firstChild = fiber.child; + + if (fiber.tag === OffscreenComponent) { + var isHidden = fiber.memoizedState !== null; + + if (isHidden) { + // Nested Offscreen tree is still hidden. Don't re-appear its effects. + reappearLayoutEffects_complete(subtreeRoot); + continue; + } + } // TODO (Offscreen) Check: subtreeFlags & LayoutStatic + + if (firstChild !== null) { + // This node may have been reused from a previous render, so we can't + // assume its return pointer is correct. + firstChild.return = fiber; + nextEffect = firstChild; + } else { + reappearLayoutEffects_complete(subtreeRoot); + } + } +} + +function reappearLayoutEffects_complete(subtreeRoot) { + while (nextEffect !== null) { + var fiber = nextEffect; // TODO (Offscreen) Check: flags & LayoutStatic + + setCurrentFiber(fiber); + + try { + reappearLayoutEffectsOnFiber(fiber); + } catch (error) { + captureCommitPhaseError(fiber, fiber.return, error); + } + + resetCurrentFiber(); + + if (fiber === subtreeRoot) { + nextEffect = null; + return; + } + + var sibling = fiber.sibling; + + if (sibling !== null) { + // This node may have been reused from a previous render, so we can't + // assume its return pointer is correct. + sibling.return = fiber.return; + nextEffect = sibling; + return; + } + + nextEffect = fiber.return; + } +} + function commitPassiveMountEffects( root, finishedWork, @@ -20254,21 +20700,13 @@ function requestRetryLane(fiber) { return claimNextRetryLane(); } -function scheduleUpdateOnFiber(fiber, lane, eventTime) { - checkForNestedUpdates(); - +function scheduleUpdateOnFiber(root, fiber, lane, eventTime) { { if (isRunningInsertionEffect) { error("useInsertionEffect must not schedule updates."); } } - var root = markUpdateLaneFromFiberToRoot(fiber, lane); - - if (root === null) { - return null; - } - { if (isFlushingPassiveEffects) { didScheduleUpdateDuringPassiveEffects = true; @@ -20299,7 +20737,6 @@ function scheduleUpdateOnFiber(fiber, lane, eventTime) { warnIfUpdatesNotWrappedWithActDEV(fiber); if (root === workInProgressRoot) { - // TODO: Consolidate with `isInterleavedUpdate` check // Received an update to a tree that's in the middle of rendering. Mark // that there was an interleaved update work on this root. Unless the // `deferRenderPhaseUpdateToNextBatch` flag is off and this is a render @@ -20340,76 +20777,14 @@ function scheduleUpdateOnFiber(fiber, lane, eventTime) { flushSyncCallbacksOnlyInLegacyMode(); } } - - return root; } -// work without treating it as a typical update that originates from an event; -// e.g. retrying a Suspense boundary isn't an update, but it does schedule work -// on a fiber. - -function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { - // Update the source fiber's lanes - sourceFiber.lanes = mergeLanes(sourceFiber.lanes, lane); - var alternate = sourceFiber.alternate; - - if (alternate !== null) { - alternate.lanes = mergeLanes(alternate.lanes, lane); - } - - { - if ( - alternate === null && - (sourceFiber.flags & (Placement | Hydrating)) !== NoFlags - ) { - warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber); - } - } // Walk the parent path to the root and update the child lanes. - - var node = sourceFiber; - var parent = sourceFiber.return; - - while (parent !== null) { - parent.childLanes = mergeLanes(parent.childLanes, lane); - alternate = parent.alternate; - - if (alternate !== null) { - alternate.childLanes = mergeLanes(alternate.childLanes, lane); - } else { - { - if ((parent.flags & (Placement | Hydrating)) !== NoFlags) { - warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber); - } - } - } - - node = parent; - parent = parent.return; - } - - if (node.tag === HostRoot) { - var root = node.stateNode; - return root; - } else { - return null; - } -} - -function isInterleavedUpdate(fiber, lane) { +function isUnsafeClassRenderPhaseUpdate(fiber) { + // Check if this is a render phase update. Only called by class components, + // which special (deprecated) behavior for UNSAFE_componentWillReceive props. return ( - // TODO: Optimize slightly by comparing to root that fiber belongs to. - // Requires some refactoring. Not a big deal though since it's rare for - // concurrent apps to have more than a single root. - (workInProgressRoot !== null || // If the interleaved updates queue hasn't been cleared yet, then - // we should treat this as an interleaved update, too. This is also a - // defensive coding measure in case a new update comes in between when - // rendering has finished and when the interleaved updates are transferred - // to the main queue. - hasInterleavedUpdates()) && - (fiber.mode & ConcurrentMode) !== NoMode && // If this is a render phase update (i.e. UNSAFE_componentWillReceiveProps), - // then don't treat this as an interleaved update. This pattern is - // accompanied by a warning but we haven't fully deprecated it yet. We can - // remove once the deferRenderPhaseUpdateToNextBatch flag is enabled. - (executionContext & RenderContext) === NoContext + // TODO: Remove outdated deferRenderPhaseUpdateToNextBatch experiment. We + // decided not to enable it. + (executionContext & RenderContext) !== NoContext ); } // Use this function to schedule a task for a root. There's only one task per // root; if a task was already scheduled, we'll check to make sure the priority @@ -21106,7 +21481,7 @@ function prepareFreshStack(root, lanes) { workInProgressRootPingedLanes = NoLanes; workInProgressRootConcurrentErrors = null; workInProgressRootRecoverableErrors = null; - enqueueInterleavedUpdates(); + finishQueueingConcurrentUpdates(); { ReactStrictModeWarnings.discardPendingWarnings(); @@ -21751,7 +22126,12 @@ function commitRootImpl( for (var i = 0; i < recoverableErrors.length; i++) { var recoverableError = recoverableErrors[i]; - onRecoverableError(recoverableError); + var componentStack = recoverableError.stack; + var digest = recoverableError.digest; + onRecoverableError(recoverableError.value, { + componentStack: componentStack, + digest: digest + }); } } @@ -21933,11 +22313,10 @@ function prepareToThrowUncaughtError(error) { var onUncaughtError = prepareToThrowUncaughtError; function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) { - var errorInfo = createCapturedValue(error, sourceFiber); + var errorInfo = createCapturedValueAtFiber(error, sourceFiber); var update = createRootErrorUpdate(rootFiber, errorInfo, SyncLane); - enqueueUpdate(rootFiber, update); + var root = enqueueUpdate(rootFiber, update, SyncLane); var eventTime = requestEventTime(); - var root = markUpdateLaneFromFiberToRoot(rootFiber, SyncLane); if (root !== null) { markRootUpdated(root, SyncLane, eventTime); @@ -21977,11 +22356,10 @@ function captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error$1) { (typeof instance.componentDidCatch === "function" && !isAlreadyFailedLegacyErrorBoundary(instance)) ) { - var errorInfo = createCapturedValue(error$1, sourceFiber); + var errorInfo = createCapturedValueAtFiber(error$1, sourceFiber); var update = createClassErrorUpdate(fiber, errorInfo, SyncLane); - enqueueUpdate(fiber, update); + var root = enqueueUpdate(fiber, update, SyncLane); var eventTime = requestEventTime(); - var root = markUpdateLaneFromFiberToRoot(fiber, SyncLane); if (root !== null) { markRootUpdated(root, SyncLane, eventTime); @@ -22068,7 +22446,7 @@ function retryTimedOutBoundary(boundaryFiber, retryLane) { } // TODO: Special case idle priority? var eventTime = requestEventTime(); - var root = markUpdateLaneFromFiberToRoot(boundaryFiber, retryLane); + var root = enqueueConcurrentRenderForLane(boundaryFiber, retryLane); if (root !== null) { markRootUpdated(root, retryLane, eventTime); @@ -22146,7 +22524,7 @@ function jnd(timeElapsed) { : ceil(timeElapsed / 1960) * 1960; } -function checkForNestedUpdates() { +function throwIfInfiniteUpdateLoopDetected() { if (nestedUpdateCount > NESTED_UPDATE_LIMIT) { nestedUpdateCount = 0; rootWithNestedUpdates = null; @@ -22184,7 +22562,6 @@ function flushRenderPhaseStrictModeWarningsInDEV() { } var didWarnStateUpdateForNotYetMountedComponent = null; - function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) { { if ((executionContext & RenderContext) !== NoContext) { @@ -22244,7 +22621,6 @@ function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) { } } } - var beginWork$1; { @@ -22770,7 +23146,11 @@ function scheduleFibersWithFamiliesRecursively( } if (needsRemount || needsRender) { - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var _root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (_root !== null) { + scheduleUpdateOnFiber(_root, fiber, SyncLane, NoTimestamp); + } } if (child !== null && !needsRemount) { @@ -23475,7 +23855,9 @@ function createFiberFromOffscreen(pendingProps, mode, lanes, key) { var fiber = createFiber(OffscreenComponent, pendingProps, key, mode); fiber.elementType = REACT_OFFSCREEN_TYPE; fiber.lanes = lanes; - var primaryChildInstance = {}; + var primaryChildInstance = { + isHidden: false + }; fiber.stateNode = primaryChildInstance; return fiber; } @@ -23647,7 +24029,7 @@ function createFiberRoot( return root; } -var ReactVersion = "18.2.0-next-d300cebde-20220601"; +var ReactVersion = "18.3.0-next-256aefbea-20220614"; function createPortal( children, @@ -23845,10 +24227,10 @@ function updateContainer(element, container, parentComponent, callback) { update.callback = callback; } - enqueueUpdate(current$1, update); - var root = scheduleUpdateOnFiber(current$1, lane, eventTime); + var root = enqueueUpdate(current$1, update, lane); if (root !== null) { + scheduleUpdateOnFiber(root, current$1, lane, eventTime); entangleTransitions(root, current$1, lane); } @@ -24008,7 +24390,11 @@ var setSuspenseHandler = null; // Shallow cloning props works as a workaround for now to bypass the bailout check. fiber.memoizedProps = assign({}, fiber.memoizedProps); - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } } }; @@ -24025,7 +24411,11 @@ var setSuspenseHandler = null; // Shallow cloning props works as a workaround for now to bypass the bailout check. fiber.memoizedProps = assign({}, fiber.memoizedProps); - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } } }; @@ -24042,7 +24432,11 @@ var setSuspenseHandler = null; // Shallow cloning props works as a workaround for now to bypass the bailout check. fiber.memoizedProps = assign({}, fiber.memoizedProps); - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } } }; // Support DevTools props for function components, forwardRef, memo, host components, etc. @@ -24053,7 +24447,11 @@ var setSuspenseHandler = null; fiber.alternate.pendingProps = fiber.pendingProps; } - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } }; overridePropsDeletePath = function(fiber, path) { @@ -24063,7 +24461,11 @@ var setSuspenseHandler = null; fiber.alternate.pendingProps = fiber.pendingProps; } - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } }; overridePropsRenamePath = function(fiber, oldPath, newPath) { @@ -24073,11 +24475,19 @@ var setSuspenseHandler = null; fiber.alternate.pendingProps = fiber.pendingProps; } - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } }; scheduleUpdate = function(fiber) { - scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); + var root = enqueueConcurrentRenderForLane(fiber, SyncLane); + + if (root !== null) { + scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp); + } }; setErrorHandler = function(newShouldErrorImpl) { diff --git a/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js b/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js index 5e26abc86f4451..81a8e1816c1cfe 100644 --- a/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +++ b/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js @@ -8,7 +8,7 @@ * @nolint * @providesModule ReactNativeRenderer-prod * @preventMunge - * @generated SignedSource<<9f59a543175acb00b00023e9ed7d8c38>> + * @generated SignedSource<<0896b38d06c63b48ba346b97147af345>> */ "use strict"; @@ -1017,7 +1017,7 @@ eventPluginOrder = Array.prototype.slice.call([ "ReactNativeBridgeEventPlugin" ]); recomputePluginOrdering(); -var injectedNamesToPlugins$jscomp$inline_225 = { +var injectedNamesToPlugins$jscomp$inline_229 = { ResponderEventPlugin: ResponderEventPlugin, ReactNativeBridgeEventPlugin: { eventTypes: {}, @@ -1063,33 +1063,33 @@ var injectedNamesToPlugins$jscomp$inline_225 = { } } }, - isOrderingDirty$jscomp$inline_226 = !1, - pluginName$jscomp$inline_227; -for (pluginName$jscomp$inline_227 in injectedNamesToPlugins$jscomp$inline_225) + isOrderingDirty$jscomp$inline_230 = !1, + pluginName$jscomp$inline_231; +for (pluginName$jscomp$inline_231 in injectedNamesToPlugins$jscomp$inline_229) if ( - injectedNamesToPlugins$jscomp$inline_225.hasOwnProperty( - pluginName$jscomp$inline_227 + injectedNamesToPlugins$jscomp$inline_229.hasOwnProperty( + pluginName$jscomp$inline_231 ) ) { - var pluginModule$jscomp$inline_228 = - injectedNamesToPlugins$jscomp$inline_225[pluginName$jscomp$inline_227]; + var pluginModule$jscomp$inline_232 = + injectedNamesToPlugins$jscomp$inline_229[pluginName$jscomp$inline_231]; if ( - !namesToPlugins.hasOwnProperty(pluginName$jscomp$inline_227) || - namesToPlugins[pluginName$jscomp$inline_227] !== - pluginModule$jscomp$inline_228 + !namesToPlugins.hasOwnProperty(pluginName$jscomp$inline_231) || + namesToPlugins[pluginName$jscomp$inline_231] !== + pluginModule$jscomp$inline_232 ) { - if (namesToPlugins[pluginName$jscomp$inline_227]) + if (namesToPlugins[pluginName$jscomp$inline_231]) throw Error( "EventPluginRegistry: Cannot inject two different event plugins using the same name, `" + - (pluginName$jscomp$inline_227 + "`.") + (pluginName$jscomp$inline_231 + "`.") ); namesToPlugins[ - pluginName$jscomp$inline_227 - ] = pluginModule$jscomp$inline_228; - isOrderingDirty$jscomp$inline_226 = !0; + pluginName$jscomp$inline_231 + ] = pluginModule$jscomp$inline_232; + isOrderingDirty$jscomp$inline_230 = !0; } } -isOrderingDirty$jscomp$inline_226 && recomputePluginOrdering(); +isOrderingDirty$jscomp$inline_230 && recomputePluginOrdering(); var instanceCache = new Map(), instanceProps = new Map(); function getInstanceFromTag(tag) { @@ -2300,8 +2300,40 @@ function readContext(context) { } else lastContextDependency = lastContextDependency.next = context; return value; } -var interleavedQueues = null, - hasForceUpdate = !1; +var concurrentQueues = null; +function pushConcurrentUpdateQueue(queue) { + null === concurrentQueues + ? (concurrentQueues = [queue]) + : concurrentQueues.push(queue); +} +function enqueueConcurrentHookUpdate(fiber, queue, update, lane) { + var interleaved = queue.interleaved; + null === interleaved + ? ((update.next = update), pushConcurrentUpdateQueue(queue)) + : ((update.next = interleaved.next), (interleaved.next = update)); + queue.interleaved = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); +} +function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { + if (50 < nestedUpdateCount) + throw ((nestedUpdateCount = 0), + (rootWithNestedUpdates = null), + Error( + "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops." + )); + sourceFiber.lanes |= lane; + var alternate = sourceFiber.alternate; + null !== alternate && (alternate.lanes |= lane); + alternate = sourceFiber; + for (sourceFiber = sourceFiber.return; null !== sourceFiber; ) + (sourceFiber.childLanes |= lane), + (alternate = sourceFiber.alternate), + null !== alternate && (alternate.childLanes |= lane), + (alternate = sourceFiber), + (sourceFiber = sourceFiber.return); + return 3 === alternate.tag ? alternate.stateNode : null; +} +var hasForceUpdate = !1; function initializeUpdateQueue(fiber) { fiber.updateQueue = { baseState: fiber.memoizedState, @@ -2332,24 +2364,24 @@ function createUpdate(eventTime, lane) { next: null }; } -function enqueueUpdate(fiber, update) { +function enqueueUpdate(fiber, update, lane) { var updateQueue = fiber.updateQueue; - null !== updateQueue && - ((updateQueue = updateQueue.shared), - isInterleavedUpdate(fiber) - ? ((fiber = updateQueue.interleaved), - null === fiber - ? ((update.next = update), - null === interleavedQueues - ? (interleavedQueues = [updateQueue]) - : interleavedQueues.push(updateQueue)) - : ((update.next = fiber.next), (fiber.next = update)), - (updateQueue.interleaved = update)) - : ((fiber = updateQueue.pending), - null === fiber - ? (update.next = update) - : ((update.next = fiber.next), (fiber.next = update)), - (updateQueue.pending = update))); + if (null === updateQueue) return null; + updateQueue = updateQueue.shared; + if (0 !== (executionContext & 2)) { + var pending = updateQueue.pending; + null === pending + ? (update.next = update) + : ((update.next = pending.next), (pending.next = update)); + updateQueue.pending = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); + } + pending = updateQueue.interleaved; + null === pending + ? ((update.next = update), pushConcurrentUpdateQueue(updateQueue)) + : ((update.next = pending.next), (pending.next = update)); + updateQueue.interleaved = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); } function entangleTransitions(root, fiber, lane) { fiber = fiber.updateQueue; @@ -2586,9 +2618,10 @@ var classComponentUpdater = { update = createUpdate(eventTime, lane); update.payload = payload; void 0 !== callback && null !== callback && (update.callback = callback); - enqueueUpdate(inst, update); - payload = scheduleUpdateOnFiber(inst, lane, eventTime); - null !== payload && entangleTransitions(payload, inst, lane); + payload = enqueueUpdate(inst, update, lane); + null !== payload && + (scheduleUpdateOnFiber(payload, inst, lane, eventTime), + entangleTransitions(payload, inst, lane)); }, enqueueReplaceState: function(inst, payload, callback) { inst = inst._reactInternals; @@ -2598,9 +2631,10 @@ var classComponentUpdater = { update.tag = 1; update.payload = payload; void 0 !== callback && null !== callback && (update.callback = callback); - enqueueUpdate(inst, update); - payload = scheduleUpdateOnFiber(inst, lane, eventTime); - null !== payload && entangleTransitions(payload, inst, lane); + payload = enqueueUpdate(inst, update, lane); + null !== payload && + (scheduleUpdateOnFiber(payload, inst, lane, eventTime), + entangleTransitions(payload, inst, lane)); }, enqueueForceUpdate: function(inst, callback) { inst = inst._reactInternals; @@ -2609,9 +2643,10 @@ var classComponentUpdater = { update = createUpdate(eventTime, lane); update.tag = 2; void 0 !== callback && null !== callback && (update.callback = callback); - enqueueUpdate(inst, update); - callback = scheduleUpdateOnFiber(inst, lane, eventTime); - null !== callback && entangleTransitions(callback, inst, lane); + callback = enqueueUpdate(inst, update, lane); + null !== callback && + (scheduleUpdateOnFiber(callback, inst, lane, eventTime), + entangleTransitions(callback, inst, lane)); } }; function checkShouldComponentUpdate( @@ -2702,7 +2737,7 @@ function mountClassInstance(workInProgress, ctor, newProps, renderLanes) { processUpdateQueue(workInProgress, newProps, instance, renderLanes), (instance.state = workInProgress.memoizedState)); "function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4); + (workInProgress.flags |= 4194308); } function coerceRef(returnFiber, current, element) { returnFiber = element.ref; @@ -3716,11 +3751,11 @@ function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) { function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) { inst.value = nextSnapshot; inst.getSnapshot = getSnapshot; - checkIfSnapshotChanged(inst) && scheduleUpdateOnFiber(fiber, 1, -1); + checkIfSnapshotChanged(inst) && forceStoreRerender(fiber); } function subscribeToStore(fiber, inst, subscribe) { return subscribe(function() { - checkIfSnapshotChanged(inst) && scheduleUpdateOnFiber(fiber, 1, -1); + checkIfSnapshotChanged(inst) && forceStoreRerender(fiber); }); } function checkIfSnapshotChanged(inst) { @@ -3733,6 +3768,10 @@ function checkIfSnapshotChanged(inst) { return !0; } } +function forceStoreRerender(fiber) { + var root = markUpdateLaneFromFiberToRoot(fiber, 1); + null !== root && scheduleUpdateOnFiber(root, fiber, 1, -1); +} function mountState(initialState) { var hook = mountWorkInProgressHook(); "function" === typeof initialState && (initialState = initialState()); @@ -3903,12 +3942,15 @@ function dispatchReducerAction(fiber, queue, action) { eagerState: null, next: null }; - isRenderPhaseUpdate(fiber) - ? enqueueRenderPhaseUpdate(queue, action) - : (enqueueUpdate$1(fiber, queue, action), - (action = requestEventTime()), - (fiber = scheduleUpdateOnFiber(fiber, lane, action)), - null !== fiber && entangleTransitionUpdate(fiber, queue, lane)); + if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, action); + else if ( + ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)), + null !== action) + ) { + var eventTime = requestEventTime(); + scheduleUpdateOnFiber(action, fiber, lane, eventTime); + entangleTransitionUpdate(action, queue, lane); + } } function dispatchSetState(fiber, queue, action) { var lane = requestUpdateLane(fiber), @@ -3921,7 +3963,6 @@ function dispatchSetState(fiber, queue, action) { }; if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update); else { - enqueueUpdate$1(fiber, queue, update); var alternate = fiber.alternate; if ( 0 === fiber.lanes && @@ -3933,13 +3974,22 @@ function dispatchSetState(fiber, queue, action) { eagerState = alternate(currentState, action); update.hasEagerState = !0; update.eagerState = eagerState; - if (objectIs(eagerState, currentState)) return; + if (objectIs(eagerState, currentState)) { + var interleaved = queue.interleaved; + null === interleaved + ? ((update.next = update), pushConcurrentUpdateQueue(queue)) + : ((update.next = interleaved.next), (interleaved.next = update)); + queue.interleaved = update; + return; + } } catch (error) { } finally { } - action = requestEventTime(); - fiber = scheduleUpdateOnFiber(fiber, lane, action); - null !== fiber && entangleTransitionUpdate(fiber, queue, lane); + action = enqueueConcurrentHookUpdate(fiber, queue, update, lane); + null !== action && + ((update = requestEventTime()), + scheduleUpdateOnFiber(action, fiber, lane, update), + entangleTransitionUpdate(action, queue, lane)); } } function isRenderPhaseUpdate(fiber) { @@ -3957,22 +4007,6 @@ function enqueueRenderPhaseUpdate(queue, update) { : ((update.next = pending.next), (pending.next = update)); queue.pending = update; } -function enqueueUpdate$1(fiber, queue, update) { - isInterleavedUpdate(fiber) - ? ((fiber = queue.interleaved), - null === fiber - ? ((update.next = update), - null === interleavedQueues - ? (interleavedQueues = [queue]) - : interleavedQueues.push(queue)) - : ((update.next = fiber.next), (fiber.next = update)), - (queue.interleaved = update)) - : ((fiber = queue.pending), - null === fiber - ? (update.next = update) - : ((update.next = fiber.next), (fiber.next = update)), - (queue.pending = update)); -} function entangleTransitionUpdate(root, queue, lane) { if (0 !== (lane & 4194240)) { var queueLanes = queue.lanes; @@ -4016,14 +4050,14 @@ var ContextOnlyDispatcher = { useImperativeHandle: function(ref, create, deps) { deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null; return mountEffectImpl( - 4, + 4194308, 4, imperativeHandleEffect.bind(null, create, ref), deps ); }, useLayoutEffect: function(create, deps) { - return mountEffectImpl(4, 4, create, deps); + return mountEffectImpl(4194308, 4, create, deps); }, useInsertionEffect: function(create, deps) { return mountEffectImpl(4, 2, create, deps); @@ -4168,11 +4202,20 @@ var ContextOnlyDispatcher = { useId: updateId, unstable_isNewReconciler: !1 }; -function createCapturedValue(value, source) { +function createCapturedValueAtFiber(value, source) { return { value: value, source: source, - stack: getStackByFiberInDevAndProd(source) + stack: getStackByFiberInDevAndProd(source), + digest: null + }; +} +function createCapturedValue(value, digest, stack) { + return { + value: value, + source: null, + stack: null != stack ? stack : null, + digest: null != digest ? digest : null }; } if ( @@ -4437,7 +4480,7 @@ function markRef(current, workInProgress) { (null === current && null !== ref) || (null !== current && current.ref !== ref) ) - workInProgress.flags |= 512; + (workInProgress.flags |= 512), (workInProgress.flags |= 2097152); } function updateFunctionComponent( current, @@ -4549,9 +4592,9 @@ function updateClassComponent( "function" === typeof instance.UNSAFE_componentWillMount && instance.UNSAFE_componentWillMount()), "function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4)) + (workInProgress.flags |= 4194308)) : ("function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4), + (workInProgress.flags |= 4194308), (workInProgress.memoizedProps = nextProps), (workInProgress.memoizedState = oldContext)), (instance.props = nextProps), @@ -4559,7 +4602,7 @@ function updateClassComponent( (instance.context = contextType), (nextProps = oldProps)) : ("function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4), + (workInProgress.flags |= 4194308), (nextProps = !1)); } else { instance = workInProgress.stateNode; @@ -4899,13 +4942,16 @@ function updateDehydratedSuspenseComponent( if (workInProgress.flags & 256) return ( (workInProgress.flags &= -257), + (suspenseState = createCapturedValue( + Error( + "There was an error while hydrating this Suspense boundary. Switched to client rendering." + ) + )), retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, - Error( - "There was an error while hydrating this Suspense boundary. Switched to client rendering." - ) + suspenseState ) ); if (null !== workInProgress.memoizedState) @@ -4950,16 +4996,19 @@ function updateDehydratedSuspenseComponent( ); if (shim()) return ( - (suspenseState = shim().errorMessage), + (suspenseState = shim().digest), + (suspenseState = createCapturedValue( + Error( + "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." + ), + suspenseState, + void 0 + )), retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, suspenseState - ? Error(suspenseState) - : Error( - "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." - ) ) ); didSuspend = 0 !== (renderLanes & current.childLanes); @@ -5002,23 +5051,27 @@ function updateDehydratedSuspenseComponent( default: didSuspend = 0; } - nextProps = + didSuspend = 0 !== (didSuspend & (nextProps.suspendedLanes | renderLanes)) ? 0 : didSuspend; - 0 !== nextProps && - nextProps !== suspenseState.retryLane && - ((suspenseState.retryLane = nextProps), - scheduleUpdateOnFiber(current, nextProps, -1)); + 0 !== didSuspend && + didSuspend !== suspenseState.retryLane && + ((suspenseState.retryLane = didSuspend), + markUpdateLaneFromFiberToRoot(current, didSuspend), + scheduleUpdateOnFiber(nextProps, current, didSuspend, -1)); } renderDidSuspendDelayIfPossible(); + suspenseState = createCapturedValue( + Error( + "This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition." + ) + ); return retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, - Error( - "This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition." - ) + suspenseState ); } if (shim()) @@ -5297,14 +5350,14 @@ function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) { break; case "collapsed": lastTailNode = renderState.tail; - for (var lastTailNode$60 = null; null !== lastTailNode; ) - null !== lastTailNode.alternate && (lastTailNode$60 = lastTailNode), + for (var lastTailNode$62 = null; null !== lastTailNode; ) + null !== lastTailNode.alternate && (lastTailNode$62 = lastTailNode), (lastTailNode = lastTailNode.sibling); - null === lastTailNode$60 + null === lastTailNode$62 ? hasRenderedATailFallback || null === renderState.tail ? (renderState.tail = null) : (renderState.tail.sibling = null) - : (lastTailNode$60.sibling = null); + : (lastTailNode$62.sibling = null); } } function bubbleProperties(completedWork) { @@ -5314,19 +5367,19 @@ function bubbleProperties(completedWork) { newChildLanes = 0, subtreeFlags = 0; if (didBailout) - for (var child$61 = completedWork.child; null !== child$61; ) - (newChildLanes |= child$61.lanes | child$61.childLanes), - (subtreeFlags |= child$61.subtreeFlags & 14680064), - (subtreeFlags |= child$61.flags & 14680064), - (child$61.return = completedWork), - (child$61 = child$61.sibling); + for (var child$63 = completedWork.child; null !== child$63; ) + (newChildLanes |= child$63.lanes | child$63.childLanes), + (subtreeFlags |= child$63.subtreeFlags & 14680064), + (subtreeFlags |= child$63.flags & 14680064), + (child$63.return = completedWork), + (child$63 = child$63.sibling); else - for (child$61 = completedWork.child; null !== child$61; ) - (newChildLanes |= child$61.lanes | child$61.childLanes), - (subtreeFlags |= child$61.subtreeFlags), - (subtreeFlags |= child$61.flags), - (child$61.return = completedWork), - (child$61 = child$61.sibling); + for (child$63 = completedWork.child; null !== child$63; ) + (newChildLanes |= child$63.lanes | child$63.childLanes), + (subtreeFlags |= child$63.subtreeFlags), + (subtreeFlags |= child$63.flags), + (child$63.return = completedWork), + (child$63 = child$63.sibling); completedWork.subtreeFlags |= subtreeFlags; completedWork.childLanes = newChildLanes; return didBailout; @@ -5386,7 +5439,8 @@ function completeWork(current, workInProgress, renderLanes) { newProps, renderLanes ), - current.ref !== workInProgress.ref && (workInProgress.flags |= 512); + current.ref !== workInProgress.ref && + (workInProgress.flags |= 2097664); else { if (!newProps) { if (null === workInProgress.stateNode) @@ -5421,7 +5475,7 @@ function completeWork(current, workInProgress, renderLanes) { appendAllChildren(renderLanes, workInProgress, !1, !1); workInProgress.stateNode = renderLanes; finalizeInitialChildren(renderLanes) && (workInProgress.flags |= 4); - null !== workInProgress.ref && (workInProgress.flags |= 512); + null !== workInProgress.ref && (workInProgress.flags |= 2097664); } bubbleProperties(workInProgress); return null; @@ -5712,11 +5766,15 @@ function unwindWork(current, workInProgress) { return popRenderLanes(), null; case 24: return null; + case 25: + return null; default: return null; } } -var PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set, +var offscreenSubtreeIsHidden = !1, + offscreenSubtreeWasHidden = !1, + PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set, nextEffect = null; function safelyDetachRef(current, nearestMountedAncestor) { var ref = current.ref; @@ -5824,13 +5882,29 @@ function commitHookEffectListMount(flags, finishedWork) { var effect = (finishedWork = finishedWork.next); do { if ((effect.tag & flags) === flags) { - var create$73 = effect.create; - effect.destroy = create$73(); + var create$75 = effect.create; + effect.destroy = create$75(); } effect = effect.next; } while (effect !== finishedWork); } } +function commitAttachRef(finishedWork) { + var ref = finishedWork.ref; + if (null !== ref) { + var instance = finishedWork.stateNode; + switch (finishedWork.tag) { + case 5: + finishedWork = instance; + break; + default: + finishedWork = instance; + } + "function" === typeof ref + ? ref(finishedWork) + : (ref.current = finishedWork); + } +} function detachFiberAfterEffects(fiber) { var alternate = fiber.alternate; null !== alternate && @@ -5971,7 +6045,8 @@ function commitDeletionEffectsOnFiber( } catch (err) {} switch (deletedFiber.tag) { case 5: - safelyDetachRef(deletedFiber, nearestMountedAncestor); + offscreenSubtreeWasHidden || + safelyDetachRef(deletedFiber, nearestMountedAncestor); case 6: var prevHostParent = hostParent, prevHostParentIsContainer = hostParentIsContainer; @@ -6032,10 +6107,12 @@ function commitDeletionEffectsOnFiber( case 11: case 14: case 15: - prevHostParent = deletedFiber.updateQueue; if ( + !offscreenSubtreeWasHidden && + ((prevHostParent = deletedFiber.updateQueue), null !== prevHostParent && - ((prevHostParent = prevHostParent.lastEffect), null !== prevHostParent) + ((prevHostParent = prevHostParent.lastEffect), + null !== prevHostParent)) ) { prevHostParentIsContainer = prevHostParent = prevHostParent.next; do { @@ -6061,9 +6138,12 @@ function commitDeletionEffectsOnFiber( ); break; case 1: - safelyDetachRef(deletedFiber, nearestMountedAncestor); - prevHostParent = deletedFiber.stateNode; - if ("function" === typeof prevHostParent.componentWillUnmount) + if ( + !offscreenSubtreeWasHidden && + (safelyDetachRef(deletedFiber, nearestMountedAncestor), + (prevHostParent = deletedFiber.stateNode), + "function" === typeof prevHostParent.componentWillUnmount) + ) try { (prevHostParent.props = deletedFiber.memoizedProps), (prevHostParent.state = deletedFiber.memoizedState), @@ -6085,11 +6165,21 @@ function commitDeletionEffectsOnFiber( ); break; case 22: - recursivelyTraverseDeletionEffects( - finishedRoot, - nearestMountedAncestor, - deletedFiber - ); + deletedFiber.mode & 1 + ? ((offscreenSubtreeWasHidden = + (prevHostParent = offscreenSubtreeWasHidden) || + null !== deletedFiber.memoizedState), + recursivelyTraverseDeletionEffects( + finishedRoot, + nearestMountedAncestor, + deletedFiber + ), + (offscreenSubtreeWasHidden = prevHostParent)) + : recursivelyTraverseDeletionEffects( + finishedRoot, + nearestMountedAncestor, + deletedFiber + ); break; default: recursivelyTraverseDeletionEffects( @@ -6177,8 +6267,8 @@ function commitMutationEffectsOnFiber(finishedWork, root) { } try { commitHookEffectListUnmount(5, finishedWork, finishedWork.return); - } catch (error$83) { - captureCommitPhaseError(finishedWork, finishedWork.return, error$83); + } catch (error$85) { + captureCommitPhaseError(finishedWork, finishedWork.return, error$85); } } break; @@ -6196,16 +6286,16 @@ function commitMutationEffectsOnFiber(finishedWork, root) { null !== current && safelyDetachRef(current, current.return); if (flags & 4) { - var instance$85 = finishedWork.stateNode; - if (null != instance$85) { + var instance$87 = finishedWork.stateNode; + if (null != instance$87) { var newProps = finishedWork.memoizedProps, oldProps = null !== current ? current.memoizedProps : newProps, updatePayload = finishedWork.updateQueue; finishedWork.updateQueue = null; if (null !== updatePayload) try { - var viewConfig = instance$85.viewConfig; - instanceProps.set(instance$85._nativeTag, newProps); + var viewConfig = instance$87.viewConfig; + instanceProps.set(instance$87._nativeTag, newProps); var updatePayload$jscomp$0 = diffProperties( null, oldProps, @@ -6214,15 +6304,15 @@ function commitMutationEffectsOnFiber(finishedWork, root) { ); null != updatePayload$jscomp$0 && ReactNativePrivateInterface.UIManager.updateView( - instance$85._nativeTag, + instance$87._nativeTag, viewConfig.uiViewClassName, updatePayload$jscomp$0 ); - } catch (error$86) { + } catch (error$88) { captureCommitPhaseError( finishedWork, finishedWork.return, - error$86 + error$88 ); } } @@ -6236,16 +6326,16 @@ function commitMutationEffectsOnFiber(finishedWork, root) { throw Error( "This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue." ); - viewConfig = finishedWork.stateNode; - updatePayload$jscomp$0 = finishedWork.memoizedProps; + instance$87 = finishedWork.stateNode; + newProps = finishedWork.memoizedProps; try { ReactNativePrivateInterface.UIManager.updateView( - viewConfig, + instance$87, "RCTRawText", - { text: updatePayload$jscomp$0 } + { text: newProps } ); - } catch (error$87) { - captureCommitPhaseError(finishedWork, finishedWork.return, error$87); + } catch (error$89) { + captureCommitPhaseError(finishedWork, finishedWork.return, error$89); } } break; @@ -6260,31 +6350,93 @@ function commitMutationEffectsOnFiber(finishedWork, root) { case 13: recursivelyTraverseMutationEffects(root, finishedWork); commitReconciliationEffects(finishedWork); - viewConfig = finishedWork.child; - viewConfig.flags & 8192 && - null !== viewConfig.memoizedState && - (null === viewConfig.alternate || - null === viewConfig.alternate.memoizedState) && - (globalMostRecentFallbackTime = now()); + instance$87 = finishedWork.child; + instance$87.flags & 8192 && + ((newProps = null !== instance$87.memoizedState), + (instance$87.stateNode.isHidden = newProps), + !newProps || + (null !== instance$87.alternate && + null !== instance$87.alternate.memoizedState) || + (globalMostRecentFallbackTime = now())); flags & 4 && attachSuspenseRetryListeners(finishedWork); break; case 22: - recursivelyTraverseMutationEffects(root, finishedWork); + viewConfig = null !== current && null !== current.memoizedState; + finishedWork.mode & 1 + ? ((offscreenSubtreeWasHidden = + (updatePayload$jscomp$0 = offscreenSubtreeWasHidden) || viewConfig), + recursivelyTraverseMutationEffects(root, finishedWork), + (offscreenSubtreeWasHidden = updatePayload$jscomp$0)) + : recursivelyTraverseMutationEffects(root, finishedWork); commitReconciliationEffects(finishedWork); - if (flags & 8192) - a: for ( - viewConfig = null !== finishedWork.memoizedState, - updatePayload$jscomp$0 = null, - current = finishedWork; - ; + if (flags & 8192) { + flags = null !== finishedWork.memoizedState; + if ( + (finishedWork.stateNode.isHidden = flags) && + !viewConfig && + 0 !== (finishedWork.mode & 1) + ) + for ( + nextEffect = finishedWork, viewConfig = finishedWork.child; + null !== viewConfig; - ) { - if (5 === current.tag) { - if (null === updatePayload$jscomp$0) { - updatePayload$jscomp$0 = current; + ) { + for ( + updatePayload$jscomp$0 = nextEffect = viewConfig; + null !== nextEffect; + + ) { + root = nextEffect; + current = root.child; + switch (root.tag) { + case 0: + case 11: + case 14: + case 15: + commitHookEffectListUnmount(4, root, root.return); + break; + case 1: + safelyDetachRef(root, root.return); + var instance = root.stateNode; + if ("function" === typeof instance.componentWillUnmount) { + var current$jscomp$0 = root, + nearestMountedAncestor = root.return; + try { + var current$jscomp$1 = current$jscomp$0; + instance.props = current$jscomp$1.memoizedProps; + instance.state = current$jscomp$1.memoizedState; + instance.componentWillUnmount(); + } catch (error) { + captureCommitPhaseError( + current$jscomp$0, + nearestMountedAncestor, + error + ); + } + } + break; + case 5: + safelyDetachRef(root, root.return); + break; + case 22: + if (null !== root.memoizedState) { + disappearLayoutEffects_complete(updatePayload$jscomp$0); + continue; + } + } + null !== current + ? ((current.return = root), (nextEffect = current)) + : disappearLayoutEffects_complete(updatePayload$jscomp$0); + } + viewConfig = viewConfig.sibling; + } + a: for (viewConfig = null, updatePayload$jscomp$0 = finishedWork; ; ) { + if (5 === updatePayload$jscomp$0.tag) { + if (null === viewConfig) { + viewConfig = updatePayload$jscomp$0; try { - if (((instance$85 = current.stateNode), viewConfig)) - (newProps = instance$85.viewConfig), + if (((instance$87 = updatePayload$jscomp$0.stateNode), flags)) + (newProps = instance$87.viewConfig), (oldProps = diffProperties( null, emptyObject, @@ -6292,13 +6444,13 @@ function commitMutationEffectsOnFiber(finishedWork, root) { newProps.validAttributes )), ReactNativePrivateInterface.UIManager.updateView( - instance$85._nativeTag, + instance$87._nativeTag, newProps.uiViewClassName, oldProps ); else { - updatePayload = current.stateNode; - var props = current.memoizedProps, + updatePayload = updatePayload$jscomp$0.stateNode; + var props = updatePayload$jscomp$0.memoizedProps, viewConfig$jscomp$0 = updatePayload.viewConfig, prevProps = assign({}, props, { style: [props.style, { display: "none" }] @@ -6323,39 +6475,43 @@ function commitMutationEffectsOnFiber(finishedWork, root) { ); } } - } else if (6 === current.tag) { - if (null === updatePayload$jscomp$0) + } else if (6 === updatePayload$jscomp$0.tag) { + if (null === viewConfig) try { throw Error("Not yet implemented."); - } catch (error$78) { + } catch (error$80) { captureCommitPhaseError( finishedWork, finishedWork.return, - error$78 + error$80 ); } } else if ( - ((22 !== current.tag && 23 !== current.tag) || - null === current.memoizedState || - current === finishedWork) && - null !== current.child + ((22 !== updatePayload$jscomp$0.tag && + 23 !== updatePayload$jscomp$0.tag) || + null === updatePayload$jscomp$0.memoizedState || + updatePayload$jscomp$0 === finishedWork) && + null !== updatePayload$jscomp$0.child ) { - current.child.return = current; - current = current.child; + updatePayload$jscomp$0.child.return = updatePayload$jscomp$0; + updatePayload$jscomp$0 = updatePayload$jscomp$0.child; continue; } - if (current === finishedWork) break a; - for (; null === current.sibling; ) { - if (null === current.return || current.return === finishedWork) + if (updatePayload$jscomp$0 === finishedWork) break a; + for (; null === updatePayload$jscomp$0.sibling; ) { + if ( + null === updatePayload$jscomp$0.return || + updatePayload$jscomp$0.return === finishedWork + ) break a; - updatePayload$jscomp$0 === current && - (updatePayload$jscomp$0 = null); - current = current.return; + viewConfig === updatePayload$jscomp$0 && (viewConfig = null); + updatePayload$jscomp$0 = updatePayload$jscomp$0.return; } - updatePayload$jscomp$0 === current && (updatePayload$jscomp$0 = null); - current.sibling.return = current.return; - current = current.sibling; + viewConfig === updatePayload$jscomp$0 && (viewConfig = null); + updatePayload$jscomp$0.sibling.return = updatePayload$jscomp$0.return; + updatePayload$jscomp$0 = updatePayload$jscomp$0.sibling; } + } break; case 19: recursivelyTraverseMutationEffects(root, finishedWork); @@ -6395,12 +6551,12 @@ function commitReconciliationEffects(finishedWork) { break; case 3: case 4: - var parent$79 = JSCompiler_inline_result.stateNode.containerInfo, - before$80 = getHostSibling(finishedWork); + var parent$81 = JSCompiler_inline_result.stateNode.containerInfo, + before$82 = getHostSibling(finishedWork); insertOrAppendPlacementNodeIntoContainer( finishedWork, - before$80, - parent$79 + before$82, + parent$81 ); break; default: @@ -6415,117 +6571,225 @@ function commitReconciliationEffects(finishedWork) { } flags & 4096 && (finishedWork.flags &= -4097); } -function commitLayoutEffects(finishedWork) { - for (nextEffect = finishedWork; null !== nextEffect; ) { +function commitLayoutEffects(finishedWork, root, committedLanes) { + nextEffect = finishedWork; + commitLayoutEffects_begin(finishedWork, root, committedLanes); +} +function commitLayoutEffects_begin(subtreeRoot, root, committedLanes) { + for (var isModernRoot = 0 !== (subtreeRoot.mode & 1); null !== nextEffect; ) { var fiber = nextEffect, firstChild = fiber.child; - if (0 !== (fiber.subtreeFlags & 8772) && null !== firstChild) - (firstChild.return = fiber), (nextEffect = firstChild); - else - for (fiber = finishedWork; null !== nextEffect; ) { - firstChild = nextEffect; - if (0 !== (firstChild.flags & 8772)) { - var current = firstChild.alternate; - try { - if (0 !== (firstChild.flags & 8772)) - switch (firstChild.tag) { - case 0: - case 11: - case 15: - commitHookEffectListMount(5, firstChild); - break; - case 1: - var instance = firstChild.stateNode; - if (firstChild.flags & 4) - if (null === current) instance.componentDidMount(); - else { - var prevProps = - firstChild.elementType === firstChild.type - ? current.memoizedProps - : resolveDefaultProps( - firstChild.type, - current.memoizedProps - ); - instance.componentDidUpdate( - prevProps, - current.memoizedState, - instance.__reactInternalSnapshotBeforeUpdate - ); - } - var updateQueue = firstChild.updateQueue; - null !== updateQueue && - commitUpdateQueue(firstChild, updateQueue, instance); - break; - case 3: - var updateQueue$74 = firstChild.updateQueue; - if (null !== updateQueue$74) { - current = null; - if (null !== firstChild.child) - switch (firstChild.child.tag) { - case 5: - current = firstChild.child.stateNode; - break; - case 1: - current = firstChild.child.stateNode; - } - commitUpdateQueue(firstChild, updateQueue$74, current); - } - break; - case 5: - break; - case 6: - break; - case 4: - break; - case 12: - break; - case 13: - break; - case 19: - case 17: - case 21: - case 22: - case 23: - case 25: - break; - default: - throw Error( - "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." + if (22 === fiber.tag && isModernRoot) { + var newOffscreenSubtreeIsHidden = + null !== fiber.memoizedState || offscreenSubtreeIsHidden; + if (!newOffscreenSubtreeIsHidden) { + var current = fiber.alternate, + newOffscreenSubtreeWasHidden = + (null !== current && null !== current.memoizedState) || + offscreenSubtreeWasHidden; + current = offscreenSubtreeIsHidden; + var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; + offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden; + if ( + (offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden) && + !prevOffscreenSubtreeWasHidden + ) + for (nextEffect = fiber; null !== nextEffect; ) + (newOffscreenSubtreeIsHidden = nextEffect), + (newOffscreenSubtreeWasHidden = + newOffscreenSubtreeIsHidden.child), + 22 === newOffscreenSubtreeIsHidden.tag && + null !== newOffscreenSubtreeIsHidden.memoizedState + ? reappearLayoutEffects_complete(fiber) + : null !== newOffscreenSubtreeWasHidden + ? ((newOffscreenSubtreeWasHidden.return = newOffscreenSubtreeIsHidden), + (nextEffect = newOffscreenSubtreeWasHidden)) + : reappearLayoutEffects_complete(fiber); + for (; null !== firstChild; ) + (nextEffect = firstChild), + commitLayoutEffects_begin(firstChild, root, committedLanes), + (firstChild = firstChild.sibling); + nextEffect = fiber; + offscreenSubtreeIsHidden = current; + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; + } + commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); + } else + 0 !== (fiber.subtreeFlags & 8772) && null !== firstChild + ? ((firstChild.return = fiber), (nextEffect = firstChild)) + : commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); + } +} +function commitLayoutMountEffects_complete(subtreeRoot) { + for (; null !== nextEffect; ) { + var fiber = nextEffect; + if (0 !== (fiber.flags & 8772)) { + var current = fiber.alternate; + try { + if (0 !== (fiber.flags & 8772)) + switch (fiber.tag) { + case 0: + case 11: + case 15: + offscreenSubtreeWasHidden || commitHookEffectListMount(5, fiber); + break; + case 1: + var instance = fiber.stateNode; + if (fiber.flags & 4 && !offscreenSubtreeWasHidden) + if (null === current) instance.componentDidMount(); + else { + var prevProps = + fiber.elementType === fiber.type + ? current.memoizedProps + : resolveDefaultProps(fiber.type, current.memoizedProps); + instance.componentDidUpdate( + prevProps, + current.memoizedState, + instance.__reactInternalSnapshotBeforeUpdate ); - } - if (firstChild.flags & 512) { - current = void 0; - var ref = firstChild.ref; - if (null !== ref) { - var instance$jscomp$0 = firstChild.stateNode; - switch (firstChild.tag) { - case 5: - current = instance$jscomp$0; - break; - default: - current = instance$jscomp$0; } - "function" === typeof ref - ? ref(current) - : (ref.current = current); + var updateQueue = fiber.updateQueue; + null !== updateQueue && + commitUpdateQueue(fiber, updateQueue, instance); + break; + case 3: + var updateQueue$76 = fiber.updateQueue; + if (null !== updateQueue$76) { + current = null; + if (null !== fiber.child) + switch (fiber.child.tag) { + case 5: + current = fiber.child.stateNode; + break; + case 1: + current = fiber.child.stateNode; + } + commitUpdateQueue(fiber, updateQueue$76, current); } - } + break; + case 5: + break; + case 6: + break; + case 4: + break; + case 12: + break; + case 13: + break; + case 19: + case 17: + case 21: + case 22: + case 23: + case 25: + break; + default: + throw Error( + "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." + ); + } + offscreenSubtreeWasHidden || + (fiber.flags & 512 && commitAttachRef(fiber)); + } catch (error) { + captureCommitPhaseError(fiber, fiber.return, error); + } + } + if (fiber === subtreeRoot) { + nextEffect = null; + break; + } + current = fiber.sibling; + if (null !== current) { + current.return = fiber.return; + nextEffect = current; + break; + } + nextEffect = fiber.return; + } +} +function disappearLayoutEffects_complete(subtreeRoot) { + for (; null !== nextEffect; ) { + var fiber = nextEffect; + if (fiber === subtreeRoot) { + nextEffect = null; + break; + } + var sibling = fiber.sibling; + if (null !== sibling) { + sibling.return = fiber.return; + nextEffect = sibling; + break; + } + nextEffect = fiber.return; + } +} +function reappearLayoutEffects_complete(subtreeRoot) { + for (; null !== nextEffect; ) { + var fiber = nextEffect; + try { + switch (fiber.tag) { + case 0: + case 11: + case 15: + var nearestMountedAncestor = fiber.return; + try { + commitHookEffectListMount(4, fiber); } catch (error) { - captureCommitPhaseError(firstChild, firstChild.return, error); + captureCommitPhaseError(fiber, nearestMountedAncestor, error); } - } - if (firstChild === fiber) { - nextEffect = null; break; - } - current = firstChild.sibling; - if (null !== current) { - current.return = firstChild.return; - nextEffect = current; + case 1: + var instance = fiber.stateNode; + if ("function" === typeof instance.componentDidMount) { + var nearestMountedAncestor$jscomp$0 = fiber.return; + try { + instance.componentDidMount(); + } catch (error) { + captureCommitPhaseError( + fiber, + nearestMountedAncestor$jscomp$0, + error + ); + } + } + var nearestMountedAncestor$jscomp$1 = fiber.return; + try { + commitAttachRef(fiber); + } catch (error) { + captureCommitPhaseError( + fiber, + nearestMountedAncestor$jscomp$1, + error + ); + } break; - } - nextEffect = firstChild.return; + case 5: + var nearestMountedAncestor$jscomp$2 = fiber.return; + try { + commitAttachRef(fiber); + } catch (error) { + captureCommitPhaseError( + fiber, + nearestMountedAncestor$jscomp$2, + error + ); + } } + } catch (error) { + captureCommitPhaseError(fiber, fiber.return, error); + } + if (fiber === subtreeRoot) { + nextEffect = null; + break; + } + var sibling = fiber.sibling; + if (null !== sibling) { + sibling.return = fiber.return; + nextEffect = sibling; + break; + } + nextEffect = fiber.return; } } var ceil = Math.ceil, @@ -6578,15 +6842,7 @@ function requestUpdateLane(fiber) { fiber = currentUpdatePriority; return 0 !== fiber ? fiber : 16; } -function scheduleUpdateOnFiber(fiber, lane, eventTime) { - if (50 < nestedUpdateCount) - throw ((nestedUpdateCount = 0), - (rootWithNestedUpdates = null), - Error( - "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops." - )); - var root = markUpdateLaneFromFiberToRoot(fiber, lane); - if (null === root) return null; +function scheduleUpdateOnFiber(root, fiber, lane, eventTime) { markRootUpdated(root, lane, eventTime); if (0 === (executionContext & 2) || root !== workInProgressRoot) root === workInProgressRoot && @@ -6600,27 +6856,6 @@ function scheduleUpdateOnFiber(fiber, lane, eventTime) { 0 === (fiber.mode & 1) && ((workInProgressRootRenderTargetTime = now() + 500), includesLegacySyncCallbacks && flushSyncCallbacks()); - return root; -} -function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { - sourceFiber.lanes |= lane; - var alternate = sourceFiber.alternate; - null !== alternate && (alternate.lanes |= lane); - alternate = sourceFiber; - for (sourceFiber = sourceFiber.return; null !== sourceFiber; ) - (sourceFiber.childLanes |= lane), - (alternate = sourceFiber.alternate), - null !== alternate && (alternate.childLanes |= lane), - (alternate = sourceFiber), - (sourceFiber = sourceFiber.return); - return 3 === alternate.tag ? alternate.stateNode : null; -} -function isInterleavedUpdate(fiber) { - return ( - (null !== workInProgressRoot || null !== interleavedQueues) && - 0 !== (fiber.mode & 1) && - 0 === (executionContext & 2) - ); } function ensureRootIsScheduled(root, currentTime) { for ( @@ -7025,10 +7260,10 @@ function prepareFreshStack(root, lanes) { workInProgressRootFatalError = null; workInProgressRootPingedLanes = workInProgressRootInterleavedUpdatedLanes = workInProgressRootSkippedLanes = 0; workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors = null; - if (null !== interleavedQueues) { - for (lanes = 0; lanes < interleavedQueues.length; lanes++) + if (null !== concurrentQueues) { + for (lanes = 0; lanes < concurrentQueues.length; lanes++) if ( - ((timeoutHandle = interleavedQueues[lanes]), + ((timeoutHandle = concurrentQueues[lanes]), (interruptedWork = timeoutHandle.interleaved), null !== interruptedWork) ) { @@ -7042,7 +7277,7 @@ function prepareFreshStack(root, lanes) { } timeoutHandle.pending = interruptedWork; } - interleavedQueues = null; + concurrentQueues = null; } return root; } @@ -7138,7 +7373,7 @@ function handleError(root$jscomp$0, thrownValue) { else { var update = createUpdate(-1, 1); update.tag = 2; - enqueueUpdate(sourceFiber, update); + enqueueUpdate(sourceFiber, update, 1); } sourceFiber.lanes |= 1; } @@ -7165,13 +7400,12 @@ function handleError(root$jscomp$0, thrownValue) { ); } } - root = value; + root = value = createCapturedValueAtFiber(value, sourceFiber); 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2); null === workInProgressRootConcurrentErrors ? (workInProgressRootConcurrentErrors = [root]) : workInProgressRootConcurrentErrors.push(root); - value = createCapturedValue(value, sourceFiber); root = returnFiber; do { switch (root.tag) { @@ -7403,7 +7637,11 @@ function commitRootImpl( transitions < recoverableErrors.length; transitions++ ) - renderPriorityLevel(recoverableErrors[transitions]); + (lanes = recoverableErrors[transitions]), + renderPriorityLevel(lanes.value, { + componentStack: lanes.stack, + digest: lanes.digest + }); if (hasUncaughtError) throw ((hasUncaughtError = !1), (root = firstUncaughtError), @@ -7567,11 +7805,10 @@ function flushPassiveEffects() { return !1; } function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) { - sourceFiber = createCapturedValue(error, sourceFiber); + sourceFiber = createCapturedValueAtFiber(error, sourceFiber); sourceFiber = createRootErrorUpdate(rootFiber, sourceFiber, 1); - enqueueUpdate(rootFiber, sourceFiber); + rootFiber = enqueueUpdate(rootFiber, sourceFiber, 1); sourceFiber = requestEventTime(); - rootFiber = markUpdateLaneFromFiberToRoot(rootFiber, 1); null !== rootFiber && (markRootUpdated(rootFiber, 1, sourceFiber), ensureRootIsScheduled(rootFiber, sourceFiber)); @@ -7601,18 +7838,18 @@ function captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) { (null === legacyErrorBoundariesThatAlreadyFailed || !legacyErrorBoundariesThatAlreadyFailed.has(instance))) ) { - sourceFiber = createCapturedValue(error, sourceFiber); + sourceFiber = createCapturedValueAtFiber(error, sourceFiber); sourceFiber = createClassErrorUpdate( nearestMountedAncestor, sourceFiber, 1 ); - enqueueUpdate(nearestMountedAncestor, sourceFiber); - sourceFiber = requestEventTime(); - nearestMountedAncestor = markUpdateLaneFromFiberToRoot( + nearestMountedAncestor = enqueueUpdate( nearestMountedAncestor, + sourceFiber, 1 ); + sourceFiber = requestEventTime(); null !== nearestMountedAncestor && (markRootUpdated(nearestMountedAncestor, 1, sourceFiber), ensureRootIsScheduled(nearestMountedAncestor, sourceFiber)); @@ -8267,7 +8504,7 @@ function createFiberFromOffscreen(pendingProps, mode, lanes, key) { pendingProps = createFiber(22, pendingProps, key, mode); pendingProps.elementType = REACT_OFFSCREEN_TYPE; pendingProps.lanes = lanes; - pendingProps.stateNode = {}; + pendingProps.stateNode = { isHidden: !1 }; return pendingProps; } function createFiberFromText(content, mode, lanes) { @@ -8389,9 +8626,10 @@ function updateContainer(element, container, parentComponent, callback) { container.payload = { element: element }; callback = void 0 === callback ? null : callback; null !== callback && (container.callback = callback); - enqueueUpdate(current, container); - element = scheduleUpdateOnFiber(current, lane, eventTime); - null !== element && entangleTransitions(element, current, lane); + element = enqueueUpdate(current, container, lane); + null !== element && + (scheduleUpdateOnFiber(element, current, lane, eventTime), + entangleTransitions(element, current, lane)); return lane; } function emptyFindFiberByHostInstance() { @@ -8433,10 +8671,10 @@ batchedUpdatesImpl = function(fn, a) { } }; var roots = new Map(), - devToolsConfig$jscomp$inline_967 = { + devToolsConfig$jscomp$inline_981 = { findFiberByHostInstance: getInstanceFromTag, bundleType: 0, - version: "18.2.0-next-d300cebde-20220601", + version: "18.3.0-next-256aefbea-20220614", rendererPackageName: "react-native-renderer", rendererConfig: { getInspectorDataForViewTag: function() { @@ -8451,11 +8689,11 @@ var roots = new Map(), }.bind(null, findNodeHandle) } }; -var internals$jscomp$inline_1239 = { - bundleType: devToolsConfig$jscomp$inline_967.bundleType, - version: devToolsConfig$jscomp$inline_967.version, - rendererPackageName: devToolsConfig$jscomp$inline_967.rendererPackageName, - rendererConfig: devToolsConfig$jscomp$inline_967.rendererConfig, +var internals$jscomp$inline_1263 = { + bundleType: devToolsConfig$jscomp$inline_981.bundleType, + version: devToolsConfig$jscomp$inline_981.version, + rendererPackageName: devToolsConfig$jscomp$inline_981.rendererPackageName, + rendererConfig: devToolsConfig$jscomp$inline_981.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, @@ -8471,26 +8709,26 @@ var internals$jscomp$inline_1239 = { return null === fiber ? null : fiber.stateNode; }, findFiberByHostInstance: - devToolsConfig$jscomp$inline_967.findFiberByHostInstance || + devToolsConfig$jscomp$inline_981.findFiberByHostInstance || emptyFindFiberByHostInstance, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.2.0-next-d300cebde-20220601" + reconcilerVersion: "18.3.0-next-256aefbea-20220614" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_1240 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_1264 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_1240.isDisabled && - hook$jscomp$inline_1240.supportsFiber + !hook$jscomp$inline_1264.isDisabled && + hook$jscomp$inline_1264.supportsFiber ) try { - (rendererID = hook$jscomp$inline_1240.inject( - internals$jscomp$inline_1239 + (rendererID = hook$jscomp$inline_1264.inject( + internals$jscomp$inline_1263 )), - (injectedHook = hook$jscomp$inline_1240); + (injectedHook = hook$jscomp$inline_1264); } catch (err) {} } exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = { diff --git a/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js b/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js index 3a9a2679c42a49..3fc589a0926622 100644 --- a/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +++ b/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js @@ -8,7 +8,7 @@ * @nolint * @providesModule ReactNativeRenderer-profiling * @preventMunge - * @generated SignedSource<<2bf865cebf1e47b3fc0284498b4571db>> + * @generated SignedSource<<11b8c77b4a7478e1a71138d40e049181>> */ @@ -1028,7 +1028,7 @@ eventPluginOrder = Array.prototype.slice.call([ "ReactNativeBridgeEventPlugin" ]); recomputePluginOrdering(); -var injectedNamesToPlugins$jscomp$inline_236 = { +var injectedNamesToPlugins$jscomp$inline_240 = { ResponderEventPlugin: ResponderEventPlugin, ReactNativeBridgeEventPlugin: { eventTypes: {}, @@ -1074,33 +1074,33 @@ var injectedNamesToPlugins$jscomp$inline_236 = { } } }, - isOrderingDirty$jscomp$inline_237 = !1, - pluginName$jscomp$inline_238; -for (pluginName$jscomp$inline_238 in injectedNamesToPlugins$jscomp$inline_236) + isOrderingDirty$jscomp$inline_241 = !1, + pluginName$jscomp$inline_242; +for (pluginName$jscomp$inline_242 in injectedNamesToPlugins$jscomp$inline_240) if ( - injectedNamesToPlugins$jscomp$inline_236.hasOwnProperty( - pluginName$jscomp$inline_238 + injectedNamesToPlugins$jscomp$inline_240.hasOwnProperty( + pluginName$jscomp$inline_242 ) ) { - var pluginModule$jscomp$inline_239 = - injectedNamesToPlugins$jscomp$inline_236[pluginName$jscomp$inline_238]; + var pluginModule$jscomp$inline_243 = + injectedNamesToPlugins$jscomp$inline_240[pluginName$jscomp$inline_242]; if ( - !namesToPlugins.hasOwnProperty(pluginName$jscomp$inline_238) || - namesToPlugins[pluginName$jscomp$inline_238] !== - pluginModule$jscomp$inline_239 + !namesToPlugins.hasOwnProperty(pluginName$jscomp$inline_242) || + namesToPlugins[pluginName$jscomp$inline_242] !== + pluginModule$jscomp$inline_243 ) { - if (namesToPlugins[pluginName$jscomp$inline_238]) + if (namesToPlugins[pluginName$jscomp$inline_242]) throw Error( "EventPluginRegistry: Cannot inject two different event plugins using the same name, `" + - (pluginName$jscomp$inline_238 + "`.") + (pluginName$jscomp$inline_242 + "`.") ); namesToPlugins[ - pluginName$jscomp$inline_238 - ] = pluginModule$jscomp$inline_239; - isOrderingDirty$jscomp$inline_237 = !0; + pluginName$jscomp$inline_242 + ] = pluginModule$jscomp$inline_243; + isOrderingDirty$jscomp$inline_241 = !0; } } -isOrderingDirty$jscomp$inline_237 && recomputePluginOrdering(); +isOrderingDirty$jscomp$inline_241 && recomputePluginOrdering(); var instanceCache = new Map(), instanceProps = new Map(); function getInstanceFromTag(tag) { @@ -2359,8 +2359,40 @@ function readContext(context) { } else lastContextDependency = lastContextDependency.next = context; return value; } -var interleavedQueues = null, - hasForceUpdate = !1; +var concurrentQueues = null; +function pushConcurrentUpdateQueue(queue) { + null === concurrentQueues + ? (concurrentQueues = [queue]) + : concurrentQueues.push(queue); +} +function enqueueConcurrentHookUpdate(fiber, queue, update, lane) { + var interleaved = queue.interleaved; + null === interleaved + ? ((update.next = update), pushConcurrentUpdateQueue(queue)) + : ((update.next = interleaved.next), (interleaved.next = update)); + queue.interleaved = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); +} +function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { + if (50 < nestedUpdateCount) + throw ((nestedUpdateCount = 0), + (rootWithNestedUpdates = null), + Error( + "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops." + )); + sourceFiber.lanes |= lane; + var alternate = sourceFiber.alternate; + null !== alternate && (alternate.lanes |= lane); + alternate = sourceFiber; + for (sourceFiber = sourceFiber.return; null !== sourceFiber; ) + (sourceFiber.childLanes |= lane), + (alternate = sourceFiber.alternate), + null !== alternate && (alternate.childLanes |= lane), + (alternate = sourceFiber), + (sourceFiber = sourceFiber.return); + return 3 === alternate.tag ? alternate.stateNode : null; +} +var hasForceUpdate = !1; function initializeUpdateQueue(fiber) { fiber.updateQueue = { baseState: fiber.memoizedState, @@ -2391,24 +2423,24 @@ function createUpdate(eventTime, lane) { next: null }; } -function enqueueUpdate(fiber, update) { +function enqueueUpdate(fiber, update, lane) { var updateQueue = fiber.updateQueue; - null !== updateQueue && - ((updateQueue = updateQueue.shared), - isInterleavedUpdate(fiber) - ? ((fiber = updateQueue.interleaved), - null === fiber - ? ((update.next = update), - null === interleavedQueues - ? (interleavedQueues = [updateQueue]) - : interleavedQueues.push(updateQueue)) - : ((update.next = fiber.next), (fiber.next = update)), - (updateQueue.interleaved = update)) - : ((fiber = updateQueue.pending), - null === fiber - ? (update.next = update) - : ((update.next = fiber.next), (fiber.next = update)), - (updateQueue.pending = update))); + if (null === updateQueue) return null; + updateQueue = updateQueue.shared; + if (0 !== (executionContext & 2)) { + var pending = updateQueue.pending; + null === pending + ? (update.next = update) + : ((update.next = pending.next), (pending.next = update)); + updateQueue.pending = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); + } + pending = updateQueue.interleaved; + null === pending + ? ((update.next = update), pushConcurrentUpdateQueue(updateQueue)) + : ((update.next = pending.next), (pending.next = update)); + updateQueue.interleaved = update; + return markUpdateLaneFromFiberToRoot(fiber, lane); } function entangleTransitions(root, fiber, lane) { fiber = fiber.updateQueue; @@ -2645,9 +2677,10 @@ var classComponentUpdater = { update = createUpdate(eventTime, lane); update.payload = payload; void 0 !== callback && null !== callback && (update.callback = callback); - enqueueUpdate(inst, update); - payload = scheduleUpdateOnFiber(inst, lane, eventTime); - null !== payload && entangleTransitions(payload, inst, lane); + payload = enqueueUpdate(inst, update, lane); + null !== payload && + (scheduleUpdateOnFiber(payload, inst, lane, eventTime), + entangleTransitions(payload, inst, lane)); }, enqueueReplaceState: function(inst, payload, callback) { inst = inst._reactInternals; @@ -2657,9 +2690,10 @@ var classComponentUpdater = { update.tag = 1; update.payload = payload; void 0 !== callback && null !== callback && (update.callback = callback); - enqueueUpdate(inst, update); - payload = scheduleUpdateOnFiber(inst, lane, eventTime); - null !== payload && entangleTransitions(payload, inst, lane); + payload = enqueueUpdate(inst, update, lane); + null !== payload && + (scheduleUpdateOnFiber(payload, inst, lane, eventTime), + entangleTransitions(payload, inst, lane)); }, enqueueForceUpdate: function(inst, callback) { inst = inst._reactInternals; @@ -2668,9 +2702,10 @@ var classComponentUpdater = { update = createUpdate(eventTime, lane); update.tag = 2; void 0 !== callback && null !== callback && (update.callback = callback); - enqueueUpdate(inst, update); - callback = scheduleUpdateOnFiber(inst, lane, eventTime); - null !== callback && entangleTransitions(callback, inst, lane); + callback = enqueueUpdate(inst, update, lane); + null !== callback && + (scheduleUpdateOnFiber(callback, inst, lane, eventTime), + entangleTransitions(callback, inst, lane)); } }; function checkShouldComponentUpdate( @@ -2761,7 +2796,7 @@ function mountClassInstance(workInProgress, ctor, newProps, renderLanes) { processUpdateQueue(workInProgress, newProps, instance, renderLanes), (instance.state = workInProgress.memoizedState)); "function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4); + (workInProgress.flags |= 4194308); } function coerceRef(returnFiber, current, element) { returnFiber = element.ref; @@ -3775,11 +3810,11 @@ function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) { function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) { inst.value = nextSnapshot; inst.getSnapshot = getSnapshot; - checkIfSnapshotChanged(inst) && scheduleUpdateOnFiber(fiber, 1, -1); + checkIfSnapshotChanged(inst) && forceStoreRerender(fiber); } function subscribeToStore(fiber, inst, subscribe) { return subscribe(function() { - checkIfSnapshotChanged(inst) && scheduleUpdateOnFiber(fiber, 1, -1); + checkIfSnapshotChanged(inst) && forceStoreRerender(fiber); }); } function checkIfSnapshotChanged(inst) { @@ -3792,6 +3827,10 @@ function checkIfSnapshotChanged(inst) { return !0; } } +function forceStoreRerender(fiber) { + var root = markUpdateLaneFromFiberToRoot(fiber, 1); + null !== root && scheduleUpdateOnFiber(root, fiber, 1, -1); +} function mountState(initialState) { var hook = mountWorkInProgressHook(); "function" === typeof initialState && (initialState = initialState()); @@ -3962,12 +4001,15 @@ function dispatchReducerAction(fiber, queue, action) { eagerState: null, next: null }; - isRenderPhaseUpdate(fiber) - ? enqueueRenderPhaseUpdate(queue, action) - : (enqueueUpdate$1(fiber, queue, action), - (action = requestEventTime()), - (fiber = scheduleUpdateOnFiber(fiber, lane, action)), - null !== fiber && entangleTransitionUpdate(fiber, queue, lane)); + if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, action); + else if ( + ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)), + null !== action) + ) { + var eventTime = requestEventTime(); + scheduleUpdateOnFiber(action, fiber, lane, eventTime); + entangleTransitionUpdate(action, queue, lane); + } } function dispatchSetState(fiber, queue, action) { var lane = requestUpdateLane(fiber), @@ -3980,7 +4022,6 @@ function dispatchSetState(fiber, queue, action) { }; if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update); else { - enqueueUpdate$1(fiber, queue, update); var alternate = fiber.alternate; if ( 0 === fiber.lanes && @@ -3992,13 +4033,22 @@ function dispatchSetState(fiber, queue, action) { eagerState = alternate(currentState, action); update.hasEagerState = !0; update.eagerState = eagerState; - if (objectIs(eagerState, currentState)) return; + if (objectIs(eagerState, currentState)) { + var interleaved = queue.interleaved; + null === interleaved + ? ((update.next = update), pushConcurrentUpdateQueue(queue)) + : ((update.next = interleaved.next), (interleaved.next = update)); + queue.interleaved = update; + return; + } } catch (error) { } finally { } - action = requestEventTime(); - fiber = scheduleUpdateOnFiber(fiber, lane, action); - null !== fiber && entangleTransitionUpdate(fiber, queue, lane); + action = enqueueConcurrentHookUpdate(fiber, queue, update, lane); + null !== action && + ((update = requestEventTime()), + scheduleUpdateOnFiber(action, fiber, lane, update), + entangleTransitionUpdate(action, queue, lane)); } } function isRenderPhaseUpdate(fiber) { @@ -4016,22 +4066,6 @@ function enqueueRenderPhaseUpdate(queue, update) { : ((update.next = pending.next), (pending.next = update)); queue.pending = update; } -function enqueueUpdate$1(fiber, queue, update) { - isInterleavedUpdate(fiber) - ? ((fiber = queue.interleaved), - null === fiber - ? ((update.next = update), - null === interleavedQueues - ? (interleavedQueues = [queue]) - : interleavedQueues.push(queue)) - : ((update.next = fiber.next), (fiber.next = update)), - (queue.interleaved = update)) - : ((fiber = queue.pending), - null === fiber - ? (update.next = update) - : ((update.next = fiber.next), (fiber.next = update)), - (queue.pending = update)); -} function entangleTransitionUpdate(root, queue, lane) { if (0 !== (lane & 4194240)) { var queueLanes = queue.lanes; @@ -4075,14 +4109,14 @@ var ContextOnlyDispatcher = { useImperativeHandle: function(ref, create, deps) { deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null; return mountEffectImpl( - 4, + 4194308, 4, imperativeHandleEffect.bind(null, create, ref), deps ); }, useLayoutEffect: function(create, deps) { - return mountEffectImpl(4, 4, create, deps); + return mountEffectImpl(4194308, 4, create, deps); }, useInsertionEffect: function(create, deps) { return mountEffectImpl(4, 2, create, deps); @@ -4285,11 +4319,20 @@ function transferActualDuration(fiber) { for (var child = fiber.child; child; ) (fiber.actualDuration += child.actualDuration), (child = child.sibling); } -function createCapturedValue(value, source) { +function createCapturedValueAtFiber(value, source) { return { value: value, source: source, - stack: getStackByFiberInDevAndProd(source) + stack: getStackByFiberInDevAndProd(source), + digest: null + }; +} +function createCapturedValue(value, digest, stack) { + return { + value: value, + source: null, + stack: null != stack ? stack : null, + digest: null != digest ? digest : null }; } if ( @@ -4555,7 +4598,7 @@ function markRef(current, workInProgress) { (null === current && null !== ref) || (null !== current && current.ref !== ref) ) - workInProgress.flags |= 512; + (workInProgress.flags |= 512), (workInProgress.flags |= 2097152); } function updateFunctionComponent( current, @@ -4667,9 +4710,9 @@ function updateClassComponent( "function" === typeof instance.UNSAFE_componentWillMount && instance.UNSAFE_componentWillMount()), "function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4)) + (workInProgress.flags |= 4194308)) : ("function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4), + (workInProgress.flags |= 4194308), (workInProgress.memoizedProps = nextProps), (workInProgress.memoizedState = oldContext)), (instance.props = nextProps), @@ -4677,7 +4720,7 @@ function updateClassComponent( (instance.context = contextType), (nextProps = oldProps)) : ("function" === typeof instance.componentDidMount && - (workInProgress.flags |= 4), + (workInProgress.flags |= 4194308), (nextProps = !1)); } else { instance = workInProgress.stateNode; @@ -5031,13 +5074,16 @@ function updateDehydratedSuspenseComponent( if (workInProgress.flags & 256) return ( (workInProgress.flags &= -257), + (suspenseState = createCapturedValue( + Error( + "There was an error while hydrating this Suspense boundary. Switched to client rendering." + ) + )), retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, - Error( - "There was an error while hydrating this Suspense boundary. Switched to client rendering." - ) + suspenseState ) ); if (null !== workInProgress.memoizedState) @@ -5082,16 +5128,19 @@ function updateDehydratedSuspenseComponent( ); if (shim()) return ( - (suspenseState = shim().errorMessage), + (suspenseState = shim().digest), + (suspenseState = createCapturedValue( + Error( + "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." + ), + suspenseState, + void 0 + )), retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, suspenseState - ? Error(suspenseState) - : Error( - "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." - ) ) ); didSuspend = 0 !== (renderLanes & current.childLanes); @@ -5134,23 +5183,27 @@ function updateDehydratedSuspenseComponent( default: didSuspend = 0; } - nextProps = + didSuspend = 0 !== (didSuspend & (nextProps.suspendedLanes | renderLanes)) ? 0 : didSuspend; - 0 !== nextProps && - nextProps !== suspenseState.retryLane && - ((suspenseState.retryLane = nextProps), - scheduleUpdateOnFiber(current, nextProps, -1)); + 0 !== didSuspend && + didSuspend !== suspenseState.retryLane && + ((suspenseState.retryLane = didSuspend), + markUpdateLaneFromFiberToRoot(current, didSuspend), + scheduleUpdateOnFiber(nextProps, current, didSuspend, -1)); } renderDidSuspendDelayIfPossible(); + suspenseState = createCapturedValue( + Error( + "This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition." + ) + ); return retrySuspenseComponentWithoutHydrating( current, workInProgress, renderLanes, - Error( - "This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition." - ) + suspenseState ); } if (shim()) @@ -5437,14 +5490,14 @@ function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) { break; case "collapsed": lastTailNode = renderState.tail; - for (var lastTailNode$63 = null; null !== lastTailNode; ) - null !== lastTailNode.alternate && (lastTailNode$63 = lastTailNode), + for (var lastTailNode$65 = null; null !== lastTailNode; ) + null !== lastTailNode.alternate && (lastTailNode$65 = lastTailNode), (lastTailNode = lastTailNode.sibling); - null === lastTailNode$63 + null === lastTailNode$65 ? hasRenderedATailFallback || null === renderState.tail ? (renderState.tail = null) : (renderState.tail.sibling = null) - : (lastTailNode$63.sibling = null); + : (lastTailNode$65.sibling = null); } } function bubbleProperties(completedWork) { @@ -5456,53 +5509,53 @@ function bubbleProperties(completedWork) { if (didBailout) if (0 !== (completedWork.mode & 2)) { for ( - var treeBaseDuration$65 = completedWork.selfBaseDuration, - child$66 = completedWork.child; - null !== child$66; + var treeBaseDuration$67 = completedWork.selfBaseDuration, + child$68 = completedWork.child; + null !== child$68; ) - (newChildLanes |= child$66.lanes | child$66.childLanes), - (subtreeFlags |= child$66.subtreeFlags & 14680064), - (subtreeFlags |= child$66.flags & 14680064), - (treeBaseDuration$65 += child$66.treeBaseDuration), - (child$66 = child$66.sibling); - completedWork.treeBaseDuration = treeBaseDuration$65; + (newChildLanes |= child$68.lanes | child$68.childLanes), + (subtreeFlags |= child$68.subtreeFlags & 14680064), + (subtreeFlags |= child$68.flags & 14680064), + (treeBaseDuration$67 += child$68.treeBaseDuration), + (child$68 = child$68.sibling); + completedWork.treeBaseDuration = treeBaseDuration$67; } else for ( - treeBaseDuration$65 = completedWork.child; - null !== treeBaseDuration$65; + treeBaseDuration$67 = completedWork.child; + null !== treeBaseDuration$67; ) (newChildLanes |= - treeBaseDuration$65.lanes | treeBaseDuration$65.childLanes), - (subtreeFlags |= treeBaseDuration$65.subtreeFlags & 14680064), - (subtreeFlags |= treeBaseDuration$65.flags & 14680064), - (treeBaseDuration$65.return = completedWork), - (treeBaseDuration$65 = treeBaseDuration$65.sibling); + treeBaseDuration$67.lanes | treeBaseDuration$67.childLanes), + (subtreeFlags |= treeBaseDuration$67.subtreeFlags & 14680064), + (subtreeFlags |= treeBaseDuration$67.flags & 14680064), + (treeBaseDuration$67.return = completedWork), + (treeBaseDuration$67 = treeBaseDuration$67.sibling); else if (0 !== (completedWork.mode & 2)) { - treeBaseDuration$65 = completedWork.actualDuration; - child$66 = completedWork.selfBaseDuration; + treeBaseDuration$67 = completedWork.actualDuration; + child$68 = completedWork.selfBaseDuration; for (var child = completedWork.child; null !== child; ) (newChildLanes |= child.lanes | child.childLanes), (subtreeFlags |= child.subtreeFlags), (subtreeFlags |= child.flags), - (treeBaseDuration$65 += child.actualDuration), - (child$66 += child.treeBaseDuration), + (treeBaseDuration$67 += child.actualDuration), + (child$68 += child.treeBaseDuration), (child = child.sibling); - completedWork.actualDuration = treeBaseDuration$65; - completedWork.treeBaseDuration = child$66; + completedWork.actualDuration = treeBaseDuration$67; + completedWork.treeBaseDuration = child$68; } else for ( - treeBaseDuration$65 = completedWork.child; - null !== treeBaseDuration$65; + treeBaseDuration$67 = completedWork.child; + null !== treeBaseDuration$67; ) (newChildLanes |= - treeBaseDuration$65.lanes | treeBaseDuration$65.childLanes), - (subtreeFlags |= treeBaseDuration$65.subtreeFlags), - (subtreeFlags |= treeBaseDuration$65.flags), - (treeBaseDuration$65.return = completedWork), - (treeBaseDuration$65 = treeBaseDuration$65.sibling); + treeBaseDuration$67.lanes | treeBaseDuration$67.childLanes), + (subtreeFlags |= treeBaseDuration$67.subtreeFlags), + (subtreeFlags |= treeBaseDuration$67.flags), + (treeBaseDuration$67.return = completedWork), + (treeBaseDuration$67 = treeBaseDuration$67.sibling); completedWork.subtreeFlags |= subtreeFlags; completedWork.childLanes = newChildLanes; return didBailout; @@ -5562,7 +5615,8 @@ function completeWork(current, workInProgress, renderLanes) { newProps, renderLanes ), - current.ref !== workInProgress.ref && (workInProgress.flags |= 512); + current.ref !== workInProgress.ref && + (workInProgress.flags |= 2097664); else { if (!newProps) { if (null === workInProgress.stateNode) @@ -5597,7 +5651,7 @@ function completeWork(current, workInProgress, renderLanes) { appendAllChildren(renderLanes, workInProgress, !1, !1); workInProgress.stateNode = renderLanes; finalizeInitialChildren(renderLanes) && (workInProgress.flags |= 4); - null !== workInProgress.ref && (workInProgress.flags |= 512); + null !== workInProgress.ref && (workInProgress.flags |= 2097664); } bubbleProperties(workInProgress); return null; @@ -5913,14 +5967,29 @@ function unwindWork(current, workInProgress) { return popRenderLanes(), null; case 24: return null; + case 25: + return null; default: return null; } } -var PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set, +var offscreenSubtreeIsHidden = !1, + offscreenSubtreeWasHidden = !1, + PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set, nextEffect = null, inProgressLanes = null, inProgressRoot = null; +function callComponentWillUnmountWithTimer(current, instance) { + instance.props = current.memoizedProps; + instance.state = current.memoizedState; + if (current.mode & 2) + try { + startLayoutEffectTimer(), instance.componentWillUnmount(); + } finally { + recordLayoutEffectDuration(current); + } + else instance.componentWillUnmount(); +} function safelyDetachRef(current, nearestMountedAncestor) { var ref = current.ref; if (null !== ref) @@ -6033,13 +6102,28 @@ function commitHookEffectListMount(flags, finishedWork) { var effect = (finishedWork = finishedWork.next); do { if ((effect.tag & flags) === flags) { - var create$81 = effect.create; - effect.destroy = create$81(); + var create$83 = effect.create; + effect.destroy = create$83(); } effect = effect.next; } while (effect !== finishedWork); } } +function commitAttachRef(finishedWork) { + var ref = finishedWork.ref; + if (null !== ref) { + var instance = finishedWork.stateNode; + if ("function" === typeof ref) + if (finishedWork.mode & 2) + try { + startLayoutEffectTimer(), ref(instance); + } finally { + recordLayoutEffectDuration(finishedWork); + } + else ref(instance); + else ref.current = instance; + } +} function detachFiberAfterEffects(fiber) { var alternate = fiber.alternate; null !== alternate && @@ -6180,7 +6264,8 @@ function commitDeletionEffectsOnFiber( } catch (err) {} switch (deletedFiber.tag) { case 5: - safelyDetachRef(deletedFiber, nearestMountedAncestor); + offscreenSubtreeWasHidden || + safelyDetachRef(deletedFiber, nearestMountedAncestor); case 6: var prevHostParent = hostParent, prevHostParentIsContainer = hostParentIsContainer; @@ -6241,10 +6326,12 @@ function commitDeletionEffectsOnFiber( case 11: case 14: case 15: - prevHostParent = deletedFiber.updateQueue; if ( + !offscreenSubtreeWasHidden && + ((prevHostParent = deletedFiber.updateQueue), null !== prevHostParent && - ((prevHostParent = prevHostParent.lastEffect), null !== prevHostParent) + ((prevHostParent = prevHostParent.lastEffect), + null !== prevHostParent)) ) { prevHostParentIsContainer = prevHostParent = prevHostParent.next; do { @@ -6278,21 +6365,14 @@ function commitDeletionEffectsOnFiber( ); break; case 1: - safelyDetachRef(deletedFiber, nearestMountedAncestor); - prevHostParent = deletedFiber.stateNode; - if ("function" === typeof prevHostParent.componentWillUnmount) + if ( + !offscreenSubtreeWasHidden && + (safelyDetachRef(deletedFiber, nearestMountedAncestor), + (prevHostParent = deletedFiber.stateNode), + "function" === typeof prevHostParent.componentWillUnmount) + ) try { - if ( - ((prevHostParent.props = deletedFiber.memoizedProps), - (prevHostParent.state = deletedFiber.memoizedState), - deletedFiber.mode & 2) - ) - try { - startLayoutEffectTimer(), prevHostParent.componentWillUnmount(); - } finally { - recordLayoutEffectDuration(deletedFiber); - } - else prevHostParent.componentWillUnmount(); + callComponentWillUnmountWithTimer(deletedFiber, prevHostParent); } catch (error) { captureCommitPhaseError(deletedFiber, nearestMountedAncestor, error); } @@ -6310,11 +6390,21 @@ function commitDeletionEffectsOnFiber( ); break; case 22: - recursivelyTraverseDeletionEffects( - finishedRoot, - nearestMountedAncestor, - deletedFiber - ); + deletedFiber.mode & 1 + ? ((offscreenSubtreeWasHidden = + (prevHostParent = offscreenSubtreeWasHidden) || + null !== deletedFiber.memoizedState), + recursivelyTraverseDeletionEffects( + finishedRoot, + nearestMountedAncestor, + deletedFiber + ), + (offscreenSubtreeWasHidden = prevHostParent)) + : recursivelyTraverseDeletionEffects( + finishedRoot, + nearestMountedAncestor, + deletedFiber + ); break; default: recursivelyTraverseDeletionEffects( @@ -6419,22 +6509,22 @@ function commitMutationEffectsOnFiber(finishedWork, root) { try { startLayoutEffectTimer(), commitHookEffectListUnmount(5, finishedWork, finishedWork.return); - } catch (error$93) { + } catch (error$95) { captureCommitPhaseError( finishedWork, finishedWork.return, - error$93 + error$95 ); } recordLayoutEffectDuration(finishedWork); } else try { commitHookEffectListUnmount(5, finishedWork, finishedWork.return); - } catch (error$94) { + } catch (error$96) { captureCommitPhaseError( finishedWork, finishedWork.return, - error$94 + error$96 ); } } @@ -6453,16 +6543,16 @@ function commitMutationEffectsOnFiber(finishedWork, root) { null !== current && safelyDetachRef(current, current.return); if (flags & 4) { - var instance$96 = finishedWork.stateNode; - if (null != instance$96) { + var instance$98 = finishedWork.stateNode; + if (null != instance$98) { var newProps = finishedWork.memoizedProps, oldProps = null !== current ? current.memoizedProps : newProps, updatePayload = finishedWork.updateQueue; finishedWork.updateQueue = null; if (null !== updatePayload) try { - var viewConfig = instance$96.viewConfig; - instanceProps.set(instance$96._nativeTag, newProps); + var viewConfig = instance$98.viewConfig; + instanceProps.set(instance$98._nativeTag, newProps); var updatePayload$jscomp$0 = diffProperties( null, oldProps, @@ -6471,15 +6561,15 @@ function commitMutationEffectsOnFiber(finishedWork, root) { ); null != updatePayload$jscomp$0 && ReactNativePrivateInterface.UIManager.updateView( - instance$96._nativeTag, + instance$98._nativeTag, viewConfig.uiViewClassName, updatePayload$jscomp$0 ); - } catch (error$97) { + } catch (error$99) { captureCommitPhaseError( finishedWork, finishedWork.return, - error$97 + error$99 ); } } @@ -6493,16 +6583,16 @@ function commitMutationEffectsOnFiber(finishedWork, root) { throw Error( "This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue." ); - viewConfig = finishedWork.stateNode; - updatePayload$jscomp$0 = finishedWork.memoizedProps; + instance$98 = finishedWork.stateNode; + newProps = finishedWork.memoizedProps; try { ReactNativePrivateInterface.UIManager.updateView( - viewConfig, + instance$98, "RCTRawText", - { text: updatePayload$jscomp$0 } + { text: newProps } ); - } catch (error$98) { - captureCommitPhaseError(finishedWork, finishedWork.return, error$98); + } catch (error$100) { + captureCommitPhaseError(finishedWork, finishedWork.return, error$100); } } break; @@ -6517,31 +6607,100 @@ function commitMutationEffectsOnFiber(finishedWork, root) { case 13: recursivelyTraverseMutationEffects(root, finishedWork); commitReconciliationEffects(finishedWork); - viewConfig = finishedWork.child; - viewConfig.flags & 8192 && - null !== viewConfig.memoizedState && - (null === viewConfig.alternate || - null === viewConfig.alternate.memoizedState) && - (globalMostRecentFallbackTime = now()); + instance$98 = finishedWork.child; + instance$98.flags & 8192 && + ((newProps = null !== instance$98.memoizedState), + (instance$98.stateNode.isHidden = newProps), + !newProps || + (null !== instance$98.alternate && + null !== instance$98.alternate.memoizedState) || + (globalMostRecentFallbackTime = now())); flags & 4 && attachSuspenseRetryListeners(finishedWork); break; case 22: - recursivelyTraverseMutationEffects(root, finishedWork); + viewConfig = null !== current && null !== current.memoizedState; + finishedWork.mode & 1 + ? ((offscreenSubtreeWasHidden = + (updatePayload$jscomp$0 = offscreenSubtreeWasHidden) || viewConfig), + recursivelyTraverseMutationEffects(root, finishedWork), + (offscreenSubtreeWasHidden = updatePayload$jscomp$0)) + : recursivelyTraverseMutationEffects(root, finishedWork); commitReconciliationEffects(finishedWork); - if (flags & 8192) - a: for ( - viewConfig = null !== finishedWork.memoizedState, - updatePayload$jscomp$0 = null, - current = finishedWork; - ; + if (flags & 8192) { + flags = null !== finishedWork.memoizedState; + if ( + (finishedWork.stateNode.isHidden = flags) && + !viewConfig && + 0 !== (finishedWork.mode & 1) + ) + for ( + nextEffect = finishedWork, viewConfig = finishedWork.child; + null !== viewConfig; - ) { - if (5 === current.tag) { - if (null === updatePayload$jscomp$0) { - updatePayload$jscomp$0 = current; + ) { + for ( + updatePayload$jscomp$0 = nextEffect = viewConfig; + null !== nextEffect; + + ) { + root = nextEffect; + current = root.child; + switch (root.tag) { + case 0: + case 11: + case 14: + case 15: + if (root.mode & 2) + try { + startLayoutEffectTimer(), + commitHookEffectListUnmount(4, root, root.return); + } finally { + recordLayoutEffectDuration(root); + } + else commitHookEffectListUnmount(4, root, root.return); + break; + case 1: + safelyDetachRef(root, root.return); + var instance = root.stateNode; + if ("function" === typeof instance.componentWillUnmount) { + var current$jscomp$0 = root, + nearestMountedAncestor = root.return; + try { + callComponentWillUnmountWithTimer( + current$jscomp$0, + instance + ); + } catch (error) { + captureCommitPhaseError( + current$jscomp$0, + nearestMountedAncestor, + error + ); + } + } + break; + case 5: + safelyDetachRef(root, root.return); + break; + case 22: + if (null !== root.memoizedState) { + disappearLayoutEffects_complete(updatePayload$jscomp$0); + continue; + } + } + null !== current + ? ((current.return = root), (nextEffect = current)) + : disappearLayoutEffects_complete(updatePayload$jscomp$0); + } + viewConfig = viewConfig.sibling; + } + a: for (viewConfig = null, updatePayload$jscomp$0 = finishedWork; ; ) { + if (5 === updatePayload$jscomp$0.tag) { + if (null === viewConfig) { + viewConfig = updatePayload$jscomp$0; try { - if (((instance$96 = current.stateNode), viewConfig)) - (newProps = instance$96.viewConfig), + if (((instance$98 = updatePayload$jscomp$0.stateNode), flags)) + (newProps = instance$98.viewConfig), (oldProps = diffProperties( null, emptyObject, @@ -6549,13 +6708,13 @@ function commitMutationEffectsOnFiber(finishedWork, root) { newProps.validAttributes )), ReactNativePrivateInterface.UIManager.updateView( - instance$96._nativeTag, + instance$98._nativeTag, newProps.uiViewClassName, oldProps ); else { - updatePayload = current.stateNode; - var props = current.memoizedProps, + updatePayload = updatePayload$jscomp$0.stateNode; + var props = updatePayload$jscomp$0.memoizedProps, viewConfig$jscomp$0 = updatePayload.viewConfig, prevProps = assign({}, props, { style: [props.style, { display: "none" }] @@ -6580,39 +6739,43 @@ function commitMutationEffectsOnFiber(finishedWork, root) { ); } } - } else if (6 === current.tag) { - if (null === updatePayload$jscomp$0) + } else if (6 === updatePayload$jscomp$0.tag) { + if (null === viewConfig) try { throw Error("Not yet implemented."); - } catch (error$88) { + } catch (error$90) { captureCommitPhaseError( finishedWork, finishedWork.return, - error$88 + error$90 ); } } else if ( - ((22 !== current.tag && 23 !== current.tag) || - null === current.memoizedState || - current === finishedWork) && - null !== current.child + ((22 !== updatePayload$jscomp$0.tag && + 23 !== updatePayload$jscomp$0.tag) || + null === updatePayload$jscomp$0.memoizedState || + updatePayload$jscomp$0 === finishedWork) && + null !== updatePayload$jscomp$0.child ) { - current.child.return = current; - current = current.child; + updatePayload$jscomp$0.child.return = updatePayload$jscomp$0; + updatePayload$jscomp$0 = updatePayload$jscomp$0.child; continue; } - if (current === finishedWork) break a; - for (; null === current.sibling; ) { - if (null === current.return || current.return === finishedWork) + if (updatePayload$jscomp$0 === finishedWork) break a; + for (; null === updatePayload$jscomp$0.sibling; ) { + if ( + null === updatePayload$jscomp$0.return || + updatePayload$jscomp$0.return === finishedWork + ) break a; - updatePayload$jscomp$0 === current && - (updatePayload$jscomp$0 = null); - current = current.return; + viewConfig === updatePayload$jscomp$0 && (viewConfig = null); + updatePayload$jscomp$0 = updatePayload$jscomp$0.return; } - updatePayload$jscomp$0 === current && (updatePayload$jscomp$0 = null); - current.sibling.return = current.return; - current = current.sibling; + viewConfig === updatePayload$jscomp$0 && (viewConfig = null); + updatePayload$jscomp$0.sibling.return = updatePayload$jscomp$0.return; + updatePayload$jscomp$0 = updatePayload$jscomp$0.sibling; } + } break; case 19: recursivelyTraverseMutationEffects(root, finishedWork); @@ -6652,12 +6815,12 @@ function commitReconciliationEffects(finishedWork) { break; case 3: case 4: - var parent$89 = JSCompiler_inline_result.stateNode.containerInfo, - before$90 = getHostSibling(finishedWork); + var parent$91 = JSCompiler_inline_result.stateNode.containerInfo, + before$92 = getHostSibling(finishedWork); insertOrAppendPlacementNodeIntoContainer( finishedWork, - before$90, - parent$89 + before$92, + parent$91 ); break; default: @@ -6675,198 +6838,311 @@ function commitReconciliationEffects(finishedWork) { function commitLayoutEffects(finishedWork, root, committedLanes) { inProgressLanes = committedLanes; inProgressRoot = root; - for (nextEffect = finishedWork; null !== nextEffect; ) - if ( - ((root = nextEffect), - (committedLanes = root.child), - 0 !== (root.subtreeFlags & 8772) && null !== committedLanes) - ) - (committedLanes.return = root), (nextEffect = committedLanes); - else - for (root = finishedWork; null !== nextEffect; ) { - committedLanes = nextEffect; - if (0 !== (committedLanes.flags & 8772)) { - var current = committedLanes.alternate; - try { - if (0 !== (committedLanes.flags & 8772)) - switch (committedLanes.tag) { - case 0: - case 11: - case 15: - if (committedLanes.mode & 2) + nextEffect = finishedWork; + commitLayoutEffects_begin(finishedWork, root, committedLanes); + inProgressRoot = inProgressLanes = null; +} +function commitLayoutEffects_begin(subtreeRoot, root, committedLanes) { + for (var isModernRoot = 0 !== (subtreeRoot.mode & 1); null !== nextEffect; ) { + var fiber = nextEffect, + firstChild = fiber.child; + if (22 === fiber.tag && isModernRoot) { + var newOffscreenSubtreeIsHidden = + null !== fiber.memoizedState || offscreenSubtreeIsHidden; + if (!newOffscreenSubtreeIsHidden) { + var current = fiber.alternate, + newOffscreenSubtreeWasHidden = + (null !== current && null !== current.memoizedState) || + offscreenSubtreeWasHidden; + current = offscreenSubtreeIsHidden; + var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; + offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden; + if ( + (offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden) && + !prevOffscreenSubtreeWasHidden + ) + for (nextEffect = fiber; null !== nextEffect; ) + (newOffscreenSubtreeIsHidden = nextEffect), + (newOffscreenSubtreeWasHidden = + newOffscreenSubtreeIsHidden.child), + 22 === newOffscreenSubtreeIsHidden.tag && + null !== newOffscreenSubtreeIsHidden.memoizedState + ? reappearLayoutEffects_complete(fiber) + : null !== newOffscreenSubtreeWasHidden + ? ((newOffscreenSubtreeWasHidden.return = newOffscreenSubtreeIsHidden), + (nextEffect = newOffscreenSubtreeWasHidden)) + : reappearLayoutEffects_complete(fiber); + for (; null !== firstChild; ) + (nextEffect = firstChild), + commitLayoutEffects_begin(firstChild, root, committedLanes), + (firstChild = firstChild.sibling); + nextEffect = fiber; + offscreenSubtreeIsHidden = current; + offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; + } + commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); + } else + 0 !== (fiber.subtreeFlags & 8772) && null !== firstChild + ? ((firstChild.return = fiber), (nextEffect = firstChild)) + : commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes); + } +} +function commitLayoutMountEffects_complete(subtreeRoot) { + for (; null !== nextEffect; ) { + var fiber = nextEffect; + if (0 !== (fiber.flags & 8772)) { + var current = fiber.alternate; + try { + if (0 !== (fiber.flags & 8772)) + switch (fiber.tag) { + case 0: + case 11: + case 15: + if (!offscreenSubtreeWasHidden) + if (fiber.mode & 2) + try { + startLayoutEffectTimer(), + commitHookEffectListMount(5, fiber); + } finally { + recordLayoutEffectDuration(fiber); + } + else commitHookEffectListMount(5, fiber); + break; + case 1: + var instance = fiber.stateNode; + if (fiber.flags & 4 && !offscreenSubtreeWasHidden) + if (null === current) + if (fiber.mode & 2) try { - startLayoutEffectTimer(), - commitHookEffectListMount(5, committedLanes); + startLayoutEffectTimer(), instance.componentDidMount(); } finally { - recordLayoutEffectDuration(committedLanes); + recordLayoutEffectDuration(fiber); } - else commitHookEffectListMount(5, committedLanes); - break; - case 1: - var instance = committedLanes.stateNode; - if (committedLanes.flags & 4) - if (null === current) - if (committedLanes.mode & 2) - try { - startLayoutEffectTimer(), - instance.componentDidMount(); - } finally { - recordLayoutEffectDuration(committedLanes); - } - else instance.componentDidMount(); - else { - var prevProps = - committedLanes.elementType === committedLanes.type - ? current.memoizedProps - : resolveDefaultProps( - committedLanes.type, - current.memoizedProps - ), - prevState = current.memoizedState; - if (committedLanes.mode & 2) - try { - startLayoutEffectTimer(), - instance.componentDidUpdate( - prevProps, - prevState, - instance.__reactInternalSnapshotBeforeUpdate - ); - } finally { - recordLayoutEffectDuration(committedLanes); - } - else + else instance.componentDidMount(); + else { + var prevProps = + fiber.elementType === fiber.type + ? current.memoizedProps + : resolveDefaultProps( + fiber.type, + current.memoizedProps + ), + prevState = current.memoizedState; + if (fiber.mode & 2) + try { + startLayoutEffectTimer(), instance.componentDidUpdate( prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate ); + } finally { + recordLayoutEffectDuration(fiber); } - var updateQueue = committedLanes.updateQueue; - null !== updateQueue && - commitUpdateQueue(committedLanes, updateQueue, instance); - break; - case 3: - var updateQueue$83 = committedLanes.updateQueue; - if (null !== updateQueue$83) { - var instance$84 = null; - if (null !== committedLanes.child) - switch (committedLanes.child.tag) { - case 5: - instance$84 = committedLanes.child.stateNode; - break; - case 1: - instance$84 = committedLanes.child.stateNode; - } - commitUpdateQueue( - committedLanes, - updateQueue$83, - instance$84 - ); - } - break; - case 5: - break; - case 6: - break; - case 4: - break; - case 12: - var _finishedWork$memoize2 = committedLanes.memoizedProps, - onCommit = _finishedWork$memoize2.onCommit, - onRender = _finishedWork$memoize2.onRender, - effectDuration = committedLanes.stateNode.effectDuration; - instance$84 = commitTime; - current = null === current ? "mount" : "update"; - currentUpdateIsNested && (current = "nested-update"); - "function" === typeof onRender && - onRender( - committedLanes.memoizedProps.id, - current, - committedLanes.actualDuration, - committedLanes.treeBaseDuration, - committedLanes.actualStartTime, - instance$84 - ); - "function" === typeof onCommit && - onCommit( - committedLanes.memoizedProps.id, - current, - effectDuration, - instance$84 + else + instance.componentDidUpdate( + prevProps, + prevState, + instance.__reactInternalSnapshotBeforeUpdate ); - enqueuePendingPassiveProfilerEffect(committedLanes); - var parentFiber = committedLanes.return; - a: for (; null !== parentFiber; ) { - switch (parentFiber.tag) { - case 3: - parentFiber.stateNode.effectDuration += effectDuration; - break a; - case 12: - parentFiber.stateNode.effectDuration += effectDuration; - break a; - } - parentFiber = parentFiber.return; + } + var updateQueue = fiber.updateQueue; + null !== updateQueue && + commitUpdateQueue(fiber, updateQueue, instance); + break; + case 3: + var updateQueue$85 = fiber.updateQueue; + if (null !== updateQueue$85) { + var instance$86 = null; + if (null !== fiber.child) + switch (fiber.child.tag) { + case 5: + instance$86 = fiber.child.stateNode; + break; + case 1: + instance$86 = fiber.child.stateNode; } - break; - case 13: - break; - case 19: - case 17: - case 21: - case 22: - case 23: - case 25: - break; - default: - throw Error( - "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." - ); + commitUpdateQueue(fiber, updateQueue$85, instance$86); } - if (committedLanes.flags & 512) { - instance$84 = void 0; - current = committedLanes; - var ref = current.ref; - if (null !== ref) { - var instance$jscomp$0 = current.stateNode; - switch (current.tag) { - case 5: - instance$84 = instance$jscomp$0; - break; - default: - instance$84 = instance$jscomp$0; + break; + case 5: + break; + case 6: + break; + case 4: + break; + case 12: + var _finishedWork$memoize2 = fiber.memoizedProps, + onCommit = _finishedWork$memoize2.onCommit, + onRender = _finishedWork$memoize2.onRender, + effectDuration = fiber.stateNode.effectDuration; + instance$86 = commitTime; + current = null === current ? "mount" : "update"; + currentUpdateIsNested && (current = "nested-update"); + "function" === typeof onRender && + onRender( + fiber.memoizedProps.id, + current, + fiber.actualDuration, + fiber.treeBaseDuration, + fiber.actualStartTime, + instance$86 + ); + "function" === typeof onCommit && + onCommit( + fiber.memoizedProps.id, + current, + effectDuration, + instance$86 + ); + enqueuePendingPassiveProfilerEffect(fiber); + var parentFiber = fiber.return; + a: for (; null !== parentFiber; ) { + switch (parentFiber.tag) { + case 3: + parentFiber.stateNode.effectDuration += effectDuration; + break a; + case 12: + parentFiber.stateNode.effectDuration += effectDuration; + break a; } - if ("function" === typeof ref) - if (current.mode & 2) - try { - startLayoutEffectTimer(), ref(instance$84); - } finally { - recordLayoutEffectDuration(current); - } - else ref(instance$84); - else ref.current = instance$84; + parentFiber = parentFiber.return; + } + break; + case 13: + break; + case 19: + case 17: + case 21: + case 22: + case 23: + case 25: + break; + default: + throw Error( + "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." + ); + } + offscreenSubtreeWasHidden || + (fiber.flags & 512 && commitAttachRef(fiber)); + } catch (error) { + captureCommitPhaseError(fiber, fiber.return, error); + } + } + if (fiber === subtreeRoot) { + nextEffect = null; + break; + } + instance$86 = fiber.sibling; + if (null !== instance$86) { + instance$86.return = fiber.return; + nextEffect = instance$86; + break; + } + nextEffect = fiber.return; + } +} +function disappearLayoutEffects_complete(subtreeRoot) { + for (; null !== nextEffect; ) { + var fiber = nextEffect; + if (fiber === subtreeRoot) { + nextEffect = null; + break; + } + var sibling = fiber.sibling; + if (null !== sibling) { + sibling.return = fiber.return; + nextEffect = sibling; + break; + } + nextEffect = fiber.return; + } +} +function reappearLayoutEffects_complete(subtreeRoot) { + for (; null !== nextEffect; ) { + var fiber = nextEffect; + try { + switch (fiber.tag) { + case 0: + case 11: + case 15: + if (fiber.mode & 2) + try { + startLayoutEffectTimer(); + var nearestMountedAncestor = fiber.return; + try { + commitHookEffectListMount(4, fiber); + } catch (error) { + captureCommitPhaseError(fiber, nearestMountedAncestor, error); } + } finally { + recordLayoutEffectDuration(fiber); + } + else { + var nearestMountedAncestor$jscomp$0 = fiber.return; + try { + commitHookEffectListMount(4, fiber); + } catch (error) { + captureCommitPhaseError( + fiber, + nearestMountedAncestor$jscomp$0, + error + ); + } + } + break; + case 1: + var instance = fiber.stateNode; + if ("function" === typeof instance.componentDidMount) { + var nearestMountedAncestor$jscomp$1 = fiber.return; + try { + instance.componentDidMount(); + } catch (error) { + captureCommitPhaseError( + fiber, + nearestMountedAncestor$jscomp$1, + error + ); } + } + var nearestMountedAncestor$jscomp$2 = fiber.return; + try { + commitAttachRef(fiber); } catch (error) { captureCommitPhaseError( - committedLanes, - committedLanes.return, + fiber, + nearestMountedAncestor$jscomp$2, error ); } - } - if (committedLanes === root) { - nextEffect = null; - break; - } - instance$84 = committedLanes.sibling; - if (null !== instance$84) { - instance$84.return = committedLanes.return; - nextEffect = instance$84; break; - } - nextEffect = committedLanes.return; + case 5: + var nearestMountedAncestor$jscomp$3 = fiber.return; + try { + commitAttachRef(fiber); + } catch (error) { + captureCommitPhaseError( + fiber, + nearestMountedAncestor$jscomp$3, + error + ); + } } - inProgressRoot = inProgressLanes = null; + } catch (error) { + captureCommitPhaseError(fiber, fiber.return, error); + } + if (fiber === subtreeRoot) { + nextEffect = null; + break; + } + var sibling = fiber.sibling; + if (null !== sibling) { + sibling.return = fiber.return; + nextEffect = sibling; + break; + } + nextEffect = fiber.return; + } } var ceil = Math.ceil, ReactCurrentDispatcher$2 = ReactSharedInternals.ReactCurrentDispatcher, @@ -6919,15 +7195,7 @@ function requestUpdateLane(fiber) { fiber = currentUpdatePriority; return 0 !== fiber ? fiber : 16; } -function scheduleUpdateOnFiber(fiber, lane, eventTime) { - if (50 < nestedUpdateCount) - throw ((nestedUpdateCount = 0), - (rootWithNestedUpdates = null), - Error( - "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops." - )); - var root = markUpdateLaneFromFiberToRoot(fiber, lane); - if (null === root) return null; +function scheduleUpdateOnFiber(root, fiber, lane, eventTime) { markRootUpdated(root, lane, eventTime); if (0 === (executionContext & 2) || root !== workInProgressRoot) isDevToolsPresent && addFiberToLanesMap(root, fiber, lane), @@ -6942,27 +7210,6 @@ function scheduleUpdateOnFiber(fiber, lane, eventTime) { 0 === (fiber.mode & 1) && ((workInProgressRootRenderTargetTime = now() + 500), includesLegacySyncCallbacks && flushSyncCallbacks()); - return root; -} -function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { - sourceFiber.lanes |= lane; - var alternate = sourceFiber.alternate; - null !== alternate && (alternate.lanes |= lane); - alternate = sourceFiber; - for (sourceFiber = sourceFiber.return; null !== sourceFiber; ) - (sourceFiber.childLanes |= lane), - (alternate = sourceFiber.alternate), - null !== alternate && (alternate.childLanes |= lane), - (alternate = sourceFiber), - (sourceFiber = sourceFiber.return); - return 3 === alternate.tag ? alternate.stateNode : null; -} -function isInterleavedUpdate(fiber) { - return ( - (null !== workInProgressRoot || null !== interleavedQueues) && - 0 !== (fiber.mode & 1) && - 0 === (executionContext & 2) - ); } function ensureRootIsScheduled(root, currentTime) { for ( @@ -7378,10 +7625,10 @@ function prepareFreshStack(root, lanes) { workInProgressRootFatalError = null; workInProgressRootPingedLanes = workInProgressRootInterleavedUpdatedLanes = workInProgressRootSkippedLanes = 0; workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors = null; - if (null !== interleavedQueues) { - for (lanes = 0; lanes < interleavedQueues.length; lanes++) + if (null !== concurrentQueues) { + for (lanes = 0; lanes < concurrentQueues.length; lanes++) if ( - ((timeoutHandle = interleavedQueues[lanes]), + ((timeoutHandle = concurrentQueues[lanes]), (interruptedWork = timeoutHandle.interleaved), null !== interruptedWork) ) { @@ -7395,7 +7642,7 @@ function prepareFreshStack(root, lanes) { } timeoutHandle.pending = interruptedWork; } - interleavedQueues = null; + concurrentQueues = null; } return root; } @@ -7494,7 +7741,7 @@ function handleError(root$jscomp$0, thrownValue) { else { var update = createUpdate(-1, 1); update.tag = 2; - enqueueUpdate(sourceFiber, update); + enqueueUpdate(sourceFiber, update, 1); } sourceFiber.lanes |= 1; } @@ -7521,13 +7768,12 @@ function handleError(root$jscomp$0, thrownValue) { ); } } - root = value; + root = value = createCapturedValueAtFiber(value, sourceFiber); 4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2); null === workInProgressRootConcurrentErrors ? (workInProgressRootConcurrentErrors = [root]) : workInProgressRootConcurrentErrors.push(root); - value = createCapturedValue(value, sourceFiber); root = returnFiber; do { switch (root.tag) { @@ -7791,7 +8037,11 @@ function commitRootImpl( transitions < recoverableErrors.length; transitions++ ) - renderPriorityLevel(recoverableErrors[transitions]); + (lanes = recoverableErrors[transitions]), + renderPriorityLevel(lanes.value, { + componentStack: lanes.stack, + digest: lanes.digest + }); if (hasUncaughtError) throw ((hasUncaughtError = !1), (root = firstUncaughtError), @@ -8021,11 +8271,10 @@ function enqueuePendingPassiveProfilerEffect(fiber) { })); } function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) { - sourceFiber = createCapturedValue(error, sourceFiber); + sourceFiber = createCapturedValueAtFiber(error, sourceFiber); sourceFiber = createRootErrorUpdate(rootFiber, sourceFiber, 1); - enqueueUpdate(rootFiber, sourceFiber); + rootFiber = enqueueUpdate(rootFiber, sourceFiber, 1); sourceFiber = requestEventTime(); - rootFiber = markUpdateLaneFromFiberToRoot(rootFiber, 1); null !== rootFiber && (markRootUpdated(rootFiber, 1, sourceFiber), ensureRootIsScheduled(rootFiber, sourceFiber)); @@ -8055,18 +8304,18 @@ function captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) { (null === legacyErrorBoundariesThatAlreadyFailed || !legacyErrorBoundariesThatAlreadyFailed.has(instance))) ) { - sourceFiber = createCapturedValue(error, sourceFiber); + sourceFiber = createCapturedValueAtFiber(error, sourceFiber); sourceFiber = createClassErrorUpdate( nearestMountedAncestor, sourceFiber, 1 ); - enqueueUpdate(nearestMountedAncestor, sourceFiber); - sourceFiber = requestEventTime(); - nearestMountedAncestor = markUpdateLaneFromFiberToRoot( + nearestMountedAncestor = enqueueUpdate( nearestMountedAncestor, + sourceFiber, 1 ); + sourceFiber = requestEventTime(); null !== nearestMountedAncestor && (markRootUpdated(nearestMountedAncestor, 1, sourceFiber), ensureRootIsScheduled(nearestMountedAncestor, sourceFiber)); @@ -8739,7 +8988,7 @@ function createFiberFromOffscreen(pendingProps, mode, lanes, key) { pendingProps = createFiber(22, pendingProps, key, mode); pendingProps.elementType = REACT_OFFSCREEN_TYPE; pendingProps.lanes = lanes; - pendingProps.stateNode = {}; + pendingProps.stateNode = { isHidden: !1 }; return pendingProps; } function createFiberFromText(content, mode, lanes) { @@ -8865,9 +9114,10 @@ function updateContainer(element, container, parentComponent, callback) { container.payload = { element: element }; callback = void 0 === callback ? null : callback; null !== callback && (container.callback = callback); - enqueueUpdate(current, container); - element = scheduleUpdateOnFiber(current, lane, eventTime); - null !== element && entangleTransitions(element, current, lane); + element = enqueueUpdate(current, container, lane); + null !== element && + (scheduleUpdateOnFiber(element, current, lane, eventTime), + entangleTransitions(element, current, lane)); return lane; } function emptyFindFiberByHostInstance() { @@ -8909,10 +9159,10 @@ batchedUpdatesImpl = function(fn, a) { } }; var roots = new Map(), - devToolsConfig$jscomp$inline_1010 = { + devToolsConfig$jscomp$inline_1024 = { findFiberByHostInstance: getInstanceFromTag, bundleType: 0, - version: "18.2.0-next-d300cebde-20220601", + version: "18.3.0-next-256aefbea-20220614", rendererPackageName: "react-native-renderer", rendererConfig: { getInspectorDataForViewTag: function() { @@ -8927,11 +9177,11 @@ var roots = new Map(), }.bind(null, findNodeHandle) } }; -var internals$jscomp$inline_1302 = { - bundleType: devToolsConfig$jscomp$inline_1010.bundleType, - version: devToolsConfig$jscomp$inline_1010.version, - rendererPackageName: devToolsConfig$jscomp$inline_1010.rendererPackageName, - rendererConfig: devToolsConfig$jscomp$inline_1010.rendererConfig, +var internals$jscomp$inline_1321 = { + bundleType: devToolsConfig$jscomp$inline_1024.bundleType, + version: devToolsConfig$jscomp$inline_1024.version, + rendererPackageName: devToolsConfig$jscomp$inline_1024.rendererPackageName, + rendererConfig: devToolsConfig$jscomp$inline_1024.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, @@ -8947,26 +9197,26 @@ var internals$jscomp$inline_1302 = { return null === fiber ? null : fiber.stateNode; }, findFiberByHostInstance: - devToolsConfig$jscomp$inline_1010.findFiberByHostInstance || + devToolsConfig$jscomp$inline_1024.findFiberByHostInstance || emptyFindFiberByHostInstance, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, - reconcilerVersion: "18.2.0-next-d300cebde-20220601" + reconcilerVersion: "18.3.0-next-256aefbea-20220614" }; if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) { - var hook$jscomp$inline_1303 = __REACT_DEVTOOLS_GLOBAL_HOOK__; + var hook$jscomp$inline_1322 = __REACT_DEVTOOLS_GLOBAL_HOOK__; if ( - !hook$jscomp$inline_1303.isDisabled && - hook$jscomp$inline_1303.supportsFiber + !hook$jscomp$inline_1322.isDisabled && + hook$jscomp$inline_1322.supportsFiber ) try { - (rendererID = hook$jscomp$inline_1303.inject( - internals$jscomp$inline_1302 + (rendererID = hook$jscomp$inline_1322.inject( + internals$jscomp$inline_1321 )), - (injectedHook = hook$jscomp$inline_1303); + (injectedHook = hook$jscomp$inline_1322); } catch (err) {} } exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = { diff --git a/package.json b/package.json index 90e7b1610a4e08..1802524aaff4e0 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,7 @@ "repo-config" ], "peerDependencies": { - "react": "18.1.0" + "react": "18.2.0" }, "dependencies": { "@jest/create-cache-key-function": "^27.0.1", @@ -129,7 +129,7 @@ "react-refresh": "^0.4.0", "react-shallow-renderer": "^16.15.0", "regenerator-runtime": "^0.13.2", - "scheduler": "^0.22.0", + "scheduler": "^0.23.0", "stacktrace-parser": "^0.1.3", "use-sync-external-store": "^1.0.0", "whatwg-fetch": "^3.0.0", @@ -137,8 +137,8 @@ }, "devDependencies": { "flow-bin": "^0.180.0", - "react": "18.1.0", - "react-test-renderer": "^18.1.0" + "react": "18.2.0", + "react-test-renderer": "^18.2.0" }, "codegenConfig": { "libraries": [ diff --git a/packages/rn-tester/package.json b/packages/rn-tester/package.json index aa37800cc1bd0a..c902acf5747636 100644 --- a/packages/rn-tester/package.json +++ b/packages/rn-tester/package.json @@ -23,7 +23,7 @@ "nullthrows": "^1.1.1" }, "peerDependencies": { - "react": "18.1.0", + "react": "18.2.0", "react-native": "*" }, "devDependencies": { diff --git a/repo-config/package.json b/repo-config/package.json index 16ff0bdfb56347..1f8b8912ad2605 100644 --- a/repo-config/package.json +++ b/repo-config/package.json @@ -43,9 +43,9 @@ "metro-memory-fs": "0.71.1", "mkdirp": "^0.5.1", "prettier": "^2.4.1", - "react": "18.1.0", + "react": "18.2.0", "react-native-codegen": "^0.70.0", - "react-test-renderer": "18.1.0", + "react-test-renderer": "18.2.0", "shelljs": "^0.8.5", "signedsource": "^1.0.0", "ws": "^6.1.4", diff --git a/template/package.json b/template/package.json index b61bae96d68e74..ec69b955209b55 100644 --- a/template/package.json +++ b/template/package.json @@ -10,7 +10,7 @@ "lint": "eslint ." }, "dependencies": { - "react": "18.1.0", + "react": "18.2.0", "react-native": "1000.0.0" }, "devDependencies": { @@ -21,7 +21,7 @@ "eslint": "^7.32.0", "jest": "^26.6.3", "metro-react-native-babel-preset": "^0.71.1", - "react-test-renderer": "18.1.0" + "react-test-renderer": "18.2.0" }, "jest": { "preset": "react-native" diff --git a/yarn.lock b/yarn.lock index 3d05d482c935b9..c0a85d50568b62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5965,7 +5965,7 @@ react-devtools-core@4.24.0: shell-quote "^1.6.1" ws "^7" -"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.1.0: +"react-is@^16.12.0 || ^17.0.0 || ^18.0.0": version "18.1.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.1.0.tgz#61aaed3096d30eacf2a2127118b5b41387d32a67" integrity sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg== @@ -5980,6 +5980,11 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + react-refresh@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.0.tgz#d421f9bd65e0e4b9822a399f14ac56bda9c92292" @@ -5993,19 +5998,19 @@ react-shallow-renderer@^16.15.0: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-test-renderer@18.1.0, react-test-renderer@^18.1.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.1.0.tgz#35b75754834cf9ab517b6813db94aee0a6b545c3" - integrity sha512-OfuueprJFW7h69GN+kr4Ywin7stcuqaYAt1g7airM5cUgP0BoF5G5CXsPGmXeDeEkncb2fqYNECO4y18sSqphg== +react-test-renderer@18.2.0, react-test-renderer@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.2.0.tgz#1dd912bd908ff26da5b9fca4fd1c489b9523d37e" + integrity sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA== dependencies: - react-is "^18.1.0" + react-is "^18.2.0" react-shallow-renderer "^16.15.0" - scheduler "^0.22.0" + scheduler "^0.23.0" -react@18.1.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890" - integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ== +react@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" @@ -6383,10 +6388,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8" - integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0"