import type { AjaxType } from './constant'; import type { Writable } from 'type-fest'; export type { AjaxType }; export type ActionType = 'inject' | 'uninject'; interface BaseResponse extends Writable>, Pick { finalUrl: string; } export interface XhrResponse extends Writable> { } export interface FetchResponse extends Pick { text: string; arrayBuffer: ArrayBuffer; blob: Blob; formData: FormData; json: any; mockError?: Error | string; } export interface AjaxResponse extends BaseResponse, Partial { } export interface StreamChunk { text: string; raw: Uint8Array; index: number; timestamp: number; } export interface XhrRequest extends Partial> { } type XhrRequestBody = Document | XMLHttpRequestBodyInit | null; type FetchRequestBody = BodyInit | null; export interface AjaxInterceptorRequest extends XhrRequest { type: AjaxType; method: string; url: string; headers: Headers; data: XhrRequestBody | FetchRequestBody; response: (response: AjaxResponse) => void | Promise; onStreamChunk?: (chunk: StreamChunk) => string | void | Promise; } export interface HookFunction { (request: AjaxInterceptorRequest): Promise | AjaxInterceptorRequest | void; } export interface AjaxInterceptorCreateInstanceOptions { [key: string]: any; }