From 63a08c54f64bfbade35b272e275f874303cd633d Mon Sep 17 00:00:00 2001 From: David Clark Date: Sat, 4 Oct 2014 17:05:52 -0700 Subject: [PATCH 1/2] Make sourcemap source paths relative to file.base; fixes #92. --- index.js | 19 ++++++++++---- test/scss/includes/_cats.scss | 6 ++++- test/scss/subdir/multilevelimport.scss | 1 + test/test.js | 36 +++++++++++++++++++++++++- 4 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 test/scss/subdir/multilevelimport.scss diff --git a/index.js b/index.js index e2ba1b1..19a0449 100644 --- a/index.js +++ b/index.js @@ -42,15 +42,24 @@ module.exports = function (options) { opts.includePaths = [fileDir]; } - opts.success = function (css, map) { - var sourceMap; - if (typeof opts.onSuccess === 'function') opts.onSuccess(css, map); + opts.success = function (css, sourceMap) { + if (typeof opts.onSuccess === 'function') opts.onSuccess(css, sourceMap); - if (map) { + if (sourceMap) { // hack to remove the already added sourceMappingURL from libsass css = css.replace(/\/\*#\s*sourceMappingURL\=.*\*\//, ''); - applySourceMap(file, map); + // libsass gives us sources' paths relative to file; + // gulp-sourcemaps needs sources' paths relative to file.base; + // so alter the sources' paths to please gulp-sourcemaps. + sourceMap = JSON.parse(sourceMap); + sourceMap.sources = sourceMap.sources.map(function(source) { + var abs = path.resolve(path.dirname(file.path), source); + return path.relative(file.base, abs); + }); + sourceMap = JSON.stringify(sourceMap); + + applySourceMap(file, sourceMap); } file.path = ext(file.path, '.css'); diff --git a/test/scss/includes/_cats.scss b/test/scss/includes/_cats.scss index 7096c21..5dd0283 100644 --- a/test/scss/includes/_cats.scss +++ b/test/scss/includes/_cats.scss @@ -1,2 +1,6 @@ $blue: #3bbfce; -$margin: 16px; \ No newline at end of file +$margin: 16px; + +body { + background: pink; +} diff --git a/test/scss/subdir/multilevelimport.scss b/test/scss/subdir/multilevelimport.scss new file mode 100644 index 0000000..4b7c1c3 --- /dev/null +++ b/test/scss/subdir/multilevelimport.scss @@ -0,0 +1 @@ +@import "../inheritance"; diff --git a/test/test.js b/test/test.js index 978c0a5..17d86bc 100644 --- a/test/test.js +++ b/test/test.js @@ -4,6 +4,7 @@ var gutil = require('gulp-util'); var fs = require('fs'); var path = require('path'); var test = require('tape'); +var sourcemap = require('source-map'); function createVinyl(sassFileName, contents) { var base = path.join(__dirname, 'scss'); @@ -106,4 +107,37 @@ test('call custom error callback when opts.onError is given', function (t) { new Buffer('body { font \'Comic Sans\'; }')); stream.write(errorFile); -}); \ No newline at end of file +}); + +test('sourcemaps', function (t) { + var sassFile = createVinyl('subdir/multilevelimport.scss'); + + // Pretend sourcemap.init() happened by mimicking + // the object it would create. + sassFile.sourceMap = { + version: 3, + file: 'scss/subdir/multilevelimport.scss', + names: [], + mappings: '', + sources: [ 'scss/subdir/multilevelimport.scss' ], + sourcesContent: [ '@import "../inheritance";\n' ] + }; + + // Expected sources are relative to file.base + var expectedSources = [ + 'includes/_cats.scss', + 'inheritance.scss' + ]; + + var stream = gsass(); + + stream.on('data', function (cssFile) { + t.deepEqual( + cssFile.sourceMap.sources, + expectedSources, + 'sourcemap paths are relative to file.base' + ); + t.end(); + }); + stream.write(sassFile); +}); From 050724dfd50dca69db5bcbc0c7e442fbd350abb1 Mon Sep 17 00:00:00 2001 From: David Clark Date: Mon, 6 Oct 2014 10:29:39 -0700 Subject: [PATCH 2/2] Update test.js --- test/test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test.js b/test/test.js index 17d86bc..810a7c2 100644 --- a/test/test.js +++ b/test/test.js @@ -4,7 +4,6 @@ var gutil = require('gulp-util'); var fs = require('fs'); var path = require('path'); var test = require('tape'); -var sourcemap = require('source-map'); function createVinyl(sassFileName, contents) { var base = path.join(__dirname, 'scss');