diff --git a/index.js b/index.js index 0961820..f4f2369 100644 --- a/index.js +++ b/index.js @@ -94,44 +94,33 @@ const generateGlobTasksInternal = (patterns, taskOptions) => { return globTasks; }; -const globDirectories = (task, fn) => { - let options = {}; - if (task.options.cwd) { - options.cwd = task.options.cwd; - } - - if (Array.isArray(task.options.expandDirectories)) { - options = { - ...options, - files: task.options.expandDirectories, - }; - } else if (typeof task.options.expandDirectories === 'object') { - options = { - ...options, - ...task.options.expandDirectories, - }; - } - - return fn(task.pattern, options); -}; +const getDirGlobOptions = (options, cwd) => ({ + ...(cwd ? {cwd} : {}), + ...(Array.isArray(options) ? {files: options} : options), +}); const generateTasks = async (patterns, options) => { const globTasks = generateGlobTasksInternal(patterns, options); - if (!options.expandDirectories) { + const {cwd, expandDirectories} = options; + + if (!expandDirectories) { return globTasks; } + const patternExpandOptions = getDirGlobOptions(expandDirectories, cwd); + const ignoreExpandOptions = cwd ? {cwd} : undefined; + const tasks = await Promise.all( globTasks.map(async task => { - const {options} = task; + const {pattern, options} = task; const [ patterns, ignore, ] = await Promise.all([ - globDirectories(task, dirGlob), - dirGlob(options.ignore), + dirGlob(pattern, patternExpandOptions), + dirGlob(options.ignore, ignoreExpandOptions), ]); options.ignore = ignore; @@ -145,14 +134,19 @@ const generateTasks = async (patterns, options) => { const generateTasksSync = (patterns, options) => { const globTasks = generateGlobTasksInternal(patterns, options); - if (!options.expandDirectories) { + const {cwd, expandDirectories} = options; + + if (!expandDirectories) { return globTasks; } + const patternExpandOptions = getDirGlobOptions(expandDirectories, cwd); + const ignoreExpandOptions = cwd ? {cwd} : undefined; + return globTasks.flatMap(task => { - const {options} = task; - const patterns = globDirectories(task, dirGlob.sync); - options.ignore = dirGlob.sync(options.ignore); + const {pattern, options} = task; + const patterns = dirGlob.sync(pattern, patternExpandOptions); + options.ignore = dirGlob.sync(options.ignore, ignoreExpandOptions); return patterns.map(pattern => ({pattern, options})); }); };