JezK
Edit File: filter.js.map
{"version":3,"file":"filter.js","names":["mm","require","path","WHITESPACE_RE","sortFilter","files","filters","keepFiles","Set","possibleKeepFiles","ignoreFiles","file","keep","filter","isNegation","matchesFilter","basename","relative","add","parts","dirname","split","sep","length","folder","join","has","pop","loc","filterByBasename","base","replace","regex","test","isMatch","pattern","ignoreLinesToRegex","lines","map","line","slice","removeSuffix","makeRe","trim","dot","nocase","Boolean","filterOverridenGitignores","IGNORE_FILENAMES","GITIGNORE_NAME","indexOf","reduce","acc","dir","absolute","higherPriorityIgnoreFilePaths","hasHigherPriorityFiles","find","normalize"],"sourceRoot":"../../src","sources":["util/filter.js"],"sourcesContent":["/* @flow */\n\nimport type {WalkFiles} from './fs.js';\nimport {removeSuffix} from './misc.js';\n\nconst mm = require('micromatch');\nconst path = require('path');\n\nconst WHITESPACE_RE = /^\\s+$/;\n\nexport type IgnoreFilter = {\n base: string,\n isNegation: boolean,\n regex: RegExp,\n pattern: string,\n};\n\nexport function sortFilter(\n files: WalkFiles,\n filters: Array<IgnoreFilter>,\n keepFiles: Set<string> = new Set(),\n possibleKeepFiles: Set<string> = new Set(),\n ignoreFiles: Set<string> = new Set(),\n): {\n keepFiles: Set<string>,\n ignoreFiles: Set<string>,\n} {\n for (const file of files) {\n let keep = false;\n\n // always keep a file if a ! pattern matches it\n for (const filter of filters) {\n if (filter.isNegation && matchesFilter(filter, file.basename, file.relative)) {\n keep = true;\n break;\n }\n }\n\n //\n if (keep) {\n keepFiles.add(file.relative);\n continue;\n }\n\n // otherwise don't keep it if a pattern matches it\n keep = true;\n for (const filter of filters) {\n if (!filter.isNegation && matchesFilter(filter, file.basename, file.relative)) {\n keep = false;\n break;\n }\n }\n\n if (keep) {\n possibleKeepFiles.add(file.relative);\n } else {\n ignoreFiles.add(file.relative);\n }\n }\n\n // exclude file\n for (const file of possibleKeepFiles) {\n const parts = path.dirname(file).split(path.sep);\n\n while (parts.length) {\n const folder = parts.join(path.sep);\n if (ignoreFiles.has(folder)) {\n ignoreFiles.add(file);\n break;\n }\n parts.pop();\n }\n }\n\n //\n for (const file of possibleKeepFiles) {\n if (!ignoreFiles.has(file)) {\n keepFiles.add(file);\n }\n }\n\n //\n for (const file of keepFiles) {\n const parts = path.dirname(file).split(path.sep);\n\n while (parts.length) {\n // deregister this folder from being ignored, any files inside\n // will still be marked as ignored\n ignoreFiles.delete(parts.join(path.sep));\n parts.pop();\n }\n }\n\n return {ignoreFiles, keepFiles};\n}\n\nexport function matchesFilter(filter: IgnoreFilter, basename: string, loc: string): boolean {\n let filterByBasename = true;\n if (filter.base && filter.base !== '.') {\n loc = path.relative(filter.base, loc);\n filterByBasename = false;\n }\n // the micromatch regex expects unix path separators\n loc = loc.replace(/\\\\/g, '/');\n\n return (\n filter.regex.test(loc) ||\n filter.regex.test(`/${loc}`) ||\n (filterByBasename && filter.regex.test(basename)) ||\n mm.isMatch(loc, filter.pattern)\n );\n}\n\nexport function ignoreLinesToRegex(lines: Array<string>, base: string = '.'): Array<IgnoreFilter> {\n return (\n lines\n // create regex\n .map((line): ?IgnoreFilter => {\n // remove empty lines, comments, etc\n if (line === '' || line === '!' || line[0] === '#' || WHITESPACE_RE.test(line)) {\n return null;\n }\n\n let pattern = line;\n let isNegation = false;\n\n // hide the fact that it's a negation from minimatch since we'll handle this specifically\n // ourselves\n if (pattern[0] === '!') {\n isNegation = true;\n pattern = pattern.slice(1);\n }\n\n // remove trailing slash\n pattern = removeSuffix(pattern, '/');\n\n const regex: ?RegExp = mm.makeRe(pattern.trim(), {dot: true, nocase: true});\n\n if (regex) {\n return {\n base,\n isNegation,\n pattern,\n regex,\n };\n } else {\n return null;\n }\n })\n .filter(Boolean)\n );\n}\n\nexport function filterOverridenGitignores(files: WalkFiles): WalkFiles {\n const IGNORE_FILENAMES = ['.yarnignore', '.npmignore', '.gitignore'];\n const GITIGNORE_NAME = IGNORE_FILENAMES[2];\n return files.filter(file => IGNORE_FILENAMES.indexOf(file.basename) > -1).reduce((acc: WalkFiles, file) => {\n if (file.basename !== GITIGNORE_NAME) {\n return [...acc, file];\n } else {\n //don't include .gitignore if .npmignore or .yarnignore are present\n const dir = path.dirname(file.absolute);\n const higherPriorityIgnoreFilePaths = [path.join(dir, IGNORE_FILENAMES[0]), path.join(dir, IGNORE_FILENAMES[1])];\n const hasHigherPriorityFiles = files.find(\n file => higherPriorityIgnoreFilePaths.indexOf(path.normalize(file.absolute)) > -1,\n );\n if (!hasHigherPriorityFiles) {\n return [...acc, file];\n }\n }\n return acc;\n }, []);\n}\n"],"mappings":"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"}