@voerkai18n/runtime
Version:
runtime of voerkai18n
58 lines (50 loc) • 2.18 kB
text/typescript
import { VoerkaI18nManager } from "./manager"
export type VoerkaI18nLoggerLevels = 'warn' | 'error' | 'info' | 'debug'
export type VoerkaI18nLogger = {
[key in VoerkaI18nLoggerLevels]: (message:string,...args:any[])=>void
}
export type VoerkaI18nLoggerOutput = (level:VoerkaI18nLoggerLevels,message:string)=>void
export const ConsoleLogger = {
warn : console.warn,
error: console.error,
info : console.info,
debug: console.debug
}
export function createLogger(logFn:VoerkaI18nLoggerOutput):VoerkaI18nLogger{
let manager:VoerkaI18nManager
const logCache:[string,string][] = []
const logOutput = (level:VoerkaI18nLoggerLevels,...args:any[])=>{
const message = args.join(" ")
if(!manager){
// @ts-ignore
manager = globalThis.VoerkaI18n
if(manager && manager instanceof VoerkaI18nManager){
if(manager.debug){
logCache.push([level,message])
const log = (level:VoerkaI18nLoggerLevels,message:string)=>{
if(logFn){
logFn(level,message)
}else{
ConsoleLogger[level as VoerkaI18nLoggerLevels](message)
}
}
manager.on("log",({level, message}) => log(level as any, message))
logCache.forEach(([level,message])=>log(level as any,message))
}else{
logCache.splice(0,logCache.length) // 清空缓存
}
}else{
logCache.push([level,message])
}
}else{
if(!manager.debug) return
manager.emit("log",{level,message})
}
}
return {
warn: ( ...args: any[]) => logOutput("warn",...args),
error: ( ...args: any[]) => logOutput("error",...args),
info: ( ...args: any[]) => logOutput("info",...args),
debug: (...args: any[]) => logOutput("debug",...args)
}
}