add hw2
This commit is contained in:
118
node_modules/pino-std-serializers/lib/err-helpers.js
generated
vendored
Normal file
118
node_modules/pino-std-serializers/lib/err-helpers.js
generated
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
'use strict'
|
||||
|
||||
// **************************************************************
|
||||
// * Code initially copied/adapted from "pony-cause" npm module *
|
||||
// * Please upstream improvements there *
|
||||
// **************************************************************
|
||||
|
||||
const isErrorLike = (err) => {
|
||||
return err && typeof err.message === 'string'
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Error|{ cause?: unknown|(()=>err)}} err
|
||||
* @returns {Error|Object|undefined}
|
||||
*/
|
||||
const getErrorCause = (err) => {
|
||||
if (!err) return
|
||||
|
||||
/** @type {unknown} */
|
||||
// @ts-ignore
|
||||
const cause = err.cause
|
||||
|
||||
// VError / NError style causes
|
||||
if (typeof cause === 'function') {
|
||||
// @ts-ignore
|
||||
const causeResult = err.cause()
|
||||
|
||||
return isErrorLike(causeResult)
|
||||
? causeResult
|
||||
: undefined
|
||||
} else {
|
||||
return isErrorLike(cause)
|
||||
? cause
|
||||
: undefined
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal method that keeps a track of which error we have already added, to avoid circular recursion
|
||||
*
|
||||
* @private
|
||||
* @param {Error} err
|
||||
* @param {Set<Error>} seen
|
||||
* @returns {string}
|
||||
*/
|
||||
const _stackWithCauses = (err, seen) => {
|
||||
if (!isErrorLike(err)) return ''
|
||||
|
||||
const stack = err.stack || ''
|
||||
|
||||
// Ensure we don't go circular or crazily deep
|
||||
if (seen.has(err)) {
|
||||
return stack + '\ncauses have become circular...'
|
||||
}
|
||||
|
||||
const cause = getErrorCause(err)
|
||||
|
||||
if (cause) {
|
||||
seen.add(err)
|
||||
return (stack + '\ncaused by: ' + _stackWithCauses(cause, seen))
|
||||
} else {
|
||||
return stack
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Error} err
|
||||
* @returns {string}
|
||||
*/
|
||||
const stackWithCauses = (err) => _stackWithCauses(err, new Set())
|
||||
|
||||
/**
|
||||
* Internal method that keeps a track of which error we have already added, to avoid circular recursion
|
||||
*
|
||||
* @private
|
||||
* @param {Error} err
|
||||
* @param {Set<Error>} seen
|
||||
* @param {boolean} [skip]
|
||||
* @returns {string}
|
||||
*/
|
||||
const _messageWithCauses = (err, seen, skip) => {
|
||||
if (!isErrorLike(err)) return ''
|
||||
|
||||
const message = skip ? '' : (err.message || '')
|
||||
|
||||
// Ensure we don't go circular or crazily deep
|
||||
if (seen.has(err)) {
|
||||
return message + ': ...'
|
||||
}
|
||||
|
||||
const cause = getErrorCause(err)
|
||||
|
||||
if (cause) {
|
||||
seen.add(err)
|
||||
|
||||
// @ts-ignore
|
||||
const skipIfVErrorStyleCause = typeof err.cause === 'function'
|
||||
|
||||
return (message +
|
||||
(skipIfVErrorStyleCause ? '' : ': ') +
|
||||
_messageWithCauses(cause, seen, skipIfVErrorStyleCause))
|
||||
} else {
|
||||
return message
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Error} err
|
||||
* @returns {string}
|
||||
*/
|
||||
const messageWithCauses = (err) => _messageWithCauses(err, new Set())
|
||||
|
||||
module.exports = {
|
||||
isErrorLike,
|
||||
getErrorCause,
|
||||
stackWithCauses,
|
||||
messageWithCauses
|
||||
}
|
||||
48
node_modules/pino-std-serializers/lib/err-proto.js
generated
vendored
Normal file
48
node_modules/pino-std-serializers/lib/err-proto.js
generated
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
'use strict'
|
||||
|
||||
const seen = Symbol('circular-ref-tag')
|
||||
const rawSymbol = Symbol('pino-raw-err-ref')
|
||||
|
||||
const pinoErrProto = Object.create({}, {
|
||||
type: {
|
||||
enumerable: true,
|
||||
writable: true,
|
||||
value: undefined
|
||||
},
|
||||
message: {
|
||||
enumerable: true,
|
||||
writable: true,
|
||||
value: undefined
|
||||
},
|
||||
stack: {
|
||||
enumerable: true,
|
||||
writable: true,
|
||||
value: undefined
|
||||
},
|
||||
aggregateErrors: {
|
||||
enumerable: true,
|
||||
writable: true,
|
||||
value: undefined
|
||||
},
|
||||
raw: {
|
||||
enumerable: false,
|
||||
get: function () {
|
||||
return this[rawSymbol]
|
||||
},
|
||||
set: function (val) {
|
||||
this[rawSymbol] = val
|
||||
}
|
||||
}
|
||||
})
|
||||
Object.defineProperty(pinoErrProto, rawSymbol, {
|
||||
writable: true,
|
||||
value: {}
|
||||
})
|
||||
|
||||
module.exports = {
|
||||
pinoErrProto,
|
||||
pinoErrorSymbols: {
|
||||
seen,
|
||||
rawSymbol
|
||||
}
|
||||
}
|
||||
48
node_modules/pino-std-serializers/lib/err-with-cause.js
generated
vendored
Normal file
48
node_modules/pino-std-serializers/lib/err-with-cause.js
generated
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
'use strict'
|
||||
|
||||
module.exports = errWithCauseSerializer
|
||||
|
||||
const { isErrorLike } = require('./err-helpers')
|
||||
const { pinoErrProto, pinoErrorSymbols } = require('./err-proto')
|
||||
const { seen } = pinoErrorSymbols
|
||||
|
||||
const { toString } = Object.prototype
|
||||
|
||||
function errWithCauseSerializer (err) {
|
||||
if (!isErrorLike(err)) {
|
||||
return err
|
||||
}
|
||||
|
||||
err[seen] = undefined // tag to prevent re-looking at this
|
||||
const _err = Object.create(pinoErrProto)
|
||||
_err.type = toString.call(err.constructor) === '[object Function]'
|
||||
? err.constructor.name
|
||||
: err.name
|
||||
_err.message = err.message
|
||||
_err.stack = err.stack
|
||||
|
||||
if (Array.isArray(err.errors)) {
|
||||
_err.aggregateErrors = err.errors.map(err => errWithCauseSerializer(err))
|
||||
}
|
||||
|
||||
if (isErrorLike(err.cause) && !Object.prototype.hasOwnProperty.call(err.cause, seen)) {
|
||||
_err.cause = errWithCauseSerializer(err.cause)
|
||||
}
|
||||
|
||||
for (const key in err) {
|
||||
if (_err[key] === undefined) {
|
||||
const val = err[key]
|
||||
if (isErrorLike(val)) {
|
||||
if (!Object.prototype.hasOwnProperty.call(val, seen)) {
|
||||
_err[key] = errWithCauseSerializer(val)
|
||||
}
|
||||
} else {
|
||||
_err[key] = val
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete err[seen] // clean up tag in case err is serialized again later
|
||||
_err.raw = err
|
||||
return _err
|
||||
}
|
||||
45
node_modules/pino-std-serializers/lib/err.js
generated
vendored
Normal file
45
node_modules/pino-std-serializers/lib/err.js
generated
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
'use strict'
|
||||
|
||||
module.exports = errSerializer
|
||||
|
||||
const { messageWithCauses, stackWithCauses, isErrorLike } = require('./err-helpers')
|
||||
const { pinoErrProto, pinoErrorSymbols } = require('./err-proto')
|
||||
const { seen } = pinoErrorSymbols
|
||||
|
||||
const { toString } = Object.prototype
|
||||
|
||||
function errSerializer (err) {
|
||||
if (!isErrorLike(err)) {
|
||||
return err
|
||||
}
|
||||
|
||||
err[seen] = undefined // tag to prevent re-looking at this
|
||||
const _err = Object.create(pinoErrProto)
|
||||
_err.type = toString.call(err.constructor) === '[object Function]'
|
||||
? err.constructor.name
|
||||
: err.name
|
||||
_err.message = messageWithCauses(err)
|
||||
_err.stack = stackWithCauses(err)
|
||||
|
||||
if (Array.isArray(err.errors)) {
|
||||
_err.aggregateErrors = err.errors.map(err => errSerializer(err))
|
||||
}
|
||||
|
||||
for (const key in err) {
|
||||
if (_err[key] === undefined) {
|
||||
const val = err[key]
|
||||
if (isErrorLike(val)) {
|
||||
// We append cause messages and stacks to _err, therefore skipping causes here
|
||||
if (key !== 'cause' && !Object.prototype.hasOwnProperty.call(val, seen)) {
|
||||
_err[key] = errSerializer(val)
|
||||
}
|
||||
} else {
|
||||
_err[key] = val
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete err[seen] // clean up tag in case err is serialized again later
|
||||
_err.raw = err
|
||||
return _err
|
||||
}
|
||||
100
node_modules/pino-std-serializers/lib/req.js
generated
vendored
Normal file
100
node_modules/pino-std-serializers/lib/req.js
generated
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
'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)
|
||||
}
|
||||
}
|
||||
47
node_modules/pino-std-serializers/lib/res.js
generated
vendored
Normal file
47
node_modules/pino-std-serializers/lib/res.js
generated
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
'use strict'
|
||||
|
||||
module.exports = {
|
||||
mapHttpResponse,
|
||||
resSerializer
|
||||
}
|
||||
|
||||
const rawSymbol = Symbol('pino-raw-res-ref')
|
||||
const pinoResProto = Object.create({}, {
|
||||
statusCode: {
|
||||
enumerable: true,
|
||||
writable: true,
|
||||
value: 0
|
||||
},
|
||||
headers: {
|
||||
enumerable: true,
|
||||
writable: true,
|
||||
value: ''
|
||||
},
|
||||
raw: {
|
||||
enumerable: false,
|
||||
get: function () {
|
||||
return this[rawSymbol]
|
||||
},
|
||||
set: function (val) {
|
||||
this[rawSymbol] = val
|
||||
}
|
||||
}
|
||||
})
|
||||
Object.defineProperty(pinoResProto, rawSymbol, {
|
||||
writable: true,
|
||||
value: {}
|
||||
})
|
||||
|
||||
function resSerializer (res) {
|
||||
const _res = Object.create(pinoResProto)
|
||||
_res.statusCode = res.headersSent ? res.statusCode : null
|
||||
_res.headers = res.getHeaders ? res.getHeaders() : res._headers
|
||||
_res.raw = res
|
||||
return _res
|
||||
}
|
||||
|
||||
function mapHttpResponse (res) {
|
||||
return {
|
||||
res: resSerializer(res)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user