arnaucube
arnaucube/raspberryGPIOhtmlserverPublic Self-hosted repository
raspberryGPIOhtmlserver/node_modules/debug/debug.js
node_modules/debug/debug.jsRaw
  1
  2/**
  3 * This is the common logic for both the Node.js and web browser
  4 * implementations of `debug()`.
  5 *
  6 * Expose `debug()` as the module.
  7 */
  8
  9exports = module.exports = debug;
 10exports.coerce = coerce;
 11exports.disable = disable;
 12exports.enable = enable;
 13exports.enabled = enabled;
 14exports.humanize = require('ms');
 15
 16/**
 17 * The currently active debug mode names, and names to skip.
 18 */
 19
 20exports.names = [];
 21exports.skips = [];
 22
 23/**
 24 * Map of special "%n" handling functions, for the debug "format" argument.
 25 *
 26 * Valid key names are a single, lowercased letter, i.e. "n".
 27 */
 28
 29exports.formatters = {};
 30
 31/**
 32 * Previously assigned color.
 33 */
 34
 35var prevColor = 0;
 36
 37/**
 38 * Previous log timestamp.
 39 */
 40
 41var prevTime;
 42
 43/**
 44 * Select a color.
 45 *
 46 * @return {Number}
 47 * @api private
 48 */
 49
 50function selectColor() {
 51  return exports.colors[prevColor++ % exports.colors.length];
 52}
 53
 54/**
 55 * Create a debugger with the given `namespace`.
 56 *
 57 * @param {String} namespace
 58 * @return {Function}
 59 * @api public
 60 */
 61
 62function debug(namespace) {
 63
 64  // define the `disabled` version
 65  function disabled() {
 66  }
 67  disabled.enabled = false;
 68
 69  // define the `enabled` version
 70  function enabled() {
 71
 72    var self = enabled;
 73
 74    // set `diff` timestamp
 75    var curr = +new Date();
 76    var ms = curr - (prevTime || curr);
 77    self.diff = ms;
 78    self.prev = prevTime;
 79    self.curr = curr;
 80    prevTime = curr;
 81
 82    // add the `color` if not set
 83    if (null == self.useColors) self.useColors = exports.useColors();
 84    if (null == self.color && self.useColors) self.color = selectColor();
 85
 86    var args = Array.prototype.slice.call(arguments);
 87
 88    args[0] = exports.coerce(args[0]);
 89
 90    if ('string' !== typeof args[0]) {
 91      // anything else let's inspect with %o
 92      args = ['%o'].concat(args);
 93    }
 94
 95    // apply any `formatters` transformations
 96    var index = 0;
 97    args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {
 98      // if we encounter an escaped % then don't increase the array index
 99      if (match === '%%') return match;
100      index++;
101      var formatter = exports.formatters[format];
102      if ('function' === typeof formatter) {
103        var val = args[index];
104        match = formatter.call(self, val);
105
106        // now we need to remove `args[index]` since it's inlined in the `format`
107        args.splice(index, 1);
108        index--;
109      }
110      return match;
111    });
112
113    if ('function' === typeof exports.formatArgs) {
114      args = exports.formatArgs.apply(self, args);
115    }
116    var logFn = enabled.log || exports.log || console.log.bind(console);
117    logFn.apply(self, args);
118  }
119  enabled.enabled = true;
120
121  var fn = exports.enabled(namespace) ? enabled : disabled;
122
123  fn.namespace = namespace;
124
125  return fn;
126}
127
128/**
129 * Enables a debug mode by namespaces. This can include modes
130 * separated by a colon and wildcards.
131 *
132 * @param {String} namespaces
133 * @api public
134 */
135
136function enable(namespaces) {
137  exports.save(namespaces);
138
139  var split = (namespaces || '').split(/[\s,]+/);
140  var len = split.length;
141
142  for (var i = 0; i < len; i++) {
143    if (!split[i]) continue; // ignore empty strings
144    namespaces = split[i].replace(/\*/g, '.*?');
145    if (namespaces[0] === '-') {
146      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
147    } else {
148      exports.names.push(new RegExp('^' + namespaces + '$'));
149    }
150  }
151}
152
153/**
154 * Disable debug output.
155 *
156 * @api public
157 */
158
159function disable() {
160  exports.enable('');
161}
162
163/**
164 * Returns true if the given mode name is enabled, false otherwise.
165 *
166 * @param {String} name
167 * @return {Boolean}
168 * @api public
169 */
170
171function enabled(name) {
172  var i, len;
173  for (i = 0, len = exports.skips.length; i < len; i++) {
174    if (exports.skips[i].test(name)) {
175      return false;
176    }
177  }
178  for (i = 0, len = exports.names.length; i < len; i++) {
179    if (exports.names[i].test(name)) {
180      return true;
181    }
182  }
183  return false;
184}
185
186/**
187 * Coerce `val`.
188 *
189 * @param {Mixed} val
190 * @return {Mixed}
191 * @api private
192 */
193
194function coerce(val) {
195  if (val instanceof Error) return val.stack || val.message;
196  return val;
197}