require('colors')

const logLevelColors = {
  error: 'red',
  info: 'cyan',
  success: 'green',
  warn: 'yellow'
}

module.exports = function (verbose) {
  /**
   * Verbose flag
   * @type {Boolean}
   */
  this.verbose = verbose

  /**
   * Log message when verbose flag is enabled
   * @param {String} msg - message to log
   */
  this.log = (msg) => {
    if (this.verbose) {
      console.log(msg)
    }
  }

  /**
   * Print message
   * @param {String} msg - message to print
   */
  this.print = (msg) => {
    console.log(msg)
  }

  /**
   * Generate methods for various log levels
   */
  for (var logLevel in logLevelColors) {
    if (!logLevelColors.hasOwnProperty(logLevel)) {
      continue
    }

    /**
     * Log message at a given log level
     * @param {String} msg - message to log
     */
    this[logLevel] = (msg) => {
      const color = logLevelColors[logLevel]
      const label = logLevel.toUpperCase()[color]
      const sep = logLevel === 'success' ? '\n' : ' '

      if (msg instanceof Object) {
        msg = JSON.stringify(msg, null, 2)
      }

      console[logLevel](`${label}:${sep}${msg}`)
    }
  }
}

@@ -16,105 +16,8 @@
 ')%0A%0A
-const logLevelColors = %7B%0A  error: 'red',%0A  info: 'cyan',%0A  success: 'green',%0A  warn: 'yellow'%0A%7D%0A%0A
 modu
@@ -56,18 +56,16 @@
 %7B%0A  /**%0A
-  
  * Verbo
@@ -72,18 +72,16 @@
 se flag%0A
-  
  * @type
@@ -91,18 +91,16 @@
 oolean%7D%0A
-  
  */%0A  th
@@ -309,88 +309,96 @@
 %0A%0A  
-/**%0A   * Print message%0A   * @param %7BString%7D msg - message to print%0A   */
+this.success = (msg) =%3E %7B%0A    console.log('%5CnSUCCESS: '.green + '%5Cn' + msg)%0A  %7D%0A
 %0A  this.
 prin
@@ -397,13 +397,12 @@
 his.
-print
+info
  = (
@@ -427,478 +427,214 @@
 ole.
-log(msg)%0A  %7D%0A%0A  /**%0A   * Generate methods for various log levels%0A   */%0A  for (var logLevel in logLevelColors) %7B%0A    if (!logLevelColors.hasOwnProperty(logLevel)) %7B%0A      continue%0A    %7D%0A%0A    /**%0A     * Log message at a given log level%0A     * @param %7BString%7D msg - message to log%0A     */%0A    this%5BlogLevel%5D = (msg) =%3E %7B%0A      const color = logLevelColors%5BlogLevel%5D%0A      const label = logLevel.toUpperCase()%5Bcolor%5D%0A      const sep = logLevel === 'success' ? '%5Cn' : ' '%0A%0A  
+info('INFO: '.cyan + msg)%0A  %7D%0A%0A  this.error = (msg) =%3E %7B%0A    if (msg instanceof Object) %7B%0A      msg = JSON.stringify(msg, null, 2)%0A    %7D%0A    console.error('ERROR: '.red + msg)%0A  %7D%0A%0A  this.warn = (msg) =%3E %7B%0A
     
@@ -658,26 +658,24 @@
 f Object) %7B%0A
-  
       msg = 
@@ -707,23 +707,18 @@
  2)%0A    
- 
- 
 %7D%0A
-%0A  
     cons
@@ -724,49 +724,166 @@
 sole
-%5BlogLevel%5D(%60$%7Blabel%7D:$%7Bsep%7D$%7Bmsg%7D%60)%0A    %7D
+.warn('WARNING: '.yellow + msg)%0A  %7D%0A%0A  /**%0A   * Print message%0A   * @param %7BString%7D msg - message to print%0A   */%0A  this.print = (msg) =%3E %7B%0A    console.log(msg)
 %0A  %7D

revert breaking changes