UNPKG

2.84 kBJavaScriptView Raw
1/**
2 * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
3 * For licensing, see LICENSE.md.
4 */
5
6'use strict';
7
8const chalk = require( 'chalk' );
9const levels = new Map();
10
11// Displays everything.
12levels.set( 'info', new Set( [ 'info' ] ) );
13
14// Displays warning and error logs.
15levels.set( 'warning', new Set( [ 'info', 'warning' ] ) );
16
17// Displays error logs only.
18levels.set( 'error', new Set( [ 'info', 'warning', 'error' ] ) );
19
20/**
21 * Logger module which allows configuring the verbosity level.
22 *
23 * There are three levels of verbosity:
24 * 1. `info` - all messages will be logged,
25 * 2. `warning` - warning and errors will be logged,
26 * 3. `error` - only errors will be logged.
27 *
28 * Usage:
29 *
30 * const logger = require( '@ckeditor/ckeditor5-dev-utils' ).logger;
31 *
32 * const infoLog = logger( 'info' );
33 * infoLog.info( 'Message.' ); // This message will be always displayed.
34 * infoLog.warning( 'Message.' ); // This message will be always displayed.
35 * infoLog.error( 'Message.' ); // This message will be always displayed.
36 *
37 * const warningLog = logger( 'warning' );
38 * warningLog.info( 'Message.' ); // This message won't be displayed.
39 * warningLog.warning( 'Message.' ); // This message will be always displayed.
40 * warningLog.error( 'Message.' ); // This message will be always displayed.
41 *
42 * const errorLog = logger( 'error' );
43 * errorLog.info( 'Message.' ); // This message won't be displayed.
44 * errorLog.warning( 'Message.' ); // This message won't be displayed.
45 * errorLog.error( 'Message.' ); // This message will be always displayed.
46 *
47 * @param {String} moduleVerbosity='info' Level of the verbosity for all log methods.
48 * @returns {Object} logger
49 * @returns {Function} logger.info
50 * @returns {Function} logger.warning
51 * @returns {Function} logger.error
52 */
53module.exports = ( moduleVerbosity = 'info' ) => {
54 return {
55 /**
56 * Displays a message when verbosity level is equal to 'info'.
57 *
58 * @param {String} message Message to log.
59 */
60 info( message ) {
61 this._log( 'info', message );
62 },
63
64 /**
65 * Displays a warning message when verbosity level is equal to 'info' or 'warning'.
66 *
67 * @param {String} message Message to log.
68 */
69 warning( message ) {
70 this._log( 'warning', chalk.yellow( message ) );
71 },
72
73 /**
74 * Displays an error message.
75 *
76 * @param {String} message Message to log.
77 */
78 error( message ) {
79 this._log( 'error', chalk.red( message ) );
80 },
81
82 /**
83 * @private
84 * @param {String} messageVerbosity Verbosity of particular message.
85 * @param {String} message Message to log.
86 */
87 _log( messageVerbosity, message ) {
88 if ( !levels.get( messageVerbosity ).has( moduleVerbosity ) ) {
89 return;
90 }
91
92 console.log( message );
93 }
94 };
95};