mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-09-30 17:27:22 +08:00
R=jacktfranklin@chromium.org Bug: 1213034 Change-Id: I5da8225f60b53870a1c67d6b5d02a464c08f4eb2 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2917088 Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org> Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
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;
|