{"version":3,"file":"index.cjs","names":["LOG_LEVEL_PRIORITY: Record<LogLevel, number>","METHOD_TO_LEVEL: Record<LogMethod, LogLevel>"],"sources":["../src/logger.ts"],"sourcesContent":["export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'none';\ntype LogMethod = 'log' | 'info' | 'warn' | 'error' | 'debug';\ntype LogContext = string | Record<string, unknown>;\n\nconst LOG_LEVEL_PRIORITY: Record<LogLevel, number> = {\n\tnone: 0,\n\terror: 1,\n\twarn: 2,\n\tinfo: 3,\n\tdebug: 4,\n};\n\nconst METHOD_TO_LEVEL: Record<LogMethod, LogLevel> = {\n\terror: 'error',\n\twarn: 'warn',\n\tinfo: 'info',\n\tlog: 'info',\n\tdebug: 'debug',\n};\n\nexport interface LoggerConfig {\n\tcolor?: string;\n\tlogLevel?: LogLevel;\n}\n\nexport interface Logger {\n\tlog: ( ..._args: unknown[] ) => void;\n\tinfo: ( ..._args: unknown[] ) => void;\n\twarn: ( ..._args: unknown[] ) => void;\n\terror: ( ..._args: unknown[] ) => void;\n\tdebug: ( ..._args: unknown[] ) => void;\n\textend: ( _subContext: LogContext ) => Logger;\n\tsetLogLevel: ( _level: LogLevel ) => void;\n}\n\nconst shouldLog = ( methodLevel: LogLevel, currentLevel: LogLevel ): boolean => {\n\treturn LOG_LEVEL_PRIORITY[ methodLevel ] <= LOG_LEVEL_PRIORITY[ currentLevel ];\n};\n\nconst stringifyContext = ( context: LogContext ): string => {\n\tif ( typeof context === 'string' ) {\n\t\treturn context;\n\t}\n\treturn JSON.stringify( context );\n};\n\nconst mergeContexts = ( parentContext: LogContext, subContext: LogContext ): string => {\n\tconst parentStr = stringifyContext( parentContext );\n\tconst subStr = stringifyContext( subContext );\n\treturn `${ parentStr } > ${ subStr }`;\n};\n\nconst isBrowser = (): boolean => {\n\treturn typeof window !== 'undefined';\n};\n\nconst formatContext = ( context: LogContext | string, config: LoggerConfig ): { text: string; style?: string } => {\n\tconst contextStr = stringifyContext( context );\n\tconst text = `[${ contextStr }]`;\n\n\tif ( isBrowser() ) {\n\t\tconst color = config.color || '#00bcd4';\n\t\treturn {\n\t\t\ttext: `%c${ text }`,\n\t\t\tstyle: `color: ${ color }; font-weight: bold;`,\n\t\t};\n\t}\n\n\treturn { text };\n};\n\nconst createLogMethod = (\n\tmethod: LogMethod,\n\tcontext: LogContext | string | undefined,\n\tconfig: LoggerConfig,\n\tgetCurrentLevel: () => LogLevel\n) => {\n\treturn ( ...args: unknown[] ) => {\n\t\tconst methodLevel = METHOD_TO_LEVEL[ method ];\n\t\tif ( ! shouldLog( methodLevel, getCurrentLevel() ) ) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tif ( ! context ) {\n\t\t\tconsole[ method ]( ...args );\n\t\t\treturn;\n\t\t}\n\n\t\tconst { text, style } = formatContext( context, config );\n\n\t\tif ( style ) {\n\t\t\tconsole[ method ]( text, style, ...args );\n\t\t} else {\n\t\t\tconsole[ method ]( text, ...args );\n\t\t}\n\t};\n};\n\nconst createLoggerInstance = ( context: LogContext | string | undefined, config: LoggerConfig ): Logger => {\n\tlet currentLogLevel = config.logLevel ?? 'debug';\n\n\tconst getCurrentLevel = () => currentLogLevel;\n\n\tconst logMethods = {\n\t\tlog: createLogMethod( 'log', context, config, getCurrentLevel ),\n\t\tinfo: createLogMethod( 'info', context, config, getCurrentLevel ),\n\t\twarn: createLogMethod( 'warn', context, config, getCurrentLevel ),\n\t\terror: createLogMethod( 'error', context, config, getCurrentLevel ),\n\t\tdebug: createLogMethod( 'debug', context, config, getCurrentLevel ),\n\t};\n\n\treturn {\n\t\t...logMethods,\n\t\tsetLogLevel: ( level: LogLevel ) => {\n\t\t\tcurrentLogLevel = level;\n\t\t},\n\t\textend: ( subContext: LogContext ) => {\n\t\t\tif ( ! context ) {\n\t\t\t\treturn createLoggerInstance( subContext, { ...config, logLevel: currentLogLevel } );\n\t\t\t}\n\t\t\tconst mergedContext = mergeContexts( context, subContext );\n\t\t\treturn createLoggerInstance( mergedContext, { ...config, logLevel: currentLogLevel } );\n\t\t},\n\t};\n};\n\nexport const createLogger = ( context: LogContext, config?: LoggerConfig ): Logger => {\n\tconst mergedConfig: LoggerConfig = {\n\t\tcolor: '#00bcd4',\n\t\tlogLevel: 'debug',\n\t\t...config,\n\t};\n\treturn createLoggerInstance( context, mergedConfig );\n};\n\n"],"mappings":"AAIA,MAAMA,EAA+C,CACpD,KAAM,EACN,MAAO,EACP,KAAM,EACN,KAAM,EACN,MAAO,EACP,CAEKC,EAA+C,CACpD,MAAO,QACP,KAAM,OACN,KAAM,OACN,IAAK,OACL,MAAO,QACP,CAiBK,GAAc,EAAuB,IACnC,EAAoB,IAAiB,EAAoB,GAG3D,EAAqB,GACrB,OAAO,GAAY,SAChB,EAED,KAAK,UAAW,EAAS,CAG3B,GAAkB,EAA2B,IAG3C,GAFW,EAAkB,EAAe,CAE7B,KADP,EAAkB,EAAY,GAIxC,MACE,OAAO,OAAW,IAGpB,GAAkB,EAA8B,IAA4D,CAEjH,IAAM,EAAO,IADM,EAAkB,EAAS,CAChB,GAE9B,GAAK,GAAW,CAAG,CAClB,IAAM,EAAQ,EAAO,OAAS,UAC9B,MAAO,CACN,KAAM,KAAM,IACZ,MAAO,UAAW,EAAO,sBACzB,CAGF,MAAO,CAAE,OAAM,EAGV,GACL,EACA,EACA,EACA,KAES,GAAG,IAAqB,CAChC,IAAM,EAAc,EAAiB,GACrC,GAAK,CAAE,EAAW,EAAa,GAAiB,CAAE,CACjD,OAID,GAAK,CAAE,EAAU,CAChB,QAAS,GAAU,GAAG,EAAM,CAC5B,OAGD,GAAM,CAAE,OAAM,SAAU,EAAe,EAAS,EAAQ,CAEnD,EACJ,QAAS,GAAU,EAAM,EAAO,GAAG,EAAM,CAEzC,QAAS,GAAU,EAAM,GAAG,EAAM,EAK/B,GAAyB,EAA0C,IAAkC,CAC1G,IAAI,EAAkB,EAAO,UAAY,QAEnC,MAAwB,EAU9B,MAAO,CAPN,IAAK,EAAiB,MAAO,EAAS,EAAQ,EAAiB,CAC/D,KAAM,EAAiB,OAAQ,EAAS,EAAQ,EAAiB,CACjE,KAAM,EAAiB,OAAQ,EAAS,EAAQ,EAAiB,CACjE,MAAO,EAAiB,QAAS,EAAS,EAAQ,EAAiB,CACnE,MAAO,EAAiB,QAAS,EAAS,EAAQ,EAAiB,CAKnE,YAAe,GAAqB,CACnC,EAAkB,GAEnB,OAAU,GAKF,EAJA,EAGe,EAAe,EAAS,EAAY,CAF5B,EAGc,CAAE,GAAG,EAAQ,SAAU,EAAiB,CAHA,CAKrF,EAGW,GAAiB,EAAqB,IAM3C,EAAsB,EALM,CAClC,MAAO,UACP,SAAU,QACV,GAAG,EACH,CACmD"}