UNPKG

ffc-pay-etl-framework

Version:

A framework for creating ETL pipelines in node

41 lines (40 loc) 1.19 kB
const { Transform } = require("node:stream"); /** * * @param {Object} options * @param {String} options.message * @param {String} options.column * @returns Transform */ function UniqueValidator(options) { let self = this; self.column = options.column; self.message = options.message ? options.message : "Expected unique value is not unique"; self.uniqueColumnRows = []; function checkIsUnique(data) { return self.uniqueColumnRows.indexOf(data) === -1; } return new Transform({ readableObjectMode: true, writableObjectMode: true, decodeStrings: false, construct(callback) { callback(); }, transform(chunk, _, callback) { const { _columns } = chunk; const colIndex = _columns.indexOf(self.column); const uniqueValue = chunk[colIndex]; if (checkIsUnique(uniqueValue)) { self.uniqueColumnRows.push(uniqueValue); } else { chunk.errors.push(`${self.message} ${self.column}`); } callback(null, chunk); } }); } module.exports = { UniqueValidator };