mirror of
https://github.com/denoland/deno.git
synced 2025-01-11 16:42:21 -05:00
chore(ext/fetch): custom arity (#14198)
This commit is contained in:
parent
d2c80aa26f
commit
2eb8c3b82f
4 changed files with 36 additions and 30 deletions
|
@ -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 {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 (
|
||||
|
|
Loading…
Reference in a new issue