mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 15:59:52 +03:00
87 lines
3.7 KiB
TypeScript
87 lines
3.7 KiB
TypeScript
import Schema, { InternalRuleItem } from 'async-validator';
|
|
import { IP_OR_HOSTNAME_VALIDATOR } from '../validators/shared';
|
|
import { Settings } from './types';
|
|
|
|
export const GPIO_VALIDATOR = {
|
|
validator(rule: InternalRuleItem, value: number, callback: (error?: string) => void) {
|
|
if (
|
|
value &&
|
|
(value === 1 ||
|
|
(value >= 10 && value <= 12) ||
|
|
(value >= 14 && value <= 15) ||
|
|
value === 20 ||
|
|
value === 24 ||
|
|
(value >= 28 && value <= 31) ||
|
|
value > 40 ||
|
|
value < 0)
|
|
) {
|
|
callback('Must be an valid GPIO port');
|
|
} else {
|
|
callback();
|
|
}
|
|
}
|
|
};
|
|
|
|
export const GPIO_VALIDATORC3 = {
|
|
validator(rule: InternalRuleItem, value: number, callback: (error?: string) => void) {
|
|
if (value && ((value >= 11 && value <= 19) || value > 21 || value < 0)) {
|
|
callback('Must be an valid GPIO port');
|
|
} else {
|
|
callback();
|
|
}
|
|
}
|
|
};
|
|
|
|
export const GPIO_VALIDATORS2 = {
|
|
validator(rule: InternalRuleItem, value: number, callback: (error?: string) => void) {
|
|
if (value && ((value >= 19 && value <= 20) || (value >= 22 && value <= 32) || value > 40 || value < 0)) {
|
|
callback('Must be an valid GPIO port');
|
|
} else {
|
|
callback();
|
|
}
|
|
}
|
|
};
|
|
|
|
export const createSettingsValidator = (settings: Settings) =>
|
|
new Schema({
|
|
...(settings.board_profile === 'CUSTOM' &&
|
|
settings.platform === 'ESP32' && {
|
|
led_gpio: [{ required: true, message: 'LED GPIO is required' }, GPIO_VALIDATOR],
|
|
dallas_gpio: [{ required: true, message: 'GPIO is required' }, GPIO_VALIDATOR],
|
|
pbutton_gpio: [{ required: true, message: 'Button GPIO is required' }, GPIO_VALIDATOR],
|
|
tx_gpio: [{ required: true, message: 'Tx GPIO is required' }, GPIO_VALIDATOR],
|
|
rx_gpio: [{ required: true, message: 'Rx GPIO is required' }, GPIO_VALIDATOR]
|
|
}),
|
|
...(settings.board_profile === 'CUSTOM' &&
|
|
settings.platform === 'ESP32-C3' && {
|
|
led_gpio: [{ required: true, message: 'LED GPIO is required' }, GPIO_VALIDATORC3],
|
|
dallas_gpio: [{ required: true, message: 'GPIO is required' }, GPIO_VALIDATORC3],
|
|
pbutton_gpio: [{ required: true, message: 'Button GPIO is required' }, GPIO_VALIDATORC3],
|
|
tx_gpio: [{ required: true, message: 'Tx GPIO is required' }, GPIO_VALIDATORC3],
|
|
rx_gpio: [{ required: true, message: 'Rx GPIO is required' }, GPIO_VALIDATORC3]
|
|
}),
|
|
...(settings.board_profile === 'CUSTOM' &&
|
|
settings.platform === 'ESP32-S2' && {
|
|
led_gpio: [{ required: true, message: 'LED GPIO is required' }, GPIO_VALIDATORS2],
|
|
dallas_gpio: [{ required: true, message: 'GPIO is required' }, GPIO_VALIDATORS2],
|
|
pbutton_gpio: [{ required: true, message: 'Button GPIO is required' }, GPIO_VALIDATORS2],
|
|
tx_gpio: [{ required: true, message: 'Tx GPIO is required' }, GPIO_VALIDATORS2],
|
|
rx_gpio: [{ required: true, message: 'Rx GPIO is required' }, GPIO_VALIDATORS2]
|
|
}),
|
|
...(settings.syslog_enabled && {
|
|
syslog_host: [{ required: true, message: 'Host is required' }, IP_OR_HOSTNAME_VALIDATOR],
|
|
syslog_port: [
|
|
{ required: true, message: 'Port is required' },
|
|
{ type: 'number', min: 0, max: 65535, message: 'Invalid Port' }
|
|
],
|
|
syslog_mark_interval: [
|
|
{ required: true, message: 'Mark interval is required' },
|
|
{ type: 'number', min: 0, max: 10, message: ' must be between 0 and 10' }
|
|
]
|
|
}),
|
|
...(settings.shower_alert && {
|
|
shower_alert_trigger: [{ type: 'number', min: 1, max: 20, message: 'Time must be between 1 and 20 minutes' }],
|
|
shower_alert_coldshot: [{ type: 'number', min: 1, max: 10, message: 'Time must be between 1 and 10 seconds' }]
|
|
})
|
|
});
|