fix: resolve CI test failures
Some checks failed
CI / test (push) Failing after 5s

This commit is contained in:
2026-02-01 01:36:33 +00:00
parent 179b457d4e
commit cb2ffb03cc

136
app/src/utils/fileUtils.ts Normal file
View File

@@ -0,0 +1,136 @@
import * as fs from 'fs';
import * as path from 'path';
import { glob } from 'glob';
import ignore from 'ignore';
import yaml from 'js-yaml';
import toml from 'toml';
export function readFileContent(filePath: string): string | null {
try {
if (fs.existsSync(filePath)) {
return fs.readFileSync(filePath, 'utf-8');
}
return null;
} catch {
return null;
}
}
export function parseJSONFile<T>(filePath: string): T | null {
const content = readFileContent(filePath);
if (!content) return null;
try {
return JSON.parse(content) as T;
} catch {
return null;
}
}
export function parseYAMLFile(filePath: string): Record<string, unknown> | null {
const content = readFileContent(filePath);
if (!content) return null;
try {
return yaml.load(content) as Record<string, unknown>;
} catch {
return null;
}
}
export function parseTOMLFile(filePath: string): Record<string, unknown> | null {
const content = readFileContent(filePath);
if (!content) return null;
try {
return toml.parse(content) as Record<string, unknown>;
} catch {
return null;
}
}
export async function globFiles(
patterns: string[],
directory: string,
ignorePatterns: string[]
): Promise<string[]> {
const ig = ignore().add(ignorePatterns);
const allFiles: string[] = [];
for (const pattern of patterns) {
const files = await glob(pattern, {
cwd: directory,
absolute: true,
ignore: ['node_modules/**', 'dist/**', 'build/**', '.git/**']
});
const filtered = files.filter(f => !ig.test(path.relative(directory, f)));
allFiles.push(...filtered);
}
return [...new Set(allFiles)];
}
export function loadGitignorePatterns(directory: string): string[] {
const gitignorePath = path.join(directory, '.gitignore');
const content = readFileContent(gitignorePath);
if (!content) return [];
return content
.split('\n')
.map(line => line.trim())
.filter(line => line && !line.startsWith('#'));
}
export function getAllFiles(
directory: string,
maxDepth: number = 10
): string[] {
const files: string[] = [];
function traverse(dir: string, depth: number) {
if (depth > maxDepth) return;
const entries = fs.readdirSync(dir, { withFileTypes: true });
for (const entry of entries) {
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
if (!shouldIgnore(entry.name)) {
files.push(fullPath + '/');
traverse(fullPath, depth + 1);
}
} else if (entry.isFile()) {
files.push(fullPath);
}
}
}
traverse(directory, 0);
return files;
}
function shouldIgnore(name: string): boolean {
const ignoreDirs = ['node_modules', '.git', 'dist', 'build', '__pycache__', '.venv', 'venv'];
return ignoreDirs.includes(name);
}
export function getFileExtension(filePath: string): string {
return path.extname(filePath).toLowerCase();
}
export function getFileName(filePath: string): string {
return path.basename(filePath);
}
export function getDirectoryName(filePath: string): string {
return path.dirname(filePath);
}
export function isFileExists(filePath: string): boolean {
return fs.existsSync(filePath) && fs.statSync(filePath).isFile();
}
export function isDirectoryExists(filePath: string): boolean {
return fs.existsSync(filePath) && fs.statSync(filePath).isDirectory();
}