##// END OF EJS Templates
Added childContainer service to container services, ServiceContaier is destroyable, fixed browser Uuid version
Added childContainer service to container services, ServiceContaier is destroyable, fixed browser Uuid version

File last commit:

r85:ad9a66d0ebe4 v1.3.1 default
r146:f3f5c56d3b3e v1.4.0-rc5 default
Show More
ConsoleWriter.ts
100 lines | 2.8 KiB | video/mp2t | TypeScriptLexer
/ src / main / ts / log / ConsoleWriter.ts
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
super.writeValue(value, spec);
}
}