UNPKG

3.25 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4
5var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
6
7var _shallowequal = require('shallowequal');
8
9var _shallowequal2 = _interopRequireDefault(_shallowequal);
10
11var _utils = require('./utils');
12
13var _constants = require('./constants');
14
15function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
17var RESERVED_STATICS = ['length', 'displayName', 'name', 'arguments', 'caller', 'prototype', 'toString', 'valueOf', _constants.PROXY_KEY, _constants.UNWRAP_PROXY];
18
19function transferStaticProps(ProxyComponent, savedDescriptors, PreviousComponent, NextComponent) {
20 Object.getOwnPropertyNames(ProxyComponent).forEach(function (key) {
21 if (RESERVED_STATICS.indexOf(key) !== -1) {
22 return;
23 }
24
25 var prevDescriptor = Object.getOwnPropertyDescriptor(ProxyComponent, key);
26 var savedDescriptor = savedDescriptors[key];
27
28 if (!(0, _shallowequal2.default)(prevDescriptor, savedDescriptor)) {
29 (0, _utils.safeDefineProperty)(NextComponent, key, prevDescriptor);
30 }
31 });
32
33 // Copy newly defined static methods and properties
34 Object.getOwnPropertyNames(NextComponent).forEach(function (key) {
35 if (RESERVED_STATICS.indexOf(key) !== -1) {
36 return;
37 }
38
39 var prevDescriptor = PreviousComponent && Object.getOwnPropertyDescriptor(ProxyComponent, key);
40 var savedDescriptor = savedDescriptors[key];
41
42 // Skip redefined descriptors
43 if (prevDescriptor && savedDescriptor && !(0, _shallowequal2.default)(savedDescriptor, prevDescriptor)) {
44 (0, _utils.safeDefineProperty)(NextComponent, key, prevDescriptor);
45 return;
46 }
47
48 if (prevDescriptor && !savedDescriptor) {
49 (0, _utils.safeDefineProperty)(ProxyComponent, key, prevDescriptor);
50 return;
51 }
52
53 var nextDescriptor = _extends({}, Object.getOwnPropertyDescriptor(NextComponent, key), {
54 configurable: true
55 });
56
57 savedDescriptors[key] = nextDescriptor;
58 (0, _utils.safeDefineProperty)(ProxyComponent, key, nextDescriptor);
59 });
60
61 // Remove static methods and properties that are no longer defined
62 Object.getOwnPropertyNames(ProxyComponent).forEach(function (key) {
63 if (RESERVED_STATICS.indexOf(key) !== -1) {
64 return;
65 }
66 // Skip statics that exist on the next class
67 if (NextComponent.hasOwnProperty(key)) {
68 return;
69 }
70 // Skip non-configurable statics
71 var proxyDescriptor = Object.getOwnPropertyDescriptor(ProxyComponent, key);
72 if (proxyDescriptor && !proxyDescriptor.configurable) {
73 return;
74 }
75
76 var prevDescriptor = PreviousComponent && Object.getOwnPropertyDescriptor(PreviousComponent, key);
77 var savedDescriptor = savedDescriptors[key];
78
79 // Skip redefined descriptors
80 if (prevDescriptor && savedDescriptor && !(0, _shallowequal2.default)(savedDescriptor, prevDescriptor)) {
81 return;
82 }
83
84 (0, _utils.safeDefineProperty)(ProxyComponent, key, {
85 value: undefined
86 });
87 });
88
89 return savedDescriptors;
90}
91
92exports.default = transferStaticProps;
\No newline at end of file