Skip to content

Commit

Permalink
Use common expandDirectories in task options
Browse files Browse the repository at this point in the history
  • Loading branch information
fisker committed Jan 18, 2022
1 parent f404e1c commit 18aaaf6
Showing 1 changed file with 43 additions and 39 deletions.
82 changes: 43 additions & 39 deletions index.js
Expand Up @@ -37,6 +37,19 @@ const checkCwdOption = options => {
}
};

const normalizeOptions = (options = {}) => {
options = {
ignore: [],
expandDirectories: true,
...options,
cwd: toPath(options.cwd),
};

checkCwdOption(options);

return options;
};

const getFilter = async options => createFilterFunction(
options.gitignore && await isGitIgnored({cwd: options.cwd, ignore: options.ignore}),
);
Expand All @@ -57,16 +70,9 @@ const createFilterFunction = isIgnored => {
const unionFastGlobResults = (results, filter) => results.flat().filter(fastGlobResult => filter(fastGlobResult));
const unionFastGlobStreams = (streams, filter) => merge2(streams).pipe(new FilterStream(fastGlobResult => filter(fastGlobResult)));

export const generateGlobTasks = (patterns, taskOptions = {}) => {
export const generateGlobTasks = (patterns, taskOptions) => {
patterns = toPatternsArray(patterns);

taskOptions = {
ignore: [],
expandDirectories: true,
...taskOptions,
cwd: toPath(taskOptions.cwd),
};
checkCwdOption(taskOptions);
taskOptions = normalizeOptions(taskOptions);

const globTasks = [];
for (const [index, pattern] of patterns.entries()) {
Expand Down Expand Up @@ -111,16 +117,15 @@ const globDirectories = (task, fn) => {
return fn(task.pattern, options);
};

const expendTasks = async tasks => {
const expendTasks = async (tasks, options) => {
if (!options.expandDirectories) {
return tasks;
}

tasks = await Promise.all(
tasks.map(async task => {
const {options} = task;

// TODO: Check the common options instead of task options
if (!options.expandDirectories) {
return task;
}

const [
patterns,
ignore,
Expand All @@ -137,60 +142,59 @@ const expendTasks = async tasks => {
return tasks.flat();
};

const expandTasksSync = tasks => tasks.flatMap(task => {
const {options} = task;

// TODO: Check the common options instead of task options
if (!options.expandDirectories) {
return task;
}

const patterns = globDirectories(task, dirGlob.sync);
options.ignore = dirGlob.sync(options.ignore);
return patterns.map(pattern => ({pattern, options}));
});
const expandTasksSync = (tasks, options) =>
options.expandDirectories
? tasks.flatMap(task => {
const {options} = task;
const patterns = globDirectories(task, dirGlob.sync);
options.ignore = dirGlob.sync(options.ignore);
return patterns.map(pattern => ({pattern, options}));
})
: tasks;

export const globby = async (patterns, options = {}) => {
export const globby = async (patterns, options) => {
const globTasks = generateGlobTasks(patterns, options);

options = normalizeOptions(options);
const [
filter,
tasks,
] = await Promise.all([
getFilter(options),
expendTasks(globTasks),
expendTasks(globTasks, options),
]);
const results = await Promise.all(tasks.map(task => fastGlob(task.pattern, task.options)));

return unionFastGlobResults(results, filter);
};

export const globbySync = (patterns, options = {}) => {
export const globbySync = (patterns, options) => {
const globTasks = generateGlobTasks(patterns, options);
const tasks = expandTasksSync(globTasks);

options = normalizeOptions(options);
const tasks = expandTasksSync(globTasks, options);

const filter = getFilterSync(options);
const results = tasks.map(task => fastGlob.sync(task.pattern, task.options));

return unionFastGlobResults(results, filter);
};

export const globbyStream = (patterns, options = {}) => {
export const globbyStream = (patterns, options) => {
const globTasks = generateGlobTasks(patterns, options);
const tasks = expandTasksSync(globTasks);

options = normalizeOptions(options);
const tasks = expandTasksSync(globTasks, options);

const filter = getFilterSync(options);
const streams = tasks.map(task => fastGlob.stream(task.pattern, task.options));

return unionFastGlobStreams(streams, filter);
};

export const isDynamicPattern = (patterns, options = {}) => {
export const isDynamicPattern = (patterns, options) => {
patterns = toPatternsArray(patterns);
options = {
...options,
cwd: toPath(options.cwd),
};
checkCwdOption(options);
options = normalizeOptions(options);

return patterns.some(pattern => fastGlob.isDynamicPattern(pattern, options));
};
Expand Down

0 comments on commit 18aaaf6

Please sign in to comment.