@typespec/openapi
Version:
TypeSpec library providing OpenAPI concepts
109 lines • 3.6 kB
TypeScript
import type { DecoratorContext, Model, Namespace, Operation, Type } from "@typespec/compiler";
export interface AdditionalInfo {
readonly [key: string]: unknown;
readonly title?: string;
readonly summary?: string;
readonly version?: string;
readonly termsOfService?: string;
readonly contact?: Contact;
readonly license?: License;
}
export interface TagMetadata {
readonly [key: string]: unknown;
readonly description?: string;
readonly externalDocs?: ExternalDocs;
}
export interface Contact {
readonly [key: string]: unknown;
readonly name?: string;
readonly url?: string;
readonly email?: string;
}
export interface License {
readonly [key: string]: unknown;
readonly name: string;
readonly url?: string;
}
export interface ExternalDocs {
readonly [key: string]: unknown;
readonly url: string;
readonly description?: string;
}
/**
* Specify the OpenAPI `operationId` property for this operation.
*
* @param operationId Operation id value.
* @example
* ```typespec
* @operationId("download")
* op read(): string;
* ```
*/
export type OperationIdDecorator = (context: DecoratorContext, target: Operation, operationId: string) => void;
/**
* Attach some custom data to the OpenAPI element generated from this type.
*
* @param key Extension key.
* @param value Extension value.
* @example
* ```typespec
* @extension("x-custom", "My value")
* @extension("x-pageable", #{nextLink: "x-next-link"})
* op read(): string;
* ```
*/
export type ExtensionDecorator = (context: DecoratorContext, target: Type, key: string, value: unknown) => void;
/**
* Specify that this model is to be treated as the OpenAPI `default` response.
* This differs from the compiler built-in `@error` decorator as this does not necessarily represent an error.
*
* @example
* ```typespec
* @defaultResponse
* model PetStoreResponse is object;
*
* op listPets(): Pet[] | PetStoreResponse;
* ```
*/
export type DefaultResponseDecorator = (context: DecoratorContext, target: Model) => void;
/**
* Specify the OpenAPI `externalDocs` property for this type.
*
* @param url Url to the docs
* @param description Description of the docs
* @example
* ```typespec
* @externalDocs("https://example.com/detailed.md", "Detailed information on how to use this operation")
* op listPets(): Pet[];
* ```
*/
export type ExternalDocsDecorator = (context: DecoratorContext, target: Type, url: string, description?: string) => void;
/**
* Specify OpenAPI additional information.
* The service `title` is already specified using `@service`.
*
* @param additionalInfo Additional information
*/
export type InfoDecorator = (context: DecoratorContext, target: Namespace, additionalInfo: AdditionalInfo) => void;
/**
* Specify OpenAPI additional information.
*
* @param name tag name
* @param tagMetadata Additional information
* @example
* ```typespec
* @service()
* @tagMetadata("Tag Name", #{description: "Tag description", externalDocs: #{url: "https://example.com", description: "More info.", `x-custom`: "string"}, `x-custom`: "string"})
* namespace PetStore {}
* ```
*/
export type TagMetadataDecorator = (context: DecoratorContext, target: Namespace, name: string, tagMetadata: TagMetadata) => void;
export type TypeSpecOpenAPIDecorators = {
operationId: OperationIdDecorator;
extension: ExtensionDecorator;
defaultResponse: DefaultResponseDecorator;
externalDocs: ExternalDocsDecorator;
info: InfoDecorator;
tagMetadata: TagMetadataDecorator;
};
//# sourceMappingURL=TypeSpec.OpenAPI.d.ts.map