
// taken from isobject npm library
export function isObject(val) {
  return val != null && typeof val === 'object' && Array.isArray(val) === false
}

export function defaults(original, def) {
  if (!isObject(original)) throw new Error('defaults called with non-object type')

  Object.keys(original).forEach(key => {
    if (isObject(original[key]) && def && isObject(def[key])) {
      defaults(original[key], def[key])
    }
  })

  if (def) {
    Object.keys(def).forEach(function(key) {
      if (typeof original[key] === 'undefined') {
        original[key] = def[key]
      }
    })
  }

  return original
}
