foop
Version:
interfaces that describe their intentions.
100 lines (96 loc) • 7.57 kB
JavaScript
/**
* @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=