text: import { computeValue } from '../../internal'
  import { truthy } from '../../util'
  
  export const booleanOperators = {
    /**
     * Returns true only when all its expressions evaluate to true. Accepts any number of argument expressions.
     *
     * @param obj
     * @param expr
     * @returns {boolean}
     */
    $and: (obj, expr) => {
      let value = computeValue(obj, expr)
      return truthy(value) && value.every(truthy)
    },
  
    /**
     * Returns true when any of its expressions evaluates to true. Accepts any number of argument expressions.
     *
     * @param obj
     * @param expr
     * @returns {boolean}
     */
    $or: (obj, expr) => {
      let value = computeValue(obj, expr)
      return truthy(value) && value.some(truthy)
    },
  
    /**
     * Returns the boolean value that is the opposite of its argument expression. Accepts a single argument expression.
     *
     * @param obj
     * @param expr
     * @returns {boolean}
     */
    $not: (obj, expr) => {
      return !computeValue(obj, expr[0])
    }
  }
  