summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2023-07-01 23:52:30 +0100
committerGitHub <noreply@github.com>2023-07-02 00:52:30 +0200
commitb9c0e7cd550ab14fa7da7e33ed87cbeeeb9785a0 (patch)
tree9212eb183ab3c21ee71531e54f2c16163d1792b7 /ext
parent4e2f02639ef2cbcfdd335c4446f6faa6a29ad264 (diff)
Reland "fix(cli): don't store blob and data urls in the module cache" (#18581)
Relands #18261 now that https://github.com/lucacasonato/esbuild_deno_loader/pull/54 is landed and used by fresh. Fixes #18260.
Diffstat (limited to 'ext')
-rw-r--r--ext/web/benches/encoding.rs3
-rw-r--r--ext/web/benches/timers_ops.rs5
-rw-r--r--ext/web/blob.rs27
-rw-r--r--ext/web/lib.rs3
4 files changed, 21 insertions, 17 deletions
diff --git a/ext/web/benches/encoding.rs b/ext/web/benches/encoding.rs
index 5b147f00c..12fff5d75 100644
--- a/ext/web/benches/encoding.rs
+++ b/ext/web/benches/encoding.rs
@@ -8,7 +8,6 @@ use deno_core::Extension;
use deno_core::ExtensionFileSource;
use deno_core::ExtensionFileSourceCode;
use deno_core::OpState;
-use deno_web::BlobStore;
#[derive(Clone)]
struct Permissions;
@@ -28,7 +27,7 @@ fn setup() -> Vec<Extension> {
deno_url::deno_url::init_ops_and_esm(),
deno_console::deno_console::init_ops_and_esm(),
deno_web::deno_web::init_ops_and_esm::<Permissions>(
- BlobStore::default(),
+ Default::default(),
None,
),
Extension::builder("bench_setup")
diff --git a/ext/web/benches/timers_ops.rs b/ext/web/benches/timers_ops.rs
index 084fac98b..9d74abd17 100644
--- a/ext/web/benches/timers_ops.rs
+++ b/ext/web/benches/timers_ops.rs
@@ -8,7 +8,6 @@ use deno_core::Extension;
use deno_core::ExtensionFileSource;
use deno_core::ExtensionFileSourceCode;
use deno_core::OpState;
-use deno_web::BlobStore;
#[derive(Clone)]
struct Permissions;
@@ -25,11 +24,11 @@ fn setup() -> Vec<Extension> {
deno_webidl::deno_webidl::init_ops_and_esm(),
deno_url::deno_url::init_ops_and_esm(),
deno_console::deno_console::init_ops_and_esm(),
- deno_web::deno_web::init_ops_and_esm::<Permissions>(BlobStore::default(), None),
+ deno_web::deno_web::init_ops_and_esm::<Permissions>(Default::default(), None),
Extension::builder("bench_setup")
.esm(vec![
ExtensionFileSource {
- specifier: "ext:bench_setup/setup",
+ specifier: "ext:bench_setup/setup",
code: ExtensionFileSourceCode::IncludedInBinary(r#"
import { setTimeout, handleTimerMacrotask } from "ext:deno_web/02_timers.js";
globalThis.setTimeout = setTimeout;
diff --git a/ext/web/blob.rs b/ext/web/blob.rs
index 9c5f5a09c..3481f6178 100644
--- a/ext/web/blob.rs
+++ b/ext/web/blob.rs
@@ -23,10 +23,10 @@ use crate::Location;
pub type PartMap = HashMap<Uuid, Arc<dyn BlobPart + Send + Sync>>;
-#[derive(Clone, Default, Debug)]
+#[derive(Default, Debug)]
pub struct BlobStore {
- parts: Arc<Mutex<PartMap>>,
- object_urls: Arc<Mutex<HashMap<Url, Arc<Blob>>>>,
+ parts: Mutex<PartMap>,
+ object_urls: Mutex<HashMap<Url, Arc<Blob>>>,
}
impl BlobStore {
@@ -80,6 +80,11 @@ impl BlobStore {
let mut blob_store = self.object_urls.lock();
blob_store.remove(url);
}
+
+ pub fn clear(&self) {
+ self.parts.lock().clear();
+ self.object_urls.lock().clear();
+ }
}
#[derive(Debug)]
@@ -162,7 +167,7 @@ impl BlobPart for SlicedBlobPart {
#[op]
pub fn op_blob_create_part(state: &mut OpState, data: JsBuffer) -> Uuid {
- let blob_store = state.borrow::<BlobStore>();
+ let blob_store = state.borrow::<Arc<BlobStore>>();
let part = InMemoryBlobPart(data.to_vec());
blob_store.insert_part(Arc::new(part))
}
@@ -180,7 +185,7 @@ pub fn op_blob_slice_part(
id: Uuid,
options: SliceOptions,
) -> Result<Uuid, AnyError> {
- let blob_store = state.borrow::<BlobStore>();
+ let blob_store = state.borrow::<Arc<BlobStore>>();
let part = blob_store
.get_part(&id)
.ok_or_else(|| type_error("Blob part not found"))?;
@@ -207,7 +212,7 @@ pub async fn op_blob_read_part(
) -> Result<ToJsBuffer, AnyError> {
let part = {
let state = state.borrow();
- let blob_store = state.borrow::<BlobStore>();
+ let blob_store = state.borrow::<Arc<BlobStore>>();
blob_store.get_part(&id)
}
.ok_or_else(|| type_error("Blob part not found"))?;
@@ -217,7 +222,7 @@ pub async fn op_blob_read_part(
#[op]
pub fn op_blob_remove_part(state: &mut OpState, id: Uuid) {
- let blob_store = state.borrow::<BlobStore>();
+ let blob_store = state.borrow::<Arc<BlobStore>>();
blob_store.remove_part(&id);
}
@@ -228,7 +233,7 @@ pub fn op_blob_create_object_url(
part_ids: Vec<Uuid>,
) -> Result<String, AnyError> {
let mut parts = Vec::with_capacity(part_ids.len());
- let blob_store = state.borrow::<BlobStore>();
+ let blob_store = state.borrow::<Arc<BlobStore>>();
for part_id in part_ids {
let part = blob_store
.get_part(&part_id)
@@ -239,7 +244,7 @@ pub fn op_blob_create_object_url(
let blob = Blob { media_type, parts };
let maybe_location = state.try_borrow::<Location>();
- let blob_store = state.borrow::<BlobStore>();
+ let blob_store = state.borrow::<Arc<BlobStore>>();
let url = blob_store
.insert_object_url(blob, maybe_location.map(|location| location.0.clone()));
@@ -253,7 +258,7 @@ pub fn op_blob_revoke_object_url(
url: &str,
) -> Result<(), AnyError> {
let url = Url::parse(url)?;
- let blob_store = state.borrow::<BlobStore>();
+ let blob_store = state.borrow::<Arc<BlobStore>>();
blob_store.remove_object_url(&url);
Ok(())
}
@@ -280,7 +285,7 @@ pub fn op_blob_from_object_url(
return Ok(None);
}
- let blob_store = state.try_borrow::<BlobStore>().ok_or_else(|| {
+ let blob_store = state.try_borrow::<Arc<BlobStore>>().ok_or_else(|| {
type_error("Blob URLs are not supported in this context.")
})?;
if let Some(blob) = blob_store.get_object_url(url) {
diff --git a/ext/web/lib.rs b/ext/web/lib.rs
index af213b5be..374815804 100644
--- a/ext/web/lib.rs
+++ b/ext/web/lib.rs
@@ -29,6 +29,7 @@ use std::borrow::Cow;
use std::cell::RefCell;
use std::fmt;
use std::path::PathBuf;
+use std::sync::Arc;
use std::usize;
use crate::blob::op_blob_create_object_url;
@@ -110,7 +111,7 @@ deno_core::extension!(deno_web,
"15_performance.js",
],
options = {
- blob_store: BlobStore,
+ blob_store: Arc<BlobStore>,
maybe_location: Option<Url>,
},
state = |state, options| {