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

vm Script memory leak in Node.js 14 / 16 #40014

Closed
XadillaX opened this issue Sep 6, 2021 · 29 comments
Closed

vm Script memory leak in Node.js 14 / 16 #40014

XadillaX opened this issue Sep 6, 2021 · 29 comments
Labels
confirmed-bug Issues with confirmed bugs. v8 engine Issues and PRs related to the V8 dependency. vm Issues and PRs related to the vm subsystem.

Comments

@XadillaX
Copy link
Contributor

XadillaX commented Sep 6, 2021

Version

14 / 16

Platform

x64 macOS / Linux

Subsystem

vm

What steps will reproduce the bug?

'use strict';

let times = 0;

function run() {
  let str = 'var a = "';
  for (let i = 0; i < 100 * 1024 / 18; i++) str += Math.random().toString();
  str += '";';

  const script = new (require('vm').Script)(str);
  times++;
  if (times % 1000 === 0) console.log(times);
}

(async () => {
  while (true) {
    run();

    await new Promise(resolve => {
      setTimeout(() => {
        resolve();
      }, 10);
    });

    gc();
  }
})();

Run with:

$ node --expose-gc --max-heap-size=100 test.js

It will occur heap OOM under Node.js 14 and 16, and Node.js 12 is OK.

<--- Last few GCs --->                                                         
                                                                                                                                                               
[1430950:0x55695b1dc4b0]     6372 ms: Mark-sweep 72.0 (91.6) -> 71.6 (91.8) MB, 4.3 / 0.0 ms  (average mu = 0.728, current mu = 0.778) testing GC in old space requested
[1430950:0x55695b1dc4b0]     6388 ms: Mark-sweep 72.2 (91.8) -> 71.8 (92.1) MB, 3.1 / 0.0 ms  (average mu = 0.760, current mu = 0.804) testing GC in old space requested
[1430950:0x55695b1dc4b0]     6403 ms: Mark-sweep 72.4 (92.1) -> 72.0 (92.3) MB, 2.9 / 0.0 ms  (average mu = 0.781, current mu = 0.806) testing GC in old space requested
                                                                                                                                                               
                                                                               
<--- JS stacktrace --->                                                                                                                                        
                                                                               
FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory  

How often does it reproduce? Is there a required condition?

Every time.

What is the expected behavior?

Not OOM.

What do you see instead?

OOM.

Additional information

No response

@XadillaX XadillaX added confirmed-bug Issues with confirmed bugs. vm Issues and PRs related to the vm subsystem. labels Sep 6, 2021
@XadillaX
Copy link
Contributor Author

XadillaX commented Sep 6, 2021

And another amazing thing:

  1. run node --expose-gc --max-heap-size=100 --inspect=9229 test.js for a while, OOM.
  2. run node --expose-gc --max-heap-size=100 --inspect=9229 test.js and then run node inspect localhost:9229, everything will be OK and there's no OOM any more.

@XadillaX
Copy link
Contributor Author

XadillaX commented Sep 6, 2021

I added

if (times === 330) {
  require('v8').writeHeapSnapshot();
}

To the code, and found there're full of the str object like:

深度截图_选择区域_20210906190745

@targos targos added the v8 engine Issues and PRs related to the V8 dependency. label Sep 6, 2021
@XadillaX
Copy link
Contributor Author

XadillaX commented Sep 7, 2021

The leak seems in CompilationCache.

深度截图_选择区域_20210907140356

That means when I run command below in Node.js 14 / 16:

$ node --expose-gc --max-heap-size=100 --no-compilation-cache test2.js

The behavior is right - no longer OOM.

@targos
Copy link
Member

targos commented Sep 7, 2021

/cc @nodejs/v8

@XadillaX
Copy link
Contributor Author

XadillaX commented Sep 7, 2021

In Node.js 12, the heap size will up to about 100M either. But after it cannot allocate more space, it will trigger kLastResort GC because:

https://github.com/nodejs/node/blob/v12.22.6/deps/v8/src/heap/heap.cc#L4904-L4925

After kLastResort GC, the heap size will down to very small.

And Node.js 14 / 16 will never trigger kLastResort GC:

https://github.com/nodejs/node/blob/v14.16.0/deps/v8/src/heap/heap.cc#L5205-L5226

And heap size still increases until OOM.

@XadillaX
Copy link
Contributor Author

XadillaX commented Sep 7, 2021

https://github.com/nodejs/node/blob/master/deps/v8/src/heap/mark-compact.cc#L1458-L1469

EvacuateNewSpaceVisitor::Visit() in GC, this new code (After Node.js 14) requires allocating an old space block and returns an AllocateResult.IsRetry() object. heap_->FatalProcessOutOfMemory() here at last.

So we should think what should we do when we're under GC but we have no enough space to allocate old space block.

Old V8 (Node.js 12) just no this if logic, and allocate old space anyway. And it will do kLastResort GC later.

What's more, it seems that I can't disable always promote young mc by --no-always-promote-young-mc because of DEFINE_IMPLICATION(array_buffer_extension, always_promote_young_mc) in v8's src/flags/flag-defination.h.


Refs

@XadillaX
Copy link
Contributor Author

XadillaX commented Sep 7, 2021

I think we have 2 ways to fix this bug:

  1. Fix _always_promote_young's logic in GC - make allocate old space not throw error when heap size up to exceeded.
  2. Set array_buffer_extension in gyp back to 0, and set --always-promote-young-mc defaults to false.

btw. why UnboundScript's script cache and its code string won't GCed until kLastResort (aka. heap size up to exceeded)? Can this be fixed?

@XadillaX
Copy link
Contributor Author

XadillaX commented Sep 8, 2021

