{"version":3,"file":"create-logger-factory-LGNVkcG-.cjs","sources":["../../src/core/shared.ts","../../src/core/create-logger-factory.ts"],"sourcesContent":["import type { LoggerLevelsConfig, LoggerParamsWithLevels } from './types';\n\nexport type DefaultLoggerLevel = keyof DefaultLoggerLevelsConfig;\nexport type DefaultLoggerLevelsConfig = typeof DEFAULT_LOGGER_LEVELS;\n\nexport const LOGGER_SILENT_LEVEL = 'silent' as const;\nexport const DEFAULT_LOGGER_LEVELS = {\n  error: 10,\n  warn: 20,\n  info: 30,\n  done: 40,\n  debug: 50,\n\n  success: 'done' as const,\n  verbose: 'debug' as const,\n  [LOGGER_SILENT_LEVEL]: Infinity\n} satisfies Readonly<LoggerLevelsConfig<string>>;\n\nexport const DEFAULT_LOGGER_PARAMS = {\n  levels: DEFAULT_LOGGER_LEVELS,\n  level: 'done',\n  name: '',\n  transform: [],\n  target: [],\n  meta: {}\n} satisfies Readonly<LoggerParamsWithLevels<typeof DEFAULT_LOGGER_LEVELS>>;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { is, isEmpty, isTruthy, isTypeOfFunction, isTypeOfString, keys, toArray } from '@neodx/std';\nimport type { LogArguments } from '../utils';\nimport { LOGGER_SILENT_LEVEL } from './shared';\nimport type {\n  BaseLevelsConfig,\n  CreateLogger,\n  GetLevelNames,\n  LogChunk,\n  Logger,\n  LoggerLevelsConfig,\n  LoggerMethods,\n  LoggerParamsWithLevels,\n  LoggerTransformer\n} from './types';\n\nexport interface CreateLoggerFactoryParams<Levels extends LoggerLevelsConfig<string>> {\n  defaultParams: LoggerParamsWithLevels<Levels>;\n  readArguments(args: unknown[]): LogArguments;\n  /**\n   * Formats a message template with replaces.\n   * @default Our lightweight implementation with %s, %d, %i, %f, %j/%o/%O (same output as %j) support\n   * @example (template, replaces) => util.format(template, ...replaces) // Node.js util.format\n   */\n  formatMessage(template: string, replaces: unknown[]): string;\n}\n\nexport function createLoggerFactory<LevelsConfig extends LoggerLevelsConfig<string>>({\n  defaultParams,\n  formatMessage,\n  readArguments\n}: CreateLoggerFactoryParams<LevelsConfig>): CreateLogger<GetLevelNames<LevelsConfig>> {\n  function createLogger(userParams: any): Logger<any> {\n    const params = { ...defaultParams, ...userParams } as Required<\n      LoggerParamsWithLevels<LevelsConfig>\n    >;\n    const { meta, target, level: rootLevel, name = '', levels } = params;\n    const transform = toArray(params.transform) as unknown as LoggerTransformer<\n      GetLevelNames<LevelsConfig>\n    >[];\n    const targets = toArray(target)\n      .filter(isTruthy)\n      .map(target => (isTypeOfFunction(target) ? { target } : target))\n      .map(({ target, level }) => ({\n        level: level && getOriginalLevelName(level, levels),\n        target: toArray(target).filter(isTruthy)\n      }))\n      .filter(it => !isEmpty(it.target) && !isSilent(it.level));\n\n    const log = (levelOrAlias: GetLevelNames<LevelsConfig>, ...args: unknown[]) => {\n      const level = getOriginalLevelName(levelOrAlias, levels);\n\n      if (isSilent(rootLevel) || (rootLevel && levels[level]! > levels[rootLevel]!)) return;\n      const [[unknownMsgTemplate = '', ...msgArgs], additionalFields, error] = readArguments(args);\n      const msgTemplate = String(unknownMsgTemplate);\n      const chunk = transform.reduce<LogChunk<GetLevelNames<LevelsConfig>>>(\n        (chunk, transformer) => transformer(chunk),\n        {\n          name,\n          level,\n          error,\n          meta: {\n            ...meta,\n            ...additionalFields\n          },\n          date: new Date(),\n          msgArgs,\n          msgTemplate,\n          msg: isEmpty(msgArgs) ? msgTemplate : formatMessage(msgTemplate, msgArgs),\n          __: {\n            originalLevel: levelOrAlias,\n            levels: levels as LoggerLevelsConfig<GetLevelNames<LevelsConfig>>\n          }\n        }\n      );\n\n      for (const handle of targets) {\n        if (handle.level && levels[handle.level]! > levels[level]!) continue;\n        handle.target.forEach(fn => fn(chunk as any));\n      }\n    };\n\n    const methods = Object.fromEntries(\n      keys(levels).map(level => [level, log.bind(null, level)])\n    ) as LoggerMethods<GetLevelNames<LevelsConfig>>;\n\n    return {\n      ...methods,\n      get meta() {\n        return { ...params.meta };\n      },\n      fork: (params: any) => createLogger({ ...userParams, ...params }),\n      child: (childName: string, params: any) =>\n        createLogger({\n          ...userParams,\n          ...params,\n          name: name ? `${name}:${childName}` : childName\n        })\n    } as Logger<GetLevelNames<LevelsConfig>>;\n  }\n\n  return createLogger;\n}\n\nconst isSilent = is(LOGGER_SILENT_LEVEL);\nconst getOriginalLevelName = <Config extends BaseLevelsConfig>(\n  level: GetLevelNames<Config>,\n  levels: Config\n): GetLevelNames<Config> => {\n  const value = levels[level] as GetLevelNames<Config> | number;\n\n  return isTypeOfString(value) ? getOriginalLevelName(value, levels) : level;\n};\n"],"names":["LOGGER_SILENT_LEVEL","DEFAULT_LOGGER_LEVELS","error","warn","info","done","debug","success","verbose","Infinity","DEFAULT_LOGGER_PARAMS","levels","level","name","transform","target","meta","createLoggerFactory","defaultParams","formatMessage","readArguments","createLogger","userParams","params","rootLevel","toArray","targets","filter","isTruthy","map","isTypeOfFunction","getOriginalLevelName","it","isEmpty","isSilent","log","levelOrAlias","args","unknownMsgTemplate","msgArgs","additionalFields","msgTemplate","String","chunk","reduce","transformer","date","Date","msg","__","originalLevel","handle","forEach","fn","methods","Object","fromEntries","keys","bind","fork","child","childName","is","value","isTypeOfString"],"mappings":"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"}