Remove legacy interop use (conditional import on dart.library.html) (#1102)
diff --git a/protobuf/CHANGELOG.md b/protobuf/CHANGELOG.md
index b1b33df..235bf31 100644
--- a/protobuf/CHANGELOG.md
+++ b/protobuf/CHANGELOG.md
@@ -3,6 +3,7 @@
* Make `BuilderInfo` methods accept `GeneratedMessage Function()` typed
closures.
* Make `BuilderInfo.add` accept nullable name (for tree shaking purposes).
+* Remove use of legacy `dart.library.html` conditional import.
## 6.0.0
diff --git a/protobuf/lib/src/protobuf/json/json.dart b/protobuf/lib/src/protobuf/json/json.dart
index c84239b..3b52bbc 100644
--- a/protobuf/lib/src/protobuf/json/json.dart
+++ b/protobuf/lib/src/protobuf/json/json.dart
@@ -11,10 +11,32 @@
import '../pb_map.dart';
import '../utils.dart';
+import 'json_vm.dart' as vm;
+import 'json_vm.dart' if (dart.library.js_interop) 'json_web.dart' as web;
+
// Use json_vm.dart with VM and dart2wasm, json_web.dart with dart2js.
// json_web.dart uses JS interop for parsing, and JS interop is too slow on
// Wasm. VM's patch performs better in Wasm.
-export 'json_vm.dart' if (dart.library.html) 'json_web.dart';
+String writeToJsonString(FieldSet fs) {
+ if (const bool.fromEnvironment('dart.tool.dart2js')) {
+ return web.writeToJsonString(fs);
+ } else {
+ return vm.writeToJsonString(fs);
+ }
+}
+
+/// Merge fields from a [json] string.
+void mergeFromJsonString(
+ FieldSet fs,
+ String json,
+ ExtensionRegistry? registry,
+) {
+ if (const bool.fromEnvironment('dart.tool.dart2js')) {
+ web.mergeFromJsonString(fs, json, registry);
+ } else {
+ vm.mergeFromJsonString(fs, json, registry);
+ }
+}
Map<String, dynamic> writeToJsonMap(FieldSet fs) {
dynamic convertToMap(dynamic fieldValue, int fieldType) {