You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

42 lines
1.1 KiB

var check = require('check-types');
var iso3166 = require('iso3166-1');
function sanitize(raw, clean) {
// error & warning messages
var messages = { errors: [], warnings: [] };
// init clean.boundary (if not already init)
clean.boundary = clean.boundary || {};
if (check.assigned(raw['boundary.country'])) {
var country = raw['boundary.country'];
if (!check.string(country)) {
messages.errors.push('boundary.country is not a string');
delete clean.boundary.country;
}
else if (!containsIsoCode(country.toUpperCase())) {
messages.errors.push(country + ' is not a valid ISO2/ISO3 country code');
delete clean.boundary.country;
}
else {
// the only way for boundary.country to be assigned is if input is
// a string and a known ISO2 or ISO3
clean.boundary.country = iso3166.to3(country.toUpperCase());
}
} else {
delete clean.boundary.country;
}
return messages;
}
function containsIsoCode(isoCode) {
return iso3166.list().some(function(row) {
return row.alpha2 === isoCode || row.alpha3 === isoCode;
});
}
module.exports = sanitize;