@riddance/env
Version:
47 lines • 6.33 kB
JavaScript
import { readdir, readFile } from 'node:fs/promises';
import { basename, dirname, join } from 'node:path';
export async function vote(path, file, extract) {
const parent = dirname(path);
const dir = basename(path);
const entities = await readdir(parent, { withFileTypes: true });
const contents = await Promise.all(entities
.filter(entry => entry.isDirectory() && entry.name !== dir)
.map(async (entry) => {
try {
const content = await readFile(join(parent, entry.name, file), 'utf-8');
return extract(content, entry.name);
}
catch {
return undefined;
}
}));
const grouped = [
...contents.reduce((pv, value) => {
pv.set(value, (pv.get(value) ?? 0) + 1);
return pv;
}, new Map()),
];
if (grouped.length === 1) {
return grouped[0]?.[0];
}
if (grouped.length > 3) {
return;
}
const [first, second, third] = grouped.sort(([_, x], [__, y]) => y - x);
if (!first || !second) {
return;
}
if (third) {
if (first[1] > 2 && second[1] === 1 && third[1] === 1) {
return first[0];
}
}
if (first[1] > 2 && second[1] === 1) {
return first[0];
}
if (first[1] > 4 && second[1] === 2) {
return first[0];
}
return undefined;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2libGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzaWJsaW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUVuRCxNQUFNLENBQUMsS0FBSyxVQUFVLElBQUksQ0FDdEIsSUFBWSxFQUNaLElBQVksRUFDWixPQUE2QztJQUU3QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzFCLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQy9ELE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDOUIsUUFBUTtTQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQztTQUMxRCxHQUFHLENBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDO1lBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ3ZFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNMLE9BQU8sU0FBUyxDQUFBO1FBQ3BCLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FDVCxDQUFBO0lBQ0QsTUFBTSxPQUFPLEdBQUc7UUFDWixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDN0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQ3ZDLE9BQU8sRUFBRSxDQUFBO1FBQ2IsQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFrQyxDQUFDO0tBQ2hELENBQUE7SUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMxQixDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JCLE9BQU07SUFDVixDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDdkUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE9BQU07SUFDVixDQUFDO0lBQ0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNuQixDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbkIsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFBO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkZGlyLCByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZvdGU8VD4oXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGZpbGU6IHN0cmluZyxcbiAgICBleHRyYWN0OiAoY29udGVudDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpID0+IFQsXG4pIHtcbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKHBhdGgpXG4gICAgY29uc3QgZGlyID0gYmFzZW5hbWUocGF0aClcbiAgICBjb25zdCBlbnRpdGllcyA9IGF3YWl0IHJlYWRkaXIocGFyZW50LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSlcbiAgICBjb25zdCBjb250ZW50cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBlbnRpdGllc1xuICAgICAgICAgICAgLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5pc0RpcmVjdG9yeSgpICYmIGVudHJ5Lm5hbWUgIT09IGRpcilcbiAgICAgICAgICAgIC5tYXAoYXN5bmMgZW50cnkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShqb2luKHBhcmVudCwgZW50cnkubmFtZSwgZmlsZSksICd1dGYtOCcpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleHRyYWN0KGNvbnRlbnQsIGVudHJ5Lm5hbWUpXG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICApXG4gICAgY29uc3QgZ3JvdXBlZCA9IFtcbiAgICAgICAgLi4uY29udGVudHMucmVkdWNlKChwdiwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIHB2LnNldCh2YWx1ZSwgKHB2LmdldCh2YWx1ZSkgPz8gMCkgKyAxKVxuICAgICAgICAgICAgcmV0dXJuIHB2XG4gICAgICAgIH0sIG5ldyBNYXA8QXdhaXRlZDxUPiB8IHVuZGVmaW5lZCwgbnVtYmVyPigpKSxcbiAgICBdXG4gICAgaWYgKGdyb3VwZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBncm91cGVkWzBdPy5bMF1cbiAgICB9XG4gICAgaWYgKGdyb3VwZWQubGVuZ3RoID4gMykge1xuICAgICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgW2ZpcnN0LCBzZWNvbmQsIHRoaXJkXSA9IGdyb3VwZWQuc29ydCgoW18sIHhdLCBbX18sIHldKSA9PiB5IC0geClcbiAgICBpZiAoIWZpcnN0IHx8ICFzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh0aGlyZCkge1xuICAgICAgICBpZiAoZmlyc3RbMV0gPiAyICYmIHNlY29uZFsxXSA9PT0gMSAmJiB0aGlyZFsxXSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0WzBdXG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpcnN0WzFdID4gMiAmJiBzZWNvbmRbMV0gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0WzBdXG4gICAgfVxuICAgIGlmIChmaXJzdFsxXSA+IDQgJiYgc2Vjb25kWzFdID09PSAyKSB7XG4gICAgICAgIHJldHVybiBmaXJzdFswXVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWRcbn1cbiJdfQ==