chore: split web op crate (#9635)
This commit starts splitting out the deno_web op crate into multiple
smaller crates. This commit splits out WebIDL and URL API, but in the
future I want to split out each spec into its own crate. That means we
will have (in rough order of loading): `webidl`, `dom`, `streams`,
`console`, `encoding`, `url`, `file`, `fetch`, `websocket`, and
`webgpu` crates.
2021-03-12 10:17:18 -05:00
|
|
|
# deno_fetch
|
|
|
|
|
2024-06-17 18:07:48 -04:00
|
|
|
**This crate implements the Fetch API.**
|
chore: split web op crate (#9635)
This commit starts splitting out the deno_web op crate into multiple
smaller crates. This commit splits out WebIDL and URL API, but in the
future I want to split out each spec into its own crate. That means we
will have (in rough order of loading): `webidl`, `dom`, `streams`,
`console`, `encoding`, `url`, `file`, `fetch`, `websocket`, and
`webgpu` crates.
2021-03-12 10:17:18 -05:00
|
|
|
|
|
|
|
Spec: https://fetch.spec.whatwg.org/
|
2024-06-17 18:07:48 -04:00
|
|
|
|
|
|
|
## Usage Example
|
|
|
|
|
|
|
|
From javascript, include the extension's source, and assign the following
|
|
|
|
properties to the global scope:
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
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
|