Debog

A simple TypeScript decorator to add performance timing to your class methods.

Installation
$ yarn add debog
Requirements
This library uses TypeScript decorators. Ensure experimentalDecorators
is enabled in your tsconfig.json
file.
{
"compilerOptions": {
"experimentalDecorators": true
}
}
Usage
Import debog
into a TypeScript file and append your classes with the decorator. Pass the names of any methods you want to profile.
debog
automatically waits for async methods to resolve before timing!
import debog from 'debog'
@debog('longMethod', 'shortMethod', 'asyncMethod')
export default class MyClass {
longMethod = () => {
let output = 0
for (let i = 0; i < 100000; i++) {
output += i
}
return output
}
shortMethod = () => {
let output = 0
for (let i = 0; i < 10; i++) {
output += i
}
return output
}
asyncMethod = async () => new Promise(resolve => {
setTimeout(resolve, 1000)
})
}
const example = new MyClass()
example.shortMethod()
example.longMethod()
example.asyncMethod()
You can alternatively restrict output until a certain threshold is reached. For example, to log when a method takes longer than 5ms:
import debog from 'debog'
@debog(5, 'waitMethod', 'instantMethod')
export default class MyClass {
waitMethod = async () => new Promise(resolve => {
setTimeout(resolve, 10)
})
instantMethod = () => {
return 42
}
}
const example = new MyClass()
await example.waitMethod()
example.instantMethod()
Output
You are not restricted to using console.log
as output. In fact, you can
output any timing call to any destination you want such as statsd, prometheus,
etc.
Simply override the exposed logger
attribute.
import debog from 'debog'
debog.logger = (timing: number, methodName: string) => {
}
API
This library exports one default decorator function, defined as:
interface Debog {
(...params: [number | string, ...string[]]): any
logger(timing: number, methodName: string): void
}
License
MIT