diff options
| author | David Sherret <dsherret@users.noreply.github.com> | 2022-08-22 12:14:59 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-22 12:14:59 -0400 |
| commit | 7a1a082876298a4c9e37237074ea62942180d083 (patch) | |
| tree | 690b46889987a9f576a1b0601a322141b51b0660 /cli/tools/vendor/import_map.rs | |
| parent | c66386dbd20b735161017a239c6af013da1f1718 (diff) | |
perf: cache swc dependency analysis and don't hold onto `ParsedSource`s in memory (#15502)
Diffstat (limited to 'cli/tools/vendor/import_map.rs')
| -rw-r--r-- | cli/tools/vendor/import_map.rs | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/cli/tools/vendor/import_map.rs b/cli/tools/vendor/import_map.rs index 7e72693a1..cc759b859 100644 --- a/cli/tools/vendor/import_map.rs +++ b/cli/tools/vendor/import_map.rs @@ -3,6 +3,7 @@ use deno_ast::LineAndColumnIndex; use deno_ast::ModuleSpecifier; use deno_ast::SourceTextInfo; +use deno_core::error::AnyError; use deno_graph::Module; use deno_graph::ModuleGraph; use deno_graph::Position; @@ -13,6 +14,8 @@ use import_map::SpecifierMap; use indexmap::IndexMap; use log::warn; +use crate::cache::ParsedSourceCache; + use super::mappings::Mappings; use super::specifiers::is_remote_specifier; use super::specifiers::is_remote_specifier_text; @@ -179,9 +182,10 @@ pub fn build_import_map( modules: &[&Module], mappings: &Mappings, original_import_map: Option<&ImportMap>, -) -> String { + parsed_source_cache: &ParsedSourceCache, +) -> Result<String, AnyError> { let mut builder = ImportMapBuilder::new(base_dir, mappings); - visit_modules(graph, modules, mappings, &mut builder); + visit_modules(graph, modules, mappings, &mut builder, parsed_source_cache)?; for base_specifier in mappings.base_specifiers() { builder @@ -189,7 +193,7 @@ pub fn build_import_map( .add(base_specifier.to_string(), base_specifier); } - builder.into_import_map(original_import_map).to_json() + Ok(builder.into_import_map(original_import_map).to_json()) } fn visit_modules( @@ -197,12 +201,14 @@ fn visit_modules( modules: &[&Module], mappings: &Mappings, import_map: &mut ImportMapBuilder, -) { + parsed_source_cache: &ParsedSourceCache, +) -> Result<(), AnyError> { for module in modules { - let text_info = match &module.maybe_parsed_source { - Some(source) => source.text_info(), - None => continue, - }; + let text_info = + match parsed_source_cache.get_parsed_source_from_module(module)? { + Some(source) => source.text_info().clone(), + None => continue, + }; let source_text = match &module.maybe_source { Some(source) => source, None => continue, @@ -215,7 +221,7 @@ fn visit_modules( import_map, &module.specifier, mappings, - text_info, + &text_info, source_text, ); visit_maybe_resolved( @@ -224,7 +230,7 @@ fn visit_modules( import_map, &module.specifier, mappings, - text_info, + &text_info, source_text, ); } @@ -236,11 +242,13 @@ fn visit_modules( import_map, &module.specifier, mappings, - text_info, + &text_info, source_text, ); } } + + Ok(()) } fn visit_maybe_resolved( |
