function instantiateReactComponent(node) {
	  var instance;

	  var isEmpty = node === null || node === false;
	  if (isEmpty) {
	    instance = ReactEmptyComponent.create(instantiateReactComponent);
	  } else if ((typeof node === 'undefined' ? 'undefined' : _typeof(node)) === 'object') {
	    var element = node;
	    !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : _typeof(element.type), getDeclarationErrorAddendum(element._owner)) : invariant(false) : void 0;

	    // Special case string values
	    if (typeof element.type === 'string') {
	      instance = ReactNativeComponent.createInternalComponent(element);
	    } else if (isInternalComponentType(element.type)) {
	      // This is temporarily available for custom components that are not string
	      // representations. I.e. ART. Once those are updated to use the string
	      // representation, we can drop this code path.
	      instance = new element.type(element);
	    } else {
	      instance = new ReactCompositeComponentWrapper(element);
	    }
	  } else if (typeof node === 'string' || typeof node === 'number') {
	    instance = ReactNativeComponent.createInstanceForText(node);
	  } else {
	     true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node === 'undefined' ? 'undefined' : _typeof(node)) : invariant(false) : void 0;
	  }

	  if (process.env.NODE_ENV !== 'production') {
	    process.env.NODE_ENV !== 'production' ? warning(typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.getNativeNode === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : void 0;
	  }

	  // These two fields are used by the DOM and ART diffing algorithms
	  // respectively. Instead of using expandos on components, we should be
	  // storing the state needed by the diffing algorithms elsewhere.
	  instance._mountIndex = 0;
	  instance._mountImage = null;

	  if (process.env.NODE_ENV !== 'production') {
	    instance._isOwnerNecessary = false;
	    instance._warnedAboutRefsInRender = false;
	  }

	  if (process.env.NODE_ENV !== 'production') {
	    var debugID = isEmpty ? 0 : nextDebugID++;
	    instance._debugID = debugID;

	    if (debugID !== 0) {
	      var displayName = getDisplayName(instance);
	      ReactInstrumentation.debugTool.onSetDisplayName(debugID, displayName);
	      var owner = node && node._owner;
	      if (owner) {
	        ReactInstrumentation.debugTool.onSetOwner(debugID, owner._debugID);
	      }
	    }
	  }

	  // Internal instances should fully constructed at this point, so they should
	  // not get any new fields added to them at this point.
	  if (process.env.NODE_ENV !== 'production') {
	    if (Object.preventExtensions) {
	      Object.preventExtensions(instance);
	    }
	  }

	  return instance;
	}
/**
	 * Given a ReactNode, create an instance that will actually be mounted.
	 *
	 * @param {ReactNode} node
	 * @return {object} A new instance of the element's constructor.
	 * @protected
	 */
Given a ReactNode, create an instance that will actually be mounted.
@param {ReactNode} node
@return {object} A new instance of the element's constructor.
@protected
Given a ReactNode create an instance that will actually be mounted . @param { ReactNode } node @return { object } A new instance of the element ' s constructor . @protected
function instantiateReactComponent(node) {
	  var instance;
	  var isEmpty = node === null || node === false;
	  if (isEmpty) {
	    instance = ReactEmptyComponent.create(instantiateReactComponent);
	  } else if ((typeof node === 'undefined' ? 'undefined' : _typeof(node)) === 'object') {
	    var element = node;
	    !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : _typeof(element.type), getDeclarationErrorAddendum(element._owner)) : invariant(false) : void 0;
	    if (typeof element.type === 'string') {
	      instance = ReactNativeComponent.createInternalComponent(element);
	    } else if (isInternalComponentType(element.type)) {
	      instance = new element.type(element);
	    } else {
	      instance = new ReactCompositeComponentWrapper(element);
	    }
	  } else if (typeof node === 'string' || typeof node === 'number') {
	    instance = ReactNativeComponent.createInstanceForText(node);
	  } else {
	     true ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node === 'undefined' ? 'undefined' : _typeof(node)) : invariant(false) : void 0;
	  }
	  if (process.env.NODE_ENV !== 'production') {
	    process.env.NODE_ENV !== 'production' ? warning(typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.getNativeNode === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : void 0;
	  }
	  instance._mountIndex = 0;
	  instance._mountImage = null;
	  if (process.env.NODE_ENV !== 'production') {
	    instance._isOwnerNecessary = false;
	    instance._warnedAboutRefsInRender = false;
	  }
	  if (process.env.NODE_ENV !== 'production') {
	    var debugID = isEmpty ? 0 : nextDebugID++;
	    instance._debugID = debugID;
	    if (debugID !== 0) {
	      var displayName = getDisplayName(instance);
	      ReactInstrumentation.debugTool.onSetDisplayName(debugID, displayName);
	      var owner = node && node._owner;
	      if (owner) {
	        ReactInstrumentation.debugTool.onSetOwner(debugID, owner._debugID);
	      }
	    }
	  }
	  if (process.env.NODE_ENV !== 'production') {
	    if (Object.preventExtensions) {
	      Object.preventExtensions(instance);
	    }
	  }
	  return instance;
	}
