Skip to content

Commit

Permalink
fix(check): ignore resolving jsxImportSource when jsx is not used i…
Browse files Browse the repository at this point in the history
…n graph (#26548)
  • Loading branch information
dsherret authored Oct 25, 2024
1 parent 4626b11 commit e70341e
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 7 deletions.
46 changes: 39 additions & 7 deletions cli/tsc/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use crate::args::TypeCheckMode;
use crate::cache::FastInsecureHasher;
use crate::node;
use crate::npm::CliNpmResolver;
use crate::npm::ResolvePkgFolderFromDenoReqError;
use crate::util::checksum;
use crate::util::path::mapped_specifier_for_tsc;

Expand Down Expand Up @@ -35,6 +36,7 @@ use deno_runtime::deno_node::NodeResolver;
use deno_semver::npm::NpmPackageReqReference;
use node_resolver::errors::NodeJsErrorCode;
use node_resolver::errors::NodeJsErrorCoded;
use node_resolver::errors::ResolvePkgSubpathFromDenoModuleError;
use node_resolver::NodeModuleKind;
use node_resolver::NodeResolution;
use node_resolver::NodeResolutionMode;
Expand All @@ -45,6 +47,7 @@ use std::fmt;
use std::path::Path;
use std::path::PathBuf;
use std::sync::Arc;
use thiserror::Error;

mod diagnostics;

Expand Down Expand Up @@ -688,12 +691,30 @@ fn op_resolve_inner(
Some(ResolutionResolved { specifier, .. }) => {
resolve_graph_specifier_types(specifier, &referrer, state)?
}
_ => resolve_non_graph_specifier_types(
&specifier,
&referrer,
referrer_kind,
state,
)?,
_ => {
match resolve_non_graph_specifier_types(
&specifier,
&referrer,
referrer_kind,
state,
) {
Ok(maybe_result) => maybe_result,
Err(
err @ ResolveNonGraphSpecifierTypesError::ResolvePkgFolderFromDenoReq(
ResolvePkgFolderFromDenoReqError::Managed(_),
),
) => {
// it's most likely requesting the jsxImportSource, which isn't loaded
// into the graph when not using jsx, so just ignore this error
if specifier.ends_with("/jsx-runtime") {
None
} else {
return Err(err.into());
}
}
Err(err) => return Err(err.into()),
}
}
};
let result = match maybe_result {
Some((specifier, media_type)) => {
Expand Down Expand Up @@ -818,12 +839,23 @@ fn resolve_graph_specifier_types(
}
}

#[derive(Debug, Error)]
enum ResolveNonGraphSpecifierTypesError {
#[error(transparent)]
ResolvePkgFolderFromDenoReq(#[from] ResolvePkgFolderFromDenoReqError),
#[error(transparent)]
ResolvePkgSubpathFromDenoModule(#[from] ResolvePkgSubpathFromDenoModuleError),
}

fn resolve_non_graph_specifier_types(
raw_specifier: &str,
referrer: &ModuleSpecifier,
referrer_kind: NodeModuleKind,
state: &State,
) -> Result<Option<(ModuleSpecifier, MediaType)>, AnyError> {
) -> Result<
Option<(ModuleSpecifier, MediaType)>,
ResolveNonGraphSpecifierTypesError,
> {
let npm = match state.maybe_npm.as_ref() {
Some(npm) => npm,
None => return Ok(None), // we only support non-graph types for npm packages
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"args": "check main.ts",
"output": "main.out"
}
6 changes: 6 additions & 0 deletions tests/specs/check/jsx_import_source_not_in_graph/deno.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"compilerOptions": {
"jsx": "react-jsx",
"jsxImportSource": "npm:preact"
}
}
1 change: 1 addition & 0 deletions tests/specs/check/jsx_import_source_not_in_graph/main.out
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Check file:///[WILDLINE]/main.ts
1 change: 1 addition & 0 deletions tests/specs/check/jsx_import_source_not_in_graph/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
console.log("Hello");

0 comments on commit e70341e

Please sign in to comment.