Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/trentm/node-tabula

a light function for printing a text table to stdout
https://github.com/trentm/node-tabula

Last synced: 2 months ago
JSON representation

a light function for printing a text table to stdout

Awesome Lists containing this project

README

        

A light `tabula(items, options)` function for printing a text table
to stdout.

Why another one? I had one that worked for me and wanted to re-use it. Trawling
through dozens of available ones on npm was a chore I haven't done. I'd welcome
a table-printing node.js bake off.

# Install

npm install tabula

# Usage

```javascript
var tabula = require('tabula');

var items = [
{name: 'trent', age: 38, game: 'hockey'},
{name: 'ewan', age: 4, game: 'chess'}
];

tabula(items);
/* prints:
NAME AGE GAME
trent 38 hockey
ewan 4 chess
*/

tabula(items, {columns: ['name', 'age']});
/* prints:
NAME AGE
trent 38
ewan 4
*/

tabula(items, {
columns: ['name', 'age'],
skipHeader: true
});
/* prints:
trent 38
ewan 4
*/

// Sort by age. Attempts numeric sort on given fields.
// Note: This actually sorts the given `items` array in-place.
tabula(items, {
columns: ['name', 'age'],
sort: ['age']
});
/* prints:
NAME AGE
ewan 4
trent 38
*/
```

# TODO

- document dottedLookup
- document column align=right
- document opts.noAnsi
- document column width, maxWidth
- document sort.*.keyFunc

# `tabula` CLI

There is also a `tabula` CLI that can be used for emitting a table
from a stream of JSON objects (or a single JSON array). E.g.:

$ echo '[{"name":"trent","age":38}, {"name":"ewan","age":4}]' | tabula
NAME AGE
trent 38
ewan 4

# column selection
$ echo '[{"name":"trent","age":38}, {"name":"ewan","age":4}]' | tabula name
NAME
trent
ewan

# sorting
$ echo '[{"name":"trent","age":38}, {"name":"ewan","age":4}]' | tabula -s age
NAME AGE
ewan 4
trent 38

# Features

This section is an (incomplete) list and demo of some of tabula's features.

## ANSI escape codes

`tabula` (as of version 1.7.0) properly calculates widths for cells using
ANSI escape codes for coloring. E.g. try this sample:

```
var tabula = require('tabula');
function red(s) {
return '\033[31m' + s + '\033[39m';
}
tabula([
{ name: 'Trent', age: 42, job: 'Engineer' },
{ name: 'Ewan', age: red(8), job: 'Student' },
]);
```

# TODO

- Describe the "opinions", features and limitations of this module.

- `tabula` CLI for piping in a JSON array of objects, or stream of objects.
- streaming
- option for skipping non-JSON lines (e.g. for bunyan logs)
- option for non-JSON input? e.g. space separated ('json -ga foo bar'
output, output from other table-emitting things, perhaps then 2-space
or more separated), naive-csv
- separate tabula-cli module?
- test cases

- Merge this with [node-tab](https://github.com/davepacheco/node-tab) if
reasonable. I have some PR work for it (that I haven't completed) to add some
conveniences that `tabulate` provides. It is silly to have two table-printing
libs in play.

# License

MIT. See LICENSE.txt.