mirror of https://github.com/pelias/api.git
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.
47 lines
1.2 KiB
47 lines
1.2 KiB
const check = require('check-types'); |
|
const iso3166 = require('iso3166-1'); |
|
|
|
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.toUpperCase())) { |
|
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.to3(country.toUpperCase()); |
|
} |
|
} |
|
|
|
return messages; |
|
} |
|
|
|
function containsIsoCode(isoCode) { |
|
return iso3166.is2(isoCode) || iso3166.is3(isoCode); |
|
} |
|
|
|
function _expected(){ |
|
return [{ name: 'boundary.country' }]; |
|
} |
|
|
|
module.exports = () => ({ |
|
sanitize: _sanitize, |
|
expected: _expected |
|
});
|
|
|