/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule getReactData * @flow */ 'use strict'; /** * Convert a react internal instance to a sanitized data object. * * This is shamelessly stolen from react-devtools: * https://github.com/facebook/react-devtools/blob/master/backend/getData.js */ function getData(element: Object): Object { var children = null; var props = null; var state = null; var context = null; var updater = null; var name = null; var type = null; var text = null; var publicInstance = null; var nodeType = 'Native'; // If the parent is a native node without rendered children, but with // multiple string children, then the `element` that gets passed in here is // a plain value -- a string or number. if (typeof element !== 'object') { nodeType = 'Text'; text = element + ''; } else if (element._currentElement === null || element._currentElement === false) { nodeType = 'Empty'; } else if (element._renderedComponent) { nodeType = 'NativeWrapper'; children = [element._renderedComponent]; props = element._instance.props; state = element._instance.state; context = element._instance.context; if (context && Object.keys(context).length === 0) { context = null; } } else if (element._renderedChildren) { children = childrenList(element._renderedChildren); } else if (element._currentElement && element._currentElement.props) { // This is a native node without rendered children -- meaning the children // prop is just a string or (in the case of the