docs: function logger(type) {
      var args = [];
      for (var _i = 1; _i < arguments.length; _i++) {
          args[_i - 1] = arguments[_i];
      }
      var msg = args.shift();
      var fn = chek_1.isFunction(chek_1.last(args)) ? args.pop() : chek_1.noop;
      var meta = chek_1.isPlainObject(chek_1.last(args)) ? args.pop() : null;
      var obj = {
          type: type,
          msg: null,
          meta: meta
      };
      var formatters = chek_1.isString(msg) ? msg.match(/%/g) : null;
      if (formatters && formatters.length)
          msg = util_1.format.apply(void 0, [msg].concat(args));
      else
          msg = [msg].concat(args).join(' ');
      if (type === 'error' && !(msg instanceof Error)) {
          msg = new Error(msg);
          var stack = msg.stack.split('\n');
          var tmpMsg = stack.shift();
          stack.shift();
          stack.unshift(tmpMsg);
          msg.stack = stack.join('\n');
      }
      // If any error just throw it.
      if (msg instanceof Error) {
          if (fn)
              fn(msg, obj);
          msg.stack = msg.stack.split('\n').map(function (s, i) {
              if (i === 0)
                  return colurs.applyAnsi('[error]', _log.colors.error) + ' ' + (msg.name || 'Error') + ': ' + msg.message;
              return s;
          }).join('\n');
          throw msg;
      }
      obj.msg = msg;
      fn(msg, obj);
      if (meta) {
          meta = util_1.inspect(meta, null, null, true);
          msg += ('\n' + meta);
      }
      if (type && _log.colors[type])
          msg = colurs.applyAnsi('[' + type + ']: ', _log.colors[type]) + msg;
      process.stderr.write(msg + '\n');
      return _log;
  }