101 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
'use strict'
 | 
						|
 | 
						|
module.exports = {
 | 
						|
  mapHttpRequest,
 | 
						|
  reqSerializer
 | 
						|
}
 | 
						|
 | 
						|
const rawSymbol = Symbol('pino-raw-req-ref')
 | 
						|
const pinoReqProto = Object.create({}, {
 | 
						|
  id: {
 | 
						|
    enumerable: true,
 | 
						|
    writable: true,
 | 
						|
    value: ''
 | 
						|
  },
 | 
						|
  method: {
 | 
						|
    enumerable: true,
 | 
						|
    writable: true,
 | 
						|
    value: ''
 | 
						|
  },
 | 
						|
  url: {
 | 
						|
    enumerable: true,
 | 
						|
    writable: true,
 | 
						|
    value: ''
 | 
						|
  },
 | 
						|
  query: {
 | 
						|
    enumerable: true,
 | 
						|
    writable: true,
 | 
						|
    value: ''
 | 
						|
  },
 | 
						|
  params: {
 | 
						|
    enumerable: true,
 | 
						|
    writable: true,
 | 
						|
    value: ''
 | 
						|
  },
 | 
						|
  headers: {
 | 
						|
    enumerable: true,
 | 
						|
    writable: true,
 | 
						|
    value: {}
 | 
						|
  },
 | 
						|
  remoteAddress: {
 | 
						|
    enumerable: true,
 | 
						|
    writable: true,
 | 
						|
    value: ''
 | 
						|
  },
 | 
						|
  remotePort: {
 | 
						|
    enumerable: true,
 | 
						|
    writable: true,
 | 
						|
    value: ''
 | 
						|
  },
 | 
						|
  raw: {
 | 
						|
    enumerable: false,
 | 
						|
    get: function () {
 | 
						|
      return this[rawSymbol]
 | 
						|
    },
 | 
						|
    set: function (val) {
 | 
						|
      this[rawSymbol] = val
 | 
						|
    }
 | 
						|
  }
 | 
						|
})
 | 
						|
Object.defineProperty(pinoReqProto, rawSymbol, {
 | 
						|
  writable: true,
 | 
						|
  value: {}
 | 
						|
})
 | 
						|
 | 
						|
function reqSerializer (req) {
 | 
						|
  // req.info is for hapi compat.
 | 
						|
  const connection = req.info || req.socket
 | 
						|
  const _req = Object.create(pinoReqProto)
 | 
						|
  _req.id = (typeof req.id === 'function' ? req.id() : (req.id || (req.info ? req.info.id : undefined)))
 | 
						|
  _req.method = req.method
 | 
						|
  // req.originalUrl is for expressjs compat.
 | 
						|
  if (req.originalUrl) {
 | 
						|
    _req.url = req.originalUrl
 | 
						|
  } else {
 | 
						|
    const path = req.path
 | 
						|
    // path for safe hapi compat.
 | 
						|
    _req.url = typeof path === 'string' ? path : (req.url ? req.url.path || req.url : undefined)
 | 
						|
  }
 | 
						|
 | 
						|
  if (req.query) {
 | 
						|
    _req.query = req.query
 | 
						|
  }
 | 
						|
 | 
						|
  if (req.params) {
 | 
						|
    _req.params = req.params
 | 
						|
  }
 | 
						|
 | 
						|
  _req.headers = req.headers
 | 
						|
  _req.remoteAddress = connection && connection.remoteAddress
 | 
						|
  _req.remotePort = connection && connection.remotePort
 | 
						|
  // req.raw is  for hapi compat/equivalence
 | 
						|
  _req.raw = req.raw || req
 | 
						|
  return _req
 | 
						|
}
 | 
						|
 | 
						|
function mapHttpRequest (req) {
 | 
						|
  return {
 | 
						|
    req: reqSerializer(req)
 | 
						|
  }
 | 
						|
}
 |