UNPKG

@riddance/env

Version:

47 lines 6.33 kB
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==