import type { AstroIntegration } from 'astro';
export interface ApiClientGeneratorOptions {
    /** folder to the API directory on disk (source code), default: './src/pages/api' */
    apiDir?: string;
    /** API base URL for calling the API (only relevant if you host in a subdir, it's very unlikely), default: ''  */
    baseUrl?: string;
    /** folder on disk to write the client code to, default: './src/pages/api-client'  */
    outDir?: string;
    /** path to tsconfig.json, default: './tsconfig.json' as it is expected to run in project root */
    tsConfigPath?: string;
    /** parser to use. 'naive' comes with constraints (non-standard-compliant), 'baseline' is 900x slower, default: 'naive' */
    parser?: 'naive' | 'baseline';
    /** site URL to request from. Optional, usually auto-discovered from Astro config  */
    site?: string;
    /** disable auto-discovery of site URL, default: false */
    disableSiteAutoDiscovery?: boolean;
}
export declare const apiGeneratorOptionsDefaults: ApiClientGeneratorOptions;
export type HttpMethod = 'GET' | 'POST' | 'DELETE' | 'PATCH' | 'HEAD' | 'PUT' | 'OPTIONS';
export declare const AstroHttpEndpointMethodNames: string[];
export declare const HttpMethods: Array<HttpMethod>;
export type InterfacePosition = [number, number];
export declare const upperCaseFirst: (text: string) => string;
export declare const lowerCaseFirst: (text: string) => string;
export declare const cleanupInterfce: (codeLines: Array<string>) => string;
export declare const analyzeHttpMethodsImplemented: (code: string) => Array<HttpMethod>;
/** merges the default values granularly with the user-provided config overrides */
export declare const validateConfig: (apiGeneratorOptions: ApiClientGeneratorOptions) => {
    apiDir?: string;
    baseUrl?: string;
    outDir?: string;
    tsConfigPath?: string;
    parser?: 'naive' | 'baseline';
    site?: string;
    disableSiteAutoDiscovery?: boolean;
};
/** Astro integration function to add to integrations [apiClientGenerator()] array in astro.config.js */
export declare const apiClientGenerator: (apiGeneratorOptions?: ApiClientGeneratorOptions) => AstroIntegration;
export interface ApiRouteParseResult {
    apiRoute: string;
    path: string;
    imports: Array<string>;
    relativePath: string;
    method: HttpMethod;
    camelCaseName: string;
    requestInterface: string;
    responseInterface: string;
    genericInterfaces: Array<string>;
    genericTypes: Array<string>;
}
/** baseline TypeScript syntax parser; has no limitations, but takes around 1000ms per endpoint */
export declare const parseApiRoutesBaseline: (apiRoutes: Array<string>, tsConfigPath: string) => Array<Partial<ApiRouteParseResult>>;
/** naive TypeScript syntax parser, comes with a few lexical limitations, but takes just 2ms per endpoint (see README) */
export declare const parseApiRoutesNaive: (apiRoutes: Array<string>) => Array<Partial<ApiRouteParseResult>>;
export interface ApiRouteParsedGrouped {
    [apiRoutePath: string]: Array<ApiRouteParseResult>;
}
export declare const groupByApiRoute: (routes: Array<ApiRouteParseResult>) => ApiRouteParsedGrouped;
/** discovers the API endpoints, parses and statically analyzes their code: finally calls the codegen */
export declare const generateClientApis: (apiGeneratorOptions: ApiClientGeneratorOptions) => void;
export declare const produceClientApiRequestImplCode: (parseResult: ApiRouteParseResult, apiGeneratorOptions: ApiClientGeneratorOptions, requestParamDecl: string, bodyInst: string, hasMultipleEndpointsInOneFile: boolean) => string;
export declare const produceClientApiHeaderCode: (parseResult: ApiRouteParseResult, requestInterfaceDecl: string) => string;
export declare const produceClientApiCode: (parseResults: Array<ApiRouteParseResult>, apiGeneratorOptions: ApiClientGeneratorOptions) => string;
