import micromatch = require('micromatch'); import { IOptions } from '../../managers/options'; import { FilterFunction } from '@mrmlnc/readdir-enhanced'; import { Pattern } from '../../types/patterns'; export default class DeepFilter { private readonly options; private readonly micromatchOptions; readonly index: Map; constructor(options: IOptions, micromatchOptions: micromatch.Options); /** * Returns filter for directories. */ getFilter(positive: Pattern[], negative: Pattern[]): FilterFunction; /** * Returns true if entry must be added to result. */ private filter; /** * Return true if the entry already has in the cross reader index. */ private isDuplicateEntry; /** * Create record in the cross reader index. */ private createIndexRecord; /** * Returns true for non-files if the «onlyFiles» option is enabled. */ private onlyFileFilter; /** * Returns true for non-directories if the «onlyDirectories» option is enabled. */ private onlyDirectoryFilter; /** * Return true when `absolute` option is enabled and matched to the negative patterns. */ private isSkippedByAbsoluteNegativePatterns; /** * 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). */ private isMatchToPatterns; }