UNPKG

1.49 kBPlain TextView Raw
1import { LogEntry } from '../logger.js'
2import { Transform } from '../transform.js'
3
4/** Configuration options for the Caterpillar Filter Transform */
5export interface FilterOptions {
6 /** Use to override the default value of {@link Filter.filterLevel} */
7 filterLevel?: number
8}
9
10/**
11 * Caterpillar Filter Transform.
12 * Filters the log entries, keeping only those equal to or below the specified `filterLevel`.
13 * @example
14 * ``` javascript
15 * import { Logger, Filter } from 'caterpillar'
16 * const logger = new Logger()
17 * const filter = new Filter({ filterLevel: 6 })
18 * logger.pipe(filter).pipe(process.stdout)
19 * logger.log('info', 'this will be outputted')
20 * logger.log('debug', 'this will be ignored')
21 * filter.filterLevel = 5
22 * logger.log('info', 'now even this will be ignored')
23 * logger.log('note', 'but not this')
24 * ```
25 */
26export class Filter extends Transform {
27 /**
28 * Only display entries that have a log level below or equal to this number.
29 * Defaults to `6`, which by default is the info log level.
30 */
31 public filterLevel: number = 6
32
33 /** Create our instance and apply our configuraiton options. */
34 constructor(opts?: FilterOptions) {
35 super()
36
37 // options
38 if (opts?.filterLevel != null) this.filterLevel = opts.filterLevel
39 }
40
41 /** Retain only log entries that are equal to or less than the specified filter level. */
42 format(entry: LogEntry): LogEntry | null {
43 return entry.levelNumber <= this.filterLevel ? entry : null
44 }
45}
46
47export default Filter