import { H3Event } from 'h3';

interface RenderResponse {
    body: string | unknown;
    statusCode: number;
    statusMessage: string;
    headers: Record<string, string>;
}

/**
 * Compresses the response with [zlib.gzip]{@link https://www.w3schools.com/nodejs/ref_zlib.asp}
 * @param { H3Event } event - A H3 event object.
 * @param { RenderResponse } response - A response object with body parameter.
 * @returns { Promise<void> }
 */
declare function useGZipCompression(event: H3Event, response: Partial<RenderResponse>): Promise<void>;
/**
 * Compresses the response with [zlib.deflate]{@link https://www.w3schools.com/nodejs/ref_zlib.asp}
 * @param { H3Event } event - A H3 event object.
 * @param { RenderResponse } response - A response object with body parameter.
 * @returns { Promise<void> }
 */
declare function useDeflateCompression(event: H3Event, response: Partial<RenderResponse>): Promise<void>;
/**
 * Compresses the response with [zlib.brotliCompress]{@link https://www.w3schools.com/nodejs/ref_zlib.asp}
 * @param { H3Event } event - A H3 event object.
 * @param { RenderResponse } response - A response object with body parameter.
 * @returns { Promise<void> }
 */
declare function useBrotliCompression(event: H3Event, response: Partial<RenderResponse>): Promise<void>;
/**
 * Compresses the response with [Zlib]{@link https://www.w3schools.com/nodejs/ref_zlib.asp}
 * by 'Accept-Encoding' header. Best is used first.
 * @param { H3Event } event - A H3 event object.
 * @param { RenderResponse } response - A response object with body parameter.
 * @returns { Promise<void> }
 */
declare function useCompression(event: H3Event, response: Partial<RenderResponse>): Promise<void>;

/**
 * Compresses the response with
 * [CompressionStream(gzip)]{@link https://developer.mozilla.org/en-US/docs/Web/API/CompressionStream}
 * @param event - A H3 event object.
 * @param response - A response object with body parameter.
 */
declare function useGZipCompressionStream(event: H3Event, response: Partial<RenderResponse>): Promise<void>;
/**
 * Compresses the response with
 * [CompressionStream(deflate)]{@link https://developer.mozilla.org/en-US/docs/Web/API/CompressionStream}
 * @param event - A H3 event object.
 * @param response - A response object with body parameter.
 */
declare function useDeflateCompressionStream(event: H3Event, response: Partial<RenderResponse>): Promise<void>;
/**
 * Compresses the response with
 * [CompressionStream]{@link https://developer.mozilla.org/en-US/docs/Web/API/CompressionStream}
 * by 'Accept-Encoding' header. Best is used first.
 * @param event - A H3 event object.
 * @param response - A response object with body parameter.
 */
declare function useCompressionStream(event: H3Event, response: Partial<RenderResponse>): Promise<void>;

export { useBrotliCompression, useCompression, useCompressionStream, useDeflateCompression, useDeflateCompressionStream, useGZipCompression, useGZipCompressionStream };
