@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.
Files changed (238) hide show
  1. package/dist/adapters/index.d.ts +16 -0
  2. package/dist/adapters/index.d.ts.map +1 -0
  3. package/dist/adapters/nestjs.d.ts +79 -0
  4. package/dist/adapters/nestjs.d.ts.map +1 -0
  5. package/dist/adapters/nextjs.d.ts +28 -0
  6. package/dist/adapters/nextjs.d.ts.map +1 -0
  7. package/dist/backend/example/example.controller.d.ts +121 -0
  8. package/dist/backend/example/example.controller.d.ts.map +1 -0
  9. package/dist/backend/example/example.module.d.ts +29 -0
  10. package/dist/backend/example/example.module.d.ts.map +1 -0
  11. package/dist/backend/example/index.d.ts +8 -0
  12. package/dist/backend/example/index.d.ts.map +1 -0
  13. package/dist/backend/featureFlags/FeatureFlagDomainService.d.ts +150 -0
  14. package/dist/backend/featureFlags/FeatureFlagDomainService.d.ts.map +1 -0
  15. package/dist/backend/featureFlags/config/feature-flag.config.d.ts +28 -50
  16. package/dist/backend/featureFlags/config/feature-flag.config.d.ts.map +1 -1
  17. package/dist/backend/featureFlags/config/validation.d.ts +6 -6
  18. package/dist/backend/featureFlags/config/validation.d.ts.map +1 -1
  19. package/dist/backend/featureFlags/feature-flag.controller.d.ts +14 -55
  20. package/dist/backend/featureFlags/feature-flag.controller.d.ts.map +1 -1
  21. package/dist/backend/featureFlags/feature-flag.module.d.ts +36 -43
  22. package/dist/backend/featureFlags/feature-flag.module.d.ts.map +1 -1
  23. package/dist/backend/featureFlags/guards/feature-flag.guard.d.ts +16 -2
  24. package/dist/backend/featureFlags/guards/feature-flag.guard.d.ts.map +1 -1
  25. package/dist/backend/featureFlags/index.d.ts +6 -7
  26. package/dist/backend/featureFlags/index.d.ts.map +1 -1
  27. package/dist/backend/featureFlags/interceptors/error-handling-interceptor.d.ts.map +1 -1
  28. package/dist/backend/featureFlags/interceptors/feature-flag-logging-interceptor.d.ts.map +1 -1
  29. package/dist/backend/featureFlags/middleware/feature-flag-middleware.d.ts +6 -11
  30. package/dist/backend/featureFlags/middleware/feature-flag-middleware.d.ts.map +1 -1
  31. package/dist/backend/index.d.ts +5 -0
  32. package/dist/backend/index.d.ts.map +1 -1
  33. package/dist/base/cache/CacheKeyBuilder.d.ts +115 -0
  34. package/dist/base/cache/CacheKeyBuilder.d.ts.map +1 -0
  35. package/dist/base/cache/index.d.ts +1 -0
  36. package/dist/base/cache/index.d.ts.map +1 -1
  37. package/dist/base/cache/strategies/redis.d.ts.map +1 -1
  38. package/dist/base/observability/BaseAdapter.d.ts +79 -0
  39. package/dist/base/observability/BaseAdapter.d.ts.map +1 -0
  40. package/dist/base/observability/CompositeAdapter.d.ts +72 -0
  41. package/dist/base/observability/CompositeAdapter.d.ts.map +1 -0
  42. package/dist/base/observability/DatadogAdapter.d.ts +117 -0
  43. package/dist/base/observability/DatadogAdapter.d.ts.map +1 -0
  44. package/dist/base/observability/LoggerAdapter.d.ts +54 -0
  45. package/dist/base/observability/LoggerAdapter.d.ts.map +1 -0
  46. package/dist/base/observability/ObservabilityService.d.ts +160 -0
  47. package/dist/base/observability/ObservabilityService.d.ts.map +1 -0
  48. package/dist/base/observability/index.d.ts +17 -0
  49. package/dist/base/observability/index.d.ts.map +1 -0
  50. package/dist/domain/base/BaseBackendDomainService.d.ts +528 -0
  51. package/dist/domain/base/BaseBackendDomainService.d.ts.map +1 -0
  52. package/dist/domain/base/BaseDomainService.d.ts +284 -0
  53. package/dist/domain/base/BaseDomainService.d.ts.map +1 -0
  54. package/dist/domain/base/BaseFrontendDomainService.d.ts +493 -0
  55. package/dist/domain/base/BaseFrontendDomainService.d.ts.map +1 -0
  56. package/dist/domain/base/BaseMapper.d.ts +100 -0
  57. package/dist/domain/base/BaseMapper.d.ts.map +1 -0
  58. package/dist/domain/base/BaseValidator.d.ts +105 -0
  59. package/dist/domain/base/BaseValidator.d.ts.map +1 -0
  60. package/dist/domain/base/index.d.ts +10 -0
  61. package/dist/domain/base/index.d.ts.map +1 -0
  62. package/dist/domain/example/BackendExampleDomainService.d.ts +257 -0
  63. package/dist/domain/example/BackendExampleDomainService.d.ts.map +1 -0
  64. package/dist/domain/example/FrontendExampleDomainService.d.ts +164 -0
  65. package/dist/domain/example/FrontendExampleDomainService.d.ts.map +1 -0
  66. package/dist/domain/example/index.d.ts +10 -0
  67. package/dist/domain/example/index.d.ts.map +1 -0
  68. package/dist/domain/example/mappers/ExampleMapper.d.ts +67 -0
  69. package/dist/domain/example/mappers/ExampleMapper.d.ts.map +1 -0
  70. package/dist/domain/example/validators/ExampleValidator.d.ts +33 -0
  71. package/dist/domain/example/validators/ExampleValidator.d.ts.map +1 -0
  72. package/dist/domain/featureFlags/FrontendFeatureFlagDomainService.d.ts +86 -0
  73. package/dist/domain/featureFlags/FrontendFeatureFlagDomainService.d.ts.map +1 -0
  74. package/dist/domain/featureFlags/index.d.ts +10 -5
  75. package/dist/domain/featureFlags/index.d.ts.map +1 -1
  76. package/dist/domain/featureFlags/mappers/FeatureFlagMapper.d.ts +72 -0
  77. package/dist/domain/featureFlags/mappers/FeatureFlagMapper.d.ts.map +1 -0
  78. package/dist/domain/featureFlags/mappers/index.d.ts +8 -0
  79. package/dist/domain/featureFlags/mappers/index.d.ts.map +1 -0
  80. package/dist/domain/featureFlags/module.d.ts +20 -0
  81. package/dist/domain/featureFlags/module.d.ts.map +1 -0
  82. package/dist/domain/featureFlags/provider.d.ts +40 -1
  83. package/dist/domain/featureFlags/provider.d.ts.map +1 -1
  84. package/dist/domain/featureFlags/providers/api.d.ts +59 -34
  85. package/dist/domain/featureFlags/providers/api.d.ts.map +1 -1
  86. package/dist/domain/featureFlags/providers/database.d.ts +48 -46
  87. package/dist/domain/featureFlags/providers/database.d.ts.map +1 -1
  88. package/dist/domain/featureFlags/providers/factory.d.ts +50 -33
  89. package/dist/domain/featureFlags/providers/factory.d.ts.map +1 -1
  90. package/dist/domain/featureFlags/providers/file.d.ts +48 -1
  91. package/dist/domain/featureFlags/providers/file.d.ts.map +1 -1
  92. package/dist/domain/featureFlags/providers/memory.d.ts +32 -6
  93. package/dist/domain/featureFlags/providers/memory.d.ts.map +1 -1
  94. package/dist/domain/featureFlags/providers/redis.d.ts +6 -1
  95. package/dist/domain/featureFlags/providers/redis.d.ts.map +1 -1
  96. package/dist/domain/featureFlags/service.d.ts +112 -0
  97. package/dist/domain/featureFlags/service.d.ts.map +1 -0
  98. package/dist/domain/index.d.ts +2 -0
  99. package/dist/domain/index.d.ts.map +1 -1
  100. package/dist/engine/featureFlags/engine.d.ts +8 -0
  101. package/dist/engine/featureFlags/engine.d.ts.map +1 -1
  102. package/dist/entry-backend.d.ts +24 -0
  103. package/dist/entry-backend.d.ts.map +1 -0
  104. package/dist/entry-backend.js +15635 -0
  105. package/dist/entry-backend.js.map +1 -0
  106. package/dist/entry-backend.mjs +15506 -0
  107. package/dist/entry-backend.mjs.map +1 -0
  108. package/dist/entry-frontend.d.ts +23 -0
  109. package/dist/entry-frontend.d.ts.map +1 -0
  110. package/dist/entry-frontend.js +11152 -0
  111. package/dist/entry-frontend.js.map +1 -0
  112. package/dist/entry-frontend.mjs +11089 -0
  113. package/dist/entry-frontend.mjs.map +1 -0
  114. package/dist/events/CoreEventManager.d.ts +116 -0
  115. package/dist/events/CoreEventManager.d.ts.map +1 -0
  116. package/dist/events/index.d.ts +27 -0
  117. package/dist/events/index.d.ts.map +1 -0
  118. package/dist/frontend/base/index.d.ts +8 -0
  119. package/dist/frontend/base/index.d.ts.map +1 -0
  120. package/dist/frontend/components/InitializationError.d.ts +25 -0
  121. package/dist/frontend/components/InitializationError.d.ts.map +1 -0
  122. package/dist/frontend/components/InitializationLoading.d.ts +22 -0
  123. package/dist/frontend/components/InitializationLoading.d.ts.map +1 -0
  124. package/dist/frontend/components/index.d.ts +9 -0
  125. package/dist/frontend/components/index.d.ts.map +1 -0
  126. package/dist/frontend/example/index.d.ts +9 -0
  127. package/dist/frontend/example/index.d.ts.map +1 -0
  128. package/dist/frontend/featureFlags/index.d.ts +28 -7
  129. package/dist/frontend/featureFlags/index.d.ts.map +1 -1
  130. package/dist/frontend/index.d.ts +4 -0
  131. package/dist/frontend/index.d.ts.map +1 -1
  132. package/dist/frontend/providers/ApiProvider.d.ts +2 -2
  133. package/dist/frontend/providers/ApiProvider.d.ts.map +1 -1
  134. package/dist/frontend/providers/PlyazProvider.d.ts +305 -0
  135. package/dist/frontend/providers/PlyazProvider.d.ts.map +1 -0
  136. package/dist/frontend/providers/index.d.ts +1 -0
  137. package/dist/frontend/providers/index.d.ts.map +1 -1
  138. package/dist/frontend/store/feature-flags.d.ts +63 -0
  139. package/dist/frontend/store/feature-flags.d.ts.map +1 -0
  140. package/dist/frontend/store/index.d.ts +14 -0
  141. package/dist/frontend/store/index.d.ts.map +1 -0
  142. package/dist/frontend/store/integrations.d.ts +36 -0
  143. package/dist/frontend/store/integrations.d.ts.map +1 -0
  144. package/dist/frontend/store/service-accessors.d.ts +78 -0
  145. package/dist/frontend/store/service-accessors.d.ts.map +1 -0
  146. package/dist/index.d.ts +5 -2
  147. package/dist/index.d.ts.map +1 -1
  148. package/dist/index.js +15450 -0
  149. package/dist/index.js.map +1 -0
  150. package/dist/index.mjs +13678 -4697
  151. package/dist/index.mjs.map +1 -1
  152. package/dist/init/CoreInitializer.d.ts +582 -0
  153. package/dist/init/CoreInitializer.d.ts.map +1 -0
  154. package/dist/init/ServiceRegistry.d.ts +256 -0
  155. package/dist/init/ServiceRegistry.d.ts.map +1 -0
  156. package/dist/init/index.d.ts +14 -0
  157. package/dist/init/index.d.ts.map +1 -0
  158. package/dist/init/nestjs/CoreModule.d.ts +63 -0
  159. package/dist/init/nestjs/CoreModule.d.ts.map +1 -0
  160. package/dist/init/nestjs/index.d.ts +5 -0
  161. package/dist/init/nestjs/index.d.ts.map +1 -0
  162. package/dist/init/nestjs/index.js +9059 -0
  163. package/dist/init/nestjs/index.js.map +1 -0
  164. package/dist/init/nestjs/index.mjs +9055 -0
  165. package/dist/init/nestjs/index.mjs.map +1 -0
  166. package/dist/init/react.d.ts +33 -0
  167. package/dist/init/react.d.ts.map +1 -0
  168. package/dist/models/example/ExampleRepository.d.ts +124 -0
  169. package/dist/models/example/ExampleRepository.d.ts.map +1 -0
  170. package/dist/models/example/index.d.ts +7 -0
  171. package/dist/models/example/index.d.ts.map +1 -0
  172. package/dist/{backend/featureFlags/database/repository.d.ts → models/featureFlags/FeatureFlagRepository.d.ts} +47 -5
  173. package/dist/models/featureFlags/FeatureFlagRepository.d.ts.map +1 -0
  174. package/dist/models/featureFlags/index.d.ts +7 -0
  175. package/dist/models/featureFlags/index.d.ts.map +1 -0
  176. package/dist/models/index.d.ts +9 -0
  177. package/dist/models/index.d.ts.map +1 -0
  178. package/dist/services/ApiClientService.d.ts +92 -4
  179. package/dist/services/ApiClientService.d.ts.map +1 -1
  180. package/dist/services/CacheService.d.ts +176 -0
  181. package/dist/services/CacheService.d.ts.map +1 -0
  182. package/dist/services/DbService.d.ts +391 -0
  183. package/dist/services/DbService.d.ts.map +1 -0
  184. package/dist/services/NotificationService.d.ts +151 -0
  185. package/dist/services/NotificationService.d.ts.map +1 -0
  186. package/dist/services/StorageService.d.ts +144 -0
  187. package/dist/services/StorageService.d.ts.map +1 -0
  188. package/dist/services/index.d.ts +4 -0
  189. package/dist/services/index.d.ts.map +1 -1
  190. package/dist/utils/common/id.d.ts +83 -0
  191. package/dist/utils/common/id.d.ts.map +1 -0
  192. package/dist/utils/common/index.d.ts +2 -0
  193. package/dist/utils/common/index.d.ts.map +1 -1
  194. package/dist/utils/common/object.d.ts +70 -0
  195. package/dist/utils/common/object.d.ts.map +1 -0
  196. package/dist/utils/featureFlags/conditions.d.ts.map +1 -1
  197. package/dist/utils/featureFlags/context.d.ts +0 -1
  198. package/dist/utils/featureFlags/context.d.ts.map +1 -1
  199. package/dist/utils/index.d.ts +1 -0
  200. package/dist/utils/index.d.ts.map +1 -1
  201. package/dist/utils/mapperUtils.d.ts +38 -0
  202. package/dist/utils/mapperUtils.d.ts.map +1 -0
  203. package/dist/utils/runtime.d.ts +15 -0
  204. package/dist/utils/runtime.d.ts.map +1 -0
  205. package/dist/version.d.ts +24 -0
  206. package/dist/version.d.ts.map +1 -0
  207. package/dist/web_app/auth/add_user.d.ts +2 -2
  208. package/dist/web_app/auth/add_user.d.ts.map +1 -1
  209. package/dist/web_app/auth/update_user.d.ts +1 -1
  210. package/dist/web_app/auth/update_user.d.ts.map +1 -1
  211. package/package.json +89 -15
  212. package/dist/backend/featureFlags/database/connection.d.ts +0 -321
  213. package/dist/backend/featureFlags/database/connection.d.ts.map +0 -1
  214. package/dist/backend/featureFlags/database/repository.d.ts.map +0 -1
  215. package/dist/backend/featureFlags/feature-flag.repository.d.ts +0 -85
  216. package/dist/backend/featureFlags/feature-flag.repository.d.ts.map +0 -1
  217. package/dist/backend/featureFlags/feature-flag.service.d.ts +0 -264
  218. package/dist/backend/featureFlags/feature-flag.service.d.ts.map +0 -1
  219. package/dist/frontend/featureFlags/hooks/useFeatureFlag.d.ts +0 -103
  220. package/dist/frontend/featureFlags/hooks/useFeatureFlag.d.ts.map +0 -1
  221. package/dist/frontend/featureFlags/hooks/useFeatureFlagActions.d.ts +0 -35
  222. package/dist/frontend/featureFlags/hooks/useFeatureFlagActions.d.ts.map +0 -1
  223. package/dist/frontend/featureFlags/hooks/useFeatureFlagHelpers.d.ts +0 -55
  224. package/dist/frontend/featureFlags/hooks/useFeatureFlagHelpers.d.ts.map +0 -1
  225. package/dist/frontend/featureFlags/hooks/useFeatureFlagProvider.d.ts +0 -57
  226. package/dist/frontend/featureFlags/hooks/useFeatureFlagProvider.d.ts.map +0 -1
  227. package/dist/frontend/featureFlags/providers/FeatureFlagProvider.d.ts +0 -99
  228. package/dist/frontend/featureFlags/providers/FeatureFlagProvider.d.ts.map +0 -1
  229. package/dist/frontend/featureFlags/providers/FeatureFlagProviderHelpers.d.ts +0 -31
  230. package/dist/frontend/featureFlags/providers/FeatureFlagProviderHelpers.d.ts.map +0 -1
  231. package/dist/frontend/featureFlags/providers/types.d.ts +0 -21
  232. package/dist/frontend/featureFlags/providers/types.d.ts.map +0 -1
  233. package/dist/index.cjs +0 -6435
  234. package/dist/index.cjs.map +0 -1
  235. package/dist/utils/db/databaseService.d.ts +0 -6
  236. package/dist/utils/db/databaseService.d.ts.map +0 -1
  237. package/dist/utils/db/index.d.ts +0 -2
  238. package/dist/utils/db/index.d.ts.map +0 -1
