@pujansrt/data-genie
Version:
High performant ETL engine written in TypeScript
56 lines (55 loc) • 3.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const csv_reader_1 = require("../readers/csv-reader");
const json_writer_1 = require("../writers/json-writer");
const field_filters_1 = require("../filters/field-filters");
const filter_expressions_1 = require("../filters/filter-expressions");
const job_1 = require("../core/job");
const validating_reader_1 = require("../transformers/validating-reader");
async function runExample() {
// --- Validate Incoming Data Example ---
console.log('\n--- Validate Incoming Data Example ---');
let readerValidate = new csv_reader_1.CSVReader('input/credit-balance-01.csv').setFieldNamesInFirstRow(true);
const validatingReader = new validating_reader_1.ValidatingReader(readerValidate)
.setExceptionOnFailure(false)
// .setRecordStackTraceInMessage(false) // Not fully implemented in TS example for brevity
.add((record, messages) => {
let isValid = true;
if (!(0, field_filters_1.IsNotNull)()(record.Rating)) {
messages.push({ record, field: 'Rating', message: 'Rating cannot be null.' });
isValid = false;
}
if (!(0, field_filters_1.IsType)('string')(record.Rating)) {
messages.push({ record, field: 'Rating', message: 'Rating must be a string.' });
isValid = false;
}
if (!(0, field_filters_1.ValueMatch)('A', 'B', 'C')(record.Rating)) {
// Note: 'Z' would fail here as in your Java example
messages.push({ record, field: 'Rating', message: 'Rating must be A, B, or C.' });
isValid = false;
}
return isValid;
})
.add((record, messages) => {
let isValid = true;
if (!(0, field_filters_1.IsNotNull)()(record.Account)) {
messages.push({ record, field: 'Account', message: 'Account cannot be null.' });
isValid = false;
}
if (!(0, field_filters_1.IsType)('string')(record.Account)) {
messages.push({ record, field: 'Account', message: 'Account must be a string.' });
isValid = false;
}
if (!(0, field_filters_1.PatternMatch)('[0-9]*')(record.Account)) {
// Your Java example had [0-7]*, matching [0-9]* here
messages.push({ record, field: 'Account', message: 'Account must contain only digits.' });
isValid = false;
}
return isValid;
})
.add(new filter_expressions_1.FilterExpression('record.CreditLimit !== undefined && record.Balance !== undefined && parseFloat(record.CreditLimit) >= 0 && parseFloat(record.CreditLimit) <= 100000 && parseFloat(record.Balance) <= parseFloat(record.CreditLimit)').createRecordFilter());
await job_1.Job.run(validatingReader, new json_writer_1.JsonWriter('output/validated-data.json'));
console.log('Validation messages:', validatingReader.getMessages());
console.log('Validated data output written to output/validated-data.json');
}
runExample().catch(console.error);