Skip to content

Instantly share code, notes, and snippets.

@socheatsok78
Last active September 13, 2023 05:44
Show Gist options
  • Save socheatsok78/93e742aca45861df65448169de7565b0 to your computer and use it in GitHub Desktop.
Save socheatsok78/93e742aca45861df65448169de7565b0 to your computer and use it in GitHub Desktop.
Hide source of Log messages in browser console
function consoleWithNoSource(...params) {
setTimeout(console.log.bind(console, ...params));
}
consoleWithNoSource("Helloo....!")
declare global {
interface Console {
nosource: Console
}
}
console.nosource = new Proxy(console, {
get: function (target, prop, receiver) {
const reflected = Reflect.get(target, prop, receiver)
console.log({target, prop, receiver})
if (typeof reflected === 'function') {
return function (...params: any[]) {
setTimeout(reflected.bind(target, ...params))
}
}
return reflected
}
})
console.nosource.log('Hello world')
interface LoggerConfigs {
enabled: boolean
}
interface Logger extends Console {
config: LoggerConfigs
}
export function createLogger() {
const config: LoggerConfigs = {
enabled: true
}
const logger = new Proxy(console, {
get(target, prop, receiver) {
const reflected = Reflect.get(target, prop, receiver)
if (prop === 'config') {
return config
}
if (typeof reflected === 'function') {
return (...params: any[]) => {
if (!config.enabled) return
return reflected.call(target, ...params)
}
}
return reflected
},
set(target, prop, value, receiver) {
if (prop === 'config') {
return true
}
return Reflect.set(target, prop, value, receiver)
}
})
return logger as Logger
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment