UNPKG

tabula

Version:

a light function for printing a text table to stdout

136 lines (100 loc) 2.88 kB
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.