debug.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. var toArr = require('./toArr');
  2. var now = require('./now');
  3. var format = require('./format');
  4. var ms = require('./ms');
  5. var isBrowser = require('./isBrowser');
  6. var strHash = require('./strHash');
  7. var ansiColor = require('./ansiColor');
  8. exports = function(name) {
  9. var prevTime;
  10. function debug() {
  11. if (!debug.enabled) return;
  12. var args = toArr(arguments);
  13. var cur = now();
  14. var duration = ms(cur - (prevTime || cur));
  15. prevTime = cur;
  16. var content = format.apply(null, args);
  17. var color = debug.color;
  18. if (isBrowser) {
  19. var style = 'color:' + color;
  20. var inherit = 'color:inherit';
  21. console.log(
  22. '%c' + name + ' %c' + content + ' %c+' + duration,
  23. style,
  24. inherit,
  25. style
  26. );
  27. } else {
  28. console.log(
  29. ansiColor[color](name) +
  30. ': ' +
  31. content +
  32. ansiColor[color](' +' + duration)
  33. );
  34. }
  35. }
  36. debug.enabled = true;
  37. debug.color = selectColor(name);
  38. return debug;
  39. };
  40. var browserColors = [
  41. '#0000CC',
  42. '#0000FF',
  43. '#0033CC',
  44. '#0033FF',
  45. '#0066CC',
  46. '#0066FF',
  47. '#0099CC',
  48. '#0099FF',
  49. '#00CC00',
  50. '#00CC33',
  51. '#00CC66',
  52. '#00CC99',
  53. '#00CCCC',
  54. '#00CCFF',
  55. '#3300CC',
  56. '#3300FF',
  57. '#3333CC',
  58. '#3333FF',
  59. '#3366CC',
  60. '#3366FF',
  61. '#3399CC',
  62. '#3399FF',
  63. '#33CC00',
  64. '#33CC33',
  65. '#33CC66',
  66. '#33CC99',
  67. '#33CCCC',
  68. '#33CCFF',
  69. '#6600CC',
  70. '#6600FF',
  71. '#6633CC',
  72. '#6633FF',
  73. '#66CC00',
  74. '#66CC33',
  75. '#9900CC',
  76. '#9900FF',
  77. '#9933CC',
  78. '#9933FF',
  79. '#99CC00',
  80. '#99CC33',
  81. '#CC0000',
  82. '#CC0033',
  83. '#CC0066',
  84. '#CC0099',
  85. '#CC00CC',
  86. '#CC00FF',
  87. '#CC3300',
  88. '#CC3333',
  89. '#CC3366',
  90. '#CC3399',
  91. '#CC33CC',
  92. '#CC33FF',
  93. '#CC6600',
  94. '#CC6633',
  95. '#CC9900',
  96. '#CC9933',
  97. '#CCCC00',
  98. '#CCCC33',
  99. '#FF0000',
  100. '#FF0033',
  101. '#FF0066',
  102. '#FF0099',
  103. '#FF00CC',
  104. '#FF00FF',
  105. '#FF3300',
  106. '#FF3333',
  107. '#FF3366',
  108. '#FF3399',
  109. '#FF33CC',
  110. '#FF33FF',
  111. '#FF6600',
  112. '#FF6633',
  113. '#FF9900',
  114. '#FF9933',
  115. '#FFCC00',
  116. '#FFCC33'
  117. ];
  118. var terminalColors = [
  119. 'black',
  120. 'red',
  121. 'green',
  122. 'yellow',
  123. 'blue',
  124. 'magenta',
  125. 'cyan',
  126. 'white',
  127. 'gray',
  128. 'grey',
  129. 'blackBright',
  130. 'redBright',
  131. 'greenBright',
  132. 'yellowBright',
  133. 'blueBright',
  134. 'magentaBright',
  135. 'cyanBright',
  136. 'whiteBright'
  137. ];
  138. function selectColor(name) {
  139. var hash = strHash(name);
  140. if (isBrowser) {
  141. return browserColors[hash % browserColors.length];
  142. } else {
  143. return terminalColors[hash % terminalColors.length];
  144. }
  145. }
  146. module.exports = exports;