/**
 * @file merge-options.js
 * Opciones de combinación de @módulo
 * /
import {each, isPlain} from './obj';

/ **
 * Combinar dos objetos recursivamente.
 *
 * Realiza una fusión profunda como
 * {@link https://lodash.com/docs/4.17.10#merge|lodash.merge}, pero solo se fusiona
 * objetos simples (no arreglos, elementos o cualquier otra cosa).
 *
 * Los valores de objetos no simples se copiarán directamente desde el extremo derecho
 * argumento.
 *
 * @estático
 * @param {Objeto[]} fuentes
 * Uno o más objetos para fusionar en un nuevo objeto.
 *
 * @return {Objeto}
 * Un nuevo objeto que es el resultado combinado de todas las fuentes.
 * /
función mergeOptions(...fuentes) {
  resultado constante = {};

  fuentes.forEach(fuente => {
    si (!fuente) {
      devolver;
    }

    each(fuente, (valor, clave) => {
      si (! es simple (valor)) {
        resultado[clave] = valor;
        devolver;
      }

      if (!isPlain(resultado[clave])) {
        resultado[clave] = {};
      }

      resultado[clave] = mergeOptions(resultado[clave], valor);
    });
  });

  resultado devuelto;
}

exportar opciones de combinación predeterminadas;