UNPKG

1.1 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = assign;
7
8/**
9 * Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
10 *
11 * Similar to Object.assign(), but it doesn't execute getters. This allows us to have
12 * lazy properties on an object and still be able to merge them together
13 *
14 */
15function assign(target, ...sources) {
16 sources.forEach(source => {
17 let descriptors = Object.keys(source).reduce((acc, key) => {
18 const propertyDescriptor = Object.getOwnPropertyDescriptor(source, key);
19
20 if (propertyDescriptor !== undefined) {
21 acc[key] = propertyDescriptor;
22 }
23
24 return acc;
25 }, {}); // by default, Object.assign copies enumerable Symbols too
26
27 Object.getOwnPropertySymbols(source).forEach(sym => {
28 let descriptor = Object.getOwnPropertyDescriptor(source, sym);
29
30 if (descriptor && descriptor.enumerable) {
31 descriptors[sym.toString()] = descriptor;
32 }
33 });
34 Object.defineProperties(target, descriptors);
35 });
36 return target;
37}
\No newline at end of file