Spaces:
Runtime error
Runtime error
| /** | |
| * This is the common logic for both the Node.js and web browser | |
| * implementations of `debug()`. | |
| * | |
| * Expose `debug()` as the module. | |
| */ | |
| exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; | |
| exports.coerce = coerce; | |
| exports.disable = disable; | |
| exports.enable = enable; | |
| exports.enabled = enabled; | |
| exports.humanize = require('ms'); | |
| /** | |
| * The currently active debug mode names, and names to skip. | |
| */ | |
| exports.names = []; | |
| exports.skips = []; | |
| /** | |
| * Map of special "%n" handling functions, for the debug "format" argument. | |
| * | |
| * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". | |
| */ | |
| exports.formatters = {}; | |
| /** | |
| * Previous log timestamp. | |
| */ | |
| var prevTime; | |
| /** | |
| * Select a color. | |
| * @param {String} namespace | |
| * @return {Number} | |
| * @api private | |
| */ | |
| function selectColor(namespace) { | |
| var hash = 0, i; | |
| for (i in namespace) { | |
| hash = ((hash << 5) - hash) + namespace.charCodeAt(i); | |
| hash |= 0; // Convert to 32bit integer | |
| } | |
| return exports.colors[Math.abs(hash) % exports.colors.length]; | |
| } | |
| /** | |
| * Create a debugger with the given `namespace`. | |
| * | |
| * @param {String} namespace | |
| * @return {Function} | |
| * @api public | |
| */ | |
| function createDebug(namespace) { | |
| function debug() { | |
| // disabled? | |
| if (!debug.enabled) return; | |
| var self = debug; | |
| // set `diff` timestamp | |
| var curr = +new Date(); | |
| var ms = curr - (prevTime || curr); | |
| self.diff = ms; | |
| self.prev = prevTime; | |
| self.curr = curr; | |
| prevTime = curr; | |
| // turn the `arguments` into a proper Array | |
| var args = new Array(arguments.length); | |
| for (var i = 0; i < args.length; i++) { | |
| args[i] = arguments[i]; | |
| } | |
| args[0] = exports.coerce(args[0]); | |
| if ('string' !== typeof args[0]) { | |
| // anything else let's inspect with %O | |
| args.unshift('%O'); | |
| } | |
| // apply any `formatters` transformations | |
| var index = 0; | |
| args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { | |
| // if we encounter an escaped % then don't increase the array index | |
| if (match === '%%') return match; | |
| index++; | |
| var formatter = exports.formatters[format]; | |
| if ('function' === typeof formatter) { | |
| var val = args[index]; | |
| match = formatter.call(self, val); | |
| // now we need to remove `args[index]` since it's inlined in the `format` | |
| args.splice(index, 1); | |
| index--; | |
| } | |
| return match; | |
| }); | |
| // apply env-specific formatting (colors, etc.) | |
| exports.formatArgs.call(self, args); | |
| var logFn = debug.log || exports.log || console.log.bind(console); | |
| logFn.apply(self, args); | |
| } | |
| debug.namespace = namespace; | |
| debug.enabled = exports.enabled(namespace); | |
| debug.useColors = exports.useColors(); | |
| debug.color = selectColor(namespace); | |
| // env-specific initialization logic for debug instances | |
| if ('function' === typeof exports.init) { | |
| exports.init(debug); | |
| } | |
| return debug; | |
| } | |
| /** | |
| * Enables a debug mode by namespaces. This can include modes | |
| * separated by a colon and wildcards. | |
| * | |
| * @param {String} namespaces | |
| * @api public | |
| */ | |
| function enable(namespaces) { | |
| exports.save(namespaces); | |
| exports.names = []; | |
| exports.skips = []; | |
| var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); | |
| var len = split.length; | |
| for (var i = 0; i < len; i++) { | |
| if (!split[i]) continue; // ignore empty strings | |
| namespaces = split[i].replace(/\*/g, '.*?'); | |
| if (namespaces[0] === '-') { | |
| exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); | |
| } else { | |
| exports.names.push(new RegExp('^' + namespaces + '$')); | |
| } | |
| } | |
| } | |
| /** | |
| * Disable debug output. | |
| * | |
| * @api public | |
| */ | |
| function disable() { | |
| exports.enable(''); | |
| } | |
| /** | |
| * Returns true if the given mode name is enabled, false otherwise. | |
| * | |
| * @param {String} name | |
| * @return {Boolean} | |
| * @api public | |
| */ | |
| function enabled(name) { | |
| var i, len; | |
| for (i = 0, len = exports.skips.length; i < len; i++) { | |
| if (exports.skips[i].test(name)) { | |
| return false; | |
| } | |
| } | |
| for (i = 0, len = exports.names.length; i < len; i++) { | |
| if (exports.names[i].test(name)) { | |
| return true; | |
| } | |
| } | |
| return false; | |
| } | |
| /** | |
| * Coerce `val`. | |
| * | |
| * @param {Mixed} val | |
| * @return {Mixed} | |
| * @api private | |
| */ | |
| function coerce(val) { | |
| if (val instanceof Error) return val.stack || val.message; | |
| return val; | |
| } | |