Proxy factory for the console
using ES6 Proxies (node + browser)
Install the package
npm install logsy
Import the package
import logsy from 'logsy'
logsy
is a console log proxy, you can use it simply like this
logsy.log('Hello!')
Create a custom proxy using the factory function
const cool = logsy('[COOL]')
cool.log('<- was it?')
// [COOL] <- was it?
Checkout the possible options when creating your proxy
interface Options {
active?: (() => Boolean) | Boolean
prefix?: (() => string) | string
callback?: Callback
}
Options are pretty self explanatory.
const log = logsy({
active: process.env.DISPLAY_LOG,
prefix: `[MY LOG]`
callback () {
axios.post('/logger', { ...opts })
}
})
Not covered yet
For each of them you can pass a function that will be interpreted at the moment it is called. For example:
let showLogs = true
const active = () => showLogs
const log = logsy({ active }).log
log('I am logged')
showLogs = false
log('I am not logged')
You can also pass values directly (for active
, prefix
and callback
) and will be resolved based on its type
const error = logsy(process.env.DISPLAY_ERROR).error
const log = logsy(process.env.DISPLAY_LOG).log
Function resolving also works here if the function returns the good type
const log = logsy(() => true)
You can chain the proxies, while using type resolving. If there is a property conflict, the last one will take over the firsts.
const log = logsy(proces.env.DISPLAY_ERROR)('[MY PREFIX]')
Logsy is built on top of Proxy object which is not available everywhere (browser compatibility) For the sake of keeping the library lightweight, it will be shipped without any polyfill by default. If Proxies aren't available, it will be redirected to the console object.
While most console wrappers will mess with the call stack, using a Proxy allow logsy to keep line numbers and call stack untouched in your terminal / dev tools.
One major drawback is that to keep it like this, we can't proxy the apply
on console methods, calling it would mess that up. Because of this, at the moment, information such as the parameters aren't available in the callback.