summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/cache/code_cache.rs13
-rw-r--r--cli/main.rs5
-rw-r--r--cli/module_loader.rs28
-rw-r--r--cli/standalone/mod.rs1
4 files changed, 47 insertions, 0 deletions
diff --git a/cli/cache/code_cache.rs b/cli/cache/code_cache.rs
index abcd0d46a..d9e951af6 100644
--- a/cli/cache/code_cache.rs
+++ b/cli/cache/code_cache.rs
@@ -80,6 +80,10 @@ impl CodeCache {
data,
));
}
+
+ pub fn remove_code_cache(&self, specifier: &str) {
+ Self::ensure_ok(self.inner.remove_code_cache(specifier))
+ }
}
impl code_cache::CodeCache for CodeCache {
@@ -158,6 +162,15 @@ impl CodeCacheInner {
self.conn.execute(sql, params)?;
Ok(())
}
+
+ pub fn remove_code_cache(&self, specifier: &str) -> Result<(), AnyError> {
+ let sql = "
+ DELETE FROM codecache
+ WHERE specifier=$1;";
+ let params = params![specifier];
+ self.conn.execute(sql, params)?;
+ Ok(())
+ }
}
fn serialize_code_cache_type(
diff --git a/cli/main.rs b/cli/main.rs
index aafa7f009..6a7575dee 100644
--- a/cli/main.rs
+++ b/cli/main.rs
@@ -438,11 +438,15 @@ fn resolve_flags_and_init(
DenoSubcommand::Lsp => vec!["--max-old-space-size=3072".to_string()],
_ => {
if *DENO_FUTURE {
+ // TODO(bartlomieju): I think this can be removed as it's handled by `deno_core`
+ // and its settings.
// deno_ast removes TypeScript `assert` keywords, so this flag only affects JavaScript
// TODO(petamoriken): Need to check TypeScript `assert` keywords in deno_ast
vec!["--no-harmony-import-assertions".to_string()]
} else {
vec![
+ // TODO(bartlomieju): I think this can be removed as it's handled by `deno_core`
+ // and its settings.
// If we're still in v1.X version we want to support import assertions.
// V8 12.6 unshipped the support by default, so force it by passing a
// flag.
@@ -455,6 +459,7 @@ fn resolve_flags_and_init(
};
init_v8_flags(&default_v8_flags, &flags.v8_flags, get_v8_flags_from_env());
+ // TODO(bartlomieju): remove last argument in Deno 2.
deno_core::JsRuntime::init_platform(None, !*DENO_FUTURE);
util::logger::init(flags.log_level);
diff --git a/cli/module_loader.rs b/cli/module_loader.rs
index afd707ad8..9f5208936 100644
--- a/cli/module_loader.rs
+++ b/cli/module_loader.rs
@@ -2,6 +2,7 @@
use std::borrow::Cow;
use std::cell::RefCell;
+use std::collections::HashSet;
use std::path::PathBuf;
use std::pin::Pin;
use std::rc::Rc;
@@ -44,6 +45,7 @@ use deno_core::error::generic_error;
use deno_core::error::AnyError;
use deno_core::futures::future::FutureExt;
use deno_core::futures::Future;
+use deno_core::parking_lot::Mutex;
use deno_core::resolve_url;
use deno_core::ModuleCodeString;
use deno_core::ModuleLoader;
@@ -291,6 +293,7 @@ impl CliModuleLoaderFactory {
emitter: self.shared.emitter.clone(),
parsed_source_cache: self.shared.parsed_source_cache.clone(),
shared: self.shared.clone(),
+ prevent_v8_code_cache: Default::default(),
})));
ModuleLoaderAndSourceMapGetter {
module_loader: loader,
@@ -342,6 +345,10 @@ struct CliModuleLoaderInner<TGraphContainer: ModuleGraphContainer> {
emitter: Arc<Emitter>,
parsed_source_cache: Arc<ParsedSourceCache>,
graph_container: TGraphContainer,
+ // NOTE(bartlomieju): this is temporary, for deprecated import assertions.
+ // Should be removed in Deno 2.
+ // Modules stored here should not be V8 code-cached.
+ prevent_v8_code_cache: Arc<Mutex<HashSet<String>>>,
}
impl<TGraphContainer: ModuleGraphContainer>
@@ -827,6 +834,14 @@ impl<TGraphContainer: ModuleGraphContainer> ModuleLoader
code_cache: &[u8],
) -> Pin<Box<dyn Future<Output = ()>>> {
if let Some(cache) = self.0.shared.code_cache.as_ref() {
+ if self
+ .0
+ .prevent_v8_code_cache
+ .lock()
+ .contains(specifier.as_str())
+ {
+ return std::future::ready(()).boxed_local();
+ }
// This log line is also used by tests.
log::debug!(
"Updating V8 code cache for ES module: {specifier}, [{source_hash:?}]"
@@ -841,6 +856,19 @@ impl<TGraphContainer: ModuleGraphContainer> ModuleLoader
std::future::ready(()).boxed_local()
}
+ fn purge_and_prevent_code_cache(&self, specifier: &str) {
+ if let Some(cache) = self.0.shared.code_cache.as_ref() {
+ // This log line is also used by tests.
+ log::debug!("Remove V8 code cache for ES module: {specifier}");
+ cache.remove_code_cache(specifier);
+ self
+ .0
+ .prevent_v8_code_cache
+ .lock()
+ .insert(specifier.to_string());
+ }
+ }
+
fn get_source_map(&self, file_name: &str) -> Option<Vec<u8>> {
let specifier = resolve_url(file_name).ok()?;
match specifier.scheme() {
diff --git a/cli/standalone/mod.rs b/cli/standalone/mod.rs
index 635293cc9..020561ece 100644
--- a/cli/standalone/mod.rs
+++ b/cli/standalone/mod.rs
@@ -745,6 +745,7 @@ pub async fn run(
// Initialize v8 once from the main thread.
v8_set_flags(construct_v8_flags(&[], &metadata.v8_flags, vec![]));
+ // TODO(bartlomieju): remove last argument in Deno 2.
deno_core::JsRuntime::init_platform(None, true);
let mut worker = worker_factory