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

Function shouldUseNative

code/third-party/public/app.js:560–602  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

558}
559
560function shouldUseNative() {
561 try {
562 if (!Object.assign) {
563 return false;
564 }
565
566 // Detect buggy property enumeration order in older V8 versions.
567
568 // https://bugs.chromium.org/p/v8/issues/detail?id=4118
569 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
570 test1[5] = 'de';
571 if (Object.getOwnPropertyNames(test1)[0] === '5') {
572 return false;
573 }
574
575 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
576 var test2 = {};
577 for (var i = 0; i < 10; i++) {
578 test2['_' + String.fromCharCode(i)] = i;
579 }
580 var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
581 return test2[n];
582 });
583 if (order2.join('') !== '0123456789') {
584 return false;
585 }
586
587 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
588 var test3 = {};
589 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
590 test3[letter] = letter;
591 });
592 if (Object.keys(Object.assign({}, test3)).join('') !==
593 'abcdefghijklmnopqrst') {
594 return false;
595 }
596
597 return true;
598 } catch (err) {
599 // We don't expect any of the above to throw, but better to be safe.
600 return false;
601 }
602}
603
604module.exports = shouldUseNative() ? Object.assign : function (target, source) {
605 var from;

Callers 1

app.jsFile · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected