Skip to content

Comments

refactor(rust/watcher): construct the bundler within watcher itself#7550

Merged
graphite-app[bot] merged 1 commit intomainfrom
12-17-refactor_watch_construct_the_bundler_within_watcher_itself
Dec 18, 2025
Merged

refactor(rust/watcher): construct the bundler within watcher itself#7550
graphite-app[bot] merged 1 commit intomainfrom
12-17-refactor_watch_construct_the_bundler_within_watcher_itself

Conversation

@hyf0
Copy link
Member

@hyf0 hyf0 commented Dec 17, 2025

Closes #6931

Copy link
Member Author

hyf0 commented Dec 17, 2025


How to use the Graphite Merge Queue

Add the label graphite: merge to this PR to add it to the merge queue.

You must have a Graphite account in order to use the merge queue. Sign up using this link.

An organization admin has enabled the Graphite Merge Queue in this repository.

Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue.

This stack of pull requests is managed by Graphite. Learn more about stacking.

@netlify
Copy link

netlify bot commented Dec 17, 2025

Deploy Preview for rolldown-rs canceled.

Name Link
🔨 Latest commit 9ee271e
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/69437def4f49b10008f98592

@hyf0 hyf0 marked this pull request as ready for review December 17, 2025 14:09
@hyf0 hyf0 requested review from Copilot and sapphi-red and removed request for Copilot December 17, 2025 14:09
@hyf0 hyf0 changed the title refactor(watch): construct the bundler within watcher itself refactor(rustwatch): construct the bundler within watcher itself Dec 17, 2025
@hyf0 hyf0 changed the title refactor(rustwatch): construct the bundler within watcher itself refactor(rust/watcher): construct the bundler within watcher itself Dec 17, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Dec 17, 2025

Benchmarks Rust

  • target: main(a9747f0)
  • pr: 12-17-refactor_watch_construct_the_bundler_within_watcher_itself(9ee271e)
group                                                        pr                                     target
-----                                                        --                                     ------
bundle/bundle@multi-duplicated-top-level-symbol              1.00     66.7±1.41ms        ? ?/sec    1.01     67.0±2.05ms        ? ?/sec
bundle/bundle@multi-duplicated-top-level-symbol-sourcemap    1.01     73.2±1.58ms        ? ?/sec    1.00     72.7±1.25ms        ? ?/sec
bundle/bundle@rome_ts                                        1.00    109.2±2.49ms        ? ?/sec    1.00    109.5±1.58ms        ? ?/sec
bundle/bundle@rome_ts-sourcemap                              1.00    122.3±1.73ms        ? ?/sec    1.00    122.3±1.88ms        ? ?/sec
bundle/bundle@threejs                                        1.00     40.4±0.94ms        ? ?/sec    1.02     41.2±1.98ms        ? ?/sec
bundle/bundle@threejs-sourcemap                              1.00     44.3±1.15ms        ? ?/sec    1.00     44.3±0.62ms        ? ?/sec
bundle/bundle@threejs10x                                     1.00    398.8±4.07ms        ? ?/sec    1.00    397.4±5.20ms        ? ?/sec
bundle/bundle@threejs10x-sourcemap                           1.01    459.1±4.59ms        ? ?/sec    1.00    455.3±3.59ms        ? ?/sec
scan/scan@rome_ts                                            1.01     86.4±1.51ms        ? ?/sec    1.00     85.4±1.66ms        ? ?/sec
scan/scan@threejs                                            1.00     29.3±1.47ms        ? ?/sec    1.01     29.5±1.80ms        ? ?/sec
scan/scan@threejs10x                                         1.00    300.1±3.69ms        ? ?/sec    1.00    299.3±3.47ms        ? ?/sec

