summaryrefslogtreecommitdiff
path: root/cli/tools
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tools')
-rw-r--r--cli/tools/check.rs3
-rw-r--r--cli/tools/compile.rs2
-rw-r--r--cli/tools/info.rs17
-rw-r--r--cli/tools/registry/diagnostics.rs14
-rw-r--r--cli/tools/registry/mod.rs6
-rw-r--r--cli/tools/registry/pm/cache_deps.rs3
-rw-r--r--cli/tools/repl/mod.rs6
-rw-r--r--cli/tools/run/mod.rs12
-rw-r--r--cli/tools/serve.rs17
9 files changed, 44 insertions, 36 deletions
diff --git a/cli/tools/check.rs b/cli/tools/check.rs
index c22afbb9a..7edb392d4 100644
--- a/cli/tools/check.rs
+++ b/cli/tools/check.rs
@@ -51,6 +51,7 @@ pub async fn check(
let specifiers_for_typecheck = if check_flags.doc || check_flags.doc_only {
let file_fetcher = factory.file_fetcher()?;
+ let root_permissions = factory.root_permissions_container()?;
let mut specifiers_for_typecheck = if check_flags.doc {
specifiers.clone()
@@ -59,7 +60,7 @@ pub async fn check(
};
for s in specifiers {
- let file = file_fetcher.fetch_bypass_permissions(&s).await?;
+ let file = file_fetcher.fetch(&s, root_permissions).await?;
let snippet_files = extract::extract_snippet_files(file)?;
for snippet_file in snippet_files {
specifiers_for_typecheck.push(snippet_file.specifier.clone());
diff --git a/cli/tools/compile.rs b/cli/tools/compile.rs
index b9620cfde..c1f98bc08 100644
--- a/cli/tools/compile.rs
+++ b/cli/tools/compile.rs
@@ -135,7 +135,7 @@ pub async fn compile(
file,
eszip,
root_dir_url,
- &module_specifier,
+ module_specifier,
&compile_flags,
cli_options,
)
diff --git a/cli/tools/info.rs b/cli/tools/info.rs
index d78b83cbe..174785631 100644
--- a/cli/tools/info.rs
+++ b/cli/tools/info.rs
@@ -644,8 +644,21 @@ impl<'a> GraphDisplayContext<'a> {
ModuleError::InvalidTypeAssertion { .. } => {
self.build_error_msg(specifier, "(invalid import attribute)")
}
- ModuleError::LoadingErr(_, _, _) => {
- self.build_error_msg(specifier, "(loading error)")
+ ModuleError::LoadingErr(_, _, err) => {
+ use deno_graph::ModuleLoadError::*;
+ let message = match err {
+ HttpsChecksumIntegrity(_) => "(checksum integrity error)",
+ Decode(_) => "(loading decode error)",
+ Loader(err) => match deno_core::error::get_custom_error_class(err) {
+ Some("NotCapable") => "(not capable, requires --allow-import)",
+ _ => "(loading error)",
+ },
+ Jsr(_) => "(loading error)",
+ NodeUnknownBuiltinModule(_) => "(unknown node built-in error)",
+ Npm(_) => "(npm loading error)",
+ TooManyRedirects => "(too many redirects error)",
+ };
+ self.build_error_msg(specifier, message.as_ref())
}
ModuleError::ParseErr(_, _) => {
self.build_error_msg(specifier, "(parsing error)")
diff --git a/cli/tools/registry/diagnostics.rs b/cli/tools/registry/diagnostics.rs
index c53a39683..733a78dda 100644
--- a/cli/tools/registry/diagnostics.rs
+++ b/cli/tools/registry/diagnostics.rs
@@ -3,7 +3,6 @@
use std::borrow::Cow;
use std::path::PathBuf;
use std::sync::Arc;
-use std::sync::Mutex;
use deno_ast::diagnostics::Diagnostic;
use deno_ast::diagnostics::DiagnosticLevel;
@@ -21,6 +20,7 @@ use deno_ast::SourceRanged;
use deno_ast::SourceTextInfo;
use deno_core::anyhow::anyhow;
use deno_core::error::AnyError;
+use deno_core::parking_lot::Mutex;
use deno_core::url::Url;
use deno_graph::FastCheckDiagnostic;
use deno_semver::Version;
@@ -36,7 +36,7 @@ impl PublishDiagnosticsCollector {
pub fn print_and_error(&self) -> Result<(), AnyError> {
let mut errors = 0;
let mut has_slow_types_errors = false;
- let mut diagnostics = self.diagnostics.lock().unwrap().take();
+ let mut diagnostics = self.diagnostics.lock().take();
diagnostics.sort_by_cached_key(|d| d.sorting_key());
@@ -75,8 +75,16 @@ impl PublishDiagnosticsCollector {
}
}
+ pub fn has_error(&self) -> bool {
+ self
+ .diagnostics
+ .lock()
+ .iter()
+ .any(|d| matches!(d.level(), DiagnosticLevel::Error))
+ }
+
pub fn push(&self, diagnostic: PublishDiagnostic) {
- self.diagnostics.lock().unwrap().push(diagnostic);
+ self.diagnostics.lock().push(diagnostic);
}
}
diff --git a/cli/tools/registry/mod.rs b/cli/tools/registry/mod.rs
index fbdcd9e77..941514b04 100644
--- a/cli/tools/registry/mod.rs
+++ b/cli/tools/registry/mod.rs
@@ -341,13 +341,11 @@ impl PublishPreparer {
bail!("Exiting due to DENO_INTERNAL_FAST_CHECK_OVERWRITE")
} else {
log::info!("Checking for slow types in the public API...");
- let mut any_pkg_had_diagnostics = false;
for package in package_configs {
let export_urls = package.config_file.resolve_export_value_urls()?;
let diagnostics =
collect_no_slow_type_diagnostics(&graph, &export_urls);
if !diagnostics.is_empty() {
- any_pkg_had_diagnostics = true;
for diagnostic in diagnostics {
diagnostics_collector
.push(PublishDiagnostic::FastCheck(diagnostic));
@@ -355,7 +353,9 @@ impl PublishPreparer {
}
}
- if any_pkg_had_diagnostics {
+ // skip type checking the slow type graph if there are any errors because
+ // errors like remote modules existing will cause type checking to crash
+ if diagnostics_collector.has_error() {
Ok(Arc::new(graph))
} else {
// fast check passed, type check the output as a temporary measure
diff --git a/cli/tools/registry/pm/cache_deps.rs b/cli/tools/registry/pm/cache_deps.rs
index a59817055..7d1773b34 100644
--- a/cli/tools/registry/pm/cache_deps.rs
+++ b/cli/tools/registry/pm/cache_deps.rs
@@ -16,6 +16,7 @@ pub async fn cache_top_level_deps(
) -> Result<(), AnyError> {
let npm_resolver = factory.npm_resolver().await?;
let cli_options = factory.cli_options()?;
+ let root_permissions = factory.root_permissions_container()?;
if let Some(npm_resolver) = npm_resolver.as_managed() {
if !npm_resolver.ensure_top_level_package_json_install().await? {
if let Some(lockfile) = cli_options.maybe_lockfile() {
@@ -106,7 +107,7 @@ pub async fn cache_top_level_deps(
&roots,
false,
deno_config::deno_json::TsTypeLib::DenoWorker,
- crate::file_fetcher::FetchPermissionsOption::AllowAll,
+ root_permissions.clone(),
None,
)
.await?;
diff --git a/cli/tools/repl/mod.rs b/cli/tools/repl/mod.rs
index 24bc8e30a..a30304687 100644
--- a/cli/tools/repl/mod.rs
+++ b/cli/tools/repl/mod.rs
@@ -162,7 +162,7 @@ pub async fn run(
let factory = CliFactory::from_flags(flags);
let cli_options = factory.cli_options()?;
let main_module = cli_options.resolve_main_module()?;
- let permissions = factory.create_permissions_container()?;
+ let permissions = factory.root_permissions_container()?;
let npm_resolver = factory.npm_resolver().await?.clone();
let resolver = factory.resolver().await?.clone();
let file_fetcher = factory.file_fetcher()?;
@@ -177,7 +177,7 @@ pub async fn run(
.create_custom_worker(
WorkerExecutionMode::Repl,
main_module.clone(),
- permissions,
+ permissions.clone(),
vec![crate::ops::testing::deno_test::init_ops(test_event_sender)],
Default::default(),
)
@@ -189,7 +189,7 @@ pub async fn run(
npm_resolver,
resolver,
worker,
- main_module,
+ main_module.clone(),
test_event_receiver,
)
.await?;
diff --git a/cli/tools/run/mod.rs b/cli/tools/run/mod.rs
index 200644490..152e2650b 100644
--- a/cli/tools/run/mod.rs
+++ b/cli/tools/run/mod.rs
@@ -60,10 +60,9 @@ pub async fn run_script(
maybe_npm_install(&factory).await?;
- let permissions = factory.create_permissions_container()?;
let worker_factory = factory.create_cli_main_worker_factory().await?;
let mut worker = worker_factory
- .create_main_worker(mode, main_module, permissions)
+ .create_main_worker(mode, main_module.clone())
.await?;
let exit_code = worker.run().await?;
@@ -79,7 +78,6 @@ pub async fn run_from_stdin(flags: Arc<Flags>) -> Result<i32, AnyError> {
let file_fetcher = factory.file_fetcher()?;
let worker_factory = factory.create_cli_main_worker_factory().await?;
- let permissions = factory.create_permissions_container()?;
let mut source = Vec::new();
std::io::stdin().read_to_end(&mut source)?;
// Save a fake file into file fetcher cache
@@ -91,7 +89,7 @@ pub async fn run_from_stdin(flags: Arc<Flags>) -> Result<i32, AnyError> {
});
let mut worker = worker_factory
- .create_main_worker(WorkerExecutionMode::Run, main_module, permissions)
+ .create_main_worker(WorkerExecutionMode::Run, main_module.clone())
.await?;
let exit_code = worker.run().await?;
Ok(exit_code)
@@ -125,11 +123,10 @@ async fn run_with_watch(
let _ = watcher_communicator.watch_paths(cli_options.watch_paths());
- let permissions = factory.create_permissions_container()?;
let mut worker = factory
.create_cli_main_worker_factory()
.await?
- .create_main_worker(mode, main_module, permissions)
+ .create_main_worker(mode, main_module.clone())
.await?;
if watch_flags.hmr {
@@ -173,10 +170,9 @@ pub async fn eval_command(
source: source_code.into_bytes().into(),
});
- let permissions = factory.create_permissions_container()?;
let worker_factory = factory.create_cli_main_worker_factory().await?;
let mut worker = worker_factory
- .create_main_worker(WorkerExecutionMode::Eval, main_module, permissions)
+ .create_main_worker(WorkerExecutionMode::Eval, main_module.clone())
.await?;
let exit_code = worker.run().await?;
Ok(exit_code)
diff --git a/cli/tools/serve.rs b/cli/tools/serve.rs
index 2f553cf1e..4ce1cad6f 100644
--- a/cli/tools/serve.rs
+++ b/cli/tools/serve.rs
@@ -5,7 +5,6 @@ use std::sync::Arc;
use deno_core::error::AnyError;
use deno_core::futures::TryFutureExt;
use deno_core::ModuleSpecifier;
-use deno_runtime::deno_permissions::PermissionsContainer;
use super::run::check_permission_before_script;
use super::run::maybe_npm_install;
@@ -44,13 +43,11 @@ pub async fn serve(
maybe_npm_install(&factory).await?;
- let permissions = factory.create_permissions_container()?;
let worker_factory = factory.create_cli_main_worker_factory().await?;
do_serve(
worker_factory,
- main_module,
- permissions,
+ main_module.clone(),
serve_flags.worker_count,
false,
)
@@ -60,7 +57,6 @@ pub async fn serve(
async fn do_serve(
worker_factory: CliMainWorkerFactory,
main_module: ModuleSpecifier,
- permissions: PermissionsContainer,
worker_count: Option<usize>,
hmr: bool,
) -> Result<i32, AnyError> {
@@ -71,7 +67,6 @@ async fn do_serve(
worker_count,
},
main_module.clone(),
- permissions.clone(),
)
.await?;
let worker_count = match worker_count {
@@ -87,15 +82,13 @@ async fn do_serve(
for i in 0..extra_workers {
let worker_factory = worker_factory.clone();
let main_module = main_module.clone();
- let permissions = permissions.clone();
let (tx, rx) = tokio::sync::oneshot::channel();
channels.push(rx);
std::thread::Builder::new()
.name(format!("serve-worker-{i}"))
.spawn(move || {
deno_runtime::tokio_util::create_and_run_current_thread(async move {
- let result =
- run_worker(i, worker_factory, main_module, permissions, hmr).await;
+ let result = run_worker(i, worker_factory, main_module, hmr).await;
let _ = tx.send(result);
});
})?;
@@ -124,7 +117,6 @@ async fn run_worker(
worker_count: usize,
worker_factory: CliMainWorkerFactory,
main_module: ModuleSpecifier,
- permissions: PermissionsContainer,
hmr: bool,
) -> Result<i32, AnyError> {
let mut worker = worker_factory
@@ -134,7 +126,6 @@ async fn run_worker(
worker_count: Some(worker_count),
},
main_module,
- permissions,
)
.await?;
if hmr {
@@ -171,11 +162,9 @@ async fn serve_with_watch(
maybe_npm_install(&factory).await?;
let _ = watcher_communicator.watch_paths(cli_options.watch_paths());
-
- let permissions = factory.create_permissions_container()?;
let worker_factory = factory.create_cli_main_worker_factory().await?;
- do_serve(worker_factory, main_module, permissions, worker_count, hmr)
+ do_serve(worker_factory, main_module.clone(), worker_count, hmr)
.await?;
Ok(())