[79a0317] | 1 | var SourceMapConsumer = require('source-map').SourceMapConsumer;
|
---|
| 2 |
|
---|
| 3 | function inputSourceMapTracker() {
|
---|
| 4 | var maps = {};
|
---|
| 5 |
|
---|
| 6 | return {
|
---|
| 7 | all: all.bind(null, maps),
|
---|
| 8 | isTracking: isTracking.bind(null, maps),
|
---|
| 9 | originalPositionFor: originalPositionFor.bind(null, maps),
|
---|
| 10 | track: track.bind(null, maps)
|
---|
| 11 | };
|
---|
| 12 | }
|
---|
| 13 |
|
---|
| 14 | function all(maps) {
|
---|
| 15 | return maps;
|
---|
| 16 | }
|
---|
| 17 |
|
---|
| 18 | function isTracking(maps, source) {
|
---|
| 19 | return source in maps;
|
---|
| 20 | }
|
---|
| 21 |
|
---|
| 22 | function originalPositionFor(maps, metadata, range, selectorFallbacks) {
|
---|
| 23 | var line = metadata[0];
|
---|
| 24 | var column = metadata[1];
|
---|
| 25 | var source = metadata[2];
|
---|
| 26 | var position = {
|
---|
| 27 | line: line,
|
---|
| 28 | column: column + range
|
---|
| 29 | };
|
---|
| 30 | var originalPosition;
|
---|
| 31 |
|
---|
| 32 | while (!originalPosition && position.column > column) {
|
---|
| 33 | position.column--;
|
---|
| 34 | originalPosition = maps[source].originalPositionFor(position);
|
---|
| 35 | }
|
---|
| 36 |
|
---|
| 37 | if (!originalPosition || originalPosition.column < 0) {
|
---|
| 38 | return metadata;
|
---|
| 39 | }
|
---|
| 40 |
|
---|
| 41 | if (originalPosition.line === null && line > 1 && selectorFallbacks > 0) {
|
---|
| 42 | return originalPositionFor(maps, [line - 1, column, source], range, selectorFallbacks - 1);
|
---|
| 43 | }
|
---|
| 44 |
|
---|
| 45 | return originalPosition.line !== null
|
---|
| 46 | ? toMetadata(originalPosition)
|
---|
| 47 | : metadata;
|
---|
| 48 | }
|
---|
| 49 |
|
---|
| 50 | function toMetadata(asHash) {
|
---|
| 51 | return [asHash.line, asHash.column, asHash.source];
|
---|
| 52 | }
|
---|
| 53 |
|
---|
| 54 | function track(maps, source, data) {
|
---|
| 55 | maps[source] = new SourceMapConsumer(data);
|
---|
| 56 | }
|
---|
| 57 |
|
---|
| 58 | module.exports = inputSourceMapTracker;
|
---|