assign.js 1.1 KB

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