Skip to content

feat: MagicString ignoreList support#8773

Merged
graphite-app[bot] merged 1 commit intomainfrom
03-18-feat_magicstring_ignorelist
Mar 19, 2026
Merged

feat: MagicString ignoreList support#8773
graphite-app[bot] merged 1 commit intomainfrom
03-18-feat_magicstring_ignorelist

Conversation

@IWANABETHATGUY
Copy link
Copy Markdown
Member

@IWANABETHATGUY IWANABETHATGUY commented Mar 18, 2026

Summary

  • Adds end-to-end ignoreList support to the native MagicString binding, matching the original magic-string API
  • When ignoreList: true is passed in constructor options, generateMap() now populates x_google_ignoreList in the output source map
  • Unskips the two related tests

Changes

  • string_wizard: Added ignore_list field to MagicStringOptions and MagicString, set x_google_ignoreList on source map when enabled
  • rolldown_binding: Added ignoreList option, getter, and x_google_ignoreList getter on BindingSourceMap / BindingDecodedMap
  • Tests: Unskipped stores ignore-list hint and generates x_google_ignoreList tests

Here's how ignoreList works in the original magic-string:

1. Constructor — stores the boolean from options:
https://github.com/Rich-Harris/magic-string/blob/410fd4d080d8bf0b5be900c16c8ba11276fd8749/src/MagicString.js#L37

2. Source map generation — populates x_google_ignoreList when true:
https://github.com/Rich-Harris/magic-string/blob/410fd4d080d8bf0b5be900c16c8ba11276fd8749/src/MagicString.js#L183

Copy link
Copy Markdown
Member Author

IWANABETHATGUY commented Mar 18, 2026


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
Copy link
Copy Markdown

netlify bot commented Mar 18, 2026

Deploy Preview for rolldown-rs canceled.

Name Link
🔨 Latest commit 9d0d052
🔍 Latest deploy log https://app.netlify.com/projects/rolldown-rs/deploys/69bb5f374eb29a0008d14814

@IWANABETHATGUY IWANABETHATGUY changed the title feat: MagicString ignoreList feat: support ignoreList option in MagicString Mar 18, 2026
@IWANABETHATGUY IWANABETHATGUY force-pushed the 03-18-feat_magicstring_ignorelist branch 2 times, most recently from 3d2bdde to 1ce53f6 Compare March 18, 2026 16:21
@IWANABETHATGUY IWANABETHATGUY changed the title feat: support ignoreList option in MagicString feat: support getIndentString in MagicString Mar 18, 2026
@IWANABETHATGUY IWANABETHATGUY changed the title feat: support getIndentString in MagicString feat: MagicString ignoreList support Mar 18, 2026
@IWANABETHATGUY IWANABETHATGUY marked this pull request as ready for review March 18, 2026 17:00
@IWANABETHATGUY IWANABETHATGUY requested review from hyf0 and shulaoda March 18, 2026 17:00
@github-actions
Copy link
Copy Markdown
Contributor

Benchmarks Rust

  • target: main(e17f131)
  • pr: 03-18-feat_magicstring_ignorelist(1ce53f6)
group                                                        pr                                     target
-----                                                        --                                     ------
bundle/bundle@multi-duplicated-top-level-symbol              1.00     68.8±3.47ms        ? ?/sec    1.02     69.9±3.01ms        ? ?/sec
bundle/bundle@multi-duplicated-top-level-symbol-sourcemap    1.01     77.9±4.27ms        ? ?/sec    1.00     76.8±3.63ms        ? ?/sec
bundle/bundle@rome_ts                                        1.00   152.9±10.48ms        ? ?/sec    1.01   154.9±10.77ms        ? ?/sec
bundle/bundle@rome_ts-sourcemap                              1.00   172.0±10.30ms        ? ?/sec    1.00    172.5±9.23ms        ? ?/sec
bundle/bundle@threejs                                        1.00     62.4±3.07ms        ? ?/sec    1.08     67.5±6.36ms        ? ?/sec
bundle/bundle@threejs-sourcemap                              1.01     78.8±7.72ms        ? ?/sec    1.00     78.1±7.05ms        ? ?/sec
bundle/bundle@threejs10x                                     1.00   777.1±17.22ms        ? ?/sec    1.00   775.9±13.73ms        ? ?/sec
bundle/bundle@threejs10x-sourcemap                           1.00   879.9±12.72ms        ? ?/sec    1.02   898.2±13.70ms        ? ?/sec

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Mar 18, 2026

Merging this PR will not alter performance

✅ 6 untouched benchmarks
⏩ 8 skipped benchmarks1


Comparing 03-18-feat_magicstring_ignorelist (1ce53f6) with main (64d4490)2

Open in CodSpeed

Footnotes

  1. 8 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.

  2. No successful run was found on main (e17f131) during the generation of this report, so 64d4490 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

Copy link
Copy Markdown
Member Author

IWANABETHATGUY commented Mar 19, 2026

Merge activity

  • Mar 19, 2:27 AM UTC: The merge label 'graphite: merge-when-ready' was detected. This PR will be added to the Graphite merge queue once it meets the requirements.
  • Mar 19, 2:27 AM UTC: IWANABETHATGUY added this pull request to the Graphite merge queue.
  • Mar 19, 2:33 AM UTC: Merged by the Graphite merge queue.

## Summary

* Adds end-to-end `ignoreList` support to the native MagicString binding, matching the original magic-string API
* When `ignoreList: true` is passed in constructor options, `generateMap()` now populates `x_google_ignoreList` in the output source map
* Unskips the two related tests

## Changes

* **string\_wizard:** Added `ignore_list` field to `MagicStringOptions` and `MagicString`, set `x_google_ignoreList` on source map when enabled
* **rolldown\_binding:** Added `ignoreList` option, getter, and `x_google_ignoreList` getter on `BindingSourceMap` / `BindingDecodedMap`
* **Tests:** Unskipped `stores ignore-list hint` and `generates x_google_ignoreList` tests

Here's how `ignoreList` works in the original magic-string:

**1. Constructor** — stores the boolean from options:
[https://github.com/Rich-Harris/magic-string/blob/410fd4d080d8bf0b5be900c16c8ba11276fd8749/src/MagicString.js#L37](https://github.com/Rich-Harris/magic-string/blob/410fd4d080d8bf0b5be900c16c8ba11276fd8749/src/MagicString.js#L37)

**2. Source map generation** — populates `x_google_ignoreList` when true:
[https://github.com/Rich-Harris/magic-string/blob/410fd4d080d8bf0b5be900c16c8ba11276fd8749/src/MagicString.js#L183](https://github.com/Rich-Harris/magic-string/blob/410fd4d080d8bf0b5be900c16c8ba11276fd8749/src/MagicString.js#L183)
@graphite-app graphite-app bot force-pushed the 03-18-feat_magicstring_ignorelist branch from 1ce53f6 to 9d0d052 Compare March 19, 2026 02:28
@graphite-app graphite-app bot merged commit 9d0d052 into main Mar 19, 2026
32 checks passed
@graphite-app graphite-app bot deleted the 03-18-feat_magicstring_ignorelist branch March 19, 2026 02:33
@github-actions github-actions bot mentioned this pull request Mar 23, 2026
shulaoda added a commit that referenced this pull request Mar 23, 2026
## [1.0.0-rc.11] - 2026-03-23

### 🚀 Features

- magicString replace with regex (#8802) by @IWANABETHATGUY
- support `output.sourcemapExcludeSources` option (#8828) by @sapphi-red
- support `getIndentString` in MagicString (#8775) by @IWANABETHATGUY
- MagicString ignoreList support (#8773) by @IWANABETHATGUY

### 🐛 Bug Fixes

- types: remove `pluginName` from `MinimalPluginContext` (#8864) by @sapphi-red
- do not report eval?.() as direct eval (#8860) by @IWANABETHATGUY
- handle negative indices, overlapping ranges, and moved content in MagicString remove (#8829) by @IWANABETHATGUY
- enable arbitrary_precision for serde_json to fix JSON float parsing (#8848) by @elderapo
- resolve TypeScript lint errors (#8841) by @Boshen
- avoid panic on multi-byte UTF-8 chars in hash placeholder iterator (#8790) by @shulaoda
- ci: skip failing vite build watch raw query test (#8840) by @Boshen
- ci: use step-level env override to unset VITE_PLUS_CLI_BIN in vite tests (#8838) by @Boshen
- ci: move vite tests into CI workflow by @Boshen
- ci: unset all VITE_PLUS_* env vars in vite-tests workflow (#8837) by @Boshen
- test: skip watch CLI tests on Windows (#8830) by @Boshen
- ci: unset VITE_PLUS_CLI_BIN in vite-tests workflow (#8832) by @Boshen
- remove redundant bare side-effect imports in entry/facade chunks (#8804) by @h-a-n-a
- magicString prepend issues (#8797) by @IWANABETHATGUY
- ci: use `vpx` instead of `vp exec` for `pkg-pr-new` (#8827) by @Boshen
- set `order` for callable plugins (#8815) by @sapphi-red
- handle reversed slice ranges with moved content (#8750) by @IWANABETHATGUY
- update emnapi to latest to avoid version mismatch (#8781) by @sapphi-red
- external.md on Windows OS (#8780) by @bddjr
- align MagicString length/isEmpty with reference magic-string (#8776) by @IWANABETHATGUY

### 🚜 Refactor

- extract canonical_ref_resolving_namespace helper (#8836) by @Boshen

### 📚 Documentation

- improve external examples for cross-platform correctness (#8786) by @hyf0-agent
- update reference to transform function in plugin API documentation (#8778) by @zOadT

### ⚡ Performance

- reduce timing of `dervie_entries_aware_chunk_name` (#8847) by @AliceLanniste
- bench: remove redundant sourcemap benchmark cases (#8825) by @Boshen
- reduce intermediate allocations in `collapse_sourcemaps` (#8821) by @Boshen
- enable parallel AST cloning on macOS (#8814) by @Boshen

### 🧪 Testing

- watch: use polling watcher and retry for watch error test (#8772) by @sapphi-red

### ⚙️ Miscellaneous Tasks

- justfile: skip setup-vite-plus if vp is already installed (#8862) by @Boshen
- add expectWarning option to test config (#8861) by @IWANABETHATGUY
- justfile: support windows for `just setup` (#8846) by @AliceLanniste
- deps: update rust crates (#8852) by @renovate[bot]
- deps: update endbug/version-check action to v3 (#8855) by @renovate[bot]
- deps: update github-actions (#8853) by @renovate[bot]
- deps: update dependency vitepress to v2.0.0-alpha.17 (#8854) by @renovate[bot]
- deps: update npm packages (#8851) by @renovate[bot]
- bench: use mimalloc as global allocator in bench crate (#8844) by @IWANABETHATGUY
- reuse native build artifact in node-validation job (#8826) by @Boshen
- speed up CodSpeed benchmark build by disabling LTO (#8824) by @Boshen
- remove redundant critcmp benchmark job (#8823) by @Boshen
- deps: update rust crate oxc_sourcemap to v6.1.0 (#8785) by @renovate[bot]
- node: migrate oxlint and oxfmt to Vite+ (#8813) by @Boshen
- revert namespace runners for release build jobs (#8820) by @Boshen
- migrate runners to namespace (#8819) by @Boshen
- test: relax test utils path assertion to support git worktrees (#8816) by @younggglcy
- rename `examples/lazy` to `examples/lazy-compilation` (#8789) by @shulaoda
- improve "needs reproduction" wording by @Boshen
- deps: update dependency oxlint-tsgolint to v0.17.1 (#8807) by @renovate[bot]
- enable 7 previously-skipped MagicString tests (#8771) by @IWANABETHATGUY
- upgrade oxc to 0.121.0 (#8784) by @shulaoda
- increase Windows dev drive size from 12GB to 20GB (#8779) by @Copilot

### ❤️ New Contributors

* @elderapo made their first contribution in [#8848](#8848)
* @younggglcy made their first contribution in [#8816](#8816)
* @bddjr made their first contribution in [#8780](#8780)
* @zOadT made their first contribution in [#8778](#8778)

Co-authored-by: shulaoda <165626830+shulaoda@users.noreply.github.com>
This was referenced Mar 23, 2026
shulaoda added a commit that referenced this pull request Mar 23, 2026
## [1.0.0-rc.11] - 2026-03-23

### 🚀 Features

- magicString replace with regex (#8802) by @IWANABETHATGUY
- support `output.sourcemapExcludeSources` option (#8828) by @sapphi-red
- support `getIndentString` in MagicString (#8775) by @IWANABETHATGUY
- MagicString ignoreList support (#8773) by @IWANABETHATGUY

### 🐛 Bug Fixes

- forward test filters through vp run (#8870) by @younggglcy
- types: remove `pluginName` from `MinimalPluginContext` (#8864) by @sapphi-red
- do not report eval?.() as direct eval (#8860) by @IWANABETHATGUY
- handle negative indices, overlapping ranges, and moved content in MagicString remove (#8829) by @IWANABETHATGUY
- enable arbitrary_precision for serde_json to fix JSON float parsing (#8848) by @elderapo
- resolve TypeScript lint errors (#8841) by @Boshen
- avoid panic on multi-byte UTF-8 chars in hash placeholder iterator (#8790) by @shulaoda
- ci: skip failing vite build watch raw query test (#8840) by @Boshen
- ci: use step-level env override to unset VITE_PLUS_CLI_BIN in vite tests (#8838) by @Boshen
- ci: move vite tests into CI workflow by @Boshen
- ci: unset all VITE_PLUS_* env vars in vite-tests workflow (#8837) by @Boshen
- test: skip watch CLI tests on Windows (#8830) by @Boshen
- ci: unset VITE_PLUS_CLI_BIN in vite-tests workflow (#8832) by @Boshen
- remove redundant bare side-effect imports in entry/facade chunks (#8804) by @h-a-n-a
- magicString prepend issues (#8797) by @IWANABETHATGUY
- ci: use `vpx` instead of `vp exec` for `pkg-pr-new` (#8827) by @Boshen
- set `order` for callable plugins (#8815) by @sapphi-red
- handle reversed slice ranges with moved content (#8750) by @IWANABETHATGUY
- update emnapi to latest to avoid version mismatch (#8781) by @sapphi-red
- external.md on Windows OS (#8780) by @bddjr
- align MagicString length/isEmpty with reference magic-string (#8776) by @IWANABETHATGUY

### 🚜 Refactor

- extract canonical_ref_resolving_namespace helper (#8836) by @Boshen

### 📚 Documentation

- improve external examples for cross-platform correctness (#8786) by @hyf0-agent
- update reference to transform function in plugin API documentation (#8778) by @zOadT

### ⚡ Performance

- reduce timing of `dervie_entries_aware_chunk_name` (#8847) by @AliceLanniste
- bench: remove redundant sourcemap benchmark cases (#8825) by @Boshen
- reduce intermediate allocations in `collapse_sourcemaps` (#8821) by @Boshen
- enable parallel AST cloning on macOS (#8814) by @Boshen

### 🧪 Testing

- watch: use polling watcher and retry for watch error test (#8772) by @sapphi-red

### ⚙️ Miscellaneous Tasks

- deps: update dependency @oxc-project/types to v0.122.0 (#8873) by @renovate[bot]
- publish-to-npm: use correct vp pm publish (#8871) by @shulaoda
- justfile: skip setup-vite-plus if vp is already installed (#8862) by @Boshen
- add expectWarning option to test config (#8861) by @IWANABETHATGUY
- justfile: support windows for `just setup` (#8846) by @AliceLanniste
- deps: update rust crates (#8852) by @renovate[bot]
- deps: update endbug/version-check action to v3 (#8855) by @renovate[bot]
- deps: update github-actions (#8853) by @renovate[bot]
- deps: update dependency vitepress to v2.0.0-alpha.17 (#8854) by @renovate[bot]
- deps: update npm packages (#8851) by @renovate[bot]
- bench: use mimalloc as global allocator in bench crate (#8844) by @IWANABETHATGUY
- reuse native build artifact in node-validation job (#8826) by @Boshen
- speed up CodSpeed benchmark build by disabling LTO (#8824) by @Boshen
- remove redundant critcmp benchmark job (#8823) by @Boshen
- deps: update rust crate oxc_sourcemap to v6.1.0 (#8785) by @renovate[bot]
- node: migrate oxlint and oxfmt to Vite+ (#8813) by @Boshen
- revert namespace runners for release build jobs (#8820) by @Boshen
- migrate runners to namespace (#8819) by @Boshen
- test: relax test utils path assertion to support git worktrees (#8816) by @younggglcy
- rename `examples/lazy` to `examples/lazy-compilation` (#8789) by @shulaoda
- improve "needs reproduction" wording by @Boshen
- deps: update dependency oxlint-tsgolint to v0.17.1 (#8807) by @renovate[bot]
- enable 7 previously-skipped MagicString tests (#8771) by @IWANABETHATGUY
- upgrade oxc to 0.121.0 (#8784) by @shulaoda
- increase Windows dev drive size from 12GB to 20GB (#8779) by @Copilot

### ❤️ New Contributors

* @younggglcy made their first contribution in [#8870](#8870)
* @elderapo made their first contribution in [#8848](#8848)
* @bddjr made their first contribution in [#8780](#8780)
* @zOadT made their first contribution in [#8778](#8778)

---------

Co-authored-by: shulaoda <165626830+shulaoda@users.noreply.github.com>
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.

2 participants