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.
		
		
		
		
			
				
					66 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					66 lines
				
				2.1 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								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())
							 | 
						||
| 
								 | 
							
								}
							 |