diff --git a/lib/transport.js b/lib/transport.js index 39de490d8..d59b89706 100644 --- a/lib/transport.js +++ b/lib/transport.js @@ -2,7 +2,7 @@ const { createRequire } = require('module') const getCallers = require('./caller') -const { join, isAbsolute } = require('path') +const { join, isAbsolute, sep } = require('path') const sleep = require('atomic-sleep') const onExit = require('on-exit-leak-free') const ThreadStream = require('thread-stream') @@ -128,7 +128,11 @@ function transport (fullOptions) { for (const filePath of callers) { try { - fixTarget = createRequire(filePath).resolve(origin) + const context = filePath === 'node:repl' + ? process.cwd() + sep + : filePath + + fixTarget = createRequire(context).resolve(origin) break } catch (err) { // Silent catch diff --git a/test/transport/repl.test.js b/test/transport/repl.test.js new file mode 100644 index 000000000..103beade7 --- /dev/null +++ b/test/transport/repl.test.js @@ -0,0 +1,14 @@ +'use strict' + +const { doesNotThrow, test } = require('tap') +const proxyquire = require('proxyquire') + +test('pino.transport resolves targets in REPL', async ({ same }) => { + // Arrange + const transport = proxyquire('../../lib/transport', { + './caller': () => ['node:repl'] + }) + + // Act / Assert + doesNotThrow(() => transport({ target: 'pino-pretty' })) +})