98 lines
2.4 KiB
TypeScript
98 lines
2.4 KiB
TypeScript
/**
|
|
* 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);
|
|
}
|
|
}
|
|
}
|