import { NuxtIslandContext, NuxtIslandResponse, NuxtRenderChunkContext, NuxtRenderCloseContext, NuxtRenderHTMLContext, NuxtRenderRouteContext } from "../app/types.js";
import { NuxtRequestEvent, NuxtServerHooks } from "nuxt/schema";
//#region src/server/hooks.d.ts
/**
 * The return type of a server hook handler.
 *
 * @since 4.6.0
 */
export type ServerHookResult = void | Promise<void>;
/**
 * The hooks the Nuxt renderer calls.
 *
 * @since 4.6.0
 */
export interface NuxtServerRendererHooks {
  'render:route': (context: NuxtRenderRouteContext, extra: {
    event: NuxtRequestEvent;
  }) => ServerHookResult;
  'render:html': (context: NuxtRenderHTMLContext, extra: {
    event: NuxtRequestEvent;
    streaming?: boolean;
  }) => ServerHookResult;
  'render:html:chunk': (context: NuxtRenderChunkContext, extra: {
    event: NuxtRequestEvent;
  }) => ServerHookResult;
  'render:html:close': (context: NuxtRenderCloseContext, extra: {
    event: NuxtRequestEvent;
  }) => ServerHookResult;
  'render:island': (response: NuxtIslandResponse, extra: {
    event: NuxtRequestEvent;
    islandContext: NuxtIslandContext;
  }) => ServerHookResult;
}
type HookMap<Hooks> = { [Name in keyof Hooks]: (...args: any[]) => ServerHookResult; };
/**
 * Server hooks. Handlers run serially, in registration order.
 *
 * @since 4.6.0
 */
export interface ServerHookable<Hooks extends HookMap<Hooks>> {
  /** Returns a function that removes the handler. */
  hook<Name extends keyof Hooks & string>(name: Name, handler: Hooks[Name]): () => void;
  removeHook<Name extends keyof Hooks & string>(name: Name, handler: Hooks[Name]): void;
  callHook<Name extends keyof Hooks & string>(name: Name, ...args: Parameters<Hooks[Name]>): Promise<void> | void;
}
/**
 * The server runtime hooks: renderer hooks and those declared on {@link NuxtServerHooks}.
 *
 * @example
 * ```ts
 * // server/plugins/robots.ts
 * useServerHooks().hook('render:html', (html, { event }) => {
 *   html.head.push('<meta name="robots" content="noindex">')
 * })
 * ```
 *
 * @since 4.6.0
 */
export declare function useServerHooks(): ServerHookable<NuxtServerHooks & NuxtServerRendererHooks>;
//#endregion
export {};