const { readdir } = require('fs'); 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(__dirname, './rules'), async readRules() { const ruleFiles = await internals.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) }, readdir(path) { return new Promise((resolve, reject) => { readdir(path, (err, files) => { if (err) { return reject(err); } return resolve(files); }) }); } } 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 } } }