mirror of
https://github.com/denoland/deno.git
synced 2024-12-20 22:34:46 -05:00
b8cf259924
Reland of #24623, but with a fix for `String` objects. Co-authored-by: crowlkats <crowlkats@toaxl.com>
498 lines
14 KiB
TypeScript
498 lines
14 KiB
TypeScript
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
|
|
|
// deno-lint-ignore-file no-explicit-any no-var
|
|
|
|
/// <reference no-default-lib="true" />
|
|
/// <reference lib="esnext" />
|
|
|
|
/** @category Platform */
|
|
interface DomIterable<K, V> {
|
|
keys(): IterableIterator<K>;
|
|
values(): IterableIterator<V>;
|
|
entries(): IterableIterator<[K, V]>;
|
|
[Symbol.iterator](): IterableIterator<[K, V]>;
|
|
forEach(
|
|
callback: (value: V, key: K, parent: this) => void,
|
|
thisArg?: any,
|
|
): void;
|
|
}
|
|
|
|
/** @category Fetch */
|
|
type FormDataEntryValue = File | string;
|
|
|
|
/** Provides a way to easily construct a set of key/value pairs representing
|
|
* form fields and their values, which can then be easily sent using the
|
|
* XMLHttpRequest.send() method. It uses the same format a form would use if the
|
|
* encoding type were set to "multipart/form-data".
|
|
*
|
|
* @category Fetch
|
|
*/
|
|
interface FormData extends DomIterable<string, FormDataEntryValue> {
|
|
append(name: string, value: string | Blob, fileName?: string): void;
|
|
delete(name: string): void;
|
|
get(name: string): FormDataEntryValue | null;
|
|
getAll(name: string): FormDataEntryValue[];
|
|
has(name: string): boolean;
|
|
set(name: string, value: string | Blob, fileName?: string): void;
|
|
}
|
|
|
|
/** @category Fetch */
|
|
declare var FormData: {
|
|
readonly prototype: FormData;
|
|
new (): FormData;
|
|
};
|
|
|
|
/** @category Fetch */
|
|
interface Body {
|
|
/** A simple getter used to expose a `ReadableStream` of the body contents. */
|
|
readonly body: ReadableStream<Uint8Array> | null;
|
|
/** Stores a `Boolean` that declares whether the body has been used in a
|
|
* response yet.
|
|
*/
|
|
readonly bodyUsed: boolean;
|
|
/** Takes a `Response` stream and reads it to completion. It returns a promise
|
|
* that resolves with an `ArrayBuffer`.
|
|
*/
|
|
arrayBuffer(): Promise<ArrayBuffer>;
|
|
/** Takes a `Response` stream and reads it to completion. It returns a promise
|
|
* that resolves with a `Blob`.
|
|
*/
|
|
blob(): Promise<Blob>;
|
|
/** Takes a `Response` stream and reads it to completion. It returns a promise
|
|
* that resolves with a `Uint8Array`.
|
|
*/
|
|
bytes(): Promise<Uint8Array>;
|
|
/** Takes a `Response` stream and reads it to completion. It returns a promise
|
|
* that resolves with a `FormData` object.
|
|
*/
|
|
formData(): Promise<FormData>;
|
|
/** Takes a `Response` stream and reads it to completion. It returns a promise
|
|
* that resolves with the result of parsing the body text as JSON.
|
|
*/
|
|
json(): Promise<any>;
|
|
/** Takes a `Response` stream and reads it to completion. It returns a promise
|
|
* that resolves with a `USVString` (text).
|
|
*/
|
|
text(): Promise<string>;
|
|
}
|
|
|
|
/** @category Fetch */
|
|
type HeadersInit = Iterable<string[]> | Record<string, string>;
|
|
|
|
/** This Fetch API interface allows you to perform various actions on HTTP
|
|
* request and response headers. These actions include retrieving, setting,
|
|
* adding to, and removing. A Headers object has an associated header list,
|
|
* which is initially empty and consists of zero or more name and value pairs.
|
|
* You can add to this using methods like append() (see Examples). In all
|
|
* methods of this interface, header names are matched by case-insensitive byte
|
|
* sequence.
|
|
*
|
|
* @category Fetch
|
|
*/
|
|
interface Headers extends DomIterable<string, string> {
|
|
/** Appends a new value onto an existing header inside a `Headers` object, or
|
|
* adds the header if it does not already exist.
|
|
*/
|
|
append(name: string, value: string): void;
|
|
/** Deletes a header from a `Headers` object. */
|
|
delete(name: string): void;
|
|
/** Returns a `ByteString` sequence of all the values of a header within a
|
|
* `Headers` object with a given name.
|
|
*/
|
|
get(name: string): string | null;
|
|
/** Returns a boolean stating whether a `Headers` object contains a certain
|
|
* header.
|
|
*/
|
|
has(name: string): boolean;
|
|
/** Sets a new value for an existing header inside a Headers object, or adds
|
|
* the header if it does not already exist.
|
|
*/
|
|
set(name: string, value: string): void;
|
|
/** Returns an array containing the values of all `Set-Cookie` headers
|
|
* associated with a response.
|
|
*/
|
|
getSetCookie(): string[];
|
|
}
|
|
|
|
/** This Fetch API interface allows you to perform various actions on HTTP
|
|
* request and response headers. These actions include retrieving, setting,
|
|
* adding to, and removing. A Headers object has an associated header list,
|
|
* which is initially empty and consists of zero or more name and value pairs.
|
|
* You can add to this using methods like append() (see Examples). In all
|
|
* methods of this interface, header names are matched by case-insensitive byte
|
|
* sequence.
|
|
*
|
|
* @category Fetch
|
|
*/
|
|
declare var Headers: {
|
|
readonly prototype: Headers;
|
|
new (init?: HeadersInit): Headers;
|
|
};
|
|
|
|
/** @category Fetch */
|
|
type RequestInfo = Request | string;
|
|
/** @category Fetch */
|
|
type RequestCache =
|
|
| "default"
|
|
| "force-cache"
|
|
| "no-cache"
|
|
| "no-store"
|
|
| "only-if-cached"
|
|
| "reload";
|
|
/** @category Fetch */
|
|
type RequestCredentials = "include" | "omit" | "same-origin";
|
|
/** @category Fetch */
|
|
type RequestMode = "cors" | "navigate" | "no-cors" | "same-origin";
|
|
/** @category Fetch */
|
|
type RequestRedirect = "error" | "follow" | "manual";
|
|
/** @category Fetch */
|
|
type ReferrerPolicy =
|
|
| ""
|
|
| "no-referrer"
|
|
| "no-referrer-when-downgrade"
|
|
| "origin"
|
|
| "origin-when-cross-origin"
|
|
| "same-origin"
|
|
| "strict-origin"
|
|
| "strict-origin-when-cross-origin"
|
|
| "unsafe-url";
|
|
/** @category Fetch */
|
|
type BodyInit =
|
|
| Blob
|
|
| BufferSource
|
|
| FormData
|
|
| URLSearchParams
|
|
| ReadableStream<Uint8Array>
|
|
| Iterable<Uint8Array>
|
|
| AsyncIterable<Uint8Array>
|
|
| string;
|
|
/** @category Fetch */
|
|
type RequestDestination =
|
|
| ""
|
|
| "audio"
|
|
| "audioworklet"
|
|
| "document"
|
|
| "embed"
|
|
| "font"
|
|
| "image"
|
|
| "manifest"
|
|
| "object"
|
|
| "paintworklet"
|
|
| "report"
|
|
| "script"
|
|
| "sharedworker"
|
|
| "style"
|
|
| "track"
|
|
| "video"
|
|
| "worker"
|
|
| "xslt";
|
|
|
|
/** @category Fetch */
|
|
interface RequestInit {
|
|
/**
|
|
* A BodyInit object or null to set request's body.
|
|
*/
|
|
body?: BodyInit | null;
|
|
/**
|
|
* A string indicating how the request will interact with the browser's cache
|
|
* to set request's cache.
|
|
*/
|
|
cache?: RequestCache;
|
|
/**
|
|
* A string indicating whether credentials will be sent with the request
|
|
* always, never, or only when sent to a same-origin URL. Sets request's
|
|
* credentials.
|
|
*/
|
|
credentials?: RequestCredentials;
|
|
/**
|
|
* A Headers object, an object literal, or an array of two-item arrays to set
|
|
* request's headers.
|
|
*/
|
|
headers?: HeadersInit;
|
|
/**
|
|
* A cryptographic hash of the resource to be fetched by request. Sets
|
|
* request's integrity.
|
|
*/
|
|
integrity?: string;
|
|
/**
|
|
* A boolean to set request's keepalive.
|
|
*/
|
|
keepalive?: boolean;
|
|
/**
|
|
* A string to set request's method.
|
|
*/
|
|
method?: string;
|
|
/**
|
|
* A string to indicate whether the request will use CORS, or will be
|
|
* restricted to same-origin URLs. Sets request's mode.
|
|
*/
|
|
mode?: RequestMode;
|
|
/**
|
|
* A string indicating whether request follows redirects, results in an error
|
|
* upon encountering a redirect, or returns the redirect (in an opaque
|
|
* fashion). Sets request's redirect.
|
|
*/
|
|
redirect?: RequestRedirect;
|
|
/**
|
|
* A string whose value is a same-origin URL, "about:client", or the empty
|
|
* string, to set request's referrer.
|
|
*/
|
|
referrer?: string;
|
|
/**
|
|
* A referrer policy to set request's referrerPolicy.
|
|
*/
|
|
referrerPolicy?: ReferrerPolicy;
|
|
/**
|
|
* An AbortSignal to set request's signal.
|
|
*/
|
|
signal?: AbortSignal | null;
|
|
/**
|
|
* Can only be null. Used to disassociate request from any Window.
|
|
*/
|
|
window?: any;
|
|
}
|
|
|
|
/** This Fetch API interface represents a resource request.
|
|
*
|
|
* @category Fetch
|
|
*/
|
|
interface Request extends Body {
|
|
/**
|
|
* Returns the cache mode associated with request, which is a string
|
|
* indicating how the request will interact with the browser's cache when
|
|
* fetching.
|
|
*/
|
|
readonly cache: RequestCache;
|
|
/**
|
|
* Returns the credentials mode associated with request, which is a string
|
|
* indicating whether credentials will be sent with the request always, never,
|
|
* or only when sent to a same-origin URL.
|
|
*/
|
|
readonly credentials: RequestCredentials;
|
|
/**
|
|
* Returns the kind of resource requested by request, e.g., "document" or "script".
|
|
*/
|
|
readonly destination: RequestDestination;
|
|
/**
|
|
* Returns a Headers object consisting of the headers associated with request.
|
|
* Note that headers added in the network layer by the user agent will not be
|
|
* accounted for in this object, e.g., the "Host" header.
|
|
*/
|
|
readonly headers: Headers;
|
|
/**
|
|
* Returns request's subresource integrity metadata, which is a cryptographic
|
|
* hash of the resource being fetched. Its value consists of multiple hashes
|
|
* separated by whitespace. [SRI]
|
|
*/
|
|
readonly integrity: string;
|
|
/**
|
|
* Returns a boolean indicating whether or not request is for a history
|
|
* navigation (a.k.a. back-forward navigation).
|
|
*/
|
|
readonly isHistoryNavigation: boolean;
|
|
/**
|
|
* Returns a boolean indicating whether or not request is for a reload
|
|
* navigation.
|
|
*/
|
|
readonly isReloadNavigation: boolean;
|
|
/**
|
|
* Returns a boolean indicating whether or not request can outlive the global
|
|
* in which it was created.
|
|
*/
|
|
readonly keepalive: boolean;
|
|
/**
|
|
* Returns request's HTTP method, which is "GET" by default.
|
|
*/
|
|
readonly method: string;
|
|
/**
|
|
* Returns the mode associated with request, which is a string indicating
|
|
* whether the request will use CORS, or will be restricted to same-origin
|
|
* URLs.
|
|
*/
|
|
readonly mode: RequestMode;
|
|
/**
|
|
* Returns the redirect mode associated with request, which is a string
|
|
* indicating how redirects for the request will be handled during fetching. A
|
|
* request will follow redirects by default.
|
|
*/
|
|
readonly redirect: RequestRedirect;
|
|
/**
|
|
* Returns the referrer of request. Its value can be a same-origin URL if
|
|
* explicitly set in init, the empty string to indicate no referrer, and
|
|
* "about:client" when defaulting to the global's default. This is used during
|
|
* fetching to determine the value of the `Referer` header of the request
|
|
* being made.
|
|
*/
|
|
readonly referrer: string;
|
|
/**
|
|
* Returns the referrer policy associated with request. This is used during
|
|
* fetching to compute the value of the request's referrer.
|
|
*/
|
|
readonly referrerPolicy: ReferrerPolicy;
|
|
/**
|
|
* Returns the signal associated with request, which is an AbortSignal object
|
|
* indicating whether or not request has been aborted, and its abort event
|
|
* handler.
|
|
*/
|
|
readonly signal: AbortSignal;
|
|
/**
|
|
* Returns the URL of request as a string.
|
|
*/
|
|
readonly url: string;
|
|
clone(): Request;
|
|
}
|
|
|
|
/** This Fetch API interface represents a resource request.
|
|
*
|
|
* @category Fetch
|
|
*/
|
|
declare var Request: {
|
|
readonly prototype: Request;
|
|
new (input: RequestInfo | URL, init?: RequestInit): Request;
|
|
};
|
|
|
|
/** @category Fetch */
|
|
interface ResponseInit {
|
|
headers?: HeadersInit;
|
|
status?: number;
|
|
statusText?: string;
|
|
}
|
|
|
|
/** @category Fetch */
|
|
type ResponseType =
|
|
| "basic"
|
|
| "cors"
|
|
| "default"
|
|
| "error"
|
|
| "opaque"
|
|
| "opaqueredirect";
|
|
|
|
/** This Fetch API interface represents the response to a request.
|
|
*
|
|
* @category Fetch
|
|
*/
|
|
interface Response extends Body {
|
|
readonly headers: Headers;
|
|
readonly ok: boolean;
|
|
readonly redirected: boolean;
|
|
readonly status: number;
|
|
readonly statusText: string;
|
|
readonly type: ResponseType;
|
|
readonly url: string;
|
|
clone(): Response;
|
|
}
|
|
|
|
/** This Fetch API interface represents the response to a request.
|
|
*
|
|
* @category Fetch
|
|
*/
|
|
declare var Response: {
|
|
readonly prototype: Response;
|
|
new (body?: BodyInit | null, init?: ResponseInit): Response;
|
|
json(data: unknown, init?: ResponseInit): Response;
|
|
error(): Response;
|
|
redirect(url: string | URL, status?: number): Response;
|
|
};
|
|
|
|
/** Fetch a resource from the network. It returns a `Promise` that resolves to the
|
|
* `Response` to that `Request`, whether it is successful or not.
|
|
*
|
|
* ```ts
|
|
* const response = await fetch("http://my.json.host/data.json");
|
|
* console.log(response.status); // e.g. 200
|
|
* console.log(response.statusText); // e.g. "OK"
|
|
* const jsonData = await response.json();
|
|
* ```
|
|
*
|
|
* @tags allow-net, allow-read
|
|
* @category Fetch
|
|
*/
|
|
declare function fetch(
|
|
input: URL | Request | string,
|
|
init?: RequestInit,
|
|
): Promise<Response>;
|
|
|
|
/**
|
|
* @category Fetch
|
|
*/
|
|
interface EventSourceInit {
|
|
withCredentials?: boolean;
|
|
}
|
|
|
|
/**
|
|
* @category Fetch
|
|
*/
|
|
interface EventSourceEventMap {
|
|
"error": Event;
|
|
"message": MessageEvent;
|
|
"open": Event;
|
|
}
|
|
|
|
/**
|
|
* @category Fetch
|
|
*/
|
|
interface EventSource extends EventTarget {
|
|
onerror: ((this: EventSource, ev: Event) => any) | null;
|
|
onmessage: ((this: EventSource, ev: MessageEvent) => any) | null;
|
|
onopen: ((this: EventSource, ev: Event) => any) | null;
|
|
/**
|
|
* Returns the state of this EventSource object's connection. It can have the values described below.
|
|
*/
|
|
readonly readyState: number;
|
|
/**
|
|
* Returns the URL providing the event stream.
|
|
*/
|
|
readonly url: string;
|
|
/**
|
|
* Returns true if the credentials mode for connection requests to the URL providing the event stream is set to "include", and false otherwise.
|
|
*/
|
|
readonly withCredentials: boolean;
|
|
/**
|
|
* Aborts any instances of the fetch algorithm started for this EventSource object, and sets the readyState attribute to CLOSED.
|
|
*/
|
|
close(): void;
|
|
readonly CONNECTING: 0;
|
|
readonly OPEN: 1;
|
|
readonly CLOSED: 2;
|
|
addEventListener<K extends keyof EventSourceEventMap>(
|
|
type: K,
|
|
listener: (this: EventSource, ev: EventSourceEventMap[K]) => any,
|
|
options?: boolean | AddEventListenerOptions,
|
|
): void;
|
|
addEventListener(
|
|
type: string,
|
|
listener: (this: EventSource, event: MessageEvent) => any,
|
|
options?: boolean | AddEventListenerOptions,
|
|
): void;
|
|
addEventListener(
|
|
type: string,
|
|
listener: EventListenerOrEventListenerObject,
|
|
options?: boolean | AddEventListenerOptions,
|
|
): void;
|
|
removeEventListener<K extends keyof EventSourceEventMap>(
|
|
type: K,
|
|
listener: (this: EventSource, ev: EventSourceEventMap[K]) => any,
|
|
options?: boolean | EventListenerOptions,
|
|
): void;
|
|
removeEventListener(
|
|
type: string,
|
|
listener: (this: EventSource, event: MessageEvent) => any,
|
|
options?: boolean | EventListenerOptions,
|
|
): void;
|
|
removeEventListener(
|
|
type: string,
|
|
listener: EventListenerOrEventListenerObject,
|
|
options?: boolean | EventListenerOptions,
|
|
): void;
|
|
}
|
|
|
|
/**
|
|
* @category Fetch
|
|
*/
|
|
declare var EventSource: {
|
|
prototype: EventSource;
|
|
new (url: string | URL, eventSourceInitDict?: EventSourceInit): EventSource;
|
|
readonly CONNECTING: 0;
|
|
readonly OPEN: 1;
|
|
readonly CLOSED: 2;
|
|
};
|