{"version":3,"file":"bootkit-angular-security.mjs","sources":["../../../projects/bootkit/security/user.ts","../../../projects/bootkit/security/user-store.ts","../../../projects/bootkit/security/claim.directive.ts","../../../projects/bootkit/security/guest-user.directive.ts","../../../projects/bootkit/security/security.module.ts","../../../projects/bootkit/security/bootkit-angular-security.ts"],"sourcesContent":["import { ClaimCriteria, ObjectClaimCriteria } from './types';\r\n\r\n/** User (Immutable) */\r\nexport class User {\r\n    constructor(public readonly claims: string[]) {\r\n    }\r\n\r\n    public hasAllClaims(claims: string[]): boolean {\r\n        return claims.every(x => this.claims.some(y => x === y));\r\n    }\r\n\r\n    public hasAnyClaim(claims: string[]): boolean {\r\n        return claims.length == 0 || claims.some(x => this.claims.some(y => x === y));\r\n    }\r\n\r\n    public hasClaim(claim: ClaimCriteria): boolean {\r\n        var type = typeof claim;\r\n        if (type === 'string') {\r\n            return this.claims.some(x => x === claim);\r\n        }\r\n\r\n        if (type === 'object') {\r\n            const co = claim as ObjectClaimCriteria;\r\n            if (co?.any && co?.all) {\r\n                throw Error('Setting \"any\" and \"all\" at the same time is not valid.');\r\n            }\r\n\r\n            if (Array.isArray(co?.any)) {\r\n                return this.hasAnyClaim(co.any);\r\n            }\r\n            if (Array.isArray(co?.all)) {\r\n                return this.hasAllClaims(co.all);\r\n            }\r\n        }\r\n\r\n        throw Error('Invalid claim');\r\n    }\r\n}\r\n","import { User } from './user';\r\nimport { Injectable, signal } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UserStore<U extends User = User> {\r\n    public readonly user = signal<U | null | undefined>(undefined);\r\n\r\n    constructor() {\r\n    }\r\n\r\n    clear() {\r\n        this.user.set(undefined)\r\n    }\r\n}","import { Directive, TemplateRef, ViewContainerRef, input, effect } from '@angular/core';\r\nimport { ClaimCriteria } from './types';\r\nimport { UserStore } from './user-store';\r\n\r\n@Directive({\r\n  selector: '[bkClaim]',\r\n  exportAs: 'bkClaim',\r\n  standalone: true\r\n})\r\nexport class UserDirective {\r\n  public claim = input<ClaimCriteria | null | undefined>(undefined, { alias: 'bkClaim' });\r\n  private _viewCreated = false;\r\n\r\n  constructor(\r\n    templateRef: TemplateRef<any>,\r\n    viewContainer: ViewContainerRef,\r\n    userStore: UserStore,\r\n  ) {\r\n    effect(() => {\r\n      let claim = this.claim();\r\n      let user = userStore.user();\r\n      let show = !user ? false : (claim == undefined ? true : user.hasClaim(claim))\r\n\r\n      if (show && !this._viewCreated) {\r\n         viewContainer.createEmbeddedView(templateRef);\r\n        this._viewCreated = true;\r\n      } else if (!show && this._viewCreated) {\r\n        viewContainer.clear();\r\n        this._viewCreated = false;\r\n      }\r\n    })\r\n  }\r\n}\r\n","import { Directive, TemplateRef, ViewContainerRef, effect } from '@angular/core';\r\nimport { UserStore } from './user-store';\r\n\r\n@Directive({\r\n  selector: '[bkGuestUser]',\r\n  exportAs: 'bkGuestUser',\r\n  standalone: true\r\n})\r\nexport class GuestUserDirective {\r\n  private _created = false;\r\n\r\n  constructor(\r\n    templateRef: TemplateRef<any>,\r\n    viewContainer: ViewContainerRef,\r\n    userStore: UserStore,\r\n  ) {\r\n    effect(() => {\r\n      let show = userStore.user() == undefined\r\n\r\n      if (show && !this._created) {\r\n        viewContainer.createEmbeddedView(templateRef);\r\n        this._created = true;\r\n      } else if (!show && this._created) {\r\n        viewContainer.clear();\r\n        this._created = false;\r\n      }\r\n    })\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { UserDirective } from './claim.directive';\r\nimport { GuestUserDirective } from './guest-user.directive';\r\n\r\nconst items = [\r\n    UserDirective,\r\n    GuestUserDirective\r\n]\r\n\r\n@NgModule({\r\n    imports: items,\r\n    exports: items\r\n})\r\nexport class SecurityModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UserStore"],"mappings":"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"}