FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

chore(deps): update dependency execa to v10 by renovate[bot] · Pull Request #15212 · web-infra-dev/rspack · GitHub

chore(deps): update dependency execa to v10 - #15212

Closed
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/execa-10.x
Closed

renovate[bot] wants to merge 1 commit into
mainfrom
renovate/execa-10.x

Conversation

renovate Bot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
execa ^5.1.1 → ^10.0.1

Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

sindresorhus/execa (execa)

v10.0.1

Compare Source

  • Fix preferLocal argument escaping edge-case on Windows (#​1259) e771733

v10.0.0

Compare Source

Breaking
const subprocess = execa('node', ['file.js']);
- subprocess.on('spawn', onSpawn);
+ subprocess.nodeChildProcess.on('spawn', onSpawn);
- await execaCommand('npm run build');
+ await execa`npm run build`;

- await execaCommand(commandString);
+ await execa`${parseCommandString(commandString)}`;
- await execa('node', ['file.js'], {stdio: ['pipe', 'pipe', 'pipe', 'ipc']});
+ await execa('node', ['file.js'], {ipc: true});
  • When the input or inputFile option is combined with an inherited stdin (for example stdio: 'inherit'), the explicit input is now used, instead of being ignored. To combine multiple inputs, pass an array like stdin: ['inherit', {string: 'input'}]. (#​1232) 3ed0544
Improvements
await execa('npm', ['run', 'build'], {killDescendants: true, timeout: 5000});
await execa`npm run build`
	.readableStream()
	.pipeTo(writableWebStream);
for await (const line of execa`npm run build`.pipe`sort`) {
	console.log(line);
}
const subprocess = execa({stdio: ['pipe', 'pipe', 'pipe', {value: 'pipe', input: true}]})`npm run scaffold`;

const writable = subprocess.writable({to: 'fd3'});
Fixes

v9.6.1

Compare Source


v9.6.0

Compare Source


v9.5.3

Compare Source


v9.5.2

Compare Source

Bug fixes

v9.5.1

Compare Source

Bug fixes

v9.5.0

Compare Source

Features

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

v9.4.1

Compare Source

Bug fixes

v9.4.0

Compare Source

Features

  • We've created a separate package called nano-spawn. It is similar to Execa but with fewer features, for a much smaller package size. More info.

Bug fixes

Documentation

v9.3.1

Compare Source

Thanks @​holic and @​jimhigson for your contributions!

Bugs

Bugs (types)

  • Fix type of the env option. It was currently failing for Remix or Next.js users. (by @​holic) (#​1141)

Documentation

v9.3.0

Compare Source

Features

v9.2.0

Compare Source

This release includes a new set of methods to exchange messages between the current process and a Node.js subprocess, also known as "IPC". This allows passing and returning almost any message type to/from a Node.js subprocess. Also, debugging IPC is now much easier.

Moreover, a new gracefulCancel option has also been added to terminate a subprocess gracefully.

For a deeper dive-in, please check and share the release post!

Thanks @​iiroj for your contribution, @​SimonSiefke and @​adymorz for reporting the bugs fixed in this release, and @​karlhorky for improving the documentation!

Deprecations

  • Passing 'ipc' to the stdio option has been deprecated. It will be removed in the next major release. Instead, the ipc: true option should be used. (#​1056)
- await execa('npm', ['run', 'build'], {stdio: ['pipe', 'pipe', 'pipe', 'ipc']});
+ await execa('npm', ['run', 'build'], {ipc: true});
- 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) can split that string into an array. More info. (#​1054)

- 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

Types

Bug fixes

v9.1.0

Compare Source

Features (types)

v9.0.2

Compare Source

Bug fixes (types)

v9.0.1

Compare Source

Bug fixes (types)

v9.0.0

Compare Source

This major release brings many important features including:

Please check the release post for a high-level overview! For the full list of breaking changes, features and bug fixes, please read below.

Thanks @​younggglcy, @​koshic, @​am0o0 and @​codesmith-emmy for your help!


One of the maintainers @​ehmicky is looking for a remote full-time position. Specialized in Node.js back-ends and CLIs, he led Netlify Build, Plugins and Configuration for 2.5 years. Feel free to contact him on his website or on LinkedIn!


Breaking changes (not types)

const {stdout} = await execa('node', ['file.js'], {encoding: 'buffer'});
console.log(stdout); // This is now an Uint8Array
- 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 should be passed to the stdout or stderr option. (#​752)
- 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'},
+});
- 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(). The command and its arguments can be passed to subprocess.pipe() directly, without calling execa() a second time. The from piping option can specify 'stdout' (the default value), 'stderr' or 'all'. (#​757)
- 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'});
- await execa('node', ['file.js'], {signal: abortController.signal});
+ await execa('node', ['file.js'], {cancelSignal: abortController.signal});
try {
	await execa('node', ['file.js']);
} catch (error) {
- if (error.killed) {
+ if (error.isTerminated) {
		// ...
	}
}
- subprocess.cancel();
+ subprocess.kill();
- const subprocess = execa('node', ['file.js']);
- subprocess.kill('SIGTERM', {forceKillAfterTimeout: 1000});
+ const subprocess = execa('node', ['file.js'], {forceKillAfterDelay: 1000});
+ subprocess.kill('SIGTERM');
  • The verbose option is now a string enum instead of a boolean. false has been renamed to 'none' and true has been renamed to 'short'. (#​884)
- 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'});
- await execa('node', ['file.js'], {execPath: './path/to/node'});
+ await execa('node', ['file.js'], {nodePath: './path/to/node'});
- subprocess.send({example: true, getExample() {}});
+ subprocess.send({example: true});
const subprocess = execa('node', ['file.js']);
- setTimeout(() => {
	subprocess.stdout.pipe(process.stdout);
- }, 0);
- const subprocess = execa('node', ['file.js'], {killSignal: 'sigterm'});
+ const subprocess = execa('node', ['file.js'], {killSignal: 'SIGTERM'});

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

Features

Execution
Text lines
Piping multiple subprocesses
Input/output
Streams
Verbose mode
Debugging
Errors
Termination
Node.js files
Synchronous execution
Inter-process communication
Input validation

Bug fixes

  • Fixed passing undefined values as options. This now uses the option's default value. (#​712)
  • Fixed the process crashing when the inputFile option points to a missi

Note

PR body was truncated to here.


Configuration

📅 Schedule: (in timezone Asia/Shanghai)

  • Branch creation
    • "before 8am on saturday"
  • 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.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

renovate Bot added the dependencies Pull requests that update a dependency file label Aug 16, 2026

Copy link
Copy Markdown
Contributor

📦 Binary Size-limit

Comparing 65255d7 to perf: batch splitChunks JavaScript callbacks (#15147) by Fy

🙈 Size remains the same at 68.25MB

Copy link
Copy Markdown
Contributor

Rsdoctor Bundle Diff Analysis

Found 5 projects in monorepo, 5 projects with changes.

📊 Quick Summary
Project Total Size Gzip Size Change Gzip Change
popular-libs 1.7 MB 556.7 KB +9.5 KB (0.5%) +4.6 KB (0.8%)
react-10k 5.6 MB 1.3 MB +4.0 B (0.0%) +10.8 KB (0.8%)
ui-components 4.9 MB 1.4 MB +16.6 KB (0.3%) +9.2 KB (0.6%)
react-5k 2.7 MB 669.3 KB -25.0 B (-0.0%) +5.4 KB (0.8%)
react-1k 823.1 KB 218.4 KB +6.0 B (0.0%) +1.4 KB (0.7%)
📋 Detailed Reports (Click to expand)

📁 popular-libs

Path: ../build-tools-performance/cases/popular-libs/dist/rsdoctor-data.json

📌 Baseline Commit: 4f1ce3e739 | PR: #15147

Metric Current Baseline Change
📊 Total Size 1.7 MB 1.7 MB +9.5 KB (0.5%)
🗜️ Gzip Size 556.7 KB 552.1 KB +4.6 KB (0.8%)
📄 JavaScript 1.7 MB 1.7 MB +9.5 KB (0.5%)
🎨 CSS 0 B 0 B 0
🌐 HTML 289.0 B 289.0 B 0
📁 Other Assets 0 B 0 B 0

📦 Download Diff Report: popular-libs Bundle Diff

📁 react-10k

Path: ../build-tools-performance/cases/react-10k/dist/rsdoctor-data.json

📌 Baseline Commit: 4f1ce3e739 | PR: #15147

Metric Current Baseline Change
📊 Total Size 5.6 MB 5.6 MB +4.0 B (0.0%)
🗜️ Gzip Size 1.3 MB 1.3 MB +10.8 KB (0.8%)
📄 JavaScript 5.6 MB 5.6 MB +4.0 B (0.0%)
🎨 CSS 21.0 B 21.0 B 0
🌐 HTML 328.0 B 328.0 B 0
📁 Other Assets 0 B 0 B 0

📦 Download Diff Report: react-10k Bundle Diff

📁 ui-components

Path: ../build-tools-performance/cases/ui-components/dist/rsdoctor-data.json

📌 Baseline Commit: 4f1ce3e739 | PR: #15147

Metric Current Baseline Change
📊 Total Size 4.9 MB 4.9 MB +16.6 KB (0.3%)
🗜️ Gzip Size 1.4 MB 1.4 MB +9.2 KB (0.6%)
📄 JavaScript 4.8 MB 4.8 MB +16.3 KB (0.3%)
🎨 CSS 112.5 KB 112.1 KB +397.0 B (0.3%)
🌐 HTML 328.0 B 328.0 B 0
📁 Other Assets 0 B 0 B 0

📦 Download Diff Report: ui-components Bundle Diff

📁 react-5k

Path: ../build-tools-performance/cases/react-5k/dist/rsdoctor-data.json

📌 Baseline Commit: 4f1ce3e739 | PR: #15147

Metric Current Baseline Change
📊 Total Size 2.7 MB 2.7 MB -25.0 B (-0.0%)
🗜️ Gzip Size 669.3 KB 663.8 KB +5.4 KB (0.8%)
📄 JavaScript 2.7 MB 2.7 MB -25.0 B (-0.0%)
🎨 CSS 21.0 B 21.0 B 0
🌐 HTML 328.0 B 328.0 B 0
📁 Other Assets 0 B 0 B 0

📦 Download Diff Report: react-5k Bundle Diff

📁 react-1k

Path: ../build-tools-performance/cases/react-1k/dist/rsdoctor-data.json

📌 Baseline Commit: 4f1ce3e739 | PR: #15147

Metric Current Baseline Change
📊 Total Size 823.1 KB 823.1 KB +6.0 B (0.0%)
🗜️ Gzip Size 218.4 KB 217.0 KB +1.4 KB (0.7%)
📄 JavaScript 822.7 KB 822.7 KB +6.0 B (0.0%)
🎨 CSS 0 B 0 B 0
🌐 HTML 328.0 B 328.0 B 0
📁 Other Assets 0 B 0 B 0

📦 Download Diff Report: react-1k Bundle Diff

🤖 AI Degradation Analysis (Click to expand)

📁 popular-libs

📊 Size Changes

No significant regressions detected 🎉. (Initial JS increased by 9,732 bytes / 0.54%, below 10 KB / 5% threshold).

🔍 Root Cause Analysis

  • New Dependencies: Introduction of @headlessui/react (v2.2.10) and @floating-ui/react (v0.26.28).
  • Key Modules: combobox.js (14,573 bytes parsed) and floating-ui.react.mjs (5,692 bytes parsed) contributed most to the delta.
  • Tree-shaking: @headlessui/vue modules appear in diff but did not significantly impact bundle size, indicating effective elimination.

⚠️ Risk Assessment

Overall severity: Low

  • Initial chunk growth is minimal (0.54%), keeping total JS under 1.83 MB; no immediate performance budget breach.

💡 Optimization Suggestions

  1. Verify Exclusions: Ensure @headlessui/vue remains fully tree-shaken in React builds to prevent future bloat.
  2. Lazy Load Heavy Components: Consider dynamic imports for Combobox or Popover if not used on initial render.
  3. Monitor Gzip: Current delta is raw size; verify gzip impact remains negligible on slow networks.

Analysis by qwen3.5-plus

📁 react-10k

📊 Size Changes

No significant regressions detected 🎉.

🔍 Root Cause Analysis

  • Bundle content swapped due to patch upgrades: react/react-dom (19.2.7→19.2.8) and react-router (7.18.1→7.18.2).
  • react-dom gzip size increased by 122 bytes; react-router gzip increased by 120 bytes.

⚠️ Risk Assessment

Overall severity: Low

  • Total bundle size increased by only 4 bytes, indicating zero impact on initial load performance.

💡 Optimization Suggestions

  1. Monitor runtime performance metrics, as bundle size stability does not guarantee execution speed.
  2. Verify production build ensures no duplicate React instances exist despite version bumps.

Analysis by qwen3.5-plus

📁 ui-components

📊 Size Changes

Asset / Chunk Baseline Current Δ Size Δ % Initial?
Initial JS 5,007,271 B 5,023,916 B +16,645 B 0.33% Yes

🔍 Root Cause Analysis

  • New Icons: Multiple individual files from @ant-design/icons-vue added (e.g., AccountBookFilled, AlertOutlined), suggesting potential full-library import.
  • Style Utils: New modules from @ant-design/cssinjs and cssinjs-utils (e.g., genStyleUtils.js, useStyleRegister.js) increased logic size.

⚠️ Risk Assessment

Overall severity: Low

  • The 16.6 KB increase on the initial chunk is negligible (0.33%) relative to the ~5 MB total bundle size.

💡 Optimization Suggestions

  1. Tree-shake Icons: Ensure @ant-design/icons-vue is configured for on-demand importing instead of bulk inclusion.
  2. Audit Imports: Check new components for unnecessary Ant Design dependencies pulling in heavy style utils.
  3. Verify Config: Confirm Rspack/Vite tree-shaking settings are optimized for ES modules from @ant-design.

Analysis by qwen3.5-plus

📁 react-5k

📊 Size Changes

No significant regressions detected 🎉. Total bundle size decreased by 25 bytes (2,794,000 → 2,793,975).

🔍 Root Cause Analysis

  • Patch dependency updates: react/react-dom (19.2.7→19.2.8) and react-router (7.18.1→7.18.2).
  • Module parsed sizes are virtually identical between versions (e.g., react-dom-client.production.js stable at 173,898 bytes).

⚠️ Risk Assessment

Overall severity: Low

  • Initial chunk stable at 525,536 bytes; total delta is negligible (-0.0009%).

💡 Optimization Suggestions

  1. Merge safely; no performance impact detected.
  2. Monitor react-router@7 tree-shaking effectiveness in future major versions.

Analysis by qwen3.5-plus

📁 react-1k

📊 Size Changes

No significant regressions detected 🎉. Total bundle size increased by only 6 bytes (842,811 → 842,817), and initial JS chunk decreased by 2 bytes.

🔍 Root Cause Analysis

  • Dependency Patch Updates: Changes driven by minor version bumps: react/react-dom (19.2.7 → 19.2.8) and react-router (7.18.1 → 7.18.2).
  • Neutral Swaps: @iconify/react removed and re-added with identical parsed size (6,169 bytes).

⚠️ Risk Assessment

Overall severity: Low

  • Negligible total delta (+6 bytes) and stable initial chunk size indicate no performance impact on load times.

💡 Optimization Suggestions

  1. Maintain Current Config: Tree-shaking and code-splitting are effective; no immediate action required.
  2. Monitor Gzip: react-dom gzip increased slightly (+127 bytes); keep an eye on cumulative effects during major version upgrades.
  3. Automate Checks: Continue using Rsdoctor diffs to catch accidental bloat in future dependency updates.

Analysis by qwen3.5-plus

Generated by Rsdoctor GitHub Action

codspeed Bot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Merging this PR will not alter performance

✅ 49 untouched benchmarks
⏩ 47 skipped benchmarks1


Comparing renovate/execa-10.x (65255d7) with main (4f1ce3e)

Footnotes

  1. 47 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

chenjiahan closed this Aug 17, 2026
chenjiahan deleted the renovate/execa-10.x branch August 17, 2026 02:19

renovate Bot commented Aug 17, 2026

Copy link
Copy Markdown
Contributor Author

Renovate Ignore Notification

Because you closed this PR without merging, Renovate will ignore this update. You will not get PRs for any future 10.x releases. But if you manually upgrade to 10.x then Renovate will re-enable minor and patch updates automatically.

If you accidentally closed this PR, or if you changed your mind: rename this PR to get a fresh replacement PR.

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant


Back | FazBrowse Home | New Git URL