diff --git a/lib/source-map-generator.js b/lib/source-map-generator.js index 8111e061..f20344ae 100644 --- a/lib/source-map-generator.js +++ b/lib/source-map-generator.js @@ -9,7 +9,7 @@ const base64VLQ = require("./base64-vlq"); const util = require("./util"); const ArraySet = require("./array-set").ArraySet; const MappingList = require("./mapping-list").MappingList; - +const BasicSourceMapConsumer = require("./source-map-consumer").BasicSourceMapConsumer; /** * An instance of the SourceMapGenerator represents a source map which is * being built incrementally. You may pass an object with the following @@ -200,11 +200,19 @@ class SourceMapGenerator { // Find mappings for the "sourceFile" this._mappings.unsortedForEach(function(mapping) { if (mapping.source === sourceFile && mapping.originalLine != null) { + // Check if it can be mapped by the source map, then update the mapping. - const original = aSourceMapConsumer.originalPositionFor({ + let generatedPosition = { line: mapping.originalLine, - column: mapping.originalColumn - }); + column: mapping.originalColumn, + bias: BasicSourceMapConsumer.GREATEST_LOWER_BOUND + }; + let original = aSourceMapConsumer.originalPositionFor(generatedPosition); + if (original.source === null) { + generatedPosition.bias = BasicSourceMapConsumer.LEAST_UPPER_BOUND; + original = aSourceMapConsumer.originalPositionFor(generatedPosition); + } + if (original.source != null) { // Copy mapping mapping.source = original.source;