1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-24 08:09:08 -05:00
denoland-deno/ext/fetch
Bartek Iwańczuk b2bacd969c
Reland "refactor(fetch): reimplement fetch with hyper instead of reqwest" (#24593)
Originally landed in
f6fd6619e7.
Reverted in https://github.com/denoland/deno/pull/24574.

This reland contains a fix that sends "Accept: */*" header for calls made
from "FileFetcher". Absence of this header made downloading source code
from JSR broken. This is tested by ensuring this header is present in the
test server that servers JSR packages.

---------

Co-authored-by: Sean McArthur <sean@seanmonstar.com>
2024-07-22 22:47:57 +02:00
..
20_headers.js fix(runtime): use more null proto objects (#23921) 2024-05-23 00:03:35 +02:00
21_formdata.js chore: update copyright to 2024 (#21753) 2024-01-01 19:58:21 +00:00
22_body.js feat(ext/fetch): Request.bytes() and Response.bytes() (#23823) 2024-05-23 00:27:58 +00:00
22_http_client.js feat(ext/net): extract TLS key and certificate from interfaces (#23327) 2024-04-18 11:21:08 -06:00
23_request.js fix(runtime): use more null proto objects (#23921) 2024-05-23 00:03:35 +02:00
23_response.js fix(runtime): use more null proto objects (#23921) 2024-05-23 00:03:35 +02:00
26_fetch.js fix(runtime): use more null proto objects (#23921) 2024-05-23 00:03:35 +02:00
27_eventsource.js fix(runtime): use more null proto objects (#23921) 2024-05-23 00:03:35 +02:00
Cargo.toml Reland "refactor(fetch): reimplement fetch with hyper instead of reqwest" (#24593) 2024-07-22 22:47:57 +02:00
fs_fetch_handler.rs Reland "refactor(fetch): reimplement fetch with hyper instead of reqwest" (#24593) 2024-07-22 22:47:57 +02: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(ext/fetch): Request.bytes() and Response.bytes() (#23823) 2024-05-23 00:27:58 +00:00
lib.rs Reland "refactor(fetch): reimplement fetch with hyper instead of reqwest" (#24593) 2024-07-22 22:47:57 +02:00
proxy.rs Reland "refactor(fetch): reimplement fetch with hyper instead of reqwest" (#24593) 2024-07-22 22:47:57 +02:00
README.md docs: Add documentation to a subset of available extensions (#24138) 2024-06-18 00:07:48 +02: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_fetch_response_upgrade
  • op_utf8_to_byte_string
  • op_fetch_custom_client