UNPKG

probe.gl

Version:

JavaScript Console Instrumentation and Benchmarking for Browser and Node

601 lines (527 loc) 16.4 kB
"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