@hyf0 hyf0 requested review from Copilot and shulaoda December 18, 2025 02:36
@hyf0 hyf0 force-pushed the 12-17-refactor_watch_construct_the_bundler_within_watcher_itself branch from 84a8218 to 19d5a93 Compare December 18, 2025 02:53
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors the watcher architecture to construct bundler instances within the Watcher itself rather than requiring pre-constructed bundlers. This change simplifies the API and centralizes bundler construction logic. The refactoring introduces a new BundlerConfig type that encapsulates bundler options and plugins, and moves the dev_mode validation from the binding layer to the Rust core layer.

  • Introduced BundlerConfig type to bundle options and plugins together
  • Moved bundler construction from binding layer into Watcher::new()
  • Centralized dev_mode validation in the Rust watcher implementation

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
crates/rolldown/src/types/bundler_config.rs New BundlerConfig struct to encapsulate bundler options and plugins
crates/rolldown/src/types/mod.rs Added module declaration for bundler_config
crates/rolldown/src/lib.rs Exported BundlerConfig from the public API
crates/rolldown/src/watcher.rs Refactored to accept BundlerConfig and construct bundlers internally; added dev_mode validation
crates/rolldown_binding/src/watcher.rs Simplified to use new helper function; removed dev_mode validation (now handled in Rust layer)
crates/rolldown_binding/src/utils/normalize_binding_options.rs Changed return type from custom struct to BundlerConfig
crates/rolldown_binding/src/utils/mod.rs Added new module for create_bundler_options_from_binding_options
crates/rolldown_binding/src/utils/create_bundler_options_from_binding_options.rs New utility to create BundlerConfig from binding options
crates/rolldown_binding/src/utils/create_bundler_from_binding_options.rs Updated to use options field from BundlerConfig
crates/rolldown_binding/src/binding_bundler.rs Updated field access from bundler_options to options in BundlerConfig
crates/rolldown/examples/watch.rs Updated example to use new BundlerConfig API

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@graphite-app
Copy link
Contributor

graphite-app bot commented Dec 18, 2025

Merge activity

  • Dec 18, 4:06 AM UTC: hyf0 added this pull request to the Graphite merge queue.
  • Dec 18, 4:24 AM UTC: The Graphite merge queue couldn't merge this PR because it was not satisfying all requirements (Failed CI: 'node-test (macos-latest) / Node Test', 'node-test (windows-latest) / Node Test').
  • Dec 18, 5:09 AM UTC: hyf0 added this pull request to the Graphite merge queue.
  • Dec 18, 5:09 AM UTC: Merged by the Graphite merge queue.

@graphite-app graphite-app bot force-pushed the 12-17-refactor_watch_construct_the_bundler_within_watcher_itself branch from 19d5a93 to 9ee271e Compare December 18, 2025 04:07
@graphite-app graphite-app bot merged commit 9ee271e into main Dec 18, 2025
43 of 45 checks passed
@graphite-app graphite-app bot deleted the 12-17-refactor_watch_construct_the_bundler_within_watcher_itself branch December 18, 2025 05:09
shulaoda added a commit that referenced this pull request Dec 22, 2025
## [1.0.0-beta.56] - 2025-12-22

### 💥 BREAKING CHANGES

