-
Notifications
You must be signed in to change notification settings - Fork 0
/
validation.js
34 lines (29 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
"use strict";
const joi = require('joi');
// the validation schema
const pidSchema = joi.object({
name: joi.string(), // Pid name
kp: joi.number().default(0.5), // Proportional gain
ki: joi.number().default(0.05), // Integral gain
kd: joi.number().default(0.1), // Derivative gain
dt: joi.number().default(5000), // Time interval in milliseconds,
initial: joi.number().default(0), // Initial value
target: joi.number().default(100), // Target value
u_bound: joi.number().default(100), // max output value
l_bound: joi.number().default(0), // min output value
reverse: joi.boolean().default(true), // reverse mode
}).unknown().required();
const pidsSchema = joi.array().items(pidSchema);
module.exports = async function (pidArray) {
// validate the config object
const validation = pidsSchema.validate(pidArray || {});
if (validation.error) {
const errors = [];
validation.error.details.forEach( detail => {
errors.push(detail.message);
});
// process failed
throw new Error(`pids validation error: ${errors.join(", ")}`);
}
return validation.value;
};