diff --git a/CHANGELOG.md b/CHANGELOG.md index 862db3c3d283..94c54ccdfdc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### Features +* `[jest-haste-map]` Support extracting dynamic `import`s + ([#5883](https://github.com/facebook/jest/pull/5883)) * `[expect]` Improve output format for mismatchedArgs in mock/spy calls. ([#5846](https://github.com/facebook/jest/pull/5846)) * `[jest-cli]` Add support for using `--coverage` in combination with watch diff --git a/packages/jest-haste-map/src/index.js b/packages/jest-haste-map/src/index.js index 3edd60d64c7c..fc9fc0368e61 100644 --- a/packages/jest-haste-map/src/index.js +++ b/packages/jest-haste-map/src/index.js @@ -14,7 +14,6 @@ import crypto from 'crypto'; import EventEmitter from 'events'; import getMockName from './get_mock_name'; import getPlatformExtension from './lib/get_platform_extension'; -// eslint-disable-next-line import/no-duplicates import H from './constants'; import HasteFS from './haste_fs'; import HasteModuleMap from './module_map'; @@ -41,8 +40,7 @@ import type { MockData, } from 'types/HasteMap'; -// eslint-disable-next-line import/no-duplicates -import typeof HType from './constants'; +type HType = typeof H; type Options = { cacheDirectory?: string, diff --git a/packages/jest-haste-map/src/lib/__tests__/extract_requires.test.js b/packages/jest-haste-map/src/lib/__tests__/extract_requires.test.js index 69d8fd91f77b..b612edcf8cdf 100644 --- a/packages/jest-haste-map/src/lib/__tests__/extract_requires.test.js +++ b/packages/jest-haste-map/src/lib/__tests__/extract_requires.test.js @@ -15,9 +15,10 @@ it('extracts both requires and imports from code', () => { const code = ` import module1 from 'module1'; const module2 = require('module2'); + import('module3').then(module3 => {})'; `; - expect(extractRequires(code)).toEqual(['module1', 'module2']); + expect(extractRequires(code)).toEqual(['module1', 'module2', 'module3']); }); it('extracts requires in order', () => { diff --git a/packages/jest-haste-map/src/lib/extract_requires.js b/packages/jest-haste-map/src/lib/extract_requires.js index 396c76ed3553..7457f44b6236 100644 --- a/packages/jest-haste-map/src/lib/extract_requires.js +++ b/packages/jest-haste-map/src/lib/extract_requires.js @@ -11,6 +11,7 @@ const blockCommentRe = /\/\*[^]*?\*\//g; const lineCommentRe = /\/\/.*/g; const replacePatterns = { + DYNAMIC_IMPORT_RE: /(?:^|[^.]\s*)(\bimport\s*?\(\s*?)([`'"])([^`'"]+)(\2\s*?\))/g, EXPORT_RE: /(\bexport\s+(?!type )(?:[^'"]+\s+from\s+)??)(['"])([^'"]+)(\2)/g, IMPORT_RE: /(\bimport\s+(?!type )(?:[^'"]+\s+from\s+)??)(['"])([^'"]+)(\2)/g, REQUIRE_EXTENSIONS_PATTERN: /(?:^|[^.]\s*)(\b(?:require\s*?\.\s*?(?:requireActual|requireMock)|jest\s*?\.\s*?(?:requireActual|requireMock|genMockFromModule))\s*?\(\s*?)([`'"])([^`'"]+)(\2\s*?\))/g, @@ -30,7 +31,8 @@ export default function extractRequires(code: string): Array { .replace(replacePatterns.EXPORT_RE, addDependency) .replace(replacePatterns.IMPORT_RE, addDependency) .replace(replacePatterns.REQUIRE_EXTENSIONS_PATTERN, addDependency) - .replace(replacePatterns.REQUIRE_RE, addDependency); + .replace(replacePatterns.REQUIRE_RE, addDependency) + .replace(replacePatterns.DYNAMIC_IMPORT_RE, addDependency); return Array.from(dependencies); }