import { LucidModel, ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
import { VineValidator } from '@vinejs/vine';
import { SchemaTypes } from '@vinejs/vine/types';
import { BaseTransformer } from '@adonisjs/core/transformers';
export declare const crudActions: readonly [{
    readonly label: "Paginate";
    readonly value: "index";
}, {
    readonly label: "Detail";
    readonly value: "show";
}, {
    readonly label: "Create";
    readonly value: "store";
}, {
    readonly label: "Update";
    readonly value: "update";
}, {
    readonly label: "Delete";
    readonly value: "destroy";
}];
export type CrudAction = (typeof crudActions)[number]['value'];
type TransformerClass<Resource, Rest extends any[] = any[]> = {
    new (resource: Resource, ...rest: Rest): BaseTransformer<Resource>;
    transform(data: Resource, ...rest: Rest): any;
    transform(data: Resource | null, ...rest: Rest): any;
    transform(data: Resource[], ...rest: Rest): any;
    paginate(data: Resource[], metaData: Record<string, any>, ...rest: Rest): any;
};
export interface CrudOperationsOptions<T extends LucidModel> {
    model: T;
    only?: CrudAction[];
    exclude?: CrudAction[];
    validators?: {
        store?: VineValidator<SchemaTypes, any>;
        update?: VineValidator<SchemaTypes, any>;
    };
    queryHandlers?: {
        index?: (query: ModelQueryBuilderContract<T>, qs: Record<string, string>) => void;
        show?: (query: ModelQueryBuilderContract<T>, qs: Record<string, string>) => void;
    };
    events?: {
        stored?: (model: InstanceType<T>) => void;
        updated?: (payload: any) => void;
    };
    transformer?: TransformerClass<InstanceType<T>>;
}
export interface CrudPaginationQs {
}
export declare function Crud<T extends LucidModel>(options: CrudOperationsOptions<T>): ClassDecorator;
export {};
