const loglevels = ['off', 'error', 'warn', 'info', 'debug'] as const type LogLevel = (typeof loglevels)[number] const isLogLevel = (level: unknown): level is LogLevel => typeof level === 'string' && loglevels.includes(level as LogLevel) const loglevel = (): LogLevel => { const maybeLevel = (typeof process !== 'undefined' && process.env && process.env.BLIP_SDK_LOG_LEVEL) || (typeof window !== 'undefined' && 'BLIP_SDK_LOG_LEVEL' in window && window.BLIP_SDK_LOG_LEVEL) return isLogLevel(maybeLevel) ? maybeLevel : 'off' } export const logger = { log: function (level: Exclude, module: string, message: string, ...args: Array): void { const currentLevel = loglevel() const shouldLog = loglevels.indexOf(level) <= loglevels.indexOf(currentLevel) if (!shouldLog) { return } const prefix = `[${module}] ${message}` // biome-ignore lint/suspicious/noConsole: it is the logger console[level].apply(console, [prefix, ...args]) }, error: function (module: string, message: string, ...args: Array): void { this.log('error', module, message, ...args) }, warn: function (module: string, message: string, ...args: Array): void { this.log('warn', module, message, ...args) }, info: function (module: string, message: string, ...args: Array): void { this.log('info', module, message, ...args) }, debug: function (module: string, message: string, ...args: Array): void { this.log('debug', module, message, ...args) }, }