]> gerrit.simantics Code Review - simantics/district.git/blob - mixin.js
488523eea1d4ffd325a457a0b2dad75ff83ac978
[simantics/district.git] / mixin.js
1 'use strict';
2
3 var value = require('./valid-value')
4
5   , defineProperty = Object.defineProperty
6   , getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor
7   , getOwnPropertyNames = Object.getOwnPropertyNames
8   , getOwnPropertySymbols = Object.getOwnPropertySymbols;
9
10 module.exports = function (target, source) {
11         var error, sourceObject = Object(value(source));
12         target = Object(value(target));
13         getOwnPropertyNames(sourceObject).forEach(function (name) {
14                 try {
15                         defineProperty(target, name, getOwnPropertyDescriptor(source, name));
16                 } catch (e) { error = e; }
17         });
18         if (typeof getOwnPropertySymbols === 'function') {
19                 getOwnPropertySymbols(sourceObject).forEach(function (symbol) {
20                         try {
21                                 defineProperty(target, symbol, getOwnPropertyDescriptor(source, symbol));
22                         } catch (e) { error = e; }
23                 });
24         }
25         if (error !== undefined) throw error;
26         return target;
27 };