@plyaz/core 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +248 -183
- package/dist/adapters/index.d.ts +16 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/nestjs.d.ts +79 -0
- package/dist/adapters/nestjs.d.ts.map +1 -0
- package/dist/adapters/nextjs.d.ts +28 -0
- package/dist/adapters/nextjs.d.ts.map +1 -0
- package/dist/backend/example/example.controller.d.ts +121 -0
- package/dist/backend/example/example.controller.d.ts.map +1 -0
- package/dist/backend/example/example.module.d.ts +29 -0
- package/dist/backend/example/example.module.d.ts.map +1 -0
- package/dist/backend/example/index.d.ts +8 -0
- package/dist/backend/example/index.d.ts.map +1 -0
- package/dist/backend/featureFlags/FeatureFlagDomainService.d.ts +150 -0
- package/dist/backend/featureFlags/FeatureFlagDomainService.d.ts.map +1 -0
- package/dist/backend/featureFlags/config/feature-flag.config.d.ts +28 -50
- package/dist/backend/featureFlags/config/feature-flag.config.d.ts.map +1 -1
- package/dist/backend/featureFlags/config/validation.d.ts +6 -6
- package/dist/backend/featureFlags/config/validation.d.ts.map +1 -1
- package/dist/backend/featureFlags/feature-flag.controller.d.ts +14 -55
- package/dist/backend/featureFlags/feature-flag.controller.d.ts.map +1 -1
- package/dist/backend/featureFlags/feature-flag.module.d.ts +36 -43
- package/dist/backend/featureFlags/feature-flag.module.d.ts.map +1 -1
- package/dist/backend/featureFlags/guards/feature-flag.guard.d.ts +16 -2
- package/dist/backend/featureFlags/guards/feature-flag.guard.d.ts.map +1 -1
- package/dist/backend/featureFlags/index.d.ts +6 -7
- package/dist/backend/featureFlags/index.d.ts.map +1 -1
- package/dist/backend/featureFlags/interceptors/error-handling-interceptor.d.ts.map +1 -1
- package/dist/backend/featureFlags/interceptors/feature-flag-logging-interceptor.d.ts.map +1 -1
- package/dist/backend/featureFlags/middleware/feature-flag-middleware.d.ts +6 -11
- package/dist/backend/featureFlags/middleware/feature-flag-middleware.d.ts.map +1 -1
- package/dist/backend/index.d.ts +5 -0
- package/dist/backend/index.d.ts.map +1 -1
- package/dist/base/cache/CacheKeyBuilder.d.ts +115 -0
- package/dist/base/cache/CacheKeyBuilder.d.ts.map +1 -0
- package/dist/base/cache/index.d.ts +1 -0
- package/dist/base/cache/index.d.ts.map +1 -1
- package/dist/base/cache/strategies/redis.d.ts.map +1 -1
- package/dist/base/observability/BaseAdapter.d.ts +79 -0
- package/dist/base/observability/BaseAdapter.d.ts.map +1 -0
- package/dist/base/observability/CompositeAdapter.d.ts +72 -0
- package/dist/base/observability/CompositeAdapter.d.ts.map +1 -0
- package/dist/base/observability/DatadogAdapter.d.ts +117 -0
- package/dist/base/observability/DatadogAdapter.d.ts.map +1 -0
- package/dist/base/observability/LoggerAdapter.d.ts +54 -0
- package/dist/base/observability/LoggerAdapter.d.ts.map +1 -0
- package/dist/base/observability/ObservabilityService.d.ts +160 -0
- package/dist/base/observability/ObservabilityService.d.ts.map +1 -0
- package/dist/base/observability/index.d.ts +17 -0
- package/dist/base/observability/index.d.ts.map +1 -0
- package/dist/domain/base/BaseBackendDomainService.d.ts +528 -0
- package/dist/domain/base/BaseBackendDomainService.d.ts.map +1 -0
- package/dist/domain/base/BaseDomainService.d.ts +284 -0
- package/dist/domain/base/BaseDomainService.d.ts.map +1 -0
- package/dist/domain/base/BaseFrontendDomainService.d.ts +493 -0
- package/dist/domain/base/BaseFrontendDomainService.d.ts.map +1 -0
- package/dist/domain/base/BaseMapper.d.ts +100 -0
- package/dist/domain/base/BaseMapper.d.ts.map +1 -0
- package/dist/domain/base/BaseValidator.d.ts +105 -0
- package/dist/domain/base/BaseValidator.d.ts.map +1 -0
- package/dist/domain/base/index.d.ts +10 -0
- package/dist/domain/base/index.d.ts.map +1 -0
- package/dist/domain/example/BackendExampleDomainService.d.ts +257 -0
- package/dist/domain/example/BackendExampleDomainService.d.ts.map +1 -0
- package/dist/domain/example/FrontendExampleDomainService.d.ts +164 -0
- package/dist/domain/example/FrontendExampleDomainService.d.ts.map +1 -0
- package/dist/domain/example/index.d.ts +10 -0
- package/dist/domain/example/index.d.ts.map +1 -0
- package/dist/domain/example/mappers/ExampleMapper.d.ts +67 -0
- package/dist/domain/example/mappers/ExampleMapper.d.ts.map +1 -0
- package/dist/domain/example/validators/ExampleValidator.d.ts +33 -0
- package/dist/domain/example/validators/ExampleValidator.d.ts.map +1 -0
- package/dist/domain/featureFlags/FrontendFeatureFlagDomainService.d.ts +86 -0
- package/dist/domain/featureFlags/FrontendFeatureFlagDomainService.d.ts.map +1 -0
- package/dist/domain/featureFlags/index.d.ts +10 -5
- package/dist/domain/featureFlags/index.d.ts.map +1 -1
- package/dist/domain/featureFlags/mappers/FeatureFlagMapper.d.ts +72 -0
- package/dist/domain/featureFlags/mappers/FeatureFlagMapper.d.ts.map +1 -0
- package/dist/domain/featureFlags/mappers/index.d.ts +8 -0
- package/dist/domain/featureFlags/mappers/index.d.ts.map +1 -0
- package/dist/domain/featureFlags/module.d.ts +20 -0
- package/dist/domain/featureFlags/module.d.ts.map +1 -0
- package/dist/domain/featureFlags/provider.d.ts +40 -1
- package/dist/domain/featureFlags/provider.d.ts.map +1 -1
- package/dist/domain/featureFlags/providers/api.d.ts +59 -34
- package/dist/domain/featureFlags/providers/api.d.ts.map +1 -1
- package/dist/domain/featureFlags/providers/database.d.ts +54 -47
- package/dist/domain/featureFlags/providers/database.d.ts.map +1 -1
- package/dist/domain/featureFlags/providers/factory.d.ts +50 -33
- package/dist/domain/featureFlags/providers/factory.d.ts.map +1 -1
- package/dist/domain/featureFlags/providers/file.d.ts +48 -1
- package/dist/domain/featureFlags/providers/file.d.ts.map +1 -1
- package/dist/domain/featureFlags/providers/memory.d.ts +32 -6
- package/dist/domain/featureFlags/providers/memory.d.ts.map +1 -1
- package/dist/domain/featureFlags/providers/redis.d.ts +6 -1
- package/dist/domain/featureFlags/providers/redis.d.ts.map +1 -1
- package/dist/domain/featureFlags/service.d.ts +112 -0
- package/dist/domain/featureFlags/service.d.ts.map +1 -0
- package/dist/domain/index.d.ts +2 -0
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/engine/featureFlags/engine.d.ts +8 -0
- package/dist/engine/featureFlags/engine.d.ts.map +1 -1
- package/dist/entry-backend.d.ts +26 -0
- package/dist/entry-backend.d.ts.map +1 -0
- package/dist/entry-backend.js +15455 -0
- package/dist/entry-backend.js.map +1 -0
- package/dist/entry-backend.mjs +15339 -0
- package/dist/entry-backend.mjs.map +1 -0
- package/dist/entry-frontend.d.ts +23 -0
- package/dist/entry-frontend.d.ts.map +1 -0
- package/dist/entry-frontend.js +11340 -0
- package/dist/entry-frontend.js.map +1 -0
- package/dist/entry-frontend.mjs +11278 -0
- package/dist/entry-frontend.mjs.map +1 -0
- package/dist/events/CoreEventManager.d.ts +116 -0
- package/dist/events/CoreEventManager.d.ts.map +1 -0
- package/dist/events/index.d.ts +27 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/frontend/base/index.d.ts +8 -0
- package/dist/frontend/base/index.d.ts.map +1 -0
- package/dist/frontend/components/InitializationError.d.ts +25 -0
- package/dist/frontend/components/InitializationError.d.ts.map +1 -0
- package/dist/frontend/components/InitializationLoading.d.ts +22 -0
- package/dist/frontend/components/InitializationLoading.d.ts.map +1 -0
- package/dist/frontend/components/index.d.ts +9 -0
- package/dist/frontend/components/index.d.ts.map +1 -0
- package/dist/frontend/example/index.d.ts +9 -0
- package/dist/frontend/example/index.d.ts.map +1 -0
- package/dist/frontend/featureFlags/index.d.ts +28 -7
- package/dist/frontend/featureFlags/index.d.ts.map +1 -1
- package/dist/frontend/index.d.ts +4 -0
- package/dist/frontend/index.d.ts.map +1 -1
- package/dist/frontend/providers/ApiProvider.d.ts +2 -2
- package/dist/frontend/providers/ApiProvider.d.ts.map +1 -1
- package/dist/frontend/providers/PlyazProvider.d.ts +305 -0
- package/dist/frontend/providers/PlyazProvider.d.ts.map +1 -0
- package/dist/frontend/providers/index.d.ts +1 -0
- package/dist/frontend/providers/index.d.ts.map +1 -1
- package/dist/frontend/store/feature-flags.d.ts +63 -0
- package/dist/frontend/store/feature-flags.d.ts.map +1 -0
- package/dist/frontend/store/index.d.ts +14 -0
- package/dist/frontend/store/index.d.ts.map +1 -0
- package/dist/frontend/store/integrations.d.ts +36 -0
- package/dist/frontend/store/integrations.d.ts.map +1 -0
- package/dist/frontend/store/service-accessors.d.ts +78 -0
- package/dist/frontend/store/service-accessors.d.ts.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15262 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +13667 -4861
- package/dist/index.mjs.map +1 -1
- package/dist/init/CoreInitializer.d.ts +583 -0
- package/dist/init/CoreInitializer.d.ts.map +1 -0
- package/dist/init/ServiceRegistry.d.ts +256 -0
- package/dist/init/ServiceRegistry.d.ts.map +1 -0
- package/dist/init/index.d.ts +14 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/nestjs/CoreModule.d.ts +63 -0
- package/dist/init/nestjs/CoreModule.d.ts.map +1 -0
- package/dist/init/nestjs/index.d.ts +5 -0
- package/dist/init/nestjs/index.d.ts.map +1 -0
- package/dist/init/nestjs/index.js +9234 -0
- package/dist/init/nestjs/index.js.map +1 -0
- package/dist/init/nestjs/index.mjs +9230 -0
- package/dist/init/nestjs/index.mjs.map +1 -0
- package/dist/init/react.d.ts +33 -0
- package/dist/init/react.d.ts.map +1 -0
- package/dist/models/example/ExampleRepository.d.ts +166 -0
- package/dist/models/example/ExampleRepository.d.ts.map +1 -0
- package/dist/models/example/index.d.ts +7 -0
- package/dist/models/example/index.d.ts.map +1 -0
- package/dist/models/featureFlags/FeatureFlagRepository.d.ts +161 -0
- package/dist/models/featureFlags/FeatureFlagRepository.d.ts.map +1 -0
- package/dist/models/featureFlags/index.d.ts +7 -0
- package/dist/models/featureFlags/index.d.ts.map +1 -0
- package/dist/models/index.d.ts +9 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/services/ApiClientService.d.ts +92 -4
- package/dist/services/ApiClientService.d.ts.map +1 -1
- package/dist/services/CacheService.d.ts +176 -0
- package/dist/services/CacheService.d.ts.map +1 -0
- package/dist/services/DbService.d.ts +393 -0
- package/dist/services/DbService.d.ts.map +1 -0
- package/dist/services/NotificationService.d.ts +153 -0
- package/dist/services/NotificationService.d.ts.map +1 -0
- package/dist/services/StorageService.d.ts +146 -0
- package/dist/services/StorageService.d.ts.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/utils/common/id.d.ts +83 -0
- package/dist/utils/common/id.d.ts.map +1 -0
- package/dist/utils/common/index.d.ts +2 -0
- package/dist/utils/common/index.d.ts.map +1 -1
- package/dist/utils/common/object.d.ts +70 -0
- package/dist/utils/common/object.d.ts.map +1 -0
- package/dist/utils/featureFlags/conditions.d.ts.map +1 -1
- package/dist/utils/featureFlags/context.d.ts +0 -1
- package/dist/utils/featureFlags/context.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/mapperUtils.d.ts +38 -0
- package/dist/utils/mapperUtils.d.ts.map +1 -0
- package/dist/utils/runtime.d.ts +15 -0
- package/dist/utils/runtime.d.ts.map +1 -0
- package/dist/version.d.ts +24 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/web_app/auth/add_user.d.ts +2 -2
- package/dist/web_app/auth/add_user.d.ts.map +1 -1
- package/dist/web_app/auth/update_user.d.ts +1 -1
- package/dist/web_app/auth/update_user.d.ts.map +1 -1
- package/package.json +89 -15
- package/dist/backend/featureFlags/database/connection.d.ts +0 -321
- package/dist/backend/featureFlags/database/connection.d.ts.map +0 -1
- package/dist/backend/featureFlags/database/repository.d.ts +0 -518
- package/dist/backend/featureFlags/database/repository.d.ts.map +0 -1
- package/dist/backend/featureFlags/feature-flag.repository.d.ts +0 -85
- package/dist/backend/featureFlags/feature-flag.repository.d.ts.map +0 -1
- package/dist/backend/featureFlags/feature-flag.service.d.ts +0 -264
- package/dist/backend/featureFlags/feature-flag.service.d.ts.map +0 -1
- package/dist/frontend/featureFlags/hooks/useFeatureFlag.d.ts +0 -103
- package/dist/frontend/featureFlags/hooks/useFeatureFlag.d.ts.map +0 -1
- package/dist/frontend/featureFlags/hooks/useFeatureFlagActions.d.ts +0 -35
- package/dist/frontend/featureFlags/hooks/useFeatureFlagActions.d.ts.map +0 -1
- package/dist/frontend/featureFlags/hooks/useFeatureFlagHelpers.d.ts +0 -55
- package/dist/frontend/featureFlags/hooks/useFeatureFlagHelpers.d.ts.map +0 -1
- package/dist/frontend/featureFlags/hooks/useFeatureFlagProvider.d.ts +0 -57
- package/dist/frontend/featureFlags/hooks/useFeatureFlagProvider.d.ts.map +0 -1
- package/dist/frontend/featureFlags/providers/FeatureFlagProvider.d.ts +0 -99
- package/dist/frontend/featureFlags/providers/FeatureFlagProvider.d.ts.map +0 -1
- package/dist/frontend/featureFlags/providers/FeatureFlagProviderHelpers.d.ts +0 -31
- package/dist/frontend/featureFlags/providers/FeatureFlagProviderHelpers.d.ts.map +0 -1
- package/dist/frontend/featureFlags/providers/types.d.ts +0 -21
- package/dist/frontend/featureFlags/providers/types.d.ts.map +0 -1
- package/dist/index.cjs +0 -6435
- package/dist/index.cjs.map +0 -1
- package/dist/utils/db/databaseService.d.ts +0 -6
- package/dist/utils/db/databaseService.d.ts.map +0 -1
- package/dist/utils/db/index.d.ts +0 -2
- package/dist/utils/db/index.d.ts.map +0 -1
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Feature Flag Service
|
|
3
|
-
*
|
|
4
|
-
* NestJS service for feature flag business logic.
|
|
5
|
-
* Orchestrates between providers, repositories, and external systems.
|
|
6
|
-
*
|
|
7
|
-
* @fileoverview NestJS service for feature flags
|
|
8
|
-
*/
|
|
9
|
-
import type { OnModuleInit, OnModuleDestroy } from '@nestjs/common';
|
|
10
|
-
import { type FeatureFlagValue, type FeatureFlagContext, type FeatureFlagEvaluation, type FeatureFlag, type FeatureFlagRule, type CreateFlagRequest, type ProviderHealthStatus } from '@plyaz/types';
|
|
11
|
-
import type { FeatureFlagRepository } from './feature-flag.repository';
|
|
12
|
-
import type { FeatureFlagKey } from '@domain/types';
|
|
13
|
-
/**
|
|
14
|
-
* Feature Flag Service
|
|
15
|
-
*
|
|
16
|
-
* **MAIN ORCHESTRATOR** - This service coordinates the entire feature flag system.
|
|
17
|
-
*
|
|
18
|
-
* **EXECUTION FLOW:**
|
|
19
|
-
* 1. NestJS Module System → Instantiates this service
|
|
20
|
-
* 2. **onModuleInit()** ← ENTRY POINT - Called automatically by NestJS
|
|
21
|
-
* 3. initializeProvider() → Loads configuration and creates provider
|
|
22
|
-
* 4. Provider.initialize() → Establishes database connection
|
|
23
|
-
* 5. System ready to serve requests
|
|
24
|
-
*
|
|
25
|
-
* **RUNTIME FLOW:**
|
|
26
|
-
* Client Request → Controller → **This Service** → Provider → Database/Cache
|
|
27
|
-
*
|
|
28
|
-
* @example Basic Usage in Controller
|
|
29
|
-
* ```typescript
|
|
30
|
-
* @Controller('features')
|
|
31
|
-
* export class FeatureController {
|
|
32
|
-
* constructor(private readonly featureFlagService: FeatureFlagService) {}
|
|
33
|
-
*
|
|
34
|
-
* @Get(':key')
|
|
35
|
-
* async getFeature(@Param('key') key: string) {
|
|
36
|
-
* // This calls the service which orchestrates the entire evaluation
|
|
37
|
-
* return this.featureFlagService.evaluateFlag(key);
|
|
38
|
-
* }
|
|
39
|
-
* }
|
|
40
|
-
* ```
|
|
41
|
-
*
|
|
42
|
-
* @example Advanced Usage with Context
|
|
43
|
-
* ```typescript
|
|
44
|
-
* // Evaluate flag with user context for targeting rules
|
|
45
|
-
* const evaluation = await this.featureFlagService.evaluateFlag('PREMIUM_FEATURE', {
|
|
46
|
-
* userId: 'user123',
|
|
47
|
-
* userRole: 'premium',
|
|
48
|
-
* environment: 'production'
|
|
49
|
-
* });
|
|
50
|
-
*
|
|
51
|
-
* if (evaluation.isEnabled) {
|
|
52
|
-
* // Execute premium feature logic
|
|
53
|
-
* }
|
|
54
|
-
* ```
|
|
55
|
-
*
|
|
56
|
-
* Provides business logic for feature flag operations.
|
|
57
|
-
* Manages provider lifecycle, caching, and data persistence.
|
|
58
|
-
*/
|
|
59
|
-
export declare class FeatureFlagService implements OnModuleInit, OnModuleDestroy {
|
|
60
|
-
private readonly featureFlagRepository;
|
|
61
|
-
[x: string]: unknown;
|
|
62
|
-
private readonly logger;
|
|
63
|
-
private provider;
|
|
64
|
-
constructor(featureFlagRepository: FeatureFlagRepository<FeatureFlagKey>);
|
|
65
|
-
/**
|
|
66
|
-
* **FIRST METHOD CALLED** - NestJS lifecycle hook for module initialization
|
|
67
|
-
*
|
|
68
|
-
* **EXECUTION ORDER:**
|
|
69
|
-
* 1. NestJS creates FeatureFlagModule
|
|
70
|
-
* 2. NestJS instantiates FeatureFlagService
|
|
71
|
-
* 3. **THIS METHOD CALLED AUTOMATICALLY** ← YOU ARE HERE
|
|
72
|
-
* 4. → initializeProvider() called
|
|
73
|
-
* 5. → Configuration loaded from .env.local
|
|
74
|
-
* 6. → Database provider created and initialized
|
|
75
|
-
* 7. → Database connection established
|
|
76
|
-
* 8. → Initial data loaded from database
|
|
77
|
-
* 9. System ready to serve requests
|
|
78
|
-
*
|
|
79
|
-
* @throws {Error} If provider initialization fails
|
|
80
|
-
*
|
|
81
|
-
* @example What happens during initialization:
|
|
82
|
-
* ```typescript
|
|
83
|
-
* // 1. Load config from environment
|
|
84
|
-
* const config = FeatureFlagConfigFactory.fromEnvironment();
|
|
85
|
-
*
|
|
86
|
-
* // 2. Create database provider
|
|
87
|
-
* this.provider = FeatureFlagProviderFactory.create(config, FEATURES);
|
|
88
|
-
*
|
|
89
|
-
* // 3. Initialize database connection
|
|
90
|
-
* await this.provider.initialize();
|
|
91
|
-
*
|
|
92
|
-
* // 4. Load flags and rules from database
|
|
93
|
-
* const { flags, rules } = await this.provider.fetchData();
|
|
94
|
-
* ```
|
|
95
|
-
*/
|
|
96
|
-
onModuleInit(): Promise<void>;
|
|
97
|
-
/**
|
|
98
|
-
* Cleans up resources on module shutdown.
|
|
99
|
-
*/
|
|
100
|
-
onModuleDestroy(): Promise<void>;
|
|
101
|
-
/**
|
|
102
|
-
* **SECOND METHOD CALLED** - Initializes the feature flag provider
|
|
103
|
-
*
|
|
104
|
-
* **EXECUTION FLOW:**
|
|
105
|
-
* 1. onModuleInit() called by NestJS
|
|
106
|
-
* 2. **THIS METHOD CALLED** ← YOU ARE HERE
|
|
107
|
-
* 3. → FeatureFlagConfigFactory.fromEnvironment() - Loads .env.local
|
|
108
|
-
* 4. → FeatureFlagProviderFactory.create() - Creates database provider
|
|
109
|
-
* 5. → provider.initialize() - Establishes database connection
|
|
110
|
-
*
|
|
111
|
-
* @private
|
|
112
|
-
* @throws {Error} If configuration is invalid or database connection fails
|
|
113
|
-
*
|
|
114
|
-
* @example Configuration Loading Process:
|
|
115
|
-
* ```typescript
|
|
116
|
-
* // Reads from .env.local:
|
|
117
|
-
* // SUPABASE_URL=https://your-project.supabase.co
|
|
118
|
-
* // FEATURE_FLAG_PROVIDER=database
|
|
119
|
-
* // FEATURE_FLAG_CACHE_ENABLED=true
|
|
120
|
-
*
|
|
121
|
-
* const config = {
|
|
122
|
-
* provider: 'database',
|
|
123
|
-
* isCacheEnabled: true,
|
|
124
|
-
* databaseConfig: {
|
|
125
|
-
* connectionString: 'https://your-project.supabase.co',
|
|
126
|
-
* tableName: 'feature_flags'
|
|
127
|
-
* }
|
|
128
|
-
* };
|
|
129
|
-
* ```
|
|
130
|
-
*/
|
|
131
|
-
private initializeProvider;
|
|
132
|
-
/**
|
|
133
|
-
* Gets the current provider instance.
|
|
134
|
-
*/
|
|
135
|
-
private getProvider;
|
|
136
|
-
/**
|
|
137
|
-
* **MAIN RUNTIME METHOD** - Evaluates a feature flag for the given context
|
|
138
|
-
*
|
|
139
|
-
* **RUNTIME EXECUTION FLOW:**
|
|
140
|
-
* 1. Client makes HTTP request to controller
|
|
141
|
-
* 2. Controller calls **THIS METHOD** ← RUNTIME ENTRY POINT
|
|
142
|
-
* 3. → getProvider() - Gets initialized provider
|
|
143
|
-
* 4. → provider.getFlag() - Evaluates flag with context
|
|
144
|
-
* 5. → Provider checks cache, rules, overrides
|
|
145
|
-
* 6. → Database query if needed
|
|
146
|
-
* 7. ← Returns evaluation result
|
|
147
|
-
*
|
|
148
|
-
* @param key - Feature flag key (e.g., 'PREMIUM_FEATURE', 'NEW_UI')
|
|
149
|
-
* @param context - Evaluation context for targeting rules
|
|
150
|
-
* @returns Feature flag evaluation result with value, reason, and metadata
|
|
151
|
-
*
|
|
152
|
-
* @example Simple Usage:
|
|
153
|
-
* ```typescript
|
|
154
|
-
* const evaluation = await this.featureFlagService.evaluateFlag('NEW_CHECKOUT');
|
|
155
|
-
* console.log(evaluation.isEnabled); // true/false
|
|
156
|
-
* console.log(evaluation.reason); // 'default_value' | 'rule_match' | 'override'
|
|
157
|
-
* ```
|
|
158
|
-
*
|
|
159
|
-
* @example With User Context (for targeting rules):
|
|
160
|
-
* ```typescript
|
|
161
|
-
* const evaluation = await this.featureFlagService.evaluateFlag('BETA_FEATURE', {
|
|
162
|
-
* userId: 'user123',
|
|
163
|
-
* userRole: 'premium',
|
|
164
|
-
* environment: 'production',
|
|
165
|
-
* customAttributes: {
|
|
166
|
-
* subscriptionTier: 'pro',
|
|
167
|
-
* region: 'us-east'
|
|
168
|
-
* }
|
|
169
|
-
* });
|
|
170
|
-
*
|
|
171
|
-
* // Provider will:
|
|
172
|
-
* // 1. Check for user-specific overrides
|
|
173
|
-
* // 2. Evaluate targeting rules against context
|
|
174
|
-
* // 3. Return appropriate value with reason
|
|
175
|
-
* ```
|
|
176
|
-
*
|
|
177
|
-
* @example Evaluation Result:
|
|
178
|
-
* ```typescript
|
|
179
|
-
* {
|
|
180
|
-
* key: 'BETA_FEATURE',
|
|
181
|
-
* isEnabled: true,
|
|
182
|
-
* value: { enabled: true, variant: 'blue' },
|
|
183
|
-
* reason: 'rule_match',
|
|
184
|
-
* ruleId: 'premium-users-rule',
|
|
185
|
-
* evaluatedAt: '2024-01-15T10:30:00Z'
|
|
186
|
-
* }
|
|
187
|
-
* ```
|
|
188
|
-
*/
|
|
189
|
-
evaluateFlag(key: FeatureFlagKey, context?: FeatureFlagContext): Promise<FeatureFlagEvaluation<FeatureFlagKey>>;
|
|
190
|
-
/**
|
|
191
|
-
* Checks if a feature flag is enabled.
|
|
192
|
-
*
|
|
193
|
-
* @param key - Feature flag key
|
|
194
|
-
* @param context - Evaluation context
|
|
195
|
-
* @returns Boolean indicating if flag is enabled
|
|
196
|
-
*/
|
|
197
|
-
isEnabled(key: FeatureFlagKey, context?: FeatureFlagContext): Promise<boolean>;
|
|
198
|
-
/**
|
|
199
|
-
* Gets all feature flags with their evaluations.
|
|
200
|
-
*
|
|
201
|
-
* @param context - Evaluation context
|
|
202
|
-
* @returns All feature flag evaluations
|
|
203
|
-
*/
|
|
204
|
-
getAllFlags(context?: FeatureFlagContext): Promise<Record<string, FeatureFlagEvaluation<FeatureFlagKey>>>;
|
|
205
|
-
/**
|
|
206
|
-
* Creates a new feature flag.
|
|
207
|
-
*
|
|
208
|
-
* @param createData - Flag creation data
|
|
209
|
-
* @returns Created feature flag
|
|
210
|
-
*/
|
|
211
|
-
createFlag(createData: CreateFlagRequest<FeatureFlagKey>): Promise<FeatureFlag<FeatureFlagKey>>;
|
|
212
|
-
/**
|
|
213
|
-
* Updates an existing feature flag.
|
|
214
|
-
*
|
|
215
|
-
* @param key - Feature flag key
|
|
216
|
-
* @param updateData - Flag update data
|
|
217
|
-
* @returns Updated feature flag
|
|
218
|
-
*/
|
|
219
|
-
updateFlag(key: FeatureFlagKey, updateData: Partial<CreateFlagRequest<FeatureFlagKey>>): Promise<FeatureFlag<FeatureFlagKey>>;
|
|
220
|
-
/**
|
|
221
|
-
* Deletes a feature flag.
|
|
222
|
-
*
|
|
223
|
-
* @param key - Feature flag key
|
|
224
|
-
*/
|
|
225
|
-
deleteFlag(key: FeatureFlagKey): Promise<void>;
|
|
226
|
-
/**
|
|
227
|
-
* Sets a manual override for a flag.
|
|
228
|
-
*
|
|
229
|
-
* @param key - Feature flag key
|
|
230
|
-
* @param value - Override value
|
|
231
|
-
*/
|
|
232
|
-
setOverride(key: FeatureFlagKey, value: FeatureFlagValue): Promise<void>;
|
|
233
|
-
/**
|
|
234
|
-
* Removes a manual override for a flag.
|
|
235
|
-
*
|
|
236
|
-
* @param key - Feature flag key
|
|
237
|
-
*/
|
|
238
|
-
removeOverride(key: FeatureFlagKey): Promise<void>;
|
|
239
|
-
/**
|
|
240
|
-
* Gets all available feature flags.
|
|
241
|
-
*
|
|
242
|
-
* @param environment - Filter by environment
|
|
243
|
-
* @returns List of feature flags
|
|
244
|
-
*/
|
|
245
|
-
getAllFeatureFlags(environment?: string): Promise<FeatureFlag<FeatureFlagKey>[]>;
|
|
246
|
-
/**
|
|
247
|
-
* Gets all rules for a specific flag.
|
|
248
|
-
*
|
|
249
|
-
* @param key - Feature flag key
|
|
250
|
-
* @returns List of rules for the flag
|
|
251
|
-
*/
|
|
252
|
-
getFlagRules(key: FeatureFlagKey): Promise<FeatureFlagRule<FeatureFlagKey>[]>;
|
|
253
|
-
/**
|
|
254
|
-
* Forces a refresh of the feature flag cache.
|
|
255
|
-
*/
|
|
256
|
-
refreshCache(): Promise<void>;
|
|
257
|
-
/**
|
|
258
|
-
* Gets provider health status.
|
|
259
|
-
*
|
|
260
|
-
* @returns Provider health information
|
|
261
|
-
*/
|
|
262
|
-
getHealthStatus(): Promise<ProviderHealthStatus>;
|
|
263
|
-
}
|
|
264
|
-
//# sourceMappingURL=feature-flag.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flag.service.d.ts","sourceRoot":"","sources":["../../../src/backend/featureFlags/feature-flag.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,eAAe,EAEpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAI1B,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAKpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,qBACa,kBAAmB,YAAW,YAAY,EAAE,eAAe;IAK1D,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAJlD,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAuC;gBAE1B,qBAAqB,EAAE,qBAAqB,CAAC,cAAc,CAAC;IAEzF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAUnC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;YACW,kBAAkB;IAkBhC;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoDG;IACG,YAAY,CAChB,GAAG,EAAE,cAAc,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;IAmBjD;;;;;;OAMG;IACG,SAAS,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpF;;;;;OAKG;IACG,WAAW,CACf,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAC;IAiBjE;;;;;OAKG;IACG,UAAU,CACd,UAAU,EAAE,iBAAiB,CAAC,cAAc,CAAC,GAC5C,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAevC;;;;;;OAMG;IACG,UAAU,CACd,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,GACrD,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAevC;;;;OAIG;IACG,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpD;;;;;OAKG;IACG,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAY9E;;;;OAIG;IACG,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD;;;;;OAKG;IACG,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;IAStF;;;;;OAKG;IACG,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;IASnF;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAYnC;;;;OAIG;IACG,eAAe,IAAI,OAAO,CAAC,oBAAoB,CAAC;CAOvD"}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useFeatureFlag Hook
|
|
3
|
-
*
|
|
4
|
-
* React hook for accessing individual feature flags with caching and real-time updates.
|
|
5
|
-
* This will be moved to @plyaz/core when the package structure is finalized.
|
|
6
|
-
*
|
|
7
|
-
* @fileoverview React hook for feature flag access
|
|
8
|
-
* @version 1.0.0
|
|
9
|
-
*/
|
|
10
|
-
import type { FeatureFlagValue, FeatureFlagHook, UseFeatureFlagOptions } from '@plyaz/types';
|
|
11
|
-
/**
|
|
12
|
-
* React hook for accessing a single feature flag.
|
|
13
|
-
* Provides real-time updates and automatic caching.
|
|
14
|
-
*
|
|
15
|
-
* @template T - Expected type of the flag value
|
|
16
|
-
* @param key - Feature flag key to evaluate
|
|
17
|
-
* @param options - Hook configuration options
|
|
18
|
-
* @returns Feature flag hook state
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* // Basic usage
|
|
23
|
-
* const { value: isEnabled, isLoading, error } = useFeatureFlag<FeatureFlagKey>('AUTH_GOOGLE');
|
|
24
|
-
*
|
|
25
|
-
* // With context and type safety
|
|
26
|
-
* const { value, isLoading, refresh } = useFeatureFlag<FeatureFlagKey, number>(
|
|
27
|
-
* 'ROLLOUT_PERCENTAGE',
|
|
28
|
-
* {
|
|
29
|
-
* context: { userId: 'user123', environment: 'production' },
|
|
30
|
-
* defaultValue: 0
|
|
31
|
-
* }
|
|
32
|
-
* );
|
|
33
|
-
*
|
|
34
|
-
* // With auto-refresh disabled
|
|
35
|
-
* const { value, refresh } = useFeatureFlag<FeatureFlagKey>('BETA_FEATURE', {
|
|
36
|
-
* autoRefresh: false,
|
|
37
|
-
* defaultValue: false
|
|
38
|
-
* });
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
export declare function useFeatureFlag<FeatureFlagKey extends string, T extends FeatureFlagValue = boolean>(key: FeatureFlagKey, options?: UseFeatureFlagOptions): FeatureFlagHook<T>;
|
|
42
|
-
/**
|
|
43
|
-
* Hook for checking if a feature flag is enabled.
|
|
44
|
-
* Simplified version of useFeatureFlag that returns only boolean state.
|
|
45
|
-
*
|
|
46
|
-
* @param key - Feature flag key to check
|
|
47
|
-
* @param options - Hook configuration options
|
|
48
|
-
* @returns Boolean indicating if flag is enabled
|
|
49
|
-
*
|
|
50
|
-
* @example
|
|
51
|
-
* ```typescript
|
|
52
|
-
* const isGoogleAuthEnabled = useFeatureFlagEnabled<FeatureFlagKey>('AUTH_GOOGLE');
|
|
53
|
-
* const isBetaEnabled = useFeatureFlagEnabled<FeatureFlagKey>('BETA_FEATURE', {
|
|
54
|
-
* context: { userId: 'user123', environment: 'production' }
|
|
55
|
-
* });
|
|
56
|
-
* ```
|
|
57
|
-
*/
|
|
58
|
-
export declare function useFeatureFlagEnabled<FeatureFlagKey extends string>(key: FeatureFlagKey, options?: UseFeatureFlagOptions): boolean;
|
|
59
|
-
/**
|
|
60
|
-
* Hook for getting a feature flag value with type safety.
|
|
61
|
-
* Provides the raw value without the loading state wrapper.
|
|
62
|
-
*
|
|
63
|
-
* @template T - Expected type of the flag value
|
|
64
|
-
* @param key - Feature flag key to get value for
|
|
65
|
-
* @param options - Hook configuration options
|
|
66
|
-
* @returns The flag value with type safety
|
|
67
|
-
*
|
|
68
|
-
* @example
|
|
69
|
-
* ```typescript
|
|
70
|
-
* const rolloutPercentage = useFeatureFlagValue<FeatureFlagKey, number>('ROLLOUT_PERCENTAGE', {
|
|
71
|
-
* defaultValue: 0
|
|
72
|
-
* });
|
|
73
|
-
*
|
|
74
|
-
* const theme = useFeatureFlagValue<FeatureFlagKey, 'light' | 'dark'>('UI_THEME', {
|
|
75
|
-
* defaultValue: 'light'
|
|
76
|
-
* });
|
|
77
|
-
* ```
|
|
78
|
-
*/
|
|
79
|
-
export declare function useFeatureFlagValue<FeatureFlagKey extends string, T extends FeatureFlagValue = FeatureFlagValue>(key: FeatureFlagKey, options?: UseFeatureFlagOptions): T;
|
|
80
|
-
/**
|
|
81
|
-
* Hook for evaluating multiple feature flags at once.
|
|
82
|
-
* Useful for loading multiple flags with a single provider call.
|
|
83
|
-
*
|
|
84
|
-
* @param keys - Array of feature flag keys to evaluate
|
|
85
|
-
* @param options - Hook configuration options
|
|
86
|
-
* @returns Map of flag keys to their hook states
|
|
87
|
-
*
|
|
88
|
-
* @example
|
|
89
|
-
* ```typescript
|
|
90
|
-
* const flags = useMultipleFeatureFlags<FeatureFlagKey>([
|
|
91
|
-
* 'AUTH_GOOGLE',
|
|
92
|
-
* 'AUTH_GITHUB',
|
|
93
|
-
* 'BETA_FEATURE'
|
|
94
|
-
* ], {
|
|
95
|
-
* context: { userId: 'user123', environment: 'production' }
|
|
96
|
-
* });
|
|
97
|
-
*
|
|
98
|
-
* const isGoogleEnabled = flags.AUTH_GOOGLE.value;
|
|
99
|
-
* const isGithubEnabled = flags.AUTH_GITHUB.value;
|
|
100
|
-
* ```
|
|
101
|
-
*/
|
|
102
|
-
export declare function useMultipleFeatureFlags<FeatureFlagKey extends string>(keys: FeatureFlagKey[], options?: UseFeatureFlagOptions): Record<FeatureFlagKey, FeatureFlagHook<FeatureFlagValue>>;
|
|
103
|
-
//# sourceMappingURL=useFeatureFlag.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFeatureFlag.d.ts","sourceRoot":"","sources":["../../../../src/frontend/featureFlags/hooks/useFeatureFlag.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAO7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,cAAc,CAAC,cAAc,SAAS,MAAM,EAAE,CAAC,SAAS,gBAAgB,GAAG,OAAO,EAChG,GAAG,EAAE,cAAc,EACnB,OAAO,GAAE,qBAA0B,GAClC,eAAe,CAAC,CAAC,CAAC,CA8CpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,SAAS,MAAM,EACjE,GAAG,EAAE,cAAc,EACnB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAOT;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,SAAS,MAAM,EAC7B,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,EAC7C,GAAG,EAAE,cAAc,EAAE,OAAO,GAAE,qBAA0B,GAAG,CAAC,CAG7D;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,SAAS,MAAM,EACnE,IAAI,EAAE,cAAc,EAAE,EACtB,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAuB3D"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useFeatureFlagHelpers Hook
|
|
3
|
-
*
|
|
4
|
-
* React hook providing helper functions for feature flag management.
|
|
5
|
-
* This will be moved to @plyaz/core when the package structure is finalized.
|
|
6
|
-
*
|
|
7
|
-
* @fileoverview Helper functions hook for feature flags
|
|
8
|
-
* @version 1.0.0
|
|
9
|
-
*/
|
|
10
|
-
import type { FeatureFlagHelpers } from '@plyaz/types';
|
|
11
|
-
/**
|
|
12
|
-
* Hook that provides helper functions for feature flag operations.
|
|
13
|
-
* Includes override management, bulk operations, and conditional execution.
|
|
14
|
-
*
|
|
15
|
-
* @returns Object containing helper functions
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```typescript
|
|
19
|
-
* const helpers = useFeatureFlagHelpers<FeatureFlagKey>();
|
|
20
|
-
*
|
|
21
|
-
* // Set override
|
|
22
|
-
* helpers.setOverride('AUTH_GOOGLE', true);
|
|
23
|
-
*
|
|
24
|
-
* // Check multiple flags
|
|
25
|
-
* const anyEnabled = await helpers.isAnyEnabled(['AUTH_GOOGLE', 'AUTH_GITHUB']);
|
|
26
|
-
*
|
|
27
|
-
* // Conditional execution
|
|
28
|
-
* const result = await helpers.whenEnabled('BETA_FEATURE',
|
|
29
|
-
* () => console.log('Beta feature is enabled'),
|
|
30
|
-
* () => console.log('Beta feature is disabled')
|
|
31
|
-
* );
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
export declare function useFeatureFlagHelpers<FeatureFlagKey extends string>(): FeatureFlagHelpers<FeatureFlagKey>;
|
|
35
|
-
//# sourceMappingURL=useFeatureFlagActions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFeatureFlagActions.d.ts","sourceRoot":"","sources":["../../../../src/frontend/featureFlags/hooks/useFeatureFlagActions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAwC,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAG7F;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,CACnC,cAAc,SAAS,MAAM,KAC1B,kBAAkB,CAAC,cAAc,CAAC,CAsGtC"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Feature Flag Hook Helpers
|
|
3
|
-
*
|
|
4
|
-
* Helper functions for feature flag hooks to reduce function complexity.
|
|
5
|
-
*
|
|
6
|
-
* @fileoverview Helper functions for feature flag hooks
|
|
7
|
-
* @version 1.0.0
|
|
8
|
-
*/
|
|
9
|
-
import type * as React from 'react';
|
|
10
|
-
import type { FeatureFlagValue, FeatureFlagContext, FeatureFlagHook, FeatureFlagProvider, FeatureFlagState } from '@plyaz/types';
|
|
11
|
-
/**
|
|
12
|
-
* Creates evaluation function for a feature flag.
|
|
13
|
-
*
|
|
14
|
-
* @template FeatureFlagKey - The type of feature flag keys
|
|
15
|
-
* @template T - The expected type of the flag value
|
|
16
|
-
* @param params - Evaluation parameters
|
|
17
|
-
* @param params.provider - Feature flag provider instance
|
|
18
|
-
* @param params.key - Feature flag key to evaluate
|
|
19
|
-
* @param params.context - Optional evaluation context
|
|
20
|
-
* @param params.defaultValue - Default value if evaluation fails
|
|
21
|
-
* @param setState - React state setter for flag state
|
|
22
|
-
* @returns Async function that evaluates the flag
|
|
23
|
-
*/
|
|
24
|
-
export declare function createEvaluationFunction<FeatureFlagKey extends string, T extends FeatureFlagValue = string | number | boolean | Record<string, unknown>>(params: {
|
|
25
|
-
provider: FeatureFlagProvider<FeatureFlagKey> | null;
|
|
26
|
-
key: FeatureFlagKey;
|
|
27
|
-
context: FeatureFlagContext | undefined;
|
|
28
|
-
defaultValue: T | undefined;
|
|
29
|
-
}, setState: React.Dispatch<React.SetStateAction<FeatureFlagState<FeatureFlagKey, T>>>): () => Promise<void>;
|
|
30
|
-
/**
|
|
31
|
-
* Custom hook for managing feature flag evaluation logic.
|
|
32
|
-
* Handles loading state, error management, and automatic evaluation.
|
|
33
|
-
*
|
|
34
|
-
* @template FeatureFlagKey - The type of feature flag keys
|
|
35
|
-
* @template T - The expected type of the flag value
|
|
36
|
-
* @param key - Feature flag key to evaluate
|
|
37
|
-
* @param context - Optional evaluation context
|
|
38
|
-
* @param defaultValue - Default value if evaluation fails
|
|
39
|
-
* @param provider - Feature flag provider instance
|
|
40
|
-
* @returns Feature flag hook state with value, loading, error, and refresh function
|
|
41
|
-
*/
|
|
42
|
-
export declare function useFeatureFlagEvaluation<FeatureFlagKey extends string, T extends FeatureFlagValue = boolean>(key: FeatureFlagKey, context: FeatureFlagContext | undefined, defaultValue: T | undefined, provider: FeatureFlagProvider<FeatureFlagKey> | null): FeatureFlagHook<T>;
|
|
43
|
-
/**
|
|
44
|
-
* Custom hook for managing multiple feature flags evaluation.
|
|
45
|
-
* Returns a record of flag states for multiple flags.
|
|
46
|
-
*
|
|
47
|
-
* @template FeatureFlagKey - The type of feature flag keys
|
|
48
|
-
* @param keys - Array of feature flag keys to evaluate
|
|
49
|
-
* @param context - Optional evaluation context
|
|
50
|
-
* @param defaultValue - Default value for all flags if evaluation fails
|
|
51
|
-
* @param provider - Feature flag provider instance
|
|
52
|
-
* @returns Record mapping flag keys to their hook states
|
|
53
|
-
*/
|
|
54
|
-
export declare function useMultipleFeatureFlagsEvaluation<FeatureFlagKey extends string>(keys: FeatureFlagKey[], context: FeatureFlagContext | undefined, defaultValue: FeatureFlagValue, provider: FeatureFlagProvider<FeatureFlagKey> | null): Record<string, FeatureFlagHook<FeatureFlagValue>>;
|
|
55
|
-
//# sourceMappingURL=useFeatureFlagHelpers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFeatureFlagHelpers.d.ts","sourceRoot":"","sources":["../../../../src/frontend/featureFlags/hooks/useFeatureFlagHelpers.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAEtB;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,SAAS,MAAM,EAC7B,CAAC,SAAS,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEhF,MAAM,EAAE;IACN,QAAQ,EAAE,mBAAmB,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACrD,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACxC,YAAY,EAAE,CAAC,GAAG,SAAS,CAAC;CAC7B,EACD,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,GAClF,MAAM,OAAO,CAAC,IAAI,CAAC,CA0BrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,SAAS,MAAM,EAC7B,CAAC,SAAS,gBAAgB,GAAG,OAAO,EAEpC,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,kBAAkB,GAAG,SAAS,EACvC,YAAY,EAAE,CAAC,GAAG,SAAS,EAC3B,QAAQ,EAAE,mBAAmB,CAAC,cAAc,CAAC,GAAG,IAAI,GACnD,eAAe,CAAC,CAAC,CAAC,CA+BpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAAC,cAAc,SAAS,MAAM,EAC7E,IAAI,EAAE,cAAc,EAAE,EACtB,OAAO,EAAE,kBAAkB,GAAG,SAAS,EACvC,YAAY,EAAE,gBAAgB,EAC9B,QAAQ,EAAE,mBAAmB,CAAC,cAAc,CAAC,GAAG,IAAI,GACnD,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC,CA6InD"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useFeatureFlagProvider Hook
|
|
3
|
-
*
|
|
4
|
-
* React hook for accessing the feature flag provider from context.
|
|
5
|
-
* This will be moved to @plyaz/core when the package structure is finalized.
|
|
6
|
-
*
|
|
7
|
-
* @fileoverview Provider access hook for feature flags
|
|
8
|
-
* @version 1.0.0
|
|
9
|
-
*/
|
|
10
|
-
import type { FeatureFlagProvider } from '@plyaz/types';
|
|
11
|
-
/**
|
|
12
|
-
* Hook for accessing the feature flag provider from React context.
|
|
13
|
-
* Must be used within a FeatureFlagProvider component.
|
|
14
|
-
*
|
|
15
|
-
* @returns Feature flag provider instance
|
|
16
|
-
* @throws Error if used outside of FeatureFlagProvider
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```typescript
|
|
20
|
-
* function MyComponent() {
|
|
21
|
-
* const provider = useFeatureFlagProvider<FeatureFlagKey>();
|
|
22
|
-
*
|
|
23
|
-
* const handleRefresh = async () => {
|
|
24
|
-
* await provider.refresh();
|
|
25
|
-
* };
|
|
26
|
-
*
|
|
27
|
-
* return <button onClick={handleRefresh}>Refresh Flags</button>;
|
|
28
|
-
* }
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
export declare function useFeatureFlagProvider<FeatureFlagKey extends string>(): FeatureFlagProvider<FeatureFlagKey>;
|
|
32
|
-
/**
|
|
33
|
-
* Hook for accessing the feature flag provider status.
|
|
34
|
-
* Provides information about provider initialization and health.
|
|
35
|
-
*
|
|
36
|
-
* @returns Provider status information
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```typescript
|
|
40
|
-
* function StatusComponent() {
|
|
41
|
-
* const { isInitialized, isLoading, error } = useFeatureFlagProviderStatus<FeatureFlagKey>();
|
|
42
|
-
*
|
|
43
|
-
* if (isLoading) return <div>Loading feature flags...</div>;
|
|
44
|
-
* if (error) return <div>Error: {error.message}</div>;
|
|
45
|
-
* if (!isInitialized) return <div>Initializing...</div>;
|
|
46
|
-
*
|
|
47
|
-
* return <div>Feature flags ready!</div>;
|
|
48
|
-
* }
|
|
49
|
-
* ```
|
|
50
|
-
*/
|
|
51
|
-
export declare function useFeatureFlagProviderStatus<FeatureFlagKey extends string>(): {
|
|
52
|
-
isInitialized: boolean;
|
|
53
|
-
isLoading: boolean;
|
|
54
|
-
error: Error | null;
|
|
55
|
-
lastUpdated: Date | null | undefined;
|
|
56
|
-
};
|
|
57
|
-
//# sourceMappingURL=useFeatureFlagProvider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFeatureFlagProvider.d.ts","sourceRoot":"","sources":["../../../../src/frontend/featureFlags/hooks/useFeatureFlagProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAA2B,MAAM,cAAc,CAAC;AAEjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,SAAS,MAAM,KAC1B,mBAAmB,CAAC,cAAc,CAAC,CAWvC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,SAAS,MAAM,KAAK;IAC7E,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;CACtC,CAgBA"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Feature Flag Provider Component
|
|
3
|
-
*
|
|
4
|
-
* React context provider for feature flags system.
|
|
5
|
-
* This will be moved to @plyaz/core when the package structure is finalized.
|
|
6
|
-
*
|
|
7
|
-
* @fileoverview React provider for feature flag context
|
|
8
|
-
* @version 1.0.0
|
|
9
|
-
*/
|
|
10
|
-
import React from 'react';
|
|
11
|
-
import type { FeatureFlagConfig, FeatureFlagContextValue, FeatureFlagProviderProps, FeatureFlagValue } from '@plyaz/types';
|
|
12
|
-
import type { FeatureFlagKey } from '@domain/types';
|
|
13
|
-
/**
|
|
14
|
-
* React context for feature flag provider.
|
|
15
|
-
* Using string as the base type to support any feature flag key.
|
|
16
|
-
*/
|
|
17
|
-
export declare const FeatureFlagContext: React.Context<FeatureFlagContextValue<"AUTH_GOOGLE" | "AUTH_DISCORD" | "AUTH_FACEBOOK" | "AUTH_GITHUB"> | null>;
|
|
18
|
-
/**
|
|
19
|
-
* Feature Flag Provider component that manages the feature flag system.
|
|
20
|
-
* Provides context for accessing feature flags throughout the React component tree.
|
|
21
|
-
*
|
|
22
|
-
* @param props - Provider configuration and options
|
|
23
|
-
* @returns JSX element providing feature flag context
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* // Basic usage
|
|
28
|
-
* function App() {
|
|
29
|
-
* return (
|
|
30
|
-
* <FeatureFlagAppProvider
|
|
31
|
-
* config={{
|
|
32
|
-
* provider: 'memory',
|
|
33
|
-
* isCacheEnabled: true,
|
|
34
|
-
* cacheTtl: 300,
|
|
35
|
-
* }}
|
|
36
|
-
* features={FEATURES}
|
|
37
|
-
* >
|
|
38
|
-
* <MyApplication />
|
|
39
|
-
* </FeatureFlagAppProvider>
|
|
40
|
-
* );
|
|
41
|
-
* }
|
|
42
|
-
*
|
|
43
|
-
* // With custom context and callbacks
|
|
44
|
-
* function App() {
|
|
45
|
-
* const featureFlagConfig = {
|
|
46
|
-
* provider: 'api' as const,
|
|
47
|
-
* apiEndpoint: 'https://api.example.com',
|
|
48
|
-
* apiKey: process.env.REACT_APP_FF_API_KEY,
|
|
49
|
-
* isCacheEnabled: true,
|
|
50
|
-
* cacheTtl: 300,
|
|
51
|
-
* };
|
|
52
|
-
*
|
|
53
|
-
* const defaultContext = {
|
|
54
|
-
* environment: 'production' as const,
|
|
55
|
-
* userId: getCurrentUserId(),
|
|
56
|
-
* userRole: getCurrentUserRole(),
|
|
57
|
-
* };
|
|
58
|
-
*
|
|
59
|
-
* return (
|
|
60
|
-
* <FeatureFlagAppProvider
|
|
61
|
-
* config={featureFlagConfig}
|
|
62
|
-
* features={FEATURES}
|
|
63
|
-
* defaultContext={defaultContext}
|
|
64
|
-
* onReady={(provider) => console.log('Feature flags ready!')}
|
|
65
|
-
* onError={(error) => console.error('Feature flag error:', error)}
|
|
66
|
-
* showLoading
|
|
67
|
-
* >
|
|
68
|
-
* <MyApplication />
|
|
69
|
-
* </FeatureFlagAppProvider>
|
|
70
|
-
* );
|
|
71
|
-
* }
|
|
72
|
-
* ```
|
|
73
|
-
*/
|
|
74
|
-
export declare function FeatureFlagAppProvider<FeatureFlags extends Record<FeatureFlagKey, FeatureFlagValue>>({ config, children, features, onReady, onError, isShowLoading, loadingComponent, errorComponent, }: FeatureFlagProviderProps<FeatureFlagKey, FeatureFlags>): React.ReactElement;
|
|
75
|
-
export declare namespace FeatureFlagAppProvider {
|
|
76
|
-
var displayName: string;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Higher-order component for providing feature flag context.
|
|
80
|
-
* Alternative to using the FeatureFlagAppProvider component directly.
|
|
81
|
-
*
|
|
82
|
-
* @param config - Feature flag configuration
|
|
83
|
-
* @param options - Additional provider options
|
|
84
|
-
* @returns HOC function that wraps components with feature flag provider
|
|
85
|
-
*
|
|
86
|
-
* @example
|
|
87
|
-
* ```typescript
|
|
88
|
-
* const withFeatureFlags = createFeatureFlagProvider({
|
|
89
|
-
* provider: 'memory',
|
|
90
|
-
* isCacheEnabled: true,
|
|
91
|
-
* }, {
|
|
92
|
-
* features: FEATURES
|
|
93
|
-
* });
|
|
94
|
-
*
|
|
95
|
-
* const AppWithFeatureFlags = withFeatureFlags(App);
|
|
96
|
-
* ```
|
|
97
|
-
*/
|
|
98
|
-
export declare function createFeatureFlagProvider<FeatureFlags extends Record<FeatureFlagKey, FeatureFlagValue>>(config: FeatureFlagConfig<FeatureFlagKey>, options?: Pick<FeatureFlagProviderProps<FeatureFlagKey, FeatureFlags>, 'defaultContext' | 'onReady' | 'onError' | 'features'>): <P extends object>(component: React.ComponentType<P>) => React.ComponentType<P>;
|
|
99
|
-
//# sourceMappingURL=FeatureFlagProvider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureFlagProvider.d.ts","sourceRoot":"","sources":["../../../../src/frontend/featureFlags/providers/FeatureFlagProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAEV,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,iHAE9B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH,wBAAgB,sBAAsB,CACpC,YAAY,SAAS,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,EAC7D,EACA,MAAM,EAEN,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,OAAO,EACP,aAAqB,EACrB,gBAAgB,EAChB,cAAc,GACf,EAAE,wBAAwB,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,YAAY,CA0J7E;yBAtKe,sBAAsB;;;AA2KtC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,SAAS,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,EAE7D,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACzC,OAAO,CAAC,EAAE,IAAI,CACZ,wBAAwB,CAAC,cAAc,EAAE,YAAY,CAAC,EACtD,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CACtD,IAEgC,CAAC,SAAS,MAAM,EAC/C,WAAW,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAChC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAe1B"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Feature Flag Provider Helpers
|
|
3
|
-
*
|
|
4
|
-
* Helper functions for the FeatureFlagProvider component to reduce complexity.
|
|
5
|
-
*
|
|
6
|
-
* @fileoverview Helper functions for FeatureFlagProvider
|
|
7
|
-
* @version 1.0.0
|
|
8
|
-
*/
|
|
9
|
-
import React from 'react';
|
|
10
|
-
import type { FeatureFlagConfig } from '@plyaz/types';
|
|
11
|
-
import type { ProviderState, UseFeatureFlagProviderState } from './types';
|
|
12
|
-
/**
|
|
13
|
-
* Hook for managing feature flag provider state and initialization.
|
|
14
|
-
*/
|
|
15
|
-
export declare function useFeatureFlagProviderState<FeatureFlagKey extends string>(config: FeatureFlagConfig<FeatureFlagKey>, onReady?: () => void, onError?: (error: Error) => void): UseFeatureFlagProviderState<FeatureFlagKey>;
|
|
16
|
-
/**
|
|
17
|
-
* Hook for setting up provider subscription and cleanup.
|
|
18
|
-
*/
|
|
19
|
-
export declare function useProviderSubscription<FeatureFlagKey extends string>(state: ProviderState<FeatureFlagKey>, setState: React.Dispatch<React.SetStateAction<ProviderState<FeatureFlagKey>>>): void;
|
|
20
|
-
/**
|
|
21
|
-
* Renders loading state component.
|
|
22
|
-
*/
|
|
23
|
-
export declare function renderLoadingState(isShowLoading: boolean, isLoading: boolean, loadingComponent?: React.ComponentType): React.ReactElement | null;
|
|
24
|
-
/**
|
|
25
|
-
* Renders error state component.
|
|
26
|
-
*/
|
|
27
|
-
export declare function renderErrorState(error: Error | null, errorComponent?: React.ComponentType<{
|
|
28
|
-
error: Error;
|
|
29
|
-
retry: () => void;
|
|
30
|
-
}>, retry?: () => void): React.ReactElement | null;
|
|
31
|
-
//# sourceMappingURL=FeatureFlagProviderHelpers.d.ts.map
|