diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/tools/vendor/build.rs | 48 | ||||
-rw-r--r-- | cli/tools/vendor/import_map.rs | 19 |
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 { |