Skip to content
Prev Previous commit
Next Next commit
pendingDeprecation
  • Loading branch information
bmeck committed Aug 22, 2021
commit 741f229d2e9bd7ede0669caaffd7400b8afc12f7
96 changes: 49 additions & 47 deletions lib/internal/bootstrap/pre_execution.js
Original file line number Diff line number Diff line change
Expand Up @@ -336,53 +336,55 @@ function initializeDeprecations() {
configurable: true
});

const legacy = [
['__proto__', {
get: 'Object.getPrototypeOf',
set: 'Object.setPrototypeOf'
}],
['__defineGetter__', 'Object.defineProperty'],
['__defineSetter__', 'Object.defineProperty'],
['__lookupGetter__', 'Object.getOwnPropertyDescriptor'],
['__lookupSetter__', 'Object.getOwnPropertyDescriptor'],
];
for (let i = 0; i < legacy.length; i++) {
const prop = legacy[i][0];
const replacement = legacy[i][1];
const getReplacement = typeof replacement === 'string' ?
replacement : replacement.get;
const setReplacement = typeof replacement === 'string' ?
replacement : replacement.set;
const protoDescriptor = ObjectGetOwnPropertyDescriptor(
ObjectPrototype,
prop);
if (protoDescriptor && 'value' in protoDescriptor) {
let value = protoDescriptor.value;
const writable = protoDescriptor.writable;
ObjectDefineProperty(ObjectPrototype, prop, {
get: deprecate(function() {
return value;
}, `${prop} is deprecated, use ${getReplacement} instead`, 'DEP0XXX'),
set: deprecate(function(v) {
if (!writable) return;
value = v;
}, `${prop} is deprecated, use ${setReplacement} instead`, 'DEP0XXX'),
enumerable: false,
configurable: true
});
} else {
const getter = uncurryThis(protoDescriptor.get);
const setter = uncurryThis(protoDescriptor.set);
ObjectDefineProperty(ObjectPrototype, prop, {
get: deprecate(function() {
return getter(this);
}, `${prop} is deprecated, use ${getReplacement} instead`, 'DEP0XXX'),
set: deprecate(function(value) {
setter(this, value);
}, `${prop} is deprecated, use ${setReplacement} instead`, 'DEP0XXX'),
enumerable: false,
configurable: true
});
if (pendingDeprecation) {
const legacy = [
['__proto__', {
get: 'Object.getPrototypeOf',
set: 'Object.setPrototypeOf'
}],
['__defineGetter__', 'Object.defineProperty'],
['__defineSetter__', 'Object.defineProperty'],
['__lookupGetter__', 'Object.getOwnPropertyDescriptor'],
['__lookupSetter__', 'Object.getOwnPropertyDescriptor'],
];
for (let i = 0; i < legacy.length; i++) {
const prop = legacy[i][0];
const replacement = legacy[i][1];
const getReplacement = typeof replacement === 'string' ?
replacement : replacement.get;
const setReplacement = typeof replacement === 'string' ?
replacement : replacement.set;
const protoDescriptor = ObjectGetOwnPropertyDescriptor(
ObjectPrototype,
prop);
if (protoDescriptor && 'value' in protoDescriptor) {
let value = protoDescriptor.value;
const writable = protoDescriptor.writable;
ObjectDefineProperty(ObjectPrototype, prop, {
get: deprecate(function() {
return value;
}, `${prop} is deprecated, use ${getReplacement} instead`, 'DEP0XXX'),
set: deprecate(function(v) {
if (!writable) return;
value = v;
}, `${prop} is deprecated, use ${setReplacement} instead`, 'DEP0XXX'),
enumerable: false,
configurable: true
});
} else {
const getter = uncurryThis(protoDescriptor.get);
const setter = uncurryThis(protoDescriptor.set);
ObjectDefineProperty(ObjectPrototype, prop, {
get: deprecate(function() {
return getter(this);
}, `${prop} is deprecated, use ${getReplacement} instead`, 'DEP0XXX'),
set: deprecate(function(value) {
setter(this, value);
}, `${prop} is deprecated, use ${setReplacement} instead`, 'DEP0XXX'),
enumerable: false,
configurable: true
});
}
}
}
}
Expand Down