129 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			129 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								"use strict";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Object.defineProperty(exports, "__esModule", {
							 | 
						||
| 
								 | 
							
								  value: true
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								exports.shouldHighlight = shouldHighlight;
							 | 
						||
| 
								 | 
							
								exports.getChalk = getChalk;
							 | 
						||
| 
								 | 
							
								exports.default = highlight;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _jsTokens() {
							 | 
						||
| 
								 | 
							
								  const data = _interopRequireWildcard(require("js-tokens"));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _jsTokens = function () {
							 | 
						||
| 
								 | 
							
								    return data;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return data;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _esutils() {
							 | 
						||
| 
								 | 
							
								  const data = _interopRequireDefault(require("esutils"));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _esutils = function () {
							 | 
						||
| 
								 | 
							
								    return data;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return data;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _chalk() {
							 | 
						||
| 
								 | 
							
								  const data = _interopRequireDefault(require("chalk"));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  _chalk = function () {
							 | 
						||
| 
								 | 
							
								    return data;
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return data;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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; } }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function getDefs(chalk) {
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    keyword: chalk.cyan,
							 | 
						||
| 
								 | 
							
								    capitalized: chalk.yellow,
							 | 
						||
| 
								 | 
							
								    jsx_tag: chalk.yellow,
							 | 
						||
| 
								 | 
							
								    punctuator: chalk.yellow,
							 | 
						||
| 
								 | 
							
								    number: chalk.magenta,
							 | 
						||
| 
								 | 
							
								    string: chalk.green,
							 | 
						||
| 
								 | 
							
								    regex: chalk.magenta,
							 | 
						||
| 
								 | 
							
								    comment: chalk.grey,
							 | 
						||
| 
								 | 
							
								    invalid: chalk.white.bgRed.bold
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
							 | 
						||
| 
								 | 
							
								const JSX_TAG = /^[a-z][\w-]*$/i;
							 | 
						||
| 
								 | 
							
								const BRACKET = /^[()[\]{}]$/;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function getTokenType(match) {
							 | 
						||
| 
								 | 
							
								  const [offset, text] = match.slice(-2);
							 | 
						||
| 
								 | 
							
								  const token = (0, _jsTokens().matchToToken)(match);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (token.type === "name") {
							 | 
						||
| 
								 | 
							
								    if (_esutils().default.keyword.isReservedWordES6(token.value)) {
							 | 
						||
| 
								 | 
							
								      return "keyword";
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.substr(offset - 2, 2) == "</")) {
							 | 
						||
| 
								 | 
							
								      return "jsx_tag";
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (token.value[0] !== token.value[0].toLowerCase()) {
							 | 
						||
| 
								 | 
							
								      return "capitalized";
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (token.type === "punctuator" && BRACKET.test(token.value)) {
							 | 
						||
| 
								 | 
							
								    return "bracket";
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (token.type === "invalid" && (token.value === "@" || token.value === "#")) {
							 | 
						||
| 
								 | 
							
								    return "punctuator";
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return token.type;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function highlightTokens(defs, text) {
							 | 
						||
| 
								 | 
							
								  return text.replace(_jsTokens().default, function (...args) {
							 | 
						||
| 
								 | 
							
								    const type = getTokenType(args);
							 | 
						||
| 
								 | 
							
								    const colorize = defs[type];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (colorize) {
							 | 
						||
| 
								 | 
							
								      return args[0].split(NEWLINE).map(str => colorize(str)).join("\n");
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      return args[0];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function shouldHighlight(options) {
							 | 
						||
| 
								 | 
							
								  return _chalk().default.supportsColor || options.forceColor;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function getChalk(options) {
							 | 
						||
| 
								 | 
							
								  let chalk = _chalk().default;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (options.forceColor) {
							 | 
						||
| 
								 | 
							
								    chalk = new (_chalk().default.constructor)({
							 | 
						||
| 
								 | 
							
								      enabled: true,
							 | 
						||
| 
								 | 
							
								      level: 1
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return chalk;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function highlight(code, options = {}) {
							 | 
						||
| 
								 | 
							
								  if (shouldHighlight(options)) {
							 | 
						||
| 
								 | 
							
								    const chalk = getChalk(options);
							 | 
						||
| 
								 | 
							
								    const defs = getDefs(chalk);
							 | 
						||
| 
								 | 
							
								    return highlightTokens(defs, code);
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    return code;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |