Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tecfu/tty-table
Terminal table for Windows, Linux, and MacOS. Written in nodejs. Also works in browser console. Word wrap, padding, alignment, colors, Asian character support, per-column callbacks, and you can pass rows as objects or arrays. Backwards compatible with Automattic/cli-table.
https://github.com/tecfu/tty-table
cli-table nodejs table terminal-table tty-table
Last synced: about 1 month ago
JSON representation
Terminal table for Windows, Linux, and MacOS. Written in nodejs. Also works in browser console. Word wrap, padding, alignment, colors, Asian character support, per-column callbacks, and you can pass rows as objects or arrays. Backwards compatible with Automattic/cli-table.
- Host: GitHub
- URL: https://github.com/tecfu/tty-table
- Owner: tecfu
- License: mit
- Created: 2015-07-01T01:09:36.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2023-10-29T19:50:40.000Z (11 months ago)
- Last Synced: 2024-07-25T08:10:05.724Z (about 2 months ago)
- Topics: cli-table, nodejs, table, terminal-table, tty-table
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/tty-table
- Size: 4.71 MB
- Stars: 285
- Watchers: 7
- Forks: 30
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-starred - tecfu/tty-table - Terminal table for Windows, Linux, and MacOS. Written in nodejs. Also works in browser console. Word wrap, padding, alignment, colors, Asian character support, per-column callbacks, and you can pass r (nodejs)
README
# tty-table 端子台
[![NPM version](https://badge.fury.io/js/tty-table.svg)](http://badge.fury.io/js/tty-table) [![Coverage Status](https://coveralls.io/repos/github/tecfu/tty-table/badge.svg?branch=master)](https://coveralls.io/github/tecfu/tty-table?branch=master)
---Display your data in a table using a terminal, browser, or browser console.
---
## [Examples](examples/)
[See here for complete example list](examples/)
To view all example output:
```sh
$ git clone https://github.com/tecfu/tty-table && cd tty-table && npm i
$ npm run view-examples
```### Terminal (Static)
[examples/styles-and-formatting.js](examples/styles-and-formatting.js)
![Static](https://cloud.githubusercontent.com/assets/7478359/15691679/07142030-273f-11e6-8f1e-25728d558a2d.png "Static Example")
### Terminal (Streaming)
```
$ node examples/data/fake-stream.js | tty-table --format json --header examples/config/header.js
```![Streaming](https://user-images.githubusercontent.com/7478359/51738817-47c25700-204d-11e9-9df1-04e478331658.gif "tty-table streaming example")
- See the built-in help for the terminal version of tty-table with:
```
$ tty-table -h
```### Browser & Browser Console
- View in Chrome or Chromium at [http://localhost:8070/examples/browser-example.html](http://localhost:8070/examples/browser-example.html) using a dockerized apache instance:
```sh
git clone https://github.com/tecfu/tty-table
cd tty-table
docker run -dit --name tty-table-in-browser -p 8070:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
```- [live demo (chrome only): jsfiddle](https://jsfiddle.net/nb14eyav/)
- [live demo (chrome only): plnkr](https://plnkr.co/edit/iQn9xn5yCY4NUkXRF87o?p=preview)
- [source: examples/browser-example.html](examples/browser-example.html)![Browser Console Example](https://user-images.githubusercontent.com/7478359/74614563-cbcaff00-50e6-11ea-9101-5457497696b8.jpg "tty-table in the browser console")
## API Reference
### Table(header ```array```, rows ```array```, options ```object```)| Param | Type | Description |
| --- | --- | --- |
| [header](#header_options) |array
| Per-column configuration. An array of objects, one object for each column. Each object contains properties you can use to configure that particular column. [See available properties](#header_options) |
| [rows](#rows_examples) |array
| Your data. An array of arrays or objects. [See examples](#rows_examples) |
| [options](#options_properties) |object
| Global table configuration. [See available properties](#options_properties) |#### header ```array of objects```
| Param | Type | Description |
| --- | --- | --- |
| alias |string
| Text to display in column header cell |
| align |string
| default: "center" |
| color |string
| default: terminal default color |
| footerAlign |string
| default: "center" |
| footerColor |string
| default: terminal default color |
| formatter |function(cellValue, columnIndex, rowIndex, rowData, inputData
| Runs a callback on each cell value in the parent column.
Please note that fat arrow functions `() => {}` don't support scope overrides, and this feature won't work correctly within them. |
| @formatter configure |function(object)
| Configure cell properties. For example:
`this.configure({ truncate: false, align: "left" })` [More here](https://github.com/tecfu/tty-table/blob/master/examples/truncated-lines.js#L100-L110). |
| @formatter resetStyle |function(cellValue)
| Removes ANSI escape sequences. For example:
`this.resetStyle("[32m myText[39m") // "myText"`
|
| @formatter style |function(cellValue, effect)
| Style cell value. For example:
`this.style("mytext", "bold", "green", "underline")`
For a full list of options in the terminal: [chalk](https://github.com/chalk/chalk). For a full list of options in the browser: [kleur](https://github.com/lukeed/kleur)|
| headerAlign |string
| default: "center" |
| headerColor |string
| default: terminal's default color |
| marginLeft |integer
| default: 0 |
| marginTop |integer
| default: 0 |
| paddingBottom |integer
| default: 0 |
| paddingLeft |integer
| default: 1 |
| paddingRight |integer
| default: 1 |
| paddingTop |integer
| default: 0 |
| value |string
| Name of the property to display in each cell when data passed as an array of objects |
| width |string
\|\|integer
| default: "auto"
Can be a percentage of table width i.e. "20%" or a fixed number of columns i.e. "20".
When set to the default ("auto"), the column widths are made proportionate by the longest value in each column.
Note: Percentage columns and fixed value colums not intended to be mixed in the same table.|**Example**
```js
let header = [{
value: "item",
headerColor: "cyan",
color: "white",
align: "left",
width: 20
},
{
value: "price",
color: "red",
width: 10,
formatter: function (value) {
let str = `$${value.toFixed(2)}`
return (value > 5) ? this.style(str, "green", "bold") :
this.style(str, "red", "underline")
}
}]
```#### rows ```array```
**Example**
- each row an array
```js
const rows = [
["hamburger",2.50],
]
```
- each row an object
```js
const rows = [
{
item: "hamburger",
price: 2.50
}
]
```#### footer ```array```
- Footer is optional**Example**
```js
const footer = [
"TOTAL",
function (cellValue, columnIndex, rowIndex, rowData) {
let total = rowData.reduce((prev, curr) => {
return prev + curr[1]
}, 0)
.toFixed(2)return this.style(`$${total}`, "italic")
}
]
```#### options ```object```
| Param | Type | Description |
| --- | --- | --- |
| borderStyle |string
| default: "solid".
options: "solid", "dashed", "none" |
| borderColor |string
| default: terminal default color |
| color |string
| default: terminal default color |
| compact |boolean
| default: false
Removes horizontal borders when true. |
| defaultErrorValue |mixed
| default: '�' |
| defaultValue |mixed
| default: '?' |
| errorOnNull |boolean
| default: false |
| truncate |mixed
| default: false
When this property is set to a string, cell contents will be truncated by that string instead of wrapped when they extend beyond of the width of the cell.
For example if:
"truncate":"..."
the cell will be truncated with "..."
Note: tty-table wraps overflowing cell text into multiple lines by default, so you would likely only utilize `truncate` for extremely long values. |
| width |string
| default: "100%"
Width of the table. Can be a percentage of i.e. "50%" or a fixed number of columns in the terminal viewport i.e. "100".
Note: When you use a percentage, your table will be "responsive".|**Example**
```js
const options = {
borderStyle: "solid",
borderColor: "blue",
headerAlign: "center",
align: "left",
color: "white",
truncate: "...",
width: "90%"
}
```
Add method to render table to a string
**Example**
```js
const out = Table(header,rows,options).render()
console.log(out); //prints output
```
## Installation
- [Terminal](docs/terminal.md):
```sh
$ npm install tty-table -g
```- Node Module
```sh
$ npm install tty-table
```- Browser
```js
import Table from 'https://cdn.jsdelivr.net/gh/tecfu/tty-table/dist/tty-table.esm.js'
let Table = require('tty-table') // https://cdn.jsdelivr.net/gh/tecfu/tty-table/dist/tty-table.cjs.js
let Table = TTY_Table; // https://cdn.jsdelivr.net/gh/tecfu/tty-table/dist/tty-table.umd.js
```## Version Compatibility
| Node Version | tty-table Version |
| -------------- | ------------------|
| 8 | >= 2.0 |
| 0.11 | >= 0.0 |## Running tests
```sh
$ npm test
``````sh
$ npm run coverage
```## Saving the output of new unit tests
```sh
$ npm run save-tests
```## Dev Tips
- To generate vim tags (make sure [jsctags](https://github.com/ramitos/jsctags) is installed globally)
```sh
$ npm run tags
```- To generate vim tags on file save
```sh
$ npm run watch-tags
```## Pull Requests
Pull requests are encouraged!
- Please remember to add a unit test when necessary
- Please format your commit messages according to the ["Conventional Commits"](https://www.conventionalcommits.org/en/v1.0.0/) specificationIf you aren't familiar with Conventional Commits, here's a good [article on the topic](https://dev.to/maniflames/how-conventional-commits-improved-my-git-skills-1jfk)
TL/DR:
- feat: a feature that is visible for end users.
- fix: a bugfix that is visible for end users.
- chore: a change that doesn't impact end users (e.g. chances to CI pipeline)
- docs: a change in the README or documentation
- refactor: a change in production code focused on readability, style and/or performance.## [Packaging as a distributable](packaging.md)
## License
[MIT License](https://opensource.org/licenses/MIT)
Copyright 2015-2020, Tecfu.