UNPKG

ngx-feature-toggle

Version:

Your module to handle with feature toggles in Angular applications easier.

1 lines 10.4 kB
{"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 { Directive, Input, OnInit, TemplateRef, ViewContainerRef, DoCheck, isDevMode } from '@angular/core';\n\nimport { isOn } from 'feature-toggle-service';\n\n@Directive({\n // tslint:disable-next-line: directive-selector\n selector: '[featureToggle]',\n})\nexport class FeatureToggleDirective implements OnInit, DoCheck {\n @Input() public featureToggle: string[] | string | undefined;\n private isOn = false;\n\n constructor(private templateRef: TemplateRef<any>, private viewContainer: ViewContainerRef) {}\n\n ngOnInit() {\n if (!this.featureToggle) {\n throw new Error('Attribute `featureToggle` should not be null or empty');\n }\n this.shouldRender();\n }\n\n ngDoCheck() {\n if (this.isOn !== this.isOnCheck(this.featureToggle)) {\n this.shouldRender();\n }\n }\n\n private shouldRender() {\n this.isOn = this.isOnCheck(this.featureToggle);\n if (this.isOn) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n } else {\n this.viewContainer.clear();\n }\n }\n\n isOnCheck(featureToggle: string[] | string | undefined) {\n if (typeof featureToggle !== 'string' && !Array.isArray(featureToggle)) {\n if (isDevMode()) {\n console.error('`NgxFeatureToggle`: `featureToggle` should receive an array or an string as a value.');\n }\n return false;\n }\n\n return ([].concat(featureToggle as any) as string[]).every(toggle =>\n toggle[0] === '!' ? !isOn(toggle.replace('!', '')) : isOn(toggle),\n );\n }\n}\n","import { Component, Input, OnInit, DoCheck } from '@angular/core';\nimport { set, FeatureToggleServiceConfig } from 'feature-toggle-service';\n\n@Component({\n selector: 'feature-toggle-provider',\n template: '<ng-content></ng-content>',\n})\nexport class FeatureToggleProviderComponent implements DoCheck, OnInit {\n @Input()\n features: FeatureToggleServiceConfig = {};\n\n private currentConfig: FeatureToggleServiceConfig = {};\n\n ngOnInit() {\n if (typeof this.features !== 'object') {\n throw new Error('Attribute `features` should not be null or empty');\n }\n this.setFeatureToggles();\n }\n\n ngDoCheck() {\n this.setFeatureToggles();\n }\n\n private setFeatureToggles() {\n if (this.currentConfig !== this.features) {\n // Using `Object.assign()` method for bundle size decreasing purposes\n // It's required since it needs a new memory reference\n // for the new object value\n this.currentConfig = Object.assign({}, this.features);\n set(this.features);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FeatureToggleProviderComponent } from './ngx-feature-toggle-provider.component';\nimport { FeatureToggleDirective } from './ngx-feature-toggle.directive';\n\n@NgModule({\n declarations: [FeatureToggleProviderComponent, FeatureToggleDirective],\n exports: [FeatureToggleProviderComponent, FeatureToggleDirective],\n imports: [CommonModule],\n})\nexport class FeatureToggleModule {}\n","import { Injectable, isDevMode } from '@angular/core';\nimport { ActivatedRouteSnapshot, Route, CanActivateChild, Router, CanLoad, CanActivate } from '@angular/router';\nimport { isOn } from 'feature-toggle-service';\n\n@Injectable({ providedIn: 'root' })\nexport class NgxFeatureToggleRouteGuard implements CanActivateChild, CanLoad, CanActivate {\n constructor(private router: Router) {}\n\n isDevMode() {\n return isDevMode();\n }\n\n private isOnCheck(route: ActivatedRouteSnapshot | Route): boolean {\n if (\n !route ||\n !route.data ||\n (typeof route.data.featureToggle !== 'string' && !Array.isArray(route.data.featureToggle))\n ) {\n if (this.isDevMode()) {\n console.error(\n // tslint:disable-next-line: max-line-length\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 any) as string[]).every(toggle =>\n toggle[0] === '!' ? !isOn(toggle.replace('!', '')) : isOn(toggle),\n );\n\n if (!hasAllTogglesOn && route.data.redirectTo) {\n this.router.navigate([].concat(route.data.redirectTo));\n }\n\n return hasAllTogglesOn;\n }\n\n canLoad(route: Route): boolean {\n return this.isOnCheck(route);\n }\n\n canActivateChild(route: ActivatedRouteSnapshot | Route): boolean {\n return this.isOnCheck(route);\n }\n\n canActivate(route: ActivatedRouteSnapshot | Route): boolean {\n return this.isOnCheck(route);\n }\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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"}