/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format * @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/HEAD/backend/getData.js */ function getData(element: Object): Object { let children = null; let props = null; let state = null; let context = null; let updater = null; let name = null; let type = null; let text = null; let publicInstance = null; let 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