From 3abf814c96656f8f5c7794122ee108abd08f3401 Mon Sep 17 00:00:00 2001 From: Chris Nielsen Date: Thu, 29 Jun 2023 05:56:32 -0400 Subject: [PATCH] Issue #1735 - Programmatic Integration as a transport fails (#1739) * fix: Support REPL * test: Add a unit test --- lib/transport.js | 8 ++++++-- test/transport/repl.test.js | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 test/transport/repl.test.js 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' })) +})