import { OpenAPIV3 } from 'openapi-types';
import { c as TypeOptions, H as HttpMethods } from './openapi-metadata.D34x6L94.mjs';
import { SetOptional } from 'type-fest';

type OperationBodyMetadata = Omit<OpenAPIV3.RequestBodyObject, "content"> & {
    mediaType: string;
} & TypeOptions;
declare const OperationBodyMetadataKey: unique symbol;
declare const OperationBodyMetadataStorage: {
    defineMetadata: (object: Object, metadata: OperationBodyMetadata, propertyKey?: string | symbol) => void;
    getMetadata: (object: Object, propertyKey?: string | symbol, withParent?: boolean) => OperationBodyMetadata;
    mergeMetadata: (object: Object, metadata: OperationBodyMetadata, propertyKey?: string | symbol) => OperationBodyMetadata;
};

type OperationParameterMetadata = Omit<OpenAPIV3.ParameterObject, "in" | "schema"> & {
    name: string;
    in: "path" | "query" | "header" | "cookie";
} & Partial<TypeOptions>;
declare const OperationParameterMetadataKey: unique symbol;
declare const OperationParameterMetadataStorage: {
    defineMetadata: (object: Object, metadata: OperationParameterMetadata[], propertyKey?: string | symbol) => void;
    getMetadata: (object: Object, propertyKey?: string | symbol, withParent?: boolean) => OperationParameterMetadata[];
    mergeMetadata: (object: Object, metadata: OperationParameterMetadata[], propertyKey?: string | symbol) => OperationParameterMetadata[];
};

type OperationMetadata = Omit<OpenAPIV3.OperationObject, "responses"> & {
    /**
     * Operation path.
     * Can include parameters.
     */
    path?: string;
    /**
     * Available methods for this operation.
     */
    methods?: HttpMethods[];
};
declare const OperationMetadataKey: unique symbol;
declare const OperationMetadataStorage: {
    defineMetadata: (object: Object, metadata: OperationMetadata, propertyKey?: string | symbol) => void;
    getMetadata: (object: Object, propertyKey?: string | symbol, withParent?: boolean) => OperationMetadata;
    mergeMetadata: (object: Object, metadata: OperationMetadata, propertyKey?: string | symbol) => OperationMetadata;
};

type PropertyMetadata = Omit<OpenAPIV3.NonArraySchemaObject, "type" | "enum" | "properties" | "required"> & {
    name: string;
    required: boolean;
} & TypeOptions;
declare const PropertyMetadataKey: unique symbol;
declare const PropertyMetadataStorage: {
    defineMetadata: (object: Object, metadata: Record<string, PropertyMetadata>, propertyKey?: string | symbol) => void;
    getMetadata: (object: Object, propertyKey?: string | symbol, withParent?: boolean) => Record<string, PropertyMetadata>;
    mergeMetadata: (object: Object, metadata: Record<string, PropertyMetadata>, propertyKey?: string | symbol) => Record<string, PropertyMetadata>;
};

type OperationResponseMetadata = Omit<SetOptional<OpenAPIV3.ResponseObject, "description">, "content"> & {
    status: number | "default";
    mediaType: string;
} & TypeOptions;
declare const OperationResponseMetadataKey: unique symbol;
declare const OperationResponseMetadataStorage: {
    defineMetadata: (object: Object, metadata: Record<string, OperationResponseMetadata>, propertyKey?: string | symbol) => void;
    getMetadata: (object: Object, propertyKey?: string | symbol, withParent?: boolean) => Record<string, OperationResponseMetadata>;
    mergeMetadata: (object: Object, metadata: Record<string, OperationResponseMetadata>, propertyKey?: string | symbol) => Record<string, OperationResponseMetadata>;
};

export { OperationBodyMetadataKey as d, OperationBodyMetadataStorage as e, OperationParameterMetadataKey as f, OperationParameterMetadataStorage as g, OperationResponseMetadataKey as h, OperationResponseMetadataStorage as i, OperationMetadataKey as j, OperationMetadataStorage as k, PropertyMetadataKey as l, PropertyMetadataStorage as m };
export type { OperationBodyMetadata as O, PropertyMetadata as P, OperationParameterMetadata as a, OperationMetadata as b, OperationResponseMetadata as c };
