summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/tools/vendor/build.rs48
-rw-r--r--cli/tools/vendor/import_map.rs19
2 files changed, 58 insertions, 9 deletions
diff --git a/cli/tools/vendor/build.rs b/cli/tools/vendor/build.rs
index f9df8f078..11a1fb50e 100644
--- a/cli/tools/vendor/build.rs
+++ b/cli/tools/vendor/build.rs
@@ -379,6 +379,54 @@ mod test {
}
#[tokio::test]
+ async fn remote_redirect_entrypoint() {
+ let mut builder = VendorTestBuilder::with_default_setup();
+ let output = builder
+ .with_loader(|loader| {
+ loader
+ .add(
+ "/mod.ts",
+ concat!(
+ "import * as test from 'https://x.nest.land/Yenv@1.0.0/mod.ts';\n",
+ "console.log(test)",
+ ),
+ )
+ .add_redirect("https://x.nest.land/Yenv@1.0.0/mod.ts", "https://arweave.net/VFtWNW3QZ-7__v7c7kck22eFI24OuK1DFzyQHKoZ9AE/mod.ts")
+ .add(
+ "https://arweave.net/VFtWNW3QZ-7__v7c7kck22eFI24OuK1DFzyQHKoZ9AE/mod.ts",
+ "export * from './src/mod.ts'",
+ )
+ .add(
+ "https://arweave.net/VFtWNW3QZ-7__v7c7kck22eFI24OuK1DFzyQHKoZ9AE/src/mod.ts",
+ "export class Test {}",
+ );
+ })
+ .build()
+ .await
+ .unwrap();
+
+ assert_eq!(
+ output.import_map,
+ Some(json!({
+ "imports": {
+ "https://x.nest.land/Yenv@1.0.0/mod.ts": "./arweave.net/VFtWNW3QZ-7__v7c7kck22eFI24OuK1DFzyQHKoZ9AE/mod.ts",
+ "https://arweave.net/": "./arweave.net/"
+ },
+ }))
+ );
+ assert_eq!(
+ output.files,
+ to_file_vec(&[
+ ("/vendor/arweave.net/VFtWNW3QZ-7__v7c7kck22eFI24OuK1DFzyQHKoZ9AE/mod.ts", "export * from './src/mod.ts'"),
+ (
+ "/vendor/arweave.net/VFtWNW3QZ-7__v7c7kck22eFI24OuK1DFzyQHKoZ9AE/src/mod.ts",
+ "export class Test {}",
+ ),
+ ]),
+ );
+ }
+
+ #[tokio::test]
async fn same_target_filename_specifiers() {
let mut builder = VendorTestBuilder::with_default_setup();
let output = builder
diff --git a/cli/tools/vendor/import_map.rs b/cli/tools/vendor/import_map.rs
index 916eb55c5..562ae0216 100644
--- a/cli/tools/vendor/import_map.rs
+++ b/cli/tools/vendor/import_map.rs
@@ -326,15 +326,16 @@ fn handle_remote_dep_specifier(
) {
if is_remote_specifier_text(text) {
let base_specifier = mappings.base_specifier(specifier);
- if !text.starts_with(base_specifier.as_str()) {
- panic!("Expected {text} to start with {base_specifier}");
- }
-
- let sub_path = &text[base_specifier.as_str().len()..];
- let relative_text =
- mappings.relative_specifier_text(base_specifier, specifier);
- let expected_sub_path = relative_text.trim_start_matches("./");
- if expected_sub_path != sub_path {
+ if text.starts_with(base_specifier.as_str()) {
+ let sub_path = &text[base_specifier.as_str().len()..];
+ let relative_text =
+ mappings.relative_specifier_text(base_specifier, specifier);
+ let expected_sub_path = relative_text.trim_start_matches("./");
+ if expected_sub_path != sub_path {
+ import_map.imports.add(text.to_string(), specifier);
+ }
+ } else {
+ // it's probably a redirect. Add it explicitly to the import map
import_map.imports.add(text.to_string(), specifier);
}
} else {