declare const abilitiesSym = "$abilities"; declare const abilitiesOptSym = "$abilitiesOpt"; declare const AdditionalInjectionMode: { all: number; target: number; }; interface AbilityOptions { id?: string; mode?: number; include?: string | string[]; exclude?: string | string[]; methods?: Record; classMethods?: Record; rename?: Record; [name: string]: any; } interface AdditionalAbility { id?: string; mode?: number; required?: string[]; getOpts: (options?: AbilityOptions) => AbilityOptions | undefined; } interface AdditionalAbilities { [key: string]: AdditionalAbility | Array; } interface AbilityInjectorOptions { depends?: AdditionalAbilities; afterInjection?: (targetClass: Function, options?: AbilityOptions) => void; } type SafeInstanceType = T extends new (...args: any[]) => any ? InstanceType : T; type ClassEx = Function | (new (...args: any[]) => any); type EnhancedClass = (T & A) & SafeInstanceType & SafeInstanceType; type ClassAbilityFn = (targetClass?: T, options?: AbilityOptions) => EnhancedClass; declare function createAbilityInjector(abilityClass: A, isGetClassFunc?: boolean, injectorOpts?: AbilityInjectorOptions): ClassAbilityFn; declare function createAbilityInjector(abilityClass: A, aCoreMethod?: string | string[], isGetClassFunc?: boolean, injectorOpts?: AbilityInjectorOptions): ClassAbilityFn; declare function createAbilityInjector(abilityClass: A, aCoreMethod?: string | string[], injectorOpts?: AbilityInjectorOptions): ClassAbilityFn; declare function createAbilityInjector(abilityClass: A, injectorOpts?: AbilityInjectorOptions): ClassAbilityFn; declare function hasAbilityOnParent(aClass: Function, aName: string): any; declare function injectedOnParent(aClass: Function, aName: string): any; declare function requireAbility(packageName: string, aClass: Function, aOptions?: any): Promise; declare function flattenAbility(AbilityClass: T): T; export { type AbilityInjectorOptions, type AbilityOptions, type AdditionalAbilities, type AdditionalAbility, AdditionalInjectionMode, abilitiesOptSym, abilitiesSym, createAbilityInjector, createAbilityInjector as default, flattenAbility, hasAbilityOnParent, injectedOnParent, requireAbility };