use wasm_bindgen::JsCast;
pub fn indexed_db_available() -> bool {
let global = js_sys::global();
if let Some(scope) = global.dyn_ref::<web_sys::WorkerGlobalScope>() {
return matches!(scope.indexed_db(), Ok(Some(_)));
}
if let Some(window) = global.dyn_ref::<web_sys::Window>() {
return matches!(window.indexed_db(), Ok(Some(_)));
}
false
}
pub fn is_worker_scope() -> bool {
js_sys::global().is_instance_of::<web_sys::WorkerGlobalScope>()
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum OpfsCapability {
OpfsAvailable,
OpfsUnavailable,
}
pub fn detect_opfs() -> OpfsCapability {
let global = js_sys::global();
let Some(scope) = global.dyn_ref::<web_sys::WorkerGlobalScope>() else {
return OpfsCapability::OpfsUnavailable;
};
let navigator = scope.navigator();
let storage = js_sys::Reflect::get(navigator.as_ref(), &"storage".into());
match storage {
Ok(value) if !value.is_undefined() && !value.is_null() => OpfsCapability::OpfsAvailable,
_ => OpfsCapability::OpfsUnavailable,
}
}