/**
 * Utility to automatically cast a string value as a number or a boolean.
 *
 * @param {string} value
 *
 * @returns {string|boolean|number}
 */
const autoType = function autoType(value) {
  // numbers
  const numberValue = parseFloat(value);
  if (!Number.isNaN(numberValue) && value === `${numberValue}`) {
    return numberValue;
  }

  // booleans - true
  const trueValues = new Set(['true']);
  if (trueValues.has(value.toLowerCase())) {
    return true;
  }

  // booleans - false
  const falseValues = new Set(['false']);
  if (falseValues.has(value.toLowerCase())) {
    return false;
  }

  // null
  const nullValues = new Set(['null']);
  if (nullValues.has(value.toLowerCase())) {
    return null;
  }

  // null
  const undefinedValues = new Set(['undefined']);
  if (undefinedValues.has(value.toLowerCase())) {
    return undefined;
  }
  return value;
};
export default autoType;