diff options
Diffstat (limited to 'node_modules/@babel/highlight')
| -rw-r--r-- | node_modules/@babel/highlight/README.md | 41 | ||||
| -rw-r--r-- | node_modules/@babel/highlight/lib/index.js | 132 | ||||
| -rw-r--r-- | node_modules/@babel/highlight/package.json | 18 |
3 files changed, 191 insertions, 0 deletions
diff --git a/node_modules/@babel/highlight/README.md b/node_modules/@babel/highlight/README.md new file mode 100644 index 00000000..36143844 --- /dev/null +++ b/node_modules/@babel/highlight/README.md @@ -0,0 +1,41 @@ +# @babel/highlight + +> Syntax highlight JavaScript strings for output in terminals. + +## Install + +```sh +npm install --save @babel/highlight +``` + +## Usage + +```js +import highlight from "@babel/highlight"; + +const code = `class Foo { + constructor() +}`; + +const result = highlight(code); + +console.log(result); +``` + +```js +class Foo { + constructor() +} +``` + +By default, `highlight` will not highlight your code if your terminal does not support color. To force colors, pass `{ forceColor: true }` as the second argument to `highlight`. + +```js +import highlight from "@babel/highlight"; + +const code = `class Foo { + constructor() +}`; + +const result = highlight(code, { forceColor: true }); +``` diff --git a/node_modules/@babel/highlight/lib/index.js b/node_modules/@babel/highlight/lib/index.js new file mode 100644 index 00000000..e3e37258 --- /dev/null +++ b/node_modules/@babel/highlight/lib/index.js @@ -0,0 +1,132 @@ +"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 _jsTokens() { + return data; + }; + + return data; +} + +function _esutils() { + const data = _interopRequireDefault(require("esutils")); + + _esutils = function _esutils() { + return data; + }; + + return data; +} + +function _chalk() { + const data = _interopRequireDefault(require("chalk")); + + _chalk = function _chalk() { + 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 _match$slice = match.slice(-2), + offset = _match$slice[0], + text = _match$slice[1]; + + 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; + } +}
\ No newline at end of file diff --git a/node_modules/@babel/highlight/package.json b/node_modules/@babel/highlight/package.json new file mode 100644 index 00000000..18dc0e02 --- /dev/null +++ b/node_modules/@babel/highlight/package.json @@ -0,0 +1,18 @@ +{ + "name": "@babel/highlight", + "version": "7.0.0-beta.47", + "description": "Syntax highlight JavaScript strings for output in terminals.", + "author": "suchipi <me@suchipi.com>", + "homepage": "https://babeljs.io/", + "license": "MIT", + "repository": "https://github.com/babel/babel/tree/master/packages/babel-highlight", + "main": "lib/index.js", + "dependencies": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" + }, + "devDependencies": { + "strip-ansi": "^4.0.0" + } +} |
