Skip to content

Commit 1ad8d81

Browse files
authored
Remove object-assign polyfill (#23351)
* Remove object-assign polyfill We really rely on a more modern environment where this is typically polyfilled anyway and we don't officially support IE with more extensive polyfilling anyway. So all environments should have the native version by now. * Use shared/assign instead of Object.assign in code This is so that we have one cached local instance in the bundle. Ideally we should have a compile do this for us but we already follow this pattern with hasOwnProperty, isArray, Object.is etc. * Transform Object.assign to now use shared/assign We need this to use the shared instance when Object.spread is used.
1 parent b3f3da2 commit 1ad8d81

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+73
-156
lines changed

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@
7777
"minimist": "^1.2.3",
7878
"mkdirp": "^0.5.1",
7979
"ncp": "^2.0.0",
80-
"object-assign": "^4.1.1",
8180
"pacote": "^10.3.0",
8281
"prettier": "1.19.1",
8382
"prop-types": "^15.6.2",

packages/jest-react/package.json

-3
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@
2323
"react": "^17.0.0",
2424
"react-test-renderer": "^17.0.0"
2525
},
26-
"dependencies": {
27-
"object-assign": "^4.1.1"
28-
},
2926
"files": [
3027
"LICENSE",
3128
"README.md",

packages/react-art/npm/Circle.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
'use strict';
1919

20-
var assign = require('object-assign');
20+
var assign = Object.assign;
2121
var PropTypes = require('prop-types');
2222
var React = require('react');
2323
var ReactART = require('react-art');

packages/react-art/npm/Rectangle.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
'use strict';
2626

27-
var assign = require('object-assign');
27+
var assign = Object.assign;
2828
var PropTypes = require('prop-types');
2929
var React = require('react');
3030
var ReactART = require('react-art');

packages/react-art/npm/Wedge.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
'use strict';
2222

23-
var assign = require('object-assign');
23+
var assign = Object.assign;
2424
var PropTypes = require('prop-types');
2525
var React = require('react');
2626
var ReactART = require('react-art');

packages/react-art/package.json

-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
"art": "^0.10.1",
2626
"create-react-class": "^15.6.2",
2727
"loose-envify": "^1.1.0",
28-
"object-assign": "^4.1.1",
2928
"scheduler": "^0.20.1"
3029
},
3130
"peerDependencies": {

packages/react-client/package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@
2727
"react": "^17.0.0"
2828
},
2929
"dependencies": {
30-
"loose-envify": "^1.1.0",
31-
"object-assign": "^4.1.1"
30+
"loose-envify": "^1.1.0"
3231
},
3332
"browserify": {
3433
"transform": [

packages/react-debug-tools/package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
"react": "^17.0.0"
2929
},
3030
"dependencies": {
31-
"error-stack-parser": "^2.0.2",
32-
"object-assign": "^4.1.1"
31+
"error-stack-parser": "^2.0.2"
3332
}
3433
}

packages/react-debug-tools/src/ReactDebugHooks.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import type {
2020
} from 'react-reconciler/src/ReactInternalTypes';
2121

