diff --git a/package.json b/package.json index 710acd5922..c304283eec 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "glob": "^7.1.1", "jsdom": "^9.9.1", "locate-character": "^2.0.0", - "magic-string": "^0.22.1", + "magic-string": "^0.22.3", "mocha": "^3.2.0", "node-resolve": "^1.3.3", "nyc": "^10.0.0", diff --git a/src/css/Stylesheet.ts b/src/css/Stylesheet.ts index ac9d5cee5a..4e61d7cd0e 100644 --- a/src/css/Stylesheet.ts +++ b/src/css/Stylesheet.ts @@ -175,6 +175,13 @@ export default class Stylesheet { code.remove(0, this.parsed.css.start + 7); code.remove(this.parsed.css.end - 8, this.source.length); + walk(this.parsed.css, { + enter: (node: Node) => { + code.addSourcemapLocation(node.start); + code.addSourcemapLocation(node.end); + } + }); + const keyframes = new Map(); this.atrules.forEach((atrule: Atrule) => { atrule.transform(code, this.id, keyframes); diff --git a/test/helpers.js b/test/helpers.js index 8087b173e4..0dfa43fa54 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -155,7 +155,7 @@ export function loadConfig(file) { delete require.cache[resolved]; return require(resolved).default; } catch (err) { - if (err.code === 'E_NOT_FOUND') { + if (err.code === 'MODULE_NOT_FOUND') { return {}; } diff --git a/test/sourcemaps/index.js b/test/sourcemaps/index.js index 91612e6aa3..f2bc509748 100644 --- a/test/sourcemaps/index.js +++ b/test/sourcemaps/index.js @@ -1,7 +1,7 @@ import * as fs from "fs"; import * as path from "path"; import assert from "assert"; -import { svelte } from "../helpers.js"; +import { loadConfig, svelte } from "../helpers.js"; import { SourceMapConsumer } from "source-map"; import { getLocator } from "locate-character"; @@ -17,6 +17,8 @@ describe("sourcemaps", () => { } (solo ? it.only : it)(dir, () => { + const config = loadConfig(`./sourcemaps/samples/${dir}/_config.js`); + const filename = path.resolve( `test/sourcemaps/samples/${dir}/input.html` ); @@ -28,7 +30,8 @@ describe("sourcemaps", () => { const { code, map, css, cssMap } = svelte.compile(input, { filename, outputFilename: `${outputFilename}.js`, - cssOutputFilename: `${outputFilename}.css` + cssOutputFilename: `${outputFilename}.css`, + cascade: config.cascade }); fs.writeFileSync( diff --git a/test/sourcemaps/samples/css-cascade-false/_config.js b/test/sourcemaps/samples/css-cascade-false/_config.js new file mode 100644 index 0000000000..b37866f9b6 --- /dev/null +++ b/test/sourcemaps/samples/css-cascade-false/_config.js @@ -0,0 +1,3 @@ +export default { + cascade: false +}; \ No newline at end of file diff --git a/test/sourcemaps/samples/css-cascade-false/input.html b/test/sourcemaps/samples/css-cascade-false/input.html new file mode 100644 index 0000000000..ad0845d15b --- /dev/null +++ b/test/sourcemaps/samples/css-cascade-false/input.html @@ -0,0 +1,7 @@ +

red

+ + \ No newline at end of file diff --git a/test/sourcemaps/samples/css-cascade-false/output.css b/test/sourcemaps/samples/css-cascade-false/output.css new file mode 100644 index 0000000000..8a653ef98d --- /dev/null +++ b/test/sourcemaps/samples/css-cascade-false/output.css @@ -0,0 +1,6 @@ + + .foo[svelte-2772200924] { + color: red; + } + +/*# sourceMappingURL=output.css.map */ \ No newline at end of file diff --git a/test/sourcemaps/samples/css-cascade-false/output.css.map b/test/sourcemaps/samples/css-cascade-false/output.css.map new file mode 100644 index 0000000000..9a2034e0d5 --- /dev/null +++ b/test/sourcemaps/samples/css-cascade-false/output.css.map @@ -0,0 +1,12 @@ +{ + "version": 3, + "file": "output.css", + "sources": [ + "input.html" + ], + "sourcesContent": [ + "

red

\n\n" + ], + "names": [], + "mappings": "AAEO;CACN,uBAAI,CAAC;EACJ,MAAM,CAAC,GAAG;EACV;AACF" +} \ No newline at end of file diff --git a/test/sourcemaps/samples/css-cascade-false/test.js b/test/sourcemaps/samples/css-cascade-false/test.js new file mode 100644 index 0000000000..0c9d7e9b6e --- /dev/null +++ b/test/sourcemaps/samples/css-cascade-false/test.js @@ -0,0 +1,17 @@ +export function test ({ assert, smcCss, locateInSource, locateInGeneratedCss }) { + const expected = locateInSource( '.foo' ); + + const loc = locateInGeneratedCss( '.foo' ); + + const actual = smcCss.originalPositionFor({ + line: loc.line + 1, + column: loc.column + }); + + assert.deepEqual( actual, { + source: 'input.html', + name: null, + line: expected.line + 1, + column: expected.column + }); +} diff --git a/test/sourcemaps/samples/css/output.css.map b/test/sourcemaps/samples/css/output.css.map index c77b6d62e7..995db5b4a2 100644 --- a/test/sourcemaps/samples/css/output.css.map +++ b/test/sourcemaps/samples/css/output.css.map @@ -8,5 +8,5 @@ "

red

\n\n" ], "names": [], - "mappings": "AAEO;CACN,iDAAI;;;AAGL" + "mappings": "AAEO;CACN,iDAAI,CAAC;EACJ,MAAM,CAAC,GAAG;EACV;AACF" } \ No newline at end of file