22// for details. All rights reserved. Use of this source code is governed by a
33// BSD-style license that can be found in the LICENSE file.
44
5- // @dart = 2.9
6-
75/// Module metadata format version
86///
97/// Module reader always creates the current version but is able to read
@@ -77,10 +75,9 @@ class LibraryMetadata {
7775 LibraryMetadata (this .name, this .importUri, this .partUris);
7876
7977 LibraryMetadata .fromJson (Map <String , dynamic > json)
80- : name = json['name' ] as String ,
81- importUri = json['importUri' ] as String ,
82- partUris =
83- List .castFrom <dynamic , String >(json['partUris' ] as List <dynamic >);
78+ : name = _readRequiredField (json, 'name' ),
79+ importUri = _readRequiredField (json, 'importUri' ),
80+ partUris = _readOptionalList (json, 'partUris' ) ?? [];
8481
8582 Map <String , dynamic > toJson () {
8683 return {
@@ -98,7 +95,7 @@ class LibraryMetadata {
9895/// See: https://goto.google.com/dart-web-debugger-metadata
9996class ModuleMetadata {
10097 /// Metadata format version
101- String version;
98+ late final String version;
10299
103100 /// Module name
104101 ///
@@ -125,8 +122,8 @@ class ModuleMetadata {
125122
126123 ModuleMetadata (this .name, this .closureName, this .sourceMapUri, this .moduleUri,
127124 this .soundNullSafety,
128- {this .version }) {
129- version ?? = ModuleMetadataVersion .current.version;
125+ {String ? ver }) {
126+ version = ver ?? ModuleMetadataVersion .current.version;
130127 }
131128
132129 /// Add [library] to metadata
@@ -145,12 +142,12 @@ class ModuleMetadata {
145142 }
146143
147144 ModuleMetadata .fromJson (Map <String , dynamic > json)
148- : version = json[ 'version' ] as String ,
149- name = json[ 'name' ] as String ,
150- closureName = json[ 'closureName' ] as String ,
151- sourceMapUri = json[ 'sourceMapUri' ] as String ,
152- moduleUri = json[ 'moduleUri' ] as String ,
153- soundNullSafety = (json[ 'soundNullSafety' ] as bool ) ?? false {
145+ : version = _readRequiredField ( json, 'version' ) ,
146+ name = _readRequiredField ( json, 'name' ) ,
147+ closureName = _readRequiredField ( json, 'closureName' ) ,
148+ sourceMapUri = _readRequiredField ( json, 'sourceMapUri' ) ,
149+ moduleUri = _readRequiredField ( json, 'moduleUri' ) ,
150+ soundNullSafety = _readOptionalField (json, 'soundNullSafety' ) ?? false {
154151 if (! ModuleMetadataVersion .current.isCompatibleWith (version) &&
155152 ! ModuleMetadataVersion .previous.isCompatibleWith (version)) {
156153 throw Exception ('Unsupported metadata version $version . '
@@ -159,7 +156,7 @@ class ModuleMetadata {
159156 '\n ${ModuleMetadataVersion .previous .version }' );
160157 }
161158
162- for (var l in json[ 'libraries' ] as List < dynamic > ) {
159+ for (var l in _readRequiredList ( json, 'libraries' ) ) {
163160 addLibrary (LibraryMetadata .fromJson (l as Map <String , dynamic >));
164161 }
165162 }
@@ -176,3 +173,23 @@ class ModuleMetadata {
176173 };
177174 }
178175}
176+
177+ T _readRequiredField <T >(Map <String , dynamic > json, String field) {
178+ if (! json.containsKey (field)) {
179+ throw FormatException ('Required field $field is not set in $json ' );
180+ }
181+ return json[field]! as T ;
182+ }
183+
184+ T ? _readOptionalField <T >(Map <String , dynamic > json, String field) =>
185+ json[field] as T ? ;
186+
187+ List <T > _readRequiredList <T >(Map <String , dynamic > json, String field) {
188+ final list = _readRequiredField <List <dynamic >>(json, field);
189+ return List .castFrom <dynamic , T >(list);
190+ }
191+
192+ List <T >? _readOptionalList <T >(Map <String , dynamic > json, String field) {
193+ final list = _readOptionalField <List <dynamic >>(json, field);
194+ return list == null ? null : List .castFrom <dynamic , T >(list);
195+ }
0 commit comments