blob: 12488eef6f4f7a03b5139a793b1e438cb987c536 [file] [log] [blame] [edit]
// Copyright (c) 2025, 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('Object.assign')
external void _assign(
JSObject target, [
JSAny? source1,
JSAny? source2,
JSAny? source3,
JSAny? source4,
]);
@JS('Object.entries')
external JSArray<JSArray<JSAny?>> _entries(JSObject object);
@JS('Object.freeze')
external void _freeze(JSObject object);
@JS('Reflect.get')
external JSAny? _get(JSObject object, JSAny name, JSAny? thisArg);
@JS('Object.getOwnPropertyNames')
external JSArray<JSString> _getOwnPropertyNames(JSObject object);
@JS('Object.getOwnPropertySymbols')
external JSArray<JSSymbol> _getOwnPropertySymbols(JSObject object);
@JS('Object.hasOwn')
external bool _hasOwn(JSObject object, JSAny property);
@JS('Object.keys')
external JSArray<JSString> _keys(JSObject object);
@JS('Reflect.ownKeys')
external JSArray<JSAny> _ownKeys(JSObject object);
@JS('Reflect.set')
external bool _set(JSObject object, JSAny name, JSAny? value, JSAny? thisArg);
@JS('Object.values')
external JSArray<JSAny?> _values(JSObject object);
/// Additional instance methods for the `dart:js_interop` [JSObject] type meant
/// to be used when the names of properties or methods are not known statically.
extension JSObjectUnsafeExtension on JSObject {
/// See [`Object.entries()`].
///
/// [`Object.entries()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
List<(String, JSAny?)> get entries => [
for (var entry in _entries(this).toDart)
((entry[0] as JSString).toDart, entry[1]),
];
/// See [`Reflect.ownKeys()`].
///
/// The return value contains only [JSString]s and [JSSymbol]s.
///
/// [`Reflect.ownKeys()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/ownKeys
List<JSAny> get ownKeys => _ownKeys(this).toDart;
/// See [`Object.getOwnPropertyNames()`].
///
/// [`Object.getOwnPropertyNames()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames
List<JSString> get ownPropertyNames => _getOwnPropertyNames(this).toDart;
/// See [`Object.getOwnPropertySymbols()`].
///
/// [`Object.getOwnPropertySymbols()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols
List<JSSymbol> get ownPropertySymbols => _getOwnPropertySymbols(this).toDart;
/// See [`Object.keys()`].
///
/// [`Object.keys()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
List<JSString> get keys => _keys(this).toDart;
/// See [`Object.values()`].
///
/// [`Object.values()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values
List<JSAny?> get values => _values(this).toDart;
/// See [`Object.assign()`].
///
/// [`Object.assign()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
void assign([
JSObject? source1,
JSObject? source2,
JSObject? source3,
JSObject? source4,
]) => _assign(this, source1, source2, source3, source4);
/// See [`Object.freeze()`].
///
/// [`Object.freeze()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
void freeze() => _freeze(this);
/// See [`Reflect.get()`].
///
/// The [name] must be a [JSString] or a [JSSymbol].
///
/// [`Reflect.get()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get
R getPropertyWithThis<R extends JSAny?>(JSAny name, JSAny? thisArg) =>
_get(this, name, thisArg) as R;
/// See [`Object.hasOwn()`].
///
/// The [name] must be a [JSString] or a [JSSymbol].
///
/// [`Object.hasOwn()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn
bool hasOwnProperty(JSAny name) => _hasOwn(this, name);
/// See [`Reflect.set()`].
///
/// The [name] must be a [JSString] or a [JSSymbol].
///
/// [`Reflect.set()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set
bool setPropertyWithThis(JSAny name, JSAny? thisArg, JSAny? value) =>
_set(this, name, value, thisArg);
/// See [`Object.isPrototypeOf()`].
///
/// [`Object.isPrototypeOf()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf
external bool isPrototypeOf(JSObject other);
/// See [`Object.propertyIsEnumerable()`].
///
/// The [name] must be a [JSString] or a [JSSymbol].
///
/// [`Object.propertyIsEnumerable()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable
external bool propertyIsEnumerable(JSAny name);
}