90 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			90 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", { value: true });
							 | 
						||
| 
								 | 
							
								var context_1 = require("../logger/context");
							 | 
						||
| 
								 | 
							
								var level_1 = require("../logger/level");
							 | 
						||
| 
								 | 
							
								var extendArray = function (array) {
							 | 
						||
| 
								 | 
							
								    return Object.defineProperty(array, 'last', {
							 | 
						||
| 
								 | 
							
								        configurable: true,
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								            return this[this.length - 1];
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								exports.extendArray = extendArray;
							 | 
						||
| 
								 | 
							
								var LogTargetMock = (function () {
							 | 
						||
| 
								 | 
							
								    function LogTargetMock(minLevel) {
							 | 
						||
| 
								 | 
							
								        if (minLevel === void 0) { minLevel = -Infinity; }
							 | 
						||
| 
								 | 
							
								        var _this = this;
							 | 
						||
| 
								 | 
							
								        this.minLevel = minLevel;
							 | 
						||
| 
								 | 
							
								        this.messages = Object.defineProperties(extendArray([]), {
							 | 
						||
| 
								 | 
							
								            trace: { get: function () { return _this.filteredMessages(level_1.LogLevels.trace); } },
							 | 
						||
| 
								 | 
							
								            debug: { get: function () { return _this.filteredMessages(level_1.LogLevels.debug); } },
							 | 
						||
| 
								 | 
							
								            info: { get: function () { return _this.filteredMessages(level_1.LogLevels.info); } },
							 | 
						||
| 
								 | 
							
								            warn: { get: function () { return _this.filteredMessages(level_1.LogLevels.warn); } },
							 | 
						||
| 
								 | 
							
								            error: { get: function () { return _this.filteredMessages(level_1.LogLevels.error); } },
							 | 
						||
| 
								 | 
							
								            fatal: { get: function () { return _this.filteredMessages(level_1.LogLevels.fatal); } },
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								        this.lines = Object.defineProperties(extendArray([]), {
							 | 
						||
| 
								 | 
							
								            trace: { get: function () { return _this.filteredLines(level_1.LogLevels.trace); } },
							 | 
						||
| 
								 | 
							
								            debug: { get: function () { return _this.filteredLines(level_1.LogLevels.debug); } },
							 | 
						||
| 
								 | 
							
								            info: { get: function () { return _this.filteredLines(level_1.LogLevels.info); } },
							 | 
						||
| 
								 | 
							
								            warn: { get: function () { return _this.filteredLines(level_1.LogLevels.warn); } },
							 | 
						||
| 
								 | 
							
								            error: { get: function () { return _this.filteredLines(level_1.LogLevels.error); } },
							 | 
						||
| 
								 | 
							
								            fatal: { get: function () { return _this.filteredLines(level_1.LogLevels.fatal); } },
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								        this.stream = {
							 | 
						||
| 
								 | 
							
								            write: function (msg) { return !!_this.lines.push(msg); },
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    LogTargetMock.prototype.format = function (msg) {
							 | 
						||
| 
								 | 
							
								        this.messages.push(msg);
							 | 
						||
| 
								 | 
							
								        var lvl = msg.context[context_1.LogContexts.logLevel];
							 | 
						||
| 
								 | 
							
								        if (lvl != null) {
							 | 
						||
| 
								 | 
							
								            return "[level:" + lvl + "] " + msg.message;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return msg.message;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    LogTargetMock.prototype.clear = function () {
							 | 
						||
| 
								 | 
							
								        this.messages.splice(0, this.messages.length);
							 | 
						||
| 
								 | 
							
								        this.lines.splice(0, this.lines.length);
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    LogTargetMock.prototype.filteredMessages = function (level, untilLevel) {
							 | 
						||
| 
								 | 
							
								        var filter;
							 | 
						||
| 
								 | 
							
								        if (level == null) {
							 | 
						||
| 
								 | 
							
								            filter = function (m) { return m.context[context_1.LogContexts.logLevel] == null; };
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else if (untilLevel != null) {
							 | 
						||
| 
								 | 
							
								            filter = function (m) {
							 | 
						||
| 
								 | 
							
								                var lvl = m.context[context_1.LogContexts.logLevel];
							 | 
						||
| 
								 | 
							
								                return lvl != null && lvl >= level && lvl <= untilLevel;
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            filter = function (m) { return m.context[context_1.LogContexts.logLevel] === level; };
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return extendArray(this.messages.filter(filter));
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    LogTargetMock.prototype.filteredLines = function (level, untilLevel) {
							 | 
						||
| 
								 | 
							
								        var extractLevel = function (line) {
							 | 
						||
| 
								 | 
							
								            var level = (line.match(/^\[level:([0-9]+)\] /) || [])[1];
							 | 
						||
| 
								 | 
							
								            return level == null ? undefined : parseInt(level, 10);
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								        var filter;
							 | 
						||
| 
								 | 
							
								        if (level == null) {
							 | 
						||
| 
								 | 
							
								            filter = function (line) { return extractLevel(line) === undefined; };
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else if (untilLevel != null) {
							 | 
						||
| 
								 | 
							
								            filter = function (line) {
							 | 
						||
| 
								 | 
							
								                var lvl = extractLevel(line);
							 | 
						||
| 
								 | 
							
								                return lvl != null && lvl >= level && lvl <= untilLevel;
							 | 
						||
| 
								 | 
							
								            };
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        else {
							 | 
						||
| 
								 | 
							
								            filter = function (line) { return extractLevel(line) === level; };
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return extendArray(this.lines.filter(filter));
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    return LogTargetMock;
							 | 
						||
| 
								 | 
							
								}());
							 | 
						||
| 
								 | 
							
								exports.LogTargetMock = LogTargetMock;
							 |