Skip to content

Conversation

@hyf0
Copy link
Member

@hyf0 hyf0 commented Nov 7, 2025

This's a transitive refactor and still some things need to be done in later PRs. So

  • watch mode is not affected because I isolated changes and only affect the RolldownBuild logic.
  • dev mode is not affected too.
  • Bundler in crates/rolldown is not touched to avoid too much changes.
  • This PR doesn't seperate the bundler/build level data, but it's a preparation for that purpose.

This PR introduces a Build​ concept to represent the process of doing a build. Having this abstraction allows us to implement different bundler for different usages.

In the previous code, RolldownBuild​ create a Bundler​ underlying for each generate/write​ call. Without mentioning potential errors, this abstraction is already wrong and give us buggy mental model when working aounrd these code.

With this PR, RolldownBuild​ create only a Bundler​, but multiple builds​ underlying for each generate/write​ call. This gives us a correct mental model when working with code under rolldown​ without needing to considering about the usage of RolldownBuild​.

Copy link
Member Author

hyf0 commented Nov 7, 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.

@hyf0 hyf0 marked this pull request as ready for review November 7, 2025 11:21
@netlify
Copy link

netlify bot commented Nov 7, 2025

Deploy Preview for rolldown-rs ready!

Name Link
🔨 Latest commit f7ccd50
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/690df38128b62300080b5bc0
😎 Deploy Preview https://deploy-preview-6877--rolldown-rs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions
Copy link
Contributor

github-actions bot commented Nov 7, 2025

Benchmarks Rust

  • target: main(5fc5f82)
  • pr: 11-07-refactor_node_implement_a_new_bundler_that_satisfy_the_usage_of_rolldownbuild_(f7ccd50)
group                                                        pr                                     target
-----                                                        --                                     ------
bundle/bundle@multi-duplicated-top-level-symbol              1.00     63.5±1.88ms        ? ?/sec    1.00     63.4±1.09ms        ? ?/sec
bundle/bundle@multi-duplicated-top-level-symbol-sourcemap    1.00     69.6±1.01ms        ? ?/sec    1.00     69.6±0.96ms        ? ?/sec
bundle/bundle@rome_ts                                        1.00    107.3±2.13ms        ? ?/sec    1.00    107.3±1.30ms        ? ?/sec
bundle/bundle@rome_ts-sourcemap                              1.00    120.3±1.53ms        ? ?/sec    1.00    120.8±1.89ms        ? ?/sec
bundle/bundle@threejs                                        1.03     39.8±2.71ms        ? ?/sec    1.00     38.8±1.03ms        ? ?/sec
bundle/bundle@threejs-sourcemap                              1.00     42.5±0.44ms        ? ?/sec    1.00     42.6±0.42ms        ? ?/sec
bundle/bundle@threejs10x                                     1.00    391.5±4.41ms        ? ?/sec    1.01    394.1±3.74ms        ? ?/sec
bundle/bundle@threejs10x-sourcemap                           1.00    450.8±3.03ms        ? ?/sec    1.00    453.1±4.23ms        ? ?/sec
scan/scan@rome_ts                                            1.00     85.1±1.31ms        ? ?/sec    1.00     85.3±2.17ms        ? ?/sec
scan/scan@threejs                                            1.02     29.1±1.81ms        ? ?/sec    1.00     28.5±0.34ms        ? ?/sec
scan/scan@threejs10x                                         1.00    295.8±3.50ms        ? ?/sec    1.01    297.8±5.32ms        ? ?/sec

@hyf0 hyf0 force-pushed the 11-07-refactor_node_implement_a_new_bundler_that_satisfy_the_usage_of_rolldownbuild_ branch from e230b32 to 9c5af2f Compare November 7, 2025 12:20
@hyf0 hyf0 force-pushed the 11-07-refactor_node_implement_a_new_bundler_that_satisfy_the_usage_of_rolldownbuild_ branch from 9c5af2f to 4d48dd7 Compare November 7, 2025 13:00
@hyf0 hyf0 force-pushed the 11-07-refactor_node_implement_a_new_bundler_that_satisfy_the_usage_of_rolldownbuild_ branch from 4d48dd7 to 89b0cd4 Compare November 7, 2025 13:02
@hyf0 hyf0 force-pushed the 11-07-refactor_node_implement_a_new_bundler_that_satisfy_the_usage_of_rolldownbuild_ branch from 89b0cd4 to eb00fce Compare November 7, 2025 13:08
@graphite-app
Copy link
Contributor

