Skip to content

Commit

Permalink
feat(babel-jest): add option jestPreset
Browse files Browse the repository at this point in the history
  • Loading branch information
latin-1 committed Jul 4, 2024
1 parent 9caa7c0 commit d477044
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 17 deletions.
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

- `[babel-jest]` Add option `jestPreset` to allow opting out of `babel-preset-jest` ([#15164](https://github.com/jestjs/jest/pull/15164))
- `[jest-circus, jest-cli, jest-config]` Add `waitNextEventLoopTurnForUnhandledRejectionEvents` flag to minimise performance impact of correct detection of unhandled promise rejections introduced in [#14315](https://github.com/jestjs/jest/pull/14315) ([#14681](https://github.com/jestjs/jest/pull/14681))
- `[jest-circus]` Add a `waitBeforeRetry` option to `jest.retryTimes` ([#14738](https://github.com/jestjs/jest/pull/14738))
- `[jest-circus]` Add a `retryImmediately` option to `jest.retryTimes` ([#14696](https://github.com/jestjs/jest/pull/14696))
Expand Down
42 changes: 25 additions & 17 deletions packages/babel-jest/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import {createHash} from 'crypto';
import * as path from 'path';
import {
type TransformOptions as BabelTransformOptions,
type PartialConfig,
type TransformOptions,
transformSync as babelTransform,
transformAsync as babelTransformAsync,
} from '@babel/core';
Expand All @@ -23,6 +23,10 @@ import type {
} from '@jest/transform';
import {loadPartialConfig, loadPartialConfigAsync} from './loadBabelConfig';

interface TransformerConfig extends BabelTransformOptions {
jestPreset?: boolean;
}

const THIS_FILE = fs.readFileSync(__filename);
const jestPresetPath = require.resolve('babel-preset-jest');
const babelIstanbulPlugin = require.resolve('babel-plugin-istanbul');
Expand All @@ -44,11 +48,11 @@ function assertLoadedBabelConfig(
}

function addIstanbulInstrumentation(
babelOptions: TransformOptions,
babelOptions: BabelTransformOptions,
transformOptions: JestTransformOptions,
): TransformOptions {
): BabelTransformOptions {
if (transformOptions.instrument) {
const copiedBabelOptions: TransformOptions = {...babelOptions};
const copiedBabelOptions: BabelTransformOptions = {...babelOptions};
copiedBabelOptions.auxiliaryCommentBefore = ' istanbul ignore next ';
// Copied from jest-runtime transform.js
copiedBabelOptions.plugins = [
Expand Down Expand Up @@ -106,7 +110,7 @@ function getCacheKeyFromConfig(
function loadBabelConfig(
cwd: string,
filename: string,
transformOptions: TransformOptions,
transformOptions: BabelTransformOptions,
): PartialConfig {
const babelConfig = loadPartialConfig(transformOptions);

Expand All @@ -118,7 +122,7 @@ function loadBabelConfig(
async function loadBabelConfigAsync(
cwd: string,
filename: string,
transformOptions: TransformOptions,
transformOptions: BabelTransformOptions,
): Promise<PartialConfig> {
const babelConfig = await loadPartialConfigAsync(transformOptions);

Expand All @@ -130,9 +134,9 @@ async function loadBabelConfigAsync(
function loadBabelOptions(
cwd: string,
filename: string,
transformOptions: TransformOptions,
transformOptions: BabelTransformOptions,
jestTransformOptions: JestTransformOptions,
): TransformOptions {
): BabelTransformOptions {
const {options} = loadBabelConfig(cwd, filename, transformOptions);

return addIstanbulInstrumentation(options, jestTransformOptions);
Expand All @@ -141,19 +145,20 @@ function loadBabelOptions(
async function loadBabelOptionsAsync(
cwd: string,
filename: string,
transformOptions: TransformOptions,
transformOptions: BabelTransformOptions,
jestTransformOptions: JestTransformOptions,
): Promise<TransformOptions> {
): Promise<BabelTransformOptions> {
const {options} = await loadBabelConfigAsync(cwd, filename, transformOptions);

return addIstanbulInstrumentation(options, jestTransformOptions);
}

export const createTransformer: TransformerCreator<
SyncTransformer<TransformOptions>,
TransformOptions
> = userOptions => {
const inputOptions = userOptions ?? {};
SyncTransformer<TransformerConfig>,
TransformerConfig
> = transformerConfig => {
const {jestPreset: useJestPreset = true, ...inputOptions} =
transformerConfig ?? {};

const options = {
...inputOptions,
Expand All @@ -167,14 +172,17 @@ export const createTransformer: TransformerCreator<
},
compact: false,
plugins: inputOptions.plugins ?? [],
presets: [...(inputOptions.presets ?? []), jestPresetPath],
presets: [
...(inputOptions.presets ?? []),
...(useJestPreset ? [jestPresetPath] : []),
],
sourceMaps: 'both',
} satisfies TransformOptions;
} satisfies BabelTransformOptions;

function mergeBabelTransformOptions(
filename: string,
transformOptions: JestTransformOptions,
): TransformOptions {
): BabelTransformOptions {
const {cwd, rootDir} = transformOptions.config;
// `cwd` and `root` first to allow incoming options to override it
return {
Expand Down

0 comments on commit d477044

Please sign in to comment.