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

Function shouldUseNative

code/new-context-api/public/app.js:688–730  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

686}
687
688function shouldUseNative() {
689 try {
690 if (!Object.assign) {
691 return false;
692 }
693
694 // Detect buggy property enumeration order in older V8 versions.
695
696 // https://bugs.chromium.org/p/v8/issues/detail?id=4118
697 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
698 test1[5] = 'de';
699 if (Object.getOwnPropertyNames(test1)[0] === '5') {
700 return false;
701 }
702
703 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
704 var test2 = {};
705 for (var i = 0; i < 10; i++) {
706 test2['_' + String.fromCharCode(i)] = i;
707 }
708 var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
709 return test2[n];
710 });
711 if (order2.join('') !== '0123456789') {
712 return false;
713 }
714
715 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
716 var test3 = {};
717 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
718 test3[letter] = letter;
719 });
720 if (Object.keys(Object.assign({}, test3)).join('') !==
721 'abcdefghijklmnopqrst') {
722 return false;
723 }
724
725 return true;
726 } catch (err) {
727 // We don't expect any of the above to throw, but better to be safe.
728 return false;
729 }
730}
731
732module.exports = shouldUseNative() ? Object.assign : function (target, source) {
733 var from;

Callers 1

app.jsFile · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected