145 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			145 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, '__esModule', {
							 | 
						||
| 
								 | 
							
								  value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.default = exports.test = exports.serialize = void 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var ReactIs = _interopRequireWildcard(require('react-is'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var _markup = require('./lib/markup');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _interopRequireWildcard(obj) {
							 | 
						||
| 
								 | 
							
								  if (obj && obj.__esModule) {
							 | 
						||
| 
								 | 
							
								    return obj;
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    var newObj = {};
							 | 
						||
| 
								 | 
							
								    if (obj != null) {
							 | 
						||
| 
								 | 
							
								      for (var key in obj) {
							 | 
						||
| 
								 | 
							
								        if (Object.prototype.hasOwnProperty.call(obj, key)) {
							 | 
						||
| 
								 | 
							
								          var desc =
							 | 
						||
| 
								 | 
							
								            Object.defineProperty && Object.getOwnPropertyDescriptor
							 | 
						||
| 
								 | 
							
								              ? Object.getOwnPropertyDescriptor(obj, key)
							 | 
						||
| 
								 | 
							
								              : {};
							 | 
						||
| 
								 | 
							
								          if (desc.get || desc.set) {
							 | 
						||
| 
								 | 
							
								            Object.defineProperty(newObj, key, desc);
							 | 
						||
| 
								 | 
							
								          } else {
							 | 
						||
| 
								 | 
							
								            newObj[key] = obj[key];
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    newObj.default = obj;
							 | 
						||
| 
								 | 
							
								    return newObj;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Copyright (c) Facebook, Inc. and its affiliates. 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.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								// Given element.props.children, or subtree during recursive traversal,
							 | 
						||
| 
								 | 
							
								// return flattened array of children.
							 | 
						||
| 
								 | 
							
								const getChildren = (arg, children = []) => {
							 | 
						||
| 
								 | 
							
								  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 (ReactIs.isFragment(element)) {
							 | 
						||
| 
								 | 
							
								    return 'React.Fragment';
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (ReactIs.isSuspense(element)) {
							 | 
						||
| 
								 | 
							
								    return 'React.Suspense';
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (typeof type === 'object' && type !== null) {
							 | 
						||
| 
								 | 
							
								    if (ReactIs.isContextProvider(element)) {
							 | 
						||
| 
								 | 
							
								      return 'Context.Provider';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (ReactIs.isContextConsumer(element)) {
							 | 
						||
| 
								 | 
							
								      return 'Context.Consumer';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (ReactIs.isForwardRef(element)) {
							 | 
						||
| 
								 | 
							
								      const functionName = type.render.displayName || type.render.name || '';
							 | 
						||
| 
								 | 
							
								      return functionName !== ''
							 | 
						||
| 
								 | 
							
								        ? 'ForwardRef(' + functionName + ')'
							 | 
						||
| 
								 | 
							
								        : 'ForwardRef';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (ReactIs.isMemo(type)) {
							 | 
						||
| 
								 | 
							
								      const functionName = type.type.displayName || type.type.name || '';
							 | 
						||
| 
								 | 
							
								      return functionName !== '' ? 'Memo(' + functionName + ')' : 'Memo';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return 'UNDEFINED';
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const getPropKeys = element => {
							 | 
						||
| 
								 | 
							
								  const props = element.props;
							 | 
						||
| 
								 | 
							
								  return Object.keys(props)
							 | 
						||
| 
								 | 
							
								    .filter(key => key !== 'children' && props[key] !== undefined)
							 | 
						||
| 
								 | 
							
								    .sort();
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const 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
							 | 
						||
| 
								 | 
							
								      );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.serialize = serialize;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const test = val => val && ReactIs.isElement(val);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.test = test;
							 | 
						||
| 
								 | 
							
								const plugin = {
							 | 
						||
| 
								 | 
							
								  serialize,
							 | 
						||
| 
								 | 
							
								  test
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								var _default = plugin;
							 | 
						||
| 
								 | 
							
								exports.default = _default;
							 |