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