summaryrefslogtreecommitdiff
path: root/cli/tools/vendor/import_map.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-07-14 18:10:42 -0400
committerGitHub <noreply@github.com>2023-07-14 18:10:42 -0400
commit306b51d7728a6e28461171d3332a0b3aa8545a6e (patch)
tree6a5b78c9fcd219ca9c236e5e22cdaba907158146 /cli/tools/vendor/import_map.rs
parentb83dac3b14340d452ae9a83e5f4da0104407a220 (diff)
fix(vendor): do not panic vendoring with jsxImportSource and no jsx files (#19837)
Closes #19833
Diffstat (limited to 'cli/tools/vendor/import_map.rs')
-rw-r--r--cli/tools/vendor/import_map.rs39
1 files changed, 25 insertions, 14 deletions
diff --git a/cli/tools/vendor/import_map.rs b/cli/tools/vendor/import_map.rs
index a23dde805..36a70d4e0 100644
--- a/cli/tools/vendor/import_map.rs
+++ b/cli/tools/vendor/import_map.rs
@@ -177,15 +177,30 @@ impl<'a> ImportsBuilder<'a> {
}
}
+pub struct BuildImportMapInput<'a> {
+ pub base_dir: &'a ModuleSpecifier,
+ pub modules: &'a [&'a Module],
+ pub graph: &'a ModuleGraph,
+ pub mappings: &'a Mappings,
+ pub original_import_map: Option<&'a ImportMap>,
+ pub jsx_import_source: Option<&'a JsxImportSourceConfig>,
+ pub resolver: &'a dyn deno_graph::source::Resolver,
+ pub parsed_source_cache: &'a ParsedSourceCache,
+}
+
pub fn build_import_map(
- base_dir: &ModuleSpecifier,
- graph: &ModuleGraph,
- modules: &[&Module],
- mappings: &Mappings,
- original_import_map: Option<&ImportMap>,
- jsx_import_source: Option<&JsxImportSourceConfig>,
- parsed_source_cache: &ParsedSourceCache,
+ input: BuildImportMapInput<'_>,
) -> Result<String, AnyError> {
+ let BuildImportMapInput {
+ base_dir,
+ modules,
+ graph,
+ mappings,
+ original_import_map,
+ jsx_import_source,
+ resolver,
+ parsed_source_cache,
+ } = input;
let mut builder = ImportMapBuilder::new(base_dir, mappings);
visit_modules(graph, modules, mappings, &mut builder, parsed_source_cache)?;
@@ -196,14 +211,10 @@ pub fn build_import_map(
}
// add the jsx import source to the destination import map, if mapped in the original import map
- if let (Some(import_map), Some(jsx_import_source)) =
- (original_import_map, jsx_import_source)
- {
- if let Some(default_specifier) = &jsx_import_source.default_specifier {
- let specifier_text =
- format!("{}/{}", default_specifier, jsx_import_source.module);
+ if let Some(jsx_import_source) = jsx_import_source {
+ if let Some(specifier_text) = jsx_import_source.maybe_specifier_text() {
if let Ok(resolved_url) =
- import_map.resolve(&specifier_text, import_map.base_url())
+ resolver.resolve(&specifier_text, &jsx_import_source.base_url)
{
builder.imports.add(specifier_text, &resolved_url);
}