UNPKG

foop

Version:

interfaces that describe their intentions.

100 lines (96 loc) 7.57 kB
/** * @memberOf util * @since 4.0.0 * * {@link https://github.com/mobxjs/mobx/blob/master/src/utils/utils.ts#L86 mobx-object-assign} * {@link https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign mozilla-object-assign} * {@link https://esdiscuss.org/topic/object-assign-with-several-source-objects esdiscuss-object-assign} * {@link https://github.com/facebook/react/blob/4b2eac3de7e1dbf5c2dd742fd9989974a83972cb/scripts/babel/transform-object-assign-require.js react-object-assign} * {@link https://github.com/lodash/lodash/blob/master/.internal/assignValue.js lodash-assign} * {@link https://github.com/ramda/ramda/blob/master/src/internal/_objectAssign.js ramda-assign} * @see {@link react-object-assign} * @see {@link ramda-assign} * @see {@link lodash-assign} * @see {@link mobx-object-assign} * @see {@link esdiscuss-object-assign} * @see {@link mozilla-object-assign} * * @type {Function} */ module.exports = Object.assign // const ENV_COMPAT = require('../env/compat') // @TODO if (ENV_COMPAT) polyfill // --- check // function shouldUseNative() { // try { // if (!Object.assign) { // return false // } // // // Detect buggy property enumeration order in older V8 versions. // // // https://bugs.chromium.org/p/v8/issues/detail?id=4118 // var test1 = new String('abc') // eslint-disable-line no-new-wrappers // test1[5] = 'de' // if (Object.getOwnPropertyNames(test1)[0] === '5') { // return false // } // // // https://bugs.chromium.org/p/v8/issues/detail?id=3056 // var test2 = {} // for (var i = 0; i < 10; i++) { // test2['_' + String.fromCharCode(i)] = i // } // var order2 = Object.getOwnPropertyNames(test2).map(function(n) { // return test2[n] // }) // if (order2.join('') !== '0123456789') { // return false // } // // // https://bugs.chromium.org/p/v8/issues/detail?id=3056 // var test3 = {} // 'abcdefghijklmnopqrst'.split('').forEach(function(letter) { // test3[letter] = letter // }) // if ( // Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst' // ) { // return false // } // // return true // } // catch (err) { // // We don't expect any of the above to throw, but better to be safe. // return false // } // } // --- handle // function ObjectAssign(target, source) { // var from // var to = toObject(target) // var symbols // // for (var s = 1; s < arguments.length; s++) { // from = Object(arguments[s]) // // for (var key in from) { // if (hasOwnProperty.call(from, key)) { // to[key] = from[key] // } // } // // if (getOwnPropertySymbols) { // symbols = getOwnPropertySymbols(from) // for (var i = 0; i < symbols.length; i++) { // if (propIsEnumerable.call(from, symbols[i])) { // to[symbols[i]] = from[symbols[i]] // } // } // } // } // // return to // } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWduLmpzIiwic291cmNlcyI6WyJhc3NpZ24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbWVtYmVyT2YgdXRpbFxuICogQHNpbmNlIDQuMC4wXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tb2J4anMvbW9ieC9ibG9iL21hc3Rlci9zcmMvdXRpbHMvdXRpbHMudHMjTDg2IG1vYngtb2JqZWN0LWFzc2lnbn1cbiAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduIG1vemlsbGEtb2JqZWN0LWFzc2lnbn1cbiAqIHtAbGluayBodHRwczovL2VzZGlzY3Vzcy5vcmcvdG9waWMvb2JqZWN0LWFzc2lnbi13aXRoLXNldmVyYWwtc291cmNlLW9iamVjdHMgZXNkaXNjdXNzLW9iamVjdC1hc3NpZ259XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvNGIyZWFjM2RlN2UxZGJmNWMyZGQ3NDJmZDk5ODk5NzRhODM5NzJjYi9zY3JpcHRzL2JhYmVsL3RyYW5zZm9ybS1vYmplY3QtYXNzaWduLXJlcXVpcmUuanMgcmVhY3Qtb2JqZWN0LWFzc2lnbn1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci8uaW50ZXJuYWwvYXNzaWduVmFsdWUuanMgbG9kYXNoLWFzc2lnbn1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcmFtZGEvcmFtZGEvYmxvYi9tYXN0ZXIvc3JjL2ludGVybmFsL19vYmplY3RBc3NpZ24uanMgcmFtZGEtYXNzaWdufVxuICogQHNlZSB7QGxpbmsgcmVhY3Qtb2JqZWN0LWFzc2lnbn1cbiAqIEBzZWUge0BsaW5rIHJhbWRhLWFzc2lnbn1cbiAqIEBzZWUge0BsaW5rIGxvZGFzaC1hc3NpZ259XG4gKiBAc2VlIHtAbGluayBtb2J4LW9iamVjdC1hc3NpZ259XG4gKiBAc2VlIHtAbGluayBlc2Rpc2N1c3Mtb2JqZWN0LWFzc2lnbn1cbiAqIEBzZWUge0BsaW5rIG1vemlsbGEtb2JqZWN0LWFzc2lnbn1cbiAqXG4gKiBAdHlwZSB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnblxuXG4vLyBjb25zdCBFTlZfQ09NUEFUID0gcmVxdWlyZSgnLi4vZW52L2NvbXBhdCcpXG4vLyBAVE9ETyBpZiAoRU5WX0NPTVBBVCkgcG9seWZpbGxcblxuLy8gLS0tIGNoZWNrXG4vLyBmdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG4vLyAgIHRyeSB7XG4vLyAgICAgaWYgKCFPYmplY3QuYXNzaWduKSB7XG4vLyAgICAgICByZXR1cm4gZmFsc2Vcbi8vICAgICB9XG4vL1xuLy8gICAgIC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cbi8vXG4vLyAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuLy8gICAgIHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG4vLyAgICAgdGVzdDFbNV0gPSAnZGUnXG4vLyAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG4vLyAgICAgICByZXR1cm4gZmFsc2Vcbi8vICAgICB9XG4vL1xuLy8gICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcbi8vICAgICB2YXIgdGVzdDIgPSB7fVxuLy8gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuLy8gICAgICAgdGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpXG4vLyAgICAgfVxuLy8gICAgIHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uKG4pIHtcbi8vICAgICAgIHJldHVybiB0ZXN0MltuXVxuLy8gICAgIH0pXG4vLyAgICAgaWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG4vLyAgICAgICByZXR1cm4gZmFsc2Vcbi8vICAgICB9XG4vL1xuLy8gICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcbi8vICAgICB2YXIgdGVzdDMgPSB7fVxuLy8gICAgICdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24obGV0dGVyKSB7XG4vLyAgICAgICB0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyXG4vLyAgICAgfSlcbi8vICAgICBpZiAoXG4vLyAgICAgICBPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnXG4vLyAgICAgKSB7XG4vLyAgICAgICByZXR1cm4gZmFsc2Vcbi8vICAgICB9XG4vL1xuLy8gICAgIHJldHVybiB0cnVlXG4vLyAgIH1cbi8vICAgY2F0Y2ggKGVycikge1xuLy8gICAgIC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG4vLyAgICAgcmV0dXJuIGZhbHNlXG4vLyAgIH1cbi8vIH1cblxuLy8gLS0tIGhhbmRsZVxuLy8gZnVuY3Rpb24gT2JqZWN0QXNzaWduKHRhcmdldCwgc291cmNlKSB7XG4vLyAgIHZhciBmcm9tXG4vLyAgIHZhciB0byA9IHRvT2JqZWN0KHRhcmdldClcbi8vICAgdmFyIHN5bWJvbHNcbi8vXG4vLyAgIGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG4vLyAgICAgZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pXG4vL1xuLy8gICAgIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4vLyAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG4vLyAgICAgICAgIHRvW2tleV0gPSBmcm9tW2tleV1cbi8vICAgICAgIH1cbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbi8vICAgICAgIHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSlcbi8vICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuLy8gICAgICAgICBpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG4vLyAgICAgICAgICAgdG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dXG4vLyAgICAgICAgIH1cbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgIH1cbi8vXG4vLyAgIHJldHVybiB0b1xuLy8gfVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJBLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=