--- /dev/null
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.test = exports.serialize = undefined;
+
+var _markup = require('./lib/markup');
+
+/**
+ * Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ *
+ */
+
+const elementSymbol = Symbol.for('react.element');
+const fragmentSymbol = Symbol.for('react.fragment');
+const forwardRefSymbol = Symbol.for('react.forward_ref');
+const providerSymbol = Symbol.for('react.provider');
+const contextSymbol = Symbol.for('react.context');
+
+// Given element.props.children, or subtree during recursive traversal,
+// return flattened array of children.
+const getChildren = function(arg) {
+ let children =
+ arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
+
+ if (Array.isArray(arg)) {
+ arg.forEach(item => {
+ getChildren(item, children);
+ });
+ } else if (arg != null && arg !== false) {
+ children.push(arg);
+ }
+ return children;
+};
+
+const getType = element => {
+ const type = element.type;
+ if (typeof type === 'string') {
+ return type;
+ }
+ if (typeof type === 'function') {
+ return type.displayName || type.name || 'Unknown';
+ }
+ if (type === fragmentSymbol) {
+ return 'React.Fragment';
+ }
+ if (typeof type === 'object' && type !== null) {
+ if (type.$$typeof === providerSymbol) {
+ return 'Context.Provider';
+ }
+
+ if (type.$$typeof === contextSymbol) {
+ return 'Context.Consumer';
+ }
+
+ if (type.$$typeof === forwardRefSymbol) {
+ const functionName = type.render.displayName || type.render.name || '';
+
+ return functionName !== ''
+ ? 'ForwardRef(' + functionName + ')'
+ : 'ForwardRef';
+ }
+ }
+ return 'UNDEFINED';
+};
+
+const getPropKeys = element => {
+ const props = element.props;
+
+ return Object.keys(props)
+ .filter(key => key !== 'children' && props[key] !== undefined)
+ .sort();
+};
+
+const serialize = (exports.serialize = (
+ element,
+ config,
+ indentation,
+ depth,
+ refs,
+ printer
+) =>
+ ++depth > config.maxDepth
+ ? (0, _markup.printElementAsLeaf)(getType(element), config)
+ : (0, _markup.printElement)(
+ getType(element),
+ (0, _markup.printProps)(
+ getPropKeys(element),
+ element.props,
+ config,
+ indentation + config.indent,
+ depth,
+ refs,
+ printer
+ ),
+ (0, _markup.printChildren)(
+ getChildren(element.props.children),
+ config,
+ indentation + config.indent,
+ depth,
+ refs,
+ printer
+ ),
+ config,
+ indentation
+ ));
+
+const test = (exports.test = val => val && val.$$typeof === elementSymbol);
+
+exports.default = {serialize: serialize, test: test};