delightloop-spreadsheet-wasm
v0.1.0
Published
High-performance spreadsheet engine compiled to WebAssembly
Readme
@delightloop/spreadsheet-wasm
High-performance spreadsheet engine compiled to WebAssembly using Rust.
Features
- High-Performance CSV Parsing: Parse large CSV files efficiently
- Multi-Column Sorting: Stable sort with multiple columns support
- Advanced Filtering: Text, number, date, and enum filters
- Global Search: Fuzzy matching across all cells
- Data Validation: Email, phone, URL, LinkedIn validation
- Aggregations: Count, sum, avg, min, max, unique operations
Installation
npm install @delightloop/spreadsheet-wasm
# or
pnpm add @delightloop/spreadsheet-wasmUsage
import init, { SpreadsheetEngine } from '@delightloop/spreadsheet-wasm';
// Initialize WASM
await init();
// Create engine instance
const engine = new SpreadsheetEngine();
// Load CSV data
const response = await fetch('/data.csv');
const bytes = new Uint8Array(await response.arrayBuffer());
const result = engine.load_csv(bytes);
if (result.success) {
console.log(`Loaded ${result.rowCount} rows with ${result.columnCount} columns`);
}
// Get rows (paginated)
const rows = engine.get_rows(0, 100);
// Sort by column
engine.sort([
{ columnId: 'col1', direction: 'asc' },
{ columnId: 'col2', direction: 'desc' },
]);
// Filter rows
engine.filter([
{ columnId: 'col1', operator: 'contains', value: 'search term' },
]);
// Search across all columns
engine.search('query');
// Update cell
const validation = engine.update_cell('row-id', 'email', '[email protected]');
if (validation.valid) {
console.log('Cell updated successfully');
}
// Export to CSV
const csvBytes = engine.export_csv();API Reference
SpreadsheetEngine
Constructor
const engine = new SpreadsheetEngine();CSV Operations
load_csv(bytes: Uint8Array): CsvParseResult- Parse CSV dataexport_csv(): Uint8Array- Export data as CSV
Data Operations
set_data(rows: Row[])- Set all rowsset_columns(columns: ColumnConfig[])- Set column configurationget_rows(start: number, count: number): Row[]- Get paginated rowsget_row(rowId: string): Row | null- Get single rowget_columns(): ColumnConfig[]- Get all columnsupdate_cell(rowId: string, colKey: string, value: any): ValidationResultadd_row(row: Row): string- Add row and return IDdelete_rows(rowIds: string[])- Delete multiple rowsduplicate_rows(rowIds: string[]): string[]- Duplicate rows
Column Operations
add_column(config: ColumnConfig): string- Add columnupdate_column(colId: string, config: ColumnConfig)- Update columndelete_column(colId: string)- Delete columnreorder_columns(colIds: string[])- Reorder columns
Sort/Filter/Search
sort(configs: SortConfig[])- Apply sortfilter(configs: FilterConfig[])- Apply filterssearch(query: string)- Global searchclear_filters()- Clear all filters, sorts, and search
Validation
validate_cell(value: any, dataType: string): ValidationResult
Aggregations
aggregate(colKey: string, op: string): AggregationResultget_unique_values(colKey: string): any[]
State
get_total_rows(): number- Total row countget_visible_rows(): number- Visible row count (after filter)
Building from Source
Prerequisites
- Rust (latest stable)
- wasm-pack (
cargo install wasm-pack)
Build
# Build WASM
wasm-pack build --target web --release
# Run tests
cargo testLicense
MIT
