@rudderstack/integrations-lib 0.2.43 → 0.2.44

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 (67) hide show
  1. package/build/feature-flags/core/config.d.ts +14 -0
  2. package/build/feature-flags/core/config.d.ts.map +1 -0
  3. package/build/feature-flags/core/config.js +111 -0
  4. package/build/feature-flags/core/index.d.ts +4 -0
  5. package/build/feature-flags/core/index.d.ts.map +1 -0
  6. package/build/feature-flags/core/index.js +10 -0
  7. package/build/feature-flags/core/service.d.ts +19 -0
  8. package/build/feature-flags/core/service.d.ts.map +1 -0
  9. package/build/feature-flags/core/service.js +106 -0
  10. package/build/feature-flags/core/utils.d.ts +8 -0
  11. package/build/feature-flags/core/utils.d.ts.map +1 -0
  12. package/build/feature-flags/core/utils.js +40 -0
  13. package/build/feature-flags/flags/defaults.d.ts +3 -0
  14. package/build/feature-flags/flags/defaults.d.ts.map +1 -0
  15. package/build/feature-flags/flags/defaults.js +24 -0
  16. package/build/feature-flags/flags/index.d.ts +5 -0
  17. package/build/feature-flags/flags/index.d.ts.map +1 -0
  18. package/build/feature-flags/flags/index.js +10 -0
  19. package/build/feature-flags/flags/interfaces.d.ts +12 -0
  20. package/build/feature-flags/flags/interfaces.d.ts.map +1 -0
  21. package/build/feature-flags/flags/interfaces.js +3 -0
  22. package/build/feature-flags/flags/loader.d.ts +14 -0
  23. package/build/feature-flags/flags/loader.d.ts.map +1 -0
  24. package/build/feature-flags/flags/loader.js +37 -0
  25. package/build/feature-flags/flags/registry.d.ts +12 -0
  26. package/build/feature-flags/flags/registry.d.ts.map +1 -0
  27. package/build/feature-flags/flags/registry.js +38 -0
  28. package/build/feature-flags/index.d.ts +9 -0
  29. package/build/feature-flags/index.d.ts.map +1 -0
  30. package/build/feature-flags/index.js +19 -0
  31. package/build/feature-flags/providers/factory.d.ts +7 -0
  32. package/build/feature-flags/providers/factory.d.ts.map +1 -0
  33. package/build/feature-flags/providers/factory.js +25 -0
  34. package/build/feature-flags/providers/flagsmith/index.d.ts +2 -0
  35. package/build/feature-flags/providers/flagsmith/index.d.ts.map +1 -0
  36. package/build/feature-flags/providers/flagsmith/index.js +6 -0
  37. package/build/feature-flags/providers/flagsmith/provider.d.ts +13 -0
  38. package/build/feature-flags/providers/flagsmith/provider.d.ts.map +1 -0
  39. package/build/feature-flags/providers/flagsmith/provider.js +73 -0
  40. package/build/feature-flags/providers/flagsmith/types.d.ts +1 -0
  41. package/build/feature-flags/providers/flagsmith/types.d.ts.map +1 -0
  42. package/build/feature-flags/providers/flagsmith/types.js +4 -0
  43. package/build/feature-flags/providers/index.d.ts +5 -0
  44. package/build/feature-flags/providers/index.d.ts.map +1 -0
  45. package/build/feature-flags/providers/index.js +10 -0
  46. package/build/feature-flags/providers/interfaces.d.ts +11 -0
  47. package/build/feature-flags/providers/interfaces.d.ts.map +1 -0
  48. package/build/feature-flags/providers/interfaces.js +3 -0
  49. package/build/feature-flags/providers/local/config.d.ts +4 -0
  50. package/build/feature-flags/providers/local/config.d.ts.map +1 -0
  51. package/build/feature-flags/providers/local/config.js +11 -0
  52. package/build/feature-flags/providers/local/index.d.ts +3 -0
  53. package/build/feature-flags/providers/local/index.d.ts.map +1 -0
  54. package/build/feature-flags/providers/local/index.js +6 -0
  55. package/build/feature-flags/providers/local/provider.d.ts +17 -0
  56. package/build/feature-flags/providers/local/provider.d.ts.map +1 -0
  57. package/build/feature-flags/providers/local/provider.js +105 -0
  58. package/build/feature-flags/providers/local/types.d.ts +4 -0
  59. package/build/feature-flags/providers/local/types.d.ts.map +1 -0
  60. package/build/feature-flags/providers/local/types.js +3 -0
  61. package/build/feature-flags/types.d.ts +96 -0
  62. package/build/feature-flags/types.d.ts.map +1 -0
  63. package/build/feature-flags/types.js +11 -0
  64. package/build/index.d.ts +1 -0
  65. package/build/index.d.ts.map +1 -1
  66. package/build/index.js +2 -1
  67. package/package.json +3 -2
