UNPKG

xterm

Version:

Full xterm terminal, in your browser

98 lines (79 loc) 2.42 kB
/** * Copyright (c) 2019 The xterm.js authors. All rights reserved. * @license MIT */ import { ILogService, IOptionsService } from 'common/services/Services'; type LogType = (message?: any, ...optionalParams: any[]) => void; interface IConsole { log: LogType; error: LogType; info: LogType; trace: LogType; warn: LogType; } // console is available on both node.js and browser contexts but the common // module doesn't depend on them so we need to explicitly declare it. declare const console: IConsole; export enum LogLevel { DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3, OFF = 4 } const optionsKeyToLogLevel: { [key: string]: LogLevel } = { debug: LogLevel.DEBUG, info: LogLevel.INFO, warn: LogLevel.WARN, error: LogLevel.ERROR, off: LogLevel.OFF }; const LOG_PREFIX = 'xterm.js: '; export class LogService implements ILogService { serviceBrand: any; private _logLevel!: LogLevel; constructor( @IOptionsService private readonly _optionsService: IOptionsService ) { this._updateLogLevel(); this._optionsService.onOptionChange(key => { if (key === 'logLevel') { this._updateLogLevel(); } }); } private _updateLogLevel(): void { this._logLevel = optionsKeyToLogLevel[this._optionsService.options.logLevel]; } private _evalLazyOptionalParams(optionalParams: any[]): void { for (let i = 0; i < optionalParams.length; i++) { if (typeof optionalParams[i] === 'function') { optionalParams[i] = optionalParams[i](); } } } private _log(type: LogType, message: string, optionalParams: any[]): void { this._evalLazyOptionalParams(optionalParams); type.call(console, LOG_PREFIX + message, ...optionalParams); } debug(message: string, ...optionalParams: any[]): void { if (this._logLevel <= LogLevel.DEBUG) { this._log(console.log, message, optionalParams); } } info(message: string, ...optionalParams: any[]): void { if (this._logLevel <= LogLevel.INFO) { this._log(console.info, message, optionalParams); } } warn(message: string, ...optionalParams: any[]): void { if (this._logLevel <= LogLevel.WARN) { this._log(console.warn, message, optionalParams); } } error(message: string, ...optionalParams: any[]): void { if (this._logLevel <= LogLevel.ERROR) { this._log(console.error, message, optionalParams); } } }