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 });