function instantiateReactComponent ( node ) { var instance ; var isEmpty = node === null || node === false ; if ( isEmpty ) { instance = ReactEmptyComponent . create ( instantiateReactComponent ) ; } else if ( ( typeof node === 'undefined' ? 'undefined' : _typeof ( node ) ) === 'object' ) { var element = node ; ! ( element && ( typeof element . type === 'function' || typeof element . type === 'string' ) ) ? process . env . NODE_ENV !== 'production' ? invariant ( false , 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s' , element . type == null ? element . type : _typeof ( element . type ) , getDeclarationErrorAddendum ( element . _owner ) ) : invariant ( false ) : void 0 ; if ( typeof element . type === 'string' ) { instance = ReactNativeComponent . createInternalComponent ( element ) ; } else if ( isInternalComponentType ( element . type ) ) { instance = new element . type ( element ) ; } else { instance = new ReactCompositeComponentWrapper ( element ) ; } } else if ( typeof node === 'string' || typeof node === 'number' ) { instance = ReactNativeComponent . createInstanceForText ( node ) ; } else { true ? process . env . NODE_ENV !== 'production' ? invariant ( false , 'Encountered invalid React node of type %s' , typeof node === 'undefined' ? 'undefined' : _typeof ( node ) ) : invariant ( false ) : void 0 ; } if ( process . env . NODE_ENV !== 'production' ) { process . env . NODE_ENV !== 'production' ? warning ( typeof instance . mountComponent === 'function' && typeof instance . receiveComponent === 'function' && typeof instance . getNativeNode === 'function' && typeof instance . unmountComponent === 'function' , 'Only React Components can be mounted.' ) : void 0 ; } instance . _mountIndex = 0 ; instance . _mountImage = null ; if ( process . env . NODE_ENV !== 'production' ) { instance . _isOwnerNecessary = false ; instance . _warnedAboutRefsInRender = false ; } if ( process . env . NODE_ENV !== 'production' ) { var debugID = isEmpty ? 0 : nextDebugID ++ ; instance . _debugID = debugID ; if ( debugID !== 0 ) { var displayName = getDisplayName ( instance ) ; ReactInstrumentation . debugTool . onSetDisplayName ( debugID , displayName ) ; var owner = node && node . _owner ; if ( owner ) { ReactInstrumentation . debugTool . onSetOwner ( debugID , owner . _debugID ) ; } } } if ( process . env . NODE_ENV !== 'production' ) { if ( Object . preventExtensions ) { Object . preventExtensions ( instance ) ; } } return instance ; }
Given a ReactNode, create an instance that will actually be mounted.
Given a ReactNode create an instance that will actually be mounted .
// Special case string values // This is temporarily available for custom components that are not string // representations. I.e. ART. Once those are updated to use the string // representation, we can drop this code path. // These two fields are used by the DOM and ART diffing algorithms // respectively. Instead of using expandos on components, we should be // storing the state needed by the diffing algorithms elsewhere. // Internal instances should fully constructed at this point, so they should // not get any new fields added to them at this point.