devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
111 lines (109 loc) • 3.59 kB
JavaScript
/**
* DevExtreme (cjs/__internal/scheduler/recurrence/validate_rule.js)
* Version: 25.2.3
* Build date: Fri Dec 12 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.validateRRuleObject = exports.validateRRule = void 0;
var _errors = _interopRequireDefault(require("../../../core/errors"));
var _m_iterator = require("../../core/utils/m_iterator");
var _base = require("./base");
var _days_from_by_day_rule = require("./days_from_by_day_rule");
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const loggedWarnings = [];
const ruleNames = ["freq", "interval", "byday", "byweekno", "byyearday", "bymonth", "bymonthday", "count", "until", "byhour", "byminute", "bysecond", "bysetpos", "wkst"];
const freqNames = ["DAILY", "WEEKLY", "MONTHLY", "YEARLY", "SECONDLY", "MINUTELY", "HOURLY"];
const days = {
SU: 0,
MO: 1,
TU: 2,
WE: 3,
TH: 4,
FR: 5,
SA: 6
};
const wrongUntilRule = rule => {
const {
until: until
} = rule;
return void 0 !== until && !(until instanceof Date)
};
const wrongCountRule = rule => {
const {
count: count
} = rule;
return Boolean(count && "string" === typeof count)
};
const wrongByMonthDayRule = rule => {
const byMonthDay = rule.bymonthday;
return Boolean(byMonthDay && isNaN(parseInt(byMonthDay, 10)))
};
const wrongByMonth = rule => {
const byMonth = rule.bymonth;
return Boolean(byMonth && isNaN(parseInt(byMonth, 10)))
};
const wrongIntervalRule = rule => {
const {
interval: interval
} = rule;
return Boolean(interval && "string" === typeof interval)
};
const wrongDayOfWeek = rule => {
const byDay = rule.byday;
const daysByRule = (0, _days_from_by_day_rule.daysFromByDayRule)(rule);
let brokenDaysExist = false;
if ("" === byDay) {
brokenDaysExist = true
}(0, _m_iterator.each)(daysByRule, ((_, day) => {
if (!Object.prototype.hasOwnProperty.call(days, day)) {
brokenDaysExist = true;
return false
}
return
}));
return brokenDaysExist
};
const brokenRuleNameExists = rule => {
let brokenRuleExists = false;
(0, _m_iterator.each)(rule, (ruleName => {
if (!ruleNames.includes(ruleName)) {
brokenRuleExists = true;
return false
}
return
}));
return brokenRuleExists
};
const logBrokenRule = recurrence => {
if (!loggedWarnings.includes(recurrence)) {
_errors.default.log("W0006", recurrence);
loggedWarnings.push(recurrence)
}
};
const validateRRuleObject = (rule, recurrence) => {
if (brokenRuleNameExists(rule) || !rule.freq || !freqNames.includes(rule.freq) || wrongCountRule(rule) || wrongIntervalRule(rule) || wrongDayOfWeek(rule) || wrongByMonthDayRule(rule) || wrongByMonth(rule) || wrongUntilRule(rule)) {
logBrokenRule(recurrence);
return false
}
return true
};
exports.validateRRuleObject = validateRRuleObject;
const validateRRule = ruleString => {
if (!ruleString) {
return false
}
const rule = (0, _base.parseRecurrenceRule)(ruleString);
const isValid = validateRRuleObject(rule, ruleString);
return isValid
};
exports.validateRRule = validateRRule;