|
|
|
const check = require('check-types');
|
|
|
|
const iso3166 = require('../helper/iso3166');
|
|
|
|
|
|
|
|
function _sanitize(raw, clean) {
|
|
|
|
// error & warning messages
|
|
|
|
var messages = { errors: [], warnings: [] };
|
|
|
|
|
|
|
|
// target input param
|
|
|
|
var country = raw['boundary.country'];
|
|
|
|
|
|
|
|
// param 'boundary.country' is optional and should not
|
|
|
|
// error when simply not set by the user
|
|
|
|
if (check.assigned(country)){
|
|
|
|
|
|
|
|
// must be valid string
|
|
|
|
if (!check.nonEmptyString(country)) {
|
|
|
|
messages.errors.push('boundary.country is not a string');
|
|
|
|
}
|
|
|
|
|
|
|
|
// must be a valid ISO 3166 code
|
|
|
|
else if (!containsIsoCode(country)) {
|
|
|
|
messages.errors.push(country + ' is not a valid ISO2/ISO3 country code');
|
|
|
|
}
|
|
|
|
|
|
|
|
// valid ISO 3166 country code, set alpha3 code on '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.iso3Code(country);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return messages;
|
|
|
|
}
|
|
|
|
|
|
|
|
function containsIsoCode(isoCode) {
|
|
|
|
return iso3166.isISO2Code(isoCode) || iso3166.isISO3Code(isoCode);
|
|
|
|
}
|
|
|
|
|
|
|
|
function _expected(){
|
|
|
|
return [{ name: 'boundary.country' }];
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = () => ({
|
|
|
|
sanitize: _sanitize,
|
|
|
|
expected: _expected
|
|
|
|
});
|