import { Message } from './Message'; import { MessageType, MessageTypes, Verbose } from './MessageType'; import { MessageColors } from "./MessageColors"; export class MessageWriter { protected _messages:Message[] = []; autologToConsole:boolean = false; consoleLogLevel:number = 1; constructor( messages:Message[] = null ) { this._messages = messages || []; } set messages( messages:Message[] ) { this._messages = messages; } get messages() { return this._messages; } logMessages() { let mw = new MessageWriter(); mw.autologToConsole = true; this._messages.forEach( m => mw.addMessage( m ) ); } addMessage( message:Message ) { let colors = MessageColors; /*let message = new Message(); message.type = type; message.content = content; */ let type = message.type; let content = message.content; this._messages.push( message ); if ( this.autologToConsole ) { if ( this.consoleLogLevel > MessageTypes.getLevel( type ) ) { return; } switch ( type ) { case MessageTypes.Verbose: { console.log( colors.gray( content ) ); } break; case MessageTypes.Info: { console.log( content ); }; break; case MessageTypes.Warning: { console.warn( colors.yellow( content ) ); }; break; case MessageTypes.Error: { console.error( colors.bgRed( colors.black( content ) ) ); }; break; } } } add( type:MessageType, content:string ) { let message = new Message(); message.type = type; message.content = content; this.addMessage( message ); } verbose( content:string ) { this.add( MessageTypes.Verbose, content ); } info( content:string ) { this.add( MessageTypes.Info, content ); } warn( content:string ) { this.add( MessageTypes.Warning, content ); } error( content:string ) { this.add( MessageTypes.Error, content ); } }