1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-21 21:50:00 -05:00

publish deno_fetch during CI (#7557)

This commit is contained in:
Ryan Dahl 2020-09-18 12:31:30 -04:00 committed by GitHub
parent 93e8e59a7e
commit 8edf099485
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 23 additions and 32 deletions

View file

@ -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

View file

@ -1,5 +1,7 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
#![deny(warnings)]
#[macro_use]
extern crate lazy_static;
#[macro_use]

View file

@ -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"

View file

@ -0,0 +1 @@
This crate provides the web standard fetch API to `deno_core`.

View file

@ -1,5 +1,7 @@
// 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"))