Support Cloudflare workers runtime (#1081)

This commit is contained in:
stevelr
2020-11-11 18:10:01 +00:00
committed by GitHub
parent 3b45c38c41
commit 045d7c7d2f
2 changed files with 21 additions and 4 deletions

View File

@@ -129,9 +129,9 @@ winreg = "0.7"
# wasm # wasm
[target.'cfg(target_arch = "wasm32")'.dependencies] [target.'cfg(target_arch = "wasm32")'.dependencies]
js-sys = "0.3.28" js-sys = "0.3.45"
wasm-bindgen = { version = "0.2.51", features = ["serde-serialize"] } wasm-bindgen = { version = "0.2.68", features = ["serde-serialize"] }
wasm-bindgen-futures = "0.4.1" wasm-bindgen-futures = "0.4.18"
[target.'cfg(target_arch = "wasm32")'.dependencies.web-sys] [target.'cfg(target_arch = "wasm32")'.dependencies.web-sys]
version = "0.3.25" version = "0.3.25"
@@ -145,6 +145,7 @@ features = [
"FormData", "FormData",
"Blob", "Blob",
"BlobPropertyBag", "BlobPropertyBag",
"ServiceWorkerGlobalScope",
] ]
[[example]] [[example]]

View File

@@ -13,6 +13,22 @@ extern "C" {
fn fetch_with_request(input: &web_sys::Request) -> Promise; fn fetch_with_request(input: &web_sys::Request) -> Promise;
} }
fn js_fetch(req: &web_sys::Request) -> Promise {
use wasm_bindgen::{JsCast, JsValue};
let global = js_sys::global();
if let Some(true) =
js_sys::Reflect::has(&global, &JsValue::from_str("ServiceWorkerGlobalScope")).ok()
{
global
.unchecked_into::<web_sys::ServiceWorkerGlobalScope>()
.fetch_with_request(req)
} else {
// browser
fetch_with_request(req)
}
}
/// dox /// dox
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct Client(()); pub struct Client(());
@@ -168,7 +184,7 @@ async fn fetch(req: Request) -> crate::Result<Response> {
.map_err(crate::error::builder)?; .map_err(crate::error::builder)?;
// Await the fetch() promise // Await the fetch() promise
let p = fetch_with_request(&js_req); let p = js_fetch(&js_req);
let js_resp = super::promise::<web_sys::Response>(p) let js_resp = super::promise::<web_sys::Response>(p)
.await .await
.map_err(crate::error::request)?; .map_err(crate::error::request)?;