Skip to content

Generates borderless text table strings suitable for printing to stdout. Fast. 🏁

License

Notifications You must be signed in to change notification settings

JoshuaKGoldberg/text-table-fast

Repository files navigation

text-table-fast

Generates borderless text table strings suitable for printing to stdout. Fast. 🏁

👪 All Contributors: 1 🤝 Code of Conduct: Kept 🧪 Coverage 📝 License: MIT 📦 npm version 💪 TypeScript: Strict

Usage

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.

Options

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.

align

  • 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

horizontalSeparator

  • 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

stringLength

  • 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, whereas text-table requires @types/text-table for typings.

Performance Comparison

text-table-fast contains two meaningful optimizations over text-table:

  • text-table includes usage of of an quadratically expensive /\s+$/; text-table-fast uses String.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.

Markdown Generation

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.

Contributors

Josh Goldberg ✨
Josh Goldberg ✨

💻 🖋 📖 🤔 🚇 🚧 📆 🔧

Acknowledgements

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.

About

Generates borderless text table strings suitable for printing to stdout. Fast. 🏁

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published