Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / method-override / node_modules / debug / debug.js
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
9 exports = module.exports = debug.debug = debug;
10 exports.coerce = coerce;
11 exports.disable = disable;
12 exports.enable = enable;
13 exports.enabled = enabled;
14 exports.humanize = require('ms');
15
16 /**
17  * The currently active debug mode names, and names to skip.
18  */
19
20 exports.names = [];
21 exports.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
29 exports.formatters = {};
30
31 /**
32  * Previously assigned color.
33  */
34
35 var prevColor = 0;
36
37 /**
38  * Previous log timestamp.
39  */
40
41 var prevTime;
42
43 /**
44  * Select a color.
45  *
46  * @return {Number}
47  * @api private
48  */
49
50 function 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
62 function 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 = new Array(arguments.length);
87     for (var i = 0; i < args.length; i++) {
88       args[i] = arguments[i];
89     }
90
91     args[0] = exports.coerce(args[0]);
92
93     if ('string' !== typeof args[0]) {
94       // anything else let's inspect with %o
95       args = ['%o'].concat(args);
96     }
97
98     // apply any `formatters` transformations
99     var index = 0;
100     args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {
101       // if we encounter an escaped % then don't increase the array index
102       if (match === '%%') return match;
103       index++;
104       var formatter = exports.formatters[format];
105       if ('function' === typeof formatter) {
106         var val = args[index];
107         match = formatter.call(self, val);
108
109         // now we need to remove `args[index]` since it's inlined in the `format`
110         args.splice(index, 1);
111         index--;
112       }
113       return match;
114     });
115
116     // apply env-specific formatting
117     args = exports.formatArgs.apply(self, args);
118
119     var logFn = enabled.log || exports.log || console.log.bind(console);
120     logFn.apply(self, args);
121   }
122   enabled.enabled = true;
123
124   var fn = exports.enabled(namespace) ? enabled : disabled;
125
126   fn.namespace = namespace;
127
128   return fn;
129 }
130
131 /**
132  * Enables a debug mode by namespaces. This can include modes
133  * separated by a colon and wildcards.
134  *
135  * @param {String} namespaces
136  * @api public
137  */
138
139 function enable(namespaces) {
140   exports.save(namespaces);
141
142   var split = (namespaces || '').split(/[\s,]+/);
143   var len = split.length;
144
145   for (var i = 0; i < len; i++) {
146     if (!split[i]) continue; // ignore empty strings
147     namespaces = split[i].replace(/[\\^$+?.()|[\]{}]/g, '\\$&').replace(/\*/g, '.*?');
148     if (namespaces[0] === '-') {
149       exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
150     } else {
151       exports.names.push(new RegExp('^' + namespaces + '$'));
152     }
153   }
154 }
155
156 /**
157  * Disable debug output.
158  *
159  * @api public
160  */
161
162 function disable() {
163   exports.enable('');
164 }
165
166 /**
167  * Returns true if the given mode name is enabled, false otherwise.
168  *
169  * @param {String} name
170  * @return {Boolean}
171  * @api public
172  */
173
174 function enabled(name) {
175   var i, len;
176   for (i = 0, len = exports.skips.length; i < len; i++) {
177     if (exports.skips[i].test(name)) {
178       return false;
179     }
180   }
181   for (i = 0, len = exports.names.length; i < len; i++) {
182     if (exports.names[i].test(name)) {
183       return true;
184     }
185   }
186   return false;
187 }
188
189 /**
190  * Coerce `val`.
191  *
192  * @param {Mixed} val
193  * @return {Mixed}
194  * @api private
195  */
196
197 function coerce(val) {
198   if (val instanceof Error) return val.stack || val.message;
199   return val;
200 }