UNPKG

@csvw-rdf-convertor/core

Version:

This library was generated with [Nx](https://nx.dev).

61 lines (60 loc) 3.24 kB
import { Readable } from 'stream'; import { convertColumnToDateFormattedColumn, formatDate, isDateFormatedColumn } from './utils/date-formatting.js'; import { convertColumnToNumberFormattedColumn, isNumberColumn, transformNumber } from './utils/number-formating.js'; import { DataFactory } from 'rdf-data-factory'; import { trimUrl } from './utils/url-trimming.js'; const factory = new DataFactory(); export function transformStream(stream, tableDescription, columns, table, issueTracker) { const transformedStream = new Readable({ objectMode: true, read () { // no-op } }); //This part is called when the stream is piped to another stream and gets data. stream.on('data', (bindings)=>{ for(let i = 0; i < tableDescription.tableSchema.columns.length && !tableDescription.tableSchema.columns[i].virtual; i++){ const columnDescription = tableDescription.tableSchema.columns[i]; if (!bindings.get(columns[i].queryVariable)) { if (columnDescription.null) { if (columnDescription.null instanceof Array) { bindings = bindings.set(columns[i].queryVariable, factory.literal(columnDescription.null[0])); } else { bindings = bindings.set(columns[i].queryVariable, factory.literal(columnDescription.null)); } } else { continue; } } const value = bindings.get(columns[i].queryVariable).value; if (isDateFormatedColumn(columnDescription)) { const convertedDateColumn = convertColumnToDateFormattedColumn(columnDescription); if (convertedDateColumn) { const formattedValue = formatDate(value, convertedDateColumn.datatype.format); bindings = bindings.set(columns[i].queryVariable, factory.literal(formattedValue)); } } else if (isNumberColumn(columnDescription)) { const convertedNumberColumn = convertColumnToNumberFormattedColumn(columnDescription); if (convertedNumberColumn) { const formattedValue = transformNumber(value, convertedNumberColumn, issueTracker); bindings = bindings.set(columns[i].queryVariable, factory.literal(formattedValue)); } } else if (columnDescription.valueUrl) { const formattedValue = trimUrl(value, columnDescription.valueUrl, columns[i].name, issueTracker); bindings = bindings.set(columns[i].queryVariable, factory.literal(formattedValue)); } else if (table.aboutUrl) { const formattedValue = trimUrl(value, table.aboutUrl, columns[i].name, issueTracker); bindings = bindings.set(columns[i].queryVariable, factory.literal(formattedValue)); } } transformedStream.push(bindings); }); stream.on('end', ()=>{ transformedStream.push(null); }); stream.on('error', (err)=>{ transformedStream.destroy(err); }); return transformedStream; } //# sourceMappingURL=transformation-stream.js.map