|
'use strict'; |
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } |
|
|
|
var debug = _interopDefault(require('debug')); |
|
var heimdall = _interopDefault(require('heimdalljs')); |
|
|
|
var asyncGenerator = function () { |
|
function AwaitValue(value) { |
|
this.value = value; |
|
} |
|
|
|
function AsyncGenerator(gen) { |
|
var front, back; |
|
|
|
function send(key, arg) { |
|
return new Promise(function (resolve, reject) { |
|
var request = { |
|
key: key, |
|
arg: arg, |
|
resolve: resolve, |
|
reject: reject, |
|
next: null |
|
}; |
|
|
|
if (back) { |
|
back = back.next = request; |
|
} else { |
|
front = back = request; |
|
resume(key, arg); |
|
} |
|
}); |
|
} |
|
|
|
function resume(key, arg) { |
|
try { |
|
var result = gen[key](arg); |
|
var value = result.value; |
|
|
|
if (value instanceof AwaitValue) { |
|
Promise.resolve(value.value).then(function (arg) { |
|
resume("next", arg); |
|
}, function (arg) { |
|
resume("throw", arg); |
|
}); |
|
} else { |
|
settle(result.done ? "return" : "normal", result.value); |
|
} |
|
} catch (err) { |
|
settle("throw", err); |
|
} |
|
} |
|
|
|
function settle(type, value) { |
|
switch (type) { |
|
case "return": |
|
front.resolve({ |
|
value: value, |
|
done: true |
|
}); |
|
break; |
|
|
|
case "throw": |
|
front.reject(value); |
|
break; |
|
|
|
default: |
|
front.resolve({ |
|
value: value, |
|
done: false |
|
}); |
|
break; |
|
} |
|
|
|
front = front.next; |
|
|
|
if (front) { |
|
resume(front.key, front.arg); |
|
} else { |
|
back = null; |
|
} |
|
} |
|
|
|
this._invoke = send; |
|
|
|
if (typeof gen.return !== "function") { |
|
this.return = undefined; |
|
} |
|
} |
|
|
|
if (typeof Symbol === "function" && Symbol.asyncIterator) { |
|
AsyncGenerator.prototype[Symbol.asyncIterator] = function () { |
|
return this; |
|
}; |
|
} |
|
|
|
AsyncGenerator.prototype.next = function (arg) { |
|
return this._invoke("next", arg); |
|
}; |
|
|
|
AsyncGenerator.prototype.throw = function (arg) { |
|
return this._invoke("throw", arg); |
|
}; |
|
|
|
AsyncGenerator.prototype.return = function (arg) { |
|
return this._invoke("return", arg); |
|
}; |
|
|
|
return { |
|
wrap: function (fn) { |
|
return function () { |
|
return new AsyncGenerator(fn.apply(this, arguments)); |
|
}; |
|
}, |
|
await: function (value) { |
|
return new AwaitValue(value); |
|
} |
|
}; |
|
}(); |
|
|
|
var classCallCheck = function (instance, Constructor) { |
|
if (!(instance instanceof Constructor)) { |
|
throw new TypeError("Cannot call a class as a function"); |
|
} |
|
}; |
|
|
|
var createClass = function () { |
|
function defineProperties(target, props) { |
|
for (var i = 0; i < props.length; i++) { |
|
var descriptor = props[i]; |
|
descriptor.enumerable = descriptor.enumerable || false; |
|
descriptor.configurable = true; |
|
if ("value" in descriptor) descriptor.writable = true; |
|
Object.defineProperty(target, descriptor.key, descriptor); |
|
} |
|
} |
|
|
|
return function (Constructor, protoProps, staticProps) { |
|
if (protoProps) defineProperties(Constructor.prototype, protoProps); |
|
if (staticProps) defineProperties(Constructor, staticProps); |
|
return Constructor; |
|
}; |
|
}(); |
|
|
|
var MATCHER = function MATCHER(n) { |
|
return true; |
|
}; |
|
|
|
var Prefixer = function () { |
|
function Prefixer() { |
|
classCallCheck(this, Prefixer); |
|
|
|
var logConfig = heimdall.configFor('logging'); |
|
|
|
this.matcher = logConfig.matcher || MATCHER; |
|
this.depth = typeof logConfig.depth === 'number' ? logConfig.depth : 3; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
createClass(Prefixer, [{ |
|
key: 'prefix', |
|
value: function prefix() { |
|
var parts = []; |
|
var node = heimdall.current; |
|
|
|
while (node) { |
|
if (node.isRoot || parts.length >= this.depth) { |
|
break; |
|
} |
|
|
|
if (this.matcher(node.id)) { |
|
parts.push(node.id.name + '#' + node._id); |
|
} |
|
|
|
node = node.parent; |
|
} |
|
|
|
return parts.length > 0 ? '[' + parts.reverse().join(' -> ') + '] ' : ''; |
|
} |
|
}]); |
|
return Prefixer; |
|
}(); |
|
|
|
var ERROR = 0; |
|
var WARN = 1; |
|
var INFO = 2; |
|
var DEBUG = 3; |
|
var TRACE = 4; |
|
var Logger = function () { |
|
function Logger(namespace, level) { |
|
classCallCheck(this, Logger); |
|
|
|
this.level = level; |
|
|
|
this._print = debug(namespace); |
|
this._prefixer = new Prefixer(); |
|
} |
|
|
|
createClass(Logger, [{ |
|
key: '_message', |
|
value: function _message(level, msg) { |
|
if (level <= this.level) { |
|
for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { |
|
args[_key - 2] = arguments[_key]; |
|
} |
|
|
|
this._print.apply(this, ['' + this._prefixer.prefix() + msg].concat(args)); |
|
} |
|
} |
|
}, { |
|
key: 'trace', |
|
value: function trace() { |
|
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { |
|
args[_key2] = arguments[_key2]; |
|
} |
|
|
|
return this._message.apply(this, [TRACE].concat(args)); |
|
} |
|
}, { |
|
key: 'debug', |
|
value: function debug() { |
|
for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { |
|
args[_key3] = arguments[_key3]; |
|
} |
|
|
|
return this._message.apply(this, [DEBUG].concat(args)); |
|
} |
|
}, { |
|
key: 'info', |
|
value: function info() { |
|
for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { |
|
args[_key4] = arguments[_key4]; |
|
} |
|
|
|
return this._message.apply(this, [INFO].concat(args)); |
|
} |
|
}, { |
|
key: 'warn', |
|
value: function warn() { |
|
for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { |
|
args[_key5] = arguments[_key5]; |
|
} |
|
|
|
return this._message.apply(this, [WARN].concat(args)); |
|
} |
|
}, { |
|
key: 'error', |
|
value: function error() { |
|
for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { |
|
args[_key6] = arguments[_key6]; |
|
} |
|
|
|
return this._message.apply(this, [ERROR].concat(args)); |
|
} |
|
}]); |
|
return Logger; |
|
}(); |
|
|
|
var NULL_LOGGER = { |
|
trace: function trace() {}, |
|
debug: function debug() {}, |
|
info: function info() {}, |
|
warn: function warn() {}, |
|
error: function error() {} |
|
}; |
|
|
|
function computeDebugLevel() { |
|
var level = void 0; |
|
|
|
if (!process.env.DEBUG_LEVEL) { |
|
level = INFO; |
|
} else { |
|
switch (process.env.DEBUG_LEVEL.toUpperCase()) { |
|
case 'ERROR': |
|
level = ERROR;break; |
|
case 'WARN': |
|
level = WARN;break; |
|
case 'INFO': |
|
level = INFO;break; |
|
case 'DEBUG': |
|
level = DEBUG;break; |
|
case 'TRACE': |
|
level = TRACE;break; |
|
default: |
|
level = parseInt(process.env.DEBUG_LEVEL, 10); |
|
} |
|
} |
|
|
|
logGenerator.debugLevel = level; |
|
} |
|
|
|
function logGenerator(namespace) { |
|
if (debug.enabled(namespace)) { |
|
if (logGenerator.debugLevel === undefined) { |
|
computeDebugLevel(); |
|
} |
|
|
|
return new Logger(namespace, logGenerator.debugLevel); |
|
} else { |
|
return NULL_LOGGER; |
|
} |
|
} |
|
|
|
logGenerator.debugLevel = undefined; |
|
|
|
module.exports = logGenerator; |