/**
 * @Datei merge-options.js
 * @modul zusammenführen-optionen
 * /
importiere {each, isPlain} von './obj';

/**
 * Zwei Objekte rekursiv zusammenführen.
 *
 * Führt eine tiefe Zusammenführung durch wie
 * {@link https://lodash.com/docs/4.17.10#merge|lodash.merge}, führt aber nur zusammen
 * einfache Objekte (keine Arrays, Elemente oder sonstiges).
 *
 * Werte, die nicht in der Ebene liegen, werden direkt von der rechten Seite des Objekts kopiert
 * argument.
 *
 * @static
 * @param {Object[]} sources
 *          Ein oder mehrere Objekte, die zu einem neuen Objekt zusammengeführt werden sollen.
 *
 * @return {Object}
 *          Ein neues Objekt, das das zusammengefasste Ergebnis aller Quellen ist.
 * /
function mergeOptions(...sources) {
  const result = {};

  sources.forEach(source => {
    if (!Quelle) {
      rückkehr;
    }

    each(Quelle, (Wert, Schlüssel) => {
      if (!isPlain(value)) {
        ergebnis[Schlüssel] = Wert;
        rückkehr;
      }

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

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

  ergebnis zurückgeben;
}

export default mergeOptions;