homebridge-virtual-accessories
Version:
Virtual HomeKit accessories for Homebridge.
65 lines • 2.9 kB
JavaScript
/* eslint-disable curly */
import { Utils } from '../../utils/utils.js';
import { LocalDateTime, ZoneId } from '@js-joda/core';
import '@js-joda/timezone';
/**
*
*/
export class CronTriggerConfiguration {
pattern;
zoneId;
startDateTime;
endDateTime;
disableTriggerEventLogging = false;
isDisabled = false;
// 5: minutes granularity
// 6: seconds granularity
// 7: milliseconds granularity
static cronMinutesGranularityPattern = '^((((\\d+,)+\\d+|(\\d+(\\/|-|#)\\d+)|\\d+L?|\\*(\\/\\d+)?|L(-\\d+)?|\\?|[A-Z]{3}(-[A-Z]{3})?) ?){5})$';
static isoTimeNoMillisPattern = '^\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d(:[0-5]\\d|)$';
errorFields = [];
fieldNames = Utils.proxiedPropertiesOf(this);
isValid(prefix) {
const patternRegex = new RegExp(CronTriggerConfiguration.cronMinutesGranularityPattern);
const isValidPattern = (Utils.required(this.pattern) &&
patternRegex.test(this.pattern));
const isValidZoneId = (this.zoneId === undefined) || this.isValidZoneId(this.zoneId);
const isoTimeRegex = new RegExp(CronTriggerConfiguration.isoTimeNoMillisPattern);
const isValidStartDateTime = ((this.startDateTime !== undefined) ?
isoTimeRegex.test(this.startDateTime) :
true);
const isValidEndDateTime = ((this.endDateTime !== undefined) ?
isoTimeRegex.test(this.endDateTime) :
true);
let isValidExecutionRangeDateTime = true;
if (this.startDateTime !== undefined && this.endDateTime !== undefined) {
const startDate = LocalDateTime.parse(this.startDateTime);
const endDate = LocalDateTime.parse(this.endDateTime);
isValidExecutionRangeDateTime = endDate.isAfter(startDate);
}
if (!isValidPattern)
this.errorFields.push(prefix + '.' + this.fieldNames.pattern);
if (!isValidZoneId)
this.errorFields.push(prefix + '.' + this.fieldNames.zoneId);
if (!isValidStartDateTime)
this.errorFields.push(prefix + '.' + this.fieldNames.startDateTime);
if (!isValidEndDateTime)
this.errorFields.push(prefix + '.' + this.fieldNames.endDateTime);
if (!isValidExecutionRangeDateTime)
this.errorFields.push(prefix + '.' + this.fieldNames.startDateTime, prefix + '.' + this.fieldNames.endDateTime);
return [
(isValidPattern &&
isValidZoneId &&
isValidStartDateTime &&
isValidEndDateTime &&
isValidExecutionRangeDateTime),
this.errorFields,
];
}
isValidZoneId(zoneId) {
const availableZoneIds = ZoneId.getAvailableZoneIds();
const isValidZoneId = availableZoneIds.includes(zoneId);
return isValidZoneId;
}
}
//# sourceMappingURL=configurationCronTrigger.js.map