MCPcopy Create free account
hub / github.com/plotly/dash / shouldUseNative

Function shouldUseNative

dash/deps/prop-types@15.8.1.js:844–886  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

842}
843
844function shouldUseNative() {
845 try {
846 if (!Object.assign) {
847 return false;
848 }
849
850 // Detect buggy property enumeration order in older V8 versions.
851
852 // https://bugs.chromium.org/p/v8/issues/detail?id=4118
853 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
854 test1[5] = 'de';
855 if (Object.getOwnPropertyNames(test1)[0] === '5') {
856 return false;
857 }
858
859 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
860 var test2 = {};
861 for (var i = 0; i < 10; i++) {
862 test2['_' + String.fromCharCode(i)] = i;
863 }
864 var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
865 return test2[n];
866 });
867 if (order2.join('') !== '0123456789') {
868 return false;
869 }
870
871 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
872 var test3 = {};
873 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
874 test3[letter] = letter;
875 });
876 if (Object.keys(Object.assign({}, test3)).join('') !==
877 'abcdefghijklmnopqrst') {
878 return false;
879 }
880
881 return true;
882 } catch (err) {
883 // We don't expect any of the above to throw, but better to be safe.
884 return false;
885 }
886}
887
888module.exports = shouldUseNative() ? Object.assign : function (target, source) {
889 var from;

Callers 1

Calls 2

keysMethod · 0.80
assignMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…