/**
 * @파일 병합 옵션.js
 * @module 병합 옵션
 */
import {each, isPlain} from './obj';

/**
 * 재귀적으로 두 개체를 병합합니다.
 *
 * 다음과 같은 깊은 병합을 수행합니다.
 * {@link https://lodash.com/docs/4.17.10#merge|lodash.merge}, 병합만 가능
 * 일반 객체(배열, 요소 등이 아님).
 *
 * 일반 개체 값이 아닌 개체 값은 맨 오른쪽에서 직접 복사됩니다.
 * 논쟁.
 *
 * @정적
 * @param {객체[]} 소스
 * 하나 이상의 개체를 새 개체로 병합합니다.
 *
 * @return {객체}
 * 모든 소스의 병합 결과인 새 개체입니다.
 */
함수 mergeOptions(...소스) {
  const 결과 = {};

  sources.forEach(소스 => {
    경우 (! 소스) {
      반품;
    }

    각각(소스, (값, 키) => {
      if (!isPlain(값)) {
        결과[키] = 값;
        반품;
      }

      if (!isPlain(결과[키])) {
        결과[키] = {};
      }

      result[키] = mergeOptions(결과[키], 값);
    });
  });

  반환 결과;
}

기본 mergeOptions 내보내기;