index.js
function() {
  this._colors = [
    'red',
    'green',
    'yellow',
    'blue',
    'magenta',
    'cyan',
    'white',
    'black'
  ]

  this._colors_num = this._colors.length

  this._backgrounds = []

  for (var i = 0; i < this._colors_num; i++) {
    this._backgrounds[i] = 'bg'+this._colors[i].charAt(0).toUpperCase()+this._colors[i].slice(1)
  }

  this._skip = ['black', 'white', 'bgBlack', 'bgWhite']
  this._skip_num = this._skip.length - 1

  this._next = 0
  this._prev = -1

  this.options = {color_space: false, gap: 1, space_color: null}

  this.wrapper = {
    bg: this.ponyfy(true),
    r: this.ponyfy(),
    add: this.addorskip('add'),
    skip: this.addorskip('skip'),
    options: (opts) => {
      for (let i in options) {
        if (opts[i]) {
          this.options[i] = opts[i]
          continue
        }

        for (let j in opts) {
          if (options[i].alias && ~options[i].alias.indexOf(j))  {
            this.options[i] = opts[j]
            break
          }
        }
      }

      return this.wrapper
    },
    colors: () => this.colors(),
    reset: () => {
      this._skip = ['black', 'white', 'bgBlack', 'bgWhite']
      return this.wrapper
    },
    _colors: this._colors,
    _backgrounds: this._backgrounds
  }

  return this.wrapper

}
function() {
  this._colors = [
    'red',
    'green',
    'yellow',
    'blue',
    'magenta',
    'cyan',
    'white',
    'black'
  ]

  this._colors_num = this._colors.length

  this._backgrounds = []

  for (var i = 0; i < this._colors_num; i++) {
    this._backgrounds[i] = 'bg'+this._colors[i].charAt(0).toUpperCase()+this._colors[i].slice(1)
  }

  this._skip = ['black', 'white', 'bgBlack', 'bgWhite']
  this._skip_num = this._skip.length - 1

  this._next = 0
  this._prev = -1

  this.options = {color_space: false, gap: 1, space_color: null}

  this.wrapper = {
    bg: this.ponyfy(true),
    r: this.ponyfy(),
    add: this.addorskip('add'),
    skip: this.addorskip('skip'),
    options: (opts) => {
      for (let i in options) {
        if (opts[i]) {
          this.options[i] = opts[i]
          continue
        }

        for (let j in opts) {
          if (options[i].alias && ~options[i].alias.indexOf(j))  {
            this.options[i] = opts[j]
            break
          }
        }
      }

      return this.wrapper
    },
    colors: () => this.colors(),
    reset: () => {
      this._skip = ['black', 'white', 'bgBlack', 'bgWhite']
      return this.wrapper
    },
    _colors: this._colors,
    _backgrounds: this._backgrounds
  }

  return this.wrapper

}
black, white and gray (buggy?) are not included