@plyaz/core 1.0.3 → 1.1.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 CHANGED
@@ -4,6 +4,11 @@
4
4
 
5
5
  The `@plyaz/core` package serves as the orchestration layer that combines functionality from specialized packages to provide core business logic, domain models, and SDK foundations.
6
6
 
7
+ 📚 **Full Documentation**:
8
+ - [Core Package Overview](https://plyaz.atlassian.net/wiki/spaces/SD/pages/37257227/Core+Package)
9
+ - [Feature Flag System](https://plyaz.atlassian.net/wiki/spaces/SD/pages/44859395)
10
+ - [Cache System](https://plyaz.atlassian.net/wiki/spaces/SD/pages/44892180)
11
+
7
12
  ## 🎯 Key Objectives
8
13
 
9
14
  - **Business Logic Orchestration**: Centralize core business logic that coordinates between specialized packages
@@ -52,27 +57,34 @@ import { createLogger } from '@plyaz/logger';
52
57
  │ └── contracts/ # External service contracts
53
58
  ```
54
59
 
55
- ## 🚀 Currently Available Features
56
-
57
- ### Feature Flag System
58
- - **Providers**:
59
- - Memory (fully implemented)
60
- - File (fully implemented with JSON/YAML support and hot reload)
61
- - Redis/API/Database (stubs)
62
- - **Frontend**: React hooks and context providers
63
- - **Backend**: NestJS module with service, controller, and repository
64
- - **Engine**: Rule-based evaluation with targeting and rollouts
65
- - **Testing**: Override capabilities for test scenarios
66
- - **Default Behavior**: Uses file provider by default when FEATURES constant not provided
67
-
68
- ### Cache System
69
- - **Strategies**: Memory with LRU eviction (implemented), Redis (stub)
70
- - **Features**: TTL management, statistics, automatic cleanup
71
- - **Integration**: Used internally by feature flag system
72
-
73
- ### Engine Layer
74
- - **Feature Flag Engine**: Complete evaluation logic with rules and conditions
75
- - **Future Engines**: Calculation, Incentive, Validation, Insights (planned)
60
+ ## 🚀 Currently Implemented Features
61
+
62
+ > **Note**: The @plyaz/core package currently has two main features implemented. Additional providers and backend integrations are in development.
63
+
64
+ ### Feature Flag System (Most Complete)
65
+ - **Implemented Providers**:
66
+ - Memory Provider - Fully functional with FEATURES constant
67
+ - File Provider - JSON/YAML support with hot reload capability
68
+ - Redis Provider - Stub only (pending implementation)
69
+ - API Provider - Stub only (pending implementation)
70
+ - Database Provider - Stub only (pending implementation)
71
+ - **Frontend Support**: React hooks and context providers (working)
72
+ - **Backend Support**: NestJS module structure (partial - not fully integrated)
73
+ - **Engine**: Complete rule-based evaluation with targeting and rollouts
74
+ - **Testing**: Full override capabilities for test scenarios
75
+
76
+ ### Cache System (Partially Complete)
77
+ - **Implemented Strategies**:
78
+ - Memory Strategy - LRU eviction with TTL management
79
+ - Redis Strategy - Stub only (pending implementation)
80
+ - **Features**: Statistics tracking, automatic cleanup, TTL management
81
+ - **Integration**: Currently used by feature flag system
82
+
83
+ ### 🚧 Pending Implementation
84
+ - **Backend Integration**: Full NestJS module integration
85
+ - **Additional Engines**: Calculation, Incentive, Validation, Insights
86
+ - **SDK Layer**: B2B partner SDK foundation
87
+ - **External Providers**: Redis, API, and Database connections
76
88
 
77
89
  ### File Provider Configuration
78
90
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/base/cache/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAiB,WAAW,EAAc,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE9F;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,YAAY;IAQX,OAAO,CAAC,MAAM;IAP1B,OAAO,CAAC,QAAQ,CAAgB;IAEhC;;;;OAIG;gBACiB,MAAM,EAAE,WAAW;IAIvC;;;;;;;;OAQG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAahE;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAe5C;;;;;OAKG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;;;OAKG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAexC;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAI5C;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IActB;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/base/cache/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAiB,WAAW,EAAc,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE9F;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,YAAY;IAQX,OAAO,CAAC,MAAM;IAP1B,OAAO,CAAC,QAAQ,CAAgB;IAEhC;;;;OAIG;gBACiB,MAAM,EAAE,WAAW;IAIvC;;;;;;;;OAQG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAahE;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAe5C;;;;;OAKG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;;;;OAKG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAexC;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAI5C;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IActB;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/base/cache/strategies/memory.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG7F;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA2C;IAEpE;;;;OAIG;gBACS,MAAM,GAAE,iBAAsB;IAc1C;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9D;;;;;OAKG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAcxD;;;;;OAKG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAcrC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAMpB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;CAyB3B"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/base/cache/strategies/memory.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAG7F;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA2C;IAEpE;;;;OAIG;gBACS,MAAM,GAAE,iBAAsB;IAc1C;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9D;;;;;OAKG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAcxD;;;;;OAKG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAcrC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAUpB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;CAyB3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../../src/base/cache/strategies/redis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG5F;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAgB1C,OAAO,CAAC,MAAM;IAf1B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC;;;;OAIG;gBACiB,MAAM,EAAE,gBAAgB;IAO5C;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAc9D;;;;;OAKG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAuBxD;;;;;OAKG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAqBrC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;;;;OAKG;YACW,eAAe;IAc7B;;;;;OAKG;YACW,mBAAmB;IA4BjC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAGtB"}
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../../src/base/cache/strategies/redis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAG5F;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAgB1C,OAAO,CAAC,MAAM;IAf1B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC;;;;OAIG;gBACiB,MAAM,EAAE,gBAAgB;IAO5C;;;;;;OAMG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAc9D;;;;;OAKG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAuBxD;;;;;OAKG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAqBrC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;;;;OAKG;YACW,eAAe;IAc7B;;;;;OAKG;YACW,mBAAmB;IA4BjC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAGtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/domain/featureFlags/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/domain/featureFlags/provider.ts"],"names":[],"mappings":"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"}
@@ -52,6 +52,6 @@ export declare function useFeatureFlagProviderStatus<FeatureFlagKey extends stri
52
52
  isInitialized: boolean;
53
53
  isLoading: boolean;
54
54
  error: Error | null;
55
- lastUpdated: Date | null;
55
+ lastUpdated: Date | null | undefined;
56
56
  };
57
57
  //# sourceMappingURL=useFeatureFlagProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFeatureFlagProvider.d.ts","sourceRoot":"","sources":["../../../../src/frontend/featureFlags/hooks/useFeatureFlagProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAA2B,MAAM,cAAc,CAAC;AAEjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,SAAS,MAAM,KAC1B,mBAAmB,CAAC,cAAc,CAAC,CAWvC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,SAAS,MAAM,KAAK;IAC7E,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B,CAgBA"}
1
+ {"version":3,"file":"useFeatureFlagProvider.d.ts","sourceRoot":"","sources":["../../../../src/frontend/featureFlags/hooks/useFeatureFlagProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAA2B,MAAM,cAAc,CAAC;AAEjF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,SAAS,MAAM,KAC1B,mBAAmB,CAAC,cAAc,CAAC,CAWvC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,SAAS,MAAM,KAAK;IAC7E,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;CACtC,CAgBA"}
@@ -7,22 +7,8 @@
7
7
  * @version 1.0.0
8
8
  */
9
9
  import React from 'react';
10
- import type { FeatureFlagProvider as IFeatureFlagProvider, FeatureFlagConfig } from '@plyaz/types';
11
- /**
12
- * Provider state interface.
13
- */
14
- export interface ProviderState<FeatureFlagKey extends string> {
15
- provider: IFeatureFlagProvider<FeatureFlagKey> | null;
16
- isInitialized: boolean;
17
- isLoading: boolean;
18
- error: Error | null;
19
- lastUpdated: Date | null;
20
- }
21
- export interface UseFeatureFlagProviderState<FeatureFlagKey extends string> {
22
- state: ProviderState<FeatureFlagKey>;
23
- setState: React.Dispatch<React.SetStateAction<ProviderState<FeatureFlagKey>>>;
24
- initializeProvider: () => Promise<void>;
25
- }
10
+ import type { FeatureFlagConfig } from '@plyaz/types';
11
+ import type { ProviderState, UseFeatureFlagProviderState } from './types';
26
12
  /**
27
13
  * Hook for managing feature flag provider state and initialization.
28
14
  */
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureFlagProviderHelpers.d.ts","sourceRoot":"","sources":["../../../../src/frontend/featureFlags/providers/FeatureFlagProviderHelpers.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAA2C,MAAM,OAAO,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,IAAI,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAInG;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,cAAc,SAAS,MAAM;IAC1D,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACtD,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B,CAAC,cAAc,SAAS,MAAM;IACxE,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACrC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC9E,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,cAAc,SAAS,MAAM,EACvE,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACzC,OAAO,CAAC,EAAE,MAAM,IAAI,EACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC/B,2BAA2B,CAAC,cAAc,CAAC,CA8C7C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,SAAS,MAAM,EACnE,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,EACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,GAC5E,IAAI,CAeN;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,OAAO,EAClB,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,GACrC,KAAK,CAAC,YAAY,GAAG,IAAI,CAW3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,EACzE,KAAK,CAAC,EAAE,MAAM,IAAI,GACjB,KAAK,CAAC,YAAY,GAAG,IAAI,CAO3B"}
1
+ {"version":3,"file":"FeatureFlagProviderHelpers.d.ts","sourceRoot":"","sources":["../../../../src/frontend/featureFlags/providers/FeatureFlagProviderHelpers.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAA2C,MAAM,OAAO,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,OAAO,KAAK,EAAE,aAAa,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAE1E;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,cAAc,SAAS,MAAM,EACvE,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,EACzC,OAAO,CAAC,EAAE,MAAM,IAAI,EACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC/B,2BAA2B,CAAC,cAAc,CAAC,CA8C7C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,SAAS,MAAM,EACnE,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,EACpC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,GAC5E,IAAI,CAeN;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,OAAO,EAClB,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,GACrC,KAAK,CAAC,YAAY,GAAG,IAAI,CAW3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,EACzE,KAAK,CAAC,EAAE,MAAM,IAAI,GACjB,KAAK,CAAC,YAAY,GAAG,IAAI,CAO3B"}
@@ -0,0 +1,21 @@
1
+ import type React from 'react';
2
+ import type { FeatureFlagProvider as IFeatureFlagProvider } from '@plyaz/types';
3
+ /**
4
+ * Provider state interface.
5
+ */
6
+ export interface ProviderState<FeatureFlagKey extends string> {
7
+ provider: IFeatureFlagProvider<FeatureFlagKey> | null;
8
+ isInitialized: boolean;
9
+ isLoading: boolean;
10
+ error: Error | null;
11
+ lastUpdated: Date | null;
12
+ }
13
+ /**
14
+ * Hook for managing feature flag provider state and initialization.
15
+ */
16
+ export interface UseFeatureFlagProviderState<FeatureFlagKey extends string> {
17
+ state: ProviderState<FeatureFlagKey>;
18
+ setState: React.Dispatch<React.SetStateAction<ProviderState<FeatureFlagKey>>>;
19
+ initializeProvider: () => Promise<void>;
20
+ }
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/frontend/featureFlags/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,mBAAmB,IAAI,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,cAAc,SAAS,MAAM;IAC1D,QAAQ,EAAE,oBAAoB,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACtD,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B,CAAC,cAAc,SAAS,MAAM;IACxE,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACrC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC9E,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC"}
package/dist/index.cjs CHANGED
@@ -51,24 +51,21 @@ var __decorateClass = (decorators, target, key, kind) => {
51
51
  };
52
52
  var __decorateParam = (index, decorator) => (target, key) => decorator(target, key, index);
53
53
  var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
54
-
55
- // src/utils/common/hash.ts
56
54
  function hashString(str) {
57
- const HASH_SHIFT = 5;
58
- let hash = 0;
55
+ if (str.length === 0) return 0;
56
+ let hash = config.FNV_CONSTANTS.FNV_32_OFFSET;
59
57
  for (let i = 0; i < str.length; i++) {
60
- const char = str.charCodeAt(i);
61
- hash = (hash << HASH_SHIFT) - hash + char;
62
- hash = hash & hash;
58
+ hash ^= str.charCodeAt(i);
59
+ hash = Math.imul(hash, config.FNV_CONSTANTS.FNV_32_PRIME) >>> 0;
63
60
  }
64
- return Math.abs(hash);
61
+ return hash >>> 0;
65
62
  }
66
63
  __name(hashString, "hashString");
67
64
  function isInRollout(identifier, percentage) {
68
- if (percentage >= 100) return true;
65
+ if (percentage >= config.MATH_CONSTANTS.PERCENTAGE_MAX) return true;
69
66
  if (percentage <= 0) return false;
70
67
  const hash = hashString(identifier);
71
- return hash % 100 < percentage;
68
+ return hash % config.MATH_CONSTANTS.PERCENTAGE_MAX < percentage;
72
69
  }
73
70
  __name(isInRollout, "isInRollout");
74
71
  function createRolloutIdentifier(featureKey, userId) {
@@ -97,23 +94,22 @@ var HashUtils = {
97
94
  * @param totalBuckets - Total number of buckets (default: 100)
98
95
  * @returns true if identifier is in the bucket range
99
96
  */
100
- isInBucketRange: /* @__PURE__ */ __name((identifier, startBucket, endBucket, totalBuckets = 100) => {
97
+ isInBucketRange: /* @__PURE__ */ __name((identifier, startBucket, endBucket, totalBuckets = config.MATH_CONSTANTS.PERCENTAGE_MAX) => {
101
98
  const bucket = hashString(identifier) % totalBuckets;
102
99
  return bucket >= startBucket && bucket <= endBucket;
103
100
  }, "isInBucketRange"),
104
101
  /**
105
102
  * Creates a deterministic random seed from a string.
103
+ * Uses the improved hash function and ensures the seed is within
104
+ * the safe range for JavaScript's Math.random seeding.
106
105
  *
107
106
  * @param str - String to convert to seed
108
- * @returns Deterministic seed value
107
+ * @returns Deterministic seed value (0 to 2^31-1)
109
108
  */
110
109
  createSeed: /* @__PURE__ */ __name((str) => {
111
- const SAFE_INT = 2147483647;
112
- return hashString(str) % SAFE_INT;
110
+ return hashString(str) % config.HASH_SEED_CONSTANTS.MAX_SAFE_SEED;
113
111
  }, "createSeed")
114
112
  };
115
-
116
- // src/utils/common/values.ts
117
113
  function isStringFalsy(value) {
118
114
  if (value === "") return true;
119
115
  const lower = value.toLowerCase().trim();
@@ -179,7 +175,7 @@ var ValueUtils = {
179
175
  */
180
176
  isValidPercentage: /* @__PURE__ */ __name((value) => {
181
177
  if (typeof value !== "number") return false;
182
- return !isNaN(value) && isFinite(value) && value >= 0 && value <= 100;
178
+ return !isNaN(value) && isFinite(value) && value >= 0 && value <= config.MATH_CONSTANTS.PERCENTAGE_MAX;
183
179
  }, "isValidPercentage"),
184
180
  /**
185
181
  * Clamps a number to a specific range.
@@ -225,8 +221,6 @@ var ValueUtils = {
225
221
  return current;
226
222
  }, "getNestedProperty")
227
223
  };
228
-
229
- // src/utils/featureFlags/context.ts
230
224
  var FeatureFlagContextBuilder = class _FeatureFlagContextBuilder {
231
225
  static {
232
226
  __name(this, "FeatureFlagContextBuilder");
@@ -422,7 +416,7 @@ var ContextUtils = {
422
416
  if (context.platform && !["web", "mobile", "desktop"].includes(context.platform)) {
423
417
  errors.push("Platform must be web, mobile, or desktop");
424
418
  }
425
- if (context.country && context.country.length !== 2) {
419
+ if (context.country && context.country.length !== config.ISO_STANDARDS.ISO_COUNTRY_CODE_LENGTH) {
426
420
  errors.push("Country must be a 2-letter ISO country code");
427
421
  }
428
422
  return {
@@ -1141,6 +1135,9 @@ var MemoryCacheStrategy = class {
1141
1135
  this.cleanupTimer = setInterval(() => {
1142
1136
  this.cleanupExpiredEntries();
1143
1137
  }, this.cleanupInterval);
1138
+ if (this.cleanupTimer && typeof this.cleanupTimer.unref === "function") {
1139
+ this.cleanupTimer.unref();
1140
+ }
1144
1141
  }
1145
1142
  /**
1146
1143
  * Removes expired entries from the cache.
@@ -1189,8 +1186,6 @@ var MemoryCacheStrategy = class {
1189
1186
  }
1190
1187
  }
1191
1188
  };
1192
-
1193
- // src/base/cache/strategies/redis.ts
1194
1189
  var RedisCacheStrategy = class {
1195
1190
  /**
1196
1191
  * Creates a new Redis cache strategy.
@@ -1228,7 +1223,7 @@ var RedisCacheStrategy = class {
1228
1223
  const redisKey = this.buildRedisKey(key);
1229
1224
  const serializedEntry = JSON.stringify(entry);
1230
1225
  const ttlMs = entry.expiresAt - Date.now();
1231
- const ttlSeconds = Math.max(1, Math.ceil(ttlMs / 1e3));
1226
+ const ttlSeconds = Math.max(1, Math.ceil(ttlMs / config.TIME_CONSTANTS.MILLISECONDS_PER_SECOND));
1232
1227
  await this.client.set(redisKey, serializedEntry, "EX", ttlSeconds);
1233
1228
  this.stats.setCount++;
1234
1229
  }
@@ -1399,7 +1394,7 @@ var CacheManager = class {
1399
1394
  const finalTtl = ttl ?? this.config.ttl;
1400
1395
  const entry = {
1401
1396
  data: value,
1402
- expiresAt: Date.now() + finalTtl * 1e3,
1397
+ expiresAt: Date.now() + finalTtl * config.TIME_CONSTANTS.MILLISECONDS_PER_SECOND,
1403
1398
  createdAt: Date.now()
1404
1399
  };
1405
1400
  await this.strategy.set(key, entry);
@@ -1492,8 +1487,6 @@ var CacheManager = class {
1492
1487
  await this.strategy.dispose?.();
1493
1488
  }
1494
1489
  };
1495
-
1496
- // src/domain/featureFlags/provider.ts
1497
1490
  var FeatureFlagProvider = class {
1498
1491
  /**
1499
1492
  * Creates a new feature flag provider.
@@ -1728,7 +1721,7 @@ var FeatureFlagProvider = class {
1728
1721
  void this.refresh().catch((error) => {
1729
1722
  this.log("Auto-refresh failed:", error);
1730
1723
  });
1731
- }, this.config.refreshInterval * 1e3);
1724
+ }, this.config.refreshInterval * config.TIME_CONSTANTS.MILLISECONDS_PER_SECOND);
1732
1725
  }
1733
1726
  }
1734
1727
  /**
@@ -2372,7 +2365,7 @@ var FileFeatureFlagProvider = class extends FeatureFlagProvider {
2372
2365
  };
2373
2366
  let content;
2374
2367
  if (format === "json") {
2375
- content = JSON.stringify(defaultData, null, 2);
2368
+ content = JSON.stringify(defaultData, null, config.FORMAT_CONSTANTS.JSON_INDENT_SPACES);
2376
2369
  } else {
2377
2370
  content = yaml__namespace.stringify(defaultData);
2378
2371
  }
@@ -2480,7 +2473,7 @@ var FileFeatureFlagProvider = class extends FeatureFlagProvider {
2480
2473
  try {
2481
2474
  let content;
2482
2475
  if (format === "json") {
2483
- content = JSON.stringify(fileData, null, 2);
2476
+ content = JSON.stringify(fileData, null, config.FORMAT_CONSTANTS.JSON_INDENT_SPACES);
2484
2477
  } else {
2485
2478
  content = yaml__namespace.stringify(fileData);
2486
2479
  }
@@ -4018,7 +4011,7 @@ function useFeatureFlagProviderStatus() {
4018
4011
  isInitialized: context.isInitialized,
4019
4012
  isLoading: context.isLoading,
4020
4013
  error: context.error,
4021
- lastUpdated: context.lastUpdated
4014
+ lastUpdated: context.lastUpdated ? new Date(context.lastUpdated) : void 0
4022
4015
  };
4023
4016
  }
4024
4017
  __name(useFeatureFlagProviderStatus, "useFeatureFlagProviderStatus");