/* automatically generated by JSCoverage - do not edit */
if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
if (! _$jscoverage['middleware/logger.js']) {
  _$jscoverage['middleware/logger.js'] = [];
  _$jscoverage['middleware/logger.js'][12] = 0;
  _$jscoverage['middleware/logger.js'][18] = 0;
  _$jscoverage['middleware/logger.js'][24] = 0;
  _$jscoverage['middleware/logger.js'][90] = 0;
  _$jscoverage['middleware/logger.js'][91] = 0;
  _$jscoverage['middleware/logger.js'][92] = 0;
  _$jscoverage['middleware/logger.js'][93] = 0;
  _$jscoverage['middleware/logger.js'][94] = 0;
  _$jscoverage['middleware/logger.js'][96] = 0;
  _$jscoverage['middleware/logger.js'][100] = 0;
  _$jscoverage['middleware/logger.js'][103] = 0;
  _$jscoverage['middleware/logger.js'][106] = 0;
  _$jscoverage['middleware/logger.js'][109] = 0;
  _$jscoverage['middleware/logger.js'][113] = 0;
  _$jscoverage['middleware/logger.js'][114] = 0;
  _$jscoverage['middleware/logger.js'][120] = 0;
  _$jscoverage['middleware/logger.js'][121] = 0;
  _$jscoverage['middleware/logger.js'][122] = 0;
  _$jscoverage['middleware/logger.js'][123] = 0;
  _$jscoverage['middleware/logger.js'][128] = 0;
  _$jscoverage['middleware/logger.js'][130] = 0;
  _$jscoverage['middleware/logger.js'][135] = 0;
  _$jscoverage['middleware/logger.js'][136] = 0;
  _$jscoverage['middleware/logger.js'][139] = 0;
  _$jscoverage['middleware/logger.js'][140] = 0;
  _$jscoverage['middleware/logger.js'][141] = 0;
  _$jscoverage['middleware/logger.js'][142] = 0;
  _$jscoverage['middleware/logger.js'][145] = 0;
  _$jscoverage['middleware/logger.js'][146] = 0;
  _$jscoverage['middleware/logger.js'][147] = 0;
  _$jscoverage['middleware/logger.js'][148] = 0;
  _$jscoverage['middleware/logger.js'][149] = 0;
  _$jscoverage['middleware/logger.js'][150] = 0;
  _$jscoverage['middleware/logger.js'][151] = 0;
  _$jscoverage['middleware/logger.js'][156] = 0;
  _$jscoverage['middleware/logger.js'][168] = 0;
  _$jscoverage['middleware/logger.js'][169] = 0;
  _$jscoverage['middleware/logger.js'][170] = 0;
  _$jscoverage['middleware/logger.js'][171] = 0;
  _$jscoverage['middleware/logger.js'][173] = 0;
  _$jscoverage['middleware/logger.js'][174] = 0;
  _$jscoverage['middleware/logger.js'][186] = 0;
  _$jscoverage['middleware/logger.js'][187] = 0;
  _$jscoverage['middleware/logger.js'][188] = 0;
  _$jscoverage['middleware/logger.js'][200] = 0;
  _$jscoverage['middleware/logger.js'][201] = 0;
  _$jscoverage['middleware/logger.js'][202] = 0;
  _$jscoverage['middleware/logger.js'][209] = 0;
  _$jscoverage['middleware/logger.js'][215] = 0;
  _$jscoverage['middleware/logger.js'][221] = 0;
  _$jscoverage['middleware/logger.js'][227] = 0;
  _$jscoverage['middleware/logger.js'][228] = 0;
  _$jscoverage['middleware/logger.js'][232] = 0;
  _$jscoverage['middleware/logger.js'][233] = 0;
  _$jscoverage['middleware/logger.js'][234] = 0;
  _$jscoverage['middleware/logger.js'][236] = 0;
  _$jscoverage['middleware/logger.js'][240] = 0;
  _$jscoverage['middleware/logger.js'][253] = 0;
  _$jscoverage['middleware/logger.js'][254] = 0;
  _$jscoverage['middleware/logger.js'][261] = 0;
  _$jscoverage['middleware/logger.js'][262] = 0;
  _$jscoverage['middleware/logger.js'][269] = 0;
  _$jscoverage['middleware/logger.js'][270] = 0;
  _$jscoverage['middleware/logger.js'][277] = 0;
  _$jscoverage['middleware/logger.js'][278] = 0;
  _$jscoverage['middleware/logger.js'][285] = 0;
  _$jscoverage['middleware/logger.js'][286] = 0;
  _$jscoverage['middleware/logger.js'][293] = 0;
  _$jscoverage['middleware/logger.js'][294] = 0;
  _$jscoverage['middleware/logger.js'][301] = 0;
  _$jscoverage['middleware/logger.js'][302] = 0;
  _$jscoverage['middleware/logger.js'][303] = 0;
  _$jscoverage['middleware/logger.js'][304] = 0;
  _$jscoverage['middleware/logger.js'][305] = 0;
  _$jscoverage['middleware/logger.js'][312] = 0;
  _$jscoverage['middleware/logger.js'][313] = 0;
  _$jscoverage['middleware/logger.js'][320] = 0;
  _$jscoverage['middleware/logger.js'][321] = 0;
  _$jscoverage['middleware/logger.js'][328] = 0;
  _$jscoverage['middleware/logger.js'][329] = 0;
  _$jscoverage['middleware/logger.js'][336] = 0;
  _$jscoverage['middleware/logger.js'][337] = 0;
}
_$jscoverage['middleware/logger.js'][12]++;
var bytes = require("bytes");
_$jscoverage['middleware/logger.js'][18]++;
var buf = [];
_$jscoverage['middleware/logger.js'][24]++;
var defaultBufferDuration = 1000;
_$jscoverage['middleware/logger.js'][90]++;
exports = module.exports = (function logger(options) {
  _$jscoverage['middleware/logger.js'][91]++;
  if ("object" == typeof options) {
    _$jscoverage['middleware/logger.js'][92]++;
    options = options || {};
  }
  else {
    _$jscoverage['middleware/logger.js'][93]++;
    if (options) {
      _$jscoverage['middleware/logger.js'][94]++;
      options = {format: options};
    }
    else {
      _$jscoverage['middleware/logger.js'][96]++;
      options = {};
    }
  }
  _$jscoverage['middleware/logger.js'][100]++;
  var immediate = options.immediate;
  _$jscoverage['middleware/logger.js'][103]++;
  var fmt = exports[options.format] || options.format || exports["default"];
  _$jscoverage['middleware/logger.js'][106]++;
  if ("function" != typeof fmt) {
    _$jscoverage['middleware/logger.js'][106]++;
    fmt = compile(fmt);
  }
  _$jscoverage['middleware/logger.js'][109]++;
  var stream = options.stream || process.stdout, buffer = options.buffer;
  _$jscoverage['middleware/logger.js'][113]++;
  if (buffer) {
    _$jscoverage['middleware/logger.js'][114]++;
    var realStream = stream, interval = "number" == typeof buffer? buffer: defaultBufferDuration;
    _$jscoverage['middleware/logger.js'][120]++;
    setInterval((function () {
  _$jscoverage['middleware/logger.js'][121]++;
  if (buf.length) {
    _$jscoverage['middleware/logger.js'][122]++;
    realStream.write(buf.join(""));
    _$jscoverage['middleware/logger.js'][123]++;
    buf.length = 0;
  }
}), interval);
    _$jscoverage['middleware/logger.js'][128]++;
    stream = {write: (function (str) {
  _$jscoverage['middleware/logger.js'][130]++;
  buf.push(str);
})};
  }
  _$jscoverage['middleware/logger.js'][135]++;
  return (function logger(req, res, next) {
  _$jscoverage['middleware/logger.js'][136]++;
  req._startTime = new Date();
  _$jscoverage['middleware/logger.js'][139]++;
  if (immediate) {
    _$jscoverage['middleware/logger.js'][140]++;
    var line = fmt(exports, req, res);
    _$jscoverage['middleware/logger.js'][141]++;
    if (null == line) {
      _$jscoverage['middleware/logger.js'][141]++;
      return;
    }
    _$jscoverage['middleware/logger.js'][142]++;
    stream.write(line + "\n");
  }
  else {
    _$jscoverage['middleware/logger.js'][145]++;
    var end = res.end;
    _$jscoverage['middleware/logger.js'][146]++;
    res.end = (function (chunk, encoding) {
  _$jscoverage['middleware/logger.js'][147]++;
  res.end = end;
  _$jscoverage['middleware/logger.js'][148]++;
  res.end(chunk, encoding);
  _$jscoverage['middleware/logger.js'][149]++;
  var line = fmt(exports, req, res);
  _$jscoverage['middleware/logger.js'][150]++;
  if (null == line) {
    _$jscoverage['middleware/logger.js'][150]++;
    return;
  }
  _$jscoverage['middleware/logger.js'][151]++;
  stream.write(line + "\n");
});
  }
  _$jscoverage['middleware/logger.js'][156]++;
  next();
});
});
_$jscoverage['middleware/logger.js'][168]++;
function compile(fmt) {
  _$jscoverage['middleware/logger.js'][169]++;
  fmt = fmt.replace(/"/g, "\\\"");
  _$jscoverage['middleware/logger.js'][170]++;
  var js = "  return \"" + fmt.replace(/:([-\w]{2,})(?:\[([^\]]+)\])?/g, (function (_, name, arg) {
  _$jscoverage['middleware/logger.js'][171]++;
  return "\"\n    + (tokens[\"" + name + "\"](req, res, \"" + arg + "\") || \"-\") + \"";
})) + "\";";
  _$jscoverage['middleware/logger.js'][173]++;
  return new Function("tokens, req, res", js);
}
_$jscoverage['middleware/logger.js'][174]++;
;
_$jscoverage['middleware/logger.js'][186]++;
exports.token = (function (name, fn) {
  _$jscoverage['middleware/logger.js'][187]++;
  exports[name] = fn;
  _$jscoverage['middleware/logger.js'][188]++;
  return this;
});
_$jscoverage['middleware/logger.js'][200]++;
exports.format = (function (name, str) {
  _$jscoverage['middleware/logger.js'][201]++;
  exports[name] = str;
  _$jscoverage['middleware/logger.js'][202]++;
  return this;
});
_$jscoverage['middleware/logger.js'][209]++;
exports.format("default", ":remote-addr - - [:date] \":method :url HTTP/:http-version\" :status :res[content-length] \":referrer\" \":user-agent\"");
_$jscoverage['middleware/logger.js'][215]++;
exports.format("short", ":remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms");
_$jscoverage['middleware/logger.js'][221]++;
exports.format("tiny", ":method :url :status :res[content-length] - :response-time ms");
_$jscoverage['middleware/logger.js'][227]++;
exports.format("dev", (function (tokens, req, res) {
  _$jscoverage['middleware/logger.js'][228]++;
  var status = res.statusCode, len = parseInt(res.getHeader("Content-Length"), 10), color = 32;
  _$jscoverage['middleware/logger.js'][232]++;
  if (status >= 500) {
    _$jscoverage['middleware/logger.js'][232]++;
    color = 31;
  }
  else {
    _$jscoverage['middleware/logger.js'][233]++;
    if (status >= 400) {
      _$jscoverage['middleware/logger.js'][233]++;
      color = 33;
    }
    else {
      _$jscoverage['middleware/logger.js'][234]++;
      if (status >= 300) {
        _$jscoverage['middleware/logger.js'][234]++;
        color = 36;
      }
    }
  }
  _$jscoverage['middleware/logger.js'][236]++;
  len = isNaN(len)? "": len = " - " + bytes(len);
  _$jscoverage['middleware/logger.js'][240]++;
  return "\u001b[90m" + req.method + " " + req.originalUrl + " " + "\u001b[" + color + "m" + res.statusCode + " \u001b[90m" + (new Date() - req._startTime) + "ms" + len + "\u001b[0m";
}));
_$jscoverage['middleware/logger.js'][253]++;
exports.token("url", (function (req) {
  _$jscoverage['middleware/logger.js'][254]++;
  return req.originalUrl || req.url;
}));
_$jscoverage['middleware/logger.js'][261]++;
exports.token("method", (function (req) {
  _$jscoverage['middleware/logger.js'][262]++;
  return req.method;
}));
_$jscoverage['middleware/logger.js'][269]++;
exports.token("response-time", (function (req) {
  _$jscoverage['middleware/logger.js'][270]++;
  return new Date() - req._startTime;
}));
_$jscoverage['middleware/logger.js'][277]++;
exports.token("date", (function () {
  _$jscoverage['middleware/logger.js'][278]++;
  return new Date().toUTCString();
}));
_$jscoverage['middleware/logger.js'][285]++;
exports.token("status", (function (req, res) {
  _$jscoverage['middleware/logger.js'][286]++;
  return res.statusCode;
}));
_$jscoverage['middleware/logger.js'][293]++;
exports.token("referrer", (function (req) {
  _$jscoverage['middleware/logger.js'][294]++;
  return req.headers.referer || req.headers.referrer;
}));
_$jscoverage['middleware/logger.js'][301]++;
exports.token("remote-addr", (function (req) {
  _$jscoverage['middleware/logger.js'][302]++;
  if (req.ip) {
    _$jscoverage['middleware/logger.js'][302]++;
    return req.ip;
  }
  _$jscoverage['middleware/logger.js'][303]++;
  var sock = req.socket;
  _$jscoverage['middleware/logger.js'][304]++;
  if (sock.socket) {
    _$jscoverage['middleware/logger.js'][304]++;
    return sock.socket.remoteAddress;
  }
  _$jscoverage['middleware/logger.js'][305]++;
  return sock.remoteAddress;
}));
_$jscoverage['middleware/logger.js'][312]++;
exports.token("http-version", (function (req) {
  _$jscoverage['middleware/logger.js'][313]++;
  return req.httpVersionMajor + "." + req.httpVersionMinor;
}));
_$jscoverage['middleware/logger.js'][320]++;
exports.token("user-agent", (function (req) {
  _$jscoverage['middleware/logger.js'][321]++;
  return req.headers["user-agent"];
}));
_$jscoverage['middleware/logger.js'][328]++;
exports.token("req", (function (req, res, field) {
  _$jscoverage['middleware/logger.js'][329]++;
  return req.headers[field.toLowerCase()];
}));
_$jscoverage['middleware/logger.js'][336]++;
exports.token("res", (function (req, res, field) {
  _$jscoverage['middleware/logger.js'][337]++;
  return (res._headers || {})[field.toLowerCase()];
}));
_$jscoverage['middleware/logger.js'].source = ["/*!"," * Connect - logger"," * Copyright(c) 2010 Sencha Inc."," * Copyright(c) 2011 TJ Holowaychuk"," * MIT Licensed"," */","","/**"," * Module dependencies."," */","","var bytes = require('bytes');","","/*!"," * Log buffer."," */","","var buf = [];","","/*!"," * Default log buffer duration."," */","","var defaultBufferDuration = 1000;","","/**"," * Logger:"," *"," * Log requests with the given `options` or a `format` string."," *"," * Options:"," *"," *   - `format`  Format string, see below for tokens"," *   - `stream`  Output stream, defaults to _stdout_"," *   - `buffer`  Buffer duration, defaults to 1000ms when _true_"," *   - `immediate`  Write log line on request instead of response (for response times)"," *"," * Tokens:"," *"," *   - `:req[header]` ex: `:req[Accept]`"," *   - `:res[header]` ex: `:res[Content-Length]`"," *   - `:http-version`"," *   - `:response-time`"," *   - `:remote-addr`"," *   - `:date`"," *   - `:method`"," *   - `:url`"," *   - `:referrer`"," *   - `:user-agent`"," *   - `:status`"," *"," * Formats:"," *"," *   Pre-defined formats that ship with connect:"," *"," *    - `default` ':remote-addr - - [:date] \":method :url HTTP/:http-version\" :status :res[content-length] \":referrer\" \":user-agent\"'"," *    - `short` ':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms'"," *    - `tiny`  ':method :url :status :res[content-length] - :response-time ms'"," *    - `dev` concise output colored by response status for development use"," *"," * Examples:"," *"," *      connect.logger() // default"," *      connect.logger('short')"," *      connect.logger('tiny')"," *      connect.logger({ immediate: true, format: 'dev' })"," *      connect.logger(':method :url - :referrer')"," *      connect.logger(':req[content-type] -&gt; :res[content-type]')"," *      connect.logger(function(tokens, req, res){ return 'some format string' })"," *"," * Defining Tokens:"," *"," *   To define a token, simply invoke `connect.logger.token()` with the"," *   name and a callback function. The value returned is then available"," *   as \":type\" in this case."," *"," *      connect.logger.token('type', function(req, res){ return req.headers['content-type']; })"," *"," * Defining Formats:"," *"," *   All default formats are defined this way, however it's public API as well:"," *"," *       connect.logger.format('name', 'string or function')"," *"," * @param {String|Function|Object} format or options"," * @return {Function}"," * @api public"," */","","exports = module.exports = function logger(options) {","  if ('object' == typeof options) {","    options = options || {};","  } else if (options) {","    options = { format: options };","  } else {","    options = {};","  }","","  // output on request instead of response","  var immediate = options.immediate;","","  // format name","  var fmt = exports[options.format] || options.format || exports.default;","","  // compile format","  if ('function' != typeof fmt) fmt = compile(fmt);","","  // options","  var stream = options.stream || process.stdout","    , buffer = options.buffer;","","  // buffering support","  if (buffer) {","    var realStream = stream","      , interval = 'number' == typeof buffer","        ? buffer","        : defaultBufferDuration;","","    // flush interval","    setInterval(function(){","      if (buf.length) {","        realStream.write(buf.join(''));","        buf.length = 0;","      }","    }, interval); ","","    // swap the stream","    stream = {","      write: function(str){","        buf.push(str);","      }","    };","  }","","  return function logger(req, res, next) {","    req._startTime = new Date;","","    // immediate","    if (immediate) {","      var line = fmt(exports, req, res);","      if (null == line) return;","      stream.write(line + '\\n');","    // proxy end to output logging","    } else {","      var end = res.end;","      res.end = function(chunk, encoding){","        res.end = end;","        res.end(chunk, encoding);","        var line = fmt(exports, req, res);","        if (null == line) return;","        stream.write(line + '\\n');","      };","    }","","","    next();","  };","};","","/**"," * Compile `fmt` into a function."," *"," * @param {String} fmt"," * @return {Function}"," * @api private"," */","","function compile(fmt) {","  fmt = fmt.replace(/\"/g, '\\\\\"');","  var js = '  return \"' + fmt.replace(/:([-\\w]{2,})(?:\\[([^\\]]+)\\])?/g, function(_, name, arg){","    return '\"\\n    + (tokens[\"' + name + '\"](req, res, \"' + arg + '\") || \"-\") + \"';","  }) + '\";'","  return new Function('tokens, req, res', js);","};","","/**"," * Define a token function with the given `name`,"," * and callback `fn(req, res)`."," *"," * @param {String} name"," * @param {Function} fn"," * @return {Object} exports for chaining"," * @api public"," */","","exports.token = function(name, fn) {","  exports[name] = fn;","  return this;","};","","/**"," * Define a `fmt` with the given `name`."," *"," * @param {String} name"," * @param {String|Function} fmt"," * @return {Object} exports for chaining"," * @api public"," */","","exports.format = function(name, str){","  exports[name] = str;","  return this;","};","","/**"," * Default format."," */","","exports.format('default', ':remote-addr - - [:date] \":method :url HTTP/:http-version\" :status :res[content-length] \":referrer\" \":user-agent\"');","","/**"," * Short format."," */","","exports.format('short', ':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms');","","/**"," * Tiny format."," */","","exports.format('tiny', ':method :url :status :res[content-length] - :response-time ms');","","/**"," * dev (colored)"," */","","exports.format('dev', function(tokens, req, res){","  var status = res.statusCode","    , len = parseInt(res.getHeader('Content-Length'), 10)","    , color = 32;","","  if (status &gt;= 500) color = 31","  else if (status &gt;= 400) color = 33","  else if (status &gt;= 300) color = 36;","","  len = isNaN(len)","    ? ''","    : len = ' - ' + bytes(len);","","  return '\\033[90m' + req.method","    + ' ' + req.originalUrl + ' '","    + '\\033[' + color + 'm' + res.statusCode","    + ' \\033[90m'","    + (new Date - req._startTime)","    + 'ms' + len","    + '\\033[0m';","});","","/**"," * request url"," */","","exports.token('url', function(req){","  return req.originalUrl || req.url;","});","","/**"," * request method"," */","","exports.token('method', function(req){","  return req.method;","});","","/**"," * response time in milliseconds"," */","","exports.token('response-time', function(req){","  return new Date - req._startTime;","});","","/**"," * UTC date"," */","","exports.token('date', function(){","  return new Date().toUTCString();","});","","/**"," * response status code"," */","","exports.token('status', function(req, res){","  return res.statusCode;","});","","/**"," * normalized referrer"," */","","exports.token('referrer', function(req){","  return req.headers['referer'] || req.headers['referrer'];","});","","/**"," * remote address"," */","","exports.token('remote-addr', function(req){","  if (req.ip) return req.ip;","  var sock = req.socket;","  if (sock.socket) return sock.socket.remoteAddress;","  return sock.remoteAddress;","});","","/**"," * HTTP version"," */","","exports.token('http-version', function(req){","  return req.httpVersionMajor + '.' + req.httpVersionMinor;","});","","/**"," * UA string"," */","","exports.token('user-agent', function(req){","  return req.headers['user-agent'];","});","","/**"," * request header"," */","","exports.token('req', function(req, res, field){","  return req.headers[field.toLowerCase()];","});","","/**"," * response header"," */","","exports.token('res', function(req, res, field){","  return (res._headers || {})[field.toLowerCase()];","});",""];
