Socket
Socket
Sign inDemoInstall

tty-table

Package Overview
Dependencies
Maintainers
1
Versions
89
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tty-table - npm Package Compare versions

Comparing version 2.5.5 to 2.5.6

adapters/automattic-cli-table.js

2

examples/auttomatic-cli-table-tests.js

@@ -41,3 +41,3 @@ //var Table = require('cli-table');

vertical_table.push({ "Some Key": "Some Value"},
{ "Another much longer key": "And its corresponding longer value"}
{"Another much longer key": "And its corresponding longer value"}
);

@@ -44,0 +44,0 @@ console.log(vertical_table.toString());

let cp = require('child_process');
let pwd = __dirname;
let output = cp.execSync('cat '+pwd+'/data/data.csv | node '+pwd+'/../src/terminal-adapter.js',{
let output = cp.execSync('cat '+pwd+'/data/data.csv | node '+pwd+'/../adapters/terminal-adapter.js',{
encoding:'utf8'
});
console.log(output);

@@ -26,5 +26,2 @@ var Table = require('../');

borderStyle : 1,
paddingBottom : 0,
paddingLeft: 2,
paddingRight: 1,
headerAlign : "right",

@@ -31,0 +28,0 @@ align : "center",

@@ -8,3 +8,3 @@ /**

//Modules for browserify to ignore
var _ignore = '--exclude=path --exclude=request --exclude=http --exclude=fs --exclude=vm --exclude=process --exclude=lodash --exclude=yargs';
var _ignore = '--ignore=path --ignore=request --ignore=http --ignore=fs --ignore=vm --ignore=process --ignore=lodash --ignore=yargs';

@@ -106,2 +106,3 @@ var banner = '/** \n<%= pkg.name %>: <%= pkg.description %> \nVersion: <%= pkg.version %> \nBuilt: <%= grunt.template.today("yyyy-mm-dd") %> <%= options.timestamp %>\nAuthor: <%= pkg.author %> \n*/\n';

var fs = require('fs');
var savedTestDir = __dirname + '/test/saved_test_outputs';

@@ -121,6 +122,7 @@ //Get list of all example scripts

}
var subname = element.split('.')[0];
var subname = element.split('/').pop().split('.')[0];
var filename = subname + '-output.txt';
fs.writeFileSync(filename,stdout);
grunt.log.write('Wrote output to text file: ' + filename + '\n');
var filepath = savedTestDir + '/' + filename;
fs.writeFileSync(filepath,stdout);
grunt.log.write('Wrote output to text file: ' + filepath + '\n');
deferred.resolve();

@@ -141,14 +143,5 @@ });