2222
import ErrorStackParser from 'error-stack-parser';
23+
import assign from 'shared/assign';
2324
import ReactSharedInternals from 'shared/ReactSharedInternals';
2425
import {
2526
FunctionComponent,
@@ -720,7 +721,7 @@ function inspectHooksOfForwardRef<Props, Ref>(
720721
function resolveDefaultProps(Component, baseProps) {
721722
if (Component && Component.defaultProps) {
722723
// Resolve default props. Taken from ReactElement
723-
const props = Object.assign({}, baseProps);
724+
const props = assign({}, baseProps);
724725
const defaultProps = Component.defaultProps;
725726
for (const propName in defaultProps) {
726727
if (props[propName] === undefined) {

packages/react-devtools-shared/src/backend/views/Highlighter/Overlay.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
* @flow
88
*/
99

10-
import assign from 'object-assign';
1110
import {getElementDimensions, getNestedBoundingClientRect} from '../utils';
1211

12+
const assign = Object.assign;
13+
1314
import type {DevToolsHook} from 'react-devtools-shared/src/backend/types';
1415
import type {Rect} from '../utils';
1516

packages/react-dom/package.json

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
"homepage": "https://reactjs.org/",
1919
"dependencies": {
2020
"loose-envify": "^1.1.0",
21-
"object-assign": "^4.1.1",
2221
"scheduler": "^0.20.1"
2322
},
2423
"peerDependencies": {

packages/react-dom/src/client/ReactDOMInput.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {getToStringValue, toString} from './ToStringValue';
1616
import {checkControlledValueProps} from '../shared/ReactControlledValuePropTypes';
1717
import {updateValueIfChanged} from './inputValueTracking';
1818
import getActiveElement from './getActiveElement';
19+
import assign from 'shared/assign';
1920
import {disableInputAttributeSyncing} from 'shared/ReactFeatureFlags';
2021
import {checkAttributeStringCoercion} from 'shared/CheckStringCoercion';
2122

@@ -62,7 +63,7 @@ export function getHostProps(element: Element, props: Object) {
6263
const node = ((element: any): InputWithWrapperState);
6364
const checked = props.checked;
6465

65-
const hostProps = Object.assign({}, props, {
66+
const hostProps = assign({}, props, {
6667
defaultChecked: undefined,
6768
defaultValue: undefined,
6869
value: undefined,

packages/react-dom/src/client/ReactDOMSelect.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {getCurrentFiberOwnerNameInDevOrNull} from 'react-reconciler/src/ReactCur
1212

1313
import {checkControlledValueProps} from '../shared/ReactControlledValuePropTypes';
1414
import {getToStringValue, toString} from './ToStringValue';
15+
import assign from 'shared/assign';
1516
import isArray from 'shared/isArray';
1617

1718
let didWarnValueDefaultValue;
@@ -134,7 +135,7 @@ function updateOptions(
134135
*/
135136

136137
export function getHostProps(element: Element, props: Object) {
137-
return Object.assign({}, props, {
138+
return assign({}, props, {
138139
value: undefined,
139140
});
140141
}

packages/react-dom/src/events/SyntheticEvent.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
/* eslint valid-typeof: 0 */
1111

12+
import assign from 'shared/assign';
1213
import getEventCharCode from './getEventCharCode';
1314

1415
type EventInterfaceType = {
@@ -78,7 +79,7 @@ function createSyntheticEvent(Interface: EventInterfaceType) {
7879
return this;
7980
}
8081

81-
Object.assign(SyntheticBaseEvent.prototype, {
82+
assign(SyntheticBaseEvent.prototype, {
8283
preventDefault: function() {
8384
this.defaultPrevented = true;
8485
const event = this.nativeEvent;

packages/react-dom/src/server/ReactPartialRenderer.js

+11-10
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ import warnValidStyle from '../shared/warnValidStyle';
8080
import {validateProperties as validateARIAProperties} from '../shared/ReactDOMInvalidARIAHook';
8181
import {validateProperties as validateInputProperties} from '../shared/ReactDOMNullInputValuePropHook';
8282
import {validateProperties as validateUnknownProperties} from '../shared/ReactDOMUnknownPropertyHook';
83+
import assign from 'shared/assign';
8384
import hasOwnProperty from 'shared/hasOwnProperty';
8485

8586
// Based on reading the React.Children implementation. TODO: type this somewhere?
@@ -563,7 +564,7 @@ function resolve(
563564
}
564565

565566
if (partialState != null) {
566-
inst.state = Object.assign({}, inst.state, partialState);
567+
inst.state = assign({}, inst.state, partialState);
567568
}
568569
}
569570
} else {
@@ -695,9 +696,9 @@ function resolve(
695696
if (partialState != null) {
696697
if (dontMutate) {
697698
dontMutate = false;
698-
nextState = Object.assign({}, nextState, partialState);
699+
nextState = assign({}, nextState, partialState);
699700
} else {
700-
Object.assign(nextState, partialState);
701+
assign(nextState, partialState);
701702
}
702703
}
703704
}
@@ -745,7 +746,7 @@ function resolve(
745746
}
746747
}
747748
if (childContext) {
748-
context = Object.assign({}, context, childContext);
749+
context = assign({}, context, childContext);
749750
}
750751
}
751752
}
@@ -1192,7 +1193,7 @@ class ReactDOMServerRenderer {
11921193
const nextChildren = [
11931194
React.createElement(
11941195
elementType.type,
1195-
Object.assign({ref: element.ref}, element.props),
1196+
assign({ref: element.ref}, element.props),
11961197
),
11971198
];
11981199
const frame: Frame = {
@@ -1291,7 +1292,7 @@ class ReactDOMServerRenderer {
12911292
const nextChildren = [
12921293
React.createElement(
12931294
result,
1294-
Object.assign({ref: element.ref}, element.props),
1295+
assign({ref: element.ref}, element.props),
12951296
),
12961297
];
12971298
const frame: Frame = {
@@ -1413,7 +1414,7 @@ class ReactDOMServerRenderer {
14131414
}
14141415
}
14151416

1416-
props = Object.assign(
1417+
props = assign(
14171418
{
14181419
type: undefined,
14191420
},
@@ -1485,7 +1486,7 @@ class ReactDOMServerRenderer {
14851486
if (__DEV__) {
14861487
checkFormFieldValueStringCoercion(initialValue);
14871488
}
1488-
props = Object.assign({}, props, {
1489+
props = assign({}, props, {
14891490
value: undefined,
14901491
children: '' + initialValue,
14911492
});
@@ -1531,7 +1532,7 @@ class ReactDOMServerRenderer {
15311532
}
15321533
this.currentSelectValue =
15331534
props.value != null ? props.value : props.defaultValue;
1534-
props = Object.assign({}, props, {
1535+
props = assign({}, props, {
15351536
value: undefined,
15361537
});
15371538
} else if (tag === 'option') {
@@ -1577,7 +1578,7 @@ class ReactDOMServerRenderer {
15771578
selected = '' + selectValue === value;
15781579
}
15791580

1580-
props = Object.assign(
1581+
props = assign(
15811582
{
15821583
selected: undefined,
15831584
},

packages/react-dom/src/test-utils/ReactTestUtils.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
rethrowCaughtError,
2222
invokeGuardedCallbackAndCatchFirstError,
2323
} from 'shared/ReactErrorUtils';
24+
import assign from 'shared/assign';
2425
import isArray from 'shared/isArray';
2526

2627
// Keep in sync with ReactDOM.js:
@@ -596,7 +597,7 @@ function makeSimulator(eventType) {
596597
// Since we aren't using pooling, always persist the event. This will make
597598
// sure it's marked and won't warn when setting additional properties.
598599
event.persist();
599-
Object.assign(event, eventData);
600+
assign(event, eventData);
600601

601602
if (directDispatchEventTypes.has(eventType)) {
602603
accumulateDirectDispatchesSingle(event);

packages/react-native-renderer/package.json

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
"directory": "packages/react-native-renderer"
99
},
1010
"dependencies": {
11-
"object-assign": "^4.1.1",
1211
"scheduler": "^0.11.0"
1312
},
1413
"peerDependencies": {

packages/react-native-renderer/src/legacy-events/SyntheticEvent.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
/* eslint valid-typeof: 0 */
99

10+
import assign from 'shared/assign';
11+
1012
const EVENT_POOL_SIZE = 10;
1113

1214
/**
@@ -110,7 +112,7 @@ function SyntheticEvent(
110112
return this;
111113
}
112114

113-
Object.assign(SyntheticEvent.prototype, {
115+
assign(SyntheticEvent.prototype, {
114116
preventDefault: function() {
115117
this.defaultPrevented = true;
116118
const event = this.nativeEvent;
@@ -236,11 +238,11 @@ SyntheticEvent.extend = function(Interface) {
236238
function Class() {
237239
return Super.apply(this, arguments);
238240
}
239-
Object.assign(prototype, Class.prototype);
241+
assign(prototype, Class.prototype);
240242
Class.prototype = prototype;
241243
Class.prototype.constructor = Class;
242244

243-
Class.Interface = Object.assign({}, Super.Interface, Interface);
245+
Class.Interface = assign({}, Super.Interface, Interface);
244246
Class.extend = Super.extend;
245247
addEventPoolingTo(Class);
246248

packages/react-noop-renderer/package.json

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
},
1212
"license": "MIT",
1313
"dependencies": {
14-
"object-assign": "^4.1.1",
1514
"react-reconciler": "*",
1615
"react-client": "*",
1716
"react-server": "*"

packages/react-reconciler/package.json

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
},
3131
"dependencies": {
3232
"loose-envify": "^1.1.0",
33-
"object-assign": "^4.1.1",
3433
"scheduler": "^0.20.1"
3534
},
3635
"browserify": {

packages/react-reconciler/src/ReactFiberClassComponent.new.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import {get as getInstance, set as setInstance} from 'shared/ReactInstanceMap';
3535
import shallowEqual from 'shared/shallowEqual';
3636
import getComponentNameFromFiber from 'react-reconciler/src/getComponentNameFromFiber';
3737
import getComponentNameFromType from 'shared/getComponentNameFromType';
38+
import assign from 'shared/assign';
3839
import isArray from 'shared/isArray';
3940
import {REACT_CONTEXT_TYPE, REACT_PROVIDER_TYPE} from 'shared/ReactSymbols';
4041

@@ -186,7 +187,7 @@ function applyDerivedStateFromProps(
186187
const memoizedState =
187188
partialState === null || partialState === undefined
188189
? prevState
189-
: Object.assign({}, prevState, partialState);
190+
: assign({}, prevState, partialState);
190191
workInProgress.memoizedState = memoizedState;
191192

192193
// Once the update queue is empty, persist the derived state onto the

packages/react-reconciler/src/ReactFiberClassComponent.old.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import {get as getInstance, set as setInstance} from 'shared/ReactInstanceMap';
3535
import shallowEqual from 'shared/shallowEqual';
3636
import getComponentNameFromFiber from 'react-reconciler/src/getComponentNameFromFiber';
3737
import getComponentNameFromType from 'shared/getComponentNameFromType';
38+
import assign from 'shared/assign';
3839
import isArray from 'shared/isArray';
3940
import {REACT_CONTEXT_TYPE, REACT_PROVIDER_TYPE} from 'shared/ReactSymbols';
4041

@@ -186,7 +187,7 @@ function applyDerivedStateFromProps(
186187
const memoizedState =
187188
partialState === null || partialState === undefined
188189
? prevState
189-
: Object.assign({}, prevState, partialState);
190+
: assign({}, prevState, partialState);
190191
workInProgress.memoizedState = memoizedState;
191192

192193
// Once the update queue is empty, persist the derived state onto the

packages/react-reconciler/src/ReactFiberLazyComponent.new.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
* @flow
88
*/
99

10+
import assign from 'shared/assign';
11+
1012
export function resolveDefaultProps(Component: any, baseProps: Object): Object {
1113
if (Component && Component.defaultProps) {
1214
// Resolve default props. Taken from ReactElement
13-
const props = Object.assign({}, baseProps);
15+
const props = assign({}, baseProps);
1416
const defaultProps = Component.defaultProps;
1517
for (const propName in defaultProps) {
1618
if (props[propName] === undefined) {

packages/react-reconciler/src/ReactFiberLazyComponent.old.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
* @flow
88
*/
99

10+
import assign from 'shared/assign';
11+
1012
export function resolveDefaultProps(Component: any, baseProps: Object): Object {
1113
if (Component && Component.defaultProps) {
1214
// Resolve default props. Taken from ReactElement
13-
const props = Object.assign({}, baseProps);
15+
const props = assign({}, baseProps);
1416
const defaultProps = Component.defaultProps;
1517
for (const propName in defaultProps) {
1618
if (props[propName] === undefined) {

0 commit comments

Comments
 (0)