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

Function shouldUseNative

code/communication/public/app.js:722–764  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

720}
721
722function shouldUseNative() {
723 try {
724 if (!Object.assign) {
725 return false;
726 }
727
728 // Detect buggy property enumeration order in older V8 versions.
729
730 // https://bugs.chromium.org/p/v8/issues/detail?id=4118
731 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
732 test1[5] = 'de';
733 if (Object.getOwnPropertyNames(test1)[0] === '5') {
734 return false;
735 }
736
737 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
738 var test2 = {};
739 for (var i = 0; i < 10; i++) {
740 test2['_' + String.fromCharCode(i)] = i;
741 }
742 var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
743 return test2[n];
744 });
745 if (order2.join('') !== '0123456789') {
746 return false;
747 }
748
749 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
750 var test3 = {};
751 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
752 test3[letter] = letter;
753 });
754 if (Object.keys(Object.assign({}, test3)).join('') !==
755 'abcdefghijklmnopqrst') {
756 return false;
757 }
758
759 return true;
760 } catch (err) {
761 // We don't expect any of the above to throw, but better to be safe.
762 return false;
763 }
764}
765
766module.exports = shouldUseNative() ? Object.assign : function (target, source) {
767 var from;

Callers 1

app.jsFile · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected