{"version":3,"file":"ngx-feature-toggle.mjs","sources":["../../../projects/ngx-feature-toggle/src/lib/ngx-feature-toggle.directive.ts","../../../projects/ngx-feature-toggle/src/lib/ngx-feature-toggle-provider.component.ts","../../../projects/ngx-feature-toggle/src/lib/ngx-feature-toggle.module.ts","../../../projects/ngx-feature-toggle/src/lib/ngx-feature-toggle-route-guard.router.ts","../../../projects/ngx-feature-toggle/src/public-api.ts","../../../projects/ngx-feature-toggle/src/ngx-feature-toggle.ts"],"sourcesContent":["import {\n  Directive,\n  EmbeddedViewRef,\n  inject,\n  input,\n  isDevMode,\n  OnChanges,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport { isOn } from 'feature-toggle-service';\n\n@Directive({\n  selector: '[ngxFeatureToggle]',\n  standalone: true,\n})\nexport class FeatureToggleDirective implements OnChanges {\n  ngxFeatureToggle = input.required<string | string[]>();\n\n  private templateRef = inject(TemplateRef<unknown>);\n  private viewContainer = inject(ViewContainerRef);\n  private embeddedViewRef: EmbeddedViewRef<unknown> | null = null;\n\n  ngOnChanges(): void {\n    this.updateView();\n  }\n\n  private updateView(): void {\n    const featureToggle = this.ngxFeatureToggle();\n    const shouldShow = this.isOnCheck(featureToggle);\n\n    if (shouldShow && !this.embeddedViewRef) {\n      this.embeddedViewRef = this.viewContainer.createEmbeddedView(this.templateRef);\n    } else if (!shouldShow && this.embeddedViewRef) {\n      this.viewContainer.clear();\n      this.embeddedViewRef = null;\n    }\n  }\n\n  private isOnCheck(featureToggle: string | string[]): boolean {\n    if (typeof featureToggle !== 'string' && !Array.isArray(featureToggle)) {\n      if (isDevMode()) {\n        // eslint-disable-next-line no-console\n        console.error('`NgxFeatureToggle`: `ngxFeatureToggle` should receive an array or a string as a value.');\n      }\n      return false;\n    }\n\n    const toggles = Array.isArray(featureToggle) ? featureToggle : [featureToggle];\n\n    return toggles.every(toggle => {\n      if (typeof toggle !== 'string') {\n        return false;\n      }\n\n      return toggle[0] === '!' ? !isOn(toggle.replace('!', '')) : isOn(toggle);\n    });\n  }\n}\n","import { Component, input, effect, ChangeDetectionStrategy } from '@angular/core';\nimport { set, FeatureToggleServiceConfig } from 'feature-toggle-service';\n\n@Component({\n  selector: 'ngx-feature-toggle-provider',\n  template: '<ng-content />',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n})\nexport class FeatureToggleProviderComponent {\n  features = input.required<FeatureToggleServiceConfig>();\n\n  constructor() {\n    effect(() => {\n      const currentFeatures = this.features();\n\n      if (typeof currentFeatures !== 'object' || currentFeatures === null) {\n        throw new Error('Attribute `features` should not be null or empty');\n      }\n\n      set(currentFeatures);\n    });\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { FeatureToggleProviderComponent } from './ngx-feature-toggle-provider.component';\nimport { FeatureToggleDirective } from './ngx-feature-toggle.directive';\n\n@NgModule({\n  imports: [FeatureToggleProviderComponent, FeatureToggleDirective],\n  exports: [FeatureToggleProviderComponent, FeatureToggleDirective],\n})\nexport class FeatureToggleModule {}\n","import { inject, isDevMode } from '@angular/core';\nimport {\n  ActivatedRouteSnapshot,\n  CanActivateChildFn,\n  CanActivateFn,\n  CanMatchFn,\n  Route,\n  Router,\n} from '@angular/router';\nimport { isOn } from 'feature-toggle-service';\n\nfunction isOnCheck(route: ActivatedRouteSnapshot | Route, router: Router): boolean {\n  if (\n    !route ||\n    !route.data ||\n    (typeof route.data['featureToggle'] !== 'string' && !Array.isArray(route.data['featureToggle']))\n  ) {\n    if (isDevMode()) {\n      // eslint-disable-next-line no-console\n      console.error(\n        '`NgxFeatureToggleRouteGuard` need to receive `featureToggle` as data as an array or string in your route configuration.',\n      );\n    }\n    return false;\n  }\n\n  const hasAllTogglesOn = ([].concat(route.data['featureToggle'] as never) as string[]).every(toggle => {\n    if (typeof toggle !== 'string') {\n      return false;\n    }\n\n    return toggle[0] === '!' ? !isOn(toggle.replace('!', '')) : isOn(toggle);\n  });\n\n  if (!hasAllTogglesOn && route.data['redirectTo'] !== null && route.data['redirectTo'] !== undefined) {\n    router.navigate([].concat(route.data['redirectTo']));\n  }\n\n  return hasAllTogglesOn;\n}\n\nexport const ngxFeatureToggleCanActivate: CanActivateFn = (route: ActivatedRouteSnapshot) => {\n  return isOnCheck(route, inject(Router));\n};\n\nexport const ngxFeatureToggleCanActivateChild: CanActivateChildFn = (childRoute: ActivatedRouteSnapshot) => {\n  return isOnCheck(childRoute, inject(Router));\n};\n\nexport const ngxFeatureToggleCanMatch: CanMatchFn = (route: Route) => {\n  return isOnCheck(route, inject(Router));\n};\n","/*\n * Public API Surface of ngx-feature-toggle\n */\n\nexport * from './lib/ngx-feature-toggle.directive';\nexport * from './lib/ngx-feature-toggle-provider.component';\nexport * from './lib/ngx-feature-toggle.module';\nexport * from './lib/ngx-feature-toggle-route-guard.router';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}