509dc0dedd1ec332e5346c51ddf0a1f00f310de9
[yaffs-website] / node_modules / extract-zip / node_modules / debug / debug.js
1
2 /**
3  * Expose `debug()` as the module.
4  */
5
6 module.exports = debug;
7
8 /**
9  * Create a debugger with the given `name`.
10  *
11  * @param {String} name
12  * @return {Type}
13  * @api public
14  */
15
16 function debug(name) {
17   if (!debug.enabled(name)) return function(){};
18
19   return function(fmt){
20     fmt = coerce(fmt);
21
22     var curr = new Date;
23     var ms = curr - (debug[name] || curr);
24     debug[name] = curr;
25
26     fmt = name
27       + ' '
28       + fmt
29       + ' +' + debug.humanize(ms);
30
31     // This hackery is required for IE8
32     // where `console.log` doesn't have 'apply'
33     window.console
34       && console.log
35       && Function.prototype.apply.call(console.log, console, arguments);
36   }
37 }
38
39 /**
40  * The currently active debug mode names.
41  */
42
43 debug.names = [];
44 debug.skips = [];
45
46 /**
47  * Enables a debug mode by name. This can include modes
48  * separated by a colon and wildcards.
49  *
50  * @param {String} name
51  * @api public
52  */
53
54 debug.enable = function(name) {
55   try {
56     localStorage.debug = name;
57   } catch(e){}
58
59   var split = (name || '').split(/[\s,]+/)
60     , len = split.length;
61
62   for (var i = 0; i < len; i++) {
63     name = split[i].replace('*', '.*?');
64     if (name[0] === '-') {
65       debug.skips.push(new RegExp('^' + name.substr(1) + '$'));
66     }
67     else {
68       debug.names.push(new RegExp('^' + name + '$'));
69     }
70   }
71 };
72
73 /**
74  * Disable debug output.
75  *
76  * @api public
77  */
78
79 debug.disable = function(){
80   debug.enable('');
81 };
82
83 /**
84  * Humanize the given `ms`.
85  *
86  * @param {Number} m
87  * @return {String}
88  * @api private
89  */
90
91 debug.humanize = function(ms) {
92   var sec = 1000
93     , min = 60 * 1000
94     , hour = 60 * min;
95
96   if (ms >= hour) return (ms / hour).toFixed(1) + 'h';
97   if (ms >= min) return (ms / min).toFixed(1) + 'm';
98   if (ms >= sec) return (ms / sec | 0) + 's';
99   return ms + 'ms';
100 };
101
102 /**
103  * Returns true if the given mode name is enabled, false otherwise.
104  *
105  * @param {String} name
106  * @return {Boolean}
107  * @api public
108  */
109
110 debug.enabled = function(name) {
111   for (var i = 0, len = debug.skips.length; i < len; i++) {
112     if (debug.skips[i].test(name)) {
113       return false;
114     }
115   }
116   for (var i = 0, len = debug.names.length; i < len; i++) {
117     if (debug.names[i].test(name)) {
118       return true;
119     }
120   }
121   return false;
122 };
123
124 /**
125  * Coerce `val`.
126  */
127
128 function coerce(val) {
129   if (val instanceof Error) return val.stack || val.message;
130   return val;
131 }
132
133 // persist
134
135 try {
136   if (window.localStorage) debug.enable(localStorage.debug);
137 } catch(e){}