probe.gl
Version:
JavaScript Console Instrumentation and Benchmarking for Browser and Node
601 lines (527 loc) • 16.4 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _globals = require("./utils/globals");
var _localStorage = _interopRequireDefault(require("./utils/local-storage"));
var _timestamp = require("./utils/timestamp");
var _formatters = require("./utils/formatters");
var _color = require("./utils/color");
var _autobind = require("./utils/autobind");
var _assert2 = _interopRequireDefault(require("../lib/utils/assert"));
var originalConsole = {
debug: _globals.isBrowser ? console.debug || console.log : console.log,
log: console.log,
info: console.info,
warn: console.warn,
error: console.error
};
var DEFAULT_SETTINGS = {
enabled: false,
priority: 0
};
function noop() {}
var cache = {};
function getTableHeader(table) {
for (var key in table) {
for (var title in table[key]) {
return title || 'untitled';
}
}
return 'empty';
}
var Log = function () {
function Log() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
id = _ref.id;
(0, _classCallCheck2.default)(this, Log);
this.id = id;
this.VERSION = _globals.VERSION;
this._startTs = (0, _timestamp.getTimestamp)();
this._deltaTs = (0, _timestamp.getTimestamp)();
this.LOG_THROTTLE_TIMEOUT = 0;
this._storage = new _localStorage.default("__probe-".concat(this.id, "__"), DEFAULT_SETTINGS);
this.userData = {};
this.timeStamp("".concat(this.id, " started"));
(0, _autobind.autobind)(this);
Object.seal(this);
}
(0, _createClass2.default)(Log, [{
key: "isEnabled",
value: function isEnabled() {
return this._storage.config.enabled;
}
}, {
key: "getPriority",
value: function getPriority() {
return this._storage.config.priority;
}
}, {
key: "getLevel",
value: function getLevel() {
return this._storage.config.priority;
}
}, {
key: "getTotal",
value: function getTotal() {
return Number(((0, _timestamp.getTimestamp)() - this._startTs).toPrecision(10));
}
}, {
key: "getDelta",
value: function getDelta() {
return Number(((0, _timestamp.getTimestamp)() - this._deltaTs).toPrecision(10));
}
}, {
key: "enable",
value: function enable() {
var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
this._storage.updateConfiguration({
enabled: enabled
});
return this;
}
}, {
key: "setLevel",
value: function setLevel(level) {
this._storage.updateConfiguration({
priority: level
});
return this;
}
}, {
key: "assert",
value: function assert(condition, message) {
(0, _assert2.default)(condition, message);
}
}, {
key: "warn",
value: function warn(message) {
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
return this._getLogFunction({
message: message,
args: args,
method: originalConsole.warn,
once: true
});
}
}, {
key: "error",
value: function error(message) {
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
return this._getLogFunction({
message: message,
args: args,
method: originalConsole.error
});
}
}, {
key: "deprecated",
value: function deprecated(oldUsage, newUsage) {
return this.warn("`".concat(oldUsage, "` is deprecated and will be removed in a later version. Use `").concat(newUsage, "` instead"));
}
}, {
key: "removed",
value: function removed(oldUsage, newUsage) {
return this.error("`".concat(oldUsage, "` has been removed. Use `").concat(newUsage, "` instead"));
}
}, {
key: "probe",
value: function probe(priority, message) {
for (var _len3 = arguments.length, args = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {
args[_key3 - 2] = arguments[_key3];
}
return this._getLogFunction({
priority: priority,
message: message,
args: args,
method: originalConsole.log,
time: true,
once: true
});
}
}, {
key: "log",
value: function log(priority, message) {
for (var _len4 = arguments.length, args = new Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) {
args[_key4 - 2] = arguments[_key4];
}
return this._getLogFunction({
priority: priority,
message: message,
args: args,
method: originalConsole.debug
});
}
}, {
key: "info",
value: function info(priority, message) {
for (var _len5 = arguments.length, args = new Array(_len5 > 2 ? _len5 - 2 : 0), _key5 = 2; _key5 < _len5; _key5++) {
args[_key5 - 2] = arguments[_key5];
}
return this._getLogFunction({
priority: priority,
message: message,
args: args,
method: console.info
});
}
}, {
key: "once",
value: function once(priority, message) {
for (var _len6 = arguments.length, args = new Array(_len6 > 2 ? _len6 - 2 : 0), _key6 = 2; _key6 < _len6; _key6++) {
args[_key6 - 2] = arguments[_key6];
}
return this._getLogFunction({
priority: priority,
message: message,
args: args,
method: originalConsole.debug || originalConsole.info,
once: true
});
}
}, {
key: "table",
value: function table(priority, _table, columns) {
if (_table) {
var tag = getTableHeader(_table);
return this._getLogFunction({
priority: priority,
message: _table,
args: columns && [columns],
tag: tag,
method: console.table || noop
});
}
return noop;
}
}, {
key: "image",
value: function image(_ref2) {
var priority = _ref2.priority,
_image = _ref2.image,
_ref2$message = _ref2.message,
message = _ref2$message === void 0 ? '' : _ref2$message,
_ref2$scale = _ref2.scale,
scale = _ref2$scale === void 0 ? 1 : _ref2$scale;
if (priority > this.getPriority()) {
return noop;
}
return _globals.isBrowser ? this._logImageInBrowser({
image: _image,
message: message,
scale: scale
}) : this._logImageInNode({
image: _image,
message: message,
scale: scale
});
}
}, {
key: "settings",
value: function settings() {
if (console.table) {
console.table(this._storage.config);
} else {
console.log(this._storage.config);
}
}
}, {
key: "get",
value: function get(setting) {
return this._storage.config[setting];
}
}, {
key: "set",
value: function set(setting, value) {
this._storage.updateConfiguration((0, _defineProperty2.default)({}, setting, value));
}
}, {
key: "_logImageInNode",
value: function _logImageInNode(_ref3) {
var image = _ref3.image,
_ref3$message = _ref3.message,
message = _ref3$message === void 0 ? '' : _ref3$message,
_ref3$scale = _ref3.scale,
scale = _ref3$scale === void 0 ? 1 : _ref3$scale;
var asciify = null;
try {
asciify = module.require('asciify-image');
} catch (error) {}
if (asciify) {
return function () {
return asciify(image, {
fit: 'box',
width: "".concat(Math.round(80 * scale), "%")
}).then(function (data) {
return console.log(data);
});
};
}
return noop;
}
}, {
key: "_logImageInBrowser",
value: function _logImageInBrowser(_ref4) {
var image = _ref4.image,
_ref4$message = _ref4.message,
message = _ref4$message === void 0 ? '' : _ref4$message,
_ref4$scale = _ref4.scale,
scale = _ref4$scale === void 0 ? 1 : _ref4$scale;
if (typeof image === 'string') {
var img = new Image();
img.onload = function () {
var _console;
var args = (0, _formatters.formatImage)(img, message, scale);
(_console = console).log.apply(_console, (0, _toConsumableArray2.default)(args));
};
img.src = image;
return noop;
}
var element = image.nodeName || '';
if (element.toLowerCase() === 'img') {
var _console2;
(_console2 = console).log.apply(_console2, (0, _toConsumableArray2.default)((0, _formatters.formatImage)(image, message, scale)));
return noop;
}
if (element.toLowerCase() === 'canvas') {
var _img = new Image();
_img.onload = function () {
var _console3;
return (_console3 = console).log.apply(_console3, (0, _toConsumableArray2.default)((0, _formatters.formatImage)(_img, message, scale)));
};
_img.src = image.toDataURL();
return noop;
}
return noop;
}
}, {
key: "time",
value: function time(priority, message) {
return this._getLogFunction({
priority: priority,
message: message,
method: console.time ? console.time : console.info
});
}
}, {
key: "timeEnd",
value: function timeEnd(priority, message) {
return this._getLogFunction({
priority: priority,
message: message,
method: console.timeEnd ? console.timeEnd : console.info
});
}
}, {
key: "timeStamp",
value: function timeStamp(priority, message) {
return this._getLogFunction({
priority: priority,
message: message,
method: console.timeStamp || noop
});
}
}, {
key: "group",
value: function group(priority, message) {
var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
collapsed: false
};
opts = this._normalizeArguments({
priority: priority,
message: message,
opts: opts
});
var _opts = opts,
collapsed = _opts.collapsed;
return this._getLogFunction({
priority: priority,
message: message,
opts: opts,
method: (collapsed ? console.groupCollapsed : console.group) || console.info
});
}
}, {
key: "groupCollapsed",
value: function groupCollapsed(priority, message) {
var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
return this.group(priority, message, Object.assign({}, opts, {
collapsed: true
}));
}
}, {
key: "groupEnd",
value: function groupEnd(priority) {
return this._getLogFunction({
priority: priority,
message: '',
method: console.groupEnd || noop
});
}
}, {
key: "withGroup",
value: function withGroup(priority, message, func) {
var opts = this._normalizeArguments({
priority: priority,
message: message
});
this.group(opts);
try {
func();
} finally {
this.groupEnd(opts.message);
}
}
}, {
key: "trace",
value: function trace() {
if (console.trace) {
console.trace();
}
}
}, {
key: "_shouldLog",
value: function _shouldLog(priority) {
priority = this._normalizePriority(priority);
return priority === 0 || this.isEnabled() && this.getPriority() >= priority;
}
}, {
key: "_getElapsedTime",
value: function _getElapsedTime() {
var total = this.getTotal();
var delta = this.getDelta();
this._deltaTs = (0, _timestamp.getTimestamp)();
return {
total: total,
delta: delta
};
}
}, {
key: "_getLogFunction",
value: function _getLogFunction(opts) {
if (this._shouldLog(opts.priority)) {
var _opts2 = opts,
method = _opts2.method;
opts = this._parseArguments(opts);
(0, _assert2.default)(method);
var _opts3 = opts,
message = _opts3.message;
var tag = opts.tag || opts.message;
if (opts.once) {
if (!cache[tag]) {
cache[tag] = (0, _timestamp.getTimestamp)();
} else {
return noop;
}
}
message = this._decorateMessage(message, opts);
return method.bind.apply(method, [console, message].concat((0, _toConsumableArray2.default)(opts.args)));
}
return noop;
}
}, {
key: "_parseArguments",
value: function _parseArguments(options) {
var normOpts = this._normalizeArguments(options);
var _this$_getElapsedTime = this._getElapsedTime(),
delta = _this$_getElapsedTime.delta,
total = _this$_getElapsedTime.total;
return Object.assign(options, normOpts, {
delta: delta,
total: total
});
}
}, {
key: "_normalizePriority",
value: function _normalizePriority(priority) {
var resolvedPriority;
switch ((0, _typeof2.default)(priority)) {
case 'number':
resolvedPriority = priority;
break;
case 'object':
resolvedPriority = priority.priority || 0;
break;
default:
resolvedPriority = 0;
}
(0, _assert2.default)(Number.isFinite(resolvedPriority) && resolvedPriority >= 0);
return resolvedPriority;
}
}, {
key: "_normalizeArguments",
value: function _normalizeArguments(_ref5) {
var priority = _ref5.priority,
message = _ref5.message,
_ref5$args = _ref5.args,
args = _ref5$args === void 0 ? [] : _ref5$args,
opts = _ref5.opts;
var newOpts = {
priority: this._normalizePriority(priority),
message: message,
args: args
};
switch ((0, _typeof2.default)(priority)) {
case 'string':
case 'function':
if (message !== undefined) {
args.unshift(message);
}
Object.assign(newOpts, {
message: priority
});
break;
case 'object':
Object.assign(newOpts, priority);
break;
default:
}
if (typeof newOpts.message === 'function') {
newOpts.message = this._shouldLog(newOpts.priority) ? newOpts.message() : '';
}
(0, _assert2.default)(typeof newOpts.message === 'string' || (0, _typeof2.default)(newOpts.message) === 'object');
return Object.assign(newOpts, opts);
}
}, {
key: "_decorateMessage",
value: function _decorateMessage(message, opts) {
if (typeof message === 'string') {
var time = '';
if (opts.time) {
var _this$_getElapsedTime2 = this._getElapsedTime(),
total = _this$_getElapsedTime2.total;
time = (0, _formatters.leftPad)((0, _formatters.formatTime)(total));
}
message = opts.time ? "".concat(this.id, ": ").concat(time, " ").concat(message) : "".concat(this.id, ": ").concat(message);
message = (0, _color.addColor)(message, opts.color, opts.background);
}
return message;
}
}, {
key: "priority",
set: function set(newPriority) {
this._storage.updateConfiguration({
priority: newPriority
});
return this;
},
get: function get() {
return this._storage.config.priority;
}
}]);
return Log;
}();
exports.default = Log;
Log.VERSION = _globals.VERSION;
//# sourceMappingURL=log.js.map