diff --git a/packages/vite-node/src/source-map-handler.ts b/packages/vite-node/src/source-map-handler.ts index 724013e09..533357efa 100644 --- a/packages/vite-node/src/source-map-handler.ts +++ b/packages/vite-node/src/source-map-handler.ts @@ -177,10 +177,11 @@ function mapSourcePosition(position: OriginalMapping) { if (!sourceMap) { // Call the (overridable) retrieveSourceMap function to get the source map. const urlAndMap = retrieveSourceMap(position.source) - if (urlAndMap && urlAndMap.map) { + const map = urlAndMap && urlAndMap.map + if (map && !(typeof map === 'object' && 'mappings' in map && map.mappings === '')) { sourceMap = sourceMapCache[position.source] = { url: urlAndMap.url, - map: new TraceMap(urlAndMap.map), + map: new TraceMap(map), } // Load all sources stored inline with the source map into the file cache diff --git a/test/vite-node/src/empty-mappings/main.ts b/test/vite-node/src/empty-mappings/main.ts new file mode 100644 index 000000000..94b611d2d --- /dev/null +++ b/test/vite-node/src/empty-mappings/main.ts @@ -0,0 +1,2 @@ +// eslint-disable-next-line no-console +console.log(new Error('[ok]').stack) diff --git a/test/vite-node/src/empty-mappings/vite.config.ts b/test/vite-node/src/empty-mappings/vite.config.ts new file mode 100644 index 000000000..8d7d10f96 --- /dev/null +++ b/test/vite-node/src/empty-mappings/vite.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'vite' + +export default defineConfig({ + plugins: [ + { + name: 'repro', + transform(code, id) { + if (id.endsWith('/empty-mappings/main.ts')) { + return { code, map: { mappings: '' } } + } + }, + }, + ], +}) diff --git a/test/vite-node/test/cli.test.ts b/test/vite-node/test/cli.test.ts index de28516c8..3e496d54d 100644 --- a/test/vite-node/test/cli.test.ts +++ b/test/vite-node/test/cli.test.ts @@ -74,3 +74,9 @@ it('buildStart with all ssr', async () => { ) await result.viteNode.waitForStdout('["buildStart:in","buildStart:out"]') }) + +it('empty mappings', async () => { + const root = resolve(__dirname, '../src/empty-mappings') + const result = await runViteNodeCli('--root', root, resolve(root, 'main.ts')) + await result.viteNode.waitForStdout('[ok]') +})