diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-01-25 16:51:04 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-25 16:51:04 -0500 |
commit | 34c14dbf995ab427a39642a478f183dd5a60005c (patch) | |
tree | 67704f2b57bd796dc8ea13ec2ae6166f92058643 /cli/args/import_map.rs | |
parent | c6c8c91a6e4b7a2b6eed02d3e2f5db25c124d9a0 (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.rs | 31 |
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> { |