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

Function shouldUseNative

code/controlled-uncontrolled/public/app.js:651–693  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

649}
650
651function shouldUseNative() {
652 try {
653 if (!Object.assign) {
654 return false;
655 }
656
657 // Detect buggy property enumeration order in older V8 versions.
658
659 // https://bugs.chromium.org/p/v8/issues/detail?id=4118
660 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
661 test1[5] = 'de';
662 if (Object.getOwnPropertyNames(test1)[0] === '5') {
663 return false;
664 }
665
666 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
667 var test2 = {};
668 for (var i = 0; i < 10; i++) {
669 test2['_' + String.fromCharCode(i)] = i;
670 }
671 var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
672 return test2[n];
673 });
674 if (order2.join('') !== '0123456789') {
675 return false;
676 }
677
678 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
679 var test3 = {};
680 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
681 test3[letter] = letter;
682 });
683 if (Object.keys(Object.assign({}, test3)).join('') !==
684 'abcdefghijklmnopqrst') {
685 return false;
686 }
687
688 return true;
689 } catch (err) {
690 // We don't expect any of the above to throw, but better to be safe.
691 return false;
692 }
693}
694
695module.exports = shouldUseNative() ? Object.assign : function (target, source) {
696 var from;

Callers 1

app.jsFile · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected