{"version":3,"file":"index.mjs","names":[],"sources":["../src/core/shared.ts","../src/core/create-logger-factory.ts","../src/index.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","import { identity, isEmptyObject } from '@neodx/std';\nimport { createLoggerFactory } from './core/create-logger-factory';\nimport { DEFAULT_LOGGER_PARAMS } from './core/shared';\nimport type { LogChunk } from './core/types';\nimport { createLoggerAutoFactory, readArguments } from './utils';\n\nexport { createLoggerFactory, type CreateLoggerFactoryParams } from './core/create-logger-factory';\nexport {\n  DEFAULT_LOGGER_LEVELS,\n  DEFAULT_LOGGER_PARAMS,\n  type DefaultLoggerLevel,\n  LOGGER_SILENT_LEVEL\n} from './core/shared';\nexport type * from './core/types';\nexport { type AutoLoggerInput } from './utils';\n\nexport const createLogger = createLoggerFactory({\n  defaultParams: {\n    ...DEFAULT_LOGGER_PARAMS,\n    target: createConsoleTarget()\n  },\n  formatMessage: identity,\n  readArguments\n});\nexport const createAutoLogger = createLoggerAutoFactory(createLogger);\n\nexport function createConsoleTarget(console = globalThis.console) {\n  return function consoleTarget({\n    error,\n    meta,\n    level,\n    msgArgs = [],\n    msgTemplate\n  }: LogChunk<string>) {\n    const consoleMethod =\n      level in console ? console[level as SupportedConsoleMethods] : console.log;\n    const args = [msgTemplate, ...msgArgs];\n\n    if (!isEmptyObject(meta)) args.push(meta);\n    consoleMethod(...args);\n\n    if (error) {\n      console.error(error);\n    }\n  };\n}\n\ntype SupportedConsoleMethods = 'log' | 'info' | 'warn' | 'error' | 'debug' | 'trace';\n"],"mappings":"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"}