Update ava to 4.3.3
The [release notes](https://github.com/avajs/ava/releases/tag/v4.3.3) mention compatibility with Node 18.8.
This commit is contained in:
parent
21530f507f
commit
bea5e4b220
160 changed files with 2647 additions and 2263 deletions
108
node_modules/ava/node_modules/globby/gitignore.js
generated
vendored
108
node_modules/ava/node_modules/globby/gitignore.js
generated
vendored
|
|
@ -1,108 +0,0 @@
|
|||
import process from 'node:process';
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import fastGlob from 'fast-glob';
|
||||
import gitIgnore from 'ignore';
|
||||
import slash from 'slash';
|
||||
import toPath from './to-path.js';
|
||||
|
||||
const DEFAULT_IGNORE = [
|
||||
'**/node_modules/**',
|
||||
'**/flow-typed/**',
|
||||
'**/coverage/**',
|
||||
'**/.git',
|
||||
];
|
||||
|
||||
const mapGitIgnorePatternTo = base => ignore => {
|
||||
if (ignore.startsWith('!')) {
|
||||
return '!' + path.posix.join(base, ignore.slice(1));
|
||||
}
|
||||
|
||||
return path.posix.join(base, ignore);
|
||||
};
|
||||
|
||||
const parseGitIgnore = (content, options) => {
|
||||
const base = slash(path.relative(options.cwd, path.dirname(options.fileName)));
|
||||
|
||||
return content
|
||||
.split(/\r?\n/)
|
||||
.filter(Boolean)
|
||||
.filter(line => !line.startsWith('#'))
|
||||
.map(mapGitIgnorePatternTo(base));
|
||||
};
|
||||
|
||||
const reduceIgnore = files => {
|
||||
const ignores = gitIgnore();
|
||||
for (const file of files) {
|
||||
ignores.add(parseGitIgnore(file.content, {
|
||||
cwd: file.cwd,
|
||||
fileName: file.filePath,
|
||||
}));
|
||||
}
|
||||
|
||||
return ignores;
|
||||
};
|
||||
|
||||
const ensureAbsolutePathForCwd = (cwd, p) => {
|
||||
cwd = slash(cwd);
|
||||
if (path.isAbsolute(p)) {
|
||||
if (slash(p).startsWith(cwd)) {
|
||||
return p;
|
||||
}
|
||||
|
||||
throw new Error(`Path ${p} is not in cwd ${cwd}`);
|
||||
}
|
||||
|
||||
return path.join(cwd, p);
|
||||
};
|
||||
|
||||
const getIsIgnoredPredicate = (ignores, cwd) => p => ignores.ignores(slash(path.relative(cwd, ensureAbsolutePathForCwd(cwd, toPath(p.path || p)))));
|
||||
|
||||
const getFile = async (file, cwd) => {
|
||||
const filePath = path.join(cwd, file);
|
||||
const content = await fs.promises.readFile(filePath, 'utf8');
|
||||
|
||||
return {
|
||||
cwd,
|
||||
filePath,
|
||||
content,
|
||||
};
|
||||
};
|
||||
|
||||
const getFileSync = (file, cwd) => {
|
||||
const filePath = path.join(cwd, file);
|
||||
const content = fs.readFileSync(filePath, 'utf8');
|
||||
|
||||
return {
|
||||
cwd,
|
||||
filePath,
|
||||
content,
|
||||
};
|
||||
};
|
||||
|
||||
const normalizeOptions = ({
|
||||
ignore = [],
|
||||
cwd = slash(process.cwd()),
|
||||
} = {}) => ({ignore: [...DEFAULT_IGNORE, ...ignore], cwd: toPath(cwd)});
|
||||
|
||||
export const isGitIgnored = async options => {
|
||||
options = normalizeOptions(options);
|
||||
|
||||
const paths = await fastGlob('**/.gitignore', options);
|
||||
|
||||
const files = await Promise.all(paths.map(file => getFile(file, options.cwd)));
|
||||
const ignores = reduceIgnore(files);
|
||||
|
||||
return getIsIgnoredPredicate(ignores, options.cwd);
|
||||
};
|
||||
|
||||
export const isGitIgnoredSync = options => {
|
||||
options = normalizeOptions(options);
|
||||
|
||||
const paths = fastGlob.sync('**/.gitignore', options);
|
||||
|
||||
const files = paths.map(file => getFileSync(file, options.cwd));
|
||||
const ignores = reduceIgnore(files);
|
||||
|
||||
return getIsIgnoredPredicate(ignores, options.cwd);
|
||||
};
|
||||
92
node_modules/ava/node_modules/globby/ignore.js
generated
vendored
Normal file
92
node_modules/ava/node_modules/globby/ignore.js
generated
vendored
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
import process from 'node:process';
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import fastGlob from 'fast-glob';
|
||||
import gitIgnore from 'ignore';
|
||||
import slash from 'slash';
|
||||
import {toPath, isNegativePattern} from './utilities.js';
|
||||
|
||||
const ignoreFilesGlobOptions = {
|
||||
ignore: [
|
||||
'**/node_modules',
|
||||
'**/flow-typed',
|
||||
'**/coverage',
|
||||
'**/.git',
|
||||
],
|
||||
absolute: true,
|
||||
dot: true,
|
||||
};
|
||||
|
||||
export const GITIGNORE_FILES_PATTERN = '**/.gitignore';
|
||||
|
||||
const applyBaseToPattern = (pattern, base) => isNegativePattern(pattern)
|
||||
? '!' + path.posix.join(base, pattern.slice(1))
|
||||
: path.posix.join(base, pattern);
|
||||
|
||||
const parseIgnoreFile = (file, cwd) => {
|
||||
const base = slash(path.relative(cwd, path.dirname(file.filePath)));
|
||||
|
||||
return file.content
|
||||
.split(/\r?\n/)
|
||||
.filter(line => line && !line.startsWith('#'))
|
||||
.map(pattern => applyBaseToPattern(pattern, base));
|
||||
};
|
||||
|
||||
const toRelativePath = (fileOrDirectory, cwd) => {
|
||||
cwd = slash(cwd);
|
||||
if (path.isAbsolute(fileOrDirectory)) {
|
||||
if (slash(fileOrDirectory).startsWith(cwd)) {
|
||||
return path.relative(cwd, fileOrDirectory);
|
||||
}
|
||||
|
||||
throw new Error(`Path ${fileOrDirectory} is not in cwd ${cwd}`);
|
||||
}
|
||||
|
||||
return fileOrDirectory;
|
||||
};
|
||||
|
||||
const getIsIgnoredPredicate = (files, cwd) => {
|
||||
const patterns = files.flatMap(file => parseIgnoreFile(file, cwd));
|
||||
const ignores = gitIgnore().add(patterns);
|
||||
|
||||
return fileOrDirectory => {
|
||||
fileOrDirectory = toPath(fileOrDirectory);
|
||||
fileOrDirectory = toRelativePath(fileOrDirectory, cwd);
|
||||
return ignores.ignores(slash(fileOrDirectory));
|
||||
};
|
||||
};
|
||||
|
||||
const normalizeOptions = (options = {}) => ({
|
||||
cwd: toPath(options.cwd) || process.cwd(),
|
||||
});
|
||||
|
||||
export const isIgnoredByIgnoreFiles = async (patterns, options) => {
|
||||
const {cwd} = normalizeOptions(options);
|
||||
|
||||
const paths = await fastGlob(patterns, {cwd, ...ignoreFilesGlobOptions});
|
||||
|
||||
const files = await Promise.all(
|
||||
paths.map(async filePath => ({
|
||||
filePath,
|
||||
content: await fs.promises.readFile(filePath, 'utf8'),
|
||||
})),
|
||||
);
|
||||
|
||||
return getIsIgnoredPredicate(files, cwd);
|
||||
};
|
||||
|
||||
export const isIgnoredByIgnoreFilesSync = (patterns, options) => {
|
||||
const {cwd} = normalizeOptions(options);
|
||||
|
||||
const paths = fastGlob.sync(patterns, {cwd, ...ignoreFilesGlobOptions});
|
||||
|
||||
const files = paths.map(filePath => ({
|
||||
filePath,
|
||||
content: fs.readFileSync(filePath, 'utf8'),
|
||||
}));
|
||||
|
||||
return getIsIgnoredPredicate(files, cwd);
|
||||
};
|
||||
|
||||
export const isGitIgnored = options => isIgnoredByIgnoreFiles(GITIGNORE_FILES_PATTERN, options);
|
||||
export const isGitIgnoredSync = options => isIgnoredByIgnoreFilesSync(GITIGNORE_FILES_PATTERN, options);
|
||||
22
node_modules/ava/node_modules/globby/index.d.ts
generated
vendored
22
node_modules/ava/node_modules/globby/index.d.ts
generated
vendored
|
|
@ -4,7 +4,7 @@ import {Options as FastGlobOptions, Entry} from 'fast-glob';
|
|||
export type GlobEntry = Entry;
|
||||
|
||||
export interface GlobTask {
|
||||
readonly pattern: string;
|
||||
readonly patterns: string[];
|
||||
readonly options: Options;
|
||||
}
|
||||
|
||||
|
|
@ -47,6 +47,15 @@ export interface Options extends FastGlobOptionsWithoutCwd {
|
|||
*/
|
||||
readonly gitignore?: boolean;
|
||||
|
||||
/**
|
||||
Glob patterns to look for ignore files, which are then used to ignore globbed files.
|
||||
|
||||
This is a more generic form of the `gitignore` option, allowing you to find ignore files with a [compatible syntax](http://git-scm.com/docs/gitignore). For instance, this works with Babel's `.babelignore`, Prettier's `.prettierignore`, or ESLint's `.eslintignore` files.
|
||||
|
||||
@default undefined
|
||||
*/
|
||||
readonly ignoreFiles?: string | readonly string[];
|
||||
|
||||
/**
|
||||
The current working directory in which to search.
|
||||
|
||||
|
|
@ -57,7 +66,6 @@ export interface Options extends FastGlobOptionsWithoutCwd {
|
|||
|
||||
export interface GitignoreOptions {
|
||||
readonly cwd?: URL | string;
|
||||
readonly ignore?: readonly string[];
|
||||
}
|
||||
|
||||
export type GlobbyFilterFunction = (path: URL | string) => boolean;
|
||||
|
|
@ -141,6 +149,16 @@ Note that you should avoid running the same tasks multiple times as they contain
|
|||
export function generateGlobTasks(
|
||||
patterns: string | readonly string[],
|
||||
options?: Options
|
||||
): Promise<GlobTask[]>;
|
||||
|
||||
/**
|
||||
@see generateGlobTasks
|
||||
|
||||
@returns An object in the format `{pattern: string, options: object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.
|
||||
*/
|
||||
export function generateGlobTasksSync(
|
||||
patterns: string | readonly string[],
|
||||
options?: Options
|
||||
): GlobTask[];
|
||||
|
||||
/**
|
||||
|
|
|
|||
348
node_modules/ava/node_modules/globby/index.js
generated
vendored
348
node_modules/ava/node_modules/globby/index.js
generated
vendored
|
|
@ -1,22 +1,27 @@
|
|||
import fs from 'node:fs';
|
||||
import arrayUnion from 'array-union';
|
||||
import nodePath from 'node:path';
|
||||
import merge2 from 'merge2';
|
||||
import fastGlob from 'fast-glob';
|
||||
import dirGlob from 'dir-glob';
|
||||
import toPath from './to-path.js';
|
||||
import {isGitIgnored, isGitIgnoredSync} from './gitignore.js';
|
||||
import {FilterStream, UniqueStream} from './stream-utils.js';
|
||||
|
||||
const DEFAULT_FILTER = () => false;
|
||||
|
||||
const isNegative = pattern => pattern[0] === '!';
|
||||
import {
|
||||
GITIGNORE_FILES_PATTERN,
|
||||
isIgnoredByIgnoreFiles,
|
||||
isIgnoredByIgnoreFilesSync,
|
||||
} from './ignore.js';
|
||||
import {FilterStream, toPath, isNegativePattern} from './utilities.js';
|
||||
|
||||
const assertPatternsInput = patterns => {
|
||||
if (!patterns.every(pattern => typeof pattern === 'string')) {
|
||||
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;
|
||||
|
|
@ -34,164 +39,189 @@ const checkCwdOption = options => {
|
|||
}
|
||||
};
|
||||
|
||||
const getPathString = p => p.stats instanceof fs.Stats ? p.path : p;
|
||||
|
||||
export const generateGlobTasks = (patterns, taskOptions = {}) => {
|
||||
patterns = arrayUnion([patterns].flat());
|
||||
assertPatternsInput(patterns);
|
||||
|
||||
const globTasks = [];
|
||||
|
||||
taskOptions = {
|
||||
const normalizeOptions = (options = {}) => {
|
||||
options = {
|
||||
ignore: [],
|
||||
expandDirectories: true,
|
||||
...taskOptions,
|
||||
cwd: toPath(taskOptions.cwd),
|
||||
};
|
||||
|
||||
checkCwdOption(taskOptions);
|
||||
|
||||
for (const [index, pattern] of patterns.entries()) {
|
||||
if (isNegative(pattern)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const ignore = patterns
|
||||
.slice(index)
|
||||
.filter(pattern => isNegative(pattern))
|
||||
.map(pattern => pattern.slice(1));
|
||||
|
||||
const options = {
|
||||
...taskOptions,
|
||||
ignore: [...taskOptions.ignore, ...ignore],
|
||||
};
|
||||
|
||||
globTasks.push({pattern, options});
|
||||
}
|
||||
|
||||
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 getPattern = (task, fn) => task.options.expandDirectories ? globDirectories(task, fn) : [task.pattern];
|
||||
|
||||
const getFilterSync = options => options && options.gitignore
|
||||
? isGitIgnoredSync({cwd: options.cwd, ignore: options.ignore})
|
||||
: DEFAULT_FILTER;
|
||||
|
||||
const globToTask = task => async glob => {
|
||||
const {options} = task;
|
||||
if (options.ignore && Array.isArray(options.ignore) && options.expandDirectories) {
|
||||
options.ignore = await dirGlob(options.ignore);
|
||||
}
|
||||
|
||||
return {
|
||||
pattern: glob,
|
||||
options,
|
||||
};
|
||||
};
|
||||
|
||||
const globToTaskSync = task => glob => {
|
||||
const {options} = task;
|
||||
if (options.ignore && Array.isArray(options.ignore) && options.expandDirectories) {
|
||||
options.ignore = dirGlob.sync(options.ignore);
|
||||
}
|
||||
|
||||
return {
|
||||
pattern: glob,
|
||||
options,
|
||||
};
|
||||
};
|
||||
|
||||
export const globby = async (patterns, options) => {
|
||||
const globTasks = generateGlobTasks(patterns, options);
|
||||
|
||||
const getFilter = async () => options && options.gitignore
|
||||
? isGitIgnored({cwd: options.cwd, ignore: options.ignore})
|
||||
: DEFAULT_FILTER;
|
||||
|
||||
const getTasks = async () => {
|
||||
const tasks = await Promise.all(globTasks.map(async task => {
|
||||
const globs = await getPattern(task, dirGlob);
|
||||
return Promise.all(globs.map(globToTask(task)));
|
||||
}));
|
||||
|
||||
return arrayUnion(...tasks);
|
||||
};
|
||||
|
||||
const [filter, tasks] = await Promise.all([getFilter(), getTasks()]);
|
||||
const paths = await Promise.all(tasks.map(task => fastGlob(task.pattern, task.options)));
|
||||
|
||||
return arrayUnion(...paths).filter(path_ => !filter(getPathString(path_)));
|
||||
};
|
||||
|
||||
export const globbySync = (patterns, options) => {
|
||||
const globTasks = generateGlobTasks(patterns, options);
|
||||
|
||||
const tasks = [];
|
||||
for (const task of globTasks) {
|
||||
const newTask = getPattern(task, dirGlob.sync).map(globToTaskSync(task));
|
||||
tasks.push(...newTask);
|
||||
}
|
||||
|
||||
const filter = getFilterSync(options);
|
||||
|
||||
let matches = [];
|
||||
for (const task of tasks) {
|
||||
matches = arrayUnion(matches, fastGlob.sync(task.pattern, task.options));
|
||||
}
|
||||
|
||||
return matches.filter(path_ => !filter(path_));
|
||||
};
|
||||
|
||||
export const globbyStream = (patterns, options) => {
|
||||
const globTasks = generateGlobTasks(patterns, options);
|
||||
|
||||
const tasks = [];
|
||||
for (const task of globTasks) {
|
||||
const newTask = getPattern(task, dirGlob.sync).map(globToTaskSync(task));
|
||||
tasks.push(...newTask);
|
||||
}
|
||||
|
||||
const filter = getFilterSync(options);
|
||||
const filterStream = new FilterStream(p => !filter(p));
|
||||
const uniqueStream = new UniqueStream();
|
||||
|
||||
return merge2(tasks.map(task => fastGlob.stream(task.pattern, task.options)))
|
||||
.pipe(filterStream)
|
||||
.pipe(uniqueStream);
|
||||
};
|
||||
|
||||
export const isDynamicPattern = (patterns, options = {}) => {
|
||||
options = {
|
||||
...options,
|
||||
cwd: toPath(options.cwd),
|
||||
};
|
||||
|
||||
return [patterns].flat().some(pattern => fastGlob.isDynamicPattern(pattern, options));
|
||||
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(GITIGNORE_FILES_PATTERN);
|
||||
}
|
||||
|
||||
return patterns;
|
||||
};
|
||||
|
||||
const getFilter = async options => {
|
||||
const ignoreFilesPatterns = getIgnoreFilesPatterns(options);
|
||||
return createFilterFunction(
|
||||
ignoreFilesPatterns.length > 0 && await isIgnoredByIgnoreFiles(ignoreFilesPatterns, {cwd: options.cwd}),
|
||||
);
|
||||
};
|
||||
|
||||
const getFilterSync = options => {
|
||||
const ignoreFilesPatterns = getIgnoreFilesPatterns(options);
|
||||
return createFilterFunction(
|
||||
ignoreFilesPatterns.length > 0 && isIgnoredByIgnoreFilesSync(ignoreFilesPatterns, {cwd: options.cwd}),
|
||||
);
|
||||
};
|
||||
|
||||
const createFilterFunction = isIgnored => {
|
||||
const seen = new Set();
|
||||
|
||||
return fastGlobResult => {
|
||||
const path = fastGlobResult.path || fastGlobResult;
|
||||
const pathKey = nodePath.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) => merge2(streams).pipe(new FilterStream(fastGlobResult => filter(fastGlobResult)));
|
||||
|
||||
const convertNegativePatterns = (patterns, options) => {
|
||||
const tasks = [];
|
||||
|
||||
while (patterns.length > 0) {
|
||||
const index = patterns.findIndex(pattern => 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([
|
||||
dirGlob(patterns, patternExpandOptions),
|
||||
dirGlob(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.sync(patterns, patternExpandOptions);
|
||||
options.ignore = dirGlob.sync(options.ignore, ignoreExpandOptions);
|
||||
return {patterns, options};
|
||||
});
|
||||
};
|
||||
|
||||
export 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 => fastGlob(task.patterns, task.options)));
|
||||
|
||||
return unionFastGlobResults(results, filter);
|
||||
});
|
||||
|
||||
export const globbySync = normalizeArgumentsSync((patterns, options) => {
|
||||
const tasks = generateTasksSync(patterns, options);
|
||||
const filter = getFilterSync(options);
|
||||
const results = tasks.map(task => fastGlob.sync(task.patterns, task.options));
|
||||
|
||||
return unionFastGlobResults(results, filter);
|
||||
});
|
||||
|
||||
export const globbyStream = normalizeArgumentsSync((patterns, options) => {
|
||||
const tasks = generateTasksSync(patterns, options);
|
||||
const filter = getFilterSync(options);
|
||||
const streams = tasks.map(task => fastGlob.stream(task.patterns, task.options));
|
||||
|
||||
return unionFastGlobStreams(streams, filter);
|
||||
});
|
||||
|
||||
export const isDynamicPattern = normalizeArgumentsSync(
|
||||
(patterns, options) => patterns.some(pattern => fastGlob.isDynamicPattern(pattern, options)),
|
||||
);
|
||||
|
||||
export const generateGlobTasks = normalizeArguments(generateTasks);
|
||||
export const generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync);
|
||||
|
||||
export {
|
||||
isGitIgnored,
|
||||
isGitIgnoredSync,
|
||||
} from './gitignore.js';
|
||||
} from './ignore.js';
|
||||
|
|
|
|||
32
node_modules/ava/node_modules/globby/package.json
generated
vendored
32
node_modules/ava/node_modules/globby/package.json
generated
vendored
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "globby",
|
||||
"version": "12.2.0",
|
||||
"version": "13.1.2",
|
||||
"description": "User-friendly glob matching",
|
||||
"license": "MIT",
|
||||
"repository": "sindresorhus/globby",
|
||||
|
|
@ -16,15 +16,14 @@
|
|||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"bench": "npm update glob-stream fast-glob && matcha bench.js",
|
||||
"bench": "npm update @globby/main-branch glob-stream fast-glob && node bench.js",
|
||||
"test": "xo && ava && tsd"
|
||||
},
|
||||
"files": [
|
||||
"index.js",
|
||||
"index.d.ts",
|
||||
"gitignore.js",
|
||||
"stream-utils.js",
|
||||
"to-path.js"
|
||||
"ignore.js",
|
||||
"utilities.js"
|
||||
],
|
||||
"keywords": [
|
||||
"all",
|
||||
|
|
@ -60,28 +59,33 @@
|
|||
"git"
|
||||
],
|
||||
"dependencies": {
|
||||
"array-union": "^3.0.1",
|
||||
"dir-glob": "^3.0.1",
|
||||
"fast-glob": "^3.2.7",
|
||||
"ignore": "^5.1.9",
|
||||
"fast-glob": "^3.2.11",
|
||||
"ignore": "^5.2.0",
|
||||
"merge2": "^1.4.1",
|
||||
"slash": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^16.11.11",
|
||||
"ava": "^3.15.0",
|
||||
"@globby/main-branch": "sindresorhus/globby#main",
|
||||
"@types/node": "^17.0.10",
|
||||
"ava": "^4.0.1",
|
||||
"benchmark": "2.1.4",
|
||||
"get-stream": "^6.0.1",
|
||||
"glob-stream": "^7.0.0",
|
||||
"globby": "sindresorhus/globby#main",
|
||||
"matcha": "^0.7.0",
|
||||
"rimraf": "^3.0.2",
|
||||
"tsd": "^0.19.0",
|
||||
"typescript": "^4.5.2",
|
||||
"tsd": "^0.19.1",
|
||||
"typescript": "^4.5.5",
|
||||
"xo": "^0.47.0"
|
||||
},
|
||||
"xo": {
|
||||
"ignores": [
|
||||
"fixtures"
|
||||
]
|
||||
},
|
||||
"ava": {
|
||||
"files": [
|
||||
"!tests/utilities.js"
|
||||
],
|
||||
"workerThreads": false
|
||||
}
|
||||
}
|
||||
|
|
|
|||
23
node_modules/ava/node_modules/globby/readme.md
generated
vendored
23
node_modules/ava/node_modules/globby/readme.md
generated
vendored
|
|
@ -10,7 +10,7 @@ Based on [`fast-glob`](https://github.com/mrmlnc/fast-glob) but adds a bunch of
|
|||
- Multiple patterns
|
||||
- Negated patterns: `['foo*', '!foobar']`
|
||||
- Expands directories: `foo` → `foo/**/*`
|
||||
- Supports `.gitignore`
|
||||
- Supports `.gitignore` and similar ignore config files
|
||||
- Supports `URL` as `cwd`
|
||||
|
||||
## Install
|
||||
|
|
@ -88,6 +88,15 @@ Default: `false`
|
|||
|
||||
Respect ignore patterns in `.gitignore` files that apply to the globbed files.
|
||||
|
||||
##### ignoreFiles
|
||||
|
||||
Type: `string | string[]`\
|
||||
Default: `undefined`
|
||||
|
||||
Glob patterns to look for ignore files, which are then used to ignore globbed files.
|
||||
|
||||
This is a more generic form of the `gitignore` option, allowing you to find ignore files with a [compatible syntax](http://git-scm.com/docs/gitignore). For instance, this works with Babel's `.babelignore`, Prettier's `.prettierignore`, or ESLint's `.eslintignore` files.
|
||||
|
||||
### globbySync(patterns, options?)
|
||||
|
||||
Returns `string[]` of matching paths.
|
||||
|
|
@ -110,10 +119,16 @@ import {globbyStream} from 'globby';
|
|||
|
||||
### generateGlobTasks(patterns, options?)
|
||||
|
||||
Returns an `object[]` in the format `{pattern: string, options: Object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.
|
||||
Returns an `Promise<object[]>` in the format `{patterns: string[], options: Object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.
|
||||
|
||||
Note that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration.
|
||||
|
||||
### generateGlobTasksSync(patterns, options?)
|
||||
|
||||
Returns an `object[]` in the format `{patterns: string[], options: Object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.
|
||||
|
||||
Takes the same arguments as `generateGlobTasks`.
|
||||
|
||||
### isDynamicPattern(patterns, options?)
|
||||
|
||||
Returns a `boolean` of whether there are any special glob characters in the `patterns`.
|
||||
|
|
@ -126,7 +141,7 @@ This function is backed by [`fast-glob`](https://github.com/mrmlnc/fast-glob#isd
|
|||
|
||||
Returns a `Promise<(path: URL | string) => boolean>` indicating whether a given path is ignored via a `.gitignore` file.
|
||||
|
||||
Takes `cwd?: URL | string` and `ignore?: string[]` as options. `.gitignore` files matched by the ignore config are not used for the resulting filter function.
|
||||
Takes `cwd?: URL | string` as options.
|
||||
|
||||
```js
|
||||
import {isGitIgnored} from 'globby';
|
||||
|
|
@ -140,7 +155,7 @@ console.log(isIgnored('some/file'));
|
|||
|
||||
Returns a `(path: URL | string) => boolean` indicating whether a given path is ignored via a `.gitignore` file.
|
||||
|
||||
Takes the same options as `isGitIgnored`.
|
||||
Takes `cwd?: URL | string` as options.
|
||||
|
||||
## Globbing patterns
|
||||
|
||||
|
|
|
|||
40
node_modules/ava/node_modules/globby/stream-utils.js
generated
vendored
40
node_modules/ava/node_modules/globby/stream-utils.js
generated
vendored
|
|
@ -1,40 +0,0 @@
|
|||
import {Transform} from 'node:stream';
|
||||
|
||||
class ObjectTransform extends Transform {
|
||||
constructor() {
|
||||
super({
|
||||
objectMode: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class FilterStream extends ObjectTransform {
|
||||
constructor(filter) {
|
||||
super();
|
||||
this._filter = filter;
|
||||
}
|
||||
|
||||
_transform(data, encoding, callback) {
|
||||
if (this._filter(data)) {
|
||||
this.push(data);
|
||||
}
|
||||
|
||||
callback();
|
||||
}
|
||||
}
|
||||
|
||||
export class UniqueStream extends ObjectTransform {
|
||||
constructor() {
|
||||
super();
|
||||
this._pushed = new Set();
|
||||
}
|
||||
|
||||
_transform(data, encoding, callback) {
|
||||
if (!this._pushed.has(data)) {
|
||||
this.push(data);
|
||||
this._pushed.add(data);
|
||||
}
|
||||
|
||||
callback();
|
||||
}
|
||||
}
|
||||
15
node_modules/ava/node_modules/globby/to-path.js
generated
vendored
15
node_modules/ava/node_modules/globby/to-path.js
generated
vendored
|
|
@ -1,15 +0,0 @@
|
|||
import {fileURLToPath} from 'node:url';
|
||||
|
||||
const toPath = urlOrPath => {
|
||||
if (!urlOrPath) {
|
||||
return urlOrPath;
|
||||
}
|
||||
|
||||
if (urlOrPath instanceof URL) {
|
||||
urlOrPath = urlOrPath.href;
|
||||
}
|
||||
|
||||
return urlOrPath.startsWith('file://') ? fileURLToPath(urlOrPath) : urlOrPath;
|
||||
};
|
||||
|
||||
export default toPath;
|
||||
17
node_modules/ava/node_modules/globby/utilities.js
generated
vendored
Normal file
17
node_modules/ava/node_modules/globby/utilities.js
generated
vendored
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
import {fileURLToPath} from 'node:url';
|
||||
import {Transform} from 'node:stream';
|
||||
|
||||
export const toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;
|
||||
|
||||
export class FilterStream extends Transform {
|
||||
constructor(filter) {
|
||||
super({
|
||||
objectMode: true,
|
||||
transform(data, encoding, callback) {
|
||||
callback(undefined, filter(data) ? data : undefined);
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export const isNegativePattern = pattern => pattern[0] === '!';
|
||||
Loading…
Add table
Add a link
Reference in a new issue