@casl/angular 9.0.3 → 9.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/es5m/index.js +2 -1
- package/dist/es5m/index.js.map +1 -1
- package/dist/es6m/index.mjs +1 -1
- package/dist/es6m/index.mjs.map +1 -1
- package/dist/umd/index.js +5 -5
- package/dist/umd/index.js.map +1 -1
- package/package.json +11 -11
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://badge.fury.io/js/%40casl%2Fangular)
|
|
4
4
|
[](https://www.npmjs.com/package/%40casl%2Fangular)
|
|
5
|
-
[](https://github.com/stalniy/casl/discussions)
|
|
6
6
|
|
|
7
7
|
This package allows to integrate `@casl/ability` with [Angular] application. It provides deprecated `AblePipe`, `AblePurePipe` and new `AbilityService` and `AbilityServiceSignal` to Angular templates, so you can show or hide components, buttons, etc based on user ability to see them.
|
|
8
8
|
|
package/dist/es5m/index.js
CHANGED
|
@@ -2,6 +2,7 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { Pipe, Inject, Injectable, signal, inject } from '@angular/core';
|
|
3
3
|
import { PureAbility } from '@casl/ability';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
|
+
import { __spreadArray } from 'tslib';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* @deprecated use AbilityService instead
|
|
@@ -85,7 +86,7 @@ var AbilityService = /** @class */ (function () {
|
|
|
85
86
|
var AbilityServiceSignal = /** @class */ (function () {
|
|
86
87
|
function AbilityServiceSignal() {
|
|
87
88
|
var _this = this;
|
|
88
|
-
this._rules = signal([]);
|
|
89
|
+
this._rules = signal.apply(void 0, __spreadArray([[]], (ngDevMode ? [{ debugName: "_rules" }] : []), false));
|
|
89
90
|
this._ability = inject(PureAbility);
|
|
90
91
|
this.can = function () {
|
|
91
92
|
var _a;
|
package/dist/es5m/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","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":"
|
|
1
|
+
{"version":3,"file":"index.js","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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"}
|
package/dist/es6m/index.mjs
CHANGED
|
@@ -68,7 +68,7 @@ AbilityService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AbilitySe
|
|
|
68
68
|
|
|
69
69
|
class AbilityServiceSignal {
|
|
70
70
|
constructor() {
|
|
71
|
-
this._rules = signal([]);
|
|
71
|
+
this._rules = signal([], ...(ngDevMode ? [{ debugName: "_rules" }] : []));
|
|
72
72
|
this._ability = inject(PureAbility);
|
|
73
73
|
this.can = (...args) => {
|
|
74
74
|
this._rules(); // generate side effect for angular to track changes in this signal
|
package/dist/es6m/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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":";;;;;AAIA;;AAEG;MAEU,QAAQ,CAAA;AAGnB,IAAA,WAAA,CAAiC,OAAU,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;KACzB;IAED,SAAS,CAAC,GAAG,IAA0B,EAAA;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;KACnC;;AATU,QAAA,CAAA,IAAA,GAAA,SAAA,gBAAA,CAAA,iBAAA,EAAA,EAAA,OAAA,KAAA,iBAAA,IAAA,QAAQ,uBAGC,WAAW,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA;qEAHpB,QAAQ,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;iFAAR,QAAQ,EAAA,CAAA;cADpB,IAAI;eAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;;sBAItC,MAAM;uBAAC,WAAW,CAAA;;AASjC;;AAEG;MAEU,YAAY,CAAA;AAGvB,IAAA,WAAA,CAAiC,OAAU,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;KACzB;IAED,SAAS,CAAC,GAAG,IAA0B,EAAA;AACrC,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,KAAI;AAC1B,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACtD,YAAA,IAAI,EAAE,CAAC;YACP,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC3C,SAAC,CAAC,CAAC;KACJ;;AAbU,YAAA,CAAA,IAAA,GAAA,SAAA,oBAAA,CAAA,iBAAA,EAAA,EAAA,OAAA,KAAA,iBAAA,IAAA,YAAY,uBAGH,WAAW,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA;6EAHpB,YAAY,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA,CAAA;iFAAZ,YAAY,EAAA,CAAA;cADxB,IAAI;AAAC,QAAA,IAAA,EAAA,CAAA,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;;sBAI7B,MAAM;uBAAC,WAAW,CAAA;;;MCtBpB,cAAc,CAAA;AAGzB,IAAA,WAAA,CAAiC,OAAU,EAAA;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;AAC1C,YAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvB,YAAA,OAAO,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7D,SAAC,CAAC,CAAC;KACJ;;AARU,cAAA,CAAA,IAAA,GAAA,SAAA,sBAAA,CAAA,iBAAA,EAAA,EAAA,OAAA,KAAA,iBAAA,IAAA,cAAc,cAGL,WAAW,CAAA,CAAA,CAAA,EAAA,CAAA;oEAHpB,cAAc,EAAA,OAAA,EAAd,cAAc,CAAA,IAAA,EAAA,UAAA,EADD,MAAM,EAAA,CAAA,CAAA;iFACnB,cAAc,EAAA,CAAA;cAD1B,UAAU;eAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;sBAInB,MAAM;uBAAC,WAAW,CAAA;;;MCJpB,oBAAoB,CAAA;AAK/B,IAAA,WAAA,GAAA;AAJiB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAiB,EAAE,
|
|
1
|
+
{"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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"}
|
package/dist/umd/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@casl/ability'), require('rxjs')) :
|
|
3
|
-
typeof define === 'function' && define.amd ? define(['exports', '@angular/core', '@casl/ability', 'rxjs'], factory) :
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.casl = global.casl || {}, global.casl.ng = {}), global.ng.core, global.casl, global.rxjs));
|
|
5
|
-
})(this, (function (exports, i0, ability, rxjs) { 'use strict';
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@casl/ability'), require('rxjs'), require('tslib')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', '@angular/core', '@casl/ability', 'rxjs', 'tslib'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.casl = global.casl || {}, global.casl.ng = {}), global.ng.core, global.casl, global.rxjs, global.tslib));
|
|
5
|
+
})(this, (function (exports, i0, ability, rxjs, tslib) { 'use strict';
|
|
6
6
|
|
|
7
7
|
function _interopNamespaceDefault(e) {
|
|
8
8
|
var n = Object.create(null);
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
var AbilityServiceSignal = /** @class */ (function () {
|
|
106
106
|
function AbilityServiceSignal() {
|
|
107
107
|
var _this = this;
|
|
108
|
-
this._rules = i0.signal([]);
|
|
108
|
+
this._rules = i0.signal.apply(void 0, tslib.__spreadArray([[]], (ngDevMode ? [{ debugName: "_rules" }] : []), false));
|
|
109
109
|
this._ability = i0.inject(ability.PureAbility);
|
|
110
110
|
this.can = function () {
|
|
111
111
|
var _a;
|
package/dist/umd/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","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":["PureAbility","Pipe","Inject","Observable","Injectable","signal","inject"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","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":["PureAbility","Pipe","Inject","Observable","Injectable","signal","__spreadArray","inject"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@casl/angular",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.4",
|
|
4
4
|
"description": "Angular module for CASL which makes it easy to add permissions in any Angular app",
|
|
5
5
|
"main": "dist/umd/index.js",
|
|
6
6
|
"module": "dist/es5m/index.js",
|
|
@@ -46,27 +46,27 @@
|
|
|
46
46
|
"author": "Sergii Stotskyi <sergiy.stotskiy@gmail.com>",
|
|
47
47
|
"license": "MIT",
|
|
48
48
|
"peerDependencies": {
|
|
49
|
-
"@angular/core": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
49
|
+
"@angular/core": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0",
|
|
50
50
|
"@casl/ability": "^4.0.0 || ^5.1.0 || ^6.0.0",
|
|
51
51
|
"rxjs": "^7.5.5",
|
|
52
52
|
"tslib": "^2.0.0"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@angular-devkit/build-angular": "^
|
|
56
|
-
"@angular/common": "^
|
|
57
|
-
"@angular/compiler": "^
|
|
58
|
-
"@angular/compiler-cli": "^
|
|
59
|
-
"@angular/core": "^
|
|
60
|
-
"@angular/platform-browser": "^
|
|
61
|
-
"@angular/platform-browser-dynamic": "^
|
|
55
|
+
"@angular-devkit/build-angular": "^20.0.0",
|
|
56
|
+
"@angular/common": "^20.0.0",
|
|
57
|
+
"@angular/compiler": "^20.0.0",
|
|
58
|
+
"@angular/compiler-cli": "^20.0.0",
|
|
59
|
+
"@angular/core": "^20.0.0",
|
|
60
|
+
"@angular/platform-browser": "^20.0.0",
|
|
61
|
+
"@angular/platform-browser-dynamic": "^20.0.0",
|
|
62
62
|
"@casl/ability": "^6.0.0",
|
|
63
63
|
"@casl/dx": "workspace:^1.0.0",
|
|
64
64
|
"@types/jest": "^29.0.0",
|
|
65
65
|
"jest": "^29.0.0",
|
|
66
|
-
"jest-preset-angular": "^14.
|
|
66
|
+
"jest-preset-angular": "^14.6.1",
|
|
67
67
|
"rxjs": "^7.5.5",
|
|
68
68
|
"tslib": "^2.0.0",
|
|
69
|
-
"typescript": "~5.
|
|
69
|
+
"typescript": "~5.8.3",
|
|
70
70
|
"zone.js": "~0.15.0"
|
|
71
71
|
},
|
|
72
72
|
"files": [
|