|
|
|
var check = require('check-types');
|
|
|
|
var categoryTaxonomy = require('pelias-categories');
|
|
|
|
|
|
|
|
var ERRORS = {
|
|
|
|
empty: 'Categories parameter cannot be left blank. See documentation of service for valid options.',
|
|
|
|
invalid: 'Invalid categories parameter value(s). See documentation of service for valid options.'
|
|
|
|
};
|
|
|
|
|
|
|
|
// validate inputs, convert types and apply defaults
|
|
|
|
function _sanitize( raw, clean, categories ) {
|
|
|
|
|
|
|
|
categories = categories || categoryTaxonomy;
|
|
|
|
|
|
|
|
// error & warning messages
|
|
|
|
var messages = {errors: [], warnings: []};
|
|
|
|
|
|
|
|
// it's not a required parameter, so if it's not provided just move on
|
|
|
|
if (!raw.hasOwnProperty('categories')) {
|
|
|
|
return messages;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!check.nonEmptyString(raw.categories)) {
|
|
|
|
messages.errors.push(ERRORS.empty);
|
|
|
|
return messages;
|
|
|
|
}
|
|
|
|
|
|
|
|
// if categories string has been set
|
|
|
|
// map input categories to valid format
|
|
|
|
try {
|
|
|
|
clean.categories = raw.categories.split(',')
|
|
|
|
.map(function (cat) {
|
|
|
|
return cat.toLowerCase().trim(); // lowercase inputs
|
|
|
|
})
|
|
|
|
.filter(function (cat) {
|
|
|
|
if (check.nonEmptyString(cat) && categories.isValidCategory(cat)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
throw new Error('Empty string value');
|
|
|
|
});
|
|
|
|
} catch (err) {
|
|
|
|
// remove everything from the list if there was any error
|
|
|
|
delete clean.categories;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (check.undefined(clean.categories) || check.emptyArray(clean.categories)) {
|
|
|
|
messages.errors.push(ERRORS.invalid);
|
|
|
|
}
|
|
|
|
|
|
|
|
return messages;
|
|
|
|
}
|
|
|
|
|
|
|
|
function _expected() {
|
|
|
|
return [{ name: 'categories' }];
|
|
|
|
}
|
|
|
|
// export function
|
|
|
|
module.exports = () => ({
|
|
|
|
sanitize: _sanitize,
|
|
|
|
expected: _expected
|
|
|
|
});
|