tabula

1.10.0 • Public • Published

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

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

Readme

Keywords

Package Sidebar

Install

npm i tabula

Weekly Downloads

124

Version

1.10.0

License

MIT

Last publish

Collaborators

  • trentm