import { AppLoadContext as AppLoadContext$1, ServerBuild as ServerBuild$1 } from "react-router";
import { FastifyReply, FastifyRequest, RouteGenericInterface, RouteShorthandOptions } from "fastify";
import * as http from "node:http";
import * as http2 from "node:http2";
import * as https from "node:https";
import { AppLoadContext as AppLoadContext$2, ServerBuild as ServerBuild$2 } from "@remix-run/node";
import { FastifyStaticOptions } from "@fastify/static";
import { cacheHeader } from "pretty-cache-header";
import { InlineConfig } from "vite";

//#region src/shared.d.ts
type HttpServer = http.Server | https.Server | http2.Http2Server | http2.Http2SecureServer;
type RequestHandler<Server extends HttpServer> = (request: FastifyRequest<RouteGenericInterface, Server>, reply: FastifyReply<RouteGenericInterface, Server>) => Promise<void>;
/**
 * A function that returns the value to use as `context` in route `loader` and
 * `action` functions.
 *
 * You can think of this as an escape hatch that allows you to pass
 * environment/platform-specific values through to your loader/action.
 */
type GetLoadContextFunction<Server extends HttpServer, AppLoadContext> = (request: FastifyRequest<RouteGenericInterface, Server>, reply: FastifyReply<RouteGenericInterface, Server>) => Promise<AppLoadContext> | AppLoadContext;
//#endregion
//#region src/servers/react-router.d.ts
type GetLoadContextFunction$2<Server extends HttpServer = HttpServer> = GetLoadContextFunction<Server, AppLoadContext$1>;
/**
 * Returns a request handler for Fastify that serves the response using Remix.
 */
declare function createReactRouterRequestHandler<Server extends HttpServer>({
  build,
  getLoadContext,
  mode
}: {
  build: ServerBuild$1 | (() => ServerBuild$1 | Promise<ServerBuild$1>);
  getLoadContext?: GetLoadContextFunction$2<Server>;
  mode?: string;
}): RequestHandler<Server>;
//#endregion
//#region src/servers/remix.d.ts
type GetLoadContextFunction$1<Server extends HttpServer = HttpServer> = GetLoadContextFunction<Server, AppLoadContext$2>;
/**
 * Returns a request handler for Fastify that serves the response using Remix.
 */
declare function createRemixRequestHandler<Server extends HttpServer>({
  build,
  getLoadContext,
  mode
}: {
  build: ServerBuild$2 | (() => ServerBuild$2 | Promise<ServerBuild$2>);
  getLoadContext?: GetLoadContextFunction$1<Server>;
  mode?: string;
}): RequestHandler<Server>;
//#endregion
//#region src/plugins/index.d.ts
type PluginOptions<Server extends HttpServer = HttpServer, AppLoadContext = unknown, ServerBuild = unknown> = {
  /**
   * The base path for the Remix app.
   * match the `basename` in your Vite config.
   * @default "/"
   */
  basename?: string;
  /**
   * The directory where the Remix app is built.
   * This should match the `buildDirectory` directory in your Remix config.
   * @default "build"
   */
  buildDirectory?: string;
  /**
   * The Remix server output filename
   * This should match the `serverBuildFile` filename in your Remix config.
   * @default "index.js"
   */
  serverBuildFile?: string;
  /**
   * A function that returns the value to use as `context` in route `loader` and
   * `action` functions.
   *
   * You can think of this as an escape hatch that allows you to pass
   * environment/platform-specific values through to your loader/action.
   */
  getLoadContext?: GetLoadContextFunction<Server, AppLoadContext>;
  mode?: string;
  /**
   * Options to pass to the Vite server in development.
   */
  viteOptions?: InlineConfig;
  /**
   * Options to pass to the `@fastify/static` plugin for serving compiled assets in production.
   */
  fastifyStaticOptions?: FastifyStaticOptions;
  /**
   * The cache control options to use for build assets in production.
   * uses `pretty-cache-header` under the hood.
   * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
   * @default { public: true, maxAge: '1 year', immutable: true }
   */
  assetCacheControl?: Parameters<typeof cacheHeader>[0];
  /**
   * The cache control options to use for other assets in production.
   * uses `pretty-cache-header` under the hood.
   * @link https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
   * @default { public: true, maxAge: '1 hour' }
   */
  defaultCacheControl?: Parameters<typeof cacheHeader>[0];
  /**
   * The Remix server build to use in production. Use this only if the default approach doesn't work for you.
   *
   * If not provided, it will be loaded using `import()` with the server build path provided in the options.
   */
  productionServerBuild?: ServerBuild | (() => ServerBuild | Promise<ServerBuild>);
  childServerOptions?: RouteShorthandOptions<Server>;
};
//#endregion
export { GetLoadContextFunction, HttpServer, PluginOptions, RequestHandler, createReactRouterRequestHandler, createRemixRequestHandler };
//# sourceMappingURL=index-BXZ8a1kB.d.cts.map