//@flow
import React from 'react'
import ReactDOM from 'react-dom'
import Reconciler from 'react-reconciler'
import emptyObject from 'fbjs/lib/emptyObject';
import * as Scheduler from 'scheduler/unstable_mock';
import CustomRenderer from './reglbase'
// import {
// createWorkInProgress,
// createFiberFromElement,
// createFiberFromFragment,
// createFiberFromText,
// createFiberFromPortal,
// } from 'react-reconciler';
class App extends React.Component {
constructor(){
super()
this.state = { count: Math.random() }
}
// shouldComponentUpdate(){
// console.log('shodul i update')
// return true
// }
render(){
// console.log(this)
let num = this.state.count.toFixed(2);
console.log(num)
return <div>
<p>hello world</p>
<button onClick={e => this.setState({ count: 1 + this.state.count })}>
Clicked <Thing>{num}</Thing> times
</button>
</div>
}
}
function Thing(props){
React.useEffect(() => {
debugger
console.log('hello')
})
console.log('thing', props.children)
return <div>{props.children}</div>
}
console.log(CustomRenderer)
var element = <App />
// ReactDOM.render(element, document.getElementById('root'))
// render(<App />, { stuff: [] })
// var internalRoot = document.getElementById('root')._reactRootContainer._internalRoot
// console.log(internalRoot)
// setTimeout(() => {
// const customContainer = CustomRenderer.createContainer({});
// customContainer.current = cloneFiber(internalRoot.current);
// console.log(customContainer, 'cc')
// debugger
// CustomRenderer.updateContainer(<App xyz />, customContainer, null);
let customContainer = CustomRenderer.createContainer({});
CustomRenderer.updateContainer(<App />, customContainer, null)
CustomRenderer.updateContainer(<App />, customContainer, null)
// CustomRenderer.updateContainer(<App />, customContainer, null)
// CustomRenderer.updateContainer(<App />, customContainer, null)
console.log(customContainer)
function cloneFiber(fiber, map = new Map()){
if(!fiber) return fiber;
if(map.has(fiber)) return map.get(fiber);
let clone = { ...fiber }
map.set(fiber, clone)
if(clone.stateNode){
clone.stateNode = {
containerInfo: {}
}
}
clone.child = cloneFiber(fiber.child, map)
clone.sibling = cloneFiber(fiber.sibling, map)
clone.return = cloneFiber(fiber.return, map)
return clone;
}
// }, 100)
// function metaproxy(obj){
// return new Proxy(obj, {
// get(target, prop, receiver){
// let value = Reflect.get(target, prop, receiver)
// if(value && typeof value == 'object'){
// console.log('getting', prop, value)
// return metaproxy(value)
// }
// return value;
// // console.log(prop, receiver, Reflect.get(...arguments))
// // return Reflect.get(...arguments);
// }
// })
// }
// var p = metaproxy(internalRoot);
// //
// CustomRenderer.updateContainer(<App two />, p, null);
// setTimeout(function(args) {
// CustomRenderer.updateContainer(element, internalRoot, null);
// }, 1000)
// //
'use strict';
var REACT_ELEMENT_TYPE = require('ReactElementSymbol');
var _require = require('ReactCoroutine'),
REACT_COROUTINE_TYPE = _require.REACT_COROUTINE_TYPE,
REACT_YIELD_TYPE = _require.REACT_YIELD_TYPE;
var _require2 = require('ReactPortal'),
REACT_PORTAL_TYPE = _require2.REACT_PORTAL_TYPE;
var ReactFiber = require('ReactFiber');
var ReactTypeOfSideEffect = require('ReactTypeOfSideEffect');
var ReactTypeOfWork = require('ReactTypeOfWork');
var emptyObject = require('fbjs/lib/emptyObject');
var getIteratorFn = require('getIteratorFn');
var invariant = require('fbjs/lib/invariant');
var ReactFeatureFlags = require('ReactFeatureFlags');
var ReactCurrentOwner = require('react/lib/ReactCurrentOwner');
if (__DEV__) {
var _require3 = require('ReactDebugCurrentFiber'),
getCurrentFiberStackAddendum = _require3.getCurrentFiberStackAddendum;
var getComponentName = require('getComponentName');
var warning = require('fbjs/lib/warning');
var didWarnAboutMaps = false;
}
var cloneFiber = ReactFiber.cloneFiber,
createFiberFromElement = ReactFiber.createFiberFromElement,
createFiberFromFragment = ReactFiber.createFiberFromFragment,
createFiberFromText = ReactFiber.createFiberFromText,
createFiberFromCoroutine = ReactFiber.createFiberFromCoroutine,
createFiberFromYield = ReactFiber.createFiberFromYield,
createFiberFromPortal = ReactFiber.createFiberFromPortal;
var isArray = Array.isArray;
var FunctionalComponent = ReactTypeOfWork.FunctionalComponent,
ClassComponent = ReactTypeOfWork.ClassComponent,
HostText = ReactTypeOfWork.HostText,
HostPortal = ReactTypeOfWork.HostPortal,
CoroutineComponent = ReactTypeOfWork.CoroutineComponent,
YieldComponent = ReactTypeOfWork.YieldComponent,
Fragment = ReactTypeOfWork.Fragment;
var NoEffect = ReactTypeOfSideEffect.NoEffect,
Placement = ReactTypeOfSideEffect.Placement,
Deletion = ReactTypeOfSideEffect.Deletion;
function coerceRef(current, element) {
var mixedRef = element.ref;
if (mixedRef !== null && typeof mixedRef !== 'function') {
if (element._owner) {
var owner = element._owner;
var inst = void 0;
if (owner) {
if (typeof owner.tag === 'number') {
var ownerFiber = owner;
invariant(ownerFiber.tag === ClassComponent, 'Stateless function components cannot have refs.');
inst = ownerFiber.stateNode;
} else {
inst = owner.getPublicInstance();
}
}
invariant(inst, 'Missing owner for string ref %s. This error is likely caused by a ' + 'bug in React. Please file an issue.', mixedRef);
var stringRef = '' + mixedRef;
if (current !== null && current.ref !== null && current.ref._stringRef === stringRef) {
return current.ref;
}
var ref = function ref(value) {
var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;
if (value === null) {
delete refs[stringRef];
} else {
refs[stringRef] = value;
}
};
ref._stringRef = stringRef;
return ref;
}
}
return mixedRef;
}
function throwOnInvalidObjectType(returnFiber, newChild) {
if (returnFiber.type !== 'textarea') {
var addendum = '';
if (__DEV__) {
addendum = ' If you meant to render a collection of children, use an array ' + 'instead.';
var owner = ReactCurrentOwner.owner || returnFiber._debugOwner;
if (owner && typeof owner.tag === 'number') {
var name = getComponentName(owner);
if (name) {
addendum += '\n\nCheck the render method of `' + name + '`.';
}
}
}
invariant(false, 'Objects are not valid as a React child (found: %s).%s', Object.prototype.toString.call(newChild) === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : newChild, addendum);
}
}
function ChildReconciler(shouldClone, shouldTrackSideEffects) {
function deleteChild(returnFiber, childToDelete) {
if (!shouldTrackSideEffects) {
return;
}
if (!shouldClone) {
if (childToDelete.alternate === null) {
return;
}
childToDelete = childToDelete.alternate;
}
var last = returnFiber.progressedLastDeletion;
if (last !== null) {
last.nextEffect = childToDelete;
returnFiber.progressedLastDeletion = childToDelete;
} else {
returnFiber.progressedFirstDeletion = returnFiber.progressedLastDeletion = childToDelete;
}
childToDelete.nextEffect = null;
childToDelete.effectTag = Deletion;
}
function deleteRemainingChildren(returnFiber, currentFirstChild) {
if (!shouldTrackSideEffects) {
return null;
}
var childToDelete = currentFirstChild;
while (childToDelete !== null) {
deleteChild(returnFiber, childToDelete);
childToDelete = childToDelete.sibling;
}
return null;
}
function mapRemainingChildren(returnFiber, currentFirstChild) {
var existingChildren = new Map();
var existingChild = currentFirstChild;
while (existingChild !== null) {
if (existingChild.key !== null) {
existingChildren.set(existingChild.key, existingChild);
} else {
existingChildren.set(existingChild.index, existingChild);
}
existingChild = existingChild.sibling;
}
return existingChildren;
}
function useFiber(fiber, priority) {
if (shouldClone) {
var clone = cloneFiber(fiber, priority);
clone.index = 0;
clone.sibling = null;
return clone;
} else {
fiber.pendingWorkPriority = priority;
fiber.effectTag = NoEffect;
fiber.index = 0;
fiber.sibling = null;
return fiber;
}
}
function placeChild(newFiber, lastPlacedIndex, newIndex) {
newFiber.index = newIndex;
if (!shouldTrackSideEffects) {
return lastPlacedIndex;
}
var current = newFiber.alternate;
if (current !== null) {
var oldIndex = current.index;
if (oldIndex < lastPlacedIndex) {
newFiber.effectTag = Placement;
return lastPlacedIndex;
} else {
return oldIndex;
}
} else {
newFiber.effectTag = Placement;
return lastPlacedIndex;
}
}
function placeSingleChild(newFiber) {
if (shouldTrackSideEffects && newFiber.alternate === null) {
newFiber.effectTag = Placement;
}
return newFiber;
}
function updateTextNode(returnFiber, current, textContent, priority) {
if (current === null || current.tag !== HostText) {
var created = createFiberFromText(textContent, priority);
created.return = returnFiber;
return created;
} else {
var existing = useFiber(current, priority);
existing.pendingProps = textContent;
existing.return = returnFiber;
return existing;
}
}
function updateElement(returnFiber, current, element, priority) {
if (current === null || current.type !== element.type) {
var created = createFiberFromElement(element, priority);
created.ref = coerceRef(current, element);
created.return = returnFiber;
return created;
} else {
var existing = useFiber(current, priority);
existing.ref = coerceRef(current, element);
existing.pendingProps = element.props;
existing.return = returnFiber;
if (__DEV__) {
existing._debugSource = element._source;
existing._debugOwner = element._owner;
}
return existing;
}
}
function updateCoroutine(returnFiber, current, coroutine, priority) {
if (current === null || current.tag !== CoroutineComponent) {
var created = createFiberFromCoroutine(coroutine, priority);
created.return = returnFiber;
return created;
} else {
var existing = useFiber(current, priority);
existing.pendingProps = coroutine;
existing.return = returnFiber;
return existing;
}
}
function updateYield(returnFiber, current, yieldNode, priority) {
if (current === null || current.tag !== YieldComponent) {
var created = createFiberFromYield(yieldNode, priority);
created.type = yieldNode.value;
created.return = returnFiber;
return created;
} else {
var existing = useFiber(current, priority);
existing.type = yieldNode.value;
existing.return = returnFiber;
return existing;
}
}
function updatePortal(returnFiber, current, portal, priority) {
if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {
var created = createFiberFromPortal(portal, priority);
created.return = returnFiber;
return created;
} else {
var existing = useFiber(current, priority);
existing.pendingProps = portal.children || [];
existing.return = returnFiber;
return existing;
}
}
function updateFragment(returnFiber, current, fragment, priority) {
if (current === null || current.tag !== Fragment) {
var created = createFiberFromFragment(fragment, priority);
created.return = returnFiber;
return created;
} else {
var existing = useFiber(current, priority);
existing.pendingProps = fragment;
existing.return = returnFiber;
return existing;
}
}
function createChild(returnFiber, newChild, priority) {
if (typeof newChild === 'string' || typeof newChild === 'number') {
var created = createFiberFromText('' + newChild, priority);
created.return = returnFiber;
return created;
}
if (typeof newChild === 'object' && newChild !== null) {
switch (newChild.$$typeof) {
case REACT_ELEMENT_TYPE:
{
var _created = createFiberFromElement(newChild, priority);
_created.ref = coerceRef(null, newChild);
_created.return = returnFiber;
return _created;
}
case REACT_COROUTINE_TYPE:
{
var _created2 = createFiberFromCoroutine(newChild, priority);
_created2.return = returnFiber;
return _created2;
}
case REACT_YIELD_TYPE:
{
var _created3 = createFiberFromYield(newChild, priority);
_created3.type = newChild.value;
_created3.return = returnFiber;
return _created3;
}
case REACT_PORTAL_TYPE:
{
var _created4 = createFiberFromPortal(newChild, priority);
_created4.return = returnFiber;
return _created4;
}
}
if (isArray(newChild) || getIteratorFn(newChild)) {
var _created5 = createFiberFromFragment(newChild, priority);
_created5.return = returnFiber;
return _created5;
}
throwOnInvalidObjectType(returnFiber, newChild);
}
return null;
}
function updateSlot(returnFiber, oldFiber, newChild, priority) {
var key = oldFiber !== null ? oldFiber.key : null;
if (typeof newChild === 'string' || typeof newChild === 'number') {
if (key !== null) {
return null;
}
return updateTextNode(returnFiber, oldFiber, '' + newChild, priority);
}
if (typeof newChild === 'object' && newChild !== null) {
switch (newChild.$$typeof) {
case REACT_ELEMENT_TYPE:
{
if (newChild.key === key) {
return updateElement(returnFiber, oldFiber, newChild, priority);
} else {
return null;
}
}
case REACT_COROUTINE_TYPE:
{
if (newChild.key === key) {
return updateCoroutine(returnFiber, oldFiber, newChild, priority);
} else {
return null;
}
}
case REACT_YIELD_TYPE:
{
if (key === null) {
return updateYield(returnFiber, oldFiber, newChild, priority);
} else {
return null;
}
}
case REACT_PORTAL_TYPE:
{
if (newChild.key === key) {
return updatePortal(returnFiber, oldFiber, newChild, priority);
} else {
return null;
}
}
}
if (isArray(newChild) || getIteratorFn(newChild)) {
if (key !== null) {
return null;
}
return updateFragment(returnFiber, oldFiber, newChild, priority);
}
throwOnInvalidObjectType(returnFiber, newChild);
}
return null;
}
function updateFromMap(existingChildren, returnFiber, newIdx, newChild, priority) {
if (typeof newChild === 'string' || typeof newChild === 'number') {
var matchedFiber = existingChildren.get(newIdx) || null;
return updateTextNode(returnFiber, matchedFiber, '' + newChild, priority);
}
if (typeof newChild === 'object' && newChild !== null) {
switch (newChild.$$typeof) {
case REACT_ELEMENT_TYPE:
{
var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;
return updateElement(returnFiber, _matchedFiber, newChild, priority);
}
case REACT_COROUTINE_TYPE:
{
var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;
return updateCoroutine(returnFiber, _matchedFiber2, newChild, priority);
}
case REACT_YIELD_TYPE:
{
var _matchedFiber3 = existingChildren.get(newIdx) || null;
return updateYield(returnFiber, _matchedFiber3, newChild, priority);
}
case REACT_PORTAL_TYPE:
{
var _matchedFiber4 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;
return updatePortal(returnFiber, _matchedFiber4, newChild, priority);
}
}
if (isArray(newChild) || getIteratorFn(newChild)) {
var _matchedFiber5 = existingChildren.get(newIdx) || null;
return updateFragment(returnFiber, _matchedFiber5, newChild, priority);
}
throwOnInvalidObjectType(returnFiber, newChild);
}
return null;
}
function warnOnDuplicateKey(child, knownKeys) {
if (__DEV__) {
if (typeof child !== 'object' || child === null) {
return knownKeys;
}
switch (child.$$typeof) {
case REACT_ELEMENT_TYPE:
case REACT_COROUTINE_TYPE:
case REACT_PORTAL_TYPE:
var key = child.key;
if (typeof key !== 'string') {
break;
}
if (knownKeys === null) {
knownKeys = new Set();
knownKeys.add(key);
break;
}
if (!knownKeys.has(key)) {
knownKeys.add(key);
break;
}
warning(false, 'Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, ' + 'only the first child will be used.%s', key, getCurrentFiberStackAddendum());
break;
default:
break;
}
}
return knownKeys;
}
function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, priority) {
if (__DEV__) {
var knownKeys = null;
for (var i = 0; i < newChildren.length; i++) {
var child = newChildren[i];
knownKeys = warnOnDuplicateKey(child, knownKeys);
}
}
var resultingFirstChild = null;
var previousNewFiber = null;
var oldFiber = currentFirstChild;
var lastPlacedIndex = 0;
var newIdx = 0;
var nextOldFiber = null;
for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {
if (oldFiber.index > newIdx) {
nextOldFiber = oldFiber;
oldFiber = null;
} else {
nextOldFiber = oldFiber.sibling;
}
var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], priority);
if (newFiber === null) {
if (oldFiber === null) {
oldFiber = nextOldFiber;
}
break;
}
if (shouldTrackSideEffects) {
if (oldFiber && newFiber.alternate === null) {
deleteChild(returnFiber, oldFiber);
}
}
lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);
if (previousNewFiber === null) {
resultingFirstChild = newFiber;
} else {
previousNewFiber.sibling = newFiber;
}
previousNewFiber = newFiber;
oldFiber = nextOldFiber;
}
if (newIdx === newChildren.length) {
deleteRemainingChildren(returnFiber, oldFiber);
return resultingFirstChild;
}
if (oldFiber === null) {
for (; newIdx < newChildren.length; newIdx++) {
var _newFiber = createChild(returnFiber, newChildren[newIdx], priority);
if (!_newFiber) {
continue;
}
lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);
if (previousNewFiber === null) {
resultingFirstChild = _newFiber;
} else {
previousNewFiber.sibling = _newFiber;
}
previousNewFiber = _newFiber;
}
return resultingFirstChild;
}
var existingChildren = mapRemainingChildren(returnFiber, oldFiber);
for (; newIdx < newChildren.length; newIdx++) {
var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], priority);
if (_newFiber2) {
if (shouldTrackSideEffects) {
if (_newFiber2.alternate !== null) {
existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);
}
}
lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);
if (previousNewFiber === null) {
resultingFirstChild = _newFiber2;
} else {
previousNewFiber.sibling = _newFiber2;
}
previousNewFiber = _newFiber2;
}
}
if (shouldTrackSideEffects) {
existingChildren.forEach(function (child) {
return deleteChild(returnFiber, child);
});
}
return resultingFirstChild;
}
function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, priority) {
var iteratorFn = getIteratorFn(newChildrenIterable);
invariant(typeof iteratorFn === 'function', 'An object is not an iterable. This error is likely caused by a bug in ' + 'React. Please file an issue.');
if (__DEV__) {
if (typeof newChildrenIterable.entries === 'function') {
var possibleMap = newChildrenIterable;
if (possibleMap.entries === iteratorFn) {
var mapsAsChildrenAddendum = '';
var owner = ReactCurrentOwner.owner || returnFiber._debugOwner;
if (owner && typeof owner.tag === 'number') {
var mapsAsChildrenOwnerName = getComponentName(owner);
if (mapsAsChildrenOwnerName) {
mapsAsChildrenAddendum = '\n\nCheck the render method of `' + mapsAsChildrenOwnerName + '`.';
}
}
warning(didWarnAboutMaps, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.%s', mapsAsChildrenAddendum);
didWarnAboutMaps = true;
}
}
var _newChildren = iteratorFn.call(newChildrenIterable);
if (_newChildren) {
var knownKeys = null;
var _step = _newChildren.next();
for (; !_step.done; _step = _newChildren.next()) {
var child = _step.value;
knownKeys = warnOnDuplicateKey(child, knownKeys);
}
}
}
var newChildren = iteratorFn.call(newChildrenIterable);
invariant(newChildren != null, 'An iterable object provided no iterator.');
var resultingFirstChild = null;
var previousNewFiber = null;
var oldFiber = currentFirstChild;
var lastPlacedIndex = 0;
var newIdx = 0;
var nextOldFiber = null;
var step = newChildren.next();
for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {
if (oldFiber.index > newIdx) {
nextOldFiber = oldFiber;
oldFiber = null;
} else {
nextOldFiber = oldFiber.sibling;
}
var newFiber = updateSlot(returnFiber, oldFiber, step.value, priority);
if (newFiber === null) {
if (!oldFiber) {
oldFiber = nextOldFiber;
}
break;
}
if (shouldTrackSideEffects) {
if (oldFiber && newFiber.alternate === null) {
deleteChild(returnFiber, oldFiber);
}
}
lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);
if (previousNewFiber === null) {
resultingFirstChild = newFiber;
} else {
previousNewFiber.sibling = newFiber;
}
previousNewFiber = newFiber;
oldFiber = nextOldFiber;
}
if (step.done) {
deleteRemainingChildren(returnFiber, oldFiber);
return resultingFirstChild;
}
if (oldFiber === null) {
for (; !step.done; newIdx++, step = newChildren.next()) {
var _newFiber3 = createChild(returnFiber, step.value, priority);
if (_newFiber3 === null) {
continue;
}
lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);
if (previousNewFiber === null) {
resultingFirstChild = _newFiber3;
} else {
previousNewFiber.sibling = _newFiber3;
}
previousNewFiber = _newFiber3;
}
return resultingFirstChild;
}
var existingChildren = mapRemainingChildren(returnFiber, oldFiber);
for (; !step.done; newIdx++, step = newChildren.next()) {
var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, priority);
if (_newFiber4 !== null) {
if (shouldTrackSideEffects) {
if (_newFiber4.alternate !== null) {
existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);
}
}
lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);
if (previousNewFiber === null) {
resultingFirstChild = _newFiber4;
} else {
previousNewFiber.sibling = _newFiber4;
}
previousNewFiber = _newFiber4;
}
}
if (shouldTrackSideEffects) {
existingChildren.forEach(function (child) {
return deleteChild(returnFiber, child);
});
}
return resultingFirstChild;
}
function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, priority) {
if (currentFirstChild !== null && currentFirstChild.tag === HostText) {
deleteRemainingChildren(returnFiber, currentFirstChild.sibling);
var existing = useFiber(currentFirstChild, priority);
existing.pendingProps = textContent;
existing.return = returnFiber;
return existing;
}
deleteRemainingChildren(returnFiber, currentFirstChild);
var created = createFiberFromText(textContent, priority);
created.return = returnFiber;
return created;
}
function reconcileSingleElement(returnFiber, currentFirstChild, element, priority) {
var key = element.key;
var child = currentFirstChild;
while (child !== null) {
if (child.key === key) {
if (child.type === element.type) {
deleteRemainingChildren(returnFiber, child.sibling);
var existing = useFiber(child, priority);
existing.ref = coerceRef(child, element);
existing.pendingProps = element.props;
existing.return = returnFiber;
if (__DEV__) {
existing._debugSource = element._source;
existing._debugOwner = element._owner;
}
return existing;
} else {
deleteRemainingChildren(returnFiber, child);
break;
}
} else {
deleteChild(returnFiber, child);
}
child = child.sibling;
}
var created = createFiberFromElement(element, priority);
created.ref = coerceRef(currentFirstChild, element);
created.return = returnFiber;
return created;
}
function reconcileSingleCoroutine(returnFiber, currentFirstChild, coroutine, priority) {
var key = coroutine.key;
var child = currentFirstChild;
while (child !== null) {
if (child.key === key) {
if (child.tag === CoroutineComponent) {
deleteRemainingChildren(returnFiber, child.sibling);
var existing = useFiber(child, priority);
existing.pendingProps = coroutine;
existing.return = returnFiber;
return existing;
} else {
deleteRemainingChildren(returnFiber, child);
break;
}
} else {
deleteChild(returnFiber, child);
}
child = child.sibling;
}
var created = createFiberFromCoroutine(coroutine, priority);
created.return = returnFiber;
return created;
}
function reconcileSingleYield(returnFiber, currentFirstChild, yieldNode, priority) {
var child = currentFirstChild;
if (child !== null) {
if (child.tag === YieldComponent) {
deleteRemainingChildren(returnFiber, child.sibling);
var existing = useFiber(child, priority);
existing.type = yieldNode.value;
existing.return = returnFiber;
return existing;
} else {
deleteRemainingChildren(returnFiber, child);
}
}
var created = createFiberFromYield(yieldNode, priority);
created.type = yieldNode.value;
created.return = returnFiber;
return created;
}
function reconcileSinglePortal(returnFiber, currentFirstChild, portal, priority) {
var key = portal.key;
var child = currentFirstChild;
while (child !== null) {
if (child.key === key) {
if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {
deleteRemainingChildren(returnFiber, child.sibling);
var existing = useFiber(child, priority);
existing.pendingProps = portal.children || [];
existing.return = returnFiber;
return existing;
} else {
deleteRemainingChildren(returnFiber, child);
break;
}
} else {
deleteChild(returnFiber, child);
}
child = child.sibling;
}
var created = createFiberFromPortal(portal, priority);
created.return = returnFiber;
return created;
}
function reconcileChildFibers(returnFiber, currentFirstChild, newChild, priority) {
var disableNewFiberFeatures = ReactFeatureFlags.disableNewFiberFeatures;
var isObject = typeof newChild === 'object' && newChild !== null;
if (isObject) {
if (disableNewFiberFeatures) {
switch (newChild.$$typeof) {
case REACT_ELEMENT_TYPE:
return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, priority));
case REACT_PORTAL_TYPE:
return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, priority));
}
} else {
switch (newChild.$$typeof) {
case REACT_ELEMENT_TYPE:
return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, priority));
case REACT_COROUTINE_TYPE:
return placeSingleChild(reconcileSingleCoroutine(returnFiber, currentFirstChild, newChild, priority));
case REACT_YIELD_TYPE:
return placeSingleChild(reconcileSingleYield(returnFiber, currentFirstChild, newChild, priority));
case REACT_PORTAL_TYPE:
return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, priority));
}
}
}
if (disableNewFiberFeatures) {
switch (returnFiber.tag) {
case ClassComponent:
{
if (__DEV__) {
var instance = returnFiber.stateNode;
if (instance.render._isMockFunction && typeof newChild === 'undefined') {
break;
}
}
var Component = returnFiber.type;
invariant(newChild === null || newChild === false, '%s.render(): A valid React element (or null) must be returned. ' + 'You may have returned undefined, an array or some other ' + 'invalid object.', Component.displayName || Component.name || 'Component');
break;
}
case FunctionalComponent:
{
var _Component = returnFiber.type;
invariant(newChild === null || newChild === false, '%s(...): A valid React element (or null) must be returned. ' + 'You may have returned undefined, an array or some other ' + 'invalid object.', _Component.displayName || _Component.name || 'Component');
break;
}
}
}
if (typeof newChild === 'string' || typeof newChild === 'number') {
return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, priority));
}
if (isArray(newChild)) {
return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, priority);
}
if (getIteratorFn(newChild)) {
return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, priority);
}
if (isObject) {
throwOnInvalidObjectType(returnFiber, newChild);
}
if (!disableNewFiberFeatures && typeof newChild === 'undefined') {
switch (returnFiber.tag) {
case ClassComponent:
{
if (__DEV__) {
var _instance = returnFiber.stateNode;
if (_instance.render._isMockFunction) {
break;
}
}
}
case FunctionalComponent:
{
var _Component2 = returnFiber.type;
invariant(false, '%s(...): Nothing was returned from render. This usually means a ' + 'return statement is missing. Or, to render nothing, ' + 'return null.', _Component2.displayName || _Component2.name || 'Component');
}
}
}
return deleteRemainingChildren(returnFiber, currentFirstChild);
}
return reconcileChildFibers;
}
exports.reconcileChildFibers = ChildReconciler(true, true);
exports.reconcileChildFibersInPlace = ChildReconciler(false, true);
exports.mountChildFibersInPlace = ChildReconciler(false, false);
exports.cloneChildFibers = function (current, workInProgress) {
if (!workInProgress.child) {
return;
}
if (current !== null && workInProgress.child === current.child) {
var currentChild = workInProgress.child;
var newChild = cloneFiber(currentChild, currentChild.pendingWorkPriority);
workInProgress.child = newChild;
newChild.return = workInProgress;
while (currentChild.sibling !== null) {
currentChild = currentChild.sibling;
newChild = newChild.sibling = cloneFiber(currentChild, currentChild.pendingWorkPriority);
newChild.return = workInProgress;
}
newChild.sibling = null;
} else {
var child = workInProgress.child;
while (child !== null) {
child.return = workInProgress;
child = child.sibling;
}
}
};
'use strict';
var REACT_ELEMENT_TYPE = require('ReactElementSymbol');
var _require = require('ReactCoroutine'),
REACT_COROUTINE_TYPE = _require.REACT_COROUTINE_TYPE,
REACT_YIELD_TYPE = _require.REACT_YIELD_TYPE;
var _require2 = require('ReactPortal'),
REACT_PORTAL_TYPE = _require2.REACT_PORTAL_TYPE;
var ReactFiber = require('ReactFiber');
var ReactTypeOfSideEffect = require('ReactTypeOfSideEffect');
var ReactTypeOfWork = require('ReactTypeOfWork');
var emptyObject = require('fbjs/lib/emptyObject');
var getIteratorFn = require('getIteratorFn');
var invariant = require('fbjs/lib/invariant');
var ReactFeatureFlags = require('ReactFeatureFlags');
var ReactCurrentOwner = require('react/lib/ReactCurrentOwner');
if (__DEV__) {
var _require3 = require('ReactDebugCurrentFiber'),
getCurrentFiberStackAddendum = _require3.getCurrentFiberStackAddendum;
var getComponentName = require('getComponentName');
var warning = require('fbjs/lib/warning');
var didWarnAboutMaps = false;
}
var cloneFiber = ReactFiber.cloneFiber,
createFiberFromElement = ReactFiber.createFiberFromElement,
createFiberFromFragment = ReactFiber.createFiberFromFragment,
createFiberFromText = ReactFiber.createFiberFromText,
createFiberFromCoroutine = ReactFiber.createFiberFromCoroutine,
createFiberFromYield = ReactFiber.createFiberFromYield,
createFiberFromPortal = ReactFiber.createFiberFromPortal;
var isArray = Array.isArray;
var FunctionalComponent = ReactTypeOfWork.FunctionalComponent,
ClassComponent = ReactTypeOfWork.ClassComponent,
HostText = ReactTypeOfWork.HostText,
HostPortal = ReactTypeOfWork.HostPortal,
CoroutineComponent = ReactTypeOfWork.CoroutineComponent,
YieldComponent = ReactTypeOfWork.YieldComponent,
Fragment = ReactTypeOfWork.Fragment;
var NoEffect = ReactTypeOfSideEffect.NoEffect,
Placement = ReactTypeOfSideEffect.Placement,
Deletion = ReactTypeOfSideEffect.Deletion;
function coerceRef(current, element) {
var mixedRef = element.ref;
if (mixedRef !== null && typeof mixedRef !== 'function') {
if (element._owner) {
var owner = element._owner;
var inst = void 0;
if (owner) {
if (typeof owner.tag === 'number') {
var ownerFiber = owner;
invariant(ownerFiber.tag === ClassComponent, 'Stateless function components cannot have refs.');
inst = ownerFiber.stateNode;
} else {
inst = owner.getPublicInstance();
}
}
invariant(inst, 'Missing owner for string ref %s. This error is likely caused by a ' + 'bug in React. Please file an issue.', mixedRef);
var stringRef = '' + mixedRef;
if (current !== null && current.ref !== null && current.ref._stringRef === stringRef) {
return current.ref;
}
var ref = function ref(value) {
var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;
if (value === null) {
delete refs[stringRef];
} else {
refs[stringRef] = value;
}
};
ref._stringRef = stringRef;
return ref;
}
}
return mixedRef;
}
function throwOnInvalidObjectType(returnFiber, newChild) {
if (returnFiber.type !== 'textarea') {
var addendum = '';
if (__DEV__) {
addendum = ' If you meant to render a collection of children, use an array ' + 'instead.';
var owner = ReactCurrentOwner.owner || returnFiber._debugOwner;
if (owner && typeof owner.tag === 'number') {
var name = getComponentName(owner);
if (name) {
addendum += '\n\nCheck the render method of `' + name + '`.';
}
}
}
invariant(false, 'Objects are not valid as a React child (found: %s).%s', Object.prototype.toString.call(newChild) === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : newChild, addendum);
}
}
function ChildReconciler(shouldClone, shouldTrackSideEffects) {
function deleteChild(returnFiber, childToDelete) {
if (!shouldTrackSideEffects) {
return;
}
if (!shouldClone) {
if (childToDelete.alternate === null) {
return;
}
childToDelete = childToDelete.alternate;
}
var last = returnFiber.progressedLastDeletion;
if (last !== null) {
last.nextEffect = childToDelete;
returnFiber.progressedLastDeletion = childToDelete;
} else {
returnFiber.progressedFirstDeletion = returnFiber.progressedLastDeletion = childToDelete;
}
childToDelete.nextEffect = null;
childToDelete.effectTag = Deletion;
}
function deleteRemainingChildren(returnFiber, currentFirstChild) {
if (!shouldTrackSideEffects) {
return null;
}
var childToDelete = currentFirstChild;
while (childToDelete !== null) {
deleteChild(returnFiber, childToDelete);
childToDelete = childToDelete.sibling;
}
return null;
}
function mapRemainingChildren(returnFiber, currentFirstChild) {
var existingChildren = new Map();
var existingChild = currentFirstChild;
while (existingChild !== null) {
if (existingChild.key !== null) {
existingChildren.set(existingChild.key, existingChild);
} else {
existingChildren.set(existingChild.index, existingChild);
}
existingChild = existingChild.sibling;
}
return existingChildren;
}
function useFiber(fiber, priority) {
if (shouldClone) {
var clone = cloneFiber(fiber, priority);
clone.index = 0;
clone.sibling = null;
return clone;
} else {
fiber.pendingWorkPriority = priority;
fiber.effectTag = NoEffect;
fiber.index = 0;
fiber.sibling = null;
return fiber;
}
}
function placeChild(newFiber, lastPlacedIndex, newIndex) {
newFiber.index = newIndex;
if (!shouldTrackSideEffects) {
return lastPlacedIndex;
}
var current = newFiber.alternate;
if (current !== null) {
var oldIndex = current.index;
if (oldIndex < lastPlacedIndex) {
newFiber.effectTag = Placement;
return lastPlacedIndex;
} else {
return oldIndex;
}
} else {
newFiber.effectTag = Placement;
return lastPlacedIndex;
}
}
function placeSingleChild(newFiber) {
if (shouldTrackSideEffects && newFiber.alternate === null) {
newFiber.effectTag = Placement;
}
return newFiber;
}
function updateTextNode(returnFiber, current, textContent, priority) {
if (current === null || current.tag !== HostText) {
var created = createFiberFromText(textContent, priority);
created.return = returnFiber;
return created;
} else {
var existing = useFiber(current, priority);
existing.pendingProps = textContent;
existing.return = returnFiber;
return existing;
}
}
function updateElement(returnFiber, current, element, priority) {
if (current === null || current.type !== element.type) {
var created = createFiberFromElement(element, priority);
created.ref = coerceRef(current, element);
created.return = returnFiber;
return created;
} else {
var existing = useFiber(current, priority);
existing.ref = coerceRef(current, element);
existing.pendingProps = element.props;
existing.return = returnFiber;
if (__DEV__) {
existing._debugSource = element._source;
existing._debugOwner = element._owner;
}
return existing;
}
}
function updateCoroutine(returnFiber, current, coroutine, priority) {
if (current === null || current.tag !== CoroutineComponent) {
var created = createFiberFromCoroutine(coroutine, priority);
created.return = returnFiber;
return created;
} else {
var existing = useFiber(current, priority);
existing.pendingProps = coroutine;
existing.return = returnFiber;
return existing;
}
}
function updateYield(returnFiber, current, yieldNode, priority) {
if (current === null || current.tag !== YieldComponent) {
var created = createFiberFromYield(yieldNode, priority);
created.type = yieldNode.value;
created.return = returnFiber;
return created;
} else {
var existing = useFiber(current, priority);
existing.type = yieldNode.value;
existing.return = returnFiber;
return existing;
}
}
function updatePortal(returnFiber, current, portal, priority) {
if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {
var created = createFiberFromPortal(portal, priority);
created.return = returnFiber;
return created;
} else {
var existing = useFiber(current, priority);
existing.pendingProps = portal.children || [];
existing.return = returnFiber;
return existing;
}
}
function updateFragment(returnFiber, current, fragment, priority) {
if (current === null || current.tag !== Fragment) {
var created = createFiberFromFragment(fragment, priority);
created.return = returnFiber;
return created;
} else {
var existing = useFiber(current, priority);
existing.pendingProps = fragment;
existing.return = returnFiber;
return existing;
}
}
function createChild(returnFiber, newChild, priority) {
if (typeof newChild === 'string' || typeof newChild === 'number') {
var created = createFiberFromText('' + newChild, priority);
created.return = returnFiber;
return created;
}
if (typeof newChild === 'object' && newChild !== null) {
switch (newChild.$$typeof) {
case REACT_ELEMENT_TYPE:
{
var _created = createFiberFromElement(newChild, priority);
_created.ref = coerceRef(null, newChild);
_created.return = returnFiber;
return _created;
}
case REACT_COROUTINE_TYPE:
{
var _created2 = createFiberFromCoroutine(newChild, priority);
_created2.return = returnFiber;
return _created2;
}
case REACT_YIELD_TYPE:
{
var _created3 = createFiberFromYield(newChild, priority);
_created3.type = newChild.value;
_created3.return = returnFiber;
return _created3;
}
case REACT_PORTAL_TYPE:
{
var _created4 = createFiberFromPortal(newChild, priority);
_created4.return = returnFiber;
return _created4;
}
}
if (isArray(newChild) || getIteratorFn(newChild)) {
var _created5 = createFiberFromFragment(newChild, priority);
_created5.return = returnFiber;
return _created5;
}
throwOnInvalidObjectType(returnFiber, newChild);
}
return null;
}
function updateSlot(returnFiber, oldFiber, newChild, priority) {
var key = oldFiber !== null ? oldFiber.key : null;
if (typeof newChild === 'string' || typeof newChild === 'number') {
if (key !== null) {
return null;
}
return updateTextNode(returnFiber, oldFiber, '' + newChild, priority);
}
if (typeof newChild === 'object' && newChild !== null) {
switch (newChild.$$typeof) {
case REACT_ELEMENT_TYPE:
{
if (newChild.key === key) {
return updateElement(returnFiber, oldFiber, newChild, priority);
} else {
return null;
}
}
case REACT_COROUTINE_TYPE:
{
if (newChild.key === key) {
return updateCoroutine(returnFiber, oldFiber, newChild, priority);
} else {
return null;
}
}
case REACT_YIELD_TYPE:
{
if (key === null) {
return updateYield(returnFiber, oldFiber, newChild, priority);
} else {
return null;
}
}
case REACT_PORTAL_TYPE:
{
if (newChild.key === key) {
return updatePortal(returnFiber, oldFiber, newChild, priority);
} else {
return null;
}
}
}
if (isArray(newChild) || getIteratorFn(newChild)) {
if (key !== null) {
return null;
}
return updateFragment(returnFiber, oldFiber, newChild, priority);
}
throwOnInvalidObjectType(returnFiber, newChild);
}
return null;
}
function updateFromMap(existingChildren, returnFiber, newIdx, newChild, priority) {
if (typeof newChild === 'string' || typeof newChild === 'number') {
var matchedFiber = existingChildren.get(newIdx) || null;
return updateTextNode(returnFiber, matchedFiber, '' + newChild, priority);
}
if (typeof newChild === 'object' && newChild !== null) {
switch (newChild.$$typeof) {
case REACT_ELEMENT_TYPE:
{
var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;
return updateElement(returnFiber, _matchedFiber, newChild, priority);
}
case REACT_COROUTINE_TYPE:
{
var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;
return updateCoroutine(returnFiber, _matchedFiber2, newChild, priority);
}
case REACT_YIELD_TYPE:
{
var _matchedFiber3 = existingChildren.get(newIdx) || null;
return updateYield(returnFiber, _matchedFiber3, newChild, priority);
}
case REACT_PORTAL_TYPE:
{
var _matchedFiber4 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;
return updatePortal(returnFiber, _matchedFiber4, newChild, priority);
}
}
if (isArray(newChild) || getIteratorFn(newChild)) {
var _matchedFiber5 = existingChildren.get(newIdx) || null;
return updateFragment(returnFiber, _matchedFiber5, newChild, priority);
}
throwOnInvalidObjectType(returnFiber, newChild);
}
return null;
}
function warnOnDuplicateKey(child, knownKeys) {
if (__DEV__) {
if (typeof child !== 'object' || child === null) {
return knownKeys;
}
switch (child.$$typeof) {
case REACT_ELEMENT_TYPE:
case REACT_COROUTINE_TYPE:
case REACT_PORTAL_TYPE:
var key = child.key;
if (typeof key !== 'string') {
break;
}
if (knownKeys === null) {
knownKeys = new Set();
knownKeys.add(key);
break;
}
if (!knownKeys.has(key)) {
knownKeys.add(key);
break;
}
warning(false, 'Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, ' + 'only the first child will be used.%s', key, getCurrentFiberStackAddendum());
break;
default:
break;
}
}
return knownKeys;
}
function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, priority) {
if (__DEV__) {
var knownKeys = null;
for (var i = 0; i < newChildren.length; i++) {
var child = newChildren[i];
knownKeys = warnOnDuplicateKey(child, knownKeys);
}
}
var resultingFirstChild = null;
var previousNewFiber = null;
var oldFiber = currentFirstChild;
var lastPlacedIndex = 0;
var newIdx = 0;
var nextOldFiber = null;
for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {
if (oldFiber.index > newIdx) {
nextOldFiber = oldFiber;
oldFiber = null;
} else {
nextOldFiber = oldFiber.sibling;
}
var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], priority);
if (newFiber === null) {
if (oldFiber === null) {
oldFiber = nextOldFiber;
}
break;
}
if (shouldTrackSideEffects) {
if (oldFiber && newFiber.alternate === null) {
deleteChild(returnFiber, oldFiber);
}
}
lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);
if (previousNewFiber === null) {
resultingFirstChild = newFiber;
} else {
previousNewFiber.sibling = newFiber;
}
previousNewFiber = newFiber;
oldFiber = nextOldFiber;
}
if (newIdx === newChildren.length) {
deleteRemainingChildren(returnFiber, oldFiber);
return resultingFirstChild;
}
if (oldFiber === null) {
for (; newIdx < newChildren.length; newIdx++) {
var _newFiber = createChild(returnFiber, newChildren[newIdx], priority);
if (!_newFiber) {
continue;
}
lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);
if (previousNewFiber === null) {
resultingFirstChild = _newFiber;
} else {
previousNewFiber.sibling = _newFiber;
}
previousNewFiber = _newFiber;
}
return resultingFirstChild;
}
var existingChildren = mapRemainingChildren(returnFiber, oldFiber);
for (; newIdx < newChildren.length; newIdx++) {
var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], priority);
if (_newFiber2) {
if (shouldTrackSideEffects) {
if (_newFiber2.alternate !== null) {
existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);
}
}
lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);
if (previousNewFiber === null) {
resultingFirstChild = _newFiber2;
} else {
previousNewFiber.sibling = _newFiber2;
}
previousNewFiber = _newFiber2;
}
}
if (shouldTrackSideEffects) {
existingChildren.forEach(function (child) {
return deleteChild(returnFiber, child);
});
}
return resultingFirstChild;
}
function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, priority) {
var iteratorFn = getIteratorFn(newChildrenIterable);
invariant(typeof iteratorFn === 'function', 'An object is not an iterable. This error is likely caused by a bug in ' + 'React. Please file an issue.');
if (__DEV__) {
if (typeof newChildrenIterable.entries === 'function') {
var possibleMap = newChildrenIterable;
if (possibleMap.entries === iteratorFn) {
var mapsAsChildrenAddendum = '';
var owner = ReactCurrentOwner.owner || returnFiber._debugOwner;
if (owner && typeof owner.tag === 'number') {
var mapsAsChildrenOwnerName = getComponentName(owner);
if (mapsAsChildrenOwnerName) {
mapsAsChildrenAddendum = '\n\nCheck the render method of `' + mapsAsChildrenOwnerName + '`.';
}
}
warning(didWarnAboutMaps, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.%s', mapsAsChildrenAddendum);
didWarnAboutMaps = true;
}
}
var _newChildren = iteratorFn.call(newChildrenIterable);
if (_newChildren) {
var knownKeys = null;
var _step = _newChildren.next();
for (; !_step.done; _step = _newChildren.next()) {
var child = _step.value;
knownKeys = warnOnDuplicateKey(child, knownKeys);
}
}
}
var newChildren = iteratorFn.call(newChildrenIterable);
invariant(newChildren != null, 'An iterable object provided no iterator.');
var resultingFirstChild = null;
var previousNewFiber = null;
var oldFiber = currentFirstChild;
var lastPlacedIndex = 0;
var newIdx = 0;
var nextOldFiber = null;
var step = newChildren.next();
for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {
if (oldFiber.index > newIdx) {
nextOldFiber = oldFiber;
oldFiber = null;
} else {
nextOldFiber = oldFiber.sibling;
}
var newFiber = updateSlot(returnFiber, oldFiber, step.value, priority);
if (newFiber === null) {
if (!oldFiber) {
oldFiber = nextOldFiber;
}
break;
}
if (shouldTrackSideEffects) {
if (oldFiber && newFiber.alternate === null) {
deleteChild(returnFiber, oldFiber);
}
}
lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);
if (previousNewFiber === null) {
resultingFirstChild = newFiber;
} else {
previousNewFiber.sibling = newFiber;
}
previousNewFiber = newFiber;
oldFiber = nextOldFiber;
}
if (step.done) {
deleteRemainingChildren(returnFiber, oldFiber);
return resultingFirstChild;
}
if (oldFiber === null) {
for (; !step.done; newIdx++, step = newChildren.next()) {
var _newFiber3 = createChild(returnFiber, step.value, priority);
if (_newFiber3 === null) {
continue;
}
lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);
if (previousNewFiber === null) {
resultingFirstChild = _newFiber3;
} else {
previousNewFiber.sibling = _newFiber3;
}
previousNewFiber = _newFiber3;
}
return resultingFirstChild;
}
var existingChildren = mapRemainingChildren(returnFiber, oldFiber);
for (; !step.done; newIdx++, step = newChildren.next()) {
var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, priority);
if (_newFiber4 !== null) {
if (shouldTrackSideEffects) {
if (_newFiber4.alternate !== null) {
existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);
}
}
lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);
if (previousNewFiber === null) {
resultingFirstChild = _newFiber4;
} else {
previousNewFiber.sibling = _newFiber4;
}
previousNewFiber = _newFiber4;
}
}
if (shouldTrackSideEffects) {
existingChildren.forEach(function (child) {
return deleteChild(returnFiber, child);
});
}
return resultingFirstChild;
}
function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, priority) {
if (currentFirstChild !== null && currentFirstChild.tag === HostText) {
deleteRemainingChildren(returnFiber, currentFirstChild.sibling);
var existing = useFiber(currentFirstChild, priority);
existing.pendingProps = textContent;
existing.return = returnFiber;
return existing;
}
deleteRemainingChildren(returnFiber, currentFirstChild);
var created = createFiberFromText(textContent, priority);
created.return = returnFiber;
return created;
}
function reconcileSingleElement(returnFiber, currentFirstChild, element, priority) {
var key = element.key;
var child = currentFirstChild;
while (child !== null) {
if (child.key === key) {
if (child.type === element.type) {
deleteRemainingChildren(returnFiber, child.sibling);
var existing = useFiber(child, priority);
existing.ref = coerceRef(child, element);
existing.pendingProps = element.props;
existing.return = returnFiber;
if (__DEV__) {
existing._debugSource = element._source;
existing._debugOwner = element._owner;
}
return existing;
} else {
deleteRemainingChildren(returnFiber, child);
break;
}
} else {
deleteChild(returnFiber, child);
}
child = child.sibling;
}
var created = createFiberFromElement(element, priority);
created.ref = coerceRef(currentFirstChild, element);
created.return = returnFiber;
return created;
}
function reconcileSingleCoroutine(returnFiber, currentFirstChild, coroutine, priority) {
var key = coroutine.key;
var child = currentFirstChild;
while (child !== null) {
if (child.key === key) {
if (child.tag === CoroutineComponent) {
deleteRemainingChildren(returnFiber, child.sibling);
var existing = useFiber(child, priority);
existing.pendingProps = coroutine;
existing.return = returnFiber;
return existing;
} else {
deleteRemainingChildren(returnFiber, child);
break;
}
} else {
deleteChild(returnFiber, child);
}
child = child.sibling;
}
var created = createFiberFromCoroutine(coroutine, priority);
created.return = returnFiber;
return created;
}
function reconcileSingleYield(returnFiber, currentFirstChild, yieldNode, priority) {
var child = currentFirstChild;
if (child !== null) {
if (child.tag === YieldComponent) {
deleteRemainingChildren(returnFiber, child.sibling);
var existing = useFiber(child, priority);
existing.type = yieldNode.value;
existing.return = returnFiber;
return existing;
} else {
deleteRemainingChildren(returnFiber, child);
}
}
var created = createFiberFromYield(yieldNode, priority);
created.type = yieldNode.value;
created.return = returnFiber;
return created;
}
function reconcileSinglePortal(returnFiber, currentFirstChild, portal, priority) {
var key = portal.key;
var child = currentFirstChild;
while (child !== null) {
if (child.key === key) {
if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {
deleteRemainingChildren(returnFiber, child.sibling);
var existing = useFiber(child, priority);
existing.pendingProps = portal.children || [];
existing.return = returnFiber;
return existing;
} else {
deleteRemainingChildren(returnFiber, child);
break;
}
} else {
deleteChild(returnFiber, child);
}
child = child.sibling;
}
var created = createFiberFromPortal(portal, priority);
created.return = returnFiber;
return created;
}
function reconcileChildFibers(returnFiber, currentFirstChild, newChild, priority) {
var disableNewFiberFeatures = ReactFeatureFlags.disableNewFiberFeatures;
var isObject = typeof newChild === 'object' && newChild !== null;
if (isObject) {
if (disableNewFiberFeatures) {
switch (newChild.$$typeof) {
case REACT_ELEMENT_TYPE:
return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, priority));
case REACT_PORTAL_TYPE:
return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, priority));
}
} else {
switch (newChild.$$typeof) {
case REACT_ELEMENT_TYPE:
return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, priority));
case REACT_COROUTINE_TYPE:
return placeSingleChild(reconcileSingleCoroutine(returnFiber, currentFirstChild, newChild, priority));
case REACT_YIELD_TYPE:
return placeSingleChild(reconcileSingleYield(returnFiber, currentFirstChild, newChild, priority));
case REACT_PORTAL_TYPE:
return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, priority));
}
}
}
if (disableNewFiberFeatures) {
switch (returnFiber.tag) {
case ClassComponent:
{
if (__DEV__) {
var instance = returnFiber.stateNode;
if (instance.render._isMockFunction && typeof newChild === 'undefined') {
break;
}
}
var Component = returnFiber.type;
invariant(newChild === null || newChild === false, '%s.render(): A valid React element (or null) must be returned. ' + 'You may have returned undefined, an array or some other ' + 'invalid object.', Component.displayName || Component.name || 'Component');
break;
}
case FunctionalComponent:
{
var _Component = returnFiber.type;
invariant(newChild === null || newChild === false, '%s(...): A valid React element (or null) must be returned. ' + 'You may have returned undefined, an array or some other ' + 'invalid object.', _Component.displayName || _Component.name || 'Component');
break;
}
}
}
if (typeof newChild === 'string' || typeof newChild === 'number') {
return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, priority));
}
if (isArray(newChild)) {
return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, priority);
}
if (getIteratorFn(newChild)) {
return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, priority);
}
if (isObject) {
throwOnInvalidObjectType(returnFiber, newChild);
}
if (!disableNewFiberFeatures && typeof newChild === 'undefined') {
switch (returnFiber.tag) {
case ClassComponent:
{
if (__DEV__) {
var _instance = returnFiber.stateNode;
if (_instance.render._isMockFunction) {
break;
}
}
}
case FunctionalComponent:
{
var _Component2 = returnFiber.type;
invariant(false, '%s(...): Nothing was returned from render. This usually means a ' + 'return statement is missing. Or, to render nothing, ' + 'return null.', _Component2.displayName || _Component2.name || 'Component');
}
}
}
return deleteRemainingChildren(returnFiber, currentFirstChild);
}
return reconcileChildFibers;
}
exports.reconcileChildFibers = ChildReconciler(true, true);
exports.reconcileChildFibersInPlace = ChildReconciler(false, true);
exports.mountChildFibersInPlace = ChildReconciler(false, false);
exports.cloneChildFibers = function (current, workInProgress) {
if (!workInProgress.child) {
return;
}
if (current !== null && workInProgress.child === current.child) {
var currentChild = workInProgress.child;
var newChild = cloneFiber(currentChild, currentChild.pendingWorkPriority);
workInProgress.child = newChild;
newChild.return = workInProgress;
while (currentChild.sibling !== null) {
currentChild = currentChild.sibling;
newChild = newChild.sibling = cloneFiber(currentChild, currentChild.pendingWorkPriority);
newChild.return = workInProgress;
}
newChild.sibling = null;
} else {
var child = workInProgress.child;
while (child !== null) {
child.return = workInProgress;
child = child.sibling;
}
}
};
Accelerate Your Automation Test Cycles With LambdaTest
Leverage LambdaTest’s cloud-based platform to execute your automation tests in parallel and trim down your test execution time significantly. Your first 100 automation testing minutes are on us.