1 const fs = require("fs").promises
2 const criteriaKeys = ["tag", "group", "artist", "character", "parody"]
4 module.exports.doujins = shortNames => fs.readdir(".", {encoding: "utf8", withFileTypes: true})
5 .then(doujins => doujins
6 .map(dirent => fs.readFile(`${dirent.name}/metadata.json`)
7 .then(data => JSON.parse(data.toString()))
8 .then(data => {data.title = dirent.name; return data})
9 .then(data => [dirent.name, data])
11 .then(promises => Promise.all(promises))
12 .then(doujins => doujins
13 .filter(([title, data]) => title && data))
14 //.filter(([title, data]) => (title == data.title) == !shortNames))
15 .then(doujins => Object.fromEntries(doujins))
17 module.exports.criteria = _ => {
18 const criteria = Object.fromEntries(criteriaKeys.map(key => [key, {["*"]: []}]))
20 return module.exports.doujins()
21 .then(doujins => Object.values(doujins))
22 .then(doujins => doujins
24 criteriaKeys.forEach(crit => {
25 criteria[crit]["*"].push(doujin.title)
27 doujin[crit] && doujin[crit].forEach(val => {
28 criteria[crit][val] = criteria[crit][val] || []
29 criteria[crit][val].push(doujin.title)