1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
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
}
}
}
|