From e790dbd737b440135a460a577ac829ca7169c23a Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Fri, 8 Feb 2019 09:50:11 -0800 Subject: [PATCH] chore: add standalone function deprecation helper (#16782) --- lib/common/api/deprecate.js | 8 ++++++++ spec/api-deprecations-spec.js | 32 +++++++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/lib/common/api/deprecate.js b/lib/common/api/deprecate.js index e61fb2b9fef4c..db28d25ffa133 100644 --- a/lib/common/api/deprecate.js +++ b/lib/common/api/deprecate.js @@ -35,6 +35,14 @@ const deprecate = { } }, + function: (fn, newName) => { + const warn = warnOnce(fn.name, newName) + return function () { + warn() + fn.apply(this, arguments) + } + }, + event: (emitter, oldName, newName) => { const warn = newName.startsWith('-') /* internal event */ ? warnOnce(`${oldName} event`) diff --git a/spec/api-deprecations-spec.js b/spec/api-deprecations-spec.js index ebaa616fb8729..03a6308517954 100644 --- a/spec/api-deprecations-spec.js +++ b/spec/api-deprecations-spec.js @@ -82,9 +82,35 @@ describe('deprecations', () => { expect(msg).to.include(prop) }) + it('warns exactly once when a function is deprecated with no replacement', () => { + let msg + deprecations.setHandler(m => { msg = m }) + + function oldFn () { return 'hello' } + const deprecatedFn = deprecate.function(oldFn) + deprecatedFn() + + expect(msg).to.be.a('string') + expect(msg).to.include('oldFn') + }) + + it('warns exactly once when a function is deprecated with a replacement', () => { + let msg + deprecations.setHandler(m => { msg = m }) + + function oldFn () { return 'hello' } + function newFn () { return 'goodbye' } + const deprecatedFn = deprecate.function(oldFn, newFn) + deprecatedFn() + + expect(msg).to.be.a('string') + expect(msg).to.include('oldFn') + expect(msg).to.include('newFn') + }) + it('warns only once per item', () => { const messages = [] - deprecations.setHandler(message => { messages.push(message) }) + deprecations.setHandler(message => messages.push(message)) const key = 'foo' const val = 'bar' @@ -125,7 +151,7 @@ describe('deprecations', () => { const enableCallbackWarnings = () => { warnings = [] - deprecations.setHandler(warning => { warnings.push(warning) }) + deprecations.setHandler(warning => warnings.push(warning)) process.enablePromiseAPIs = true } @@ -133,7 +159,7 @@ describe('deprecations', () => { deprecations.setHandler(null) process.throwDeprecation = true - promiseFunc = param => new Promise((resolve, reject) => { resolve(param) }) + promiseFunc = param => new Promise((resolve, reject) => resolve(param)) }) it('acts as a pass-through for promise-based invocations', async () => {