From 7f5f92773de79a620257168f0c4c8178ae4d5a89 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Wed, 17 Jun 2026 17:17:44 +0100 Subject: [PATCH 1/4] fix: Pass through sourcemaps --- lib/transformer.js | 5 ++--- tests/tests.test.mjs | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/transformer.js b/lib/transformer.js index 663e3cb..1e40320 100644 --- a/lib/transformer.js +++ b/lib/transformer.js @@ -134,12 +134,11 @@ class Transformer { } if (ast) { - SourceMapConsumer ??= require('source-map').SourceMapConsumer SourceMapGenerator ??= require('source-map').SourceMapGenerator const file = `${this.#moduleName}/${this.#filePath}` - const sourceMapInput = sourcemap ? new SourceMapConsumer(sourcemap) : { file } - const sourceMap = new SourceMapGenerator(sourceMapInput) + const sourceMap = new SourceMapGenerator({ file }) + const code = generate(ast, { sourceMap }) const map = sourceMap.toString() diff --git a/tests/tests.test.mjs b/tests/tests.test.mjs index 225bcb8..e2eccdc 100644 --- a/tests/tests.test.mjs +++ b/tests/tests.test.mjs @@ -516,6 +516,23 @@ describe('source_map', () => { assert.equal(original.line, originalReturnLine) assert.equal(original.column, originalReturnColumn) }) + + test('produces a valid sourcemap when an inputSourceMap is provided', () => { + const code = 'export class Undici { async fetch (url) { return 42; } }' + const inputSourceMap = { version: 3, sources: ['input.js'], mappings: 'AAAA', names: [] } + + const instrumentor = create([ + { + channelName: 'Undici:fetch', + module: { name: TEST_MODULE_NAME, versionRange: '>=0.0.1', filePath: TEST_MODULE_PATH }, + functionQuery: { className: 'Undici', methodName: 'fetch', kind: 'Async' }, + }, + ]) + const transformer = instrumentor.getTransformer(TEST_MODULE_NAME, TEST_MODULE_VERSION, TEST_MODULE_PATH) + const { map } = transformer.transform(code, 'esm', inputSourceMap) + + assert.equal(JSON.parse(map).file, `${TEST_MODULE_NAME}/${TEST_MODULE_PATH}`) + }) }) describe('wrap_promise_non_promise', () => { From 6dd009c1da72df62e4bb930eb42a1c91d0c7c999 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Wed, 17 Jun 2026 17:36:14 +0100 Subject: [PATCH 2/4] Fix lint --- lib/transformer.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/transformer.js b/lib/transformer.js index 1e40320..56d6676 100644 --- a/lib/transformer.js +++ b/lib/transformer.js @@ -5,7 +5,6 @@ const { parse } = require('meriyah') const { generate } = require('astring') const transforms = require('./transforms') -let SourceMapConsumer let SourceMapGenerator /** From 6f69d9f968d826116562b4fd549e8d6ca59c59d9 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Wed, 17 Jun 2026 18:02:42 +0100 Subject: [PATCH 3/4] Fix --- lib/transformer.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/transformer.js b/lib/transformer.js index 56d6676..76d6c4d 100644 --- a/lib/transformer.js +++ b/lib/transformer.js @@ -5,6 +5,7 @@ const { parse } = require('meriyah') const { generate } = require('astring') const transforms = require('./transforms') +let SourceMapConsumer let SourceMapGenerator /** @@ -133,13 +134,21 @@ class Transformer { } if (ast) { + SourceMapConsumer ??= require('source-map').SourceMapConsumer SourceMapGenerator ??= require('source-map').SourceMapGenerator const file = `${this.#moduleName}/${this.#filePath}` - const sourceMap = new SourceMapGenerator({ file }) + let generator + if (sourcemap) { + const consumer = new SourceMapConsumer(sourcemap) + consumer.file = file + generator = SourceMapGenerator.fromSourceMap(consumer) + } else { + generator = new SourceMapGenerator({ file }) + } - const code = generate(ast, { sourceMap }) - const map = sourceMap.toString() + const code = generate(ast, { sourceMap: generator }) + const map = generator.toString() return { code, map } } From 865f38924f2c24da92040fb1797aa6816a5202f5 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Wed, 17 Jun 2026 18:06:40 +0100 Subject: [PATCH 4/4] Improve types --- index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index 7d2ec98..380e404 100644 --- a/index.d.ts +++ b/index.d.ts @@ -123,5 +123,5 @@ export class Transformer { * # Errors * Returns an error if the transformation fails to find injection points. */ - transform(code: string | Buffer, moduleType: ModuleType, sourcemap?: string | null): TransformOutput; + transform(code: string | Buffer, moduleType: ModuleType, sourcemap?: string | object | null): TransformOutput; }