import { Get, Has, KeysOfValues, Lookup, Values } from './common.js'; import { ContentFormat, MimeType, OperationDefinition, OperationType, OperationTypes, ResponseCode, ResponsesType } from './operations.js'; export type WithMimeTypeGlobs = M | MimeTypePrefixes | '*/*'; export declare const FALLBACK_MIME_TYPE = "*/*"; export declare const FORM_MIME_TYPE = "application/x-www-form-urlencoded"; export declare const JSON_MIME_TYPE = "application/json"; export declare const JSON_SEQ_MIME_TYPE = "application/json-seq"; export declare const OCTET_STREAM_MIME_TIME = "application/octet-stream"; export declare const MULTIPART_MIME_TYPE = "multipart/*"; export declare const MULTIPART_FORM_MIME_TYPE = "multipart/form-data"; export declare const PLAIN_MIME_TYPE = "text/plain"; export declare const TEXT_MIME_TYPE = "text/*"; export type MimeTypePrefixes = M extends `${infer P}/${infer _S}` ? `${P}/*` : never; export type SplitMimeTypes = G extends `${infer G1}, ${infer G2}` ? ExtractMimeType | SplitMimeTypes : ExtractMimeType; type ExtractMimeType = G extends `${infer M};${string}` ? M : G; export type ValuesMatchingMimeTypes = Values<{ [M in keyof O & MimeType]: SplitMimeTypes & WithMimeTypeGlobs extends never ? never : O[M]; }>; export declare function matchingContentType(exact: MimeType, accepted: Iterable): MimeType | undefined; export declare class ByMimeType { private readonly entries; private constructor(); static create(fallback: V): ByMimeType; add(key: MimeType, val: V): void; addAll(items: Record | undefined): void; getBest(key: MimeType): V; } export type BodyContent = Exclude, undefined>['content']; export type BodyMimeTypes = BodyContent extends never ? never : keyof BodyContent & MimeType; export type AllBodyMimeTypes = Values<{ [K in keyof O]: BodyMimeTypes; }>; export type BodiesMatchingMimeType, G extends MimeType> = Values<{ [K in keyof O]: ValuesMatchingMimeTypes, G>; }>; export type AllResponseMimeTypes> = Values<{ [K in keyof O]: ResponseMimeTypes; }> & MimeType; export type ResponseMimeTypes = KeysOfValues<{ [P in C]: Get; }> & MimeType; export type AllResponsesMatchingMimeType = Values<{ [K in keyof O]: ResponsesMatchingMimeType; }>; export type ResponsesMatchingMimeType = Values<{ [C in keyof R]: R[C] extends Has<'content', infer O> ? ValuesMatchingMimeTypes : never; }>; export declare class ResponseClauseMatcher { private readonly data; private constructor(); static create(responses: OperationDefinition['responses']): ResponseClauseMatcher; getBest(status: number): ResponseClause; private getBestCode; acceptable(accepted: Iterable): boolean; } /** * If returns true and `value` is not-null, it is guaranteed that `value` is a * key in `declared`. */ export declare function isResponseTypeValid(args: { readonly value: MimeType | undefined; readonly declared: ReadonlyMap | undefined; readonly accepted: ReadonlySet; }): boolean; export declare function acceptedMimeTypes(header: string): ReadonlySet; export interface ResponseClause { readonly code: ResponseCode; readonly declared?: ReadonlyMap; } export {};