index.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.shouldHighlight = shouldHighlight;
  6. exports.getChalk = getChalk;
  7. exports.default = highlight;
  8. function _jsTokens() {
  9. var data = _interopRequireWildcard(require("js-tokens"));
  10. _jsTokens = function _jsTokens() {
  11. return data;
  12. };
  13. return data;
  14. }
  15. function _esutils() {
  16. var data = _interopRequireDefault(require("esutils"));
  17. _esutils = function _esutils() {
  18. return data;
  19. };
  20. return data;
  21. }
  22. function _chalk() {
  23. var data = _interopRequireDefault(require("chalk"));
  24. _chalk = function _chalk() {
  25. return data;
  26. };
  27. return data;
  28. }
  29. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  30. function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
  31. function getDefs(chalk) {
  32. return {
  33. keyword: chalk.cyan,
  34. capitalized: chalk.yellow,
  35. jsx_tag: chalk.yellow,
  36. punctuator: chalk.yellow,
  37. number: chalk.magenta,
  38. string: chalk.green,
  39. regex: chalk.magenta,
  40. comment: chalk.grey,
  41. invalid: chalk.white.bgRed.bold
  42. };
  43. }
  44. var NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
  45. var JSX_TAG = /^[a-z][\w-]*$/i;
  46. var BRACKET = /^[()[\]{}]$/;
  47. function getTokenType(match) {
  48. var _match$slice = match.slice(-2),
  49. offset = _match$slice[0],
  50. text = _match$slice[1];
  51. var token = (0, _jsTokens().matchToToken)(match);
  52. if (token.type === "name") {
  53. if (_esutils().default.keyword.isReservedWordES6(token.value)) {
  54. return "keyword";
  55. }
  56. if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.substr(offset - 2, 2) == "</")) {
  57. return "jsx_tag";
  58. }
  59. if (token.value[0] !== token.value[0].toLowerCase()) {
  60. return "capitalized";
  61. }
  62. }
  63. if (token.type === "punctuator" && BRACKET.test(token.value)) {
  64. return "bracket";
  65. }
  66. if (token.type === "invalid" && (token.value === "@" || token.value === "#")) {
  67. return "punctuator";
  68. }
  69. return token.type;
  70. }
  71. function highlightTokens(defs, text) {
  72. return text.replace(_jsTokens().default, function () {
  73. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  74. args[_key] = arguments[_key];
  75. }
  76. var type = getTokenType(args);
  77. var colorize = defs[type];
  78. if (colorize) {
  79. return args[0].split(NEWLINE).map(function (str) {
  80. return colorize(str);
  81. }).join("\n");
  82. } else {
  83. return args[0];
  84. }
  85. });
  86. }
  87. function shouldHighlight(options) {
  88. return _chalk().default.supportsColor || options.forceColor;
  89. }
  90. function getChalk(options) {
  91. var chalk = _chalk().default;
  92. if (options.forceColor) {
  93. chalk = new (_chalk().default.constructor)({
  94. enabled: true,
  95. level: 1
  96. });
  97. }
  98. return chalk;
  99. }
  100. function highlight(code, options) {
  101. if (options === void 0) {
  102. options = {};
  103. }
  104. if (shouldHighlight(options)) {
  105. var chalk = getChalk(options);
  106. var defs = getDefs(chalk);
  107. return highlightTokens(defs, code);
  108. } else {
  109. return code;
  110. }
  111. }