There're several problems (bugs) occur this one issue:

  1. All Script's CompilationCache in the heap and won't be GCed until Last Resort GC; (It will make heap size to the limit and --no-compilation-cache can resolve it)
  2. --always-promote-young-mc will OOM when old space cannot allocate more memory (e.g. when heap size limit exceeded); (I think it should do a Last Resort GC when we meet this situation like Node.js 12's V8)
  3. We cannot close --always-promote-young-mc because --array-buffer-extension always true at compile time.

/cc @targos
/ping @nodejs/v8

@XadillaX
Copy link
Contributor Author

XadillaX commented Sep 8, 2021

@sidverma32
Copy link

This answer helped me: StackOverflow

@lukeapage
Copy link

@XadillaX given you did such detailed analysis do you have any idea what is the path forward now v8 closed the bug you raised as won’t fix ? With some suggestions for the node team ?

@XadillaX
Copy link
Contributor Author

@XadillaX given you did such detailed analysis do you have any idea what is the path forward now v8 closed the bug you raised as won’t fix ? With some suggestions for the node team ?

Hmmm... I'm not sure since V8 closed that issue. I think we can't do anything without v8's change.

@typeofweb
Copy link

@XadillaX Is this still a problem for you in Node 14.19.0?

@phawxby
Copy link

phawxby commented Mar 24, 2022

I decided to do some digging and built on the sample script provided by @XadillaX.

'use strict';
const { getHeapStatistics } = require('v8');

let times = 0;
// The largest heap size observed since last logging output.
let heapMax = 0;
// The absolute largest heap size seen.
let absoluteHeapMax = 0;

function run() {
  let str = 'var a = "';
  for (let i = 0; i < (100 * 1024) / 18; i++) str += Math.random().toString();
  str += '";';

  const script = new (require('vm').Script)(str);
  times++;

  const heap = getHeapStatistics();
  heapMax = Math.max(heapMax, heap.total_heap_size);
  absoluteHeapMax = Math.max(absoluteHeapMax, heap.total_heap_size);

  if (times % 50 === 0) {
    console.log(
      times,
      `Heap - Since last: ${bytesToSize(heapMax)} | Absolute: ${bytesToSize(
        absoluteHeapMax
      )}`
    );

    heapMax = 0;
  }
}

// https://stackoverflow.com/a/18650828/468214
function bytesToSize(bytes) {
  var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
  if (bytes == 0) return '0 Byte';
  var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
  return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
}

(async () => {
  while (true) {
    run();

    await new Promise((resolve) => {
      setTimeout(() => {
        resolve();
      }, 10);
    });

    gc();
  }
})();
node --expose-gc --max-heap-size=100 scripts/heap.js
  • 12.16.1 - 5000+ iterations
  • 14.0.0 - 5000+ iterations
  • 14.3.0 - 5000+ iterations
  • 14.4.0 - 5000+ iterations
  • 14.5.0 - Crash @ 350 iterations - V8 upgrade to 8.3
  • 14.6.0 - Crash @ 350 iterations
  • 14.10.0 - Crash @ 350 iterations
  • 14.12.0 - Crash @ 350 iterations
  • 14.15.0 - Crash @ 350 iterations
  • 14.18.2 - Crash @ 350 iterations
  • 14.19.0 - Crash @ 350 iterations
  • 16.3.0 - Crash @ 350 iterations
  • 16.9.1 - Crash @ 350 iterations
  • 16.10.0 - Crash @ 350 iterations
  • 16.11.0 - Crash @ 350 iterations
  • 16.14.0 - Crash @ 750 iterations
  • 16.14.1 - Crash @ 750 iterations.
  • 16.14.2 - Crash @ 750 iterations
  • 17.0.0 - Crash @ 350 iterations
  • 17.8.0 - Crash @ 350 iterations
  • 18.1.0 - Crash @ 750 iterations

As has been noted, the versions that don't crash appear to correctly GC as they approach the heap limit.

Now using node v12.16.1 (npm v6.13.4)
50 Heap - Since last: 17 MB | Absolute: 17 MB
100 Heap - Since last: 30 MB | Absolute: 30 MB
150 Heap - Since last: 42 MB | Absolute: 42 MB
200 Heap - Since last: 55 MB | Absolute: 55 MB
250 Heap - Since last: 67 MB | Absolute: 67 MB
300 Heap - Since last: 80 MB | Absolute: 80 MB
350 Heap - Since last: 91 MB | Absolute: 91 MB
400 Heap - Since last: 99 MB | Absolute: 99 MB
450 Heap - Since last: 21 MB | Absolute: 99 MB
500 Heap - Since last: 34 MB | Absolute: 99 MB
550 Heap - Since last: 46 MB | Absolute: 99 MB
600 Heap - Since last: 59 MB | Absolute: 99 MB
650 Heap - Since last: 71 MB | Absolute: 99 MB

@mmiszy yes it's still an issue at 14.19.0.

Now using node v14.19.0 (npm v6.14.16)
50 Heap - Since last: 18 MB | Absolute: 18 MB
100 Heap - Since last: 31 MB | Absolute: 31 MB
150 Heap - Since last: 43 MB | Absolute: 43 MB
200 Heap - Since last: 56 MB | Absolute: 56 MB
250 Heap - Since last: 68 MB | Absolute: 68 MB
300 Heap - Since last: 81 MB | Absolute: 81 MB
350 Heap - Since last: 92 MB | Absolute: 92 MB

<--- Last few GCs --->

[91848:0x104a08000]     6074 ms: Mark-sweep 72.2 (91.5) -> 71.7 (91.8) MB, 4.3 / 0.0 ms  (average mu = 0.735, current mu = 0.757) testing GC in old space requested
[91848:0x104a08000]     6092 ms: Mark-sweep 72.4 (91.8) -> 71.9 (92.0) MB, 4.8 / 0.0 ms  (average mu = 0.732, current mu = 0.730) testing GC in old space requested
[91848:0x104a08000]     6111 ms: Mark-sweep 72.6 (92.0) -> 72.1 (92.3) MB, 6.1 / 0.0 ms  (average mu = 0.707, current mu = 0.682) testing GC in old space requested

V16.14.X is a bit weird.

Now using node v16.14.0 (npm v8.3.1)
50 Heap - Since last: 18 MB | Absolute: 18 MB
100 Heap - Since last: 31 MB | Absolute: 31 MB
150 Heap - Since last: 43 MB | Absolute: 43 MB
200 Heap - Since last: 56 MB | Absolute: 56 MB
250 Heap - Since last: 68 MB | Absolute: 68 MB
300 Heap - Since last: 81 MB | Absolute: 81 MB
350 Heap - Since last: 93 MB | Absolute: 93 MB
400 Heap - Since last: 100 MB | Absolute: 100 MB
450 Heap - Since last: 24 MB | Absolute: 100 MB
500 Heap - Since last: 37 MB | Absolute: 100 MB
550 Heap - Since last: 49 MB | Absolute: 100 MB
600 Heap - Since last: 62 MB | Absolute: 100 MB
650 Heap - Since last: 74 MB | Absolute: 100 MB
700 Heap - Since last: 87 MB | Absolute: 100 MB
750 Heap - Since last: 99 MB | Absolute: 100 MB

<--- Last few GCs --->

[6500:0x7fda3c100000]    12269 ms: Mark-sweep 78.5 (99.7) -> 77.9 (99.7) MB, 2.6 / 0.0 ms  (average mu = 0.835, current mu = 0.840) testing GC in old space requested
[6500:0x7fda3c100000]    12286 ms: Mark-sweep 78.7 (99.9) -> 78.1 (99.9) MB, 3.4 / 0.0 ms  (average mu = 0.820, current mu = 0.805) testing GC in old space requested
[6500:0x7fda3c100000]    12292 ms: Mark-sweep 78.6 (99.9) -> 78.2 (100.2) MB, 3.3 / 0.0 ms  (average mu = 0.718, current mu = 0.417) allocation failure GC in old space requested

I admit, I'm not experienced in this kind of debugging so there's a good chance I've screwed something up. But if I haven't it suggests the issue appeared in Node V14.5.0, hasn't gotten any worse/better since then apart from a bit of weirdness in In V16.14.X.

@gabrielcsapo
Copy link

gabrielcsapo commented Jun 13, 2022

18.1.0 is also having this issue, happens at 750

Screen Shot 2022-06-13 at 9 08 14 AM

@kedarv
Copy link

kedarv commented Jun 14, 2022

Seeing the same behavior in Node 14, 16, 18 as well, which is surfaced via runInNewContext (which I believe internally invokes. vm.Script)

@mbyrne00
Copy link

mbyrne00 commented Jun 28, 2022

The v8 issue has a few suggestions for node with some speculation. Even after my last comment about Jest they are still suggesting removing a guard in node and asking if it will work. Could some folk from the node team with stronger knowledge than me provide some clear feedback? The team currently believe this isn't a common issue or something that can easily be worked around. This isn't the case ... for the Jest issue we are stuck on node 16.10 with no idea of longer-term solution.

https://bugs.chromium.org/p/v8/issues/detail?id=12198#c20

@mbyrne00
Copy link

Oh yes - sorry for the bad link, you are right. I'll also update my comment

@benjamingr
Copy link
Member

@XadillaX @nodejs/vm @nodejs/v8 are there any updates on this issue or anything that changed in the last year?

@benjamingr
Copy link
Member

Also more context jestjs/jest#12205 which implies maybe @nodejs/loaders is also the right ping since adding importModuleDynamically causes the leak

@legendecas
Copy link
Member

legendecas commented Jul 28, 2022

The problem will be gone in the example of the OP if we simply remove the gc() call, as explained in https://bugs.chromium.org/p/v8/issues/detail?id=12198#c4. So I'd believe this issue can be closed.

@benjamingr
Copy link
Member

@legendecas my understanding is that the "explicit gc calling" issue is in addition and not instead of Jest's issue which they are experiencing without any gc() calls.

Namely jestjs/jest#12205 changes code with 0 gc calls to 0 gc calls and resolves the issue except if they also pass importModuleDynamically which causes the leak again.

@legendecas
Copy link
Member

@benjamingr I would take it as a different problem so I'd suggest opening a dedicated issue to track it.

@legendecas
Copy link
Member

@benjamingr I've opened #44211 to track the issues with vm.compileFunction/importModuleDynamically.

Vylpes pushed a commit to Vylpes/vylbot-app that referenced this issue Mar 27, 2023
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [jest](https://jestjs.io/) ([source](https://github.com/facebook/jest)) | dependencies | major | [`^27.4.5` -> `^29.0.0`](https://renovatebot.com/diffs/npm/jest/27.4.5/29.5.0) |
| [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/jest) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped)) | dependencies | major | [`^27.0.3` -> `^29.0.0`](https://renovatebot.com/diffs/npm/@types%2fjest/27.0.3/29.5.0) |

---

### Release Notes

<details>
<summary>facebook/jest</summary>

### [`v29.5.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2950)

[Compare Source](https://github.com/facebook/jest/compare/v29.4.3...v29.5.0)

##### Features

-   `[jest-changed-files]` Support Sapling ([#&#8203;13941](https://github.com/facebook/jest/pull/13941))
-   `[jest-circus, @&#8203;jest/cli, jest-config]` Add feature to randomize order of tests via CLI flag or through the config file([#&#8203;12922](https://github.com/facebook/jest/pull/12922))
-   `[jest-cli, jest-config, @&#8203;jest/core, jest-haste-map, @&#8203;jest/reporters, jest-runner, jest-runtime, @&#8203;jest/types]` Add `workerThreads` configuration option to allow using [worker threads](https://nodejs.org/dist/latest/docs/api/worker_threads.html) for parallelization ([#&#8203;13939](https://github.com/facebook/jest/pull/13939))
-   `[jest-cli]` Export `yargsOptions` ([#&#8203;13970](https://github.com/facebook/jest/pull/13970))
-   `[jest-config]` Add `openHandlesTimeout` option to configure possible open handles warning. ([#&#8203;13875](https://github.com/facebook/jest/pull/13875))
-   `[@jest/create-cache-key-function]` Allow passing `length` argument to `createCacheKey()` function and set its default value to `16` on Windows ([#&#8203;13827](https://github.com/facebook/jest/pull/13827))
-   `[jest-message-util]` Add support for [AggregateError](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError) ([#&#8203;13946](https://github.com/facebook/jest/pull/13946) & [#&#8203;13947](https://github.com/facebook/jest/pull/13947))
-   `[jest-message-util]` Add support for [Error causes](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause) in `test` and `it` ([#&#8203;13935](https://github.com/facebook/jest/pull/13935) & [#&#8203;13966](https://github.com/facebook/jest/pull/13966))
-   `[jest-reporters]` Add `summaryThreshold` option to summary reporter to allow overriding the internal threshold that is used to print the summary of all failed tests when the number of test suites surpasses it ([#&#8203;13895](https://github.com/facebook/jest/pull/13895))
-   `[jest-runtime]` Expose `@sinonjs/fake-timers` async APIs functions `advanceTimersByTimeAsync(msToRun)` (`tickAsync(msToRun)`), `advanceTimersToNextTimerAsync(steps)` (`nextAsync`), `runAllTimersAsync` (`runAllAsync`), and `runOnlyPendingTimersAsync` (`runToLastAsync`) ([#&#8203;13981](https://github.com/facebook/jest/pull/13981))
-   `[jest-runtime, @&#8203;jest/transform]` Allow V8 coverage provider to collect coverage from files which were not loaded explicitly ([#&#8203;13974](https://github.com/facebook/jest/pull/13974))
-   `[jest-snapshot]` Add support to `cts` and `mts` TypeScript files to inline snapshots ([#&#8203;13975](https://github.com/facebook/jest/pull/13975))
-   `[jest-worker]` Add `start` method to worker farms ([#&#8203;13937](https://github.com/facebook/jest/pull/13937))
-   `[jest-worker]` Support passing a URL as path to worker ([#&#8203;13982](https://github.com/facebook/jest/pull/13982))

##### Fixes

-   `[babel-plugin-jest-hoist]` Fix unwanted hoisting of nested `jest` usages ([#&#8203;13952](https://github.com/facebook/jest/pull/13952))
-   `[jest-circus]` Send test case results for `todo` tests ([#&#8203;13915](https://github.com/facebook/jest/pull/13915))
-   `[jest-circus]` Update message printed on test timeout ([#&#8203;13830](https://github.com/facebook/jest/pull/13830))
-   `[jest-circus]` Avoid creating the word "testfalse" when `takesDoneCallback` is `false` in the message printed on test timeout AND updated timeouts test ([#&#8203;13954](https://github.com/facebook/jest/pull/13954))
-   `[jest-environment-jsdom]` Stop setting `document` to `null` on teardown ([#&#8203;13972](https://github.com/facebook/jest/pull/13972))
-   `[@jest/expect-utils]` Update `toStrictEqual()` to be able to check `jest.fn().mock.calls` ([#&#8203;13960](https://github.com/facebook/jest/pull/13960))
-   `[@jest/test-result]` Allow `TestResultsProcessor` type to return a Promise ([#&#8203;13950](https://github.com/facebook/jest/pull/13950))

##### Chore & Maintenance

-   `[jest-snapshot]` Remove dependency on `jest-haste-map` ([#&#8203;13977](https://github.com/facebook/jest/pull/13977))

### [`v29.4.3`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2943)

[Compare Source](https://github.com/facebook/jest/compare/v29.4.2...v29.4.3)

##### Features

-   `[expect]` Update `toThrow()` to be able to use error `cause`s ([#&#8203;13606](https://github.com/facebook/jest/pull/13606))
-   `[jest-core]` allow to use `workerIdleMemoryLimit` with only 1 worker or `runInBand` option ([#&#8203;13846](https://github.com/facebook/jest/pull/13846))
-   `[jest-message-util]` Add support for [error `cause`s](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause) ([#&#8203;13868](https://github.com/facebook/jest/pull/13868) & [#&#8203;13912](https://github.com/facebook/jest/pull/13912))
-   `[jest-runtime]` Revert `import assertions` for JSON modules as it's been relegated to Stage 2 ([#&#8203;13911](https://github.com/facebook/jest/pull/13911))

##### Fixes

-   `[@jest/expect-utils]` `subsetEquality` should consider also an object's inherited string keys ([#&#8203;13824](https://github.com/facebook/jest/pull/13824))
-   `[jest-mock]` Clear mock state when `jest.restoreAllMocks()` is called ([#&#8203;13867](https://github.com/facebook/jest/pull/13867))
-   `[jest-mock]` Prevent `mockImplementationOnce` and `mockReturnValueOnce` bleeding into `withImplementation` ([#&#8203;13888](https://github.com/facebook/jest/pull/13888))
-   `[jest-mock]` Do not restore mocks when `jest.resetAllMocks()` is called ([#&#8203;13866](https://github.com/facebook/jest/pull/13866))

### [`v29.4.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2942)

[Compare Source](https://github.com/facebook/jest/compare/v29.4.1...v29.4.2)

##### Features

-   `[@jest/core]` Instrument significant lifecycle events with [`performance.mark()`](https://nodejs.org/docs/latest-v16.x/api/perf_hooks.html#performancemarkname-options) ([#&#8203;13859](https://github.com/facebook/jest/pull/13859))

##### Fixes

-   `[expect, @&#8203;jest/expect]` Provide type of `actual` as a generic argument to `Matchers` to allow better-typed extensions ([#&#8203;13848](https://github.com/facebook/jest/pull/13848))
-   `[jest-circus]` Added explicit mention of test failing because `done()` is not being called in error message ([#&#8203;13847](https://github.com/facebook/jest/pull/13847))
-   `[jest-runtime]` Handle CJS re-exports of node core modules from ESM ([#&#8203;13856](https://github.com/facebook/jest/pull/13856))
-   `[jest-transform]` Downgrade `write-file-atomic` to v4 ([#&#8203;13853](https://github.com/facebook/jest/pull/13853))
-   `[jest-worker]` Ignore IPC messages not intended for Jest ([#&#8203;13543](https://github.com/facebook/jest/pull/13543))

##### Chore & Maintenance

-   `[*]` make sure to exclude `.eslintcache` from published module ([#&#8203;13832](https://github.com/facebook/jest/pull/13832))
-   `[docs]` Cleanup incorrect links in CHANGELOG.md ([#&#8203;13857](https://github.com/facebook/jest/pull/13857))

### [`v29.4.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2941)

[Compare Source](https://github.com/facebook/jest/compare/v29.4.0...v29.4.1)

##### Features

-   `[expect, jest-circus, @&#8203;jest/types]` Implement `numPassingAsserts` of testResults to track the number of passing asserts in a test ([#&#8203;13795](https://github.com/facebook/jest/pull/13795))
-   `[jest-core]` Add newlines to JSON output ([#&#8203;13817](https://github.com/facebook/jest/pull/13817))
-   `[@jest/reporters]` Automatic log folding in GitHub Actions Reporter ([#&#8203;13626](https://github.com/facebook/jest/pull/13626))

##### Fixes

-   `[@jest/expect-utils]` `toMatchObject` diffs should include `Symbol` properties ([#&#8203;13810](https://github.com/facebook/jest/pull/13810))
-   `[jest-runtime]` Handle missing `replaceProperty` ([#&#8203;13823](https://github.com/facebook/jest/pull/13823))
-   `[@jest/types]` Add partial support for `done` callbacks in typings of `each` ([#&#8203;13756](https://github.com/facebook/jest/pull/13756))

### [`v29.4.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2940)

[Compare Source](https://github.com/facebook/jest/compare/v29.3.1...v29.4.0)

##### Features

-   `[expect, @&#8203;jest/expect-utils]` Support custom equality testers ([#&#8203;13654](https://github.com/facebook/jest/pull/13654))
-   `[jest-config, jest-worker]` Use `os.availableParallelism` if available to calculate number of workers to spawn ([#&#8203;13738](https://github.com/facebook/jest/pull/13738))
-   `[@jest/globals, jest-mock]` Add `jest.replaceProperty()` that replaces property value ([#&#8203;13496](https://github.com/facebook/jest/pull/13496))
-   `[jest-haste-map]` ignore Sapling vcs directories (`.sl/`) ([#&#8203;13674](https://github.com/facebook/jest/pull/13674))
-   `[jest-resolve]` Support subpath imports ([#&#8203;13705](https://github.com/facebook/jest/pull/13705), [#&#8203;13723](https://github.com/facebook/jest/pull/13723), [#&#8203;13777](https://github.com/facebook/jest/pull/13777))
-   `[jest-runtime]` Add `jest.isolateModulesAsync` for scoped module initialization of asynchronous functions ([#&#8203;13680](https://github.com/facebook/jest/pull/13680))
-   `[jest-runtime]` Add `jest.isEnvironmentTornDown` function ([#&#8203;13741](https://github.com/facebook/jest/pull/13741))
-   `[jest-test-result]` Added `skipped` and `focused` status to `FormattedTestResult` ([#&#8203;13700](https://github.com/facebook/jest/pull/13700))
-   `[jest-transform]` Support for asynchronous `createTransformer` ([#&#8203;13762](https://github.com/facebook/jest/pull/13762))

##### Fixes

-   `[jest-environment-node]` Fix non-configurable globals ([#&#8203;13687](https://github.com/facebook/jest/pull/13687))
-   `[@jest/expect-utils]` `toMatchObject` should handle `Symbol` properties ([#&#8203;13639](https://github.com/facebook/jest/pull/13639))
-   `[jest-mock]` Fix `mockReset` and `resetAllMocks` `undefined` return value([#&#8203;13692](https://github.com/facebook/jest/pull/13692))
-   `[jest-resolve]` Add global paths to `require.resolve.paths` ([#&#8203;13633](https://github.com/facebook/jest/pull/13633))
-   `[jest-resolve]` Correct node core module detection when using `node:` specifiers ([#&#8203;13806](https://github.com/facebook/jest/pull/13806))
-   `[jest-runtime]` Support WASM files that import JS resources ([#&#8203;13608](https://github.com/facebook/jest/pull/13608))
-   `[jest-runtime]` Use the `scriptTransformer` cache in `jest-runner` ([#&#8203;13735](https://github.com/facebook/jest/pull/13735))
-   `[jest-runtime]` Enforce import assertions when importing JSON in ESM ([#&#8203;12755](https://github.com/facebook/jest/pull/12755) & [#&#8203;13805](https://github.com/facebook/jest/pull/13805))
-   `[jest-snapshot]` Make sure to import `babel` outside of the sandbox ([#&#8203;13694](https://github.com/facebook/jest/pull/13694))
-   `[jest-transform]` Ensure the correct configuration is passed to preprocessors specified multiple times in the `transform` option ([#&#8203;13770](https://github.com/facebook/jest/pull/13770))

##### Chore & Maintenance

-   `[@jest/fake-timers]` Update `@sinonjs/fake-timers` ([#&#8203;13612](https://github.com/facebook/jest/pull/13612))
-   `[docs]` Improve custom puppeteer example to prevent worker warnings ([#&#8203;13619](https://github.com/facebook/jest/pull/13619))

### [`v29.3.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2931)

[Compare Source](https://github.com/facebook/jest/compare/v29.3.0...v29.3.1)

##### Fixes

-   `[jest-config]` Do not warn about `preset` in `ProjectConfig` ([#&#8203;13583](https://github.com/facebook/jest/pull/13583))

##### Performance

-   `[jest-transform]` Defer creation of cache directory ([#&#8203;13420](https://github.com/facebook/jest/pull/13420))

### [`v29.3.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2930)

[Compare Source](https://github.com/facebook/jest/compare/v29.2.2...v29.3.0)

##### Features

-   `[jest-runtime]` Support WebAssembly (Wasm) imports in ESM modules ([#&#8203;13505](https://github.com/facebook/jest/pull/13505))

##### Fixes

-   `[jest-config]` Add config validation for `projects` option ([#&#8203;13565](https://github.com/facebook/jest/pull/13565))
-   `[jest-mock]` Treat cjs modules as objects so they can be mocked ([#&#8203;13513](https://github.com/facebook/jest/pull/13513))
-   `[jest-worker]` Throw an error instead of hanging when jest workers terminate unexpectedly ([#&#8203;13566](https://github.com/facebook/jest/pull/13566))

##### Chore & Maintenance

-   `[@jest/transform]` Update `convert-source-map` ([#&#8203;13509](https://github.com/facebook/jest/pull/13509))
-   `[docs]` Mention `toStrictEqual` in UsingMatchers docs. ([#&#8203;13560](https://github.com/facebook/jest/pull/13560))

### [`v29.2.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2922)

[Compare Source](https://github.com/facebook/jest/compare/v29.2.1...v29.2.2)

##### Fixes

-   `[@jest/test-sequencer]` Make sure sharding does not produce empty groups ([#&#8203;13476](https://github.com/facebook/jest/pull/13476))
-   `[jest-circus]` Test marked as `todo` are shown as todo when inside a focussed describe ([#&#8203;13504](https://github.com/facebook/jest/pull/13504))
-   `[jest-mock]` Ensure mock resolved and rejected values are promises from correct realm ([#&#8203;13503](https://github.com/facebook/jest/pull/13503))
-   `[jest-snapshot]` Don't highlight passing asymmetric property matchers in snapshot diff ([#&#8203;13480](https://github.com/facebook/jest/issues/13480))

##### Chore & Maintenance

-   `[docs]` Update link to Jest 28 upgrade guide in error message ([#&#8203;13483](https://github.com/facebook/jest/pull/13483))
-   `[jest-runner, jest-watcher]` Update `emittery` ([#&#8203;13490](https://github.com/facebook/jest/pull/13490))

### [`v29.2.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2921)

[Compare Source](https://github.com/facebook/jest/compare/v29.2.0...v29.2.1)

##### Features

-   `[@jest/globals, jest-mock]` Add `jest.Spied*` utility types ([#&#8203;13440](https://github.com/facebook/jest/pull/13440))

##### Fixes

-   `[jest-environment-node]` make `globalThis.performance` writable for Node 19 and fake timers ([#&#8203;13467](https://github.com/facebook/jest/pull/13467))
-   `[jest-mock]` Revert [#&#8203;13398](https://github.com/facebook/jest/pull/13398) to restore mocking of setters ([#&#8203;13472](https://github.com/facebook/jest/pull/13472))

##### Performance

-   `[*]` Use sha1 instead of sha256 for hashing ([#&#8203;13421](https://github.com/facebook/jest/pull/13421))

### [`v29.2.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2920)

[Compare Source](https://github.com/facebook/jest/compare/v29.1.2...v29.2.0)

##### Features

-   `[@jest/cli, jest-config]` A seed for the test run will be randomly generated, or set by a CLI option ([#&#8203;13400](https://github.com/facebook/jest/pull/13400))
-   `[@jest/cli, jest-config]` `--show-seed` will display the seed value in the report, and can be set via a CLI flag or through the config file ([#&#8203;13400](https://github.com/facebook/jest/pull/13400))
-   `[jest-config]` Add `readInitialConfig` utility function ([#&#8203;13356](https://github.com/facebook/jest/pull/13356))
-   `[jest-core]` Allow `testResultsProcessor` to be async ([#&#8203;13343](https://github.com/facebook/jest/pull/13343))
-   `[@jest/environment, jest-environment-node, jest-environment-jsdom, jest-runtime]` Add `getSeed()` to the `jest` object ([#&#8203;13400](https://github.com/facebook/jest/pull/13400))
-   `[expect, @&#8203;jest/expect-utils]` Allow `isA` utility to take a type argument ([#&#8203;13355](https://github.com/facebook/jest/pull/13355))
-   `[expect]` Expose `AsyncExpectationResult` and `SyncExpectationResult` types ([#&#8203;13411](https://github.com/facebook/jest/pull/13411))

##### Fixes

-   `[babel-plugin-jest-hoist]` Ignore `TSTypeQuery` when checking for hoisted references ([#&#8203;13367](https://github.com/facebook/jest/pull/13367))
-   `[jest-core]` Fix `detectOpenHandles` false positives for some special objects such as `TLSWRAP` ([#&#8203;13414](https://github.com/facebook/jest/pull/13414))
-   `[jest-mock]` Fix mocking of getters and setters on classes ([#&#8203;13398](https://github.com/facebook/jest/pull/13398))
-   `[jest-reporters]` Revert: Transform file paths into hyperlinks ([#&#8203;13399](https://github.com/facebook/jest/pull/13399))
-   `[@jest/types]` Infer type of `each` table correctly when the table is a tuple or array ([#&#8203;13381](https://github.com/facebook/jest/pull/13381))
-   `[@jest/types]` Rework typings to allow the `*ReturnedWith` matchers to be called with no argument ([#&#8203;13385](https://github.com/facebook/jest/pull/13385))

##### Chore & Maintenance

-   `[*]` Update `@babel/*` deps, resulting in slightly different stack traces for `each` ([#&#8203;13422](https://github.com/facebook/jest/pull/13422))

##### Performance

-   `[jest-runner]` Do not instrument v8 coverage data if coverage should not be collected ([#&#8203;13282](https://github.com/facebook/jest/pull/13282))

### [`v29.1.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2912)

[Compare Source](https://github.com/facebook/jest/compare/v29.1.1...v29.1.2)

##### Fixes

-   `[expect, @&#8203;jest/expect]` Revert buggy inference of argument types for `*CalledWith` and `*ReturnedWith` matchers introduced in 29.1.0 ([#&#8203;13339](https://github.com/facebook/jest/pull/13339))
-   `[jest-worker]` Add missing dependency on `jest-util` ([#&#8203;13341](https://github.com/facebook/jest/pull/13341))

### [`v29.1.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2911)

[Compare Source](https://github.com/facebook/jest/compare/v29.1.0...v29.1.1)

##### Fixes

-   `[jest-mock]` Revert [#&#8203;13145](https://github.com/facebook/jest/pull/13145) which broke mocking of transpiled ES modules

### [`v29.1.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2910)

[Compare Source](https://github.com/facebook/jest/compare/v29.0.3...v29.1.0)

##### Features

-   `[expect, @&#8203;jest/expect]` Support type inference for function parameters in `CalledWith` assertions ([#&#8203;13268](https://github.com/facebook/jest/pull/13268))
-   `[expect, @&#8203;jest/expect]` Infer type of `*ReturnedWith` matchers argument ([#&#8203;13278](https://github.com/facebook/jest/pull/13278))
-   `[@jest/environment, jest-runtime]` Allow `jest.requireActual` and `jest.requireMock` to take a type argument ([#&#8203;13253](https://github.com/facebook/jest/pull/13253))
-   `[@jest/environment]` Allow `jest.mock` and `jest.doMock` to take a type argument ([#&#8203;13254](https://github.com/facebook/jest/pull/13254))
-   `[@jest/fake-timers]` Add `jest.now()` to return the current fake clock time ([#&#8203;13244](https://github.com/facebook/jest/pull/13244), [#&#8203;13246](https://github.com/facebook/jest/pull/13246))
-   `[@jest/mock]` Add `withImplementation` method for temporarily overriding a mock ([#&#8203;13281](https://github.com/facebook/jest/pull/13281))
-   `[expect]` Export `toThrow*` matchers ([#&#8203;13328](https://github.com/facebook/jest/pull/13328))

##### Fixes

-   `[jest-circus, jest-jasmine2]` Fix error messages for Node's `assert.throes` ([#&#8203;13322](https://github.com/facebook/jest/pull/13322))
-   `[jest-haste-map]` Remove `__proto__` usage ([#&#8203;13256](https://github.com/facebook/jest/pull/13256))
-   `[jest-mock]` Improve `spyOn` typings to handle optional properties ([#&#8203;13247](https://github.com/facebook/jest/pull/13247))
-   `[jest-mock]` Fix mocking of getters and setters on classes ([#&#8203;13145](https://github.com/facebook/jest/pull/13145))
-   `[jest-snapshot]` Throw useful error when an array is passed as property matchers ([#&#8203;13263](https://github.com/facebook/jest/pull/13263))
-   `[jest-snapshot]` Prioritize parser used in the project ([#&#8203;13323](https://github.com/facebook/jest/pull/13323))
-   `[jest-transform]` Attempt to work around issues with atomic writes on Windows ([#&#8203;11423](https://github.com/facebook/jest/pull/11423))

### [`v29.0.3`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2903)

[Compare Source](https://github.com/facebook/jest/compare/v29.0.2...v29.0.3)

##### Features

-   `[@jest/environment, jest-runtime]` Allow passing a generic type argument to `jest.createMockFromModule<T>()` method ([#&#8203;13202](https://github.com/facebook/jest/pull/13202))
-   `[expect]` Expose `ExpectationResult` type ([#&#8203;13240](https://github.com/facebook/jest/pull/13240))
-   `[jest-snapshot]` Expose `Context` type ([#&#8203;13240](https://github.com/facebook/jest/pull/13240))
-   `[@jest/globals]` Add `jest.Mock` type helper ([#&#8203;13235](https://github.com/facebook/jest/pull/13235))

##### Fixes

-   `[jest-core]` Capture `execError` during `TestScheduler.scheduleTests` and dispatch to reporters ([#&#8203;13203](https://github.com/facebook/jest/pull/13203))
-   `[jest-resolve]` Make sure to resolve module paths after looking at `exports` ([#&#8203;13242](https://github.com/facebook/jest/pull/13242))
-   `[jest-resolve]` Improve error on module not found deep in the `require` stack ([#&#8203;8704](https://github.com/facebook/jest/pull/8704))
-   `[jest-snapshot]` Fix typings of snapshot matchers ([#&#8203;13240](https://github.com/facebook/jest/pull/13240))

##### Chore & Maintenance

-   `[*]` Fix inconsistent workspace prefixes ([#&#8203;13217](https://github.com/facebook/jest/pull/13217))
-   `[jest-haste-map]` Expose a minimal public API to TypeScript ([#&#8203;13023](https://github.com/facebook/jest/pull/13023))

### [`v29.0.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2902)

[Compare Source](https://github.com/facebook/jest/compare/v29.0.1...v29.0.2)

##### Features

-   `[jest-transform]` Expose `TransformFactory` type ([#&#8203;13184](https://github.com/facebook/jest/pull/13184))

##### Fixes

-   `[babel-plugin-jest-hoist]` Support imported `jest` in mock factory ([#&#8203;13188](https://github.com/facebook/jest/pull/13188))
-   `[jest-mock]` Align the behavior and return type of `generateFromMetadata` method ([#&#8203;13207](https://github.com/facebook/jest/pull/13207))
-   `[jest-runtime]` Support `jest.resetModules()` with ESM ([#&#8203;13211](https://github.com/facebook/jest/pull/13211))

### [`v29.0.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2901)

[Compare Source](https://github.com/facebook/jest/compare/v29.0.0...v29.0.1)

##### Fixes

-   `[jest-snapshot]` Pass `snapshotFormat` through when diffing snapshots ([#&#8203;13181](https://github.com/facebook/jest/pull/13181))

### [`v29.0.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2900)

[Compare Source](https://github.com/facebook/jest/compare/v28.1.3...v29.0.0)

##### Features

-   `[expect]` \[**BREAKING**] Differentiate between `MatcherContext` `MatcherUtils` and `MatcherState` types ([#&#8203;13141](https://github.com/facebook/jest/pull/13141))
-   `[jest-circus]` Add support for `test.failing.each` ([#&#8203;13142](https://github.com/facebook/jest/pull/13142))
-   `[jest-config]` \[**BREAKING**] Make `snapshotFormat` default to `escapeString: false` and `printBasicPrototype: false` ([#&#8203;13036](https://github.com/facebook/jest/pull/13036))
-   `[jest-config]` \[**BREAKING**] Remove undocumented `collectCoverageOnlyFrom` option ([#&#8203;13156](https://github.com/facebook/jest/pull/13156))
-   `[jest-environment-jsdom]` \[**BREAKING**] Upgrade to `jsdom@20` ([#&#8203;13037](https://github.com/facebook/jest/pull/13037), [#&#8203;13058](https://github.com/facebook/jest/pull/13058))
-   `[@jest/globals]` Add `jest.Mocked`, `jest.MockedClass`, `jest.MockedFunction` and `jest.MockedObject` utility types ([#&#8203;12727](https://github.com/facebook/jest/pull/12727))
-   `[jest-mock]` \[**BREAKING**] Refactor `Mocked*` utility types. `MaybeMockedDeep` and `MaybeMocked` became `Mocked` and `MockedShallow` respectively; only deep mocked variants of `MockedClass`, `MockedFunction` and `MockedObject` are exported ([#&#8203;13123](https://github.com/facebook/jest/pull/13123), [#&#8203;13124](https://github.com/facebook/jest/pull/13124))
-   `[jest-mock]` \[**BREAKING**] Change the default `jest.mocked` helper’s behavior to deep mocked ([#&#8203;13125](https://github.com/facebook/jest/pull/13125))
-   `[jest-snapshot]` \[**BREAKING**] Let `babel` find config when updating inline snapshots ([#&#8203;13150](https://github.com/facebook/jest/pull/13150))
-   `[@jest/test-result, @&#8203;jest/types]` \[**BREAKING**] Replace `Bytes` and `Milliseconds` types with `number` ([#&#8203;13155](https://github.com/facebook/jest/pull/13155))
-   `[jest-worker]` Adds `workerIdleMemoryLimit` option which is used as a check for worker memory leaks >= Node 16.11.0 and recycles child workers as required ([#&#8203;13056](https://github.com/facebook/jest/pull/13056), [#&#8203;13105](https://github.com/facebook/jest/pull/13105), [#&#8203;13106](https://github.com/facebook/jest/pull/13106), [#&#8203;13107](https://github.com/facebook/jest/pull/13107))
-   `[pretty-format]` \[**BREAKING**] Remove `ConvertAnsi` plugin in favour of `jest-serializer-ansi-escapes` ([#&#8203;13040](https://github.com/facebook/jest/pull/13040))
-   `[pretty-format]` Allow to opt out from sorting object keys with `compareKeys: null` ([#&#8203;12443](https://github.com/facebook/jest/pull/12443))

##### Fixes

-   `[jest-config]` Fix testing multiple projects with TypeScript config files ([#&#8203;13099](https://github.com/facebook/jest/pull/13099))
-   `[@jest/expect-utils]` Fix deep equality of ImmutableJS Record ([#&#8203;13055](https://github.com/facebook/jest/pull/13055))
-   `[jest-haste-map]` Increase the maximum possible file size that jest-haste-map can handle ([#&#8203;13094](https://github.com/facebook/jest/pull/13094))
-   `[jest-runtime]` Properly support CJS re-exports from dual packages ([#&#8203;13170](https://github.com/facebook/jest/pull/13170))
-   `[jest-snapshot]` Make `prettierPath` optional in `SnapshotState` ([#&#8203;13149](https://github.com/facebook/jest/pull/13149))
-   `[jest-snapshot]` Fix parsing error from inline snapshot files with `JSX` ([#&#8203;12760](https://github.com/facebook/jest/pull/12760))
-   `[jest-worker]` When a process runs out of memory worker exits correctly and doesn't spin indefinitely ([#&#8203;13054](https://github.com/facebook/jest/pull/13054))

##### Chore & Maintenance

-   `[*]` \[**BREAKING**] Drop support for Node v12 and v17 ([#&#8203;13033](https://github.com/facebook/jest/pull/13033))
-   `[docs]` Fix webpack name ([#&#8203;13049](https://github.com/facebook/jest/pull/13049))
-   `[docs]` Explicit how to set `n` for `--bail` ([#&#8203;13128](https://github.com/facebook/jest/pull/13128))
-   `[docs]` Update Enzyme URL ([#&#8203;13166](https://github.com/facebook/jest/pull/13166))
-   `[jest-leak-detector]` Remove support for `weak-napi` ([#&#8203;13035](https://github.com/facebook/jest/pull/13035))
-   `[jest-snapshot]` \[**BREAKING**] Require `rootDir` as argument to `SnapshotState` ([#&#8203;13150](https://github.com/facebook/jest/pull/13150))

### [`v28.1.3`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2813)

[Compare Source](https://github.com/facebook/jest/compare/v28.1.2...v28.1.3)

##### Features

-   `[jest-leak-detector]` Use native `FinalizationRegistry` when it exists to get rid of external C dependency ([#&#8203;12973](https://github.com/facebook/jest/pull/12973))

##### Fixes

-   `[jest-changed-files]` Fix a lock-up after repeated invocations ([#&#8203;12757](https://github.com/facebook/jest/issues/12757))
-   `[@jest/expect-utils]` Fix deep equality of ImmutableJS OrderedSets ([#&#8203;12977](https://github.com/facebook/jest/pull/12977))
-   `[jest-mock]` Add index signature support for `spyOn` types ([#&#8203;13013](https://github.com/facebook/jest/pull/13013), [#&#8203;13020](https://github.com/facebook/jest/pull/13020))
-   `[jest-snapshot]` Fix indentation of awaited inline snapshots ([#&#8203;12986](https://github.com/facebook/jest/pull/12986))

##### Chore & Maintenance

-   `[*]` Replace internal usage of `pretty-format/ConvertAnsi` with `jest-serializer-ansi-escapes` ([#&#8203;12935](https://github.com/facebook/jest/pull/12935), [#&#8203;13004](https://github.com/facebook/jest/pull/13004))
-   `[docs]` Update spyOn docs ([#&#8203;13000](https://github.com/facebook/jest/pull/13000))

### [`v28.1.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2812)

[Compare Source](https://github.com/facebook/jest/compare/v28.1.1...v28.1.2)

##### Fixes

-   `[jest-runtime]` Avoid star type import from `@jest/globals` ([#&#8203;12949](https://github.com/facebook/jest/pull/12949))

##### Chore & Maintenance

-   `[docs]` Mention that jest-codemods now supports Sinon ([#&#8203;12898](https://github.com/facebook/jest/pull/12898))

### [`v28.1.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2811)

[Compare Source](https://github.com/facebook/jest/compare/v28.1.0...v28.1.1)

##### Features

-   `[jest]` Expose `Config` type ([#&#8203;12848](https://github.com/facebook/jest/pull/12848))
-   `[@jest/reporters]` Improve `GitHubActionsReporter`s annotation format ([#&#8203;12826](https://github.com/facebook/jest/pull/12826))
-   `[@jest/types]` Infer argument types passed to `test` and `describe` callback functions from `each` tables ([#&#8203;12885](https://github.com/facebook/jest/pull/12885), [#&#8203;12905](https://github.com/facebook/jest/pull/12905))

##### Fixes

-   `[@jest/expect-utils]` Fix deep equality of ImmutableJS OrderedMaps ([#&#8203;12899](https://github.com/facebook/jest/pull/12899))
-   `[jest-docblock]` Handle multiline comments in parseWithComments ([#&#8203;12845](https://github.com/facebook/jest/pull/12845))
-   `[jest-mock]` Improve `spyOn` error messages ([#&#8203;12901](https://github.com/facebook/jest/pull/12901))
-   `[jest-runtime]` Correctly report V8 coverage with `resetModules: true` ([#&#8203;12912](https://github.com/facebook/jest/pull/12912))
-   `[jest-worker]` Make `JestWorkerFarm` helper type to include methods of worker module that take more than one argument ([#&#8203;12839](https://github.com/facebook/jest/pull/12839))

##### Chore & Maintenance

-   `[docs]` Updated docs to indicate that `jest-environment-jsdom` is a separate package [#&#8203;12828](https://github.com/facebook/jest/issues/12828)
-   `[docs]` Document the comments used by coverage providers [#&#8203;12835](https://github.com/facebook/jest/issues/12835)
-   `[docs]` Use `docusaurus-remark-plugin-tab-blocks` to format tabs with code examples ([#&#8203;12859](https://github.com/facebook/jest/pull/12859))
-   `[jest-haste-map]` Bump `walker` version ([#&#8203;12324](https://github.com/facebook/jest/pull/12324))

### [`v28.1.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2810)

[Compare Source](https://github.com/facebook/jest/compare/v28.0.3...v28.1.0)

##### Features

-   `[jest-circus]` Add `failing` test modifier that inverts the behavior of tests ([#&#8203;12610](https://github.com/facebook/jest/pull/12610))
-   `[jest-environment-node, jest-environment-jsdom]` Allow specifying `customExportConditions` ([#&#8203;12774](https://github.com/facebook/jest/pull/12774))

##### Fixes

-   `[expect]` Adjust typings of `lastCalledWith`, `nthCalledWith`, `toBeCalledWith` matchers to allow a case there a mock was called with no arguments ([#&#8203;12807](https://github.com/facebook/jest/pull/12807))
-   `[@jest/expect-utils]` Fix deep equality of ImmutableJS Lists ([#&#8203;12763](https://github.com/facebook/jest/pull/12763))
-   `[jest-core]` Do not collect `SIGNREQUEST` as open handles ([#&#8203;12789](https://github.com/facebook/jest/pull/12789))

##### Chore & Maintenance

-   `[docs]` Specified documentation about `--filter` CLI docs ([#&#8203;12799](https://github.com/facebook/jest/pull/12799))
-   `[@jest-reporters]` Move helper functions from `utils.ts` into separate files ([#&#8203;12782](https://github.com/facebook/jest/pull/12782))
-   `[jest-resolve]` Replace `process.versions.pnp` type declaration with `@types/pnpapi` devDependency ([#&#8203;12783](https://github.com/facebook/jest/pull/12783))

### [`v28.0.3`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2803)

[Compare Source](https://github.com/facebook/jest/compare/v28.0.2...v28.0.3)

##### Fixes

-   `[jest-config]` Normalize `reporters` option defined in presets ([#&#8203;12769](https://github.com/facebook/jest/pull/12769))
-   `[@jest/reporters]` Fix trailing slash in matching `coverageThreshold` key ([#&#8203;12714](https://github.com/facebook/jest/pull/12714))
-   `[jest-resolve]` Fix (experimental) ESM module mocking for re-exports ([#&#8203;12766](https://github.com/facebook/jest/pull/12766))
-   `[@jest/transform]` Throw better error if an invalid return value if encountered ([#&#8203;12764](https://github.com/facebook/jest/pull/12764))

##### Chore & Maintenance

-   `[docs]` Fix typo in `--shard` CLI docs ([#&#8203;12761](https://github.com/facebook/jest/pull/12761))

### [`v28.0.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2802)

[Compare Source](https://github.com/facebook/jest/compare/v28.0.1...v28.0.2)

##### Features

-   `[jest-worker]` Add `JestWorkerFarm` helper type ([#&#8203;12753](https://github.com/facebook/jest/pull/12753))

##### Fixes

-   `[*]` Lower Node 16 requirement to 16.10 from 16.13 due to a [Node bug](https://github.com/nodejs/node/issues/40014) that causes memory and performance issues ([#&#8203;12754](https://github.com/facebook/jest/pull/12754))

### [`v28.0.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2801)

[Compare Source](https://github.com/facebook/jest/compare/v28.0.0...v28.0.1)

##### Features

-   `[jest-resolve]` Expose `ResolverOptions` type ([#&#8203;12736](https://github.com/facebook/jest/pull/12736))

##### Fixes

-   `[expect]` Add missing dependency `jest-util` ([#&#8203;12744](https://github.com/facebook/jest/pull/12744))
-   `[jest-circus]` Improve `test.concurrent` ([#&#8203;12748](https://github.com/facebook/jest/pull/12748))
-   `[jest-resolve]` Correctly throw an error if `jsdom` test environment is used, but not installed ([#&#8203;12749](https://github.com/facebook/jest/pull/12749))

##### Chore & Maintenance

-   `[jest-serializer]` Remove deprecated module from source tree ([#&#8203;12735](https://github.com/facebook/jest/pull/12735))

### [`v28.0.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2800)

[Compare Source](https://github.com/facebook/jest/compare/v27.5.1...v28.0.0)

##### Features

-   `[babel-jest]` Export `createTransformer` function ([#&#8203;12399](https://github.com/facebook/jest/pull/12399))
-   `[expect]` Expose `AsymmetricMatchers`, `MatcherFunction` and `MatcherFunctionWithState` interfaces ([#&#8203;12363](https://github.com/facebook/jest/pull/12363), [#&#8203;12376](https://github.com/facebook/jest/pull/12376))
-   `[jest-circus]` Support error logging before retry ([#&#8203;12201](https://github.com/facebook/jest/pull/12201))
-   `[jest-circus, jest-jasmine2]` Allowed classes and functions as `describe` and `it`/`test` names ([#&#8203;12484](https://github.com/facebook/jest/pull/12484))
-   `[jest-cli, jest-config]` \[**BREAKING**] Remove `testURL` config, use `testEnvironmentOptions.url` instead ([#&#8203;10797](https://github.com/facebook/jest/pull/10797))
-   `[jest-cli, jest-core]` Add `--shard` parameter for distributed parallel test execution ([#&#8203;12546](https://github.com/facebook/jest/pull/12546))
-   `[jest-cli]` \[**BREAKING**] Remove undocumented `--timers` option ([#&#8203;12572](https://github.com/facebook/jest/pull/12572))
-   `[jest-config]` \[**BREAKING**] Stop shipping `jest-environment-jsdom` by default ([#&#8203;12354](https://github.com/facebook/jest/pull/12354))
-   `[jest-config]` \[**BREAKING**] Stop shipping `jest-jasmine2` by default ([#&#8203;12355](https://github.com/facebook/jest/pull/12355))
-   `[jest-config, @&#8203;jest/types]` Add `ci` to `GlobalConfig` ([#&#8203;12378](https://github.com/facebook/jest/pull/12378))
-   `[jest-config]` \[**BREAKING**] Rename `moduleLoader` to `runtime` ([#&#8203;10817](https://github.com/facebook/jest/pull/10817))
-   `[jest-config]` \[**BREAKING**] Rename `extraGlobals` to `sandboxInjectedGlobals` ([#&#8203;10817](https://github.com/facebook/jest/pull/10817))
-   `[jest-config]` \[**BREAKING**] Throw an error instead of showing a warning if multiple configs are used ([#&#8203;12510](https://github.com/facebook/jest/pull/12510))
-   `[jest-config]` \[**BREAKING**] Do not normalize long deprecated configuration options `preprocessorIgnorePatterns`, `scriptPreprocessor`, `setupTestFrameworkScriptFile` and `testPathDirs` ([#&#8203;12701](https://github.com/facebook/jest/pull/12701))
-   `[jest-cli, jest-core]` Add `--ignoreProjects` CLI argument to ignore test suites by project name ([#&#8203;12620](https://github.com/facebook/jest/pull/12620))
-   `[jest-core]` Pass project config to `globalSetup`/`globalTeardown` function as second argument ([#&#8203;12440](https://github.com/facebook/jest/pull/12440))
-   `[jest-core]` Stabilize test runners with event emitters ([#&#8203;12641](https://github.com/facebook/jest/pull/12641))
-   `[jest-core, jest-watcher]` \[**BREAKING**] Move `TestWatcher` class to `jest-watcher` package ([#&#8203;12652](https://github.com/facebook/jest/pull/12652))
-   `[jest-core]` Allow using Summary Reporter as stand-alone reporter ([#&#8203;12687](https://github.com/facebook/jest/pull/12687))
-   `[jest-environment-jsdom]` \[**BREAKING**] Upgrade jsdom to 19.0.0 ([#&#8203;12290](https://github.com/facebook/jest/pull/12290))
-   `[jest-environment-jsdom]` \[**BREAKING**] Add default `browser` condition to `exportConditions` for `jsdom` environment ([#&#8203;11924](https://github.com/facebook/jest/pull/11924))
-   `[jest-environment-jsdom]` \[**BREAKING**] Pass global config to Jest environment constructor for `jsdom` environment ([#&#8203;12461](https://github.com/facebook/jest/pull/12461))
-   `[jest-environment-jsdom]` \[**BREAKING**] Second argument `context` to constructor is mandatory ([#&#8203;12469](https://github.com/facebook/jest/pull/12469))
-   `[jest-environment-node]` \[**BREAKING**] Add default `node` and `node-addon` conditions to `exportConditions` for `node` environment ([#&#8203;11924](https://github.com/facebook/jest/pull/11924))
-   `[jest-environment-node]` \[**BREAKING**] Pass global config to Jest environment constructor for `node` environment ([#&#8203;12461](https://github.com/facebook/jest/pull/12461))
-   `[jest-environment-node]` \[**BREAKING**] Second argument `context` to constructor is mandatory ([#&#8203;12469](https://github.com/facebook/jest/pull/12469))
-   `[jest-environment-node]` Add all available globals to test globals, not just explicit ones ([#&#8203;12642](https://github.com/facebook/jest/pull/12642), [#&#8203;12696](https://github.com/facebook/jest/pull/12696))
-   `[@jest/expect]` New module which extends `expect` with `jest-snapshot` matchers ([#&#8203;12404](https://github.com/facebook/jest/pull/12404), [#&#8203;12410](https://github.com/facebook/jest/pull/12410), [#&#8203;12418](https://github.com/facebook/jest/pull/12418))
-   `[@jest/expect-utils]` New module exporting utils for `expect` ([#&#8203;12323](https://github.com/facebook/jest/pull/12323))
-   `[@jest/fake-timers]` \[**BREAKING**] Rename `timers` configuration option to `fakeTimers` ([#&#8203;12572](https://github.com/facebook/jest/pull/12572))
-   `[@jest/fake-timers]` \[**BREAKING**] Allow `jest.useFakeTimers()` and `projectConfig.fakeTimers` to take an options bag ([#&#8203;12572](https://github.com/facebook/jest/pull/12572))
-   `[jest-haste-map]` \[**BREAKING**] `HasteMap.create` now returns a promise ([#&#8203;12008](https://github.com/facebook/jest/pull/12008))
-   `[jest-haste-map]` Add support for `dependencyExtractor` written in ESM ([#&#8203;12008](https://github.com/facebook/jest/pull/12008))
-   `[jest-mock]` \[**BREAKING**] Rename exported utility types `ClassLike`, `FunctionLike`, `ConstructorLikeKeys`, `MethodLikeKeys`, `PropertyLikeKeys`; remove exports of utility types `ArgumentsOf`, `ArgsType`, `ConstructorArgumentsOf` - TS builtin utility types `ConstructorParameters` and `Parameters` should be used instead ([#&#8203;12435](https://github.com/facebook/jest/pull/12435), [#&#8203;12489](https://github.com/facebook/jest/pull/12489))
-   `[jest-mock]` Improve `isMockFunction` to infer types of passed function ([#&#8203;12442](https://github.com/facebook/jest/pull/12442))
-   `[jest-mock]` \[**BREAKING**] Improve the usage of `jest.fn` generic type argument ([#&#8203;12489](https://github.com/facebook/jest/pull/12489))
-   `[jest-mock]` Add support for auto-mocking async generator functions ([#&#8203;11080](https://github.com/facebook/jest/pull/11080))
-   `[jest-mock]` Add `contexts` member to mock functions ([#&#8203;12601](https://github.com/facebook/jest/pull/12601))
-   `[@jest/reporters]` Add GitHub Actions reporter ([#&#8203;11320](https://github.com/facebook/jest/pull/11320), [#&#8203;12658](https://github.com/facebook/jest/pull/12658))
-   `[@jest/reporters]` Pass `reporterContext` to custom reporter constructors as third argument ([#&#8203;12657](https://github.com/facebook/jest/pull/12657))
-   `[jest-resolve]` \[**BREAKING**] Add support for `package.json` `exports` ([#&#8203;11961](https://github.com/facebook/jest/pull/11961), [#&#8203;12373](https://github.com/facebook/jest/pull/12373))
-   `[jest-resolve]` Support package self-reference ([#&#8203;12682](https://github.com/facebook/jest/pull/12682))
-   `[jest-resolve, jest-runtime]` Add support for `data:` URI import and mock ([#&#8203;12392](https://github.com/facebook/jest/pull/12392))
-   `[jest-resolve, jest-runtime]` Add support for async resolver ([#&#8203;11540](https://github.com/facebook/jest/pull/11540))
-   `[jest-resolve]` \[**BREAKING**] Remove `browser?: boolean` from resolver options, `conditions: ['browser']` should be used instead ([#&#8203;12707](https://github.com/facebook/jest/pull/12707))
-   `[jest-resolve]` Expose `JestResolver`, `AsyncResolver`, `SyncResolver`, `PackageFilter`, `PathFilter` and `PackageJSON` types ([#&#8203;12707](https://github.com/facebook/jest/pull/12707), ([#&#8203;12712](https://github.com/facebook/jest/pull/12712))
-   `[jest-runner]` Allow `setupFiles` module to export an async function ([#&#8203;12042](https://github.com/facebook/jest/pull/12042))
-   `[jest-runner]` Allow passing `testEnvironmentOptions` via docblocks ([#&#8203;12470](https://github.com/facebook/jest/pull/12470))
-   `[jest-runner]` Expose `CallbackTestRunner`, `EmittingTestRunner` abstract classes and `CallbackTestRunnerInterface`, `EmittingTestRunnerInterface` to help typing third party runners ([#&#8203;12646](https://github.com/facebook/jest/pull/12646), [#&#8203;12715](https://github.com/facebook/jest/pull/12715))
-   `[jest-runner]` Lock version of `source-map-support` to 0.5.13 ([#&#8203;12720](https://github.com/facebook/jest/pull/12720))
-   `[jest-runtime]` \[**BREAKING**] `Runtime.createHasteMap` now returns a promise ([#&#8203;12008](https://github.com/facebook/jest/pull/12008))
-   `[jest-runtime]` Calling `jest.resetModules` function will clear FS and transform cache ([#&#8203;12531](https://github.com/facebook/jest/pull/12531))
-   `[jest-runtime]` \[**BREAKING**] Remove `Context` type export, it must be imported from `@jest/test-result` ([#&#8203;12685](https://github.com/facebook/jest/pull/12685))
-   `[jest-runtime]` Add `import.meta.jest` ([#&#8203;12698](https://github.com/facebook/jest/pull/12698))
-   `[@jest/schemas]` New module for JSON schemas for Jest's config ([#&#8203;12384](https://github.com/facebook/jest/pull/12384))
-   `[@jest/source-map]` Migrate from `source-map` to `@jridgewell/trace-mapping` ([#&#8203;12692](https://github.com/facebook/jest/pull/12692))
-   `[jest-transform]` \[**BREAKING**] Make it required for `process()` and `processAsync()` methods to always return structured data ([#&#8203;12638](https://github.com/facebook/jest/pull/12638))
-   `[jest-test-result]` Add duration property to JSON test output ([#&#8203;12518](https://github.com/facebook/jest/pull/12518))
-   `[jest-watcher]` \[**BREAKING**] Make `PatternPrompt` class to take `entityName` as third constructor parameter instead of `this._entityName` ([#&#8203;12591](https://github.com/facebook/jest/pull/12591))
-   `[jest-worker]` \[**BREAKING**] Allow only absolute `workerPath` ([#&#8203;12343](https://github.com/facebook/jest/pull/12343))
-   `[jest-worker]` \[**BREAKING**] Default to advanced serialization when using child process workers ([#&#8203;10983](https://github.com/facebook/jest/pull/10983))
-   `[pretty-format]` New `maxWidth` parameter ([#&#8203;12402](https://github.com/facebook/jest/pull/12402))

##### Fixes

-   `[*]` Use `sha256` instead of `md5` as hashing algortihm for compatibility with FIPS systems ([#&#8203;12722](https://github.com/facebook/jest/pull/12722))
-   `[babel-jest]` \[**BREAKING**] Pass `rootDir` as `root` in Babel's options ([#&#8203;12689](https://github.com/facebook/jest/pull/12689))
-   `[expect]` Move typings of `.not`, `.rejects` and `.resolves` modifiers outside of `Matchers` interface ([#&#8203;12346](https://github.com/facebook/jest/pull/12346))
-   `[expect]` Throw useful error if `expect.extend` is called with invalid matchers ([#&#8203;12488](https://github.com/facebook/jest/pull/12488))
-   `[expect]` Fix `iterableEquality` ignores other properties ([#&#8203;8359](https://github.com/facebook/jest/pull/8359))
-   `[expect]` Fix print for the `closeTo` matcher ([#&#8203;12626](https://github.com/facebook/jest/pull/12626))
-   `[jest-changed-files]` Improve `changedFilesWithAncestor` pattern for Mercurial SCM ([#&#8203;12322](https://github.com/facebook/jest/pull/12322))
-   `[jest-circus, @&#8203;jest/types]` Disallow undefined value in `TestContext` type ([#&#8203;12507](https://github.com/facebook/jest/pull/12507))
-   `[jest-config]` Correctly detect CI environment and update snapshots accordingly ([#&#8203;12378](https://github.com/facebook/jest/pull/12378))
-   `[jest-config]` Pass `moduleTypes` to `ts-node` to enforce CJS when transpiling ([#&#8203;12397](https://github.com/facebook/jest/pull/12397))
-   `[jest-config]` \[**BREAKING**] Add `mjs` and `cjs` to default `moduleFileExtensions` config ([#&#8203;12578](https://github.com/facebook/jest/pull/12578))
-   `[jest-config, jest-haste-map]` Allow searching for tests in `node_modules` by exposing `retainAllFiles` ([#&#8203;11084](https://github.com/facebook/jest/pull/11084))
-   `[jest-core]` \[**BREAKING**] Exit with status `1` if no tests are found with `--findRelatedTests` flag ([#&#8203;12487](https://github.com/facebook/jest/pull/12487))
-   `[jest-core]` Do not report unref-ed subprocesses as open handles ([#&#8203;12705](https://github.com/facebook/jest/pull/12705))
-   `[jest-each]` `%#` is not replaced with index of the test case ([#&#8203;12517](https://github.com/facebook/jest/pull/12517))
-   `[jest-each]` Fixes error message with incorrect count of missing arguments ([#&#8203;12464](https://github.com/facebook/jest/pull/12464))
-   `[jest-environment-jsdom]` Make `jsdom` accessible to extending environments again ([#&#8203;12232](https://github.com/facebook/jest/pull/12232))
-   `[jest-environment-jsdom]` Log JSDOM errors more cleanly ([#&#8203;12386](https://github.com/facebook/jest/pull/12386))
-   `[jest-environment-node]` Add `MessageChannel`, `MessageEvent` to globals ([#&#8203;12553](https://github.com/facebook/jest/pull/12553))
-   `[jest-environment-node]` Add `structuredClone` to globals ([#&#8203;12631](https://github.com/facebook/jest/pull/12631))
-   `[@jest/expect-utils]` \[**BREAKING**] Fix false positives when looking for `undefined` prop ([#&#8203;8923](https://github.com/facebook/jest/pull/8923))
-   `[jest-haste-map]` Don't use partial results if file crawl errors ([#&#8203;12420](https://github.com/facebook/jest/pull/12420))
-   `[jest-haste-map]` Make watchman existence check lazy+async ([#&#8203;12675](https://github.com/facebook/jest/pull/12675))
-   `[jest-jasmine2, jest-types]` \[**BREAKING**] Move all `jasmine` specific types from `@jest/types` to its own package ([#&#8203;12125](https://github.com/facebook/jest/pull/12125))
-   `[jest-jasmine2]` Do not set `duration` to `0` for skipped tests ([#&#8203;12518](https://github.com/facebook/jest/pull/12518))
-   `[jest-matcher-utils]` Pass maxWidth to `pretty-format` to avoid printing every element in arrays by default ([#&#8203;12402](https://github.com/facebook/jest/pull/12402))
-   `[jest-mock]` Fix function overloads for `spyOn` to allow more correct type inference in complex object ([#&#8203;12442](https://github.com/facebook/jest/pull/12442))
-   `[jest-mock]` Handle overridden `Function.name` property ([#&#8203;12674](https://github.com/facebook/jest/pull/12674))
-   `[@jest/reporters]` Notifications generated by the `--notify` flag are no longer persistent in GNOME Shell. ([#&#8203;11733](https://github.com/facebook/jest/pull/11733))
-   `[@jest/reporters]` Move missing icon file which is needed for `NotifyReporter` class. ([#&#8203;12593](https://github.com/facebook/jest/pull/12593))
-   `[@jest/reporters]` Update `v8-to-istanbul` ([#&#8203;12697](https://github.com/facebook/jest/pull/12697))
-   `[jest-resolver]` Call custom resolver with core node.js modules ([#&#8203;12654](https://github.com/facebook/jest/pull/12654))
-   `[jest-runner]` Correctly resolve `source-map-support` ([#&#8203;12706](https://github.com/facebook/jest/pull/12706))
-   `[jest-worker]` Fix `Farm` execution results memory leak ([#&#8203;12497](https://github.com/facebook/jest/pull/12497))

##### Chore & Maintenance

-   `[*]` \[**BREAKING**] Drop support for Node v10 and v15 and target first LTS `16.13.0` ([#&#8203;12220](https://github.com/facebook/jest/pull/12220))
-   `[*]` \[**BREAKING**] Drop support for `typescript@3.8`, minimum version is now `4.3` ([#&#8203;11142](https://github.com/facebook/jest/pull/11142), [#&#8203;12648](https://github.com/facebook/jest/pull/12648))
-   `[*]` Bundle all `.d.ts` files into a single `index.d.ts` per module ([#&#8203;12345](https://github.com/facebook/jest/pull/12345))
-   `[*]` Use `globalThis` instead of `global` ([#&#8203;12447](https://github.com/facebook/jest/pull/12447))
-   `[babel-jest]` \[**BREAKING**] Only export `createTransformer` ([#&#8203;12407](https://github.com/facebook/jest/pull/12407))
-   `[docs]` Add note about not mixing `done()` with Promises ([#&#8203;11077](https://github.com/facebook/jest/pull/11077))
-   `[docs, examples]` Update React examples to match with the new React guidelines for code examples ([#&#8203;12217](https://github.com/facebook/jest/pull/12217))
-   `[docs]` Add clarity for module factory hoisting limitations ([#&#8203;12453](https://github.com/facebook/jest/pull/12453))
-   `[docs]` Add more information about how code transformers work ([#&#8203;12407](https://github.com/facebook/jest/pull/12407))
-   `[docs]` Add upgrading guide ([#&#8203;12633](https://github.com/facebook/jest/pull/12633))
-   `[expect]` \[**BREAKING**] Remove support for importing `build/utils` ([#&#8203;12323](https://github.com/facebook/jest/pull/12323))
-   `[expect]` \[**BREAKING**] Migrate to ESM ([#&#8203;12344](https://github.com/facebook/jest/pull/12344))
-   `[expect]` \[**BREAKING**] Snapshot matcher types are moved to `@jest/expect` ([#&#8203;12404](https://github.com/facebook/jest/pull/12404))
-   `[jest-cli]` Update `yargs` to v17 ([#&#8203;12357](https://github.com/facebook/jest/pull/12357))
-   `[jest-config]` \[**BREAKING**] Remove `getTestEnvironment` export ([#&#8203;12353](https://github.com/facebook/jest/pull/12353))
-   `[jest-config]` \[**BREAKING**] Rename config option `name` to `id` ([#&#8203;11981](https://github.com/facebook/jest/pull/11981))
-   `[jest-create-cache-key-function]` Added README.md file with basic usage instructions ([#&#8203;12492](https://github.com/facebook/jest/pull/12492))
-   `[@jest/core]` Use `index.ts` instead of `jest.ts` as main export ([#&#8203;12329](https://github.com/facebook/jest/pull/12329))
-   `[jest-environment-jsdom]` \[**BREAKING**] Migrate to ESM ([#&#8203;12340](https://github.com/facebook/jest/pull/12340))
-   `[jest-environment-node]` \[**BREAKING**] Migrate to ESM ([#&#8203;12340](https://github.com/facebook/jest/pull/12340))
-   `[jest-haste-map]` Remove legacy `isRegExpSupported` ([#&#8203;12676](https://github.com/facebook/jest/pull/12676))
-   `[@jest/fake-timers]` Update `@sinonjs/fake_timers` to v9 ([#&#8203;12357](https://github.com/facebook/jest/pull/12357))
-   `[jest-jasmine2, jest-runtime]` \[**BREAKING**] Use `Symbol` to pass `jest.setTimeout` value instead of `jasmine` specific logic ([#&#8203;12124](https://github.com/facebook/jest/pull/12124))
-   `[jest-phabricator]` \[**BREAKING**] Migrate to ESM ([#&#8203;12341](https://github.com/facebook/jest/pull/12341))
-   `[jest-resolve]` \[**BREAKING**] Make `requireResolveFunction` argument mandatory ([#&#8203;12353](https://github.com/facebook/jest/pull/12353))
-   `[jest-runner]` \[**BREAKING**] Remove some type exports from `@jest/test-result` ([#&#8203;12353](https://github.com/facebook/jest/pull/12353))
-   `[jest-runner]` \[**BREAKING**] Second argument to constructor (`Context`) is not optional ([#&#8203;12640](https://github.com/facebook/jest/pull/12640))
-   `[jest-serializer]` \[**BREAKING**] Deprecate package in favour of using `v8` APIs directly ([#&#8203;12391](https://github.com/facebook/jest/pull/12391))
-   `[jest-snapshot]` \[**BREAKING**] Migrate to ESM ([#&#8203;12342](https://github.com/facebook/jest/pull/12342))
-   `[jest-transform]` Update `write-file-atomic` to v4 ([#&#8203;12357](https://github.com/facebook/jest/pull/12357))
-   `[jest-types]` \[**BREAKING**] Remove `Config.Glob` and `Config.Path` ([#&#8203;12406](https://github.com/facebook/jest/pull/12406))
-   `[jest]` Use `index.ts` instead of `jest.ts` as main export ([#&#8203;12329](https://github.com/facebook/jest/pull/12329))

##### Performance

-   `[jest-haste-map]` \[**BREAKING**] Default to `node` crawler over shelling out to `find` if `watchman` is not enabled ([#&#8203;12320](https://github.com/facebook/jest/pull/12320))

### [`v27.5.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2751)

[Compare Source](https://github.com/facebook/jest/compare/v27.5.0...v27.5.1)

##### Features

-   `[jest-config]` Support comments in JSON config file ([#&#8203;12316](https://github.com/facebook/jest/pull/12316))
-   `[pretty-format]` Expose `ConvertAnsi` plugin ([#&#8203;12308](https://github.com/facebook/jest/pull/12308))

##### Fixes

-   `[expect]` Add type definitions for asymmetric `closeTo` matcher ([#&#8203;12304](https://github.com/facebook/jest/pull/12304))
-   `[jest-cli]` Load binary via exported API ([#&#8203;12315](https://github.com/facebook/jest/pull/12315))
-   `[jest-config]` Replace `jsonlint` with `parse-json` ([#&#8203;12316](https://github.com/facebook/jest/pull/12316))
-   `[jest-repl]` Make module importable ([#&#8203;12311](https://github.com/facebook/jest/pull/12311) & [#&#8203;12315](https://github.com/facebook/jest/pull/12315))

##### Chore & Maintenance

-   `[*]` Avoid anonymous default exports ([#&#8203;12313](https://github.com/facebook/jest/pull/12313))

### [`v27.5.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2750)

[Compare Source](https://github.com/facebook/jest/compare/v27.4.7...v27.5.0)

##### Features

-   `[expect]` Add asymmetric matcher `expect.closeTo` ([#&#8203;12243](https://github.com/facebook/jest/pull/12243))
-   `[jest-mock]` Added `mockFn.mock.lastCall` to retrieve last argument ([#&#8203;12285](https://github.com/facebook/jest/pull/12285))

##### Fixes

-   `[expect]` Add a fix for `.toHaveProperty('')` ([#&#8203;12251](https://github.com/facebook/jest/pull/12251))
-   `[jest-each, @&#8203;jest/globals]` Allow passing `ReadonlyArray` type of a table to `describe.each` and `test.each` ([#&#8203;12297](https://github.com/facebook/jest/pull/12297))
-   `[@jest/globals]` Add missing `options` argument to `jest.doMock` typing ([#&#8203;12292](https://github.com/facebook/jest/pull/12292))
-   `[jest-environment-node]` Add `atob` and `btoa` ([#&#8203;12269](https://github.com/facebook/jest/pull/12269))
-   `[jest-matcher-utils]` Correct diff for expected asymmetric matchers ([#&#8203;12264](https://github.com/facebook/jest/pull/12264))
-   `[jest-message-util]` Fix `.getTopFrame()` (and `toMatchInlineSnapshot()`) with `mjs` files ([#&#8203;12277](https://github.com/facebook/jest/pull/12277))

##### Chore & Maintenance

-   `[*]` Update `graceful-fs` to `^4.2.9` ([#&#8203;11749](https://github.com/facebook/jest/pull/11749))

##### Performance

-   `[jest-resolve]` perf: skip error creation on not found `stat` calls ([#&#8203;11749](https://github.com/facebook/jest/pull/11749))

### [`v27.4.7`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2747)

[Compare Source](https://github.com/facebook/jest/compare/v27.4.6...v27.4.7)

##### Fixes

-   `jest-config` Add missing `@babel/core` dependency ([#&#8203;12216](https://github.com/facebook/jest/pull/12216))

### [`v27.4.6`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2746)

[Compare Source](https://github.com/facebook/jest/compare/v27.4.5...v27.4.6)

##### Fixes

-   `[jest-environment-node]` Add `AbortSignal` ([#&#8203;12157](https://github.com/facebook/jest/pull/12157))
-   `[jest-environment-node]` Add Missing node global `performance` ([#&#8203;12002](https://github.com/facebook/jest/pull/12002))
-   `[jest-runtime]` Handle missing `mocked` property ([#&#8203;12213](https://github.com/facebook/jest/pull/12213))
-   `[@jest/transform]` Update dependency package `pirates` to 4.0.4 ([#&#8203;12002](https://github.com/facebook/jest/pull/12002))

##### Performance

-   `jest-config` perf: only register ts-node once when loading TS config files ([#&#8203;12160](https://github.com/facebook/jest/pull/12160))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC43NC4yIiwidXBkYXRlZEluVmVyIjoiMzQuNzQuMiJ9-->

Co-authored-by: Renovate Bot <renovate@vylpes.com>
Reviewed-on: https://gitea.vylpes.xyz/RabbitLabs/vylbot-app/pulls/241
Co-authored-by: RenovateBot <renovate@vylpes.com>
Co-committed-by: RenovateBot <renovate@vylpes.com>
@sunilsurana
Copy link

Hi, We have been unable to upgrade our node beyond 16.10.0 and have been stuck since higher version regresses the performance of our jest tests. Is there any solution coming for this from node?

@RaphaelMechali
Copy link

Same here...

@nicolo-ribaudo
Copy link
Contributor

You might try using https://www.npmjs.com/package/jest-light-runner to use Jest without vm.Script.

@joyeecheung
Copy link
Member

joyeecheung commented Sep 5, 2023

FYI there is a rewrite of the vm.Script / vm.*Module memory management that might fix many issues in #48510 (the OP referenced the bugs with small reproducible cases that can be confirmed to be fixed. Can't say it definitely fixes other bugs without reproducible examples, but it should fix a bunch more issues in the issue tracker that I didn't dig out). It is pending on a V8 patch which is probably going to be relanded soon. (The fix however relies on ABI-breaking changes in V8 so it may or may not get released in v20.x)

Vylpes pushed a commit to Vylpes/Droplet that referenced this issue Sep 14, 2023
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [jest](https://jestjs.io/) ([source](https://github.com/facebook/jest)) | devDependencies | major | [`^26.6.3` -> `^29.0.0`](https://renovatebot.com/diffs/npm/jest/26.6.3/29.5.0) |
| [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/jest) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped)) | devDependencies | major | [`^26.0.23` -> `^29.0.0`](https://renovatebot.com/diffs/npm/@types%2fjest/26.0.23/29.5.2) |

---

### Release Notes

<details>
<summary>facebook/jest</summary>

### [`v29.5.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2950)

[Compare Source](https://github.com/facebook/jest/compare/v29.4.3...v29.5.0)

##### Features

-   `[jest-changed-files]` Support Sapling ([#&#8203;13941](https://github.com/facebook/jest/pull/13941))
-   `[jest-circus, @&#8203;jest/cli, jest-config]` Add feature to randomize order of tests via CLI flag or through the config file([#&#8203;12922](https://github.com/facebook/jest/pull/12922))
-   `[jest-cli, jest-config, @&#8203;jest/core, jest-haste-map, @&#8203;jest/reporters, jest-runner, jest-runtime, @&#8203;jest/types]` Add `workerThreads` configuration option to allow using [worker threads](https://nodejs.org/dist/latest/docs/api/worker_threads.html) for parallelization ([#&#8203;13939](https://github.com/facebook/jest/pull/13939))
-   `[jest-cli]` Export `yargsOptions` ([#&#8203;13970](https://github.com/facebook/jest/pull/13970))
-   `[jest-config]` Add `openHandlesTimeout` option to configure possible open handles warning. ([#&#8203;13875](https://github.com/facebook/jest/pull/13875))
-   `[@jest/create-cache-key-function]` Allow passing `length` argument to `createCacheKey()` function and set its default value to `16` on Windows ([#&#8203;13827](https://github.com/facebook/jest/pull/13827))
-   `[jest-message-util]` Add support for [AggregateError](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError) ([#&#8203;13946](https://github.com/facebook/jest/pull/13946) & [#&#8203;13947](https://github.com/facebook/jest/pull/13947))
-   `[jest-message-util]` Add support for [Error causes](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause) in `test` and `it` ([#&#8203;13935](https://github.com/facebook/jest/pull/13935) & [#&#8203;13966](https://github.com/facebook/jest/pull/13966))
-   `[jest-reporters]` Add `summaryThreshold` option to summary reporter to allow overriding the internal threshold that is used to print the summary of all failed tests when the number of test suites surpasses it ([#&#8203;13895](https://github.com/facebook/jest/pull/13895))
-   `[jest-runtime]` Expose `@sinonjs/fake-timers` async APIs functions `advanceTimersByTimeAsync(msToRun)` (`tickAsync(msToRun)`), `advanceTimersToNextTimerAsync(steps)` (`nextAsync`), `runAllTimersAsync` (`runAllAsync`), and `runOnlyPendingTimersAsync` (`runToLastAsync`) ([#&#8203;13981](https://github.com/facebook/jest/pull/13981))
-   `[jest-runtime, @&#8203;jest/transform]` Allow V8 coverage provider to collect coverage from files which were not loaded explicitly ([#&#8203;13974](https://github.com/facebook/jest/pull/13974))
-   `[jest-snapshot]` Add support to `cts` and `mts` TypeScript files to inline snapshots ([#&#8203;13975](https://github.com/facebook/jest/pull/13975))
-   `[jest-worker]` Add `start` method to worker farms ([#&#8203;13937](https://github.com/facebook/jest/pull/13937))
-   `[jest-worker]` Support passing a URL as path to worker ([#&#8203;13982](https://github.com/facebook/jest/pull/13982))

##### Fixes

-   `[babel-plugin-jest-hoist]` Fix unwanted hoisting of nested `jest` usages ([#&#8203;13952](https://github.com/facebook/jest/pull/13952))
-   `[jest-circus]` Send test case results for `todo` tests ([#&#8203;13915](https://github.com/facebook/jest/pull/13915))
-   `[jest-circus]` Update message printed on test timeout ([#&#8203;13830](https://github.com/facebook/jest/pull/13830))
-   `[jest-circus]` Avoid creating the word "testfalse" when `takesDoneCallback` is `false` in the message printed on test timeout AND updated timeouts test ([#&#8203;13954](https://github.com/facebook/jest/pull/13954))
-   `[jest-environment-jsdom]` Stop setting `document` to `null` on teardown ([#&#8203;13972](https://github.com/facebook/jest/pull/13972))
-   `[@jest/expect-utils]` Update `toStrictEqual()` to be able to check `jest.fn().mock.calls` ([#&#8203;13960](https://github.com/facebook/jest/pull/13960))
-   `[@jest/test-result]` Allow `TestResultsProcessor` type to return a Promise ([#&#8203;13950](https://github.com/facebook/jest/pull/13950))

##### Chore & Maintenance

-   `[jest-snapshot]` Remove dependency on `jest-haste-map` ([#&#8203;13977](https://github.com/facebook/jest/pull/13977))

### [`v29.4.3`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2943)

[Compare Source](https://github.com/facebook/jest/compare/v29.4.2...v29.4.3)

##### Features

-   `[expect]` Update `toThrow()` to be able to use error `cause`s ([#&#8203;13606](https://github.com/facebook/jest/pull/13606))
-   `[jest-core]` allow to use `workerIdleMemoryLimit` with only 1 worker or `runInBand` option ([#&#8203;13846](https://github.com/facebook/jest/pull/13846))
-   `[jest-message-util]` Add support for [error `cause`s](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause) ([#&#8203;13868](https://github.com/facebook/jest/pull/13868) & [#&#8203;13912](https://github.com/facebook/jest/pull/13912))
-   `[jest-runtime]` Revert `import assertions` for JSON modules as it's been relegated to Stage 2 ([#&#8203;13911](https://github.com/facebook/jest/pull/13911))

##### Fixes

-   `[@jest/expect-utils]` `subsetEquality` should consider also an object's inherited string keys ([#&#8203;13824](https://github.com/facebook/jest/pull/13824))
-   `[jest-mock]` Clear mock state when `jest.restoreAllMocks()` is called ([#&#8203;13867](https://github.com/facebook/jest/pull/13867))
-   `[jest-mock]` Prevent `mockImplementationOnce` and `mockReturnValueOnce` bleeding into `withImplementation` ([#&#8203;13888](https://github.com/facebook/jest/pull/13888))
-   `[jest-mock]` Do not restore mocks when `jest.resetAllMocks()` is called ([#&#8203;13866](https://github.com/facebook/jest/pull/13866))

### [`v29.4.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2942)

[Compare Source](https://github.com/facebook/jest/compare/v29.4.1...v29.4.2)

##### Features

-   `[@jest/core]` Instrument significant lifecycle events with [`performance.mark()`](https://nodejs.org/docs/latest-v16.x/api/perf_hooks.html#performancemarkname-options) ([#&#8203;13859](https://github.com/facebook/jest/pull/13859))

##### Fixes

-   `[expect, @&#8203;jest/expect]` Provide type of `actual` as a generic argument to `Matchers` to allow better-typed extensions ([#&#8203;13848](https://github.com/facebook/jest/pull/13848))
-   `[jest-circus]` Added explicit mention of test failing because `done()` is not being called in error message ([#&#8203;13847](https://github.com/facebook/jest/pull/13847))
-   `[jest-runtime]` Handle CJS re-exports of node core modules from ESM ([#&#8203;13856](https://github.com/facebook/jest/pull/13856))
-   `[jest-transform]` Downgrade `write-file-atomic` to v4 ([#&#8203;13853](https://github.com/facebook/jest/pull/13853))
-   `[jest-worker]` Ignore IPC messages not intended for Jest ([#&#8203;13543](https://github.com/facebook/jest/pull/13543))

##### Chore & Maintenance

-   `[*]` make sure to exclude `.eslintcache` from published module ([#&#8203;13832](https://github.com/facebook/jest/pull/13832))
-   `[docs]` Cleanup incorrect links in CHANGELOG.md ([#&#8203;13857](https://github.com/facebook/jest/pull/13857))

### [`v29.4.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2941)

[Compare Source](https://github.com/facebook/jest/compare/v29.4.0...v29.4.1)

##### Features

-   `[expect, jest-circus, @&#8203;jest/types]` Implement `numPassingAsserts` of testResults to track the number of passing asserts in a test ([#&#8203;13795](https://github.com/facebook/jest/pull/13795))
-   `[jest-core]` Add newlines to JSON output ([#&#8203;13817](https://github.com/facebook/jest/pull/13817))
-   `[@jest/reporters]` Automatic log folding in GitHub Actions Reporter ([#&#8203;13626](https://github.com/facebook/jest/pull/13626))

##### Fixes

-   `[@jest/expect-utils]` `toMatchObject` diffs should include `Symbol` properties ([#&#8203;13810](https://github.com/facebook/jest/pull/13810))
-   `[jest-runtime]` Handle missing `replaceProperty` ([#&#8203;13823](https://github.com/facebook/jest/pull/13823))
-   `[@jest/types]` Add partial support for `done` callbacks in typings of `each` ([#&#8203;13756](https://github.com/facebook/jest/pull/13756))

### [`v29.4.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2940)

[Compare Source](https://github.com/facebook/jest/compare/v29.3.1...v29.4.0)

##### Features

-   `[expect, @&#8203;jest/expect-utils]` Support custom equality testers ([#&#8203;13654](https://github.com/facebook/jest/pull/13654))
-   `[jest-config, jest-worker]` Use `os.availableParallelism` if available to calculate number of workers to spawn ([#&#8203;13738](https://github.com/facebook/jest/pull/13738))
-   `[@jest/globals, jest-mock]` Add `jest.replaceProperty()` that replaces property value ([#&#8203;13496](https://github.com/facebook/jest/pull/13496))
-   `[jest-haste-map]` ignore Sapling vcs directories (`.sl/`) ([#&#8203;13674](https://github.com/facebook/jest/pull/13674))
-   `[jest-resolve]` Support subpath imports ([#&#8203;13705](https://github.com/facebook/jest/pull/13705), [#&#8203;13723](https://github.com/facebook/jest/pull/13723), [#&#8203;13777](https://github.com/facebook/jest/pull/13777))
-   `[jest-runtime]` Add `jest.isolateModulesAsync` for scoped module initialization of asynchronous functions ([#&#8203;13680](https://github.com/facebook/jest/pull/13680))
-   `[jest-runtime]` Add `jest.isEnvironmentTornDown` function ([#&#8203;13741](https://github.com/facebook/jest/pull/13741))
-   `[jest-test-result]` Added `skipped` and `focused` status to `FormattedTestResult` ([#&#8203;13700](https://github.com/facebook/jest/pull/13700))
-   `[jest-transform]` Support for asynchronous `createTransformer` ([#&#8203;13762](https://github.com/facebook/jest/pull/13762))

##### Fixes

-   `[jest-environment-node]` Fix non-configurable globals ([#&#8203;13687](https://github.com/facebook/jest/pull/13687))
-   `[@jest/expect-utils]` `toMatchObject` should handle `Symbol` properties ([#&#8203;13639](https://github.com/facebook/jest/pull/13639))
-   `[jest-mock]` Fix `mockReset` and `resetAllMocks` `undefined` return value([#&#8203;13692](https://github.com/facebook/jest/pull/13692))
-   `[jest-resolve]` Add global paths to `require.resolve.paths` ([#&#8203;13633](https://github.com/facebook/jest/pull/13633))
-   `[jest-resolve]` Correct node core module detection when using `node:` specifiers ([#&#8203;13806](https://github.com/facebook/jest/pull/13806))
-   `[jest-runtime]` Support WASM files that import JS resources ([#&#8203;13608](https://github.com/facebook/jest/pull/13608))
-   `[jest-runtime]` Use the `scriptTransformer` cache in `jest-runner` ([#&#8203;13735](https://github.com/facebook/jest/pull/13735))
-   `[jest-runtime]` Enforce import assertions when importing JSON in ESM ([#&#8203;12755](https://github.com/facebook/jest/pull/12755) & [#&#8203;13805](https://github.com/facebook/jest/pull/13805))
-   `[jest-snapshot]` Make sure to import `babel` outside of the sandbox ([#&#8203;13694](https://github.com/facebook/jest/pull/13694))
-   `[jest-transform]` Ensure the correct configuration is passed to preprocessors specified multiple times in the `transform` option ([#&#8203;13770](https://github.com/facebook/jest/pull/13770))

##### Chore & Maintenance

-   `[@jest/fake-timers]` Update `@sinonjs/fake-timers` ([#&#8203;13612](https://github.com/facebook/jest/pull/13612))
-   `[docs]` Improve custom puppeteer example to prevent worker warnings ([#&#8203;13619](https://github.com/facebook/jest/pull/13619))

### [`v29.3.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2931)

[Compare Source](https://github.com/facebook/jest/compare/v29.3.0...v29.3.1)

##### Fixes

-   `[jest-config]` Do not warn about `preset` in `ProjectConfig` ([#&#8203;13583](https://github.com/facebook/jest/pull/13583))

##### Performance

-   `[jest-transform]` Defer creation of cache directory ([#&#8203;13420](https://github.com/facebook/jest/pull/13420))

### [`v29.3.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2930)

[Compare Source](https://github.com/facebook/jest/compare/v29.2.2...v29.3.0)

##### Features

-   `[jest-runtime]` Support WebAssembly (Wasm) imports in ESM modules ([#&#8203;13505](https://github.com/facebook/jest/pull/13505))

##### Fixes

-   `[jest-config]` Add config validation for `projects` option ([#&#8203;13565](https://github.com/facebook/jest/pull/13565))
-   `[jest-mock]` Treat cjs modules as objects so they can be mocked ([#&#8203;13513](https://github.com/facebook/jest/pull/13513))
-   `[jest-worker]` Throw an error instead of hanging when jest workers terminate unexpectedly ([#&#8203;13566](https://github.com/facebook/jest/pull/13566))

##### Chore & Maintenance

-   `[@jest/transform]` Update `convert-source-map` ([#&#8203;13509](https://github.com/facebook/jest/pull/13509))
-   `[docs]` Mention `toStrictEqual` in UsingMatchers docs. ([#&#8203;13560](https://github.com/facebook/jest/pull/13560))

### [`v29.2.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2922)

[Compare Source](https://github.com/facebook/jest/compare/v29.2.1...v29.2.2)

##### Fixes

-   `[@jest/test-sequencer]` Make sure sharding does not produce empty groups ([#&#8203;13476](https://github.com/facebook/jest/pull/13476))
-   `[jest-circus]` Test marked as `todo` are shown as todo when inside a focussed describe ([#&#8203;13504](https://github.com/facebook/jest/pull/13504))
-   `[jest-mock]` Ensure mock resolved and rejected values are promises from correct realm ([#&#8203;13503](https://github.com/facebook/jest/pull/13503))
-   `[jest-snapshot]` Don't highlight passing asymmetric property matchers in snapshot diff ([#&#8203;13480](https://github.com/facebook/jest/issues/13480))

##### Chore & Maintenance

-   `[docs]` Update link to Jest 28 upgrade guide in error message ([#&#8203;13483](https://github.com/facebook/jest/pull/13483))
-   `[jest-runner, jest-watcher]` Update `emittery` ([#&#8203;13490](https://github.com/facebook/jest/pull/13490))

### [`v29.2.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2921)

[Compare Source](https://github.com/facebook/jest/compare/v29.2.0...v29.2.1)

##### Features

-   `[@jest/globals, jest-mock]` Add `jest.Spied*` utility types ([#&#8203;13440](https://github.com/facebook/jest/pull/13440))

##### Fixes

-   `[jest-environment-node]` make `globalThis.performance` writable for Node 19 and fake timers ([#&#8203;13467](https://github.com/facebook/jest/pull/13467))
-   `[jest-mock]` Revert [#&#8203;13398](https://github.com/facebook/jest/pull/13398) to restore mocking of setters ([#&#8203;13472](https://github.com/facebook/jest/pull/13472))

##### Performance

-   `[*]` Use sha1 instead of sha256 for hashing ([#&#8203;13421](https://github.com/facebook/jest/pull/13421))

### [`v29.2.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2920)

[Compare Source](https://github.com/facebook/jest/compare/v29.1.2...v29.2.0)

##### Features

-   `[@jest/cli, jest-config]` A seed for the test run will be randomly generated, or set by a CLI option ([#&#8203;13400](https://github.com/facebook/jest/pull/13400))
-   `[@jest/cli, jest-config]` `--show-seed` will display the seed value in the report, and can be set via a CLI flag or through the config file ([#&#8203;13400](https://github.com/facebook/jest/pull/13400))
-   `[jest-config]` Add `readInitialConfig` utility function ([#&#8203;13356](https://github.com/facebook/jest/pull/13356))
-   `[jest-core]` Allow `testResultsProcessor` to be async ([#&#8203;13343](https://github.com/facebook/jest/pull/13343))
-   `[@jest/environment, jest-environment-node, jest-environment-jsdom, jest-runtime]` Add `getSeed()` to the `jest` object ([#&#8203;13400](https://github.com/facebook/jest/pull/13400))
-   `[expect, @&#8203;jest/expect-utils]` Allow `isA` utility to take a type argument ([#&#8203;13355](https://github.com/facebook/jest/pull/13355))
-   `[expect]` Expose `AsyncExpectationResult` and `SyncExpectationResult` types ([#&#8203;13411](https://github.com/facebook/jest/pull/13411))

##### Fixes

-   `[babel-plugin-jest-hoist]` Ignore `TSTypeQuery` when checking for hoisted references ([#&#8203;13367](https://github.com/facebook/jest/pull/13367))
-   `[jest-core]` Fix `detectOpenHandles` false positives for some special objects such as `TLSWRAP` ([#&#8203;13414](https://github.com/facebook/jest/pull/13414))
-   `[jest-mock]` Fix mocking of getters and setters on classes ([#&#8203;13398](https://github.com/facebook/jest/pull/13398))
-   `[jest-reporters]` Revert: Transform file paths into hyperlinks ([#&#8203;13399](https://github.com/facebook/jest/pull/13399))
-   `[@jest/types]` Infer type of `each` table correctly when the table is a tuple or array ([#&#8203;13381](https://github.com/facebook/jest/pull/13381))
-   `[@jest/types]` Rework typings to allow the `*ReturnedWith` matchers to be called with no argument ([#&#8203;13385](https://github.com/facebook/jest/pull/13385))

##### Chore & Maintenance

-   `[*]` Update `@babel/*` deps, resulting in slightly different stack traces for `each` ([#&#8203;13422](https://github.com/facebook/jest/pull/13422))

##### Performance

-   `[jest-runner]` Do not instrument v8 coverage data if coverage should not be collected ([#&#8203;13282](https://github.com/facebook/jest/pull/13282))

### [`v29.1.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2912)

[Compare Source](https://github.com/facebook/jest/compare/v29.1.1...v29.1.2)

##### Fixes

-   `[expect, @&#8203;jest/expect]` Revert buggy inference of argument types for `*CalledWith` and `*ReturnedWith` matchers introduced in 29.1.0 ([#&#8203;13339](https://github.com/facebook/jest/pull/13339))
-   `[jest-worker]` Add missing dependency on `jest-util` ([#&#8203;13341](https://github.com/facebook/jest/pull/13341))

### [`v29.1.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2911)

[Compare Source](https://github.com/facebook/jest/compare/v29.1.0...v29.1.1)

##### Fixes

-   `[jest-mock]` Revert [#&#8203;13145](https://github.com/facebook/jest/pull/13145) which broke mocking of transpiled ES modules

### [`v29.1.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2910)

[Compare Source](https://github.com/facebook/jest/compare/v29.0.3...v29.1.0)

##### Features

-   `[expect, @&#8203;jest/expect]` Support type inference for function parameters in `CalledWith` assertions ([#&#8203;13268](https://github.com/facebook/jest/pull/13268))
-   `[expect, @&#8203;jest/expect]` Infer type of `*ReturnedWith` matchers argument ([#&#8203;13278](https://github.com/facebook/jest/pull/13278))
-   `[@jest/environment, jest-runtime]` Allow `jest.requireActual` and `jest.requireMock` to take a type argument ([#&#8203;13253](https://github.com/facebook/jest/pull/13253))
-   `[@jest/environment]` Allow `jest.mock` and `jest.doMock` to take a type argument ([#&#8203;13254](https://github.com/facebook/jest/pull/13254))
-   `[@jest/fake-timers]` Add `jest.now()` to return the current fake clock time ([#&#8203;13244](https://github.com/facebook/jest/pull/13244), [#&#8203;13246](https://github.com/facebook/jest/pull/13246))
-   `[@jest/mock]` Add `withImplementation` method for temporarily overriding a mock ([#&#8203;13281](https://github.com/facebook/jest/pull/13281))
-   `[expect]` Export `toThrow*` matchers ([#&#8203;13328](https://github.com/facebook/jest/pull/13328))

##### Fixes

-   `[jest-circus, jest-jasmine2]` Fix error messages for Node's `assert.throes` ([#&#8203;13322](https://github.com/facebook/jest/pull/13322))
-   `[jest-haste-map]` Remove `__proto__` usage ([#&#8203;13256](https://github.com/facebook/jest/pull/13256))
-   `[jest-mock]` Improve `spyOn` typings to handle optional properties ([#&#8203;13247](https://github.com/facebook/jest/pull/13247))
-   `[jest-mock]` Fix mocking of getters and setters on classes ([#&#8203;13145](https://github.com/facebook/jest/pull/13145))
-   `[jest-snapshot]` Throw useful error when an array is passed as property matchers ([#&#8203;13263](https://github.com/facebook/jest/pull/13263))
-   `[jest-snapshot]` Prioritize parser used in the project ([#&#8203;13323](https://github.com/facebook/jest/pull/13323))
-   `[jest-transform]` Attempt to work around issues with atomic writes on Windows ([#&#8203;11423](https://github.com/facebook/jest/pull/11423))

### [`v29.0.3`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2903)

[Compare Source](https://github.com/facebook/jest/compare/v29.0.2...v29.0.3)

##### Features

-   `[@jest/environment, jest-runtime]` Allow passing a generic type argument to `jest.createMockFromModule<T>()` method ([#&#8203;13202](https://github.com/facebook/jest/pull/13202))
-   `[expect]` Expose `ExpectationResult` type ([#&#8203;13240](https://github.com/facebook/jest/pull/13240))
-   `[jest-snapshot]` Expose `Context` type ([#&#8203;13240](https://github.com/facebook/jest/pull/13240))
-   `[@jest/globals]` Add `jest.Mock` type helper ([#&#8203;13235](https://github.com/facebook/jest/pull/13235))

##### Fixes

-   `[jest-core]` Capture `execError` during `TestScheduler.scheduleTests` and dispatch to reporters ([#&#8203;13203](https://github.com/facebook/jest/pull/13203))
-   `[jest-resolve]` Make sure to resolve module paths after looking at `exports` ([#&#8203;13242](https://github.com/facebook/jest/pull/13242))
-   `[jest-resolve]` Improve error on module not found deep in the `require` stack ([#&#8203;8704](https://github.com/facebook/jest/pull/8704))
-   `[jest-snapshot]` Fix typings of snapshot matchers ([#&#8203;13240](https://github.com/facebook/jest/pull/13240))

##### Chore & Maintenance

-   `[*]` Fix inconsistent workspace prefixes ([#&#8203;13217](https://github.com/facebook/jest/pull/13217))
-   `[jest-haste-map]` Expose a minimal public API to TypeScript ([#&#8203;13023](https://github.com/facebook/jest/pull/13023))

### [`v29.0.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2902)

[Compare Source](https://github.com/facebook/jest/compare/v29.0.1...v29.0.2)

##### Features

-   `[jest-transform]` Expose `TransformFactory` type ([#&#8203;13184](https://github.com/facebook/jest/pull/13184))

##### Fixes

-   `[babel-plugin-jest-hoist]` Support imported `jest` in mock factory ([#&#8203;13188](https://github.com/facebook/jest/pull/13188))
-   `[jest-mock]` Align the behavior and return type of `generateFromMetadata` method ([#&#8203;13207](https://github.com/facebook/jest/pull/13207))
-   `[jest-runtime]` Support `jest.resetModules()` with ESM ([#&#8203;13211](https://github.com/facebook/jest/pull/13211))

### [`v29.0.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2901)

[Compare Source](https://github.com/facebook/jest/compare/v29.0.0...v29.0.1)

##### Fixes

-   `[jest-snapshot]` Pass `snapshotFormat` through when diffing snapshots ([#&#8203;13181](https://github.com/facebook/jest/pull/13181))

### [`v29.0.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2900)

[Compare Source](https://github.com/facebook/jest/compare/v28.1.3...v29.0.0)

##### Features

-   `[expect]` \[**BREAKING**] Differentiate between `MatcherContext` `MatcherUtils` and `MatcherState` types ([#&#8203;13141](https://github.com/facebook/jest/pull/13141))
-   `[jest-circus]` Add support for `test.failing.each` ([#&#8203;13142](https://github.com/facebook/jest/pull/13142))
-   `[jest-config]` \[**BREAKING**] Make `snapshotFormat` default to `escapeString: false` and `printBasicPrototype: false` ([#&#8203;13036](https://github.com/facebook/jest/pull/13036))
-   `[jest-config]` \[**BREAKING**] Remove undocumented `collectCoverageOnlyFrom` option ([#&#8203;13156](https://github.com/facebook/jest/pull/13156))
-   `[jest-environment-jsdom]` \[**BREAKING**] Upgrade to `jsdom@20` ([#&#8203;13037](https://github.com/facebook/jest/pull/13037), [#&#8203;13058](https://github.com/facebook/jest/pull/13058))
-   `[@jest/globals]` Add `jest.Mocked`, `jest.MockedClass`, `jest.MockedFunction` and `jest.MockedObject` utility types ([#&#8203;12727](https://github.com/facebook/jest/pull/12727))
-   `[jest-mock]` \[**BREAKING**] Refactor `Mocked*` utility types. `MaybeMockedDeep` and `MaybeMocked` became `Mocked` and `MockedShallow` respectively; only deep mocked variants of `MockedClass`, `MockedFunction` and `MockedObject` are exported ([#&#8203;13123](https://github.com/facebook/jest/pull/13123), [#&#8203;13124](https://github.com/facebook/jest/pull/13124))
-   `[jest-mock]` \[**BREAKING**] Change the default `jest.mocked` helper’s behavior to deep mocked ([#&#8203;13125](https://github.com/facebook/jest/pull/13125))
-   `[jest-snapshot]` \[**BREAKING**] Let `babel` find config when updating inline snapshots ([#&#8203;13150](https://github.com/facebook/jest/pull/13150))
-   `[@jest/test-result, @&#8203;jest/types]` \[**BREAKING**] Replace `Bytes` and `Milliseconds` types with `number` ([#&#8203;13155](https://github.com/facebook/jest/pull/13155))
-   `[jest-worker]` Adds `workerIdleMemoryLimit` option which is used as a check for worker memory leaks >= Node 16.11.0 and recycles child workers as required ([#&#8203;13056](https://github.com/facebook/jest/pull/13056), [#&#8203;13105](https://github.com/facebook/jest/pull/13105), [#&#8203;13106](https://github.com/facebook/jest/pull/13106), [#&#8203;13107](https://github.com/facebook/jest/pull/13107))
-   `[pretty-format]` \[**BREAKING**] Remove `ConvertAnsi` plugin in favour of `jest-serializer-ansi-escapes` ([#&#8203;13040](https://github.com/facebook/jest/pull/13040))
-   `[pretty-format]` Allow to opt out from sorting object keys with `compareKeys: null` ([#&#8203;12443](https://github.com/facebook/jest/pull/12443))

##### Fixes

-   `[jest-config]` Fix testing multiple projects with TypeScript config files ([#&#8203;13099](https://github.com/facebook/jest/pull/13099))
-   `[@jest/expect-utils]` Fix deep equality of ImmutableJS Record ([#&#8203;13055](https://github.com/facebook/jest/pull/13055))
-   `[jest-haste-map]` Increase the maximum possible file size that jest-haste-map can handle ([#&#8203;13094](https://github.com/facebook/jest/pull/13094))
-   `[jest-runtime]` Properly support CJS re-exports from dual packages ([#&#8203;13170](https://github.com/facebook/jest/pull/13170))
-   `[jest-snapshot]` Make `prettierPath` optional in `SnapshotState` ([#&#8203;13149](https://github.com/facebook/jest/pull/13149))
-   `[jest-snapshot]` Fix parsing error from inline snapshot files with `JSX` ([#&#8203;12760](https://github.com/facebook/jest/pull/12760))
-   `[jest-worker]` When a process runs out of memory worker exits correctly and doesn't spin indefinitely ([#&#8203;13054](https://github.com/facebook/jest/pull/13054))

##### Chore & Maintenance

-   `[*]` \[**BREAKING**] Drop support for Node v12 and v17 ([#&#8203;13033](https://github.com/facebook/jest/pull/13033))
-   `[docs]` Fix webpack name ([#&#8203;13049](https://github.com/facebook/jest/pull/13049))
-   `[docs]` Explicit how to set `n` for `--bail` ([#&#8203;13128](https://github.com/facebook/jest/pull/13128))
-   `[docs]` Update Enzyme URL ([#&#8203;13166](https://github.com/facebook/jest/pull/13166))
-   `[jest-leak-detector]` Remove support for `weak-napi` ([#&#8203;13035](https://github.com/facebook/jest/pull/13035))
-   `[jest-snapshot]` \[**BREAKING**] Require `rootDir` as argument to `SnapshotState` ([#&#8203;13150](https://github.com/facebook/jest/pull/13150))

### [`v28.1.3`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2813)

[Compare Source](https://github.com/facebook/jest/compare/v28.1.2...v28.1.3)

##### Features

-   `[jest-leak-detector]` Use native `FinalizationRegistry` when it exists to get rid of external C dependency ([#&#8203;12973](https://github.com/facebook/jest/pull/12973))

##### Fixes

-   `[jest-changed-files]` Fix a lock-up after repeated invocations ([#&#8203;12757](https://github.com/facebook/jest/issues/12757))
-   `[@jest/expect-utils]` Fix deep equality of ImmutableJS OrderedSets ([#&#8203;12977](https://github.com/facebook/jest/pull/12977))
-   `[jest-mock]` Add index signature support for `spyOn` types ([#&#8203;13013](https://github.com/facebook/jest/pull/13013), [#&#8203;13020](https://github.com/facebook/jest/pull/13020))
-   `[jest-snapshot]` Fix indentation of awaited inline snapshots ([#&#8203;12986](https://github.com/facebook/jest/pull/12986))

##### Chore & Maintenance

-   `[*]` Replace internal usage of `pretty-format/ConvertAnsi` with `jest-serializer-ansi-escapes` ([#&#8203;12935](https://github.com/facebook/jest/pull/12935), [#&#8203;13004](https://github.com/facebook/jest/pull/13004))
-   `[docs]` Update spyOn docs ([#&#8203;13000](https://github.com/facebook/jest/pull/13000))

### [`v28.1.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2812)

[Compare Source](https://github.com/facebook/jest/compare/v28.1.1...v28.1.2)

##### Fixes

-   `[jest-runtime]` Avoid star type import from `@jest/globals` ([#&#8203;12949](https://github.com/facebook/jest/pull/12949))

##### Chore & Maintenance

-   `[docs]` Mention that jest-codemods now supports Sinon ([#&#8203;12898](https://github.com/facebook/jest/pull/12898))

### [`v28.1.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2811)

[Compare Source](https://github.com/facebook/jest/compare/v28.1.0...v28.1.1)

##### Features

-   `[jest]` Expose `Config` type ([#&#8203;12848](https://github.com/facebook/jest/pull/12848))
-   `[@jest/reporters]` Improve `GitHubActionsReporter`s annotation format ([#&#8203;12826](https://github.com/facebook/jest/pull/12826))
-   `[@jest/types]` Infer argument types passed to `test` and `describe` callback functions from `each` tables ([#&#8203;12885](https://github.com/facebook/jest/pull/12885), [#&#8203;12905](https://github.com/facebook/jest/pull/12905))

##### Fixes

-   `[@jest/expect-utils]` Fix deep equality of ImmutableJS OrderedMaps ([#&#8203;12899](https://github.com/facebook/jest/pull/12899))
-   `[jest-docblock]` Handle multiline comments in parseWithComments ([#&#8203;12845](https://github.com/facebook/jest/pull/12845))
-   `[jest-mock]` Improve `spyOn` error messages ([#&#8203;12901](https://github.com/facebook/jest/pull/12901))
-   `[jest-runtime]` Correctly report V8 coverage with `resetModules: true` ([#&#8203;12912](https://github.com/facebook/jest/pull/12912))
-   `[jest-worker]` Make `JestWorkerFarm` helper type to include methods of worker module that take more than one argument ([#&#8203;12839](https://github.com/facebook/jest/pull/12839))

##### Chore & Maintenance

-   `[docs]` Updated docs to indicate that `jest-environment-jsdom` is a separate package [#&#8203;12828](https://github.com/facebook/jest/issues/12828)
-   `[docs]` Document the comments used by coverage providers [#&#8203;12835](https://github.com/facebook/jest/issues/12835)
-   `[docs]` Use `docusaurus-remark-plugin-tab-blocks` to format tabs with code examples ([#&#8203;12859](https://github.com/facebook/jest/pull/12859))
-   `[jest-haste-map]` Bump `walker` version ([#&#8203;12324](https://github.com/facebook/jest/pull/12324))

### [`v28.1.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2810)

[Compare Source](https://github.com/facebook/jest/compare/v28.0.3...v28.1.0)

##### Features

-   `[jest-circus]` Add `failing` test modifier that inverts the behavior of tests ([#&#8203;12610](https://github.com/facebook/jest/pull/12610))
-   `[jest-environment-node, jest-environment-jsdom]` Allow specifying `customExportConditions` ([#&#8203;12774](https://github.com/facebook/jest/pull/12774))

##### Fixes

-   `[expect]` Adjust typings of `lastCalledWith`, `nthCalledWith`, `toBeCalledWith` matchers to allow a case there a mock was called with no arguments ([#&#8203;12807](https://github.com/facebook/jest/pull/12807))
-   `[@jest/expect-utils]` Fix deep equality of ImmutableJS Lists ([#&#8203;12763](https://github.com/facebook/jest/pull/12763))
-   `[jest-core]` Do not collect `SIGNREQUEST` as open handles ([#&#8203;12789](https://github.com/facebook/jest/pull/12789))

##### Chore & Maintenance

-   `[docs]` Specified documentation about `--filter` CLI docs ([#&#8203;12799](https://github.com/facebook/jest/pull/12799))
-   `[@jest-reporters]` Move helper functions from `utils.ts` into separate files ([#&#8203;12782](https://github.com/facebook/jest/pull/12782))
-   `[jest-resolve]` Replace `process.versions.pnp` type declaration with `@types/pnpapi` devDependency ([#&#8203;12783](https://github.com/facebook/jest/pull/12783))

### [`v28.0.3`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2803)

[Compare Source](https://github.com/facebook/jest/compare/v28.0.2...v28.0.3)

##### Fixes

-   `[jest-config]` Normalize `reporters` option defined in presets ([#&#8203;12769](https://github.com/facebook/jest/pull/12769))
-   `[@jest/reporters]` Fix trailing slash in matching `coverageThreshold` key ([#&#8203;12714](https://github.com/facebook/jest/pull/12714))
-   `[jest-resolve]` Fix (experimental) ESM module mocking for re-exports ([#&#8203;12766](https://github.com/facebook/jest/pull/12766))
-   `[@jest/transform]` Throw better error if an invalid return value if encountered ([#&#8203;12764](https://github.com/facebook/jest/pull/12764))

##### Chore & Maintenance

-   `[docs]` Fix typo in `--shard` CLI docs ([#&#8203;12761](https://github.com/facebook/jest/pull/12761))

### [`v28.0.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2802)

[Compare Source](https://github.com/facebook/jest/compare/v28.0.1...v28.0.2)

##### Features

-   `[jest-worker]` Add `JestWorkerFarm` helper type ([#&#8203;12753](https://github.com/facebook/jest/pull/12753))

##### Fixes

-   `[*]` Lower Node 16 requirement to 16.10 from 16.13 due to a [Node bug](https://github.com/nodejs/node/issues/40014) that causes memory and performance issues ([#&#8203;12754](https://github.com/facebook/jest/pull/12754))

### [`v28.0.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2801)

[Compare Source](https://github.com/facebook/jest/compare/v28.0.0...v28.0.1)

##### Features

-   `[jest-resolve]` Expose `ResolverOptions` type ([#&#8203;12736](https://github.com/facebook/jest/pull/12736))

##### Fixes

-   `[expect]` Add missing dependency `jest-util` ([#&#8203;12744](https://github.com/facebook/jest/pull/12744))
-   `[jest-circus]` Improve `test.concurrent` ([#&#8203;12748](https://github.com/facebook/jest/pull/12748))
-   `[jest-resolve]` Correctly throw an error if `jsdom` test environment is used, but not installed ([#&#8203;12749](https://github.com/facebook/jest/pull/12749))

##### Chore & Maintenance

-   `[jest-serializer]` Remove deprecated module from source tree ([#&#8203;12735](https://github.com/facebook/jest/pull/12735))

### [`v28.0.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2800)

[Compare Source](https://github.com/facebook/jest/compare/v27.5.1...v28.0.0)

##### Features

-   `[babel-jest]` Export `createTransformer` function ([#&#8203;12399](https://github.com/facebook/jest/pull/12399))
-   `[expect]` Expose `AsymmetricMatchers`, `MatcherFunction` and `MatcherFunctionWithState` interfaces ([#&#8203;12363](https://github.com/facebook/jest/pull/12363), [#&#8203;12376](https://github.com/facebook/jest/pull/12376))
-   `[jest-circus]` Support error logging before retry ([#&#8203;12201](https://github.com/facebook/jest/pull/12201))
-   `[jest-circus, jest-jasmine2]` Allowed classes and functions as `describe` and `it`/`test` names ([#&#8203;12484](https://github.com/facebook/jest/pull/12484))
-   `[jest-cli, jest-config]` \[**BREAKING**] Remove `testURL` config, use `testEnvironmentOptions.url` instead ([#&#8203;10797](https://github.com/facebook/jest/pull/10797))
-   `[jest-cli, jest-core]` Add `--shard` parameter for distributed parallel test execution ([#&#8203;12546](https://github.com/facebook/jest/pull/12546))
-   `[jest-cli]` \[**BREAKING**] Remove undocumented `--timers` option ([#&#8203;12572](https://github.com/facebook/jest/pull/12572))
-   `[jest-config]` \[**BREAKING**] Stop shipping `jest-environment-jsdom` by default ([#&#8203;12354](https://github.com/facebook/jest/pull/12354))
-   `[jest-config]` \[**BREAKING**] Stop shipping `jest-jasmine2` by default ([#&#8203;12355](https://github.com/facebook/jest/pull/12355))
-   `[jest-config, @&#8203;jest/types]` Add `ci` to `GlobalConfig` ([#&#8203;12378](https://github.com/facebook/jest/pull/12378))
-   `[jest-config]` \[**BREAKING**] Rename `moduleLoader` to `runtime` ([#&#8203;10817](https://github.com/facebook/jest/pull/10817))
-   `[jest-config]` \[**BREAKING**] Rename `extraGlobals` to `sandboxInjectedGlobals` ([#&#8203;10817](https://github.com/facebook/jest/pull/10817))
-   `[jest-config]` \[**BREAKING**] Throw an error instead of showing a warning if multiple configs are used ([#&#8203;12510](https://github.com/facebook/jest/pull/12510))
-   `[jest-config]` \[**BREAKING**] Do not normalize long deprecated configuration options `preprocessorIgnorePatterns`, `scriptPreprocessor`, `setupTestFrameworkScriptFile` and `testPathDirs` ([#&#8203;12701](https://github.com/facebook/jest/pull/12701))
-   `[jest-cli, jest-core]` Add `--ignoreProjects` CLI argument to ignore test suites by project name ([#&#8203;12620](https://github.com/facebook/jest/pull/12620))
-   `[jest-core]` Pass project config to `globalSetup`/`globalTeardown` function as second argument ([#&#8203;12440](https://github.com/facebook/jest/pull/12440))
-   `[jest-core]` Stabilize test runners with event emitters ([#&#8203;12641](https://github.com/facebook/jest/pull/12641))
-   `[jest-core, jest-watcher]` \[**BREAKING**] Move `TestWatcher` class to `jest-watcher` package ([#&#8203;12652](https://github.com/facebook/jest/pull/12652))
-   `[jest-core]` Allow using Summary Reporter as stand-alone reporter ([#&#8203;12687](https://github.com/facebook/jest/pull/12687))
-   `[jest-environment-jsdom]` \[**BREAKING**] Upgrade jsdom to 19.0.0 ([#&#8203;12290](https://github.com/facebook/jest/pull/12290))
-   `[jest-environment-jsdom]` \[**BREAKING**] Add default `browser` condition to `exportConditions` for `jsdom` environment ([#&#8203;11924](https://github.com/facebook/jest/pull/11924))
-   `[jest-environment-jsdom]` \[**BREAKING**] Pass global config to Jest environment constructor for `jsdom` environment ([#&#8203;12461](https://github.com/facebook/jest/pull/12461))
-   `[jest-environment-jsdom]` \[**BREAKING**] Second argument `context` to constructor is mandatory ([#&#8203;12469](https://github.com/facebook/jest/pull/12469))
-   `[jest-environment-node]` \[**BREAKING**] Add default `node` and `node-addon` conditions to `exportConditions` for `node` environment ([#&#8203;11924](https://github.com/facebook/jest/pull/11924))
-   `[jest-environment-node]` \[**BREAKING**] Pass global config to Jest environment constructor for `node` environment ([#&#8203;12461](https://github.com/facebook/jest/pull/12461))
-   `[jest-environment-node]` \[**BREAKING**] Second argument `context` to constructor is mandatory ([#&#8203;12469](https://github.com/facebook/jest/pull/12469))
-   `[jest-environment-node]` Add all available globals to test globals, not just explicit ones ([#&#8203;12642](https://github.com/facebook/jest/pull/12642), [#&#8203;12696](https://github.com/facebook/jest/pull/12696))
-   `[@jest/expect]` New module which extends `expect` with `jest-snapshot` matchers ([#&#8203;12404](https://github.com/facebook/jest/pull/12404), [#&#8203;12410](https://github.com/facebook/jest/pull/12410), [#&#8203;12418](https://github.com/facebook/jest/pull/12418))
-   `[@jest/expect-utils]` New module exporting utils for `expect` ([#&#8203;12323](https://github.com/facebook/jest/pull/12323))
-   `[@jest/fake-timers]` \[**BREAKING**] Rename `timers` configuration option to `fakeTimers` ([#&#8203;12572](https://github.com/facebook/jest/pull/12572))
-   `[@jest/fake-timers]` \[**BREAKING**] Allow `jest.useFakeTimers()` and `projectConfig.fakeTimers` to take an options bag ([#&#8203;12572](https://github.com/facebook/jest/pull/12572))
-   `[jest-haste-map]` \[**BREAKING**] `HasteMap.create` now returns a promise ([#&#8203;12008](https://github.com/facebook/jest/pull/12008))
-   `[jest-haste-map]` Add support for `dependencyExtractor` written in ESM ([#&#8203;12008](https://github.com/facebook/jest/pull/12008))
-   `[jest-mock]` \[**BREAKING**] Rename exported utility types `ClassLike`, `FunctionLike`, `ConstructorLikeKeys`, `MethodLikeKeys`, `PropertyLikeKeys`; remove exports of utility types `ArgumentsOf`, `ArgsType`, `ConstructorArgumentsOf` - TS builtin utility types `ConstructorParameters` and `Parameters` should be used instead ([#&#8203;12435](https://github.com/facebook/jest/pull/12435), [#&#8203;12489](https://github.com/facebook/jest/pull/12489))
-   `[jest-mock]` Improve `isMockFunction` to infer types of passed function ([#&#8203;12442](https://github.com/facebook/jest/pull/12442))
-   `[jest-mock]` \[**BREAKING**] Improve the usage of `jest.fn` generic type argument ([#&#8203;12489](https://github.com/facebook/jest/pull/12489))
-   `[jest-mock]` Add support for auto-mocking async generator functions ([#&#8203;11080](https://github.com/facebook/jest/pull/11080))
-   `[jest-mock]` Add `contexts` member to mock functions ([#&#8203;12601](https://github.com/facebook/jest/pull/12601))
-   `[@jest/reporters]` Add GitHub Actions reporter ([#&#8203;11320](https://github.com/facebook/jest/pull/11320), [#&#8203;12658](https://github.com/facebook/jest/pull/12658))
-   `[@jest/reporters]` Pass `reporterContext` to custom reporter constructors as third argument ([#&#8203;12657](https://github.com/facebook/jest/pull/12657))
-   `[jest-resolve]` \[**BREAKING**] Add support for `package.json` `exports` ([#&#8203;11961](https://github.com/facebook/jest/pull/11961), [#&#8203;12373](https://github.com/facebook/jest/pull/12373))
-   `[jest-resolve]` Support package self-reference ([#&#8203;12682](https://github.com/facebook/jest/pull/12682))
-   `[jest-resolve, jest-runtime]` Add support for `data:` URI import and mock ([#&#8203;12392](https://github.com/facebook/jest/pull/12392))
-   `[jest-resolve, jest-runtime]` Add support for async resolver ([#&#8203;11540](https://github.com/facebook/jest/pull/11540))
-   `[jest-resolve]` \[**BREAKING**] Remove `browser?: boolean` from resolver options, `conditions: ['browser']` should be used instead ([#&#8203;12707](https://github.com/facebook/jest/pull/12707))
-   `[jest-resolve]` Expose `JestResolver`, `AsyncResolver`, `SyncResolver`, `PackageFilter`, `PathFilter` and `PackageJSON` types ([#&#8203;12707](https://github.com/facebook/jest/pull/12707), ([#&#8203;12712](https://github.com/facebook/jest/pull/12712))
-   `[jest-runner]` Allow `setupFiles` module to export an async function ([#&#8203;12042](https://github.com/facebook/jest/pull/12042))
-   `[jest-runner]` Allow passing `testEnvironmentOptions` via docblocks ([#&#8203;12470](https://github.com/facebook/jest/pull/12470))
-   `[jest-runner]` Expose `CallbackTestRunner`, `EmittingTestRunner` abstract classes and `CallbackTestRunnerInterface`, `EmittingTestRunnerInterface` to help typing third party runners ([#&#8203;12646](https://github.com/facebook/jest/pull/12646), [#&#8203;12715](https://github.com/facebook/jest/pull/12715))
-   `[jest-runner]` Lock version of `source-map-support` to 0.5.13 ([#&#8203;12720](https://github.com/facebook/jest/pull/12720))
-   `[jest-runtime]` \[**BREAKING**] `Runtime.createHasteMap` now returns a promise ([#&#8203;12008](https://github.com/facebook/jest/pull/12008))
-   `[jest-runtime]` Calling `jest.resetModules` function will clear FS and transform cache ([#&#8203;12531](https://github.com/facebook/jest/pull/12531))
-   `[jest-runtime]` \[**BREAKING**] Remove `Context` type export, it must be imported from `@jest/test-result` ([#&#8203;12685](https://github.com/facebook/jest/pull/12685))
-   `[jest-runtime]` Add `import.meta.jest` ([#&#8203;12698](https://github.com/facebook/jest/pull/12698))
-   `[@jest/schemas]` New module for JSON schemas for Jest's config ([#&#8203;12384](https://github.com/facebook/jest/pull/12384))
-   `[@jest/source-map]` Migrate from `source-map` to `@jridgewell/trace-mapping` ([#&#8203;12692](https://github.com/facebook/jest/pull/12692))
-   `[jest-transform]` \[**BREAKING**] Make it required for `process()` and `processAsync()` methods to always return structured data ([#&#8203;12638](https://github.com/facebook/jest/pull/12638))
-   `[jest-test-result]` Add duration property to JSON test output ([#&#8203;12518](https://github.com/facebook/jest/pull/12518))
-   `[jest-watcher]` \[**BREAKING**] Make `PatternPrompt` class to take `entityName` as third constructor parameter instead of `this._entityName` ([#&#8203;12591](https://github.com/facebook/jest/pull/12591))
-   `[jest-worker]` \[**BREAKING**] Allow only absolute `workerPath` ([#&#8203;12343](https://github.com/facebook/jest/pull/12343))
-   `[jest-worker]` \[**BREAKING**] Default to advanced serialization when using child process workers ([#&#8203;10983](https://github.com/facebook/jest/pull/10983))
-   `[pretty-format]` New `maxWidth` parameter ([#&#8203;12402](https://github.com/facebook/jest/pull/12402))

##### Fixes

-   `[*]` Use `sha256` instead of `md5` as hashing algortihm for compatibility with FIPS systems ([#&#8203;12722](https://github.com/facebook/jest/pull/12722))
-   `[babel-jest]` \[**BREAKING**] Pass `rootDir` as `root` in Babel's options ([#&#8203;12689](https://github.com/facebook/jest/pull/12689))
-   `[expect]` Move typings of `.not`, `.rejects` and `.resolves` modifiers outside of `Matchers` interface ([#&#8203;12346](https://github.com/facebook/jest/pull/12346))
-   `[expect]` Throw useful error if `expect.extend` is called with invalid matchers ([#&#8203;12488](https://github.com/facebook/jest/pull/12488))
-   `[expect]` Fix `iterableEquality` ignores other properties ([#&#8203;8359](https://github.com/facebook/jest/pull/8359))
-   `[expect]` Fix print for the `closeTo` matcher ([#&#8203;12626](https://github.com/facebook/jest/pull/12626))
-   `[jest-changed-files]` Improve `changedFilesWithAncestor` pattern for Mercurial SCM ([#&#8203;12322](https://github.com/facebook/jest/pull/12322))
-   `[jest-circus, @&#8203;jest/types]` Disallow undefined value in `TestContext` type ([#&#8203;12507](https://github.com/facebook/jest/pull/12507))
-   `[jest-config]` Correctly detect CI environment and update snapshots accordingly ([#&#8203;12378](https://github.com/facebook/jest/pull/12378))
-   `[jest-config]` Pass `moduleTypes` to `ts-node` to enforce CJS when transpiling ([#&#8203;12397](https://github.com/facebook/jest/pull/12397))
-   `[jest-config]` \[**BREAKING**] Add `mjs` and `cjs` to default `moduleFileExtensions` config ([#&#8203;12578](https://github.com/facebook/jest/pull/12578))
-   `[jest-config, jest-haste-map]` Allow searching for tests in `node_modules` by exposing `retainAllFiles` ([#&#8203;11084](https://github.com/facebook/jest/pull/11084))
-   `[jest-core]` \[**BREAKING**] Exit with status `1` if no tests are found with `--findRelatedTests` flag ([#&#8203;12487](https://github.com/facebook/jest/pull/12487))
-   `[jest-core]` Do not report unref-ed subprocesses as open handles ([#&#8203;12705](https://github.com/facebook/jest/pull/12705))
-   `[jest-each]` `%#` is not replaced with index of the test case ([#&#8203;12517](https://github.com/facebook/jest/pull/12517))
-   `[jest-each]` Fixes error message with incorrect count of missing arguments ([#&#8203;12464](https://github.com/facebook/jest/pull/12464))
-   `[jest-environment-jsdom]` Make `jsdom` accessible to extending environments again ([#&#8203;12232](https://github.com/facebook/jest/pull/12232))
-   `[jest-environment-jsdom]` Log JSDOM errors more cleanly ([#&#8203;12386](https://github.com/facebook/jest/pull/12386))
-   `[jest-environment-node]` Add `MessageChannel`, `MessageEvent` to globals ([#&#8203;12553](https://github.com/facebook/jest/pull/12553))
-   `[jest-environment-node]` Add `structuredClone` to globals ([#&#8203;12631](https://github.com/facebook/jest/pull/12631))
-   `[@jest/expect-utils]` \[**BREAKING**] Fix false positives when looking for `undefined` prop ([#&#8203;8923](https://github.com/facebook/jest/pull/8923))
-   `[jest-haste-map]` Don't use partial results if file crawl errors ([#&#8203;12420](https://github.com/facebook/jest/pull/12420))
-   `[jest-haste-map]` Make watchman existence check lazy+async ([#&#8203;12675](https://github.com/facebook/jest/pull/12675))
-   `[jest-jasmine2, jest-types]` \[**BREAKING**] Move all `jasmine` specific types from `@jest/types` to its own package ([#&#8203;12125](https://github.com/facebook/jest/pull/12125))
-   `[jest-jasmine2]` Do not set `duration` to `0` for skipped tests ([#&#8203;12518](https://github.com/facebook/jest/pull/12518))
-   `[jest-matcher-utils]` Pass maxWidth to `pretty-format` to avoid printing every element in arrays by default ([#&#8203;12402](https://github.com/facebook/jest/pull/12402))
-   `[jest-mock]` Fix function overloads for `spyOn` to allow more correct type inference in complex object ([#&#8203;12442](https://github.com/facebook/jest/pull/12442))
-   `[jest-mock]` Handle overridden `Function.name` property ([#&#8203;12674](https://github.com/facebook/jest/pull/12674))
-   `[@jest/reporters]` Notifications generated by the `--notify` flag are no longer persistent in GNOME Shell. ([#&#8203;11733](https://github.com/facebook/jest/pull/11733))
-   `[@jest/reporters]` Move missing icon file which is needed for `NotifyReporter` class. ([#&#8203;12593](https://github.com/facebook/jest/pull/12593))
-   `[@jest/reporters]` Update `v8-to-istanbul` ([#&#8203;12697](https://github.com/facebook/jest/pull/12697))
-   `[jest-resolver]` Call custom resolver with core node.js modules ([#&#8203;12654](https://github.com/facebook/jest/pull/12654))
-   `[jest-runner]` Correctly resolve `source-map-support` ([#&#8203;12706](https://github.com/facebook/jest/pull/12706))
-   `[jest-worker]` Fix `Farm` execution results memory leak ([#&#8203;12497](https://github.com/facebook/jest/pull/12497))

##### Chore & Maintenance

-   `[*]` \[**BREAKING**] Drop support for Node v10 and v15 and target first LTS `16.13.0` ([#&#8203;12220](https://github.com/facebook/jest/pull/12220))
-   `[*]` \[**BREAKING**] Drop support for `typescript@3.8`, minimum version is now `4.3` ([#&#8203;11142](https://github.com/facebook/jest/pull/11142), [#&#8203;12648](https://github.com/facebook/jest/pull/12648))
-   `[*]` Bundle all `.d.ts` files into a single `index.d.ts` per module ([#&#8203;12345](https://github.com/facebook/jest/pull/12345))
-   `[*]` Use `globalThis` instead of `global` ([#&#8203;12447](https://github.com/facebook/jest/pull/12447))
-   `[babel-jest]` \[**BREAKING**] Only export `createTransformer` ([#&#8203;12407](https://github.com/facebook/jest/pull/12407))
-   `[docs]` Add note about not mixing `done()` with Promises ([#&#8203;11077](https://github.com/facebook/jest/pull/11077))
-   `[docs, examples]` Update React examples to match with the new React guidelines for code examples ([#&#8203;12217](https://github.com/facebook/jest/pull/12217))
-   `[docs]` Add clarity for module factory hoisting limitations ([#&#8203;12453](https://github.com/facebook/jest/pull/12453))
-   `[docs]` Add more information about how code transformers work ([#&#8203;12407](https://github.com/facebook/jest/pull/12407))
-   `[docs]` Add upgrading guide ([#&#8203;12633](https://github.com/facebook/jest/pull/12633))
-   `[expect]` \[**BREAKING**] Remove support for importing `build/utils` ([#&#8203;12323](https://github.com/facebook/jest/pull/12323))
-   `[expect]` \[**BREAKING**] Migrate to ESM ([#&#8203;12344](https://github.com/facebook/jest/pull/12344))
-   `[expect]` \[**BREAKING**] Snapshot matcher types are moved to `@jest/expect` ([#&#8203;12404](https://github.com/facebook/jest/pull/12404))
-   `[jest-cli]` Update `yargs` to v17 ([#&#8203;12357](https://github.com/facebook/jest/pull/12357))
-   `[jest-config]` \[**BREAKING**] Remove `getTestEnvironment` export ([#&#8203;12353](https://github.com/facebook/jest/pull/12353))
-   `[jest-config]` \[**BREAKING**] Rename config option `name` to `id` ([#&#8203;11981](https://github.com/facebook/jest/pull/11981))
-   `[jest-create-cache-key-function]` Added README.md file with basic usage instructions ([#&#8203;12492](https://github.com/facebook/jest/pull/12492))
-   `[@jest/core]` Use `index.ts` instead of `jest.ts` as main export ([#&#8203;12329](https://github.com/facebook/jest/pull/12329))
-   `[jest-environment-jsdom]` \[**BREAKING**] Migrate to ESM ([#&#8203;12340](https://github.com/facebook/jest/pull/12340))
-   `[jest-environment-node]` \[**BREAKING**] Migrate to ESM ([#&#8203;12340](https://github.com/facebook/jest/pull/12340))
-   `[jest-haste-map]` Remove legacy `isRegExpSupported` ([#&#8203;12676](https://github.com/facebook/jest/pull/12676))
-   `[@jest/fake-timers]` Update `@sinonjs/fake_timers` to v9 ([#&#8203;12357](https://github.com/facebook/jest/pull/12357))
-   `[jest-jasmine2, jest-runtime]` \[**BREAKING**] Use `Symbol` to pass `jest.setTimeout` value instead of `jasmine` specific logic ([#&#8203;12124](https://github.com/facebook/jest/pull/12124))
-   `[jest-phabricator]` \[**BREAKING**] Migrate to ESM ([#&#8203;12341](https://github.com/facebook/jest/pull/12341))
-   `[jest-resolve]` \[**BREAKING**] Make `requireResolveFunction` argument mandatory ([#&#8203;12353](https://github.com/facebook/jest/pull/12353))
-   `[jest-runner]` \[**BREAKING**] Remove some type exports from `@jest/test-result` ([#&#8203;12353](https://github.com/facebook/jest/pull/12353))
-   `[jest-runner]` \[**BREAKING**] Second argument to constructor (`Context`) is not optional ([#&#8203;12640](https://github.com/facebook/jest/pull/12640))
-   `[jest-serializer]` \[**BREAKING**] Deprecate package in favour of using `v8` APIs directly ([#&#8203;12391](https://github.com/facebook/jest/pull/12391))
-   `[jest-snapshot]` \[**BREAKING**] Migrate to ESM ([#&#8203;12342](https://github.com/facebook/jest/pull/12342))
-   `[jest-transform]` Update `write-file-atomic` to v4 ([#&#8203;12357](https://github.com/facebook/jest/pull/12357))
-   `[jest-types]` \[**BREAKING**] Remove `Config.Glob` and `Config.Path` ([#&#8203;12406](https://github.com/facebook/jest/pull/12406))
-   `[jest]` Use `index.ts` instead of `jest.ts` as main export ([#&#8203;12329](https://github.com/facebook/jest/pull/12329))

##### Performance

-   `[jest-haste-map]` \[**BREAKING**] Default to `node` crawler over shelling out to `find` if `watchman` is not enabled ([#&#8203;12320](https://github.com/facebook/jest/pull/12320))

### [`v27.5.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2751)

[Compare Source](https://github.com/facebook/jest/compare/v27.5.0...v27.5.1)

##### Features

-   `[jest-config]` Support comments in JSON config file ([#&#8203;12316](https://github.com/facebook/jest/pull/12316))
-   `[pretty-format]` Expose `ConvertAnsi` plugin ([#&#8203;12308](https://github.com/facebook/jest/pull/12308))

##### Fixes

-   `[expect]` Add type definitions for asymmetric `closeTo` matcher ([#&#8203;12304](https://github.com/facebook/jest/pull/12304))
-   `[jest-cli]` Load binary via exported API ([#&#8203;12315](https://github.com/facebook/jest/pull/12315))
-   `[jest-config]` Replace `jsonlint` with `parse-json` ([#&#8203;12316](https://github.com/facebook/jest/pull/12316))
-   `[jest-repl]` Make module importable ([#&#8203;12311](https://github.com/facebook/jest/pull/12311) & [#&#8203;12315](https://github.com/facebook/jest/pull/12315))

##### Chore & Maintenance

-   `[*]` Avoid anonymous default exports ([#&#8203;12313](https://github.com/facebook/jest/pull/12313))

### [`v27.5.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2750)

[Compare Source](https://github.com/facebook/jest/compare/v27.4.7...v27.5.0)

##### Features

-   `[expect]` Add asymmetric matcher `expect.closeTo` ([#&#8203;12243](https://github.com/facebook/jest/pull/12243))
-   `[jest-mock]` Added `mockFn.mock.lastCall` to retrieve last argument ([#&#8203;12285](https://github.com/facebook/jest/pull/12285))

##### Fixes

-   `[expect]` Add a fix for `.toHaveProperty('')` ([#&#8203;12251](https://github.com/facebook/jest/pull/12251))
-   `[jest-each, @&#8203;jest/globals]` Allow passing `ReadonlyArray` type of a table to `describe.each` and `test.each` ([#&#8203;12297](https://github.com/facebook/jest/pull/12297))
-   `[@jest/globals]` Add missing `options` argument to `jest.doMock` typing ([#&#8203;12292](https://github.com/facebook/jest/pull/12292))
-   `[jest-environment-node]` Add `atob` and `btoa` ([#&#8203;12269](https://github.com/facebook/jest/pull/12269))
-   `[jest-matcher-utils]` Correct diff for expected asymmetric matchers ([#&#8203;12264](https://github.com/facebook/jest/pull/12264))
-   `[jest-message-util]` Fix `.getTopFrame()` (and `toMatchInlineSnapshot()`) with `mjs` files ([#&#8203;12277](https://github.com/facebook/jest/pull/12277))

##### Chore & Maintenance

-   `[*]` Update `graceful-fs` to `^4.2.9` ([#&#8203;11749](https://github.com/facebook/jest/pull/11749))

##### Performance

-   `[jest-resolve]` perf: skip error creation on not found `stat` calls ([#&#8203;11749](https://github.com/facebook/jest/pull/11749))

### [`v27.4.7`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2747)

[Compare Source](https://github.com/facebook/jest/compare/v27.4.6...v27.4.7)

##### Fixes

-   `jest-config` Add missing `@babel/core` dependency ([#&#8203;12216](https://github.com/facebook/jest/pull/12216))

### [`v27.4.6`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2746)

[Compare Source](https://github.com/facebook/jest/compare/v27.4.5...v27.4.6)

##### Fixes

-   `[jest-environment-node]` Add `AbortSignal` ([#&#8203;12157](https://github.com/facebook/jest/pull/12157))
-   `[jest-environment-node]` Add Missing node global `performance` ([#&#8203;12002](https://github.com/facebook/jest/pull/12002))
-   `[jest-runtime]` Handle missing `mocked` property ([#&#8203;12213](https://github.com/facebook/jest/pull/12213))
-   `[@jest/transform]` Update dependency package `pirates` to 4.0.4 ([#&#8203;12002](https://github.com/facebook/jest/pull/12002))

##### Performance

-   `jest-config` perf: only register ts-node once when loading TS config files ([#&#8203;12160](https://github.com/facebook/jest/pull/12160))

### [`v27.4.5`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2745)

[Compare Source](https://github.com/facebook/jest/compare/v27.4.4...v27.4.5)

##### Fixes

-   `[jest-worker]` Stop explicitly passing `process.env` ([#&#8203;12141](https://github.com/facebook/jest/pull/12141))

### [`v27.4.4`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2744)

[Compare Source](https://github.com/facebook/jest/compare/v27.4.3...v27.4.4)

##### Fixes

-   `[babel-jest]` Add `process.version` chunk to the cache key ([#&#8203;12122](https://github.com/facebook/jest/pull/12122))
-   `[jest-environment]` Add `mocked` to `jest` object ([#&#8203;12133](https://github.com/facebook/jest/pull/12133))
-   `[jest-worker]` Stop explicitly passing `execArgv` ([#&#8203;12128](https://github.com/facebook/jest/pull/12128))

##### Chore & Maintenance

-   `[website]` Fix the card front that looks overlapping part of the card back

### [`v27.4.3`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2743)

[Compare Source](https://github.com/facebook/jest/compare/v27.4.2...v27.4.3)

##### Fixes

-   `[jest-environment-jsdom]` Remove `@types/jsdom` dependency (and make its `dom` property `private`) ([#&#8203;12107](https://github.com/facebook/jest/pull/12107))

### [`v27.4.2`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2742)

[Compare Source](https://github.com/facebook/jest/compare/v27.4.1...v27.4.2)

##### Fixes

-   `[jest-worker]` Add additional `execArgv` to filter ([#&#8203;12103](https://github.com/facebook/jest/pull/12103))

### [`v27.4.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2741)

[Compare Source](https://github.com/facebook/jest/compare/v27.4.0...v27.4.1)

##### Fixes

-   `[jest-worker]` Filter `execArgv` correctly ([#&#8203;12097](https://github.com/facebook/jest/pull/12097))

### [`v27.4.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2740)

[Compare Source](https://github.com/facebook/jest/compare/v27.3.1...v27.4.0)

##### Features

-   `[expect]` Enhancing the `toHaveProperty` matcher to support array selection ([#&#8203;12092](https://github.com/facebook/jest/pull/12092))
-   `[jest-core]` Add support for `testResultsProcessor` written in ESM ([#&#8203;12006](https://github.com/facebook/jest/pull/12006))
-   `[jest-diff, pretty-format]` Add `compareKeys` option for custom sorting of object keys ([#&#8203;11992](https://github.com/facebook/jest/pull/11992))
-   `[jest-mock]` Add `ts-jest` mock util functions ([#&#8203;12089](https://github.com/facebook/jest/pull/12089))

##### Fixes

-   `[expect]` Allow again `expect.Matchers` generic with single value ([#&#8203;11986](https://github.com/facebook/jest/pull/11986))
-   `[jest-circus, jest-jasmine2]` Avoid false concurrent test failures due to unhandled promise rejections ([#&#8203;11987](https://github.com/facebook/jest/pull/11987))
-   `[jest-config]` Add missing `slash` dependency to `package.json` ([#&#8203;12080](https://github.com/facebook/jest/pull/12080))
-   `[jest-core]` Incorrect detection of open ZLIB handles ([#&#8203;12022](https://github.com/facebook/jest/pull/12022))
-   `[jest-diff]` Break dependency cycle ([#&#8203;10818](https://github.com/facebook/jest/pull/10818))
-   `[jest-environment-jsdom]` Add `@types/jsdom` dependency ([#&#8203;11999](https://github.com/facebook/jest/pull/11999))
-   `[jest-environment-jsdom]` Do not reset the global.document too early on teardown ([#&#8203;11871](https://github.com/facebook/jest/pull/11871))
-   `[jest-transform]` Improve error and warning messages ([#&#8203;11998](https://github.com/facebook/jest/pull/11998))
-   `[jest-worker]` Pass `execArgv` correctly to `worker_threads` worker ([#&#8203;12069](https://github.com/facebook/jest/pull/12069))

##### Chore & Maintenance

-   `[docs]` CLI options alphabetized ([#&#8203;11586](https://github.com/facebook/jest/pull/11586))
-   `[jest-runner]` Add info regarding timers to forcedExit message([#&#8203;12083](https://github.com/facebook/jest/pull/12083))
-   `[*]` Replaced `substr` method with `substring` ([#&#8203;12066](https://github.com/facebook/jest/pull/12066))
-   `[*]` Add `types` entry to all export maps ([#&#8203;12073](https://github.com/facebook/jest/pull/12073))

### [`v27.3.1`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2731)

[Compare Source](https://github.com/facebook/jest/compare/v27.3.0...v27.3.1)

##### Fixes

-   `[expect]` Make `expect` extension properties `configurable` ([#&#8203;11978](https://github.com/facebook/jest/pull/11978))
-   `[expect]` Fix `.any()` checks on primitive wrapper classes ([#&#8203;11976](https://github.com/facebook/jest/pull/11976))

##### Chore & Maintenance

-   `[expect]` `BigInt` global is always defined, don't check for its existence at runtime ([#&#8203;11979](https://github.com/facebook/jest/pull/11979))
-   `[jest-config, jest-util]` Use `ci-info` instead of `is-ci` to detect CI environment ([#&#8203;11973](https://github.com/facebook/jest/pull/11973))

### [`v27.3.0`](https://github.com/facebook/jest/blob/HEAD/CHANGELOG.md#&#8203;2730)

[Compare Source](https://github.com/facebook/jest/compare/v27.2.5...v27.3.0)

##### Features

-   `[jest-config]` Add `testEnvironmentOptions.html` to apply to jsdom input ([#&#8203;11950](https://github.com/facebook/jest/pull/11950))
-   `[jest-resolver]` Support default export (`.`) in `exports` field *if* `main` is missing ([#&#8203;11919](https://github.com/facebook/jest/pull/11919))

##### Fixes

-   `[expect]` Tweak and improve types ([#&#8203;11949](https://github.com/facebook/jest/pull/11949))
-   `[jest-runtime]` Ensure absolute paths can be resolved within test modules ([#&#8203;11943](https://github.com/facebook/jest/pull/11943))
-   `[jest-runtime]` Fix `instanceof` for `ModernFakeTimers` and `LegacyF…
@joyeecheung
Copy link
Member

I think this can be closed now - for normal uses of vm.Script, #48510 should have fixed the leaks. For "leaks" caused by the use of --expose-gc and gc() (which disables code aging), it was marked as wontfix by https://bugs.chromium.org/p/v8/issues/detail?id=12198, which I think is fair because gc() is not a publicly supported feature, and it's more of a bug on the repro's side to use it as a way to "clean up memory thoroughly" (which can backfire).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
confirmed-bug Issues with confirmed bugs. v8 engine Issues and PRs related to the V8 dependency. vm Issues and PRs related to the vm subsystem.
Projects
None yet
Development

No branches or pull requests