Skip to main content

Table Instance Methods

This section covers all methods available on Table instances for manipulating data and structure.

Row Management Methods

addRow

addRow(rowData: RowData, options?: RowOptions): Table

Adds a single row to the table.

Parameters:

  • rowData: RowData - Object containing row data
  • options?: RowOptions - Optional row-specific options

Returns: Table instance (for method chaining)

Example:

const table = new Table();
table.addRow({ id: 1, name: "John", age: 25 });

With Options:

const table = new Table();
table.addRow(
{ id: 1, name: "John", age: 25 },
{ color: "green", separator: true }
);

Chaining:

const table = new Table();
table
.addRow({ id: 1, name: "John", age: 25 }, { color: "green" })
.addRow({ id: 2, name: "Jane", age: 30 }, { color: "blue" })
.addRow({ id: 3, name: "Bob", age: 35 }, { color: "red" });

addRows

addRows(rowsData: RowData[], options?: RowOptions): Table

Adds multiple rows to the table.

Parameters:

  • rowsData: RowData[] - Array of objects containing row data
  • options?: RowOptions - Optional options applied to all rows

Returns: Table instance (for method chaining)

Example:

const table = new Table();
table.addRows([
{ id: 1, name: "John", age: 25 },
{ id: 2, name: "Jane", age: 30 },
{ id: 3, name: "Bob", age: 35 }
]);

With Options:

const table = new Table();
table.addRows([
{ id: 1, name: "John", age: 25 },
{ id: 2, name: "Jane", age: 30 },
{ id: 3, name: "Bob", age: 35 }
], { color: "yellow" });

Mixed with Separators:

const table = new Table();

// Add first group
table.addRows([
{ category: "Fruits", item: "Apple", price: 1.0 },
{ category: "Fruits", item: "Banana", price: 0.5 }
]);

// Add separator
table.addRow({ category: "Fruits", item: "Orange", price: 0.75 }, { separator: true });

// Add second group
table.addRows([
{ category: "Vegetables", item: "Carrot", price: 0.3 },
{ category: "Vegetables", item: "Potato", price: 0.4 }
]);

clearRows

clearRows(): Table

Removes all rows from the table while keeping the table columns and configuration.

Use this when the table structure should stay the same, but the row data needs to be replaced or reset.

Parameters: None

Returns: Table instance (for method chaining)

Example:

const table = new Table(["id", "status"]);

table.addRows([
{ id: 1, status: "Queued" },
{ id: 2, status: "Running" }
]);

table.clearRows();
table.addRow({ id: 3, status: "Done" });
table.printTable();

Chaining:

const table = new Table(["id", "status"])
.addRows([
{ id: 1, status: "Queued" },
{ id: 2, status: "Running" }
])
.clearRows()
.addRows([{ id: 3, status: "Done" }]);

Clearing Constructor Rows:

const table = new Table({
columns: [{ name: "task" }, { name: "state" }],
rows: [
{ task: "fetch", state: "pending" },
{ task: "build", state: "running" }
]
});

table.clearRows().addRow({ task: "deploy", state: "done" });

After rows are cleared, render() and printTable() keep the existing table headers and render an empty body until new rows are added.

Column Management Methods

addColumn

addColumn(columnConfig: ColumnConfig): Table

Adds a single column to the table.

Parameters:

  • columnConfig: ColumnConfig - Column configuration object

Returns: Table instance (for method chaining)

Example:

const table = new Table();
table.addColumn({
name: "age",
alignment: "right",
color: "yellow"
});

Complete Column Configuration:

const table = new Table();
table.addColumn({
name: "salary",
title: "Annual Salary",
alignment: "right",
color: "green",
maxLen: 15,
minLen: 10
});

addColumns

addColumns(columnsConfig: ColumnConfig[]): Table

Adds multiple columns to the table.

Parameters:

  • columnsConfig: ColumnConfig[] - Array of column configuration objects

Returns: Table instance (for method chaining)

Example:

const table = new Table();
table.addColumns([
{ name: "id", alignment: "left", color: "cyan" },
{ name: "name", alignment: "center", color: "yellow" },
{ name: "age", alignment: "right", color: "green" }
]);

Mixed Column Types:

const table = new Table();
table.addColumns([
// Simple column
{ name: "id" },

// Column with alignment
{ name: "name", alignment: "center" },

// Column with color
{ name: "status", color: "red" },

// Column with length constraints
{ name: "description", maxLen: 20, minLen: 10 },

// Column with custom title
{ name: "created_at", title: "Created Date", alignment: "right" }
]);

Output Methods

printTable

printTable(): void

Prints the table to the console.

Parameters: None

Returns: void

Example:

const table = new Table();
table.addRow({ id: 1, name: "John" });
table.printTable();

Complete Workflow:

const table = new Table({
columns: [
{ name: "id", alignment: "left" },
{ name: "name", alignment: "center" },
{ name: "age", alignment: "right" }
]
});

table.addRows([
{ id: 1, name: "John", age: 25 },
{ id: 2, name: "Jane", age: 30 },
{ id: 3, name: "Bob", age: 35 }
]);

table.printTable();

render

render(): string

Renders the table as a string without printing it.

Parameters: None

Returns: string - The formatted table as a string

Example:

const table = new Table();
table.addRow({ id: 1, name: "John" });
const tableString = table.render();
console.log(tableString);

Advanced Usage:

const table = new Table({
title: "User Report"
// Default style will be used (omit style property for default borders)
});

table.addRows([
{ id: 1, name: "John", age: 25 },
{ id: 2, name: "Jane", age: 30 }
]);

// Get the formatted string
const report = table.render();

// Save to file
const fs = require('fs');
fs.writeFileSync('user-report.txt', report);

// Send via email
sendEmail('admin@company.com', 'User Report', report);

// Log to different console
console.error(report);

Method Chaining Examples

Complete Table Building

const table = new Table()
.addColumn({ name: "id", alignment: "left", color: "cyan" })
.addColumn({ name: "name", alignment: "center", color: "yellow" })
.addColumn({ name: "age", alignment: "right", color: "green" })
.addRow({ id: 1, name: "John", age: 25 }, { color: "blue" })
.addRow({ id: 2, name: "Jane", age: 30 }, { color: "red" })
.addRow({ id: 3, name: "Bob", age: 35 }, { separator: true })
.addRow({ id: 4, name: "Alice", age: 28 })
.printTable();

Dynamic Table Building

const table = new Table();

// Add columns dynamically
const columns = ["id", "name", "email", "role"];
columns.forEach(col => {
table.addColumn({
name: col,
alignment: col === "id" ? "left" : "center"
});
});

// Add rows from API data
async function buildUserTable() {
const users = await fetchUsers();

users.forEach((user, index) => {
const options = {};

// Add color based on role
if (user.role === "admin") {
options.color = "red";
} else if (user.role === "manager") {
options.color = "yellow";
}

// Add separator after every 5 users
if ((index + 1) % 5 === 0) {
options.separator = true;
}

table.addRow(user, options);
});

table.printTable();
}

RowOptions Interface

interface RowOptions {
// Row color
color?: Color;

// Add separator after this row
separator?: boolean;
}

ColumnConfig Interface

interface ColumnConfig {
// Required: Column identifier
name: string;

// Optional: Display title (defaults to name)
title?: string;

// Optional: Text alignment
alignment?: Alignment;

// Optional: Text color
color?: Color;

// Optional: Maximum length
maxLen?: number;

// Optional: Minimum length
minLen?: number;
}