graphite-app bot commented Nov 7, 2025

Merge activity

  • Nov 7, 1:25 PM UTC: hyf0 added this pull request to the Graphite merge queue.
  • Nov 7, 1:31 PM UTC: The Graphite merge queue couldn't merge this PR because it was not satisfying all requirements (Failed CI: 'cargo-test (windows-latest) / Cargo Test').

…RolldownBuild` (#6877)

This's a transitive refactor and still some things need to be done in later PRs. So

- watch mode is not affected because I isolated changes and only affect the `RolldownBuild` logic.
- dev mode is not affected too.
- `Bundler` in `crates/rolldown` is not touched to avoid too much changes.
- This PR doesn't seperate the bundler/build level data, but it's a preparation for that purpose.

---

This PR introduces a `Build`​ concept to represent the process of doing a build. Having this abstraction allows us to implement different bundler for different usages.

In the previous code, `RolldownBuild`​ create a `Bundler`​  underlying for each `generate/write`​ call. Without mentioning potential errors, this abstraction is already wrong and give us buggy mental model when working aounrd these code.

With this PR, `RolldownBuild`​ create only a `Bundler`​, but multiple `builds`​ underlying for each `generate/write`​ call. This gives us a correct mental model when working with code under `rolldown`​ without needing to considering about the usage of `RolldownBuild`​.
@graphite-app graphite-app bot force-pushed the 11-07-refactor_node_implement_a_new_bundler_that_satisfy_the_usage_of_rolldownbuild_ branch from eb00fce to f7ccd50 Compare November 7, 2025 13:26
@hyf0 hyf0 merged commit f66ae54 into main Nov 7, 2025
26 of 27 checks passed
@hyf0 hyf0 deleted the 11-07-refactor_node_implement_a_new_bundler_that_satisfy_the_usage_of_rolldownbuild_ branch November 7, 2025 13:32
graphite-app bot pushed a commit that referenced this pull request Nov 7, 2025
Follow-up of #6877.

This PR makes the native `Bundler`​ integrate with the `Build`​ abstraction too.
shulaoda added a commit that referenced this pull request Nov 10, 2025
## [1.0.0-beta.48] - 2025-11-10

:boom: Breaking Changes

- `this.emitFile` now respects `chunkFileNames` for chunk type
```js
// rolldown.config.js
export default {
  output: {
    chunkFileNames: 'chunks/[name]-[hash].js'
  }
}

// In plugin
this.emitFile({
  type: 'chunk',
  id: './my-module.js'
});

// Before: Output might not follow chunkFileNames pattern
// After: Output follows 'chunks/[name]-[hash].js' pattern
```

- Deprecated top-level options removed
  - `define` → `transform.define`
  - `inject` → `transform.inject`
  - `dropLabels` → `transform.dropLabels`
  - `keepNames` → `output.keepNames`
  - `profilerNames` → `output.generatedCode.profilerNames`

- Stable plugins moved from experimental
```js
// Before
import { replacePlugin, esmExternalRequirePlugin } from 'rolldown/experimental';

// After
import { replacePlugin, esmExternalRequirePlugin } from 'rolldown/plugins';
```

- `RolldownBuild#scan` is removed, now only available from `rolldown/experimental`
```js
// Before: scan was a method on RolldownBuild
const build = await rolldown(config);
await build.scan();

// After: import scan from rolldown/experimental
import { scan } from 'rolldown/experimental';
await scan(config);
```

### 💥 BREAKING CHANGES

