docs
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10
Build a file filtering system that matches files against include patterns while excluding specific patterns using ignore rules.
You're building a build tool that needs to process files in a project directory. The system should match files based on inclusion patterns but also respect exclusion rules for files that should be ignored (like dependencies, build artifacts, and configuration files).
Implement a file filtering system with the following features:
node_modules and .git directories)Create a module src/file-filter.js that exports a filterFiles function with the following signature:
/**
* Filters an array of file paths based on include patterns and ignore rules
* @param {string[]} files - Array of file paths to filter
* @param {string|string[]} patterns - Glob pattern(s) to match
* @param {string|string[]} ignorePatterns - Pattern(s) to exclude from results
* @returns {string[]} - Filtered array of matching files
*/
function filterFiles(files, patterns, ignorePatterns) {
// Implementation
}Create src/file-filter.test.js with the following test cases:
const files = [
'src/app.js',
'src/utils.js',
'node_modules/lodash/index.js',
'node_modules/react/index.js'
];
const result = filterFiles(files, '**/*.js', 'node_modules/**');
// Expected: ['src/app.js', 'src/utils.js']const files = [
'src/index.js',
'test/test.js',
'build/bundle.js',
'dist/output.js',
'.git/config'
];
const result = filterFiles(files, '**/*', ['build/**', 'dist/**', '.git/**']);
// Expected: ['src/index.js', 'test/test.js']const files = [
'src/app.js',
'src/app.test.js',
'src/utils.js',
'src/utils.test.js'
];
const result = filterFiles(files, 'src/**/*.js', '**/*.test.js');
// Expected: ['src/app.js', 'src/utils.js']Provides glob pattern matching and filtering capabilities for file paths.