Generates borderless text table strings suitable for printing to stdout. Fast. π
npm i text-table-fastimport { textTable } from "text-table-fast";
console.log(
textTable([
["main", "0123456789abcdef"],
["staging", "fedcba9876543210"],
]),
);main 0123456789abcdef
staging fedcba9876543210
textTable takes in an array of arrays containing strings, numbers, or other printable values.
text-table-fast's textTable can take in an optional second parameter as an object with options
π These options are equivalent to
text-table's options, but with expanded names.
- Default:
[] - Type:
("center" | "left" | "right")[]
The alignment for columns, in order.
These each default to "left".
import { textTable } from "text-table-fast";
console.log(
textTable(
[
["abc", "abcd", "ab"],
[1234, 12, 1234],
],
{
alignment: ["left", "center", "right"],
},
),
);abc abcd abc
1234 12 1234
- Default:
" " - Type:
string
Characters to put between each column.
import { textTable } from "text-table-fast";
console.log(
textTable(
[
["abc", "abcd", "ab"],
[1234, 12, 1234],
],
{
horizontalSeparator: " | ",
},
),
);abc | abcd | abc
1234 | 12 | 1234
- Default:
(value) => String(value).length - Type:
(value: string) => number
How to compute the length of strings, such as for stripping ANSI characters.
import color from "cli-color";
import { textTable } from "text-table-fast";
console.log(
textTable(
[
[color.red("abc"), color.blue("def")],
[12, 34],
],
{
stringLength: (value) => color.strip(value).length,
},
),
);\x1B[31mabc\x1B[39m \x1B[34mdef\x1B[39m
12 34
Comparison to text-table
text-table-fast has three advantages over text-table:
- It is faster in almost all scenarios, and significantly faster on larger tables.
- It is under active maintenance, whereas
text-tablehasn't been updated in over a decade. - It's written in TypeScript and ships with its own
.d.tstypes, whereastext-tablerequires@types/text-tablefor typings.
text-table-fast contains two meaningful optimizations over text-table:
text-tableincludes usage of of an quadratically expensive/\s+$/;text-table-fastusesString.prototype.trimEndinstead.text-tableexecutes a regular expression match on each row cell for its'.'(decimal) alignment option;text-table-fastwill skip that match if and when decimal alignment support is added.
See eslint/eslint#18709 Performance: long print time in stylish formatter's text-table for long report strings for a performance comparison.
This package does not generate compliant Markdown tables.
Doing so requires handling special characters in cell data.
You're better off using a dedicated package such as markdown-table.
See .github/CONTRIBUTING.md, then .github/DEVELOPMENT.md.
Thanks! π
Josh Goldberg β¨ π» π π π€ π π§ π π§ |
This package is a near-drop-in replacement for the venerable text-table, which has served a plethora of projects -including ESLint- well for over a decade.
Many thanks to substack for creating the original text-table package! π
π This package was templated with
create-typescript-appusing the Bingo framework.