import { IRepository } from "../interfaces/IRepository";
import { DecoratorMetadata } from "@decaf-ts/reflection";
import { Constructor, Model } from "@decaf-ts/decorator-validation";
import { Context } from "./Context";
export type ContextArgs<M extends Model> = {
    context: Context<M>;
    args: any[];
};
/**
 * @summary retrieves the arguments for the handler
 * @param {any} dec the decorator
 * @param {string} prop the property name
 * @param {{}} m the model
 * @param {{}} [accum] accumulator used for internal recursiveness
 *
 * @function getHandlerArgs
 * @memberOf module:db-decorators.Repository
 */
export declare const getHandlerArgs: (dec: any, prop: string, m: Constructor<any>, accum?: Record<string, {
    args: string[];
}>) => Record<string, {
    args: string[];
}> | void;
/**
 *
 * @param {IRepository<T>} repo
 * @param context
 * @param {T} model
 * @param operation
 * @param prefix
 *
 * @param oldModel
 * @function enforceDBPropertyDecoratorsAsync
 *
 * @memberOf db-decorators.utils
 */
export declare function enforceDBDecorators<M extends Model, Y extends IRepository<M>, V>(repo: Y, context: Context<M>, model: M, operation: string, prefix: string, oldModel?: M): Promise<void>;
/**
 * Specific for DB Decorators
 * @param {T} model
 * @param {string} operation CRUD {@link OperationKeys}
 * @param {string} [extraPrefix]
 *
 * @function getDbPropertyDecorators
 *
 * @memberOf db-decorators.utils
 */
export declare function getDbDecorators<T extends Model>(model: T, operation: string, extraPrefix?: string): Record<string, DecoratorMetadata[]> | undefined;
/**
 * @summary Retrieves the decorators for an object's properties prefixed by {@param prefixes} recursively
 * @param model
 * @param accum
 * @param prefixes
 *
 * @function getAllPropertyDecoratorsRecursive
 * @memberOf module:db-decorators.Repository
 */
export declare const getAllPropertyDecoratorsRecursive: <T extends Model>(model: T, accum: {
    [indexer: string]: any[];
} | undefined, ...prefixes: string[]) => {
    [indexer: string]: any[];
} | undefined;