@@ -1,321 +0,0 @@
1
- import { type DatabaseServiceInterface, type Transaction } from '@plyaz/types/db';
2
- /**
3
- * DatabaseConnectionManager - Singleton manager for feature flag database connections
4
- *
5
- * @description Manages Supabase database connections for the feature flag system using a singleton pattern.
6
- * Handles connection initialization, table registration, transactions, and cleanup. This is the core
7
- * database layer that all feature flag operations depend on.
8
- *
9
- * **Initialization Flow:**
10
- * 1. FeatureFlagService calls initialize() during onModuleInit()
11
- * 2. Reads Supabase credentials from environment variables
12
- * 3. Creates database service with @plyaz/db
13
- * 4. Registers feature flag tables
14
- * 5. Enables caching and other optimizations
15
- *
16
- * **Required Environment Variables:**
17
- * - SUPABASE_URL: Your Supabase project URL
18
- * - SUPABASE_SERVICE_ROLE_KEY: Service role key for admin operations
19
- * - SUPABASE_ANON_PUBLIC_KEY: Anonymous key for public operations
20
- *
21
- * @example Environment Setup (.env.local)
22
- * ```bash
23
- * SUPABASE_URL=https://your-project.supabase.co
24
- * SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
25
- * SUPABASE_ANON_PUBLIC_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
26
- * ```
27
- *
28
- * @example Basic Usage (Internal - called by FeatureFlagService)
29
- * ```typescript
30
- * // During system initialization:
31
- * const manager = DatabaseConnectionManager.getInstance();
32
- * await manager.initialize();
33
- *
34
- * // During runtime operations:
35
- * const db = manager.getDatabase();
36
- * const flags = await db.query('feature_flags', { limit: 100 });
37
- * ```
38
- *
39
- * @example Transaction Usage
40
- * ```typescript
41
- * const manager = DatabaseConnectionManager.getInstance();
42
- *
43
- * // Atomic flag creation with rules
44
- * const result = await manager.transaction(async (tx) => {
45
- * // Create flag
46
- * const flag = await tx.create('feature_flags', {
47
- * key: 'NEW_FEATURE',
48
- * value: true,
49
- * is_enabled: true
50
- * });
51
- *
52
- * // Create associated rule
53
- * const rule = await tx.create('feature_flag_rules', {
54
- * flag_key: 'NEW_FEATURE',
55
- * name: 'Premium Users Only',
56
- * conditions: [{ field: 'userRole', operator: 'equals', value: 'premium' }]
57
- * });
58
- *
59
- * return { flag, rule };
60
- * });
61
- * ```
62
- *
63
- */
64
- export declare class DatabaseConnectionManager {
65
- private static instance;
66
- private databaseService;
67
- private constructor();
68
- /**
69
- * Gets the singleton instance of DatabaseConnectionManager
70
- *
71
- * @description Returns the single instance of the connection manager, creating it if it doesn't exist.
72
- * This ensures only one database connection pool is maintained across the application.
73
- *
74
- * @returns {DatabaseConnectionManager} The singleton instance
75
- *
76
- * @example Getting the Instance
77
- * ```typescript
78
- * // Always returns the same instance
79
- * const manager1 = DatabaseConnectionManager.getInstance();
80
- * const manager2 = DatabaseConnectionManager.getInstance();
81
- * console.log(manager1 === manager2); // true
82
- *
83
- * // Use in services
84
- * class FeatureFlagRepository {
85
- * private connectionManager = DatabaseConnectionManager.getInstance();
86
- *
87
- * async getFlags() {
88
- * const db = this.connectionManager.getDatabase();
89
- * return db.query('feature_flags');
90
- * }
91
- * }
92
- * ```
93
- */
94
- static getInstance(): DatabaseConnectionManager;
95
- /**
96
- * Initializes the database connection and registers feature flag tables
97
- *
98
- * @description Sets up the Supabase connection using environment variables and registers
99
- * all feature flag related tables. This method is idempotent - calling it multiple
100
- * times won't create additional connections.
101
- *
102
- * **What it does:**
103
- * 1. Validates required environment variables
104
- * 2. Creates Supabase database service
105
- * 3. Configures caching (5-minute TTL)
106
- * 4. Registers feature flag tables with proper ID columns
107
- * 5. Disables audit logging (until tables are created)
108
- *
109
- * @throws {DatabaseError} When environment variables are missing or connection fails
110
- *
111
- * @example Initialization Process
112
- * ```typescript
113
- * // Called automatically by FeatureFlagService.onModuleInit()
114
- * const manager = DatabaseConnectionManager.getInstance();
115
- *
116
- * try {
117
- * await manager.initialize();
118
- * console.log('Database connection established');
119
- * } catch (error) {
120
- * console.error('Failed to connect to database:', error.message);
121
- * // Error: Missing environment variables for Supabase connection
122
- * }
123
- * ```
124
- *
125
- * @example Environment Variable Validation
126
- * ```typescript
127
- * // If any of these are missing, initialization fails:
128
- * // SUPABASE_URL=undefined
129
- * // SUPABASE_SERVICE_ROLE_KEY=undefined
130
- * // SUPABASE_ANON_PUBLIC_KEY=undefined
131
- *
132
- * // Throws: DatabaseError with code CONFIG_REQUIRED
133
- * ```
134
- *
135
- * @example Registered Tables
136
- * ```typescript
137
- * // These tables are automatically registered:
138
- * // - feature_flags (ID: key)
139
- * // - feature_flag_rules (ID: id)
140
- * // - feature_flag_overrides (ID: id)
141
- * // - feature_flag_evaluations (ID: id)
142
- * ```
143
- */
144
- initialize(): Promise<void>;
145
- /**
146
- * Gets the initialized database service instance
147
- *
148
- * @description Returns the database service for performing queries. The database must be
149
- * initialized first using initialize() method, otherwise this will throw an error.
150
- *
151
- * @returns {DatabaseServiceInterface} The database service instance
152
- * @throws {DatabaseError} When database is not initialized
153
- *
154
- * @example Basic Usage
155
- * ```typescript
156
- * const manager = DatabaseConnectionManager.getInstance();
157
- * await manager.initialize(); // Must initialize first
158
- *
159
- * const db = manager.getDatabase();
160
- *
161
- * // Query feature flags
162
- * const result = await db.query('feature_flags', {
163
- * filters: [{ field: 'is_enabled', operator: 'eq', value: true }],
164
- * sort: [{ field: 'key', direction: 'asc' }]
165
- * });
166
- *
167
- * if (result.success) {
168
- * console.log('Found flags:', result.value.data);
169
- * }
170
- * ```
171
- *
172
- * @example Error Handling
173
- * ```typescript
174
- * const manager = DatabaseConnectionManager.getInstance();
175
- * // Don't call initialize()
176
- *
177
- * try {
178
- * const db = manager.getDatabase();
179
- * } catch (error) {
180
- * console.error(error.message);
181
- * // "Database not initialized. Call initialize() first."
182
- * }
183
- * ```
184
- *
185
- * @example CRUD Operations
186
- * ```typescript
187
- * const db = manager.getDatabase();
188
- *
189
- * // Create a flag
190
- * const createResult = await db.create('feature_flags', {
191
- * key: 'NEW_FEATURE',
192
- * value: true,
193
- * is_enabled: true
194
- * });
195
- *
196
- * // Update a flag
197
- * const updateResult = await db.update('feature_flags', 'NEW_FEATURE', {
198
- * value: false
199
- * });
200
- *
201
- * // Delete a flag
202
- * const deleteResult = await db.delete('feature_flags', 'NEW_FEATURE');
203
- * ```
204
- */
205
- getDatabase(): DatabaseServiceInterface;
206
- /**
207
- * Executes a database transaction with automatic rollback on failure
208
- *
209
- * @description Provides atomic database operations by wrapping multiple queries in a transaction.
210
- * If any operation fails, all changes are rolled back automatically. This is essential for
211
- * maintaining data consistency when creating flags with rules or performing bulk operations.
212
- *
213
- * @template T The return type of the transaction callback
214
- * @param {Function} callback - Function that receives transaction object and performs operations
215
- * @returns {Promise<T>} The result of the transaction callback
216
- * @throws {DatabaseError} When transaction fails or returns no value
217
- *
218
- * @example Atomic Flag Creation with Rules
219
- * ```typescript
220
- * const manager = DatabaseConnectionManager.getInstance();
221
- *
222
- * const result = await manager.transaction(async (tx) => {
223
- * // Create the flag
224
- * const flag = await tx.create('feature_flags', {
225
- * key: 'PREMIUM_CHECKOUT',
226
- * value: true,
227
- * is_enabled: true,
228
- * description: 'Premium checkout flow'
229
- * });
230
- *
231
- * // Create targeting rule
232
- * const rule = await tx.create('feature_flag_rules', {
233
- * flag_key: 'PREMIUM_CHECKOUT',
234
- * name: 'Premium Users Only',
235
- * conditions: [
236
- * { field: 'userRole', operator: 'equals', value: 'premium' },
237
- * { field: 'subscriptionActive', operator: 'equals', value: true }
238
- * ],
239
- * value: true,
240
- * priority: 100
241
- * });
242
- *
243
- * return { flag, rule };
244
- * });
245
- *
246
- * console.log('Created flag and rule:', result);
247
- * ```
248
- *
249
- * @example Bulk Flag Updates
250
- * ```typescript
251
- * const flagsToUpdate = ['FEATURE_A', 'FEATURE_B', 'FEATURE_C'];
252
- *
253
- * await manager.transaction(async (tx) => {
254
- * for (const flagKey of flagsToUpdate) {
255
- * await tx.update('feature_flags', flagKey, {
256
- * is_enabled: false,
257
- * updated_at: new Date().toISOString()
258
- * });
259
- * }
260
- *
261
- * // Log the bulk update
262
- * await tx.create('feature_flag_evaluations', {
263
- * flag_key: 'BULK_UPDATE',
264
- * result: { updatedFlags: flagsToUpdate },
265
- * reason: 'bulk_disable',
266
- * evaluated_at: new Date().toISOString()
267
- * });
268
- * });
269
- * ```
270
- *
271
- * @example Error Handling and Rollback
272
- * ```typescript
273
- * try {
274
- * await manager.transaction(async (tx) => {
275
- * await tx.create('feature_flags', { key: 'TEST_FLAG', value: true });
276
- *
277
- * // This will cause the entire transaction to rollback
278
- * throw new Error('Something went wrong');
279
- *
280
- * // This won't execute, and the flag creation above will be rolled back
281
- * await tx.create('feature_flag_rules', { flag_key: 'TEST_FLAG' });
282
- * });
283
- * } catch (error) {
284
- * console.log('Transaction failed, all changes rolled back');
285
- * }
286
- * ```
287
- */
288
- transaction<T>(callback: (tx: Transaction) => Promise<T>): Promise<T>;
289
- /**
290
- * Closes the database connection and cleans up resources
291
- *
292
- * @description Properly closes the database connection and resets the singleton instance.
293
- * This is typically called during application shutdown or in tests that need to reset
294
- * the connection state.
295
- *
296
- * @example Application Shutdown
297
- * ```typescript
298
- * // In your NestJS module's onModuleDestroy
299
- * export class FeatureFlagModule implements OnModuleDestroy {
300
- * async onModuleDestroy() {
301
- * const manager = DatabaseConnectionManager.getInstance();
302
- * await manager.close();
303
- * console.log('Database connection closed');
304
- * }
305
- * }
306
- * ```
307
- *
308
- * @example Test Cleanup
309
- * ```typescript
310
- * describe('Feature Flag Tests', () => {
311
- * afterEach(async () => {
312
- * // Clean up connection between tests
313
- * const manager = DatabaseConnectionManager.getInstance();
314
- * await manager.close();
315
- * });
316
- * });
317
- * ```
318
- */
319
- close(): Promise<void>;
320
- }
321
- //# sourceMappingURL=connection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../../src/backend/featureFlags/database/connection.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,wBAAwB,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEjG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IACnD,OAAO,CAAC,eAAe,CAAyC;IAEhE,OAAO;IAEP;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,CAAC,WAAW,IAAI,yBAAyB;IAO/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgDG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4DjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2DG;IACH,WAAW,IAAI,wBAAwB;IAUvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiFG;IACG,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAe3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../src/backend/featureFlags/database/repository.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- /**
2
- * Feature Flag Repository
3
- *
4
- * NestJS repository for feature flag data persistence.
5
- * Handles database operations and data mapping.
6
- *
7
- * @fileoverview NestJS repository for feature flags
8
- * @version 1.0.0
9
- */
10
- import type { FeatureFlag, FeatureFlagRule, CreateFlagRequest } from '@plyaz/types';
11
- /**
12
- * Feature Flag Repository
13
- *
14
- * Handles all database operations for feature flags.
15
- * This is a stub implementation that provides the interface
16
- * for integration with @plyaz/db when available.
17
- */
18
- export declare class FeatureFlagRepository<FeatureFlagKey extends string> {
19
- private readonly logger;
20
- private static readonly ONE_DAY_MS;
21
- /**
22
- * Creates a new feature flag in the database.
23
- *
24
- * @param createData - Flag creation data
25
- * @returns Created feature flag
26
- */
27
- createFlag(createData: CreateFlagRequest<FeatureFlagKey>): Promise<FeatureFlag<FeatureFlagKey>>;
28
- /**
29
- * Updates an existing feature flag.
30
- *
31
- * @param key - Feature flag key
32
- * @param updateData - Flag update data
33
- * @returns Updated feature flag
34
- */
35
- updateFlag(key: FeatureFlagKey, updateData: Partial<CreateFlagRequest<FeatureFlagKey>>): Promise<FeatureFlag<FeatureFlagKey>>;
36
- /**
37
- * Deletes a feature flag from the database.
38
- *
39
- * @param key - Feature flag key
40
- */
41
- deleteFlag(key: FeatureFlagKey): Promise<void>;
42
- /**
43
- * Gets all feature flags from the database.
44
- *
45
- * @param environment - Filter by environment
46
- * @returns List of feature flags
47
- */
48
- getAllFlags(environment?: string): Promise<FeatureFlag<FeatureFlagKey>[]>;
49
- /**
50
- * Creates sample flags for stub implementation.
51
- *
52
- * @returns Array of sample feature flags
53
- */
54
- private createSampleFlags;
55
- /**
56
- * Filters flags by environment.
57
- *
58
- * @param flags - Array of flags to filter
59
- * @param environment - Environment to filter by
60
- * @returns Filtered flags
61
- */
62
- private filterFlagsByEnvironment;
63
- /**
64
- * Gets all rules for a specific flag.
65
- *
66
- * @param key - Feature flag key
67
- * @returns List of rules for the flag
68
- */
69
- getFlagRules(key: FeatureFlagKey): Promise<FeatureFlagRule<FeatureFlagKey>[]>;
70
- /**
71
- * Gets a single feature flag by key.
72
- *
73
- * @param key - Feature flag key
74
- * @returns Feature flag or null if not found
75
- */
76
- getFlagByKey(key: FeatureFlagKey): Promise<FeatureFlag<FeatureFlagKey> | null>;
77
- /**
78
- * Infers the type of a feature flag value.
79
- *
80
- * @param value - The flag value
81
- * @returns Inferred type string
82
- */
83
- private inferFlagType;
84
- }
85
- //# sourceMappingURL=feature-flag.repository.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feature-flag.repository.d.ts","sourceRoot":"","sources":["../../../src/backend/featureFlags/feature-flag.repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAEV,WAAW,EACX,eAAe,EACf,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAEtB;;;;;;GAMG;AACH,qBACa,qBAAqB,CAAC,cAAc,SAAS,MAAM;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IAGjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAc;IAKhD;;;;;OAKG;IACG,UAAU,CACd,UAAU,EAAE,iBAAiB,CAAC,cAAc,CAAC,GAC5C,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAgCvC;;;;;;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;IA0CvC;;;;OAIG;IACG,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpD;;;;;OAKG;IACG,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;IAW/E;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAiCzB;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAShC;;;;;OAKG;IACG,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;IAmBnF;;;;;OAKG;IACG,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAepF;;;;;OAKG;IACH,OAAO,CAAC,aAAa;CAwDtB"}
@@ -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"}