@zudojs/feature-flags 0.0.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +158 -13
- package/dist/evaluator/evaluator.core.d.ts +15 -1
- package/dist/evaluator/evaluator.core.js +28 -9
- package/dist/evaluator/evaluatorAttribute.d.ts +5 -0
- package/dist/evaluator/evaluatorAttribute.js +62 -4
- package/dist/evaluator/evaluatorRule.core.js +32 -7
- package/dist/featureFlagTypes/featureFlagProvider.d.ts +10 -0
- package/dist/featureFlagTypes/index.d.ts +1 -1
- package/dist/featureFlags/featureFlags.core.d.ts +28 -8
- package/dist/featureFlags/featureFlags.core.js +96 -33
- package/dist/featureFlags/featureFlags.resolve.d.ts +4 -3
- package/dist/featureFlags/featureFlags.resolve.js +29 -12
- package/dist/index.d.ts +4 -1
- package/dist/index.js +1 -0
- package/dist/provider/providerCached.core.d.ts +3 -3
- package/dist/provider/providerCached.core.js +1 -1
- package/dist/provider/providerComposite.core.d.ts +2 -2
- package/dist/provider/providerEnvironment.core.d.ts +3 -3
- package/dist/provider/providerEnvironment.core.js +1 -1
- package/dist/provider/providerMemory.core.d.ts +18 -2
- package/dist/provider/providerMemory.core.js +38 -4
- package/package.json +17 -9
- package/dist/evaluator/evaluator.core.d.ts.map +0 -1
- package/dist/evaluator/evaluator.core.js.map +0 -1
- package/dist/evaluator/evaluatorAttribute.d.ts.map +0 -1
- package/dist/evaluator/evaluatorAttribute.js.map +0 -1
- package/dist/evaluator/evaluatorRule.core.d.ts.map +0 -1
- package/dist/evaluator/evaluatorRule.core.js.map +0 -1
- package/dist/evaluator/index.d.ts.map +0 -1
- package/dist/evaluator/index.js.map +0 -1
- package/dist/featureFlagErrors/featureFlagError.base.d.ts.map +0 -1
- package/dist/featureFlagErrors/featureFlagError.base.js.map +0 -1
- package/dist/featureFlagErrors/featureFlagError.types.d.ts.map +0 -1
- package/dist/featureFlagErrors/featureFlagError.types.js.map +0 -1
- package/dist/featureFlagErrors/index.d.ts.map +0 -1
- package/dist/featureFlagErrors/index.js.map +0 -1
- package/dist/featureFlagTypes/featureFlag.interface.d.ts.map +0 -1
- package/dist/featureFlagTypes/featureFlag.interface.js.map +0 -1
- package/dist/featureFlagTypes/featureFlagContext.d.ts.map +0 -1
- package/dist/featureFlagTypes/featureFlagContext.js.map +0 -1
- package/dist/featureFlagTypes/featureFlagEvaluation.d.ts.map +0 -1
- package/dist/featureFlagTypes/featureFlagEvaluation.js.map +0 -1
- package/dist/featureFlagTypes/featureFlagProvider.d.ts.map +0 -1
- package/dist/featureFlagTypes/featureFlagProvider.js.map +0 -1
- package/dist/featureFlagTypes/featureFlagRule/featureFlagRule.type.d.ts.map +0 -1
- package/dist/featureFlagTypes/featureFlagRule/featureFlagRule.type.js.map +0 -1
- package/dist/featureFlagTypes/featureFlagRule/featureFlagValue.type.d.ts.map +0 -1
- package/dist/featureFlagTypes/featureFlagRule/featureFlagValue.type.js.map +0 -1
- package/dist/featureFlagTypes/featureFlagRule/index.d.ts.map +0 -1
- package/dist/featureFlagTypes/featureFlagRule/index.js.map +0 -1
- package/dist/featureFlagTypes/index.d.ts.map +0 -1
- package/dist/featureFlagTypes/index.js.map +0 -1
- package/dist/featureFlags/featureFlags.core.d.ts.map +0 -1
- package/dist/featureFlags/featureFlags.core.js.map +0 -1
- package/dist/featureFlags/featureFlags.resolve.d.ts.map +0 -1
- package/dist/featureFlags/featureFlags.resolve.js.map +0 -1
- package/dist/featureFlags/index.d.ts.map +0 -1
- package/dist/featureFlags/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/provider/index.d.ts.map +0 -1
- package/dist/provider/index.js.map +0 -1
- package/dist/provider/providerCached.core.d.ts.map +0 -1
- package/dist/provider/providerCached.core.js.map +0 -1
- package/dist/provider/providerComposite.core.d.ts.map +0 -1
- package/dist/provider/providerComposite.core.js.map +0 -1
- package/dist/provider/providerEnvironment.core.d.ts.map +0 -1
- package/dist/provider/providerEnvironment.core.js.map +0 -1
- package/dist/provider/providerMemory.core.d.ts.map +0 -1
- package/dist/provider/providerMemory.core.js.map +0 -1
- package/dist/registry/index.d.ts.map +0 -1
- package/dist/registry/index.js.map +0 -1
- package/dist/registry/registry.core.d.ts.map +0 -1
- package/dist/registry/registry.core.js.map +0 -1
- package/dist/rollout/index.d.ts.map +0 -1
- package/dist/rollout/index.js.map +0 -1
- package/dist/rollout/rolloutBucketing.d.ts.map +0 -1
- package/dist/rollout/rolloutBucketing.js.map +0 -1
- package/dist/rollout/rolloutHashing.d.ts.map +0 -1
- package/dist/rollout/rolloutHashing.js.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/utils.helper.d.ts.map +0 -1
- package/dist/utils/utils.helper.js.map +0 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { createFeatureFlagRegistry } from "../registry/registry.core.js";
|
|
9
9
|
import { evaluateFlag } from "../evaluator/evaluator.core.js";
|
|
10
|
-
import { FeatureFlagNotFoundError } from "../featureFlagErrors/featureFlagError.types.js";
|
|
10
|
+
import { FeatureFlagNotFoundError, FeatureFlagProviderError, } from "../featureFlagErrors/featureFlagError.types.js";
|
|
11
11
|
import { resolveDependencies, mergeContext } from "./featureFlags.resolve.js";
|
|
12
12
|
/**
|
|
13
13
|
* Create a FeatureFlags instance.
|
|
@@ -16,45 +16,99 @@ import { resolveDependencies, mergeContext } from "./featureFlags.resolve.js";
|
|
|
16
16
|
* @returns A FeatureFlags API object.
|
|
17
17
|
*/
|
|
18
18
|
export function createFeatureFlags(options) {
|
|
19
|
-
const { provider, defaultContext = {}, throwOnMissing = false } = options;
|
|
19
|
+
const { provider, defaultContext = {}, throwOnMissing = false, onError, throwOnProviderError = false, } = options;
|
|
20
20
|
let registry = createFeatureFlagRegistry();
|
|
21
|
+
let loaded = false;
|
|
22
|
+
/**
|
|
23
|
+
* Report a provider failure, or rethrow it when the caller asked to own it.
|
|
24
|
+
*
|
|
25
|
+
* @returns `false` when the failure was contained.
|
|
26
|
+
*/
|
|
27
|
+
function handleProviderError(error, source) {
|
|
28
|
+
if (throwOnProviderError)
|
|
29
|
+
throw error;
|
|
30
|
+
onError?.(error instanceof Error
|
|
31
|
+
? error
|
|
32
|
+
: new FeatureFlagProviderError(`Provider ${source} failed.`, {
|
|
33
|
+
cause: error,
|
|
34
|
+
}), source);
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
21
37
|
async function load() {
|
|
22
|
-
|
|
23
|
-
|
|
38
|
+
try {
|
|
39
|
+
const flags = await provider.getAll();
|
|
40
|
+
registry = createFeatureFlagRegistry(flags);
|
|
41
|
+
loaded = true;
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return handleProviderError(error, "FeatureFlagProvider.getAll");
|
|
46
|
+
}
|
|
24
47
|
}
|
|
25
48
|
async function ensureLoaded() {
|
|
26
|
-
|
|
27
|
-
|
|
49
|
+
// Keyed on whether a load has ever succeeded, not on `registry.size`: a
|
|
50
|
+
// provider that legitimately holds no flags used to be re-queried on
|
|
51
|
+
// every single evaluation.
|
|
52
|
+
if (loaded)
|
|
53
|
+
return true;
|
|
54
|
+
return load();
|
|
28
55
|
}
|
|
29
56
|
async function resolveFlag(key) {
|
|
30
|
-
|
|
31
|
-
if (
|
|
32
|
-
|
|
57
|
+
const known = registry.get(key);
|
|
58
|
+
if (known)
|
|
59
|
+
return known;
|
|
60
|
+
try {
|
|
61
|
+
const flag = await provider.get(key);
|
|
33
62
|
if (flag)
|
|
34
63
|
registry.set(flag);
|
|
64
|
+
return flag;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
handleProviderError(error, "FeatureFlagProvider.get");
|
|
68
|
+
return undefined;
|
|
35
69
|
}
|
|
36
|
-
return flag;
|
|
37
70
|
}
|
|
38
|
-
|
|
71
|
+
// A provider that can announce changes is asked to: without this, a flag
|
|
72
|
+
// flipped at the source never reached an already-loaded instance until
|
|
73
|
+
// somebody called refresh() by hand.
|
|
74
|
+
let unsubscribe = provider.subscribe?.((flags) => {
|
|
75
|
+
registry = createFeatureFlagRegistry(flags);
|
|
76
|
+
loaded = true;
|
|
77
|
+
});
|
|
78
|
+
const api = {
|
|
39
79
|
async isEnabled(key, context) {
|
|
40
|
-
const result = await
|
|
41
|
-
|
|
80
|
+
const result = await api.evaluate(key, context);
|
|
81
|
+
// Strictly `true`. Returning the raw value meant a flag holding a
|
|
82
|
+
// string or a number — "off", 0.5, a config object — came back truthy
|
|
83
|
+
// from a method whose whole contract is a boolean.
|
|
84
|
+
return result.value === true;
|
|
42
85
|
},
|
|
43
86
|
async get(key, context) {
|
|
44
|
-
const result = await
|
|
87
|
+
const result = await api.evaluate(key, context);
|
|
45
88
|
return result.value;
|
|
46
89
|
},
|
|
47
90
|
async getBoolean(key, defaultValue, context) {
|
|
48
|
-
const result = await
|
|
49
|
-
if (result.reason === "not_found")
|
|
91
|
+
const result = await api.evaluate(key, context);
|
|
92
|
+
if (result.reason === "not_found" || result.reason === "error") {
|
|
50
93
|
return defaultValue;
|
|
51
|
-
|
|
94
|
+
}
|
|
95
|
+
return typeof result.value === "boolean" ? result.value : defaultValue;
|
|
52
96
|
},
|
|
53
97
|
async evaluate(key, context) {
|
|
54
|
-
await ensureLoaded();
|
|
98
|
+
const available = await ensureLoaded();
|
|
55
99
|
const mergedCtx = mergeContext(defaultContext, context);
|
|
56
100
|
const flag = await resolveFlag(key);
|
|
57
101
|
if (!flag) {
|
|
102
|
+
if (!available) {
|
|
103
|
+
// The store could not be reached and nothing is known about this
|
|
104
|
+
// flag. Report it as an error, not as a decision.
|
|
105
|
+
return {
|
|
106
|
+
key,
|
|
107
|
+
value: undefined,
|
|
108
|
+
reason: "error",
|
|
109
|
+
defaulted: true,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
58
112
|
if (throwOnMissing)
|
|
59
113
|
throw new FeatureFlagNotFoundError(key);
|
|
60
114
|
return {
|
|
@@ -64,17 +118,10 @@ export function createFeatureFlags(options) {
|
|
|
64
118
|
defaulted: true,
|
|
65
119
|
};
|
|
66
120
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
value: flag.defaultValue,
|
|
72
|
-
reason: "dependency_disabled",
|
|
73
|
-
defaulted: true,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return evaluateFlag(flag, mergedCtx);
|
|
121
|
+
const dependenciesSatisfied = !flag.dependencies ||
|
|
122
|
+
flag.dependencies.length === 0 ||
|
|
123
|
+
resolveDependencies(key, registry);
|
|
124
|
+
return evaluateFlag(flag, mergedCtx, { dependenciesSatisfied });
|
|
78
125
|
},
|
|
79
126
|
async snapshot(context) {
|
|
80
127
|
await ensureLoaded();
|
|
@@ -82,20 +129,36 @@ export function createFeatureFlags(options) {
|
|
|
82
129
|
const flags = registry.getAll();
|
|
83
130
|
const results = new Map();
|
|
84
131
|
for (const flag of flags) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
132
|
+
// Only flags explicitly marked client-visible. A flag that declares
|
|
133
|
+
// no visibility stays server-side: a snapshot is shipped to a
|
|
134
|
+
// browser, so the safe default is to withhold.
|
|
135
|
+
if (flag.visibility !== "client")
|
|
136
|
+
continue;
|
|
137
|
+
const dependenciesSatisfied = !flag.dependencies ||
|
|
138
|
+
flag.dependencies.length === 0 ||
|
|
139
|
+
resolveDependencies(flag.key, registry);
|
|
140
|
+
results.set(flag.key, evaluateFlag(flag, mergedCtx, { dependenciesSatisfied }));
|
|
88
141
|
}
|
|
89
142
|
return results;
|
|
90
143
|
},
|
|
91
144
|
async refresh() {
|
|
92
|
-
|
|
145
|
+
try {
|
|
146
|
+
await provider.refresh?.();
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
handleProviderError(error, "FeatureFlagProvider.refresh");
|
|
150
|
+
}
|
|
93
151
|
await load();
|
|
94
152
|
},
|
|
95
153
|
async getAll() {
|
|
96
154
|
await ensureLoaded();
|
|
97
155
|
return registry.getAll();
|
|
98
156
|
},
|
|
157
|
+
close() {
|
|
158
|
+
unsubscribe?.();
|
|
159
|
+
unsubscribe = undefined;
|
|
160
|
+
},
|
|
99
161
|
};
|
|
162
|
+
return api;
|
|
100
163
|
}
|
|
101
164
|
//# sourceMappingURL=featureFlags.core.js.map
|
|
@@ -10,10 +10,11 @@ import type { FeatureFlagRegistry } from "../registry/registry.core.js";
|
|
|
10
10
|
*
|
|
11
11
|
* @param key - The flag key to resolve.
|
|
12
12
|
* @param registry - The flag registry.
|
|
13
|
-
* @param
|
|
14
|
-
* @
|
|
13
|
+
* @param chain - Keys on the current resolution path, for cycle detection.
|
|
14
|
+
* @param satisfied - Keys already proved satisfied, to avoid re-walking them.
|
|
15
|
+
* @returns True if the flag and all its transitive dependencies are enabled.
|
|
15
16
|
*/
|
|
16
|
-
export declare function resolveDependencies(key: string, registry: FeatureFlagRegistry,
|
|
17
|
+
export declare function resolveDependencies(key: string, registry: FeatureFlagRegistry, chain?: Set<string>, satisfied?: Set<string>): boolean;
|
|
17
18
|
/**
|
|
18
19
|
* Merge default context with provided context.
|
|
19
20
|
*/
|
|
@@ -8,23 +8,40 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @param key - The flag key to resolve.
|
|
10
10
|
* @param registry - The flag registry.
|
|
11
|
-
* @param
|
|
12
|
-
* @
|
|
11
|
+
* @param chain - Keys on the current resolution path, for cycle detection.
|
|
12
|
+
* @param satisfied - Keys already proved satisfied, to avoid re-walking them.
|
|
13
|
+
* @returns True if the flag and all its transitive dependencies are enabled.
|
|
13
14
|
*/
|
|
14
|
-
export function resolveDependencies(key, registry,
|
|
15
|
-
|
|
15
|
+
export function resolveDependencies(key, registry, chain = new Set(), satisfied = new Set()) {
|
|
16
|
+
// A key already proved good on another branch is good here too. Reusing one
|
|
17
|
+
// "visited" set for both jobs meant a diamond — A depends on B and C, both
|
|
18
|
+
// of which depend on D — reported D as a cycle the second time it was
|
|
19
|
+
// reached and disabled A.
|
|
20
|
+
if (satisfied.has(key))
|
|
21
|
+
return true;
|
|
22
|
+
if (chain.has(key))
|
|
16
23
|
return false;
|
|
17
|
-
|
|
24
|
+
chain.add(key);
|
|
18
25
|
const flag = registry.get(key);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (!flag.dependencies || flag.dependencies.length === 0)
|
|
22
|
-
return true;
|
|
23
|
-
for (const dep of flag.dependencies) {
|
|
24
|
-
if (!resolveDependencies(dep, registry, visited))
|
|
26
|
+
try {
|
|
27
|
+
if (!flag || !flag.enabled)
|
|
25
28
|
return false;
|
|
29
|
+
if (!flag.dependencies || flag.dependencies.length === 0) {
|
|
30
|
+
satisfied.add(key);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
for (const dep of flag.dependencies) {
|
|
34
|
+
if (!resolveDependencies(dep, registry, chain, satisfied))
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
satisfied.add(key);
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
// Leaving the key in the chain would make a sibling branch see a cycle
|
|
42
|
+
// that is not there.
|
|
43
|
+
chain.delete(key);
|
|
26
44
|
}
|
|
27
|
-
return true;
|
|
28
45
|
}
|
|
29
46
|
/**
|
|
30
47
|
* Merge default context with provided context.
|
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export { FeatureFlagNotFoundError, FeatureFlagProviderError, FeatureFlagEvaluati
|
|
|
12
12
|
export { hashString } from "./rollout/rolloutHashing.js";
|
|
13
13
|
export { getBucket, isInRollout } from "./rollout/rolloutBucketing.js";
|
|
14
14
|
export { createMemoryProvider } from "./provider/providerMemory.core.js";
|
|
15
|
+
export type { MemoryFeatureFlagProvider } from "./provider/providerMemory.core.js";
|
|
15
16
|
export { createEnvironmentProvider } from "./provider/providerEnvironment.core.js";
|
|
16
17
|
export type { EnvironmentProviderOptions } from "./provider/providerEnvironment.core.js";
|
|
17
18
|
export { createCompositeProvider } from "./provider/providerComposite.core.js";
|
|
@@ -21,9 +22,11 @@ export { resolvePath, matchAttribute } from "./evaluator/evaluatorAttribute.js";
|
|
|
21
22
|
export { evaluateRule } from "./evaluator/evaluatorRule.core.js";
|
|
22
23
|
export type { RuleEvaluationResult } from "./evaluator/evaluatorRule.core.js";
|
|
23
24
|
export { evaluateFlag } from "./evaluator/evaluator.core.js";
|
|
25
|
+
export type { EvaluateFlagOptions } from "./evaluator/evaluator.core.js";
|
|
24
26
|
export { createFeatureFlagRegistry } from "./registry/registry.core.js";
|
|
25
27
|
export type { FeatureFlagRegistry } from "./registry/registry.core.js";
|
|
26
28
|
export { createFeatureFlags } from "./featureFlags/featureFlags.core.js";
|
|
27
|
-
export type { FeatureFlagsOptions } from "./featureFlags/featureFlags.core.js";
|
|
29
|
+
export type { FeatureFlags, FeatureFlagsOptions, } from "./featureFlags/featureFlags.core.js";
|
|
30
|
+
export { resolveDependencies, mergeContext, } from "./featureFlags/featureFlags.resolve.js";
|
|
28
31
|
export { isPlainObject, valuesEqual } from "./utils/utils.helper.js";
|
|
29
32
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -24,6 +24,7 @@ export { evaluateFlag } from "./evaluator/evaluator.core.js";
|
|
|
24
24
|
export { createFeatureFlagRegistry } from "./registry/registry.core.js";
|
|
25
25
|
// ─── FeatureFlags ─────────────────────────────────────────────────────────
|
|
26
26
|
export { createFeatureFlags } from "./featureFlags/featureFlags.core.js";
|
|
27
|
+
export { resolveDependencies, mergeContext, } from "./featureFlags/featureFlags.resolve.js";
|
|
27
28
|
// ─── Utils ────────────────────────────────────────────────────────────────
|
|
28
29
|
export { isPlainObject, valuesEqual } from "./utils/utils.helper.js";
|
|
29
30
|
//# sourceMappingURL=index.js.map
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module provider/providerCached
|
|
7
7
|
*/
|
|
8
|
-
import type { FeatureFlagProvider } from "../featureFlagTypes/featureFlagProvider.js";
|
|
8
|
+
import type { FeatureFlagProvider, RefreshableFeatureFlagProvider } from "../featureFlagTypes/featureFlagProvider.js";
|
|
9
9
|
/** Options for the cached provider. */
|
|
10
10
|
export interface CachedProviderOptions {
|
|
11
11
|
/** Time-to-live in milliseconds (default: 30,000). */
|
|
@@ -16,7 +16,7 @@ export interface CachedProviderOptions {
|
|
|
16
16
|
*
|
|
17
17
|
* @param inner - The upstream provider to cache.
|
|
18
18
|
* @param options - Caching options.
|
|
19
|
-
* @returns A
|
|
19
|
+
* @returns A provider with in-memory TTL caching.
|
|
20
20
|
*/
|
|
21
|
-
export declare function createCachedProvider(inner: FeatureFlagProvider, options?: CachedProviderOptions):
|
|
21
|
+
export declare function createCachedProvider(inner: FeatureFlagProvider, options?: CachedProviderOptions): RefreshableFeatureFlagProvider;
|
|
22
22
|
//# sourceMappingURL=providerCached.core.d.ts.map
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @param inner - The upstream provider to cache.
|
|
12
12
|
* @param options - Caching options.
|
|
13
|
-
* @returns A
|
|
13
|
+
* @returns A provider with in-memory TTL caching.
|
|
14
14
|
*/
|
|
15
15
|
export function createCachedProvider(inner, options = {}) {
|
|
16
16
|
const ttl = options.ttl ?? 30_000;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @module provider/providerComposite
|
|
7
7
|
*/
|
|
8
|
-
import type { FeatureFlagProvider } from "../featureFlagTypes/featureFlagProvider.js";
|
|
8
|
+
import type { FeatureFlagProvider, RefreshableFeatureFlagProvider } from "../featureFlagTypes/featureFlagProvider.js";
|
|
9
9
|
/**
|
|
10
10
|
* Create a composite provider that queries providers in order.
|
|
11
11
|
*
|
|
@@ -15,5 +15,5 @@ import type { FeatureFlagProvider } from "../featureFlagTypes/featureFlagProvide
|
|
|
15
15
|
* @param providers - Providers to chain, in priority order.
|
|
16
16
|
* @returns A composite FeatureFlagProvider.
|
|
17
17
|
*/
|
|
18
|
-
export declare function createCompositeProvider(providers: readonly FeatureFlagProvider[]):
|
|
18
|
+
export declare function createCompositeProvider(providers: readonly FeatureFlagProvider[]): RefreshableFeatureFlagProvider;
|
|
19
19
|
//# sourceMappingURL=providerComposite.core.d.ts.map
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @module provider/providerEnvironment
|
|
9
9
|
*/
|
|
10
|
-
import type {
|
|
10
|
+
import type { RefreshableFeatureFlagProvider } from "../featureFlagTypes/featureFlagProvider.js";
|
|
11
11
|
/** Options for the environment provider. */
|
|
12
12
|
export interface EnvironmentProviderOptions {
|
|
13
13
|
/** Prefix for environment variable names (default: "FEATURE_"). */
|
|
@@ -19,7 +19,7 @@ export interface EnvironmentProviderOptions {
|
|
|
19
19
|
* Create an environment-variable feature flag provider.
|
|
20
20
|
*
|
|
21
21
|
* @param options - Configuration options.
|
|
22
|
-
* @returns A
|
|
22
|
+
* @returns A provider that reads from environment variables.
|
|
23
23
|
*/
|
|
24
|
-
export declare function createEnvironmentProvider(options?: EnvironmentProviderOptions):
|
|
24
|
+
export declare function createEnvironmentProvider(options?: EnvironmentProviderOptions): RefreshableFeatureFlagProvider;
|
|
25
25
|
//# sourceMappingURL=providerEnvironment.core.d.ts.map
|
|
@@ -24,7 +24,7 @@ function parseEnvValue(raw) {
|
|
|
24
24
|
* Create an environment-variable feature flag provider.
|
|
25
25
|
*
|
|
26
26
|
* @param options - Configuration options.
|
|
27
|
-
* @returns A
|
|
27
|
+
* @returns A provider that reads from environment variables.
|
|
28
28
|
*/
|
|
29
29
|
export function createEnvironmentProvider(options = {}) {
|
|
30
30
|
const prefix = options.prefix ?? "FEATURE_";
|
|
@@ -6,12 +6,28 @@
|
|
|
6
6
|
* @module provider/providerMemory
|
|
7
7
|
*/
|
|
8
8
|
import type { FeatureFlag } from "../featureFlagTypes/featureFlag.interface.js";
|
|
9
|
-
import type { FeatureFlagProvider } from "../featureFlagTypes/featureFlagProvider.js";
|
|
9
|
+
import type { FeatureFlagChangeListener, FeatureFlagProvider, Unsubscribe } from "../featureFlagTypes/featureFlagProvider.js";
|
|
10
|
+
/**
|
|
11
|
+
* An in-memory provider, with the mutation methods it actually has.
|
|
12
|
+
*
|
|
13
|
+
* `createMemoryProvider` used to return `FeatureFlagProvider` through a cast,
|
|
14
|
+
* so `set` and `delete` existed at runtime and were invisible to the type
|
|
15
|
+
* system — callers had to cast to reach them.
|
|
16
|
+
*/
|
|
17
|
+
export interface MemoryFeatureFlagProvider extends FeatureFlagProvider {
|
|
18
|
+
/** Add or update a flag at runtime, notifying subscribers. */
|
|
19
|
+
set(flag: FeatureFlag): void;
|
|
20
|
+
/** Remove a flag by key, notifying subscribers. Returns whether it existed. */
|
|
21
|
+
delete(key: string): boolean;
|
|
22
|
+
/** Replace every flag at once, notifying subscribers. */
|
|
23
|
+
setAll(flags: readonly FeatureFlag[]): void;
|
|
24
|
+
subscribe(listener: FeatureFlagChangeListener): Unsubscribe;
|
|
25
|
+
}
|
|
10
26
|
/**
|
|
11
27
|
* Create an in-memory feature flag provider.
|
|
12
28
|
*
|
|
13
29
|
* @param flags - Initial flag definitions.
|
|
14
30
|
* @returns A FeatureFlagProvider backed by a Map.
|
|
15
31
|
*/
|
|
16
|
-
export declare function createMemoryProvider(flags?: readonly FeatureFlag[]):
|
|
32
|
+
export declare function createMemoryProvider(flags?: readonly FeatureFlag[]): MemoryFeatureFlagProvider;
|
|
17
33
|
//# sourceMappingURL=providerMemory.core.d.ts.map
|
|
@@ -13,23 +13,57 @@
|
|
|
13
13
|
*/
|
|
14
14
|
export function createMemoryProvider(flags = []) {
|
|
15
15
|
const store = new Map();
|
|
16
|
+
const listeners = new Set();
|
|
16
17
|
for (const flag of flags) {
|
|
17
18
|
store.set(flag.key, Object.freeze({ ...flag }));
|
|
18
19
|
}
|
|
20
|
+
function snapshot() {
|
|
21
|
+
return [...store.values()];
|
|
22
|
+
}
|
|
23
|
+
/** Announce a change so an already-loaded consumer picks it up. */
|
|
24
|
+
function notify() {
|
|
25
|
+
if (listeners.size === 0)
|
|
26
|
+
return;
|
|
27
|
+
const current = snapshot();
|
|
28
|
+
for (const listener of listeners) {
|
|
29
|
+
// A broken listener must not stop the others, or the mutation itself.
|
|
30
|
+
try {
|
|
31
|
+
listener(current);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
/* listener failures are the listener's problem */
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
19
38
|
return {
|
|
20
39
|
async get(key) {
|
|
21
40
|
return store.get(key);
|
|
22
41
|
},
|
|
23
42
|
async getAll() {
|
|
24
|
-
return
|
|
43
|
+
return snapshot();
|
|
25
44
|
},
|
|
26
|
-
/** Add or update a flag at runtime. */
|
|
27
45
|
set(flag) {
|
|
28
46
|
store.set(flag.key, Object.freeze({ ...flag }));
|
|
47
|
+
notify();
|
|
29
48
|
},
|
|
30
|
-
/** Remove a flag by key. */
|
|
31
49
|
delete(key) {
|
|
32
|
-
|
|
50
|
+
const existed = store.delete(key);
|
|
51
|
+
if (existed)
|
|
52
|
+
notify();
|
|
53
|
+
return existed;
|
|
54
|
+
},
|
|
55
|
+
setAll(next) {
|
|
56
|
+
store.clear();
|
|
57
|
+
for (const flag of next) {
|
|
58
|
+
store.set(flag.key, Object.freeze({ ...flag }));
|
|
59
|
+
}
|
|
60
|
+
notify();
|
|
61
|
+
},
|
|
62
|
+
subscribe(listener) {
|
|
63
|
+
listeners.add(listener);
|
|
64
|
+
return () => {
|
|
65
|
+
listeners.delete(listener);
|
|
66
|
+
};
|
|
33
67
|
},
|
|
34
68
|
};
|
|
35
69
|
}
|
package/package.json
CHANGED
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zudojs/feature-flags",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Feature flag system with deterministic rollouts, rule engine, providers, variants, snapshots, and evaluation context.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": {
|
|
9
|
-
"
|
|
10
|
-
"
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.js"
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@zudojs/errors": "0.0
|
|
14
|
+
"@zudojs/errors": "1.0.0"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"typescript": "
|
|
17
|
+
"typescript": "7.0.2",
|
|
18
18
|
"vitest": "^4.1.11"
|
|
19
19
|
},
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"type": "module",
|
|
22
22
|
"files": [
|
|
23
|
-
"dist"
|
|
23
|
+
"dist",
|
|
24
|
+
"!dist/**/*.map",
|
|
25
|
+
"!dist/**/*.tsbuildinfo",
|
|
26
|
+
"!dist/.tsbuildinfo"
|
|
24
27
|
],
|
|
25
28
|
"publishConfig": {
|
|
26
29
|
"access": "public"
|
|
@@ -36,14 +39,19 @@
|
|
|
36
39
|
"a-b-testing"
|
|
37
40
|
],
|
|
38
41
|
"homepage": "https://github.com/oyinlola-tech/zudo#readme",
|
|
42
|
+
"bugs": {
|
|
43
|
+
"url": "https://github.com/oyinlola-tech/zudo/issues"
|
|
44
|
+
},
|
|
39
45
|
"repository": {
|
|
40
46
|
"type": "git",
|
|
41
|
-
"url": "https://github.com/oyinlola-tech/zudo"
|
|
47
|
+
"url": "https://github.com/oyinlola-tech/zudo",
|
|
48
|
+
"directory": "packages/feature-flags"
|
|
42
49
|
},
|
|
43
50
|
"scripts": {
|
|
44
51
|
"build": "tsc -p tsconfig.json",
|
|
45
|
-
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
52
|
+
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
|
|
46
53
|
"test": "vitest run",
|
|
47
|
-
"test:watch": "vitest"
|
|
54
|
+
"test:watch": "vitest",
|
|
55
|
+
"clean": "rm -rf dist *.tsbuildinfo"
|
|
48
56
|
}
|
|
49
57
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.core.d.ts","sourceRoot":"","sources":["../../src/evaluator/evaluator.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AACrG,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,8CAA8C,CAAC;AAGtD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,MAAM,SAAS,gBAAgB,GAAG,gBAAgB,EAElD,IAAI,EAAE,WAAW,EACjB,OAAO,GAAE,kBAAuB,GAC/B,qBAAqB,CAAC,MAAM,CAAC,CA8E/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.core.js","sourceRoot":"","sources":["../../src/evaluator/evaluator.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evaluatorAttribute.d.ts","sourceRoot":"","sources":["../../src/evaluator/evaluatorAttribute.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AAEvG;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAgB/D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,EAAE,OAAO,GAChB,OAAO,CA4ET"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evaluatorAttribute.js","sourceRoot":"","sources":["../../src/evaluator/evaluatorAttribute.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY,EAAE,IAAY;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IACE,OAAO,KAAK,IAAI;YAChB,OAAO,KAAK,SAAS;YACrB,OAAO,OAAO,KAAK,QAAQ,EAC3B,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAe,EACf,QAA6B,EAC7B,QAAiB;IAEjB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,MAAM,KAAK,QAAQ,CAAC;QAE7B,KAAK,YAAY;YACf,OAAO,MAAM,KAAK,QAAQ,CAAC;QAE7B,KAAK,UAAU;YACb,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;gBAC1B,OAAO,QAAQ,KAAK,QAAQ;gBAC5B,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC1B,CAAC;QAEJ,KAAK,aAAa;YAChB,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;gBAC1B,OAAO,QAAQ,KAAK,QAAQ;gBAC5B,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC5B,CAAC;QAEJ,KAAK,WAAW;YACd,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;gBAC1B,OAAO,QAAQ,KAAK,QAAQ;gBAC5B,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC1B,CAAC;QAEJ,KAAK,IAAI;YACP,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE9D,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE/D,KAAK,cAAc;YACjB,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;gBAC1B,OAAO,QAAQ,KAAK,QAAQ;gBAC5B,MAAM,GAAG,QAAQ,CAClB,CAAC;QAEJ,KAAK,uBAAuB;YAC1B,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;gBAC1B,OAAO,QAAQ,KAAK,QAAQ;gBAC5B,MAAM,IAAI,QAAQ,CACnB,CAAC;QAEJ,KAAK,WAAW;YACd,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;gBAC1B,OAAO,QAAQ,KAAK,QAAQ;gBAC5B,MAAM,GAAG,QAAQ,CAClB,CAAC;QAEJ,KAAK,oBAAoB;YACvB,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;gBAC1B,OAAO,QAAQ,KAAK,QAAQ;gBAC5B,MAAM,IAAI,QAAQ,CACnB,CAAC;QAEJ,KAAK,QAAQ;YACX,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,CAAC;QAEjD,KAAK,SAAS;YACZ,OAAO,CACL,OAAO,MAAM,KAAK,QAAQ;gBAC1B,OAAO,QAAQ,KAAK,QAAQ;gBAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAClC,CAAC;QAEJ;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evaluatorRule.core.d.ts","sourceRoot":"","sources":["../../src/evaluator/evaluatorRule.core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AACnG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AAIrG,0CAA0C;AAC1C,MAAM,WAAW,oBAAoB;IACnC,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAClC,iDAAiD;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,eAAe,EACrB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,MAAM,GACd,oBAAoB,CAkEtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"evaluatorRule.core.js","sourceRoot":"","sources":["../../src/evaluator/evaluatorRule.core.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evaluator/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/evaluator/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagError.base.d.ts","sourceRoot":"","sources":["../../src/featureFlagErrors/featureFlagError.base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACd,MAAM,gBAAgB,CAAC;AAExB,iDAAiD;AACjD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,YAAmB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,EAUxE;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagError.base.js","sourceRoot":"","sources":["../../src/featureFlagErrors/featureFlagError.base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAiB7D;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,gBAAgB;IACpD,YAAmB,OAAe,EAAE,OAAO,GAA4B,EAAE;QACvE,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO;YACvC,QAAQ,EAAE,OAAO,CAAC,QAAqC;YACvD,QAAQ,EAAE,OAAO,CAAC,QAAqC;YACvD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagError.types.d.ts","sourceRoot":"","sources":["../../src/featureFlagErrors/featureFlagError.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,2DAA2D;AAC3D,qBAAa,wBAAyB,SAAQ,gBAAgB;IAC5D,YAAmB,GAAG,EAAE,MAAM,EAO7B;CACF;AAED,iDAAiD;AACjD,qBAAa,wBAAyB,SAAQ,gBAAgB;IAC5D,YACE,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAQnE;CACF;AAED,uDAAuD;AACvD,qBAAa,0BAA2B,SAAQ,gBAAgB;IAC9D,YAAmB,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAM7C;CACF;AAED,0CAA0C;AAC1C,qBAAa,oBAAqB,SAAQ,gBAAgB;IACxD,YAAmB,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAM7C;CACF;AAED,kDAAkD;AAClD,qBAAa,0BAA2B,SAAQ,gBAAgB;IAC9D,YAAmB,KAAK,EAAE,SAAS,MAAM,EAAE,EAM1C;CACF;AAED,iDAAiD;AACjD,qBAAa,6BAA8B,SAAQ,gBAAgB;IACjE,YAAmB,OAAO,EAAE,MAAM,EAKjC;CACF;AAED,uDAAuD;AACvD,qBAAa,oBAAqB,SAAQ,gBAAgB;IACxD,YAAmB,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAM/D;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagError.types.js","sourceRoot":"","sources":["../../src/featureFlagErrors/featureFlagError.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,2DAA2D;AAC3D,MAAM,OAAO,wBAAyB,SAAQ,gBAAgB;IAC5D,YAAmB,GAAW;QAC5B,KAAK,CAAC,4BAA4B,GAAG,IAAI,EAAE;YACzC,IAAI,EAAE,SAAS,CAAC,sBAAsB;YACtC,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,EAAE,GAAG,EAAE;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,iDAAiD;AACjD,MAAM,OAAO,wBAAyB,SAAQ,gBAAgB;IAC5D,YACE,OAAe,EACf,OAAkE;QAElE,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,SAAS,CAAC,qBAAqB;YACrC,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;SACzE,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,uDAAuD;AACvD,MAAM,OAAO,0BAA2B,SAAQ,gBAAgB;IAC9D,YAAmB,GAAW,EAAE,MAAc;QAC5C,KAAK,CAAC,+BAA+B,GAAG,MAAM,MAAM,GAAG,EAAE;YACvD,IAAI,EAAE,SAAS,CAAC,uBAAuB;YACvC,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,0CAA0C;AAC1C,MAAM,OAAO,oBAAqB,SAAQ,gBAAgB;IACxD,YAAmB,GAAW,EAAE,MAAc;QAC5C,KAAK,CAAC,0BAA0B,GAAG,MAAM,MAAM,GAAG,EAAE;YAClD,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,kDAAkD;AAClD,MAAM,OAAO,0BAA2B,SAAQ,gBAAgB;IAC9D,YAAmB,KAAwB;QACzC,KAAK,CAAC,2CAA2C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACrE,IAAI,EAAE,SAAS,CAAC,uBAAuB;YACvC,QAAQ,EAAE,EAAE,KAAK,EAAE;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,iDAAiD;AACjD,MAAM,OAAO,6BAA8B,SAAQ,gBAAgB;IACjE,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,SAAS,CAAC,0BAA0B;SAC3C,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC;IAC9C,CAAC;CACF;AAED,uDAAuD;AACvD,MAAM,OAAO,oBAAqB,SAAQ,gBAAgB;IACxD,YAAmB,GAAW,EAAE,QAAgB,EAAE,MAAc;QAC9D,KAAK,CAAC,SAAS,GAAG,cAAc,QAAQ,YAAY,MAAM,GAAG,EAAE;YAC7D,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/featureFlagErrors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,YAAY,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAE1E,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EACpB,0BAA0B,EAC1B,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,6BAA6B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/featureFlagErrors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EACpB,0BAA0B,EAC1B,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,6BAA6B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlag.interface.d.ts","sourceRoot":"","sources":["../../src/featureFlagTypes/featureFlag.interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EACnB,MAAM,2CAA2C,CAAC;AAEnD,qCAAqC;AACrC,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAC1B,6BAA6B;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAC1B,kCAAkC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,kCAAkC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAClC,wBAAwB;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC;IAC5C,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAClD,0CAA0C;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,2BAA2B;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CACzC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlag.interface.js","sourceRoot":"","sources":["../../src/featureFlagTypes/featureFlag.interface.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagContext.d.ts","sourceRoot":"","sources":["../../src/featureFlagTypes/featureFlagContext.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iEAAiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,yCAAyC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,gCAAgC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagContext.js","sourceRoot":"","sources":["../../src/featureFlagTypes/featureFlagContext.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagEvaluation.d.ts","sourceRoot":"","sources":["../../src/featureFlagTypes/featureFlagEvaluation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAEnF,iDAAiD;AACjD,MAAM,MAAM,2BAA2B,GACnC,SAAS,GACT,QAAQ,GACR,YAAY,GACZ,cAAc,GACd,oBAAoB,GACpB,oBAAoB,GACpB,UAAU,GACV,WAAW,GACX,OAAO,GACP,qBAAqB,GACrB,SAAS,CAAC;AAEd,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB,CAAC,MAAM,GAAG,gBAAgB;IAC9D,uCAAuC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC;IAC7C,sCAAsC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,wCAAwC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,0CAA0C;IAC1C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagEvaluation.js","sourceRoot":"","sources":["../../src/featureFlagTypes/featureFlagEvaluation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagProvider.d.ts","sourceRoot":"","sources":["../../src/featureFlagTypes/featureFlagProvider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,yCAAyC;AACzC,MAAM,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,KAAK,IAAI,CAAC;AAEhF,sDAAsD;AACtD,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IACnD,0BAA0B;IAC1B,MAAM,IAAI,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IAC1C,+CAA+C;IAC/C,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,2CAA2C;IAC3C,SAAS,CAAC,CAAC,QAAQ,EAAE,yBAAyB,GAAG,WAAW,CAAC;CAC9D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagProvider.js","sourceRoot":"","sources":["../../src/featureFlagTypes/featureFlagProvider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|