Visitar URL original
feat: Include meta.magicString in RenderChunkMeta by IWANABETHATGUY · Pull Request #7943 · rolldown/rolldown · GitHub
Skip to content

feat: Include meta.magicString in RenderChunkMeta - #7943

Merged
graphite-app[bot] merged 1 commit into
mainfrom
01-18-feat_7934
Jan 18, 2026
Merged

graphite-app[bot] merged 1 commit into
mainfrom
01-18-feat_7934

Conversation

@IWANABETHATGUY

@IWANABETHATGUY IWANABETHATGUY commented Jan 18, 2026 •

Copy link
Copy Markdown
Member

closed #7934

IWANABETHATGUY commented Jan 18, 2026 •

Copy link
Copy Markdown
Member Author

How to use the Graphite Merge Queue

Add the label graphite: merge-when-ready 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

netlify Bot commented Jan 18, 2026

Copy link
Copy Markdown

✅ Deploy Preview for rolldown-rs ready!

Name Link
🔨 Latest commit dfb6047
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/696c89957065460008ae8538
😎 Deploy Preview https://deploy-preview-7943--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.

@netlify

netlify Bot commented Jan 18, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for rolldown-rs canceled.

Name Link
🔨 Latest commit 36b0f0d
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/696cf7656600e500083de934

@IWANABETHATGUY
IWANABETHATGUY marked this pull request as ready for review January 18, 2026 10:12
Copilot AI review requested due to automatic review settings January 18, 2026 10:12
@IWANABETHATGUY IWANABETHATGUY changed the title feat: 7934 feat: add source map generation to native MagicString Jan 18, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 adds generateMap() method support to the native MagicString implementation, enabling source map generation directly from Rust without requiring JavaScript interop.

Changes:

  • Added generateMap() method to BindingMagicString class with support for source, includeContent, and hires options
  • Updated renderChunk hook to accept and handle BindingMagicString return values with automatic source map generation
  • Added comprehensive tests verifying the new functionality including caching, change detection, and source map generation
  • Updated documentation to reflect the new source map generation capabilities

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
packages/rolldown/tests/fixtures/plugin/render-chunk/native-magic-string/main.js Added test fixture with a simple function for testing source map transformations
packages/rolldown/tests/fixtures/plugin/render-chunk/native-magic-string/_config.ts Added comprehensive test suite verifying generateMap() functionality, caching, and integration with renderChunk hook
packages/rolldown/src/plugin/index.ts Added type definitions for magicString in RenderedChunkMeta and updated renderChunk return types to support BindingMagicString
packages/rolldown/src/plugin/bindingify-output-hooks.ts Implemented lazy-loading of magicString instance and handling of BindingMagicString return values with automatic source map generation
packages/rolldown/src/binding.d.cts Added TypeScript type definitions for generateMap() method and BindingSourceMapOptions interface
docs/in-depth/native-magic-string.md Updated documentation to include generateMap() in implemented methods and document its options
crates/rolldown_binding/src/types/binding_magic_string.rs Implemented generate_map() method in Rust with support for source, includeContent, and hires options

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

@IWANABETHATGUY IWANABETHATGUY changed the title feat: add source map generation to native MagicString feat: Include meta.magicString in RenderChunkMeta Jan 18, 2026
@github-actions

github-actions Bot commented Jan 18, 2026 •

Copy link
Copy Markdown
Contributor

Benchmarks Rust

group                                                        pr                                     target
-----                                                        --                                     ------
bundle/bundle@multi-duplicated-top-level-symbol              1.00     72.0±2.33ms        ? ?/sec    1.02     73.6±3.17ms        ? ?/sec
bundle/bundle@multi-duplicated-top-level-symbol-sourcemap    1.01     79.8±2.57ms        ? ?/sec    1.00     78.9±2.83ms        ? ?/sec
bundle/bundle@rome_ts                                        1.01    104.9±3.51ms        ? ?/sec    1.00    104.0±1.95ms        ? ?/sec
bundle/bundle@rome_ts-sourcemap                              1.00    116.7±2.57ms        ? ?/sec    1.00    116.6±2.83ms        ? ?/sec
bundle/bundle@threejs                                        1.01     37.3±2.21ms        ? ?/sec    1.00     37.1±1.15ms        ? ?/sec
bundle/bundle@threejs-sourcemap                              1.00     41.6±0.85ms        ? ?/sec    1.02     42.3±1.93ms        ? ?/sec
bundle/bundle@threejs10x                                     1.01    379.7±6.53ms        ? ?/sec    1.00    376.2±6.26ms        ? ?/sec
bundle/bundle@threejs10x-sourcemap                           1.00    435.5±6.78ms        ? ?/sec    1.00    433.4±7.35ms        ? ?/sec
scan/scan@rome_ts                                            1.00     82.5±2.23ms        ? ?/sec    1.00     82.5±2.08ms        ? ?/sec
scan/scan@threejs                                            1.01     28.7±1.63ms        ? ?/sec    1.00     28.3±0.92ms        ? ?/sec
scan/scan@threejs10x                                         1.00    288.0±4.84ms        ? ?/sec    1.01    290.1±6.37ms        ? ?/sec

@graphite-app

graphite-app Bot commented Jan 18, 2026 •

Copy link
Copy Markdown
Contributor

Merge activity

@graphite-app
graphite-app Bot merged commit 36b0f0d into main Jan 18, 2026
35 checks passed
@graphite-app
graphite-app Bot deleted the 01-18-feat_7934 branch January 18, 2026 15:19
This was referenced Jan 21, 2026
shulaoda pushed a commit that referenced this pull request Jan 22, 2026
## [1.0.0-rc.1] - 2026-01-22

### 🚀 Features

- debug_info: add facade chunk elimination reason (#7980) by @IWANABETHATGUY
- support lazy barrel optimization (#7933) by @shulaoda
- add `experimental.lazyBarrel` option (#7908) by @shulaoda
- skip unused external modules from IIFE parameter list (#7978) by @sapphi-red
- add custom panic hook for better crash reporting (#7752) by @shulaoda
- treeshake: add `invalidImportSideEffects` option (#7958) by @shulaoda
- merge allow-extension emitted chunks (#7940) by @IWANABETHATGUY
- nativeMagicString generateMap (#7944) by @IWANABETHATGUY
- Include meta.magicString in RenderChunkMeta (#7943) by @IWANABETHATGUY
- debug_info: add debug info for eliminated facade chunks (#7946) by @IWANABETHATGUY
- stablize `strictExecutionOrder` and move to `output.strictExecutionOrder` from `experimental.strictExecutionOrder` (#7901) by @sapphi-red
- add documentation link to require() error message (#7898) by @Copilot
- add `codeSplitting: boolean` and deprecate `inlineDynamicImports` (#7870) by @hyf0
- dev: change lazy module URL to `/@vite/lazy` from `/lazy` (#7884) by @sapphi-red

### 🐛 Bug Fixes

- transform JS files containing `</script>` to escape template literals (#7987) by @IWANABETHATGUY
- apply avoid-breaking-exported-api = false to clippy.toml and fix clippy errors (#7982) by @Boshen
- pass `kind` from `this.resolve` (#7981) by @sapphi-red
- rolldown_plugin_vite_resolve: ignore yarn resolution errors and fallback to other resolvers (#7968) by @sapphi-red
- renamer: prevent renaming symbols when there no conflicts (#7936) by @Dunqing
- correct minifyInterExports when emitted chunk got merged (#7941) by @IWANABETHATGUY
- deduplicate entry points when module is both emitted and dynamically imported (#7885) by @IWANABETHATGUY
- dev: add `@vite-ignore` to lazy compilation proxy module import (#7883) by @sapphi-red

### 🚜 Refactor

- rust: enable clippy nursery lint group (#8002) by @Boshen
- rust: fix inconsistent_struct_constructor clippy lint (#7999) by @Boshen
- rust: fix needless_pass_by_ref_mut clippy lint (#7994) by @Boshen
- rust: fix unnecessary_wraps clippy lint (#7993) by @Boshen
- rust: fix enum_variant_names clippy lint (#7992) by @Boshen
- fix single_match clippy lint (#7997) by @Boshen
- rust: fix redundant_clone clippy lint (#7996) by @Boshen
- rust: rename CJS to Cjs to follow upper_case_acronyms lint (#7991) by @Boshen
- rust: remove unnecessary Box wrapper around Vec in MemberExprRef (#7990) by @Boshen
- import_record: make resolved_module optional (#7907) by @shulaoda
- remove unnecessary `.parse` (#7966) by @sapphi-red
- remove unused `ImportRecordMeta::IsPlainImport` (#7948) by @shulaoda
- proper set chunk meta (#7939) by @IWANABETHATGUY
- module_loader: remove `try_spawn_with_cache` (#7920) by @shulaoda
- link_stage: simplify `ImportStatus::NoMatch` to unit variant (#7909) by @shulaoda
- improve global scope symbol reservation in chunk deconfliction (#7906) by @IWANABETHATGUY
- simplify ast unwrapping in generate stage (#7900) by @IWANABETHATGUY
- generate_stage: optimize cross-chunk imports computation (#7889) by @shulaoda
- link_stage: move runtime require logic into match branch (#7892) by @shulaoda
- link_stage: simplify runtime require reference conditions (#7891) by @shulaoda
- link_stage: inline and simplify external dynamic import check (#7890) by @shulaoda
- generate_stage: simplify external module import collection logic (#7887) by @shulaoda
- avoid redundant module lookup in TLA computation (#7886) by @shulaoda
- dev: `devEngine.compileEntry` does not return null (#7882) by @sapphi-red
- dev: fix type errors for test HMR runtime (#7881) by @sapphi-red
- dev: move `clientId` property to `DevRuntime` base class (#7880) by @sapphi-red
- dev: generate client id in browser (#7878) by @hyf0

### 📚 Documentation

- apis: organize hook filters documentation and add composable filters section (#8003) by @sapphi-red
- update `vitepress-plugin-group-icons` (#7947) by @yuyinws
- add in-depth documentation for lazy barrel optimization (#7969) by @shulaoda
- bump theme & update activeMatch for reference (#7963) by @mdong1909
- mark `build()` API as experimental (#7954) by @sapphi-red
- enhance search functionality with improved scoring and filtering logic (#7935) by @hyf0
- add minor comments to multiple types (#7930) by @sapphi-red
- refactor advanedChunks related content to adapt manual code splitting concept (#7925) by @hyf0
- apis: add content to Bundler API page (#7926) by @sapphi-red
- apis: restructure plugin API related docs (#7924) by @sapphi-red
- add plugin API docs (#7923) by @sapphi-red
- apis: add docs to important APIs (#7913) by @sapphi-red
- move the important APIs to the top of the sidebar (#7912) by @sapphi-red
- apis: add more content to CLI documentation (#7911) by @sapphi-red
- apis: generate CLI docs from --help output (#7910) by @sapphi-red
- add fathom analytics (#7896) by @mdong1909

### ⚡ Performance

- use u32 for string indices in string_wizard and rolldown to reduce memory usage (#7989) by @IWANABETHATGUY
- rust: remove all usages of `with_scope_tree_child_ids(true)` for `SemanticBuilder` (#7995) by @Dunqing
- renamer: skip unnecessary nested scope symbol processing (#7899) by @Dunqing
- module_loader: use ArcStr for importer_id to avoid string copy (#7922) by @shulaoda
- module_loader: defer `ModuleTaskOwner` construction until needed (#7921) by @shulaoda
- renamer: optimize symbol renaming by eliminating `rename_non_root_symbol` pass (#7867) by @Dunqing

### 🧪 Testing

- add lazy barrel optimization test cases (#7967) by @shulaoda

### ⚙️ Miscellaneous Tasks

- remove lazy barrel option (#8010) by @shulaoda
- mark watch API as experimental (#8004) by @sapphi-red
- deps: update dependency lodash-es to v4.17.23 [security] (#8001) by @renovate[bot]
- git ignore zed local config (#7988) by @IWANABETHATGUY
- setup publint for published packages (#7972) by @Copilot
- enable `tagged_template_transform ` uncondionally (#7975) by @IWANABETHATGUY
- deps: update oxc to v0.110.0 (#7964) by @renovate[bot]
- deps: update oxc apps (#7962) by @renovate[bot]
- ai: add upgrade-oxc Claude skill (#7957) by @Boshen
- deps: update rollup submodule for tests to v4.55.2 (#7959) by @sapphi-red
- deps: update test262 submodule for tests (#7960) by @sapphi-red
- deps: update crate-ci/typos action to v1.42.1 (#7961) by @renovate[bot]
- deps: update rust crates (#7951) by @renovate[bot]
- deps: update npm packages (#7953) by @renovate[bot]
- deps: update github-actions (#7952) by @renovate[bot]
- deps: update npm packages (#7950) by @renovate[bot]
- format magic-string test before write to disk (#7945) by @IWANABETHATGUY
- deps: update dependency rolldown-plugin-dts to ^0.21.0 (#7915) by @renovate[bot]
- deps: update dependency oxlint-tsgolint to v0.11.1 (#7914) by @renovate[bot]
- deps: update dependency diff to v8.0.3 [security] (#7904) by @renovate[bot]
- remove outdated TODO comment in `collect_depended_symbols` (#7888) by @shulaoda
- deps: update oxc resolver to v11.16.3 (#7876) by @renovate[bot]
Brooooooklyn added a commit that referenced this pull request Aug 25, 2026
Per-chunk renderChunk invocations run concurrently (try_join_all in
render_chunks.rs), but every invocation redefined the getter on the one
cached renderChunkMeta, so an async hook that resumed after a sibling
settled executed the sibling's closure: on the threadless flavor a valid
in-hook read hit the sibling's released box (or, since 984ce9d, its
settled deny), and on lazy flavors it silently minted over the sibling
chunk's code — the latter predates this branch (the shared meta is from
#3999/#7943). The getter now lives on a per-invocation wrapper that
shares only the cached chunks map, so each hook sees its own code, cache,
and settled flag on every flavor.

Proven fail-then-pass on both flavors with a deterministic two-chunk
interleave: threadless previously threw "no longer usable" on a valid
in-hook read; native previously returned the sibling chunk's content.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T34fMrYCf2V13Mg8BKmnda
Brooooooklyn added a commit that referenced this pull request Oct 5, 2026
… to main

None of these hunks is needed by the runtime port. Each goes back to main's
code here; the real fixes among them can land as their own PRs on main.

- parallel_js_plugin_registry.rs and its two callers: main's registry
  (the id-reuse and take() hardening has no failing path through the
  public API, and wasm never reaches it)
- binding_output_asset.rs: native asset bytes are a Node Buffer again
  (BufferSlice::copy_from); the wasm JS-owned copy stays
- binding_magic_string.rs: BindingMagicString<'a> again; the 'static alias
  only served an old napi pin. dropInner and the consumed flag stay
- rolldown_error downcast: main's downcast; the chain() walk served a
  shared close error type that no longer exists
- bindingify-output-hooks.ts: one shared renderChunk meta object again, and
  the native-magic-string-interleave fixture goes with it. The shared
  getter is a real main bug (#3999/#7943) and gets its own PR on main
- error.ts isBindingErrors helper and the devtools sessionId JSDoc in
  input-options.ts: main's text. The nullish thrown-value fix in
  getErrorMessage stays (WASI keeps the thrown value)

No #[napi] signature changed; the native build leaves binding.d.cts as is.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T34fMrYCf2V13Mg8BKmnda
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.

[Feature Request]: Include meta.magicString in RenderChunkMeta

3 participants