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- part of 'internal. dart' ;
5+ import ' dart:convert' show base64Decode, base64Encode ;
66
7- Map <String , dynamic > _writeToJsonMap (FieldSet fs) {
7+ import 'package:fixnum/fixnum.dart' show Int64;
8+
9+ import '../consts.dart' ;
10+ import '../internal.dart' ;
11+ import '../utils.dart' ;
12+
13+ // Use json_vm.dart with VM and dart2wasm, json_web.dart with dart2js.
14+ // json_web.dart uses JS interop for parsing, and JS interop is too slow on
15+ // Wasm. VM's patch performs better in Wasm.
16+ export 'json_vm.dart' if (dart.library.html) 'json_web.dart' ;
17+
18+ Map <String , dynamic > writeToJsonMap (FieldSet fs) {
819 dynamic convertToMap (dynamic fieldValue, int fieldType) {
920 final baseType = PbFieldType .baseType (fieldType);
1021
@@ -61,15 +72,15 @@ Map<String, dynamic> _writeToJsonMap(FieldSet fs) {
6172 List writeMap (PbMap fieldValue, MapFieldInfo fi) => List .from (
6273 fieldValue.entries.map (
6374 (MapEntry e) => {
64- '${ PbMap . _keyFieldNumber } ' : convertToMap (e.key, fi.keyFieldType),
65- '${ PbMap . _valueFieldNumber } ' : convertToMap (e.value, fi.valueFieldType),
75+ '$mapKeyFieldNumber ' : convertToMap (e.key, fi.keyFieldType),
76+ '$mapValueFieldNumber ' : convertToMap (e.value, fi.valueFieldType),
6677 },
6778 ),
6879 );
6980
7081 final result = < String , dynamic > {};
71- for (final fi in fs._infosSortedByTag ) {
72- final value = fs._values [fi.index! ];
82+ for (final fi in fs.infosSortedByTag ) {
83+ final value = fs.values [fi.index! ];
7384 if (value == null || (value is List && value.isEmpty)) {
7485 continue ; // It's missing, repeated, or an empty byte array.
7586 }
@@ -82,18 +93,18 @@ Map<String, dynamic> _writeToJsonMap(FieldSet fs) {
8293 }
8394 result['${fi .tagNumber }' ] = convertToMap (value, fi.type);
8495 }
85- final extensions = fs._extensions ;
96+ final extensions = fs.extensions ;
8697 if (extensions != null ) {
87- for (final tagNumber in sorted (extensions._tagNumbers )) {
88- final value = extensions._values [tagNumber];
98+ for (final tagNumber in sorted (extensions.tagNumbers )) {
99+ final value = extensions.values [tagNumber];
89100 if (value is List && value.isEmpty) {
90101 continue ; // It's repeated or an empty byte array.
91102 }
92- final fi = extensions._getInfoOrNull (tagNumber)! ;
103+ final fi = extensions.getInfoOrNull (tagNumber)! ;
93104 result['$tagNumber ' ] = convertToMap (value, fi.type);
94105 }
95106 }
96- final unknownJsonData = fs._unknownJsonData ;
107+ final unknownJsonData = fs.unknownJsonData ;
97108 if (unknownJsonData != null ) {
98109 unknownJsonData.forEach ((key, value) {
99110 result[key] = value;
@@ -104,20 +115,20 @@ Map<String, dynamic> _writeToJsonMap(FieldSet fs) {
104115
105116// Merge fields from a previously decoded JSON object.
106117// (Called recursively on nested messages.)
107- void _mergeFromJsonMap (
118+ void mergeFromJsonMap (
108119 FieldSet fs,
109120 Map <String , dynamic > json,
110121 ExtensionRegistry ? registry,
111122) {
112- fs._ensureWritable ();
123+ fs.ensureWritable ();
113124 final keys = json.keys;
114- final meta = fs._meta ;
125+ final meta = fs.meta ;
115126 for (final key in keys) {
116127 var fi = meta.byTagAsString[key];
117128 if (fi == null ) {
118- fi = registry? .getExtension (fs._messageName , int .parse (key));
129+ fi = registry? .getExtension (fs.messageName , int .parse (key));
119130 if (fi == null ) {
120- (fs._unknownJsonData ?? = {})[key] = json[key];
131+ (fs.unknownJsonData ?? = {})[key] = json[key];
121132 continue ;
122133 }
123134 }
@@ -144,7 +155,7 @@ void _appendJsonList(
144155 FieldInfo fi,
145156 ExtensionRegistry ? registry,
146157) {
147- final repeated = fi._ensureRepeatedField (meta, fs);
158+ final repeated = fi.ensureRepeatedField (meta, fs);
148159 // Micro optimization. Using "for in" generates the following and iterator
149160 // alloc:
150161 // for (t1 = J.get$iterator$ax(json), t2 = fi.tagNumber, t3 = fi.type,
@@ -175,23 +186,23 @@ void _appendJsonMap(
175186 ExtensionRegistry ? registry,
176187) {
177188 final entryMeta = fi.mapEntryBuilderInfo;
178- final map = fi._ensureMapField (meta, fs);
189+ final map = fi.ensureMapField (meta, fs);
179190 for (final jsonEntryDynamic in jsonList) {
180191 final jsonEntry = jsonEntryDynamic as Map <String , dynamic >;
181192 final entryFieldSet = FieldSet (null , entryMeta);
182193 final convertedKey = _convertJsonValue (
183194 entryMeta,
184195 entryFieldSet,
185- jsonEntry['${ PbMap . _keyFieldNumber } ' ],
186- PbMap ._keyFieldNumber ,
196+ jsonEntry['$mapKeyFieldNumber ' ],
197+ mapKeyFieldNumber ,
187198 fi.keyFieldType,
188199 registry,
189200 );
190201 var convertedValue = _convertJsonValue (
191202 entryMeta,
192203 entryFieldSet,
193- jsonEntry['${ PbMap . _valueFieldNumber } ' ],
194- PbMap ._valueFieldNumber ,
204+ jsonEntry['$mapValueFieldNumber ' ],
205+ mapValueFieldNumber ,
195206 fi.valueFieldType,
196207 registry,
197208 );
@@ -223,10 +234,10 @@ void _setJsonField(
223234 // Therefore we run _validateField for debug builds only to validate
224235 // correctness of conversion.
225236 assert (() {
226- fs._validateField (fi, value);
237+ fs.validateField (fi, value);
227238 return true ;
228239 }());
229- fs._setFieldUnchecked (meta, fi, value);
240+ fs.setFieldUnchecked (meta, fi, value);
230241}
231242
232243/// Converts [value] from the JSON format to the Dart data type suitable for
@@ -298,7 +309,7 @@ dynamic _convertJsonValue(
298309 // The following call will return null if the enum value is unknown.
299310 // In that case, we want the caller to ignore this value, so we return
300311 // null from this method as well.
301- return meta._decodeEnum (tagNumber, registry, value);
312+ return meta.decodeEnum (tagNumber, registry, value);
302313 }
303314 expectedType = 'int or stringified int' ;
304315 break ;
@@ -333,8 +344,8 @@ dynamic _convertJsonValue(
333344 case PbFieldType .MESSAGE_BIT :
334345 if (value is Map ) {
335346 final messageValue = value as Map <String , dynamic >;
336- final subMessage = meta._makeEmptyMessage (tagNumber, registry);
337- _mergeFromJsonMap (subMessage._fieldSet , messageValue, registry);
347+ final subMessage = meta.makeEmptyMessage (tagNumber, registry);
348+ mergeFromJsonMap (subMessage.fieldSet , messageValue, registry);
338349 return subMessage;
339350 }
340351 expectedType = 'nested message or group' ;
0 commit comments