Validation of CSV file against user defined schema (returns back object with data and invalid messages)
npm install csv-file-validatorValidation of CSV file against user defined schema (returns back object with data and invalid messages)
#### npmnpm install --save csv-file-validator
#### yarnyarn add csv-file-validator --save
javascript
import CSVFileValidator from 'csv-file-validator'CSVFileValidator(file, config)
.then(csvData => {
csvData.data // Array of objects from file
csvData.inValidData // Array of error messages
})
.catch(err => {})
`Please see Demo for more details /demo/index.html

API ##
$3
returns the Promisefile ##
Type: File
.csv file
config ##
Type: Object
Config object should contain:
headers - Type:
Array, row header (title) objects
isHeaderNameOptional - Type: Boolean, skip headers name if it is empty
isColumnIndexAlphabetic - Type: Boolean, convert numeric column index to alphabetic letter
parserConfig - Type: Object, optional, papaparse options.
Default options, which can't be overridden: skipEmptyLines, complete and error`javascript
const config = {
headers: [], // required
isHeaderNameOptional: false, // default (optional)
isColumnIndexAlphabetic: false // default (optional)
}
`$3
Type: String
name of the row header (title)$3
Type: String
key name which will be return with value in a column$3
Type: Boolean
Makes column optional. If true column value will be return
$3
Type: Function
If a header name is omitted or is not the same as in config name headerError function will be called with arguments
headerValue, headerName, rowNumber, columnNumber
$3
Type: Boolean
If required is true then a column value will be checked if it is not empty
$3
Type: Function
If value is empty requiredError function will be called with arguments
headerName, rowNumber, columnNumber
$3
Type: Boolean
If it is true all header (title) column values will be checked for uniqueness
$3
Type: Function
If one of the header value is not unique uniqueError function will be called with argument headerName, rowNumber
$3
Type: Function
Validate column value. As an argument column value will be passed
For e.g.
`javascript
/**
* @param {String} email
* @return {Boolean}
*/
function(email) {
return isEmailValid(email);
}
`$3
Type: Function
If validate returns false validateError function will be called with arguments headerName, rowNumber, columnNumber
$3
Type: Function
Validate column value that depends on other values in other columns.
As an argument column value and row will be passed.
For e.g.
`javascript
/**
* @param {String} email
* @param {Array} row
* @return {Boolean}
*/
function(email, row) {
return isEmailDependsOnSomeDataInRow(email, row);
}
`$3
Type: Function
If dependentValidate returns false dependentValidateError function will be called with arguments headerName, rowNumber, columnNumber
$3
Type: Boolean
If column contains list of values separated by comma in return object it will be as an array
#### Config example ####
`javascript
const config = {
headers: [
{
name: 'First Name',
inputName: 'firstName',
required: true,
requiredError: function (headerName, rowNumber, columnNumber) {
return ${headerName} is required in the ${rowNumber} row / ${columnNumber} column
}
},
{
name: 'Last Name',
inputName: 'lastName',
required: false
},
{
name: 'Email',
inputName: 'email',
unique: true,
uniqueError: function (headerName) {
return ${headerName} is not unique
},
validate: function(email) {
return isEmailValid(email)
},
validateError: function (headerName, rowNumber, columnNumber) {
return ${headerName} is not valid in the ${rowNumber} row / ${columnNumber} column
}
},
{
name: 'Roles',
inputName: 'roles',
isArray: true
},
{
name: 'Country',
inputName: 'country',
optional: true,
dependentValidate: function(email, row) {
return isEmailDependsOnSomeDataInRow(email, row);
}
}
]
}
``Any contributions you make are greatly appreciated.
Please read the Contributions Guidelines before submitting a PR.
MIT © Vasyl Stokolosa