11import 'dart:js_interop' ;
22
3+ // JS SDK types
4+
35@JS ()
46extension type JS_IBrowserSDK ._(JSObject _) implements JSObject {
57}
@@ -13,3 +15,39 @@ extension type JS_BrowserSDKPackage._(JSObject _) implements JSObject {
1315 external JSFunction ? WarnLogger ;
1416 external JSFunction ? ErrorLogger ;
1517}
18+
19+ // Conversion utils: JS to Dart types
20+
21+ @JS ('Object.keys' )
22+ external JSArray <JSString > _objectKeys (JSObject obj);
23+
24+ @JS ('Reflect.get' )
25+ external JSAny ? _reflectGet (JSObject target, JSAny propertyKey);
26+
27+ List <dynamic > jsArrayToList (JSArray obj) {
28+ return obj.toDart.map (jsAnyToDart).toList ();
29+ }
30+
31+ Map <String , dynamic > jsObjectToMap (JSObject obj) {
32+ return {
33+ for (final jsKey in _objectKeys (obj).toDart)
34+ // @TODO _reflectGet (js_interop) vs obj.getProperty (js_interop_unsafe)
35+ jsKey.toDart: jsAnyToDart (_reflectGet (obj, jsKey)),
36+ };
37+ }
38+
39+ dynamic jsAnyToDart (JSAny ? value) {
40+ if (value is JSArray ) {
41+ return jsArrayToList (value);
42+ } else if (value is JSObject ) {
43+ return jsObjectToMap (value);
44+ } else if (value is JSString ) {
45+ return value.toDart;
46+ } else if (value is JSNumber ) {
47+ return value.toDartDouble;
48+ } else if (value is JSBoolean ) {
49+ return value.toDart;
50+ } else {
51+ return value; // JS null and undefined are null in Dart
52+ }
53+ }
0 commit comments