224 lines
7.1 KiB
JavaScript
224 lines
7.1 KiB
JavaScript
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.isDynamicPattern = exports.globbySync = exports.globbyStream = exports.globby = exports.generateGlobTasksSync = exports.generateGlobTasks = void 0;Object.defineProperty(exports, "isGitIgnored", { enumerable: true, get: function () {return _ignore.isGitIgnored;} });Object.defineProperty(exports, "isGitIgnoredSync", { enumerable: true, get: function () {return _ignore.isGitIgnoredSync;} });var _nodeFs = _interopRequireDefault(require("node:fs"));
|
|
var _nodePath = _interopRequireDefault(require("node:path"));
|
|
var _merge = _interopRequireDefault(require("merge2"));
|
|
var _fastGlob = _interopRequireDefault(require("fast-glob"));
|
|
var _dirGlob = _interopRequireDefault(require("dir-glob"));
|
|
var _ignore = require("./ignore.js");
|
|
|
|
|
|
|
|
|
|
var _utilities = require("./utilities.js");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
|
|
|
|
const assertPatternsInput = (patterns) => {
|
|
if (patterns.some((pattern) => typeof pattern !== 'string')) {
|
|
throw new TypeError('Patterns must be a string or an array of strings');
|
|
}
|
|
};
|
|
|
|
const toPatternsArray = (patterns) => {
|
|
patterns = [...new Set([patterns].flat())];
|
|
assertPatternsInput(patterns);
|
|
return patterns;
|
|
};
|
|
|
|
const checkCwdOption = (options) => {
|
|
if (!options.cwd) {
|
|
return;
|
|
}
|
|
|
|
let stat;
|
|
try {
|
|
stat = _nodeFs.default.statSync(options.cwd);
|
|
} catch {
|
|
return;
|
|
}
|
|
|
|
if (!stat.isDirectory()) {
|
|
throw new Error('The `cwd` option must be a path to a directory');
|
|
}
|
|
};
|
|
|
|
const normalizeOptions = (options = {}) => {
|
|
options = {
|
|
...options,
|
|
ignore: options.ignore || [],
|
|
expandDirectories: options.expandDirectories === undefined ?
|
|
true :
|
|
options.expandDirectories,
|
|
cwd: (0, _utilities.toPath)(options.cwd)
|
|
};
|
|
|
|
checkCwdOption(options);
|
|
|
|
return options;
|
|
};
|
|
|
|
const normalizeArguments = (fn) => async (patterns, options) => fn(toPatternsArray(patterns), normalizeOptions(options));
|
|
const normalizeArgumentsSync = (fn) => (patterns, options) => fn(toPatternsArray(patterns), normalizeOptions(options));
|
|
|
|
const getIgnoreFilesPatterns = (options) => {
|
|
const { ignoreFiles, gitignore } = options;
|
|
|
|
const patterns = ignoreFiles ? toPatternsArray(ignoreFiles) : [];
|
|
if (gitignore) {
|
|
patterns.push(_ignore.GITIGNORE_FILES_PATTERN);
|
|
}
|
|
|
|
return patterns;
|
|
};
|
|
|
|
const getFilter = async (options) => {
|
|
const ignoreFilesPatterns = getIgnoreFilesPatterns(options);
|
|
return createFilterFunction(
|
|
ignoreFilesPatterns.length > 0 && (await (0, _ignore.isIgnoredByIgnoreFiles)(ignoreFilesPatterns, options))
|
|
);
|
|
};
|
|
|
|
const getFilterSync = (options) => {
|
|
const ignoreFilesPatterns = getIgnoreFilesPatterns(options);
|
|
return createFilterFunction(
|
|
ignoreFilesPatterns.length > 0 && (0, _ignore.isIgnoredByIgnoreFilesSync)(ignoreFilesPatterns, options)
|
|
);
|
|
};
|
|
|
|
const createFilterFunction = (isIgnored) => {
|
|
const seen = new Set();
|
|
|
|
return (fastGlobResult) => {
|
|
const path = fastGlobResult.path || fastGlobResult;
|
|
const pathKey = _nodePath.default.normalize(path);
|
|
const seenOrIgnored = seen.has(pathKey) || isIgnored && isIgnored(path);
|
|
seen.add(pathKey);
|
|
return !seenOrIgnored;
|
|
};
|
|
};
|
|
|
|
const unionFastGlobResults = (results, filter) => results.flat().filter((fastGlobResult) => filter(fastGlobResult));
|
|
const unionFastGlobStreams = (streams, filter) => (0, _merge.default)(streams).pipe(new _utilities.FilterStream((fastGlobResult) => filter(fastGlobResult)));
|
|
|
|
const convertNegativePatterns = (patterns, options) => {
|
|
const tasks = [];
|
|
|
|
while (patterns.length > 0) {
|
|
const index = patterns.findIndex((pattern) => (0, _utilities.isNegativePattern)(pattern));
|
|
|
|
if (index === -1) {
|
|
tasks.push({ patterns, options });
|
|
break;
|
|
}
|
|
|
|
const ignorePattern = patterns[index].slice(1);
|
|
|
|
for (const task of tasks) {
|
|
task.options.ignore.push(ignorePattern);
|
|
}
|
|
|
|
if (index !== 0) {
|
|
tasks.push({
|
|
patterns: patterns.slice(0, index),
|
|
options: {
|
|
...options,
|
|
ignore: [
|
|
...options.ignore,
|
|
ignorePattern]
|
|
|
|
}
|
|
});
|
|
}
|
|
|
|
patterns = patterns.slice(index + 1);
|
|
}
|
|
|
|
return tasks;
|
|
};
|
|
|
|
const getDirGlobOptions = (options, cwd) => ({
|
|
...(cwd ? { cwd } : {}),
|
|
...(Array.isArray(options) ? { files: options } : options)
|
|
});
|
|
|
|
const generateTasks = async (patterns, options) => {
|
|
const globTasks = convertNegativePatterns(patterns, options);
|
|
|
|
const { cwd, expandDirectories } = options;
|
|
|
|
if (!expandDirectories) {
|
|
return globTasks;
|
|
}
|
|
|
|
const patternExpandOptions = getDirGlobOptions(expandDirectories, cwd);
|
|
const ignoreExpandOptions = cwd ? { cwd } : undefined;
|
|
|
|
return Promise.all(
|
|
globTasks.map(async (task) => {
|
|
let { patterns, options } = task;
|
|
|
|
[
|
|
patterns,
|
|
options.ignore] =
|
|
await Promise.all([
|
|
(0, _dirGlob.default)(patterns, patternExpandOptions),
|
|
(0, _dirGlob.default)(options.ignore, ignoreExpandOptions)]
|
|
);
|
|
|
|
return { patterns, options };
|
|
})
|
|
);
|
|
};
|
|
|
|
const generateTasksSync = (patterns, options) => {
|
|
const globTasks = convertNegativePatterns(patterns, options);
|
|
|
|
const { cwd, expandDirectories } = options;
|
|
|
|
if (!expandDirectories) {
|
|
return globTasks;
|
|
}
|
|
|
|
const patternExpandOptions = getDirGlobOptions(expandDirectories, cwd);
|
|
const ignoreExpandOptions = cwd ? { cwd } : undefined;
|
|
|
|
return globTasks.map((task) => {
|
|
let { patterns, options } = task;
|
|
patterns = _dirGlob.default.sync(patterns, patternExpandOptions);
|
|
options.ignore = _dirGlob.default.sync(options.ignore, ignoreExpandOptions);
|
|
return { patterns, options };
|
|
});
|
|
};
|
|
|
|
const globby = normalizeArguments(async (patterns, options) => {
|
|
const [
|
|
tasks,
|
|
filter] =
|
|
await Promise.all([
|
|
generateTasks(patterns, options),
|
|
getFilter(options)]
|
|
);
|
|
const results = await Promise.all(tasks.map((task) => (0, _fastGlob.default)(task.patterns, task.options)));
|
|
|
|
return unionFastGlobResults(results, filter);
|
|
});exports.globby = globby;
|
|
|
|
const globbySync = normalizeArgumentsSync((patterns, options) => {
|
|
const tasks = generateTasksSync(patterns, options);
|
|
const filter = getFilterSync(options);
|
|
const results = tasks.map((task) => _fastGlob.default.sync(task.patterns, task.options));
|
|
|
|
return unionFastGlobResults(results, filter);
|
|
});exports.globbySync = globbySync;
|
|
|
|
const globbyStream = normalizeArgumentsSync((patterns, options) => {
|
|
const tasks = generateTasksSync(patterns, options);
|
|
const filter = getFilterSync(options);
|
|
const streams = tasks.map((task) => _fastGlob.default.stream(task.patterns, task.options));
|
|
|
|
return unionFastGlobStreams(streams, filter);
|
|
});exports.globbyStream = globbyStream;
|
|
|
|
const isDynamicPattern = normalizeArgumentsSync(
|
|
(patterns, options) => patterns.some((pattern) => _fastGlob.default.isDynamicPattern(pattern, options))
|
|
);exports.isDynamicPattern = isDynamicPattern;
|
|
|
|
const generateGlobTasks = normalizeArguments(generateTasks);exports.generateGlobTasks = generateGlobTasks;
|
|
const generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync);exports.generateGlobTasksSync = generateGlobTasksSync; /* v7-5fbae7b710226867 */ |