import * as _toktokhan_dev_cli from '@toktokhan-dev/cli';

/**
 * `Swagger` 의 json 을 조회하여 타입정의와 `api class`, `react-query` 관련 모듈을 생성합니다.
 * `axios` 를 사용하는 환경에서 사용가능합니다.
 *
 * @packageDocumentation
 */
type GenerateFn = (param: {
    apiInstanceName: string;
    functionName: string;
    pagination: {
        keywords: string[];
        nextKey: string;
    };
}) => string;
interface PaginationConfig {
    /** api 의 queryParams key 에 keywords 가 포함되어 있는 항목만 생성됩니다. 키워드 배열은 AND 연산으로써 사용됩니다. */
    keywords: string[];
    /** InfiniteQuery 의 nextPage 와 nextPageParam 을 구하는 함수를 작성하기 위해 사용됩니다. */
    nextKey: string;
    /**
     * InfiniteQuery 의 initialPage 를 커스텀하기 위해 사용됩니다.
     */
    initialPageParam?: string | GenerateFn;
    /** InfiniteQuery 의 nextPage 를 구하는 함수를 커스텀하기 위해 사용됩니다. */
    getNextPage?: string | GenerateFn;
    /** InfiniteQuery 의 nextPageParam 을 구하는 함수를 커스텀하기 위해 사용됩니다. */
    getNextPageParam?: string | GenerateFn;
}
/**
 * @category Types
 */
type SwaggerSchemaOption = {
    swaggerSchemaUrl: string;
    swaggerSchemaUrls?: never;
} | {
    swaggerSchemaUrl?: never;
    swaggerSchemaUrls: string[];
};
type GenerateSwaggerApiConfig = SwaggerSchemaOption & {
    /** 조회할 스웨거의 url 혹은 file(yaml, json) 경로 입니다. 통상적으로
     * 백앤드 개발자에게 공유받은  api-swagger-url 의 '/openapi.json' 경로에 해당합니다.
     */
    /** 단일 스웨거 URL 또는 다중 스웨거 URL 중 하나만 입력할 수 있습니다 */
    /** 다중 URL 지원: 여러 스웨거 URL을 배열로 받아서 처리합니다. */
    /** 생성될 파일들이 위치할 경로입니다. */
    output: string;
    /** 생성되는 코드의 useQuery, useInfiniteQuery 포함 여부 입니다. */
    includeReactQuery: boolean;
    /** 생성되는 코드의 useSuspenseQuery, useSuspenseInfiniteQuery 포함 여부 입니다. */
    includeReactSuspenseQuery: boolean;
    /** Api 의 axios 혹은 fetch 요청 instance 주소입니다. */
    instancePath: string;
    /** http client 타입입니다. */
    httpClientType: 'axios' | 'fetch';
    /**
     * infiniteQuery 를 생성할 함수 필터 목록 입니다.
     * */
    paginationSets: PaginationConfig[];
    /**
     * SSL 인증서 검증 무시 여부입니다. (self-signed certificate 등 사용 시 true 로 설정)
     * @default false
     */
    ignoreTlsError?: boolean;
    /**
     * data-contracts.ts를 모듈별로 분할할지 여부입니다.
     * true일 때 각 모듈 폴더에 <module>.contracts.ts가 생성되고,
     * 공유 타입은 @types/common-contracts.ts에 생성됩니다.
     * @default false
     */
    splitDataContracts?: boolean;
};
/**
 * @category Commands
 */
declare const genApi: _toktokhan_dev_cli.MyCommand<GenerateSwaggerApiConfig, "gen:api">;
/**
 * 스마트 타입 병합 함수들
 */
declare function mergeTypeScriptContent(existing: string, newContent: string): string;

export { genApi, mergeTypeScriptContent };
export type { GenerateFn, GenerateSwaggerApiConfig, PaginationConfig };
