'use strict' /** * Validate a topic to see if it's valid or not. * A topic is valid if it follow below rules: * - Rule #1: If any part of the topic is not `+` or `#`, then it must not contain `+` and '#' * - Rule #2: Part `#` must be located at the end of the mailbox * * @param {String} topic - A topic * @returns {Boolean} If the topic is valid, returns true. Otherwise, returns false. */ function validateTopic (topic) { var parts = topic.split('/') for (var i = 0; i < parts.length; i++) { if (parts[i] === '+') { continue } if (parts[i] === '#') { // for Rule #2 return i === parts.length - 1 } if (parts[i].indexOf('+') !== -1 || parts[i].indexOf('#') !== -1) { return false } } return true } /** * Validate an array of topics to see if any of them is valid or not * @param {Array} topics - Array of topics * @returns {String} If the topics is valid, returns null. Otherwise, returns the invalid one */ function validateTopics (topics) { if (topics.length === 0) { return 'empty_topic_list' } for (var i = 0; i < topics.length; i++) { if (!validateTopic(topics[i])) { return topics[i] } } return null } module.exports = { validateTopics: validateTopics }