summaryrefslogtreecommitdiff
path: root/cli/graph_util.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2022-08-22 12:14:59 -0400
committerGitHub <noreply@github.com>2022-08-22 12:14:59 -0400
commit7a1a082876298a4c9e37237074ea62942180d083 (patch)
tree690b46889987a9f576a1b0601a322141b51b0660 /cli/graph_util.rs
parentc66386dbd20b735161017a239c6af013da1f1718 (diff)
perf: cache swc dependency analysis and don't hold onto `ParsedSource`s in memory (#15502)
Diffstat (limited to 'cli/graph_util.rs')
-rw-r--r--cli/graph_util.rs41
1 files changed, 2 insertions, 39 deletions
diff --git a/cli/graph_util.rs b/cli/graph_util.rs
index 1c58fd9b6..1f49c22a3 100644
--- a/cli/graph_util.rs
+++ b/cli/graph_util.rs
@@ -6,7 +6,6 @@ use crate::errors::get_error_class_name;
use crate::npm::NpmPackageReference;
use crate::npm::NpmPackageReq;
-use deno_ast::ParsedSource;
use deno_core::error::custom_error;
use deno_core::error::AnyError;
use deno_core::ModuleSpecifier;
@@ -18,18 +17,12 @@ use deno_graph::ModuleGraphError;
use deno_graph::ModuleKind;
use deno_graph::Range;
use deno_graph::Resolved;
-use once_cell::sync::Lazy;
-use regex::Regex;
use std::collections::BTreeMap;
use std::collections::HashMap;
use std::collections::HashSet;
use std::collections::VecDeque;
use std::sync::Arc;
-/// Matches the `@ts-check` pragma.
-static TS_CHECK_RE: Lazy<Regex> =
- Lazy::new(|| Regex::new(r#"(?i)^\s*@ts-check(?:\s+|$)"#).unwrap());
-
pub fn contains_specifier(
v: &[(ModuleSpecifier, ModuleKind)],
specifier: &ModuleSpecifier,
@@ -42,11 +35,8 @@ pub fn contains_specifier(
pub enum ModuleEntry {
Module {
code: Arc<str>,
- maybe_parsed_source: Option<ParsedSource>,
dependencies: BTreeMap<String, Dependency>,
media_type: MediaType,
- /// Whether or not this is a JS/JSX module with a `@ts-check` directive.
- ts_check: bool,
/// A set of type libs that the module has passed a type check with this
/// session. This would consist of window, worker or both.
checked_libs: HashSet<TsTypeLib>,
@@ -83,11 +73,7 @@ impl GraphData {
}
}
}
- // TODO(nayeemrmn): Implement `Clone` on `GraphImport`.
- self.graph_imports.push(GraphImport {
- referrer: graph_import.referrer.clone(),
- dependencies: graph_import.dependencies.clone(),
- });
+ self.graph_imports.push(graph_import.clone())
}
for (specifier, result) in graph.specifiers() {
@@ -139,24 +125,9 @@ impl GraphData {
}
}
}
- let ts_check = match &media_type {
- MediaType::JavaScript
- | MediaType::Mjs
- | MediaType::Cjs
- | MediaType::Jsx => {
- let parsed_source = module.maybe_parsed_source.as_ref().unwrap();
- parsed_source
- .get_leading_comments()
- .iter()
- .any(|c| TS_CHECK_RE.is_match(&c.text))
- }
- _ => false,
- };
let module_entry = ModuleEntry::Module {
code,
- maybe_parsed_source: module.maybe_parsed_source.clone(),
dependencies: module.dependencies.clone(),
- ts_check,
media_type,
checked_libs: Default::default(),
maybe_types,
@@ -305,15 +276,7 @@ impl GraphData {
modules,
npm_packages: self.npm_packages.clone(),
referrer_map,
- // TODO(nayeemrmn): Implement `Clone` on `GraphImport`.
- graph_imports: self
- .graph_imports
- .iter()
- .map(|i| GraphImport {
- referrer: i.referrer.clone(),
- dependencies: i.dependencies.clone(),
- })
- .collect(),
+ graph_imports: self.graph_imports.to_vec(),
cjs_esm_translations: Default::default(),
})
}