Support yml/yaml files (#535)

Fixes #533
This commit is contained in:
Will Chen
2025-07-01 11:12:05 -07:00
committed by GitHub
parent 8254b5201b
commit 9d11f6c73f

View File

@@ -29,6 +29,9 @@ const ALLOWED_EXTENSIONS = [
".scss", ".scss",
".sass", ".sass",
".less", ".less",
// GitHub Actions
".yml",
".yaml",
// Needed for Capacitor projects // Needed for Capacitor projects
".xml", ".xml",
".plist", ".plist",
@@ -42,9 +45,24 @@ const ALLOWED_EXTENSIONS = [
// Directories to always exclude // Directories to always exclude
const EXCLUDED_DIRS = ["node_modules", ".git", "dist", "build"]; const EXCLUDED_DIRS = ["node_modules", ".git", "dist", "build"];
// Files to always exclude
const EXCLUDED_FILES = ["pnpm-lock.yaml", "package-lock.json"];
// Files to always include, regardless of extension // Files to always include, regardless of extension
const ALWAYS_INCLUDE_FILES = ["package.json"]; const ALWAYS_INCLUDE_FILES = ["package.json"];
// File patterns to omit (contents will be replaced with a placeholder)
//
// Why are we not using path.join here?
// Because we have already normalized the path to use /.
const OMITTED_FILES = [
"src/components/ui",
"eslint.config",
"tsconfig.json",
".env",
];
// Maximum file size to include (in bytes) - 100KB // Maximum file size to include (in bytes) - 100KB
const MAX_FILE_SIZE = 100 * 1024; const MAX_FILE_SIZE = 100 * 1024;
@@ -242,6 +260,11 @@ async function collectFiles(dir: string, baseDir: string): Promise<string[]> {
const subDirFiles = await collectFiles(fullPath, baseDir); const subDirFiles = await collectFiles(fullPath, baseDir);
files.push(...subDirFiles); files.push(...subDirFiles);
} else if (entry.isFile()) { } else if (entry.isFile()) {
// Skip excluded files
if (EXCLUDED_FILES.includes(entry.name)) {
return;
}
// Check file extension and filename // Check file extension and filename
const ext = path.extname(entry.name).toLowerCase(); const ext = path.extname(entry.name).toLowerCase();
const shouldAlwaysInclude = ALWAYS_INCLUDE_FILES.includes(entry.name); const shouldAlwaysInclude = ALWAYS_INCLUDE_FILES.includes(entry.name);
@@ -273,17 +296,7 @@ async function collectFiles(dir: string, baseDir: string): Promise<string[]> {
// Skip large configuration files or generated code (just include the path) // Skip large configuration files or generated code (just include the path)
function isOmittedFile(relativePath: string): boolean { function isOmittedFile(relativePath: string): boolean {
return ( return OMITTED_FILES.some((pattern) => relativePath.includes(pattern));
// Why are we not using path.join here?
// Because we have already normalized the path to use /.
relativePath.includes("src/components/ui") ||
relativePath.includes("eslint.config") ||
relativePath.includes("tsconfig.json") ||
relativePath.includes("package-lock.json") ||
// These should already be excluded based on file type, but
// just in case, we'll redact the contents here.
relativePath.includes(".env")
);
} }
const OMITTED_FILE_CONTENT = "// Contents omitted for brevity"; const OMITTED_FILE_CONTENT = "// Contents omitted for brevity";