Merge pull request #8198 from loganfsmyth/sourcemap-loading

Prefer explicit object maps, and properly load relative maps.
This commit is contained in:
Logan Smyth 2018-07-04 15:39:42 -07:00 committed by GitHub
commit 9bd4b46fd6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 16 deletions

View File

@ -160,7 +160,7 @@ declare module "convert-source-map" {
fromComment(str: string): Converter, fromComment(str: string): Converter,
fromMapFileComment(str: string): Converter, fromMapFileComment(str: string): Converter,
fromSource(str: string): Converter, fromSource(str: string): Converter,
fromMapFileSource(str: string): Converter, fromMapFileSource(str: string, dir: string): Converter,
removeComments(str: string): string, removeComments(str: string): string,
removeMapFileComments(str: string): string, removeMapFileComments(str: string): string,
generateMapFileComment(path: string, options?: ?{ multiline: boolean }): string, generateMapFileComment(path: string, options?: ?{ multiline: boolean }): string,

View File

@ -1,5 +1,6 @@
// @flow // @flow
import path from "path";
import buildDebug from "debug"; import buildDebug from "debug";
import * as t from "@babel/types"; import * as t from "@babel/types";
import type { PluginPasses } from "../config"; import type { PluginPasses } from "../config";
@ -27,32 +28,44 @@ export default function normalizeFile(
let inputMap = null; let inputMap = null;
if (options.inputSourceMap !== false) { if (options.inputSourceMap !== false) {
try { // If an explicit object is passed in, it overrides the processing of
inputMap = convertSourceMap.fromSource(code); // source maps that may be in the file itself.
if (typeof options.inputSourceMap === "object") {
if (inputMap) { inputMap = convertSourceMap.fromObject(options.inputSourceMap);
code = convertSourceMap.removeComments(code);
}
} catch (err) {
debug("discarding unknown inline input sourcemap", err);
code = convertSourceMap.removeComments(code);
} }
if (!inputMap) { if (!inputMap) {
try { try {
inputMap = convertSourceMap.fromMapFileSource(code); inputMap = convertSourceMap.fromSource(code);
if (inputMap) { if (inputMap) {
code = convertSourceMap.removeMapFileComments(code); code = convertSourceMap.removeComments(code);
} }
} catch (err) { } catch (err) {
debug("discarding unknown file input sourcemap", err); debug("discarding unknown inline input sourcemap", err);
code = convertSourceMap.removeMapFileComments(code); code = convertSourceMap.removeComments(code);
} }
} }
if (!inputMap && typeof options.inputSourceMap === "object") { if (!inputMap) {
inputMap = convertSourceMap.fromObject(options.inputSourceMap); if (typeof options.filename === "string") {
try {
inputMap = convertSourceMap.fromMapFileSource(
code,
path.dirname(options.filename),
);
if (inputMap) {
code = convertSourceMap.removeMapFileComments(code);
}
} catch (err) {
debug("discarding unknown file input sourcemap", err);
code = convertSourceMap.removeMapFileComments(code);
}
} else {
debug("discarding un-loadable file input sourcemap");
code = convertSourceMap.removeMapFileComments(code);
}
} }
} }