1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-11 08:33:43 -05:00

chore(ext/fetch): custom arity (#14198)

This commit is contained in:
Divy Srivastava 2022-04-23 22:19:06 +05:30 committed by GitHub
parent d2c80aa26f
commit 2eb8c3b82f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 30 deletions

View file

@ -20,7 +20,12 @@
*/
function createHttpClient(options) {
options.caCerts ??= [];
return new HttpClient(core.opSync("op_fetch_custom_client", options));
return new HttpClient(
core.opSync(
"op_fetch_custom_client",
options,
),
);
}
class HttpClient {

View file

@ -67,8 +67,17 @@
* @param {Uint8Array | null} body
* @returns {{ requestRid: number, requestBodyRid: number | null }}
*/
function opFetch(args, body) {
return core.opSync("op_fetch", args, body);
function opFetch(method, url, headers, clientRid, hasBody, bodyLength, body) {
return core.opSync(
"op_fetch",
method,
url,
headers,
clientRid,
hasBody,
bodyLength,
body,
);
}
/**
@ -210,14 +219,12 @@
}
const { requestRid, requestBodyRid, cancelHandleRid } = opFetch(
{
method: req.method,
url: req.currentUrl(),
headers: req.headerList,
clientRid: req.clientRid,
hasBody: reqBody !== null,
bodyLength: req.body?.length,
},
req.method,
req.currentUrl(),
req.headerList,
req.clientRid,
reqBody !== null,
req.body?.length,
ObjectPrototypeIsPrototypeOf(Uint8ArrayPrototype, reqBody)
? reqBody
: null,

View file

@ -174,18 +174,6 @@ pub trait FetchPermissions {
pub fn get_declaration() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("lib.deno_fetch.d.ts")
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FetchArgs {
method: ByteString,
url: String,
headers: Vec<(ByteString, ByteString)>,
client_rid: Option<u32>,
has_body: bool,
body_length: Option<u64>,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FetchReturn {
@ -197,13 +185,18 @@ pub struct FetchReturn {
#[op]
pub fn op_fetch<FP>(
state: &mut OpState,
args: FetchArgs,
method: ByteString,
url: String,
headers: Vec<(ByteString, ByteString)>,
client_rid: Option<u32>,
has_body: bool,
body_length: Option<u64>,
data: Option<ZeroCopyBuf>,
) -> Result<FetchReturn, AnyError>
where
FP: FetchPermissions + 'static,
{
let client = if let Some(rid) = args.client_rid {
let client = if let Some(rid) = client_rid {
let r = state.resource_table.get::<HttpClientResource>(rid)?;
r.client.clone()
} else {
@ -211,8 +204,8 @@ where
client.clone()
};
let method = Method::from_bytes(&args.method)?;
let url = Url::parse(&args.url)?;
let method = Method::from_bytes(&method)?;
let url = Url::parse(&url)?;
// Check scheme before asking for net permission
let scheme = url.scheme();
@ -251,7 +244,7 @@ where
let mut request = client.request(method.clone(), url);
let request_body_rid = if args.has_body {
let request_body_rid = if has_body {
match data {
None => {
// If no body is passed, we return a writer for streaming the body.
@ -259,7 +252,7 @@ where
// If the size of the body is known, we include a content-length
// header explicitly.
if let Some(body_size) = args.body_length {
if let Some(body_size) = body_length {
request =
request.header(CONTENT_LENGTH, HeaderValue::from(body_size))
}
@ -289,7 +282,7 @@ where
None
};
for (key, value) in args.headers {
for (key, value) in headers {
let name = HeaderName::from_bytes(&key)
.map_err(|err| type_error(err.to_string()))?;
let v = HeaderValue::from_bytes(&value)

View file

@ -115,6 +115,7 @@ pub fn op(attr: TokenStream, item: TokenStream) -> TokenStream {
}
#[inline]
#[allow(clippy::too_many_arguments)]
#original_func
pub fn v8_func #generics (