75 lines
No EOL
2.4 KiB
JavaScript
75 lines
No EOL
2.4 KiB
JavaScript
export const supportsRequestStreams = (() => {
|
|
let duplexAccessed = false;
|
|
let hasContentType = false;
|
|
const supportsReadableStream = typeof globalThis.ReadableStream === 'function';
|
|
const supportsRequest = typeof globalThis.Request === 'function';
|
|
if (supportsReadableStream && supportsRequest) {
|
|
try {
|
|
hasContentType = new globalThis.Request('https://empty.invalid', {
|
|
body: new globalThis.ReadableStream(),
|
|
method: 'POST',
|
|
// @ts-expect-error - Types are outdated.
|
|
get duplex() {
|
|
duplexAccessed = true;
|
|
return 'half';
|
|
},
|
|
}).headers.has('Content-Type');
|
|
}
|
|
catch (error) {
|
|
// QQBrowser on iOS throws "unsupported BodyInit type" error (see issue #581)
|
|
if (error instanceof Error && error.message === 'unsupported BodyInit type') {
|
|
return false;
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
return duplexAccessed && !hasContentType;
|
|
})();
|
|
export const supportsAbortController = typeof globalThis.AbortController === 'function';
|
|
export const supportsResponseStreams = typeof globalThis.ReadableStream === 'function';
|
|
export const supportsFormData = typeof globalThis.FormData === 'function';
|
|
export const requestMethods = ['get', 'post', 'put', 'patch', 'head', 'delete'];
|
|
const validate = () => undefined;
|
|
validate();
|
|
export const responseTypes = {
|
|
json: 'application/json',
|
|
text: 'text/*',
|
|
formData: 'multipart/form-data',
|
|
arrayBuffer: '*/*',
|
|
blob: '*/*',
|
|
};
|
|
// The maximum value of a 32bit int (see issue #117)
|
|
export const maxSafeTimeout = 2_147_483_647;
|
|
export const stop = Symbol('stop');
|
|
export const kyOptionKeys = {
|
|
json: true,
|
|
parseJson: true,
|
|
stringifyJson: true,
|
|
searchParams: true,
|
|
prefixUrl: true,
|
|
retry: true,
|
|
timeout: true,
|
|
hooks: true,
|
|
throwHttpErrors: true,
|
|
onDownloadProgress: true,
|
|
fetch: true,
|
|
};
|
|
export const requestOptionsRegistry = {
|
|
method: true,
|
|
headers: true,
|
|
body: true,
|
|
mode: true,
|
|
credentials: true,
|
|
cache: true,
|
|
redirect: true,
|
|
referrer: true,
|
|
referrerPolicy: true,
|
|
integrity: true,
|
|
keepalive: true,
|
|
signal: true,
|
|
window: true,
|
|
dispatcher: true,
|
|
duplex: true,
|
|
priority: true,
|
|
};
|
|
//# sourceMappingURL=constants.js.map
|