mirror of
https://github.com/zebrajr/react.git
synced 2025-12-07 12:20:38 +01:00
* Check in a forked version of object-assign This one uses ES modules so that we can inline it into UMD builds. We could wait for object-assign to make an ESM export but we're going to remove this dependency and assume global polyfills in the next version anyway. However, we'd have to figure out how to keep the copyright header and it'll get counted in terms of byte size (even if other tooling removes it). A lot of headache when we have our own implementation anyway. So I'll just use that. Ours is not resilient to checking certain browser bugs but those browsers are mostly unused anyway. (Even FB breaks on them presumably.) We also don't need to be resilient to Symbols since the way React uses it we shouldn't need to copy symbols * Don't transpile Object.assign to object-assign in object-assign The polyfill needs to be able to feature detect Object.assign.
55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const helperModuleImports = require('@babel/helper-module-imports');
|
|
|
|
module.exports = function autoImporter(babel) {
|
|
function getAssignIdent(path, file, state) {
|
|
if (state.id) {
|
|
return state.id;
|
|
}
|
|
state.id = helperModuleImports.addDefault(path, 'object-assign', {
|
|
nameHint: 'assign',
|
|
});
|
|
return state.id;
|
|
}
|
|
|
|
return {
|
|
pre: function() {
|
|
// map from module to generated identifier
|
|
this.id = null;
|
|
},
|
|
|
|
visitor: {
|
|
CallExpression: function(path, file) {
|
|
if (file.filename.indexOf('object-assign') !== -1) {
|
|
// Don't replace Object.assign if we're transforming object-assign
|
|
return;
|
|
}
|
|
if (path.get('callee').matchesPattern('Object.assign')) {
|
|
// generate identifier and require if it hasn't been already
|
|
const id = getAssignIdent(path, file, this);
|
|
path.node.callee = id;
|
|
}
|
|
},
|
|
|
|
MemberExpression: function(path, file) {
|
|
if (file.filename.indexOf('object-assign') !== -1) {
|
|
// Don't replace Object.assign if we're transforming object-assign
|
|
return;
|
|
}
|
|
if (path.matchesPattern('Object.assign')) {
|
|
const id = getAssignIdent(path, file, this);
|
|
path.replaceWith(id);
|
|
}
|
|
},
|
|
},
|
|
};
|
|
};
|