{"version":3,"file":"log-context.mjs","names":[],"sources":["../../../src/common/log/log-context.ts"],"sourcesContent":["import type { LoggerContextInterface, LoggerInterface, LogHandler, LogLevel, LogLevelAliasType, LogMessage } from './log-base'\nimport { isNotNull } from '../data/is'\nimport { LogLevelAll, LogLevelDebug, LogLevelError, LogLevelFatal, LogLevelInfo, LogLevelWarn } from './log-base'\nimport { LoggerConsoleHandler } from './log-console'\nimport { parseLogLevel, useNamespaceFilter } from './log-filter'\n\nexport function LoggerContext(_prefix = ''): LoggerContextInterface {\n  let logHandlers: LogHandler[] = [LoggerConsoleHandler()]\n  let logCheckNamespace = (_name: string) => true\n  let logLock = false\n  let logFactory = LoggerBaseFactory\n  let logDebug = false\n\n  function LoggerBaseFactory(\n    name = '',\n    level?: LogLevelAliasType,\n  ): LoggerInterface {\n    const logLevel = parseLogLevel(level ?? LogLevelAll)\n\n    function defineForLogLevel(fnLevel: LogLevel, fn: any) {\n      if (logLevel <= fnLevel)\n        return fn\n      return () => {}\n    }\n\n    const emit = (msg: LogMessage) => {\n      if (logCheckNamespace(name)) {\n        for (const handler of logHandlers) {\n          if (handler)\n            handler(msg)\n        }\n      }\n    }\n\n    const log = defineForLogLevel(LogLevelDebug, (...messages: any[]) => {\n      emit({ name, messages, level: LogLevelDebug })\n    })\n\n    // log.generic = function (level: LogLevel, ...messages: any[]) {\n    //   if (logLevel <= level)\n    //     emit({ name, messages, level })\n    // }\n\n    log.label = name\n    // log.active = true\n\n    log.extend = function (prefix: string): LoggerInterface {\n      return logFactory(name ? `${name}:${prefix}` : prefix)\n    }\n\n    log.debug = defineForLogLevel(LogLevelDebug, (...messages: any[]) => {\n      emit({ name, messages, level: LogLevelDebug })\n    })\n\n    log.info = defineForLogLevel(LogLevelInfo, (...messages: any[]) => {\n      emit({ name, messages, level: LogLevelInfo })\n    })\n\n    log.warn = defineForLogLevel(LogLevelWarn, (...messages: any[]) => {\n      emit({ name, messages, level: LogLevelWarn })\n    })\n\n    log.error = defineForLogLevel(LogLevelError, (...messages: any[]) => {\n      emit({ name, messages, level: LogLevelError })\n    })\n\n    log.fatal = defineForLogLevel(LogLevelFatal, (...messages: any[]) => {\n      emit({ name, messages, level: LogLevelFatal })\n      throw new Error(`${messages.map(String).join(' ')}`)\n    })\n\n    log.assert = defineForLogLevel(LogLevelFatal, (condition: unknown, ...args: any) => {\n      if (condition == null || (typeof condition === 'number' && Number.isNaN(condition)) || !condition)\n        log.fatal(...args)\n    })\n\n    return log\n  }\n\n  function Logger(name = '', level?: LogLevelAliasType): LoggerInterface {\n    const log = logFactory(name, level)\n    if (logDebug)\n      log.debug(`+++ init of logger \"${name}\" on level \"${log.level}\".`)\n    return log\n  }\n\n  Logger.registerHandler = function (handler: LogHandler) {\n    logHandlers.push(handler)\n  }\n\n  /** @deprecated */\n  Logger.setFilter = function (namespaces: string) {\n    logCheckNamespace = useNamespaceFilter(namespaces)\n  }\n\n  Logger.setLock = (lock = true) => (logLock = lock)\n\n  Logger.setDebug = (debug = true) => (logDebug = debug)\n\n  Logger.setHandlers = (handlers?: (LogHandler | undefined | null)[]) => {\n    if (logFactory !== LoggerBaseFactory)\n      logFactory = LoggerBaseFactory\n    if (handlers != null && !logLock)\n      logHandlers = [...handlers].filter(isNotNull)\n  }\n\n  Logger.level = LogLevelAll\n\n  /** @deprecated */\n  Logger.setLogLevel = function (level: LogLevel = LogLevelAll) {\n    if (logLock)\n      return\n    Logger.level = level\n  }\n\n  Logger.setFactory = function (\n    factory: (name?: string) => LoggerInterface,\n  ): void {\n    if (logLock)\n      return\n    logFactory = factory\n  }\n\n  return Logger\n}\n"],"mappings":";;;;;;AAMA,SAAgB,cAAc,UAAU,IAA4B;CAClE,IAAI,cAA4B,CAAC,sBAAsB,CAAC;CACxD,IAAI,qBAAqB,UAAkB;CAC3C,IAAI,UAAU;CACd,IAAI,aAAa;CACjB,IAAI,WAAW;CAEf,SAAS,kBACP,OAAO,IACP,OACiB;EACjB,MAAM,WAAW,cAAc,YAAqB;EAEpD,SAAS,kBAAkB,SAAmB,IAAS;AACrD,OAAI,YAAY,QACd,QAAO;AACT,gBAAa;;EAGf,MAAM,QAAQ,QAAoB;AAChC,OAAI,kBAAkB,KAAK,EACzB;SAAK,MAAM,WAAW,YACpB,KAAI,QACF,SAAQ,IAAI;;;EAKpB,MAAM,MAAM,sBAAkC,GAAG,aAAoB;AACnE,QAAK;IAAE;IAAM;IAAU;IAAsB,CAAC;IAC9C;AAOF,MAAI,QAAQ;AAGZ,MAAI,SAAS,SAAU,QAAiC;AACtD,UAAO,WAAW,OAAO,GAAG,KAAK,GAAG,WAAW,OAAO;;AAGxD,MAAI,QAAQ,sBAAkC,GAAG,aAAoB;AACnE,QAAK;IAAE;IAAM;IAAU;IAAsB,CAAC;IAC9C;AAEF,MAAI,OAAO,sBAAiC,GAAG,aAAoB;AACjE,QAAK;IAAE;IAAM;IAAU;IAAqB,CAAC;IAC7C;AAEF,MAAI,OAAO,sBAAiC,GAAG,aAAoB;AACjE,QAAK;IAAE;IAAM;IAAU;IAAqB,CAAC;IAC7C;AAEF,MAAI,QAAQ,sBAAkC,GAAG,aAAoB;AACnE,QAAK;IAAE;IAAM;IAAU;IAAsB,CAAC;IAC9C;AAEF,MAAI,QAAQ,sBAAkC,GAAG,aAAoB;AACnE,QAAK;IAAE;IAAM;IAAU;IAAsB,CAAC;AAC9C,SAAM,IAAI,MAAM,GAAG,SAAS,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG;IACpD;AAEF,MAAI,SAAS,sBAAkC,WAAoB,GAAG,SAAc;AAClF,OAAI,aAAa,QAAS,OAAO,cAAc,YAAY,OAAO,MAAM,UAAU,IAAK,CAAC,UACtF,KAAI,MAAM,GAAG,KAAK;IACpB;AAEF,SAAO;;CAGT,SAAS,OAAO,OAAO,IAAI,OAA4C;EACrE,MAAM,MAAM,WAAW,MAAM,MAAM;AACnC,MAAI,SACF,KAAI,MAAM,uBAAuB,KAAK,cAAc,IAAI,MAAM,IAAI;AACpE,SAAO;;AAGT,QAAO,kBAAkB,SAAU,SAAqB;AACtD,cAAY,KAAK,QAAQ;;;AAI3B,QAAO,YAAY,SAAU,YAAoB;AAC/C,sBAAoB,mBAAmB,WAAW;;AAGpD,QAAO,WAAW,OAAO,SAAU,UAAU;AAE7C,QAAO,YAAY,QAAQ,SAAU,WAAW;AAEhD,QAAO,eAAe,aAAiD;AACrE,MAAI,eAAe,kBACjB,cAAa;AACf,MAAI,YAAY,QAAQ,CAAC,QACvB,eAAc,CAAC,GAAG,SAAS,CAAC,OAAO,UAAU;;AAGjD,QAAO;;AAGP,QAAO,cAAc,SAAU,YAA+B;AAC5D,MAAI,QACF;AACF,SAAO,QAAQ;;AAGjB,QAAO,aAAa,SAClB,SACM;AACN,MAAI,QACF;AACF,eAAa;;AAGf,QAAO"}