UNPKG

bloom-layout

Version:
232 lines (190 loc) 6.63 kB
"use strict"; exports.__esModule = true; exports.codeFrameColumns = codeFrameColumns; exports.default = _default; var _jsTokens = _interopRequireWildcard(require("js-tokens")); var _esutils = _interopRequireDefault(require("esutils")); var _chalk = _interopRequireDefault(require("chalk")); 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; } } var deprecationWarningShown = false; 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, gutter: chalk.grey, marker: chalk.red.bold }; } var NEWLINE = /\r\n|[\n\r\u2028\u2029]/; var JSX_TAG = /^[a-z][\w-]*$/i; var BRACKET = /^[()[\]{}]$/; function getTokenType(match) { var _match$slice = match.slice(-2), offset = _match$slice[0], text = _match$slice[1]; var 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 highlight(defs, text) { return text.replace(_jsTokens.default, function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var type = getTokenType(args); var colorize = defs[type]; if (colorize) { return args[0].split(NEWLINE).map(function (str) { return colorize(str); }).join("\n"); } else { return args[0]; } }); } function getMarkerLines(loc, source, opts) { var startLoc = Object.assign({}, { column: 0, line: -1 }, loc.start); var endLoc = Object.assign({}, startLoc, loc.end); var linesAbove = opts.linesAbove || 2; var linesBelow = opts.linesBelow || 3; var startLine = startLoc.line; var startColumn = startLoc.column; var endLine = endLoc.line; var endColumn = endLoc.column; var start = Math.max(startLine - (linesAbove + 1), 0); var end = Math.min(source.length, endLine + linesBelow); if (startLine === -1) { start = 0; } if (endLine === -1) { end = source.length; } var lineDiff = endLine - startLine; var markerLines = {}; if (lineDiff) { for (var i = 0; i <= lineDiff; i++) { var lineNumber = i + startLine; if (!startColumn) { markerLines[lineNumber] = true; } else if (i === 0) { var sourceLength = source[lineNumber - 1].length; markerLines[lineNumber] = [startColumn, sourceLength - startColumn]; } else if (i === lineDiff) { markerLines[lineNumber] = [0, endColumn]; } else { var _sourceLength = source[lineNumber - i].length; markerLines[lineNumber] = [0, _sourceLength]; } } } else { if (startColumn === endColumn) { if (startColumn) { markerLines[startLine] = [startColumn, 0]; } else { markerLines[startLine] = true; } } else { markerLines[startLine] = [startColumn, endColumn - startColumn]; } } return { start: start, end: end, markerLines: markerLines }; } function codeFrameColumns(rawLines, loc, opts) { if (opts === void 0) { opts = {}; } var highlighted = opts.highlightCode && _chalk.default.supportsColor || opts.forceColor; var chalk = _chalk.default; if (opts.forceColor) { chalk = new _chalk.default.constructor({ enabled: true }); } var maybeHighlight = function maybeHighlight(chalkFn, string) { return highlighted ? chalkFn(string) : string; }; var defs = getDefs(chalk); if (highlighted) rawLines = highlight(defs, rawLines); var lines = rawLines.split(NEWLINE); var _getMarkerLines = getMarkerLines(loc, lines, opts), start = _getMarkerLines.start, end = _getMarkerLines.end, markerLines = _getMarkerLines.markerLines; var numberMaxWidth = String(end).length; var frame = lines.slice(start, end).map(function (line, index) { var number = start + 1 + index; var paddedNumber = (" " + number).slice(-numberMaxWidth); var gutter = " " + paddedNumber + " | "; var hasMarker = markerLines[number]; if (hasMarker) { var markerLine = ""; if (Array.isArray(hasMarker)) { var markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " "); var numberOfMarkers = hasMarker[1] || 1; markerLine = ["\n ", maybeHighlight(defs.gutter, gutter.replace(/\d/g, " ")), markerSpacing, maybeHighlight(defs.marker, "^").repeat(numberOfMarkers)].join(""); } return [maybeHighlight(defs.marker, ">"), maybeHighlight(defs.gutter, gutter), line, markerLine].join(""); } else { return " " + maybeHighlight(defs.gutter, gutter) + line; } }).join("\n"); if (highlighted) { return chalk.reset(frame); } else { return frame; } } function _default(rawLines, lineNumber, colNumber, opts) { if (opts === void 0) { opts = {}; } if (!deprecationWarningShown) { deprecationWarningShown = true; var deprecationError = new Error("Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`."); deprecationError.name = "DeprecationWarning"; if (process.emitWarning) { process.emitWarning(deprecationError); } else { console.warn(deprecationError); } } colNumber = Math.max(colNumber, 0); var location = { start: { column: colNumber, line: lineNumber } }; return codeFrameColumns(rawLines, location, opts); }