| Index: sdk/lib/html/html_common/conversions_dart2js.dart
|
| diff --git a/sdk/lib/html/html_common/conversions_dart2js.dart b/sdk/lib/html/html_common/conversions_dart2js.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d0b7d77e217a968c4d22fccfa6867c41efa33dc8
|
| --- /dev/null
|
| +++ b/sdk/lib/html/html_common/conversions_dart2js.dart
|
| @@ -0,0 +1,92 @@
|
| +part of html_common;
|
| +
|
| +/// Converts a JavaScript object with properties into a Dart Map.
|
| +/// Not suitable for nested objects.
|
| +Map convertNativeToDart_Dictionary(object) {
|
| + if (object == null) return null;
|
| + var dict = {};
|
| + var keys = JS('JSExtendableArray', 'Object.getOwnPropertyNames(#)', object);
|
| + for (final key in keys) {
|
| + dict[key] = JS('var', '#[#]', object, key);
|
| + }
|
| + return dict;
|
| +}
|
| +
|
| +/// Converts a flat Dart map into a JavaScript object with properties.
|
| +convertDartToNative_Dictionary(Map dict, [void postCreate(dynamic)]) {
|
| + if (dict == null) return null;
|
| + var object = JS('var', '{}');
|
| + if (postCreate != null) {
|
| + postCreate(object);
|
| + }
|
| + dict.forEach((String key, value) {
|
| + JS('void', '#[#] = #', object, key, value);
|
| + });
|
| + return object;
|
| +}
|
| +
|
| +
|
| +/**
|
| + * Ensures that the input is a JavaScript Array.
|
| + *
|
| + * Creates a new JavaScript array if necessary, otherwise returns the original.
|
| + */
|
| +List convertDartToNative_StringArray(List<String> input) {
|
| + // TODO(sra). Implement this.
|
| + return input;
|
| +}
|
| +
|
| +DateTime convertNativeToDart_DateTime(date) {
|
| + var millisSinceEpoch = JS('int', '#.getTime()', date);
|
| + return new DateTime.fromMillisecondsSinceEpoch(millisSinceEpoch, isUtc: true);
|
| +}
|
| +
|
| +convertDartToNative_DateTime(DateTime date) {
|
| + return JS('', 'new Date(#)', date.millisecondsSinceEpoch);
|
| +}
|
| +
|
| +convertDartToNative_PrepareForStructuredClone(value) =>
|
| + new _StructuredCloneDart2Js().convertDartToNative_PrepareForStructuredClone(value);
|
| +
|
| +convertNativeToDart_AcceptStructuredClone(object, {mustCopy: false}) =>
|
| + new _AcceptStructuredCloneDart2Js().convertNativeToDart_AcceptStructuredClone(object, mustCopy: mustCopy);
|
| +
|
| +class _StructuredCloneDart2Js extends _StructuredClone {
|
| + newJsMap() => JS('var', '{}');
|
| + putIntoMap(map, key, value) => JS('void', '#[#] = #', map, key, value);
|
| + newJsList(length) => JS('JSExtendableArray', 'new Array(#)', length);
|
| + cloneNotRequired(e) => (e is NativeByteBuffer || e is NativeTypedData);
|
| +}
|
| +
|
| +class _AcceptStructuredCloneDart2Js extends _AcceptStructuredClone {
|
| +
|
| + newJsList(length) => JS('JSExtendableArray', 'new Array(#)', length);
|
| + newDartList(length) => newJsList(length);
|
| + identicalInJs(a, b) => identical(a, b);
|
| +
|
| + void forEachJsField(object, action) {
|
| + for (final key in JS('JSExtendableArray', 'Object.keys(#)', object)) {
|
| + action(key, JS('var', '#[#]', object, key));
|
| + }
|
| + }
|
| +}
|
| +
|
| +bool isJavaScriptDate(value) => JS('bool', '# instanceof Date', value);
|
| +bool isJavaScriptRegExp(value) => JS('bool', '# instanceof RegExp', value);
|
| +bool isJavaScriptArray(value) => JS('bool', '# instanceof Array', value);
|
| +bool isJavaScriptSimpleObject(value) {
|
| + var proto = JS('', 'Object.getPrototypeOf(#)', value);
|
| + return JS('bool', '# === Object.prototype', proto) ||
|
| + JS('bool', '# === null', proto);
|
| +}
|
| +bool isImmutableJavaScriptArray(value) =>
|
| + JS('bool', r'!!(#.immutable$list)', value);
|
| +bool isJavaScriptPromise(value) => JS('bool', r'# instanceof Promise', value);
|
| +
|
| +Future convertNativePromiseToDartFuture(promise) {
|
| + var completer = new Completer();
|
| + var then = convertDartClosureToJS((result) => completer.complete(result), 1);
|
| + var error = convertDartClosureToJS((result) => completer.completeError(result), 1);
|
| + var newPromise = JS('', '#.then(#).catch(#)', promise, then, error);
|
| + return completer.future;
|
| +}
|
|
|