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;
 |