logicalOperators.js

/**
 * Compare if there is truthy value.
 * Return true if all values are truthy.
 * 
 * @example
 * and(false, false, false); // false
 * and(true, false, false); // false
 * and(true, false, true); // false
 * and(true, true, true); // true
 * 
 * @param {any} args - values to check
 * @returns {boolean}
 */
export function and(...args) {
	for (let i = 0; i < args.length; i++) {
		if (!args[i]) return false;
	}
	return true;
};

/**
 * Compare if one of the value are truthy.
 * Return true if one are truthy.
 * 
 * @example
 * or(false, false, false); // false
 * or(true, false, true); // true
 * or(false, true, false); // true
 * or(true, true, true); // true
 * 
 * @param {any} args - values to check
 * @returns {boolean}
 */
export function or(...args) { return !!args.find(a => !!a) };

/**
 * Return false if both values are truthy ou falsy.
 * 
 * @example
 * xor(false, false); // false
 * xor(true, false); // true
 * xor(false, true); // true
 * xor(true, true); // false
 * 
 * @param {any} value1 - value 1 to compare
 * @param {any} value2 - value 2 to compare
 * @returns {boolean}
 */
export function xor(value1, value2) { return !!value1 !== !!value2 };