123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- '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};
|