UNPKG

@bitblit/epsilon

Version:

Tiny adapter to simplify building API gateway Lambda APIS

73 lines 3.52 kB
"use strict"; 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