Skip to content

Make it idempotent#20

Merged
sindresorhus merged 1 commit intosindresorhus:mainfrom
ehmicky:idempotent
Aug 26, 2024
Merged

Make it idempotent#20
sindresorhus merged 1 commit intosindresorhus:mainfrom
ehmicky:idempotent

Conversation

@ehmicky
Copy link
Contributor

@ehmicky ehmicky commented Aug 25, 2024

This PR makes npm-run-path idempotent.

I.e. if the directories added by npm-run-path are already present in the PATH environment variable, they are not added twice.

Otherwise, if Execa spawns a subprocess which spawns another subprocess (and so on), the final subprocess will end up with a long PATH environment variable, which is slower for the OS to process since each directory is checked.

@sindresorhus sindresorhus merged commit 8cfb372 into sindresorhus:main Aug 26, 2024
@sindresorhus
Copy link
Owner

which is slower for the OS to process since each directory is checked.

I would be shocked if the OS doesn't deduplicate before checking or cache. But this is indeed good to do regardless.

@ehmicky
Copy link
Contributor Author

ehmicky commented Aug 26, 2024

I would be shocked if the OS doesn't deduplicate before checking or cache.

Good point.

@ehmicky ehmicky deleted the idempotent branch August 26, 2024 08:08
renovate bot referenced this pull request in JoshuaKGoldberg/create-typescript-app Sep 23, 2024
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [execa](https://redirect.github.com/sindresorhus/execa) | [`9.3.1` ->
`9.4.0`](https://renovatebot.com/diffs/npm/execa/9.3.1/9.4.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/execa/9.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/execa/9.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/execa/9.3.1/9.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/execa/9.3.1/9.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>sindresorhus/execa (execa)</summary>

###
[`v9.4.0`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.4.0)

[Compare
Source](https://redirect.github.com/sindresorhus/execa/compare/v9.3.1...v9.4.0)

#### Features

- We've created a separate package called
[nano-spawn](https://redirect.github.com/sindresorhus/nano-spawn). It is
similar to Execa but with fewer features, for a much smaller package
size. [More
info.](https://redirect.github.com/sindresorhus/execa/blob/main/docs/small.md)

#### Bug fixes

- Both
[`execaNode()`](https://redirect.github.com/sindresorhus/execa/blob/main/docs/node.md)
and the
[`preferLocal`](https://redirect.github.com/sindresorhus/execa/blob/main/docs/environment.md#local-binaries)
option modify the `PATH` environment variable. This release includes
some minor improvements to ensure that environment variable remains
small
([https://github.com/sindresorhus/npm-run-path/pull/20](https://redirect.github.com/sindresorhus/npm-run-path/pull/20)).
It also handles a few related edge cases better
([https://github.com/sindresorhus/npm-run-path/pull/21](https://redirect.github.com/sindresorhus/npm-run-path/pull/21)).

#### Documentation

- Small documentation typo fix, thanks
[@&#8203;rrthomas](https://redirect.github.com/rrthomas)!
([#&#8203;1153](https://redirect.github.com/sindresorhus/execa/issues/1153))

</details>

---

### Configuration

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

🚦 **Automerge**: Enabled.

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

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

---

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

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/JoshuaKGoldberg/create-typescript-app).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC44MC4wIiwidXBkYXRlZEluVmVyIjoiMzguODAuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
github-merge-queue bot referenced this pull request in rolldown/rolldown Sep 27, 2024
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[@iconify-json/vscode-icons](https://icon-sets.iconify.design/vscode-icons/)
| [`1.2.1` ->
`1.2.2`](https://renovatebot.com/diffs/npm/@iconify-json%2fvscode-icons/1.2.1/1.2.2)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@iconify-json%2fvscode-icons/1.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@iconify-json%2fvscode-icons/1.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@iconify-json%2fvscode-icons/1.2.1/1.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@iconify-json%2fvscode-icons/1.2.1/1.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@rollup/plugin-commonjs](https://redirect.github.com/rollup/plugins/tree/master/packages/commonjs/#readme)
([source](https://redirect.github.com/rollup/plugins/tree/HEAD/packages/commonjs))
| [`26.0.1` ->
`26.0.3`](https://renovatebot.com/diffs/npm/@rollup%2fplugin-commonjs/26.0.1/26.0.3)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@rollup%2fplugin-commonjs/26.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@rollup%2fplugin-commonjs/26.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@rollup%2fplugin-commonjs/26.0.1/26.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@rollup%2fplugin-commonjs/26.0.1/26.0.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@rollup/plugin-node-resolve](https://redirect.github.com/rollup/plugins/tree/master/packages/node-resolve/#readme)
([source](https://redirect.github.com/rollup/plugins/tree/HEAD/packages/node-resolve))
| [`15.2.3` ->
`15.3.0`](https://renovatebot.com/diffs/npm/@rollup%2fplugin-node-resolve/15.2.3/15.3.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@rollup%2fplugin-node-resolve/15.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@rollup%2fplugin-node-resolve/15.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@rollup%2fplugin-node-resolve/15.2.3/15.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@rollup%2fplugin-node-resolve/15.2.3/15.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/lodash](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/lodash)
([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash))
| [`4.17.7` ->
`4.17.9`](https://renovatebot.com/diffs/npm/@types%2flodash/4.17.7/4.17.9)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2flodash/4.17.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2flodash/4.17.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2flodash/4.17.7/4.17.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2flodash/4.17.7/4.17.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/mocha](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/mocha)
([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/mocha))
| [`10.0.7` ->
`10.0.8`](https://renovatebot.com/diffs/npm/@types%2fmocha/10.0.7/10.0.8)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fmocha/10.0.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fmocha/10.0.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fmocha/10.0.7/10.0.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fmocha/10.0.7/10.0.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`22.5.2` ->
`22.7.3`](https://renovatebot.com/diffs/npm/@types%2fnode/22.5.2/22.7.3)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.7.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/22.7.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/22.5.2/22.7.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.5.2/22.7.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [cspell](https://cspell.org/)
([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell))
| [`8.14.2` ->
`8.14.4`](https://renovatebot.com/diffs/npm/cspell/8.14.2/8.14.4) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/8.14.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cspell/8.14.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cspell/8.14.2/8.14.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/8.14.2/8.14.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [esbuild](https://redirect.github.com/evanw/esbuild) | [`^0.23.0` ->
`^0.24.0`](https://renovatebot.com/diffs/npm/esbuild/0.23.1/0.24.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/esbuild/0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/esbuild/0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/esbuild/0.23.1/0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/esbuild/0.23.1/0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [execa](https://redirect.github.com/sindresorhus/execa) | [`9.3.1` ->
`9.4.0`](https://renovatebot.com/diffs/npm/execa/9.3.1/9.4.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/execa/9.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/execa/9.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/execa/9.3.1/9.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/execa/9.3.1/9.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [husky](https://redirect.github.com/typicode/husky) | [`9.1.5` ->
`9.1.6`](https://renovatebot.com/diffs/npm/husky/9.1.5/9.1.6) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/husky/9.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/husky/9.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/husky/9.1.5/9.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/husky/9.1.5/9.1.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [npm-rolldown](https://rolldown.rs/)
([source](https://redirect.github.com/rolldown/rolldown/tree/HEAD/packages/rolldown))
| [`0.12.2` ->
`0.13.2`](https://renovatebot.com/diffs/npm/npm-rolldown/0.12.2/0.13.2)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/npm-rolldown/0.13.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/npm-rolldown/0.13.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/npm-rolldown/0.12.2/0.13.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/npm-rolldown/0.12.2/0.13.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [npm-run-all2](https://redirect.github.com/bcomnes/npm-run-all2) |
[`6.2.2` ->
`6.2.3`](https://renovatebot.com/diffs/npm/npm-run-all2/6.2.2/6.2.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/npm-run-all2/6.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/npm-run-all2/6.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/npm-run-all2/6.2.2/6.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/npm-run-all2/6.2.2/6.2.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [oxlint](https://oxc.rs)
([source](https://redirect.github.com/oxc-project/oxc/tree/HEAD/npm/oxlint))
| [`0.9.2` ->
`0.9.8`](https://renovatebot.com/diffs/npm/oxlint/0.9.2/0.9.8) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/oxlint/0.9.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/oxlint/0.9.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/oxlint/0.9.2/0.9.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/oxlint/0.9.2/0.9.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [pnpm](https://pnpm.io)
([source](https://redirect.github.com/pnpm/pnpm)) | [`9.9.0` ->
`9.11.0`](https://renovatebot.com/diffs/npm/pnpm/9.9.0/9.11.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/pnpm/9.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/pnpm/9.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/pnpm/9.9.0/9.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/pnpm/9.9.0/9.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [remeda](https://remedajs.com/)
([source](https://redirect.github.com/remeda/remeda)) | [`2.12.0` ->
`2.14.0`](https://renovatebot.com/diffs/npm/remeda/2.12.0/2.14.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/remeda/2.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/remeda/2.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/remeda/2.12.0/2.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/remeda/2.12.0/2.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [rollup](https://rollupjs.org/)
([source](https://redirect.github.com/rollup/rollup)) | [`4.21.2` ->
`4.22.4`](https://renovatebot.com/diffs/npm/rollup/4.21.2/4.22.4) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/rollup/4.22.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/rollup/4.22.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/rollup/4.21.2/4.22.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/rollup/4.21.2/4.22.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [terser](https://terser.org)
([source](https://redirect.github.com/terser/terser)) | [`5.31.6` ->
`5.34.0`](https://renovatebot.com/diffs/npm/terser/5.31.6/5.34.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/terser/5.34.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/terser/5.34.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/terser/5.31.6/5.34.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/terser/5.31.6/5.34.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [typescript](https://www.typescriptlang.org/)
([source](https://redirect.github.com/microsoft/TypeScript)) | [`5.5.4`
-> `5.6.2`](https://renovatebot.com/diffs/npm/typescript/5.5.4/5.6.2) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/typescript/5.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typescript/5.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typescript/5.5.4/5.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript/5.5.4/5.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [vite](https://vitejs.dev)
([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite))
| [`5.4.3` ->
`5.4.8`](https://renovatebot.com/diffs/npm/vite/5.4.3/5.4.8) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/vite/5.4.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite/5.4.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite/5.4.3/5.4.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/5.4.3/5.4.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[vitepress-plugin-group-icons](https://redirect.github.com/yuyinws/vitepress-plugin-group-icons)
| [`1.1.0` ->
`1.2.4`](https://renovatebot.com/diffs/npm/vitepress-plugin-group-icons/1.1.0/1.2.4)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/vitepress-plugin-group-icons/1.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitepress-plugin-group-icons/1.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitepress-plugin-group-icons/1.1.0/1.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitepress-plugin-group-icons/1.1.0/1.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [vitest](https://redirect.github.com/vitest-dev/vitest)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest))
| [`2.0.5` ->
`2.1.1`](https://renovatebot.com/diffs/npm/vitest/2.0.5/2.1.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/2.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vitest/2.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vitest/2.0.5/2.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/2.0.5/2.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[vue](https://redirect.github.com/vuejs/core/tree/main/packages/vue#readme)
([source](https://redirect.github.com/vuejs/core)) | [`3.5.3` ->
`3.5.9`](https://renovatebot.com/diffs/npm/vue/3.5.3/3.5.9) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/vue/3.5.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vue/3.5.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vue/3.5.3/3.5.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vue/3.5.3/3.5.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [vue-router](https://redirect.github.com/vuejs/router) | [`4.4.3` ->
`4.4.5`](https://renovatebot.com/diffs/npm/vue-router/4.4.3/4.4.5) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/vue-router/4.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vue-router/4.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vue-router/4.4.3/4.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vue-router/4.4.3/4.4.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[zod-to-json-schema](https://redirect.github.com/StefanTerdell/zod-to-json-schema)
| [`3.23.2` ->
`3.23.3`](https://renovatebot.com/diffs/npm/zod-to-json-schema/3.23.2/3.23.3)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/zod-to-json-schema/3.23.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/zod-to-json-schema/3.23.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/zod-to-json-schema/3.23.2/3.23.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/zod-to-json-schema/3.23.2/3.23.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [zx](https://google.github.io/zx/)
([source](https://redirect.github.com/google/zx)) | [`8.1.5` ->
`8.1.8`](https://renovatebot.com/diffs/npm/zx/8.1.5/8.1.8) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/zx/8.1.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/zx/8.1.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/zx/8.1.5/8.1.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/zx/8.1.5/8.1.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>rollup/plugins (@&#8203;rollup/plugin-commonjs)</summary>

###
[`v26.0.3`](https://redirect.github.com/rollup/plugins/blob/HEAD/packages/commonjs/CHANGELOG.md#v2603)

*2024-09-23*

##### Updates

- chore: revert
[#&#8203;1618](https://redirect.github.com/rollup/plugins/issues/1618)
([`e98927b`](https://redirect.github.com/rollup/plugins/commit/e98927b))

###
[`v26.0.2`](https://redirect.github.com/rollup/plugins/blob/HEAD/packages/commonjs/CHANGELOG.md#v2602)

*2024-09-23*

##### Bugfixes

- fix: replace top-level this with exports name
([#&#8203;1618](https://redirect.github.com/rollup/plugins/issues/1618))

</details>

<details>
<summary>rollup/plugins (@&#8203;rollup/plugin-node-resolve)</summary>

###
[`v15.3.0`](https://redirect.github.com/rollup/plugins/blob/HEAD/packages/node-resolve/CHANGELOG.md#v1530)

*2024-09-23*

##### Features

- feat: allow preferBuiltins to be a function
([#&#8203;1694](https://redirect.github.com/rollup/plugins/issues/1694))

###
[`v15.2.4`](https://redirect.github.com/rollup/plugins/blob/HEAD/packages/node-resolve/CHANGELOG.md#v1524)

*2024-09-22*

##### Updates

- chore: remove is-builtin-module
([#&#8203;1735](https://redirect.github.com/rollup/plugins/issues/1735))

</details>

<details>
<summary>streetsidesoftware/cspell (cspell)</summary>

###
[`v8.14.4`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8144-2024-09-18-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.14.3...v8.14.4)

- fix: Remove object from cache
([#&#8203;6257](https://redirect.github.com/streetsidesoftware/cspell/issues/6257))
([ea24297](https://redirect.github.com/streetsidesoftware/cspell/commit/ea24297)),
closes
[#&#8203;6257](https://redirect.github.com/streetsidesoftware/cspell/issues/6257)

###
[`v8.14.3`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#small8143-2024-09-17-small)

[Compare
Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v8.14.2...v8.14.3)

- chore: Update Integration Test Performance Data
([#&#8203;6254](https://redirect.github.com/streetsidesoftware/cspell/issues/6254))
([189ac16](https://redirect.github.com/streetsidesoftware/cspell/commit/189ac16)),
closes
[#&#8203;6254](https://redirect.github.com/streetsidesoftware/cspell/issues/6254)

</details>

<details>
<summary>evanw/esbuild (esbuild)</summary>

###
[`v0.24.0`](https://redirect.github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0240)

[Compare
Source](https://redirect.github.com/evanw/esbuild/compare/v0.23.1...v0.24.0)

***This release deliberately contains backwards-incompatible changes.***
To avoid automatically picking up releases like this, you should either
be pinning the exact version of `esbuild` in your `package.json` file
(recommended) or be using a version range syntax that only accepts patch
upgrades such as `^0.23.0` or `~0.23.0`. See npm's documentation about
[semver](https://docs.npmjs.com/cli/v6/using-npm/semver/) for more
information.

- Drop support for older platforms
([#&#8203;3902](https://redirect.github.com/evanw/esbuild/pull/3902))

    This release drops support for the following operating system:

    -   macOS 10.15 Catalina

This is because the Go programming language dropped support for this
operating system version in Go 1.23, and this release updates esbuild
from Go 1.22 to Go 1.23. Go 1.23 now requires macOS 11 Big Sur or later.

Note that this only affects the binary esbuild executables that are
published to the esbuild npm package. It's still possible to compile
esbuild's source code for these older operating systems. If you need to,
you can compile esbuild for yourself using an older version of the Go
compiler (before Go version 1.23). That might look something like this:

        git clone https://github.com/evanw/esbuild.git
        cd esbuild
        go build ./cmd/esbuild
        ./esbuild --version

- Fix class field decorators in TypeScript if `useDefineForClassFields`
is `false`
([#&#8203;3913](https://redirect.github.com/evanw/esbuild/issues/3913))

Setting the `useDefineForClassFields` flag to `false` in `tsconfig.json`
means class fields use the legacy TypeScript behavior instead of the
standard JavaScript behavior. Specifically they use assign semantics
instead of define semantics (e.g. setters are triggered) and fields
without an initializer are not initialized at all. However, when this
legacy behavior is combined with standard JavaScript decorators,
TypeScript switches to always initializing all fields, even those
without initializers. Previously esbuild incorrectly continued to omit
field initializers for this edge case. These field initializers in this
case should now be emitted starting with this release.

- Avoid incorrect cycle warning with `tsconfig.json` multiple
inheritance
([#&#8203;3898](https://redirect.github.com/evanw/esbuild/issues/3898))

TypeScript 5.0 introduced multiple inheritance for `tsconfig.json` files
where `extends` can be an array of file paths. Previously esbuild would
incorrectly treat files encountered more than once when processing
separate subtrees of the multiple inheritance hierarchy as an
inheritance cycle. With this release, `tsconfig.json` files containing
this edge case should work correctly without generating a warning.

- Handle Yarn Plug'n'Play stack overflow with `tsconfig.json`
([#&#8203;3915](https://redirect.github.com/evanw/esbuild/issues/3915))

Previously a `tsconfig.json` file that `extends` another file in a
package with an `exports` map could cause a stack overflow when Yarn's
Plug'n'Play resolution was active. This edge case should work now
starting with this release.

- Work around more issues with Deno 1.31+
([#&#8203;3917](https://redirect.github.com/evanw/esbuild/pull/3917))

This version of Deno broke the `stdin` and `stdout` properties on
command objects for inherited streams, which matters when you run
esbuild's Deno module as the entry point (i.e. when `import.meta.main`
is `true`). Previously esbuild would crash in Deno 1.31+ if you ran
esbuild like that. This should be fixed starting with this release.

This fix was contributed by
[@&#8203;Joshix-1](https://redirect.github.com/Joshix-1).

</details>

<details>
<summary>sindresorhus/execa (execa)</summary>

###
[`v9.4.0`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.4.0)

[Compare
Source](https://redirect.github.com/sindresorhus/execa/compare/v9.3.1...v9.4.0)

#### Features

- We've created a separate package called
[nano-spawn](https://redirect.github.com/sindresorhus/nano-spawn). It is
similar to Execa but with fewer features, for a much smaller package
size. [More
info.](https://redirect.github.com/sindresorhus/execa/blob/main/docs/small.md)

#### Bug fixes

- Both
[`execaNode()`](https://redirect.github.com/sindresorhus/execa/blob/main/docs/node.md)
and the
[`preferLocal`](https://redirect.github.com/sindresorhus/execa/blob/main/docs/environment.md#local-binaries)
option modify the `PATH` environment variable. This release includes
some minor improvements to ensure that environment variable remains
small
([https://github.com/sindresorhus/npm-run-path/pull/20](https://redirect.github.com/sindresorhus/npm-run-path/pull/20)).
It also handles a few related edge cases better
([https://github.com/sindresorhus/npm-run-path/pull/21](https://redirect.github.com/sindresorhus/npm-run-path/pull/21)).

#### Documentation

- Small documentation typo fix, thanks
[@&#8203;rrthomas](https://redirect.github.com/rrthomas)!
([#&#8203;1153](https://redirect.github.com/sindresorhus/execa/issues/1153))

</details>

<details>
<summary>typicode/husky (husky)</summary>

###
[`v9.1.6`](https://redirect.github.com/typicode/husky/compare/v9.1.5...a2d942a670b3d6a04578005a0fd2dc310e511849)

[Compare
Source](https://redirect.github.com/typicode/husky/compare/v9.1.5...v9.1.6)

</details>

<details>
<summary>rolldown/rolldown (npm-rolldown)</summary>

###
[`v0.13.2`](https://redirect.github.com/rolldown/rolldown/blob/HEAD/CHANGELOG.md#0132-2024-09-06)

[Compare
Source](https://redirect.github.com/rolldown/rolldown/compare/v0.13.1...v0.13.2)

##### Features

- **node/advance-chunks:** support global fallback for `minSize`,
`minShareCount`
([#&#8203;2178](https://redirect.github.com/rolldown/rolldown/issues/2178))
([78c7750](https://redirect.github.com/rolldown/rolldown/commit/78c7750f186391d145f5b317a9ff6e5fbb2ba508))
- **node/advance-chunks:** support passing `minSize`, `minShareCount`
([#&#8203;2177](https://redirect.github.com/rolldown/rolldown/issues/2177))
([3c95d30](https://redirect.github.com/rolldown/rolldown/commit/3c95d308a849ef6485410ef3248935198f3fcec0))
- **rust/advance-chunks:** support `min_share_count` option
([#&#8203;2176](https://redirect.github.com/rolldown/rolldown/issues/2176))
([689cbc2](https://redirect.github.com/rolldown/rolldown/commit/689cbc23b43b3df99c9819d2a89911dcc80fac1b))
- **rust/advance-chunks:** support `min_size` option
([#&#8203;2175](https://redirect.github.com/rolldown/rolldown/issues/2175))
([1e9c2d9](https://redirect.github.com/rolldown/rolldown/commit/1e9c2d9bf8195df869186f11a9c73539408ca067))

###
[`v0.13.1`](https://redirect.github.com/rolldown/rolldown/blob/HEAD/CHANGELOG.md#0131-2024-09-05)

[Compare
Source](https://redirect.github.com/rolldown/rolldown/compare/v0.13.0...v0.13.1)

##### Bug Fixes

- `process.env.NODE_ENV` inside paren expr
([#&#8203;2153](https://redirect.github.com/rolldown/rolldown/issues/2153))
([fddb2f5](https://redirect.github.com/rolldown/rolldown/commit/fddb2f58a52c79c30d83b9b1c542bb816df5ef49))
- 🐛 make `examples/rollup-plugin-esbuild` build successfully
([#&#8203;2164](https://redirect.github.com/rolldown/rolldown/issues/2164))
([49f2d83](https://redirect.github.com/rolldown/rolldown/commit/49f2d8359069c96611aece143c602a4b9b1230d8)),
closes
[#&#8203;2163](https://redirect.github.com/rolldown/rolldown/issues/2163)
- mark knownGlobals global ident and global member access as side
effects free
([#&#8203;2154](https://redirect.github.com/rolldown/rolldown/issues/2154))
([00ff45d](https://redirect.github.com/rolldown/rolldown/commit/00ff45dc7833cb8b0ad4dd6c526bb1acd50c8ad9)),
closes
[/github.com/evanw/esbuild/blob/9c13ae1f06dfa909eb4a53882e3b7e4216a503fe/internal/config/globals.go#L30-L850](https://redirect.github.com//github.com/evanw/esbuild/blob/9c13ae1f06dfa909eb4a53882e3b7e4216a503fe/internal/config/globals.go/issues/L30-L850)
[/github.com/evanw/esbuild/blob/9c13ae1f06dfa909eb4a53882e3b7e4216a503fe/internal/config/globals.go#L940-L961](https://redirect.github.com//github.com/evanw/esbuild/blob/9c13ae1f06dfa909eb4a53882e3b7e4216a503fe/internal/config/globals.go/issues/L940-L961)
- module type mapping
([#&#8203;2151](https://redirect.github.com/rolldown/rolldown/issues/2151))
([c2e77b5](https://redirect.github.com/rolldown/rolldown/commit/c2e77b5aa5a64c03c397ce55e9bc0356426b9aad))
- **rolldown:** remove `console.log`
([#&#8203;2145](https://redirect.github.com/rolldown/rolldown/issues/2145))
([d24c337](https://redirect.github.com/rolldown/rolldown/commit/d24c3371798831915a1c5ae51c49c5664dbf7d6a))
- **rolldown:** side effect detector mark `+1` `-1` as number literal
([#&#8203;2162](https://redirect.github.com/rolldown/rolldown/issues/2162))
([40ae24d](https://redirect.github.com/rolldown/rolldown/commit/40ae24d59711599e8fb23ae5f3619144eb001cec))

##### Features

- **node/rolldown:** support `OutputOptions#advancedChunks`
([#&#8203;2167](https://redirect.github.com/rolldown/rolldown/issues/2167))
([851475d](https://redirect.github.com/rolldown/rolldown/commit/851475d9d318ddab904d38eb6bfabc118d2707e8))
- **rust/advance-chunks:** A module could be catched by multiple match
groups
([#&#8203;2155](https://redirect.github.com/rolldown/rolldown/issues/2155))
([071efd8](https://redirect.github.com/rolldown/rolldown/commit/071efd83bc24148c4a8aadac287f7c150be0d88d))
- **rust/advance-chunks:** rework with new API deisgn
([#&#8203;2146](https://redirect.github.com/rolldown/rolldown/issues/2146))
([6339062](https://redirect.github.com/rolldown/rolldown/commit/6339062a086570e6e5d6a3f6b8e4e13b379a3957))
- **rust/advance-chunks:** should include matched module's dependencies
too
([#&#8203;2161](https://redirect.github.com/rolldown/rolldown/issues/2161))
([a557b51](https://redirect.github.com/rolldown/rolldown/commit/a557b512605b5722a7653c5d27e75abbdd0e90ec))
- **rust/advance-chunks:** support `test` using regex
([#&#8203;2152](https://redirect.github.com/rolldown/rolldown/issues/2152))
([b7b2ac5](https://redirect.github.com/rolldown/rolldown/commit/b7b2ac541145b9f974e049a9077df136eda34323))

##### Performance Improvements

- codegen in multiple chunks
([#&#8203;2122](https://redirect.github.com/rolldown/rolldown/issues/2122))
([ee878c8](https://redirect.github.com/rolldown/rolldown/commit/ee878c8a97ce8841dc2bd9337da422752a683a71))

###
[`v0.13.0`](https://redirect.github.com/rolldown/rolldown/blob/HEAD/CHANGELOG.md#0130-2024-09-03)

[Compare
Source](https://redirect.github.com/rolldown/rolldown/compare/v0.12.2...v0.13.0)

##### Bug Fixes

- incorrect point free function call
([#&#8203;1697](https://redirect.github.com/rolldown/rolldown/issues/1697))
([4fb7ab6](https://redirect.github.com/rolldown/rolldown/commit/4fb7ab6c83ebd0195dcc99b63e1b73fb02ca3c00))
- JSON.parse() should not have side effect
([#&#8203;2029](https://redirect.github.com/rolldown/rolldown/issues/2029))
([4ca169c](https://redirect.github.com/rolldown/rolldown/commit/4ca169ce74548b647c38cbcda6c2991b77a9d3c7))
- share replace global define config
([#&#8203;1902](https://redirect.github.com/rolldown/rolldown/issues/1902))
([eee1db0](https://redirect.github.com/rolldown/rolldown/commit/eee1db08020c641bd56101a71f3714b501cd61b8))
- should not compose if there is only one pending plugin
([#&#8203;1781](https://redirect.github.com/rolldown/rolldown/issues/1781))
([f3e4933](https://redirect.github.com/rolldown/rolldown/commit/f3e49330c5a5506d3aea5619569cb8d2cbae73d1))
- should not url encode when plain text
([#&#8203;1724](https://redirect.github.com/rolldown/rolldown/issues/1724))
([779f16d](https://redirect.github.com/rolldown/rolldown/commit/779f16da869ad109451c1947487ebff6d40bd1d7))
- 🐛 auto guess module type when load hook no specify
([#&#8203;1930](https://redirect.github.com/rolldown/rolldown/issues/1930))
([7d36481](https://redirect.github.com/rolldown/rolldown/commit/7d36481c75fdaa2d0b8c5e8d660f1d776f2d178d))
- Add namespace for each builtin plugin
([#&#8203;1931](https://redirect.github.com/rolldown/rolldown/issues/1931))
([43f863b](https://redirect.github.com/rolldown/rolldown/commit/43f863b3c948e19b94ffeb18bf6e7ad6991b40c6)),
closes
[/github.com/rolldown/vite/blob/3bf86e3f715c952a032b476b60c8c869e9c50f3f/packages/vite/src/node/plugins/dynamicImportVars.ts#L174-L174](https://redirect.github.com//github.com/rolldown/vite/blob/3bf86e3f715c952a032b476b60c8c869e9c50f3f/packages/vite/src/node/plugins/dynamicImportVars.ts/issues/L174-L174)
- Allowing gcc builds on windows
([#&#8203;2034](https://redirect.github.com/rolldown/rolldown/issues/2034))
([e6b9f14](https://redirect.github.com/rolldown/rolldown/commit/e6b9f148b3e50a4db7ccf646e3d38c2dca607aaf))
- avoid panic if member expr referneced to non-namespace symbol
([#&#8203;1784](https://redirect.github.com/rolldown/rolldown/issues/1784))
([3d30284](https://redirect.github.com/rolldown/rolldown/commit/3d3028452d77854a8cd596a5094d28b37d3ce2ba))
- avoid take first chunk if bundle is empty
([#&#8203;1887](https://redirect.github.com/rolldown/rolldown/issues/1887))
([03f6dc9](https://redirect.github.com/rolldown/rolldown/commit/03f6dc99db5687719585e07c489f31dc7b861251))
- base64 handling
([#&#8203;1725](https://redirect.github.com/rolldown/rolldown/issues/1725))
([af95809](https://redirect.github.com/rolldown/rolldown/commit/af95809fcdeb273b071b9cafb0f8f804ab7c911d))
- chained reexport star cjs
([#&#8203;2100](https://redirect.github.com/rolldown/rolldown/issues/2100))
([04a8bba](https://redirect.github.com/rolldown/rolldown/commit/04a8bba32b1c5616ce85aa3e50c9fbb727d5eff5))
- circular ref in rolldown package bundle
([#&#8203;1849](https://redirect.github.com/rolldown/rolldown/issues/1849))
([3c3cb83](https://redirect.github.com/rolldown/rolldown/commit/3c3cb8340bddc59cdceb51cd451651d97ed76e62))
- **cjs:** aovid generate assgin pattern if chunk imports nothing
([#&#8203;1959](https://redirect.github.com/rolldown/rolldown/issues/1959))
([32c3363](https://redirect.github.com/rolldown/rolldown/commit/32c33631f2d99cc2ac72a2c4733bf9dae8970f5c))
- **cli:** `rolldown -c` should not print help messages
([#&#8203;1993](https://redirect.github.com/rolldown/rolldown/issues/1993))
([a82ccc6](https://redirect.github.com/rolldown/rolldown/commit/a82ccc6a9bd733ee326d28e8b57f4240993c5436))
- **cli:** should not hang if error occured
([#&#8203;2035](https://redirect.github.com/rolldown/rolldown/issues/2035))
([8e0cb61](https://redirect.github.com/rolldown/rolldown/commit/8e0cb613e4dd50b5f70a4a648ad72d243b80a432)),
closes
[#&#8203;2033](https://redirect.github.com/rolldown/rolldown/issues/2033)
- collect depended_symbol when `canonical_ref` has `ns_alias`
([#&#8203;2095](https://redirect.github.com/rolldown/rolldown/issues/2095))
([ab6b043](https://redirect.github.com/rolldown/rolldown/commit/ab6b0434da24f814edf3becc42dd63557beea87e)),
closes
[#&#8203;2079](https://redirect.github.com/rolldown/rolldown/issues/2079)
- collect-dependends-symbol
([#&#8203;2079](https://redirect.github.com/rolldown/rolldown/issues/2079))
([0205983](https://redirect.github.com/rolldown/rolldown/commit/02059832b3cce75498fb19ccfe6f9537421dd057)),
closes
[#&#8203;2038](https://redirect.github.com/rolldown/rolldown/issues/2038)
- dedup export all external in entry module
([#&#8203;1786](https://redirect.github.com/rolldown/rolldown/issues/1786))
([3eba8a3](https://redirect.github.com/rolldown/rolldown/commit/3eba8a33042f27bb3077f3c0c873a8c7caf71911))
- ensure ordering of assign chunk name
([#&#8203;1981](https://redirect.github.com/rolldown/rolldown/issues/1981))
([7ac1381](https://redirect.github.com/rolldown/rolldown/commit/7ac138156b3c303ca184cc33264251dedcae9b32))
- ensure referenced symbols by entry point chunk got deconflicted
([#&#8203;2094](https://redirect.github.com/rolldown/rolldown/issues/2094))
([dc98faa](https://redirect.github.com/rolldown/rolldown/commit/dc98faa6248c9b5391acc79df2da6ec1212960fe)),
closes
[#&#8203;1722](https://redirect.github.com/rolldown/rolldown/issues/1722)
[#&#8203;2085](https://redirect.github.com/rolldown/rolldown/issues/2085)
- entry chunk should be at first
([#&#8203;2089](https://redirect.github.com/rolldown/rolldown/issues/2089))
([8b7734e](https://redirect.github.com/rolldown/rolldown/commit/8b7734e56ec2e8ea2fca4ff55d782c74d6049ffe))
- eval warning should only emit when used as callExpr
([#&#8203;2054](https://redirect.github.com/rolldown/rolldown/issues/2054))
([e350abe](https://redirect.github.com/rolldown/rolldown/commit/e350abe0bd5ea6961b58b2d558f343aaf8390bf7))
- **experimental:** wrong `transform` behavior after composing
([#&#8203;1701](https://redirect.github.com/rolldown/rolldown/issues/1701))
([3a1f216](https://redirect.github.com/rolldown/rolldown/commit/3a1f216be0065b531649c8ae01192d542cde1a92))
- external module side effects should respect hook returned side e…
([#&#8203;2068](https://redirect.github.com/rolldown/rolldown/issues/2068))
([0f9391b](https://redirect.github.com/rolldown/rolldown/commit/0f9391b9ac6b65bbe1aebf045d45d74a604772a2))
- fix `absolute_preliminary_filename` not taking `options.cwd` into
account
([#&#8203;1935](https://redirect.github.com/rolldown/rolldown/issues/1935))
([6b6d713](https://redirect.github.com/rolldown/rolldown/commit/6b6d71304610d2f7985f05f05623b39fe7bcaed2))
- **foramt/cjs:** preserve semantic of entries exports even in wrapped
([#&#8203;1788](https://redirect.github.com/rolldown/rolldown/issues/1788))
([b79e7e0](https://redirect.github.com/rolldown/rolldown/commit/b79e7e0a1bb75d4270b4cd7076c214796807f9ee))
- **format/cjs:** exported bindings should be lived. Part1
([#&#8203;1791](https://redirect.github.com/rolldown/rolldown/issues/1791))
([17ca21d](https://redirect.github.com/rolldown/rolldown/commit/17ca21daf7c0f80c9bd5ccdf546092dfc7d08625))
- **format/cjs:** should keep live bindings for common chunks
([#&#8203;1805](https://redirect.github.com/rolldown/rolldown/issues/1805))
([145f105](https://redirect.github.com/rolldown/rolldown/commit/145f1052d4ad89029843050a14674fe676077881))
- **format/cjs:** support `cjs-module-lexer` for `export * from
'external'`
([#&#8203;1854](https://redirect.github.com/rolldown/rolldown/issues/1854))
([de1f5f5](https://redirect.github.com/rolldown/rolldown/commit/de1f5f580be4ed74d964d54b745c75c387980659))
- generate valid file name for virtual module chunk
([#&#8203;1782](https://redirect.github.com/rolldown/rolldown/issues/1782))
([d041e08](https://redirect.github.com/rolldown/rolldown/commit/d041e08abc340c573196c9df05d073e7bb0ca665))
- guessing module type
([#&#8203;2086](https://redirect.github.com/rolldown/rolldown/issues/2086))
([aa5b528](https://redirect.github.com/rolldown/rolldown/commit/aa5b528a3fca6679abfe6c9c051291d5026bebb2))
- index_cross_chunk_imports should including share chunk
([#&#8203;1890](https://redirect.github.com/rolldown/rolldown/issues/1890))
([290ecc7](https://redirect.github.com/rolldown/rolldown/commit/290ecc703e7896106a0cc0a391b2bbf869cfe4bd))
- move `banner` ahead of the file in `cjs` format.
([#&#8203;1707](https://redirect.github.com/rolldown/rolldown/issues/1707))
([2640072](https://redirect.github.com/rolldown/rolldown/commit/2640072c9edd83ade6ece5da7599a686cc5fa5e4)),
closes
[#&#8203;1706](https://redirect.github.com/rolldown/rolldown/issues/1706)
[#&#8203;1705](https://redirect.github.com/rolldown/rolldown/issues/1705)
[/github.com/rolldown/rolldown/pull/1705#discussion_r1689236056](https://redirect.github.com//github.com/rolldown/rolldown/pull/1705/issues/discussion_r1689236056)
- **node/compose-plugins:** Plugin that uses `order` meta is considered
as not composable
([#&#8203;1943](https://redirect.github.com/rolldown/rolldown/issues/1943))
([ebfebf3](https://redirect.github.com/rolldown/rolldown/commit/ebfebf30d3bfea4d8c9034b09e9032752d332ad7))
- **node/composePlugins:** ensure correct semantic of
`PluginContext#resolveId` of all hooks
([#&#8203;2050](https://redirect.github.com/rolldown/rolldown/issues/2050))
([f19b6c7](https://redirect.github.com/rolldown/rolldown/commit/f19b6c78fdfa22d6c54b2d46dc3043dd0e75a1d6))
- **node/plugin:** ensure order for generateBundle and writeBundle hooks
([#&#8203;1913](https://redirect.github.com/rolldown/rolldown/issues/1913))
([b7e1d90](https://redirect.github.com/rolldown/rolldown/commit/b7e1d9064aee5d585bc205755351a2dce4b3052c))
- **node/rolldown:** mark all tsfn as weak to avoid long exit time
([#&#8203;2135](https://redirect.github.com/rolldown/rolldown/issues/2135))
([06b578c](https://redirect.github.com/rolldown/rolldown/commit/06b578c04491db1d2eb840bccaa1091f85f449a0)),
closes
[/github.com/rolldown/rolldown/pull/985#issuecomment-2081384205](https://redirect.github.com//github.com/rolldown/rolldown/pull/985/issues/issuecomment-2081384205)
- **packages/rolldown:** export `package.json`
([#&#8203;2048](https://redirect.github.com/rolldown/rolldown/issues/2048))
([5aa76dc](https://redirect.github.com/rolldown/rolldown/commit/5aa76dc6f3421373bb5053c34743ec5a4a99e1c1))
- pass `output.globals` to Rust side.
([#&#8203;1912](https://redirect.github.com/rolldown/rolldown/issues/1912))
([bd84267](https://redirect.github.com/rolldown/rolldown/commit/bd8426723869a271363efed6550928b76c2131a4))
- perform percent encoding to reserved chars in dataurl.
([#&#8203;1729](https://redirect.github.com/rolldown/rolldown/issues/1729))
([d75e77c](https://redirect.github.com/rolldown/rolldown/commit/d75e77c4520218131c2561250774a2644427c9e2)),
closes
[#&#8203;1406](https://redirect.github.com/rolldown/rolldown/issues/1406)
[/datatracker.ietf.org/doc/html/rfc3986#section-2](https://redirect.github.com//datatracker.ietf.org/doc/html/rfc3986/issues/section-2)
- **plugin/replace:** handle backtrack limit exceeded error
([#&#8203;2088](https://redirect.github.com/rolldown/rolldown/issues/2088))
([33fca46](https://redirect.github.com/rolldown/rolldown/commit/33fca46a353afa47d0f35b0a723622e167ec97de)),
closes
[/github.com/rolldown/rolldown/pull/2056#issuecomment-2316570663](https://redirect.github.com//github.com/rolldown/rolldown/pull/2056/issues/issuecomment-2316570663)
- remove name assignment in IIFE that doesn't have export.
([#&#8203;1900](https://redirect.github.com/rolldown/rolldown/issues/1900))
([13f4adc](https://redirect.github.com/rolldown/rolldown/commit/13f4adc8b1a2bc26591a25df6aef14fe855f8fa5))
- remove napi deferred_trace feature
([#&#8203;2018](https://redirect.github.com/rolldown/rolldown/issues/2018))
([b99f74e](https://redirect.github.com/rolldown/rolldown/commit/b99f74ef66b45664ca18f6e2b5b3444259ac220d))
- remove redundant code in `export * from 'external'` for esm format
([#&#8203;1974](https://redirect.github.com/rolldown/rolldown/issues/1974))
([2eb06ef](https://redirect.github.com/rolldown/rolldown/commit/2eb06ef40cc19fb69bde2f9dece41479260e3fd2))
- remove ts expect error
([#&#8203;1817](https://redirect.github.com/rolldown/rolldown/issues/1817))
([3153a61](https://redirect.github.com/rolldown/rolldown/commit/3153a614c9dab13d655fdebd51bd51f6b520a1c8)),
closes
[#&#8203;1811](https://redirect.github.com/rolldown/rolldown/issues/1811)
- reserve `reserved-key` in json module type.
([#&#8203;1746](https://redirect.github.com/rolldown/rolldown/issues/1746))
([7243165](https://redirect.github.com/rolldown/rolldown/commit/72431654b3eccccac78d0ca60d3516a11af5a165)),
closes
[oxc-project/oxc#4484](https://redirect.github.com/oxc-project/oxc/issues/4484)
- resolve conflict `exports` key in `CJS` and `IIFE`.
([#&#8203;1837](https://redirect.github.com/rolldown/rolldown/issues/1837))
([2953b90](https://redirect.github.com/rolldown/rolldown/commit/2953b9023450639a5450ac94d9ba666c04ae86ae)),
closes
[#&#8203;1836](https://redirect.github.com/rolldown/rolldown/issues/1836)
[#&#8203;1623](https://redirect.github.com/rolldown/rolldown/issues/1623)
[/github.com/rolldown/rolldown/pull/1694#issuecomment-2245219042](https://redirect.github.com//github.com/rolldown/rolldown/pull/1694/issues/issuecomment-2245219042)
[#&#8203;1623](https://redirect.github.com/rolldown/rolldown/issues/1623)
- **rolldown:** fix inject test where `alias` can be a member expression
([#&#8203;1934](https://redirect.github.com/rolldown/rolldown/issues/1934))
([c5aafad](https://redirect.github.com/rolldown/rolldown/commit/c5aafadfa5704cbe679bf6fb68e1810d08a642a3)),
closes
[/github.com/rollup/plugins/blob/8550c4b1925b246adbd3af48ed0e5f74f822c951/packages/inject/src/index.js#L125](https://redirect.github.com//github.com/rollup/plugins/blob/8550c4b1925b246adbd3af48ed0e5f74f822c951/packages/inject/src/index.js/issues/L125)
- **rolldown:** should correct rewrite path of dynamic imported external
modules
([#&#8203;1738](https://redirect.github.com/rolldown/rolldown/issues/1738))
([c682b76](https://redirect.github.com/rolldown/rolldown/commit/c682b76d214bd50711c8e8c6ffd1acb1a4b2e17f)),
closes
[#&#8203;1723](https://redirect.github.com/rolldown/rolldown/issues/1723)
- **rust/rolldown:** prevent segment fault in `generate_bundle` by
removing unsafe code
([#&#8203;1905](https://redirect.github.com/rolldown/rolldown/issues/1905))
([9802478](https://redirect.github.com/rolldown/rolldown/commit/98024783c9f09475a537c05db9b722cbc9c4193b))
- same filenames cause bundle error
([#&#8203;1984](https://redirect.github.com/rolldown/rolldown/issues/1984))
([c4aca98](https://redirect.github.com/rolldown/rolldown/commit/c4aca984a910503273e4b2435fa13f8c5a68023c)),
closes
[#&#8203;1944](https://redirect.github.com/rolldown/rolldown/issues/1944)
[/github.com/rolldown/rolldown/issues/1944#issuecomment-2282812102](https://redirect.github.com//github.com/rolldown/rolldown/issues/1944/issues/issuecomment-2282812102)
- should also care for `Chunk#name` for common chunks
([#&#8203;2123](https://redirect.github.com/rolldown/rolldown/issues/2123))
([a1fa701](https://redirect.github.com/rolldown/rolldown/commit/a1fa701403452ee520e94aa3b5780a40c507b5de))
- should call write_bundle after write bundle to disk
([#&#8203;1844](https://redirect.github.com/rolldown/rolldown/issues/1844))
([475f765](https://redirect.github.com/rolldown/rolldown/commit/475f765931876081825badd4f63420ae0a90634d)),
closes
[/github.com/rollup/rollup/blob/master/src/rollup/rollup.ts#L194-L200](https://redirect.github.com//github.com/rollup/rollup/blob/master/src/rollup/rollup.ts/issues/L194-L200)
- should correctly include symbols of namespace object
([#&#8203;1727](https://redirect.github.com/rolldown/rolldown/issues/1727))
([3dee9e0](https://redirect.github.com/rolldown/rolldown/commit/3dee9e01b9ebb7b1fb205967f9942d7c4c22c35c))
- should generate `export * from ...` in entry chunks rather than entry
modules
([#&#8203;1783](https://redirect.github.com/rolldown/rolldown/issues/1783))
([954dd2a](https://redirect.github.com/rolldown/rolldown/commit/954dd2a5fa5988ad0ea587d1d73d4a6e915ad56a))
- should not panic if there are accessing on `star as` member
([#&#8203;1730](https://redirect.github.com/rolldown/rolldown/issues/1730))
([250c11a](https://redirect.github.com/rolldown/rolldown/commit/250c11a541d34485fbd7b0c1420e10a830d822c4))
- sourcemap inline url should relative to asset file
([#&#8203;2099](https://redirect.github.com/rolldown/rolldown/issues/2099))
([6b5d7dc](https://redirect.github.com/rolldown/rolldown/commit/6b5d7dc97b47895bd8280d29c2a815e159fa6b8c))
- strict emit warning `commonjs var in esm`
([#&#8203;2101](https://redirect.github.com/rolldown/rolldown/issues/2101))
([4c9feeb](https://redirect.github.com/rolldown/rolldown/commit/4c9feeb058f0212228e430450004967c99af9177)),
closes
[/esbuild.github.io/try/#YgAwLjIzLjEALS1idW5kbGUgLS1taW5pZnk9ZmFsc2UgLS1mb3JtYXQ9ZXNtAGUAZW50cnkuanMALyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi8KdmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzOwoKLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqLwp2YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7CgovKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqLwp2YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0czsKCi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqLwp2YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0](https://redirect.github.com//esbuild.github.io/try//issues/YgAwLjIzLjEALS1idW5kbGUgLS1taW5pZnk9ZmFsc2UgLS1mb3JtYXQ9ZXNtAGUAZW50cnkuanMALyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi8KdmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzOwoKLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqLwp2YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7CgovKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqLwp2YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0czsKCi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqLwp2YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0)
- **treeshaking:** `require` should consider as having side effects
([#&#8203;1949](https://redirect.github.com/rolldown/rolldown/issues/1949))
([28e53d6](https://redirect.github.com/rolldown/rolldown/commit/28e53d6b8582728e6dbb6a45a0cea47b87f7c004))
- typo of `transform-plugin-context.ts`
([#&#8203;1991](https://redirect.github.com/rolldown/rolldown/issues/1991))
([b2590fd](https://redirect.github.com/rolldown/rolldown/commit/b2590fd4a0b9643a5b6c956b2fa6d662d782a4cf))
- undefined export var
([#&#8203;2055](https://redirect.github.com/rolldown/rolldown/issues/2055))
([6832084](https://redirect.github.com/rolldown/rolldown/commit/6832084b7cd69daed9144ba365813bd3f280075c)),
closes
[/github.com/evanw/esbuild/blob/9c13ae1f06dfa909eb4a53882e3b7e4216a503fe/internal/js_parser/js_parser.go#L10047-L10050](https://redirect.github.com//github.com/evanw/esbuild/blob/9c13ae1f06dfa909eb4a53882e3b7e4216a503fe/internal/js_parser/js_parser.go/issues/L10047-L10050)
- using sanitize_file_name to generate valid file name
([#&#8203;1833](https://redirect.github.com/rolldown/rolldown/issues/1833))
([c9f8af4](https://redirect.github.com/rolldown/rolldown/commit/c9f8af403fa17316f1a1c0f9c5ad437b417f74e1))

##### Features

- add dynamic_import_vars plugin
([#&#8203;1732](https://redirect.github.com/rolldown/rolldown/issues/1732))
([40cf58b](https://redirect.github.com/rolldown/rolldown/commit/40cf58b9bb8b3f9d7145d97c25308213b68e2260))
- add invalid export option to generate diagnostic
([#&#8203;1692](https://redirect.github.com/rolldown/rolldown/issues/1692))
([ef718d7](https://redirect.github.com/rolldown/rolldown/commit/ef718d76dc143b1183a6e1f78f3a51b9b24cded0))
- add LoadOutput#ModuleType binding
([#&#8203;1998](https://redirect.github.com/rolldown/rolldown/issues/1998))
([1469985](https://redirect.github.com/rolldown/rolldown/commit/1469985c3649053bc3334a0f945b06e61ecda39e))
- add manifest plugin
([#&#8203;1839](https://redirect.github.com/rolldown/rolldown/issues/1839))
([8288370](https://redirect.github.com/rolldown/rolldown/commit/8288370c3904c79fffaff6fd024c61c69cfc0f79)),
closes
[#&#8203;1826](https://redirect.github.com/rolldown/rolldown/issues/1826)
- add module type to transform hook
([#&#8203;1907](https://redirect.github.com/rolldown/rolldown/issues/1907))
([159a155](https://redirect.github.com/rolldown/rolldown/commit/159a1559bc5204418317614426f303d87b5ae408))
- add module_preload_polyfill plugin
([#&#8203;1840](https://redirect.github.com/rolldown/rolldown/issues/1840))
([0651db0](https://redirect.github.com/rolldown/rolldown/commit/0651db0f0ac14e104bc15898d73f8e34cf64c4f3))
- add originalFileName to EmittedAsset
([#&#8203;2046](https://redirect.github.com/rolldown/rolldown/issues/2046))
([6facb04](https://redirect.github.com/rolldown/rolldown/commit/6facb04bc22f6966bb934812f89c7d4b2288458a))
- add query after each glob file name
([#&#8203;1838](https://redirect.github.com/rolldown/rolldown/issues/1838))
([bd97d60](https://redirect.github.com/rolldown/rolldown/commit/bd97d60ef581e3bd2aaf576a0aa6910161db3489))
- add some warnings in IIFE and CJS.
([#&#8203;1857](https://redirect.github.com/rolldown/rolldown/issues/1857))
([e7916ab](https://redirect.github.com/rolldown/rolldown/commit/e7916ab69eda952a98d8624a365e60a514e1e322)),
closes
[#&#8203;1855](https://redirect.github.com/rolldown/rolldown/issues/1855)
- add support for banner as str
([#&#8203;1810](https://redirect.github.com/rolldown/rolldown/issues/1810))
([12d6a75](https://redirect.github.com/rolldown/rolldown/commit/12d6a756bd9279298f1f2e1298693c47d2a255a6))
- add support for footer as str
([#&#8203;1819](https://redirect.github.com/rolldown/rolldown/issues/1819))
([48dc08e](https://redirect.github.com/rolldown/rolldown/commit/48dc08ec3bc69517a9fb3419f56d1a8a8b056b5c))
- add support for intro as str
([#&#8203;1820](https://redirect.github.com/rolldown/rolldown/issues/1820))
([2c7e4f4](https://redirect.github.com/rolldown/rolldown/commit/2c7e4f4b5751965372efa5bdf48e56b9c23dc507))
- add support for outro as str
([#&#8203;1821](https://redirect.github.com/rolldown/rolldown/issues/1821))
([46d56c4](https://redirect.github.com/rolldown/rolldown/commit/46d56c48b13eedf6f2e2f92cc6063e0debdee592))
- add use strict for iife
([#&#8203;1705](https://redirect.github.com/rolldown/rolldown/issues/1705))
([abe17bd](https://redirect.github.com/rolldown/rolldown/commit/abe17bdd3e9a8fb54f95c6d0074e60751d11c25e))
- add wasm fallback plugin
([#&#8203;1957](https://redirect.github.com/rolldown/rolldown/issues/1957))
([3645f38](https://redirect.github.com/rolldown/rolldown/commit/3645f38014b06e5db80f87091f3d4d3cf4ffd41e)),
closes
[#&#8203;1919](https://redirect.github.com/rolldown/rolldown/issues/1919)
- alias plugin
([#&#8203;2001](https://redirect.github.com/rolldown/rolldown/issues/2001))
([872bf3a](https://redirect.github.com/rolldown/rolldown/commit/872bf3addb3db766649f28e43e9613a134daa2ca)),
closes
[/github.com/rolldown/vite/blob/c1d60d11158318ae8ccaef873b6dc55d0a2f3c66/packages/vite/src/node/plugins/index.ts#L62-L65](https://redirect.github.com//github.com/rolldown/vite/blob/c1d60d11158318ae8ccaef873b6dc55d0a2f3c66/packages/vite/src/node/plugins/index.ts/issues/L62-L65)
- align cli options with unix ux patterns.
([#&#8203;1977](https://redirect.github.com/rolldown/rolldown/issues/1977))
([c820678](https://redirect.github.com/rolldown/rolldown/commit/c8206787d038bb469f9797a1cd24db934f8c77a3)),
closes
[#&#8203;1924](https://redirect.github.com/rolldown/rolldown/issues/1924)
- align generated chunk name with rollup
([#&#8203;2124](https://redirect.github.com/rolldown/rolldown/issues/2124))
([0bec3bc](https://redirect.github.com/rolldown/rolldown/commit/0bec3bc9ac80aa3b51cd711b17e737a7a3f1b5ff))
- align OutputOptions#esModule with rollup
([#&#8203;1898](https://redirect.github.com/rolldown/rolldown/issues/1898))
([c14406f](https://redirect.github.com/rolldown/rolldown/commit/c14406fb61051cba19833368a23539a4342c8e80)),
closes
[#&#8203;1888](https://redirect.github.com/rolldown/rolldown/issues/1888)
[/github.com/rolldown/rolldown/blob/e0751e4db539ce8e25ca8f31bb027475a0dd9e98/crates/rolldown_binding/src/options/binding_output_options/mod.rs#L37-L38](https://redirect.github.com//github.com/rolldown/rolldown/blob/e0751e4db539ce8e25ca8f31bb027475a0dd9e98/crates/rolldown_binding/src/options/binding_output_options/mod.rs/issues/L37-L38)
- allow passing array of array in `config.plugins`
([#&#8203;1938](https://redirect.github.com/rolldown/rolldown/issues/1938))
([b4e33d5](https://redirect.github.com/rolldown/rolldown/commit/b4e33d5e1a1138491631f6b83047dac62f54ddce))
- allow rewrite `moduleType` in transform Hook
([#&#8203;1916](https://redirect.github.com/rolldown/rolldown/issues/1916))
([cef3e57](https://redirect.github.com/rolldown/rolldown/commit/cef3e576aa2c7b09cb4cdf2bf1b5ab41ffa31887))
- assignment expr side effect detector
([#&#8203;2004](https://redirect.github.com/rolldown/rolldown/issues/2004))
([dde9b33](https://redirect.github.com/rolldown/rolldown/commit/dde9b33b409bfc909d089769d2817f178e00f30f))
- build import analysis plugin
([#&#8203;2051](https://redirect.github.com/rolldown/rolldown/issues/2051))
([9e461c2](https://redirect.github.co

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 10am on monday" in timezone
Asia/Shanghai, 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.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

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

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/rolldown/rolldown).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC43NC4xIiwidXBkYXRlZEluVmVyIjoiMzguOTcuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: IWANABETHATGUY <iwanabethatguy@qq.com>
kodiakhq bot pushed a commit to cloudquery/setup-cloudquery that referenced this pull request Mar 20, 2026
> ℹ️ **Note**
> 
> This PR body was truncated due to platform limits.

This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [execa](https://redirect.github.com/sindresorhus/execa) | [`8.0.1` → `9.6.1`](https://renovatebot.com/diffs/npm/execa/8.0.1/9.6.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/execa/9.6.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/execa/8.0.1/9.6.1?slim=true) |

---

### Release Notes

<details>
<summary>sindresorhus/execa (execa)</summary>

### [`v9.6.1`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.6.1)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.6.0...v9.6.1)

- Fix `VerboseOption` type not being properly exported ([#&#8203;1215](https://redirect.github.com/sindresorhus/execa/issues/1215))  [`7891c39`](https://redirect.github.com/sindresorhus/execa/commit/7891c39)

***

### [`v9.6.0`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.6.0)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.5.3...v9.6.0)

- Update dependencies  [`d49104a`](https://redirect.github.com/sindresorhus/execa/commit/d49104a)

***

### [`v9.5.3`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.5.3)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.5.2...v9.5.3)

- Fix Node 24-specific deprecation warning ([#&#8203;1199](https://redirect.github.com/sindresorhus/execa/issues/1199))  [`1ac5b91`](https://redirect.github.com/sindresorhus/execa/commit/1ac5b91)

***

### [`v9.5.2`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.5.2)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.5.1...v9.5.2)

#### Bug fixes

- Fix escaping newlines inside template strings. Thanks [@&#8203;aarondandy](https://redirect.github.com/aarondandy)! ([#&#8203;1176](https://redirect.github.com/sindresorhus/execa/issues/1176))

### [`v9.5.1`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.5.1)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.5.0...v9.5.1)

#### Bug fixes

- Fix odd characters being printed in `verbose` mode on Windows (thanks [@&#8203;IIIMADDINIII](https://redirect.github.com/IIIMADDINIII)). ([#&#8203;1167](https://redirect.github.com/sindresorhus/execa/issues/1167))

### [`v9.5.0`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.5.0)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.4.1...v9.5.0)

#### Features

- When redirecting `stdout` or `stderr` to a file, [allow appending](https://redirect.github.com/sindresorhus/execa/blob/main/docs/output.md#file-output) instead of overwriting.  ([#&#8203;1166](https://redirect.github.com/sindresorhus/execa/issues/1166))

```js
await execa({stdout: {file: 'output.txt', append: true}})`npm run build`;
```

### [`v9.4.1`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.4.1)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.4.0...v9.4.1)

#### Bug fixes

- Fix using `process.execPath` with Deno. Thanks [@&#8203;w3cj](https://redirect.github.com/w3cj)! ([#&#8203;1160](https://redirect.github.com/sindresorhus/execa/issues/1160))

### [`v9.4.0`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.4.0)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.3.1...v9.4.0)

#### Features

- We've created a separate package called [nano-spawn](https://redirect.github.com/sindresorhus/nano-spawn). It is similar to Execa but with fewer features, for a much smaller package size. [More info.](https://redirect.github.com/sindresorhus/execa/blob/main/docs/small.md)

#### Bug fixes

- Both [`execaNode()`](https://redirect.github.com/sindresorhus/execa/blob/main/docs/node.md) and the [`preferLocal`](https://redirect.github.com/sindresorhus/execa/blob/main/docs/environment.md#local-binaries) option modify the `PATH` environment variable. This release includes some minor improvements to ensure that environment variable remains small ([sindresorhus/npm-run-path#20](https://redirect.github.com/sindresorhus/npm-run-path/pull/20)). It also handles a few related edge cases better ([sindresorhus/npm-run-path#21](https://redirect.github.com/sindresorhus/npm-run-path/pull/21)).

#### Documentation

- Small documentation typo fix, thanks [@&#8203;rrthomas](https://redirect.github.com/rrthomas)! ([#&#8203;1153](https://redirect.github.com/sindresorhus/execa/issues/1153))

### [`v9.3.1`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.3.1)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.3.0...v9.3.1)

Thanks [@&#8203;holic](https://redirect.github.com/holic) and [@&#8203;jimhigson](https://redirect.github.com/jimhigson) for your contributions!

#### Bugs

- Do not crash when using a custom Node.js binary [without ICU support](https://nodejs.org/api/intl.html#disable-all-internationalization-features-none). ([#&#8203;1144](https://redirect.github.com/sindresorhus/execa/issues/1144))

#### Bugs (types)

- Fix type of the [`env`](docs/api.md#optionsenv) option. It was currently failing for Remix or Next.js users. (by [@&#8203;holic](https://redirect.github.com/holic)) ([#&#8203;1141](https://redirect.github.com/sindresorhus/execa/issues/1141))

#### Documentation

- Fix typo in "Inputs" documentation. (by [@&#8203;jimhigson](https://redirect.github.com/jimhigson)) ([#&#8203;1145](https://redirect.github.com/sindresorhus/execa/issues/1145))
- Document [how to terminate](docs/termination.md#inactivity-timeout) hanging subprocesses. ([#&#8203;1140](https://redirect.github.com/sindresorhus/execa/issues/1140))
- Document how to add [custom logging](readme.md#custom-logging). ([#&#8203;1131](https://redirect.github.com/sindresorhus/execa/issues/1131))

### [`v9.3.0`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.3.0)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.2.0...v9.3.0)

#### Features

- The [`verbose`](docs/api.md#optionsverbose) option can now be [a function](docs/api.md#verbose-function) to [customize logging](docs/debugging.md#custom-logging). ([#&#8203;1130](https://redirect.github.com/sindresorhus/execa/issues/1130))

### [`v9.2.0`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.2.0)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.1.0...v9.2.0)

This release includes a [new set of methods](docs/ipc.md) to exchange messages between the current process and a Node.js subprocess, also known as "IPC". This allows [passing](docs/input.md#any-input-type) and [returning](docs/output.md#any-output-type) almost any message type to/from a Node.js subprocess. Also, [debugging](docs/ipc.md#debugging) IPC is now much easier.

Moreover, a new [`gracefulCancel`](docs/api.md#optionsgracefulcancel) option has also been added to [terminate a subprocess gracefully](docs/termination.md#graceful-termination).

For a deeper dive-in, please check and share the [release post](https://medium.com/@&#8203;ehmicky/ipc-made-easy-with-execa-9-2-939c6a358731)!

Thanks [@&#8203;iiroj](https://redirect.github.com/iiroj) for your contribution, [@&#8203;SimonSiefke](https://redirect.github.com/SimonSiefke) and [@&#8203;adymorz](https://redirect.github.com/adymorz) for reporting the bugs fixed in this release, and [@&#8203;karlhorky](https://redirect.github.com/karlhorky) for improving the documentation!

#### Deprecations

- Passing `'ipc'` to the [`stdio`](docs/api.md#optionsstdio) option has been deprecated. It will be removed in the next major release. Instead, the [`ipc: true`](docs/api.md#optionsipc) option should be used. ([#&#8203;1056](https://redirect.github.com/sindresorhus/execa/issues/1056))

```diff
- await execa('npm', ['run', 'build'], {stdio: ['pipe', 'pipe', 'pipe', 'ipc']});
+ await execa('npm', ['run', 'build'], {ipc: true});
```

- The [`execaCommand()`](https://redirect.github.com/sindresorhus/execa/blob/v9.1.0/docs/api.md#execacommandcommand-options) method has been deprecated. It will be removed in the next major release. If most cases, the [template string syntax](docs/execution.md#template-string-syntax) should be used instead.

```diff
- import {execaCommand} from 'execa';
+ import {execa} from 'execa';

- await execaCommand('npm run build');
+ await execa`npm run build`;

const taskName = 'build';
- await execaCommand(`npm run ${taskName}`);
+ await execa`npm run ${taskName}`;

const commandArguments = ['run', 'task with space'];
await execa`npm ${commandArguments}`;
```

If the file and/or multiple arguments are supplied as a single string, [parseCommandString(command)](https://redirect.github.com/sindresorhus/execa/blob/main/docs/api.md#parsecommandstringcommand) can split that string into an array. [More info.](docs/escaping.md) ([#&#8203;1054](https://redirect.github.com/sindresorhus/execa/issues/1054))

```diff
- import {execaCommand} from 'execa';
+ import {execa, parseCommandString} from 'execa';

const commandString = 'npm run task';
- await execaCommand(commandString);
+ const commandArray = parseCommandString(commandString); // ['npm', 'run', 'task']
+ await execa`${commandArray}`;

// Or alternatively:
const [file, ...commandArguments] = commandArray;
await execa(file, commandArguments);
```

#### Features

- Add [`gracefulCancel`](docs/api.md#optionsgracefulcancel) option and [`getCancelSignal()`](docs/api.md#getcancelsignal) method to [terminate a subprocess gracefully](docs/termination.md#graceful-termination). [`error.isGracefullyCanceled`](docs/api.md#errorisgracefullycanceled) was also added. ([#&#8203;1109](https://redirect.github.com/sindresorhus/execa/issues/1109))
- Add [`error.isForcefullyTerminated`](docs/api.md#errorisforcefullyterminated). It is `true` when the subprocess was terminated by the [`forceKillAfterDelay`](docs/api.md#optionsforcekillafterdelay) option. ([#&#8203;1111](https://redirect.github.com/sindresorhus/execa/issues/1111))
- New methods to simplify exchanging messages between the current process and the subprocess. [More info.](docs/ipc.md) ([#&#8203;1059](https://redirect.github.com/sindresorhus/execa/issues/1059), [#&#8203;1061](https://redirect.github.com/sindresorhus/execa/issues/1061), [#&#8203;1076](https://redirect.github.com/sindresorhus/execa/issues/1076), [#&#8203;1077](https://redirect.github.com/sindresorhus/execa/issues/1077), [#&#8203;1079](https://redirect.github.com/sindresorhus/execa/issues/1079), [#&#8203;1082](https://redirect.github.com/sindresorhus/execa/issues/1082), [#&#8203;1083](https://redirect.github.com/sindresorhus/execa/issues/1083), [#&#8203;1086](https://redirect.github.com/sindresorhus/execa/issues/1086), [#&#8203;1087](https://redirect.github.com/sindresorhus/execa/issues/1087), [#&#8203;1088](https://redirect.github.com/sindresorhus/execa/issues/1088), [#&#8203;1089](https://redirect.github.com/sindresorhus/execa/issues/1089), [#&#8203;1090](https://redirect.github.com/sindresorhus/execa/issues/1090), [#&#8203;1091](https://redirect.github.com/sindresorhus/execa/issues/1091), [#&#8203;1092](https://redirect.github.com/sindresorhus/execa/issues/1092), [#&#8203;1094](https://redirect.github.com/sindresorhus/execa/issues/1094), [#&#8203;1095](https://redirect.github.com/sindresorhus/execa/issues/1095), [#&#8203;1098](https://redirect.github.com/sindresorhus/execa/issues/1098), [#&#8203;1104](https://redirect.github.com/sindresorhus/execa/issues/1104), [#&#8203;1107](https://redirect.github.com/sindresorhus/execa/issues/1107))
  - The current process sends messages with [`subprocess.sendMessage(message)`](docs/api.md#subprocesssendmessagemessage-sendmessageoptions) and receives them with [`subprocess.getOneMessage()`](docs/api.md#subprocessgetonemessagegetonemessageoptions). [`subprocess.getEachMessage()`](docs/api.md#subprocessgeteachmessagegeteachmessageoptions) listens to multiple messages.
  - The subprocess uses [`sendMessage(message)`](docs/api.md#sendmessagemessage-sendmessageoptions), [`getOneMessage()`](docs/api.md#getonemessagegetonemessageoptions) and [`getEachMessage()`](docs/api.md#geteachmessagegeteachmessageoptions) instead. Those are the same methods, but imported directly from the `'execa'` module.
- The [`ipcInput`](docs/ipc.md#send-an-initial-message) option sends an IPC message from the current process to the subprocess as it starts. This enables [passing almost any input type](docs/input.md#any-input-type) to a Node.js subprocess. ([#&#8203;1068](https://redirect.github.com/sindresorhus/execa/issues/1068))
- The [`result.ipcOutput`](docs/ipc.md#retrieve-all-messages) array contains all the IPC messages sent by the subprocess to the current process. This enables [returning almost any output type](docs/output.md#any-output-type) from a Node.js subprocess. ([#&#8203;1067](https://redirect.github.com/sindresorhus/execa/issues/1067), [#&#8203;1071](https://redirect.github.com/sindresorhus/execa/issues/1071), [#&#8203;1075](https://redirect.github.com/sindresorhus/execa/issues/1075))
- The [error message](docs/errors.md#error-message) now [contains every IPC message](docs/ipc.md#debugging) sent by the subprocess. ([#&#8203;1067](https://redirect.github.com/sindresorhus/execa/issues/1067))
- The [`verbose: 'full'`](docs/api.md#optionsverbose) option now logs every IPC message sent by the subprocess, for debugging. More info [here](docs/ipc.md#debugging) and [there](docs/output.md#stdoutstderr-specific-options). ([#&#8203;1063](https://redirect.github.com/sindresorhus/execa/issues/1063))

#### Types

- Add [`ExecaMethod`](docs/typescript.md#available-types), [`ExecaNodeMethod`](docs/typescript.md#available-types) and [`ExecaScriptMethod`](docs/typescript.md#available-types), [`ExecaSyncMethod`](docs/typescript.md#synchronous-execution) and [`ExecaScriptSyncMethod`](docs/typescript.md#synchronous-execution) types. ([#&#8203;1066](https://redirect.github.com/sindresorhus/execa/issues/1066))
- Export the `Message` type, for [IPC](docs/ipc.md). ([#&#8203;1059](https://redirect.github.com/sindresorhus/execa/issues/1059))
- Fix type of `forceKillAfterDelay: true` option. ([#&#8203;1116](https://redirect.github.com/sindresorhus/execa/issues/1116))

#### Bug fixes

- Fix passing a [`{file}`](docs/output.md#file-output) to both the [`stdin`](docs/api.md#optionsstdin) and the [`stdout`](docs/api.md#optionsstdout) or [`stderr`](docs/api.md#optionsstderr) options. ([#&#8203;1058](https://redirect.github.com/sindresorhus/execa/issues/1058))
- Fix multiple minor problems with the [`cancelSignal`](docs/termination.md#canceling) option. ([#&#8203;1108](https://redirect.github.com/sindresorhus/execa/issues/1108))
- Fix accidental publishing of Vim backup files. ([#&#8203;1074](https://redirect.github.com/sindresorhus/execa/issues/1074))
- Fix `engines.node` field in [`package.json`](package.json). Supported Node.js version is `^18.19.0` or `>=20.5.0`. (by [@&#8203;iiroj](https://redirect.github.com/iiroj)) ([#&#8203;1101](https://redirect.github.com/sindresorhus/execa/issues/1101))

### [`v9.1.0`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.1.0)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.0.2...v9.1.0)

#### Features (types)

- Export [`TemplateExpression`](docs/typescript.md#available-types) type. ([#&#8203;1049](https://redirect.github.com/sindresorhus/execa/issues/1049))

### [`v9.0.2`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.0.2)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.0.1...v9.0.2)

#### Bug fixes (types)

- Do not require using `--lib dom` for TypeScript users ([#&#8203;1043](https://redirect.github.com/sindresorhus/execa/issues/1043), [#&#8203;1044](https://redirect.github.com/sindresorhus/execa/issues/1044))
- Fix type of the `reject` option ([#&#8203;1046](https://redirect.github.com/sindresorhus/execa/issues/1046))

### [`v9.0.1`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.0.1)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v9.0.0...v9.0.1)

#### Bug fixes (types)

- Fix types not being importable ([#&#8203;1033](https://redirect.github.com/sindresorhus/execa/issues/1033))  [`3bdab60`](https://redirect.github.com/sindresorhus/execa/commit/3bdab60)
- Fix complexity bug with types ([#&#8203;1037](https://redirect.github.com/sindresorhus/execa/issues/1037))  [`6cc519b`](https://redirect.github.com/sindresorhus/execa/commit/6cc519b)
- Fix complexity bug with types ([#&#8203;1035](https://redirect.github.com/sindresorhus/execa/issues/1035))  [`fee011d`](https://redirect.github.com/sindresorhus/execa/commit/fee011d)

### [`v9.0.0`](https://redirect.github.com/sindresorhus/execa/releases/tag/v9.0.0)

[Compare Source](https://redirect.github.com/sindresorhus/execa/compare/v8.0.1...v9.0.0)

This major release brings many important features including:

- [Split the output](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#3a26) into lines, or [progressively iterate](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#3a26) over them.
- [Transform or filter](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#cbd6) the input/output using [simple functions](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#399a).
- Print the output [to the terminal](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#693f) while still retrieving it programmatically.
- Redirect the input/output [from/to a file](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#693f).
- [Advanced piping](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#ec17) between multiple subprocesses.
- Improved [verbose mode](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#2913), for debugging.
- More [detailed errors](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#40d7), including when [terminating subprocesses](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#668c).
- Enhanced [template string syntax](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#725b).
- [Global/shared options](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#bcbf).
- [Web streams](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#5731) and Transform streams support.
- [Convert the subprocess](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f#47b9) to a stream.
- [New documentation](readme.md#documentation) with many examples.

Please check the [release post](https://medium.com/@&#8203;ehmicky/execa-9-release-d0d5daaa097f) for a high-level overview! For the full list of breaking changes, features and bug fixes, please read below.

Thanks [@&#8203;younggglcy](https://redirect.github.com/younggglcy), [@&#8203;koshic](https://redirect.github.com/koshic), [@&#8203;am0o0](https://redirect.github.com/am0o0) and [@&#8203;codesmith-emmy](https://redirect.github.com/codesmith-emmy) for your help!

***

One of the maintainers [@&#8203;ehmicky](https://redirect.github.com/ehmicky) is looking for a remote full-time position. Specialized in Node.js back-ends and CLIs, he led Netlify [Build](https://www.netlify.com/platform/core/build/), [Plugins](https://www.netlify.com/integrations/) and Configuration for 2.5 years. Feel free to contact him on [his website](https://www.mickael-hebert.com) or on [LinkedIn](https://www.linkedin.com/in/mickaelhebert/)!

***

#### Breaking changes (not types)

- Dropped support for Node.js version `<18.19.0` and `20.0.0 - 20.4.0`. ([`834e372`](https://redirect.github.com/sindresorhus/execa/commit/834e3726))

- When the [`encoding` option](docs/api.md#optionsencoding) is `'buffer'`, the output ([`result.stdout`](docs/api.md#resultstdout), [`result.stderr`](docs/api.md#resultstderr), [`result.all`](docs/api.md#resultall)) is now an [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) instead of a [`Buffer`](https://nodejs.org/api/buffer.html#class-buffer). For more information, see [this blog post](https://sindresorhus.com/blog/goodbye-nodejs-buffer). (by [@&#8203;younggglcy](https://redirect.github.com/younggglcy)) ([#&#8203;586](https://redirect.github.com/sindresorhus/execa/issues/586))

```js
const {stdout} = await execa('node', ['file.js'], {encoding: 'buffer'});
console.log(stdout); // This is now an Uint8Array
```

- Renamed some of the allowed values for the [`encoding`](docs/api.md#optionsencoding) option. ([#&#8203;586](https://redirect.github.com/sindresorhus/execa/issues/586), [#&#8203;928](https://redirect.github.com/sindresorhus/execa/issues/928))

```diff
- await execa('node', ['file.js'], {encoding: null});
+ await execa('node', ['file.js'], {encoding: 'buffer'});

- await execa('node', ['file.js'], {encoding: 'utf-8'});
+ await execa('node', ['file.js'], {encoding: 'utf8'});

- await execa('node', ['file.js'], {encoding: 'UTF8'});
+ await execa('node', ['file.js'], {encoding: 'utf8'});

- await execa('node', ['file.js'], {encoding: 'utf-16le'});
+ await execa('node', ['file.js'], {encoding: 'utf16le'});

- await execa('node', ['file.js'], {encoding: 'ucs2'});
+ await execa('node', ['file.js'], {encoding: 'utf16le'});

- await execa('node', ['file.js'], {encoding: 'ucs-2'});
+ await execa('node', ['file.js'], {encoding: 'utf16le'});

- await execa('node', ['file.js'], {encoding: 'binary'});
+ await execa('node', ['file.js'], {encoding: 'latin1'});
```

- Passing a file path to `subprocess.pipeStdout()`, `subprocess.pipeStderr()` and `subprocess.pipeAll()` has been removed. Instead, a [`{file: './path'}` object](docs/output.md#file-output) should be passed to the [`stdout`](docs/api.md#optionsstdout) or [`stderr`](docs/api.md#optionsstderr) option. ([#&#8203;752](https://redirect.github.com/sindresorhus/execa/issues/752))

```diff
- await execa('node', ['file.js']).pipeStdout('output.txt');
+ await execa('node', ['file.js'], {stdout: {file: 'output.txt'}});

- await execa('node', ['file.js']).pipeStderr('output.txt');
+ await execa('node', ['file.js'], {stderr: {file: 'output.txt'}});

- await execa('node', ['file.js']).pipeAll('output.txt');
+ await execa('node', ['file.js'], {
+	stdout: {file: 'output.txt'},
+	stderr: {file: 'output.txt'},
+});
```

- Passing a [writable stream](https://nodejs.org/api/stream.html#class-streamwritable) to `subprocess.pipeStdout()`, `subprocess.pipeStderr()` and `subprocess.pipeAll()` has been removed. Instead, the stream should be passed to the [`stdout`](docs/api.md#optionsstdout) or [`stderr`](docs/api.md#optionsstderr) option. If the stream [does not have a file descriptor](docs/streams.md#file-descriptors), [`['pipe', stream]`](docs/output.md#multiple-targets) should be passed instead. ([#&#8203;752](https://redirect.github.com/sindresorhus/execa/issues/752))

```diff
- await execa('node', ['file.js']).pipeStdout(stream);
+ await execa('node', ['file.js'], {stdout: ['pipe', stream]});

- await execa('node', ['file.js']).pipeStderr(stream);
+ await execa('node', ['file.js'], {stderr: ['pipe', stream]});

- await execa('node', ['file.js']).pipeAll(stream);
+ await execa('node', ['file.js'], {
+	stdout: ['pipe', stream],
+	stderr: ['pipe', stream],
+});
```

- The `subprocess.pipeStdout()`, `subprocess.pipeStderr()` and `subprocess.pipeAll()` methods have been renamed to [`subprocess.pipe()`](docs/api.md#subprocesspipefile-arguments-options). The command and its arguments can be passed to `subprocess.pipe()` directly, without calling `execa()` a second time. The [`from`](docs/api.md#pipeoptionsfrom) piping option can specify `'stdout'` (the default value), `'stderr'` or `'all'`. ([#&#8203;757](https://redirect.github.com/sindresorhus/execa/issues/757))

```diff
- await execa('node', ['file.js']).pipeStdout(execa('node', ['other.js']));
+ await execa('node', ['file.js']).pipe('node', ['other.js']);

- await execa('node', ['file.js']).pipeStderr(execa('node', ['other.js']));
+ await execa('node', ['file.js']).pipe('node', ['other.js'], {from: 'stderr'});

- await execa('node', ['file.js']).pipeAll(execa('node', ['other.js']));
+ await execa('node', ['file.js']).pipe('node', ['other.js'], {from: 'all'});
```

- Renamed the `signal` option to [`cancelSignal`](docs/api.md#optionscancelsignal). ([#&#8203;880](https://redirect.github.com/sindresorhus/execa/issues/880))

```diff
- await execa('node', ['file.js'], {signal: abortController.signal});
+ await execa('node', ['file.js'], {cancelSignal: abortController.signal});
```

- Renamed `error.killed` to [`error.isTerminated`](docs/api.md#erroristerminated). ([#&#8203;625](https://redirect.github.com/sindresorhus/execa/issues/625))

```diff
try {
	await execa('node', ['file.js']);
} catch (error) {
- if (error.killed) {
+ if (error.isTerminated) {
		// ...
	}
}
```

- `subprocess.cancel()` has been removed. Please use either [`subprocess.kill()`](docs/api.md#subprocesskillsignal-error) or the [`cancelSignal`](docs/api.md#optionscancelsignal) option instead. ([#&#8203;711](https://redirect.github.com/sindresorhus/execa/issues/711))

```diff
- subprocess.cancel();
+ subprocess.kill();
```

- Renamed the `forceKillAfterTimeout` option to [`forceKillAfterDelay`](docs/api.md#optionsforcekillafterdelay). Also, it is now passed to [`execa()`](docs/api.md#execafile-arguments-options) instead of [`subprocess.kill()`](docs/api.md#subprocesskillsignal-error). ([#&#8203;714](https://redirect.github.com/sindresorhus/execa/issues/714), [#&#8203;723](https://redirect.github.com/sindresorhus/execa/issues/723))

```diff
- const subprocess = execa('node', ['file.js']);
- subprocess.kill('SIGTERM', {forceKillAfterTimeout: 1000});
+ const subprocess = execa('node', ['file.js'], {forceKillAfterDelay: 1000});
+ subprocess.kill('SIGTERM');
```

- The [`verbose`](docs/api.md#optionsverbose) option is now a string enum instead of a boolean. `false` has been renamed to `'none'` and `true` has been renamed to [`'short'`](docs/debugging.md#short-mode). ([#&#8203;884](https://redirect.github.com/sindresorhus/execa/issues/884))

```diff
- await execa('node', ['file.js'], {verbose: false});
+ await execa('node', ['file.js'], {verbose: 'none'});

- await execa('node', ['file.js'], {verbose: true});
+ await execa('node', ['file.js'], {verbose: 'short'});
```

- The `execPath` option has been renamed to [`nodePath`](docs/api.md#optionsnodepath). It is now a noop unless the [`node`](docs/api.md#optionsnode) option is `true`. Also, it now works even if the [`preferLocal`](docs/api.md#optionspreferlocal) option is `false`. ([#&#8203;812](https://redirect.github.com/sindresorhus/execa/issues/812), [#&#8203;815](https://redirect.github.com/sindresorhus/execa/issues/815))

```diff
- await execa('node', ['file.js'], {execPath: './path/to/node'});
+ await execa('node', ['file.js'], {nodePath: './path/to/node'});
```

- The [default value](docs/ipc.md#message-type) for the [`serialization`](docs/api.md#optionsserialization) option is now [`'advanced'`](https://nodejs.org/api/child_process.html#advanced-serialization) instead of `'json'`. In particular, when calling [`subprocess.send(object)`](docs/api.md#subprocesssendmessage) with an object that contains functions or symbols, those were previously silently removed. Now this will throw an exception. ([#&#8203;905](https://redirect.github.com/sindresorhus/execa/issues/905))

```diff
- subprocess.send({example: true, getExample() {}});
+ subprocess.send({example: true});
```

- If [`subprocess.stdout`](docs/api.md#subprocessstdout), [`subprocess.stderr`](docs/api.md#subprocessstderr) or [`subprocess.all`](docs/api.md#subprocessall) is manually piped, the [`.pipe()`](https://nodejs.org/api/stream.html#readablepipedestination-options) call must now happen as soon as `subprocess` is created. Otherwise, the output at the beginning of the subprocess might be missing. ([#&#8203;658](https://redirect.github.com/sindresorhus/execa/issues/658), [#&#8203;747](https://redirect.github.com/sindresorhus/execa/issues/747))

```diff
const subprocess = execa('node', ['file.js']);
- setTimeout(() => {
	subprocess.stdout.pipe(process.stdout);
- }, 0);
```

- Signals passed to [`subprocess.kill()`](docs/api.md#subprocesskillsignal-error) and to the [`killSignal`](docs/api.md#optionskillsignal) option cannot be lowercase anymore. ([#&#8203;1025](https://redirect.github.com/sindresorhus/execa/issues/1025))

```diff
- const subprocess = execa('node', ['file.js'], {killSignal: 'sigterm'});
+ const subprocess = execa('node', ['file.js'], {killSignal: 'SIGTERM'});

- subprocess.kill('sigterm');
+ subprocess.kill('SIGTERM');
```

#### Features

##### Execution

- Use the [template string syntax](docs/execution.md#template-string-syntax) with any method (including [`execa()`](docs/api.md#execacommand)), as opposed to only [`$`](docs/api.md#file-arguments-options). Conversely, `$` can now use the [regular array syntax](docs/scripts.md#template-string-syntax). ([#&#8203;933](https://redirect.github.com/sindresorhus/execa/issues/933))
- A command's template string can span [multiple lines](docs/execution.md#multiple-lines). ([#&#8203;843](https://redirect.github.com/sindresorhus/execa/issues/843))
- [Share options](docs/execution.md#globalshared-options) between multiple calls, or set global options, by using [`execa(options)`](docs/api#execaoptions). ([#&#8203;933](https://redirect.github.com/sindresorhus/execa/issues/933), [#&#8203;965](https://redirect.github.com/sindresorhus/execa/issues/965))
- Pass a file URL (as opposed to a file path string) to [`execa()`](docs/api.md#execafile-arguments-options), [`execaNode()`](docs/api.md#execanodescriptpath-arguments-options), the [`inputFile`](docs/api.md#optionsinputfile) option, the [`nodePath`](docs/api.md#optionsnodepath) option or the [`shell`](docs/api.md#optionsshell) option. ([#&#8203;630](https://redirect.github.com/sindresorhus/execa/issues/630), [#&#8203;631](https://redirect.github.com/sindresorhus/execa/issues/631), [#&#8203;632](https://redirect.github.com/sindresorhus/execa/issues/632), [#&#8203;635](https://redirect.github.com/sindresorhus/execa/issues/635))

##### Text lines

- [Split the output](docs/lines.md#simple-splitting) into text lines by using the [`lines`](docs/api.md#optionslines) option. ([#&#8203;741](https://redirect.github.com/sindresorhus/execa/issues/741), [#&#8203;929](https://redirect.github.com/sindresorhus/execa/issues/929), [#&#8203;931](https://redirect.github.com/sindresorhus/execa/issues/931), [#&#8203;948](https://redirect.github.com/sindresorhus/execa/issues/948), [#&#8203;951](https://redirect.github.com/sindresorhus/execa/issues/951), [#&#8203;957](https://redirect.github.com/sindresorhus/execa/issues/957))
- Subprocess is now an [async iterable](docs/api.md#subprocesssymbolasynciterator), [iterating over the output](docs/lines.md#progressive-splitting) lines while the subprocess is running. ([#&#8203;923](https://redirect.github.com/sindresorhus/execa/issues/923))

##### Piping multiple subprocesses

- Simpler syntax: pass the [command directly](docs/pipe.md#array-syntax) to [`subprocess.pipe()`](docs/api.md#subprocesspipefile-arguments-options) without calling [`execa()`](docs/api.md#execafile-arguments-options). A [template string](docs/pipe.md#template-string-syntax) can also be used. ([#&#8203;840](https://redirect.github.com/sindresorhus/execa/issues/840), [#&#8203;859](https://redirect.github.com/sindresorhus/execa/issues/859), [#&#8203;864](https://redirect.github.com/sindresorhus/execa/issues/864))
- [Wait for both subprocesses](docs/pipe.md#result) to complete. [Error handling](docs/pipe.md#errors) has been improved too. ([#&#8203;757](https://redirect.github.com/sindresorhus/execa/issues/757), [#&#8203;778](https://redirect.github.com/sindresorhus/execa/issues/778), [#&#8203;834](https://redirect.github.com/sindresorhus/execa/issues/834), [#&#8203;854](https://redirect.github.com/sindresorhus/execa/issues/854))
- Retrieve the [result](docs/pipe.md#result) of each subprocess (not only the last one) by using [`result.pipedFrom`](docs/api.md#resultpipedfrom) and [`error.pipedFrom`](docs/api.md#resultpipedfrom). ([#&#8203;834](https://redirect.github.com/sindresorhus/execa/issues/834))
- Pipe 1 or [many subprocesses](docs/pipe.md#multiple-sources-1-destination) to 1 or [many subprocesses](docs/pipe.md#1-source-multiple-destinations). ([#&#8203;834](https://redirect.github.com/sindresorhus/execa/issues/834))
- Pipe subprocesses using [other file descriptors](docs/pipe.md#source-file-descriptor) than `stdin`/`stdout`/`stderr` by using the [`from`](docs/api.md#pipeoptionsfrom) and [`to`](docs/api.md#pipeoptionsto) piping options. ([#&#8203;757](https://redirect.github.com/sindresorhus/execa/issues/757), [#&#8203;834](https://redirect.github.com/sindresorhus/execa/issues/834), [#&#8203;903](https://redirect.github.com/sindresorhus/execa/issues/903), [#&#8203;920](https://redirect.github.com/sindresorhus/execa/issues/920))
- [Cancel piping](docs/pipe.md#unpipe) subprocesses by using the [`unpipeSignal`](docs/api.md#pipeoptionsunpipesignal) piping option. ([#&#8203;834](https://redirect.github.com/sindresorhus/execa/issues/834), [#&#8203;852](https://redirect.github.com/sindresorhus/execa/issues/852))

##### Input/output

- Pass an array with [multiple values](docs/output.md#multiple-targets) to the [`stdin`](docs/api.md#optionsstdin), [`stdout`](docs/api.md#optionsstdout) and [`stderr`](docs/api.md#optionsstderr) options. For example, [`stdout: ['inherit', 'pipe']`](docs/output.md#multiple-targets) prints the output [to the terminal](docs/output.md#terminal-output) while still [returning it](docs/output.md#stdout-and-stderr) as [`result.stdout`](docs/api.md#resultstdout). ([#&#8203;643](https://redirect.github.com/sindresorhus/execa/issues/643), [#&#8203;765](https://redirect.github.com/sindresorhus/execa/issues/765), [#&#8203;941](https://redirect.github.com/sindresorhus/execa/issues/941), [#&#8203;954](https://redirect.github.com/sindresorhus/execa/issues/954))
- Redirect the [input](docs/input.md#file-input)/[output](docs/output.md#file-output) from/to a file by passing a `{file: './path'}` object or a file URL to the [`stdin`](docs/api.md#optionsstdin), [`stdout`](docs/api.md#optionsstdout) or [`stderr`](docs/api.md#optionsstderr) option. ([#&#8203;610](https://redirect.github.com/sindresorhus/execa/issues/610), [#&#8203;614](https://redirect.github.com/sindresorhus/execa/issues/614), [#&#8203;621](https://redirect.github.com/sindresorhus/execa/issues/621), [#&#8203;671](https://redirect.github.com/sindresorhus/execa/issues/671), [#&#8203;1004](https://redirect.github.com/sindresorhus/execa/issues/1004))
- [Transform](docs/transform.md) or [filter](docs/transform.md#filtering) the input/output by passing a generator function to the [`stdin`](docs/api.md#optionsstdin), [`stdout`](docs/api.md#optionsstdout) or [`stderr`](docs/api.md#optionsstderr) option. ([#&#8203;693](https://redirect.github.com/sindresorhus/execa/issues/693), [#&#8203;697](https://redirect.github.com/sindresorhus/execa/issues/697), [#&#8203;698](https://redirect.github.com/sindresorhus/execa/issues/698), [#&#8203;699](https://redirect.github.com/sindresorhus/execa/issues/699), [#&#8203;709](https://redirect.github.com/sindresorhus/execa/issues/709), [#&#8203;736](https://redirect.github.com/sindresorhus/execa/issues/736), [#&#8203;737](https://redirect.github.com/sindresorhus/execa/issues/737), [#&#8203;739](https://redirect.github.com/sindresorhus/execa/issues/739), [#&#8203;740](https://redirect.github.com/sindresorhus/execa/issues/740), [#&#8203;746](https://redirect.github.com/sindresorhus/execa/issues/746), [#&#8203;748](https://redirect.github.com/sindresorhus/execa/issues/748), [#&#8203;755](https://redirect.github.com/sindresorhus/execa/issues/755), [#&#8203;756](https://redirect.github.com/sindresorhus/execa/issues/756), [#&#8203;780](https://redirect.github.com/sindresorhus/execa/issues/780), [#&#8203;783](https://redirect.github.com/sindresorhus/execa/issues/783), [#&#8203;867](https://redirect.github.com/sindresorhus/execa/issues/867), [#&#8203;915](https://redirect.github.com/sindresorhus/execa/issues/915), [#&#8203;916](https://redirect.github.com/sindresorhus/execa/issues/916), [#&#8203;917](https://redirect.github.com/sindresorhus/execa/issues/917), [#&#8203;919](https://redirect.github.com/sindresorhus/execa/issues/919), [#&#8203;924](https://redirect.github.com/sindresorhus/execa/issues/924), [#&#8203;926](https://redirect.github.com/sindresorhus/execa/issues/926), [#&#8203;945](https://redirect.github.com/sindresorhus/execa/issues/945), [#&#8203;969](https://redirect.github.com/sindresorhus/execa/issues/969))
- Provide some [binary input](docs/binary.md#binary-input) by passing an [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) to the [`input`](docs/api.md#optionsinput) or [`stdin`](docs/api.md#optionsstdin) option. ([`834e372`](https://redirect.github.com/sindresorhus/execa/commit/834e3726), [#&#8203;670](https://redirect.github.com/sindresorhus/execa/issues/670), [#&#8203;1029](https://redirect.github.com/sindresorhus/execa/issues/1029))
- Provide some [progressive input](docs/streams.md#iterables-as-input) by passing a sync/async [iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#the_async_iterator_and_async_iterable_protocols) to the [`stdin`](docs/api.md#optionsstdin) option. ([#&#8203;604](https://redirect.github.com/sindresorhus/execa/issues/604), [#&#8203;944](https://redirect.github.com/sindresorhus/execa/issues/944))
- Provide [multiple inputs](docs/output.md#multiple-targets) by combining the [`stdin`](docs/api.md#optionsstdin), [`input`](docs/api.md#optionsinput) and [`inputFile`](docs/api.md#optionsinputfile) options. ([#&#8203;666](https://redirect.github.com/sindresorhus/execa/issues/666))
- Return [other file descriptors](docs/output.md#additional-file-descriptors) than [`result.stdout`](docs/api.md#resultstdout) and [`result.stderr`](docs/api.md#resultstderr) by using [`result.stdio`](docs/api.md#resultstdio). ([#&#8203;676](https://redirect.github.com/sindresorhus/execa/issues/676))
- [Specify different values](docs/output.md#stdoutstderr-specific-options) for [`stdout`](docs/api.md#optionsstdout) and [`stderr`](docs/api.md#optionsstderr) with the following options: [`verbose`](docs/api.md#optionsverbose), [`lines`](docs/api.md#optionslines), [`stripFinalNewline`](docs/api.md#optionsstripfinalnewline), [`maxBuffer`](docs/api.md#optionsmaxbuffer), [`buffer`](docs/api.md#optionsbuffer). ([#&#8203;966](https://redirect.github.com/sindresorhus/execa/issues/966), [#&#8203;970](https://redirect.github.com/sindresorhus/execa/issues/970), [#&#8203;971](https://redirect.github.com/sindresorhus/execa/issues/971), [#&#8203;972](https://redirect.github.com/sindresorhus/execa/issues/972), [#&#8203;973](https://redirect.github.com/sindresorhus/execa/issues/973), [#&#8203;974](https://redirect.github.com/sindresorhus/execa/issues/974))

##### Streams

- Redirect the input/output from/to a [web stream](docs/streams.md#web-streams) by passing a [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream) or [`WritableStream`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStream) to the [`stdin`](docs/api.md#optionsstdin), [`stdout`](docs/api.md#optionsstdout) or [`stderr`](docs/api.md#optionsstderr) option. ([#&#8203;615](https://redirect.github.com/sindresorhus/execa/issues/615), [#&#8203;619](https://redirect.github.com/sindresorhus/execa/issues/619), [#&#8203;645](https://redirect.github.com/sindresorhus/execa/issues/645))
- [Transform or filter](docs/transform.md#duplextransform-streams) the input/output by passing a [`Duplex`](https://nodejs.org/api/stream.html#class-streamduplex), Node.js [`Transform`](https://nodejs.org/api/stream.html#class-streamtransform) or web [`TransformStream`](https://developer.mozilla.org/en-US/docs/Web/API/TransformStream) to the [`stdin`](docs/api.md#optionsstdin), [`stdout`](docs/api.md#optionsstdout) or [`stderr`](docs/api.md#optionsstderr) option. ([#&#8203;937](https://redirect.github.com/sindresorhus/execa/issues/937), [#&#8203;938](https://redirect.github.com/sindresorhus/execa/issues/938))
- [Convert the subprocess](docs/streams.md#converting-a-subprocess-to-a-stream) to a stream by using [`subprocess.readable()`](docs/api.md#subprocessreadablereadableoptions), [`subprocess.writable()`](docs/api.md#subprocesswritablewritableoptions) or [`subprocess.duplex()`](docs/api.md#subprocessduplexduplexoptions). ([#&#8203;912](https://redirect.github.com/sindresorhus/execa/issues/912), [#&#8203;922](https://redirect.github.com/sindresorhus/execa/issues/922), [#&#8203;958](https://redirect.github.com/sindresorhus/execa/issues/958))

##### Verbose mode

- Print the subprocess' [completion, duration and errors](docs/debugging.md#short-mode) with the [`verbose: 'short'`](docs/api.md#optionsverbose) or `verbose: 'full'` option. ([#&#8203;887](https://redirect.github.com/sindresorhus/execa/issues/887), [#&#8203;890](https://redirect.github.com/sindresorhus/execa/issues/890))
- Print the subprocess' [output](docs/debugging.md#full-mode) with the [`verbose: 'full'`](docs/api.md#optionsverbose) option. ([#&#8203;884](https://redirect.github.com/sindresorhus/execa/issues/884), [#&#8203;950](https://redirect.github.com/sindresorhus/execa/issues/950), [#&#8203;962](https://redirect.github.com/sindresorhus/execa/issues/962), [#&#8203;990](https://redirect.github.com/sindresorhus/execa/issues/990))
- Prettier formatting and [colors](docs/debugging.md#colors) with the [`verbose`](docs/api.md#optionsverbose) option. ([#&#8203;883](https://redirect.github.com/sindresorhus/execa/issues/883), [#&#8203;893](https://redirect.github.com/sindresorhus/execa/issues/893), [#&#8203;894](https://redirect.github.com/sindresorhus/execa/issues/894))

##### Debugging

- Retrieve the subprocess' [duration](docs/debugging.md#duration) by using [`result.durationMs`](docs/api.md#resultdurationms) and [`error.durationMs`](docs/api.md#resultdurationms). ([#&#8203;896](https://redirect.github.com/sindresorhus/execa/issues/896))
- Retrieve the subprocess' [current directory](docs/environment.md#current-directory) by using [`result.cwd`](docs/api.md#resultcwd). Previously only [`error.cwd`](docs/api.md#execaerror) was available. Also, `result.cwd` and `error.cwd` are now normalized to absolute file paths. ([#&#8203;803](https://redirect.github.com/sindresorhus/execa/issues/803))
- Printing [`result.escapedCommand`](docs/api.md#resultescapedcommand) in a terminal [is now safe](docs/debugging.md#command). ([#&#8203;875](https://redirect.github.com/sindresorhus/execa/issues/875))

##### Errors

- The [`ExecaError`](docs/api.md#execaerror) and [`ExecaSyncError`](docs/api.md#execasyncerror) classes [are now exported](docs/errors.md#subprocess-failure). ([#&#8203;911](https://redirect.github.com/sindresorhus/execa/issues/911))
- Find the subprocess failure's [root cause](docs/termination.md#error-message-and-stack-trace) by using [`error.cause`](docs/api.md#errorcause). ([#&#8203;911](https://redirect.github.com/sindresorhus/execa/issues/911))
- Know whether [the subprocess failed](docs/errors.md#failure-reason) due to the [`maxBuffer`](docs/api.md#optionsmaxbuffer) option by using [`error.isMaxBuffer`](docs/api.md#errorismaxbuffer). ([#&#8203;963](https://redirect.github.com/sindresorhus/execa/issues/963))
- Improved [`error.message`](docs/api.md#errormessage): [`error.stdout`](docs/api.md#resultstdout) and [`error.stderr`](docs/api.md#resultstderr) are now [interleaved](docs/output.md#interleaved-output) if the [`all`](docs/api.md#optionsall) option is `true`. [Additional file descriptors](docs/output.md#additional-file-descriptors) are now printed too. Also, the [formatting](docs/errors.md#error-message) has been improved. ([#&#8203;676](https://redirect.github.com/sindresorhus/execa/issues/676), [#&#8203;705](https://redirect.github.com/sindresorhus/execa/issues/705), [#&#8203;991](https://redirect.github.com/sindresorhus/execa/issues/991), [#&#8203;992](https://redirect.github.com/sindresorhus/execa/issues/992))
- [Control characters](https://en.wikipedia.org/wiki/Control_character) in [`error.message`](docs/api.md#errormessage) are now escaped, so they don't result in visual bugs when printed in a terminal. ([#&#8203;879](https://redirect.github.com/sindresorhus/execa/issues/879))
- Improved stack trace when an [`error`](https://nodejs.org/api/stream.html#event-error_1) event is emitted on [`subprocess.stdout`](docs/api.md#subprocessstdout) or [`subprocess.stderr`](docs/api.md#subprocessstderr). ([#&#8203;814](https://redirect.github.com/sindresorhus/execa/issues/814))

##### Termination

- Specify an [error message or stack trace](docs/termination.md#error-message-and-stack-trace) when terminating a subprocess by passing an error instance to [`subprocess.kill()`](docs/api.md#subprocesskillerror). ([#&#8203;811](https://redirect.github.com/sindresorhus/execa/issues/811), [#&#8203;836](https://redirect.github.com/sindresorhus/execa/issues/836), [#&#8203;1023](https://redirect.github.com/sindresorhus/execa/issues/1023))
- The [`forceKillAfterDelay`](docs/api.md#optionsforcekillafterdelay) and [`killSignal`](docs/api.md#optionskillsignal) options [now apply to terminations](docs/termination.md#default-signal) due not only to [`subprocess.kill()`](docs/api.md#subprocesskillsignal-error) but [also to](docs/termination.md#forceful-termination) the [`cancelSignal`](docs/api.md#optionscancelsignal), [`timeout`](docs/api.md#optionstimeout), [`maxBuffer`](docs/api.md#optionsmaxbuffer) and [`cleanup`](docs/api.md#optionscleanup) options. ([#&#8203;714](https://redirect.github.com/sindresorhus/execa/issues/714), [#&#8203;728](https://redirect.github.com/sindresorhus/execa/issues/728))

##### Node.js files

- Use the [`nodePath`](docs/api.md#optionsnodepath) and [`nodeOptions`](docs/api.md#optionsnodeoptions) options with [any method](docs/api.md#methods), as opposed to only [`execaNode()`](docs/api.md#execanodescriptpath-arguments-options), by passing the [`node: true`](docs/api.md#optionsnode) option. ([#&#8203;804](https://redirect.github.com/sindresorhus/execa/issues/804), [#&#8203;812](https://redirect.github.com/sindresorhus/execa/issues/812), [#&#8203;815](https://redirect.github.com/sindresorhus/execa/issues/815))
- When using [`execaNode()`](docs/api.md#execanodescriptpath-arguments-options) or the [`node: true`](docs/api.md#optionsnode) option, the [current Node.js version](docs/node.md#nodejs-version) is now inherited deeply. If the subprocess spawns other subprocesses, they will all use the [same Node.js version](docs/api.md#optionsnodepath). ([#&#8203;812](https://redirect.github.com/sindresorhus/execa/issues/812), [#&#8203;815](https://redirect.github.com/sindresorhus/execa/issues/815), [#&#8203;1011](https://redirect.github.com/sindresorhus/execa/issues/1011))

##### Synchronous execution

- Use the [`all`](docs/api.md#optionsall) and [`buffer: false`](docs/api.md#optionsbuffer) options with [`execaSync()`](docs/api.md#execasyncfile-arguments-options), as opposed to only [`execa()`](docs/api.md#execafile-arguments-options). ([#&#8203;953](https://redirect.github.com/sindresorhus/execa/issues/953), [#&#8203;956](https://redirect.github.com/sindresorhus/execa/issues/956))
- Added the [`$.s`](docs/api.md#file-arguments-options) alias for [`$.sync`](docs/api.md#file-arguments-options). ([#&#8203;594](https://redirect.github.com/sindresorhus/execa/issues/594))

##### Inter-process communication

- Use the [`ipc: true`](docs/api.md#optionsipc) option, as [opposed to the more verbose](docs/ipc.md#exchanging-messages) [`stdio: ['pipe', 'pipe', 'pipe', 'ipc']`](docs/api.md#optionsstdio) option. ([#&#8203;794](https://redirect.github.com/sindresorhus/execa/issues/794))

##### Input validation

- Improved the validation of the [`input`](docs/api.md#optionsinput), [`timeout`](docs/api.md#optionstimeout), [`cwd`](docs/api.md#optionscwd), [`detached`](docs/api.md#optionsdetached), [`cancelSignal`](docs/api.md#optionscancelsignal) and [`encoding`](docs/api.md#optionsencoding) options. ([#&#8203;668](https://redirect.github.com/sindresorhus/execa/issues/668), [#&#8203;715](https://redirect.github.com/sindresorhus/execa/issues/715), [#&#8203;803](https://redirect.github.com/sindresorhus/execa/issues/803), [#&#8203;928](https://redirect.github.com/sindresorhus/execa/issues/928), [#&#8203;940](https://redirect.github.com/sindresorhus/execa/issues/940))
- Improved the validation of the arguments passed to [`execa()`](docs/api.md#execafile-arguments-options) and the [other exported methods](docs/api.md#methods). ([#&#8203;838](https://redirect.github.com/sindresorhus/execa/issues/838), [#&#8203;873](https://redirect.github.com/sindresorhus/execa/issues/873), [#&#8203;899](https://redirect.github.com/sindresorhus/execa/issues/899))
- Improved the validation of signals passed to [`subprocess.kill()`](docs/api.md#subprocesskillsignal-error) and to the [`killSignal`](docs/api.md#optionskillsignal) option. ([#&#8203;1025](https://redirect.github.com/sindresorhus/execa/issues/1025))

#### Bug fixes

- Fixed passing `undefined` values as [options](docs/api.md#options). This now uses the option's default value. ([#&#8203;712](https://redirect.github.com/sindresorhus/execa/issues/712))
- Fixed the process crashing when the [`inputFile`](docs/api.md#optionsinputfile) option points to a missing file. ([#&#8203;609](https://redirect.github.com/sindresorhus/execa/issues/609))
- Fixed the process crashing when the [`buffer`](docs/api.md#optionsbuffer) option is `false` and [`subprocess.stdout`](docs/api.md#subprocessstdout) [errors](https://nodejs.org/api/stream.html#event-error_1). ([#&#8203;729](https://redirect.github.com/sindresorhus/execa/issues/729))
- Fixed the process crashing when passing [`'overlapped'`](docs/windows.md#asynchronous-io) to the [`stdout`](docs/api.md#optionsstdout) or [`stderr`](docs/api.md#optionsstderr) option with [`execaSync()`](docs/api.md#execasyncfile-arguments-options). ([#&#8203;949](https://redirect.github.com/sindresorhus/execa/issues/949))
- Fixed the process crashing when multiple [`'error'`](https://nodejs.org/api/child_process.html#event-error) events are emitted on the subprocess. ([#&#8203;790](https://redirect.github.com/sindresorhus/execa/issues/790))
- Fixed the [`reject: false`](docs/api.md#optionsreject) option not being used when the subprocess [fails to spawn](docs/errors.md#failure-reason). ([#&#8203;734](https://redirect.github.com/sindresorhus/execa/issues/734))
- Fixed [some inaccuracies](docs/errors.md#failure-reason) with [`error.isTerminated`](docs/api.md#erroristerminated). ([#&#8203;625](https://redirect.github.com/sindresorhus/execa/issues/625), [#&#8203;719](https://redirect.github.com/sindresorhus/execa/issues/719))
  - It is now `true` when the subprocess fails due to the [`timeout`](docs/api.md#optionstimeout) option.
  - It is now `true` when calling [`process.kill(subprocess.pid)`](https://nodejs.org/api/process.html#processkillpid-signal), except on Windows.
  - It is now `false` when using [non-terminating signals](https://nodejs.org/api/child_process.html#subprocesskillsignal) such as `subprocess.kill(0)`.
- Fixed missing [`error.signal`](docs/api.md#errorsignal) and [`error.signalDescription`](docs/api.md#errorsignaldescription) when the subprocess [is terminated](docs/termination.md#canceling) by the [`cancelSignal`](docs/api.md#optionscancelsignal) option. ([#&#8203;724](https://redirect.github.com/sindresorhus/execa/issues/724))
- Fixed a situation where the [error](docs/api.md#execaerror) returned by an [`execa()`](docs/api.md#execafile-arguments-options) call might be modified by another `execa()` call. ([#&#8203;796](https://redirect.github.com/sindresorhus/execa/issues/796), [#&#8203;806](https://redirect.github.com/sindresorhus/execa/issues/806), [#&#8203;911](https://redirect.github.com/sindresorhus/execa/issues/911))
- Fixed the [`verbose`](docs/api.md#optionsverbose) option [printing the command](docs/debugging.md#short-mode) in the wrong order. ([#&#8203;600](https://redirect.github.com/sindresorhus/execa/issues/600))
- Fixed using both the [`maxBuffer`](docs/api.md#optionsmaxbuffer) and [`encoding`](docs/api.md#optionsencoding) options. For example, when using [`encoding: 'hex'`](docs/binary.md#encoding), `maxBuffer` will now be measured in hexadecimal characters. Also, [`error.stdout`](docs/api.md#resultstdout), [`error.stderr`](docs/api.md#resultstderr) and [`error.all`](docs/api.md#resultall) were previously not applying the `maxBuffer` option. ([#&#8203;652](https://redirect.github.com/sindresorhus/execa/issues/652), [#&#8203;696](https://redirect.github.com/sindresorhus/execa/issues/696))
- Fixed the [`maxBuffer`](docs/api.md#optionsmaxbuffer) option [not truncating](docs/output.md#big-output) [`result.stdout`](docs/api.md#resultstdout) and [`result.stderr`](docs/api.md#resultstderr) when using [`execaSync()`](docs/api.md#execasyncfile-arguments-options). ([#&#8203;960](https://redirect.github.com/sindresorhus/execa/issues/960))
- Fixed empty output when using the [`buffer: true`](docs/api.md#optionsbuffer) option (its default value) and [iterating](https://nodejs.org/api/stream.html#readablesymbolasynciterator) over [`subprocess.stdout`](docs/api.md#subprocessstdout) or [`subprocess.stderr`](docs/api.md#subprocessstderr). ([#&#8203;908](https://redirect.github.com/sindresorhus/execa/issues/908))
- Fixed [`subprocess.all`](docs/api.md#subprocessall) stream incorrectly being in [object mode](https://nodejs.org/api/stream.html#object-mode). ([#&#8203;717](https://redirect.github.com/sindresorhus/execa/issues/717))
- Ensured [`subprocess.stdout`](docs/api.md#subprocessstdout) and [`subprocess.stderr`](docs/api.md#subprocessstderr) are properly [flushed](https://nodejs.org/api/stream.html#buffering) when the subprocess fails. ([#&#8203;647](https://redirect.github.com/sindresorhus/execa/issues/647))
- Fixed a race condition leading to random behavior with the [`timeout`](docs/api.md#optionstimeout) option. ([#&#8203;727](https://redirect.github.com/sindresorhus/execa/issues/727))

#### Breaking changes (types)

- The minimum supported TypeScript version is now [`5.1.6`](https://redirect.github.com/microsoft/TypeScript/releases/tag/v5.1.6).

- Renamed `CommonOptions` type to [`Options`](types/arguments/options.d.ts) (for [`execa()`](docs/api.md#execafile-arguments-options)) and [`SyncOptions`](types/arguments/options.d.ts) (for [`execaSync()`](docs/api.md#execasyncfile-arguments-options)). ([#&#8203;678](https://redirect.github.com/sindresorhus/execa/issues/678), [#&#8203;682](https://redirect.github.com/sindresorhus/execa/issues/682))

```diff
import type {Options} from 'execa';

- const options: CommonOptions = {timeout: 1000};
+ const options: Options = {timeout: 1000};
```

- Renamed `NodeOptions` type to [`Options`](types/arguments/options.d.ts). ([#&#8203;804](https://redirect.github.com/sindresorhus/execa/issues/804))

```diff
import type {Options} from 'execa';

- const options: NodeOptions = {nodeOptions: ['--no-warnings']};
+ const options: Options = {nodeOptions: ['--no-warnings']};
```

- Renamed `KillOptions` type to [`Options`](types/arguments/options.d.ts). ([#&#8203;714](https://redirect.github.com/sindresorhus/execa/issues/714))

```diff
import type {Options} from 'execa';

- const options: KillOptions = {forceKillAfterTimeout: 1000};
+ const options: Options = {forceKillAfterDelay: 1000};
```

- Removed generic parameters from the [`Options`](types/arguments/options.d.ts) and [`SyncOptions`](types/arguments/options.d.ts) types. ([#&#8203;681](https://redirect.github.com/sindresorhus/execa/issues/681))

```diff
import type {Options} from 'execa';

- const options: Options<'utf8'> = {encoding: 'utf8'};
+ const options: Options = {encoding: 'utf8'};
```

- Renamed `ExecaChildProcess` type to [`ResultPromise`](types/subprocess/subprocess.d.ts). This is the type of [`execa()`](docs/api.md#execafile-arguments-options)'s [return value](docs/api.md#return-value), which is both a [`Promise<Result>`](docs/api.md#result) and a [`Subprocess`](docs/api.md#subprocess). ([#&#8203;897](https://redirect.github.com/sindresorhus/execa/issues/897), [#&#8203;1007](https://redirect.github.com/sindresorhus/execa/issues/1007), [#&#8203;1009](https://redirect.github.com/sindresorhus/execa/issues/1009))

```diff
import type {ResultPromise, Result} from 'execa';

- const promiseOrSubprocess: ExecaChildProcess = execa('node', ['file.js']);
+ const promiseOrSubprocess: ResultPromise = execa('node', ['file.js']);
const result: Result = 

</details>

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM, on day 1 of the month ( * 0-3 1 * * ) (UTC), 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 this update again.

---

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

---

This PR has been generated by [Renovate Bot](https://redirect.github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My42My4wIiwidXBkYXRlZEluVmVyIjoiNDMuNjMuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants