text-table-fast
TypeScript icon, indicating that this package has built-in type declarations

0.1.0Β β€’Β PublicΒ β€’Β Published

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 fast 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.

ESLint issue to be filed soon with a performance comparison. ⚑️

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.

Readme

Keywords

none

Package Sidebar

Install

npm i text-table-fast

Weekly Downloads

1

Version

0.1.0

License

MIT

Unpacked Size

13.8 kB

Total Files

6

Last publish

Collaborators

  • joshuakgoldberg