@zudojs/feature-flags 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/dist/evaluator/evaluator.core.d.ts +20 -0
  4. package/dist/evaluator/evaluator.core.d.ts.map +1 -0
  5. package/dist/evaluator/evaluator.core.js +86 -0
  6. package/dist/evaluator/evaluator.core.js.map +1 -0
  7. package/dist/evaluator/evaluatorAttribute.d.ts +26 -0
  8. package/dist/evaluator/evaluatorAttribute.d.ts.map +1 -0
  9. package/dist/evaluator/evaluatorAttribute.js +84 -0
  10. package/dist/evaluator/evaluatorAttribute.js.map +1 -0
  11. package/dist/evaluator/evaluatorRule.core.d.ts +29 -0
  12. package/dist/evaluator/evaluatorRule.core.d.ts.map +1 -0
  13. package/dist/evaluator/evaluatorRule.core.js +73 -0
  14. package/dist/evaluator/evaluatorRule.core.js.map +1 -0
  15. package/dist/evaluator/index.d.ts +10 -0
  16. package/dist/evaluator/index.d.ts.map +1 -0
  17. package/dist/evaluator/index.js +9 -0
  18. package/dist/evaluator/index.js.map +1 -0
  19. package/dist/featureFlagErrors/featureFlagError.base.d.ts +24 -0
  20. package/dist/featureFlagErrors/featureFlagError.base.d.ts.map +1 -0
  21. package/dist/featureFlagErrors/featureFlagError.base.js +24 -0
  22. package/dist/featureFlagErrors/featureFlagError.base.js.map +1 -0
  23. package/dist/featureFlagErrors/featureFlagError.types.d.ts +38 -0
  24. package/dist/featureFlagErrors/featureFlagError.types.d.ts.map +1 -0
  25. package/dist/featureFlagErrors/featureFlagError.types.js +79 -0
  26. package/dist/featureFlagErrors/featureFlagError.types.js.map +1 -0
  27. package/dist/featureFlagErrors/index.d.ts +9 -0
  28. package/dist/featureFlagErrors/index.d.ts.map +1 -0
  29. package/dist/featureFlagErrors/index.js +8 -0
  30. package/dist/featureFlagErrors/index.js.map +1 -0
  31. package/dist/featureFlagTypes/featureFlag.interface.d.ts +50 -0
  32. package/dist/featureFlagTypes/featureFlag.interface.d.ts.map +1 -0
  33. package/dist/featureFlagTypes/featureFlag.interface.js +9 -0
  34. package/dist/featureFlagTypes/featureFlag.interface.js.map +1 -0
  35. package/dist/featureFlagTypes/featureFlagContext.d.ts +21 -0
  36. package/dist/featureFlagTypes/featureFlagContext.d.ts.map +1 -0
  37. package/dist/featureFlagTypes/featureFlagContext.js +9 -0
  38. package/dist/featureFlagTypes/featureFlagContext.js.map +1 -0
  39. package/dist/featureFlagTypes/featureFlagEvaluation.d.ts +26 -0
  40. package/dist/featureFlagTypes/featureFlagEvaluation.d.ts.map +1 -0
  41. package/dist/featureFlagTypes/featureFlagEvaluation.js +9 -0
  42. package/dist/featureFlagTypes/featureFlagEvaluation.js.map +1 -0
  43. package/dist/featureFlagTypes/featureFlagProvider.d.ts +24 -0
  44. package/dist/featureFlagTypes/featureFlagProvider.d.ts.map +1 -0
  45. package/dist/featureFlagTypes/featureFlagProvider.js +9 -0
  46. package/dist/featureFlagTypes/featureFlagProvider.js.map +1 -0
  47. package/dist/featureFlagTypes/featureFlagRule/featureFlagRule.type.d.ts +60 -0
  48. package/dist/featureFlagTypes/featureFlagRule/featureFlagRule.type.d.ts.map +1 -0
  49. package/dist/featureFlagTypes/featureFlagRule/featureFlagRule.type.js +9 -0
  50. package/dist/featureFlagTypes/featureFlagRule/featureFlagRule.type.js.map +1 -0
  51. package/dist/featureFlagTypes/featureFlagRule/featureFlagValue.type.d.ts +14 -0
  52. package/dist/featureFlagTypes/featureFlagRule/featureFlagValue.type.d.ts.map +1 -0
  53. package/dist/featureFlagTypes/featureFlagRule/featureFlagValue.type.js +9 -0
  54. package/dist/featureFlagTypes/featureFlagRule/featureFlagValue.type.js.map +1 -0
  55. package/dist/featureFlagTypes/featureFlagRule/index.d.ts +8 -0
  56. package/dist/featureFlagTypes/featureFlagRule/index.d.ts.map +1 -0
  57. package/dist/featureFlagTypes/featureFlagRule/index.js +8 -0
  58. package/dist/featureFlagTypes/featureFlagRule/index.js.map +1 -0
  59. package/dist/featureFlagTypes/index.d.ts +9 -0
  60. package/dist/featureFlagTypes/index.d.ts.map +1 -0
  61. package/dist/featureFlagTypes/index.js +5 -0
  62. package/dist/featureFlagTypes/index.js.map +1 -0
  63. package/dist/featureFlags/featureFlags.core.d.ts +37 -0
  64. package/dist/featureFlags/featureFlags.core.d.ts.map +1 -0
  65. package/dist/featureFlags/featureFlags.core.js +101 -0
  66. package/dist/featureFlags/featureFlags.core.js.map +1 -0
  67. package/dist/featureFlags/featureFlags.resolve.d.ts +21 -0
  68. package/dist/featureFlags/featureFlags.resolve.d.ts.map +1 -0
  69. package/dist/featureFlags/featureFlags.resolve.js +44 -0
  70. package/dist/featureFlags/featureFlags.resolve.js.map +1 -0
  71. package/dist/featureFlags/index.d.ts +8 -0
  72. package/dist/featureFlags/index.d.ts.map +1 -0
  73. package/dist/featureFlags/index.js +7 -0
  74. package/dist/featureFlags/index.js.map +1 -0
  75. package/dist/index.d.ts +29 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +29 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/provider/index.d.ts +12 -0
  80. package/dist/provider/index.d.ts.map +1 -0
  81. package/dist/provider/index.js +10 -0
  82. package/dist/provider/index.js.map +1 -0
  83. package/dist/provider/providerCached.core.d.ts +22 -0
  84. package/dist/provider/providerCached.core.d.ts.map +1 -0
  85. package/dist/provider/providerCached.core.js +45 -0
  86. package/dist/provider/providerCached.core.js.map +1 -0
  87. package/dist/provider/providerComposite.core.d.ts +19 -0
  88. package/dist/provider/providerComposite.core.d.ts.map +1 -0
  89. package/dist/provider/providerComposite.core.js +48 -0
  90. package/dist/provider/providerComposite.core.js.map +1 -0
  91. package/dist/provider/providerEnvironment.core.d.ts +25 -0
  92. package/dist/provider/providerEnvironment.core.d.ts.map +1 -0
  93. package/dist/provider/providerEnvironment.core.js +63 -0
  94. package/dist/provider/providerEnvironment.core.js.map +1 -0
  95. package/dist/provider/providerMemory.core.d.ts +17 -0
  96. package/dist/provider/providerMemory.core.d.ts.map +1 -0
  97. package/dist/provider/providerMemory.core.js +36 -0
  98. package/dist/provider/providerMemory.core.js.map +1 -0
  99. package/dist/registry/index.d.ts +8 -0
  100. package/dist/registry/index.d.ts.map +1 -0
  101. package/dist/registry/index.js +7 -0
  102. package/dist/registry/index.js.map +1 -0
  103. package/dist/registry/registry.core.d.ts +35 -0
  104. package/dist/registry/registry.core.d.ts.map +1 -0
  105. package/dist/registry/registry.core.js +47 -0
  106. package/dist/registry/registry.core.js.map +1 -0
  107. package/dist/rollout/index.d.ts +8 -0
  108. package/dist/rollout/index.d.ts.map +1 -0
  109. package/dist/rollout/index.js +8 -0
  110. package/dist/rollout/index.js.map +1 -0
  111. package/dist/rollout/rolloutBucketing.d.ts +27 -0
  112. package/dist/rollout/rolloutBucketing.d.ts.map +1 -0
  113. package/dist/rollout/rolloutBucketing.js +42 -0
  114. package/dist/rollout/rolloutBucketing.js.map +1 -0
  115. package/dist/rollout/rolloutHashing.d.ts +15 -0
  116. package/dist/rollout/rolloutHashing.d.ts.map +1 -0
  117. package/dist/rollout/rolloutHashing.js +26 -0
  118. package/dist/rollout/rolloutHashing.js.map +1 -0
  119. package/dist/utils/index.d.ts +7 -0
  120. package/dist/utils/index.d.ts.map +1 -0
  121. package/dist/utils/index.js +7 -0
  122. package/dist/utils/index.js.map +1 -0
  123. package/dist/utils/utils.helper.d.ts +15 -0
  124. package/dist/utils/utils.helper.d.ts.map +1 -0
  125. package/dist/utils/utils.helper.js +27 -0
  126. package/dist/utils/utils.helper.js.map +1 -0
  127. package/package.json +49 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/featureFlags/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @zudojs/feature-flags
