@riddance/service
Version:
Too much code slows you down, creates risks, increases maintainability burdens, confuses AI. So let's commit less of it.
30 lines • 4.78 kB
JavaScript
import { getHandlers } from '@riddance/host/registry';
import { triggerTimer } from '@riddance/host/timer';
import { CronTime } from 'cron';
import { createMockContext } from './setup.js';
export * from './context.js';
export async function clockStrikes(time) {
const matching = getHandlers('timer')
.map(withCron)
// spell-checker: ignore millis
.filter(h => h[cron].getNextDateFrom(new Date(time.getTime() - 1)).toMillis() === time.getTime());
await Promise.allSettled(matching.map(async (handler) => {
const { log, context, success, flush } = createMockContext({}, handler.config, handler.meta);
log.trace('Found handler', undefined, {
handler: {
schedule: handler.schedule,
},
});
await triggerTimer(log, context, handler, { triggerTime: time }, success);
await flush();
}));
}
const cron = Symbol();
function withCron(handler) {
if (cron in handler) {
return handler;
}
handler[cron] = new CronTime(handler.schedule);
return handler;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0aW1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRTlDLGNBQWMsY0FBYyxDQUFBO0FBRTVCLE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUFDLElBQVU7SUFDekMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztTQUNoQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ2QsK0JBQStCO1NBQzlCLE1BQU0sQ0FDSCxDQUFDLENBQUMsRUFBRSxDQUNBLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUMxRixDQUFBO0lBQ0wsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUNwQixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtRQUN6QixNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsaUJBQWlCLENBQ3RELEVBQUUsRUFDRixPQUFPLENBQUMsTUFBTSxFQUNkLE9BQU8sQ0FBQyxJQUFJLENBQ2YsQ0FBQTtRQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRTtZQUNsQyxPQUFPLEVBQUU7Z0JBQ0wsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO2FBQzdCO1NBQ0osQ0FBQyxDQUFBO1FBQ0YsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDekUsTUFBTSxLQUFLLEVBQUUsQ0FBQTtJQUNqQixDQUFDLENBQUMsQ0FDTCxDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFBO0FBRXJCLFNBQVMsUUFBUSxDQUNiLE9BQVU7SUFFVixJQUFJLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNsQixPQUFPLE9BQW1DLENBQUE7SUFDOUMsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDOUMsT0FBTyxPQUFtQyxDQUFBO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRIYW5kbGVycyB9IGZyb20gJ0ByaWRkYW5jZS9ob3N0L3JlZ2lzdHJ5J1xuaW1wb3J0IHsgdHJpZ2dlclRpbWVyIH0gZnJvbSAnQHJpZGRhbmNlL2hvc3QvdGltZXInXG5pbXBvcnQgeyBDcm9uVGltZSB9IGZyb20gJ2Nyb24nXG5pbXBvcnQgeyBjcmVhdGVNb2NrQ29udGV4dCB9IGZyb20gJy4vc2V0dXAuanMnXG5cbmV4cG9ydCAqIGZyb20gJy4vY29udGV4dC5qcydcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb2NrU3RyaWtlcyh0aW1lOiBEYXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWF0Y2hpbmcgPSBnZXRIYW5kbGVycygndGltZXInKVxuICAgICAgICAubWFwKHdpdGhDcm9uKVxuICAgICAgICAvLyBzcGVsbC1jaGVja2VyOiBpZ25vcmUgbWlsbGlzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICBoID0+XG4gICAgICAgICAgICAgICAgaFtjcm9uXS5nZXROZXh0RGF0ZUZyb20obmV3IERhdGUodGltZS5nZXRUaW1lKCkgLSAxKSkudG9NaWxsaXMoKSA9PT0gdGltZS5nZXRUaW1lKCksXG4gICAgICAgIClcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgIG1hdGNoaW5nLm1hcChhc3luYyBoYW5kbGVyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbG9nLCBjb250ZXh0LCBzdWNjZXNzLCBmbHVzaCB9ID0gY3JlYXRlTW9ja0NvbnRleHQoXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgaGFuZGxlci5jb25maWcsXG4gICAgICAgICAgICAgICAgaGFuZGxlci5tZXRhLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgbG9nLnRyYWNlKCdGb3VuZCBoYW5kbGVyJywgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgaGFuZGxlcjoge1xuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZTogaGFuZGxlci5zY2hlZHVsZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGF3YWl0IHRyaWdnZXJUaW1lcihsb2csIGNvbnRleHQsIGhhbmRsZXIsIHsgdHJpZ2dlclRpbWU6IHRpbWUgfSwgc3VjY2VzcylcbiAgICAgICAgICAgIGF3YWl0IGZsdXNoKClcbiAgICAgICAgfSksXG4gICAgKVxufVxuXG5jb25zdCBjcm9uID0gU3ltYm9sKClcblxuZnVuY3Rpb24gd2l0aENyb248VCBleHRlbmRzIHsgc2NoZWR1bGU6IHN0cmluZzsgW2Nyb25dPzogQ3JvblRpbWUgfT4oXG4gICAgaGFuZGxlcjogVCxcbik6IFQgJiB7IFtjcm9uXTogQ3JvblRpbWUgfSB7XG4gICAgaWYgKGNyb24gaW4gaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gaGFuZGxlciBhcyBUICYgeyBbY3Jvbl06IENyb25UaW1lIH1cbiAgICB9XG4gICAgaGFuZGxlcltjcm9uXSA9IG5ldyBDcm9uVGltZShoYW5kbGVyLnNjaGVkdWxlKVxuICAgIHJldHVybiBoYW5kbGVyIGFzIFQgJiB7IFtjcm9uXTogQ3JvblRpbWUgfVxufVxuIl19