diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2024-04-23 16:21:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-23 17:21:06 +0200 |
commit | 35220f0069931c6c4b9023c2d123f3b37f7e9c56 (patch) | |
tree | d8efdc6a83a99f94dd8989c98ff62f78a0bc319e /cli/args/import_map.rs | |
parent | b0d3b20f2319ad346fe70b1114f492f852689435 (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.rs | 29 |
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) +} |