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.
52 lines
1.2 KiB
52 lines
1.2 KiB
'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 |
|
}
|
|
|