feat: warn if deprecated property is already set

This commit is contained in:
Charles Kerr 2018-05-29 15:58:02 +02:00
parent 61fac1bbc1
commit 2275625e1a
2 changed files with 32 additions and 10 deletions

View file

@ -90,21 +90,27 @@ deprecate.getHandler = () => deprecationHandler
// Deprecate the old name of a property // Deprecate the old name of a property
deprecate.property = (object, deprecatedName, newName) => { deprecate.property = (object, deprecatedName, newName) => {
return Object.defineProperty(object, deprecatedName, {
get: function () {
let warned = false let warned = false
let warn = () => {
if (!(warned || process.noDeprecation)) { if (!(warned || process.noDeprecation)) {
warned = true warned = true
deprecate.warn(deprecatedName, newName) deprecate.warn(deprecatedName, newName)
} }
}
if ((typeof object[newName] === 'undefined') &&
(typeof object[deprecatedName] !== 'undefined')) {
warn()
object[newName] = object[deprecatedName]
}
return Object.defineProperty(object, deprecatedName, {
get: function () {
warn()
return this[newName] return this[newName]
}, },
set: function (value) { set: function (value) {
let warned = false warn()
if (!(warned || process.noDeprecation)) {
warned = true
deprecate.warn(deprecatedName, newName)
}
this[newName] = value this[newName] = value
} }
}) })

View file

@ -73,6 +73,22 @@ describe('deprecations', () => {
assert.strictEqual(o[oldPropertyName], value) assert.strictEqual(o[oldPropertyName], value)
}) })
it('warns if deprecated property is already set', () => {
let msg
deprecations.setHandler((m) => { msg = m })
const oldPropertyName = 'dingyOldName'
const newPropertyName = 'shinyNewName'
const value = 0
let o = { [oldPropertyName]: value }
deprecate.property(o, oldPropertyName, newPropertyName)
assert.strictEqual(typeof msg, 'string')
assert.ok(msg.includes(oldPropertyName))
assert.ok(msg.includes(newPropertyName))
})
it('throws an exception if no deprecation handler is specified', () => { it('throws an exception if no deprecation handler is specified', () => {
assert.throws(() => { assert.throws(() => {
deprecate.log('this is deprecated') deprecate.log('this is deprecated')