| // Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| import 'dart:js_interop'; | |
| @JS('window') | |
| external WindowContext get windowContext; | |
| @JS('Error') | |
| @staticInterop | |
| abstract class WindowContext {} | |
| extension WindowContextExtension on WindowContext { | |
| external bool? get $isInternalBuild; | |
| external bool? get $isFlutterApp; | |
| external String? get $dartAppId; | |
| external String? get $dartExtensionUri; | |
| } | |
| @JS('Array.from') | |
| external JSArray _jsArrayFrom(JSAny any); | |
| @JS('Object.values') | |
| external JSArray _jsObjectValues(JSAny any); | |
| @JS('Error') | |
| @staticInterop | |
| abstract class JsError {} | |
| extension JsErrorExtension on JsError { | |
| external String get message; | |
| external String get stack; | |
| } | |
| @JS('Map') | |
| @staticInterop | |
| abstract class JsMap<K extends JSAny, V extends JSAny> {} | |
| extension JsMapExtension<K extends JSAny, V extends JSAny> on JsMap<K, V> { | |
| external V? get(K key); | |
| external JSObject keys(); | |
| } | |
| extension JSObjectExtension on JSObject { | |
| Iterable<Object?> get values => _jsObjectValues(this).toDartIterable(); | |
| } | |
| extension JSArrayExtension on JSArray { | |
| Iterable<T> toDartIterable<T>() => toDart.map((e) => e.dartify() as T); | |
| List<T> toDartList<T>() => toDartIterable<T>().toList(); | |
| } | |
| extension ModuleDependencyGraph on JsMap<JSString, JSArray> { | |
| Iterable<String> get modules => _jsArrayFrom(keys()).toDartIterable(); | |
| List<String> parents(String key) => get(key.toJS)?.toDartList() ?? []; | |
| } |