diff --git a/packages/jest-haste-map/package.json b/packages/jest-haste-map/package.json index 98d00b50c6aa..ffc4a4a81192 100644 --- a/packages/jest-haste-map/package.json +++ b/packages/jest-haste-map/package.json @@ -12,7 +12,7 @@ "graceful-fs": "^4.1.6", "jest-docblock": "^19.0.2", "micromatch": "^2.3.11", - "sane": "~1.5.0", + "sane": "~1.6.0", "worker-farm": "^1.3.1" } } diff --git a/packages/jest-haste-map/src/index.js b/packages/jest-haste-map/src/index.js index 13dd6d7d70ee..c5d580d8e9e9 100644 --- a/packages/jest-haste-map/src/index.js +++ b/packages/jest-haste-map/src/index.js @@ -43,7 +43,7 @@ type Options = { extensions: Array, forceNodeFilesystemAPI?: boolean, hasteImplModulePath?: string, - ignorePattern: RegExp, + ignorePattern: RegExp | Function, maxWorkers: number, mocksPattern?: string, name: string, @@ -62,7 +62,7 @@ type InternalOptions = { extensions: Array, forceNodeFilesystemAPI: boolean, hasteImplModulePath?: string, - ignorePattern: RegExp, + ignorePattern: RegExp | Function, maxWorkers: number, mocksPattern: ?RegExp, name: string, @@ -533,6 +533,7 @@ class HasteMap extends EventEmitter { ? sane.WatchmanWatcher : sane.NodeWatcher; const extensions = this._options.extensions; + const ignorePattern = this._options.ignorePattern; let changeQueue = Promise.resolve(); let eventsQueue = []; // We only need to copy the entire haste map once on every "frame". @@ -544,6 +545,7 @@ class HasteMap extends EventEmitter { const watcher = new Watcher(root, { dot: false, glob: extensions.map(extension => '**/*.' + extension), + ignored: ignorePattern, }); return new Promise((resolve, reject) => { @@ -686,7 +688,13 @@ class HasteMap extends EventEmitter { * Helpers */ _ignore(filePath: Path): boolean { - return this._options.ignorePattern.test(filePath) || + const ignorePattern = this._options.ignorePattern; + const ignoreMatched = + Object.prototype.toString.call(ignorePattern) === '[object RegExp]' + ? ignorePattern.test(filePath) // $FlowFixMe + : ignorePattern(filePath); + + return ignoreMatched || (!this._options.retainAllFiles && this._isNodeModulesDir(filePath)); }