text: /* eslint-disable no-plusplus */
  
  const Logger = console;
  
  /**
   isNone();              // true
   isNone(null);          // false
   isNone(undefined);     // true
   isNone('');            // false
   isNone([]);            // false
   isNone(function() {}); // false
   */
  function isNotSet(object) {
    return object === undefined;
  }
  
  /**
   isNone();              // true
   isNone(null);          // true
   isNone(undefined);     // true
   isNone('');            // false
   isNone([]);            // false
   isNone(function() {}); // false
   */
  function isNone(object) {
    return object === null || object === undefined;
  }
  
  /**
   isEmpty();                 // true
   isEmpty(null);             // true
   isEmpty(undefined);        // true
   isEmpty('');               // true
   isEmpty([]);               // true
   isEmpty({ size: 0});       // true
   isEmpty({});               // false
   isEmpty('Adam Hawkins');   // false
   isEmpty([0,1,2]);          // false
   isEmpty('\n\t');           // false
   isEmpty('  ');             // false
   isEmpty({ size: 1 })       // false
   isEmpty({ size: () => 0 }) // false
   */
  function isEmpty(object) {
    if (isNone(object)) {
      return true;
    }
  
    if (typeof object.size === 'number') {
      return !object.size;
    }
  
    const objectType = typeof object;
  
    if (objectType === 'object') {
      const { size } = object;
      if (typeof size === 'number') {
        return !size;
      }
    }
  
    if (typeof object.length === 'number' && objectType !== 'function') {
      return !object.length;
    }
  
    if (objectType === 'object') {
      const { length } = object;
      if (typeof length === 'number') {
        return !length;
      }
    }
  
    return false;
  }
  
  /**
   isBlank();                // true
   isBlank(null);            // true
   isBlank(undefined);       // true
   isBlank('');              // true
   isBlank([]);              // true
   isBlank('\n\t');          // true
   isBlank('  ');            // true
   isBlank({});              // false
   isBlank('\n\t Hello');    // false
   isBlank('Hello world');   // false
   isBlank([1,2,3]);         // false
   */
  function isBlank(obj) {
    return isEmpty(obj) || (typeof obj === 'string' && obj.match(/\S/) === null);
  }
  
  function isFunction(func) {
    return typeof func === 'function';
  }
  function isString(str) {
    return typeof str === 'string';
  }
  
  function parseStringToNumber(text) {
    if (isBlank(text)) {
      return 0;
    }
    try {
      return parseInt(text, 10);
    } catch (error) {
      Logger.error(error);
      return 0;
    }
  }
  
  async function asyncForEach(array, callback) {
    for (let index = 0; index < array.length; index++) {
      // eslint-disable-next-line no-await-in-loop
      await callback(array[index], index, array);
    }
  }
  
  module.exports = {
    isNotSet,
    isNone,
    isEmpty,
    isBlank,
    isString,
    isFunction,
    parseStringToNumber,
    asyncForEach
  };
  