- `this.emitFile` does not respect `chunkFileNames` (#6868) by @Copilot
- remove deprecated top-level `dropLabels` option (#6915) by @sapphi-red
- remove deprecated top-level `keepNames` option (#6914) by @sapphi-red
- remove deprecated top-level `profilerNames` option (#6913) by @sapphi-red
- remove deprecated top-level `define` and `inject` options (#6912) by @sapphi-red
- move stable plugins from experimental to `rolldown/plugins` (#6303) by @shulaoda
- node: remove experimental `RolldownBuild#scan`, only expose it from `rolldown/experimental` (#6889) by @hyf0

### 🚀 Features

- add side-effect detection for global constructors with primitive arguments (#6898) by @IWANABETHATGUY
- rust: use `BundleMode` to handle incremental build exhaustively (#6894) by @hyf0
- detect side-effect-free global function calls (#6897) by @IWANABETHATGUY
- expose `parseSync` / `parseAsync` function (#6866) by @sapphi-red
- skip `__toESM` helper when only named imports are used from CJS modules (#6850) by @Copilot
- rolldown_binding: expose `htmlInlineProxyPlugin` (#6856) by @shulaoda
- rolldown_plugin_html_inline_proxy: align `load` hook logic (#6855) by @shulaoda
- rolldown_plugin_html_inline_proxy: align `resolveId` hook logic (#6854) by @shulaoda
- rolldown_plugin_html_inline_proxy: initialize (#6853) by @shulaoda

### 🐛 Bug Fixes

- cli: support nested options in CLI properly (#6911) by @sapphi-red
- debug: ensure injecting `hook_resolve_id_trigger` correctly (#6908) by @hyf0
- use chunk-specific exports for entry module export detection (#6904) by @IWANABETHATGUY
- debug: ensure build get injected and add tests (#6896) by @hyf0
- error: return friendly error for bundler already closed scenario (#6878) by @hyf0
- improve dynamic entry processing with iterative approach (#6869) by @IWANABETHATGUY
- handle tsconfig option resolve error (#6871) by @sapphi-red
- handle error when creating output chunk directories (#6870) by @sapphi-red
- node: `NormalizedOutputOptionsImpl` and `NormalizedInputOptionsImpl` enumerable (#6861) by @hyf0
- node: keys of `RolldownOutput` should be enumerable (#6852) by @Copilot

### 🚜 Refactor

- rust: rename `BundleContext` to `BundleHandle` (#6893) by @hyf0
- rust: rename `build_span` to `bundle_span` (#6892) by @hyf0
- rust: introduce `PluginDriverFactory` to manage creation of `PluginDriver` (#6891) by @hyf0
- crates/rolldown_binding: remove useless `BindingBundlerImpl` (#6888) by @hyf0
- crates/rolldown_binding: rename `Bundler` to `ClassicBundler` and clarify the purpose (#6887) by @hyf0
- rust: rename `BuildFactory/Build` to `BundleFactory/Bundle` (#6886) by @hyf0
- rust: tweak incremental build related methods of `Bundler` (#6884) by @hyf0
- rust: manage build via `BuildFactory` for `Bundler` (#6883) by @hyf0
- node: implement a new `Bundler` that satisfy the usage of `RolldownBuild` (#6877) by @hyf0
- node: remove useless `nonEnumerable` decorator (#6862) by @hyf0

### 📚 Documentation

- add documentation for native replace plugin (#6315) by @shulaoda
- in-depth/directives: expand description of how directives are handled (#6882) by @sapphi-red
- in-depth/bundling-cjs: clarify the condition of `default` export interop (#6875) by @sapphi-red
- add troubleshooting section for `this` in exported functions (#6865) by @sapphi-red
- update prebuilt binaries list based on Node 24 platform support tier (#6864) by @sapphi-red
- remove unsupported [ext] placeholder from entryFileNames and chunkFileNames (#6859) by @Copilot

### ⚡ Performance

- rolldown: improve sourcemap chain processing (#6858) by @Brooooooklyn

### 🧪 Testing

- add test case for issue #6881 with scientific notation (#6906) by @IWANABETHATGUY

### ⚙️ Miscellaneous Tasks

- deps: update npm packages (#6918) by @renovate[bot]
- deps: update dependency rolldown-plugin-dts to v0.17.5 (#6917) by @renovate[bot]
- deps: lock file maintenance (#6907) by @renovate[bot]
- deps: update rust crates (#6905) by @renovate[bot]
- deps: update npm packages (#6903) by @renovate[bot]
- deps: update github-actions (#6902) by @renovate[bot]
- deps: update `oxc_resolver` and `oxc_resolver_napi` (#6901) by @shulaoda
- deps: update dependency rolldown-plugin-dts to v0.17.4 (#6895) by @renovate[bot]
- deps: update dependency tsdown to v0.16.1 (#6885) by @renovate[bot]
- deps: upgrade napi to remove linker args that skip missing symbols (#6867) by @Boshen

Co-authored-by: shulaoda <[email protected]>
graphite-app bot pushed a commit that referenced this pull request Nov 12, 2025
It seems #6870 was reverted by #6877. Maybe we should check if there aren't other changes that got lost.
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.

3 participants