You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							65 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							65 lines
						
					
					
						
							2.1 KiB
						
					
					
				var sourceMap = require('source-map') | 
						|
var SourceMapConsumer = sourceMap.SourceMapConsumer | 
						|
var SourceMapGenerator = sourceMap.SourceMapGenerator | 
						|
 | 
						|
module.exports = merge | 
						|
 | 
						|
/** | 
						|
 * Merge old source map and new source map and return merged. | 
						|
 * If old or new source map value is falsy, return another one as it is. | 
						|
 * | 
						|
 * @param {object|string} [oldMap] old source map object | 
						|
 * @param {object|string} [newmap] new source map object | 
						|
 * @return {object|undefined} merged source map object, or undefined when both old and new source map are undefined | 
						|
 */ | 
						|
function merge(oldMap, newMap) { | 
						|
  if (!oldMap) return newMap | 
						|
  if (!newMap) return oldMap | 
						|
 | 
						|
  var oldMapConsumer = new SourceMapConsumer(oldMap) | 
						|
  var newMapConsumer = new SourceMapConsumer(newMap) | 
						|
  var mergedMapGenerator = new SourceMapGenerator() | 
						|
 | 
						|
  // iterate on new map and overwrite original position of new map with one of old map | 
						|
  newMapConsumer.eachMapping(function(m) { | 
						|
    // pass when `originalLine` is null. | 
						|
    // It occurs in case that the node does not have origin in original code. | 
						|
    if (m.originalLine == null) return | 
						|
 | 
						|
    var origPosInOldMap = oldMapConsumer.originalPositionFor({ | 
						|
      line: m.originalLine, | 
						|
      column: m.originalColumn | 
						|
    }) | 
						|
 | 
						|
    if (origPosInOldMap.source == null) return | 
						|
 | 
						|
    mergedMapGenerator.addMapping({ | 
						|
      original: { | 
						|
        line: origPosInOldMap.line, | 
						|
        column: origPosInOldMap.column | 
						|
      }, | 
						|
      generated: { | 
						|
        line: m.generatedLine, | 
						|
        column: m.generatedColumn | 
						|
      }, | 
						|
      source: origPosInOldMap.source, | 
						|
      name: origPosInOldMap.name | 
						|
    }) | 
						|
  }) | 
						|
 | 
						|
  var consumers = [oldMapConsumer, newMapConsumer] | 
						|
  consumers.forEach(function(consumer) { | 
						|
    consumer.sources.forEach(function(sourceFile) { | 
						|
      mergedMapGenerator._sources.add(sourceFile) | 
						|
      var sourceContent = consumer.sourceContentFor(sourceFile) | 
						|
      if (sourceContent != null) { | 
						|
        mergedMapGenerator.setSourceContent(sourceFile, sourceContent) | 
						|
      } | 
						|
    }) | 
						|
  }) | 
						|
 | 
						|
  mergedMapGenerator._sourceRoot = oldMap.sourceRoot | 
						|
  mergedMapGenerator._file = oldMap.file | 
						|
 | 
						|
  return JSON.parse(mergedMapGenerator.toString()) | 
						|
}
 | 
						|
 |