{"version":3,"file":"linkworld-ngx-permissions.mjs","sources":["../../../projects/ngx-permissions/src/lib/enums/predefined-strategies.enum.ts","../../../projects/ngx-permissions/src/lib/store/configuration.store.ts","../../../projects/ngx-permissions/src/lib/service/configuration.service.ts","../../../projects/ngx-permissions/src/lib/utils/utils.ts","../../../projects/ngx-permissions/src/lib/store/permissions.store.ts","../../../projects/ngx-permissions/src/lib/service/permissions.service.ts","../../../projects/ngx-permissions/src/lib/store/roles.store.ts","../../../projects/ngx-permissions/src/lib/service/roles.service.ts","../../../projects/ngx-permissions/src/lib/directive/permissions.directive.ts","../../../projects/ngx-permissions/src/lib/model/permissions-router-data.model.ts","../../../projects/ngx-permissions/src/lib/router/permissions-guard.service.ts","../../../projects/ngx-permissions/src/lib/testing/permissions-allow.directive.stub.ts","../../../projects/ngx-permissions/src/lib/testing/permissions-restrict.directive.stub.ts","../../../projects/ngx-permissions/src/lib/index.ts","../../../projects/ngx-permissions/src/public-api.ts","../../../projects/ngx-permissions/src/linkworld-ngx-permissions.ts"],"sourcesContent":["export const NgxPermissionsPredefinedStrategies = {\n    REMOVE: 'remove',\n    SHOW: 'show'\n} as const;\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { Strategy } from '../service/configuration.service';\n\n@Injectable()\nexport class NgxPermissionsConfigurationStore {\n\n    public strategiesSource: BehaviorSubject<Strategy> = new BehaviorSubject<Strategy>({});\n    public strategies$: Observable<Strategy> = this.strategiesSource.asObservable();\n\n    public onAuthorisedDefaultStrategy: string | undefined;\n    public onUnAuthorisedDefaultStrategy: string | undefined;\n\n}\n","import { Inject, Injectable, InjectionToken, TemplateRef } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { NgxPermissionsPredefinedStrategies } from '../enums/predefined-strategies.enum';\nimport { NgxPermissionsConfigurationStore } from '../store/configuration.store';\n\nexport type StrategyFunction = (templateRef?: TemplateRef<any>) => void;\n\nexport interface Strategy {\n    [key: string]: StrategyFunction;\n}\n\nexport const USE_CONFIGURATION_STORE = new InjectionToken('USE_CONFIGURATION_STORE');\n\n@Injectable()\nexport class NgxPermissionsConfigurationService {\n\n    private strategiesSource: BehaviorSubject<Strategy>;\n    public strategies$: Observable<Strategy>;\n    public onAuthorisedDefaultStrategy: string | undefined;\n    public onUnAuthorisedDefaultStrategy: string | undefined;\n\n    constructor(\n        @Inject(USE_CONFIGURATION_STORE) private isolate: boolean = false,\n        private configurationStore: NgxPermissionsConfigurationStore\n    ) {\n        this.strategiesSource = this.isolate ? new BehaviorSubject<Strategy>({}) : this.configurationStore.strategiesSource;\n        this.strategies$ = this.strategiesSource.asObservable();\n\n        this.onAuthorisedDefaultStrategy = this.isolate ? undefined : this.configurationStore.onAuthorisedDefaultStrategy;\n        this.onUnAuthorisedDefaultStrategy = this.isolate ? undefined : this.configurationStore.onUnAuthorisedDefaultStrategy;\n\n    }\n\n    public setDefaultOnAuthorizedStrategy(name: string | 'remove' | 'show'): void {\n        if (this.isolate) {\n            this.onAuthorisedDefaultStrategy = this.getDefinedStrategy(name);\n        } else {\n            this.configurationStore.onAuthorisedDefaultStrategy = this.getDefinedStrategy(name);\n            this.onAuthorisedDefaultStrategy = this.configurationStore.onAuthorisedDefaultStrategy;\n        }\n    }\n\n    public setDefaultOnUnauthorizedStrategy(name: string | 'remove' | 'show'): void {\n        if (this.isolate) {\n            this.onUnAuthorisedDefaultStrategy = this.getDefinedStrategy(name);\n        } else {\n            this.configurationStore.onUnAuthorisedDefaultStrategy = this.getDefinedStrategy(name);\n            this.onUnAuthorisedDefaultStrategy = this.configurationStore.onUnAuthorisedDefaultStrategy;\n        }\n    }\n\n    public addPermissionStrategy(key: string, func: StrategyFunction): void {\n        this.strategiesSource.value[key] = func;\n    }\n\n    public getStrategy(key: string) {\n        return this.strategiesSource.value[key];\n    }\n\n    public getAllStrategies() {\n        return this.strategiesSource.value;\n    }\n\n    private getDefinedStrategy(name: string | 'remove' | 'show') {\n        if (this.strategiesSource.value[name] || this.isPredefinedStrategy(name)) {\n            return name;\n        } else {\n            throw new Error(`No ' ${name} ' strategy is found please define one`);\n        }\n    }\n\n    private isPredefinedStrategy(strategy: string): boolean {\n        return strategy === NgxPermissionsPredefinedStrategies.SHOW || strategy === NgxPermissionsPredefinedStrategies.REMOVE;\n    }\n\n}\n","export function isFunction<T>(value: any): value is T {\n    return typeof value === 'function';\n}\n\nexport function isPlainObject(value: any): boolean {\n    if (Object.prototype.toString.call(value) !== '[object Object]') {\n        return false;\n    } else {\n        const prototype = Object.getPrototypeOf(value);\n        return prototype === null || prototype === Object.prototype;\n    }\n}\n\nexport function isString(value: any): value is string {\n    return !!value && typeof value === 'string';\n}\n\nexport function isBoolean(value: any): value is boolean {\n    return typeof value === 'boolean';\n}\n\nexport function isPromise(promise: any) {\n    return Object.prototype.toString.call(promise) === '[object Promise]';\n}\n\nexport function notEmptyValue(value: string | string[]): boolean {\n    if (Array.isArray(value)) {\n        return value.length > 0;\n    }\n    return !!value;\n}\n\nexport function transformStringToArray(value: string | string[]): string[] {\n    if (isString(value)) {\n        return [value];\n    }\n    return value;\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable()\nexport class NgxPermissionsStore {\n\n    public permissionsSource = new BehaviorSubject<{}>({});\n    public permissions$: Observable<{}> = this.permissionsSource.asObservable();\n\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\n\nimport { BehaviorSubject, from, Observable, ObservableInput, of } from 'rxjs';\nimport { catchError, first, map, mergeAll, switchMap } from 'rxjs/operators';\n\nimport { NgxPermission } from '../model/permission.model';\nimport { ValidationFn } from '../model/permissions-router-data.model';\nimport { NgxPermissionsStore } from '../store/permissions.store';\n\nimport { isBoolean, isFunction, transformStringToArray } from '../utils/utils';\n\nexport interface NgxPermissionsObject {\n    [name: string]: NgxPermission;\n}\n\nexport const USE_PERMISSIONS_STORE = new InjectionToken('USE_PERMISSIONS_STORE');\n\n@Injectable()\nexport class NgxPermissionsService {\n\n    private permissionsSource: BehaviorSubject<NgxPermissionsObject>;\n    public permissions$: Observable<NgxPermissionsObject>;\n\n    constructor(\n        @Inject(USE_PERMISSIONS_STORE) private isolate: boolean = false,\n        private permissionsStore: NgxPermissionsStore\n    ) {\n        this.permissionsSource = this.isolate ? new BehaviorSubject<NgxPermissionsObject>({}) : this.permissionsStore.permissionsSource;\n        this.permissions$ = this.permissionsSource.asObservable();\n    }\n\n    /**\n     * Remove all permissions from permissions source\n     */\n    public flushPermissions(): void {\n        this.permissionsSource.next({});\n    }\n\n    public hasPermission(permission: string | string[]): Promise<boolean> {\n        if (!permission || (Array.isArray(permission) && permission.length === 0)) {\n            return Promise.resolve(true);\n        }\n\n        permission = transformStringToArray(permission);\n        return this.hasArrayPermission(permission);\n    }\n\n    public loadPermissions(permissions: string[], validationFunction?: ValidationFn): void {\n        const newPermissions = permissions.reduce(\n            (source, name) => this.reducePermission(source, name, validationFunction), {}\n        );\n        this.permissionsSource.next(newPermissions);\n    }\n\n    public addPermission(permission: string | string[], validationFunction?: ValidationFn): void {\n        if (Array.isArray(permission)) {\n            const permissions = permission.reduce(\n                (source, name) => this.reducePermission(source, name, validationFunction), this.permissionsSource.value\n            );\n\n            this.permissionsSource.next(permissions);\n        } else {\n            const permissions = this.reducePermission(this.permissionsSource.value, permission, validationFunction);\n\n            this.permissionsSource.next(permissions);\n        }\n    }\n\n    public removePermission(permissionName: string): void {\n        const permissions = {\n            ...this.permissionsSource.value\n        };\n        delete permissions[permissionName];\n        this.permissionsSource.next(permissions);\n    }\n\n    public getPermission(name: string): NgxPermission | undefined {\n        return this.permissionsSource.value[name];\n    }\n\n    public getPermissions(): NgxPermissionsObject {\n        return this.permissionsSource.value;\n    }\n\n    private reducePermission(source: NgxPermissionsObject, name: string, validationFunction?: ValidationFn): NgxPermissionsObject {\n        if (!!validationFunction && isFunction(validationFunction)) {\n            return {\n                ...source,\n                [name]: {name, validationFunction}\n            };\n        }\n        return {\n            ...source,\n            [name]: {name}\n        };\n    }\n\n    private hasArrayPermission(permissions: string[]): Promise<boolean> {\n        const promises: Observable<boolean>[] = permissions.map(key => {\n            if (this.hasPermissionValidationFunction(key)) {\n                const validationFunction = this.permissionsSource.value[key].validationFunction;\n                const immutableValue = {...this.permissionsSource.value};\n\n                return of(null).pipe(\n                    map(() => validationFunction(key, immutableValue)),\n                    switchMap((promise: Promise<boolean> | boolean): ObservableInput<boolean> => isBoolean(promise) ?\n                        of(promise as boolean) : promise as Promise<boolean>),\n                    catchError(() => of(false))\n                );\n            }\n\n            // check for name of the permission if there is no validation function\n            return of(!!this.permissionsSource.value[key]);\n        });\n\n        return from(promises).pipe(\n            mergeAll(),\n            first((data) => data !== false, false),\n            map((data) => data !== false)\n        ).toPromise().then((data: any) => data);\n    }\n\n    private hasPermissionValidationFunction(key: string): boolean {\n        return !!this.permissionsSource.value[key] &&\n            !!this.permissionsSource.value[key].validationFunction &&\n            isFunction(this.permissionsSource.value[key].validationFunction);\n    }\n\n}\n","import { BehaviorSubject, Observable } from 'rxjs';\n\nexport class NgxRolesStore {\n\n    public rolesSource = new BehaviorSubject<{}>({});\n\n    public roles$: Observable<{}> = this.rolesSource.asObservable();\n\n}\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\n\nimport { BehaviorSubject, from, Observable, ObservableInput, of } from 'rxjs';\nimport { catchError, every, first, map, mergeAll, mergeMap, switchMap } from 'rxjs/operators';\nimport { ValidationFn } from '../model/permissions-router-data.model';\n\nimport { NgxRole } from '../model/role.model';\nimport { NgxRolesStore } from '../store/roles.store';\nimport { isBoolean, isFunction, isPromise, transformStringToArray } from '../utils/utils';\nimport { NgxPermissionsService } from './permissions.service';\n\nexport const USE_ROLES_STORE = new InjectionToken('USE_ROLES_STORE');\n\nexport interface NgxRolesObject {\n    [name: string]: NgxRole;\n}\n\n@Injectable()\nexport class NgxRolesService {\n\n    private rolesSource: BehaviorSubject<NgxRolesObject>;\n\n    public roles$: Observable<NgxRolesObject>;\n\n    constructor(\n        @Inject(USE_ROLES_STORE) private isolate: boolean = false,\n        private rolesStore: NgxRolesStore,\n        private permissionsService: NgxPermissionsService\n    ) {\n        this.rolesSource = this.isolate ? new BehaviorSubject<NgxRolesObject>({}) : this.rolesStore.rolesSource;\n        this.roles$ = this.rolesSource.asObservable();\n    }\n\n    public addRole(name: string, validationFunction: ValidationFn | string[]) {\n        const roles = {\n            ...this.rolesSource.value,\n            [name]: {name, validationFunction}\n        };\n        this.rolesSource.next(roles);\n    }\n\n    public addRoleWithPermissions(name: string, permissions: string[]) {\n        this.permissionsService.addPermission(permissions);\n        this.addRole(name, permissions);\n    }\n\n    public addRoles(rolesObj: { [name: string]: ValidationFn | string[] }) {\n        Object.keys(rolesObj).forEach((key, index) => {\n            this.addRole(key, rolesObj[key]);\n        });\n    }\n\n    public addRolesWithPermissions(rolesObj: { [name: string]: string[] }) {\n        Object.keys(rolesObj).forEach((key, index) => {\n            this.addRoleWithPermissions(key, rolesObj[key]);\n        });\n    }\n\n    public flushRoles() {\n        this.rolesSource.next({});\n    }\n\n    public flushRolesAndPermissions() {\n        this.flushRoles();\n        this.permissionsService.flushPermissions();\n    }\n\n    public removeRole(roleName: string) {\n        const roles = {\n            ...this.rolesSource.value\n        };\n        delete roles[roleName];\n        this.rolesSource.next(roles);\n    }\n\n    public getRoles(): NgxRolesObject {\n        return this.rolesSource.value;\n    }\n\n    public getRole(name: string): NgxRole | undefined {\n        return this.rolesSource.value[name];\n    }\n\n    public hasOnlyRoles(names: string | string[]): Promise<boolean> {\n        const isNamesEmpty = !names || (Array.isArray(names) && names.length === 0);\n\n        if (isNamesEmpty) {\n            return Promise.resolve(true);\n        }\n\n        names = transformStringToArray(names);\n\n        return Promise.all([this.hasRoleKey(names), this.hasRolePermission(this.rolesSource.value, names)])\n            .then(([hasRoles, hasPermissions]: [boolean, boolean]) => {\n                return hasRoles || hasPermissions;\n            });\n    }\n\n    private hasRoleKey(roleName: string[]): Promise<boolean> {\n        const promises: Observable<boolean>[] = roleName.map((key) => {\n            const hasValidationFunction = !!this.rolesSource.value[key] &&\n                                          !!this.rolesSource.value[key].validationFunction &&\n                                          isFunction(this.rolesSource.value[key].validationFunction);\n\n            if (hasValidationFunction && !isPromise(this.rolesSource.value[key].validationFunction)) {\n                const validationFunction = this.rolesSource.value[key].validationFunction as ValidationFn;\n                const immutableValue = {...this.rolesSource.value};\n\n                return of(null).pipe(\n                    map(() => validationFunction(key, immutableValue)),\n                    switchMap((promise: Promise<boolean> | boolean): ObservableInput<boolean> => isBoolean(promise) ?\n                        of(promise as boolean) : promise as Promise<boolean>),\n                    catchError(() => of(false))\n                );\n            }\n\n            return of(false);\n        });\n\n        return from(promises).pipe(\n            mergeAll(),\n            first((data: any) => data !== false, false),\n            map((data) => data !== false)\n        ).toPromise().then((data: any) => data);\n    }\n\n    private hasRolePermission(roles: NgxRolesObject, roleNames: string[]): Promise<boolean> {\n        return from(roleNames).pipe(\n            mergeMap((key) => {\n                if (roles[key] && Array.isArray(roles[key].validationFunction)) {\n                    return from(<string[]>roles[key].validationFunction).pipe(\n                        mergeMap((permission) => this.permissionsService.hasPermission(permission)),\n                        every(hasPermission => hasPermission === true)\n                    );\n                }\n\n                return of(false);\n            }),\n            first(hasPermission => hasPermission === true, false)\n        ).toPromise();\n    }\n\n}\n","import {\n    ChangeDetectorRef,\n    Directive,\n    EventEmitter,\n    inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n    TemplateRef,\n    ViewContainerRef\n} from '@angular/core';\n\nimport { merge, Subscription } from 'rxjs';\nimport { skip, take } from 'rxjs/operators';\n\nimport { NgxPermissionsPredefinedStrategies } from '../enums/predefined-strategies.enum';\nimport { NgxPermissionsConfigurationService, StrategyFunction } from '../service/configuration.service';\nimport { NgxPermissionsService } from '../service/permissions.service';\nimport { NgxRolesService } from '../service/roles.service';\nimport { isBoolean, isFunction, isString, notEmptyValue } from '../utils/utils';\n\n@Directive({\n    selector: '[ngxPermissionsOnly],[ngxPermissionsExcept]'\n})\nexport class NgxPermissionsDirective implements OnInit, OnDestroy, OnChanges {\n\n    @Input() ngxPermissionsOnly: string | string[];\n    @Input() ngxPermissionsOnlyThen: TemplateRef<any>;\n    @Input() ngxPermissionsOnlyElse: TemplateRef<any>;\n\n    @Input() ngxPermissionsExcept: string | string[];\n    @Input() ngxPermissionsExceptElse: TemplateRef<any>;\n    @Input() ngxPermissionsExceptThen: TemplateRef<any>;\n\n    @Input() ngxPermissionsThen: TemplateRef<any>;\n    @Input() ngxPermissionsElse: TemplateRef<any>;\n\n    @Input() ngxPermissionsOnlyAuthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsOnlyUnauthorisedStrategy: string | StrategyFunction;\n\n    @Input() ngxPermissionsExceptUnauthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsExceptAuthorisedStrategy: string | StrategyFunction;\n\n    @Input() ngxPermissionsUnauthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsAuthorisedStrategy: string | StrategyFunction;\n\n    @Output() permissionsAuthorized = new EventEmitter();\n    @Output() permissionsUnauthorized = new EventEmitter();\n\n    private initPermissionSubscription: Subscription;\n    // skip first run cause merge will fire twice\n    private firstMergeUnusedRun = 1;\n    private currentAuthorizedState: boolean;\n\n    private readonly permissionsService = inject(NgxPermissionsService);\n    private readonly configurationService = inject(NgxPermissionsConfigurationService);\n    private readonly rolesService = inject(NgxRolesService);\n    private readonly viewContainer = inject(ViewContainerRef);\n    private readonly changeDetector = inject(ChangeDetectorRef);\n    private readonly templateRef = inject(TemplateRef<any>);\n\n    ngOnInit(): void {\n        this.viewContainer.clear();\n        this.initPermissionSubscription = this.validateExceptOnlyPermissions();\n    }\n\n\n    ngOnChanges(changes: SimpleChanges): void {\n        const onlyChanges = changes['ngxPermissionsOnly'];\n        const exceptChanges = changes['ngxPermissionsExcept'];\n        if (onlyChanges || exceptChanges) {\n            // Due to bug when you pass empty array\n            if (onlyChanges && onlyChanges.firstChange) {\n                return;\n            }\n            if (exceptChanges && exceptChanges.firstChange) {\n                return;\n            }\n\n            merge(this.permissionsService.permissions$, this.rolesService.roles$)\n                .pipe(skip(this.firstMergeUnusedRun), take(1))\n                .subscribe(() => {\n                    if (notEmptyValue(this.ngxPermissionsExcept)) {\n                        this.validateExceptAndOnlyPermissions();\n                        return;\n                    }\n\n                    if (notEmptyValue(this.ngxPermissionsOnly)) {\n                        this.validateOnlyPermissions();\n                        return;\n                    }\n\n                    this.handleAuthorisedPermission(this.getAuthorisedTemplates());\n                });\n        }\n    }\n\n    ngOnDestroy(): void {\n        if (this.initPermissionSubscription) {\n            this.initPermissionSubscription.unsubscribe();\n        }\n    }\n\n    private validateExceptOnlyPermissions(): Subscription {\n        return merge(this.permissionsService.permissions$, this.rolesService.roles$)\n            .pipe(skip(this.firstMergeUnusedRun))\n            .subscribe(() => {\n                if (notEmptyValue(this.ngxPermissionsExcept)) {\n                    this.validateExceptAndOnlyPermissions();\n                    return;\n                }\n\n                if (notEmptyValue(this.ngxPermissionsOnly)) {\n                    this.validateOnlyPermissions();\n                    return;\n                }\n                this.handleAuthorisedPermission(this.getAuthorisedTemplates());\n            });\n    }\n\n    private validateExceptAndOnlyPermissions(): void {\n        Promise\n            .all([\n                this.permissionsService.hasPermission(this.ngxPermissionsExcept),\n                this.rolesService.hasOnlyRoles(this.ngxPermissionsExcept)\n            ])\n            .then(([hasPermission, hasRole]) => {\n                if (hasPermission || hasRole) {\n                    this.handleUnauthorisedPermission(this.ngxPermissionsExceptElse || this.ngxPermissionsElse);\n                    return;\n                }\n\n                if (!!this.ngxPermissionsOnly) {\n                    throw false;\n                }\n\n                this.handleAuthorisedPermission(this.ngxPermissionsExceptThen || this.ngxPermissionsThen || this.templateRef);\n            })\n            .catch(() => {\n                if (!!this.ngxPermissionsOnly) {\n                    this.validateOnlyPermissions();\n                } else {\n                    this.handleAuthorisedPermission(this.ngxPermissionsExceptThen || this.ngxPermissionsThen || this.templateRef);\n                }\n            });\n    }\n\n    private validateOnlyPermissions(): void {\n        Promise\n            .all([this.permissionsService.hasPermission(this.ngxPermissionsOnly), this.rolesService.hasOnlyRoles(this.ngxPermissionsOnly)])\n            .then(([hasPermissions, hasRoles]) => {\n                if (hasPermissions || hasRoles) {\n                    this.handleAuthorisedPermission(this.ngxPermissionsOnlyThen || this.ngxPermissionsThen || this.templateRef);\n                } else {\n                    this.handleUnauthorisedPermission(this.ngxPermissionsOnlyElse || this.ngxPermissionsElse);\n                }\n            })\n            .catch(() => {\n                this.handleUnauthorisedPermission(this.ngxPermissionsOnlyElse || this.ngxPermissionsElse);\n            });\n    }\n\n    private handleUnauthorisedPermission(template: TemplateRef<any>): void {\n        if (isBoolean(this.currentAuthorizedState) && !this.currentAuthorizedState) {\n            return;\n        }\n\n        this.currentAuthorizedState = false;\n        this.permissionsUnauthorized.emit();\n\n        if (this.getUnAuthorizedStrategyInput()) {\n            this.applyStrategyAccordingToStrategyType(this.getUnAuthorizedStrategyInput());\n            return;\n        }\n\n        if (this.configurationService.onUnAuthorisedDefaultStrategy && !this.elseBlockDefined()) {\n            this.applyStrategy(this.configurationService.onUnAuthorisedDefaultStrategy);\n        } else {\n            this.showTemplateBlockInView(template);\n        }\n\n    }\n\n    private handleAuthorisedPermission(template: TemplateRef<any>): void {\n        if (isBoolean(this.currentAuthorizedState) && this.currentAuthorizedState) {\n            return;\n        }\n\n        this.currentAuthorizedState = true;\n        this.permissionsAuthorized.emit();\n\n        if (this.getAuthorizedStrategyInput()) {\n            this.applyStrategyAccordingToStrategyType(this.getAuthorizedStrategyInput());\n            return;\n        }\n\n        if (this.configurationService.onAuthorisedDefaultStrategy && !this.thenBlockDefined()) {\n            this.applyStrategy(this.configurationService.onAuthorisedDefaultStrategy);\n        } else {\n            this.showTemplateBlockInView(template);\n        }\n    }\n\n    private applyStrategyAccordingToStrategyType(strategy: string | StrategyFunction): void {\n        if (isString(strategy)) {\n            this.applyStrategy(strategy);\n            return;\n        }\n\n        if (isFunction(strategy)) {\n            this.showTemplateBlockInView(this.templateRef);\n            (strategy as StrategyFunction)(this.templateRef);\n            return;\n        }\n    }\n\n    private showTemplateBlockInView(template: TemplateRef<any>): void {\n        this.viewContainer.clear();\n        if (!template) {\n            return;\n        }\n\n        this.viewContainer.createEmbeddedView(template);\n        this.changeDetector.markForCheck();\n    }\n\n    private getAuthorisedTemplates(): TemplateRef<any> {\n        return this.ngxPermissionsOnlyThen\n            || this.ngxPermissionsExceptThen\n            || this.ngxPermissionsThen\n            || this.templateRef;\n    }\n\n    private elseBlockDefined(): boolean {\n        return !!this.ngxPermissionsExceptElse || !!this.ngxPermissionsElse;\n    }\n\n    private thenBlockDefined() {\n        return !!this.ngxPermissionsExceptThen || !!this.ngxPermissionsThen;\n    }\n\n    private getAuthorizedStrategyInput() {\n        return this.ngxPermissionsOnlyAuthorisedStrategy ||\n            this.ngxPermissionsExceptAuthorisedStrategy ||\n            this.ngxPermissionsAuthorisedStrategy;\n    }\n\n    private getUnAuthorizedStrategyInput() {\n        return this.ngxPermissionsOnlyUnauthorisedStrategy ||\n            this.ngxPermissionsExceptUnauthorisedStrategy ||\n            this.ngxPermissionsUnauthorisedStrategy;\n    }\n\n    private applyStrategy(name: string) {\n        if (name === NgxPermissionsPredefinedStrategies.SHOW) {\n            this.showTemplateBlockInView(this.templateRef);\n            return;\n        }\n\n        if (name === NgxPermissionsPredefinedStrategies.REMOVE) {\n            this.viewContainer.clear();\n            return;\n        }\n        const strategy = this.configurationService.getStrategy(name);\n        this.showTemplateBlockInView(this.templateRef);\n        strategy(this.templateRef);\n    }\n}\n","import { ActivatedRouteSnapshot, NavigationExtras, Route, RouterStateSnapshot } from '@angular/router';\n\nexport interface NgxPermissionsRouterData {\n    only?: string | string[] | OnlyFn;\n    except?: string | string[] | ExceptFn;\n    redirectTo?: RedirectTo | RedirectToFn;\n}\n\nexport interface NgxRedirectToNavigationParameters {\n    navigationCommands: any[] | NavigationCommandsFn;\n    navigationExtras?: NavigationExtras | NavigationExtrasFn;\n}\n\nexport declare type OnlyFn = (route: ActivatedRouteSnapshot | Route, state?: RouterStateSnapshot) => string | string[];\nexport declare type ExceptFn = (route: ActivatedRouteSnapshot | Route, state?: RouterStateSnapshot) => string | string[];\n\nexport declare type RedirectTo =\n    string\n    | { [name: string]: NgxRedirectToNavigationParameters | string | RedirectToFn }\n    | NgxRedirectToNavigationParameters;\nexport declare type RedirectToFn =\n    (rejectedPermissionName?: string, route?: ActivatedRouteSnapshot | Route, state?: RouterStateSnapshot) => RedirectTo;\n\nexport declare type NavigationCommandsFn = (route: ActivatedRouteSnapshot | Route, state?: RouterStateSnapshot) => any[];\nexport declare type NavigationExtrasFn = (route: ActivatedRouteSnapshot | Route, state?: RouterStateSnapshot) => NavigationExtras;\nexport declare type ValidationFn = ((name?: string, store?: any) => Promise<void | string | boolean> | boolean | string[]);\n\nexport const DEFAULT_REDIRECT_KEY = 'default';\n","import { inject, Injectable } from '@angular/core';\nimport {\n    ActivatedRouteSnapshot,\n    CanActivateChildFn,\n    CanActivateFn,\n    CanMatchFn,\n    NavigationExtras,\n    Route,\n    Router,\n    RouterStateSnapshot,\n    UrlSegment\n} from '@angular/router';\n\nimport { forkJoin, from, Observable, of } from 'rxjs';\nimport { first, mergeMap, tap } from 'rxjs/operators';\n\nimport {\n    DEFAULT_REDIRECT_KEY,\n    ExceptFn,\n    NavigationCommandsFn,\n    NavigationExtrasFn,\n    NgxPermissionsRouterData,\n    NgxRedirectToNavigationParameters,\n    OnlyFn,\n    RedirectTo,\n    RedirectToFn\n} from '../model/permissions-router-data.model';\nimport { NgxPermissionsService } from '../service/permissions.service';\nimport { NgxRolesService } from '../service/roles.service';\nimport { isFunction, isPlainObject, transformStringToArray } from '../utils/utils';\n\nexport interface NgxPermissionsData {\n    only?: string | string[];\n    except?: string | string[];\n    redirectTo?: RedirectTo | RedirectToFn;\n}\n\nexport const ngxPermissionsGuard: CanActivateFn | CanActivateChildFn | CanMatchFn = (route: ActivatedRouteSnapshot | Route, state: RouterStateSnapshot | UrlSegment[]) => {\n    const permissionsGuard = inject(NgxPermissionsGuard);\n    if (state instanceof RouterStateSnapshot) {\n        return permissionsGuard.hasPermissions(route, state);\n    }\n    return permissionsGuard.hasPermissions(route);\n}\n\n/**\n * @deprecated Use {@link ngxPermissionsGuard} instead\n */\n@Injectable()\nexport class NgxPermissionsGuard {\n\n    constructor(private permissionsService: NgxPermissionsService, private rolesService: NgxRolesService, private router: Router) {\n    }\n\n    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> | boolean {\n        return this.hasPermissions(route, state);\n    }\n\n    canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {\n        return this.hasPermissions(childRoute, state);\n    }\n\n    canLoad(route: Route): boolean | Observable<boolean> | Promise<boolean> {\n        return this.hasPermissions(route);\n    }\n\n    canMatch(route: Route): boolean | Observable<boolean> | Promise<boolean> {\n        return this.hasPermissions(route);\n    }\n\n    hasPermissions(route: ActivatedRouteSnapshot | Route, state?: RouterStateSnapshot) {\n        const routeDataPermissions = !!route && route.data ? (route.data['permissions'] as NgxPermissionsRouterData) : {};\n        const permissions = this.transformPermission(routeDataPermissions, route, state);\n\n        if (this.isParameterAvailable(permissions.except)) {\n            return this.passingExceptPermissionsValidation(permissions, route, state);\n        }\n\n        if (this.isParameterAvailable(permissions.only)) {\n            return this.passingOnlyPermissionsValidation(permissions, route, state);\n        }\n\n        return true;\n    }\n\n    private transformPermission(\n        permissions: NgxPermissionsRouterData,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ): NgxPermissionsData {\n        const only = isFunction<OnlyFn>(permissions.only)\n            ? permissions.only(route, state)\n            : transformStringToArray(permissions.only);\n        const except = isFunction<ExceptFn>(permissions.except)\n            ? permissions.except(route, state)\n            : transformStringToArray(permissions.except);\n        const redirectTo = permissions.redirectTo;\n\n\n        return {\n            only,\n            except,\n            redirectTo\n        };\n    }\n\n    private isParameterAvailable(permission: string | string[]) {\n        return !!permission && permission.length > 0;\n    }\n\n    private passingExceptPermissionsValidation(\n        permissions: NgxPermissionsData,\n        route: ActivatedRouteSnapshot | Route,\n        state: RouterStateSnapshot\n    ): Promise<boolean> {\n        if (\n            !!permissions.redirectTo\n            && (\n                (isFunction<RedirectToFn>(permissions.redirectTo))\n                || (isPlainObject(permissions.redirectTo) && !this.isRedirectionWithParameters(permissions.redirectTo))\n            )\n        ) {\n            let failedPermission = '';\n\n            return from(permissions.except)\n                .pipe(\n                    mergeMap(permissionsExcept => {\n                        return forkJoin([\n                            this.permissionsService.hasPermission(permissionsExcept),\n                            this.rolesService.hasOnlyRoles(permissionsExcept)\n                        ]).pipe(\n                            tap(hasPermissions => {\n                                const dontHavePermissions = hasPermissions.every(hasPermission => hasPermission === false);\n\n                                if (!dontHavePermissions) {\n                                    failedPermission = permissionsExcept;\n                                }\n                            })\n                        );\n                    }),\n                    first(hasPermissions => hasPermissions.some(hasPermission => hasPermission === true), false),\n                    mergeMap(isAllFalse => {\n                        if (!!failedPermission) {\n                            this.handleRedirectOfFailedPermission(permissions, failedPermission, route, state);\n\n                            return of(false);\n                        }\n\n                        if (!isAllFalse && permissions.only) {\n                            return this.onlyRedirectCheck(permissions, route, state);\n                        }\n\n                        return of(!isAllFalse);\n                    })\n                )\n                .toPromise();\n        }\n\n        return Promise.all([\n            this.permissionsService.hasPermission(permissions.except),\n            this.rolesService.hasOnlyRoles(permissions.except)\n        ]).then(([hasPermission, hasRoles]) => {\n            if (hasPermission || hasRoles) {\n                if (permissions.redirectTo) {\n                    this.redirectToAnotherRoute(\n                        permissions.redirectTo,\n                        route,\n                        state\n                    );\n                }\n\n                return false;\n            }\n\n            if (permissions.only) {\n                return this.checkOnlyPermissions(permissions, route, state);\n            }\n            return true;\n        });\n    }\n\n    private redirectToAnotherRoute(\n        permissionRedirectTo: RedirectTo | RedirectToFn,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot,\n        failedPermissionName?: string\n    ): void {\n\n        const redirectTo = isFunction<RedirectToFn>(permissionRedirectTo)\n            ? permissionRedirectTo(failedPermissionName, route, state)\n            : permissionRedirectTo;\n\n        if (this.isRedirectionWithParameters(redirectTo)) {\n            redirectTo.navigationCommands = this.transformNavigationCommands(redirectTo.navigationCommands, route, state);\n            redirectTo.navigationExtras = this.transformNavigationExtras(redirectTo.navigationExtras, route, state);\n            this.router.navigate(redirectTo.navigationCommands, redirectTo.navigationExtras);\n            return;\n        }\n\n        if (Array.isArray(redirectTo)) {\n            this.router.navigate(redirectTo);\n        } else {\n            this.router.navigate([redirectTo]);\n        }\n    }\n\n    private isRedirectionWithParameters(object: any | NgxRedirectToNavigationParameters): object is NgxRedirectToNavigationParameters {\n        return (isPlainObject(object) && (!!object.navigationCommands || !!object.navigationExtras));\n    }\n\n    private transformNavigationCommands(\n        navigationCommands: any[] | NavigationCommandsFn,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ): any[] {\n        return isFunction<NavigationCommandsFn>(navigationCommands)\n            ? navigationCommands(route, state)\n            : navigationCommands;\n    }\n\n    private transformNavigationExtras(\n        navigationExtras: NavigationExtras | NavigationExtrasFn,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ): NavigationExtras {\n        return isFunction<NavigationExtrasFn>(navigationExtras)\n            ? navigationExtras(route, state)\n            : navigationExtras;\n    }\n\n    private onlyRedirectCheck(\n        permissions: NgxPermissionsData,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ): Promise<boolean> {\n        let failedPermission = '';\n\n        return from(permissions.only)\n            .pipe(\n                mergeMap(permissionsOnly => {\n                    return forkJoin([\n                        this.permissionsService.hasPermission(permissionsOnly),\n                        this.rolesService.hasOnlyRoles(permissionsOnly)\n                    ]).pipe(\n                        tap(hasPermissions => {\n                            const failed = hasPermissions.every(hasPermission => hasPermission === false);\n\n                            if (failed) {\n                                failedPermission = permissionsOnly;\n                            }\n                        })\n                    );\n                }),\n                first(hasPermissions => {\n                        if (isFunction<RedirectToFn>(permissions.redirectTo)) {\n                            return hasPermissions.some(hasPermission => hasPermission === true);\n                        }\n\n                        return hasPermissions.every(hasPermission => hasPermission === false);\n                    },\n                    false),\n                mergeMap(\n                    (pass: boolean): Observable<boolean> => {\n                        if (isFunction<RedirectToFn>(permissions.redirectTo)) {\n                            if (pass) {\n                                return of(true);\n                            } else {\n                                this.handleRedirectOfFailedPermission(permissions, failedPermission, route, state);\n                                return of(false);\n                            }\n                        } else {\n                            if (!!failedPermission) {\n                                this.handleRedirectOfFailedPermission(permissions, failedPermission, route, state);\n                            }\n                            return of(!pass);\n                        }\n                    }\n                )\n            )\n            .toPromise();\n    }\n\n    private handleRedirectOfFailedPermission(\n        permissions: NgxPermissionsData,\n        failedPermission: string,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ) {\n        if (this.isFailedPermissionPropertyOfRedirectTo(permissions, failedPermission)) {\n            this.redirectToAnotherRoute(permissions.redirectTo[failedPermission], route, state, failedPermission);\n        } else {\n            if (isFunction<RedirectToFn>(permissions.redirectTo)) {\n                this.redirectToAnotherRoute(permissions.redirectTo, route, state, failedPermission);\n            } else {\n                this.redirectToAnotherRoute(permissions.redirectTo[DEFAULT_REDIRECT_KEY], route, state, failedPermission);\n            }\n        }\n    }\n\n    private isFailedPermissionPropertyOfRedirectTo(permissions: NgxPermissionsData, failedPermission: string): boolean {\n        return (!!permissions.redirectTo && permissions.redirectTo[failedPermission]);\n    }\n\n    private checkOnlyPermissions(\n        purePermissions: NgxPermissionsData,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ): Promise<boolean> {\n        const permissions: NgxPermissionsData = {\n            ...purePermissions\n        };\n\n        return Promise.all([\n            this.permissionsService.hasPermission(permissions.only),\n            this.rolesService.hasOnlyRoles(permissions.only)\n        ]).then(([hasPermission, hasRole]) => {\n            if (hasPermission || hasRole) {\n                return true;\n            }\n\n            if (permissions.redirectTo) {\n                this.redirectToAnotherRoute(permissions.redirectTo, route, state);\n            }\n\n            return false;\n        });\n    }\n\n    private passingOnlyPermissionsValidation(\n        permissions: NgxPermissionsData,\n        route: ActivatedRouteSnapshot | Route,\n        state?: RouterStateSnapshot\n    ): Promise<boolean> {\n        if (\n            (isFunction<RedirectToFn>(permissions.redirectTo)\n                || isPlainObject(permissions.redirectTo) && !this.isRedirectionWithParameters(permissions.redirectTo))\n        ) {\n            return this.onlyRedirectCheck(permissions, route, state);\n        }\n        return this.checkOnlyPermissions(permissions, route, state);\n    }\n}\n","import { Directive, EventEmitter, inject, Input, OnInit, Output, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { StrategyFunction } from '../service/configuration.service';\n\n@Directive({\n    standalone: true,\n    selector: '[ngxPermissionsOnly],[ngxPermissionsExcept]',\n})\nexport class NgxPermissionsAllowStubDirective implements OnInit {\n    @Input() ngxPermissionsOnly: string | string[];\n    @Input() ngxPermissionsOnlyThen: TemplateRef<any>;\n    @Input() ngxPermissionsOnlyElse: TemplateRef<any>;\n\n    @Input() ngxPermissionsExcept: string | string[];\n    @Input() ngxPermissionsExceptElse: TemplateRef<any>;\n    @Input() ngxPermissionsExceptThen: TemplateRef<any>;\n\n    @Input() ngxPermissionsThen: TemplateRef<any>;\n    @Input() ngxPermissionsElse: TemplateRef<any>;\n\n    @Input() ngxPermissionsOnlyAuthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsOnlyUnauthorisedStrategy: string | StrategyFunction;\n\n    @Input() ngxPermissionsExceptUnauthorisedStrategy:\n        | string\n        | StrategyFunction;\n    @Input() ngxPermissionsExceptAuthorisedStrategy: string | StrategyFunction;\n\n    @Input() ngxPermissionsUnauthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsAuthorisedStrategy: string | StrategyFunction;\n\n    @Output() permissionsAuthorized = new EventEmitter();\n    @Output() permissionsUnauthorized = new EventEmitter();\n\n    private viewContainer = inject(ViewContainerRef);\n    private templateRef = inject(TemplateRef<any>);\n\n    ngOnInit(): void {\n        this.viewContainer.clear();\n        this.viewContainer.createEmbeddedView(this.getAuthorizedTemplate());\n        this.permissionsAuthorized.emit();\n    }\n\n    private getAuthorizedTemplate() {\n        return (\n            this.ngxPermissionsOnlyThen ||\n            this.ngxPermissionsExceptThen ||\n            this.ngxPermissionsThen ||\n            this.templateRef\n        );\n    }\n}\n","import { Directive, EventEmitter, inject, Input, OnInit, Output, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { StrategyFunction } from '../service/configuration.service';\n\n@Directive({\n    standalone: true,\n    selector: '[ngxPermissionsOnly],[ngxPermissionsExcept]',\n})\nexport class NgxPermissionsRestrictStubDirective implements OnInit {\n    @Input() ngxPermissionsOnly: string | string[];\n    @Input() ngxPermissionsOnlyThen: TemplateRef<any>;\n    @Input() ngxPermissionsOnlyElse: TemplateRef<any>;\n\n    @Input() ngxPermissionsExcept: string | string[];\n    @Input() ngxPermissionsExceptElse: TemplateRef<any>;\n    @Input() ngxPermissionsExceptThen: TemplateRef<any>;\n\n    @Input() ngxPermissionsThen: TemplateRef<any>;\n    @Input() ngxPermissionsElse: TemplateRef<any>;\n\n    @Input() ngxPermissionsOnlyAuthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsOnlyUnauthorisedStrategy: string | StrategyFunction;\n\n    @Input() ngxPermissionsExceptUnauthorisedStrategy:\n        | string\n        | StrategyFunction;\n    @Input() ngxPermissionsExceptAuthorisedStrategy: string | StrategyFunction;\n\n    @Input() ngxPermissionsUnauthorisedStrategy: string | StrategyFunction;\n    @Input() ngxPermissionsAuthorisedStrategy: string | StrategyFunction;\n\n    @Output() permissionsAuthorized = new EventEmitter();\n    @Output() permissionsUnauthorized = new EventEmitter();\n\n    private viewContainer = inject(ViewContainerRef);\n\n    ngOnInit(): void {\n        this.viewContainer.clear();\n        if (this.getUnAuthorizedTemplate()) {\n            this.viewContainer.createEmbeddedView(\n                this.getUnAuthorizedTemplate()\n            );\n        }\n        this.permissionsUnauthorized.emit();\n    }\n\n    private getUnAuthorizedTemplate() {\n        return (\n            this.ngxPermissionsOnlyElse ||\n            this.ngxPermissionsExceptElse ||\n            this.ngxPermissionsElse\n        );\n    }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { NgxPermissionsDirective } from './directive/permissions.directive';\nimport { NgxPermissionsService, USE_PERMISSIONS_STORE } from './service/permissions.service';\nimport { NgxPermissionsGuard } from './router/permissions-guard.service';\nimport { NgxRolesService, USE_ROLES_STORE } from './service/roles.service';\nimport { NgxPermissionsStore } from './store/permissions.store';\nimport { NgxRolesStore } from './store/roles.store';\nimport { NgxPermissionsAllowStubDirective } from './testing/permissions-allow.directive.stub';\nimport { NgxPermissionsRestrictStubDirective } from './testing/permissions-restrict.directive.stub';\nimport { NgxPermissionsConfigurationService, USE_CONFIGURATION_STORE } from './service/configuration.service';\nimport { NgxPermissionsConfigurationStore } from './store/configuration.store';\n\nexport * from './store/roles.store';\nexport * from './store/permissions.store';\nexport * from './store/configuration.store';\n\nexport * from './directive/permissions.directive';\n\nexport * from './service/permissions.service';\nexport * from './service/roles.service';\nexport * from './service/configuration.service';\n\nexport * from './router/permissions-guard.service';\n\nexport * from './model/permissions-router-data.model';\nexport * from './model/role.model';\n\nexport * from './testing/permissions-allow.directive.stub';\nexport * from './testing/permissions-restrict.directive.stub';\n\nexport * from './enums/predefined-strategies.enum';\n\nexport interface NgxPermissionsModuleConfig {\n    // isolate the service instance, only works for lazy loaded modules or components with the \"providers\" property\n    rolesIsolate?: boolean;\n    permissionsIsolate?: boolean;\n    configurationIsolate?: boolean;\n}\n\n\n@NgModule({\n    imports: [],\n    declarations: [\n        NgxPermissionsDirective\n    ],\n    exports: [\n        NgxPermissionsDirective\n    ]\n})\nexport class NgxPermissionsModule {\n    static forRoot(config: NgxPermissionsModuleConfig = {}): ModuleWithProviders<NgxPermissionsModule> {\n        return {\n            ngModule: NgxPermissionsModule,\n            providers: [\n                NgxPermissionsStore,\n                NgxRolesStore,\n                NgxPermissionsConfigurationStore,\n                NgxPermissionsService,\n                NgxPermissionsGuard,\n                NgxRolesService,\n                NgxPermissionsConfigurationService,\n                {provide: USE_PERMISSIONS_STORE, useValue: config.permissionsIsolate},\n                {provide: USE_ROLES_STORE, useValue: config.rolesIsolate},\n                {provide: USE_CONFIGURATION_STORE, useValue: config.configurationIsolate},\n            ]\n        };\n    }\n\n    static forChild(config: NgxPermissionsModuleConfig = {}): ModuleWithProviders<NgxPermissionsModule> {\n        return {\n            ngModule: NgxPermissionsModule,\n            providers: [\n                {provide: USE_PERMISSIONS_STORE, useValue: config.permissionsIsolate},\n                {provide: USE_ROLES_STORE, useValue: config.rolesIsolate},\n                {provide: USE_CONFIGURATION_STORE, useValue: config.configurationIsolate},\n                NgxPermissionsConfigurationService,\n                NgxPermissionsService,\n                NgxRolesService,\n                NgxPermissionsGuard\n            ]\n        };\n    }\n}\n\n@NgModule({\n    imports: [NgxPermissionsAllowStubDirective],\n    declarations: [],\n    exports: [\n        NgxPermissionsAllowStubDirective\n    ]\n})\nexport class NgxPermissionsAllowStubModule {\n}\n\n\n@NgModule({\n    imports: [NgxPermissionsRestrictStubDirective],\n    declarations: [],\n    exports: [\n        NgxPermissionsRestrictStubDirective\n    ]\n})\nexport class NgxPermissionsRestrictStubModule {\n}\n\n\n","/*\n * Public API Surface of ngx-permissions\n */\n\nexport * from './lib/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxPermissionsConfigurationStore","i1.NgxPermissionsStore","i1.NgxRolesStore","i2.NgxPermissionsService","i1.NgxPermissionsService","i2.NgxRolesService"],"mappings":"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"}