UNPKG

2.32 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
3 typeof define === 'function' && define.amd ? define(factory) :
4 (global.hoistNonReactStatics = factory());
5}(this, (function () { 'use strict';
6
7/**
8 * Copyright 2015, Yahoo! Inc.
9 * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
10 */
11var REACT_STATICS = {
12 childContextTypes: true,
13 contextTypes: true,
14 defaultProps: true,
15 displayName: true,
16 getDefaultProps: true,
17 getDerivedStateFromProps: true,
18 mixins: true,
19 propTypes: true,
20 type: true
21};
22
23var KNOWN_STATICS = {
24 name: true,
25 length: true,
26 prototype: true,
27 caller: true,
28 callee: true,
29 arguments: true,
30 arity: true
31};
32
33var defineProperty = Object.defineProperty;
34var getOwnPropertyNames = Object.getOwnPropertyNames;
35var getOwnPropertySymbols = Object.getOwnPropertySymbols;
36var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
37var getPrototypeOf = Object.getPrototypeOf;
38var objectPrototype = getPrototypeOf && getPrototypeOf(Object);
39
40function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {
41 if (typeof sourceComponent !== 'string') { // don't hoist over string (html) components
42
43 if (objectPrototype) {
44 var inheritedComponent = getPrototypeOf(sourceComponent);
45 if (inheritedComponent && inheritedComponent !== objectPrototype) {
46 hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);
47 }
48 }
49
50 var keys = getOwnPropertyNames(sourceComponent);
51
52 if (getOwnPropertySymbols) {
53 keys = keys.concat(getOwnPropertySymbols(sourceComponent));
54 }
55
56 for (var i = 0; i < keys.length; ++i) {
57 var key = keys[i];
58 if (!REACT_STATICS[key] && !KNOWN_STATICS[key] && (!blacklist || !blacklist[key])) {
59 var descriptor = getOwnPropertyDescriptor(sourceComponent, key);
60 try { // Avoid failures from read-only properties
61 defineProperty(targetComponent, key, descriptor);
62 } catch (e) {}
63 }
64 }
65
66 return targetComponent;
67 }
68
69 return targetComponent;
70}
71
72return hoistNonReactStatics;
73
74})));