CSV Generate is a flexible generator of random CSV strings and JavaScript objects implementing the Node.js stream.Readable API. It provides scalable streaming implementation with random or pseudo-random seed-based generation, ensuring idempotent results with seed options for reproducible data generation.
npm install csv-generateimport { generate, Generator } from "csv-generate";For sync operations:
import { generate } from "csv-generate/sync";For Web Streams:
import { generate } from "csv-generate/stream";For browser environments:
import { generate, Generator } from "csv-generate/browser/esm";
import { generate } from "csv-generate/browser/esm/sync";CommonJS:
const { generate, Generator } = require("csv-generate");import { generate } from "csv-generate";
// Stream API with callback
generate({
seed: 1,
columns: 2,
length: 3
}, (err, output) => {
console.log(output);
});
// Stream API
const generator = generate({
seed: 1,
objectMode: true,
columns: 2,
length: 3
});
generator.on('readable', function() {
let record;
while ((record = generator.read()) !== null) {
console.log(record);
}
});CSV Generate is built around several key components:
Generator class extending Node.js stream.Readable for scalable data generationCore streaming CSV generation using Node.js Readable streams. Ideal for large datasets and real-time data generation.
function generate(options?: Options, callback?: Callback): Generator;
function generate(callback?: Callback): Generator;
class Generator extends stream.Readable {
constructor(options?: Options);
readonly options: Options;
end(): void;
}Synchronous CSV generation for simple use cases where all data fits in memory.
function generate<T = any>(options: number | Options): string | Array<T>;Web Streams API compatible generation for browser environments and modern Node.js applications.
function generate(options?: Options): ReadableStream<Buffer>;Comprehensive option system controlling all aspects of CSV generation including columns, formatting, timing, and output control.
interface Options extends stream.ReadableOptions {
columns?: number | (string | ColumnsFunction)[];
delimiter?: string;
duration?: number;
encoding?: BufferEncoding | undefined;
end?: number | Date;
eof?: boolean | string;
fixed_size?: boolean;
fixedSize?: boolean;
high_water_mark?: number;
highWaterMark?: number;
length?: number;
max_word_length?: number;
maxWordLength?: number;
object_mode?: boolean;
objectMode?: boolean;
row_delimiter?: string;
seed?: boolean | number;
sleep?: number;
}type Callback = (err?: Error, records?: any) => void;
type ColumnsFunction = (args: ColumnsFunctionArgs) => string | number | null;
interface ColumnsFunctionArgs {
options: Options;
state: State;
}
interface State {
start_time: number | null;
fixed_size_buffer: string;
count_written: number;
count_created: number;
}