@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
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example Controller
|
|
3
|
+
*
|
|
4
|
+
* Simple NestJS controller demonstrating Core + BackendExampleDomainService integration.
|
|
5
|
+
* Use as reference for building your own backend modules.
|
|
6
|
+
*
|
|
7
|
+
* Demonstrates:
|
|
8
|
+
* - Standard CRUD operations with error handling
|
|
9
|
+
* - Single error throwing (standard pattern)
|
|
10
|
+
* - Array error throwing (multiple validation errors)
|
|
11
|
+
* - Standard API response format using SuccessResponseStandard
|
|
12
|
+
* - How errors are automatically captured and returned as ErrorResponse
|
|
13
|
+
*/
|
|
14
|
+
import { BackendExampleDomainService } from '../../domain/example';
|
|
15
|
+
import type { ExampleEntity, CreateExampleDTO, PatchExampleDTO } from '@plyaz/types/examples';
|
|
16
|
+
import type { ReturnResponseType } from '@plyaz/types/errors';
|
|
17
|
+
export declare const BACKEND_EXAMPLE_DOMAIN_SERVICE = "BACKEND_EXAMPLE_DOMAIN_SERVICE";
|
|
18
|
+
/**
|
|
19
|
+
* Example Controller
|
|
20
|
+
*
|
|
21
|
+
* Routes:
|
|
22
|
+
* - GET /example/health - Health check
|
|
23
|
+
* - GET /example/entities/:id - Get entity by ID
|
|
24
|
+
* - POST /example/entities - Create entity
|
|
25
|
+
* - PATCH /example/entities/:id - Update entity
|
|
26
|
+
* - DELETE /example/entities/:id - Delete entity
|
|
27
|
+
* - POST /example/entities/validated - Create with full validation (array errors example)
|
|
28
|
+
* - GET /example/errors/single - Demo: Single error response
|
|
29
|
+
* - GET /example/errors/array - Demo: Array of errors response
|
|
30
|
+
*/
|
|
31
|
+
export declare class ExampleController {
|
|
32
|
+
private readonly exampleService;
|
|
33
|
+
constructor(exampleService: BackendExampleDomainService);
|
|
34
|
+
/**
|
|
35
|
+
* Health check endpoint
|
|
36
|
+
* GET /example/health
|
|
37
|
+
*/
|
|
38
|
+
health(): ReturnResponseType<{
|
|
39
|
+
service: boolean;
|
|
40
|
+
timestamp: string;
|
|
41
|
+
}>;
|
|
42
|
+
/**
|
|
43
|
+
* Get entity by ID
|
|
44
|
+
* GET /example/entities/:id
|
|
45
|
+
*/
|
|
46
|
+
getEntity(id: string): Promise<ReturnResponseType<ExampleEntity | null>>;
|
|
47
|
+
/**
|
|
48
|
+
* Create a new entity
|
|
49
|
+
* POST /example/entities
|
|
50
|
+
*
|
|
51
|
+
* Example success response:
|
|
52
|
+
* ```json
|
|
53
|
+
* {
|
|
54
|
+
* "success": true,
|
|
55
|
+
* "message": "Entity created successfully",
|
|
56
|
+
* "data": { ... },
|
|
57
|
+
* "codeStatus": 201
|
|
58
|
+
* }
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
createEntity(dto: CreateExampleDTO): Promise<ReturnResponseType<ExampleEntity>>;
|
|
62
|
+
/**
|
|
63
|
+
* Update an entity (partial)
|
|
64
|
+
* PATCH /example/entities/:id
|
|
65
|
+
*/
|
|
66
|
+
updateEntity(id: string, dto: PatchExampleDTO): Promise<ReturnResponseType<ExampleEntity>>;
|
|
67
|
+
/**
|
|
68
|
+
* Delete an entity
|
|
69
|
+
* DELETE /example/entities/:id
|
|
70
|
+
*/
|
|
71
|
+
deleteEntity(id: string): Promise<ReturnResponseType<null>>;
|
|
72
|
+
/**
|
|
73
|
+
* Create entity with full validation (array errors pattern)
|
|
74
|
+
* POST /example/entities/validated
|
|
75
|
+
*
|
|
76
|
+
* Demonstrates validator throwing validation errors.
|
|
77
|
+
* The validator.validateCreateOrThrow() will automatically throw all validation errors as an array.
|
|
78
|
+
*
|
|
79
|
+
* Example success response:
|
|
80
|
+
* ```json
|
|
81
|
+
* {
|
|
82
|
+
* "success": true,
|
|
83
|
+
* "message": "Entity created successfully",
|
|
84
|
+
* "data": { ... },
|
|
85
|
+
* "codeStatus": 201
|
|
86
|
+
* }
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
createEntityWithValidation(dto: unknown): Promise<ReturnResponseType<ExampleEntity>>;
|
|
90
|
+
/**
|
|
91
|
+
* Demo: Single validation error response
|
|
92
|
+
* GET /example/errors/single
|
|
93
|
+
*
|
|
94
|
+
* Demonstrates validator throwing a SINGLE validation error.
|
|
95
|
+
* Service uses validateCreateOrThrow() with ONE invalid field.
|
|
96
|
+
*
|
|
97
|
+
* Response: HTTP 400
|
|
98
|
+
* ```json
|
|
99
|
+
* [{ "code": "VALIDATION_FAILED", "message": "Name is required", "field": "name" }]
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
demoSingleError(): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Demo: Multiple validation errors response
|
|
105
|
+
* GET /example/errors/array
|
|
106
|
+
*
|
|
107
|
+
* Demonstrates validator throwing MULTIPLE validation errors.
|
|
108
|
+
* Service uses validateCreateOrThrow() with MULTIPLE invalid fields.
|
|
109
|
+
*
|
|
110
|
+
* Response: HTTP 400
|
|
111
|
+
* ```json
|
|
112
|
+
* [
|
|
113
|
+
* { "code": "VALIDATION_FAILED", "message": "Name is required", "field": "name" },
|
|
114
|
+
* { "code": "VALIDATION_FAILED", "message": "Amount must be non-negative", "field": "amount" },
|
|
115
|
+
* { "code": "VALIDATION_FAILED", "message": "Description is required", "field": "description" }
|
|
116
|
+
* ]
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
demoArrayErrors(): Promise<void>;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=example.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example.controller.d.ts","sourceRoot":"","sources":["../../../src/backend/example/example.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAcH,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAI9D,eAAO,MAAM,8BAA8B,mCAAmC,CAAC;AAE/E;;;;;;;;;;;;GAYG;AACH,qBACa,iBAAiB;IAG1B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,2BAA2B;IAG9D;;;OAGG;IAEH,MAAM,IAAI,kBAAkB,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAOrE;;;OAGG;IAEG,SAAS,CAAc,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAK3F;;;;;;;;;;;;;OAaG;IAGG,YAAY,CAAS,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAK7F;;;OAGG;IAEG,YAAY,CACH,EAAE,EAAE,MAAM,EACf,GAAG,EAAE,eAAe,GAC3B,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAK7C;;;OAGG;IAGG,YAAY,CAAc,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAK9E;;;;;;;;;;;;;;;;OAgBG;IAGG,0BAA0B,CACtB,GAAG,EAAE,OAAO,GACnB,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAW7C;;;;;;;;;;;OAWG;IAEG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC;;;;;;;;;;;;;;;OAeG;IAEG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAIvC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example Module
|
|
3
|
+
*
|
|
4
|
+
* NestJS module demonstrating the proper pattern using domain service directly:
|
|
5
|
+
* Module → Controller → BackendExampleService
|
|
6
|
+
*
|
|
7
|
+
* The BackendExampleService is auto-initialized by Core.initialize() and
|
|
8
|
+
* can be injected via ServiceRegistry or provided directly to controllers.
|
|
9
|
+
*
|
|
10
|
+
* @example Usage in app.module.ts
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { CoreModule } from '@plyaz/core/nestjs';
|
|
13
|
+
* import { ExampleModule } from '@plyaz/core';
|
|
14
|
+
*
|
|
15
|
+
* @Module({
|
|
16
|
+
* imports: [
|
|
17
|
+
* CoreModule.forRoot({ envPath: '.env' }),
|
|
18
|
+
* ExampleModule,
|
|
19
|
+
* ],
|
|
20
|
+
* })
|
|
21
|
+
* export class AppModule {}
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import { BACKEND_EXAMPLE_DOMAIN_SERVICE } from './example.controller';
|
|
25
|
+
import { BackendExampleDomainService } from '../../domain/example';
|
|
26
|
+
export declare class ExampleModule {
|
|
27
|
+
}
|
|
28
|
+
export { BackendExampleDomainService, BACKEND_EXAMPLE_DOMAIN_SERVICE };
|
|
29
|
+
//# sourceMappingURL=example.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example.module.d.ts","sourceRoot":"","sources":["../../../src/backend/example/example.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAqB,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,2BAA2B,EAA+B,MAAM,sBAAsB,CAAC;AAEhG,qBAYa,aAAa;CAAG;AAG7B,OAAO,EAAE,2BAA2B,EAAE,8BAA8B,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example Module Exports
|
|
3
|
+
*
|
|
4
|
+
* Pattern: Module → Controller → BackendExampleDomainService (from domain)
|
|
5
|
+
*/
|
|
6
|
+
export { ExampleModule, BACKEND_EXAMPLE_DOMAIN_SERVICE, BackendExampleDomainService, } from './example.module';
|
|
7
|
+
export { ExampleController } from './example.controller';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backend/example/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,aAAa,EACb,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feature Flag Domain Service (Backend)
|
|
3
|
+
*
|
|
4
|
+
* Backend-specific domain service that extends BaseDomainService and
|
|
5
|
+
* uses providers (database, redis, memory, etc.) to manage feature flags.
|
|
6
|
+
*
|
|
7
|
+
* Runtime: Backend only (uses providers, no API calls)
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // Create service instance with a provider
|
|
12
|
+
* const provider = new DatabaseFeatureFlagProvider(config, FEATURES);
|
|
13
|
+
* await provider.initialize();
|
|
14
|
+
*
|
|
15
|
+
* const flagService = new FeatureFlagDomainService({
|
|
16
|
+
* enabled: true,
|
|
17
|
+
* provider,
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Use the service
|
|
21
|
+
* const isEnabled = await flagService.isEnabled('new-feature', { userId: 'user-123' });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import type { FeatureFlag, FeatureFlagRule, FeatureFlagContext, FeatureFlagValue, FeatureFlagEvaluation, CreateFlagRequest } from '@plyaz/types';
|
|
25
|
+
import { BaseDomainService } from '../../domain/base';
|
|
26
|
+
import type { FeatureFlagDomainServiceConfig as _FeatureFlagDomainServiceConfig, FeatureFlagDomainEventType } from '@plyaz/types/features';
|
|
27
|
+
/**
|
|
28
|
+
* Feature Flag Backend Service
|
|
29
|
+
*
|
|
30
|
+
* Extends BaseDomainService with generics for strong typing.
|
|
31
|
+
* Uses an injected provider (database, redis, memory, etc.) for data access.
|
|
32
|
+
*
|
|
33
|
+
* No mapper/validator as this service handles simple flag values.
|
|
34
|
+
* No API client - uses provider directly for data access.
|
|
35
|
+
*/
|
|
36
|
+
export declare class FeatureFlagDomainService extends BaseDomainService<_FeatureFlagDomainServiceConfig> {
|
|
37
|
+
/** The feature flag provider */
|
|
38
|
+
private readonly provider;
|
|
39
|
+
constructor(config: _FeatureFlagDomainServiceConfig);
|
|
40
|
+
/**
|
|
41
|
+
* Check if service is available
|
|
42
|
+
*/
|
|
43
|
+
isAvailable(): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Dispose/cleanup the service
|
|
46
|
+
*/
|
|
47
|
+
dispose(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Refresh the provider cache
|
|
50
|
+
*/
|
|
51
|
+
refresh(): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Evaluate a single feature flag
|
|
54
|
+
*
|
|
55
|
+
* @param key - Feature flag key
|
|
56
|
+
* @param context - Evaluation context (user, environment, etc.)
|
|
57
|
+
* @returns Full evaluation result
|
|
58
|
+
*/
|
|
59
|
+
evaluate(key: string, context?: FeatureFlagContext): Promise<FeatureFlagEvaluation<string>>;
|
|
60
|
+
/**
|
|
61
|
+
* Check if a feature flag is enabled
|
|
62
|
+
*
|
|
63
|
+
* @param key - Feature flag key
|
|
64
|
+
* @param context - Evaluation context
|
|
65
|
+
* @returns Boolean indicating if flag is enabled
|
|
66
|
+
*/
|
|
67
|
+
isEnabled(key: string, context?: FeatureFlagContext): Promise<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* Get the value of a feature flag
|
|
70
|
+
*
|
|
71
|
+
* @param key - Feature flag key
|
|
72
|
+
* @param context - Evaluation context
|
|
73
|
+
* @returns The flag value
|
|
74
|
+
*/
|
|
75
|
+
getValue<T = FeatureFlagValue>(key: string, context?: FeatureFlagContext): Promise<T>;
|
|
76
|
+
/**
|
|
77
|
+
* Evaluate all feature flags for a context
|
|
78
|
+
*
|
|
79
|
+
* @param context - Evaluation context
|
|
80
|
+
* @returns Record of all flag evaluations
|
|
81
|
+
*/
|
|
82
|
+
evaluateAll(context?: FeatureFlagContext): Promise<Record<string, FeatureFlagEvaluation<string>>>;
|
|
83
|
+
/**
|
|
84
|
+
* Create a new feature flag
|
|
85
|
+
*
|
|
86
|
+
* @param data - Flag creation data
|
|
87
|
+
* @returns The created feature flag
|
|
88
|
+
*/
|
|
89
|
+
create(data: CreateFlagRequest<string>): Promise<FeatureFlag<string>>;
|
|
90
|
+
/**
|
|
91
|
+
* Update an existing feature flag
|
|
92
|
+
*
|
|
93
|
+
* @param key - Flag key to update
|
|
94
|
+
* @param data - Partial update data
|
|
95
|
+
* @returns The updated feature flag
|
|
96
|
+
*/
|
|
97
|
+
update(key: string, data: Partial<CreateFlagRequest<string>>): Promise<FeatureFlag<string>>;
|
|
98
|
+
/**
|
|
99
|
+
* Delete a feature flag
|
|
100
|
+
*
|
|
101
|
+
* @param key - Flag key to delete
|
|
102
|
+
*/
|
|
103
|
+
delete(key: string): Promise<void>;
|
|
104
|
+
/**
|
|
105
|
+
* Get rules for a specific flag
|
|
106
|
+
*
|
|
107
|
+
* @param key - Flag key
|
|
108
|
+
* @returns Array of rules
|
|
109
|
+
*/
|
|
110
|
+
getRules(key: string): Promise<FeatureFlagRule<string>[]>;
|
|
111
|
+
/**
|
|
112
|
+
* Get all rules
|
|
113
|
+
*
|
|
114
|
+
* @returns Array of all rules
|
|
115
|
+
*/
|
|
116
|
+
getAllRules(): Promise<FeatureFlagRule<string>[]>;
|
|
117
|
+
/**
|
|
118
|
+
* Set a runtime override for a flag (in-memory, not persisted)
|
|
119
|
+
*
|
|
120
|
+
* @param key - Flag key
|
|
121
|
+
* @param value - Override value
|
|
122
|
+
*/
|
|
123
|
+
setOverride(key: string, value: FeatureFlagValue): void;
|
|
124
|
+
/**
|
|
125
|
+
* Remove a runtime override for a flag
|
|
126
|
+
*
|
|
127
|
+
* @param key - Flag key
|
|
128
|
+
*/
|
|
129
|
+
removeOverride(key: string): void;
|
|
130
|
+
/**
|
|
131
|
+
* Clear all runtime overrides
|
|
132
|
+
*/
|
|
133
|
+
clearOverrides(): void;
|
|
134
|
+
/**
|
|
135
|
+
* Subscribe to provider changes
|
|
136
|
+
*
|
|
137
|
+
* @param callback - Callback when flags change
|
|
138
|
+
* @returns Unsubscribe function
|
|
139
|
+
*/
|
|
140
|
+
subscribe(callback: () => void): () => void;
|
|
141
|
+
/**
|
|
142
|
+
* Subscribe to feature flag events
|
|
143
|
+
*
|
|
144
|
+
* @param event - Event type to subscribe to
|
|
145
|
+
* @param handler - Event handler
|
|
146
|
+
* @returns Unsubscribe function
|
|
147
|
+
*/
|
|
148
|
+
on(event: FeatureFlagDomainEventType, handler: (data: unknown) => void): () => void;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=FeatureFlagDomainService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeatureFlagDomainService.d.ts","sourceRoot":"","sources":["../../../src/backend/featureFlags/FeatureFlagDomainService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EAElB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAQtD,OAAO,KAAK,EACV,8BAA8B,IAAI,+BAA+B,EACjE,0BAA0B,EAC3B,MAAM,uBAAuB,CAAC;AAM/B;;;;;;;;GAQG;AACH,qBAAa,wBAAyB,SAAQ,iBAAiB,CAAC,+BAA+B,CAAC;IAC9F,gCAAgC;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;gBAM3C,MAAM,EAAE,+BAA+B;IA4BnD;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,OAAO,IAAI,IAAI;IAYf;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B;;;;;;OAMG;IACG,QAAQ,CACZ,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAgBzC;;;;;;OAMG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAM5E;;;;;;OAMG;IACG,QAAQ,CAAC,CAAC,GAAG,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAM3F;;;;;OAKG;IACG,WAAW,CACf,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IAiBzD;;;;;OAKG;IACG,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAgB3E;;;;;;OAMG;IACG,MAAM,CACV,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GACvC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAgB/B;;;;OAIG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxC;;;;;OAKG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;IAY/D;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;IAgBvD;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IASvD;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IASjC;;OAEG;IACH,cAAc,IAAI,IAAI;IAUtB;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAS3C;;;;;;OAMG;IACH,EAAE,CAAC,KAAK,EAAE,0BAA0B,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;CAGpF"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* Imports configuration from .env.local and provides validation.
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
|
-
import { type
|
|
8
|
+
import { type CoreFeatureFlagEnvironmentConfig } from '@plyaz/types/core';
|
|
9
|
+
import type { FeatureFlagConfigOptions as _FeatureFlagConfigOptions } from '@plyaz/types/features';
|
|
9
10
|
/**
|
|
10
11
|
* Feature flag configuration factory
|
|
11
12
|
*
|
|
@@ -15,7 +16,7 @@ import { type FeatureFlagEnvironmentConfig } from '@plyaz/types';
|
|
|
15
16
|
* @example
|
|
16
17
|
* ```typescript
|
|
17
18
|
* // Step 1: Called automatically by FeatureFlagService.onModuleInit()
|
|
18
|
-
* const config = FeatureFlagConfigFactory.
|
|
19
|
+
* const config = FeatureFlagConfigFactory.fromOptions({ environment: Core.env.NODE_ENV });
|
|
19
20
|
*
|
|
20
21
|
* // Step 2: Configuration is validated
|
|
21
22
|
* // Step 3: Provider is created with this config
|
|
@@ -48,64 +49,41 @@ export declare class FeatureFlagConfigFactory {
|
|
|
48
49
|
* 7. → Database connection established
|
|
49
50
|
*
|
|
50
51
|
* @returns Validated configuration object ready for provider creation
|
|
51
|
-
* @throws {FeatureFlagConfigError} If
|
|
52
|
-
*
|
|
53
|
-
* @example
|
|
54
|
-
* ```typescript
|
|
55
|
-
* // This method reads from process.env and creates:
|
|
56
|
-
* {
|
|
57
|
-
* provider: 'database',
|
|
58
|
-
* isCacheEnabled: true,
|
|
59
|
-
* cacheTtl: 300,
|
|
60
|
-
* databaseConfig: {
|
|
61
|
-
* connectionString: 'https://your-project.supabase.co',
|
|
62
|
-
* tableName: 'feature_flags',
|
|
63
|
-
* poolSize: 10,
|
|
64
|
-
* timeout: 30000
|
|
65
|
-
* }
|
|
66
|
-
* }
|
|
67
|
-
* ```
|
|
52
|
+
* @throws {FeatureFlagConfigError} If required options are missing or invalid
|
|
68
53
|
*/
|
|
69
|
-
static fromEnvironment(): FeatureFlagEnvironmentConfig;
|
|
70
54
|
/**
|
|
71
|
-
*
|
|
55
|
+
* Creates configuration from explicit options
|
|
72
56
|
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*/
|
|
76
|
-
private static getProvider;
|
|
77
|
-
private static getCacheEnabled;
|
|
78
|
-
private static getCacheTtl;
|
|
79
|
-
private static getRefreshInterval;
|
|
80
|
-
private static getLoggingEnabled;
|
|
81
|
-
/**
|
|
82
|
-
* Creates database configuration from environment variables
|
|
57
|
+
* All options have sensible defaults - only provide what you need to override.
|
|
58
|
+
* Environment is automatically read from Core.env.NODE_ENV.
|
|
83
59
|
*
|
|
84
|
-
*
|
|
60
|
+
* Note: For 'database' provider, DbService must be initialized first via Core.initialize().
|
|
61
|
+
* The database provider uses the already-configured DbService, no connection string needed here.
|
|
85
62
|
*
|
|
86
|
-
* @
|
|
87
|
-
*
|
|
88
|
-
*
|
|
63
|
+
* @example Basic usage with defaults (memory provider)
|
|
64
|
+
* ```typescript
|
|
65
|
+
* const config = FeatureFlagConfigFactory.fromOptions();
|
|
66
|
+
* // Uses memory provider, cache enabled, default TTL
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* @example Database provider (requires Core.initialize() first)
|
|
70
|
+
* ```typescript
|
|
71
|
+
* // First: Core.initialize() with db config
|
|
72
|
+
* await Core.initialize({ db: { adapter: 'sql', sql: { connectionString: '...' } } });
|
|
89
73
|
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* SUPABASE_URL=https://your-project.supabase.co # REQUIRED
|
|
93
|
-
* SUPABASE_ANON_PUBLIC_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... # Used in connection
|
|
94
|
-
* FEATURE_FLAG_TABLE_NAME=feature_flags # Optional, defaults to 'feature_flags'
|
|
95
|
-
* DB_POOL_SIZE=10 # Optional, defaults to 10
|
|
96
|
-
* DB_TIMEOUT=30000 # Optional, defaults to 30000ms
|
|
74
|
+
* // Then: Use database provider for feature flags
|
|
75
|
+
* const config = FeatureFlagConfigFactory.fromOptions({ provider: 'database' });
|
|
97
76
|
* ```
|
|
98
77
|
*
|
|
99
|
-
* @example
|
|
78
|
+
* @example Custom cache settings
|
|
100
79
|
* ```typescript
|
|
101
|
-
* {
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* }
|
|
80
|
+
* const config = FeatureFlagConfigFactory.fromOptions({
|
|
81
|
+
* cacheEnabled: true,
|
|
82
|
+
* cacheTtl: 600, // 10 minutes
|
|
83
|
+
* refreshInterval: 30,
|
|
84
|
+
* });
|
|
107
85
|
* ```
|
|
108
86
|
*/
|
|
109
|
-
|
|
87
|
+
static fromOptions(options?: _FeatureFlagConfigOptions): CoreFeatureFlagEnvironmentConfig;
|
|
110
88
|
}
|
|
111
89
|
//# sourceMappingURL=feature-flag.config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flag.config.d.ts","sourceRoot":"","sources":["../../../../src/backend/featureFlags/config/feature-flag.config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"feature-flag.config.d.ts","sourceRoot":"","sources":["../../../../src/backend/featureFlags/config/feature-flag.config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAIL,KAAK,gCAAgC,EACtC,MAAM,mBAAmB,CAAC;AAI3B,OAAO,KAAK,EAAE,wBAAwB,IAAI,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAEnG;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,wBAAwB;IACnC;;;;;;;;;;;;;;;;OAgBG;IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IAEH,MAAM,CAAC,WAAW,CAAC,OAAO,GAAE,yBAA8B,GAAG,gCAAgC;CA+B9F"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Provides error reporting and environment-specific validation.
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
|
-
import { type
|
|
8
|
+
import { type CoreFeatureFlagEnvironmentConfig, type CoreFeatureFlagValidationResult } from '@plyaz/types/core';
|
|
9
9
|
/**
|
|
10
10
|
* FeatureFlagConfigValidator - Comprehensive configuration validation for feature flags
|
|
11
11
|
*
|
|
@@ -121,7 +121,7 @@ export declare class FeatureFlagConfigValidator {
|
|
|
121
121
|
* // ]
|
|
122
122
|
* ```
|
|
123
123
|
*/
|
|
124
|
-
static validate(config:
|
|
124
|
+
static validate(config: CoreFeatureFlagEnvironmentConfig): CoreFeatureFlagValidationResult;
|
|
125
125
|
private static validateProvider;
|
|
126
126
|
private static validateCacheSettings;
|
|
127
127
|
private static validateDatabaseConfig;
|
|
@@ -138,13 +138,13 @@ export declare class FeatureFlagConfigValidator {
|
|
|
138
138
|
* to ensure the system doesn't start with invalid configuration.
|
|
139
139
|
*
|
|
140
140
|
* @param {FeatureFlagEnvironmentConfig} config - Configuration to validate
|
|
141
|
-
* @throws {
|
|
141
|
+
* @throws {DatabasePackageError} When validation fails with detailed error messages
|
|
142
142
|
*
|
|
143
143
|
* @example Startup Validation
|
|
144
144
|
* ```typescript
|
|
145
145
|
* // In FeatureFlagService.onModuleInit()
|
|
146
146
|
* try {
|
|
147
|
-
* const config = FeatureFlagConfigFactory.
|
|
147
|
+
* const config = FeatureFlagConfigFactory.fromOptions();
|
|
148
148
|
* FeatureFlagConfigValidator.validateOrThrow(config);
|
|
149
149
|
*
|
|
150
150
|
* // Configuration is valid, proceed with initialization
|
|
@@ -158,7 +158,7 @@ export declare class FeatureFlagConfigValidator {
|
|
|
158
158
|
*
|
|
159
159
|
* @example Error Output
|
|
160
160
|
* ```typescript
|
|
161
|
-
* // When validation fails, throws
|
|
161
|
+
* // When validation fails, throws DatabasePackageError with message:
|
|
162
162
|
* // "Configuration validation failed:
|
|
163
163
|
* // provider: Invalid provider: invalid_type. Must be one of: memory, file, redis, api, database
|
|
164
164
|
* // cacheTtl: Cache TTL must be non-negative
|
|
@@ -176,6 +176,6 @@ export declare class FeatureFlagConfigValidator {
|
|
|
176
176
|
* # databaseConfig.connectionString: Database connection string is required"
|
|
177
177
|
* ```
|
|
178
178
|
*/
|
|
179
|
-
static validateOrThrow(config:
|
|
179
|
+
static validateOrThrow(config: CoreFeatureFlagEnvironmentConfig): void;
|
|
180
180
|
}
|
|
181
181
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/backend/featureFlags/config/validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/backend/featureFlags/config/validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACrC,MAAM,mBAAmB,CAAC;AAY3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,qBAAa,0BAA0B;IACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+DG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,gCAAgC,GAAG,+BAA+B;IAiC1F,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAkBpC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAiBrC,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAoBvC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAUhC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAa/B,OAAO,CAAC,MAAM,CAAC,eAAe;IAU9B,OAAO,CAAC,MAAM,CAAC,WAAW;IAqC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6CG;IACH,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,gCAAgC,GAAG,IAAI;CAYvE"}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* Feature Flag Controller
|
|
3
3
|
*
|
|
4
4
|
* NestJS controller for feature flag management.
|
|
5
|
-
*
|
|
5
|
+
* Uses the domain FeatureFlagService directly.
|
|
6
6
|
*
|
|
7
7
|
* @fileoverview NestJS controller for feature flags
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
9
|
+
import type { FeatureFlagValue, FeatureFlagContext, FeatureFlagEvaluation, FeatureFlag, FeatureFlagRule, CreateFlagRequest } from '@plyaz/types';
|
|
10
|
+
import { FeatureFlagService } from '@domain/featureFlags';
|
|
11
11
|
import type { FeatureFlagKey } from '@domain/types';
|
|
12
12
|
/**
|
|
13
13
|
* Request DTO for flag evaluation.
|
|
@@ -15,21 +15,11 @@ import type { FeatureFlagKey } from '@domain/types';
|
|
|
15
15
|
interface EvaluateFlagRequest {
|
|
16
16
|
context?: FeatureFlagContext;
|
|
17
17
|
}
|
|
18
|
-
/**
|
|
19
|
-
* Request DTO for creating/updating flags.
|
|
20
|
-
*/
|
|
21
|
-
interface CreateFlagRequest {
|
|
22
|
-
name: string;
|
|
23
|
-
description?: string;
|
|
24
|
-
value: FeatureFlagValue;
|
|
25
|
-
isEnabled?: boolean;
|
|
26
|
-
environment?: 'all' | 'development' | 'staging' | 'production';
|
|
27
|
-
rolloutPercentage?: number;
|
|
28
|
-
}
|
|
29
18
|
/**
|
|
30
19
|
* Feature Flag Controller
|
|
31
20
|
*
|
|
32
21
|
* Provides REST endpoints for feature flag management and evaluation.
|
|
22
|
+
* Uses the domain FeatureFlagService directly.
|
|
33
23
|
*
|
|
34
24
|
* @example
|
|
35
25
|
* ```typescript
|
|
@@ -40,87 +30,49 @@ interface CreateFlagRequest {
|
|
|
40
30
|
*/
|
|
41
31
|
export declare class FeatureFlagController {
|
|
42
32
|
private readonly featureFlagService;
|
|
43
|
-
constructor(featureFlagService: FeatureFlagService);
|
|
33
|
+
constructor(featureFlagService: FeatureFlagService<FeatureFlagKey>);
|
|
44
34
|
/**
|
|
45
35
|
* Evaluates a feature flag for the given context.
|
|
46
|
-
*
|
|
47
|
-
* @param key - Feature flag key
|
|
48
|
-
* @param body - Evaluation context
|
|
49
|
-
* @returns Feature flag evaluation result
|
|
50
36
|
*/
|
|
51
37
|
evaluateFlag(key: FeatureFlagKey, body?: EvaluateFlagRequest): Promise<FeatureFlagEvaluation<FeatureFlagKey>>;
|
|
52
38
|
/**
|
|
53
39
|
* Checks if a feature flag is enabled.
|
|
54
|
-
*
|
|
55
|
-
* @param key - Feature flag key
|
|
56
|
-
* @param body - Evaluation context
|
|
57
|
-
* @returns Boolean indicating if flag is enabled
|
|
58
40
|
*/
|
|
59
41
|
isEnabled(key: FeatureFlagKey, body?: EvaluateFlagRequest): Promise<{
|
|
60
42
|
isEnabled: boolean;
|
|
61
43
|
}>;
|
|
62
44
|
/**
|
|
63
45
|
* Gets all feature flags with their evaluations.
|
|
64
|
-
*
|
|
65
|
-
* @param body - Evaluation context
|
|
66
|
-
* @returns All feature flag evaluations
|
|
67
46
|
*/
|
|
68
47
|
evaluateAllFlags(body?: EvaluateFlagRequest): Promise<Record<string, FeatureFlagEvaluation<FeatureFlagKey>>>;
|
|
69
48
|
/**
|
|
70
49
|
* Creates a new feature flag.
|
|
71
|
-
*
|
|
72
|
-
* @param key - Feature flag key
|
|
73
|
-
* @param createData - Flag creation data
|
|
74
|
-
* @returns Created feature flag
|
|
75
50
|
*/
|
|
76
|
-
createFlag(createData: CreateFlagRequest
|
|
77
|
-
key: FeatureFlagKey;
|
|
78
|
-
}): Promise<FeatureFlag<FeatureFlagKey>>;
|
|
51
|
+
createFlag(createData: CreateFlagRequest<FeatureFlagKey>): Promise<FeatureFlag<FeatureFlagKey>>;
|
|
79
52
|
/**
|
|
80
53
|
* Updates an existing feature flag.
|
|
81
|
-
*
|
|
82
|
-
* @param key - Feature flag key
|
|
83
|
-
* @param updateData - Flag update data
|
|
84
|
-
* @returns Updated feature flag
|
|
85
54
|
*/
|
|
86
|
-
updateFlag(key: FeatureFlagKey, updateData: Partial<CreateFlagRequest
|
|
55
|
+
updateFlag(key: FeatureFlagKey, updateData: Partial<CreateFlagRequest<FeatureFlagKey>>): Promise<FeatureFlag<FeatureFlagKey>>;
|
|
87
56
|
/**
|
|
88
57
|
* Deletes a feature flag.
|
|
89
|
-
*
|
|
90
|
-
* @param key - Feature flag key
|
|
91
58
|
*/
|
|
92
59
|
deleteFlag(key: FeatureFlagKey): Promise<{
|
|
93
60
|
isSuccessful: boolean;
|
|
94
61
|
}>;
|
|
95
62
|
/**
|
|
96
63
|
* Sets a manual override for a flag.
|
|
97
|
-
*
|
|
98
|
-
* @param key - Feature flag key
|
|
99
|
-
* @param value - Override value
|
|
100
64
|
*/
|
|
101
65
|
setOverride(key: FeatureFlagKey, value: FeatureFlagValue): Promise<{
|
|
102
66
|
isSuccessful: boolean;
|
|
103
67
|
}>;
|
|
104
68
|
/**
|
|
105
69
|
* Removes a manual override for a flag.
|
|
106
|
-
*
|
|
107
|
-
* @param key - Feature flag key
|
|
108
70
|
*/
|
|
109
71
|
removeOverride(key: FeatureFlagKey): Promise<{
|
|
110
72
|
isSuccessful: boolean;
|
|
111
73
|
}>;
|
|
112
|
-
/**
|
|
113
|
-
* Gets all available feature flags.
|
|
114
|
-
*
|
|
115
|
-
* @param environment - Filter by environment
|
|
116
|
-
* @returns List of feature flags
|
|
117
|
-
*/
|
|
118
|
-
getAllFeatureFlags(environment?: string): Promise<FeatureFlag<FeatureFlagKey>[]>;
|
|
119
74
|
/**
|
|
120
75
|
* Gets all rules for a specific flag.
|
|
121
|
-
*
|
|
122
|
-
* @param key - Feature flag key
|
|
123
|
-
* @returns List of rules for the flag
|
|
124
76
|
*/
|
|
125
77
|
getFlagRules(key: FeatureFlagKey): Promise<FeatureFlagRule<FeatureFlagKey>[]>;
|
|
126
78
|
/**
|
|
@@ -129,6 +81,13 @@ export declare class FeatureFlagController {
|
|
|
129
81
|
refreshCache(): Promise<{
|
|
130
82
|
isSuccessful: boolean;
|
|
131
83
|
}>;
|
|
84
|
+
/**
|
|
85
|
+
* Gets service health status.
|
|
86
|
+
*/
|
|
87
|
+
getHealth(): Promise<{
|
|
88
|
+
isInitialized: boolean;
|
|
89
|
+
provider: string;
|
|
90
|
+
}>;
|
|
132
91
|
}
|
|
133
92
|
export {};
|
|
134
93
|
//# sourceMappingURL=feature-flag.controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flag.controller.d.ts","sourceRoot":"","sources":["../../../src/backend/featureFlags/feature-flag.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"feature-flag.controller.d.ts","sourceRoot":"","sources":["../../../src/backend/featureFlags/feature-flag.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAwB,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;GAEG;AACH,UAAU,mBAAmB;IAC3B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,qBACa,qBAAqB;IAG9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,kBAAkB,CAAC,cAAc,CAAC;IAGzE;;OAEG;IAEG,YAAY,CACF,GAAG,EAAE,cAAc,EACzB,IAAI,GAAE,mBAAwB,GACrC,OAAO,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;IAYjD;;OAEG;IAEG,SAAS,CACC,GAAG,EAAE,cAAc,EACzB,IAAI,GAAE,mBAAwB,GACrC,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IAalC;;OAEG;IAEG,gBAAgB,CACZ,IAAI,GAAE,mBAAwB,GACrC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAC;IAYjE;;OAEG;IAEG,UAAU,CACN,UAAU,EAAE,iBAAiB,CAAC,cAAc,CAAC,GACpD,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAYvC;;OAEG;IAEG,UAAU,CACA,GAAG,EAAE,cAAc,EACzB,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,GAC7D,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAYvC;;OAEG;IAEG,UAAU,CAAe,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAavF;;OAEG;IAEG,WAAW,CACD,GAAG,EAAE,cAAc,EAClB,KAAK,EAAE,gBAAgB,GACrC,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAarC;;OAEG;IAEG,cAAc,CAAe,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAa3F;;OAEG;IAEG,YAAY,CACF,GAAG,EAAE,cAAc,GAChC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;IAY7C;;OAEG;IAEG,YAAY,IAAI,OAAO,CAAC;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAaxD;;OAEG;IAEG,SAAS,IAAI,OAAO,CAAC;QACzB,aAAa,EAAE,OAAO,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CAMH"}
|