summaryrefslogtreecommitdiff
path: root/cli/tools/vendor/build.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2022-08-03 21:23:45 -0400
committerGitHub <noreply@github.com>2022-08-03 21:23:45 -0400
commit8b03c1e6cce4ecbd52ff389a2f092cfad138879d (patch)
tree150d290cd1ba5522b2d6c194a1689c81dfe02397 /cli/tools/vendor/build.rs
parent864af52a1bf242bdf59790ba28a08042aab8c66b (diff)
fix(vendor): error on dynamic imports that fail to load instead of panicking (#15391)
Diffstat (limited to 'cli/tools/vendor/build.rs')
-rw-r--r--cli/tools/vendor/build.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/cli/tools/vendor/build.rs b/cli/tools/vendor/build.rs
index 341ef8684..f56204c77 100644
--- a/cli/tools/vendor/build.rs
+++ b/cli/tools/vendor/build.rs
@@ -68,6 +68,14 @@ pub fn build(
graph.lock()?;
graph.valid()?;
+ let graph_errors = graph.errors();
+ if !graph_errors.is_empty() {
+ for err in &graph_errors {
+ log::error!("{}", err);
+ }
+ bail!("failed vendoring");
+ }
+
// figure out how to map remote modules to local
let all_modules = graph.modules();
let remote_modules = all_modules
@@ -1003,6 +1011,26 @@ mod test {
);
}
+ #[tokio::test]
+ async fn vendor_file_fails_loading_dynamic_import() {
+ let mut builder = VendorTestBuilder::with_default_setup();
+ let err = builder
+ .with_loader(|loader| {
+ loader.add("/mod.ts", "import 'https://localhost/mod.ts';");
+ loader.add("https://localhost/mod.ts", "await import('./test.ts');");
+ loader.add_failure(
+ "https://localhost/test.ts",
+ "500 Internal Server Error",
+ );
+ })
+ .build()
+ .await
+ .err()
+ .unwrap();
+
+ assert_eq!(err.to_string(), "failed vendoring");
+ }
+
fn to_file_vec(items: &[(&str, &str)]) -> Vec<(String, String)> {
items
.iter()