summaryrefslogtreecommitdiff
path: root/cli/tools/vendor/mod.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/mod.rs
parentb83dac3b14340d452ae9a83e5f4da0104407a220 (diff)
fix(vendor): do not panic vendoring with jsxImportSource and no jsx files (#19837)
Closes #19833
Diffstat (limited to 'cli/tools/vendor/mod.rs')
-rw-r--r--cli/tools/vendor/mod.rs57
1 files changed, 31 insertions, 26 deletions
diff --git a/cli/tools/vendor/mod.rs b/cli/tools/vendor/mod.rs
index 6a7096d68..49a984c87 100644
--- a/cli/tools/vendor/mod.rs
+++ b/cli/tools/vendor/mod.rs
@@ -9,6 +9,7 @@ use deno_ast::TextChange;
use deno_core::anyhow::bail;
use deno_core::anyhow::Context;
use deno_core::error::AnyError;
+use deno_core::futures::FutureExt;
use deno_core::resolve_url_or_path;
use deno_graph::GraphKind;
use log::warn;
@@ -19,7 +20,6 @@ use crate::args::Flags;
use crate::args::FmtOptionsConfig;
use crate::args::VendorFlags;
use crate::factory::CliFactory;
-use crate::graph_util::ModuleGraphBuilder;
use crate::tools::fmt::format_json;
use crate::util::fs::canonicalize_path;
use crate::util::fs::resolve_from_cwd;
@@ -48,25 +48,35 @@ pub async fn vendor(
validate_options(&mut cli_options, &output_dir)?;
let factory = CliFactory::from_cli_options(Arc::new(cli_options));
let cli_options = factory.cli_options();
- let graph = create_graph(
- factory.module_graph_builder().await?,
- &vendor_flags,
- cli_options.initial_cwd(),
- )
+ let entry_points =
+ resolve_entry_points(&vendor_flags, cli_options.initial_cwd())?;
+ let jsx_import_source = cli_options.to_maybe_jsx_import_source_config();
+ let module_graph_builder = factory.module_graph_builder().await?.clone();
+ let output = build::build(build::BuildInput {
+ entry_points,
+ build_graph: move |entry_points| {
+ async move {
+ module_graph_builder
+ .create_graph(GraphKind::All, entry_points)
+ .await
+ }
+ .boxed_local()
+ },
+ parsed_source_cache: factory.parsed_source_cache()?,
+ output_dir: &output_dir,
+ maybe_original_import_map: factory.maybe_import_map().await?.as_deref(),
+ maybe_lockfile: factory.maybe_lockfile().clone(),
+ maybe_jsx_import_source: jsx_import_source.as_ref(),
+ resolver: factory.resolver().await?.as_graph_resolver(),
+ environment: &build::RealVendorEnvironment,
+ })
.await?;
+
+ let vendored_count = output.vendored_count;
+ let graph = output.graph;
let npm_package_count = graph.npm_packages.len();
let try_add_node_modules_dir = npm_package_count > 0
&& cli_options.node_modules_dir_enablement().unwrap_or(true);
- let jsx_import_source = cli_options.to_maybe_jsx_import_source_config();
- let vendored_count = build::build(
- graph,
- factory.parsed_source_cache()?,
- &output_dir,
- factory.maybe_import_map().await?.as_deref(),
- factory.maybe_lockfile().clone(),
- jsx_import_source.as_ref(),
- &build::RealVendorEnvironment,
- )?;
log::info!(
concat!("Vendored {} {} into {} directory.",),
@@ -363,20 +373,15 @@ fn is_dir_empty(dir_path: &Path) -> Result<bool, AnyError> {
}
}
-async fn create_graph(
- module_graph_builder: &ModuleGraphBuilder,
+fn resolve_entry_points(
flags: &VendorFlags,
initial_cwd: &Path,
-) -> Result<deno_graph::ModuleGraph, AnyError> {
- let entry_points = flags
+) -> Result<Vec<ModuleSpecifier>, AnyError> {
+ flags
.specifiers
.iter()
- .map(|p| resolve_url_or_path(p, initial_cwd))
- .collect::<Result<Vec<_>, _>>()?;
-
- module_graph_builder
- .create_graph(GraphKind::All, entry_points)
- .await
+ .map(|p| resolve_url_or_path(p, initial_cwd).map_err(|e| e.into()))
+ .collect::<Result<Vec<_>, _>>()
}
#[cfg(test)]