12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var pathUtils = require("../../utils/path");
- var patternUtils = require("../../utils/pattern");
- var EntryFilter = /** @class */ (function () {
- function EntryFilter(options, micromatchOptions) {
- this.options = options;
- this.micromatchOptions = micromatchOptions;
- this.index = new Map();
- }
- /**
- * Returns filter for directories.
- */
- EntryFilter.prototype.getFilter = function (positive, negative) {
- var _this = this;
- var positiveRe = patternUtils.convertPatternsToRe(positive, this.micromatchOptions);
- var negativeRe = patternUtils.convertPatternsToRe(negative, this.micromatchOptions);
- return function (entry) { return _this.filter(entry, positiveRe, negativeRe); };
- };
- /**
- * Returns true if entry must be added to result.
- */
- EntryFilter.prototype.filter = function (entry, positiveRe, negativeRe) {
- // Exclude duplicate results
- if (this.options.unique) {
- if (this.isDuplicateEntry(entry)) {
- return false;
- }
- this.createIndexRecord(entry);
- }
- // Filter files and directories by options
- if (this.onlyFileFilter(entry) || this.onlyDirectoryFilter(entry)) {
- return false;
- }
- if (this.isSkippedByAbsoluteNegativePatterns(entry, negativeRe)) {
- return false;
- }
- return this.isMatchToPatterns(entry.path, positiveRe) && !this.isMatchToPatterns(entry.path, negativeRe);
- };
- /**
- * Return true if the entry already has in the cross reader index.
- */
- EntryFilter.prototype.isDuplicateEntry = function (entry) {
- return this.index.has(entry.path);
- };
- /**
- * Create record in the cross reader index.
- */
- EntryFilter.prototype.createIndexRecord = function (entry) {
- this.index.set(entry.path, undefined);
- };
- /**
- * Returns true for non-files if the «onlyFiles» option is enabled.
- */
- EntryFilter.prototype.onlyFileFilter = function (entry) {
- return this.options.onlyFiles && !entry.isFile();
- };
- /**
- * Returns true for non-directories if the «onlyDirectories» option is enabled.
- */
- EntryFilter.prototype.onlyDirectoryFilter = function (entry) {
- return this.options.onlyDirectories && !entry.isDirectory();
- };
- /**
- * Return true when `absolute` option is enabled and matched to the negative patterns.
- */
- EntryFilter.prototype.isSkippedByAbsoluteNegativePatterns = function (entry, negativeRe) {
- if (!this.options.absolute) {
- return false;
- }
- var fullpath = pathUtils.makeAbsolute(this.options.cwd, entry.path);
- return this.isMatchToPatterns(fullpath, negativeRe);
- };
- /**
- * Return true when entry match to provided patterns.
- *
- * First, just trying to apply patterns to the path.
- * Second, trying to apply patterns to the path with final slash (need to micromatch to support «directory/**» patterns).
- */
- EntryFilter.prototype.isMatchToPatterns = function (filepath, patternsRe) {
- return patternUtils.matchAny(filepath, patternsRe) || patternUtils.matchAny(filepath + '/', patternsRe);
- };
- return EntryFilter;
- }());
- exports.default = EntryFilter;
|