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

Function shouldUseNative

code/dependency-injection/public/app.js:780–822  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

778}
779
780function shouldUseNative() {
781 try {
782 if (!Object.assign) {
783 return false;
784 }
785
786 // Detect buggy property enumeration order in older V8 versions.
787
788 // https://bugs.chromium.org/p/v8/issues/detail?id=4118
789 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
790 test1[5] = 'de';
791 if (Object.getOwnPropertyNames(test1)[0] === '5') {
792 return false;
793 }
794
795 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
796 var test2 = {};
797 for (var i = 0; i < 10; i++) {
798 test2['_' + String.fromCharCode(i)] = i;
799 }
800 var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
801 return test2[n];
802 });
803 if (order2.join('') !== '0123456789') {
804 return false;
805 }
806
807 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
808 var test3 = {};
809 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
810 test3[letter] = letter;
811 });
812 if (Object.keys(Object.assign({}, test3)).join('') !==
813 'abcdefghijklmnopqrst') {
814 return false;
815 }
816
817 return true;
818 } catch (err) {
819 // We don't expect any of the above to throw, but better to be safe.
820 return false;
821 }
822}
823
824module.exports = shouldUseNative() ? Object.assign : function (target, source) {
825 var from;

Callers 1

app.jsFile · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected