OLD | NEW |
| (Empty) |
1 @JS() | |
2 library js_util.base; | |
3 | |
4 import 'package:js/js.dart'; | |
5 import 'package:quiver_iterables/iterables.dart'; | |
6 | |
7 // js_util library uses the technique described in | |
8 // https://github.com/dart-lang/sdk/issues/25053 | |
9 // because dart2js compiler does not support [] operator. | |
10 | |
11 @JS() | |
12 @anonymous | |
13 class PropertyDescription { | |
14 external factory PropertyDescription( | |
15 {bool configurable, bool enumerable, value, bool writable}); | |
16 } | |
17 | |
18 /// A wrapper for https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refere
nce/Global_Objects/Object/defineProperty | |
19 @JS('Object.defineProperty') | |
20 external void defineProperty(o, String prop, PropertyDescription description); | |
21 | |
22 /// Returns `o[prop]`. | |
23 @JS('JsUtil.getValue') | |
24 external getValue(o, String prop); | |
25 | |
26 /// Creates a new JavaScript object. | |
27 @JS('JsUtil.newObject') | |
28 external newObject(); | |
29 | |
30 /// Performs `o[key] = value`. | |
31 void setValue(o, String key, value) { | |
32 defineProperty(o, key, new PropertyDescription(value: value)); | |
33 } | |
34 | |
35 /// Converts a Dart object to a JavaScript object. | |
36 /// | |
37 /// For example, you can convert a Dart [Map] to a JavaScript object. | |
38 /// | |
39 /// final jsObj = toJS({ | |
40 /// 'people': [ | |
41 /// {'firstName': 'Kwang Yul', 'lastName': 'Seo'}, | |
42 /// {'firstName': 'DoHyung', 'lastName': 'Kim'}, | |
43 /// {'firstName': 'Kyusun', 'lastName': 'Kim'} | |
44 /// ] | |
45 /// }); | |
46 /// | |
47 toJS(o) { | |
48 if (o is Map) { | |
49 final newObj = newObject(); | |
50 for (final keyValuePair in zip([o.keys, o.values])) { | |
51 setValue(newObj, keyValuePair[0], toJS(keyValuePair[1])); | |
52 } | |
53 return newObj; | |
54 } else if (o is List) { | |
55 return o.map((e) => toJS(e)).toList(); | |
56 } else { | |
57 return o; | |
58 } | |
59 } | |
OLD | NEW |