import Request from "./request.js";
import { HttpContext } from "@adonisjs/core/http";
import Config from "./config.js";
import type { DataTable } from "./types/index.js";
export declare abstract class DataTableAbstract implements DataTable {
    protected ctx: HttpContext;
    protected config: Config;
    protected request: Request;
    protected $columns: Record<string, any>;
    protected $columnDef: Record<string, any>;
    protected $extraColumns: string[];
    protected totalRecords: number;
    protected filteredRecords: number;
    protected $skipTotalRecords: boolean;
    protected autoFilter: boolean;
    protected filterCallback: Function | null;
    protected $templates: Record<string, any>;
    protected orderCallback: Function | null;
    protected $skipPaging: boolean;
    protected appends: Record<string, any>;
    protected $editOnlySelectedColumns: boolean;
    protected $dataObject: boolean;
    protected $queryLogging: Record<string, any>[];
    constructor();
    static canCreate(_source: any): boolean;
    static create<T>(this: new (source: any) => T, source: any): T;
    /**
     *  Implement function
     */
    protected abstract defaultOrdering(): any;
    /**
     *  Implement function
     */
    protected abstract resolveCallback(): any;
    /**
     *  Implement function
     */
    abstract dataResults(): Promise<any[]>;
    /**
     *  Implement function
     */
    abstract count(): Promise<number>;
    /**
     *  Implement function
     */
    abstract columnSearch(): void;
    /**
     *  Implement function
     */
    abstract paging(): void;
    /**
     *  Implement function
     */
    abstract results(): Promise<Record<string, any> | void>;
    /**
     *  Implement function
     */
    abstract globalSearch(keyword: string): void;
    protected prepareContext(): void;
    totalCount(): Promise<number>;
    protected isBlacklisted(column: string): boolean;
    protected filterRecords(): Promise<void>;
    protected smartGlobalSearch(keyword: string): void;
    protected filteredCount(): Promise<number>;
    protected paginate(): void;
    protected processResults(results: Record<string, any>[]): Record<string, any>[];
    protected render(data: any[]): Record<string, any>;
    protected attachAppends(data: Record<string, any>): Record<string, any>;
    protected showDebugger(output: Record<string, any>): Record<string, any>;
    protected errorResponse(exception: unknown): Record<string, any> | void;
    protected setupKeyword(value: string): string;
    protected getColumnName(index: number, wantsAlias?: boolean): string | null;
    protected getColumnNameByIndex(index: number): string;
    protected getPrimaryKeyName(): string;
    setContext(ctx: HttpContext): this;
    addColumn(name: string, content: (<T extends abstract new (...args: any) => any>(row: InstanceType<T>) => string | number) | string | number, order?: boolean): this;
    addIndexColumn(): this;
    editColumn(name: string, content: any): this;
    removeColumn(...names: string[]): this;
    getColumnsDefinition(): Record<string, any>;
    only(columns?: string[]): this;
    escapeColumns(columns?: string): this;
    rawColumns(columns: string[], merge?: boolean): this;
    setRowClass(content: (<T extends abstract new (...args: any) => any>(query: InstanceType<T>) => string | number) | string): this;
    setRowId(content: (<T extends abstract new (...args: any) => any>(query: InstanceType<T>) => string | number) | string): this;
    setRowData(data: Record<string, (<T extends abstract new (...args: any) => any>(query: InstanceType<T>) => string) | string>): this;
    addRowData(key: string, value: (<T extends abstract new (...args: any) => any>(query: InstanceType<T>) => string) | string): this;
    setRowAttr(data: Record<string, (<T extends abstract new (...args: any) => any>(query: InstanceType<T>) => string | number) | string | number>): this;
    addRowAttr(key: string, value: (<T extends abstract new (...args: any) => any>(query: InstanceType<T>) => string | number) | string): this;
    with(key: any, value?: any): this;
    withQuery(key: string, callback: <T extends abstract new (...args: any) => any>(query: InstanceType<T>) => string): this;
    /**
     * Send a list of options for the DataTables ColumnControl `searchList` content type.
     * The `columnDataSrc` should match the column name, data source or index used client-side.
     *
     * @see https://datatables.net/extensions/columncontrol/server-side
     */
    columnControl(columnDataSrc: string | number, options: any[]): this;
    order(callback: <T extends abstract new (...args: any) => any>(query: InstanceType<T>) => void): this;
    blacklist(blacklist: any[]): this;
    whitelist(whitelist?: string | string[]): this;
    smart(state?: boolean): this;
    startsWithSearch(state?: boolean): this;
    setTotalRecords(total: number): this;
    skipTotalRecords(): this;
    setFilteredRecords(total: number): this;
    skipPaging(): this;
    pushToBlacklist(column: string): this;
    filtering(): void;
    editOnlySelectedColumns(): this;
    ordering(): void;
    filter(callback: <T extends abstract new (...args: any) => any>(query: InstanceType<T>) => void, globalSearch?: boolean): this;
    asJson(): this;
    asArray(): this;
}
