42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
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, "/");
|
|
}
|