All files / src/logger memory-logger.ts

100% Statements 4/4
100% Branches 1/1
100% Functions 1/1
100% Lines 4/4

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                                                              29x 131x 131x 131x    
import { createLogger } from './emitter/emitter-logger.ts';
import type { MemoryStore } from './emitter/index.ts';
import { memorySink } from './emitter/memory-sink.ts';
import { asExtendedLogger } from './factory.ts';
import type { SyncFinalizer } from './implementation/finalizer.ts';
import type { Logger, LogLevel } from './index.ts';
 
/**
 * A logger that exposes the emitted log entries.
 *
 * @see {@link createMemoryLogger}
 */
export type MemoryLogger = SyncFinalizer<Logger> & MemoryStore;
 
/**
 * Creates a logger that accumulates the log entries.
 *
 * The entries are flushed on `flush()` and `close()`.
 *
 * @example
 *
 * ```ts
 * const logger = createMemoryLogger();
 * logger.log('info', 'Hello, world!');
 * expect(logger.entries).toEqual([{ level: 'info', message: 'Hello, world!' }]);
 * logger.flush();
 * ```
 *
 * @param level
 * @returns
 */
export const createMemoryLogger = (level: LogLevel | 'off' | (() => LogLevel | 'off') = 'info'): MemoryLogger => {
  const sink = memorySink();
  const logger = createLogger(level, sink);
  return asExtendedLogger(logger, { entries: sink.entries });
};