forked from mqttjs/MQTT.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvalidateTopic.ts
More file actions
48 lines (42 loc) · 1.24 KB
/
validateTopic.ts
File metadata and controls
48 lines (42 loc) · 1.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
'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.
*/
export 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
*/
export 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
}