-
Notifications
You must be signed in to change notification settings - Fork 3k
/
types.ts
227 lines (195 loc) · 7.82 KB
/
types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
import { PartialObserver } from '../types';
/**
* Valid Ajax direction types. Prefixes the event `type` in the
* {@link AjaxResponse} object with "upload_" for events related
* to uploading and "download_" for events related to downloading.
*/
export type AjaxDirection = 'upload' | 'download';
export type ProgressEventType = 'loadstart' | 'progress' | 'load';
export type AjaxResponseType = `${AjaxDirection}_${ProgressEventType}`;
/**
* The object containing values RxJS used to make the HTTP request.
*
* This is provided in {@link AjaxError} instances as the `request`
* object.
*/
export interface AjaxRequest {
/**
* The URL requested.
*/
url: string;
/**
* The body to send over the HTTP request.
*/
body?: any;
/**
* The HTTP method used to make the HTTP request.
*/
method: string;
/**
* Whether or not the request was made asynchronously.
*/
async: boolean;
/**
* The headers sent over the HTTP request.
*/
headers: Readonly<Record<string, any>>;
/**
* The timeout value used for the HTTP request.
* Note: this is only honored if the request is asynchronous (`async` is `true`).
*/
timeout: number;
/**
* The user credentials user name sent with the HTTP request.
*/
user?: string;
/**
* The user credentials password sent with the HTTP request.
*/
password?: string;
/**
* Whether or not the request was a CORS request.
*/
crossDomain: boolean;
/**
* Whether or not a CORS request was sent with credentials.
* If `false`, will also ignore cookies in the CORS response.
*/
withCredentials: boolean;
/**
* The [`responseType`](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType) set before sending the request.
*/
responseType: XMLHttpRequestResponseType;
}
/**
* Configuration for the {@link ajax} creation function.
*/
export interface AjaxConfig {
/** The address of the resource to request via HTTP. */
url: string;
/**
* The body of the HTTP request to send.
*
* This is serialized, by default, based off of the value of the `"content-type"` header.
* For example, if the `"content-type"` is `"application/json"`, the body will be serialized
* as JSON. If the `"content-type"` is `"application/x-www-form-urlencoded"`, whatever object passed
* to the body will be serialized as URL, using key-value pairs based off of the keys and values of the object.
* In all other cases, the body will be passed directly.
*/
body?: any;
/**
* Whether or not to send the request asynchronously. Defaults to `true`.
* If set to `false`, this will block the thread until the AJAX request responds.
*/
async?: boolean;
/**
* The HTTP Method to use for the request. Defaults to "GET".
*/
method?: string;
/**
* The HTTP headers to apply.
*
* Note that, by default, RxJS will add the following headers under certain conditions:
*
* 1. If the `"content-type"` header is **NOT** set, and the `body` is [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData),
* a `"content-type"` of `"application/x-www-form-urlencoded; charset=UTF-8"` will be set automatically.
* 2. If the `"x-requested-with"` header is **NOT** set, and the `crossDomain` configuration property is **NOT** explicitly set to `true`,
* (meaning it is not a CORS request), a `"x-requested-with"` header with a value of `"XMLHttpRequest"` will be set automatically.
* This header is generally meaningless, and is set by libraries and frameworks using `XMLHttpRequest` to make HTTP requests.
*/
headers?: Readonly<Record<string, any>>;
/**
* The time to wait before causing the underlying XMLHttpRequest to timeout. This is only honored if the
* `async` configuration setting is unset or set to `true`. Defaults to `0`, which is idiomatic for "never timeout".
*/
timeout?: number;
/** The user credentials user name to send with the HTTP request */
user?: string;
/** The user credentials password to send with the HTTP request*/
password?: string;
/**
* Whether or not to send the HTTP request as a CORS request.
* Defaults to `false`.
*/
crossDomain?: boolean;
/**
* To send user credentials in a CORS request, set to `true`. To exclude user credentials from
* a CORS request, _OR_ when cookies are to be ignored by the CORS response, set to `false`.
*
* Defaults to `false`.
*/
withCredentials?: boolean;
/**
* The name of your site's XSRF cookie.
*/
xsrfCookieName?: string;
/**
* The name of a custom header that you can use to send your XSRF cookie.
*/
xsrfHeaderName?: string;
/**
* Can be set to change the response type.
* Valid values are `"arraybuffer"`, `"blob"`, `"document"`, `"json"`, and `"text"`.
* Note that the type of `"document"` (such as an XML document) is ignored if the global context is
* not `Window`.
*
* Defaults to `"json"`.
*/
responseType?: XMLHttpRequestResponseType;
/**
* An optional factory used to create the XMLHttpRequest object used to make the AJAX request.
* This is useful in environments that lack `XMLHttpRequest`, or in situations where you
* wish to override the default `XMLHttpRequest` for some reason.
*
* If not provided, the `XMLHttpRequest` in global scope will be used.
*
* NOTE: This AJAX implementation relies on the built-in serialization and setting
* of Content-Type headers that is provided by standards-compliant XMLHttpRequest implementations,
* be sure any implementation you use meets that standard.
*/
createXHR?: () => XMLHttpRequest;
/**
* An observer for watching the upload progress of an HTTP request. Will
* emit progress events, and completes on the final upload load event, will error for
* any XHR error or timeout.
*
* This will **not** error for errored status codes. Rather, it will always _complete_ when
* the HTTP response comes back.
*
* @deprecated If you're looking for progress events, use {@link includeDownloadProgress} and
* {@link includeUploadProgress} instead. Will be removed in v8.
*/
progressSubscriber?: PartialObserver<ProgressEvent>;
/**
* If `true`, will emit all download progress and load complete events as {@link AjaxResponse}
* from the observable. The final download event will also be emitted as a {@link AjaxResponse}.
*
* If both this and {@link includeUploadProgress} are `false`, then only the {@link AjaxResponse} will
* be emitted from the resulting observable.
*/
includeDownloadProgress?: boolean;
/**
* If `true`, will emit all upload progress and load complete events as {@link AjaxResponse}
* from the observable. The final download event will also be emitted as a {@link AjaxResponse}.
*
* If both this and {@link includeDownloadProgress} are `false`, then only the {@link AjaxResponse} will
* be emitted from the resulting observable.
*/
includeUploadProgress?: boolean;
/**
* Query string parameters to add to the URL in the request.
* <em>This will require a polyfill for `URL` and `URLSearchParams` in Internet Explorer!</em>
*
* Accepts either a query string, a `URLSearchParams` object, a dictionary of key/value pairs, or an
* array of key/value entry tuples. (Essentially, it takes anything that `new URLSearchParams` would normally take).
*
* If, for some reason you have a query string in the `url` argument, this will append to the query string in the url,
* but it will also overwrite the value of any keys that are an exact match. In other words, a url of `/test?a=1&b=2`,
* with queryParams of `{ b: 5, c: 6 }` will result in a url of roughly `/test?a=1&b=5&c=6`.
*/
queryParams?:
| string
| URLSearchParams
| Record<string, string | number | boolean | string[] | number[] | boolean[]>
| [string, string | number | boolean | string[] | number[] | boolean[]][];
}