adonis-forge
Version:
Bundle utils for AdonisJS
51 lines (50 loc) • 1.85 kB
TypeScript
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 {};