fix: fallback sourcemap generation for experimental.nativeMagicString: false#6488
Merged
graphite-app[bot] merged 1 commit intomainfrom Oct 12, 2025
Conversation
Member
Author
How to use the Graphite Merge QueueAdd 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. |
7693f5b to
fc253e5
Compare
nativeMagicString: falseexperimental.nativeMagicString: false
e1e6b28 to
9fe7b4a
Compare
59a4736 to
501b6c2
Compare
9fe7b4a to
f817d69
Compare
shulaoda
approved these changes
Oct 12, 2025
Contributor
Merge activity
|
Contributor
Benchmarks Rust |
graphite-app bot
pushed a commit
that referenced
this pull request
Oct 12, 2025
…g: false` (#6488) ### TL;DR Added an experimental flag to control native MagicString sourcemap generation, allowing for both native and JavaScript-based sourcemap generation paths. Sometimes on the JS side, users require that the sourcemap generation be **synced**, e.g. https://github.com/rolldown/rolldown/blob/79fa18fdc978d4babf4c6ec45225b2802e38ddc9/packages/rolldown/src/plugin/transform-plugin-context.ts?plain=1#L80-L82 ### What changed? - Added an experimental flag `nativeMagicString` to control whether sourcemap generation happens in native Rust code or in JavaScript - Modified the `ScanStage` to conditionally create the sourcemap generation thread based on this flag - Updated the `TransformPluginContext.send_magic_string` method to return the sourcemap JSON string when native mode is disabled - Updated the JavaScript binding to handle both modes, using the returned sourcemap when in JavaScript mode - Added test fixtures for both enabled and disabled native MagicString modes ### How to test? 1. Run the new test fixtures: - `packages/rolldown/tests/fixtures/output/sourcemap/native-magic-string-true` - `packages/rolldown/tests/fixtures/output/sourcemap/native-magic-string-false` 2. Verify that sourcemaps are correctly generated in both modes. 3. Test with a real project by setting the experimental flag: ```js // rolldown.config.js export default { experimental: { nativeMagicString: true, // or false }, // other config } ``` ### Why make this change? This change provides flexibility in how sourcemaps are generated, allowing for both native (Rust-based) and JavaScript-based approaches. This can be useful for debugging, performance testing, or compatibility purposes. The experimental flag allows users to choose the approach that works best for their specific use case.
501b6c2 to
5e1828b
Compare
✅ Deploy Preview for rolldown-rs ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
…g: false` (#6488) ### TL;DR Added an experimental flag to control native MagicString sourcemap generation, allowing for both native and JavaScript-based sourcemap generation paths. Sometimes on the JS side, users require that the sourcemap generation be **synced**, e.g. https://github.com/rolldown/rolldown/blob/79fa18fdc978d4babf4c6ec45225b2802e38ddc9/packages/rolldown/src/plugin/transform-plugin-context.ts?plain=1#L80-L82 ### What changed? - Added an experimental flag `nativeMagicString` to control whether sourcemap generation happens in native Rust code or in JavaScript - Modified the `ScanStage` to conditionally create the sourcemap generation thread based on this flag - Updated the `TransformPluginContext.send_magic_string` method to return the sourcemap JSON string when native mode is disabled - Updated the JavaScript binding to handle both modes, using the returned sourcemap when in JavaScript mode - Added test fixtures for both enabled and disabled native MagicString modes ### How to test? 1. Run the new test fixtures: - `packages/rolldown/tests/fixtures/output/sourcemap/native-magic-string-true` - `packages/rolldown/tests/fixtures/output/sourcemap/native-magic-string-false` 2. Verify that sourcemaps are correctly generated in both modes. 3. Test with a real project by setting the experimental flag: ```js // rolldown.config.js export default { experimental: { nativeMagicString: true, // or false }, // other config } ``` ### Why make this change? This change provides flexibility in how sourcemaps are generated, allowing for both native (Rust-based) and JavaScript-based approaches. This can be useful for debugging, performance testing, or compatibility purposes. The experimental flag allows users to choose the approach that works best for their specific use case.
5e1828b to
871e5e8
Compare
shulaoda
pushed a commit
that referenced
this pull request
Oct 13, 2025
## [1.0.0-beta.43] - 2025-10-13 ### 🚀 Features - add filterVitePlugins utility that uses to skip vite plugins using apply: "serve" (#6502) by @IWANABETHATGUY - rolldown_plugin_vite_html: align partial can inline entry logic (#6500) by @shulaoda - rolldown_plugin_vite_html: align get_imported_chunks logic (#6499) by @shulaoda - rolldown_plugin_vite_html: align HtmlTagDescriptor (#6498) by @shulaoda - rolldown_plugin_vite_html: align partial utility functions logic (#6497) by @shulaoda - rolldown_html_vite_html: align partial inject chunk asset links logic (#6496) by @shulaoda - rolldown_plugin_vite_html: align `processedHtml` logic (#6494) by @shulaoda - add `nativeMagicString` options (#6469) by @IWANABETHATGUY - rust: eagerly cleanup resources when calling `close` (#6483) by @hyf0 - rust: varify if bundler is closed for public API (#6481) by @hyf0 - replace [format] placeholder in chunk filename templates (#6476) by @elecmonkey - implement synchronous JS callback invocation for paths function (#6474) by @IWANABETHATGUY - rolldown_plugin_vite_html: align partial transform hook logic (#6471) by @shulaoda - Support `output.paths` (#6470) by @IWANABETHATGUY - rolldown_plugin_vite_html: align script urls handle logic (#6466) by @shulaoda - add validation for `preserveEntrySignatures` with `includeDependenciesRecursively` option (#6468) by @hyf0 - rolldown_plugin_vite_html: align partial logic (#6465) by @shulaoda - background sourcemap generation for Javascript transform hooks (#6293) by @IWANABETHATGUY - rolldown_plugin_vite_html: handle style tag (#6464) by @shulaoda - rolldown_plugin_vite_html: handle inline style attribute (#6463) by @shulaoda - rolldown_plugin_vite_html: patially handle vite-ignore attribute (#6462) by @shulaoda - dev/node: expose errors of `on_hmr_updatrs` to node (#6454) by @hyf0 - dev/node: expose errors of `on_output` to node (#6453) by @hyf0 - dev: expose hmr errors on `on_hmr_updatrs` callback (#6443) by @hyf0 ### 🐛 Bug Fixes - fallback sourcemap generation for `experimental.nativeMagicString: false` (#6488) by @IWANABETHATGUY - take `resolve.modules` into account (#6484) by @Pickachu - rolldown: increase tokio blocking threads size for watch mode (#6467) by @Brooooooklyn - use len_utf16 in magic_string CharToByteMapper (#6461) by @IWANABETHATGUY - pass `advancedChunks#includeDependenciesRecursively` to rust (#6448) by @hyf0 - dev: should compute hmr update correctly for multiple clients (#6442) by @hyf0 - allow specifying packageJsonPath in PluginContext.load (#6439) by @sapphi-red - use transform.target as default for minify target when `minify: { compress: true }` (#6433) by @sapphi-red ### 🚜 Refactor - extract background sourcemap handling into separate methods (#6501) by @IWANABETHATGUY - rust: only expose methods of `Bundler` for public usage (#6480) by @hyf0 - dev/node: use napi object instead clss for `BindingClientHmrUpdate` (#6456) by @hyf0 - dev/node: improve `DevOnHmrUpdates` API (#6455) by @hyf0 ### 📚 Documentation - update team page and add acknowledgements page (#6495) by @hyf0 - restructure website and files (#6492) by @hyf0 - correct incorrect documentation about the config file (#6472) by @jsparkdev - options: `experimental.strictExecutionOrder` (#6450) by @hyf0 - adding `why-plugin-hook-filter` in depth (#6446) by @IWANABETHATGUY ### ⚡ Performance - rolldown: replace serde JSON string escape with simd impl (#6475) by @Brooooooklyn ### ⚙️ Miscellaneous Tasks - docs: redirect removed path to new locations for compatibility (#6493) by @hyf0 - deps: lock file maintenance npm packages (#6490) by @renovate[bot] - deps: update github-actions (major) (#6415) by @renovate[bot] - deps: update github-actions (#6489) by @renovate[bot] - rust: add comment for `DiagnosticOptions#stabilize_path` (#6447) by @hyf0 - rust: remove unused `BindingHmrOutput` (#6457) by @hyf0 - rolldown_plugin_vite_html: tweak `utils.rs` (#6460) by @shulaoda - change node version to lts (#6435) by @iiio2 - rust/test: split hmr related structs into their own files (#6445) by @hyf0 - deps: update crate-ci/typos action to v1.38.1 (#6452) by @renovate[bot] - rust/test: render hmr errors (#6444) by @hyf0 - examples: add `"type": "module"` in `package.json` (#6441) by @iiio2 ### ❤️ New Contributors * @Pickachu made their first contribution in [#6484](#6484) * @elecmonkey made their first contribution in [#6476](#6476) * @jsparkdev made their first contribution in [#6472](#6472)
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
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

TL;DR
Added an experimental flag to control native MagicString sourcemap generation, allowing for both native and JavaScript-based sourcemap generation paths.
Sometimes on the JS side, users require that the sourcemap generation be synced, e.g.
rolldown/packages/rolldown/src/plugin/transform-plugin-context.ts
Lines 80 to 82 in 79fa18f
What changed?
nativeMagicStringto control whether sourcemap generation happens in native Rust code or in JavaScriptScanStageto conditionally create the sourcemap generation thread based on this flagTransformPluginContext.send_magic_stringmethod to return the sourcemap JSON string when native mode is disabledHow to test?
Run the new test fixtures:
packages/rolldown/tests/fixtures/output/sourcemap/native-magic-string-truepackages/rolldown/tests/fixtures/output/sourcemap/native-magic-string-falseVerify that sourcemaps are correctly generated in both modes.
Test with a real project by setting the experimental flag:
Why make this change?
This change provides flexibility in how sourcemaps are generated, allowing for both native (Rust-based) and JavaScript-based approaches. This can be useful for debugging, performance testing, or compatibility purposes. The experimental flag allows users to choose the approach that works best for their specific use case.