import { BaseError } from "@ebec/core";
import { BaseType, CollectionFormat, EnumType, Extension, IntersectionType, Metadata, Method, NestedObjectLiteralType, Parameter, ParameterSource, RefAliasType, RefEnumType, RefObjectType, ReferenceType, ResolverProperty, Response, UnionType, Validators, VariableType } from "@trapi/core";

//#region src/core/constants.d.ts
declare const Version: {
  readonly V2: "v2";
  readonly V3: "v3";
  readonly V3_1: "v3.1";
  readonly V3_2: "v3.2";
};
type Version = typeof Version[keyof typeof Version];
declare const DocumentFormat: {
  readonly YAML: "yaml";
  readonly JSON: "json";
};
type DocumentFormat = typeof DocumentFormat[keyof typeof DocumentFormat];
declare const SecurityType: {
  readonly API_KEY: "apiKey";
  readonly BASIC: "basic";
  readonly HTTP: "http";
  readonly OAUTH2: "oauth2";
};
type SecurityType = typeof SecurityType[keyof typeof SecurityType];
//#endregion
//#region src/core/schema/constants.d.ts
declare const TransferProtocol: {
  readonly HTTP: "http";
  readonly HTTPS: "https";
  readonly WS: "ws";
  readonly WSS: "wss";
};
type TransferProtocol = typeof TransferProtocol[keyof typeof TransferProtocol];
declare const DataFormatName: {
  readonly INT_32: "int32";
  readonly INT_64: "int64";
  readonly FLOAT: "float";
  readonly DOUBLE: "double";
  readonly BYTE: "byte";
  readonly BINARY: "binary";
  readonly DATE: "date";
  readonly DATE_TIME: "date-time";
  readonly PASSWORD: "password";
};
type DataFormatName = typeof DataFormatName[keyof typeof DataFormatName];
declare const DataTypeName: {
  readonly VOID: "void";
  readonly INTEGER: "integer";
  readonly NUMBER: "number";
  readonly BOOLEAN: "boolean";
  readonly STRING: "string";
  readonly ARRAY: "array";
  readonly OBJECT: "object";
  readonly FILE: "file";
};
type DataTypeName = typeof DataTypeName[keyof typeof DataTypeName];
//#endregion
//#region src/core/schema/types.d.ts
type BaseSpec = {
  info: Info;
  tags?: Tag[];
  externalDocs?: ExternalDocs;
};
type Info = {
  title: string;
  version: string;
  description?: string;
  termsOfService?: string;
  contact?: Contact;
  license?: License;
};
type Contact = {
  name?: string;
  email?: string;
  url?: string;
};
type License = {
  name: string;
  url?: string;
};
type ExternalDocs = {
  url: string;
  description?: string;
};
type Tag = {
  name: string;
  description?: string;
  externalDocs?: ExternalDocs;
};
type BaseResponse = {
  description: string;
};
type BaseOperation<P, R> = {
  responses: {
    [name: string]: R;
  };
  summary?: string;
  description?: string;
  externalDocs?: ExternalDocs;
  operationId?: string;
  consumes?: string[];
  parameters?: P[];
  schemes?: string[];
  deprecated?: boolean;
  security?: Record<string, string[]>[];
  tags?: string[];
};
type Example = {
  value: unknown | unknown[];
  summary?: string;
  description?: string;
};
type BaseSchema<T> = {
  type?: `${DataTypeName}` | Array<`${DataTypeName}` | 'null'>;
  format?: `${DataFormatName}`;
  title?: string;
  description?: string;
  default?: string | boolean | number | any;
  multipleOf?: number;
  maximum?: number;
  exclusiveMaximum?: number;
  minimum?: number;
  exclusiveMinimum?: number;
  maxLength?: number;
  minLength?: number;
  pattern?: string;
  maxItems?: number;
  minItems?: number;
  uniqueItems?: boolean;
  maxProperties?: number;
  minProperties?: number;
  enum?: Array<string | number | boolean>;
  'x-enum-varnames'?: string[];
  items?: T | BaseSchema<T> | any;
  additionalProperties?: boolean | {
    [ref: string]: string;
  } | T;
  properties?: {
    [propertyName: string]: T;
  };
  discriminator?: string;
  readOnly?: boolean;
  xml?: XML;
  externalDocs?: ExternalDocs;
  example?: {
    [exampleName: string]: Example;
  } | unknown;
  required?: string[];
  $ref?: string;
};
type XML = {
  type?: string;
  namespace?: string;
  prefix?: string;
  attribute?: string;
  wrapped?: boolean;
};
type BaseParameter = {
  name: string;
  in: `${ParameterSourceV2}`;
  required?: boolean;
  description?: string;
};
type BodyParameter = BaseParameter & {
  in: typeof ParameterSourceV2.BODY;
};
type QueryParameter = BaseParameter & {
  in: typeof ParameterSourceV2.QUERY;
  allowEmptyValue?: boolean;
  collectionFormat?: `${CollectionFormat}`;
};
type PathParameter = BaseParameter & {
  in: typeof ParameterSourceV2.PATH;
};
type HeaderParameter = BaseParameter & {
  in: typeof ParameterSourceV2.HEADER;
};
type FormDataParameter = BaseParameter & {
  in: typeof ParameterSourceV2.FORM_DATA;
  collectionFormat?: `${CollectionFormat}`;
};
type Path<Operation, Parameter> = {
  $ref?: string;
  get?: Operation;
  put?: Operation;
  post?: Operation;
  delete?: Operation;
  options?: Operation;
  head?: Operation;
  patch?: Operation;
  parameters?: Parameter[];
};
//#endregion
//#region src/core/schema/v2/types.d.ts
type SpecV2 = BaseSpec & {
  swagger: '2.0';
  host?: string;
  basePath?: string;
  schemes?: string[];
  consumes?: string[];
  produces?: string[];
  paths: {
    [pathName: string]: Path<OperationV2, ResponseV2>;
  };
  definitions?: {
    [definitionsName: string]: SchemaV2;
  };
  parameters?: {
    [parameterName: string]: ParameterV2;
  };
  responses?: {
    [responseName: string]: ResponseV2;
  };
  security?: SecurityV2[];
  securityDefinitions?: {
    [name: string]: SecurityV2;
  };
};
type PatternField = `x-${string}`;
type BaseParameterV2 = {
  type?: `${DataTypeName}`;
  format?: `${DataFormatName}`;
  allowEmptyValue?: boolean;
  items?: Record<string, any>;
  collectionFormat?: `${CollectionFormat}`;
  default?: any;
  maximum?: number;
  exclusiveMaximum?: number;
  minimum?: number;
  exclusiveMinimum?: number;
  maxLength?: number;
  minLength?: number;
  pattern?: string;
  maxItems?: number;
  minItems?: number;
  uniqueItems?: number;
  enum?: unknown[];
  multipleOf?: number;
};
type BodyParameterV2 = BodyParameter & {
  schema: BaseSchema<SchemaV2>;
};
type QueryParameterV2 = QueryParameter & BaseParameterV2;
type PathParameterV2 = PathParameter & BaseParameterV2;
type HeaderParameterV2 = HeaderParameter & BaseParameterV2;
type FormDataParameterV2 = FormDataParameter & BaseParameterV2;
type ParameterV2 = (BodyParameterV2 | QueryParameterV2 | PathParameterV2 | HeaderParameterV2 | FormDataParameterV2) & {
  [key: PatternField]: any | undefined;
};
type OperationV2 = BaseOperation<ParameterV2, ResponseV2> & {
  consumes?: string[];
  produces?: string[];
  schemes?: `${TransferProtocol}`[];
};
type ResponseV2 = BaseResponse & {
  schema?: SchemaV2;
  headers?: {
    [headerName: string]: HeaderV2;
  };
  examples?: {
    [exampleName: string]: unknown;
  };
};
type HeaderV2 = {
  type: 'string' | 'number' | 'integer' | 'boolean' | 'array';
};
interface SchemaV2 extends BaseSchema<SchemaV2> {
  ['x-nullable']?: boolean;
  ['x-deprecated']?: boolean;
}
type BasicSecurityV2 = BaseSecurity & {
  type: typeof SecurityType.BASIC;
};
type BaseOAuthSecurityV2 = BaseSecurity & {
  type: typeof SecurityType.OAUTH2;
};
type OAuth2ImplicitSecurityV2 = BaseOAuthSecurityV2 & {
  flow: 'implicit';
  authorizationUrl: string;
  scopes?: Record<string, string>;
};
type OAuth2PasswordSecurityV2 = BaseOAuthSecurityV2 & {
  flow: 'password';
  tokenUrl: string;
  scopes?: Record<string, string>;
};
type OAuth2ApplicationSecurityV2 = BaseOAuthSecurityV2 & {
  flow: 'application';
  tokenUrl: string;
  scopes?: Record<string, string>;
};
type OAuth2AccessCodeSecurityV2 = BaseOAuthSecurityV2 & {
  flow: 'accessCode';
  tokenUrl: string;
  authorizationUrl: string;
  scopes?: Record<string, string>;
};
type OAuth2SecurityV2 = OAuth2AccessCodeSecurityV2 | OAuth2ApplicationSecurityV2 | OAuth2ImplicitSecurityV2 | OAuth2PasswordSecurityV2;
type SecurityV2 = BasicSecurityV2 | OAuth2SecurityV2 | ApiKeySecurity;
//#endregion
//#region src/core/schema/v2/constants.d.ts
declare const ParameterSourceV2: {
  readonly BODY: "body";
  readonly FORM_DATA: "formData";
  readonly HEADER: "header";
  readonly PATH: "path";
  readonly QUERY: "query";
};
type ParameterSourceV2 = typeof ParameterSourceV2[keyof typeof ParameterSourceV2];
//#endregion
//#region src/core/schema/v3/constants.d.ts
declare const ParameterSourceV3: {
  readonly COOKIE: "cookie";
  readonly HEADER: "header";
  readonly PATH: "path";
  readonly QUERY: "query";
};
type ParameterSourceV3 = typeof ParameterSourceV3[keyof typeof ParameterSourceV3];
//#endregion
//#region src/core/schema/v3/types.d.ts
type SpecV3 = BaseSpec & {
  openapi: string;
  servers: ServerV3[];
  components: ComponentsV3;
  paths: PathsV3;
};
type ServerV3 = {
  url: string;
  description?: string;
  variables?: Record<string, VariableV3>;
};
type VariableV3 = {
  enum?: string[];
  description?: string;
  default: string;
};
type ComponentsV3 = {
  callbacks?: {
    [name: string]: any;
  };
  examples?: {
    [name: string]: Example | string;
  };
  headers?: {
    [name: string]: any;
  };
  links?: {
    [name: string]: any;
  };
  parameters?: {
    [name: string]: ParameterV3;
  };
  requestBodies?: {
    [name: string]: any;
  };
  responses?: {
    [name: string]: ResponseV3;
  };
  schemas?: {
    [name: string]: SchemaV3;
  };
  securitySchemes?: {
    [name: string]: SecurityV3;
  };
};
type PathsV3 = {
  [key: string]: Path<OperationV3, ParameterV3>;
};
type BaseParameterV3 = {
  /**
       * Default: false
       */
  deprecated?: boolean;
  /**
       * Default: false
       */
  allowEmptyValue?: boolean;
  style?: string;
  explode?: boolean;
  allowReserved?: boolean;
  schema?: SchemaV3;
  example?: unknown;
  examples?: Record<string, Example | string>;
  content?: Record<string, any>;
};
type BodyParameterV3 = BodyParameter & BaseParameterV3;
type CookieParameterV3 = BaseParameterV3 & {
  in: typeof ParameterSourceV3.COOKIE;
};
type QueryParameterV3 = QueryParameter & BaseParameterV3;
type PathParameterV3 = PathParameter & BaseParameterV3;
type HeaderParameterV3 = HeaderParameter & BaseParameterV3;
type FormDataParameterV3 = FormDataParameter & BaseParameterV3;
type PatternFieldV3 = `x-${string}`;
type ParameterV3 = (BodyParameterV3 | CookieParameterV3 | QueryParameterV3 | PathParameterV3 | HeaderParameterV3 | FormDataParameterV3) & {
  [key: PatternFieldV3]: unknown;
};
type OperationV3 = BaseOperation<ParameterV3, ResponseV3> & {
  requestBody?: RequestBodyV3;
  [key: string]: unknown;
};
type ResponseV3 = BaseResponse & {
  content?: Record<string, {
    schema: SchemaV3;
    examples?: Record<string, Example>;
  }>;
  headers?: {
    [name: string]: HeaderV3;
  };
};
type HeaderV3 = Omit<BaseSchema<SchemaV3>, 'required'> & {
  required?: boolean;
  description?: string;
  example?: unknown;
  examples?: Record<string, Example | string>;
  schema: SchemaV3;
  type?: `${DataTypeName}`;
  format?: `${DataFormatName}`;
};
type RequestBodyV3 = {
  content: {
    [name: string]: MediaTypeV3;
  };
  description?: string;
  required?: boolean;
};
type MediaTypeV3 = {
  schema?: SchemaV3;
  example?: Example;
  examples?: Record<string, Example | string>;
  encoding?: {
    [name: string]: any;
  };
};
interface SchemaV3 extends Omit<BaseSchema<SchemaV3>, 'discriminator'> {
  discriminator?: string | {
    propertyName: string;
    mapping?: Record<string, string>;
  };
  nullable?: boolean;
  anyOf?: SchemaV3[];
  allOf?: SchemaV3[];
  oneOf?: SchemaV3[];
  deprecated?: boolean;
}
type BasicSecurityV3 = BaseSecurity & {
  type: typeof SecurityType.HTTP;
  scheme: 'basic';
};
type OAuth2SecurityV3 = BaseSecurity & {
  type: typeof SecurityType.OAUTH2;
  flows: {
    implicit?: OAuth2ImplicitFlowV3;
    password?: OAuth2PasswordFlowV3;
    authorizationCode?: OAuth2AuthorizationCodeFlowV3;
    clientCredentials?: OAuth2ClientCredentialsFlowV3;
  };
};
type Oauth2BaseFlowV3 = {
  scopes?: Record<string, string>;
  refreshUrl?: string;
};
type OAuth2ImplicitFlowV3 = Oauth2BaseFlowV3 & {
  authorizationUrl: string;
};
type OAuth2PasswordFlowV3 = Oauth2BaseFlowV3 & {
  tokenUrl: string;
};
type OAuth2AuthorizationCodeFlowV3 = Oauth2BaseFlowV3 & {
  authorizationUrl: string;
  tokenUrl: string;
};
type OAuth2ClientCredentialsFlowV3 = Oauth2BaseFlowV3 & {
  tokenUrl: string;
};
type SecurityV3 = BasicSecurityV3 | OAuth2SecurityV3 | ApiKeySecurity;
//#endregion
//#region src/core/types.d.ts
type ValidatorOpenApiMeta = {
  kind: 'keyword';
  key: string;
} | {
  kind: 'format';
  format: string;
} | {
  kind: 'ignore';
};
/**
 * Resolves the OpenAPI specification output type for a given `Version`.
 *
 * Use this to type wrapper functions around `generateSwagger()` whose return
 * type depends on the requested `Version`:
 *
 * ```ts
 * type GeneratorOutput<V extends `${Version}`> = OutputForVersion<V>;
 * ```
 *
 * Internally `Version.V2` resolves to `SpecV2`; everything else resolves to
 * `SpecV3` (which models OpenAPI 3.0, 3.1, and 3.2 — they share a schema).
 */
type OutputForVersion<V extends `${Version}`> = V extends typeof Version.V2 ? SpecV2 : SpecV3;
declare module '@trapi/core' {
  interface ValidatorMeta {
    openApi?: ValidatorOpenApiMeta;
  }
}
type DocumentFormatData = {
  path: string;
  name: string;
  content?: string;
};
type BaseSecurity = {
  description?: string;
};
type ApiKeySecurity = BaseSecurity & {
  type: typeof SecurityType.API_KEY;
  name: string;
  in: 'query' | 'header';
};
type BasicSecurity = BaseSecurity & {
  type: typeof SecurityType.HTTP;
  scheme: 'basic';
};
type OAuth2Security = BaseSecurity & {
  type: typeof SecurityType.OAUTH2;
  flows: {
    implicit?: OAuth2ImplicitFlow;
    password?: OAuth2PasswordFlow;
    authorizationCode?: OAuth2AuthorizationCodeFlow;
    clientCredentials?: OAuth2ClientCredentialsFlow;
  };
};
type Oauth2BaseFlow = {
  scopes?: Record<string, string>;
  refreshUrl?: string;
};
type OAuth2ImplicitFlow = Oauth2BaseFlow & {
  authorizationUrl: string;
};
type OAuth2PasswordFlow = Oauth2BaseFlow & {
  tokenUrl: string;
};
type OAuth2AuthorizationCodeFlow = Oauth2BaseFlow & {
  authorizationUrl: string;
  tokenUrl: string;
};
type OAuth2ClientCredentialsFlow = Oauth2BaseFlow & {
  tokenUrl: string;
};
type SecurityDefinition = ApiKeySecurity | BasicSecurity | OAuth2Security;
type SecurityDefinitions = {
  [key: string]: SecurityDefinition;
};
//#endregion
//#region src/core/config/types.d.ts
type ServerOption = {
  url: string;
  description?: string;
};
type SpecGeneratorOptions = {
  /**
   * API host, e.g. localhost:3000 or https://myapi.com
   */
  servers?: ServerOption[];
  /**
   * API version number; defaults to npm package version
   */
  version?: string;
  /**
   * API name; defaults to npm package name
   */
  name?: string;
  /**
   * 'API description; defaults to npm package description
   */
  description?: string;
  /**
   * API license; defaults to npm package license
   */
  license?: string;
  /**
   * Extend generated swagger spec with this object
   * Note that generated properties will always take precedence over what get specified here
   */
  specificationExtra?: Record<string, any>;
  /**
   * Security Definitions Object
   * A declaration of the security schemes available to be used in the
   * specification. This does not enforce the security schemes on the operations
   * and only serves to provide the relevant details for each scheme.
   */
  securityDefinitions?: SecurityDefinitions;
  /**
   * Default consumes property for the entire API
   */
  consumes?: string[];
  /**
   * Default produces property for the entire API
   */
  produces?: string[];
  /**
   * Default collectionFormat property for query parameters of array type.
   * Possible values are `csv`, `ssv`, `tsv`, `pipes`, `multi`. If not specified, Swagger defaults to `csv`.
   */
  collectionFormat?: `${CollectionFormat}`;
};
type SpecGeneratorOptionsInput = Omit<Partial<SpecGeneratorOptions>, 'servers'> & {
  servers?: string | string[] | ServerOption | ServerOption[];
};
type SwaggerSaveOptions = {
  /**
   * Working directory the output file is written to. Relative paths are resolved against it.
   *
   * default: process.cwd()
   */
  cwd?: string;
  /**
   * File format to emit.
   *
   * default: DocumentFormat.JSON
   */
  format?: `${DocumentFormat}`;
  /**
   * File name, with or without extension. Any `.json` / `.yaml` suffix is stripped
   * and replaced to match `format`.
   *
   * default: 'swagger'
   */
  name?: string;
};
type SwaggerGenerateData = {
  /**
   * API name; defaults to npm package name.
   */
  name?: string;
  /**
   * API version; defaults to npm package version.
   */
  version?: string;
  /**
   * API description; defaults to npm package description.
   */
  description?: string;
  /**
   * API license; defaults to npm package license.
   */
  license?: string;
  /**
   * API servers.
   */
  servers?: string | string[] | ServerOption | ServerOption[];
  /**
   * Security scheme definitions.
   */
  securityDefinitions?: SecurityDefinitions;
  /**
   * Default consumes content types.
   */
  consumes?: string[];
  /**
   * Default produces content types.
   */
  produces?: string[];
  /**
   * Default collection format for array query parameters.
   */
  collectionFormat?: `${CollectionFormat}`;
  /**
   * Extra properties to merge into the generated spec.
   */
  extra?: Record<string, any>;
};
type SwaggerGenerateOptions = {
  /**
   * Swagger/OpenAPI spec version to generate (e.g. 'v2', 'v3').
   */
  version: `${Version}`;
  /**
   * Pre-built metadata. Produce it with `generateMetadata` from `@trapi/metadata`,
   * or supply your own `Metadata`-shaped value (e.g. read from a JSON fixture or
   * an alternate extractor) — `@trapi/swagger` does not depend on the TypeScript
   * compiler.
   */
  metadata: Metadata;
  /**
   * Document content (info, servers, security, etc.).
   */
  data?: SwaggerGenerateData;
};
//#endregion
//#region src/core/config/utils.d.ts
declare function buildSpecGeneratorOptions(input: SpecGeneratorOptionsInput): SpecGeneratorOptions;
//#endregion
//#region src/core/error/codes.d.ts
declare const SwaggerErrorCode: {
  readonly SPEC_NOT_BUILT: "SWAGGER_SPEC_NOT_BUILT";
  readonly ENUM_UNSUPPORTED_TYPE: "SWAGGER_ENUM_UNSUPPORTED_TYPE";
  readonly BODY_PARAMETER_DUPLICATE: "SWAGGER_BODY_PARAMETER_DUPLICATE";
  readonly BODY_FORM_CONFLICT: "SWAGGER_BODY_FORM_CONFLICT";
  readonly PARAMETER_SOURCE_UNSUPPORTED: "SWAGGER_PARAMETER_SOURCE_UNSUPPORTED";
  readonly METADATA_INVALID: "SWAGGER_METADATA_INVALID";
};
//#endregion
//#region src/core/error/module.d.ts
declare class SwaggerError extends BaseError {}
//#endregion
//#region src/core/utils/character.d.ts
declare function removeDuplicateSlashes(str: string): string;
declare function removeFinalCharacter(str: string, character: string): string;
//#endregion
//#region src/core/utils/path.d.ts
declare function normalizePathParameters(str: string): string;
declare function joinPaths(...segments: string[]): string;
//#endregion
//#region src/core/utils/object.d.ts
declare function hasOwnProperty<X extends object, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown>;
//#endregion
//#region src/core/utils/value.d.ts
declare function transformValueTo(type: 'string' | 'number' | 'integer' | 'boolean' | 'bigint', value: unknown): string | number | boolean | null;
//#endregion
//#region src/adapters/generator/abstract.d.ts
declare abstract class AbstractSpecGenerator<Spec extends SpecV2 | SpecV3, Schema extends SchemaV3 | SchemaV2> {
  protected spec: Spec | undefined;
  protected readonly metadata: Metadata;
  protected readonly config: SpecGeneratorOptions;
  constructor(metadata: Metadata, config: SpecGeneratorOptionsInput);
  abstract build(): Promise<Spec>;
  protected buildInfo(): Info;
  protected buildTags(): ({
    name: string;
  } & Record<string, unknown>)[];
  protected getSchemaForType(type: BaseType): Schema | BaseSchema<Schema>;
  protected abstract getSchemaForIntersectionType(type: IntersectionType): Schema;
  protected getSchemaForEnumType(enumType: EnumType): Schema;
  protected abstract applyNullable(schema: Schema, nullable: boolean): void;
  private getSchemaForPrimitiveType;
  private getSchemaForArrayType;
  private getSchemaForTupleType;
  getSchemaForObjectLiteralType(objectLiteral: NestedObjectLiteralType): BaseSchema<Schema>;
  protected getSchemaForReferenceType(referenceType: ReferenceType): Schema;
  protected abstract getRefPrefix(): string;
  protected abstract getSchemaForUnionType(type: UnionType): Schema;
  protected buildSchemaForRefAlias(referenceType: RefAliasType): Schema;
  protected buildSchemaForRefEnum(referenceType: RefEnumType): Schema;
  protected buildSchemasForReferenceTypes(extendFn?: (output: Schema, input: ReferenceType) => void): Record<string, Schema>;
  protected isUndefinedProperty(input: ResolverProperty): boolean;
  protected buildProperties(properties: ResolverProperty[]): Record<string, Schema>;
  protected abstract markPropertyDeprecated(schema: Schema): void;
  protected shouldStripRefSiblings(): boolean;
  protected assignPropertyDefaults(_schema: Schema, _property: ResolverProperty): void;
  protected buildSchemaForRefObject(referenceType: RefObjectType): Schema;
  protected abstract resolveAdditionalProperties(type: BaseType): Schema | boolean;
  protected determineTypesUsedInEnum(anEnum: Array<string | number | boolean | null>): VariableType[];
  protected decideEnumType(input: Array<string | number | boolean>): 'string' | 'number' | 'boolean';
  protected getOperationId(name: string): string;
  protected groupParameters(items: Parameter[]): Partial<Record<ParameterSource, Parameter[]>>;
  protected transformExtensions(input?: Extension[]): Record<string, any>;
  protected transformValidators(input?: Validators): Record<string, any>;
}
//#endregion
//#region src/adapters/generator/v2/module.d.ts
declare class V2Generator extends AbstractSpecGenerator<SpecV2, SchemaV2> {
  build(): Promise<SpecV2>;
  private static translateSecurityDefinitions;
  protected resolveAdditionalProperties(_type: BaseType): SchemaV2 | boolean;
  protected markPropertyDeprecated(schema: SchemaV2): void;
  private buildPaths;
  private buildMethod;
  private transformParameterSource;
  protected buildParameter(input: Parameter): ParameterV2;
  private buildMethodConsumes;
  private hasFileParams;
  private hasFormParams;
  private supportsBodyParameters;
  protected applyNullable(schema: SchemaV2, nullable: boolean): void;
  protected getRefPrefix(): string;
  protected getSchemaForIntersectionType(type: IntersectionType): SchemaV2;
  protected getSchemaForUnionType(type: UnionType): SchemaV2;
  private buildOperation;
}
//#endregion
//#region src/adapters/generator/v3/module.d.ts
declare class V3Generator extends AbstractSpecGenerator<SpecV3, SchemaV3> {
  private readonly openApiVersion;
  constructor(metadata: Metadata, config: SpecGeneratorOptionsInput, version?: `${Version}`);
  build(): Promise<SpecV3>;
  private buildComponents;
  private static translateSecurityDefinitions;
  private buildPaths;
  private buildMethod;
  private buildRequestBodyWithFormData;
  private buildRequestBody;
  private buildMediaType;
  protected buildResponses(input: Response[]): Record<string, ResponseV3>;
  protected buildOperation(_controllerName: string, method: Method): OperationV3;
  protected transformParameterSource(source: `${ParameterSource}`): `${ParameterSourceV3}` | undefined;
  protected buildParameter(input: Parameter): ParameterV3;
  private transformParameterExamples;
  private buildServers;
  protected resolveAdditionalProperties(type: BaseType): SchemaV3;
  protected markPropertyDeprecated(schema: SchemaV3): void;
  protected assignPropertyDefaults(schema: SchemaV3, property: ResolverProperty): void;
  protected buildSchemaForRefEnum(referenceType: RefEnumType): SchemaV3;
  private isV31OrLater;
  protected shouldStripRefSiblings(): boolean;
  protected getSchemaForIntersectionType(type: IntersectionType): SchemaV3;
  protected applyNullable(schema: SchemaV3, nullable: boolean): void;
  protected getRefPrefix(): string;
  protected getSchemaForUnionType(type: UnionType): SchemaV3;
  private static isObjectLikeType;
  private applyDiscriminator;
  private detectDiscriminator;
  /**
   * Resolve a union member to its refName and properties for discriminator
   * detection. Accepts both refObject and refAlias members, unwrapping
   * aliases to find the underlying properties while preserving the
   * original refName for $ref mapping.
   */
  private resolveDiscriminatorMember;
}
//#endregion
//#region src/app/module.d.ts
declare function generateSwagger<V extends `${Version}`>(options: Omit<SwaggerGenerateOptions, 'version'> & {
  version: V;
}): Promise<OutputForVersion<V>>;
//#endregion
//#region src/app/save.d.ts
declare function saveSwagger(spec: SpecV2 | SpecV3, options?: SwaggerSaveOptions): Promise<DocumentFormatData>;
//#endregion
export { AbstractSpecGenerator, ApiKeySecurity, BaseOAuthSecurityV2, BaseOperation, BaseParameter, BaseParameterV2, BaseParameterV3, BaseResponse, BaseSchema, BaseSecurity, BaseSpec, BasicSecurity, BasicSecurityV2, BasicSecurityV3, BodyParameter, BodyParameterV2, BodyParameterV3, ComponentsV3, CookieParameterV3, DataFormatName, DataTypeName, DocumentFormat, DocumentFormatData, Example, FormDataParameter, FormDataParameterV2, FormDataParameterV3, HeaderParameter, HeaderParameterV2, HeaderParameterV3, HeaderV2, HeaderV3, Info, MediaTypeV3, OAuth2AccessCodeSecurityV2, OAuth2ApplicationSecurityV2, OAuth2AuthorizationCodeFlow, OAuth2AuthorizationCodeFlowV3, OAuth2ClientCredentialsFlow, OAuth2ClientCredentialsFlowV3, OAuth2ImplicitFlow, OAuth2ImplicitFlowV3, OAuth2ImplicitSecurityV2, OAuth2PasswordFlow, OAuth2PasswordFlowV3, OAuth2PasswordSecurityV2, OAuth2Security, OAuth2SecurityV2, OAuth2SecurityV3, Oauth2BaseFlow, Oauth2BaseFlowV3, OperationV2, OperationV3, OutputForVersion, ParameterSourceV2, ParameterSourceV3, ParameterV2, ParameterV3, Path, PathParameter, PathParameterV2, PathParameterV3, PathsV3, QueryParameter, QueryParameterV2, QueryParameterV3, RequestBodyV3, ResponseV2, ResponseV3, SchemaV2, SchemaV3, SecurityDefinition, SecurityDefinitions, SecurityType, SecurityV2, SecurityV3, ServerOption, ServerV3, SpecGeneratorOptions, SpecGeneratorOptionsInput, SpecV2, SpecV3, SwaggerError, SwaggerErrorCode, SwaggerGenerateData, SwaggerGenerateOptions, SwaggerSaveOptions, TransferProtocol, V2Generator, V3Generator, ValidatorOpenApiMeta, VariableV3, Version, buildSpecGeneratorOptions, generateSwagger, hasOwnProperty, joinPaths, normalizePathParameters, removeDuplicateSlashes, removeFinalCharacter, saveSwagger, transformValueTo };
//# sourceMappingURL=index.d.mts.map