mirror of https://github.com/grafana/grafana
Utils: avoid calling console.warn() too often for deprecation warnings (#18269)
parent
8c49d27705
commit
4ce814ba94
@ -0,0 +1,34 @@ |
|||||||
|
import { deprecationWarning } from './deprecationWarning'; |
||||||
|
|
||||||
|
test('It should not output deprecation warnings too often', () => { |
||||||
|
let dateNowValue = 10000000; |
||||||
|
|
||||||
|
const spyConsoleWarn = jest.spyOn(console, 'warn').mockImplementation(); |
||||||
|
const spyDateNow = jest.spyOn(global.Date, 'now').mockImplementation(() => dateNowValue); |
||||||
|
// Make sure the mock works
|
||||||
|
expect(Date.now()).toEqual(dateNowValue); |
||||||
|
expect(console.warn).toHaveBeenCalledTimes(0); |
||||||
|
|
||||||
|
// Call the deprecation many times
|
||||||
|
deprecationWarning('file', 'oldName', 'newName'); |
||||||
|
deprecationWarning('file', 'oldName', 'newName'); |
||||||
|
deprecationWarning('file', 'oldName', 'newName'); |
||||||
|
deprecationWarning('file', 'oldName', 'newName'); |
||||||
|
deprecationWarning('file', 'oldName', 'newName'); |
||||||
|
expect(console.warn).toHaveBeenCalledTimes(1); |
||||||
|
|
||||||
|
// Increment the time by 1min
|
||||||
|
dateNowValue += 60000; |
||||||
|
deprecationWarning('file', 'oldName', 'newName'); |
||||||
|
deprecationWarning('file', 'oldName', 'newName'); |
||||||
|
expect(console.warn).toHaveBeenCalledTimes(2); |
||||||
|
|
||||||
|
deprecationWarning('file2', 'oldName', 'newName'); |
||||||
|
deprecationWarning('file2', 'oldName', 'newName'); |
||||||
|
deprecationWarning('file2', 'oldName', 'newName'); |
||||||
|
expect(console.warn).toHaveBeenCalledTimes(3); |
||||||
|
|
||||||
|
// or restoreMocks automatically?
|
||||||
|
spyConsoleWarn.mockRestore(); |
||||||
|
spyDateNow.mockRestore(); |
||||||
|
}); |
||||||
@ -1,7 +1,17 @@ |
|||||||
|
import { KeyValue } from '../types/index'; |
||||||
|
|
||||||
|
// Avoid writing the warning message more than once every 10s
|
||||||
|
const history: KeyValue<number> = {}; |
||||||
|
|
||||||
export const deprecationWarning = (file: string, oldName: string, newName?: string) => { |
export const deprecationWarning = (file: string, oldName: string, newName?: string) => { |
||||||
let message = `[Deprecation warning] ${file}: ${oldName} is deprecated`; |
let message = `[Deprecation warning] ${file}: ${oldName} is deprecated`; |
||||||
if (newName) { |
if (newName) { |
||||||
message += `. Use ${newName} instead`; |
message += `. Use ${newName} instead`; |
||||||
} |
} |
||||||
|
const now = Date.now(); |
||||||
|
const last = history[message]; |
||||||
|
if (!last || now - last > 10000) { |
||||||
console.warn(message); |
console.warn(message); |
||||||
|
history[message] = now; |
||||||
|
} |
||||||
}; |
}; |
||||||
|
|||||||
Loading…
Reference in new issue