Generates borderless text table strings suitable for printing to stdout. Fast. 🏁
npm i text-table-fast
import { 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-table
hasn't been updated in over a decade. - It's written in TypeScript and ships with its own
.d.ts
types, whereastext-table
requires@types/text-table
for typings.
text-table-fast
contains two meaningful optimizations over text-table
:
text-table
includes usage of of an quadratically expensive/\s+$/
;text-table-fast
usesString.prototype.trimEnd
instead.text-table
executes a regular expression match on each row cell for its'.'
(decimal) alignment option;text-table-fast
will 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
.
Josh Goldberg ✨ 💻 🖋 📖 🤔 🚇 🚧 📆 🔧 |
This package is a near-drop-in replacement for 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-app
.