mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-05 11:31:31 +08:00
Bug: 370734442 No-Presubmit: true Change-Id: I7021b801e5bacd4ed33643651a53b8db20ccf8b0 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/5898986 Commit-Queue: Danil Somsikov <dsv@chromium.org> Reviewed-by: Simon Zünd <szuend@chromium.org>
115 lines
4.7 KiB
JavaScript
115 lines
4.7 KiB
JavaScript
"use strict";
|
|
var __read = (this && this.__read) || function (o, n) {
|
|
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
if (!m) return o;
|
|
var i = m.call(o), r, ar = [], e;
|
|
try {
|
|
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
}
|
|
catch (error) { e = { error: error }; }
|
|
finally {
|
|
try {
|
|
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
}
|
|
finally { if (e) throw e.error; }
|
|
}
|
|
return ar;
|
|
};
|
|
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
if (ar || !(i in from)) {
|
|
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
ar[i] = from[i];
|
|
}
|
|
}
|
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.markdownTable = exports.markdownHeader = exports.markdownHighlight = void 0;
|
|
/**
|
|
* Highlights some text
|
|
* @param text
|
|
*/
|
|
function markdownHighlight(text) {
|
|
return "`".concat(text, "`");
|
|
}
|
|
exports.markdownHighlight = markdownHighlight;
|
|
/**
|
|
* Returns a markdown header with a specific level
|
|
* @param level
|
|
* @param title
|
|
*/
|
|
function markdownHeader(level, title) {
|
|
return "".concat("#".repeat(level), " ").concat(title);
|
|
}
|
|
exports.markdownHeader = markdownHeader;
|
|
var DEFAULT_MARKDOWN_TABLE_OPTIONS = {
|
|
removeEmptyColumns: true,
|
|
minCellWidth: 3,
|
|
maxCellWidth: 50,
|
|
cellPadding: 1
|
|
};
|
|
/**
|
|
* Returns a markdown table representation of the rows.
|
|
* Strips unused columns.
|
|
* @param rows
|
|
* @param options
|
|
*/
|
|
function markdownTable(rows, options) {
|
|
if (options === void 0) { options = {}; }
|
|
// Constants for pretty printing the markdown tables
|
|
var MIN_CELL_WIDTH = options.minCellWidth || DEFAULT_MARKDOWN_TABLE_OPTIONS.minCellWidth;
|
|
var MAX_CELL_WIDTH = options.maxCellWidth || DEFAULT_MARKDOWN_TABLE_OPTIONS.maxCellWidth;
|
|
var CELL_PADDING = options.cellPadding || DEFAULT_MARKDOWN_TABLE_OPTIONS.cellPadding;
|
|
// Count the number of columns
|
|
var columnCount = Math.max.apply(Math, __spreadArray([], __read(rows.map(function (r) { return r.length; })), false));
|
|
if (options.removeEmptyColumns) {
|
|
// Create a boolean array where each entry tells if a column is used or not (excluding the header)
|
|
var emptyColumns_1 = Array(columnCount)
|
|
.fill(false)
|
|
.map(function (b, i) { return i !== 0 && rows.slice(1).find(function (r) { return r[i] != null && r[i].length > 0; }) == null; });
|
|
// Remove unused columns if necessary
|
|
if (emptyColumns_1.includes(true)) {
|
|
// Filter out the unused columns in each row
|
|
rows = rows.map(function (row) { return row.filter(function (column, i) { return !emptyColumns_1[i]; }); });
|
|
// Adjust the column count
|
|
columnCount = Math.max.apply(Math, __spreadArray([], __read(rows.map(function (r) { return r.length; })), false));
|
|
}
|
|
}
|
|
// Escape all cells in the markdown output
|
|
rows = rows.map(function (r) { return r.map(markdownEscapeTableCell); });
|
|
// Create a boolean array where each entry corresponds to the preferred column width.
|
|
// This is done by taking the largest width of all cells in each column.
|
|
var columnWidths = Array(columnCount)
|
|
.fill(0)
|
|
.map(function (c, i) { return Math.min(MAX_CELL_WIDTH, Math.max.apply(Math, __spreadArray([MIN_CELL_WIDTH], __read(rows.map(function (r) { return (r[i] || "").length; })), false)) + CELL_PADDING * 2); });
|
|
// Build up the table
|
|
return "\n|".concat(rows[0].map(function (r, i) { return fillWidth(r, columnWidths[i], CELL_PADDING); }).join("|"), "|\n|").concat(columnWidths.map(function (c) { return "-".repeat(c); }).join("|"), "|\n").concat(rows
|
|
.slice(1)
|
|
.map(function (r) { return "|".concat(r.map(function (r, i) { return fillWidth(r, columnWidths[i], CELL_PADDING); }).join("|"), "|"); })
|
|
.join("\n"), "\n");
|
|
}
|
|
exports.markdownTable = markdownTable;
|
|
/**
|
|
* Escape a text so it can be used in a markdown table
|
|
* @param text
|
|
*/
|
|
function markdownEscapeTableCell(text) {
|
|
return (text
|
|
// Change newlines
|
|
.replace(/\n/g, "<br />")
|
|
// Change "@property" to "`@property`" (so eg. Github doesn't treat it as tagging a user)
|
|
.replace(/(@\S+)/g, "`$1`")
|
|
// Escape |, < and >
|
|
.replace(/([|<>])/g, "\\$1"));
|
|
}
|
|
/**
|
|
* Creates padding around some text with a target width.
|
|
* @param text
|
|
* @param width
|
|
* @param paddingStart
|
|
*/
|
|
function fillWidth(text, width, paddingStart) {
|
|
return " ".repeat(paddingStart) + text + " ".repeat(Math.max(1, width - text.length - paddingStart));
|
|
}
|