summaryrefslogtreecommitdiff
path: root/cli/tools
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tools')
-rw-r--r--cli/tools/doc.rs45
-rw-r--r--cli/tools/vendor/build.rs20
-rw-r--r--cli/tools/vendor/import_map.rs30
-rw-r--r--cli/tools/vendor/mod.rs1
-rw-r--r--cli/tools/vendor/test.rs17
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