Home/Tools/@tpmjs/tools-csv-stringify

csvStringifyTool

@tpmjs/tools-csv-stringify

Convert an array of objects to CSV string format. Optionally specify custom headers. Returns the CSV string, row count, and metadata. Useful for exporting data to CSV files or API responses.

Official
data
v0.2.0
MIT
⚠️

This tool is currently broken

Execution Failed
Runtime error with test parameters
Rows array cannot be empty

Last checked: 1/1/2026, 8:18:20 AM

Interactive Playground

Test @tpmjs/tools-csv-stringify (csvStringifyTool) with AI-powered execution

0/2000 characters

Installation & Usage

Install this tool and use it with the AI SDK

1. Install the package

npm install @tpmjs/tools-csv-stringify
pnpm add @tpmjs/tools-csv-stringify
yarn add @tpmjs/tools-csv-stringify
bun add @tpmjs/tools-csv-stringify
deno add npm:@tpmjs/tools-csv-stringify

2. Import the tool

import { csvStringifyTool } from '@tpmjs/tools-csv-stringify';

3. Use with AI SDK

import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
import { csvStringifyTool } from '@tpmjs/tools-csv-stringify';

const result = await generateText({
  model: openai('gpt-4o'),
  tools: { csvStringifyTool },
  prompt: 'Your prompt here...',
});

console.log(result.text);

Parameters

Available configuration options

Auto-extracted
rows
Required
Type: array

Array of objects to convert to CSV

headers
Optional
Type: array

Optional array of header names. If not provided, uses object keys from first row.

Schema extracted: 1/1/2026, 8:18:19 AM

README

@tpmjs/tools-csv-stringify

Convert array of objects to CSV string using papaparse.

Installation

npm install @tpmjs/tools-csv-stringify
# or
pnpm add @tpmjs/tools-csv-stringify
# or
yarn add @tpmjs/tools-csv-stringify

Usage

With Vercel AI SDK

import { csvStringifyTool } from '@tpmjs/tools-csv-stringify';
import { generateText } from 'ai';

const result = await generateText({
  model: yourModel,
  tools: {
    csvStringify: csvStringifyTool,
  },
  prompt: 'Convert this data to CSV format: [{"name":"Alice","age":25},{"name":"Bob","age":30}]',
});

Direct Usage

import { csvStringifyTool } from '@tpmjs/tools-csv-stringify';

const result = await csvStringifyTool.execute({
  rows: [
    { name: 'Alice', age: 25, city: 'New York' },
    { name: 'Bob', age: 30, city: 'San Francisco' },
    { name: 'Charlie', age: 35, city: 'Boston' },
  ],
});

console.log(result.csv);
// name,age,city
// Alice,25,New York
// Bob,30,San Francisco
// Charlie,35,Boston

console.log(result);
// {
//   csv: '...',
//   rowCount: 3,
//   metadata: {
//     headers: ['name', 'age', 'city'],
//     stringifiedAt: '2025-01-15T12:00:00.000Z',
//     byteSize: 85
//   }
// }

Features

  • Automatic Header Detection - Uses object keys from first row if headers not provided
  • Custom Headers - Optionally specify custom header names and order
  • Type Preservation - Properly handles strings, numbers, booleans, and null values
  • Standards Compliant - Follows RFC 4180 CSV specification
  • Byte Size Reporting - Returns UTF-8 byte size for file writing

Parameters

ParameterTypeRequiredDefaultDescription
rowsRecord<string, unknown>[]Yes-Array of objects to convert to CSV
headersstring[]NoObject keys from first rowCustom header names

Returns

{
  csv: string;
  rowCount: number;
  metadata: {
    headers: string[];
    stringifiedAt: string;
    byteSize: number;
  };
}

Examples

Basic Usage

const result = await csvStringifyTool.execute({
  rows: [
    { product: 'Laptop', price: 999.99, inStock: true },
    { product: 'Mouse', price: 29.99, inStock: false },
  ],
});

console.log(result.csv);
// product,price,inStock
// Laptop,999.99,true
// Mouse,29.99,false

Custom Headers

const result = await csvStringifyTool.execute({
  rows: [
    { name: 'Alice', age: 25, city: 'NYC' },
    { name: 'Bob', age: 30, city: 'SF' },
  ],
  headers: ['name', 'city'], // Only include these columns
});

console.log(result.csv);
// name,city
// Alice,NYC
// Bob,SF

Custom Header Order

const result = await csvStringifyTool.execute({
  rows: [
    { age: 25, name: 'Alice', city: 'NYC' },
    { age: 30, name: 'Bob', city: 'SF' },
  ],
  headers: ['name', 'age', 'city'], // Specify order
});

console.log(result.csv);
// name,age,city
// Alice,25,NYC
// Bob,30,SF

Handling Special Characters

const result = await csvStringifyTool.execute({
  rows: [
    { name: 'Alice, Jr.', message: 'Hello "World"' },
    { name: 'Bob\nSmith', message: 'Line\nBreak' },
  ],
});

// Properly escapes commas, quotes, and newlines
console.log(result.csv);
// name,message
// "Alice, Jr.","Hello ""World"""
// "Bob\nSmith","Line\nBreak"

Writing to File

import { writeFile } from 'fs/promises';

const result = await csvStringifyTool.execute({
  rows: [...],
});

await writeFile('output.csv', result.csv, 'utf-8');
console.log(`Wrote ${result.metadata.byteSize} bytes to output.csv`);

Error Handling

try {
  const result = await csvStringifyTool.execute({
    rows: [],
  });
} catch (error) {
  console.error(error.message); // "Rows array cannot be empty"
}

try {
  const result = await csvStringifyTool.execute({
    rows: ['not', 'objects'], // Invalid
  });
} catch (error) {
  console.error(error.message); // "All rows must be objects"
}

License

MIT

Statistics

Downloads/month

0

Quality Score

0%

Bundle Size

NPM Keywords

tpmjs
data
csv
stringify

Maintainers

thomasdavis(thomasalwyndavis@gmail.com)

Frameworks

vercel-ai