/**
 * @file merge-options.js
 * @module merge-options
 */
import {each, isPlain} de './obj' ;

/**
 * Fusionner deux objets de manière récursive.
 *
 * Effectue une fusion en profondeur comme
 * {@link https://lodash.com/docs/4.17.10#merge|lodash.merge}, mais ne fait que fusionner
 * des objets simples (pas des tableaux, des éléments ou quoi que ce soit d'autre).
 *
 * Les valeurs des objets non plats seront copiées directement à partir de l'objet le plus à droite
 * argument.
 *
 * @statique
 * @param {Object[]} sources
 *          Un ou plusieurs objets à fusionner dans un nouvel objet.
 *
 * @return {Object}
 *          Un nouvel objet qui est le résultat de la fusion de toutes les sources.
 */
function mergeOptions(...sources) {
  const result = {} ;

  sources.forEach(source => {
    if (!source) {
      retour ;
    }

    each(source, (value, key) => {
      if (!isPlain(value)) {
        résultat[clé] = valeur ;
        retour ;
      }

      if (!isPlain(result[key])) {
        result[key] = {} ;
      }

      result[key] = mergeOptions(result[key], value) ;
    }) ;
  }) ;

  retourner le résultat ;
}

export default mergeOptions ;