homebridge-virtual-accessories
Version:
Virtual HomeKit accessories for Homebridge.
66 lines • 3.23 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
// eslint-disable-next-line max-len
static cronMinutesGranularityPattern = '(^((\\*\\/)?([0-5]?[0-9])((,|-|\\/)([0-5]?[0-9]))*|\\*)\\s((\\*\\/)?((2[0-3]|1[0-9]|[0-9]|00))((,|-|\\/)(2[0-3]|1[0-9]|[0-9]|00))*|\\*)\\s((\\*\\/)?([1-9]|[12][0-9]|3[01])((,|-|\\/)([1-9]|[12][0-9]|3[01]))*|\\*)\\s((\\*\\/)?([1-9]|1[0-2])((,|-|\\/)([1-9]|1[0-2]))*|\\*|(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec))\\s((\\*\\/)?[0-6]((,|-|\\/)[0-6])*|\\*|00|(sun|mon|tue|wed|thu|fri|sat))$)';
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