grunt.registerTask('doc','Documentation generation task',function(){
var gruntDeferred = this.async(),
orgy = require('orgy'),
deferred1 = orgy.deferred({timeout : 20000}),
deferred2 = orgy.deferred({timeout : 20000}),
fs = require('fs');
orgy.queue([deferred1,deferred2],{
timeout : 20000
})
.done(function(){
gruntDeferred();
});
const fs = require('fs');
//Get README

@@ -165,26 +158,27 @@ var readme = fs.readFileSync("./README.md",{

example1 = '\n```js\n' + example1 + '\n```';
readme = readme.replace(/<!--EXAMPLE-USAGE-->((?:.|[\r\n])*)<!--END-EXAMPLE-USAGE-->/m,
'<!--EXAMPLE-USAGE-->\n'+example1+'\n<!--END-EXAMPLE-USAGE-->');
deferred1.resolve();
readme = readme.replace(
/<!--EXAMPLE-USAGE-->((?:.|[\r\n])*)<!--END-EXAMPLE-USAGE-->/m,
'<!--EXAMPLE-USAGE-->\n'+example1+'\n<!--END-EXAMPLE-USAGE-->'
);
//Inject public API reference
var exec = require('child_process').exec, child;
child = exec('jsdoc2md "src/*.js"', function (error, stdout, stderr) {
//console.log('stdout: ' + stdout);
//console.log('stderr: ' + stderr);
if (error !== null) {
grunt.log.error('Exec error: ' + error);
}
const jsdoc2md = require('jsdoc-to-markdown');
let jsdocData = jsdoc2md.getTemplateDataSync({
//configure: __dirname + '/conf.json', //jsdoc config file path
files: 'src/*.js'
});
let stdout = jsdoc2md.renderSync({
data: jsdocData,
"no-usage-stats": true
});
//Reformat documentation to reflect correct method naming.
var str = stdout.replace(/new /g,'')
.replace(/_public\./g,'');
//Reformat documentation to reflect correct method naming.
var str = stdout.replace(/new /g,'').replace(/_public\./g,'');
readme = readme.replace(/<!--API-REF-->((?:.|[\r\n])*)<!--END-API-REF-->/m,
'<!--API-REF-->\n\n'+str+'\n<!--END-API-REF-->');
readme = readme.replace(
/<!--API-REF-->((?:.|[\r\n])*)<!--END-API-REF-->/m,
'<!--API-REF-->\n\n'+str+'\n<!--END-API-REF-->'
);
fs.writeFileSync("./README.md",readme);
deferred2.resolve();
});
//save
fs.writeFileSync("./README.md",readme);
});

@@ -191,0 +185,0 @@

{
"name": "tty-table",
"version": "2.5.5",
"version": "2.5.6",
"description": "Command line table generator.",
"main": "src/main.js",
"bin": {
"tty-table": "src/terminal-adapter.js"
"tty-table": "adapters/terminal-adapter.js"
},

@@ -34,28 +34,29 @@ "preferGlobal": false,

"dependencies": {
"chalk": "^1.1.0",
"csv": "^1.1.1",
"chalk": "^2.3.0",
"csv": "^2.0.0",
"merge": "^1.2.0",
"smartwrap": "^1.0.7",
"strip-ansi": "^3.0.0",
"smartwrap": "^1.0.9",
"strip-ansi": "^4.0.0",
"use-strict": "^1.0.1",
"wcwidth": "^1.0.1",
"yargs": "^8.0.1"
"yargs": "^10.0.3"
},
"devDependencies": {
"babel-preset-babili": "0.0.12",
"babel-preset-babili": "0.1.4",
"babel-preset-es2015": "^6.24.1",
"babelify": "^7.3.0",
"browserify-banner": "^1.0.4",
"chai": "^3.0.0",
"babelify": "^8.0.0",
"browserify-banner": "^1.0.6",
"chai": "^4.1.2",
"glob": "^7.1.2",
"grunt": "^1.0.1",
"grunt-contrib-uglify": "^3.0.1",
"grunt-contrib-uglify": "^3.1.0",
"grunt-contrib-watch": "^1.0.0",
"grunt-jsdoc": "^2.1.0",
"grunt-jsdoc": "^2.2.0",
"grunt-mocha": "^1.0.4",
"grunt-mocha-test": "^0.13.2",
"grunt-mocha-test": "^0.13.3",
"grunt-shell": "^2.1.0",
"mocha": "^3.4.1",
"jsdoc-to-markdown": "^3.0.1",
"mocha": "^4.0.1",
"orgy": "^2.2.0"
}
}

@@ -108,18 +108,18 @@ # tty-table

[
[
{v: " ", l: " ", j: " ", h: " ", r: " "},
{v: " ", l: " ", j: " ", h: " ", r: " "},
{v: " ", l: " ", j: " ", h: " ", r: " "}
],
[
{v: "│", l: "┌", j: "┬", h: "─", r: "┐"},
{v: "│", l: "├", j: "┼", h: "─", r: "┤"},
{v: "│", l: "└", j: "┴", h: "─", r: "┘"}
],
[
{v: "|", l: "+", j: "+", h: "-", r: "+"},
{v: "|", l: "+", j: "+", h: "-", r: "+"},
{v: "|", l: "+", j: "+", h: "-", r: "+"}
[
{v: " ", l: " ", j: " ", h: " ", r: " "},
{v: " ", l: " ", j: " ", h: " ", r: " "},
{v: " ", l: " ", j: " ", h: " ", r: " "}
],
[
{v: "│", l: "┌", j: "┬", h: "─", r: "┐"},
{v: "│", l: "├", j: "┼", h: "─", r: "┤"},
{v: "│", l: "└", j: "┴", h: "─", r: "┘"}
],
[
{v: "|", l: "+", j: "+", h: "-", r: "+"},
{v: "|", l: "+", j: "+", h: "-", r: "+"},
{v: "|", l: "+", j: "+", h: "-", r: "+"}
]
]
]
```

@@ -149,6 +149,6 @@

| header.column.marginTop | <code>number</code> | default: 0 |
| header.column.maxWidth | <code>number</code> | default: 20 |
| header.column.width | <code>string</code> \| <code>number</code> | default: "auto" |
| header.column.paddingBottom | <code>number</code> | default: 0 |
| header.column.paddingLeft | <code>number</code> | default: 0 |
| header.column.paddingRight | <code>number</code> | default: 0 |
| header.column.paddingLeft | <code>number</code> | default: 1 |
| header.column.paddingRight | <code>number</code> | default: 1 |
| header.column.paddingTop | <code>number</code> | default: 0 |

@@ -155,0 +155,0 @@ | rows | <code>array</code> | [See example](#example-usage) |

@@ -35,25 +35,24 @@ let Config = {

paddingBottom : 0,
paddingLeft : 0,
paddingRight : 0,
paddingLeft : 1,
paddingRight : 1,
paddingTop : 0,
tableType : null,
truncate: false,
width : 20,
width : "auto",
GUTTER : 1, //undocumented
columnSettings : [],
headerEmpty : false,
//save so cell options can be merged into column options
table : {
body : '',
columnInnerWidths : [],
columnWidths : [],
columns : [],
footer : '',
header : '', //post-rendered strings.
height : 0,
typeLocked : false //once a table type is selected can't switch
}
};
Config.GUTTER = 1;
//save so cell options can be merged into column options
Config.columnSettings = [];
Config.headerEmpty = false;
Config.table = {
body : '',
columnInnerWidths : [],
columnWidths : [],
columns : [],
footer : '',
header : '', //post-rendered strings.
height : 0,
typeLocked : false //once a table type is selected can't switch
};
module.exports = Config;

@@ -66,5 +66,5 @@ //let StripAnsi = require("strip-ansi");

cellOptions.paddingLeft -
cellOptions.paddingRight -
cellOptions.paddingRight -
config.GUTTER;
switch(true){

@@ -79,5 +79,5 @@ //no wrap, truncate

break;
//asian characters
//string has wide characters
case(string.length < Format.calculateLength(string)):
string = Format.handleAsianChars(
string = Format.handleWideChars(
string,

@@ -88,5 +88,5 @@ cellOptions,

break;
//latin characters
//string does not have wide characters
default:
string = Format.handleLatinChars(string,cellOptions,innerWidth);
string = Format.handleNonWideChars(string,cellOptions,innerWidth);
}

@@ -149,3 +149,3 @@

Format.handleAsianChars = function(string,cellOptions,innerWidth){
Format.handleWideChars = function(string,cellOptions,innerWidth){
let count = 0;

@@ -170,8 +170,5 @@ let start = 0;

Format.handleLatinChars = function(string,cellOptions,innerWidth){
let calculatedWidth = innerWidth -
cellOptions.paddingLeft -
cellOptions.paddingRight;
Format.handleNonWideChars = function(string,cellOptions,innerWidth){
let outstring = Wrap(string,{
width : calculatedWidth,
width : innerWidth,
trim : true//,

@@ -185,28 +182,69 @@ //indent : '',

Format.getColumnWidths = function(config,rows){
/**
* Returns the widest cell give a collection of rows
*
* @param array rows
* @param integer columnIndex
* @returns integer
*/
Format.inferColumnWidth = function(columnOptions,rows,columnIndex){
let widths = [];
let source; //source of columns
let iterable;
//check widths on header settings if exists
if(config.table.header[0] && config.table.header[0].length > 0){
source = config.table.header[0];
//add a row that contains the header value, so we use that width too
if(typeof columnOptions === 'object' && columnOptions.value){
iterable = rows.slice();
let z = new Array(iterable[0].length); //create a new empty row
z[columnIndex] = columnOptions.value.toString();
iterable.push(z);
}
else if(rows.length > 0){
source = rows[0];
//no header value, just use rows to derive max width
else{
iterable = rows;
}
else {
return [];
}
widths = source.map(function(cell){
if(typeof cell === 'object' && typeof cell.width !=='undefined'){
return cell.width;
let widest = 0;
iterable.forEach(function(row){
if(row[columnIndex] && row[columnIndex].toString().length > widest){
//widest = row[columnIndex].toString().length;
widest = Wcwidth(row[columnIndex].toString());
}
else{
return config.width;
});
return widest;
}
Format.getColumnWidths = function(config,rows){
//iterate over the header if we have it, iterate over the first row
//if we do not (to step through the correct number of columns)
let iterable = (config.table.header[0] && config.table.header[0].length > 0)
? config.table.header[0] : rows[0];
let widths = iterable.map(function(column,columnIndex){ //iterate through column settings
let result;
switch(true){
//column width specified in header
case(typeof column === 'object' && typeof column.width === 'number'):
result = column.width;
break;
//global column width set in config
case(config.width && config.width !== 'auto'):
result = config.width;
break;
default:
//'auto' sets column width to longest value in initial data set
let columnOptions = (config.table.header[0][columnIndex])
? config.table.header[0][columnIndex] : {};
result = Format.inferColumnWidth(columnOptions,rows,columnIndex);
//add spaces for padding if not centered
result = result + config.paddingLeft + config.paddingRight;
}
//add space for gutter
result = result + config.GUTTER;
return result;
});
//check to make sure widths will fit the current display, or resize.
//calculate sum of all column widths (including marginLeft)
let totalWidth = widths.reduce(function(prev,curr){

@@ -219,3 +257,3 @@ return prev + curr;

//check process exists in case we are in browser
//if sum of all widths exceeds viewport, resize proportionately to fit
if(process && process.stdout && totalWidth > process.stdout.columns){

@@ -226,6 +264,10 @@ //recalculate proportionately to fit size

prop = prop.toFixed(2)-0.01;
// when process.stdout.columns is 0, width will be negative
if (prop > 0) {
widths = widths.map(function(value){
return Math.floor(prop*value);
});
}
widths = widths.map(function(value){
return Math.floor(prop*value);
});
}

@@ -232,0 +274,0 @@

@@ -1,2 +0,2 @@

let Merge = require("merge");
let Merge = require('merge');
let Render = require('./render.js');

@@ -22,9 +22,9 @@

* @param {string} header.column.headerColor - default: terminal's default color
* @param {number} header.column.marginLeft - default: 0
* @param {number} header.column.marginLeft - default: 0
* @param {number} header.column.marginTop - default: 0
* @param {number} header.column.maxWidth - default: 20
* @param {string|number} header.column.width - default: "auto"
* @param {number} header.column.paddingBottom - default: 0
* @param {number} header.column.paddingLeft - default: 0
* @param {number} header.column.paddingRight - default: 0
* @param {number} header.column.paddingTop - default: 0
* @param {number} header.column.paddingLeft - default: 1
* @param {number} header.column.paddingRight - default: 1
* @param {number} header.column.paddingTop - default: 0
*

@@ -59,17 +59,17 @@ * @param {array} rows - [See example](#example-usage)

*[
* [
* {v: " ", l: " ", j: " ", h: " ", r: " "},
* {v: " ", l: " ", j: " ", h: " ", r: " "},
* {v: " ", l: " ", j: " ", h: " ", r: " "}
* ],
* [
* {v: "│", l: "┌", j: "┬", h: "─", r: "┐"},
* {v: "│", l: "├", j: "┼", h: "─", r: "┤"},
* {v: "│", l: "└", j: "┴", h: "─", r: "┘"}
* ],
* [
* {v: "|", l: "+", j: "+", h: "-", r: "+"},
* {v: "|", l: "+", j: "+", h: "-", r: "+"},
* {v: "|", l: "+", j: "+", h: "-", r: "+"}
* ]
* [
* {v: " ", l: " ", j: " ", h: " ", r: " "},
* {v: " ", l: " ", j: " ", h: " ", r: " "},
* {v: " ", l: " ", j: " ", h: " ", r: " "}
* ],
* [
* {v: "│", l: "┌", j: "┬", h: "─", r: "┐"},
* {v: "│", l: "├", j: "┼", h: "─", r: "┤"},
* {v: "│", l: "└", j: "┴", h: "─", r: "┘"}
* ],
* [
* {v: "|", l: "+", j: "+", h: "-", r: "+"},
* {v: "|", l: "+", j: "+", h: "-", r: "+"},
* {v: "|", l: "+", j: "+", h: "-", r: "+"}
* ]
*]

@@ -87,6 +87,5 @@ * ```

//check if syntax adapter called, i.e. github.com/Automattic/cli-table
if(Object.keys(arguments).length === 1 &&
typeof arguments[0] === 'string'){
return require('../'+arguments[0]);
//a syntax adapter was called. return the adapter.
if(Object.keys(arguments).length === 1 && typeof arguments[0] === 'string'){
return require('../adapters/'+arguments[0]);
}

@@ -96,4 +95,4 @@

let options = (typeof arguments[3] === 'object') ? arguments[3] :
(typeof arguments[2] === 'object') ? arguments[2] : {};
let options = (typeof arguments[3] === 'object') ? arguments[3] :
(typeof arguments[2] === 'object') ? arguments[2] : {};

@@ -142,3 +141,2 @@ Config = Merge(true,Config,options);

Config.table.footer = (arguments[2] instanceof Array) ? arguments[2] : [];
return Cls;

@@ -145,0 +143,0 @@ }

@@ -10,3 +10,2 @@ let Merge = require("merge");

Render.stringifyData = function(Config,data){
let sections = {

@@ -16,7 +15,6 @@ header : [],

footer : []
},
output = '',
marginLeft = Array(Config.marginLeft + 1).join('\ '),
borderStyle = Config.borderCharacters[Config.borderStyle],
borders = [];
};
let marginLeft = Array(Config.marginLeft + 1).join('\ ');
let borderStyle = Config.borderCharacters[Config.borderStyle];
let borders = [];

@@ -30,3 +28,10 @@ //because automattic/cli-table syntax infers table type based on

Config.table.columnWidths = Format.getColumnWidths(Config,data);
//when streaming values to tty-table, we don't want column widths to change
//from one data set to the next, so we save the first set of widths and reuse
if(!global.columnWidths){
global.columnWidths = Config.table.columnWidths = Format.getColumnWidths(Config,data);
}
else{
Config.table.columnWidths = global.columnWidths;
}

@@ -36,3 +41,3 @@ //stringify header cells

sections.header = Config.table.header.map(function(row){
return Render.buildRow(Config,row,'header');
return buildRow(Config,row,'header');
});

@@ -46,3 +51,3 @@ }

sections.body = data.map(function(row){
return Render.buildRow(Config,row,'body');
return buildRow(Config,row,'body');
});

@@ -54,3 +59,3 @@

sections.footer = sections.footer.map(function(row){
return Render.buildRow(Config,row,'footer');
return buildRow(Config,row,'footer');
});

@@ -75,7 +80,5 @@

//top horizontal border
let output = '';
output += borders[0];
//rows
let row;
//for each section (header,body,footer)

@@ -87,3 +90,3 @@ Object.keys(sections).forEach(function(p,i){

row = sections[p].shift();
let row = sections[p].shift();

@@ -140,3 +143,3 @@ //if(row.length === 0) {break}

Render.buildRow = function(config,row,rowType){
const buildRow = function(config,row,rowType){

@@ -152,5 +155,4 @@ let minRowHeight = 0;

//check for diffeerences in line length
//force row to have correct number of columns
let difL = config.table.columnWidths.length - row.length;
if(difL > 0){

@@ -160,3 +162,2 @@ //add empty element to array

.map(function(){return null}));
//.map(function(){return ''}));
}

@@ -169,7 +170,6 @@ else if(difL < 0){

//get row as array of cell arrays
//can't use es5 row functions (map, forEach because of
//potential ellision; by which [1,,3] will only iterate 1,3
//can't use es5 row functions (map, forEach because i.e.
//[1,,3] will only iterate 1,3
let cArrs = [];
let rowLength = row.length;
for(let index=0; index<rowLength; index++){

@@ -176,0 +176,0 @@

@@ -8,13 +8,16 @@ var chai = require("chai");

var grunt = require('grunt');
var savedTestDir = __dirname + '/saved_test_outputs';
//Test all example scripts against their saved output
var list = glob.sync('examples/*.js');
var exampleScripts = glob.sync(__dirname + '/../examples/*.js');
list.forEach(function(element,index,array){
exampleScripts.forEach(function(element,index,array){
let fileName = element.split('/').pop();
let savedTestPath = savedTestDir + '/' + fileName + '-output.txt';
describe(element,function(){
it('Should match ' + element + '-output.txt',function(deferred){
it('Should match ' + savedTestPath, function(deferred){
var exec = require('child_process').exec, child;
child = exec('node ./'+element+' --color=always',
child = exec('node '+element+' --color=always',
function (error, stdout, stderr) {

@@ -26,4 +29,4 @@ //console.log('stdout: ' + stdout);

}
var subname = element.split('.')[0];
var expected1 = fs.readFileSync('./'+subname+'-output.txt',{encoding : 'utf-8'});
var subname = fileName.split('.')[0];
var expected1 = fs.readFileSync(savedTestDir + '/' + subname + '-output.txt',{encoding : 'utf-8'});

@@ -30,0 +33,0 @@ //example result should match saved output

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc