From 35220f0069931c6c4b9023c2d123f3b37f7e9c56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Tue, 23 Apr 2024 16:21:06 +0100 Subject: fix(workspace): provide workspace members as 'imports' in import map (#23492) This commit changes the workspace support to provide all workspace members to be available as imports based on their names and versions. Closes https://github.com/denoland/deno/issues/23343 --- cli/args/import_map.rs | 29 +++++++++++++++++++++++++++++ cli/args/mod.rs | 5 +++++ 2 files changed, 34 insertions(+) (limited to 'cli/args') diff --git a/cli/args/import_map.rs b/cli/args/import_map.rs index d06c4d385..767d0f770 100644 --- a/cli/args/import_map.rs +++ b/cli/args/import_map.rs @@ -96,3 +96,32 @@ fn print_import_map_diagnostics(diagnostics: &[ImportMapDiagnostic]) { ); } } + +pub fn enhance_import_map_value_with_workspace_members( + mut import_map_value: serde_json::Value, + workspace_members: &[deno_config::WorkspaceMemberConfig], +) -> serde_json::Value { + let mut imports = + if let Some(imports) = import_map_value.get("imports").as_ref() { + imports.as_object().unwrap().clone() + } else { + serde_json::Map::new() + }; + + for workspace_member in workspace_members { + let name = &workspace_member.package_name; + let version = &workspace_member.package_version; + // Don't override existings, explicit imports + if imports.contains_key(name) { + continue; + } + + imports.insert( + name.to_string(), + serde_json::Value::String(format!("jsr:{}@^{}", name, version)), + ); + } + + import_map_value["imports"] = serde_json::Value::Object(imports); + ::import_map::ext::expand_import_map_value(import_map_value) +} diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 60d9710de..6c84abac2 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -67,6 +67,7 @@ use std::path::PathBuf; use std::sync::Arc; use thiserror::Error; +use crate::args::import_map::enhance_import_map_value_with_workspace_members; use crate::file_fetcher::FileFetcher; use crate::util::fs::canonicalize_path_maybe_not_exists; use crate::version; @@ -975,6 +976,10 @@ impl CliOptions { base_import_map_config, children_configs, ); + let import_map = enhance_import_map_value_with_workspace_members( + import_map, + &workspace_config.members, + ); log::debug!( "Workspace config generated this import map {}", serde_json::to_string_pretty(&import_map).unwrap() -- cgit v1.2.3