{"version":3,"file":"index.mjs","sources":["../../src/pipes.ts","../../src/AbilityService.ts","../../src/AbilityServiceSignal.ts"],"sourcesContent":["import { Pipe, Inject, PipeTransform } from '@angular/core';\nimport { PureAbility, AnyAbility } from '@casl/ability';\nimport { Observable } from 'rxjs';\n\n/**\n * @deprecated use AbilityService instead\n */\n@Pipe({ name: 'able', pure: false, standalone: true })\nexport class AblePipe<T extends AnyAbility> implements PipeTransform {\n  private _ability: T;\n\n  constructor(@Inject(PureAbility) ability: T) {\n    this._ability = ability;\n  }\n\n  transform(...args: Parameters<T['can']>): boolean {\n    return this._ability.can(...args);\n  }\n}\n\n/**\n * @deprecated use AbilityService instead\n */\n@Pipe({ name: 'ablePure', standalone: true })\nexport class AblePurePipe<T extends AnyAbility> implements PipeTransform {\n  private _ability: T;\n\n  constructor(@Inject(PureAbility) ability: T) {\n    this._ability = ability;\n  }\n\n  transform(...args: Parameters<T['can']>): Observable<boolean> {\n    return new Observable((s) => {\n      const emit = () => s.next(this._ability.can(...args));\n      emit();\n      return this._ability.on('updated', emit);\n    });\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { AnyAbility, PureAbility } from '@casl/ability';\nimport { Observable } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class AbilityService<T extends AnyAbility> {\n  readonly ability$: Observable<T>;\n\n  constructor(@Inject(PureAbility) ability: T) {\n    this.ability$ = new Observable((observer) => {\n      observer.next(ability);\n      return ability.on('updated', () => observer.next(ability));\n    });\n  }\n}\n","import { inject, Injectable, OnDestroy, signal } from \"@angular/core\";\nimport { AnyAbility, PureAbility, RawRuleOf } from \"@casl/ability\";\n\n@Injectable({ providedIn: 'root' })\nexport class AbilityServiceSignal<T extends AnyAbility> implements OnDestroy {\n  private readonly _rules = signal<RawRuleOf<T>[]>([]);\n  private readonly _ability = inject(PureAbility) as unknown as T;\n  private readonly _disposeAbilitySubscription: () => void;\n\n  constructor() {\n    this._disposeAbilitySubscription = this._ability.on('updated', (event) => {\n      this._rules.set(event.rules as any);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._disposeAbilitySubscription();\n  }\n\n  can = (...args: Parameters<T['can']>): boolean => {\n    this._rules(); // generate side effect for angular to track changes in this signal\n    return this._ability.can(...args);\n  };\n\n  cannot = (...args: Parameters<T['can']>): boolean => {\n    return !this.can(...args);\n  };\n\n  update(rules: T['rules']): void {\n    this._ability.update(rules);\n  }\n}"],"names":[],"mappings":"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"}