{"version":3,"file":"can-it-ngx.mjs","sources":["../../../../libs/ngx/src/lib/services/policy-store.service.ts","../../../../libs/ngx/src/lib/constants/token.ts","../../../../libs/ngx/src/lib/services/can-it.service.ts","../../../../libs/ngx/src/lib/directives/can-it.directive.ts","../../../../libs/ngx/src/lib/pipes/can-it.pipe.ts","../../../../libs/ngx/src/lib/ngx-can-it.module.ts","../../../../libs/ngx/src/index.ts","../../../../libs/ngx/src/can-it-ngx.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { PolicyState } from '@can-it/types';\r\nimport { ReplaySubject, first } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class PolicyStore {\r\n  private state$ = new ReplaySubject<PolicyState>(1);\r\n  private initializedState: boolean;\r\n\r\n  get() {\r\n    return this.state$.asObservable();\r\n  }\r\n\r\n  set(permissions: PolicyState) {\r\n    this.initializedState = true;\r\n    this.state$.next(permissions);\r\n  }\r\n\r\n  update(stateResolver: (previousState?: PolicyState) => PolicyState) {\r\n    if (this.initializedState) {\r\n      this.state$\r\n        .pipe(first())\r\n        .subscribe(state => this.set(stateResolver(state)));\r\n      return;\r\n    }\r\n\r\n    this.set(stateResolver());\r\n  }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { Comparator } from '@can-it/types';\r\n\r\nexport const ACTION_COMPARATOR = new InjectionToken<Comparator>('ACTION_COMPARATOR');\r\n\r\nexport const RI_COMPARATOR = new InjectionToken<Comparator>('RI_COMPARATOR');\r\n","import { Inject, Injectable, Optional } from '@angular/core';\r\nimport { PolicyStore } from './policy-store.service';\r\nimport { Observable, map } from 'rxjs';\r\nimport { ACTION_COMPARATOR, RI_COMPARATOR } from '../constants/token';\r\nimport { CanIt } from '@can-it/core';\r\nimport { Comparator, Request } from '@can-it/types';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class CanItService {\r\n  private canIt$: Observable<CanIt>;\r\n\r\n  constructor(\r\n    @Inject(ACTION_COMPARATOR) @Optional() actionComparator: Comparator,\r\n    @Inject(RI_COMPARATOR) @Optional() riComparator: Comparator,\r\n    policyStore: PolicyStore,\r\n  ) {\r\n    this.canIt$ = policyStore.get().pipe(\r\n      map(state => new CanIt(state, actionComparator, riComparator))\r\n    );\r\n  }\r\n\r\n  allowTo(...request: Request) {\r\n    return this.canIt$.pipe(\r\n      map(canIt => canIt.allowTo(...request))\r\n    );\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n  TemplateRef,\r\n  ViewContainerRef\r\n} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { Request } from '@can-it/types';\r\nimport { CanItService } from '../services/can-it.service';\r\n\r\nconst SHOWING_MODE = {\r\n  none: 0,\r\n  can: 1,\r\n  else: 2,\r\n};\r\n\r\n@Directive({\r\n  selector: '[canIt]'\r\n})\r\nexport class CanItDirective implements OnInit, OnDestroy {\r\n  @Input({ required: true }) canIt: Request;\r\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n  @Input() canItElse: TemplateRef<any>;\r\n\r\n  private showing = SHOWING_MODE.none;\r\n  private subscription: Subscription;\r\n\r\n  constructor(\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    private templateRef: TemplateRef<any>,\r\n    private viewContainer: ViewContainerRef,\r\n    private canItService: CanItService\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.subscription = this.canItService.allowTo(...this.canIt).subscribe(can => {\r\n      if (can) {\r\n        return this.showCanContent();\r\n      }\r\n\r\n      if (this.canItElse) {\r\n        return this.showElseContent();\r\n      }\r\n\r\n      this.hideContent();\r\n    });\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscription.unsubscribe();\r\n  }\r\n\r\n  private showElseContent() {\r\n    if (this.showing === SHOWING_MODE.else) {\r\n      return;\r\n    }\r\n\r\n    this.viewContainer.clear();\r\n    this.viewContainer.createEmbeddedView(this.canItElse);\r\n    this.showing = SHOWING_MODE.else;\r\n  }\r\n\r\n  private showCanContent() {\r\n    if (this.showing === SHOWING_MODE.can) {\r\n      return;\r\n    }\r\n\r\n    this.viewContainer.clear();\r\n    this.viewContainer.createEmbeddedView(this.templateRef);\r\n    this.showing = SHOWING_MODE.can;\r\n    return;\r\n  }\r\n\r\n  private hideContent() {\r\n    if (this.showing === SHOWING_MODE.none) {\r\n      return;\r\n    }\r\n    this.viewContainer.clear();\r\n    this.showing = SHOWING_MODE.none;\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CanItService } from '../services/can-it.service';\nimport { Request } from '@can-it/types';\n\n@Pipe({\n  name: 'canIt'\n})\nexport class CanItPipe implements PipeTransform {\n  constructor(\n    private canItService: CanItService\n  ) {}\n\n  transform(action: Request) {\n    return this.canItService.allowTo(...action);\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CanItDirective } from './directives/can-it.directive';\r\nimport { CanItPipe } from './pipes/can-it.pipe';\r\nimport { PolicyStore } from './services/policy-store.service';\r\nimport { CanItService } from './services/can-it.service';\r\nimport { ACTION_COMPARATOR, RI_COMPARATOR } from './constants/token';\r\nimport { Comparator } from '@can-it/types';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    CanItDirective,\r\n    CanItPipe\r\n  ],\r\n  imports: [\r\n  ],\r\n  exports: [\r\n    CanItDirective,\r\n\r\n    CanItPipe\r\n  ]\r\n})\r\nexport class NgxCanItModule {\r\n  public static forNewScope(\r\n    comparators?: {\r\n      action?: Comparator,\r\n      ri?: Comparator\r\n    }\r\n  ): ModuleWithProviders<NgxCanItModule> {\r\n    return {\r\n      ngModule: NgxCanItModule,\r\n      providers: [\r\n        PolicyStore,\r\n\r\n        CanItService,\r\n\r\n        { provide: ACTION_COMPARATOR, useValue: comparators?.action },\r\n        { provide: RI_COMPARATOR, useValue: comparators?.ri }\r\n      ]\r\n    }\r\n  }\r\n\r\n  public static forChild(): ModuleWithProviders<NgxCanItModule> {\r\n    return {\r\n      ngModule: NgxCanItModule,\r\n      providers: []\r\n    }\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of @can-it/ngx\r\n */\r\n\r\nexport * from './lib/ngx-can-it.module';\r\n\r\nexport * from './lib/constants/token';\r\n\r\nexport * from './lib/directives/can-it.directive';\r\nexport * from './lib/pipes/can-it.pipe';\r\n\r\nexport * from './lib/services/can-it.service';\r\nexport * from './lib/services/policy-store.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.PolicyStore","i1.CanItService"],"mappings":"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"}