MCPcopy Index your code
hub / github.com/tastejs/todomvc / shouldUseNative

Function shouldUseNative

examples/typescript-react/js/bundle.js:450–492  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

448}
449
450function shouldUseNative() {
451 try {
452 if (!Object.assign) {
453 return false;
454 }
455
456 // Detect buggy property enumeration order in older V8 versions.
457
458 // https://bugs.chromium.org/p/v8/issues/detail?id=4118
459 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
460 test1[5] = 'de';
461 if (Object.getOwnPropertyNames(test1)[0] === '5') {
462 return false;
463 }
464
465 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
466 var test2 = {};
467 for (var i = 0; i < 10; i++) {
468 test2['_' + String.fromCharCode(i)] = i;
469 }
470 var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
471 return test2[n];
472 });
473 if (order2.join('') !== '0123456789') {
474 return false;
475 }
476
477 // https://bugs.chromium.org/p/v8/issues/detail?id=3056
478 var test3 = {};
479 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
480 test3[letter] = letter;
481 });
482 if (Object.keys(Object.assign({}, test3)).join('') !==
483 'abcdefghijklmnopqrst') {
484 return false;
485 }
486
487 return true;
488 } catch (err) {
489 // We don't expect any of the above to throw, but better to be safe.
490 return false;
491 }
492}
493
494module.exports = shouldUseNative() ? Object.assign : function (target, source) {
495 var from;

Callers 1

bundle.jsFile · 0.85

Calls 3

forEachMethod · 0.80
assignMethod · 0.80
mapMethod · 0.65

Tested by

no test coverage detected