Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add esbuild resolver for jest.config.ts #12041

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

### Features

- `[jest-config]` Add esbuild resolver for `jest.config.ts` as a `ts-node` alternative ([#12041](https://github.com/facebook/jest/pull/12041))
- `[jest-core]` Add support for `testResultsProcessor` written in ESM ([#12006](https://github.com/facebook/jest/pull/12006))
- `[jest-diff, pretty-format]` Add `compareKeys` option for custom sorting of object keys ([#11992](https://github.com/facebook/jest/pull/11992))

Expand Down
3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
"devDependencies": {
"@babel/core": "^7.3.4",
"@babel/plugin-proposal-class-properties": "^7.3.4",
"@babel/plugin-transform-modules-commonjs": "^7.1.0",
"@babel/preset-env": "^7.1.0",
"@babel/preset-react": "^7.0.0",
"@babel/preset-typescript": "^7.0.0",
"@babel/register": "^7.0.0",
Expand All @@ -31,6 +29,7 @@
"codecov": "^3.0.0",
"debug": "^4.0.1",
"dedent": "^0.7.0",
"esbuild-register": "^3.1.0",
"eslint": "^7.7.0",
"eslint-config-prettier": "^8.1.0",
"eslint-plugin-eslint-comments": "^3.1.2",
Expand Down
4 changes: 4 additions & 0 deletions packages/jest-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,13 @@
"./package.json": "./package.json"
},
"peerDependencies": {
"esbuild-register": ">=3.1.0",
"ts-node": ">=9.0.0"
},
"peerDependenciesMeta": {
"esbuild-register": {
"optional": true
},
"ts-node": {
"optional": true
}
Expand Down
27 changes: 20 additions & 7 deletions packages/jest-config/src/readConfigFileAndSetRootDir.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/

import * as path from 'path';
import type {Register} from 'esbuild-register/dist/node';
import * as fs from 'graceful-fs';
import type {Service} from 'ts-node';
import type {Config} from '@jest/types';
Expand Down Expand Up @@ -83,26 +84,37 @@ export default async function readConfigFileAndSetRootDir(
const loadTSConfigFile = async (
configPath: Config.Path,
): Promise<Config.InitialOptions> => {
let registerer: Service;
let tsNode: Service | undefined;
let esbuild: Register | undefined;

// Register TypeScript compiler instance
try {
registerer = require('ts-node').register({
tsNode = require('ts-node').register({
compilerOptions: {
module: 'CommonJS',
},
});
} catch (e: any) {
if (e.code === 'MODULE_NOT_FOUND') {
throw new Error(
`Jest: 'ts-node' is required for the TypeScript configuration files. Make sure it is installed\nError: ${e.message}`,
);
try {
esbuild = require('esbuild-register').register({
target: `node${process.version.slice(1)}`,
});
} catch (error: any) {
if (error.code === 'MODULE_NOT_FOUND') {
throw new Error(
`Jest: 'ts-node' or 'esbuild' is required for the TypeScript configuration files. Make sure it is installed\nError: ${e.message}`,
);
}

throw error;
}
}

throw e;
}

registerer.enabled(true);
tsNode?.enabled(true);

let configObject = interopRequireDefault(require(configPath)).default;

Expand All @@ -111,7 +123,8 @@ const loadTSConfigFile = async (
configObject = await configObject();
}

registerer.enabled(false);
tsNode?.enabled(false);
esbuild?.unregister();

return configObject;
};
26 changes: 23 additions & 3 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1619,7 +1619,7 @@ __metadata:
languageName: node
linkType: hard

"@babel/preset-env@npm:*, @babel/preset-env@npm:^7.1.0, @babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.12.16":
"@babel/preset-env@npm:*, @babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.12.16":
version: 7.15.6
resolution: "@babel/preset-env@npm:7.15.6"
dependencies:
Expand Down Expand Up @@ -2556,8 +2556,6 @@ __metadata:
dependencies:
"@babel/core": ^7.3.4
"@babel/plugin-proposal-class-properties": ^7.3.4
"@babel/plugin-transform-modules-commonjs": ^7.1.0
"@babel/preset-env": ^7.1.0
"@babel/preset-react": ^7.0.0
"@babel/preset-typescript": ^7.0.0
"@babel/register": ^7.0.0
Expand All @@ -2582,6 +2580,7 @@ __metadata:
codecov: ^3.0.0
debug: ^4.0.1
dedent: ^0.7.0
esbuild-register: ^3.1.0
eslint: ^7.7.0
eslint-config-prettier: ^8.1.0
eslint-plugin-eslint-comments: ^3.1.2
Expand Down Expand Up @@ -9113,6 +9112,17 @@ __metadata:
languageName: node
linkType: hard

"esbuild-register@npm:^3.1.0":
version: 3.1.0
resolution: "esbuild-register@npm:3.1.0"
dependencies:
jsonc-parser: ^3.0.0
peerDependencies:
esbuild: ">=0.12 <1"
checksum: 6177ce57f7599bf2f83684611b445e002766183d804eee01f3a33f776bbd2e97e24083e090ee638a39f9711ab44cd9f3587db458ea090d7d801de7c3bd027701
languageName: node
linkType: hard

"escalade@npm:^3.0.2, escalade@npm:^3.1.1":
version: 3.1.1
resolution: "escalade@npm:3.1.1"
Expand Down Expand Up @@ -12662,8 +12672,11 @@ fsevents@^1.2.7:
ts-node: ^9.0.0
typescript: ^4.0.3
peerDependencies:
esbuild-register: ">=3.1.0"
ts-node: ">=9.0.0"
peerDependenciesMeta:
esbuild-register:
optional: true
ts-node:
optional: true
languageName: unknown
Expand Down Expand Up @@ -13602,6 +13615,13 @@ fsevents@^1.2.7:
languageName: node
linkType: hard

"jsonc-parser@npm:^3.0.0":
version: 3.0.0
resolution: "jsonc-parser@npm:3.0.0"
checksum: 36b9080a7e25f5052c7d551109c4ead564f3102d7ca0c5ee4a2f7debc18b2cd31896e0e369cfd1442d9d2d71fc1defaf094ba885bc9b43a6a3f2b3a9083fd2cb
languageName: node
linkType: hard

"jsonfile@npm:^2.1.0":
version: 2.4.0
resolution: "jsonfile@npm:2.4.0"
Expand Down