vitejs / vitejs/vite-plugin-react

plugin-rsc: inject-async-local-storage transform drops source maps

Open
#1,418 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

pending triage plugin: rsc
Dominant language
TypeScript
Stars
1.2k
Forks
269
Avg merge
1d 3h
Merged PRs (30d)
19

Description

Related plugins
Describe the bug

The rsc:inject-async-local-storage transform changes modules containing both typeof AsyncLocalStorage and new AsyncLocalStorage(), but it does not return a source map for that transformation.

With Vite 8.2.1, the RSC and SSR builds emit SOURCEMAP_BROKEN naming this transform. The final emitted map cannot resolve a marker in the transformed source to any original position: the expected location is src/entry.js:6, while originalPositionFor returns source=null, line=null, column=null.

Expected: the transform preserves and composes source mappings, the marker resolves to src/entry.js:6, and Vite emits no source-map warning for this transform.

Actual: the transformed module loses its original mapping. This can cause incorrect or missing stack-frame symbolication in production error monitoring.

The likely location is globalAsyncLocalStoragePlugin, which prepends initialization text and returns only transformed code. I can submit a patch and test if maintainers confirm the preferred test location.

Reproduction

https://github.com/FieldArchiveTX/vite-plugin-rsc-sourcemap-repro

Steps to reproduce
  1. Clone the reproduction repository.
  2. Run npm ci.
  3. Run npm run repro.
  4. Observe two SOURCEMAP_BROKEN warnings for rsc:inject-async-local-storage and the verifier output showing a null original position.

The reproduction command exits successfully when the defect is reproduced.

System Info
System:
  OS: Windows 11 10.0.26200
  CPU: x64 Intel Core i7-14700KF
Binaries:
  Node: 24.14.0
  npm: 10.9.2
Browsers:
  Chrome: 150.0.7871.187
npmPackages:
  @vitejs/plugin-rsc: 0.5.34
  vite: 8.2.1
  react: 19.2.8
  react-dom: 19.2.8
  react-server-dom-webpack: 19.2.8
Used Package Manager

npm

Logs
[plugin rsc:inject-async-local-storage] [SOURCEMAP_BROKEN]
Sourcemap is likely to be incorrect: a plugin (rsc:inject-async-local-storage) was used to transform files, but didn't generate a sourcemap for the transformation.

expected: src/entry.js:6
traced: source=null, line=null, column=null

REPRODUCED: the emitted source map does not resolve the marker to its source line.
Validations

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the globalAsyncLocalStoragePlugin in the plugin-rsc package and run the linked reproduction with npm ci and npm run repro. Trace the rsc:inject-async-local-storage transform and identify the appropriate test location. Done means the transformed module preserves source mappings, the marker resolves to src/entry.js:6, and the SOURCEMAP_BROKEN warning is gone.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
build-system, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.