From f2cbf11cc20d47b9df3816b0060d3080d8026706 Mon Sep 17 00:00:00 2001 From: Timothy Johnson Date: Sat, 24 Nov 2018 14:01:43 -0800 Subject: [PATCH] Consume sourcemaps --- src/cli/compile.ts | 1 + src/compile/index.ts | 17 ++++++++++++++++- src/interfaces.ts | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/cli/compile.ts b/src/cli/compile.ts index 47141f2346..54f7286479 100644 --- a/src/cli/compile.ts +++ b/src/cli/compile.ts @@ -107,6 +107,7 @@ function compileFile(input, output, options) { let compiled; try { + delete options.sourceMap; // compiler doesn't use this option compiled = svelte.compile(source, options); } catch (err) { error(err); diff --git a/src/compile/index.ts b/src/compile/index.ts index 59e204b816..4418de4081 100644 --- a/src/compile/index.ts +++ b/src/compile/index.ts @@ -1,3 +1,4 @@ +import { SourceMapGenerator, SourceMapConsumer } from 'source-map'; import { assign } from '../shared'; import Stats from '../Stats'; import parse from '../parse/index'; @@ -89,7 +90,21 @@ export default function compile(source: string, options: CompileOptions = {}) { return renderSSR(component, options); } - return renderDOM(component, options); + const result = renderDOM(component, options); + + if (options.sourceMap) { + const inputConsumer = new SourceMapConsumer(options.sourceMap); + + const jsSourceMap = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(result.js.map)); + jsSourceMap.applySourceMap(inputConsumer); + result.js.map = jsSourceMap.toJSON(); + + const cssSourceMap = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(result.css.map)); + cssSourceMap.applySourceMap(inputConsumer); + result.css.map = cssSourceMap.toJSON(); + } + + return result; } catch (err) { onerror(err); } diff --git a/src/interfaces.ts b/src/interfaces.ts index b637a727bb..8609576841 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -57,6 +57,7 @@ export interface CompileOptions { legacy?: boolean; customElement?: CustomElementOptions | true; css?: boolean; + sourceMap?: string | object; preserveComments?: boolean | false;