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

Function shouldUseNative

code/composition/public/app.js:825–867  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

823}
824
825function shouldUseNative() {
826 try {
827 if (!Object.assign) {
828 return false;
829 }
830
831 // Detect buggy property enumeration order in older V8 versions.
832
833 // https://bugs.chromium.org/p/v8/issues/detail?id=4118
834 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
835 test1[5] = 'de';
836 if (Object.getOwnPropertyNames(test1)[0] === '5') {
837 return false;
838 }
839
840 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
841 var test2 = {};
842 for (var i = 0; i < 10; i++) {
843 test2['_' + String.fromCharCode(i)] = i;
844 }
845 var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
846 return test2[n];
847 });
848 if (order2.join('') !== '0123456789') {
849 return false;
850 }
851
852 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
853 var test3 = {};
854 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
855 test3[letter] = letter;
856 });
857 if (Object.keys(Object.assign({}, test3)).join('') !==
858 'abcdefghijklmnopqrst') {
859 return false;
860 }
861
862 return true;
863 } catch (err) {
864 // We don't expect any of the above to throw, but better to be safe.
865 return false;
866 }
867}
868
869module.exports = shouldUseNative() ? Object.assign : function (target, source) {
870 var from;

Callers 1

app.jsFile · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected