import { ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
import { ValueOrFunction } from '../../../lib/utils.js';
import { AKModel } from '../model.js';
import type { AKModelServiceClass } from './index.js';
type AKEnabledRelationMutability = 'readOnly' | 'assignOnly' | 'full';
type AKEnabledRelationQueryModifier = <N extends typeof AKModel>(query: ModelQueryBuilderContract<N, InstanceType<N>>) => void;
export declare class AKEnabledRelation<M extends typeof AKModel> {
    name: string;
    mutability: AKEnabledRelationMutability;
    serviceClass: ValueOrFunction<AKModelServiceClass<M>> | undefined;
    service: InstanceType<AKModelServiceClass<M>> | undefined;
    queryModifier?: AKEnabledRelationQueryModifier;
    constructor(name: string, mutability: AKEnabledRelationMutability, serviceClass?: ValueOrFunction<AKModelServiceClass<M>>, service?: InstanceType<AKModelServiceClass<M>>, queryModifier?: AKEnabledRelationQueryModifier);
    static readOnly<M extends typeof AKModel>(name: string, serviceClass?: ValueOrFunction<AKModelServiceClass<M>>, queryModifier?: AKEnabledRelationQueryModifier): AKEnabledRelation<M>;
    static assignOnly<M extends typeof AKModel>(name: string, serviceClass?: ValueOrFunction<AKModelServiceClass<M>>, queryModifier?: AKEnabledRelationQueryModifier): AKEnabledRelation<M>;
    static full<M extends typeof AKModel>(name: string, serviceClass?: ValueOrFunction<AKModelServiceClass<M>>, queryModifier?: AKEnabledRelationQueryModifier): AKEnabledRelation<M>;
    makeService(): Promise<void>;
    copyWithName(newName: string): AKEnabledRelation<M>;
    static inherit<N extends typeof AKModel, M extends typeof AKModel>(prefix: string, relations: AKEnabledRelation<N>[]): AKEnabledRelation<M>[];
}
export {};
