Skip to main content
Module

std/http/negotiation.ts

Deno standard library
Go to Latest
File
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
/** * Contains the functions {@linkcode accepts}, {@linkcode acceptsEncodings}, and * {@linkcode acceptsLanguages} to provide content negotiation capabilities. * * @module */
import { preferredEncodings } from "./_negotiation/encoding.ts";import { preferredLanguages } from "./_negotiation/language.ts";import { preferredMediaTypes } from "./_negotiation/media_type.ts";
export type Request = { headers: { get(key: string): string | null; };};
/** Returns an array of media types accepted by the request, in order of * preference. If there are no media types supplied in the request, then any * media type selector will be returned. */export function accepts(request: Request): string[];/** For a given set of media types, return the best match accepted in the * request. If no media type matches, then the function returns `undefined`. */export function accepts( request: Request, ...types: string[]): string | undefined;export function accepts( request: Request, ...types: string[]): string | string[] | undefined { const accept = request.headers.get("accept"); return types.length ? accept ? preferredMediaTypes(accept, types)[0] : types[0] : accept ? preferredMediaTypes(accept) : ["*/*"];}
/** Returns an array of content encodings accepted by the request, in order of * preference. If there are no encoding supplied in the request, then `["*"]` * is returned, implying any encoding is accepted. */export function acceptsEncodings(request: Request): string[];/** For a given set of content encodings, return the best match accepted in the * request. If no content encodings match, then the function returns * `undefined`. * * **NOTE:** You should always supply `identity` as one of the encodings * to ensure that there is a match when the `Accept-Encoding` header is part * of the request. */export function acceptsEncodings( request: Request, ...encodings: string[]): string | undefined;export function acceptsEncodings( request: Request, ...encodings: string[]): string | string[] | undefined { const acceptEncoding = request.headers.get("accept-encoding"); return encodings.length ? acceptEncoding ? preferredEncodings(acceptEncoding, encodings)[0] : encodings[0] : acceptEncoding ? preferredEncodings(acceptEncoding) : ["*"];}
/** Returns an array of languages accepted by the request, in order of * preference. If there are no languages supplied in the request, then `["*"]` * is returned, imply any language is accepted. */export function acceptsLanguages(request: Request): string[];/** For a given set of languages, return the best match accepted in the request. * If no languages match, then the function returns `undefined`. */export function acceptsLanguages( request: Request, ...langs: string[]): string | undefined;export function acceptsLanguages( request: Request, ...langs: string[]): string | string[] | undefined { const acceptLanguage = request.headers.get("accept-language"); return langs.length ? acceptLanguage ? preferredLanguages(acceptLanguage, langs)[0] : langs[0] : acceptLanguage ? preferredLanguages(acceptLanguage) : ["*"];}