@neodx/log
Version:
A lightweight universal logging framework
1 lines • 7.96 kB
Source Map (JSON)
{"version":3,"file":"create-logger-factory-gpFFxhZQ.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 { 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(target => !isEmpty(target.target) && !isSilent(target.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 = (value?: string): value is 'silent' => value === 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","isSilent","value","getOriginalLevelName","level","levels","isTypeOfString","name","transform","target","meta","defaultParams","formatMessage","readArguments","createLogger","userParams","params","rootLevel","toArray","targets","filter","isTruthy","map","isTypeOfFunction","isEmpty","log","levelOrAlias","args","unknownMsgTemplate","msgArgs","additionalFields","msgTemplate","String","chunk","reduce","transformer","date","Date","msg","__","originalLevel","handle","forEach","fn","Object","fromEntries","keys","bind","fork","child","childName"],"mappings":"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"}