/**
 * Checks whether an object has only empty values.
 *
 * Empty values:
 * - undefined
 * - null
 * - empty string
 * - empty array
 * - empty object
 *
 * @param {Object} obj
 * @returns {boolean}
 *
 * @example
 * isObjectEmpty({}) // true
 * isObjectEmpty({ a: '' }) // true
 * isObjectEmpty({ a: [] }) // true
 * isObjectEmpty({ a: {} }) // true
 * isObjectEmpty({ a: 1 }) // false
 */
export function isObjectEmpty(obj) {
  if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) {
    return false
  }

  return Object.values(obj).every(value => {
    if (value === undefined || value === null || value === '') return true
    if (Array.isArray(value)) return value.length === 0
    if (typeof value === 'object') return Object.keys(value).length === 0
    return false
  })
}
