Overview
@woltz/rich-domain-csv provides powerful CSV export capabilities for your rich-domain entities. Export data with full type safety, custom formatting, and efficient streaming for large datasets.Type-Safe Columns
Only entity properties are allowed - no methods or getters
Custom Formatters
Transform field values with custom formatting functions
Streaming Support
Memory-efficient export for large datasets
Progress Tracking
Real-time progress callbacks for long-running exports
Installation
Quick Start
Using CsvExportService (Recommended)
Use the standalone service to keep export logic separate from repositories:Using ExportableRepository
Extend your repository with CSV export capabilities:Basic Usage
Export with Selected Columns
Export with Custom Headers
Export with Filters
Use Criteria to filter data before export:Advanced Features
Custom Formatters
Transform field values before CSV serialization:Common Formatters
The library provides common formatters out of the box:isoDate- ISO 8601 date stringlocaleDate- Locale date string (e.g., “1/1/2024”)localeDateTime- Locale datetime stringdecimal2- Number with 2 decimal placescurrencyUSD- USD currency format ($X.XX)yesNo- Boolean as “Yes” or “No”trueFalse- Boolean as “True” or “False”array- Array as comma-separated stringjson- Object as JSON stringuppercase- Convert to uppercaselowercase- Convert to lowercasetrim- Trim whitespace
Custom Delimiter
Change the CSV delimiter (default is comma):Disable Headers
Export data without header row:Progress Tracking
Monitor export progress for large datasets:Streaming for Large Datasets
For memory-efficient export of large datasets, use streaming:Stream with Filters
Combine streaming with criteria filtering:Export Statistics
Get detailed statistics about the export operation:Type Safety
The library provides full type safety for column selection:Error Handling
The library provides specific error types:Complete Example
API Reference
CsvExportService
export<T>(repository, criteria?, options?, onProgress?)
Export entities to CSV string.
Parameters:
repository: Repository<T>- Repository to export fromcriteria?: Criteria<T>- Optional filter and sort criteriaoptions?: CsvExportOptions<T>- Export configurationonProgress?: (processed: number, total: number) => void- Progress callback
Promise<{ csv: string; stats: CsvExportStats }>
exportStream<T>(repository, criteria?, options?)
Export entities to CSV stream for large datasets.
Parameters:
repository: Repository<T>- Repository to export fromcriteria?: Criteria<T>- Optional filter and sort criteriaoptions?: CsvExportOptions<T>- Export configuration
Promise<Readable>