##// END OF EJS Templates
Added tag v1.3.2 for changeset 32db28d9ca07
Added tag v1.3.2 for changeset 32db28d9ca07

File last commit:

r85:ad9a66d0ebe4 v1.3.1 default
r104:da978c4e697c default
Show More
ConsoleWriter.ts
100 lines | 2.8 KiB | video/mp2t | TypeScriptLexer
/ src / main / ts / log / ConsoleWriter.ts
cin
StringBuilder, TextWriter, ConsoleWriter tests
r82 import { TextWriterBase } from "../text/TextWriterBase";
import { isNull, isNullOrEmptyString, isPrimitive } from "../safe";
import { NullConsole } from "./NullConsole";
interface LogConsole {
debug(...args: any[]): void;
log(...args: any[]): void;
warn(...args: any[]): void;
error(...args: any[]): void;
}
function hasConsole() {
try {
// tslint:disable-next-line:no-console
return (typeof console !== "undefined" && typeof console.log === "function");
} catch {
return false;
}
}
function getConsole() {
return hasConsole() ? console : NullConsole.instance;
}
export class ConsoleWriter extends TextWriterBase {
static readonly default = new ConsoleWriter(getConsole());
private _buffer: any[];
private _out: LogConsole;
private _level: keyof LogConsole;
constructor(out?: LogConsole) {
super();
this._out = out || NullConsole.instance;
this._buffer = [];
this._level = "log";
}
getLogLevel() {
return this._level;
}
setLogLevel(level: keyof LogConsole) {
this._level = level;
}
/** Flushes the buffer to the console
*/
writeNewLine() {
// group text chunks together, and let objects as is
// ['a', 'b', {foo: 'bar'}, 'c', 'd'] -> ['ab', {foo: 'bar'}, 'cd']
// this will prevent from additional spaces to occur in the console
// ['a', 'b'] will be printed as 'a b' rather then 'ab'.
// console.log("writeLine", this._buffer);
let offset = 0;
const args = [];
this._buffer.forEach((v, i) => {
if (!isPrimitive(v)) {
if (offset < i)
args.push(i - offset > 1 ? this._buffer.slice(offset, i).join("") : this._buffer[offset]);
args.push(v);
offset = i + 1;
}
});
if (offset < this._buffer.length)
args.push(this._buffer.slice(offset).join(""));
// console.log("WriteLine", args);
this._out[this._level].apply(this._out, args);
this._buffer = [];
}
/** Adds a text chunk to the buffer. Buffer contents will be flushed when
* the end of line will be printed.
*
* @param text The text to be added to the buffer.
*/
writeText(text: string) {
this._buffer.push(text);
}
/** Wrotes the specified value to the buffer.
*
* @param value The value to be added to the buffer
* @param spec The instructions how to format the value, is this parameter
* is ommited the raw value will be added to the buffer and
* passed directly to the console out.
*/
writeValue(value: any, spec?: string) {
if (isNullOrEmptyString(spec))
this._buffer.push(value);
else
cin
Fixed substitution spec handling in log/ConsoleWriter
r85 super.writeValue(value, spec);
cin
StringBuilder, TextWriter, ConsoleWriter tests
r82 }
}