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
			| 
											3 years ago
										 | '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; |