/
home
/
techb158
/
trello.abdallabala.com
/
node_modules
/
morgan
/
/home/techb158/trello.abdallabala.com/node_modules/morgan
mkdir
upload
Name
Size
Mode
Actions
index.js
11614
0644
edit
dl
rm
LICENSE
1172
0644
edit
dl
rm
package.json
1375
0644
edit
dl
rm
README.md
11760
0644
edit
dl
rm
Edit:
/home/techb158/trello.abdallabala.com/node_modules/morgan/index.js
(11614B)
/*! * morgan * Copyright(c) 2010 Sencha Inc. * Copyright(c) 2011 TJ Holowaychuk * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2014-2017 Douglas Christopher Wilson * MIT Licensed */ 'use strict' /** * Module exports. * @public */ module.exports = morgan module.exports.compile = compile module.exports.format = format module.exports.token = token /** * Module dependencies. * @private */ var auth = require('basic-auth') var debug = require('debug')('morgan') var deprecate = require('depd')('morgan') var onFinished = require('on-finished') var onHeaders = require('on-headers') /** * Array of CLF month names. * @private */ var CLF_MONTH = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ] /** * Default log buffer duration. * @private */ var DEFAULT_BUFFER_DURATION = 1000 /** * Escape control characters and backslashes so a value is safe for * line-oriented logs. * @private * * @param {*} value Value to escape. * @returns {string|undefined} Escaped string, or undefined for null/undefined. */ function escapeLogField (value) { if (value == null) return undefined // eslint-disable-next-line no-control-regex return String(value).replace(/[\u0000-\u001f\u007f\\]/g, function (ch) { switch (ch) { case '\\': return '\\\\' case '\b': return '\\b' case '\f': return '\\f' case '\n': return '\\n' case '\r': return '\\r' case '\t': return '\\t' default: return '\\u' + ('0000' + ch.charCodeAt(0).toString(16)).slice(-4) } }) } /** * Create a logger middleware. * * @public * @param {String|Function} format * @param {Object} [options] * @return {Function} middleware */ function morgan (format, options) { var fmt = format var opts = options || {} if (format && typeof format === 'object') { opts = format fmt = opts.format || 'default' // smart deprecation message deprecate('morgan(options): use morgan(' + (typeof fmt === 'string' ? JSON.stringify(fmt) : 'format') + ', options) instead') } if (fmt === undefined) { deprecate('undefined format: specify a format') } // output on request instead of response var immediate = opts.immediate // check if log entry should be skipped var skip = opts.skip || false // format function var formatLine = typeof fmt !== 'function' ? getFormatFunction(fmt) : fmt // stream var buffer = opts.buffer var stream = opts.stream || process.stdout // buffering support if (buffer) { deprecate('buffer option') // flush interval var interval = typeof buffer !== 'number' ? DEFAULT_BUFFER_DURATION : buffer // swap the stream stream = createBufferStream(stream, interval) } return function logger (req, res, next) { // request data req._startAt = undefined req._startTime = undefined req._remoteAddress = getip(req) // response data res._startAt = undefined res._startTime = undefined // record request start recordStartTime.call(req) function logRequest () { if (skip !== false && skip(req, res)) { debug('skip request') return } var line = formatLine(morgan, req, res) if (line == null) { debug('skip line') return } debug('log request') stream.write(line + '\n') }; if (immediate) { // immediate log logRequest() } else { // record response start onHeaders(res, recordStartTime) // log when response finished onFinished(res, logRequest) } next() } } /** * Apache combined log format. */ morgan.format('combined', ':remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"') /** * Apache common log format. */ morgan.format('common', ':remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length]') /** * Default format. */ morgan.format('default', ':remote-addr - :remote-user [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"') deprecate.property(morgan, 'default', 'default format: use combined format') /** * Short format. */ morgan.format('short', ':remote-addr :remote-user :method :url HTTP/:http-version :status :res[content-length] - :response-time ms') /** * Tiny format. */ morgan.format('tiny', ':method :url :status :res[content-length] - :response-time ms') /** * dev (colored) */ morgan.format('dev', function developmentFormatLine (tokens, req, res) { // get the status code if response written var status = headersSent(res) ? res.statusCode : undefined // get status color var color = status >= 500 ? 31 // red : status >= 400 ? 33 // yellow : status >= 300 ? 36 // cyan : status >= 200 ? 32 // green : 0 // no color // get colored function var fn = developmentFormatLine[color] if (!fn) { // compile fn = developmentFormatLine[color] = compile('\x1b[0m:method :url \x1b[' + color + 'm:status\x1b[0m :response-time ms - :res[content-length]\x1b[0m') } return fn(tokens, req, res) }) /** * request url */ morgan.token('url', function getUrlToken (req) { return req.originalUrl || req.url }) /** * request method */ morgan.token('method', function getMethodToken (req) { return req.method }) /** * response time in milliseconds */ morgan.token('response-time', function getResponseTimeToken (req, res, digits) { if (!req._startAt || !res._startAt) { // missing request and/or response start time return } // calculate diff var ms = (res._startAt[0] - req._startAt[0]) * 1e3 + (res._startAt[1] - req._startAt[1]) * 1e-6 // return truncated value return ms.toFixed(digits === undefined ? 3 : digits) }) /** * total time in milliseconds */ morgan.token('total-time', function getTotalTimeToken (req, res, digits) { if (!req._startAt || !res._startAt) { // missing request and/or response start time return } // time elapsed from request start var elapsed = process.hrtime(req._startAt) // cover to milliseconds var ms = (elapsed[0] * 1e3) + (elapsed[1] * 1e-6) // return truncated value return ms.toFixed(digits === undefined ? 3 : digits) }) /** * current date */ morgan.token('date', function getDateToken (req, res, format) { var date = new Date() switch (format || 'web') { case 'clf': return clfdate(date) case 'iso': return date.toISOString() case 'web': return date.toUTCString() } }) /** * response status code */ morgan.token('status', function getStatusToken (req, res) { return headersSent(res) ? String(res.statusCode) : undefined }) /** * normalized referrer */ morgan.token('referrer', function getReferrerToken (req) { return req.headers.referer || req.headers.referrer }) /** * remote address */ morgan.token('remote-addr', getip) /** * remote user */ morgan.token('remote-user', function getRemoteUserToken (req) { // parse basic credentials var credentials = auth(req) // return username return credentials ? escapeLogField(credentials.name) : undefined }) /** * process id */ morgan.token('pid', function getPidToken (req) { return String(process.pid) }) /** * HTTP version */ morgan.token('http-version', function getHttpVersionToken (req) { return req.httpVersionMajor + '.' + req.httpVersionMinor }) /** * UA string */ morgan.token('user-agent', function getUserAgentToken (req) { return req.headers['user-agent'] }) /** * request header */ morgan.token('req', function getRequestToken (req, res, field) { // get header var header = req.headers[field.toLowerCase()] return Array.isArray(header) ? header.join(', ') : header }) /** * response header */ morgan.token('res', function getResponseHeader (req, res, field) { if (!headersSent(res)) { return undefined } // get header var header = res.getHeader(field) return Array.isArray(header) ? header.join(', ') : header }) /** * Format a Date in the common log format. * * @private * @param {Date} dateTime * @return {string} */ function clfdate (dateTime) { var date = dateTime.getUTCDate() var hour = dateTime.getUTCHours() var mins = dateTime.getUTCMinutes() var secs = dateTime.getUTCSeconds() var year = dateTime.getUTCFullYear() var month = CLF_MONTH[dateTime.getUTCMonth()] return pad2(date) + '/' + month + '/' + year + ':' + pad2(hour) + ':' + pad2(mins) + ':' + pad2(secs) + ' +0000' } /** * Compile a format string into a function. * * @param {string} format * @return {function} * @public */ function compile (format) { if (typeof format !== 'string') { throw new TypeError('argument format must be a string') } var fmt = String(JSON.stringify(format)) var js = ' "use strict"\n return ' + fmt.replace(/:([-\w]{2,})(?:\[([^\]]+)\])?/g, function (_, name, arg) { var tokenArguments = 'req, res' var tokenFunction = 'tokens[' + String(JSON.stringify(name)) + ']' if (arg !== undefined) { tokenArguments += ', ' + String(JSON.stringify(arg)) } return '" +\n (' + tokenFunction + '(' + tokenArguments + ') || "-") + "' }) // eslint-disable-next-line no-new-func return new Function('tokens, req, res', js) } /** * Create a basic buffering stream. * * @param {object} stream * @param {number} interval * @public */ function createBufferStream (stream, interval) { var buf = [] var timer = null // flush function function flush () { timer = null stream.write(buf.join('')) buf.length = 0 } // write function function write (str) { if (timer === null) { timer = setTimeout(flush, interval) } buf.push(str) } // return a minimal "stream" return { write: write } } /** * Define a format with the given name. * * @param {string} name * @param {string|function} fmt * @public */ function format (name, fmt) { morgan[name] = fmt return this } /** * Lookup and compile a named format function. * * @param {string} name * @return {function} * @public */ function getFormatFunction (name) { // lookup format var fmt = morgan[name] || name || morgan.default // return compiled format return typeof fmt !== 'function' ? compile(fmt) : fmt } /** * Get request IP address. * * @private * @param {IncomingMessage} req * @return {string} */ function getip (req) { return req.ip || req._remoteAddress || (req.connection && req.connection.remoteAddress) || undefined } /** * Determine if the response headers have been sent. * * @param {object} res * @returns {boolean} * @private */ function headersSent (res) { // istanbul ignore next: node.js 0.8 support return typeof res.headersSent !== 'boolean' ? Boolean(res._header) : res.headersSent } /** * Pad number to two digits. * * @private * @param {number} num * @return {string} */ function pad2 (num) { var str = String(num) // istanbul ignore next: num is current datetime return (str.length === 1 ? '0' : '') + str } /** * Record the start time. * @private */ function recordStartTime () { this._startAt = process.hrtime() this._startTime = new Date() } /** * Define a token function with the given name, * and callback fn(req, res). * * @param {string} name * @param {function} fn * @public */ function token (name, fn) { morgan[name] = fn return this }
Save
cmd:
run