@codewithmehmet/paul-cli
Version:
Intelligent project file scanner and Git change tracker with interactive interface
40 lines (37 loc) • 1.45 kB
JavaScript
import fs from 'fs';
import path from 'path';
import ignore from 'ignore';
export function createIgnoreFilter(rootPath) {
const ig = ignore();
// Default rules
ig.add(['.git', 'node_modules']);
// Read .gitignore
const gitignorePath = path.join(rootPath, '.gitignore');
if (fs.existsSync(gitignorePath)) {
try {
const gitignoreContent = fs.readFileSync(gitignorePath, 'utf8');
const rules = gitignoreContent.split('\n').map(line => line.trim()).filter(line => line && !line.startsWith('#'));
ig.add(rules);
} catch (error) {
console.warn('Could not read .gitignore file');
}
}
// Read .scanignore (or .paulignore for paul-cli)
const scanignorePath = path.join(rootPath, '.scanignore');
const paulignorePath = path.join(rootPath, '.paulignore');
const ignorePath = fs.existsSync(paulignorePath) ? paulignorePath : scanignorePath;
if (fs.existsSync(ignorePath)) {
try {
const ignoreContent = fs.readFileSync(ignorePath, 'utf8');
const rules = ignoreContent.split('\n').map(line => line.trim()).filter(line => line && !line.startsWith('#'));
ig.add(rules);
} catch (error) {
console.warn(`Could not read ${path.basename(ignorePath)} file`);
}
}
return ig;
}
export function shouldIgnorePath(ignoreFilter, rootPath, fullPath) {
const relativePath = path.relative(rootPath, fullPath);
return ignoreFilter.ignores(relativePath.replace(/\\/g, '/'));
}