const { readdir } = require('fs/promises'); const { join, resolve } = require('path'); const internals = { dates: [ 'today', 'tomorrow', 'next friday', 'next wednesday', 'last thursday', 'last tuesday', 'the next day divisible by 7', 'this afternoon', 'next fiscal quarter', ], rules: null, currentIndex: 0, kRulesDirectory: resolve(process.cwd(), 'rules'), async readRules() { const ruleFiles = await readdir(internals.kRulesDirectory); const rules = ruleFiles .filter((file) => file.match(/.js$/)) .map((file) => require(join(internals.kRulesDirectory, file))); internals.rules = rules.sort(() => Math.random() - 0.5) } } module.exports = { async generate() { if (!internals.rules) { await internals.readRules(); } const rule = internals.rules[internals.currentIndex]; const time = internals.dates[Math.floor(Math.random() * internals.dates.length)]; internals.currentIndex = (internals.currentIndex + 1) % internals.rules.length return { rule: rule(), time } } }