import K, { Knex } from 'knex';

/**
 * Mocked fetch function to simulate a database connection.
 *
 * **Note: Your should install `better-sqlite3` to use it.**
 *
 * @example
 * ```ts
 * import { createConnection } from 'cloudflare-d1-http-knex'
 * import { mockedFetch } from 'cloudflare-d1-http-knex/mock'
 *
 * const connection = {
 *   account_id: 'xxxx',
 *   database_id: 'xxxx',
 *   key: 'xxxx',
 *   mockedFetch,
 * }
 *
 * const db = createConnection(connection)
 *
 * await db.raw('SELECT 1+1')
 * ```
 */
declare const mockedFetch: (_: any, options: any) => Promise<{
    json: () => Promise<{
        success: boolean;
        result: {
            results: any[];
            meta: any;
        }[];
    }>;
}>;
declare class MockedCloudflareD1HttpClient extends CloudflareD1HttpClient {
    constructor();
}

type CloudflareD1HttpClientConfigConnection = {
    /** Cloudflare's account id */
    account_id: string;
    /** D1's database id */
    database_id: string;
    /** Cloudflare's api key, from https://dash.cloudflare.com/profile/api-tokens */
    key: string;
    /** Mock fetch function for testing */
    mockedFetch?: typeof mockedFetch;
} & Knex.StaticConnectionConfig;
type CloudflareD1HttpClientConfig = Knex.Config & {
    connection: CloudflareD1HttpClientConfigConnection;
};
declare const CloudflareD1HttpClient_base: typeof Knex.Client;
declare class CloudflareD1HttpClient extends CloudflareD1HttpClient_base {
    readonly config: CloudflareD1HttpClientConfig;
    constructor(config: CloudflareD1HttpClientConfig);
    _driver(): this;
    acquireRawConnection(): Promise<Awaited<this>>;
    _query(_: any, obj: any): Promise<any>;
    _processResponse(res: any, obj: any): Promise<any>;
    processResponse(res: any): Promise<any>;
}
/**
 * Create a new connection and return the Knex instance.
 *
 * @example
 * ```ts
 * const db = createConnection({
 *   account_id: 'xxxx',
 *   database_id: 'xxxx',
 *   key: 'xxxx',
 * })
 *
 * await db('users').first()
 * ```
 */
declare function createConnection(connection: CloudflareD1HttpClientConfigConnection): K.Knex<any, unknown[]>;

export { CloudflareD1HttpClient as C, MockedCloudflareD1HttpClient as M, type CloudflareD1HttpClientConfig as a, type CloudflareD1HttpClientConfigConnection as b, createConnection as c, mockedFetch as m };
