MCPcopy Create free account
hub / github.com/krasimir/react-in-patterns / shouldUseNative

Function shouldUseNative

code/redux/public/app.js:938–980  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

936}
937
938function shouldUseNative() {
939 try {
940 if (!Object.assign) {
941 return false;
942 }
943
944 // Detect buggy property enumeration order in older V8 versions.
945
946 // https://bugs.chromium.org/p/v8/issues/detail?id=4118
947 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
948 test1[5] = 'de';
949 if (Object.getOwnPropertyNames(test1)[0] === '5') {
950 return false;
951 }
952
953 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
954 var test2 = {};
955 for (var i = 0; i < 10; i++) {
956 test2['_' + String.fromCharCode(i)] = i;
957 }
958 var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
959 return test2[n];
960 });
961 if (order2.join('') !== '0123456789') {
962 return false;
963 }
964
965 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
966 var test3 = {};
967 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
968 test3[letter] = letter;
969 });
970 if (Object.keys(Object.assign({}, test3)).join('') !==
971 'abcdefghijklmnopqrst') {
972 return false;
973 }
974
975 return true;
976 } catch (err) {
977 // We don't expect any of the above to throw, but better to be safe.
978 return false;
979 }
980}
981
982module.exports = shouldUseNative() ? Object.assign : function (target, source) {
983 var from;

Callers 1

app.jsFile · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected