SIGN IN SIGN UP
denoland / deno UNCLAIMED

A modern runtime for JavaScript and TypeScript.

0 0 16 Rust

fix(lsp): honor `moduleResolution: "bundler"` for npm dir imports (#34643)

## Summary

Fixes denoland/deno#33955.

The LSP's `NodeResolver` was always constructed with `bundle_mode:
false`, so importing a subpath of an npm package whose `package.json`
doesn't list it under `exports` (e.g. `devextreme-react/text-box`)
raised `[ERR_UNSUPPORTED_DIR_IMPORT]` even when the user had explicitly
set `"moduleResolution": "bundler"` in `tsconfig.json` or `deno.json`.
The TypeScript language service itself already routes such projects
through `ts.ModuleResolutionKind.Bundler` (see `cli/tsc/98_lsp.js`), so
the Rust-side resolver and tsserver disagreed about whether the import
was valid.

This wires the user's `compilerOptions.moduleResolution` through to the
LSP's per-scope `NodeResolver`:

- `NodeResolver::bundle_mode` becomes a runtime-settable `AtomicBool`
exposed via `set_bundle_mode`. This sidesteps the existing circular
dependency between `LspCompilerOptionsResolver` (which needs a node
resolver to resolve tsconfig `extends`) and the node resolver (which now
needs the compiler options).
- After `LspCompilerOptionsResolver` is built,
`LspResolver::set_compiler_options_resolver` iterates each scope's
resolver and flips `bundle_mode` on whenever any compiler-options entry
under that scope reports `CompilerOptionsModuleResolution::Bundler`.
- Runtime / CLI behavior is unchanged — `cli/factory.rs` still only
enables `bundle_mode` for `deno bundle`.

## Test plan

- [ ] New `lsp_tsconfig_module_resolution_bundler_dir_import`
integration test reproducing the issue: imports `some-pkg/text-box` (a
directory without `exports`) and asserts the LSP emits no diagnostics
when `moduleResolution: "bundler"` is set.
- [ ] Existing LSP / node_resolver tests continue to pass.

Closes denoland/divybot#369

---------

Co-authored-by: divybot <divybot@users.noreply.github.com>
Co-authored-by: Divy Srivastava <me@littledivy.com>
E
em committed
c193664579e2bfe377b91ba6d628fef12d65b8dd
Parent: 81cdb68
Committed by GitHub <noreply@github.com> on 6/1/2026, 1:08:33 PM