summaryrefslogtreecommitdiff
path: root/cli/args/import_map.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-01-25 16:51:04 -0500
committerGitHub <noreply@github.com>2023-01-25 16:51:04 -0500
commit34c14dbf995ab427a39642a478f183dd5a60005c (patch)
tree67704f2b57bd796dc8ea13ec2ae6166f92058643 /cli/args/import_map.rs
parentc6c8c91a6e4b7a2b6eed02d3e2f5db25c124d9a0 (diff)
fix: support import map specified as data uri (#17531)
Diffstat (limited to 'cli/args/import_map.rs')
-rw-r--r--cli/args/import_map.rs31
1 files changed, 30 insertions, 1 deletions
diff --git a/cli/args/import_map.rs b/cli/args/import_map.rs
index 200336c43..bac31c080 100644
--- a/cli/args/import_map.rs
+++ b/cli/args/import_map.rs
@@ -3,11 +3,40 @@
use deno_core::error::AnyError;
use deno_core::serde_json;
use deno_core::url::Url;
+use deno_runtime::permissions::PermissionsContainer;
use import_map::ImportMap;
use import_map::ImportMapDiagnostic;
use log::warn;
-pub fn import_map_from_value(
+use super::ConfigFile;
+use crate::file_fetcher::get_source_from_data_url;
+use crate::file_fetcher::FileFetcher;
+
+pub async fn resolve_import_map_from_specifier(
+ specifier: &Url,
+ maybe_config_file: Option<&ConfigFile>,
+ file_fetcher: &FileFetcher,
+) -> Result<ImportMap, AnyError> {
+ let value: serde_json::Value = if specifier.scheme() == "data" {
+ serde_json::from_str(&get_source_from_data_url(specifier)?.0)?
+ } else {
+ let import_map_config = maybe_config_file
+ .as_ref()
+ .filter(|c| c.specifier == *specifier);
+ match import_map_config {
+ Some(config) => config.to_import_map_value(),
+ None => {
+ let file = file_fetcher
+ .fetch(specifier, PermissionsContainer::allow_all())
+ .await?;
+ serde_json::from_str(&file.source)?
+ }
+ }
+ };
+ import_map_from_value(specifier, value)
+}
+
+fn import_map_from_value(
specifier: &Url,
json_value: serde_json::Value,
) -> Result<ImportMap, AnyError> {