From 83c7848b909b2c62283fabef396f1cb46f79160a Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Mon, 9 Apr 2018 08:22:13 +0200 Subject: [PATCH] Sourcemap sourceRoot (#1141) --- packages/core/parcel-bundler/src/SourceMap.js | 6 ++--- .../src/packagers/SourceMapPackager.js | 7 +++++- .../core/parcel-bundler/test/sourcemaps.js | 25 ++++++++++++++++--- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/packages/core/parcel-bundler/src/SourceMap.js b/packages/core/parcel-bundler/src/SourceMap.js index f3a06654a38..eee70281efe 100644 --- a/packages/core/parcel-bundler/src/SourceMap.js +++ b/packages/core/parcel-bundler/src/SourceMap.js @@ -278,10 +278,8 @@ class SourceMap { } } - stringify(file) { - let generator = new SourceMapGenerator({ - file: file - }); + stringify(file, sourceRoot) { + let generator = new SourceMapGenerator({file, sourceRoot}); this.eachMapping(mapping => generator.addMapping(mapping)); Object.keys(this.sources).forEach(sourceName => diff --git a/packages/core/parcel-bundler/src/packagers/SourceMapPackager.js b/packages/core/parcel-bundler/src/packagers/SourceMapPackager.js index 925e55dddc1..148c7f84553 100644 --- a/packages/core/parcel-bundler/src/packagers/SourceMapPackager.js +++ b/packages/core/parcel-bundler/src/packagers/SourceMapPackager.js @@ -16,7 +16,12 @@ class SourceMapPackager extends Packager { async end() { let file = path.basename(this.bundle.name); - await this.write(this.sourceMap.stringify(file)); + await this.write( + this.sourceMap.stringify( + file, + path.relative(this.options.outDir, this.options.rootDir) + ) + ); await super.end(); } } diff --git a/packages/core/parcel-bundler/test/sourcemaps.js b/packages/core/parcel-bundler/test/sourcemaps.js index cbd41a312ed..f9218a5e172 100644 --- a/packages/core/parcel-bundler/test/sourcemaps.js +++ b/packages/core/parcel-bundler/test/sourcemaps.js @@ -2,13 +2,14 @@ const assert = require('assert'); const fs = require('fs'); const path = require('path'); const mapValidator = require('sourcemap-validator'); -const {bundle, run, assertBundleTree} = require('./utils'); +const {bundler, bundle, run, assertBundleTree} = require('./utils'); describe('sourcemaps', function() { it('should create a valid sourcemap as a child of a JS bundle', async function() { - let b = await bundle(__dirname + '/integration/sourcemap/index.js'); + let b = bundler(__dirname + '/integration/sourcemap/index.js'); + let bu = await b.bundle(); - assertBundleTree(b, { + assertBundleTree(bu, { name: 'index.js', assets: ['index.js'], childBundles: [ @@ -26,8 +27,24 @@ describe('sourcemaps', function() { .readFileSync(path.join(__dirname, '/dist/index.map')) .toString(); mapValidator(raw, map); + let mapObject = JSON.parse(map); + assert( + mapObject.sourceRoot === + path.relative(b.options.outDir, b.options.rootDir), + 'sourceRoot should be the root of the source files, relative to the output directory.' + ); + assert( + fs.existsSync( + path.resolve( + b.options.outDir, + mapObject.sourceRoot, + mapObject.sources[0] + ) + ), + 'combining sourceRoot and sources object should resolve to the original file' + ); - let output = run(b); + let output = run(bu); assert.equal(typeof output, 'function'); assert.equal(output(), 'hello world'); });