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.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;