shallow-extend.js 592 B

123456789101112131415161718192021222324
  1. "use strict";
  2. module.exports.shallowExtend = shallowExtend;
  3. /**
  4. * @param {{ [key: string]: unknown }} json
  5. * @param {{ [key: string]: unknown }} defaults
  6. */
  7. function shallowExtend(json, defaults = {}) {
  8. return Object.keys(json).reduce((obj, key) => {
  9. const val = json[key];
  10. if (Array.isArray(val)) {
  11. // always clobber arrays, merging isn't worth unexpected complexity
  12. obj[key] = val.slice();
  13. } else if (val && typeof val === "object") {
  14. obj[key] = shallowExtend(val, obj[key]);
  15. } else {
  16. obj[key] = val;
  17. }
  18. return obj;
  19. }, defaults);
  20. }