import { type DynamicModule, type InjectionToken } from '@nestjs/common';
import type { ClickHouseClientLike } from './clickhouse-query.js';
import { ClickHouseAdapter, type ClickHouseAdapterOptions } from './clickhouse.adapter.js';
/**
 * Where the adapter gets its ClickHouse client: the token of a provider holding it
 * (`connection`), or the instance itself (`client`).
 */
export type ClickHouseFilterModuleOptions = ClickHouseAdapterOptions & ({
    connection: InjectionToken;
    client?: never;
} | {
    client: ClickHouseClientLike;
    connection?: never;
});
/**
 * The adapter as a descriptor, for `FilterModule.forRoot({ adapter })`:
 *
 * ```ts
 * FilterModule.forRoot({ adapter: clickHouseAdapter({ connection: CLICKHOUSE }) })
 * ```
 *
 * Next to a database adapter, provide a `ClickHouseAdapter` under a token of its own instead and
 * name it per filter: `@Filterable({ entity: events, adapter: CLICKHOUSE_FILTER_ADAPTER })`.
 */
export declare const clickHouseAdapter: (options: ClickHouseFilterModuleOptions) => {
    readonly useFactory: () => ClickHouseAdapter;
    readonly inject: readonly [];
} | {
    readonly useFactory: (instance: ClickHouseClientLike) => ClickHouseAdapter;
    readonly inject: readonly [InjectionToken];
};
/** A ready-made token for a {@link ClickHouseAdapter} that is NOT the application-wide adapter. */
export declare const CLICKHOUSE_FILTER_ADAPTER: unique symbol;
export declare class ClickHouseFilterModule {
    /** Registers the ClickHouse adapter as the application-wide filter adapter. */
    static forRoot(options: ClickHouseFilterModuleOptions & {
        imports?: DynamicModule['imports'];
    }): DynamicModule;
}
//# sourceMappingURL=module.d.ts.map