Skip to content

Commit 0466fb2

Browse files
EommShogunPandamcollina
authoredDec 15, 2021
fix: improved caller detection (#1267)
* feat: Improve caller detection. * fix: Use strict mode. Co-authored-by: Matteo Collina <matteo.collina@gmail.com> * fix: Removed unused dependency. * wip: adding integration test * add tests * add eval test Co-authored-by: Shogun <ShogunPanda@users.noreply.github.com> Co-authored-by: Matteo Collina <matteo.collina@gmail.com>
1 parent 907c9cd commit 0466fb2

File tree

6 files changed

+62
-3
lines changed

6 files changed

+62
-3
lines changed
 

‎lib/caller.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'use strict'
2+
3+
function noOpPrepareStackTrace (_, stack) {
4+
return stack
5+
}
6+
7+
module.exports = function getCaller () {
8+
const originalPrepare = Error.prepareStackTrace
9+
Error.prepareStackTrace = noOpPrepareStackTrace
10+
const stack = new Error().stack
11+
Error.prepareStackTrace = originalPrepare
12+
13+
if (!Array.isArray(stack)) {
14+
return undefined
15+
}
16+
17+
for (const entry of stack.slice(2)) {
18+
const file = entry ? entry.getFileName() : undefined
19+
20+
if (file && file.indexOf('node_modules') === -1) {
21+
return file
22+
}
23+
}
24+
}

‎lib/transport.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const { createRequire } = require('module')
4-
const getCaller = require('get-caller-file')
4+
const getCaller = require('./caller')
55
const { join, isAbsolute } = require('path')
66

77
let onExit

‎package.json

-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@
104104
"dependencies": {
105105
"fast-redact": "^3.0.0",
106106
"fastify-warning": "^0.2.0",
107-
"get-caller-file": "^2.0.5",
108107
"on-exit-leak-free": "^0.2.0",
109108
"pino-abstract-transport": "v0.5.0",
110109
"pino-std-serializers": "^4.0.0",

‎pino.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/* eslint no-prototype-builtins: 0 */
33
const os = require('os')
44
const stdSerializers = require('pino-std-serializers')
5-
const caller = require('get-caller-file')
5+
const caller = require('./lib/caller')
66
const redaction = require('./lib/redaction')
77
const time = require('./lib/time')
88
const proto = require('./lib/proto')

‎test/fixtures/eval.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/* eslint-disable no-eval */
2+
3+
eval(`
4+
const pino = require('../../')
5+
6+
const logger = pino(
7+
pino.transport({
8+
target: 'pino-pretty'
9+
})
10+
)
11+
12+
logger.info('done!')
13+
`)

‎test/transport/caller.test.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'use strict'
2+
3+
const writer = require('flush-write-stream')
4+
const { join } = require('path')
5+
const { test } = require('tap')
6+
const execa = require('execa')
7+
8+
const { once } = require('../helper')
9+
10+
test('app using a custom transport', async function (t) {
11+
const evalApp = join(__dirname, '../', '/fixtures/eval')
12+
const child = execa(process.argv[0], [evalApp])
13+
14+
let actual = ''
15+
child.stdout.pipe(writer((s, enc, cb) => {
16+
actual += s
17+
cb()
18+
}))
19+
20+
await once(child, 'close')
21+
22+
t.match(actual, /done!/)
23+
})

0 commit comments

Comments
 (0)
Please sign in to comment.