import "./_dnt.polyfills.js"; import { type Middleware } from "./deps.js"; import type { Precondition } from "./types.js"; export type { EvaluateCallback, EvaluateContext, Precondition, RespondCallback, } from "./types.js"; /** Callback for selecting presentation data. */ export interface SelectPresentationCallback { (request: Request): Response | Promise; } /** Middleware options. */ export interface Options { /** Apply precondition list. */ readonly preconditions?: Iterable; } /** HTTP Conditional Requests middleware factory. * * @example * ```ts * import conditionalRequests from "https://deno.land/x/http_conditional_requests@$VERSION/mod.ts"; * import { assertEquals } from "https://deno.land/std/testing/asserts.ts"; * import { assertSpyCalls, spy } from "https://deno.land/std/testing/mock.ts"; * * const selectedRepresentation = new Response("", { * headers: { etag: "" }, * }); * const selectRepresentation = spy(() => selectedRepresentation); * const middleware = conditionalRequests(selectRepresentation); * const conditionalRequest = new Request("", { * headers: { "if-none-match": "" }, * }); * const handler = spy(() => selectedRepresentation); * * const response = await middleware(conditionalRequest, handler); * * assertSpyCalls(handler, 0); * assertSpyCalls(selectRepresentation, 1); * assertEquals(response.status, 304); * ``` */ export default function conditionalRequests(selectRepresentation: SelectPresentationCallback, options?: Options): Middleware;