From 7e56a0466fc9964ca5dd3533bb65c00cd1bac4dc Mon Sep 17 00:00:00 2001 From: Luca Casonato Date: Wed, 29 Nov 2023 14:59:30 +0100 Subject: [PATCH] fix: use correct import map in tar & upload (#21380) --- cli/tools/registry/mod.rs | 33 +++++++++++++++------------------ cli/util/import_map.rs | 10 +++++----- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/cli/tools/registry/mod.rs b/cli/tools/registry/mod.rs index 9f2e366105..733ea301fe 100644 --- a/cli/tools/registry/mod.rs +++ b/cli/tools/registry/mod.rs @@ -10,19 +10,18 @@ use base64::prelude::BASE64_STANDARD; use base64::Engine; use deno_config::ConfigFile; use deno_core::anyhow; -use deno_core::anyhow::anyhow; use deno_core::anyhow::bail; use deno_core::anyhow::Context; use deno_core::error::AnyError; use deno_core::serde_json; use deno_core::serde_json::json; -use deno_core::url::Url; use deno_runtime::colors; use deno_runtime::deno_fetch::reqwest; use http::header::AUTHORIZATION; use http::header::CONTENT_ENCODING; use hyper::body::Bytes; -use import_map::ImportMapWithDiagnostics; +use import_map::ImportMap; +use lsp_types::Url; use serde::de::DeserializeOwned; use serde::Serialize; use sha2::Digest; @@ -72,9 +71,8 @@ pub struct PublishingTask { async fn prepare_publish( initial_cwd: &Path, directory: PathBuf, + import_map: &ImportMap, ) -> Result { - // TODO: handle publishing without deno.json - let directory_path = initial_cwd.join(directory); // TODO: doesn't handle jsonc let deno_json_path = directory_path.join("deno.json"); @@ -98,17 +96,6 @@ async fn prepare_publish( bail!("Invalid package name, use '@/ format"); }; - // TODO: support `importMap` field in deno.json - assert!(deno_json.to_import_map_path().is_none()); - - let deno_json_url = Url::from_file_path(&deno_json_path) - .map_err(|_| anyhow!("deno.json path is not a valid file URL"))?; - let ImportMapWithDiagnostics { import_map, .. } = - import_map::parse_from_value( - &deno_json_url, - deno_json.to_import_map_value(), - )?; - let unfurler = ImportMapUnfurler::new(import_map); let tarball = tar::create_gzipped_tarball(directory_path, unfurler) @@ -478,6 +465,14 @@ pub async fn publish( }, }; + let import_map = cli_factory + .maybe_import_map() + .await? + .clone() + .unwrap_or_else(|| { + Arc::new(ImportMap::new(Url::parse("file:///dev/null").unwrap())) + }); + let initial_cwd = std::env::current_dir().with_context(|| "Failed getting cwd.")?; @@ -496,12 +491,14 @@ pub async fn publish( let members = &deno_json.json.workspaces; if members.is_empty() { - packages.push(prepare_publish(&initial_cwd, directory_path).await?); + packages + .push(prepare_publish(&initial_cwd, directory_path, &import_map).await?); } else { println!("Publishing a workspace..."); for member in members { let member_dir = directory_path.join(member); - packages.push(prepare_publish(&initial_cwd, member_dir).await?); + packages + .push(prepare_publish(&initial_cwd, member_dir, &import_map).await?); } } diff --git a/cli/util/import_map.rs b/cli/util/import_map.rs index e8fea1e033..ac5ff24a4a 100644 --- a/cli/util/import_map.rs +++ b/cli/util/import_map.rs @@ -8,12 +8,12 @@ use deno_graph::MediaType; use deno_graph::TypeScriptReference; use import_map::ImportMap; -pub struct ImportMapUnfurler { - import_map: ImportMap, +pub struct ImportMapUnfurler<'a> { + import_map: &'a ImportMap, } -impl ImportMapUnfurler { - pub fn new(import_map: ImportMap) -> Self { +impl<'a> ImportMapUnfurler<'a> { + pub fn new(import_map: &'a ImportMap) -> Self { Self { import_map } } @@ -158,7 +158,7 @@ mod tests { }); let ImportMapWithDiagnostics { import_map, .. } = import_map::parse_from_value(&deno_json_url, value).unwrap(); - let unfurler = ImportMapUnfurler::new(import_map); + let unfurler = ImportMapUnfurler::new(&import_map); // Unfurling TS file should apply changes. {