@plyaz/core 1.0.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.
Files changed (82) hide show
  1. package/README.md +439 -0
  2. package/dist/backend/featureFlags/feature-flag.controller.d.ts +135 -0
  3. package/dist/backend/featureFlags/feature-flag.controller.d.ts.map +1 -0
  4. package/dist/backend/featureFlags/feature-flag.module.d.ts +114 -0
  5. package/dist/backend/featureFlags/feature-flag.module.d.ts.map +1 -0
  6. package/dist/backend/featureFlags/feature-flag.repository.d.ts +85 -0
  7. package/dist/backend/featureFlags/feature-flag.repository.d.ts.map +1 -0
  8. package/dist/backend/featureFlags/feature-flag.service.d.ts +123 -0
  9. package/dist/backend/featureFlags/feature-flag.service.d.ts.map +1 -0
  10. package/dist/backend/featureFlags/index.d.ts +49 -0
  11. package/dist/backend/featureFlags/index.d.ts.map +1 -0
  12. package/dist/backend/index.d.ts +5 -0
  13. package/dist/backend/index.d.ts.map +1 -0
  14. package/dist/cache/index.d.ts +98 -0
  15. package/dist/cache/index.d.ts.map +1 -0
  16. package/dist/cache/strategies/memory.d.ts +103 -0
  17. package/dist/cache/strategies/memory.d.ts.map +1 -0
  18. package/dist/cache/strategies/redis.d.ts +105 -0
  19. package/dist/cache/strategies/redis.d.ts.map +1 -0
  20. package/dist/domain/featureFlags/index.d.ts +49 -0
  21. package/dist/domain/featureFlags/index.d.ts.map +1 -0
  22. package/dist/domain/featureFlags/provider.d.ts +166 -0
  23. package/dist/domain/featureFlags/provider.d.ts.map +1 -0
  24. package/dist/domain/featureFlags/providers/api.d.ts +78 -0
  25. package/dist/domain/featureFlags/providers/api.d.ts.map +1 -0
  26. package/dist/domain/featureFlags/providers/database.d.ts +102 -0
  27. package/dist/domain/featureFlags/providers/database.d.ts.map +1 -0
  28. package/dist/domain/featureFlags/providers/factory.d.ts +116 -0
  29. package/dist/domain/featureFlags/providers/factory.d.ts.map +1 -0
  30. package/dist/domain/featureFlags/providers/file.d.ts +84 -0
  31. package/dist/domain/featureFlags/providers/file.d.ts.map +1 -0
  32. package/dist/domain/featureFlags/providers/memory.d.ts +179 -0
  33. package/dist/domain/featureFlags/providers/memory.d.ts.map +1 -0
  34. package/dist/domain/featureFlags/providers/redis.d.ts +80 -0
  35. package/dist/domain/featureFlags/providers/redis.d.ts.map +1 -0
  36. package/dist/domain/index.d.ts +6 -0
  37. package/dist/domain/index.d.ts.map +1 -0
  38. package/dist/domain/types.d.ts +18 -0
  39. package/dist/domain/types.d.ts.map +1 -0
  40. package/dist/engine/featureFlags/engine.d.ts +193 -0
  41. package/dist/engine/featureFlags/engine.d.ts.map +1 -0
  42. package/dist/engine/featureFlags/index.d.ts +10 -0
  43. package/dist/engine/featureFlags/index.d.ts.map +1 -0
  44. package/dist/engine/index.d.ts +5 -0
  45. package/dist/engine/index.d.ts.map +1 -0
  46. package/dist/frontend/featureFlags/hooks/useFeatureFlag.d.ts +103 -0
  47. package/dist/frontend/featureFlags/hooks/useFeatureFlag.d.ts.map +1 -0
  48. package/dist/frontend/featureFlags/hooks/useFeatureFlagActions.d.ts +35 -0
  49. package/dist/frontend/featureFlags/hooks/useFeatureFlagActions.d.ts.map +1 -0
  50. package/dist/frontend/featureFlags/hooks/useFeatureFlagHelpers.d.ts +55 -0
  51. package/dist/frontend/featureFlags/hooks/useFeatureFlagHelpers.d.ts.map +1 -0
  52. package/dist/frontend/featureFlags/hooks/useFeatureFlagProvider.d.ts +57 -0
  53. package/dist/frontend/featureFlags/hooks/useFeatureFlagProvider.d.ts.map +1 -0
  54. package/dist/frontend/featureFlags/index.d.ts +14 -0
  55. package/dist/frontend/featureFlags/index.d.ts.map +1 -0
  56. package/dist/frontend/featureFlags/providers/FeatureFlagProvider.d.ts +99 -0
  57. package/dist/frontend/featureFlags/providers/FeatureFlagProvider.d.ts.map +1 -0
  58. package/dist/frontend/featureFlags/providers/FeatureFlagProviderHelpers.d.ts +45 -0
  59. package/dist/frontend/featureFlags/providers/FeatureFlagProviderHelpers.d.ts.map +1 -0
  60. package/dist/frontend/index.d.ts +2 -0
  61. package/dist/frontend/index.d.ts.map +1 -0
  62. package/dist/index.cjs +3951 -0
  63. package/dist/index.cjs.map +1 -0
  64. package/dist/index.d.ts +7 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.mjs +3902 -0
  67. package/dist/index.mjs.map +1 -0
  68. package/dist/utils/common/hash.d.ts +81 -0
  69. package/dist/utils/common/hash.d.ts.map +1 -0
  70. package/dist/utils/common/index.d.ts +11 -0
  71. package/dist/utils/common/index.d.ts.map +1 -0
  72. package/dist/utils/common/values.d.ts +48 -0
  73. package/dist/utils/common/values.d.ts.map +1 -0
  74. package/dist/utils/featureFlags/conditions.d.ts +114 -0
  75. package/dist/utils/featureFlags/conditions.d.ts.map +1 -0
  76. package/dist/utils/featureFlags/context.d.ts +241 -0
  77. package/dist/utils/featureFlags/context.d.ts.map +1 -0
  78. package/dist/utils/featureFlags/index.d.ts +11 -0
  79. package/dist/utils/featureFlags/index.d.ts.map +1 -0
  80. package/dist/utils/index.d.ts +6 -0
  81. package/dist/utils/index.d.ts.map +1 -0
  82. package/package.json +144 -0
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Feature Flag Provider - Core Implementation
3
+ *
4
+ * Main provider class that orchestrates feature flag evaluation and management.
5
+ * This will be moved to @plyaz/core when the package structure is finalized.
6
+ *
7
+ * @fileoverview Core feature flag provider implementation
8
+ * @version 1.0.0
9
+ */
10
+ import type { FeatureFlagProvider as IFeatureFlagProvider, FeatureFlagConfig, FeatureFlagContext, FeatureFlagEvaluation, FeatureFlagValue, FetchFeatureFlagDataResponse } from '@plyaz/types';
11
+ import { FeatureFlagEngine } from '@engine/featureFlags/engine';
12
+ import { CacheManager } from '@cache/index';
13
+ /**
14
+ * Subscription callback function type
15
+ */
16
+ export type SubscriptionCallback = () => void;
17
+ /**
18
+ * Core feature flag provider that implements the main business logic.
19
+ * This class orchestrates between the evaluation engine, caching, and data providers.
20
+ *
21
+ * @class FeatureFlagProvider
22
+ * @implements {IFeatureFlagProvider}
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const provider = new MemoryFeatureFlagProvider<MyFeatureFlags>(config, FEATURES);
27
+ * await provider.initialize();
28
+ *
29
+ * const isEnabled = await provider.isEnabled('AUTH_GOOGLE', context);
30
+ * const value = await provider.getValue('ROLLOUT_PERCENTAGE', context);
31
+ * ```
32
+ */
33
+ export declare abstract class FeatureFlagProvider<FeatureFlagKey extends string> implements IFeatureFlagProvider<FeatureFlagKey> {
34
+ protected config: FeatureFlagConfig<FeatureFlagKey>;
35
+ protected engine: FeatureFlagEngine<FeatureFlagKey>;
36
+ protected cacheManager: CacheManager;
37
+ protected subscribers: Set<SubscriptionCallback>;
38
+ protected refreshTimer?: ReturnType<typeof setInterval>;
39
+ protected isInitialized: boolean;
40
+ protected features: Record<FeatureFlagKey, FeatureFlagValue>;
41
+ protected initializePromise?: Promise<void>;
42
+ /**
43
+ * Creates a new feature flag provider.
44
+ *
45
+ * @param config - Provider configuration
46
+ * @param features - Record of feature flag keys to their default values
47
+ */
48
+ constructor(config: FeatureFlagConfig<FeatureFlagKey>, features: Record<FeatureFlagKey, FeatureFlagValue>);
49
+ /**
50
+ * Abstract method to fetch flags and rules from the provider's data source.
51
+ * Must be implemented by concrete provider classes.
52
+ *
53
+ * @protected
54
+ * @abstract
55
+ * @returns Promise resolving to flags and rules
56
+ */
57
+ protected abstract fetchData(): Promise<FetchFeatureFlagDataResponse<FeatureFlagKey>>;
58
+ /**
59
+ * Initializes the provider by loading initial data.
60
+ *
61
+ * @returns Promise that resolves when initialization is complete
62
+ */
63
+ initialize(): Promise<void>;
64
+ /**
65
+ * Performs the actual initialization work.
66
+ *
67
+ * @private
68
+ * @returns Promise that resolves when initialization is complete
69
+ */
70
+ private doInitialize;
71
+ /**
72
+ * Gets a feature flag evaluation for the specified key and context.
73
+ *
74
+ * @param key - The feature flag key
75
+ * @param context - Optional context for evaluation
76
+ * @returns Promise resolving to the flag evaluation
77
+ */
78
+ getFlag(key: FeatureFlagKey, context?: FeatureFlagContext): Promise<FeatureFlagEvaluation<FeatureFlagKey>>;
79
+ /**
80
+ * Checks if a feature flag is enabled.
81
+ *
82
+ * @param key - The feature flag key
83
+ * @param context - Optional context for evaluation
84
+ * @returns Promise resolving to boolean indicating if flag is enabled
85
+ */
86
+ isEnabled(key: FeatureFlagKey, context?: FeatureFlagContext): Promise<boolean>;
87
+ /**
88
+ * Gets the value of a feature flag.
89
+ *
90
+ * @template T - The expected type of the flag value
91
+ * @param key - The feature flag key
92
+ * @param context - Optional context for evaluation
93
+ * @returns Promise resolving to the flag value
94
+ */
95
+ getValue<T = FeatureFlagValue>(key: FeatureFlagKey, context?: FeatureFlagContext): Promise<T>;
96
+ /**
97
+ * Gets all feature flag evaluations for the given context.
98
+ *
99
+ * @param context - Optional context for evaluation
100
+ * @returns Promise resolving to record of flag evaluations
101
+ */
102
+ getAllFlags(context?: FeatureFlagContext): Promise<Record<string, FeatureFlagEvaluation<FeatureFlagKey>>>;
103
+ /**
104
+ * Refreshes the provider by fetching latest data from the source.
105
+ *
106
+ * @returns Promise that resolves when refresh is complete
107
+ */
108
+ refresh(): Promise<void>;
109
+ /**
110
+ * Subscribes to provider updates.
111
+ *
112
+ * @param callback - Function to call when provider updates
113
+ * @returns Unsubscribe function
114
+ */
115
+ subscribe(callback: SubscriptionCallback): () => void;
116
+ /**
117
+ * Sets an override for a specific flag key.
118
+ *
119
+ * @param key - The flag key to override
120
+ * @param value - The value to force for this flag
121
+ */
122
+ setOverride(key: FeatureFlagKey, value: FeatureFlagValue): void;
123
+ /**
124
+ * Removes an override for a specific flag key.
125
+ *
126
+ * @param key - The flag key to remove override for
127
+ */
128
+ removeOverride(key: FeatureFlagKey): void;
129
+ /**
130
+ * Clears all overrides.
131
+ */
132
+ clearOverrides(): void;
133
+ /**
134
+ * Disposes of the provider, cleaning up resources.
135
+ */
136
+ dispose(): void;
137
+ /**
138
+ * Generates a cache key for flag evaluation.
139
+ *
140
+ * @protected
141
+ * @param key - Feature flag key
142
+ * @param context - Evaluation context
143
+ * @returns Cache key string
144
+ */
145
+ protected generateCacheKey(key: FeatureFlagKey, context?: FeatureFlagContext): string;
146
+ /**
147
+ * Sets up the automatic refresh timer if configured.
148
+ *
149
+ * @protected
150
+ */
151
+ protected setupRefreshTimer(): void;
152
+ /**
153
+ * Notifies all subscribers of provider updates.
154
+ *
155
+ * @protected
156
+ */
157
+ protected notifySubscribers(): void;
158
+ /**
159
+ * Logs a message if logging is enabled.
160
+ *
161
+ * @protected
162
+ * @param args - Arguments to log
163
+ */
164
+ protected log(...args: unknown[]): void;
165
+ }
166
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/domain/featureFlags/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * API Feature Flag Provider (Stub)
3
+ *
4
+ * API-based provider stub that requires @plyaz/api package implementation.
5
+ * This will be moved to @plyaz/core when the package structure is finalized.
6
+ *
7
+ * @fileoverview API provider stub for feature flags
8
+ * @version 1.0.0
9
+ */
10
+ import type { FeatureFlag, FeatureFlagRule, FeatureFlagConfig, FeatureFlagValue } from '@plyaz/types';
11
+ import { FeatureFlagProvider } from '../provider';
12
+ /**
13
+ * API-based feature flag provider requiring @plyaz/api implementation.
14
+ *
15
+ * @class ApiFeatureFlagProvider
16
+ * @extends {FeatureFlagProvider}
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * // This will throw an error until @plyaz/api is implemented
21
+ * const provider = new ApiFeatureFlagProvider({
22
+ * provider: 'api',
23
+ * apiEndpoint: 'https://api.plyaz.co.uk',
24
+ * apiKey: process.env.FEATURE_FLAG_API_KEY,
25
+ * isCacheEnabled: true,
26
+ * cacheTtl: 300,
27
+ * });
28
+ * ```
29
+ */
30
+ export declare class ApiFeatureFlagProvider<FeatureFlagKey extends string> extends FeatureFlagProvider<FeatureFlagKey> {
31
+ /**
32
+ * Creates a new API feature flag provider.
33
+ *
34
+ * @param config - Provider configuration with API settings
35
+ * @throws Error indicating that @plyaz/api implementation is required
36
+ */
37
+ constructor(config: FeatureFlagConfig<FeatureFlagKey>, features: Record<FeatureFlagKey, FeatureFlagValue>);
38
+ /**
39
+ * Fetches flags and rules from the API endpoint.
40
+ * Currently throws an error as the API implementation is not ready.
41
+ *
42
+ * @protected
43
+ * @returns Promise that rejects with implementation error
44
+ * @throws Error indicating missing API implementation
45
+ */
46
+ protected fetchData(): Promise<{
47
+ flags: FeatureFlag<FeatureFlagKey>[];
48
+ rules: FeatureFlagRule<FeatureFlagKey>[];
49
+ }>;
50
+ /**
51
+ * Validates the API provider configuration.
52
+ *
53
+ * @private
54
+ * @throws Error if configuration is invalid or incomplete
55
+ */
56
+ 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
+ /**
66
+ * Gets API provider status and configuration info.
67
+ *
68
+ * @returns API provider status information
69
+ */
70
+ getApiInfo(): {
71
+ endpoint?: string;
72
+ hasApiKey: boolean;
73
+ isImplemented: boolean;
74
+ requiredPackages: string[];
75
+ documentationPath: string;
76
+ };
77
+ }
78
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/domain/featureFlags/providers/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,sBAAsB,CACjC,cAAc,SAAS,MAAM,CAC7B,SAAQ,mBAAmB,CAAC,cAAc,CAAC;IAC3C;;;;;OAKG;gBAED,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACzC,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAOpD;;;;;;;OAOG;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;IA6BF;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAmCtB;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IASlB;;;;OAIG;IACH,UAAU,IAAI;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,OAAO,CAAC;QACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;KAC3B;CASF"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Database Feature Flag Provider (Stub)
3
+ *
4
+ * Database-based provider stub that requires @plyaz/db package implementation.
5
+ * This will be moved to @plyaz/core when the package structure is finalized.
6
+ *
7
+ * @fileoverview Database provider stub for feature flags
8
+ * @version 1.0.0
9
+ */
10
+ import type { FeatureFlag, FeatureFlagRule, FeatureFlagConfig, FeatureFlagValue } from '@plyaz/types';
11
+ import { FeatureFlagProvider } from '../provider';
12
+ /**
13
+ * Database-based feature flag provider requiring @plyaz/db implementation.
14
+ *
15
+ * @class DatabaseFeatureFlagProvider
16
+ * @extends {FeatureFlagProvider}
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * // This will throw an error until @plyaz/db is implemented
21
+ * const provider = new DatabaseFeatureFlagProvider({
22
+ * provider: 'database',
23
+ * databaseConfig: {
24
+ * connectionString: process.env.DATABASE_URL,
25
+ * tableName: 'feature_flags',
26
+ * },
27
+ * isCacheEnabled: true,
28
+ * cacheTtl: 300,
29
+ * });
30
+ * ```
31
+ */
32
+ export declare class DatabaseFeatureFlagProvider<FeatureFlagKey extends string> extends FeatureFlagProvider<FeatureFlagKey> {
33
+ /**
34
+ * Creates a new database feature flag provider.
35
+ *
36
+ * @param config - Provider configuration with database settings
37
+ * @throws Error indicating that @plyaz/db implementation is required
38
+ */
39
+ constructor(config: FeatureFlagConfig<FeatureFlagKey>, features: Record<FeatureFlagKey, FeatureFlagValue>);
40
+ /**
41
+ * Fetches flags and rules from the database.
42
+ * Currently throws an error as the database implementation is not ready.
43
+ *
44
+ * @protected
45
+ * @returns Promise that rejects with implementation error
46
+ * @throws Error indicating missing database implementation
47
+ */
48
+ protected fetchData(): Promise<{
49
+ flags: FeatureFlag<FeatureFlagKey>[];
50
+ rules: FeatureFlagRule<FeatureFlagKey>[];
51
+ }>;
52
+ /**
53
+ * Validates the database provider configuration.
54
+ *
55
+ * @private
56
+ * @throws Error if configuration is invalid or incomplete
57
+ */
58
+ private validateConfig;
59
+ private validateProviderType;
60
+ private validateDatabaseConfig;
61
+ private validateConnectionString;
62
+ private logConfigurationStatus;
63
+ /**
64
+ * Validates PostgreSQL URL format.
65
+ *
66
+ * @private
67
+ * @param url - URL to validate
68
+ * @returns True if valid PostgreSQL URL
69
+ */
70
+ private isValidPostgresUrl;
71
+ /**
72
+ * Validates MySQL URL format.
73
+ *
74
+ * @private
75
+ * @param url - URL to validate
76
+ * @returns True if valid MySQL URL
77
+ */
78
+ private isValidMysqlUrl;
79
+ /**
80
+ * Masks sensitive parts of connection string for logging.
81
+ *
82
+ * @private
83
+ * @param connectionString - Original connection string
84
+ * @returns Masked connection string
85
+ */
86
+ private maskConnectionString;
87
+ /**
88
+ * Gets database provider status and configuration info.
89
+ *
90
+ * @returns Database provider status information
91
+ */
92
+ getDatabaseInfo(): {
93
+ connectionString?: string;
94
+ tableName?: string;
95
+ isImplemented: boolean;
96
+ requiredPackages: string[];
97
+ recommendedORM: string[];
98
+ documentationPath: string;
99
+ schemaPath: string;
100
+ };
101
+ }
102
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../../src/domain/featureFlags/providers/database.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,2BAA2B,CACtC,cAAc,SAAS,MAAM,CAC7B,SAAQ,mBAAmB,CAAC,cAAc,CAAC;IAC3C;;;;;OAKG;gBAED,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACzC,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAOpD;;;;;;;OAOG;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;IAyCF;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,wBAAwB;IA0BhC,OAAO,CAAC,sBAAsB;IAQ9B;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;;OAIG;IACH,eAAe,IAAI;QACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,OAAO,CAAC;QACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC;KACpB;CAaF"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Feature Flag Provider Factory
3
+ *
4
+ * Factory class for creating and managing feature flag providers.
5
+ * This will be moved to @plyaz/core when the package structure is finalized.
6
+ *
7
+ * @fileoverview Provider factory for feature flag system
8
+ * @version 1.0.0
9
+ */
10
+ import type { FeatureFlagConfig, FeatureFlagProvider, FeatureFlagValue } from '@plyaz/types';
11
+ import { MemoryFeatureFlagProvider } from './memory';
12
+ import { FileFeatureFlagProvider } from './file';
13
+ import { RedisFeatureFlagProvider } from './redis';
14
+ import { ApiFeatureFlagProvider } from './api';
15
+ import { DatabaseFeatureFlagProvider } from './database';
16
+ /**
17
+ * Registry of available provider classes.
18
+ */
19
+ declare const PROVIDER_REGISTRY: {
20
+ readonly memory: typeof MemoryFeatureFlagProvider;
21
+ readonly file: typeof FileFeatureFlagProvider;
22
+ readonly redis: typeof RedisFeatureFlagProvider;
23
+ readonly api: typeof ApiFeatureFlagProvider;
24
+ readonly database: typeof DatabaseFeatureFlagProvider;
25
+ };
26
+ /**
27
+ * Type for available provider names.
28
+ */
29
+ export type ProviderType = keyof typeof PROVIDER_REGISTRY;
30
+ /**
31
+ * Feature flag provider factory for creating provider instances.
32
+ *
33
+ * @class FeatureFlagProviderFactory
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const provider = FeatureFlagProviderFactory.create({
38
+ * provider: 'memory',
39
+ * isCacheEnabled: true,
40
+ * cacheTtl: 300,
41
+ * });
42
+ * ```
43
+ */
44
+ export declare class FeatureFlagProviderFactory {
45
+ /**
46
+ * Creates a new feature flag provider instance based on configuration.
47
+ *
48
+ * @param config - Provider configuration
49
+ * @param features - Record of feature flag keys to their default values
50
+ * @returns Configured provider instance
51
+ * @throws Error if provider type is unsupported or configuration is invalid
52
+ */
53
+ static create<FeatureFlagKey extends string>(config: FeatureFlagConfig<FeatureFlagKey>, features: Record<FeatureFlagKey, FeatureFlagValue>): FeatureFlagProvider<FeatureFlagKey>;
54
+ /**
55
+ * Creates a provider with automatic initialization.
56
+ *
57
+ * @param config - Provider configuration
58
+ * @param features - Record of feature flag keys to their default values
59
+ * @returns Promise resolving to initialized provider instance
60
+ */
61
+ static createAndInitialize<FeatureFlagKey extends string>(config: FeatureFlagConfig<FeatureFlagKey>, features: Record<FeatureFlagKey, FeatureFlagValue>): Promise<FeatureFlagProvider<FeatureFlagKey>>;
62
+ /**
63
+ * Gets a list of all supported provider types.
64
+ *
65
+ * @returns Array of supported provider names
66
+ */
67
+ static getSupportedProviders(): ProviderType[];
68
+ /**
69
+ * Checks if a provider type is supported.
70
+ *
71
+ * @param providerType - Provider type to check
72
+ * @returns True if provider type is supported
73
+ */
74
+ static isProviderSupported(providerType: string): providerType is ProviderType;
75
+ /**
76
+ * Gets provider information including implementation status.
77
+ *
78
+ * @returns Record of provider information
79
+ */
80
+ static getProvidersInfo(): Record<ProviderType, {
81
+ name: string;
82
+ isImplemented: boolean;
83
+ description: string;
84
+ requirements?: string[];
85
+ }>;
86
+ /**
87
+ * Creates a default memory provider for testing environments.
88
+ *
89
+ * @param features - Record of feature flag keys to their default values
90
+ * @param overrides - Optional configuration overrides
91
+ * @returns Memory provider instance
92
+ */
93
+ static createDefault<FeatureFlagKey extends string>(features: Record<FeatureFlagKey, FeatureFlagValue>, overrides?: Partial<FeatureFlagConfig<FeatureFlagKey>>): FeatureFlagProvider<FeatureFlagKey>;
94
+ /**
95
+ * Validates provider configuration before instantiation.
96
+ *
97
+ * @private
98
+ * @param config - Configuration to validate
99
+ * @throws Error if configuration is invalid
100
+ */
101
+ private static validateConfig;
102
+ /**
103
+ * Validates provider-specific configuration requirements.
104
+ *
105
+ * @private
106
+ * @param config - Configuration to validate
107
+ * @throws Error if provider-specific configuration is invalid
108
+ */
109
+ private static validateProviderSpecificConfig;
110
+ private static validateFileConfig;
111
+ private static validateRedisConfig;
112
+ private static validateApiConfig;
113
+ private static validateDatabaseConfig;
114
+ }
115
+ export {};
116
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/domain/featureFlags/providers/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,QAAA,MAAM,iBAAiB;;;;;;CAYtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAE1D;;;;;;;;;;;;;GAaG;AACH,qBAAa,0BAA0B;IACrC;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CAAC,cAAc,SAAS,MAAM,EACzC,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACzC,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,GACjD,mBAAmB,CAAC,cAAc,CAAC;IAsBtC;;;;;;OAMG;WACU,mBAAmB,CAAC,cAAc,SAAS,MAAM,EAC5D,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACzC,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,GACjD,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAM/C;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,IAAI,YAAY,EAAE;IAI9C;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,IAAI,YAAY;IAI9E;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAC/B,YAAY,EACZ;QACE,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,OAAO,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CACF;IAyCD;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,CAAC,cAAc,SAAS,MAAM,EAChD,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,EAClD,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,GACrD,mBAAmB,CAAC,cAAc,CAAC;IActC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAgC7B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,8BAA8B;IAmB7C,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAQjC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAQlC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAQhC,OAAO,CAAC,MAAM,CAAC,sBAAsB;CAOtC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * File Feature Flag Provider
3
+ *
4
+ * File-based provider implementation supporting JSON and YAML configuration files.
5
+ * This will be moved to @plyaz/core when the package structure is finalized.
6
+ *
7
+ * @fileoverview File provider implementation for feature flags
8
+ * @version 1.0.0
9
+ */
10
+ import type { FeatureFlag, FeatureFlagRule, FeatureFlagConfig, FeatureFlagValue } from '@plyaz/types';
11
+ import { FeatureFlagProvider } from '../provider';
12
+ /**
13
+ * File-based feature flag provider supporting JSON and YAML formats.
14
+ *
15
+ * @class FileFeatureFlagProvider
16
+ * @extends {FeatureFlagProvider}
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const provider = new FileFeatureFlagProvider<FeatureFlagKey>({
21
+ * provider: 'file',
22
+ * fileConfig: {
23
+ * filePath: './config/feature-flags.json',
24
+ * format: 'json',
25
+ * shouldWatchForChanges: true,
26
+ * },
27
+ * isCacheEnabled: true,
28
+ * cacheTtl: 60,
29
+ * }, FEATURES);
30
+ *
31
+ * await provider.initialize();
32
+ * const isEnabled = await provider.isEnabled('AUTH_GOOGLE');
33
+ * ```
34
+ */
35
+ export declare class FileFeatureFlagProvider<FeatureFlagKey extends string> extends FeatureFlagProvider<FeatureFlagKey> {
36
+ private fileWatcher?;
37
+ /**
38
+ * Creates a new file feature flag provider.
39
+ *
40
+ * @param config - Provider configuration with file settings
41
+ * @param features - Record of feature flag keys to their default values
42
+ */
43
+ constructor(config: FeatureFlagConfig<FeatureFlagKey>, features: Record<FeatureFlagKey, FeatureFlagValue>);
44
+ /**
45
+ * Fetches flags and rules from the configuration file.
46
+ *
47
+ * @protected
48
+ * @returns Promise resolving to flags and rules from file
49
+ */
50
+ protected fetchData(): Promise<{
51
+ flags: FeatureFlag<FeatureFlagKey>[];
52
+ rules: FeatureFlagRule<FeatureFlagKey>[];
53
+ }>;
54
+ /**
55
+ * Validates the file provider configuration.
56
+ *
57
+ * @private
58
+ * @throws Error if configuration is invalid
59
+ */
60
+ private validateConfig;
61
+ /**
62
+ * Sets up file watching for hot reload if enabled.
63
+ *
64
+ * @private
65
+ */
66
+ private setupFileWatcher;
67
+ /**
68
+ * Disposes of the file provider and stops file watching.
69
+ */
70
+ dispose(): void;
71
+ /**
72
+ * Gets information about the file provider.
73
+ *
74
+ * @returns File provider information
75
+ */
76
+ getFileInfo(): {
77
+ filePath?: string;
78
+ format?: string;
79
+ isWatchEnabled: boolean;
80
+ isImplemented: boolean;
81
+ requiredImplementation: string[];
82
+ };
83
+ }
84
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../../src/domain/featureFlags/providers/file.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,uBAAuB,CAClC,cAAc,SAAS,MAAM,CAC7B,SAAQ,mBAAmB,CAAC,cAAc,CAAC;IAC3C,OAAO,CAAC,WAAW,CAAC,CAAiC;IAErD;;;;;OAKG;gBAED,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACzC,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAQpD;;;;;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;IAsCF;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,IAAI,IAAI;IAUf;;;;OAIG;IACH,WAAW,IAAI;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,OAAO,CAAC;QACxB,aAAa,EAAE,OAAO,CAAC;QACvB,sBAAsB,EAAE,MAAM,EAAE,CAAC;KAClC;CAeF"}