blob: f5cf9dd1372dcd588a87ba091a2ef78d5d11e89b [file] [log] [blame]
"use strict";
var value = require("./valid-value")
, defineProperty = Object.defineProperty
, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor
, getOwnPropertyNames = Object.getOwnPropertyNames
, getOwnPropertySymbols = Object.getOwnPropertySymbols;
module.exports = function (target, source) {
var error, sourceObject = Object(value(source));
target = Object(value(target));
getOwnPropertyNames(sourceObject).forEach(function (name) {
try {
defineProperty(target, name, getOwnPropertyDescriptor(source, name));
} catch (e) { error = e; }
});
if (typeof getOwnPropertySymbols === "function") {
getOwnPropertySymbols(sourceObject).forEach(function (symbol) {
try {
defineProperty(target, symbol, getOwnPropertyDescriptor(source, symbol));
} catch (e) { error = e; }
});
}
if (error !== undefined) throw error;
return target;
};