defineProperty static method
Implementation
static void defineProperty(
dynamic value, dynamic key, JSPropertyDescriptor descriptor) {
if (value is! Map) {
throw InvalidPropertyException(
'Object.defineProperty target must be a map/object');
}
key = _normalizeProperty(key);
final descriptors = _descriptors(value);
final existing = descriptors[key];
if (existing != null) {
final merged = JSPropertyDescriptor(
get: descriptor.get ?? existing.get,
set: descriptor.set ?? existing.set,
writable:
descriptor.hasWritable ? descriptor.writable : existing.writable,
enumerable: descriptor.hasEnumerable
? descriptor.enumerable
: existing.enumerable,
configurable: descriptor.hasConfigurable
? descriptor.configurable
: existing.configurable,
hasWritable: true,
hasEnumerable: true,
hasConfigurable: true,
);
if (descriptor.hasValue || existing.hasValue) {
merged.value = descriptor.hasValue ? descriptor.value : existing.value;
merged.hasValue = true;
}
descriptor = merged;
}
descriptors[key] = descriptor;
if (!descriptor.isAccessor) {
value[key] = descriptor.value;
}
}