From 3f14f8042f53780a1740567fc9cec4c2cf4773ed Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 26 Nov 2020 19:47:26 +0100 Subject: [PATCH] chore: migrate jest-haste-map to ESM --- CHANGELOG.md | 1 + e2e/__tests__/hasteMapMockChanged.test.ts | 2 +- e2e/__tests__/hasteMapSha1.test.ts | 2 +- e2e/__tests__/hasteMapSize.test.ts | 2 +- .../src/__tests__/watchFileChanges.test.ts | 2 +- packages/jest-core/src/cli/index.ts | 2 +- packages/jest-core/src/watch.ts | 7 +++++-- .../src/__tests__/index.test.js | 12 ++++++------ packages/jest-haste-map/src/index.ts | 19 +++++-------------- packages/jest-runner/src/testWorker.ts | 4 ++-- packages/jest-runtime/src/index.ts | 4 ++-- packages/jest-test-sequencer/src/index.ts | 7 +++++-- .../jest-transform/src/ScriptTransformer.ts | 2 +- 13 files changed, 32 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 781155053460..439d3d7837a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ - `[*]` [**BREAKING**] Add `exports` field to all `package.json`s ([#9921](https://github.com/facebook/jest/pull/9921)) - `[*]` Make it easier for Jest's packages to use the VM escape hatch ([#10824](https://github.com/facebook/jest/pull/10824)) - `[jest-config]` [**BREAKING**] Remove `enabledTestsMap` config, use `filter` instead ([#10787](https://github.com/facebook/jest/pull/10787)) +- `[jest-haste-map]` [**BREAKING**] Migrate to ESM - `[jest-resolve]` [**BREAKING**] Migrate to ESM ([#10688](https://github.com/facebook/jest/pull/10688)) - `[jest-repl, jest-runtime]` [**BREAKING**] Move the `jest-runtime` CLI into `jest-repl` ([#10016](https://github.com/facebook/jest/pull/10016)) - `[jest-util]` No longer checking `enumerable` when adding `process.domain` ([#10862](https://github.com/facebook/jest/pull/10862)) diff --git a/e2e/__tests__/hasteMapMockChanged.test.ts b/e2e/__tests__/hasteMapMockChanged.test.ts index 355534913066..1e1427b0aacd 100644 --- a/e2e/__tests__/hasteMapMockChanged.test.ts +++ b/e2e/__tests__/hasteMapMockChanged.test.ts @@ -6,7 +6,7 @@ */ import * as path from 'path'; -import JestHasteMap = require('jest-haste-map'); +import JestHasteMap from 'jest-haste-map'; import {cleanup, writeFiles} from '../Utils'; // Directory must be here for Watchman to be enabled. diff --git a/e2e/__tests__/hasteMapSha1.test.ts b/e2e/__tests__/hasteMapSha1.test.ts index b3005a4ac806..c611da6172ba 100644 --- a/e2e/__tests__/hasteMapSha1.test.ts +++ b/e2e/__tests__/hasteMapSha1.test.ts @@ -7,7 +7,7 @@ import {tmpdir} from 'os'; import * as path from 'path'; -import JestHasteMap = require('jest-haste-map'); +import JestHasteMap from 'jest-haste-map'; import {cleanup, writeFiles} from '../Utils'; const DIR = path.resolve(tmpdir(), 'haste_map_sha1'); diff --git a/e2e/__tests__/hasteMapSize.test.ts b/e2e/__tests__/hasteMapSize.test.ts index 228eb83f1e7d..290cb571652b 100644 --- a/e2e/__tests__/hasteMapSize.test.ts +++ b/e2e/__tests__/hasteMapSize.test.ts @@ -8,7 +8,7 @@ import {tmpdir} from 'os'; import * as path from 'path'; import {realpathSync} from 'graceful-fs'; -import HasteMap = require('jest-haste-map'); +import HasteMap from 'jest-haste-map'; import {cleanup, writeFiles} from '../Utils'; const DIR = path.resolve(realpathSync.native(tmpdir()), 'haste_map_size'); diff --git a/packages/jest-core/src/__tests__/watchFileChanges.test.ts b/packages/jest-core/src/__tests__/watchFileChanges.test.ts index a2866f6f9b46..50acc79be2cb 100644 --- a/packages/jest-core/src/__tests__/watchFileChanges.test.ts +++ b/packages/jest-core/src/__tests__/watchFileChanges.test.ts @@ -12,7 +12,7 @@ import * as fs from 'graceful-fs'; import rimraf = require('rimraf'); import type {AggregatedResult} from '@jest/test-result'; import {normalize} from 'jest-config'; -import HasteMap = require('jest-haste-map'); +import type HasteMap from 'jest-haste-map'; import Runtime from 'jest-runtime'; import {JestHook} from 'jest-watcher'; diff --git a/packages/jest-core/src/cli/index.ts b/packages/jest-core/src/cli/index.ts index ca67513a2d4d..639b277129ce 100644 --- a/packages/jest-core/src/cli/index.ts +++ b/packages/jest-core/src/cli/index.ts @@ -13,7 +13,7 @@ import type {AggregatedResult} from '@jest/test-result'; import type {Config} from '@jest/types'; import type {ChangedFilesPromise} from 'jest-changed-files'; import {readConfigs} from 'jest-config'; -import HasteMap = require('jest-haste-map'); +import type HasteMap from 'jest-haste-map'; import Runtime, {Context} from 'jest-runtime'; import {createDirectory, preRunMessage} from 'jest-util'; import TestWatcher from '../TestWatcher'; diff --git a/packages/jest-core/src/watch.ts b/packages/jest-core/src/watch.ts index b36c3a0b1332..60de233b8039 100644 --- a/packages/jest-core/src/watch.ts +++ b/packages/jest-core/src/watch.ts @@ -11,7 +11,10 @@ import chalk = require('chalk'); import exit = require('exit'); import slash = require('slash'); import type {Config} from '@jest/types'; -import HasteMap = require('jest-haste-map'); +import type { + ChangeEvent as HasteChangeEvent, + default as HasteMap, +} from 'jest-haste-map'; import {formatExecError} from 'jest-message-util'; import Resolver from 'jest-resolve'; import type {Context} from 'jest-runtime'; @@ -234,7 +237,7 @@ export default function watch( hasteMapInstances.forEach((hasteMapInstance, index) => { hasteMapInstance.on( 'change', - ({eventsQueue, hasteFS, moduleMap}: HasteMap.HasteChangeEvent) => { + ({eventsQueue, hasteFS, moduleMap}: HasteChangeEvent) => { const validPaths = eventsQueue.filter(({filePath}) => isValidPath(globalConfig, filePath), ); diff --git a/packages/jest-haste-map/src/__tests__/index.test.js b/packages/jest-haste-map/src/__tests__/index.test.js index a711d89c35f0..19702655fdc3 100644 --- a/packages/jest-haste-map/src/__tests__/index.test.js +++ b/packages/jest-haste-map/src/__tests__/index.test.js @@ -192,7 +192,7 @@ describe('HasteMap', () => { console.warn = jest.fn(); console.error = jest.fn(); - HasteMap = require('../'); + HasteMap = require('../').default; H = HasteMap.H; getCacheFilePath = HasteMap.getCacheFilePath; @@ -225,7 +225,7 @@ describe('HasteMap', () => { it('creates valid cache file paths', () => { jest.resetModules(); - HasteMap = require('../'); + HasteMap = require('../').default; expect( HasteMap.getCacheFilePath('/', '@scoped/package', 'random-value'), @@ -238,7 +238,7 @@ describe('HasteMap', () => { it('creates different cache file paths for different roots', () => { jest.resetModules(); - const HasteMap = require('../'); + const HasteMap = require('../').default; const hasteMap1 = new HasteMap({...defaultConfig, rootDir: '/root1'}); const hasteMap2 = new HasteMap({...defaultConfig, rootDir: '/root2'}); expect(hasteMap1.getCacheFilePath()).not.toBe(hasteMap2.getCacheFilePath()); @@ -246,7 +246,7 @@ describe('HasteMap', () => { it('creates different cache file paths for different dependency extractor cache keys', () => { jest.resetModules(); - const HasteMap = require('../'); + const HasteMap = require('../').default; const dependencyExtractor = require('./dependencyExtractor'); const config = { ...defaultConfig, @@ -261,7 +261,7 @@ describe('HasteMap', () => { it('creates different cache file paths for different hasteImplModulePath cache keys', () => { jest.resetModules(); - const HasteMap = require('../'); + const HasteMap = require('../').default; const hasteImpl = require('./haste_impl'); hasteImpl.setCacheKey('foo'); const hasteMap1 = new HasteMap(defaultConfig); @@ -272,7 +272,7 @@ describe('HasteMap', () => { it('creates different cache file paths for different projects', () => { jest.resetModules(); - const HasteMap = require('../'); + const HasteMap = require('../').default; const hasteMap1 = new HasteMap({...defaultConfig, name: '@scoped/package'}); const hasteMap2 = new HasteMap({...defaultConfig, name: '-scoped-package'}); expect(hasteMap1.getCacheFilePath()).not.toBe(hasteMap2.getCacheFilePath()); diff --git a/packages/jest-haste-map/src/index.ts b/packages/jest-haste-map/src/index.ts index c7d82bf36c0a..dc45b01c12c2 100644 --- a/packages/jest-haste-map/src/index.ts +++ b/packages/jest-haste-map/src/index.ts @@ -19,9 +19,7 @@ import {escapePathForRegex} from 'jest-regex-util'; import serializer from 'jest-serializer'; import Worker from 'jest-worker'; import HasteFS from './HasteFS'; -import HasteModuleMap, { - SerializableModuleMap as HasteSerializableModuleMap, -} from './ModuleMap'; +import HasteModuleMap from './ModuleMap'; import H from './constants'; import nodeCrawl = require('./crawlers/node'); import watchmanCrawl = require('./crawlers/watchman'); @@ -106,14 +104,9 @@ type Watcher = { type WorkerInterface = {worker: typeof worker; getSha1: typeof getSha1}; -// TODO: Ditch namespace when this module exports ESM -declare namespace HasteMap { - export type ModuleMap = HasteModuleMap; - export type SerializableModuleMap = HasteSerializableModuleMap; - export type FS = HasteFS; - export type HasteMapObject = InternalHasteMapObject; - export type HasteChangeEvent = ChangeEvent; -} +export type {default as ModuleMap, SerializableModuleMap} from './ModuleMap'; +export type {default as FS} from './HasteFS'; +export type {ChangeEvent, HasteMap as HasteMapObject} from './types'; const CHANGE_INTERVAL = 30; const MAX_WAIT_TIME = 240000; @@ -215,7 +208,7 @@ function invariant(condition: unknown, message?: string): asserts condition { * Worker processes can directly access the cache through `HasteMap.read()`. * */ -class HasteMap extends EventEmitter { +export default class HasteMap extends EventEmitter { private _buildPromise: Promise | null; private _cachePath: Config.Path; private _changeInterval?: NodeJS.Timeout; @@ -1121,5 +1114,3 @@ function copyMap(input: Map): Map { HasteMap.H = H; HasteMap.DuplicateError = DuplicateError; HasteMap.ModuleMap = HasteModuleMap; - -export = HasteMap; diff --git a/packages/jest-runner/src/testWorker.ts b/packages/jest-runner/src/testWorker.ts index fff6e741e32e..f79cf6fc26d0 100644 --- a/packages/jest-runner/src/testWorker.ts +++ b/packages/jest-runner/src/testWorker.ts @@ -9,7 +9,7 @@ import exit = require('exit'); import type {SerializableError, TestResult} from '@jest/test-result'; import type {Config} from '@jest/types'; -import HasteMap = require('jest-haste-map'); +import HasteMap, {SerializableModuleMap} from 'jest-haste-map'; import {separateMessageFromStack} from 'jest-message-util'; import type Resolver from 'jest-resolve'; import Runtime from 'jest-runtime'; @@ -23,7 +23,7 @@ import type { export type SerializableResolver = { config: Config.ProjectConfig; - serializableModuleMap: HasteMap.SerializableModuleMap; + serializableModuleMap: SerializableModuleMap; }; type WorkerData = { diff --git a/packages/jest-runtime/src/index.ts b/packages/jest-runtime/src/index.ts index aa2ac41977cf..c843b74dd338 100644 --- a/packages/jest-runtime/src/index.ts +++ b/packages/jest-runtime/src/index.ts @@ -41,7 +41,7 @@ import { shouldInstrument, } from '@jest/transform'; import type {Config, Global} from '@jest/types'; -import HasteMap = require('jest-haste-map'); +import HasteMap, {ModuleMap} from 'jest-haste-map'; import {formatStackTrace, separateMessageFromStack} from 'jest-message-util'; import jestMock = require('jest-mock'); import {escapePathForRegex} from 'jest-regex-util'; @@ -334,7 +334,7 @@ export default class Runtime { static createResolver( config: Config.ProjectConfig, - moduleMap: HasteMap.ModuleMap, + moduleMap: ModuleMap, ): Resolver { return new Resolver(moduleMap, { defaultPlatform: config.haste.defaultPlatform, diff --git a/packages/jest-test-sequencer/src/index.ts b/packages/jest-test-sequencer/src/index.ts index 8c191843d1fc..8904c8428399 100644 --- a/packages/jest-test-sequencer/src/index.ts +++ b/packages/jest-test-sequencer/src/index.ts @@ -7,7 +7,7 @@ import * as fs from 'graceful-fs'; import type {AggregatedResult} from '@jest/test-result'; -import {getCacheFilePath} from 'jest-haste-map'; +import HasteMap from 'jest-haste-map'; import type {Test} from 'jest-runner'; import type {Context} from 'jest-runtime'; @@ -36,7 +36,10 @@ export default class TestSequencer { _getCachePath(context: Context): string { const {config} = context; - return getCacheFilePath(config.cacheDirectory, 'perf-cache-' + config.name); + return HasteMap.getCacheFilePath( + config.cacheDirectory, + 'perf-cache-' + config.name, + ); } _getCache(test: Test): Cache { diff --git a/packages/jest-transform/src/ScriptTransformer.ts b/packages/jest-transform/src/ScriptTransformer.ts index 61540e9d5a0e..714b699725e9 100644 --- a/packages/jest-transform/src/ScriptTransformer.ts +++ b/packages/jest-transform/src/ScriptTransformer.ts @@ -17,7 +17,7 @@ import {addHook} from 'pirates'; import slash = require('slash'); import {sync as writeFileAtomic} from 'write-file-atomic'; import type {Config} from '@jest/types'; -import HasteMap = require('jest-haste-map'); +import HasteMap from 'jest-haste-map'; import { createDirectory, interopRequireDefault,