-
Notifications
You must be signed in to change notification settings - Fork 0
/
validation.js
37 lines (31 loc) · 1.12 KB
/
validation.js
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
"use strict";
const joi = require('joi');
// the validation schema
const raspberryGPIOSchema = joi.object({
name: joi.string().default("GPIO22"),
type: joi.string().valid('input', 'output').default("input"),
init: joi.number().valid(0, 1).default(0),
edge: joi.string().valid('none', 'rising', 'falling', 'both').default('both'),
debounce: joi.number().default(50),
gpio: joi.number()
.valid(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,30,31,32,33,34,35,36,37,38,39,40,41,42,45)
.default(22)
}).unknown();
const raspberrySchema = joi.array().items(raspberryGPIOSchema);
module.exports = async function (raspberryObject) {
// we need an array
if (!(raspberryObject instanceof Array)) {
raspberryObject = [{ }];
}
// validate the config object
const validation = raspberrySchema.validate(raspberryObject);
if (validation.error) {
const errors = [];
validation.error.details.forEach( detail => {
errors.push(detail.message);
});
// process failed
throw new Error(`raspberry config validation error: ${errors.join(", ")}`);
}
return validation.value;
};