import type { NActionDef } from '@neon.id/types'; import type { TRuleInstance } from '../rule'; import type { TPermitPayload, TPermitResult } from '../types'; import type { TAbilityCanOptions, TAbilityDefinition, TAbilityInstance } from './ability.types'; export declare class Ability implements TAbilityInstance { rules: Set; payload: TPermitPayload | undefined; isHydrated: boolean; private constructor(); /** * Define a new ability. */ static define(def: TAbilityDefinition): Ability; /** * Clone to a new ability instance. */ clone(): Ability; /** * Add one or more rules to the ability. */ add(rule: TRuleInstance | TRuleInstance[]): void; /** * Hydrate the ability with permit payload. */ hydrate(payload: TPermitPayload): void; /** * Check action and data against ability rules. */ can(action: NActionDef, data?: Record, options?: TAbilityCanOptions): TPermitResult; private log; }