aboutsummaryrefslogtreecommitdiff
path: root/node_modules/ava/lib/ava-files.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2019-03-27 21:01:33 +0100
committerFlorian Dold <florian.dold@gmail.com>2019-03-27 21:01:33 +0100
commitcc97a4dd2a967e1c2273bd5f4c5f49a5bf2e2585 (patch)
tree92c5d88706a6ffc654d1b133618d357890e7096b /node_modules/ava/lib/ava-files.js
parent3771b4d6b67b34c130f3a9a1a15f42deefdb2eda (diff)
remove node_modules
Diffstat (limited to 'node_modules/ava/lib/ava-files.js')
-rw-r--r--node_modules/ava/lib/ava-files.js287
1 files changed, 0 insertions, 287 deletions
diff --git a/node_modules/ava/lib/ava-files.js b/node_modules/ava/lib/ava-files.js
deleted file mode 100644
index b6520da37..000000000
--- a/node_modules/ava/lib/ava-files.js
+++ /dev/null
@@ -1,287 +0,0 @@
-'use strict';
-const fs = require('fs');
-const path = require('path');
-const Promise = require('bluebird');
-const slash = require('slash');
-const globby = require('globby');
-const flatten = require('lodash.flatten');
-const autoBind = require('auto-bind');
-const defaultIgnore = require('ignore-by-default').directories();
-const multimatch = require('multimatch');
-
-function handlePaths(files, excludePatterns, globOptions) {
- // Convert Promise to Bluebird
- files = Promise.resolve(globby(files.concat(excludePatterns), globOptions));
-
- const searchedParents = new Set();
- const foundFiles = new Set();
-
- function alreadySearchingParent(dir) {
- if (searchedParents.has(dir)) {
- return true;
- }
-
- const parentDir = path.dirname(dir);
-
- if (parentDir === dir) {
- // We have reached the root path
- return false;
- }
-
- return alreadySearchingParent(parentDir);
- }
-
- return files
- .map(file => {
- file = path.resolve(globOptions.cwd, file);
-
- if (fs.statSync(file).isDirectory()) {
- if (alreadySearchingParent(file)) {
- return null;
- }
-
- searchedParents.add(file);
-
- let pattern = path.join(file, '**', '*.js');
-
- if (process.platform === 'win32') {
- // Always use `/` in patterns, harmonizing matching across platforms
- pattern = slash(pattern);
- }
-
- return handlePaths([pattern], excludePatterns, globOptions);
- }
-
- // `globby` returns slashes even on Windows. Normalize here so the file
- // paths are consistently platform-accurate as tests are run.
- return path.normalize(file);
- })
- .then(flatten)
- .filter(file => file && path.extname(file) === '.js')
- .filter(file => {
- if (path.basename(file)[0] === '_' && globOptions.includeUnderscoredFiles !== true) {
- return false;
- }
-
- return true;
- })
- .map(file => path.resolve(file))
- .filter(file => {
- const alreadyFound = foundFiles.has(file);
- foundFiles.add(file);
- return !alreadyFound;
- });
-}
-
-const defaultExcludePatterns = () => [
- '!**/node_modules/**',
- '!**/fixtures/**',
- '!**/helpers/**'
-];
-
-const defaultIncludePatterns = () => [
- 'test.js',
- 'test-*.js',
- 'test',
- '**/__tests__',
- '**/*.test.js'
-];
-
-const defaultHelperPatterns = () => [
- '**/__tests__/helpers/**/*.js',
- '**/__tests__/**/_*.js',
- '**/test/helpers/**/*.js',
- '**/test/**/_*.js'
-];
-
-const getDefaultIgnorePatterns = () => defaultIgnore.map(dir => `${dir}/**/*`);
-
-// Used on paths before they're passed to multimatch to harmonize matching
-// across platforms
-const matchable = process.platform === 'win32' ? slash : (path => path);
-
-class AvaFiles {
- constructor(options) {
- options = options || {};
-
- let files = (options.files || []).map(file => {
- // `./` should be removed from the beginning of patterns because
- // otherwise they won't match change events from Chokidar
- if (file.slice(0, 2) === './') {
- return file.slice(2);
- }
-
- return file;
- });
-
- if (files.length === 0) {
- files = defaultIncludePatterns();
- }
-
- this.excludePatterns = defaultExcludePatterns();
- this.files = files;
- this.sources = options.sources || [];
- this.cwd = options.cwd || process.cwd();
-
- autoBind(this);
- }
-
- findTestFiles() {
- return handlePaths(this.files, this.excludePatterns, {
- cwd: this.cwd,
- cache: Object.create(null),
- statCache: Object.create(null),
- realpathCache: Object.create(null),
- symlinks: Object.create(null)
- });
- }
-
- findTestHelpers() {
- return handlePaths(defaultHelperPatterns(), ['!**/node_modules/**'], {
- cwd: this.cwd,
- includeUnderscoredFiles: true,
- cache: Object.create(null),
- statCache: Object.create(null),
- realpathCache: Object.create(null),
- symlinks: Object.create(null)
- });
- }
-
- isSource(filePath) {
- let mixedPatterns = [];
- const defaultIgnorePatterns = getDefaultIgnorePatterns();
- const overrideDefaultIgnorePatterns = [];
-
- let hasPositivePattern = false;
- this.sources.forEach(pattern => {
- mixedPatterns.push(pattern);
-
- // TODO: Why not just `pattern[0] !== '!'`?
- if (!hasPositivePattern && pattern[0] !== '!') {
- hasPositivePattern = true;
- }
-
- // Extract patterns that start with an ignored directory. These need to be
- // rematched separately.
- if (defaultIgnore.indexOf(pattern.split('/')[0]) >= 0) {
- overrideDefaultIgnorePatterns.push(pattern);
- }
- });
-
- // Same defaults as used for Chokidar
- if (!hasPositivePattern) {
- mixedPatterns = ['package.json', '**/*.js'].concat(mixedPatterns);
- }
-
- filePath = matchable(filePath);
-
- // Ignore paths outside the current working directory.
- // They can't be matched to a pattern.
- if (/^\.\.\//.test(filePath)) {
- return false;
- }
-
- const isSource = multimatch(filePath, mixedPatterns).length === 1;
- if (!isSource) {
- return false;
- }
-
- const isIgnored = multimatch(filePath, defaultIgnorePatterns).length === 1;
- if (!isIgnored) {
- return true;
- }
-
- const isErroneouslyIgnored = multimatch(filePath, overrideDefaultIgnorePatterns).length === 1;
- if (isErroneouslyIgnored) {
- return true;
- }
-
- return false;
- }
-
- isTest(filePath) {
- const excludePatterns = this.excludePatterns;
- const initialPatterns = this.files.concat(excludePatterns);
-
- // Like in `api.js`, tests must be `.js` files and not start with `_`
- if (path.extname(filePath) !== '.js' || path.basename(filePath)[0] === '_') {
- return false;
- }
-
- // Check if the entire path matches a pattern
- if (multimatch(matchable(filePath), initialPatterns).length === 1) {
- return true;
- }
-
- // Check if the path contains any directory components
- const dirname = path.dirname(filePath);
- if (dirname === '.') {
- return false;
- }
-
- // Compute all possible subpaths. Note that the dirname is assumed to be
- // relative to the working directory, without a leading `./`.
- const subpaths = dirname.split(/[\\/]/).reduce((subpaths, component) => {
- const parent = subpaths[subpaths.length - 1];
-
- if (parent) {
- // Always use `/`` to makes multimatch consistent across platforms
- subpaths.push(`${parent}/${component}`);
- } else {
- subpaths.push(component);
- }
-
- return subpaths;
- }, []);
-
- // Check if any of the possible subpaths match a pattern. If so, generate a
- // new pattern with **/*.js.
- const recursivePatterns = subpaths
- .filter(subpath => multimatch(subpath, initialPatterns).length === 1)
- // Always use `/` to makes multimatch consistent across platforms
- .map(subpath => `${subpath}/**/*.js`);
-
- // See if the entire path matches any of the subpaths patterns, taking the
- // excludePatterns into account. This mimicks the behavior in api.js
- return multimatch(matchable(filePath), recursivePatterns.concat(excludePatterns)).length === 1;
- }
-
- getChokidarPatterns() {
- let paths = [];
- let ignored = [];
-
- this.sources.forEach(pattern => {
- if (pattern[0] === '!') {
- ignored.push(pattern.slice(1));
- } else {
- paths.push(pattern);
- }
- });
-
- // Allow source patterns to override the default ignore patterns. Chokidar
- // ignores paths that match the list of ignored patterns. It uses anymatch
- // under the hood, which supports negation patterns. For any source pattern
- // that starts with an ignored directory, ensure the corresponding negation
- // pattern is added to the ignored paths.
- const overrideDefaultIgnorePatterns = paths
- .filter(pattern => defaultIgnore.indexOf(pattern.split('/')[0]) >= 0)
- .map(pattern => `!${pattern}`);
-
- ignored = getDefaultIgnorePatterns().concat(ignored, overrideDefaultIgnorePatterns);
-
- if (paths.length === 0) {
- paths = ['package.json', '**/*.js', '**/*.snap'];
- }
-
- paths = paths.concat(this.files);
-
- return {
- paths,
- ignored
- };
- }
-}
-
-module.exports = AvaFiles;
-module.exports.defaultIncludePatterns = defaultIncludePatterns;
-module.exports.defaultExcludePatterns = defaultExcludePatterns;