@plyaz/core 1.2.0 → 1.2.1
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/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 +48 -46
- 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 +24 -0
- package/dist/entry-backend.d.ts.map +1 -0
- package/dist/entry-backend.js +15635 -0
- package/dist/entry-backend.js.map +1 -0
- package/dist/entry-backend.mjs +15506 -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 +11152 -0
- package/dist/entry-frontend.js.map +1 -0
- package/dist/entry-frontend.mjs +11089 -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 +15450 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +13678 -4697
- package/dist/index.mjs.map +1 -1
- package/dist/init/CoreInitializer.d.ts +582 -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 +9059 -0
- package/dist/init/nestjs/index.js.map +1 -0
- package/dist/init/nestjs/index.mjs +9055 -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 +124 -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/{backend/featureFlags/database/repository.d.ts → models/featureFlags/FeatureFlagRepository.d.ts} +47 -5
- 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 +391 -0
- package/dist/services/DbService.d.ts.map +1 -0
- package/dist/services/NotificationService.d.ts +151 -0
- package/dist/services/NotificationService.d.ts.map +1 -0
- package/dist/services/StorageService.d.ts +144 -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.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
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example Validator
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates extending BaseValidator for a domain entity.
|
|
5
|
+
* Uses schemas and types from @plyaz/types/examples.
|
|
6
|
+
*/
|
|
7
|
+
import { BaseValidator } from '../../base';
|
|
8
|
+
import type { CreateExampleDTO, UpdateExampleDTO, PatchExampleDTO, DeleteExampleDTO, QueryExampleDTO } from '@plyaz/types/examples';
|
|
9
|
+
/**
|
|
10
|
+
* Example Validator implementation
|
|
11
|
+
*
|
|
12
|
+
* Supports all HTTP operations:
|
|
13
|
+
* - create (POST)
|
|
14
|
+
* - update (PUT)
|
|
15
|
+
* - patch (PATCH)
|
|
16
|
+
* - delete (DELETE)
|
|
17
|
+
* - query (GET)
|
|
18
|
+
*/
|
|
19
|
+
declare class ExampleValidatorClass extends BaseValidator<CreateExampleDTO, UpdateExampleDTO, PatchExampleDTO, DeleteExampleDTO, QueryExampleDTO> {
|
|
20
|
+
constructor();
|
|
21
|
+
/**
|
|
22
|
+
* Custom validation: check if name is not reserved
|
|
23
|
+
* Use for business logic validation beyond schema validation
|
|
24
|
+
*/
|
|
25
|
+
validateNameNotReserved(name: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Custom validation: check if amount is within budget
|
|
28
|
+
*/
|
|
29
|
+
validateAmountWithinBudget(amount: number, budget: number): boolean;
|
|
30
|
+
}
|
|
31
|
+
export { ExampleValidatorClass };
|
|
32
|
+
export declare const ExampleValidator: ExampleValidatorClass;
|
|
33
|
+
//# sourceMappingURL=ExampleValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExampleValidator.d.ts","sourceRoot":"","sources":["../../../../src/domain/example/validators/ExampleValidator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQ3C,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;GASG;AACH,cAAM,qBAAsB,SAAQ,aAAa,CAC/C,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,eAAe,CAChB;;IAWC;;;OAGG;IACH,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK9C;;OAEG;IACH,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;CAGpE;AAGD,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAGjC,eAAO,MAAM,gBAAgB,uBAA8B,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature Flag Domain Service (Frontend)
|
|
3
|
+
*
|
|
4
|
+
* Frontend-specific domain service for feature flag management.
|
|
5
|
+
* Implements FeatureFlagServiceInterface for clean dependency injection.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```tsx
|
|
9
|
+
* // With ServiceRegistry (auto-initialization)
|
|
10
|
+
* await ServiceRegistry.initialize({
|
|
11
|
+
* services: [{ service: FeatureFlagDomainService, config: { cacheTtl: 300 } }],
|
|
12
|
+
* });
|
|
13
|
+
* const service = ServiceRegistry.get<FeatureFlagServiceInterface>('featureFlags');
|
|
14
|
+
*
|
|
15
|
+
* // Manual creation with provider
|
|
16
|
+
* const service = new FeatureFlagDomainService({
|
|
17
|
+
* provider,
|
|
18
|
+
* store: useFeatureFlagStore.getState(),
|
|
19
|
+
* });
|
|
20
|
+
* await service.fetchAndSyncAll({ userId: user.id });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import type { FeatureFlag, FeatureFlagRule, FeatureFlagContext, FeatureFlagValue, FeatureFlagEvaluation, CreateFlagRequest } from '@plyaz/types';
|
|
24
|
+
import { BaseFrontendDomainService } from '../base';
|
|
25
|
+
import type { CoreFrontendFeatureFlagEventType, CoreFeatureFlagStore, CoreFeatureFlagServiceConfig, CoreFeatureFlagServiceInitConfig, CoreFeatureFlagServiceInterface, CoreServiceCreateOptions } from '@plyaz/types/core';
|
|
26
|
+
/**
|
|
27
|
+
* Feature Flag Domain Service (Frontend)
|
|
28
|
+
*
|
|
29
|
+
* Frontend-specific domain service for feature flag management.
|
|
30
|
+
* Implements FeatureFlagServiceInterface for clean dependency injection.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```tsx
|
|
34
|
+
* // With ServiceRegistry (auto-initialization)
|
|
35
|
+
* await ServiceRegistry.initialize({
|
|
36
|
+
* services: [{ service: FeatureFlagDomainService, config: { cacheTtl: 300 } }],
|
|
37
|
+
* });
|
|
38
|
+
* const service = ServiceRegistry.get<FeatureFlagServiceInterface>('featureFlags');
|
|
39
|
+
*
|
|
40
|
+
* // Manual creation with provider
|
|
41
|
+
* const service = new FeatureFlagDomainService({
|
|
42
|
+
* provider,
|
|
43
|
+
* store: useFeatureFlagStore.getState(),
|
|
44
|
+
* });
|
|
45
|
+
* await service.fetchAndSyncAll({ userId: user.id });
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare class FrontendFeatureFlagDomainService extends BaseFrontendDomainService<CoreFeatureFlagServiceConfig, CoreFeatureFlagStore, Record<string, FeatureFlagValue>> implements CoreFeatureFlagServiceInterface {
|
|
49
|
+
static readonly serviceKey: "featureFlags";
|
|
50
|
+
/** Build API client for feature flags */
|
|
51
|
+
private static buildApiClient;
|
|
52
|
+
/** Build feature flag provider */
|
|
53
|
+
private static buildProvider;
|
|
54
|
+
/**
|
|
55
|
+
* Factory method for ServiceRegistry auto-initialization.
|
|
56
|
+
*/
|
|
57
|
+
static create(config: CoreFeatureFlagServiceInitConfig, options?: CoreServiceCreateOptions): Promise<FrontendFeatureFlagDomainService>;
|
|
58
|
+
/**
|
|
59
|
+
* Event prefix for all events emitted by this service
|
|
60
|
+
* Required by BaseFrontendDomainService
|
|
61
|
+
*/
|
|
62
|
+
protected eventPrefix: string;
|
|
63
|
+
private readonly provider;
|
|
64
|
+
constructor(config: CoreFeatureFlagServiceConfig);
|
|
65
|
+
isAvailable(): boolean;
|
|
66
|
+
dispose(): void;
|
|
67
|
+
refresh(): Promise<void>;
|
|
68
|
+
evaluate<TKey extends string = string>(key: TKey, context?: FeatureFlagContext): Promise<FeatureFlagEvaluation<TKey>>;
|
|
69
|
+
isEnabled<TKey extends string = string>(key: TKey, context?: FeatureFlagContext): Promise<boolean>;
|
|
70
|
+
getValue<T = FeatureFlagValue, TKey extends string = string>(key: TKey, context?: FeatureFlagContext): Promise<T>;
|
|
71
|
+
evaluateAll<TKey extends string = string>(context?: FeatureFlagContext): Promise<Record<string, FeatureFlagEvaluation<TKey>>>;
|
|
72
|
+
fetchAndSyncAll(context?: FeatureFlagContext): Promise<Record<string, FeatureFlagValue>>;
|
|
73
|
+
createFlag<TKey extends string = string>(data: CreateFlagRequest<TKey>): Promise<FeatureFlag<TKey>>;
|
|
74
|
+
updateFlag<TKey extends string = string>(key: TKey, data: Partial<CreateFlagRequest<TKey>>): Promise<FeatureFlag<TKey>>;
|
|
75
|
+
deleteFlag<TKey extends string = string>(key: TKey): Promise<void>;
|
|
76
|
+
getRules<TKey extends string = string>(key: TKey): Promise<FeatureFlagRule<TKey>[]>;
|
|
77
|
+
getAllRules<TKey extends string = string>(): Promise<FeatureFlagRule<TKey>[]>;
|
|
78
|
+
setOverride<TKey extends string = string>(key: TKey, value: FeatureFlagValue): void;
|
|
79
|
+
removeOverride<TKey extends string = string>(key: TKey): void;
|
|
80
|
+
clearOverrides(): void;
|
|
81
|
+
subscribe(callback: () => void): () => void;
|
|
82
|
+
on(event: CoreFrontendFeatureFlagEventType, handler: (data: unknown) => void): () => void;
|
|
83
|
+
protected syncToStores(flags: Record<string, FeatureFlagValue>, replace?: boolean): void;
|
|
84
|
+
private toValues;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=FrontendFeatureFlagDomainService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FrontendFeatureFlagDomainService.d.ts","sourceRoot":"","sources":["../../../src/domain/featureFlags/FrontendFeatureFlagDomainService.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,21 +2,25 @@
|
|
|
2
2
|
* Feature Flags Domain - Main Exports
|
|
3
3
|
*
|
|
4
4
|
* This module provides the main exports for the feature flags domain logic.
|
|
5
|
-
* This will be moved to @plyaz/core when the package structure is finalized.
|
|
6
5
|
*
|
|
7
6
|
* @fileoverview Main feature flags domain exports
|
|
8
7
|
* @version 1.0.0
|
|
9
8
|
*/
|
|
10
9
|
import type { FeatureFlagConfig, FeatureFlagOverrides } from '@plyaz/types';
|
|
11
10
|
import type { FeatureFlagKey } from '../types';
|
|
11
|
+
export { createFeatureFlagService, FEATURE_FLAG_SERVICE } from './module';
|
|
12
|
+
export { FeatureFlagService } from './service';
|
|
13
|
+
export { FrontendFeatureFlagDomainService } from './FrontendFeatureFlagDomainService';
|
|
14
|
+
export { FeatureFlagServiceFactory } from './providers/factory';
|
|
12
15
|
export { FeatureFlagProvider } from './provider';
|
|
13
16
|
export { FeatureFlagProviderFactory } from './providers/factory';
|
|
14
|
-
export type { ProviderType } from './providers/factory';
|
|
15
17
|
export { MemoryFeatureFlagProvider } from './providers/memory';
|
|
16
18
|
export { FileFeatureFlagProvider } from './providers/file';
|
|
17
19
|
export { RedisFeatureFlagProvider } from './providers/redis';
|
|
18
20
|
export { ApiFeatureFlagProvider } from './providers/api';
|
|
19
21
|
export { DatabaseFeatureFlagProvider } from './providers/database';
|
|
22
|
+
export { FeatureFlagDatabaseRepository } from '@models/featureFlags';
|
|
23
|
+
export * from './mappers';
|
|
20
24
|
/**
|
|
21
25
|
* Default configuration for feature flags.
|
|
22
26
|
* Provides sensible defaults for most use cases.
|
|
@@ -31,19 +35,20 @@ export declare const DEFAULT_FEATURE_FLAG_CONFIG: {
|
|
|
31
35
|
};
|
|
32
36
|
/**
|
|
33
37
|
* Feature flag system initialization for different environments.
|
|
38
|
+
* Returns a FeatureFlagService instance for all environments.
|
|
34
39
|
*/
|
|
35
40
|
export declare const FeatureFlagSystem: {
|
|
36
41
|
/**
|
|
37
42
|
* Initialize for frontend/client applications.
|
|
38
43
|
*/
|
|
39
|
-
readonly initializeForFrontend: (config?: Partial<FeatureFlagConfig<FeatureFlagKey>>) => Promise<import("
|
|
44
|
+
readonly initializeForFrontend: (config?: Partial<FeatureFlagConfig<FeatureFlagKey>>) => Promise<import("./service").FeatureFlagService<"AUTH_GOOGLE" | "AUTH_DISCORD" | "AUTH_FACEBOOK" | "AUTH_GITHUB">>;
|
|
40
45
|
/**
|
|
41
46
|
* Initialize for backend/server applications.
|
|
42
47
|
*/
|
|
43
|
-
readonly initializeForBackend: (config?: Partial<FeatureFlagConfig<FeatureFlagKey>>) => Promise<import("
|
|
48
|
+
readonly initializeForBackend: (config?: Partial<FeatureFlagConfig<FeatureFlagKey>>) => Promise<import("./service").FeatureFlagService<"AUTH_GOOGLE" | "AUTH_DISCORD" | "AUTH_FACEBOOK" | "AUTH_GITHUB">>;
|
|
44
49
|
/**
|
|
45
50
|
* Initialize for testing environments.
|
|
46
51
|
*/
|
|
47
|
-
readonly initializeForTesting: (overrides?: FeatureFlagOverrides<FeatureFlagKey>) => Promise<import("
|
|
52
|
+
readonly initializeForTesting: (overrides?: FeatureFlagOverrides<FeatureFlagKey>) => Promise<import("./service").FeatureFlagService<"AUTH_GOOGLE" | "AUTH_DISCORD" | "AUTH_FACEBOOK" | "AUTH_GITHUB">>;
|
|
48
53
|
};
|
|
49
54
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/featureFlags/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/featureFlags/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAI/C,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAG1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAG/C,OAAO,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AAGtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAGrE,cAAc,WAAW,CAAC;AAE1B;;;GAGG;AACH,eAAO,MAAM,2BAA2B;;;;;;;CAOuB,CAAC;AAEhE;;;GAGG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;OAEG;8CACmC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAQhF;;OAEG;6CACkC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAQ/E;;OAEG;gDACqC,oBAAoB,CAAC,cAAc,CAAC;CAkBpE,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature Flag Mapper
|
|
3
|
+
*
|
|
4
|
+
* Handles transformation between different feature flag data representations:
|
|
5
|
+
* - API Response (DTO) → Domain Entity
|
|
6
|
+
* - Domain Entity → Store State
|
|
7
|
+
* - Domain → API Request (DTO)
|
|
8
|
+
*
|
|
9
|
+
* @fileoverview Feature flag data mapper
|
|
10
|
+
* @version 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
import { BaseMapper } from '../../base/BaseMapper';
|
|
13
|
+
import type { FeatureFlag, FeatureFlagValue, FeatureFlagRule, FeatureFlagEvaluation, CreateFlagRequest, FetchFeatureFlagDataResponse, FeatureFlagStoreState, FeatureFlagResponseDTO, FeatureFlagRuleDTO, FeatureFlagEvaluationDTO, FetchAllFlagsResponseDTO } from '@plyaz/types/features';
|
|
14
|
+
export type { FeatureFlagResponseDTO, FeatureFlagRuleDTO, FeatureFlagEvaluationDTO, FetchAllFlagsResponseDTO, } from '@plyaz/types/features';
|
|
15
|
+
/**
|
|
16
|
+
* Feature Flag Mapper
|
|
17
|
+
*
|
|
18
|
+
* Transforms feature flag data between API, domain, and store representations.
|
|
19
|
+
*/
|
|
20
|
+
export declare class FeatureFlagMapper extends BaseMapper<FeatureFlag<string>, FeatureFlagResponseDTO, unknown, unknown, Partial<unknown>, unknown, Partial<FeatureFlagStoreState>> {
|
|
21
|
+
/**
|
|
22
|
+
* Transform API response DTO to domain entity
|
|
23
|
+
*/
|
|
24
|
+
toDomain(dto: FeatureFlagResponseDTO): FeatureFlag<string>;
|
|
25
|
+
/**
|
|
26
|
+
* Transform domain entity to API request DTO
|
|
27
|
+
*/
|
|
28
|
+
toCreateDTO(entity: Partial<FeatureFlag<string>>): CreateFlagRequest<string>;
|
|
29
|
+
/**
|
|
30
|
+
* Transform domain entity to patch request DTO
|
|
31
|
+
*/
|
|
32
|
+
toPatchDTO(entity: Partial<FeatureFlag<string>>): Partial<CreateFlagRequest<string>>;
|
|
33
|
+
/**
|
|
34
|
+
* Transform API rule DTO to domain rule
|
|
35
|
+
*/
|
|
36
|
+
toRuleDomain(dto: FeatureFlagRuleDTO): FeatureFlagRule<string>;
|
|
37
|
+
/**
|
|
38
|
+
* Transform API evaluation DTO to domain evaluation
|
|
39
|
+
*/
|
|
40
|
+
toEvaluationDomain(dto: FeatureFlagEvaluationDTO): FeatureFlagEvaluation<string>;
|
|
41
|
+
/**
|
|
42
|
+
* Transform API fetch response to domain response
|
|
43
|
+
*/
|
|
44
|
+
toFetchDataResponse(dto: FetchAllFlagsResponseDTO): FetchFeatureFlagDataResponse<string>;
|
|
45
|
+
/**
|
|
46
|
+
* Transform single domain flag to partial store state format
|
|
47
|
+
* Returns partial state that can be merged with existing store state
|
|
48
|
+
*/
|
|
49
|
+
toStoreState(flag: FeatureFlag<string>): Partial<FeatureFlagStoreState>;
|
|
50
|
+
/**
|
|
51
|
+
* Transform domain flags array to store state format
|
|
52
|
+
*/
|
|
53
|
+
toStoreStateList(flags: FeatureFlag<string>[]): Partial<FeatureFlagStoreState>;
|
|
54
|
+
/**
|
|
55
|
+
* Transform evaluation results to store flags format
|
|
56
|
+
*/
|
|
57
|
+
evaluationsToStoreFlags(evaluations: Record<string, FeatureFlagEvaluation<string>>): Record<string, FeatureFlagValue>;
|
|
58
|
+
/**
|
|
59
|
+
* Transform simple flags record to domain flags array
|
|
60
|
+
* (for providers that return simple key-value pairs)
|
|
61
|
+
*/
|
|
62
|
+
simpleFlagsToDomain(flags: Record<string, FeatureFlagValue>, environment?: string): FeatureFlag<string>[];
|
|
63
|
+
/**
|
|
64
|
+
* Infer flag type from value
|
|
65
|
+
*/
|
|
66
|
+
private inferType;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Singleton instance for convenience
|
|
70
|
+
*/
|
|
71
|
+
export declare const featureFlagMapper: FeatureFlagMapper;
|
|
72
|
+
//# sourceMappingURL=FeatureFlagMapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeatureFlagMapper.d.ts","sourceRoot":"","sources":["../../../../src/domain/featureFlags/mappers/FeatureFlagMapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,qBAAqB,EAGrB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,UAAU,CAC/C,WAAW,CAAC,MAAM,CAAC,EACnB,sBAAsB,EACtB,OAAO,EACP,OAAO,EACP,OAAO,CAAC,OAAO,CAAC,EAChB,OAAO,EACP,OAAO,CAAC,qBAAqB,CAAC,CAC/B;IACC;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,sBAAsB,GAAG,WAAW,CAAC,MAAM,CAAC;IAmB1D;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAY5E;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAapF;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC;IAkB9D;;OAEG;IACH,kBAAkB,CAAC,GAAG,EAAE,wBAAwB,GAAG,qBAAqB,CAAC,MAAM,CAAC;IAYhF;;OAEG;IACH,mBAAmB,CAAC,GAAG,EAAE,wBAAwB,GAAG,4BAA4B,CAAC,MAAM,CAAC;IAOxF;;;OAGG;IACM,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAahF;;OAEG;IACM,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAsBvF;;OAEG;IACH,uBAAuB,CACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,GACzD,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAUnC;;;OAGG;IACH,mBAAmB,CACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACvC,WAAW,GAAE,MAAqB,GACjC,WAAW,CAAC,MAAM,CAAC,EAAE;IAkBxB;;OAEG;IACH,OAAO,CAAC,SAAS;CAMlB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature Flag Mappers
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview Mapper exports for feature flags
|
|
5
|
+
* @version 1.0.0
|
|
6
|
+
*/
|
|
7
|
+
export { FeatureFlagMapper, featureFlagMapper, type FeatureFlagResponseDTO, type FeatureFlagRuleDTO, type FeatureFlagEvaluationDTO, type FetchAllFlagsResponseDTO, } from './FeatureFlagMapper';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/domain/featureFlags/mappers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,GAC9B,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature Flag Module - Shared Service Factory
|
|
3
|
+
*
|
|
4
|
+
* Provides the service factory used by the NestJS FeatureFlagModule.
|
|
5
|
+
* For NestJS usage, import from '@plyaz/core/backend/featureFlags'.
|
|
6
|
+
*/
|
|
7
|
+
import type { CoreFeatureFlagModuleConfig } from '@plyaz/types/core';
|
|
8
|
+
import type { FeatureFlagService } from './service';
|
|
9
|
+
import type { FeatureFlagKey } from '../types';
|
|
10
|
+
/**
|
|
11
|
+
* Injection token for NestJS DI
|
|
12
|
+
*/
|
|
13
|
+
export declare const FEATURE_FLAG_SERVICE = "FEATURE_FLAG_SERVICE";
|
|
14
|
+
/**
|
|
15
|
+
* Creates the FeatureFlagService
|
|
16
|
+
* Used by NestJS FeatureFlagModule internally
|
|
17
|
+
*/
|
|
18
|
+
export declare function createFeatureFlagService(config?: CoreFeatureFlagModuleConfig): Promise<FeatureFlagService<FeatureFlagKey>>;
|
|
19
|
+
export { FeatureFlagService } from './service';
|
|
20
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/domain/featureFlags/module.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAwG/C;;GAEG;AACH,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,GAAE,2BAA2C,GAClD,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAM7C;AAGD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @fileoverview Core feature flag provider implementation
|
|
8
8
|
* @version 1.0.0
|
|
9
9
|
*/
|
|
10
|
-
import type { FeatureFlagProvider as IFeatureFlagProvider, FeatureFlagConfig, FeatureFlagContext, FeatureFlagEvaluation, FeatureFlagValue, FetchFeatureFlagDataResponse } from '@plyaz/types';
|
|
10
|
+
import type { FeatureFlagProvider as IFeatureFlagProvider, FeatureFlagConfig, FeatureFlagContext, FeatureFlagEvaluation, FeatureFlagValue, FetchFeatureFlagDataResponse, FeatureFlag, FeatureFlagRule, CreateFlagRequest } from '@plyaz/types';
|
|
11
11
|
import { FeatureFlagEngine } from '@engine/featureFlags/engine';
|
|
12
12
|
import { CacheManager } from '@base/cache/index';
|
|
13
13
|
/**
|
|
@@ -134,6 +134,45 @@ export declare abstract class FeatureFlagProvider<FeatureFlagKey extends string>
|
|
|
134
134
|
* Disposes of the provider, cleaning up resources.
|
|
135
135
|
*/
|
|
136
136
|
dispose(): void;
|
|
137
|
+
/**
|
|
138
|
+
* Creates a new feature flag.
|
|
139
|
+
* Abstract - each provider implements based on its storage backend.
|
|
140
|
+
*
|
|
141
|
+
* @param data - Flag creation data
|
|
142
|
+
* @returns The created feature flag
|
|
143
|
+
*/
|
|
144
|
+
abstract createFlag(data: CreateFlagRequest<FeatureFlagKey>): Promise<FeatureFlag<FeatureFlagKey>>;
|
|
145
|
+
/**
|
|
146
|
+
* Updates an existing feature flag.
|
|
147
|
+
* Abstract - each provider implements based on its storage backend.
|
|
148
|
+
*
|
|
149
|
+
* @param key - Flag key to update
|
|
150
|
+
* @param data - Partial flag data to update
|
|
151
|
+
* @returns The updated feature flag
|
|
152
|
+
*/
|
|
153
|
+
abstract updateFlag(key: FeatureFlagKey, data: Partial<CreateFlagRequest<FeatureFlagKey>>): Promise<FeatureFlag<FeatureFlagKey>>;
|
|
154
|
+
/**
|
|
155
|
+
* Deletes a feature flag.
|
|
156
|
+
* Abstract - each provider implements based on its storage backend.
|
|
157
|
+
*
|
|
158
|
+
* @param key - Flag key to delete
|
|
159
|
+
*/
|
|
160
|
+
abstract deleteFlag(key: FeatureFlagKey): Promise<void>;
|
|
161
|
+
/**
|
|
162
|
+
* Gets all rules for a specific flag.
|
|
163
|
+
* Abstract - each provider implements based on its storage backend.
|
|
164
|
+
*
|
|
165
|
+
* @param key - Flag key to get rules for
|
|
166
|
+
* @returns Array of rules for the flag
|
|
167
|
+
*/
|
|
168
|
+
abstract getRules(key: FeatureFlagKey): Promise<FeatureFlagRule<FeatureFlagKey>[]>;
|
|
169
|
+
/**
|
|
170
|
+
* Gets all enabled rules across all flags.
|
|
171
|
+
* Abstract - each provider implements based on its storage backend.
|
|
172
|
+
*
|
|
173
|
+
* @returns Array of all enabled rules
|
|
174
|
+
*/
|
|
175
|
+
abstract getAllRules(): Promise<FeatureFlagRule<FeatureFlagKey>[]>;
|
|
137
176
|
/**
|
|
138
177
|
* Optional method to sync features at runtime.
|
|
139
178
|
* This is useful for providers that can update their features dynamically.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/domain/featureFlags/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,mBAAmB,IAAI,oBAAoB,EAC3C,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,4BAA4B,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/domain/featureFlags/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,47 +1,65 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* API Feature Flag Provider
|
|
2
|
+
* API Feature Flag Provider
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Provider adapter that uses @plyaz/api services with an injected API client
|
|
5
|
+
* to fetch feature flags from a remote API. This provider extends the base
|
|
6
|
+
* FeatureFlagProvider and implements fetchData() using the API services.
|
|
6
7
|
*
|
|
7
|
-
* @fileoverview API provider
|
|
8
|
-
* @version
|
|
8
|
+
* @fileoverview API provider adapter for feature flags
|
|
9
|
+
* @version 2.0.0
|
|
9
10
|
*/
|
|
10
|
-
import type { FeatureFlag, FeatureFlagRule,
|
|
11
|
+
import type { FeatureFlag, FeatureFlagRule, FeatureFlagValue, CreateFlagRequest } from '@plyaz/types';
|
|
11
12
|
import { FeatureFlagProvider } from '../provider';
|
|
13
|
+
import type { ServiceOptions } from '@plyaz/types/api';
|
|
14
|
+
import type { ApiFeatureFlagConfig as _ApiFeatureFlagConfig } from '@plyaz/types/features';
|
|
15
|
+
type ApiClientType = NonNullable<ServiceOptions['apiClient']>;
|
|
12
16
|
/**
|
|
13
|
-
* API-based feature flag provider
|
|
17
|
+
* API-based feature flag provider
|
|
18
|
+
*
|
|
19
|
+
* Uses @plyaz/api services with an injected API client to communicate with the backend.
|
|
20
|
+
* Pass your configured API client via the config.
|
|
14
21
|
*
|
|
15
22
|
* @class ApiFeatureFlagProvider
|
|
16
23
|
* @extends {FeatureFlagProvider}
|
|
17
24
|
*
|
|
18
25
|
* @example
|
|
19
26
|
* ```typescript
|
|
20
|
-
* //
|
|
27
|
+
* // Get client from ApiClientService
|
|
28
|
+
* const apiClient = ApiClientService.getClient();
|
|
29
|
+
*
|
|
21
30
|
* const provider = new ApiFeatureFlagProvider({
|
|
22
31
|
* provider: 'api',
|
|
23
|
-
*
|
|
24
|
-
* apiKey: process.env.FEATURE_FLAG_API_KEY,
|
|
32
|
+
* apiClient,
|
|
25
33
|
* isCacheEnabled: true,
|
|
26
34
|
* cacheTtl: 300,
|
|
27
|
-
* });
|
|
35
|
+
* }, FEATURES);
|
|
36
|
+
*
|
|
37
|
+
* await provider.initialize();
|
|
38
|
+
* const isEnabled = await provider.isEnabled('new-feature');
|
|
28
39
|
* ```
|
|
29
40
|
*/
|
|
30
41
|
export declare class ApiFeatureFlagProvider<FeatureFlagKey extends string> extends FeatureFlagProvider<FeatureFlagKey> {
|
|
42
|
+
protected readonly apiClient: ApiClientType;
|
|
31
43
|
/**
|
|
32
44
|
* Creates a new API feature flag provider.
|
|
33
45
|
*
|
|
34
|
-
* @param config - Provider configuration with API
|
|
35
|
-
* @
|
|
46
|
+
* @param config - Provider configuration with API client
|
|
47
|
+
* @param features - Record of feature flag keys to default values
|
|
48
|
+
*/
|
|
49
|
+
constructor(config: _ApiFeatureFlagConfig<FeatureFlagKey>, features: Record<FeatureFlagKey, FeatureFlagValue>);
|
|
50
|
+
/**
|
|
51
|
+
* Get service options with injected client
|
|
36
52
|
*/
|
|
37
|
-
|
|
53
|
+
private getServiceOptions;
|
|
54
|
+
/** Wrap error in CorePackageError if not already a package error */
|
|
55
|
+
private wrapError;
|
|
56
|
+
/** Transform API response to flags/rules */
|
|
57
|
+
private transformResponse;
|
|
38
58
|
/**
|
|
39
|
-
* Fetches flags and rules from the API endpoint.
|
|
40
|
-
* Currently throws an error as the API implementation is not ready.
|
|
59
|
+
* Fetches flags and rules from the API endpoint using @plyaz/api services.
|
|
41
60
|
*
|
|
42
61
|
* @protected
|
|
43
|
-
* @returns Promise
|
|
44
|
-
* @throws Error indicating missing API implementation
|
|
62
|
+
* @returns Promise resolving to flags and rules data
|
|
45
63
|
*/
|
|
46
64
|
protected fetchData(): Promise<{
|
|
47
65
|
flags: FeatureFlag<FeatureFlagKey>[];
|
|
@@ -51,28 +69,35 @@ export declare class ApiFeatureFlagProvider<FeatureFlagKey extends string> exten
|
|
|
51
69
|
* Validates the API provider configuration.
|
|
52
70
|
*
|
|
53
71
|
* @private
|
|
54
|
-
* @throws Error if configuration is invalid or incomplete
|
|
55
72
|
*/
|
|
56
73
|
private validateConfig;
|
|
57
|
-
/**
|
|
58
|
-
* Validates URL format.
|
|
59
|
-
*
|
|
60
|
-
* @private
|
|
61
|
-
* @param url - URL to validate
|
|
62
|
-
* @returns True if valid URL
|
|
63
|
-
*/
|
|
64
|
-
private isValidUrl;
|
|
65
74
|
/**
|
|
66
75
|
* Gets API provider status and configuration info.
|
|
67
|
-
*
|
|
68
|
-
* @returns API provider status information
|
|
69
76
|
*/
|
|
70
77
|
getApiInfo(): {
|
|
71
|
-
|
|
72
|
-
hasApiKey: boolean;
|
|
73
|
-
isImplemented: boolean;
|
|
74
|
-
requiredPackages: string[];
|
|
75
|
-
documentationPath: string;
|
|
78
|
+
hasApiClient: boolean;
|
|
76
79
|
};
|
|
80
|
+
/**
|
|
81
|
+
* Creates a new feature flag via API
|
|
82
|
+
*/
|
|
83
|
+
createFlag(data: CreateFlagRequest<FeatureFlagKey>): Promise<FeatureFlag<FeatureFlagKey>>;
|
|
84
|
+
/**
|
|
85
|
+
* Updates a feature flag via API
|
|
86
|
+
*/
|
|
87
|
+
updateFlag(key: FeatureFlagKey, data: Partial<CreateFlagRequest<FeatureFlagKey>>): Promise<FeatureFlag<FeatureFlagKey>>;
|
|
88
|
+
/**
|
|
89
|
+
* Deletes a feature flag via API
|
|
90
|
+
*/
|
|
91
|
+
deleteFlag(key: FeatureFlagKey): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Gets rules for a specific flag via API
|
|
94
|
+
*/
|
|
95
|
+
getRules(key: FeatureFlagKey): Promise<FeatureFlagRule<FeatureFlagKey>[]>;
|
|
96
|
+
/**
|
|
97
|
+
* Gets all rules via API
|
|
98
|
+
* Note: This requires fetching rules for all flags individually or a dedicated endpoint
|
|
99
|
+
*/
|
|
100
|
+
getAllRules(): Promise<FeatureFlagRule<FeatureFlagKey>[]>;
|
|
77
101
|
}
|
|
102
|
+
export {};
|
|
78
103
|
//# sourceMappingURL=api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/domain/featureFlags/providers/api.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/domain/featureFlags/providers/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAUlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,IAAI,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG3F,KAAK,aAAa,GAAG,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;AAU9D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,sBAAsB,CACjC,cAAc,SAAS,MAAM,CAC7B,SAAQ,mBAAmB,CAAC,cAAc,CAAC;IAC3C,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAE5C;;;;;OAKG;gBAED,MAAM,EAAE,qBAAqB,CAAC,cAAc,CAAC,EAC7C,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAepD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB,oEAAoE;IACpE,OAAO,CAAC,SAAS;IAajB,4CAA4C;IAC5C,OAAO,CAAC,iBAAiB;IAUzB;;;;;OAKG;cACa,SAAS,IAAI,OAAO,CAAC;QACnC,KAAK,EAAE,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,KAAK,EAAE,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;KAC1C,CAAC;IAsBF;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,UAAU,IAAI;QACZ,YAAY,EAAE,OAAO,CAAC;KACvB;IAUD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,iBAAiB,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAoB/F;;OAEG;IACG,UAAU,CACd,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,GAC/C,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAcvC;;OAEG;IACG,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAapD;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;IAa/E;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;CAKhE"}
|