You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							104 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							104 lines
						
					
					
						
							2.7 KiB
						
					
					
				| 'use strict';
 | |
| 
 | |
| var reactIs = require('react-is');
 | |
| 
 | |
| /**
 | |
|  * Copyright 2015, Yahoo! Inc.
 | |
|  * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
 | |
|  */
 | |
| var REACT_STATICS = {
 | |
|   childContextTypes: true,
 | |
|   contextType: true,
 | |
|   contextTypes: true,
 | |
|   defaultProps: true,
 | |
|   displayName: true,
 | |
|   getDefaultProps: true,
 | |
|   getDerivedStateFromError: true,
 | |
|   getDerivedStateFromProps: true,
 | |
|   mixins: true,
 | |
|   propTypes: true,
 | |
|   type: true
 | |
| };
 | |
| var KNOWN_STATICS = {
 | |
|   name: true,
 | |
|   length: true,
 | |
|   prototype: true,
 | |
|   caller: true,
 | |
|   callee: true,
 | |
|   arguments: true,
 | |
|   arity: true
 | |
| };
 | |
| var FORWARD_REF_STATICS = {
 | |
|   '$$typeof': true,
 | |
|   render: true,
 | |
|   defaultProps: true,
 | |
|   displayName: true,
 | |
|   propTypes: true
 | |
| };
 | |
| var MEMO_STATICS = {
 | |
|   '$$typeof': true,
 | |
|   compare: true,
 | |
|   defaultProps: true,
 | |
|   displayName: true,
 | |
|   propTypes: true,
 | |
|   type: true
 | |
| };
 | |
| var TYPE_STATICS = {};
 | |
| TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;
 | |
| TYPE_STATICS[reactIs.Memo] = MEMO_STATICS;
 | |
| 
 | |
| function getStatics(component) {
 | |
|   // React v16.11 and below
 | |
|   if (reactIs.isMemo(component)) {
 | |
|     return MEMO_STATICS;
 | |
|   } // React v16.12 and above
 | |
| 
 | |
| 
 | |
|   return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;
 | |
| }
 | |
| 
 | |
| var defineProperty = Object.defineProperty;
 | |
| var getOwnPropertyNames = Object.getOwnPropertyNames;
 | |
| var getOwnPropertySymbols = Object.getOwnPropertySymbols;
 | |
| var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
 | |
| var getPrototypeOf = Object.getPrototypeOf;
 | |
| var objectPrototype = Object.prototype;
 | |
| function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {
 | |
|   if (typeof sourceComponent !== 'string') {
 | |
|     // don't hoist over string (html) components
 | |
|     if (objectPrototype) {
 | |
|       var inheritedComponent = getPrototypeOf(sourceComponent);
 | |
| 
 | |
|       if (inheritedComponent && inheritedComponent !== objectPrototype) {
 | |
|         hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     var keys = getOwnPropertyNames(sourceComponent);
 | |
| 
 | |
|     if (getOwnPropertySymbols) {
 | |
|       keys = keys.concat(getOwnPropertySymbols(sourceComponent));
 | |
|     }
 | |
| 
 | |
|     var targetStatics = getStatics(targetComponent);
 | |
|     var sourceStatics = getStatics(sourceComponent);
 | |
| 
 | |
|     for (var i = 0; i < keys.length; ++i) {
 | |
|       var key = keys[i];
 | |
| 
 | |
|       if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {
 | |
|         var descriptor = getOwnPropertyDescriptor(sourceComponent, key);
 | |
| 
 | |
|         try {
 | |
|           // Avoid failures from read-only properties
 | |
|           defineProperty(targetComponent, key, descriptor);
 | |
|         } catch (e) {}
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return targetComponent;
 | |
| }
 | |
| 
 | |
| module.exports = hoistNonReactStatics;
 |