Files

42 lines
1.1 KiB
JavaScript
Raw Permalink Normal View History

import { readdir, readFile, stat } from "node:fs/promises";
import path from "node:path";
export const repositoryRoot = path.resolve(import.meta.dirname, "..");
const excludedDirectories = new Set([
".git",
".gradle",
".idea",
"build",
"node_modules",
]);
export async function walkFiles(directory = repositoryRoot) {
const result = [];
const entries = await readdir(directory, { withFileTypes: true });
for (const entry of entries) {
if (entry.isDirectory() && excludedDirectories.has(entry.name)) continue;
const absolutePath = path.join(directory, entry.name);
if (entry.isDirectory()) {
result.push(...(await walkFiles(absolutePath)));
} else if (entry.isFile()) {
result.push(absolutePath);
}
}
return result;
}
export async function readTextFileIfSmall(file, maximumBytes = 2_000_000) {
const metadata = await stat(file);
if (metadata.size > maximumBytes) return null;
const buffer = await readFile(file);
if (buffer.includes(0)) return null;
return buffer.toString("utf8");
}
export function relative(file) {
return path.relative(repositoryRoot, file).replaceAll(path.sep, "/");
}