3
+ *
4
+ * Feature flag system with deterministic rollouts, rule engine, providers, and evaluation context.
5
+ *
6
+ * @module index
7
+ */
8
+ export type { FeatureFlagValue, FeatureFlagState, FeatureFlagVisibility, FeatureFlagOperator, FeatureFlagStaticRule, FeatureFlagUserRule, FeatureFlagTenantRule, FeatureFlagAttributeRule, FeatureFlagPercentageRule, FeatureFlagScheduleRule, FeatureFlagVariantRule, FeatureFlagVariant, FeatureFlagRule, FeatureFlagContext, FeatureFlagMetadata, FeatureFlag, FeatureFlagEvaluationReason, FeatureFlagEvaluation, FeatureFlagProvider, FeatureFlagChangeListener, Unsubscribe, } from "./featureFlagTypes/index.js";
9
+ export { FeatureFlagError } from "./featureFlagErrors/featureFlagError.base.js";
10
+ export type { FeatureFlagErrorOptions } from "./featureFlagErrors/featureFlagError.base.js";
11
+ export { FeatureFlagNotFoundError, FeatureFlagProviderError, FeatureFlagEvaluationError, FeatureFlagRuleError, FeatureFlagDependencyError, FeatureFlagConfigurationError, FeatureFlagTypeError, } from "./featureFlagErrors/featureFlagError.types.js";
12
+ export { hashString } from "./rollout/rolloutHashing.js";
13
+ export { getBucket, isInRollout } from "./rollout/rolloutBucketing.js";
14
+ export { createMemoryProvider } from "./provider/providerMemory.core.js";
15
+ export { createEnvironmentProvider } from "./provider/providerEnvironment.core.js";
16
+ export type { EnvironmentProviderOptions } from "./provider/providerEnvironment.core.js";
17
+ export { createCompositeProvider } from "./provider/providerComposite.core.js";
18
+ export { createCachedProvider } from "./provider/providerCached.core.js";
19
+ export type { CachedProviderOptions } from "./provider/providerCached.core.js";
20
+ export { resolvePath, matchAttribute } from "./evaluator/evaluatorAttribute.js";
21
+ export { evaluateRule } from "./evaluator/evaluatorRule.core.js";
22
+ export type { RuleEvaluationResult } from "./evaluator/evaluatorRule.core.js";
23
+ export { evaluateFlag } from "./evaluator/evaluator.core.js";
24
+ export { createFeatureFlagRegistry } from "./registry/registry.core.js";
25
+ export type { FeatureFlagRegistry } from "./registry/registry.core.js";
26
+ export { createFeatureFlags } from "./featureFlags/featureFlags.core.js";
27
+ export type { FeatureFlagsOptions } from "./featureFlags/featureFlags.core.js";
28
+ export { isPlainObject, valuesEqual } from "./utils/utils.helper.js";
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,2BAA2B,EAC3B,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,WAAW,GACZ,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,YAAY,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EACpB,0BAA0B,EAC1B,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,+CAA+C,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,YAAY,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,YAAY,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAG/E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAG/E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @zudojs/feature-flags
3
+ *
4
+ * Feature flag system with deterministic rollouts, rule engine, providers, and evaluation context.
5
+ *
6
+ * @module index
7
+ */
8
+ // ─── Errors ───────────────────────────────────────────────────────────────
9
+ export { FeatureFlagError } from "./featureFlagErrors/featureFlagError.base.js";
10
+ export { FeatureFlagNotFoundError, FeatureFlagProviderError, FeatureFlagEvaluationError, FeatureFlagRuleError, FeatureFlagDependencyError, FeatureFlagConfigurationError, FeatureFlagTypeError, } from "./featureFlagErrors/featureFlagError.types.js";
11
+ // ─── Rollout ──────────────────────────────────────────────────────────────
12
+ export { hashString } from "./rollout/rolloutHashing.js";
13
+ export { getBucket, isInRollout } from "./rollout/rolloutBucketing.js";
14
+ // ─── Providers ────────────────────────────────────────────────────────────
15
+ export { createMemoryProvider } from "./provider/providerMemory.core.js";
16
+ export { createEnvironmentProvider } from "./provider/providerEnvironment.core.js";
17
+ export { createCompositeProvider } from "./provider/providerComposite.core.js";
18
+ export { createCachedProvider } from "./provider/providerCached.core.js";
19
+ // ─── Evaluator ────────────────────────────────────────────────────────────
20
+ export { resolvePath, matchAttribute } from "./evaluator/evaluatorAttribute.js";
21
+ export { evaluateRule } from "./evaluator/evaluatorRule.core.js";
22
+ export { evaluateFlag } from "./evaluator/evaluator.core.js";
23
+ // ─── Registry ─────────────────────────────────────────────────────────────
24
+ export { createFeatureFlagRegistry } from "./registry/registry.core.js";
25
+ // ─── FeatureFlags ─────────────────────────────────────────────────────────
26
+ export { createFeatureFlags } from "./featureFlags/featureFlags.core.js";
27
+ // ─── Utils ────────────────────────────────────────────────────────────────
28
+ export { isPlainObject, valuesEqual } from "./utils/utils.helper.js";
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2BH,6EAA6E;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAEhF,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EACpB,0BAA0B,EAC1B,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,+CAA+C,CAAC;AAEvD,6EAA6E;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEvE,6EAA6E;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AAEnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAGzE,6EAA6E;AAC7E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,6EAA6E;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAGxE,6EAA6E;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAGzE,6EAA6E;AAC7E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Feature flag providers — supply flag definitions from any source.
3
+ *
4
+ * @module provider
5
+ */
6
+ export { createMemoryProvider } from "./providerMemory.core.js";
7
+ export { createEnvironmentProvider } from "./providerEnvironment.core.js";
8
+ export type { EnvironmentProviderOptions } from "./providerEnvironment.core.js";
9
+ export { createCompositeProvider } from "./providerComposite.core.js";
10
+ export { createCachedProvider } from "./providerCached.core.js";
11
+ export type { CachedProviderOptions } from "./providerCached.core.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,YAAY,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Feature flag providers — supply flag definitions from any source.
3
+ *
4
+ * @module provider
5
+ */
6
+ export { createMemoryProvider } from "./providerMemory.core.js";
7
+ export { createEnvironmentProvider } from "./providerEnvironment.core.js";
8
+ export { createCompositeProvider } from "./providerComposite.core.js";
9
+ export { createCachedProvider } from "./providerCached.core.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Cached feature flag provider.
3
+ *
4
+ * Wraps a remote provider with in-memory caching to avoid per-request network calls.
5
+ *
6
+ * @module provider/providerCached
7
+ */
8
+ import type { FeatureFlagProvider } from "../featureFlagTypes/featureFlagProvider.js";
9
+ /** Options for the cached provider. */
10
+ export interface CachedProviderOptions {
11
+ /** Time-to-live in milliseconds (default: 30,000). */
12
+ readonly ttl?: number;
13
+ }
14
+ /**
15
+ * Create a cached feature flag provider.
16
+ *
17
+ * @param inner - The upstream provider to cache.
18
+ * @param options - Caching options.
19
+ * @returns A FeatureFlagProvider with in-memory TTL caching.
20
+ */
21
+ export declare function createCachedProvider(inner: FeatureFlagProvider, options?: CachedProviderOptions): FeatureFlagProvider;
22
+ //# sourceMappingURL=providerCached.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerCached.core.d.ts","sourceRoot":"","sources":["../../src/provider/providerCached.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAEtF,uCAAuC;AACvC,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAOD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE,qBAA0B,GAClC,mBAAmB,CAmCrB"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Cached feature flag provider.
3
+ *
4
+ * Wraps a remote provider with in-memory caching to avoid per-request network calls.
5
+ *
6
+ * @module provider/providerCached
7
+ */
8
+ /**
9
+ * Create a cached feature flag provider.
10
+ *
11
+ * @param inner - The upstream provider to cache.
12
+ * @param options - Caching options.
13
+ * @returns A FeatureFlagProvider with in-memory TTL caching.
14
+ */
15
+ export function createCachedProvider(inner, options = {}) {
16
+ const ttl = options.ttl ?? 30_000;
17
+ const flagCache = new Map();
18
+ let listCache;
19
+ function isExpired(entry) {
20
+ return Date.now() > entry.expiresAt;
21
+ }
22
+ return {
23
+ async get(key) {
24
+ const cached = flagCache.get(key);
25
+ if (cached && !isExpired(cached))
26
+ return cached.value;
27
+ const flag = await inner.get(key);
28
+ flagCache.set(key, { value: flag, expiresAt: Date.now() + ttl });
29
+ return flag;
30
+ },
31
+ async getAll() {
32
+ if (listCache && !isExpired(listCache))
33
+ return listCache.flags;
34
+ const flags = await inner.getAll();
35
+ listCache = { flags, expiresAt: Date.now() + ttl };
36
+ return flags;
37
+ },
38
+ async refresh() {
39
+ flagCache.clear();
40
+ listCache = undefined;
41
+ await inner.refresh?.();
42
+ },
43
+ };
44
+ }
45
+ //# sourceMappingURL=providerCached.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerCached.core.js","sourceRoot":"","sources":["../../src/provider/providerCached.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAA0B,EAC1B,OAAO,GAA0B,EAAE;IAEnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAsB,CAAC;IAChD,IAAI,SAES,CAAC;IAEd,SAAS,SAAS,CAAC,KAA4B;QAC7C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;IACtC,CAAC;IAED,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAW;YACnB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC,KAAK,CAAC;YAEtD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,CAAC,MAAM;YACV,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC,KAAK,CAAC;YAE/D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;YACnC,SAAS,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,CAAC,OAAO;YACX,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,SAAS,GAAG,SAAS,CAAC;YACtB,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Composite feature flag provider.
3
+ *
4
+ * Chains multiple providers with first-match-wins resolution.
5
+ *
6
+ * @module provider/providerComposite
7
+ */
8
+ import type { FeatureFlagProvider } from "../featureFlagTypes/featureFlagProvider.js";
9
+ /**
10
+ * Create a composite provider that queries providers in order.
11
+ *
12
+ * The first provider to return a flag wins. `getAll()` merges all flags
13
+ * with earlier providers taking priority.
14
+ *
15
+ * @param providers - Providers to chain, in priority order.
16
+ * @returns A composite FeatureFlagProvider.
17
+ */
18
+ export declare function createCompositeProvider(providers: readonly FeatureFlagProvider[]): FeatureFlagProvider;
19
+ //# sourceMappingURL=providerComposite.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerComposite.core.d.ts","sourceRoot":"","sources":["../../src/provider/providerComposite.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAEtF;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,mBAAmB,EAAE,GACxC,mBAAmB,CAiCrB"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Composite feature flag provider.
3
+ *
4
+ * Chains multiple providers with first-match-wins resolution.
5
+ *
6
+ * @module provider/providerComposite
7
+ */
8
+ /**
9
+ * Create a composite provider that queries providers in order.
10
+ *
11
+ * The first provider to return a flag wins. `getAll()` merges all flags
12
+ * with earlier providers taking priority.
13
+ *
14
+ * @param providers - Providers to chain, in priority order.
15
+ * @returns A composite FeatureFlagProvider.
16
+ */
17
+ export function createCompositeProvider(providers) {
18
+ return {
19
+ async get(key) {
20
+ for (const provider of providers) {
21
+ const flag = await provider.get(key);
22
+ if (flag)
23
+ return flag;
24
+ }
25
+ return undefined;
26
+ },
27
+ async getAll() {
28
+ const seen = new Set();
29
+ const result = [];
30
+ for (const provider of providers) {
31
+ const flags = await provider.getAll();
32
+ for (const flag of flags) {
33
+ if (!seen.has(flag.key)) {
34
+ seen.add(flag.key);
35
+ result.push(flag);
36
+ }
37
+ }
38
+ }
39
+ return result;
40
+ },
41
+ async refresh() {
42
+ for (const provider of providers) {
43
+ await provider.refresh?.();
44
+ }
45
+ },
46
+ };
47
+ }
48
+ //# sourceMappingURL=providerComposite.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerComposite.core.js","sourceRoot":"","sources":["../../src/provider/providerComposite.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,SAAyC;IAEzC,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAW;YACnB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAC;YACxB,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,MAAM;YACV,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,MAAM,MAAM,GAAkB,EAAE,CAAC;YAEjC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,CAAC,OAAO;YACX,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Environment-variable feature flag provider.
3
+ *
4
+ * Reads feature flags from environment variables with a configurable prefix.
5
+ *
6
+ * Example: FEATURE_NEW_UI=true → key "NEW_UI" with value true.
7
+ *
8
+ * @module provider/providerEnvironment
9
+ */
10
+ import type { FeatureFlagProvider } from "../featureFlagTypes/featureFlagProvider.js";
11
+ /** Options for the environment provider. */
12
+ export interface EnvironmentProviderOptions {
13
+ /** Prefix for environment variable names (default: "FEATURE_"). */
14
+ readonly prefix?: string;
15
+ /** Process env object to read from (default: process.env). */
16
+ readonly env?: Readonly<Record<string, string | undefined>>;
17
+ }
18
+ /**
19
+ * Create an environment-variable feature flag provider.
20
+ *
21
+ * @param options - Configuration options.
22
+ * @returns A FeatureFlagProvider that reads from environment variables.
23
+ */
24
+ export declare function createEnvironmentProvider(options?: EnvironmentProviderOptions): FeatureFlagProvider;
25
+ //# sourceMappingURL=providerEnvironment.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerEnvironment.core.d.ts","sourceRoot":"","sources":["../../src/provider/providerEnvironment.core.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAEtF,4CAA4C;AAC5C,MAAM,WAAW,0BAA0B;IACzC,mEAAmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CAC7D;AAeD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,0BAA+B,GACvC,mBAAmB,CAuCrB"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Environment-variable feature flag provider.
3
+ *
4
+ * Reads feature flags from environment variables with a configurable prefix.
5
+ *
6
+ * Example: FEATURE_NEW_UI=true → key "NEW_UI" with value true.
7
+ *
8
+ * @module provider/providerEnvironment
9
+ */
10
+ /**
11
+ * Parse a string value into a feature flag value.
12
+ */
13
+ function parseEnvValue(raw) {
14
+ if (raw === "true")
15
+ return true;
16
+ if (raw === "false")
17
+ return false;
18
+ const num = Number(raw);
19
+ if (!Number.isNaN(num))
20
+ return num;
21
+ return raw;
22
+ }
23
+ /**
24
+ * Create an environment-variable feature flag provider.
25
+ *
26
+ * @param options - Configuration options.
27
+ * @returns A FeatureFlagProvider that reads from environment variables.
28
+ */
29
+ export function createEnvironmentProvider(options = {}) {
30
+ const prefix = options.prefix ?? "FEATURE_";
31
+ const env = options.env ?? (typeof process !== "undefined" ? process.env : {});
32
+ function readFlags() {
33
+ const flags = [];
34
+ for (const [key, value] of Object.entries(env)) {
35
+ if (key.startsWith(prefix) && value !== undefined) {
36
+ const flagKey = key.slice(prefix.length);
37
+ flags.push({
38
+ key: flagKey,
39
+ enabled: true,
40
+ defaultValue: parseEnvValue(value),
41
+ });
42
+ }
43
+ }
44
+ return flags;
45
+ }
46
+ let cached;
47
+ return {
48
+ async get(key) {
49
+ if (!cached)
50
+ cached = readFlags();
51
+ return cached.find((f) => f.key === key);
52
+ },
53
+ async getAll() {
54
+ if (!cached)
55
+ cached = readFlags();
56
+ return cached;
57
+ },
58
+ async refresh() {
59
+ cached = readFlags();
60
+ },
61
+ };
62
+ }
63
+ //# sourceMappingURL=providerEnvironment.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerEnvironment.core.js","sourceRoot":"","sources":["../../src/provider/providerEnvironment.core.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAElC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAEnC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,OAAO,GAA+B,EAAE;IAExC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC;IAC5C,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAErE,SAAS,SAAS;QAChB,MAAM,KAAK,GAAkB,EAAE,CAAC;QAEhC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAClD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACzC,KAAK,CAAC,IAAI,CAAC;oBACT,GAAG,EAAE,OAAO;oBACZ,OAAO,EAAE,IAAI;oBACb,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC;iBACnC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,MAA0C,CAAC;IAE/C,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAW;YACnB,IAAI,CAAC,MAAM;gBAAE,MAAM,GAAG,SAAS,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,KAAK,CAAC,MAAM;YACV,IAAI,CAAC,MAAM;gBAAE,MAAM,GAAG,SAAS,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,CAAC,OAAO;YACX,MAAM,GAAG,SAAS,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * In-memory feature flag provider.
3
+ *
4
+ * Stores flags in a Map for O(1) lookup. Ideal for local apps and testing.
5
+ *
6
+ * @module provider/providerMemory
7
+ */
8
+ import type { FeatureFlag } from "../featureFlagTypes/featureFlag.interface.js";
9
+ import type { FeatureFlagProvider } from "../featureFlagTypes/featureFlagProvider.js";
10
+ /**
11
+ * Create an in-memory feature flag provider.
12
+ *
13
+ * @param flags - Initial flag definitions.
14
+ * @returns A FeatureFlagProvider backed by a Map.
15
+ */
16
+ export declare function createMemoryProvider(flags?: readonly FeatureFlag[]): FeatureFlagProvider;
17
+ //# sourceMappingURL=providerMemory.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerMemory.core.d.ts","sourceRoot":"","sources":["../../src/provider/providerMemory.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAEtF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,GAAE,SAAS,WAAW,EAAO,GACjC,mBAAmB,CA6BrB"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * In-memory feature flag provider.
3
+ *
4
+ * Stores flags in a Map for O(1) lookup. Ideal for local apps and testing.
5
+ *
6
+ * @module provider/providerMemory
7
+ */
8
+ /**
9
+ * Create an in-memory feature flag provider.
10
+ *
11
+ * @param flags - Initial flag definitions.
12
+ * @returns A FeatureFlagProvider backed by a Map.
13
+ */
14
+ export function createMemoryProvider(flags = []) {
15
+ const store = new Map();
16
+ for (const flag of flags) {
17
+ store.set(flag.key, Object.freeze({ ...flag }));
18
+ }
19
+ return {
20
+ async get(key) {
21
+ return store.get(key);
22
+ },
23
+ async getAll() {
24
+ return [...store.values()];
25
+ },
26
+ /** Add or update a flag at runtime. */
27
+ set(flag) {
28
+ store.set(flag.key, Object.freeze({ ...flag }));
29
+ },
30
+ /** Remove a flag by key. */
31
+ delete(key) {
32
+ return store.delete(key);
33
+ },
34
+ };
35
+ }
36
+ //# sourceMappingURL=providerMemory.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerMemory.core.js","sourceRoot":"","sources":["../../src/provider/providerMemory.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAK,GAA2B,EAAE;IAElC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAW;YACnB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,KAAK,CAAC,MAAM;YACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7B,CAAC;QAED,uCAAuC;QACvC,GAAG,CAAC,IAAiB;YACnB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,4BAA4B;QAC5B,MAAM,CAAC,GAAW;YAChB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;KAIF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Feature flag registry — central store for flag definitions.
3
+ *
4
+ * @module registry
5
+ */
6
+ export { createFeatureFlagRegistry } from "./registry.core.js";
7
+ export type { FeatureFlagRegistry } from "./registry.core.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Feature flag registry — central store for flag definitions.
3
+ *
4
+ * @module registry
5
+ */
6
+ export { createFeatureFlagRegistry } from "./registry.core.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Feature flag registry.
3
+ *
4
+ * Central store for flag definitions with O(1) lookup by key.
5
+ *
6
+ * @module registry/registry
7
+ */
8
+ import type { FeatureFlag } from "../featureFlagTypes/featureFlag.interface.js";
9
+ /** A feature flag registry with O(1) lookup. */
10
+ export interface FeatureFlagRegistry {
11
+ /** Get a flag by key. */
12
+ get(key: string): FeatureFlag | undefined;
13
+ /** Get all flags. */
14
+ getAll(): readonly FeatureFlag[];
15
+ /** Register a flag (adds or replaces). */
16
+ set(flag: FeatureFlag): void;
17
+ /** Register multiple flags. */
18
+ setAll(flags: readonly FeatureFlag[]): void;
19
+ /** Remove a flag by key. */
20
+ delete(key: string): boolean;
21
+ /** Check if a flag exists. */
22
+ has(key: string): boolean;
23
+ /** Number of registered flags. */
24
+ readonly size: number;
25
+ }
26
+ /**
27
+ * Create an in-memory feature flag registry.
28
+ *
29
+ * Uses a Map for O(1) key lookup.
30
+ *
31
+ * @param flags - Initial flags to register.
32
+ * @returns A FeatureFlagRegistry instance.
33
+ */
34
+ export declare function createFeatureFlagRegistry(flags?: readonly FeatureFlag[]): FeatureFlagRegistry;
35
+ //# sourceMappingURL=registry.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.core.d.ts","sourceRoot":"","sources":["../../src/registry/registry.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAEhF,gDAAgD;AAChD,MAAM,WAAW,mBAAmB;IAClC,yBAAyB;IACzB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAC1C,qBAAqB;IACrB,MAAM,IAAI,SAAS,WAAW,EAAE,CAAC;IACjC,0CAA0C;IAC1C,GAAG,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IAC7B,+BAA+B;IAC/B,MAAM,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI,CAAC;IAC5C,4BAA4B;IAC5B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,8BAA8B;IAC9B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,GAAE,SAAS,WAAW,EAAO,GACjC,mBAAmB,CAsCrB"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Feature flag registry.
3
+ *
4
+ * Central store for flag definitions with O(1) lookup by key.
5
+ *
6
+ * @module registry/registry
7
+ */
8
+ /**
9
+ * Create an in-memory feature flag registry.
10
+ *
11
+ * Uses a Map for O(1) key lookup.
12
+ *
13
+ * @param flags - Initial flags to register.
14
+ * @returns A FeatureFlagRegistry instance.
15
+ */
16
+ export function createFeatureFlagRegistry(flags = []) {
17
+ const store = new Map();
18
+ for (const flag of flags) {
19
+ store.set(flag.key, Object.freeze({ ...flag }));
20
+ }
21
+ return {
22
+ get(key) {
23
+ return store.get(key);
24
+ },
25
+ getAll() {
26
+ return [...store.values()];
27
+ },
28
+ set(flag) {
29
+ store.set(flag.key, Object.freeze({ ...flag }));
30
+ },
31
+ setAll(flags) {
32
+ for (const flag of flags) {
33
+ store.set(flag.key, Object.freeze({ ...flag }));
34
+ }
35
+ },
36
+ delete(key) {
37
+ return store.delete(key);
38
+ },
39
+ has(key) {
40
+ return store.has(key);
41
+ },
42
+ get size() {
43
+ return store.size;
44
+ },
45
+ };
46
+ }
47
+ //# sourceMappingURL=registry.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.core.js","sourceRoot":"","sources":["../../src/registry/registry.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsBH;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAK,GAA2B,EAAE;IAElC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO;QACL,GAAG,CAAC,GAAW;YACb,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,MAAM;YACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7B,CAAC;QAED,GAAG,CAAC,IAAiB;YACnB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,CAAC,KAA6B;YAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,MAAM,CAAC,GAAW;YAChB,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,GAAG,CAAC,GAAW;YACb,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,IAAI;YACN,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Deterministic rollout infrastructure — hashing and bucketing.
3
+ *
4
+ * @module rollout
5
+ */
6
+ export { hashString } from "./rolloutHashing.js";
7
+ export { getBucket, isInRollout } from "./rolloutBucketing.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rollout/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Deterministic rollout infrastructure — hashing and bucketing.
3
+ *
4
+ * @module rollout
5
+ */
6
+ export { hashString } from "./rolloutHashing.js";
7
+ export { getBucket, isInRollout } from "./rolloutBucketing.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rollout/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Deterministic bucketing for percentage rollouts.
3
+ *
4
+ * Maps a (flag key, subject) pair to a bucket in [0, buckets).
5
+ * Supports sub-percent precision with 10,000 buckets.
6
+ *
7
+ * @module rollout/rolloutBucketing
8
+ */
9
+ /**
10
+ * Compute a deterministic bucket for a flag rollout.
11
+ *
12
+ * @param key - The feature flag key.
13
+ * @param subject - The subject identifier (e.g. userId, tenantId).
14
+ * @param buckets - Total number of buckets (default 10,000).
15
+ * @returns A bucket number in [0, buckets).
16
+ */
17
+ export declare function getBucket(key: string, subject: string, buckets?: number): number;
18
+ /**
19
+ * Check whether a subject falls within a percentage rollout.
20
+ *
21
+ * @param key - The feature flag key.
22
+ * @param subject - The subject identifier.
23
+ * @param percentage - Percentage from 0 to 100 (supports decimals like 25.5).
24
+ * @returns Whether the subject is in the rollout.
25
+ */
26
+ export declare function isInRollout(key: string, subject: string, percentage: number): boolean;
27
+ //# sourceMappingURL=rolloutBucketing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolloutBucketing.d.ts","sourceRoot":"","sources":["../../src/rollout/rolloutBucketing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAwB,GAChC,MAAM,CAGR;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAQT"}