diff --git a/ignore.js b/ignore.js index 7de494a..73c9a52 100644 --- a/ignore.js +++ b/ignore.js @@ -58,12 +58,13 @@ const getIsIgnoredPredicate = (files, cwd) => { const normalizeOptions = (options = {}) => ({ cwd: toPath(options.cwd) || process.cwd(), + suppressErrors: Boolean(options.suppressErrors), }); export const isIgnoredByIgnoreFiles = async (patterns, options) => { - const {cwd} = normalizeOptions(options); + const {cwd, suppressErrors} = normalizeOptions(options); - const paths = await fastGlob(patterns, {cwd, ...ignoreFilesGlobOptions}); + const paths = await fastGlob(patterns, {cwd, suppressErrors, ...ignoreFilesGlobOptions}); const files = await Promise.all( paths.map(async filePath => ({ @@ -76,9 +77,9 @@ export const isIgnoredByIgnoreFiles = async (patterns, options) => { }; export const isIgnoredByIgnoreFilesSync = (patterns, options) => { - const {cwd} = normalizeOptions(options); + const {cwd, suppressErrors} = normalizeOptions(options); - const paths = fastGlob.sync(patterns, {cwd, ...ignoreFilesGlobOptions}); + const paths = fastGlob.sync(patterns, {cwd, suppressErrors, ...ignoreFilesGlobOptions}); const files = paths.map(filePath => ({ filePath, diff --git a/index.js b/index.js index ce5a656..b1ed4a1 100644 --- a/index.js +++ b/index.js @@ -69,14 +69,14 @@ const getIgnoreFilesPatterns = options => { const getFilter = async options => { const ignoreFilesPatterns = getIgnoreFilesPatterns(options); return createFilterFunction( - ignoreFilesPatterns.length > 0 && await isIgnoredByIgnoreFiles(ignoreFilesPatterns, {cwd: options.cwd}), + ignoreFilesPatterns.length > 0 && await isIgnoredByIgnoreFiles(ignoreFilesPatterns, options), ); }; const getFilterSync = options => { const ignoreFilesPatterns = getIgnoreFilesPatterns(options); return createFilterFunction( - ignoreFilesPatterns.length > 0 && isIgnoredByIgnoreFilesSync(ignoreFilesPatterns, {cwd: options.cwd}), + ignoreFilesPatterns.length > 0 && isIgnoredByIgnoreFilesSync(ignoreFilesPatterns, options), ); }; diff --git a/package.json b/package.json index f9ab944..169b3f5 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ "get-stream": "^6.0.1", "glob-stream": "^7.0.0", "rimraf": "^3.0.2", + "tempy": "^3.0.0", "tsd": "^0.19.1", "typescript": "^4.5.5", "xo": "^0.47.0" diff --git a/tests/globby.js b/tests/globby.js index 487b239..238a6e2 100644 --- a/tests/globby.js +++ b/tests/globby.js @@ -4,6 +4,7 @@ import path from 'node:path'; import util from 'node:util'; import test from 'ava'; import getStream from 'get-stream'; +import {temporaryDirectory} from 'tempy'; import { globby, globbySync, @@ -261,6 +262,19 @@ test('gitignore option and objectMode option', async t => { t.truthy(result[0].path); }); +test('gitignore option and suppressErrors option', async t => { + const temporary = temporaryDirectory(); + fs.mkdirSync(path.join(temporary, 'foo')); + fs.writeFileSync(path.join(temporary, '.gitignore'), 'baz', 'utf8'); + fs.writeFileSync(path.join(temporary, 'bar'), '', 'utf8'); + fs.writeFileSync(path.join(temporary, 'baz'), '', 'utf8'); + // Block access to "foo", which should be silently ignored. + fs.chmodSync(path.join(temporary, 'foo'), 0o000); + const result = await runGlobby(t, '**/*', {cwd: temporary, gitignore: true, suppressErrors: true}); + t.is(result.length, 1); + t.truthy(result.includes('bar')); +}); + test('respects ignoreFiles string option', async t => { const actual = await runGlobby(t, '*', {gitignore: false, ignoreFiles: '.gitignore', onlyFiles: false}); t.false(actual.includes('node_modules'));