1 | import { LogEntry } from '../logger.js'
|
2 | import { Transform } from '../transform.js'
|
3 |
|
4 | /** Configuration options for the Caterpillar Filter Transform */
|
5 | export 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 | */
|
26 | export 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 |
|
47 | export default Filter
|