Handle null names field when parsing source map files (dart-lang/source_maps#40)
The field is required by the spec, but we can be more lenient.
diff --git a/pkgs/source_maps/lib/parser.dart b/pkgs/source_maps/lib/parser.dart
index 124ef6d..e3044aa 100644
--- a/pkgs/source_maps/lib/parser.dart
+++ b/pkgs/source_maps/lib/parser.dart
@@ -341,7 +341,7 @@
SingleMapping.fromJson(Map map, {mapUrl})
: targetUrl = map['file'],
urls = List<String>.from(map['sources']),
- names = List<String>.from(map['names']),
+ names = List<String>.from(map['names'] ?? []),
files = List(map['sources'].length),
sourceRoot = map['sourceRoot'],
lines = <TargetLineEntry>[],
diff --git a/pkgs/source_maps/test/parser_test.dart b/pkgs/source_maps/test/parser_test.dart
index 275efd3..45ac52d 100644
--- a/pkgs/source_maps/test/parser_test.dart
+++ b/pkgs/source_maps/test/parser_test.dart
@@ -28,6 +28,14 @@
'file': 'output.dart'
};
+const Map<String, dynamic> MAP_WITH_SOURCE_LOCATION_AND_MISSING_NAMES = {
+ 'version': 3,
+ 'sourceRoot': '',
+ 'sources': ['input.dart'],
+ 'mappings': 'AAAA',
+ 'file': 'output.dart'
+};
+
const Map<String, dynamic> MAP_WITH_SOURCE_LOCATION_AND_NAME = {
'version': 3,
'sourceRoot': '',
@@ -121,6 +129,20 @@
expect(entry.sourceNameId, null);
});
+ test('parse with source location and missing names entry', () {
+ SingleMapping map =
+ parse(jsonEncode(MAP_WITH_SOURCE_LOCATION_AND_MISSING_NAMES));
+ expect(map.lines.length, 1);
+ expect(map.lines.first.entries.length, 1);
+ var entry = map.lines.first.entries.first;
+
+ expect(entry.column, 0);
+ expect(entry.sourceUrlId, 0);
+ expect(entry.sourceColumn, 0);
+ expect(entry.sourceLine, 0);
+ expect(entry.sourceNameId, null);
+ });
+
test('parse with source location and name', () {
SingleMapping map = parse(jsonEncode(MAP_WITH_SOURCE_LOCATION_AND_NAME));
expect(map.lines.length, 1);