@bitblit/epsilon
Version:
Tiny adapter to simplify building API gateway Lambda APIS
73 lines • 3.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CronUtil = void 0;
const require_ratchet_1 = require("@bitblit/ratchet/common/require-ratchet");
const error_ratchet_1 = require("@bitblit/ratchet/common/error-ratchet");
const luxon_1 = require("luxon");
const string_ratchet_1 = require("@bitblit/ratchet/common/string-ratchet");
class CronUtil {
static everyNMinuteFilter(n) {
return CronUtil.everyNElementFilter(n, 60);
}
static everyNDaysOfYearFilter(n) {
return CronUtil.everyNElementFilter(n, 365);
}
static everyNElementFilter(n, m) {
require_ratchet_1.RequireRatchet.notNullOrUndefined(n);
require_ratchet_1.RequireRatchet.notNullOrUndefined(m);
const half = Math.floor(m / 2);
if (!n || n < 2 || n > half || m % n !== 0) {
error_ratchet_1.ErrorRatchet.throwFormattedErr('Invalid config - this function only makes sense for 2 < N < %d and %d evenly divisible by N', half, m);
throw new Error('Invalid config - this function only makes sense for 2 < N < 31 and 60 evenly divisible by N');
}
const rval = [];
for (let i = 0; i < 60; i += n) {
rval.push(i);
}
return rval;
}
static numberMatchesFilter(num, filter) {
return !filter || filter.length === 0 || filter.includes(num);
}
static eventMatchesEntry(event, entry, cfg, testTimeEpochMS = new Date().getTime()) {
let rval = false;
if (!!event && !!entry && !!cfg.timezone) {
if (!!event.resources && event.resources.length > 0) {
const eventSourceName = event.resources[0];
const targetTZ = string_ratchet_1.StringRatchet.trimToNull(entry.overrideTimezone) || cfg.timezone;
const nowInTZ = luxon_1.DateTime.fromMillis(testTimeEpochMS).setZone(targetTZ);
rval = !entry.eventFilter || entry.eventFilter.test(eventSourceName);
rval = rval && CronUtil.numberMatchesFilter(nowInTZ.minute, entry.minuteFilter);
rval = rval && CronUtil.numberMatchesFilter(nowInTZ.hour, entry.hourFilter);
rval = rval && CronUtil.numberMatchesFilter(nowInTZ.weekday, entry.dayOfWeekFilter);
rval = rval && CronUtil.numberMatchesFilter(nowInTZ.day, entry.dayOfMonthFilter);
rval = rval && CronUtil.numberMatchesFilter(nowInTZ.month, entry.monthOfYearFilter);
rval = rval && (!entry.contextMatchFilter || entry.contextMatchFilter.test(string_ratchet_1.StringRatchet.trimToEmpty(cfg.context)));
rval = rval && (!entry.contextNoMatchFilter || !entry.contextNoMatchFilter.test(string_ratchet_1.StringRatchet.trimToEmpty(cfg.context)));
}
}
return rval;
}
static cronEntryName(entry, idx = null) {
require_ratchet_1.RequireRatchet.notNullOrUndefined(entry);
let rval = null;
if (!!entry) {
rval = entry.name;
rval = rval || entry['backgroundTaskType'];
if (!rval && !!entry['directHandler']) {
if (!!idx) {
rval = 'Direct Entry ' + idx;
}
else {
rval = 'Direct Entry (No idx specified)';
}
}
}
else {
rval = 'ERROR: no entry passed';
}
return rval;
}
}
exports.CronUtil = CronUtil;
//# sourceMappingURL=cron-util.js.map