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