1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-27 16:10:57 -05:00
denoland-deno/ext/fetch
Yusuke Tanaka 0e2f6e38e7
feat(ext/fetch): Make fetch client parameters configurable (#26909)
This commit makes HTTP client parameters used in `fetch` API
configurable on the extension initialization via a callback
`client_builder_hook` that users can provide.

The main motivation behind this change is to allow `deno_fetch` users to
tune the HTTP/2 client to suit their needs, although Deno CLI users will
not benefit from it as no JavaScript interface is exposed to set these
parameters currently.

It is up to users whether to provide a hook function. If not provided,
the default configuration from hyper crate will be used.

Ref #26785
2024-11-18 17:48:57 -08:00
..
20_headers.js refactor(ext/fetch): align error messages (#25374) 2024-09-04 09:05:29 +02:00
21_formdata.js refactor(ext/fetch): align error messages (#25374) 2024-09-04 09:05:29 +02:00
22_body.js feat(fetch): accept async iterables for body (#26882) 2024-11-15 15:54:28 +01:00
22_http_client.js fix(runtime): use more null proto objects again (#25040) 2024-09-06 12:52:59 +02:00
23_request.js feat(ext/http): abort event when request is cancelled (#26781) 2024-11-08 18:46:11 +05:30
23_response.js perf(http): cache webidl.converters lookups in ext/fetch/23_response.js (#26256) 2024-10-14 23:25:18 -04:00
26_fetch.js refactor(ext/fetch): align error messages (#25374) 2024-09-04 09:05:29 +02:00
27_eventsource.js fix(runtime): use more null proto objects again (#25040) 2024-09-06 12:52:59 +02:00
Cargo.toml feat(ext/fetch): allow embedders to use hickory_dns_resolver instead of default GaiResolver (#26740) 2024-11-15 11:44:11 +01:00
dns.rs feat(ext/fetch): allow embedders to use hickory_dns_resolver instead of default GaiResolver (#26740) 2024-11-15 11:44:11 +01:00
fs_fetch_handler.rs refactor(ext/fetch): use concrete error types (#26220) 2024-10-19 01:20:58 +00:00
internal.d.ts perf(ext/http): recover memory for serve and optimize AbortController (#23559) 2024-04-25 14:52:24 -04:00
lib.deno_fetch.d.ts feat(fetch): accept async iterables for body (#26882) 2024-11-15 15:54:28 +01:00
lib.rs feat(ext/fetch): Make fetch client parameters configurable (#26909) 2024-11-18 17:48:57 -08:00
proxy.rs fix(ext/fetch): fix lowercase http_proxy classified as https (#25686) 2024-09-19 08:03:07 +00:00
README.md chore(ext/fetch): remove op_fetch_response_upgrade (#25421) 2024-09-04 18:10:28 +05:30
tests.rs feat(ext/fetch): Make fetch client parameters configurable (#26909) 2024-11-18 17:48:57 -08:00

deno_fetch

This crate implements the Fetch API.

Spec: https://fetch.spec.whatwg.org/

Usage Example

From javascript, include the extension's source, and assign the following properties to the global scope:

import * as headers from "ext:deno_fetch/20_headers.js";
import * as formData from "ext:deno_fetch/21_formdata.js";
import * as request from "ext:deno_fetch/23_request.js";
import * as response from "ext:deno_fetch/23_response.js";
import * as fetch from "ext:deno_fetch/26_fetch.js";
import * as eventSource from "ext:deno_fetch/27_eventsource.js";

// Set up the callback for Wasm streaming ops
Deno.core.setWasmStreamingCallback(fetch.handleWasmStreaming);

Object.defineProperty(globalThis, "fetch", {
  value: fetch.fetch,
  enumerable: true,
  configurable: true,
  writable: true,
});

Object.defineProperty(globalThis, "Request", {
  value: request.Request,
  enumerable: false,
  configurable: true,
  writable: true,
});

Object.defineProperty(globalThis, "Response", {
  value: response.Response,
  enumerable: false,
  configurable: true,
  writable: true,
});

Object.defineProperty(globalThis, "Headers", {
  value: headers.Headers,
  enumerable: false,
  configurable: true,
  writable: true,
});

Object.defineProperty(globalThis, "FormData", {
  value: formData.FormData,
  enumerable: false,
  configurable: true,
  writable: true,
});

Then from rust, provide deno_fetch::deno_fetch::init_ops_and_esm<Permissions>(Default::default()) in the extensions field of your RuntimeOptions

Where:

  • Permissions: a struct implementing deno_fetch::FetchPermissions
  • Options: deno_fetch::Options, which implements Default

Dependencies

  • deno_webidl: Provided by the deno_webidl crate
  • deno_web: Provided by the deno_web crate
  • deno_url: Provided by the deno_url crate
  • deno_console: Provided by the deno_console crate

Provided ops

Following ops are provided, which can be accessed through Deno.ops:

  • op_fetch
  • op_fetch_send
  • op_utf8_to_byte_string
  • op_fetch_custom_client