- rename `MIXED_EXPORT` error to `MIXED_EXPORTS` (#7565) by @sapphi-red

### 🚀 Features

- rename `id` property to `exporter` in CIRCULAR_REEXPORT error (#7592) by @sapphi-red
- add `ids` property to `CIRCULAR_DEPENDENCY` error (#7591) by @sapphi-red
- node/dev: expose `devMode.lazy` (#7549) by @hyf0
- set log and pos properties for `parseAst` function errors (#7568) by @sapphi-red
- set log and pos properties for logs (#7567) by @sapphi-red
- test-dev-sever: support to manually configure port, run tests in concurrent (#7576) by @hyf0
- add `exporter` property to `MISSING_EXPORT` error (#7564) by @sapphi-red
- add `id` property to `PARSE_ERROR` error (#7563) by @sapphi-red
- support ImporterId hook filter (#7540) by @IWANABETHATGUY

### 🐛 Bug Fixes

- types: better "go to definition" experience for interface `OutputPlugin` (#7610) by @KazariEX
- `postBanner` content should be placed after shebang (#7583) by @btea
- use sanitized filename for preserve modules chunk name (#7603) by @IWANABETHATGUY
- correct filter out unused cjs namespace  (#7602) by @IWANABETHATGUY
- watch: property respect `notify.pollInternal` and `notify.compareContents` (#7595) by @sapphi-red
- make `cleanDir` work with default output directory (#7579) by @shulaoda
- merge `MISSING_NAME_OPTION_FOR_UMD_EXPORT` error to `MISSING_NAME_OPTION_FOR_IIFE_EXPORT` error (#7566) by @sapphi-red
- dev/hmr: ensure cjs modules with no exports reference correct `module` identifier (#7544) by @leegeunhyeok

### 🚜 Refactor

- remove `stable_id` field from `PARSE_ERROR` error (#7593) by @sapphi-red
- make include_runtime_symbol reuseable after linking stage (#7580) by @IWANABETHATGUY
- rust/dev: construct the bundler within itself (#7553) by @hyf0
- rust/watcher: polish API of `Watcher` struct (#7551) by @hyf0
- use `LinkingMetadata::stmt_info_included` to check if a stmt_info is included (#7572) by @IWANABETHATGUY
- use `LinkingMetadata::is_included` to check if a module is included (#7571) by @IWANABETHATGUY
- store module and stmt_info is included info to module meta (#7570) by @IWANABETHATGUY
- make include_* method reunsable after linking stage (#7552) by @IWANABETHATGUY
- rust/watcher: construct the bundler within watcher itself (#7550) by @hyf0
- extract make include_runtime_symbol reusable (#7546) by @IWANABETHATGUY

### ⚙️ Miscellaneous Tasks

- renovate: add `kill-port` in `ignoreDeps` in renovate.json (#7619) by @sapphi-red
- deps: update rust crates (#7617) by @renovate[bot]
- deps: update npm packages (#7616) by @renovate[bot]
- deps: update github-actions (#7615) by @renovate[bot]
- ci: skip benchmark workflows on draft PRs (#7611) by @Copilot
- deps: update dependency rolldown-plugin-dts to ^0.19.0 (#7607) by @renovate[bot]
- deps: update dependency oxlint-tsgolint to v0.10.0 (#7601) by @renovate[bot]
- deps: update dependency rolldown-plugin-dts to v0.18.4 (#7599) by @renovate[bot]
- deps: update notify (#7594) by @sapphi-red
- test-dev-server: add retry mechanism to hmr-full-bundle-mode tests (#7588) by @Copilot
- deps: update napi to v3.7.1 (#7590) by @renovate[bot]
- add JSDoc documentation for memfs type (#7587) by @Copilot
- deps: update dependency oxlint to v1.34.0 (#7589) by @renovate[bot]
- move some tests in ignored-by-unsupported-features that are passing (#7569) by @sapphi-red
- deps: update dependency oxlint-tsgolint to v0.9.2 (#7582) by @renovate[bot]
- deps: update oxc resolver to v11.16.0 (#7574) by @renovate[bot]
- test/dev-server: don't run `pnpm install` during tests (#7560) by @hyf0
- test/dev-server: use `kill-port@1` to improve performance (#7575) by @hyf0
- normalize error object to make some Rollup tests pass (#7562) by @sapphi-red
- ci: separate dev-server(hmr) tests and normal tests (#7558) by @hyf0
- ci: make native rolldown build reusable (#7557) by @hyf0
- resolve some TODOs (#7561) by @sapphi-red

### ❤️ New Contributors

* @KazariEX made their first contribution in [#7610](#7610)
* @leegeunhyeok made their first contribution in [#7544](#7544)

Co-authored-by: shulaoda <[email protected]>
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.

Watcher should construct the bundler within itself instead of take it from outside

2 participants