diff --git a/src/generators/Generator.js b/src/generators/Generator.js index 8568a515e7..995c39dd23 100644 --- a/src/generators/Generator.js +++ b/src/generators/Generator.js @@ -149,6 +149,15 @@ export default class Generator { const { filename } = options; + // special case — the source file doesn't actually get used anywhere. we need + // to add an empty file to populate map.sources and map.sourcesContent + if ( !parts.length ) { + compiled.addSource({ + filename, + content: new MagicString( this.source ).remove( 0, this.source.length ) + }); + } + parts.forEach( str => { const chunk = str.replace( pattern, '' ); if ( chunk ) addString( chunk ); @@ -168,7 +177,7 @@ export default class Generator { return { code: compiled.toString(), - map: compiled.generateMap({ includeContent: true }) + map: compiled.generateMap({ includeContent: true, file: options.outputFilename }) }; } diff --git a/test/sourcemaps.js b/test/sourcemaps.js index bafaf11a8a..80d5edb315 100644 --- a/test/sourcemaps.js +++ b/test/sourcemaps.js @@ -1,4 +1,5 @@ import * as fs from 'fs'; +import * as path from 'path'; import assert from 'assert'; import { svelte, exists } from './helpers.js'; import { SourceMapConsumer } from 'source-map'; @@ -15,11 +16,19 @@ describe( 'sourcemaps', () => { } ( solo ? it.only : it )( dir, () => { - const input = fs.readFileSync( `test/sourcemaps/${dir}/input.html`, 'utf-8' ).replace( /\s+$/, '' ); - const { code, map } = svelte.compile( input ); + const filename = path.resolve( `test/sourcemaps/${dir}/input.html` ); + const outputFilename = path.resolve( `test/sourcemaps/${dir}/output.js` ); - fs.writeFileSync( `test/sourcemaps/${dir}/output.js`, `${code}\n//# sourceMappingURL=output.js.map` ); - fs.writeFileSync( `test/sourcemaps/${dir}/output.js.map`, JSON.stringify( map, null, ' ' ) ); + const input = fs.readFileSync( filename, 'utf-8' ).replace( /\s+$/, '' ); + const { code, map } = svelte.compile( input, { + filename, + outputFilename + }); + + fs.writeFileSync( outputFilename, `${code}\n//# sourceMappingURL=output.js.map` ); + fs.writeFileSync( `${outputFilename}.map`, JSON.stringify( map, null, ' ' ) ); + + assert.deepEqual( map.sources, [ 'input.html' ]); const { test } = require( `./sourcemaps/${dir}/test.js` ); diff --git a/test/sourcemaps/basic/test.js b/test/sourcemaps/basic/test.js index b169b04f7a..a8803c0063 100644 --- a/test/sourcemaps/basic/test.js +++ b/test/sourcemaps/basic/test.js @@ -12,7 +12,7 @@ export function test ({ assert, smc, locateInSource, locateInGenerated }) { }); assert.deepEqual( actual, { - source: 'SvelteComponent.html', + source: 'input.html', name: null, line: expected.line + 1, column: expected.column @@ -26,7 +26,7 @@ export function test ({ assert, smc, locateInSource, locateInGenerated }) { }); assert.deepEqual( actual, { - source: 'SvelteComponent.html', + source: 'input.html', name: null, line: expected.line + 1, column: expected.column diff --git a/test/sourcemaps/script/test.js b/test/sourcemaps/script/test.js index 6b14b91a9d..80468b23bf 100644 --- a/test/sourcemaps/script/test.js +++ b/test/sourcemaps/script/test.js @@ -8,7 +8,7 @@ export function test ({ assert, smc, locateInSource, locateInGenerated }) { }); assert.deepEqual( actual, { - source: 'SvelteComponent.html', + source: 'input.html', name: null, line: expected.line + 1, column: expected.column diff --git a/test/sourcemaps/static-no-script/input.html b/test/sourcemaps/static-no-script/input.html new file mode 100644 index 0000000000..1e2d597971 --- /dev/null +++ b/test/sourcemaps/static-no-script/input.html @@ -0,0 +1 @@ +
no moving parts
\ No newline at end of file diff --git a/test/sourcemaps/static-no-script/test.js b/test/sourcemaps/static-no-script/test.js new file mode 100644 index 0000000000..0a989619ac --- /dev/null +++ b/test/sourcemaps/static-no-script/test.js @@ -0,0 +1,9 @@ +const fs = require( 'fs' ); +const path = require( 'path' ); + +export function test ({ assert, map }) { + assert.deepEqual( map.sources, [ 'input.html' ]); + assert.deepEqual( map.sourcesContent, [ + fs.readFileSync( path.join( __dirname, 'input.html' ), 'utf-8' ) + ]); +}