summaryrefslogtreecommitdiff
path: root/cli/args/import_map.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2024-04-23 16:21:06 +0100
committerGitHub <noreply@github.com>2024-04-23 17:21:06 +0200
commit35220f0069931c6c4b9023c2d123f3b37f7e9c56 (patch)
treed8efdc6a83a99f94dd8989c98ff62f78a0bc319e /cli/args/import_map.rs
parentb0d3b20f2319ad346fe70b1114f492f852689435 (diff)
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
Diffstat (limited to 'cli/args/import_map.rs')
-rw-r--r--cli/args/import_map.rs29
1 files changed, 29 insertions, 0 deletions
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)
+}