|
|
|
var isObject = require('is-object');
|
|
|
|
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 (raw.boundary && raw.boundary.country) {
|
|
|
|
var country = raw.boundary.country
|
|
|
|
|
|
|
|
if (typeof country !== 'string') {
|
|
|
|
messages.warnings.push('boundary.country is not a string');
|
|
|
|
clean.boundary.country = undefined;
|
|
|
|
}
|
|
|
|
else if (!containsIsoCode(country.toUpperCase())) {
|
|
|
|
messages.warnings.push(country + ' is not a valid ISO2/ISO3 country code');
|
|
|
|
clean.boundary.country = undefined;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
clean.boundary.country = iso3166.to3(country.toUpperCase());
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
clean.boundary.country = undefined;
|
|
|
|
}
|
|
|
|
|
|
|
|
return messages;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function containsIsoCode(isoCode) {
|
|
|
|
return iso3166.list().some(function(row) {
|
|
|
|
return row.alpha2 === isoCode || row.alpha3 === isoCode;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = sanitize;
|