| Index: pkg/source_maps/lib/parser.dart
|
| diff --git a/pkg/source_maps/lib/parser.dart b/pkg/source_maps/lib/parser.dart
|
| index 23835a60f3499546ca9e3dd2cd5eb4431128db8f..f53f7edcc743b3fb5ded10d28607b58429c4c0ed 100644
|
| --- a/pkg/source_maps/lib/parser.dart
|
| +++ b/pkg/source_maps/lib/parser.dart
|
| @@ -16,6 +16,8 @@ import 'src/vlq.dart';
|
| /// Parses a source map directly from a json string.
|
| // TODO(sigmund): evaluate whether other maps should have the json parsed, or
|
| // the string represenation.
|
| +// TODO(tjblasi): Ignore the first line of [jsonMap] if the JSON safety string
|
| +// `)]}'` begins the string representation of the map.
|
| Mapping parse(String jsonMap, {Map<String, Map> otherMaps}) =>
|
| parseJson(JSON.decode(jsonMap), otherMaps: otherMaps);
|
|
|
| @@ -146,6 +148,9 @@ class SingleMapping extends Mapping {
|
| /// Entries indicating the beginning of each span.
|
| final List<TargetLineEntry> lines;
|
|
|
| + /// Source root appended to the start of all entries in [urls].
|
| + String sourceRoot = null;
|
| +
|
| SingleMapping._internal(this.targetUrl, this.urls, this.names, this.lines);
|
|
|
| factory SingleMapping.fromEntries(
|
| @@ -192,9 +197,9 @@ class SingleMapping extends Mapping {
|
|
|
| SingleMapping.fromJson(Map map)
|
| : targetUrl = map['file'],
|
| - // TODO(sigmund): add support for 'sourceRoot'
|
| urls = map['sources'],
|
| names = map['names'],
|
| + sourceRoot = map['sourceRoot'],
|
| lines = <TargetLineEntry>[] {
|
| int line = 0;
|
| int column = 0;
|
| @@ -303,7 +308,7 @@ class SingleMapping extends Mapping {
|
|
|
| var result = {
|
| 'version': 3,
|
| - 'sourceRoot': '',
|
| + 'sourceRoot': sourceRoot == null ? '' : sourceRoot,
|
| 'sources': urls,
|
| 'names' : names,
|
| 'mappings' : buff.toString()
|
| @@ -350,6 +355,9 @@ class SingleMapping extends Mapping {
|
| var entry = _findColumn(line, column, _findLine(line));
|
| if (entry == null || entry.sourceUrlId == null) return null;
|
| var url = urls[entry.sourceUrlId];
|
| + if (sourceRoot != null) {
|
| + url = '${sourceRoot}${url}';
|
| + }
|
| if (files != null && files[url] != null) {
|
| var file = files[url];
|
| var start = file.getOffset(entry.sourceLine, entry.sourceColumn);
|
| @@ -374,6 +382,8 @@ class SingleMapping extends Mapping {
|
| return (new StringBuffer("$runtimeType : [")
|
| ..write('targetUrl: ')
|
| ..write(targetUrl)
|
| + ..write(', sourceRoot: ')
|
| + ..write(sourceRoot)
|
| ..write(', urls: ')
|
| ..write(urls)
|
| ..write(', names: ')
|
| @@ -392,13 +402,16 @@ class SingleMapping extends Mapping {
|
| ..write(': ')
|
| ..write(line)
|
| ..write(':')
|
| - ..write(entry.column)
|
| - ..write(' --> ')
|
| - ..write(urls[entry.sourceUrlId])
|
| - ..write(': ')
|
| - ..write(entry.sourceLine)
|
| - ..write(':')
|
| - ..write(entry.sourceColumn);
|
| + ..write(entry.column);
|
| + if (entry.sourceUrlId != null) {
|
| + buff..write(' --> ')
|
| + ..write(sourceRoot)
|
| + ..write(urls[entry.sourceUrlId])
|
| + ..write(': ')
|
| + ..write(entry.sourceLine)
|
| + ..write(':')
|
| + ..write(entry.sourceColumn);
|
| + }
|
| if (entry.sourceNameId != null) {
|
| buff..write(' (')
|
| ..write(names[entry.sourceNameId])
|
|
|