blob: c82c6ed54e936d53ed817e6eb8e777e7f13958a4 [file] [log] [blame]
// 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() ?? [];
}