All files / src/logger off-logger.ts

100% Statements 24/24
100% Branches 22/22
100% Functions 21/21
100% Lines 24/24

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75                                      1x 1x   1x   1x 1x   1x 1x   1x 1x   1x 1x   1x 1x   1x 1x   1x 1x   1x 1x   1x 1x   1x 1x                                         1x  
import type { Logger } from './definition.ts';
 
/**
 * A logger implementation that does not emit any log entries regardless of level. Useful for completely disabling
 * logging in specific contexts.
 *
 * @example
 *
 * ```ts
 * import type { Logger } from 'emitnlog/logger';
 * import { OFF_LOGGER, withPrefix } from 'emitnlog/logger';
 *
 * const calculate = (logger?: Logger) => {
 *   const calculateLogger = withPrefix(logger ?? OFF_LOGGER, 'calculate');
 *   calculateLogger.i`starting calculation`;
 *   ...
 * };
 * ```
 */
export const OFF_LOGGER: Logger = Object.freeze({
  level: 'off',
 
  args: () => OFF_LOGGER,
 
  trace: () => void {},
  t: () => void {},
 
  debug: () => void {},
  d: () => void {},
 
  info: () => void {},
  i: () => void {},
 
  notice: () => void {},
  n: () => void {},
 
  warning: () => void {},
  w: () => void {},
 
  error: () => void {},
  e: () => void {},
 
  critical: () => void {},
  c: () => void {},
 
  alert: () => void {},
  a: () => void {},
 
  emergency: () => void {},
  em: () => void {},
 
  log: () => void {},
});
 
/**
 * Returns a non-nullable logger: either the specified logger or the OFF_LOGGER.
 *
 * @example
 *
 * ```ts
 * import type { Logger } from 'emitnlog/logger';
 * import { withLogger, withPrefix } from 'emitnlog/logger';
 *
 * const calculate = (logger?: Logger) => {
 *   const calculateLogger = withPrefix(withLogger(logger), 'calculate');
 *   calculateLogger.i`starting calculation`;
 *   ...
 * };
 * ```
 *
 * @param logger A logger or null or undefined
 * @returns Either the specified logger or the OFF_Logger
 */
export const withLogger = (logger: Logger | undefined | null): NonNullable<Logger> => logger ?? OFF_LOGGER;