| var SourceMapConsumer = require('source-map').SourceMapConsumer; | 
|   | 
| function inputSourceMapTracker() { | 
|   var maps = {}; | 
|   | 
|   return { | 
|     all: all.bind(null, maps), | 
|     isTracking: isTracking.bind(null, maps), | 
|     originalPositionFor: originalPositionFor.bind(null, maps), | 
|     track: track.bind(null, maps) | 
|   }; | 
| } | 
|   | 
| function all(maps) { | 
|   return maps; | 
| } | 
|   | 
| function isTracking(maps, source) { | 
|   return source in maps; | 
| } | 
|   | 
| function originalPositionFor(maps, metadata, range, selectorFallbacks) { | 
|   var line = metadata[0]; | 
|   var column = metadata[1]; | 
|   var source = metadata[2]; | 
|   var position = { | 
|     line: line, | 
|     column: column + range | 
|   }; | 
|   var originalPosition; | 
|   | 
|   while (!originalPosition && position.column > column) { | 
|     position.column--; | 
|     originalPosition = maps[source].originalPositionFor(position); | 
|   } | 
|   | 
|   if (!originalPosition || originalPosition.column < 0) { | 
|     return metadata; | 
|   } | 
|   | 
|   if (originalPosition.line === null && line > 1 && selectorFallbacks > 0) { | 
|     return originalPositionFor(maps, [line - 1, column, source], range, selectorFallbacks - 1); | 
|   } | 
|   | 
|   return originalPosition.line !== null ? | 
|     toMetadata(originalPosition) : | 
|     metadata; | 
| } | 
|   | 
| function toMetadata(asHash) { | 
|   return [asHash.line, asHash.column, asHash.source]; | 
| } | 
|   | 
| function track(maps, source, data) { | 
|   maps[source] = new SourceMapConsumer(data); | 
| } | 
|   | 
| module.exports = inputSourceMapTracker; |