@tableau/taco-toolkit
Version:
Tableau Connector Toolkit
24 lines (17 loc) • 986 B
text/typescript
import { CsvUtils, DataContainer, DataType, ParseOptions, AsyncParser } from '@tableau/taco-toolkit/handlers'
export default class CsvDataParser extends AsyncParser<Uint8Array> {
async parse(fetcherResult: Uint8Array, { dataContainer }: ParseOptions): Promise<DataContainer> {
const tableName = 'csv-data-table'
const containerBuilder = AsyncParser.createContainerBuilder(dataContainer)
const { tableBuilder } = containerBuilder.getTable(tableName)
// fetcherResult contains the CSV content yielded from Fetcher
const { headers, rows } = await CsvUtils.parse(fetcherResult, { hasHeader: true })
if (!headers) {
throw new Error('The parsing result does not include the expected headers.')
}
tableBuilder.addColumnHeaders(headers.map((id: string) => ({ id, dataType: DataType.String })))
const dataRows = await CsvUtils.createDataRows(rows, headers)
tableBuilder.addRows(dataRows)
return containerBuilder.getDataContainer()
}
}