未验证 提交 8edf0994 编写于 作者: R Ryan Dahl 提交者: GitHub

publish deno_fetch during CI (#7557)

上级 93e8e59a
......@@ -231,6 +231,9 @@ jobs:
cd ../op_crates/web
cargo publish
sleep 30
cd ../op_crates/fetch
cargo publish
sleep 30
cd ../../cli
sleep 30
cargo publish
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
#![deny(warnings)]
#[macro_use]
extern crate lazy_static;
#[macro_use]
......
......@@ -4,7 +4,7 @@
name = "deno_fetch"
version = "0.1.0"
edition = "2018"
description = "fetch Web API"
description = "provides fetch Web API to deno_core"
authors = ["the Deno authors"]
license = "MIT"
readme = "README.md"
......
This crate provides the web standard fetch API to `deno_core`.
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
#![deny(warnings)]
use deno_core::error::bad_resource_id;
use deno_core::error::type_error;
use deno_core::error::AnyError;
......@@ -14,10 +16,9 @@ use deno_core::BufVec;
use deno_core::JsRuntime;
use deno_core::OpState;
use deno_core::ZeroCopyBuf;
use reqwest::header::HeaderMap;
use reqwest::header::HeaderName;
use reqwest::header::HeaderValue;
use reqwest::header::USER_AGENT;
use reqwest::redirect::Policy;
use reqwest::Client;
use reqwest::Method;
......@@ -31,6 +32,8 @@ use std::path::Path;
use std::path::PathBuf;
use std::rc::Rc;
pub use reqwest; // Re-export reqwest
pub fn init(isolate: &mut JsRuntime) {
let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
let files = vec![
......@@ -63,15 +66,6 @@ pub fn get_declaration() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("lib.deno_fetch.d.ts")
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
struct FetchArgs {
method: Option<String>,
url: String,
headers: Vec<(String, String)>,
client_rid: Option<u32>,
}
pub async fn op_fetch<FP>(
state: Rc<RefCell<OpState>>,
args: Value,
......@@ -80,6 +74,15 @@ pub async fn op_fetch<FP>(
where
FP: FetchPermissions + 'static,
{
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
struct FetchArgs {
method: Option<String>,
url: String,
headers: Vec<(String, String)>,
client_rid: Option<u32>,
}
let args: FetchArgs = serde_json::from_value(args)?;
let url = args.url;
......@@ -181,23 +184,13 @@ pub async fn op_fetch_read(
let mut chunk_fut = response.chunk().boxed_local();
let r = ready!(chunk_fut.poll_unpin(cx))?;
if let Some(chunk) = r {
// TODO(ry) This is terribly inefficient. Make this zero-copy.
Ok(json!({ "chunk": &*chunk })).into()
} else {
Ok(json!({ "chunk": null })).into()
}
});
f.await
/*
// I'm programming this as I want it to be programmed, even though it might be
// incorrect, normally we would use poll_fn here. We need to make this await pattern work.
let chunk = response.chunk().await?;
if let Some(chunk) = chunk {
// TODO(ry) This is terribly inefficient. Make this zero-copy.
Ok(json!({ "chunk": &*chunk }))
} else {
Ok(json!({ "chunk": null }))
}
*/
}
struct HttpClientResource {
......@@ -245,21 +238,13 @@ where
/// Create new instance of async reqwest::Client. This client supports
/// proxies and doesn't follow redirects.
fn create_http_client(ca_file: Option<&str>) -> Result<Client, AnyError> {
let mut headers = HeaderMap::new();
// TODO(ry) set the verison correctly.
headers.insert(USER_AGENT, format!("Deno/{}", "x.x.x").parse().unwrap());
let mut builder = Client::builder()
.redirect(Policy::none())
.default_headers(headers)
.use_rustls_tls();
let mut builder = Client::builder().redirect(Policy::none()).use_rustls_tls();
if let Some(ca_file) = ca_file {
let mut buf = Vec::new();
File::open(ca_file)?.read_to_end(&mut buf)?;
let cert = reqwest::Certificate::from_pem(&buf)?;
builder = builder.add_root_certificate(cert);
}
builder
.build()
.map_err(|_| deno_core::error::generic_error("Unable to build http client"))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册