@@ -0,0 +1,14 @@
1
+ import type { FeatureFlagConfig, ResolvedFeatureFlagConfig } from '../types';
2
+ export declare class ConfigResolver {
3
+ static resolveConfig(config: Partial<FeatureFlagConfig>): ResolvedFeatureFlagConfig;
4
+ static initializeFlagsmithSDK(config: ResolvedFeatureFlagConfig): void;
5
+ private static getConfigValue;
6
+ private static parseBoolean;
7
+ private static parseNumber;
8
+ static parseEnvKey(envKey: string): {
9
+ prefix: string;
10
+ workspace?: string;
11
+ flag?: string;
12
+ };
13
+ }
14
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/feature-flags/core/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAE7E,qBAAa,cAAc;IACzB,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,yBAAyB;IA2CnF,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI;IAuBtE,OAAO,CAAC,MAAM,CAAC,cAAc;IAsB7B,OAAO,CAAC,MAAM,CAAC,YAAY;IAW3B,OAAO,CAAC,MAAM,CAAC,WAAW;IAY1B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;CA4C1F"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigResolver = void 0;
4
+ const featureflag_sdk_node_1 = require("@rudderstack/featureflag-sdk-node");
5
+ class ConfigResolver {
6
+ static resolveConfig(config) {
7
+ return {
8
+ provider: this.getConfigValue(config.provider, 'FEATURE_FLAG_PROVIDER', 'local'),
9
+ apiKey: this.getConfigValue(config.apiKey, 'FEATURE_FLAG_API_KEY', undefined),
10
+ enableLocalEvaluation: this.getConfigValue(config.enableLocalEvaluation, 'FEATURE_FLAG_ENABLE_LOCAL_EVALUATION', false, this.parseBoolean),
11
+ enableCache: this.getConfigValue(config.enableCache, 'FEATURE_FLAG_ENABLE_CACHE', true, this.parseBoolean),
12
+ cacheTtlSeconds: this.getConfigValue(config.cacheTtlSeconds, 'FEATURE_FLAG_CACHE_TTL_SECONDS', 60, this.parseNumber),
13
+ timeoutSeconds: this.getConfigValue(config.timeoutSeconds, 'FEATURE_FLAG_TIMEOUT_SECONDS', 60, this.parseNumber),
14
+ retryAttempts: this.getConfigValue(config.retryAttempts, 'FEATURE_FLAG_RETRY_ATTEMPTS', 3, this.parseNumber),
15
+ enableAnalytics: this.getConfigValue(config.enableAnalytics, 'FEATURE_FLAG_ENABLE_ANALYTICS', true, this.parseBoolean),
16
+ };
17
+ }
18
+ static initializeFlagsmithSDK(config) {
19
+ if (config.provider !== 'flagsmith' || !config.apiKey) {
20
+ throw new Error('API key is required for Flagsmith provider. Set it via config.apiKey or FEATURE_FLAG_API_KEY environment variable.');
21
+ }
22
+ (0, featureflag_sdk_node_1.initFeatureFlagClient)({
23
+ provider: {
24
+ type: 'flagsmith',
25
+ apiKey: config.apiKey,
26
+ timeoutInSeconds: config.timeoutSeconds,
27
+ retryAttempts: config.retryAttempts,
28
+ enableLocalEvaluation: config.enableLocalEvaluation,
29
+ enableAnalytics: config.enableAnalytics,
30
+ },
31
+ cache: {
32
+ enabled: config.enableCache,
33
+ ttlInSeconds: config.cacheTtlSeconds,
34
+ },
35
+ });
36
+ }
37
+ static getConfigValue(configValue, envKey, defaultValue, parser) {
38
+ const envValue = process.env[envKey];
39
+ if (envValue !== undefined) {
40
+ if (parser) {
41
+ try {
42
+ return parser(envValue);
43
+ }
44
+ catch {
45
+ // Fall back to config/default on parse error
46
+ }
47
+ }
48
+ else {
49
+ return envValue;
50
+ }
51
+ }
52
+ return configValue !== undefined ? configValue : defaultValue;
53
+ }
54
+ static parseBoolean(value) {
55
+ const lowerValue = value.toLowerCase().trim();
56
+ if (lowerValue === 'true' || lowerValue === '1' || lowerValue === 'yes') {
57
+ return true;
58
+ }
59
+ if (lowerValue === 'false' || lowerValue === '0' || lowerValue === 'no') {
60
+ return false;
61
+ }
62
+ throw new Error(`Invalid boolean value: "${value}"`);
63
+ }
64
+ static parseNumber(value) {
65
+ const numValue = Number(value.trim());
66
+ if (Number.isNaN(numValue)) {
67
+ throw new Error(`Invalid number value: "${value}"`);
68
+ }
69
+ return numValue;
70
+ }
71
+ // Utility for parsing environment variables
72
+ // Supports both patterns:
73
+ // - FEATURE_FLAG_LOCAL_ENABLE_FEATURE (global flag with single underscore)
74
+ // - FEATURE_FLAG_LOCAL__workspace123__API__TIMEOUT__MS (workspace flag with double underscore)
75
+ static parseEnvKey(envKey) {
76
+ // Check for workspace-specific pattern first (contains double underscore)
77
+ if (envKey.includes('__')) {
78
+ const parts = envKey.split('__');
79
+ if (parts.length < 3) {
80
+ throw new Error(`Invalid workspace environment key format: "${envKey}". Expected format: PREFIX__WORKSPACE__FLAG`);
81
+ }
82
+ const prefix = parts[0];
83
+ const workspace = parts[1];
84
+ const flag = parts.slice(2).join('__');
85
+ return {
86
+ prefix,
87
+ workspace,
88
+ flag,
89
+ };
90
+ }
91
+ // Global pattern (single underscore)
92
+ const underscoreIndex = envKey.indexOf('_');
93
+ if (underscoreIndex === -1) {
94
+ throw new Error(`Invalid environment key format: "${envKey}". Expected format: PREFIX_FLAG or PREFIX__WORKSPACE__FLAG`);
95
+ }
96
+ // Find the last part after the prefix
97
+ const prefixParts = envKey.split('_');
98
+ if (prefixParts.length < 4) {
99
+ throw new Error(`Invalid global environment key format: "${envKey}". Expected format: FEATURE_FLAG_LOCAL_FLAG`);
100
+ }
101
+ // For FEATURE_FLAG_LOCAL_FLAG_NAME, prefix is "FEATURE_FLAG_LOCAL", flag is "FLAG_NAME"
102
+ const prefix = prefixParts.slice(0, 3).join('_'); // FEATURE_FLAG_LOCAL
103
+ const flag = prefixParts.slice(3).join('_'); // Everything after
104
+ return {
105
+ prefix,
106
+ flag,
107
+ };
108
+ }
109
+ }
110
+ exports.ConfigResolver = ConfigResolver;
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ZlYXR1cmUtZmxhZ3MvY29yZS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNEVBQTBFO0FBRzFFLE1BQWEsY0FBYztJQUN6QixNQUFNLENBQUMsYUFBYSxDQUFDLE1BQWtDO1FBQ3JELE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLHVCQUF1QixFQUFFLE9BQU8sQ0FBQztZQUNoRixNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLHNCQUFzQixFQUFFLFNBQVMsQ0FBQztZQUM3RSxxQkFBcUIsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUN4QyxNQUFNLENBQUMscUJBQXFCLEVBQzVCLHNDQUFzQyxFQUN0QyxLQUFLLEVBQ0wsSUFBSSxDQUFDLFlBQVksQ0FDbEI7WUFDRCxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FDOUIsTUFBTSxDQUFDLFdBQVcsRUFDbEIsMkJBQTJCLEVBQzNCLElBQUksRUFDSixJQUFJLENBQUMsWUFBWSxDQUNsQjtZQUNELGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUNsQyxNQUFNLENBQUMsZUFBZSxFQUN0QixnQ0FBZ0MsRUFDaEMsRUFBRSxFQUNGLElBQUksQ0FBQyxXQUFXLENBQ2pCO1lBQ0QsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQ2pDLE1BQU0sQ0FBQyxjQUFjLEVBQ3JCLDhCQUE4QixFQUM5QixFQUFFLEVBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FDakI7WUFDRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FDaEMsTUFBTSxDQUFDLGFBQWEsRUFDcEIsNkJBQTZCLEVBQzdCLENBQUMsRUFDRCxJQUFJLENBQUMsV0FBVyxDQUNqQjtZQUNELGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUNs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SSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1FBRWhFLE9BQU87WUFDTCxNQUFNO1lBQ04sSUFBSTtTQUNMLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE1SkQsd0NBNEpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5pdEZlYXR1cmVGbGFnQ2xpZW50IH0gZnJvbSAnQHJ1ZGRlcnN0YWNrL2ZlYXR1cmVmbGFnLXNkay1ub2RlJztcbmltcG9ydCB0eXBlIHsgRmVhdHVyZUZsYWdDb25maWcsIFJlc29sdmVkRmVhdHVyZUZsYWdDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb25maWdSZXNvbHZlciB7XG4gIHN0YXRpYyByZXNvbHZlQ29uZmlnKGNvbmZpZzogUGFydGlhbDxGZWF0dXJlRmxhZ0NvbmZpZz4pOiBSZXNvbHZlZEZlYXR1cmVGbGFnQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvdmlkZXI6IHRoaXMuZ2V0Q29uZmlnVmFsdWUoY29uZmlnLnByb3ZpZGVyLCAnRkVBVFVSRV9GTEFHX1BST1ZJREVSJywgJ2xvY2FsJyksXG4gICAgICBhcGlLZXk6IHRoaXMuZ2V0Q29uZmlnVmFsdWUoY29uZmlnLmFwaUtleSwgJ0ZFQVRVUkVfRkxBR19BUElfS0VZJywgdW5kZWZpbmVkKSxcbiAgICAgIGVuYWJsZUxvY2FsRXZhbHVhdGlvbjogdGhpcy5nZXRDb25maWdWYWx1ZShcbiAgICAgICAgY29uZmlnLmVuYWJsZUxvY2FsRXZhbHVhdGlvbixcbiAgICAgICAgJ0ZFQVRVUkVfRkxBR19FTkFCTEVfTE9DQUxfRVZBTFVBVElPTicsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB0aGlzLnBhcnNlQm9vbGVhbixcbiAgICAgICksXG4gICAgICBlbmFibGVDYWNoZTogdGhpcy5nZXRDb25maWdWYWx1ZShcbiAgICAgICAgY29uZmlnLmVuYWJsZUNhY2hlLFxuICAgICAgICAnRkVBVFVSRV9GTEFHX0VOQUJMRV9DQUNIRScsXG4gICAgICAgIHRydWUsXG4gICAgICAgIHRoaXMucGFyc2VCb29sZWFuLFxuICAgICAgKSxcbiAgICAgIGNhY2hlVHRsU2Vjb25kczogdGhpcy5nZXRDb25maWdWYWx1ZShcbiAgICAgICAgY29uZmlnLmNhY2hlVHRsU2Vjb25kcyxcbiAgICAgICAgJ0ZFQVRVUkVfRkxBR19DQUNIRV9UVExfU0VDT05EUycsXG4gICAgICAgIDYwLFxuICAgICAgICB0aGlzLnBhcnNlTnVtYmVyLFxuICAgICAgKSxcbiAgICAgIHRpbWVvdXRTZWNvbmRzOiB0aGlzLmdldENvbmZpZ1ZhbHVlKFxuICAgICAgICBjb25maWcudGltZW91dFNlY29uZHMsXG4gICAgICAgICdGRUFUVVJFX0ZMQUdfVElNRU9VVF9TRUNPTkRTJyxcbiAgICAgICAgNjAsXG4gICAgICAgIHRoaXMucGFyc2VOdW1iZXIsXG4gICAgICApLFxuICAgICAgcmV0cnlBdHRlbXB0czogdGhpcy5nZXRDb25maWdWYWx1ZShcbiAgICAgICAgY29uZmlnLnJldHJ5QXR0ZW1wdHMsXG4gICAgICAgICdGRUFUVVJFX0ZMQUdfUkVUUllfQVRURU1QVFMnLFxuICAgICAgICAzLFxuICAgICAgICB0aGlzLnBhcnNlTnVtYmVyLFxuICAgICAgKSxcbiAgICAgIGVuYWJsZUFuYWx5dGljczogdGhpcy5nZXRDb25maWdWYWx1ZShcbiAgICAgICAgY29uZmlnLmVuYWJsZUFuYWx5dGljcyxcbiAgICAgICAgJ0ZFQVRVUkVfRkxBR19FTkFCTEVfQU5BTFlUSUNTJyxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgdGhpcy5wYXJzZUJvb2xlYW4sXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhbGl6ZUZsYWdzbWl0aFNESyhjb25maWc6IFJlc29sdmVkRmVhdHVyZUZsYWdDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoY29uZmlnLnByb3ZpZGVyICE9PSAnZmxhZ3NtaXRoJyB8fCAhY29uZmlnLmFwaUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQVBJIGtleSBpcyByZXF1aXJlZCBmb3IgRmxhZ3NtaXRoIHByb3ZpZGVyLiBTZXQgaXQgdmlhIGNvbmZpZy5hcGlLZXkgb3IgRkVBVFVSRV9GTEFHX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaW5pdEZlYXR1cmVGbGFnQ2xpZW50KHtcbiAgICAgIHByb3ZpZGVyOiB7XG4gICAgICAgIHR5cGU6ICdmbGFnc21pdGgnLFxuICAgICAgICBhcGlLZXk6IGNvbmZpZy5hcGlLZXksXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHM6IGNvbmZpZy50aW1lb3V0U2Vjb25kcyxcbiAgICAgICAgcmV0cnlBdHRlbXB0czogY29uZmlnLnJldHJ5QXR0ZW1wdHMsXG4gICAgICAgIGVuYWJsZUxvY2FsRXZhbHVhdGlvbjogY29uZmlnLmVuYWJsZUxvY2FsRXZhbHVhdGlvbixcbiAgICAgICAgZW5hYmxlQW5hbHl0aWNzOiBjb25maWcuZW5hYmxlQW5hbHl0aWNzLFxuICAgICAgfSxcbiAgICAgIGNhY2hlOiB7XG4gICAgICAgIGVuYWJsZWQ6IGNvbmZpZy5lbmFibGVDYWNoZSxcbiAgICAgICAgdHRsSW5TZWNvbmRzOiBjb25maWcuY2FjaGVUdGxTZWNvbmRzLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldENvbmZpZ1ZhbHVlPFQ+KFxuICAgIGNvbmZpZ1ZhbHVlOiBUIHwgdW5kZWZpbmVkLFxuICAgIGVudktleTogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogVCxcbiAgICBwYXJzZXI/OiAodmFsdWU6IHN0cmluZykgPT4gVCxcbiAgKTogVCB7XG4gICAgY29uc3QgZW52VmFsdWUgPSBwcm9jZXNzLmVudltlbnZLZXldO1xuICAgIGlmIChlbnZWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocGFyc2VyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlcihlbnZWYWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBjb25maWcvZGVmYXVsdCBvbiBwYXJzZSBlcnJvclxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW52VmFsdWUgYXMgVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnVmFsdWUgIT09IHVuZGVmaW5lZCA/IGNvbmZpZ1ZhbHVlIDogZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCb29sZWFuKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb3dlclZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgaWYgKGxvd2VyVmFsdWUgPT09ICd0cnVlJyB8fCBsb3dlclZhbHVlID09PSAnMScgfHwgbG93ZXJWYWx1ZSA9PT0gJ3llcycpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobG93ZXJWYWx1ZSA9PT0gJ2ZhbHNlJyB8fCBsb3dlclZhbHVlID09PSAnMCcgfHwgbG93ZXJWYWx1ZSA9PT0gJ25vJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYm9vbGVhbiB2YWx1ZTogXCIke3ZhbHVlfVwiYCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZU51bWJlcih2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBudW1WYWx1ZSA9IE51bWJlcih2YWx1ZS50cmltKCkpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4obnVtVmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbnVtYmVyIHZhbHVlOiBcIiR7dmFsdWV9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bVZhbHVlO1xuICB9XG5cbiAgLy8gVXRpbGl0eSBmb3IgcGFyc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgLy8gU3VwcG9ydHMgYm90aCBwYXR0ZXJuczpcbiAgLy8gLSBGRUFUVVJFX0ZMQUdfTE9DQUxfRU5BQkxFX0ZFQVRVUkUgKGdsb2JhbCBmbGFnIHdpdGggc2luZ2xlIHVuZGVyc2NvcmUpXG4gIC8vIC0gRkVBVFVSRV9GTEFHX0xPQ0FMX193b3Jrc3BhY2UxMjNfX0FQSV9fVElNRU9VVF9fTVMgKHdvcmtzcGFjZSBmbGFnIHdpdGggZG91YmxlIHVuZGVyc2NvcmUpXG4gIHN0YXRpYyBwYXJzZUVudktleShlbnZLZXk6IHN0cmluZyk6IHsgcHJlZml4OiBzdHJpbmc7IHdvcmtzcGFjZT86IHN0cmluZzsgZmxhZz86IHN0cmluZyB9IHtcbiAgICAvLyBDaGVjayBmb3Igd29ya3NwYWNlLXNwZWNpZmljIHBhdHRlcm4gZmlyc3QgKGNvbnRhaW5zIGRvdWJsZSB1bmRlcnNjb3JlKVxuICAgIGlmIChlbnZLZXkuaW5jbHVkZXMoJ19fJykpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gZW52S2V5LnNwbGl0KCdfXycpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIHdvcmtzcGFjZSBlbnZpcm9ubWVudCBrZXkgZm9ybWF0OiBcIiR7ZW52S2V5fVwiLiBFeHBlY3RlZCBmb3JtYXQ6IFBSRUZJWF9fV09SS1NQQUNFX19GTEFHYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByZWZpeCA9IHBhcnRzWzBdO1xuICAgICAgY29uc3Qgd29ya3NwYWNlID0gcGFydHNbMV07XG4gICAgICBjb25zdCBmbGFnID0gcGFydHMuc2xpY2UoMikuam9pbignX18nKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgd29ya3NwYWNlLFxuICAgICAgICBmbGFnLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBHbG9iYWwgcGF0dGVybiAoc2luZ2xlIHVuZGVyc2NvcmUpXG4gICAgY29uc3QgdW5kZXJzY29yZUluZGV4ID0gZW52S2V5LmluZGV4T2YoJ18nKTtcbiAgICBpZiAodW5kZXJzY29yZUluZGV4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBlbnZpcm9ubWVudCBrZXkgZm9ybWF0OiBcIiR7ZW52S2V5fVwiLiBFeHBlY3RlZCBmb3JtYXQ6IFBSRUZJWF9GTEFHIG9yIFBSRUZJWF9fV09SS1NQQUNFX19GTEFHYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgbGFzdCBwYXJ0IGFmdGVyIHRoZSBwcmVmaXhcbiAgICBjb25zdCBwcmVmaXhQYXJ0cyA9IGVudktleS5zcGxpdCgnXycpO1xuICAgIGlmIChwcmVmaXhQYXJ0cy5sZW5ndGggPCA0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGdsb2JhbCBlbnZpcm9ubWVudCBrZXkgZm9ybWF0OiBcIiR7ZW52S2V5fVwiLiBFeHBlY3RlZCBmb3JtYXQ6IEZFQVRVUkVfRkxBR19MT0NBTF9GTEFHYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRm9yIEZFQVRVUkVfRkxBR19MT0NBTF9GTEFHX05BTUUsIHByZWZpeCBpcyBcIkZFQVRVUkVfRkxBR19MT0NBTFwiLCBmbGFnIGlzIFwiRkxBR19OQU1FXCJcbiAgICBjb25zdCBwcmVmaXggPSBwcmVmaXhQYXJ0cy5zbGljZSgwLCAzKS5qb2luKCdfJyk7IC8vIEZFQVRVUkVfRkxBR19MT0NBTFxuICAgIGNvbnN0IGZsYWcgPSBwcmVmaXhQYXJ0cy5zbGljZSgzKS5qb2luKCdfJyk7IC8vIEV2ZXJ5dGhpbmcgYWZ0ZXJcblxuICAgIHJldHVybiB7XG4gICAgICBwcmVmaXgsXG4gICAgICBmbGFnLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export { FeatureFlagService } from './service';
2
+ export { ConfigResolver } from './config';
3
+ export { FeatureFlagUtils } from './utils';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/feature-flags/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FeatureFlagUtils = exports.ConfigResolver = exports.FeatureFlagService = void 0;
4
+ var service_1 = require("./service");
5
+ Object.defineProperty(exports, "FeatureFlagService", { enumerable: true, get: function () { return service_1.FeatureFlagService; } });
6
+ var config_1 = require("./config");
7
+ Object.defineProperty(exports, "ConfigResolver", { enumerable: true, get: function () { return config_1.ConfigResolver; } });
8
+ var utils_1 = require("./utils");
9
+ Object.defineProperty(exports, "FeatureFlagUtils", { enumerable: true, get: function () { return utils_1.FeatureFlagUtils; } });
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmVhdHVyZS1mbGFncy9jb3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUErQztBQUF0Qyw2R0FBQSxrQkFBa0IsT0FBQTtBQUMzQixtQ0FBMEM7QUFBakMsd0dBQUEsY0FBYyxPQUFBO0FBQ3ZCLGlDQUEyQztBQUFsQyx5R0FBQSxnQkFBZ0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gJy4vc2VydmljZSc7XG5leHBvcnQgeyBDb25maWdSZXNvbHZlciB9IGZyb20gJy4vY29uZmlnJztcbmV4cG9ydCB7IEZlYXR1cmVGbGFnVXRpbHMgfSBmcm9tICcuL3V0aWxzJztcbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import type { FeatureFlagConfig, FeatureFlagUser, FeatureFlagResponse, FeatureFlagDefinition, IFeatureFlagService, IFeatureFlagRegistry } from '../types';
2
+ import { ErrorBehaviour } from '../types';
3
+ export declare class FeatureFlagService implements IFeatureFlagService {
4
+ private provider;
5
+ private flagRegistry;
6
+ constructor(registry?: IFeatureFlagRegistry);
7
+ static create(config?: Partial<FeatureFlagConfig>, flags?: FeatureFlagDefinition[]): Promise<FeatureFlagService>;
8
+ static create(config?: Partial<FeatureFlagConfig>, registry?: IFeatureFlagRegistry): Promise<FeatureFlagService>;
9
+ initialize(config?: Partial<FeatureFlagConfig>): Promise<void>;
10
+ isFeatureEnabled(user: FeatureFlagUser, flagName: string, onErrorBehaviour?: ErrorBehaviour): Promise<FeatureFlagResponse>;
11
+ isFeatureEnabledLatest(user: FeatureFlagUser, flagName: string, onErrorBehaviour?: ErrorBehaviour): Promise<FeatureFlagResponse>;
12
+ getFeatureValue(user: FeatureFlagUser, flagName: string, onErrorBehaviour?: ErrorBehaviour): Promise<FeatureFlagResponse>;
13
+ getFeatureValueLatest(user: FeatureFlagUser, flagName: string, onErrorBehaviour?: ErrorBehaviour): Promise<FeatureFlagResponse>;
14
+ registerFlags(flags: FeatureFlagDefinition[]): void;
15
+ getRegisteredFlag(key: string): FeatureFlagDefinition | undefined;
16
+ private processProviderResult;
17
+ private createDefaultResponse;
18
+ }
19
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/feature-flags/core/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EAEnB,oBAAoB,EAErB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM1C,qBAAa,kBAAmB,YAAW,mBAAmB;IAC5D,OAAO,CAAC,QAAQ,CAAqC;IAErD,OAAO,CAAC,YAAY,CAAuB;gBAE/B,QAAQ,CAAC,EAAE,oBAAoB;WAOvB,MAAM,CACxB,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACnC,KAAK,CAAC,EAAE,qBAAqB,EAAE,GAC9B,OAAO,CAAC,kBAAkB,CAAC;WACV,MAAM,CACxB,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACnC,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,kBAAkB,CAAC;IAyBjB,UAAU,CAAC,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlE,gBAAgB,CAC3B,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,GAAE,cAAiD,GAClE,OAAO,CAAC,mBAAmB,CAAC;IAKlB,sBAAsB,CACjC,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,GAAE,cAAiD,GAClE,OAAO,CAAC,mBAAmB,CAAC;IAKlB,eAAe,CAC1B,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,GAAE,cAAiD,GAClE,OAAO,CAAC,mBAAmB,CAAC;IAKlB,qBAAqB,CAChC,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,MAAM,EAChB,gBAAgB,GAAE,cAAiD,GAClE,OAAO,CAAC,mBAAmB,CAAC;IAMxB,aAAa,CAAC,KAAK,EAAE,qBAAqB,EAAE,GAAG,IAAI;IAInD,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAIxE,OAAO,CAAC,qBAAqB;IAqC7B,OAAO,CAAC,qBAAqB;CAU9B"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FeatureFlagService = void 0;
4
+ const types_1 = require("../types");
5
+ const registry_1 = require("../flags/registry");
6
+ const factory_1 = require("../providers/factory");
7
+ const config_1 = require("./config");
8
+ const defaults_1 = require("../flags/defaults");
9
+ class FeatureFlagService {
10
+ constructor(registry) {
11
+ this.provider = null;
12
+ this.flagRegistry = registry || new registry_1.FeatureFlagRegistry();
13
+ // Load default flags
14
+ this.flagRegistry.register(defaults_1.DEFAULT_FLAGS);
15
+ }
16
+ static async create(config = {}, flagsOrRegistry) {
17
+ let registry;
18
+ if (flagsOrRegistry) {
19
+ // Check if it's a registry (has register method) or flag definitions array
20
+ if (Array.isArray(flagsOrRegistry)) {
21
+ // It's an array of flag definitions
22
+ registry = new registry_1.FeatureFlagRegistry();
23
+ registry.register(flagsOrRegistry);
24
+ }
25
+ else {
26
+ // It's a registry instance
27
+ registry = flagsOrRegistry;
28
+ }
29
+ }
30
+ const service = new FeatureFlagService(registry);
31
+ await service.initialize(config);
32
+ return service;
33
+ }
34
+ // Strategy Pattern: Initialize provider once, use polymorphism
35
+ async initialize(config = {}) {
36
+ const resolvedConfig = config_1.ConfigResolver.resolveConfig(config);
37
+ // Factory creates the appropriate provider - NO CONDITIONALS
38
+ const factory = new factory_1.FeatureFlagProviderFactory(this.flagRegistry);
39
+ this.provider = factory.create(resolvedConfig);
40
+ // Initialize the provider
41
+ await this.provider.initialize();
42
+ }
43
+ async isFeatureEnabled(user, flagName, onErrorBehaviour = types_1.ErrorBehaviour.RETURN_RICH_ERROR) {
44
+ const providerResult = await this.provider.isFeatureEnabled(user, flagName);
45
+ return this.processProviderResult(providerResult, flagName, onErrorBehaviour);
46
+ }
47
+ async isFeatureEnabledLatest(user, flagName, onErrorBehaviour = types_1.ErrorBehaviour.RETURN_RICH_ERROR) {
48
+ const providerResult = await this.provider.isFeatureEnabledLatest(user, flagName);
49
+ return this.processProviderResult(providerResult, flagName, onErrorBehaviour);
50
+ }
51
+ async getFeatureValue(user, flagName, onErrorBehaviour = types_1.ErrorBehaviour.RETURN_RICH_ERROR) {
52
+ const providerResult = await this.provider.getFeatureValue(user, flagName);
53
+ return this.processProviderResult(providerResult, flagName, onErrorBehaviour);
54
+ }
55
+ async getFeatureValueLatest(user, flagName, onErrorBehaviour = types_1.ErrorBehaviour.RETURN_RICH_ERROR) {
56
+ const providerResult = await this.provider.getFeatureValueLatest(user, flagName);
57
+ return this.processProviderResult(providerResult, flagName, onErrorBehaviour);
58
+ }
59
+ // Registry methods
60
+ registerFlags(flags) {
61
+ this.flagRegistry.register(flags);
62
+ }
63
+ getRegisteredFlag(key) {
64
+ return this.flagRegistry.get(key);
65
+ }
66
+ processProviderResult(providerResult, flagName, onErrorBehaviour) {
67
+ if (providerResult.error) {
68
+ switch (onErrorBehaviour) {
69
+ case types_1.ErrorBehaviour.THROW_ERROR:
70
+ throw providerResult.error;
71
+ case types_1.ErrorBehaviour.RETURN_RICH_ERROR:
72
+ // Return the rich error response as-is with isDefault = false
73
+ return {
74
+ ...providerResult,
75
+ isDefault: false,
76
+ };
77
+ case types_1.ErrorBehaviour.RETURN_DEFAULT:
78
+ // Return default value from registry
79
+ return this.createDefaultResponse(flagName, providerResult);
80
+ default:
81
+ // Default to RETURN_RICH_ERROR behavior
82
+ return {
83
+ ...providerResult,
84
+ isDefault: false,
85
+ };
86
+ }
87
+ }
88
+ // Success case - pass through rich provider data
89
+ return {
90
+ ...providerResult,
91
+ isDefault: false,
92
+ };
93
+ }
94
+ createDefaultResponse(flagName, errorResult) {
95
+ const defaultValue = this.flagRegistry.getDefaultValue(flagName);
96
+ return {
97
+ name: flagName,
98
+ enabled: typeof defaultValue === 'boolean' ? defaultValue : Boolean(defaultValue),
99
+ value: defaultValue,
100
+ error: errorResult.error,
101
+ isDefault: true,
102
+ };
103
+ }
104
+ }
105
+ exports.FeatureFlagService = FeatureFlagService;
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mZWF0dXJlLWZsYWdzL2NvcmUvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFVQSxvQ0FBMEM7QUFDMUMsZ0RBQXdEO0FBQ3hELGtEQUFrRTtBQUNsRSxxQ0FBMEM7QUFDMUMsZ0RBQWtEO0FBRWxELE1BQWEsa0JBQWtCO0lBSzdCLFlBQVksUUFBK0I7UUFKbkMsYUFBUSxHQUFnQyxJQUFJLENBQUM7UUFLbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLElBQUksSUFBSSw4QkFBbUIsRUFBRSxDQUFDO1FBQzFELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyx3QkFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQVdNLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUN4QixTQUFxQyxFQUFFLEVBQ3ZDLGVBQWdFO1FBRWhFLElBQUksUUFBMEMsQ0FBQztRQUUvQyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLDJFQUEyRTtZQUMzRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsb0NBQW9DO2dCQUNwQyxRQUFRLEdBQUcsSUFBSSw4QkFBbUIsRUFBRSxDQUFDO2dCQUNyQyxRQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7aUJBQU0sQ0FBQztnQkFDTiwyQkFBMkI7Z0JBQzNCLFFBQVEsR0FBRyxlQUFlLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsK0RBQStEO0lBQ3hELEtBQUssQ0FBQyxV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QyxDQUFDO2dCQUU5RDtvQkFDRSx3Q0FBd0M7b0JBQ3hDLE9BQU87d0JBQ0wsR0FBRyxjQUFjO3dCQUNqQixTQUFTLEVBQUUsS0FBSztxQkFDakIsQ0FBQztZQUNOLENBQUM7UUFDSCxDQUFDO1FBRUQsaURBQWlEO1FBQ2pELE9BQU87WUFDTCxHQUFHLGNBQWM7WUFDakIsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztJQUNKLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxRQUFnQixFQUFFLFdBQXlCO1FBQ3ZFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLE9BQU87WUFDTCxJQUFJLEVBQUUsUUFBUTtZQUNkLE9BQU8sRUFBRSxPQUFPLFlBQVksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUNqRixLQUFLLEVBQUUsWUFBWTtZQUNuQixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7WUFDeEIsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQW5KRCxnREFtSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEZlYXR1cmVGbGFnQ29uZmlnLFxuICBGZWF0dXJlRmxhZ1VzZXIsXG4gIEZlYXR1cmVGbGFnUmVzcG9uc2UsXG4gIEZlYXR1cmVGbGFnRGVmaW5pdGlvbixcbiAgSUZlYXR1cmVGbGFnU2VydmljZSxcbiAgSUZlYXR1cmVGbGFnUHJvdmlkZXIsXG4gIElGZWF0dXJlRmxhZ1JlZ2lzdHJ5LFxuICBGZWF0dXJlVmFsdWUsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEVycm9yQmVoYXZpb3VyIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdSZWdpc3RyeSB9IGZyb20gJy4uL2ZsYWdzL3JlZ2lzdHJ5JztcbmltcG9ydCB7IEZlYXR1cmVGbGFnUHJvdmlkZXJGYWN0b3J5IH0gZnJvbSAnLi4vcHJvdmlkZXJzL2ZhY3RvcnknO1xuaW1wb3J0IHsgQ29uZmlnUmVzb2x2ZXIgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBERUZBVUxUX0ZMQUdTIH0gZnJvbSAnLi4vZmxhZ3MvZGVmYXVsdHMnO1xuXG5leHBvcnQgY2xhc3MgRmVhdHVyZUZsYWdTZXJ2aWNlIGltcGxlbWVudHMgSUZlYXR1cmVGbGFnU2VydmljZSB7XG4gIHByaXZhdGUgcHJvdmlkZXI6IElGZWF0dXJlRmxhZ1Byb3ZpZGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBmbGFnUmVnaXN0cnk6IElGZWF0dXJlRmxhZ1JlZ2lzdHJ5O1xuXG4gIGNvbnN0cnVjdG9yKHJlZ2lzdHJ5PzogSUZlYXR1cmVGbGFnUmVnaXN0cnkpIHtcbiAgICB0aGlzLmZsYWdSZWdpc3RyeSA9IHJlZ2lzdHJ5IHx8IG5ldyBGZWF0dXJlRmxhZ1JlZ2lzdHJ5KCk7XG4gICAgLy8gTG9hZCBkZWZhdWx0IGZsYWdzXG4gICAgdGhpcy5mbGFnUmVnaXN0cnkucmVnaXN0ZXIoREVGQVVMVF9GTEFHUyk7XG4gIH1cblxuICAvLyBGYWN0b3J5IG1ldGhvZCBvdmVybG9hZHM6IENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBzZXJ2aWNlIGluIG9uZSBzdGVwXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgY3JlYXRlKFxuICAgIGNvbmZpZz86IFBhcnRpYWw8RmVhdHVyZUZsYWdDb25maWc+LFxuICAgIGZsYWdzPzogRmVhdHVyZUZsYWdEZWZpbml0aW9uW10sXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWdTZXJ2aWNlPjtcbiAgcHVibGljIHN0YXRpYyBhc3luYyBjcmVhdGUoXG4gICAgY29uZmlnPzogUGFydGlhbDxGZWF0dXJlRmxhZ0NvbmZpZz4sXG4gICAgcmVnaXN0cnk/OiBJRmVhdHVyZUZsYWdSZWdpc3RyeSxcbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ1NlcnZpY2U+O1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGNyZWF0ZShcbiAgICBjb25maWc6IFBhcnRpYWw8RmVhdHVyZUZsYWdDb25maWc+ID0ge30sXG4gICAgZmxhZ3NPclJlZ2lzdHJ5PzogRmVhdHVyZUZsYWdEZWZpbml0aW9uW10gfCBJRmVhdHVyZUZsYWdSZWdpc3RyeSxcbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ1NlcnZpY2U+IHtcbiAgICBsZXQgcmVnaXN0cnk6IElGZWF0dXJlRmxhZ1JlZ2lzdHJ5IHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZsYWdzT3JSZWdpc3RyeSkge1xuICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIHJlZ2lzdHJ5IChoYXMgcmVnaXN0ZXIgbWV0aG9kKSBvciBmbGFnIGRlZmluaXRpb25zIGFycmF5XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmbGFnc09yUmVnaXN0cnkpKSB7XG4gICAgICAgIC8vIEl0J3MgYW4gYXJyYXkgb2YgZmxhZyBkZWZpbml0aW9uc1xuICAgICAgICByZWdpc3RyeSA9IG5ldyBGZWF0dXJlRmxhZ1JlZ2lzdHJ5KCk7XG4gICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKGZsYWdzT3JSZWdpc3RyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJdCdzIGEgcmVnaXN0cnkgaW5zdGFuY2VcbiAgICAgICAgcmVnaXN0cnkgPSBmbGFnc09yUmVnaXN0cnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBGZWF0dXJlRmxhZ1NlcnZpY2UocmVnaXN0cnkpO1xuICAgIGF3YWl0IHNlcnZpY2UuaW5pdGlhbGl6ZShjb25maWcpO1xuICAgIHJldHVybiBzZXJ2aWNlO1xuICB9XG5cbiAgLy8gU3RyYXRlZ3kgUGF0dGVybjogSW5pdGlhbGl6ZSBwcm92aWRlciBvbmNlLCB1c2UgcG9seW1vcnBoaXNtXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplKGNvbmZpZzogUGFydGlhbDxGZWF0dXJlRmxhZ0NvbmZpZz4gPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc29sdmVkQ29uZmlnID0gQ29uZmlnUmVzb2x2ZXIucmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuXG4gICAgLy8gRmFjdG9yeSBjcmVhdGVzIHRoZSBhcHByb3ByaWF0ZSBwcm92aWRlciAtIE5PIENPTkRJVElPTkFMU1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgRmVhdHVyZUZsYWdQcm92aWRlckZhY3RvcnkodGhpcy5mbGFnUmVnaXN0cnkpO1xuICAgIHRoaXMucHJvdmlkZXIgPSBmYWN0b3J5LmNyZWF0ZShyZXNvbHZlZENvbmZpZyk7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBwcm92aWRlclxuICAgIGF3YWl0IHRoaXMucHJvdmlkZXIuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzRmVhdHVyZUVuYWJsZWQoXG4gICAgdXNlcjogRmVhdHVyZUZsYWdVc2VyLFxuICAgIGZsYWdOYW1lOiBzdHJpbmcsXG4gICAgb25FcnJvckJlaGF2aW91cjogRXJyb3JCZWhhdmlvdXIgPSBFcnJvckJlaGF2aW91ci5SRVRVUk5fUklDSF9FUlJPUixcbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcHJvdmlkZXJSZXN1bHQgPSBhd2FpdCB0aGlzLnByb3ZpZGVyIS5pc0ZlYXR1cmVFbmFibGVkKHVzZXIsIGZsYWdOYW1lKTtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzUHJvdmlkZXJSZXN1bHQocHJvdmlkZXJSZXN1bHQsIGZsYWdOYW1lLCBvbkVycm9yQmVoYXZpb3VyKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc0ZlYXR1cmVFbmFibGVkTGF0ZXN0KFxuICAgIHVzZXI6IEZlYXR1cmVGbGFnVXNlcixcbiAgICBmbGFnTmFtZTogc3RyaW5nLFxuICAgIG9uRXJyb3JCZWhhdmlvdXI6IEVycm9yQmVoYXZpb3VyID0gRXJyb3JCZWhhdmlvdXIuUkVUVVJOX1JJQ0hfRVJST1IsXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWdSZXNwb25zZT4ge1xuICAgIGNvbnN0IHByb3ZpZGVyUmVzdWx0ID0gYXdhaXQgdGhpcy5wcm92aWRlciEuaXNGZWF0dXJlRW5hYmxlZExhdGVzdCh1c2VyLCBmbGFnTmFtZSk7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1Byb3ZpZGVyUmVzdWx0KHByb3ZpZGVyUmVzdWx0LCBmbGFnTmFtZSwgb25FcnJvckJlaGF2aW91cik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RmVhdHVyZVZhbHVlKFxuICAgIHVzZXI6IEZlYXR1cmVGbGFnVXNlcixcbiAgICBmbGFnTmFtZTogc3RyaW5nLFxuICAgIG9uRXJyb3JCZWhhdmlvdXI6IEVycm9yQmVoYXZpb3VyID0gRXJyb3JCZWhhdmlvdXIuUkVUVVJOX1JJQ0hfRVJST1IsXG4gICk6IFByb21pc2U8RmVhdHVyZUZsYWdSZXNwb25zZT4ge1xuICAgIGNvbnN0IHByb3ZpZGVyUmVzdWx0ID0gYXdhaXQgdGhpcy5wcm92aWRlciEuZ2V0RmVhdHVyZVZhbHVlKHVzZXIsIGZsYWdOYW1lKTtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzUHJvdmlkZXJSZXN1bHQocHJvdmlkZXJSZXN1bHQsIGZsYWdOYW1lLCBvbkVycm9yQmVoYXZpb3VyKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRGZWF0dXJlVmFsdWVMYXRlc3QoXG4gICAgdXNlcjogRmVhdHVyZUZsYWdVc2VyLFxuICAgIGZsYWdOYW1lOiBzdHJpbmcsXG4gICAgb25FcnJvckJlaGF2aW91cjogRXJyb3JCZWhhdmlvdXIgPSBFcnJvckJlaGF2aW91ci5SRVRVUk5fUklDSF9FUlJPUixcbiAgKTogUHJvbWlzZTxGZWF0dXJlRmxhZ1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcHJvdmlkZXJSZXN1bHQgPSBhd2FpdCB0aGlzLnByb3ZpZGVyIS5nZXRGZWF0dXJlVmFsdWVMYXRlc3QodXNlciwgZmxhZ05hbWUpO1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NQcm92aWRlclJlc3VsdChwcm92aWRlclJlc3VsdCwgZmxhZ05hbWUsIG9uRXJyb3JCZWhhdmlvdXIpO1xuICB9XG5cbiAgLy8gUmVnaXN0cnkgbWV0aG9kc1xuICBwdWJsaWMgcmVnaXN0ZXJGbGFncyhmbGFnczogRmVhdHVyZUZsYWdEZWZpbml0aW9uW10pOiB2b2lkIHtcbiAgICB0aGlzLmZsYWdSZWdpc3RyeS5yZWdpc3RlcihmbGFncyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVnaXN0ZXJlZEZsYWcoa2V5OiBzdHJpbmcpOiBGZWF0dXJlRmxhZ0RlZmluaXRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZsYWdSZWdpc3RyeS5nZXQoa2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1Byb3ZpZGVyUmVzdWx0KFxuICAgIHByb3ZpZGVyUmVzdWx0OiBGZWF0dXJlVmFsdWUsXG4gICAgZmxhZ05hbWU6IHN0cmluZyxcbiAgICBvbkVycm9yQmVoYXZpb3VyOiBFcnJvckJlaGF2aW91cixcbiAgKTogRmVhdHVyZUZsYWdSZXNwb25zZSB7XG4gICAgaWYgKHByb3ZpZGVyUmVzdWx0LmVycm9yKSB7XG4gICAgICBzd2l0Y2ggKG9uRXJyb3JCZWhhdmlvdXIpIHtcbiAgICAgICAgY2FzZSBFcnJvckJlaGF2aW91ci5USFJPV19FUlJPUjpcbiAgICAgICAgICB0aHJvdyBwcm92aWRlclJlc3VsdC5lcnJvcjtcblxuICAgICAgICBjYXNlIEVycm9yQmVoYXZpb3VyLlJFVFVSTl9SSUNIX0VSUk9SOlxuICAgICAgICAgIC8vIFJldHVybiB0aGUgcmljaCBlcnJvciByZXNwb25zZSBhcy1pcyB3aXRoIGlzRGVmYXVsdCA9IGZhbHNlXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnByb3ZpZGVyUmVzdWx0LFxuICAgICAgICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgIGNhc2UgRXJyb3JCZWhhdmlvdXIuUkVUVVJOX0RFRkFVTFQ6XG4gICAgICAgICAgLy8gUmV0dXJuIGRlZmF1bHQgdmFsdWUgZnJvbSByZWdpc3RyeVxuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZURlZmF1bHRSZXNwb25zZShmbGFnTmFtZSwgcHJvdmlkZXJSZXN1bHQpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gRGVmYXVsdCB0byBSRVRVUk5fUklDSF9FUlJPUiBiZWhhdmlvclxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5wcm92aWRlclJlc3VsdCxcbiAgICAgICAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdWNjZXNzIGNhc2UgLSBwYXNzIHRocm91Z2ggcmljaCBwcm92aWRlciBkYXRhXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnByb3ZpZGVyUmVzdWx0LFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0UmVzcG9uc2UoZmxhZ05hbWU6IHN0cmluZywgZXJyb3JSZXN1bHQ6IEZlYXR1cmVWYWx1ZSk6IEZlYXR1cmVGbGFnUmVzcG9uc2Uge1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuZmxhZ1JlZ2lzdHJ5LmdldERlZmF1bHRWYWx1ZShmbGFnTmFtZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGZsYWdOYW1lLFxuICAgICAgZW5hYmxlZDogdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2Jvb2xlYW4nID8gZGVmYXVsdFZhbHVlIDogQm9vbGVhbihkZWZhdWx0VmFsdWUpLFxuICAgICAgdmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICAgIGVycm9yOiBlcnJvclJlc3VsdC5lcnJvcixcbiAgICAgIGlzRGVmYXVsdDogdHJ1ZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,8 @@
1
+ import type { FeatureFlagDefinition } from '../types';
2
+ export declare class FeatureFlagUtils {
3
+ static normalizeKey(key: string): string;
4
+ static validateDefinition(definition: FeatureFlagDefinition): void;
5
+ static createWorkspaceEnvKey(flagName: string, workspaceId: string): string;
6
+ static createGlobalEnvKey(flagName: string): string;
7
+ }
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/feature-flags/core/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIxC,MAAM,CAAC,kBAAkB,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI;IA0BlE,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAK3E,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAIpD"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FeatureFlagUtils = void 0;
4
+ class FeatureFlagUtils {
5
+ static normalizeKey(key) {
6
+ return key.toLowerCase().replace(/[^a-z0-9-_]/g, '-');
7
+ }
8
+ static validateDefinition(definition) {
9
+ if (!definition.key || typeof definition.key !== 'string') {
10
+ throw new Error('Flag definition must have a valid key');
11
+ }
12
+ if (!definition.name || typeof definition.name !== 'string') {
13
+ throw new Error('Flag definition must have a valid name');
14
+ }
15
+ if (!definition.description || typeof definition.description !== 'string') {
16
+ throw new Error('Flag definition must have a valid description');
17
+ }
18
+ if (definition.defaultValue === undefined) {
19
+ throw new Error('Flag definition must have a defaultValue');
20
+ }
21
+ if (!['boolean', 'string', 'number'].includes(definition.type)) {
22
+ throw new Error('Flag definition type must be boolean, string, or number');
23
+ }
24
+ // Validate defaultValue matches type
25
+ const actualType = typeof definition.defaultValue;
26
+ if (actualType !== definition.type) {
27
+ throw new Error(`Flag defaultValue type (${actualType}) does not match declared type (${definition.type})`);
28
+ }
29
+ }
30
+ static createWorkspaceEnvKey(flagName, workspaceId) {
31
+ const normalizedFlag = flagName.toUpperCase().replace(/-/g, '_');
32
+ return `FEATURE_FLAG_LOCAL__${workspaceId}__${normalizedFlag}`;
33
+ }
34
+ static createGlobalEnvKey(flagName) {
35
+ const normalizedFlag = flagName.toUpperCase().replace(/-/g, '_');
36
+ return `FEATURE_FLAG_LOCAL_${normalizedFlag}`;
37
+ }
38
+ }
39
+ exports.FeatureFlagUtils = FeatureFlagUtils;
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmVhdHVyZS1mbGFncy9jb3JlL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQWEsZ0JBQWdCO0lBQzNCLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBVztRQUM3QixPQUFPLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsVUFBaUM7UUFDekQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksT0FBTyxVQUFVLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksT0FBTyxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVELE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLElBQUksT0FBTyxVQUFVLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFFRCxxQ0FBcUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQ2xELElBQUksVUFBVSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUNiLDJCQUEyQixVQUFVLG1DQUFtQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQzNGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxRQUFnQixFQUFFLFdBQW1CO1FBQ2hFLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sdUJBQXVCLFdBQVcsS0FBSyxjQUFjLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQWdCO1FBQ3hDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sc0JBQXNCLGNBQWMsRUFBRSxDQUFDO0lBQ2hELENBQUM7Q0FDRjtBQXhDRCw0Q0F3Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnRGVmaW5pdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEZlYXR1cmVGbGFnVXRpbHMge1xuICBzdGF0aWMgbm9ybWFsaXplS2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTktX10vZywgJy0nKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURlZmluaXRpb24oZGVmaW5pdGlvbjogRmVhdHVyZUZsYWdEZWZpbml0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFkZWZpbml0aW9uLmtleSB8fCB0eXBlb2YgZGVmaW5pdGlvbi5rZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZsYWcgZGVmaW5pdGlvbiBtdXN0IGhhdmUgYSB2YWxpZCBrZXknKTtcbiAgICB9XG4gICAgaWYgKCFkZWZpbml0aW9uLm5hbWUgfHwgdHlwZW9mIGRlZmluaXRpb24ubmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmxhZyBkZWZpbml0aW9uIG11c3QgaGF2ZSBhIHZhbGlkIG5hbWUnKTtcbiAgICB9XG4gICAgaWYgKCFkZWZpbml0aW9uLmRlc2NyaXB0aW9uIHx8IHR5cGVvZiBkZWZpbml0aW9uLmRlc2NyaXB0aW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGbGFnIGRlZmluaXRpb24gbXVzdCBoYXZlIGEgdmFsaWQgZGVzY3JpcHRpb24nKTtcbiAgICB9XG4gICAgaWYgKGRlZmluaXRpb24uZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmxhZyBkZWZpbml0aW9uIG11c3QgaGF2ZSBhIGRlZmF1bHRWYWx1ZScpO1xuICAgIH1cbiAgICBpZiAoIVsnYm9vbGVhbicsICdzdHJpbmcnLCAnbnVtYmVyJ10uaW5jbHVkZXMoZGVmaW5pdGlvbi50eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGbGFnIGRlZmluaXRpb24gdHlwZSBtdXN0IGJlIGJvb2xlYW4sIHN0cmluZywgb3IgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZGVmYXVsdFZhbHVlIG1hdGNoZXMgdHlwZVxuICAgIGNvbnN0IGFjdHVhbFR5cGUgPSB0eXBlb2YgZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWU7XG4gICAgaWYgKGFjdHVhbFR5cGUgIT09IGRlZmluaXRpb24udHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmxhZyBkZWZhdWx0VmFsdWUgdHlwZSAoJHthY3R1YWxUeXBlfSkgZG9lcyBub3QgbWF0Y2ggZGVjbGFyZWQgdHlwZSAoJHtkZWZpbml0aW9uLnR5cGV9KWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVXb3Jrc3BhY2VFbnZLZXkoZmxhZ05hbWU6IHN0cmluZywgd29ya3NwYWNlSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZsYWcgPSBmbGFnTmFtZS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoLy0vZywgJ18nKTtcbiAgICByZXR1cm4gYEZFQVRVUkVfRkxBR19MT0NBTF9fJHt3b3Jrc3BhY2VJZH1fXyR7bm9ybWFsaXplZEZsYWd9YDtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVHbG9iYWxFbnZLZXkoZmxhZ05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZsYWcgPSBmbGFnTmFtZS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoLy0vZywgJ18nKTtcbiAgICByZXR1cm4gYEZFQVRVUkVfRkxBR19MT0NBTF8ke25vcm1hbGl6ZWRGbGFnfWA7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import type { FeatureFlagDefinition } from '../types';
2
+ export declare const DEFAULT_FLAGS: FeatureFlagDefinition[];
3
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/feature-flags/flags/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD,eAAO,MAAM,aAAa,EAAE,qBAAqB,EAmBhD,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_FLAGS = void 0;
4
+ exports.DEFAULT_FLAGS = [
5
+ {
6
+ key: 'enable-test-flag',
7
+ name: 'Test Flag',
8
+ description: 'A test flag for development and testing purposes',
9
+ defaultValue: false,
10
+ type: 'boolean',
11
+ category: 'testing',
12
+ tags: ['test', 'development'],
13
+ },
14
+ {
15
+ key: 'enable-test-flag-with-value',
16
+ name: 'Test Flag with Value',
17
+ description: 'A test flag that returns a value for testing purposes',
18
+ defaultValue: 'test-value',
19
+ type: 'string',
20
+ category: 'testing',
21
+ tags: ['test', 'development'],
22
+ },
23
+ ];
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmVhdHVyZS1mbGFncy9mbGFncy9kZWZhdWx0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFYSxRQUFBLGFBQWEsR0FBNEI7SUFDcEQ7UUFDRSxHQUFHLEVBQUUsa0JBQWtCO1FBQ3ZCLElBQUksRUFBRSxXQUFXO1FBQ2pCLFdBQVcsRUFBRSxrREFBa0Q7UUFDL0QsWUFBWSxFQUFFLEtBQUs7UUFDbkIsSUFBSSxFQUFFLFNBQVM7UUFDZixRQUFRLEVBQUUsU0FBUztRQUNuQixJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDO0tBQzlCO0lBQ0Q7UUFDRSxHQUFHLEVBQUUsNkJBQTZCO1FBQ2xDLElBQUksRUFBRSxzQkFBc0I7UUFDNUIsV0FBVyxFQUFFLHVEQUF1RDtRQUNwRSxZQUFZLEVBQUUsWUFBWTtRQUMxQixJQUFJLEVBQUUsUUFBUTtRQUNkLFFBQVEsRUFBRSxTQUFTO1FBQ25CLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUM7S0FDOUI7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGZWF0dXJlRmxhZ0RlZmluaXRpb24gfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZMQUdTOiBGZWF0dXJlRmxhZ0RlZmluaXRpb25bXSA9IFtcbiAge1xuICAgIGtleTogJ2VuYWJsZS10ZXN0LWZsYWcnLFxuICAgIG5hbWU6ICdUZXN0IEZsYWcnLFxuICAgIGRlc2NyaXB0aW9uOiAnQSB0ZXN0IGZsYWcgZm9yIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHB1cnBvc2VzJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBjYXRlZ29yeTogJ3Rlc3RpbmcnLFxuICAgIHRhZ3M6IFsndGVzdCcsICdkZXZlbG9wbWVudCddLFxuICB9LFxuICB7XG4gICAga2V5OiAnZW5hYmxlLXRlc3QtZmxhZy13aXRoLXZhbHVlJyxcbiAgICBuYW1lOiAnVGVzdCBGbGFnIHdpdGggVmFsdWUnLFxuICAgIGRlc2NyaXB0aW9uOiAnQSB0ZXN0IGZsYWcgdGhhdCByZXR1cm5zIGEgdmFsdWUgZm9yIHRlc3RpbmcgcHVycG9zZXMnLFxuICAgIGRlZmF1bHRWYWx1ZTogJ3Rlc3QtdmFsdWUnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGNhdGVnb3J5OiAndGVzdGluZycsXG4gICAgdGFnczogWyd0ZXN0JywgJ2RldmVsb3BtZW50J10sXG4gIH0sXG5dO1xuIl19
@@ -0,0 +1,5 @@
1
+ export { FeatureFlagRegistry } from './registry';
2
+ export { FeatureFlagLoader } from './loader';
3
+ export { DEFAULT_FLAGS } from './defaults';
4
+ export type { IFeatureFlagRegistry } from './interfaces';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/feature-flags/flags/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_FLAGS = exports.FeatureFlagLoader = exports.FeatureFlagRegistry = void 0;
4
+ var registry_1 = require("./registry");
5
+ Object.defineProperty(exports, "FeatureFlagRegistry", { enumerable: true, get: function () { return registry_1.FeatureFlagRegistry; } });
6
+ var loader_1 = require("./loader");
7
+ Object.defineProperty(exports, "FeatureFlagLoader", { enumerable: true, get: function () { return loader_1.FeatureFlagLoader; } });
8
+ var defaults_1 = require("./defaults");
9
+ Object.defineProperty(exports, "DEFAULT_FLAGS", { enumerable: true, get: function () { return defaults_1.DEFAULT_FLAGS; } });
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmVhdHVyZS1mbGFncy9mbGFncy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBaUQ7QUFBeEMsK0dBQUEsbUJBQW1CLE9BQUE7QUFDNUIsbUNBQTZDO0FBQXBDLDJHQUFBLGlCQUFpQixPQUFBO0FBQzFCLHVDQUEyQztBQUFsQyx5R0FBQSxhQUFhLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBGZWF0dXJlRmxhZ1JlZ2lzdHJ5IH0gZnJvbSAnLi9yZWdpc3RyeSc7XG5leHBvcnQgeyBGZWF0dXJlRmxhZ0xvYWRlciB9IGZyb20gJy4vbG9hZGVyJztcbmV4cG9ydCB7IERFRkFVTFRfRkxBR1MgfSBmcm9tICcuL2RlZmF1bHRzJztcbmV4cG9ydCB0eXBlIHsgSUZlYXR1cmVGbGFnUmVnaXN0cnkgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuIl19
@@ -0,0 +1,12 @@
1
+ import type { FeatureFlagDefinition } from '../types';
2
+ export interface IFeatureFlagRegistry {
3
+ register(definition: FeatureFlagDefinition): void;
4
+ register(definitions: FeatureFlagDefinition[]): void;
5
+ get(key: string): FeatureFlagDefinition | undefined;
6
+ getAll(): FeatureFlagDefinition[];
7
+ getByCategory(category: string): FeatureFlagDefinition[];
8
+ getDefaultValue(key: string): boolean | string | number;
9
+ isRegistered(key: string): boolean;
10
+ clear(): void;
11
+ }
12
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/feature-flags/flags/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC;IACrD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAC;IACpD,MAAM,IAAI,qBAAqB,EAAE,CAAC;IAClC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAAC;IACzD,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACxD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,KAAK,IAAI,IAAI,CAAC;CACf"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mZWF0dXJlLWZsYWdzL2ZsYWdzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmVhdHVyZUZsYWdEZWZpbml0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElGZWF0dXJlRmxhZ1JlZ2lzdHJ5IHtcbiAgcmVnaXN0ZXIoZGVmaW5pdGlvbjogRmVhdHVyZUZsYWdEZWZpbml0aW9uKTogdm9pZDtcbiAgcmVnaXN0ZXIoZGVmaW5pdGlvbnM6IEZlYXR1cmVGbGFnRGVmaW5pdGlvbltdKTogdm9pZDtcbiAgZ2V0KGtleTogc3RyaW5nKTogRmVhdHVyZUZsYWdEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuICBnZXRBbGwoKTogRmVhdHVyZUZsYWdEZWZpbml0aW9uW107XG4gIGdldEJ5Q2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZyk6IEZlYXR1cmVGbGFnRGVmaW5pdGlvbltdO1xuICBnZXREZWZhdWx0VmFsdWUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyO1xuICBpc1JlZ2lzdGVyZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuO1xuICBjbGVhcigpOiB2b2lkO1xufVxuIl19
@@ -0,0 +1,14 @@
1
+ import type { FeatureFlagDefinition } from '../types';
2
+ export interface FeatureFlagConfig {
3
+ flags: FeatureFlagDefinition[];
4
+ defaults?: {
5
+ category?: string;
6
+ type?: 'boolean' | 'string' | 'number';
7
+ };
8
+ }
9
+ export declare class FeatureFlagLoader {
10
+ static fromJSON(json: string): FeatureFlagDefinition[];
11
+ static fromObject(config: FeatureFlagConfig): FeatureFlagDefinition[];
12
+ static fromEnvironment(): FeatureFlagDefinition[];
13
+ }
14
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/feature-flags/flags/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;KACxC,CAAC;CACH;AAED,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,EAAE;IAStD,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,qBAAqB,EAAE;IAOrE,MAAM,CAAC,eAAe,IAAI,qBAAqB,EAAE;CAelD"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FeatureFlagLoader = void 0;
4
+ class FeatureFlagLoader {
5
+ static fromJSON(json) {
6
+ try {
7
+ const config = JSON.parse(json);
8
+ return config.flags;
9
+ }
10
+ catch (error) {
11
+ throw new Error(`Failed to parse flag configuration JSON: ${error}`);
12
+ }
13
+ }
14
+ static fromObject(config) {
15
+ if (!config.flags || !Array.isArray(config.flags)) {
16
+ throw new Error('Configuration must have a flags array');
17
+ }
18
+ return config.flags;
19
+ }
20
+ static fromEnvironment() {
21
+ const configPath = process.env.FEATURE_FLAGS_CONFIG_PATH;
22
+ if (!configPath) {
23
+ return [];
24
+ }
25
+ try {
26
+ // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires
27
+ const fs = require('fs');
28
+ const configContent = fs.readFileSync(configPath, 'utf8');
29
+ return this.fromJSON(configContent);
30
+ }
31
+ catch (error) {
32
+ throw new Error(`Failed to load flag configuration from ${configPath}: ${error}`);
33
+ }
34
+ }
35
+ }
36
+ exports.FeatureFlagLoader = FeatureFlagLoader;
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ZlYXR1cmUtZmxhZ3MvZmxhZ3MvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVVBLE1BQWEsaUJBQWlCO0lBQzVCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBWTtRQUMxQixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBc0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDdEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUF5QjtRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUM7UUFDekQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELElBQUksQ0FBQztZQUNILDhFQUE4RTtZQUM5RSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsVUFBVSxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEYsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWhDRCw4Q0FnQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnRGVmaW5pdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlRmxhZ0NvbmZpZyB7XG4gIGZsYWdzOiBGZWF0dXJlRmxhZ0RlZmluaXRpb25bXTtcbiAgZGVmYXVsdHM/OiB7XG4gICAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gICAgdHlwZT86ICdib29sZWFuJyB8ICdzdHJpbmcnIHwgJ251bWJlcic7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBGZWF0dXJlRmxhZ0xvYWRlciB7XG4gIHN0YXRpYyBmcm9tSlNPTihqc29uOiBzdHJpbmcpOiBGZWF0dXJlRmxhZ0RlZmluaXRpb25bXSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZzogRmVhdHVyZUZsYWdDb25maWcgPSBKU09OLnBhcnNlKGpzb24pO1xuICAgICAgcmV0dXJuIGNvbmZpZy5mbGFncztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgZmxhZyBjb25maWd1cmF0aW9uIEpTT046ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3QoY29uZmlnOiBGZWF0dXJlRmxhZ0NvbmZpZyk6IEZlYXR1cmVGbGFnRGVmaW5pdGlvbltdIHtcbiAgICBpZiAoIWNvbmZpZy5mbGFncyB8fCAhQXJyYXkuaXNBcnJheShjb25maWcuZmxhZ3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZpZ3VyYXRpb24gbXVzdCBoYXZlIGEgZmxhZ3MgYXJyYXknKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZy5mbGFncztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRW52aXJvbm1lbnQoKTogRmVhdHVyZUZsYWdEZWZpbml0aW9uW10ge1xuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBwcm9jZXNzLmVudi5GRUFUVVJFX0ZMQUdTX0NPTkZJR19QQVRIO1xuICAgIGlmICghY29uZmlnUGF0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmUsIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICAgIGNvbnN0IGNvbmZpZ0NvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgJ3V0ZjgnKTtcbiAgICAgIHJldHVybiB0aGlzLmZyb21KU09OKGNvbmZpZ0NvbnRlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIGZsYWcgY29uZmlndXJhdGlvbiBmcm9tICR7Y29uZmlnUGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,12 @@
1
+ import type { FeatureFlagDefinition, IFeatureFlagRegistry } from '../types';
2
+ export declare class FeatureFlagRegistry implements IFeatureFlagRegistry {
3
+ private flags;
4
+ register(definitionOrDefinitions: FeatureFlagDefinition | FeatureFlagDefinition[]): void;
5
+ get(key: string): FeatureFlagDefinition | undefined;
6
+ getAll(): FeatureFlagDefinition[];
7
+ getByCategory(category: string): FeatureFlagDefinition[];
8
+ getDefaultValue(key: string): boolean | string | number;
9
+ isRegistered(key: string): boolean;
10
+ clear(): void;
11
+ }
12
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/feature-flags/flags/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAG5E,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,OAAO,CAAC,KAAK,CAA4C;IAEzD,QAAQ,CAAC,uBAAuB,EAAE,qBAAqB,GAAG,qBAAqB,EAAE,GAAG,IAAI;IAWxF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAInD,MAAM,IAAI,qBAAqB,EAAE;IAIjC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,EAAE;IAIxD,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM;IAIvD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIlC,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FeatureFlagRegistry = void 0;
4
+ const utils_1 = require("../core/utils");
5
+ class FeatureFlagRegistry {
6
+ constructor() {
7
+ this.flags = new Map();
8
+ }
9
+ register(definitionOrDefinitions) {
10
+ const definitions = Array.isArray(definitionOrDefinitions)
11
+ ? definitionOrDefinitions
12
+ : [definitionOrDefinitions];
13
+ definitions.forEach((def) => {
14
+ utils_1.FeatureFlagUtils.validateDefinition(def);
15
+ this.flags.set(def.key, def);
16
+ });
17
+ }
18
+ get(key) {
19
+ return this.flags.get(key);
20
+ }
21
+ getAll() {
22
+ return Array.from(this.flags.values());
23
+ }
24
+ getByCategory(category) {
25
+ return this.getAll().filter((flag) => flag.category === category);
26
+ }
27
+ getDefaultValue(key) {
28
+ return this.flags.get(key)?.defaultValue ?? false;
29
+ }
30
+ isRegistered(key) {
31
+ return this.flags.has(key);
32
+ }
33
+ clear() {
34
+ this.flags.clear();
35
+ }
36
+ }
37
+ exports.FeatureFlagRegistry = FeatureFlagRegistry;
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmVhdHVyZS1mbGFncy9mbGFncy9yZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBaUQ7QUFFakQsTUFBYSxtQkFBbUI7SUFBaEM7UUFDVSxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7SUFvQzNELENBQUM7SUFsQ0MsUUFBUSxDQUFDLHVCQUF3RTtRQUMvRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO1lBQ3hELENBQUMsQ0FBQyx1QkFBdUI7WUFDekIsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUU5QixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDMUIsd0JBQWdCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxHQUFHLENBQUMsR0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxhQUFhLENBQUMsUUFBZ0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxlQUFlLENBQUMsR0FBVztRQUN6QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQVksSUFBSSxLQUFLLENBQUM7SUFDcEQsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFXO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3JCLENBQUM7Q0FDRjtBQXJDRCxrREFxQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZlYXR1cmVGbGFnRGVmaW5pdGlvbiwgSUZlYXR1cmVGbGFnUmVnaXN0cnkgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ1V0aWxzIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBGZWF0dXJlRmxhZ1JlZ2lzdHJ5IGltcGxlbWVudHMgSUZlYXR1cmVGbGFnUmVnaXN0cnkge1xuICBwcml2YXRlIGZsYWdzID0gbmV3IE1hcDxzdHJpbmcsIEZlYXR1cmVGbGFnRGVmaW5pdGlvbj4oKTtcblxuICByZWdpc3RlcihkZWZpbml0aW9uT3JEZWZpbml0aW9uczogRmVhdHVyZUZsYWdEZWZpbml0aW9uIHwgRmVhdHVyZUZsYWdEZWZpbml0aW9uW10pOiB2b2lkIHtcbiAgICBjb25zdCBkZWZpbml0aW9ucyA9IEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbk9yRGVmaW5pdGlvbnMpXG4gICAgICA/IGRlZmluaXRpb25PckRlZmluaXRpb25zXG4gICAgICA6IFtkZWZpbml0aW9uT3JEZWZpbml0aW9uc107XG5cbiAgICBkZWZpbml0aW9ucy5mb3JFYWNoKChkZWYpID0+IHtcbiAgICAgIEZlYXR1cmVGbGFnVXRpbHMudmFsaWRhdGVEZWZpbml0aW9uKGRlZik7XG4gICAgICB0aGlzLmZsYWdzLnNldChkZWYua2V5LCBkZWYpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0KGtleTogc3RyaW5nKTogRmVhdHVyZUZsYWdEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5mbGFncy5nZXQoa2V5KTtcbiAgfVxuXG4gIGdldEFsbCgpOiBGZWF0dXJlRmxhZ0RlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5mbGFncy52YWx1ZXMoKSk7XG4gIH1cblxuICBnZXRCeUNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcpOiBGZWF0dXJlRmxhZ0RlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsKCkuZmlsdGVyKChmbGFnKSA9PiBmbGFnLmNhdGVnb3J5ID09PSBjYXRlZ29yeSk7XG4gIH1cblxuICBnZXREZWZhdWx0VmFsdWUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mbGFncy5nZXQoa2V5KT8uZGVmYXVsdFZhbHVlID8/IGZhbHNlO1xuICB9XG5cbiAgaXNSZWdpc3RlcmVkKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmxhZ3MuaGFzKGtleSk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmZsYWdzLmNsZWFyKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ import { FeatureFlagService } from './core/service';
2
+ export { FeatureFlagService } from './core/service';
3
+ export { FeatureFlagRegistry } from './flags/registry';
4
+ export { FeatureFlagLoader } from './flags/loader';
5
+ export type { IFeatureFlagService, IFeatureFlagRegistry, IFeatureFlagProvider, FeatureFlagUser, FeatureFlagConfig, FeatureFlagResponse, FeatureFlagDefinition, FeatureFlagProvider, FeatureValue, ErrorBehaviour, } from './types';
6
+ export { TRAIT_KEYS } from '@rudderstack/featureflag-sdk-node';
7
+ export { DEFAULT_FLAGS } from './flags/defaults';
8
+ export declare const featureFlagService: FeatureFlagService;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/feature-flags/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,cAAc,GACf,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}