UNPKG

ky

Version:

Tiny and elegant HTTP client based on the Fetch API

82 lines 2.96 kB
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 supportsAbortSignal = typeof globalThis.AbortSignal === 'function' && typeof globalThis.AbortSignal.any === '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: '*/*', // Supported in modern Fetch implementations (for example, browsers and recent Node.js/undici). // We still feature-check at runtime before exposing the shortcut. bytes: '*/*', }; // The maximum value of a 32bit int (see issue #117) export const maxSafeTimeout = 2_147_483_647; // Size in bytes of a typical form boundary, used to help estimate upload size export const usualFormBoundarySize = new TextEncoder().encode('------WebKitFormBoundaryaxpyiPgbbPti10Rw').length; 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, onUploadProgress: 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