diff options
| author | David Sherret <dsherret@users.noreply.github.com> | 2023-07-05 12:43:22 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-05 12:43:22 -0400 |
| commit | 2e7bcb422d593248cfb654ee1b7ffd341c83353c (patch) | |
| tree | 24665df578567a724c2e92e9b084fdacde3823e7 /cli/tools/vendor/build.rs | |
| parent | cd2525d4cff4e18b1e3e7d29458079942ba2b6c5 (diff) | |
fix(vendor): support import mapped jsxImportSource (#19724)
Closes #16108
Diffstat (limited to 'cli/tools/vendor/build.rs')
| -rw-r--r-- | cli/tools/vendor/build.rs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/cli/tools/vendor/build.rs b/cli/tools/vendor/build.rs index 11a1fb50e..5cd50836f 100644 --- a/cli/tools/vendor/build.rs +++ b/cli/tools/vendor/build.rs @@ -16,6 +16,7 @@ use deno_graph::ModuleGraph; use import_map::ImportMap; use import_map::SpecifierMap; +use crate::args::JsxImportSourceConfig; use crate::args::Lockfile; use crate::cache::ParsedSourceCache; use crate::graph_util; @@ -63,6 +64,7 @@ pub fn build( output_dir: &Path, original_import_map: Option<&ImportMap>, maybe_lockfile: Option<Arc<Mutex<Lockfile>>>, + jsx_import_source: Option<&JsxImportSourceConfig>, environment: &impl VendorEnvironment, ) -> Result<usize, AnyError> { assert!(output_dir.is_absolute()); @@ -134,6 +136,7 @@ pub fn build( &all_modules, &mappings, original_import_map, + jsx_import_source, parsed_source_cache, )?; environment.write_file(&import_map_path, &import_map_text)?; @@ -218,6 +221,7 @@ fn build_proxy_module_source( #[cfg(test)] mod test { + use crate::args::JsxImportSourceConfig; use crate::tools::vendor::test::VendorTestBuilder; use deno_core::serde_json::json; use pretty_assertions::assert_eq; @@ -1148,6 +1152,54 @@ mod test { } #[tokio::test] + async fn existing_import_map_jsx_import_source() { + let mut builder = VendorTestBuilder::default(); + builder.add_entry_point("/mod.tsx"); + builder.set_jsx_import_source_config(JsxImportSourceConfig { + default_specifier: Some("preact".to_string()), + module: "jsx-runtime".to_string(), + }); + let mut original_import_map = builder.new_import_map("/import_map.json"); + let imports = original_import_map.imports_mut(); + imports + .append( + "preact/".to_string(), + "https://localhost/preact/".to_string(), + ) + .unwrap(); + let output = builder + .with_loader(|loader| { + loader.add("/mod.tsx", "const myComponent = <div></div>;"); + loader.add_with_headers( + "https://localhost/preact/jsx-runtime", + "export function stuff() {}", + &[("content-type", "application/typescript")], + ); + }) + .set_original_import_map(original_import_map) + .build() + .await + .unwrap(); + + assert_eq!( + output.import_map, + Some(json!({ + "imports": { + "https://localhost/": "./localhost/", + "preact/jsx-runtime": "./localhost/preact/jsx-runtime.ts", + }, + })) + ); + assert_eq!( + output.files, + to_file_vec(&[( + "/vendor/localhost/preact/jsx-runtime.ts", + "export function stuff() {}" + ),]), + ); + } + + #[tokio::test] async fn vendor_file_fails_loading_dynamic_import() { let mut builder = VendorTestBuilder::with_default_setup(); let err = builder |
