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
 */
interface GenerateSwaggerApiConfig {
    /** 조회할 스웨거의 url 혹은 file(yaml, json) 경로 입니다. 통상적으로
     * 백앤드 개발자에게 공유받은  api-swagger-url 의 '/openapi.json' 경로에 해당합니다.
     */
    swaggerSchemaUrl: string;
    /** 생성될 파일들이 위치할 경로입니다. */
    output: string;
    /** 생성되는 코드의 useQuery, useInfiniteQuery 포함 여부 입니다. */
    includeReactQuery: boolean;
    /** 생성되는 코드의 useSuspenseQuery, useSuspenseInfiniteQuery 포함 여부 입니다. */
    includeReactSuspenseQuery: boolean;
    /** Api 의 axios 혹은 fetch 요청 instance 주소입니다. */
    instancePath: string;
    /** http client 타입입니다. */
    httpClientType: 'axios' | 'fetch';
    /**
     * infiniteQuery 를 생성할 함수 필터 목록 입니다.
     * */
    paginationSets: PaginationConfig[];
}
/**
 * @category Commands
 */
declare const genApi: _toktokhan_dev_cli.MyCommand<GenerateSwaggerApiConfig, "gen:api">;

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