diff options
Diffstat (limited to 'cli/tools')
-rw-r--r-- | cli/tools/doc.rs | 45 | ||||
-rw-r--r-- | cli/tools/vendor/build.rs | 20 | ||||
-rw-r--r-- | cli/tools/vendor/import_map.rs | 30 | ||||
-rw-r--r-- | cli/tools/vendor/mod.rs | 1 | ||||
-rw-r--r-- | cli/tools/vendor/test.rs | 17 |
5 files changed, 78 insertions, 35 deletions
diff --git a/cli/tools/doc.rs b/cli/tools/doc.rs index ae0f37f1b..aa2278131 100644 --- a/cli/tools/doc.rs +++ b/cli/tools/doc.rs @@ -25,21 +25,38 @@ pub async fn print_docs( let source_file = doc_flags .source_file .unwrap_or_else(|| "--builtin".to_string()); - let source_parser = deno_graph::DefaultSourceParser::new(); let mut doc_nodes = if source_file == "--builtin" { + // todo(dsherret): change this back to deno://lib.deno.d.ts once + // https://github.com/denoland/deno_ast/issues/109 is fixed let source_file_specifier = - ModuleSpecifier::parse("deno://lib.deno.d.ts").unwrap(); - let graph = ps - .create_graph(vec![(source_file_specifier.clone(), ModuleKind::Esm)]) - .await?; - let doc_parser = - doc::DocParser::new(graph, doc_flags.private, &source_parser); - doc_parser.parse_source( - &source_file_specifier, - MediaType::Dts, - get_types(ps.options.unstable()).into(), - )? + ModuleSpecifier::parse("deno://dts/lib.deno.d.ts").unwrap(); + let content = get_types(ps.options.unstable()); + let mut loader = deno_graph::source::MemoryLoader::new( + vec![( + source_file_specifier.to_string(), + deno_graph::source::Source::Module { + specifier: source_file_specifier.to_string(), + content, + maybe_headers: None, + }, + )], + Vec::new(), + ); + let analyzer = deno_graph::CapturingModuleAnalyzer::default(); + let graph = deno_graph::create_graph( + vec![(source_file_specifier.clone(), ModuleKind::Esm)], + false, + None, + &mut loader, + None, + None, + Some(&analyzer), + None, + ) + .await; + let doc_parser = doc::DocParser::new(graph, doc_flags.private, &analyzer); + doc_parser.parse_module(&source_file_specifier)?.definitions } else { let module_specifier = resolve_url_or_path(&source_file)?; @@ -61,8 +78,8 @@ pub async fn print_docs( let graph = ps .create_graph(vec![(root_specifier.clone(), ModuleKind::Esm)]) .await?; - let doc_parser = - doc::DocParser::new(graph, doc_flags.private, &source_parser); + let store = ps.parsed_source_cache.as_store(); + let doc_parser = doc::DocParser::new(graph, doc_flags.private, &*store); doc_parser.parse_with_reexports(&root_specifier)? }; diff --git a/cli/tools/vendor/build.rs b/cli/tools/vendor/build.rs index f7921251e..33f5227b5 100644 --- a/cli/tools/vendor/build.rs +++ b/cli/tools/vendor/build.rs @@ -14,6 +14,8 @@ use deno_graph::ModuleKind; use import_map::ImportMap; use import_map::SpecifierMap; +use crate::cache::ParsedSourceCache; + use super::analyze::has_default_export; use super::import_map::build_import_map; use super::mappings::Mappings; @@ -52,6 +54,7 @@ impl VendorEnvironment for RealVendorEnvironment { /// Vendors remote modules and returns how many were vendored. pub fn build( graph: ModuleGraph, + parsed_source_cache: &ParsedSourceCache, output_dir: &Path, original_import_map: Option<&ImportMap>, environment: &impl VendorEnvironment, @@ -110,7 +113,8 @@ pub fn build( for (specifier, proxied_module) in mappings.proxied_modules() { let proxy_path = mappings.local_path(specifier); let module = graph.get(specifier).unwrap(); - let text = build_proxy_module_source(module, proxied_module); + let text = + build_proxy_module_source(module, proxied_module, parsed_source_cache)?; environment.write_file(&proxy_path, &text)?; } @@ -124,7 +128,8 @@ pub fn build( &all_modules, &mappings, original_import_map, - ); + parsed_source_cache, + )?; environment.write_file(&import_map_path, &import_map_text)?; } @@ -171,7 +176,8 @@ fn validate_original_import_map( fn build_proxy_module_source( module: &Module, proxied_module: &ProxiedModule, -) -> String { + parsed_source_cache: &ParsedSourceCache, +) -> Result<String, AnyError> { let mut text = String::new(); writeln!( text, @@ -194,8 +200,10 @@ fn build_proxy_module_source( writeln!(text, "export * from \"{}\";", relative_specifier).unwrap(); // add a default export if one exists in the module - if let Some(parsed_source) = module.maybe_parsed_source.as_ref() { - if has_default_export(parsed_source) { + if let Some(parsed_source) = + parsed_source_cache.get_parsed_source_from_module(module)? + { + if has_default_export(&parsed_source) { writeln!( text, "export {{ default }} from \"{}\";", @@ -205,7 +213,7 @@ fn build_proxy_module_source( } } - text + Ok(text) } #[cfg(test)] 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( diff --git a/cli/tools/vendor/mod.rs b/cli/tools/vendor/mod.rs index a81965a15..05fee531a 100644 --- a/cli/tools/vendor/mod.rs +++ b/cli/tools/vendor/mod.rs @@ -45,6 +45,7 @@ pub async fn vendor( let graph = create_graph(&ps, &vendor_flags).await?; let vendored_count = build::build( graph, + &ps.parsed_source_cache, &output_dir, ps.maybe_import_map.as_deref(), &build::RealVendorEnvironment, diff --git a/cli/tools/vendor/test.rs b/cli/tools/vendor/test.rs index 836fb579b..036dd6663 100644 --- a/cli/tools/vendor/test.rs +++ b/cli/tools/vendor/test.rs @@ -20,6 +20,7 @@ use deno_graph::ModuleGraph; use deno_graph::ModuleKind; use import_map::ImportMap; +use crate::cache::ParsedSourceCache; use crate::resolver::ImportMapResolver; use super::build::VendorEnvironment; @@ -219,11 +220,18 @@ impl VendorTestBuilder { .map(|s| (s.to_owned(), deno_graph::ModuleKind::Esm)) .collect(); let loader = self.loader.clone(); - let graph = - build_test_graph(roots, self.original_import_map.clone(), loader.clone()) - .await; + let parsed_source_cache = ParsedSourceCache::new(None); + let analyzer = parsed_source_cache.as_analyzer(); + let graph = build_test_graph( + roots, + self.original_import_map.clone(), + loader.clone(), + &*analyzer, + ) + .await; super::build::build( graph, + &parsed_source_cache, &output_dir, self.original_import_map.as_ref(), &self.environment, @@ -254,6 +262,7 @@ async fn build_test_graph( roots: Vec<(ModuleSpecifier, ModuleKind)>, original_import_map: Option<ImportMap>, mut loader: TestLoader, + analyzer: &dyn deno_graph::ModuleAnalyzer, ) -> ModuleGraph { let resolver = original_import_map.map(|m| ImportMapResolver::new(Arc::new(m))); @@ -264,7 +273,7 @@ async fn build_test_graph( &mut loader, resolver.as_ref().map(|im| im.as_resolver()), None, - None, + Some(analyzer), None, ) .await |