summaryrefslogtreecommitdiff
path: root/ext/cache
diff options
context:
space:
mode:
Diffstat (limited to 'ext/cache')
-rw-r--r--ext/cache/Cargo.toml2
-rw-r--r--ext/cache/lib.rs8
-rw-r--r--ext/cache/sqlite.rs32
3 files changed, 23 insertions, 19 deletions
diff --git a/ext/cache/Cargo.toml b/ext/cache/Cargo.toml
index 9d876fcb7..56fa0a527 100644
--- a/ext/cache/Cargo.toml
+++ b/ext/cache/Cargo.toml
@@ -2,7 +2,7 @@
[package]
name = "deno_cache"
-version = "0.103.0"
+version = "0.109.0"
authors.workspace = true
edition.workspace = true
license.workspace = true
diff --git a/ext/cache/lib.rs b/ext/cache/lib.rs
index 08661c349..524d4cea0 100644
--- a/ext/cache/lib.rs
+++ b/ext/cache/lib.rs
@@ -28,12 +28,14 @@ pub enum CacheError {
Resource(deno_core::error::AnyError),
#[error(transparent)]
Other(deno_core::error::AnyError),
- #[error(transparent)]
+ #[error("{0}")]
Io(#[from] std::io::Error),
}
#[derive(Clone)]
-pub struct CreateCache<C: Cache + 'static>(pub Arc<dyn Fn() -> C>);
+pub struct CreateCache<C: Cache + 'static>(
+ pub Arc<dyn Fn() -> Result<C, CacheError>>,
+);
deno_core::extension!(deno_cache,
deps = [ deno_webidl, deno_web, deno_url, deno_fetch ],
@@ -231,7 +233,7 @@ where
if let Some(cache) = state.try_borrow::<CA>() {
Ok(cache.clone())
} else if let Some(create_cache) = state.try_borrow::<CreateCache<CA>>() {
- let cache = create_cache.0();
+ let cache = create_cache.0()?;
state.put(cache);
Ok(state.borrow::<CA>().clone())
} else {
diff --git a/ext/cache/sqlite.rs b/ext/cache/sqlite.rs
index e4991c32f..469e3e51d 100644
--- a/ext/cache/sqlite.rs
+++ b/ext/cache/sqlite.rs
@@ -8,6 +8,7 @@ use std::time::SystemTime;
use std::time::UNIX_EPOCH;
use async_trait::async_trait;
+use deno_core::anyhow::Context;
use deno_core::error::AnyError;
use deno_core::futures::future::poll_fn;
use deno_core::parking_lot::Mutex;
@@ -42,10 +43,16 @@ pub struct SqliteBackedCache {
}
impl SqliteBackedCache {
- pub fn new(cache_storage_dir: PathBuf) -> Self {
+ pub fn new(cache_storage_dir: PathBuf) -> Result<Self, CacheError> {
{
std::fs::create_dir_all(&cache_storage_dir)
- .expect("failed to create cache dir");
+ .with_context(|| {
+ format!(
+ "Failed to create cache storage directory {}",
+ cache_storage_dir.display()
+ )
+ })
+ .map_err(CacheError::Other)?;
let path = cache_storage_dir.join("cache_metadata.db");
let connection = rusqlite::Connection::open(&path).unwrap_or_else(|_| {
panic!("failed to open cache db at {}", path.display())
@@ -57,18 +64,14 @@ impl SqliteBackedCache {
PRAGMA synchronous=NORMAL;
PRAGMA optimize;
";
- connection
- .execute_batch(initial_pragmas)
- .expect("failed to execute pragmas");
- connection
- .execute(
- "CREATE TABLE IF NOT EXISTS cache_storage (
+ connection.execute_batch(initial_pragmas)?;
+ connection.execute(
+ "CREATE TABLE IF NOT EXISTS cache_storage (
id INTEGER PRIMARY KEY,
cache_name TEXT NOT NULL UNIQUE
)",
- (),
- )
- .expect("failed to create cache_storage table");
+ (),
+ )?;
connection
.execute(
"CREATE TABLE IF NOT EXISTS request_response_list (
@@ -86,12 +89,11 @@ impl SqliteBackedCache {
UNIQUE (cache_id, request_url)
)",
(),
- )
- .expect("failed to create request_response_list table");
- SqliteBackedCache {
+ )?;
+ Ok(SqliteBackedCache {
connection: Arc::new(Mutex::new(connection)),
cache_storage_dir,
- }
+ })
}
}
}