mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
fix(check): ignore resolving jsxImportSource
when jsx is not used in graph (#26548)
This commit is contained in:
parent
4626b11d03
commit
e70341e65e
5 changed files with 51 additions and 7 deletions
|
@ -5,6 +5,7 @@ use crate::args::TypeCheckMode;
|
||||||
use crate::cache::FastInsecureHasher;
|
use crate::cache::FastInsecureHasher;
|
||||||
use crate::node;
|
use crate::node;
|
||||||
use crate::npm::CliNpmResolver;
|
use crate::npm::CliNpmResolver;
|
||||||
|
use crate::npm::ResolvePkgFolderFromDenoReqError;
|
||||||
use crate::util::checksum;
|
use crate::util::checksum;
|
||||||
use crate::util::path::mapped_specifier_for_tsc;
|
use crate::util::path::mapped_specifier_for_tsc;
|
||||||
|
|
||||||
|
@ -35,6 +36,7 @@ use deno_runtime::deno_node::NodeResolver;
|
||||||
use deno_semver::npm::NpmPackageReqReference;
|
use deno_semver::npm::NpmPackageReqReference;
|
||||||
use node_resolver::errors::NodeJsErrorCode;
|
use node_resolver::errors::NodeJsErrorCode;
|
||||||
use node_resolver::errors::NodeJsErrorCoded;
|
use node_resolver::errors::NodeJsErrorCoded;
|
||||||
|
use node_resolver::errors::ResolvePkgSubpathFromDenoModuleError;
|
||||||
use node_resolver::NodeModuleKind;
|
use node_resolver::NodeModuleKind;
|
||||||
use node_resolver::NodeResolution;
|
use node_resolver::NodeResolution;
|
||||||
use node_resolver::NodeResolutionMode;
|
use node_resolver::NodeResolutionMode;
|
||||||
|
@ -45,6 +47,7 @@ use std::fmt;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
use thiserror::Error;
|
||||||
|
|
||||||
mod diagnostics;
|
mod diagnostics;
|
||||||
|
|
||||||
|
@ -688,12 +691,30 @@ fn op_resolve_inner(
|
||||||
Some(ResolutionResolved { specifier, .. }) => {
|
Some(ResolutionResolved { specifier, .. }) => {
|
||||||
resolve_graph_specifier_types(specifier, &referrer, state)?
|
resolve_graph_specifier_types(specifier, &referrer, state)?
|
||||||
}
|
}
|
||||||
_ => resolve_non_graph_specifier_types(
|
_ => {
|
||||||
&specifier,
|
match resolve_non_graph_specifier_types(
|
||||||
&referrer,
|
&specifier,
|
||||||
referrer_kind,
|
&referrer,
|
||||||
state,
|
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 {
|
let result = match maybe_result {
|
||||||
Some((specifier, media_type)) => {
|
Some((specifier, media_type)) => {
|
||||||
|
@ -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(
|
fn resolve_non_graph_specifier_types(
|
||||||
raw_specifier: &str,
|
raw_specifier: &str,
|
||||||
referrer: &ModuleSpecifier,
|
referrer: &ModuleSpecifier,
|
||||||
referrer_kind: NodeModuleKind,
|
referrer_kind: NodeModuleKind,
|
||||||
state: &State,
|
state: &State,
|
||||||
) -> Result<Option<(ModuleSpecifier, MediaType)>, AnyError> {
|
) -> Result<
|
||||||
|
Option<(ModuleSpecifier, MediaType)>,
|
||||||
|
ResolveNonGraphSpecifierTypesError,
|
||||||
|
> {
|
||||||
let npm = match state.maybe_npm.as_ref() {
|
let npm = match state.maybe_npm.as_ref() {
|
||||||
Some(npm) => npm,
|
Some(npm) => npm,
|
||||||
None => return Ok(None), // we only support non-graph types for npm packages
|
None => return Ok(None), // we only support non-graph types for npm packages
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"args": "check main.ts",
|
||||||
|
"output": "main.out"
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
"jsxImportSource": "npm:preact"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Check file:///[WILDLINE]/main.ts
|
1
tests/specs/check/jsx_import_source_not_in_graph/main.ts
Normal file
1
tests/specs/check/jsx_import_source_not_in_graph/main.ts
Normal file
|
@ -0,0 +1 @@
|
||||||
|
console.log("Hello");
|
Loading…
Reference in a new issue