0.0.7 • Published 9 months ago
@exact-team/nestjs-feature-toggle v0.0.7
NestJS-feature-toggle
Описание
Библиотека для условного включения и отключения контроллеров и методов в NestJS на основе фич-флагов, хранящихся в ConfigService (.env)
Возможности
- Декоратор
@FeatureToggle('FLAG_NAME')для классов и методов - Глобальный Guard
FeatureToggleGuardдля проверки фич-флагов - Модуль
FeatureToggleModule.forRoot()для простого подключения
Установка
npm install @exact-tema/nestjs-feature-toggleили
yarn add @exact-tema/nestjs-feature-toggleБыстрый старт
- Подключите модуль в приложении
// src/app.module.ts
import { Module } from '@nestjs/common';
import { FeatureToggleModule } from '@exact-team/nestjs-feature-toggle';
@Module({
imports: [
FeatureToggleModule.forRoot(),
// ... другие модули
],
})
export class AppModule {}- Примените декоратор к контроллерам или методам
// src/new-api.controller.ts
import { Controller, Get } from '@nestjs/common';
import { FeatureToggle } from '@exact-team/nestjs-feature-toggle';
@FeatureToggle('NEW_API')
@Controller('new-api')
export class NewApiController {
@Get()
findAll() {
return ['item1', 'item2'];
}
@Get('beta')
@FeatureToggle('BETA_FEATURE')
findBeta() {
return ['beta-item'];
}
}- Добавьте флаги в
.env
NEW_API=true
BETA_FEATURE=falseМетод или контроллер будут доступны только при значении флага true.
API
FeatureToggleModule.forRoot(): DynamicModule
Подключает глобальный Guard и ConfigModule:
- Импорт:
ConfigModule - Провайдер:
{ provide: APP_GUARD, useClass: FeatureToggleGuard }
@FeatureToggle(featureName: string)
Декоратор, который можно применять к:
- Классу — отключает весь контроллер
- Методу — отключает только конкретный маршрут
Параметры:
featureName: string— ключ флага вConfigService
FeatureToggleGuard (CanActivate)
- Читает метаданные
featureNameс метода или класса - Получает флаг из
ConfigService - Если флаг
true— пропускает, иначе кидаетNotFoundException()
Примеры использования
// src/app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { FeatureToggleModule } from '@exact-team/nestjs-feature-toggle';
import { NewApiController } from './new-api.controller';
@Module({
imports: [ConfigModule.forRoot({ isGlobal: true }), FeatureToggleModule.forRoot()],
controllers: [NewApiController],
})
export class AppModule {}Лицензия
MIT