mirror of
https://github.com/denoland/deno.git
synced 2024-11-26 16:09:27 -05:00
fix(cli): represent bare imports as module graph error slots (#10804)
Fixes #10795
This commit is contained in:
parent
595700c993
commit
6dd7a7ecd9
7 changed files with 41 additions and 26 deletions
|
@ -38,6 +38,7 @@ use deno_core::serde::Serialize;
|
||||||
use deno_core::serde::Serializer;
|
use deno_core::serde::Serializer;
|
||||||
use deno_core::serde_json::json;
|
use deno_core::serde_json::json;
|
||||||
use deno_core::serde_json::Value;
|
use deno_core::serde_json::Value;
|
||||||
|
use deno_core::url::Url;
|
||||||
use deno_core::ModuleResolutionError;
|
use deno_core::ModuleResolutionError;
|
||||||
use deno_core::ModuleSource;
|
use deno_core::ModuleSource;
|
||||||
use deno_core::ModuleSpecifier;
|
use deno_core::ModuleSpecifier;
|
||||||
|
@ -398,9 +399,13 @@ impl Module {
|
||||||
Ok(specifier) => Some(specifier),
|
Ok(specifier) => Some(specifier),
|
||||||
Err(any_error) => {
|
Err(any_error) => {
|
||||||
match any_error.downcast_ref::<ModuleResolutionError>() {
|
match any_error.downcast_ref::<ModuleResolutionError>() {
|
||||||
Some(ModuleResolutionError::ImportPrefixMissing(..)) => None,
|
Some(ModuleResolutionError::ImportPrefixMissing(..)) => {
|
||||||
|
Some(Url::parse(&format!("bare:{}", &desc.specifier)).unwrap())
|
||||||
|
}
|
||||||
_ => match any_error.downcast_ref::<ImportMapError>() {
|
_ => match any_error.downcast_ref::<ImportMapError>() {
|
||||||
Some(ImportMapError::UnmappedBareSpecifier(..)) => None,
|
Some(ImportMapError::UnmappedBareSpecifier(..)) => Some(
|
||||||
|
Url::parse(&format!("bare:{}", &desc.specifier)).unwrap(),
|
||||||
|
),
|
||||||
_ => {
|
_ => {
|
||||||
return Err(any_error);
|
return Err(any_error);
|
||||||
}
|
}
|
||||||
|
@ -1908,19 +1913,28 @@ impl GraphBuilder {
|
||||||
}
|
}
|
||||||
for (_, dep) in module.dependencies.iter() {
|
for (_, dep) in module.dependencies.iter() {
|
||||||
let maybe_referrer = Some(dep.location.clone());
|
let maybe_referrer = Some(dep.location.clone());
|
||||||
if let Some(specifier) = dep.maybe_code.as_ref() {
|
for maybe_specifier in &[dep.maybe_code.as_ref(), dep.maybe_type.as_ref()]
|
||||||
|
{
|
||||||
|
if let Some(&dep_specifier) = maybe_specifier.as_ref() {
|
||||||
|
if dep_specifier.scheme() == "bare" {
|
||||||
|
self.graph.modules.insert(
|
||||||
|
dep_specifier.clone(),
|
||||||
|
ModuleSlot::Err(Arc::new(
|
||||||
|
ModuleResolutionError::ImportPrefixMissing(
|
||||||
|
dep_specifier.path().to_string(),
|
||||||
|
Some(specifier.to_string()),
|
||||||
|
)
|
||||||
|
.into(),
|
||||||
|
)),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
self.fetch(
|
self.fetch(
|
||||||
specifier,
|
dep_specifier,
|
||||||
&maybe_referrer,
|
&maybe_referrer,
|
||||||
is_root_dynamic || dep.is_dynamic,
|
is_root_dynamic || dep.is_dynamic,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if let Some(specifier) = dep.maybe_type.as_ref() {
|
}
|
||||||
self.fetch(
|
|
||||||
specifier,
|
|
||||||
&maybe_referrer,
|
|
||||||
is_root_dynamic || dep.is_dynamic,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Some((_, specifier)) = module.maybe_types.as_ref() {
|
if let Some((_, specifier)) = module.maybe_types.as_ref() {
|
||||||
|
|
1
cli/tests/095_cache_with_bare_import.ts.out
Normal file
1
cli/tests/095_cache_with_bare_import.ts.out
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[WILDCARD]error: Relative import path "foo" not prefixed with / or ./ or ../ from "file:///[WILDCARD]/095_cache_with_bare_import.ts"
|
|
@ -1,8 +0,0 @@
|
||||||
[WILDCARD]error: Unable to output bundle during Graph::bundle().
|
|
||||||
|
|
||||||
Caused by:
|
|
||||||
0: load_transformed failed
|
|
||||||
1: failed to analyze module
|
|
||||||
2: failed to resolve foo from <file:///[WILDCARD]/error_027_bare_import_error.ts>
|
|
||||||
3: The graph is missing a dependency.
|
|
||||||
Specifier: foo from file:///[WILDCARD]/error_027_bare_import_error.ts
|
|
1
cli/tests/error_027_bundle_with_bare_import.ts
Normal file
1
cli/tests/error_027_bundle_with_bare_import.ts
Normal file
|
@ -0,0 +1 @@
|
||||||
|
import "foo";
|
1
cli/tests/error_027_bundle_with_bare_import.ts.out
Normal file
1
cli/tests/error_027_bundle_with_bare_import.ts.out
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[WILDCARD]error: Relative import path "foo" not prefixed with / or ./ or ../ from "file:///[WILDCARD]/error_027_bundle_with_bare_import.ts"
|
|
@ -3139,6 +3139,12 @@ console.log("finish");
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
itest!(_095_cache_with_bare_import {
|
||||||
|
args: "cache 095_cache_with_bare_import.ts",
|
||||||
|
output: "095_cache_with_bare_import.ts.out",
|
||||||
|
exit_code: 1,
|
||||||
|
});
|
||||||
|
|
||||||
itest!(dynamic_import_permissions_remote_remote {
|
itest!(dynamic_import_permissions_remote_remote {
|
||||||
args: "run --quiet --reload --allow-net=localhost:4545 dynamic_import/permissions_remote_remote.ts",
|
args: "run --quiet --reload --allow-net=localhost:4545 dynamic_import/permissions_remote_remote.ts",
|
||||||
output: "dynamic_import/permissions_remote_remote.ts.out",
|
output: "dynamic_import/permissions_remote_remote.ts.out",
|
||||||
|
@ -3481,9 +3487,9 @@ console.log("finish");
|
||||||
http_server: true,
|
http_server: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(error_027_bare_import_error {
|
itest!(error_027_bundle_with_bare_import {
|
||||||
args: "bundle error_027_bare_import_error.ts",
|
args: "bundle error_027_bundle_with_bare_import.ts",
|
||||||
output: "error_027_bare_import_error.ts.out",
|
output: "error_027_bundle_with_bare_import.ts.out",
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue