UNPKG

@pujansrt/data-genie

Version:

High performant ETL engine written in TypeScript

56 lines (55 loc) 3.04 kB
"use strict"; 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);